@skyux/tiles 12.9.0 → 12.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/fesm2022/skyux-tiles.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Component, InjectionToken, inject, NgModule, EventEmitter, computed, effect, Output, Injectable, ElementRef, ContentChild, ViewChild, Input, Optional, ViewContainerRef, ViewChildren } from '@angular/core';
|
|
2
|
+
import { Component, InjectionToken, inject, NgModule, EventEmitter, DestroyRef, RendererFactory2, computed, effect, Output, Injectable, ElementRef, ContentChild, ViewChild, Input, Optional, ViewContainerRef, ViewChildren } from '@angular/core';
|
|
3
3
|
import * as i1 from '@skyux/core';
|
|
4
4
|
import { SkyTrimModule, SkyMediaQueryService, SkyDynamicComponentService, SkyUIConfigService, SkyLogService, SkyIdModule, SkyIdService } from '@skyux/core';
|
|
5
5
|
import * as i4 from '@angular/common';
|
|
@@ -17,7 +17,7 @@ import { Subject } from 'rxjs';
|
|
|
17
17
|
import { take, takeUntil } from 'rxjs/operators';
|
|
18
18
|
import * as i2 from '@skyux/i18n';
|
|
19
19
|
import { SkyLibResourcesService, SkyI18nModule } from '@skyux/i18n';
|
|
20
|
-
import { toSignal } from '@angular/core/rxjs-interop';
|
|
20
|
+
import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
21
21
|
import * as i3$1 from 'ng2-dragula';
|
|
22
22
|
import { DragulaService, DragulaModule } from 'ng2-dragula';
|
|
23
23
|
|
|
@@ -116,8 +116,10 @@ class SkyTileDashboardService {
|
|
|
116
116
|
#settingsKey;
|
|
117
117
|
#tileComponents;
|
|
118
118
|
#breakpoint;
|
|
119
|
+
#destroyRef;
|
|
119
120
|
#dragulaService;
|
|
120
121
|
#dynamicComponentService;
|
|
122
|
+
#renderer;
|
|
121
123
|
#uiConfigService;
|
|
122
124
|
#mode;
|
|
123
125
|
constructor() {
|
|
@@ -130,8 +132,10 @@ class SkyTileDashboardService {
|
|
|
130
132
|
*/
|
|
131
133
|
this.dashboardInitialized = new EventEmitter();
|
|
132
134
|
this.#breakpoint = toSignal(inject(SkyMediaQueryService).breakpointChange);
|
|
135
|
+
this.#destroyRef = inject(DestroyRef);
|
|
133
136
|
this.#dragulaService = inject(DragulaService);
|
|
134
137
|
this.#dynamicComponentService = inject(SkyDynamicComponentService);
|
|
138
|
+
this.#renderer = inject(RendererFactory2).createRenderer(undefined, null);
|
|
135
139
|
this.#uiConfigService = inject(SkyUIConfigService);
|
|
136
140
|
this.#mode = computed(() => {
|
|
137
141
|
const breakpoint = this.#breakpoint();
|
|
@@ -148,34 +152,39 @@ class SkyTileDashboardService {
|
|
|
148
152
|
* @internal
|
|
149
153
|
*/
|
|
150
154
|
init(config, columns, singleColumn, settingsKey) {
|
|
155
|
+
// Clone this so changes to the config object outside of this class don't modify
|
|
156
|
+
// the config used inside and vice versa.
|
|
157
|
+
this.#config = Object.assign({}, config);
|
|
158
|
+
// Verify that all tiles are accounted for in the layout.
|
|
159
|
+
const tileIds = [
|
|
160
|
+
...new Set([
|
|
161
|
+
...this.#config.layout.multiColumn.flatMap((column) => column.tiles.map(({ id }) => id)),
|
|
162
|
+
...this.#config.layout.singleColumn.tiles.map(({ id }) => id),
|
|
163
|
+
]),
|
|
164
|
+
];
|
|
165
|
+
this.#checkForNewTiles(this.#config, tileIds);
|
|
151
166
|
if (settingsKey) {
|
|
152
|
-
// Clone this so changes to the config object outside of this class don't modify
|
|
153
|
-
// the config used inside and vice versa.
|
|
154
|
-
this.#config = Object.assign({}, config);
|
|
155
167
|
this.#settingsKey = settingsKey;
|
|
156
168
|
this.#uiConfigService
|
|
157
|
-
.getConfig(settingsKey, config)
|
|
158
|
-
.pipe(take(1))
|
|
159
|
-
.subscribe(
|
|
160
|
-
|
|
161
|
-
this.#config
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
this.#checkReadyAndLoadTiles();
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
//
|
|
170
|
-
this.#
|
|
171
|
-
}
|
|
172
|
-
}, () => {
|
|
173
|
-
// Config setting key doesn't exist or other config service error
|
|
174
|
-
this.#initToDefaults(config, columns, singleColumn);
|
|
169
|
+
.getConfig(settingsKey, this.#config)
|
|
170
|
+
.pipe(take(1), takeUntilDestroyed(this.#destroyRef))
|
|
171
|
+
.subscribe({
|
|
172
|
+
next: (value) => {
|
|
173
|
+
if (this.#config && value.persisted) {
|
|
174
|
+
this.#config.layout = value.layout;
|
|
175
|
+
this.#checkForNewTiles(this.#config, value.tileIds);
|
|
176
|
+
this.configChange.emit(this.#config);
|
|
177
|
+
}
|
|
178
|
+
this.#checkReadyAndLoadTiles(columns, singleColumn);
|
|
179
|
+
},
|
|
180
|
+
error: () => {
|
|
181
|
+
// Config setting key doesn't exist or other config service error
|
|
182
|
+
this.#checkReadyAndLoadTiles(columns, singleColumn);
|
|
183
|
+
},
|
|
175
184
|
});
|
|
176
185
|
}
|
|
177
186
|
else {
|
|
178
|
-
this.#
|
|
187
|
+
this.#checkReadyAndLoadTiles(columns, singleColumn);
|
|
179
188
|
}
|
|
180
189
|
}
|
|
181
190
|
/**
|
|
@@ -204,7 +213,6 @@ class SkyTileDashboardService {
|
|
|
204
213
|
* @param isCollapsed Indicates whether tiles are collapsed.
|
|
205
214
|
*/
|
|
206
215
|
setAllTilesCollapsed(isCollapsed) {
|
|
207
|
-
/*istanbul ignore else */
|
|
208
216
|
if (this.#config && this.#config.layout.multiColumn) {
|
|
209
217
|
for (const column of this.#config.layout.multiColumn) {
|
|
210
218
|
for (const tile of column.tiles) {
|
|
@@ -252,7 +260,6 @@ class SkyTileDashboardService {
|
|
|
252
260
|
* @internal
|
|
253
261
|
*/
|
|
254
262
|
changeColumnMode(mode) {
|
|
255
|
-
/*istanbul ignore else */
|
|
256
263
|
if (this.#config) {
|
|
257
264
|
if (mode === 'single') {
|
|
258
265
|
this.#moveTilesToSingleColumn();
|
|
@@ -266,16 +273,8 @@ class SkyTileDashboardService {
|
|
|
266
273
|
* @internal
|
|
267
274
|
*/
|
|
268
275
|
getTileComponent(tileId) {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
if (tileComponent.location.nativeElement.getAttribute(ATTR_TILE_ID) ===
|
|
272
|
-
tileId) {
|
|
273
|
-
return tileComponent;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
/*istanbul ignore next */
|
|
278
|
-
return undefined;
|
|
276
|
+
return this.#tileComponents?.find((tileComponent) => tileComponent.location.nativeElement.getAttribute(ATTR_TILE_ID) ===
|
|
277
|
+
tileId);
|
|
279
278
|
}
|
|
280
279
|
/**
|
|
281
280
|
* @internal
|
|
@@ -290,67 +289,83 @@ class SkyTileDashboardService {
|
|
|
290
289
|
if (mode === 'single') {
|
|
291
290
|
column = this.#config.layout.singleColumn;
|
|
292
291
|
}
|
|
293
|
-
else {
|
|
294
|
-
|
|
295
|
-
|
|
292
|
+
else if (this.#config.layout.multiColumn) {
|
|
293
|
+
colIndex = this.#findTileColumnIndex(this.#config.layout.multiColumn, tileId);
|
|
294
|
+
column = this.#config.layout.multiColumn[colIndex];
|
|
296
295
|
}
|
|
297
296
|
if (column && tile && tileId) {
|
|
298
|
-
if (
|
|
299
|
-
mode === 'multi') {
|
|
300
|
-
|
|
301
|
-
const newColumn = this.#config.layout.multiColumn[colIndex + operator];
|
|
302
|
-
if (newColumn) {
|
|
303
|
-
// Move the tile to the end of the new column
|
|
304
|
-
newColumn.tiles.push(tile);
|
|
305
|
-
column.tiles = column.tiles.filter((item) => item !== tile);
|
|
306
|
-
this.#moveTilesToColumn(this.#columns?.toArray()[colIndex + operator], [tile]);
|
|
307
|
-
// Report the change in configuration
|
|
308
|
-
const reportConfig = this.#config;
|
|
309
|
-
reportConfig.movedTile = {
|
|
310
|
-
tileDescription: tileDescription || /* istanbul ignore next */ tile.id,
|
|
311
|
-
column: colIndex + operator + 1,
|
|
312
|
-
position: newColumn.tiles.length,
|
|
313
|
-
};
|
|
314
|
-
this.configChange.emit(reportConfig);
|
|
297
|
+
if (direction === 'left' || direction === 'right') {
|
|
298
|
+
if (mode === 'multi') {
|
|
299
|
+
this.#moveTileArrowLeftRight(tile, tileDescription, direction, colIndex, column, this.#config.layout.multiColumn);
|
|
315
300
|
}
|
|
316
301
|
}
|
|
317
302
|
else {
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
const temp = column.tiles[curIndex + operator];
|
|
323
|
-
column.tiles[curIndex + operator] = tile;
|
|
324
|
-
column.tiles[curIndex] = temp;
|
|
325
|
-
// Get the column element
|
|
326
|
-
let columnEl;
|
|
327
|
-
if (mode === 'single') {
|
|
328
|
-
columnEl = this.#getColumnEl(this.#singleColumn);
|
|
329
|
-
}
|
|
330
|
-
else {
|
|
331
|
-
columnEl = this.#getColumnEl(this.#columns?.toArray()[colIndex]);
|
|
332
|
-
}
|
|
333
|
-
// Move the tile element in the document
|
|
334
|
-
if (curIndex + operator === column.tiles.length - 1) {
|
|
335
|
-
columnEl?.appendChild(tileComponentInstance.location.nativeElement);
|
|
336
|
-
}
|
|
337
|
-
else {
|
|
338
|
-
columnEl?.insertBefore(tileComponentInstance.location.nativeElement, this.getTileComponent(column.tiles[curIndex + operator + 1].id)
|
|
339
|
-
?.location.nativeElement);
|
|
340
|
-
}
|
|
341
|
-
// Report the change in configuration
|
|
342
|
-
const reportConfig = this.#config;
|
|
343
|
-
reportConfig.movedTile = {
|
|
344
|
-
tileDescription: tileDescription || /* istanbul ignore next */ tile.id,
|
|
345
|
-
column: mode === 'single' ? 1 : colIndex + 1,
|
|
346
|
-
position: curIndex + operator + 1,
|
|
347
|
-
};
|
|
348
|
-
this.configChange.emit(reportConfig);
|
|
303
|
+
// Get the column element
|
|
304
|
+
let columnEl;
|
|
305
|
+
if (mode === 'single') {
|
|
306
|
+
columnEl = this.#getColumnEl(this.#singleColumn);
|
|
349
307
|
}
|
|
308
|
+
else {
|
|
309
|
+
columnEl = this.#getColumnEl(this.#columns?.toArray()[colIndex]);
|
|
310
|
+
}
|
|
311
|
+
this.#moveTileArrowUpDown(tile, tileDescription, direction, colIndex, column, columnEl);
|
|
350
312
|
}
|
|
351
313
|
}
|
|
352
314
|
}
|
|
353
315
|
}
|
|
316
|
+
#moveTileArrowLeftRight(tile, tileDescription, direction, colIndex, column, multiColumn) {
|
|
317
|
+
const operator = direction === 'left' ? -1 : 1;
|
|
318
|
+
const newColumn = multiColumn[colIndex + operator];
|
|
319
|
+
if (newColumn) {
|
|
320
|
+
// Move the tile to the end of the new column
|
|
321
|
+
newColumn.tiles.push(tile);
|
|
322
|
+
column.tiles = column.tiles.filter((item) => item !== tile);
|
|
323
|
+
this.#moveTilesToColumn(this.#columns?.toArray()[colIndex + operator], [
|
|
324
|
+
tile,
|
|
325
|
+
]);
|
|
326
|
+
// Report the change in configuration
|
|
327
|
+
this.#emitTileMove(tileDescription, tile, colIndex + operator + 1, newColumn.tiles.length);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
#moveTileArrowUpDown(tile, tileDescription, direction, colIndex, column, columnEl) {
|
|
331
|
+
const operator = direction === 'up' ? -1 : 1;
|
|
332
|
+
const curIndex = column.tiles.findIndex((value) => value.id === tile.id);
|
|
333
|
+
const tileComponentInstance = this.getTileComponent(tile.id);
|
|
334
|
+
if (tileComponentInstance && column.tiles[curIndex + operator]) {
|
|
335
|
+
const temp = column.tiles[curIndex + operator];
|
|
336
|
+
column.tiles[curIndex + operator] = tile;
|
|
337
|
+
column.tiles[curIndex] = temp;
|
|
338
|
+
if (columnEl) {
|
|
339
|
+
// Move the tile element in the document
|
|
340
|
+
if (curIndex + operator === column.tiles.length - 1) {
|
|
341
|
+
this.#renderer.appendChild(columnEl, tileComponentInstance.location.nativeElement);
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
this.#renderer.insertBefore(columnEl, tileComponentInstance.location.nativeElement, this.getTileComponent(column.tiles[curIndex + operator + 1].id)
|
|
345
|
+
?.location.nativeElement);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
// Report the change in configuration
|
|
349
|
+
this.#emitTileMove(tileDescription, tile, colIndex + 1, curIndex + operator + 1);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
#emitTileMove(tileDescription, tile, newColumnIndex, newRowIndex) {
|
|
353
|
+
const reportConfig = this.#getConfigForUIState();
|
|
354
|
+
if (reportConfig) {
|
|
355
|
+
if (this.#settingsKey) {
|
|
356
|
+
this.#setUserConfig({ ...reportConfig });
|
|
357
|
+
}
|
|
358
|
+
reportConfig.movedTile = {
|
|
359
|
+
tileDescription: this.#getTileDescription(tileDescription, tile),
|
|
360
|
+
column: newColumnIndex,
|
|
361
|
+
position: newRowIndex,
|
|
362
|
+
};
|
|
363
|
+
this.configChange.emit(reportConfig);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
#getTileDescription(tileDescription, tile) {
|
|
367
|
+
return tileDescription || tile.id;
|
|
368
|
+
}
|
|
354
369
|
#getTileId(tile) {
|
|
355
370
|
if (tile) {
|
|
356
371
|
let el = tile.elementRef.nativeElement;
|
|
@@ -366,7 +381,6 @@ class SkyTileDashboardService {
|
|
|
366
381
|
return undefined;
|
|
367
382
|
}
|
|
368
383
|
#getTileOrRemoveFromLayout(layoutTile) {
|
|
369
|
-
/*istanbul ignore else */
|
|
370
384
|
if (layoutTile && this.#config) {
|
|
371
385
|
for (const tile of this.#config.tiles) {
|
|
372
386
|
if (tile.id === layoutTile.id) {
|
|
@@ -374,28 +388,25 @@ class SkyTileDashboardService {
|
|
|
374
388
|
}
|
|
375
389
|
}
|
|
376
390
|
// If the layout tile was not found in the list of tiles, it was removed since last the user updated settings
|
|
377
|
-
/*istanbul ignore else */
|
|
378
391
|
if (this.#config?.layout.singleColumn) {
|
|
379
392
|
this.#config.layout.singleColumn.tiles =
|
|
380
393
|
this.#config.layout.singleColumn.tiles.filter((elem) => elem.id !== layoutTile.id);
|
|
381
394
|
}
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
elem.tiles = elem.tiles.filter((res) => res.id !== layoutTile.id);
|
|
386
|
-
});
|
|
387
|
-
}
|
|
395
|
+
this.#config?.layout.multiColumn.forEach((elem) => {
|
|
396
|
+
elem.tiles = elem.tiles.filter((res) => res.id !== layoutTile.id);
|
|
397
|
+
});
|
|
388
398
|
}
|
|
389
|
-
/*istanbul ignore next */
|
|
390
399
|
return undefined;
|
|
391
400
|
}
|
|
392
|
-
#checkReadyAndLoadTiles() {
|
|
401
|
+
#checkReadyAndLoadTiles(columns, singleColumn) {
|
|
402
|
+
this.#columns = columns;
|
|
403
|
+
this.#singleColumn = singleColumn;
|
|
393
404
|
if (this.#config && this.#columns) {
|
|
394
|
-
this.#loadTiles(this.#config);
|
|
405
|
+
this.#loadTiles(this.#config, this.#columns.toArray());
|
|
395
406
|
this.dashboardInitialized.emit();
|
|
396
407
|
}
|
|
397
408
|
}
|
|
398
|
-
#loadTiles(config) {
|
|
409
|
+
#loadTiles(config, columns) {
|
|
399
410
|
const layout = config.layout;
|
|
400
411
|
if (this.#mode() === 'single') {
|
|
401
412
|
for (const tile of layout.singleColumn.tiles) {
|
|
@@ -403,11 +414,6 @@ class SkyTileDashboardService {
|
|
|
403
414
|
}
|
|
404
415
|
}
|
|
405
416
|
else {
|
|
406
|
-
let columns = [];
|
|
407
|
-
/*istanbul ignore else */
|
|
408
|
-
if (this.#columns) {
|
|
409
|
-
columns = this.#columns?.toArray();
|
|
410
|
-
}
|
|
411
417
|
for (let i = 0, n = layout.multiColumn.length; i < n; i++) {
|
|
412
418
|
const column = columns[i];
|
|
413
419
|
for (const tile of layout.multiColumn[i].tiles) {
|
|
@@ -419,10 +425,9 @@ class SkyTileDashboardService {
|
|
|
419
425
|
#loadTileIntoColumn(column, layoutTile) {
|
|
420
426
|
if (column) {
|
|
421
427
|
const tile = this.#getTileOrRemoveFromLayout(layoutTile);
|
|
422
|
-
/*istanbul ignore else */
|
|
423
428
|
if (tile && this.#dynamicComponentService) {
|
|
424
429
|
const componentType = tile.componentType;
|
|
425
|
-
const providers = tile.providers
|
|
430
|
+
const providers = tile.providers ?? [];
|
|
426
431
|
const componentRef = this.#dynamicComponentService.createComponent(componentType, {
|
|
427
432
|
providers: providers,
|
|
428
433
|
viewContainerRef: column.content,
|
|
@@ -441,33 +446,26 @@ class SkyTileDashboardService {
|
|
|
441
446
|
}
|
|
442
447
|
#moveTilesToMultiColumn() {
|
|
443
448
|
let layoutColumns = [];
|
|
444
|
-
/*istanbul ignore else */
|
|
445
449
|
if (this.#config) {
|
|
446
450
|
layoutColumns = this.#config.layout.multiColumn;
|
|
447
451
|
}
|
|
448
|
-
|
|
449
|
-
/*istanbul ignore else */
|
|
450
|
-
if (this.#columns) {
|
|
451
|
-
columns = this.#columns?.toArray();
|
|
452
|
-
}
|
|
452
|
+
const columns = this.#columns?.toArray() ?? [];
|
|
453
453
|
for (let i = 0, n = layoutColumns.length; i < n; i++) {
|
|
454
454
|
this.#moveTilesToColumn(columns[i], layoutColumns[i].tiles);
|
|
455
455
|
}
|
|
456
456
|
}
|
|
457
457
|
#moveTilesToColumn(column, layoutTiles) {
|
|
458
|
-
|
|
459
|
-
|
|
458
|
+
const columnEl = this.#getColumnEl(column);
|
|
459
|
+
if (columnEl && layoutTiles) {
|
|
460
460
|
for (const layoutTile of layoutTiles) {
|
|
461
461
|
const tileComponentInstance = this.getTileComponent(layoutTile.id);
|
|
462
|
-
/*istanbul ignore else */
|
|
463
462
|
if (tileComponentInstance) {
|
|
464
|
-
|
|
463
|
+
this.#renderer.appendChild(columnEl, tileComponentInstance.location.nativeElement);
|
|
465
464
|
}
|
|
466
465
|
}
|
|
467
466
|
}
|
|
468
467
|
}
|
|
469
468
|
#getConfigForUIState() {
|
|
470
|
-
/*istanbul ignore else */
|
|
471
469
|
if (this.#config) {
|
|
472
470
|
this.#config = {
|
|
473
471
|
tiles: this.#config.tiles,
|
|
@@ -491,7 +489,6 @@ class SkyTileDashboardService {
|
|
|
491
489
|
if (this.#mode() === 'multi') {
|
|
492
490
|
const layoutColumns = [];
|
|
493
491
|
let columns = [];
|
|
494
|
-
/*istanbul ignore else */
|
|
495
492
|
if (this.#columns) {
|
|
496
493
|
columns = this.#columns?.toArray();
|
|
497
494
|
}
|
|
@@ -510,13 +507,11 @@ class SkyTileDashboardService {
|
|
|
510
507
|
#getTilesInEl(el) {
|
|
511
508
|
const tileEls = el?.querySelectorAll('[' + ATTR_TILE_ID + ']');
|
|
512
509
|
const layoutTiles = [];
|
|
513
|
-
/*istanbul ignore else */
|
|
514
510
|
if (tileEls) {
|
|
515
511
|
for (let i = 0, n = tileEls.length; i < n; i++) {
|
|
516
512
|
const tileEl = tileEls[i];
|
|
517
513
|
const tileId = tileEl.getAttribute(ATTR_TILE_ID);
|
|
518
514
|
const tile = this.#findTile(tileId);
|
|
519
|
-
/*istanbul ignore else */
|
|
520
515
|
if (tile) {
|
|
521
516
|
layoutTiles.push(tile);
|
|
522
517
|
}
|
|
@@ -531,9 +526,11 @@ class SkyTileDashboardService {
|
|
|
531
526
|
return !!target && target.contains(handle);
|
|
532
527
|
},
|
|
533
528
|
});
|
|
534
|
-
this.#dragulaService
|
|
529
|
+
this.#dragulaService
|
|
530
|
+
.drop(this.bagId)
|
|
531
|
+
.pipe(takeUntilDestroyed(this.#destroyRef))
|
|
532
|
+
.subscribe(() => {
|
|
535
533
|
const config = this.#getConfigForUIState();
|
|
536
|
-
/*istanbul ignore else */
|
|
537
534
|
if (config) {
|
|
538
535
|
if (this.#settingsKey) {
|
|
539
536
|
this.#setUserConfig(config);
|
|
@@ -546,10 +543,8 @@ class SkyTileDashboardService {
|
|
|
546
543
|
return column?.content?.element.nativeElement.parentNode;
|
|
547
544
|
}
|
|
548
545
|
#findTile(tileId) {
|
|
549
|
-
/*istanbul ignore else */
|
|
550
546
|
if (this.#config && this.#config.layout.multiColumn) {
|
|
551
547
|
for (const column of this.#config.layout.multiColumn) {
|
|
552
|
-
/*istanbul ignore else */
|
|
553
548
|
if (column.tiles) {
|
|
554
549
|
for (const tile of column.tiles) {
|
|
555
550
|
if (tile.id === tileId) {
|
|
@@ -561,19 +556,8 @@ class SkyTileDashboardService {
|
|
|
561
556
|
}
|
|
562
557
|
return undefined;
|
|
563
558
|
}
|
|
564
|
-
#
|
|
565
|
-
|
|
566
|
-
if (this.#config && this.#config.layout.multiColumn) {
|
|
567
|
-
return this.#config.layout.multiColumn.find((col) => col.tiles && !!col.tiles.find((tile) => tile.id === tileId));
|
|
568
|
-
}
|
|
569
|
-
/*istanbul ignore next */
|
|
570
|
-
return undefined;
|
|
571
|
-
}
|
|
572
|
-
#initToDefaults(config, columns, singleColumn) {
|
|
573
|
-
this.#config = config;
|
|
574
|
-
this.#columns = columns;
|
|
575
|
-
this.#singleColumn = singleColumn;
|
|
576
|
-
this.#checkReadyAndLoadTiles();
|
|
559
|
+
#findTileColumnIndex(multiColumn, tileId) {
|
|
560
|
+
return multiColumn.findIndex((col) => !!col.tiles?.find((tile) => tile.id === tileId));
|
|
577
561
|
}
|
|
578
562
|
#setUserConfig(config) {
|
|
579
563
|
if (config && this.#settingsKey)
|
|
@@ -583,61 +567,45 @@ class SkyTileDashboardService {
|
|
|
583
567
|
persisted: true,
|
|
584
568
|
tileIds: config.tiles.map((elem) => elem.id),
|
|
585
569
|
})
|
|
586
|
-
.
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
570
|
+
.pipe(take(1), takeUntilDestroyed(this.#destroyRef))
|
|
571
|
+
.subscribe({
|
|
572
|
+
error: (err) => {
|
|
573
|
+
console.warn('Could not save tile dashboard settings.');
|
|
574
|
+
console.warn(err);
|
|
575
|
+
},
|
|
591
576
|
});
|
|
592
577
|
}
|
|
593
|
-
#checkForNewTiles(
|
|
578
|
+
#checkForNewTiles(config, oldTileIds) {
|
|
594
579
|
// Get a list of tiles that are in the config's default list but not in the user's settings
|
|
595
|
-
const newTiles =
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
const
|
|
599
|
-
const singleColumn = this.#config?.layout.singleColumn;
|
|
580
|
+
const newTiles = config.tiles.filter(({ id }) => !oldTileIds.includes(id));
|
|
581
|
+
let hasChange = newTiles.length > 0;
|
|
582
|
+
const multiColumn = config.layout.multiColumn;
|
|
583
|
+
const singleColumn = config.layout.singleColumn;
|
|
600
584
|
// Append new tiles to the end of the layouts
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
multiColumn.forEach((item, index) => {
|
|
609
|
-
if (item.tiles.length < smallest) {
|
|
610
|
-
locationToAdd = index;
|
|
611
|
-
smallest = item.tiles.length;
|
|
612
|
-
}
|
|
613
|
-
});
|
|
614
|
-
multiColumn[locationToAdd].tiles.push({
|
|
615
|
-
id: elem.id,
|
|
616
|
-
isCollapsed: false,
|
|
617
|
-
});
|
|
618
|
-
});
|
|
619
|
-
}
|
|
620
|
-
/*istanbul ignore else */
|
|
621
|
-
if (singleColumn) {
|
|
622
|
-
newTiles?.forEach((elem) => {
|
|
623
|
-
singleColumn.tiles.push({ id: elem.id, isCollapsed: false });
|
|
585
|
+
if (multiColumn) {
|
|
586
|
+
newTiles.forEach((elem) => {
|
|
587
|
+
const smallest = Math.min(...multiColumn.map((col) => col.tiles.length));
|
|
588
|
+
const locationToAdd = multiColumn.findIndex((col) => col.tiles.length === smallest);
|
|
589
|
+
multiColumn[locationToAdd].tiles.push({
|
|
590
|
+
id: elem.id,
|
|
591
|
+
isCollapsed: false,
|
|
624
592
|
});
|
|
625
|
-
}
|
|
593
|
+
});
|
|
626
594
|
}
|
|
627
|
-
/*istanbul ignore else */
|
|
628
595
|
if (singleColumn) {
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
}
|
|
632
|
-
}
|
|
633
|
-
/*istanbul ignore else */
|
|
634
|
-
if (multiColumn) {
|
|
635
|
-
for (let i = 0, n = multiColumn.length; i < n; i++) {
|
|
636
|
-
for (const tile of multiColumn[i].tiles) {
|
|
637
|
-
this.#getTileOrRemoveFromLayout(tile);
|
|
638
|
-
}
|
|
639
|
-
}
|
|
596
|
+
newTiles.forEach((elem) => {
|
|
597
|
+
singleColumn.tiles.push({ id: elem.id, isCollapsed: false });
|
|
598
|
+
});
|
|
640
599
|
}
|
|
600
|
+
singleColumn?.tiles.forEach((tile) => {
|
|
601
|
+
hasChange ||= !this.#getTileOrRemoveFromLayout(tile);
|
|
602
|
+
});
|
|
603
|
+
multiColumn?.forEach((column) => {
|
|
604
|
+
column.tiles.forEach((tile) => {
|
|
605
|
+
hasChange ||= !this.#getTileOrRemoveFromLayout(tile);
|
|
606
|
+
});
|
|
607
|
+
});
|
|
608
|
+
return hasChange;
|
|
641
609
|
}
|
|
642
610
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.7", ngImport: i0, type: SkyTileDashboardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
643
611
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.7", ngImport: i0, type: SkyTileDashboardService }); }
|
|
@@ -769,20 +737,11 @@ class SkyTileComponent {
|
|
|
769
737
|
this.isCollapsed = direction === 'down';
|
|
770
738
|
}
|
|
771
739
|
moveTile(event) {
|
|
772
|
-
|
|
773
|
-
|
|
740
|
+
if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.key) &&
|
|
741
|
+
this.#dashboardService) {
|
|
774
742
|
const direction = event.key.toLowerCase().replace('arrow', '');
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
direction === 'down' ||
|
|
778
|
-
direction === 'left' ||
|
|
779
|
-
direction === 'right') {
|
|
780
|
-
this.#dashboardService.moveTileOnKeyDown(this, direction, this.title
|
|
781
|
-
? this.title.nativeElement.innerText
|
|
782
|
-
: /* istanbul ignore next */
|
|
783
|
-
undefined);
|
|
784
|
-
this.#focusHandle();
|
|
785
|
-
}
|
|
743
|
+
this.#dashboardService.moveTileOnKeyDown(this, direction, this.title?.nativeElement.innerText);
|
|
744
|
+
this.#focusHandle();
|
|
786
745
|
}
|
|
787
746
|
}
|
|
788
747
|
#focusHandle() {
|
|
@@ -972,6 +931,7 @@ class SkyTileDashboardComponent {
|
|
|
972
931
|
#ngUnsubscribe;
|
|
973
932
|
#resourcesService;
|
|
974
933
|
#viewReady;
|
|
934
|
+
#viewReadyTimer;
|
|
975
935
|
#_config;
|
|
976
936
|
constructor(dashboardService, resourcesService) {
|
|
977
937
|
this.#breakpoint = toSignal(inject(SkyMediaQueryService).breakpointChange);
|
|
@@ -1042,8 +1002,9 @@ class SkyTileDashboardComponent {
|
|
|
1042
1002
|
this.#ngUnsubscribe.complete();
|
|
1043
1003
|
}
|
|
1044
1004
|
#checkReady() {
|
|
1045
|
-
if (this.#viewReady && this.config) {
|
|
1046
|
-
setTimeout(() => {
|
|
1005
|
+
if (this.#viewReady && this.config && !this.#viewReadyTimer) {
|
|
1006
|
+
this.#viewReadyTimer = setTimeout(() => {
|
|
1007
|
+
this.#viewReadyTimer = undefined;
|
|
1047
1008
|
if (this.config && this.columns && this.singleColumn) {
|
|
1048
1009
|
this.#dashboardService.init(this.config, this.columns, this.singleColumn, this.settingsKey);
|
|
1049
1010
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skyux-tiles.mjs","sources":["../../../../../libs/components/tiles/src/lib/modules/tiles/tile/tile-summary.component.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile/tile-summary.component.html","../../../../../libs/components/tiles/src/lib/modules/tiles/tile/tile-title-id-token.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile/tile-title.component.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile/tile-title.component.html","../../../../../libs/components/tiles/src/lib/modules/shared/sky-tiles-resources.module.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-dashboard/tile-dashboard.service.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile/tile.component.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile/tile.component.html","../../../../../libs/components/tiles/src/lib/modules/tiles/tile/tile.module.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-content/tile-content-section.component.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-content/tile-content-section.component.html","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-content/tile-content.component.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-content/tile-content.component.html","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-content/tile-content.module.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-dashboard/tile-dashboard-message-type.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-dashboard-column/tile-dashboard-column.component.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-dashboard-column/tile-dashboard-column.component.html","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-dashboard/tile-dashboard.component.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-dashboard/tile-dashboard.component.html","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-dashboard/tile-dashboard.module.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-dashboard-column/tile-dashboard-column.module.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tiles.module.ts","../../../../../libs/components/tiles/src/skyux-tiles.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n/**\n * Specifies content to display in the tile's summary.\n */\n@Component({\n standalone: true,\n selector: 'sky-tile-summary',\n templateUrl: 'tile-summary.component.html',\n})\nexport class SkyTileSummaryComponent {}\n","<ng-content />\n","import { InjectionToken } from '@angular/core';\n\nexport const SKY_TILE_TITLE_ID = new InjectionToken<string>(\n 'SKY_TILE_TITLE_ID',\n);\n","import { Component, inject } from '@angular/core';\nimport { SkyTrimModule } from '@skyux/core';\n\nimport { SKY_TILE_TITLE_ID } from './tile-title-id-token';\n\n/**\n * Specifies content to display in the tile's title.\n */\n@Component({\n selector: 'sky-tile-title',\n templateUrl: './tile-title.component.html',\n styleUrls: ['./tile-title.component.scss'],\n imports: [SkyTrimModule],\n})\nexport class SkyTileTitleComponent {\n protected readonly tileTitleId = inject(SKY_TILE_TITLE_ID);\n}\n","<h2 class=\"sky-tile-title sky-font-heading-2\">\n <span skyTrim [id]=\"tileTitleId\"><ng-content /></span\n ><span class=\"sky-control-help-container\"\n ><ng-content select=\".sky-control-help\"></ng-content\n ></span>\n</h2>\n","/* istanbul ignore file */\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-tiles' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport {\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesService,\n} from '@skyux/i18n';\n\nconst RESOURCES: Record<string, SkyLibResources> = {\n 'EN-US': {\n skyux_tile_expand: { message: 'Expand or collapse {0}' },\n skyux_tile_expand_default: { message: 'Expand or collapse' },\n skyux_tile_help: { message: '{0} help' },\n skyux_tile_help_default: { message: 'Help' },\n skyux_tile_settings: { message: '{0} settings' },\n skyux_tile_settings_default: { message: 'Settings' },\n skyux_tile_move: { message: 'Move {0}' },\n skyux_tile_move_default: { message: 'Move' },\n skyux_tile_move_instructions: {\n message:\n \"When focus is placed on a tile's move button, use the arrow keys to move it. The up and down keys change its position within a column. The left and right keys move it between columns.\",\n },\n skyux_tile_moved_assistive_text: {\n message:\n '{0} moved. Current column: {1} of {2}. Current position in column: {3} of {4}',\n },\n },\n 'FR-CA': {\n skyux_tile_expand: { message: 'Agrandir ou réduire {0}' },\n skyux_tile_expand_default: { message: 'Agrandir ou réduire' },\n skyux_tile_help: { message: '{0} aide' },\n skyux_tile_help_default: { message: 'Aide' },\n skyux_tile_settings: { message: '{0} paramètres' },\n skyux_tile_settings_default: { message: 'Paramètres' },\n skyux_tile_move: { message: 'Déplacer {0}' },\n skyux_tile_move_default: { message: 'Déplacer' },\n skyux_tile_move_instructions: {\n message:\n 'Lorsque le curseur est placé sur le bouton déplacer d’une mosaïque, utilisez les touches fléchées pour la déplacer. Les flèches vers le haut et vers le bas modifie la position dans une colonne. Les flèches de gauche et de droite la déplace d’une colonne à l’autre.',\n },\n skyux_tile_moved_assistive_text: {\n message:\n '{0} déplacé(e). Colonne actuelle : {1} de {2}. Position actuelle dans la colonne : {3} de {4}',\n },\n },\n};\n\nSkyLibResourcesService.addResources(RESOURCES);\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n})\nexport class SkyTilesResourcesModule {}\n","import {\n ComponentRef,\n EventEmitter,\n Injectable,\n Output,\n QueryList,\n computed,\n effect,\n inject,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport {\n SkyDynamicComponentService,\n SkyMediaQueryService,\n SkyUIConfigService,\n} from '@skyux/core';\n\nimport { DragulaService } from 'ng2-dragula';\nimport { take } from 'rxjs/operators';\n\nimport { SkyTileDashboardColumnComponent } from '../tile-dashboard-column/tile-dashboard-column.component';\nimport { SkyTileDashboardConfig } from '../tile-dashboard-config/tile-dashboard-config';\nimport { SkyTileDashboardConfigLayoutColumn } from '../tile-dashboard-config/tile-dashboard-config-layout-column';\nimport { SkyTileDashboardConfigLayoutTile } from '../tile-dashboard-config/tile-dashboard-config-layout-tile';\nimport { SkyTileDashboardConfigTile } from '../tile-dashboard-config/tile-dashboard-config-tile';\nimport { SkyTileComponent } from '../tile/tile.component';\n\nimport { SkyTileDashboardColumnMode } from './tile-dashboard-column-mode';\n\nconst ATTR_TILE_ID = '_sky-tile-dashboard-tile-id';\n\nlet bagIdIndex = 0;\n\n@Injectable()\nexport class SkyTileDashboardService {\n /**\n * @internal\n */\n public bagId: string;\n\n /**\n * @internal\n */\n public configChange = new EventEmitter<SkyTileDashboardConfig>();\n\n /**\n * Fires when the tile dashboard's initialization is complete.\n */\n @Output()\n public dashboardInitialized = new EventEmitter<void>();\n\n #columns: QueryList<SkyTileDashboardColumnComponent> | undefined;\n #config: SkyTileDashboardConfig | undefined;\n #singleColumn: SkyTileDashboardColumnComponent | undefined;\n #settingsKey: string | undefined;\n #tileComponents: ComponentRef<any>[] | undefined;\n\n readonly #breakpoint = toSignal(\n inject(SkyMediaQueryService).breakpointChange,\n );\n\n readonly #dragulaService = inject(DragulaService);\n readonly #dynamicComponentService = inject(SkyDynamicComponentService);\n readonly #uiConfigService = inject(SkyUIConfigService);\n\n readonly #mode = computed<SkyTileDashboardColumnMode>(() => {\n const breakpoint = this.#breakpoint();\n\n return breakpoint === 'xs' || breakpoint === 'sm' ? 'single' : 'multi';\n });\n\n constructor() {\n effect(() => {\n const mode = this.#mode();\n this.changeColumnMode(mode);\n });\n\n this.bagId = `sky-tile-dashboard-bag-${++bagIdIndex}`;\n\n this.#initDragula();\n }\n\n /**\n * @internal\n */\n public init(\n config: SkyTileDashboardConfig,\n columns?: QueryList<SkyTileDashboardColumnComponent>,\n singleColumn?: SkyTileDashboardColumnComponent,\n settingsKey?: string,\n ): void {\n if (settingsKey) {\n // Clone this so changes to the config object outside of this class don't modify\n // the config used inside and vice versa.\n this.#config = Object.assign({}, config) as SkyTileDashboardConfig;\n\n this.#settingsKey = settingsKey;\n\n this.#uiConfigService\n .getConfig(settingsKey, config)\n .pipe(take(1))\n .subscribe(\n (value: any) => {\n if (this.#config && value.persisted) {\n this.#config.layout = value.layout;\n this.#checkForNewTiles(value.tileIds);\n this.configChange.emit(this.#config);\n\n this.#columns = columns;\n this.#singleColumn = singleColumn;\n this.#checkReadyAndLoadTiles();\n } else {\n // Bad data, or config is the default config.\n this.#initToDefaults(config, columns, singleColumn);\n }\n },\n () => {\n // Config setting key doesn't exist or other config service error\n this.#initToDefaults(config, columns, singleColumn);\n },\n );\n } else {\n this.#initToDefaults(config, columns, singleColumn);\n }\n }\n\n /**\n * Adds a new tile to the tile dashboard.\n * @param tile Specifies the tile configuration.\n * @param component Specifies the tile component to add.\n */\n public addTileComponent(\n tile: SkyTileDashboardConfigLayoutTile,\n component: ComponentRef<any>,\n ): void {\n this.#tileComponents = this.#tileComponents || [];\n\n this.#tileComponents.push(component);\n\n component.location.nativeElement.setAttribute(ATTR_TILE_ID, tile.id);\n }\n\n /**\n * Checks whether a specified tile is collapsed.\n * @param tile Specifies the tile component to check.\n */\n public tileIsCollapsed(tile: SkyTileComponent): boolean {\n const tileConfig = this.#findTile(this.#getTileId(tile));\n\n if (tileConfig) {\n return tileConfig.isCollapsed;\n }\n\n return false;\n }\n\n /**\n * Sets the collapsed state of all tiles.\n * @param isCollapsed Indicates whether tiles are collapsed.\n */\n public setAllTilesCollapsed(isCollapsed: boolean): void {\n /*istanbul ignore else */\n if (this.#config && this.#config.layout.multiColumn) {\n for (const column of this.#config.layout.multiColumn) {\n for (const tile of column.tiles) {\n tile.isCollapsed = isCollapsed;\n }\n }\n for (const tile of this.#config.layout.singleColumn.tiles) {\n tile.isCollapsed = isCollapsed;\n }\n }\n\n if (this.#settingsKey) {\n this.#setUserConfig(this.#config);\n }\n\n this.configChange.emit(this.#config);\n }\n\n /**\n * Sets the collapsed state of a specified tile.\n * @param tile Specifies the tile component.\n * @param isCollapsed Indicates whether the tile is collapsed.\n */\n public setTileCollapsed(\n tile: SkyTileComponent | undefined,\n isCollapsed: boolean,\n ): void {\n const tileConfig = this.#findTile(this.#getTileId(tile));\n\n if (tileConfig) {\n tileConfig.isCollapsed = isCollapsed;\n\n if (this.#settingsKey) {\n this.#setUserConfig(this.#config);\n }\n\n this.configChange.emit(this.#config);\n }\n }\n\n /**\n * @internal\n */\n public getTileComponentType(\n layoutTile: SkyTileDashboardConfigLayoutTile | undefined,\n ): any {\n if (layoutTile && this.#config) {\n for (const tile of this.#config.tiles) {\n if (tile.id === layoutTile.id) {\n return tile.componentType;\n }\n }\n }\n\n return undefined;\n }\n\n /**\n * @internal\n */\n public changeColumnMode(mode: SkyTileDashboardColumnMode): void {\n /*istanbul ignore else */\n if (this.#config) {\n if (mode === 'single') {\n this.#moveTilesToSingleColumn();\n } else {\n this.#moveTilesToMultiColumn();\n }\n }\n }\n\n /**\n * @internal\n */\n public getTileComponent(tileId: string): ComponentRef<any> | undefined {\n if (this.#tileComponents) {\n for (const tileComponent of this.#tileComponents) {\n if (\n tileComponent.location.nativeElement.getAttribute(ATTR_TILE_ID) ===\n tileId\n ) {\n return tileComponent;\n }\n }\n }\n\n /*istanbul ignore next */\n return undefined;\n }\n\n /**\n * @internal\n */\n public moveTileOnKeyDown(\n tileCmp: SkyTileComponent,\n direction: string,\n tileDescription: string,\n ): void {\n if (this.#config) {\n const mode = this.#mode();\n const tileId = this.#getTileId(tileCmp);\n const tile = this.#findTile(tileId);\n\n let column: SkyTileDashboardConfigLayoutColumn | undefined;\n let colIndex = 0;\n\n if (mode === 'single') {\n column = this.#config.layout.singleColumn;\n } else {\n column = this.#findTileColumn(tileId);\n colIndex = this.#config.layout.multiColumn.findIndex(\n (value) => value === column,\n );\n }\n\n if (column && tile && tileId) {\n if (\n (direction === 'left' || direction === 'right') &&\n mode === 'multi'\n ) {\n const operator = direction === 'left' ? -1 : 1;\n const newColumn =\n this.#config.layout.multiColumn[colIndex + operator];\n\n if (newColumn) {\n // Move the tile to the end of the new column\n newColumn.tiles.push(tile);\n column.tiles = column.tiles.filter((item) => item !== tile);\n this.#moveTilesToColumn(\n this.#columns?.toArray()[colIndex + operator],\n [tile],\n );\n\n // Report the change in configuration\n const reportConfig = this.#config;\n reportConfig.movedTile = {\n tileDescription:\n tileDescription || /* istanbul ignore next */ tile.id,\n column: colIndex + operator + 1,\n position: newColumn.tiles.length,\n };\n this.configChange.emit(reportConfig);\n }\n } else {\n const operator = direction === 'up' ? -1 : 1;\n const curIndex = column.tiles.findIndex(\n (value) => value.id === tile.id,\n );\n const tileComponentInstance = this.getTileComponent(tileId);\n\n if (tileComponentInstance && column.tiles[curIndex + operator]) {\n const temp = column.tiles[curIndex + operator];\n column.tiles[curIndex + operator] = tile;\n column.tiles[curIndex] = temp;\n\n // Get the column element\n let columnEl: Element | undefined;\n if (mode === 'single') {\n columnEl = this.#getColumnEl(this.#singleColumn);\n } else {\n columnEl = this.#getColumnEl(this.#columns?.toArray()[colIndex]);\n }\n\n // Move the tile element in the document\n if (curIndex + operator === column.tiles.length - 1) {\n columnEl?.appendChild(\n tileComponentInstance.location.nativeElement,\n );\n } else {\n columnEl?.insertBefore(\n tileComponentInstance.location.nativeElement,\n this.getTileComponent(column.tiles[curIndex + operator + 1].id)\n ?.location.nativeElement,\n );\n }\n\n // Report the change in configuration\n const reportConfig = this.#config;\n reportConfig.movedTile = {\n tileDescription:\n tileDescription || /* istanbul ignore next */ tile.id,\n column: mode === 'single' ? 1 : colIndex + 1,\n position: curIndex + operator + 1,\n };\n this.configChange.emit(reportConfig);\n }\n }\n }\n }\n }\n\n #getTileId(tile: SkyTileComponent | undefined): string | undefined {\n if (tile) {\n let el = tile.elementRef.nativeElement;\n let tileId: string;\n\n while (el) {\n tileId = el.getAttribute(ATTR_TILE_ID);\n\n if (tileId) {\n return tileId;\n }\n\n el = el.parentElement;\n }\n }\n\n return undefined;\n }\n\n #getTileOrRemoveFromLayout(\n layoutTile: SkyTileDashboardConfigLayoutTile,\n ): SkyTileDashboardConfigTile | undefined {\n /*istanbul ignore else */\n if (layoutTile && this.#config) {\n for (const tile of this.#config.tiles) {\n if (tile.id === layoutTile.id) {\n return tile;\n }\n }\n\n // If the layout tile was not found in the list of tiles, it was removed since last the user updated settings\n /*istanbul ignore else */\n if (this.#config?.layout.singleColumn) {\n this.#config.layout.singleColumn.tiles =\n this.#config.layout.singleColumn.tiles.filter(\n (elem) => elem.id !== layoutTile.id,\n );\n }\n\n /*istanbul ignore else */\n if (this.#config?.layout.multiColumn) {\n this.#config.layout.multiColumn.forEach((elem) => {\n elem.tiles = elem.tiles.filter((res) => res.id !== layoutTile.id);\n });\n }\n }\n\n /*istanbul ignore next */\n return undefined;\n }\n\n #checkReadyAndLoadTiles(): void {\n if (this.#config && this.#columns) {\n this.#loadTiles(this.#config);\n this.dashboardInitialized.emit();\n }\n }\n\n #loadTiles(config: SkyTileDashboardConfig): void {\n const layout = config.layout;\n\n if (this.#mode() === 'single') {\n for (const tile of layout.singleColumn.tiles) {\n this.#loadTileIntoColumn(this.#singleColumn, tile);\n }\n } else {\n let columns: SkyTileDashboardColumnComponent[] = [];\n /*istanbul ignore else */\n if (this.#columns) {\n columns = this.#columns?.toArray();\n }\n\n for (let i = 0, n = layout.multiColumn.length; i < n; i++) {\n const column = columns[i];\n\n for (const tile of layout.multiColumn[i].tiles) {\n this.#loadTileIntoColumn(column, tile);\n }\n }\n }\n }\n\n #loadTileIntoColumn(\n column: SkyTileDashboardColumnComponent | undefined,\n layoutTile: SkyTileDashboardConfigLayoutTile,\n ): void {\n if (column) {\n const tile = this.#getTileOrRemoveFromLayout(layoutTile);\n\n /*istanbul ignore else */\n if (tile && this.#dynamicComponentService) {\n const componentType = tile.componentType;\n const providers = tile.providers /* istanbul ignore next */ || [];\n\n const componentRef = this.#dynamicComponentService.createComponent(\n componentType,\n {\n providers: providers,\n viewContainerRef: column.content,\n environmentInjector: column.injector,\n className: 'sky-tile-parent',\n },\n );\n\n this.addTileComponent(layoutTile, componentRef);\n\n // Make sure the component is marked for changes in case the parent component uses\n // the OnPush change detection strategy.\n componentRef.changeDetectorRef.markForCheck();\n }\n }\n }\n\n #moveTilesToSingleColumn(): void {\n this.#moveTilesToColumn(\n this.#singleColumn,\n this.#config?.layout.singleColumn.tiles,\n );\n }\n\n #moveTilesToMultiColumn(): void {\n let layoutColumns: SkyTileDashboardConfigLayoutColumn[] = [];\n /*istanbul ignore else */\n if (this.#config) {\n layoutColumns = this.#config.layout.multiColumn;\n }\n let columns: SkyTileDashboardColumnComponent[] = [];\n /*istanbul ignore else */\n if (this.#columns) {\n columns = this.#columns?.toArray();\n }\n\n for (let i = 0, n = layoutColumns.length; i < n; i++) {\n this.#moveTilesToColumn(columns[i], layoutColumns[i].tiles);\n }\n }\n\n #moveTilesToColumn(\n column: SkyTileDashboardColumnComponent | undefined,\n layoutTiles: SkyTileDashboardConfigLayoutTile[] | undefined,\n ): void {\n if (column && layoutTiles) {\n const columnEl = this.#getColumnEl(column);\n\n for (const layoutTile of layoutTiles) {\n const tileComponentInstance = this.getTileComponent(layoutTile.id);\n\n /*istanbul ignore else */\n if (tileComponentInstance) {\n columnEl?.appendChild(tileComponentInstance.location.nativeElement);\n }\n }\n }\n }\n\n #getConfigForUIState(): SkyTileDashboardConfig | undefined {\n /*istanbul ignore else */\n if (this.#config) {\n this.#config = {\n tiles: this.#config.tiles,\n layout: {\n singleColumn: this.#getSingleColumnLayoutForUIState(this.#config),\n multiColumn: this.#getMultiColumnLayoutForUIState(this.#config),\n },\n };\n }\n\n return this.#config;\n }\n\n #getSingleColumnLayoutForUIState(\n config: SkyTileDashboardConfig,\n ): SkyTileDashboardConfigLayoutColumn {\n if (this.#mode() === 'single') {\n return {\n tiles: this.#getTilesInEl(this.#getColumnEl(this.#singleColumn)),\n };\n }\n\n return config.layout.singleColumn;\n }\n\n #getMultiColumnLayoutForUIState(\n config: SkyTileDashboardConfig,\n ): SkyTileDashboardConfigLayoutColumn[] {\n if (this.#mode() === 'multi') {\n const layoutColumns: SkyTileDashboardConfigLayoutColumn[] = [];\n let columns: SkyTileDashboardColumnComponent[] = [];\n /*istanbul ignore else */\n if (this.#columns) {\n columns = this.#columns?.toArray();\n }\n\n for (const column of columns) {\n if (column !== this.#singleColumn) {\n const layoutColumn: SkyTileDashboardConfigLayoutColumn = {\n tiles: this.#getTilesInEl(this.#getColumnEl(column)),\n };\n\n layoutColumns.push(layoutColumn);\n }\n }\n\n return layoutColumns;\n }\n\n return config.layout.multiColumn;\n }\n\n #getTilesInEl(el: Element | undefined): SkyTileDashboardConfigLayoutTile[] {\n const tileEls = el?.querySelectorAll('[' + ATTR_TILE_ID + ']');\n const layoutTiles: SkyTileDashboardConfigLayoutTile[] = [];\n\n /*istanbul ignore else */\n if (tileEls) {\n for (let i = 0, n = tileEls.length; i < n; i++) {\n const tileEl = tileEls[i];\n const tileId = tileEl.getAttribute(ATTR_TILE_ID);\n const tile = this.#findTile(tileId);\n\n /*istanbul ignore else */\n if (tile) {\n layoutTiles.push(tile);\n }\n }\n }\n\n return layoutTiles;\n }\n\n #initDragula(): void {\n this.#dragulaService.createGroup(this.bagId, {\n moves: (el, container, handle) => {\n const target = el?.querySelector('.sky-tile-grab-handle');\n return !!target && target.contains(handle!);\n },\n });\n\n this.#dragulaService.drop(this.bagId).subscribe(() => {\n const config = this.#getConfigForUIState();\n\n /*istanbul ignore else */\n if (config) {\n if (this.#settingsKey) {\n this.#setUserConfig(config);\n }\n\n this.configChange.emit(config);\n }\n });\n }\n\n #getColumnEl(\n column: SkyTileDashboardColumnComponent | undefined,\n ): Element | undefined {\n return column?.content?.element.nativeElement.parentNode;\n }\n\n #findTile(\n tileId: string | undefined | null,\n ): SkyTileDashboardConfigLayoutTile | undefined {\n /*istanbul ignore else */\n if (this.#config && this.#config.layout.multiColumn) {\n for (const column of this.#config.layout.multiColumn) {\n /*istanbul ignore else */\n if (column.tiles) {\n for (const tile of column.tiles) {\n if (tile.id === tileId) {\n return tile;\n }\n }\n }\n }\n }\n\n return undefined;\n }\n\n #findTileColumn(\n tileId: string | undefined,\n ): SkyTileDashboardConfigLayoutColumn | undefined {\n /*istanbul ignore else */\n if (this.#config && this.#config.layout.multiColumn) {\n return this.#config.layout.multiColumn.find(\n (col) => col.tiles && !!col.tiles.find((tile) => tile.id === tileId),\n );\n }\n\n /*istanbul ignore next */\n return undefined;\n }\n\n #initToDefaults(\n config: SkyTileDashboardConfig,\n columns: QueryList<SkyTileDashboardColumnComponent> | undefined,\n singleColumn: SkyTileDashboardColumnComponent | undefined,\n ): void {\n this.#config = config;\n this.#columns = columns;\n this.#singleColumn = singleColumn;\n this.#checkReadyAndLoadTiles();\n }\n\n #setUserConfig(config?: SkyTileDashboardConfig): void {\n if (config && this.#settingsKey)\n this.#uiConfigService\n .setConfig(this.#settingsKey, {\n layout: config.layout,\n persisted: true,\n tileIds: config.tiles.map((elem) => elem.id),\n })\n .subscribe(\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n () => {},\n (err) => {\n console.warn('Could not save tile dashboard settings.');\n console.warn(err);\n },\n );\n }\n\n #checkForNewTiles(oldUserTiles: string[]): void {\n // Get a list of tiles that are in the config's default list but not in the user's settings\n const newTiles = this.#config?.tiles.filter((elem) => {\n return oldUserTiles.indexOf(elem.id) === -1;\n });\n\n const multiColumn = this.#config?.layout.multiColumn;\n const singleColumn = this.#config?.layout.singleColumn;\n\n // Append new tiles to the end of the layouts\n /*istanbul ignore else */\n if (newTiles?.length) {\n /*istanbul ignore else */\n if (multiColumn) {\n newTiles?.forEach((elem) => {\n let locationToAdd = 0;\n let smallest = multiColumn[0].tiles.length;\n multiColumn.forEach((item, index) => {\n if (item.tiles.length < smallest) {\n locationToAdd = index;\n smallest = item.tiles.length;\n }\n });\n multiColumn[locationToAdd].tiles.push({\n id: elem.id,\n isCollapsed: false,\n });\n });\n }\n\n /*istanbul ignore else */\n if (singleColumn) {\n newTiles?.forEach((elem) => {\n singleColumn.tiles.push({ id: elem.id, isCollapsed: false });\n });\n }\n }\n\n /*istanbul ignore else */\n if (singleColumn) {\n for (const tile of singleColumn.tiles) {\n this.#getTileOrRemoveFromLayout(tile);\n }\n }\n\n /*istanbul ignore else */\n if (multiColumn) {\n for (let i = 0, n = multiColumn.length; i < n; i++) {\n for (const tile of multiColumn[i].tiles) {\n this.#getTileOrRemoveFromLayout(tile);\n }\n }\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { skyAnimationSlide } from '@skyux/animations';\nimport { SkyIdModule, SkyIdService, SkyLogService } from '@skyux/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyChevronModule } from '@skyux/indicators';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyTilesResourcesModule } from '../../shared/sky-tiles-resources.module';\nimport { SkyTileDashboardService } from '../tile-dashboard/tile-dashboard.service';\n\nimport { SKY_TILE_TITLE_ID } from './tile-title-id-token';\nimport { SkyTileTitleComponent } from './tile-title.component';\n\n/**\n * Provides a common look-and-feel for tab content.\n */\n@Component({\n selector: 'sky-tile',\n styleUrls: ['./tile.component.scss'],\n templateUrl: './tile.component.html',\n animations: [skyAnimationSlide],\n imports: [\n CommonModule,\n SkyChevronModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyIdModule,\n SkyThemeModule,\n SkyTilesResourcesModule,\n ],\n providers: [\n {\n provide: SKY_TILE_TITLE_ID,\n useFactory(): string {\n const idService = inject(SkyIdService);\n return idService.generateId();\n },\n },\n ],\n})\nexport class SkyTileComponent implements OnChanges, OnDestroy {\n /**\n * A help key that identifies the global help content to display. When specified along with `tileName`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline) button is\n * added to the tile header. Clicking the button invokes global help as configured by the application.\n * This property only applies when `tileName` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n /**\n * The content of the help popover. When specified along with `tileName`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the tile header. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `tileName` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * Whether to display a settings button in the tile header. To display the\n * button, you must also listen for the `settingsClick` event.\n * @default true\n */\n @Input()\n public showSettings = true;\n\n /**\n * Whether to display a help button in the tile header. To display the\n * button, you must also listen for the `helpClick` event.\n * @default true\n * @deprecated Set the `helpKey` or `helpPopoverContent` inputs instead.\n */\n @Input()\n public showHelp = true;\n\n /**\n * The human-readable name for the tile that is available to the tile controls for multiple purposes, such as accessibility and instrumentation. The component uses the name to construct ARIA labels for the help, expand/collapse, settings, and drag handle buttons to [support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * For example, if the tile name is \"Constituents,\" the help input's `aria-label` is \"Constituents help\" and the drag handle's `aria-label` is \"Move Constituents.\" For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n */\n @Input()\n public tileName: string | undefined;\n\n /**\n * Fires when users select the settings button in the tile header. The settings\n * button only appears when the `showSettings` property is set to `true`.\n */\n @Output()\n public settingsClick = new EventEmitter();\n\n /**\n * Fires when the tile's collapsed state changes. Returns `true` when the tile\n * collapses and `false` when it expands.\n */\n @Output()\n public isCollapsedChange = new EventEmitter<boolean>();\n\n /**\n * Fires when users select the help button in the tile header. The help\n * button only appears when the `showHelp` property is set to `true`.\n * @deprecated Set the `helpKey` or `helpPopoverContent` inputs instead.\n */\n @Output()\n public helpClick = new EventEmitter();\n\n public get isCollapsed(): boolean {\n if (this.#dashboardService) {\n const configCollapsedState = this.#dashboardService.tileIsCollapsed(this);\n this.#_isCollapsed = configCollapsedState;\n }\n\n return this.#_isCollapsed;\n }\n\n /**\n * Whether the tile is in a collapsed state.\n * @default false\n */\n @Input()\n public set isCollapsed(value: boolean | undefined) {\n this.#_isCollapsed = !!value;\n\n if (this.#dashboardService) {\n this.#dashboardService.setTileCollapsed(this, this.#_isCollapsed);\n }\n\n this.isCollapsedChange.emit(this.#_isCollapsed);\n }\n\n public ariaDescribedBy: string | undefined;\n\n public isInDashboardColumn = false;\n\n @ViewChild('grabHandle', {\n read: ElementRef,\n static: false,\n })\n public grabHandle: ElementRef | undefined;\n\n @ViewChild('titleContainer', {\n read: ElementRef,\n static: false,\n })\n public title: ElementRef | undefined;\n\n @ContentChild(SkyTileTitleComponent, { read: ElementRef })\n protected titleRef: ElementRef | undefined;\n\n #changeDetector: ChangeDetectorRef;\n #dashboardService: SkyTileDashboardService | undefined;\n #ngUnsubscribe = new Subject<void>();\n #_isCollapsed = false;\n\n protected tileTitleId = inject(SKY_TILE_TITLE_ID);\n\n readonly #logSvc = inject(SkyLogService);\n\n constructor(\n public elementRef: ElementRef,\n changeDetector: ChangeDetectorRef,\n @Optional() dashboardService?: SkyTileDashboardService,\n ) {\n this.#changeDetector = changeDetector;\n this.#dashboardService = dashboardService;\n this.isInDashboardColumn = !!this.#dashboardService;\n\n if (this.#dashboardService) {\n this.ariaDescribedBy = `${this.#dashboardService.bagId}-move-instructions`;\n\n /**\n * This subscription ensures that if any values which come in from the dashboard service are\n * updated that the component will update if the tile's parent component utilizes OnPush\n * change detection.\n */\n this.#dashboardService.configChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#changeDetector.markForCheck();\n });\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['showHelp']?.firstChange) {\n this.#logSvc.deprecated('SkyTileComponent.showHelp', {\n deprecationMajorVersion: 10,\n replacementRecommendation:\n 'Set the `helpKey` or `helpPopoverContent` inputs instead.',\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public settingsButtonClicked(): void {\n this.settingsClick.emit(undefined);\n }\n\n /**\n * @deprecated\n */\n public helpButtonClicked(): void {\n this.helpClick.emit(undefined);\n }\n\n public get hasSettings(): boolean {\n return this.settingsClick.observed && this.showSettings;\n }\n\n /**\n * @deprecated\n */\n public get hasHelp(): boolean {\n return this.helpClick.observed && this.showHelp;\n }\n\n public titleClick(evt: MouseEvent): void {\n const targetEl = evt.target as HTMLElement | null;\n\n // Don't expand/collapse if the help inline button is clicked.\n if (targetEl?.closest('sky-help-inline') === null) {\n this.isCollapsed = !this.isCollapsed;\n }\n }\n\n public chevronDirectionChange(direction: string): void {\n this.isCollapsed = direction === 'down';\n }\n\n public moveTile(event: KeyboardEvent): void {\n /* istanbul ignore else */\n if (this.#dashboardService) {\n const direction = event.key.toLowerCase().replace('arrow', '');\n /* istanbul ignore else */\n if (\n direction === 'up' ||\n direction === 'down' ||\n direction === 'left' ||\n direction === 'right'\n ) {\n this.#dashboardService.moveTileOnKeyDown(\n this,\n direction,\n this.title\n ? this.title.nativeElement.innerText\n : /* istanbul ignore next */\n undefined,\n );\n this.#focusHandle();\n }\n }\n }\n\n #focusHandle(): void {\n this.grabHandle?.nativeElement.focus();\n }\n}\n","<section\n class=\"sky-tile\"\n [ngClass]=\"{\n 'sky-tile-collapsed': isCollapsed\n }\"\n [skyThemeClass]=\"{\n 'sky-box sky-elevation-1-bordered sky-padding-even-xl': 'modern'\n }\"\n>\n <header class=\"sky-tile-header\">\n <div class=\"sky-tile-header-content\" (click)=\"titleClick($event)\">\n <div #titleContainer class=\"sky-tile-header-title\">\n <ng-content select=\"sky-tile-title\" />\n @if (tileName && (helpKey || helpPopoverContent)) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n [helpKey]=\"helpKey\"\n [labelText]=\"tileName\"\n [popoverContent]=\"helpPopoverContent\"\n [popoverTitle]=\"helpPopoverTitle\"\n />\n </span>\n }\n </div>\n <div class=\"sky-tile-summary sky-font-display-3\">\n <ng-content select=\"sky-tile-summary\" />\n </div>\n </div>\n <div class=\"sky-tile-header-column-tools\">\n <div class=\"sky-tile-tools\">\n <ng-container *skyThemeIf=\"'default'\">\n @if (hasHelp) {\n <button\n class=\"sky-btn sky-btn-icon-borderless sky-tile-tools-control sky-tile-help\"\n type=\"button\"\n [attr.aria-label]=\"\n tileName\n ? ('skyux_tile_help' | skyLibResources: tileName)\n : ('skyux_tile_help_default' | skyLibResources)\n \"\n (click)=\"helpButtonClicked()\"\n >\n <sky-icon iconName=\"question-circle\" />\n </button>\n }\n </ng-container>\n <sky-chevron\n class=\"sky-tile-tools-control\"\n [ariaControls]=\"tileContent.id\"\n [ariaLabel]=\"\n tileName\n ? ('skyux_tile_expand' | skyLibResources: tileName)\n : ('skyux_tile_expand_default' | skyLibResources)\n \"\n [direction]=\"isCollapsed ? 'down' : 'up'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n />\n @if (hasSettings) {\n <button\n class=\"sky-btn sky-tile-settings sky-btn-icon-borderless sky-tile-tools-control\"\n type=\"button\"\n [attr.aria-label]=\"\n tileName\n ? ('skyux_tile_settings' | skyLibResources: tileName)\n : ('skyux_tile_settings_default' | skyLibResources)\n \"\n (click)=\"settingsButtonClicked()\"\n >\n <sky-icon iconName=\"settings\" />\n </button>\n }\n @if (isInDashboardColumn) {\n <button\n #grabHandle\n class=\"sky-btn sky-btn-icon-borderless sky-tile-tools-control sky-tile-grab-handle\"\n type=\"button\"\n [attr.aria-label]=\"\n tileName\n ? ('skyux_tile_move' | skyLibResources: tileName)\n : ('skyux_tile_move_default' | skyLibResources)\n \"\n [attr.aria-describedby]=\"ariaDescribedBy\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"moveTile($event)\"\n >\n <sky-icon iconName=\"re-order-dots-vertical\" iconSize=\"s\" />\n </button>\n }\n </div>\n </div>\n </header>\n <div\n #tileContent=\"skyId\"\n class=\"sky-tile-content\"\n role=\"region\"\n skyId\n [attr.aria-label]=\"tileName\"\n [attr.aria-labelledby]=\"!tileName && titleRef ? tileTitleId : undefined\"\n [@skyAnimationSlide]=\"isCollapsed ? 'up' : 'down'\"\n >\n <ng-content select=\"sky-tile-content\" />\n </div>\n</section>\n","import { NgModule } from '@angular/core';\n\nimport { SkyTileSummaryComponent } from './tile-summary.component';\nimport { SkyTileTitleComponent } from './tile-title.component';\nimport { SkyTileComponent } from './tile.component';\n\n@NgModule({\n imports: [SkyTileComponent, SkyTileSummaryComponent, SkyTileTitleComponent],\n exports: [SkyTileComponent, SkyTileSummaryComponent, SkyTileTitleComponent],\n})\nexport class SkyTileModule {}\n","import { Component } from '@angular/core';\nimport { SkyThemeModule } from '@skyux/theme';\n\n/**\n * Specifies content to display inside a padded section of a SkyTileContentComponent.\n */\n@Component({\n selector: 'sky-tile-content-section',\n styleUrls: ['./tile-content-section.component.scss'],\n templateUrl: './tile-content-section.component.html',\n imports: [SkyThemeModule],\n})\nexport class SkyTileContentSectionComponent {}\n","<div class=\"sky-tile-content-section sky-border-bottom-row\">\n <ng-content />\n</div>\n","import { Component } from '@angular/core';\n\n/**\n * Specifies content to display in the tile's body.\n */\n@Component({\n standalone: true,\n selector: 'sky-tile-content',\n templateUrl: 'tile-content.component.html',\n})\nexport class SkyTileContentComponent {}\n","<ng-content />\n","import { NgModule } from '@angular/core';\n\nimport { SkyTileContentSectionComponent } from './tile-content-section.component';\nimport { SkyTileContentComponent } from './tile-content.component';\n\n@NgModule({\n imports: [SkyTileContentComponent, SkyTileContentSectionComponent],\n exports: [SkyTileContentComponent, SkyTileContentSectionComponent],\n})\nexport class SkyTileContentModule {}\n","/**\n * The type of message to send to the tile dashboard component.\n */\nexport enum SkyTileDashboardMessageType {\n /**\n * Expands all tiles within the tile dashboard.\n */\n ExpandAll = 0,\n\n /**\n * Collapses all tiles within the tile dashboard.\n */\n CollapseAll = 1,\n}\n","import {\n Component,\n EnvironmentInjector,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { SkyThemeComponentClassDirective } from '@skyux/theme';\n\nimport { DragulaModule } from 'ng2-dragula';\n\nimport { SkyTileDashboardService } from '../tile-dashboard/tile-dashboard.service';\n\nlet columnIdIndex = 0;\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-tile-dashboard-column',\n styleUrls: ['./tile-dashboard-column.component.scss'],\n templateUrl: './tile-dashboard-column.component.html',\n imports: [DragulaModule],\n hostDirectives: [SkyThemeComponentClassDirective],\n})\nexport class SkyTileDashboardColumnComponent {\n public bagId: string;\n\n public columnId: string;\n\n @ViewChild('content', {\n read: ViewContainerRef,\n static: false,\n })\n public content: ViewContainerRef | undefined;\n\n #dashboardService: SkyTileDashboardService;\n\n constructor(\n public injector: EnvironmentInjector,\n dashboardService: SkyTileDashboardService,\n ) {\n this.#dashboardService = dashboardService;\n\n this.columnId = `tile-dashboard-column-${++columnIdIndex}`;\n\n this.bagId = this.#dashboardService.bagId;\n }\n}\n","<div class=\"sky-tile-dashboard-column\" [dragula]=\"bagId\">\n <div #content></div>\n</div>\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n computed,\n inject,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { SkyMediaQueryService } from '@skyux/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyThemeComponentClassDirective } from '@skyux/theme';\n\nimport { Observable, Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\n\nimport { SkyTileDashboardColumnComponent } from '../tile-dashboard-column/tile-dashboard-column.component';\nimport { SkyTileDashboardConfig } from '../tile-dashboard-config/tile-dashboard-config';\n\nimport { SkyTileDashboardMessage } from './tile-dashboard-message';\nimport { SkyTileDashboardMessageType } from './tile-dashboard-message-type';\nimport { SkyTileDashboardService } from './tile-dashboard.service';\n\n/**\n * Specifies a container to group multiple tiles.\n */\n@Component({\n selector: 'sky-tile-dashboard',\n styleUrls: ['./tile-dashboard.component.scss'],\n templateUrl: './tile-dashboard.component.html',\n providers: [SkyTileDashboardService],\n host: {\n '[class]': 'layoutClassName()',\n },\n standalone: false,\n hostDirectives: [SkyThemeComponentClassDirective],\n})\nexport class SkyTileDashboardComponent implements AfterViewInit, OnDestroy {\n readonly #breakpoint = toSignal(\n inject(SkyMediaQueryService).breakpointChange,\n );\n\n /**\n * Populates the tile dashboard based on the `SkyTileDashboardConfig` object.\n * @required\n */\n @Input()\n public set config(value: SkyTileDashboardConfig | undefined) {\n if (value && !this.#configSet) {\n this.#_config = value;\n this.#configSet = true;\n this.#checkReady();\n }\n }\n\n public get config(): SkyTileDashboardConfig | undefined {\n return this.#_config;\n }\n\n /**\n * The observable to send commands to the tile dashboard. The commands must respect the\n * `SkyTileDashboardMessage` type.\n */\n @Input()\n public messageStream = new Subject<SkyTileDashboardMessage>();\n\n /**\n * The unique key for the UI Config Service to retrieve stored settings\n * from a database. The UI Config Service saves configuration settings for users\n * to preserve the layout and collapsed state of tile dashboards. The UI Config Service relies on `id` values from the `config` property to maintain user settings. For more information\n * about the UI Config Service, see the\n * [sticky settings documentation](https://developer.blackbaud.com/skyux/learn/develop/sticky-settings).\n */\n @Input()\n public settingsKey: string | undefined;\n\n /**\n * Fires when the tile dashboard changes state and emits a SkyTileDashboardConfig\n * object. This occurs when tiles collapse or expand and when users drag and drop\n * tiles to rearrange them.\n */\n @Output()\n public configChange = new EventEmitter<SkyTileDashboardConfig>();\n\n @ViewChildren(SkyTileDashboardColumnComponent)\n public columns: QueryList<SkyTileDashboardColumnComponent> | undefined;\n\n @ViewChild('singleColumn', {\n read: SkyTileDashboardColumnComponent,\n static: false,\n })\n public singleColumn: SkyTileDashboardColumnComponent | undefined;\n\n public tileMovedReport = '';\n\n public moveInstructionsId: string;\n\n protected layoutClassName = computed(() => {\n const breakpoint = this.#breakpoint();\n\n let layoutClassName = '';\n\n if (breakpoint === 'xs' || breakpoint === 'sm') {\n layoutClassName = 'sky-tile-dashboard-single-column';\n } else {\n layoutClassName = 'sky-tile-dashboard-multi-column';\n }\n\n if (breakpoint === 'xs') {\n layoutClassName += ' sky-tile-dashboard-xs';\n } else {\n layoutClassName += ' sky-tile-dashboard-gt-xs';\n }\n\n return layoutClassName;\n });\n\n #configSet = false;\n #dashboardService: SkyTileDashboardService;\n #ngUnsubscribe = new Subject<void>();\n #resourcesService: SkyLibResourcesService | undefined;\n #viewReady = false;\n #_config: SkyTileDashboardConfig | undefined;\n\n constructor(\n dashboardService: SkyTileDashboardService,\n @Optional() resourcesService?: SkyLibResourcesService,\n ) {\n this.#dashboardService = dashboardService;\n this.#resourcesService = resourcesService;\n this.moveInstructionsId =\n this.#dashboardService.bagId + '-move-instructions';\n\n this.#dashboardService.configChange.subscribe(\n (config: SkyTileDashboardConfig) => {\n this.configChange.emit(config);\n\n // Update aria live region with tile drag info\n if (config.movedTile && this.#resourcesService) {\n let messageObservable: Observable<string>;\n\n if (this.#breakpoint() === 'xs' || this.#breakpoint() === 'sm') {\n messageObservable = this.#resourcesService.getString(\n 'skyux_tile_moved_assistive_text',\n config.movedTile.tileDescription,\n '1',\n '1',\n config.movedTile.position.toString(),\n config.layout.singleColumn.tiles.length.toString(),\n );\n } else {\n messageObservable = this.#resourcesService.getString(\n 'skyux_tile_moved_assistive_text',\n config.movedTile.tileDescription,\n config.movedTile.column.toString(),\n config.layout.multiColumn.length.toString(),\n config.movedTile.position.toString(),\n config.layout.multiColumn[\n config.movedTile.column - 1\n ].tiles.length.toString(),\n );\n }\n messageObservable.pipe(take(1)).subscribe((message: string) => {\n this.tileMovedReport = message;\n });\n }\n },\n );\n }\n\n public ngAfterViewInit(): void {\n this.messageStream\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((message: SkyTileDashboardMessage) => {\n this.#handleIncomingMessages(message);\n });\n\n this.#viewReady = true;\n this.#checkReady();\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n #checkReady(): void {\n if (this.#viewReady && this.config) {\n setTimeout(() => {\n if (this.config && this.columns && this.singleColumn) {\n this.#dashboardService.init(\n this.config,\n this.columns,\n this.singleColumn,\n this.settingsKey,\n );\n }\n }, 0);\n }\n }\n\n #handleIncomingMessages(message: SkyTileDashboardMessage): void {\n switch (message.type) {\n case SkyTileDashboardMessageType.ExpandAll:\n this.#dashboardService.setAllTilesCollapsed(false);\n break;\n\n case SkyTileDashboardMessageType.CollapseAll:\n this.#dashboardService.setAllTilesCollapsed(true);\n break;\n }\n }\n}\n","@if (config) {\n <span aria-live=\"assertive\" class=\"sky-assistive-text\">\n {{ tileMovedReport }}\n </span>\n @for (\n column of config.layout.multiColumn;\n track column;\n let first = $first, last = $last\n ) {\n <sky-tile-dashboard-column\n class=\"sky-tile-dashboard-layout-multi\"\n [ngClass]=\"{\n 'sky-tile-dashboard-layout-multi-first': first,\n 'sky-tile-dashboard-layout-multi-last': last\n }\"\n [ngStyle]=\"{\n 'flex-basis': 100 / config.layout.multiColumn.length + '%'\n }\"\n />\n }\n <sky-tile-dashboard-column\n #singleColumn\n class=\"sky-tile-dashboard-layout-single\"\n />\n <span class=\"sky-screen-reader-only\" [id]=\"moveInstructionsId\">{{\n 'skyux_tile_move_instructions' | skyLibResources\n }}</span>\n <ng-content />\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { DragulaService } from 'ng2-dragula';\n\nimport { SkyTilesResourcesModule } from '../../shared/sky-tiles-resources.module';\nimport { SkyTileDashboardColumnComponent } from '../tile-dashboard-column/tile-dashboard-column.component';\n\nimport { SkyTileDashboardComponent } from './tile-dashboard.component';\n\n@NgModule({\n declarations: [SkyTileDashboardComponent],\n providers: [DragulaService],\n imports: [\n CommonModule,\n SkyTileDashboardColumnComponent,\n SkyTilesResourcesModule,\n ],\n exports: [SkyTileDashboardComponent],\n})\nexport class SkyTileDashboardModule {}\n","import { NgModule } from '@angular/core';\n\nimport { SkyTileDashboardColumnComponent } from './tile-dashboard-column.component';\n\n@NgModule({\n imports: [SkyTileDashboardColumnComponent],\n exports: [SkyTileDashboardColumnComponent],\n})\nexport class SkyTileDashboardColumnModule {}\n","import { NgModule } from '@angular/core';\n\nimport { SkyTileContentModule } from './tile-content/tile-content.module';\nimport { SkyTileDashboardColumnModule } from './tile-dashboard-column/tile-dashboard-column.module';\nimport { SkyTileDashboardModule } from './tile-dashboard/tile-dashboard.module';\nimport { SkyTileModule } from './tile/tile.module';\n\n@NgModule({\n exports: [\n SkyTileContentModule,\n SkyTileModule,\n SkyTileDashboardColumnModule,\n SkyTileDashboardModule,\n ],\n})\nexport class SkyTilesModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SkyTileDashboardService","i2","i4","i6","i8","i3","i5.SkyTileDashboardColumnComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skyux-tiles.mjs","sources":["../../../../../libs/components/tiles/src/lib/modules/tiles/tile/tile-summary.component.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile/tile-summary.component.html","../../../../../libs/components/tiles/src/lib/modules/tiles/tile/tile-title-id-token.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile/tile-title.component.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile/tile-title.component.html","../../../../../libs/components/tiles/src/lib/modules/shared/sky-tiles-resources.module.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-dashboard/tile-dashboard.service.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile/tile.component.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile/tile.component.html","../../../../../libs/components/tiles/src/lib/modules/tiles/tile/tile.module.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-content/tile-content-section.component.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-content/tile-content-section.component.html","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-content/tile-content.component.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-content/tile-content.component.html","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-content/tile-content.module.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-dashboard/tile-dashboard-message-type.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-dashboard-column/tile-dashboard-column.component.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-dashboard-column/tile-dashboard-column.component.html","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-dashboard/tile-dashboard.component.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-dashboard/tile-dashboard.component.html","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-dashboard/tile-dashboard.module.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tile-dashboard-column/tile-dashboard-column.module.ts","../../../../../libs/components/tiles/src/lib/modules/tiles/tiles.module.ts","../../../../../libs/components/tiles/src/skyux-tiles.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n/**\n * Specifies content to display in the tile's summary.\n */\n@Component({\n standalone: true,\n selector: 'sky-tile-summary',\n templateUrl: 'tile-summary.component.html',\n})\nexport class SkyTileSummaryComponent {}\n","<ng-content />\n","import { InjectionToken } from '@angular/core';\n\nexport const SKY_TILE_TITLE_ID = new InjectionToken<string>(\n 'SKY_TILE_TITLE_ID',\n);\n","import { Component, inject } from '@angular/core';\nimport { SkyTrimModule } from '@skyux/core';\n\nimport { SKY_TILE_TITLE_ID } from './tile-title-id-token';\n\n/**\n * Specifies content to display in the tile's title.\n */\n@Component({\n selector: 'sky-tile-title',\n templateUrl: './tile-title.component.html',\n styleUrls: ['./tile-title.component.scss'],\n imports: [SkyTrimModule],\n})\nexport class SkyTileTitleComponent {\n protected readonly tileTitleId = inject(SKY_TILE_TITLE_ID);\n}\n","<h2 class=\"sky-tile-title sky-font-heading-2\">\n <span skyTrim [id]=\"tileTitleId\"><ng-content /></span\n ><span class=\"sky-control-help-container\"\n ><ng-content select=\".sky-control-help\"></ng-content\n ></span>\n</h2>\n","/* istanbul ignore file */\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-tiles' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport {\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesService,\n} from '@skyux/i18n';\n\nconst RESOURCES: Record<string, SkyLibResources> = {\n 'EN-US': {\n skyux_tile_expand: { message: 'Expand or collapse {0}' },\n skyux_tile_expand_default: { message: 'Expand or collapse' },\n skyux_tile_help: { message: '{0} help' },\n skyux_tile_help_default: { message: 'Help' },\n skyux_tile_settings: { message: '{0} settings' },\n skyux_tile_settings_default: { message: 'Settings' },\n skyux_tile_move: { message: 'Move {0}' },\n skyux_tile_move_default: { message: 'Move' },\n skyux_tile_move_instructions: {\n message:\n \"When focus is placed on a tile's move button, use the arrow keys to move it. The up and down keys change its position within a column. The left and right keys move it between columns.\",\n },\n skyux_tile_moved_assistive_text: {\n message:\n '{0} moved. Current column: {1} of {2}. Current position in column: {3} of {4}',\n },\n },\n 'FR-CA': {\n skyux_tile_expand: { message: 'Agrandir ou réduire {0}' },\n skyux_tile_expand_default: { message: 'Agrandir ou réduire' },\n skyux_tile_help: { message: '{0} aide' },\n skyux_tile_help_default: { message: 'Aide' },\n skyux_tile_settings: { message: '{0} paramètres' },\n skyux_tile_settings_default: { message: 'Paramètres' },\n skyux_tile_move: { message: 'Déplacer {0}' },\n skyux_tile_move_default: { message: 'Déplacer' },\n skyux_tile_move_instructions: {\n message:\n 'Lorsque le curseur est placé sur le bouton déplacer d’une mosaïque, utilisez les touches fléchées pour la déplacer. Les flèches vers le haut et vers le bas modifie la position dans une colonne. Les flèches de gauche et de droite la déplace d’une colonne à l’autre.',\n },\n skyux_tile_moved_assistive_text: {\n message:\n '{0} déplacé(e). Colonne actuelle : {1} de {2}. Position actuelle dans la colonne : {3} de {4}',\n },\n },\n};\n\nSkyLibResourcesService.addResources(RESOURCES);\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n})\nexport class SkyTilesResourcesModule {}\n","import {\n ComponentRef,\n DestroyRef,\n EventEmitter,\n Injectable,\n Output,\n QueryList,\n RendererFactory2,\n computed,\n effect,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport {\n SkyDynamicComponentService,\n SkyMediaQueryService,\n SkyUIConfigService,\n} from '@skyux/core';\n\nimport { DragulaService } from 'ng2-dragula';\nimport { take } from 'rxjs/operators';\n\nimport { SkyTileDashboardColumnComponent } from '../tile-dashboard-column/tile-dashboard-column.component';\nimport { SkyTileDashboardConfig } from '../tile-dashboard-config/tile-dashboard-config';\nimport { SkyTileDashboardConfigLayoutColumn } from '../tile-dashboard-config/tile-dashboard-config-layout-column';\nimport { SkyTileDashboardConfigLayoutTile } from '../tile-dashboard-config/tile-dashboard-config-layout-tile';\nimport { SkyTileDashboardConfigTile } from '../tile-dashboard-config/tile-dashboard-config-tile';\nimport { SkyTileComponent } from '../tile/tile.component';\n\nimport { SkyTileDashboardColumnMode } from './tile-dashboard-column-mode';\n\nconst ATTR_TILE_ID = '_sky-tile-dashboard-tile-id';\n\nlet bagIdIndex = 0;\n\n@Injectable()\nexport class SkyTileDashboardService {\n /**\n * @internal\n */\n public bagId: string;\n\n /**\n * @internal\n */\n public configChange = new EventEmitter<SkyTileDashboardConfig>();\n\n /**\n * Fires when the tile dashboard's initialization is complete.\n */\n @Output()\n public dashboardInitialized = new EventEmitter<void>();\n\n #columns: QueryList<SkyTileDashboardColumnComponent> | undefined;\n #config: SkyTileDashboardConfig | undefined;\n #singleColumn: SkyTileDashboardColumnComponent | undefined;\n #settingsKey: string | undefined;\n #tileComponents: ComponentRef<any>[] | undefined;\n\n readonly #breakpoint = toSignal(\n inject(SkyMediaQueryService).breakpointChange,\n );\n\n readonly #destroyRef = inject(DestroyRef);\n readonly #dragulaService = inject(DragulaService);\n readonly #dynamicComponentService = inject(SkyDynamicComponentService);\n readonly #renderer = inject(RendererFactory2).createRenderer(undefined, null);\n readonly #uiConfigService = inject(SkyUIConfigService);\n\n readonly #mode = computed<SkyTileDashboardColumnMode>(() => {\n const breakpoint = this.#breakpoint();\n\n return breakpoint === 'xs' || breakpoint === 'sm' ? 'single' : 'multi';\n });\n\n constructor() {\n effect(() => {\n const mode = this.#mode();\n this.changeColumnMode(mode);\n });\n\n this.bagId = `sky-tile-dashboard-bag-${++bagIdIndex}`;\n\n this.#initDragula();\n }\n\n /**\n * @internal\n */\n public init(\n config: SkyTileDashboardConfig,\n columns?: QueryList<SkyTileDashboardColumnComponent>,\n singleColumn?: SkyTileDashboardColumnComponent,\n settingsKey?: string,\n ): void {\n // Clone this so changes to the config object outside of this class don't modify\n // the config used inside and vice versa.\n this.#config = Object.assign({}, config) as SkyTileDashboardConfig;\n\n // Verify that all tiles are accounted for in the layout.\n const tileIds = [\n ...new Set([\n ...this.#config.layout.multiColumn.flatMap((column) =>\n column.tiles.map(({ id }) => id),\n ),\n ...this.#config.layout.singleColumn.tiles.map(({ id }) => id),\n ]),\n ];\n this.#checkForNewTiles(this.#config, tileIds);\n\n if (settingsKey) {\n this.#settingsKey = settingsKey;\n\n this.#uiConfigService\n .getConfig(settingsKey, this.#config)\n .pipe(take(1), takeUntilDestroyed(this.#destroyRef))\n .subscribe({\n next: (value: any) => {\n if (this.#config && value.persisted) {\n this.#config.layout = value.layout;\n this.#checkForNewTiles(this.#config, value.tileIds);\n this.configChange.emit(this.#config);\n }\n this.#checkReadyAndLoadTiles(columns, singleColumn);\n },\n error: () => {\n // Config setting key doesn't exist or other config service error\n this.#checkReadyAndLoadTiles(columns, singleColumn);\n },\n });\n } else {\n this.#checkReadyAndLoadTiles(columns, singleColumn);\n }\n }\n\n /**\n * Adds a new tile to the tile dashboard.\n * @param tile Specifies the tile configuration.\n * @param component Specifies the tile component to add.\n */\n public addTileComponent(\n tile: SkyTileDashboardConfigLayoutTile,\n component: ComponentRef<any>,\n ): void {\n this.#tileComponents = this.#tileComponents || [];\n\n this.#tileComponents.push(component);\n\n component.location.nativeElement.setAttribute(ATTR_TILE_ID, tile.id);\n }\n\n /**\n * Checks whether a specified tile is collapsed.\n * @param tile Specifies the tile component to check.\n */\n public tileIsCollapsed(tile: SkyTileComponent): boolean {\n const tileConfig = this.#findTile(this.#getTileId(tile));\n\n if (tileConfig) {\n return tileConfig.isCollapsed;\n }\n\n return false;\n }\n\n /**\n * Sets the collapsed state of all tiles.\n * @param isCollapsed Indicates whether tiles are collapsed.\n */\n public setAllTilesCollapsed(isCollapsed: boolean): void {\n if (this.#config && this.#config.layout.multiColumn) {\n for (const column of this.#config.layout.multiColumn) {\n for (const tile of column.tiles) {\n tile.isCollapsed = isCollapsed;\n }\n }\n for (const tile of this.#config.layout.singleColumn.tiles) {\n tile.isCollapsed = isCollapsed;\n }\n }\n\n if (this.#settingsKey) {\n this.#setUserConfig(this.#config);\n }\n\n this.configChange.emit(this.#config);\n }\n\n /**\n * Sets the collapsed state of a specified tile.\n * @param tile Specifies the tile component.\n * @param isCollapsed Indicates whether the tile is collapsed.\n */\n public setTileCollapsed(\n tile: SkyTileComponent | undefined,\n isCollapsed: boolean,\n ): void {\n const tileConfig = this.#findTile(this.#getTileId(tile));\n\n if (tileConfig) {\n tileConfig.isCollapsed = isCollapsed;\n\n if (this.#settingsKey) {\n this.#setUserConfig(this.#config);\n }\n\n this.configChange.emit(this.#config);\n }\n }\n\n /**\n * @internal\n */\n public getTileComponentType(\n layoutTile: SkyTileDashboardConfigLayoutTile | undefined,\n ): any {\n if (layoutTile && this.#config) {\n for (const tile of this.#config.tiles) {\n if (tile.id === layoutTile.id) {\n return tile.componentType;\n }\n }\n }\n\n return undefined;\n }\n\n /**\n * @internal\n */\n public changeColumnMode(mode: SkyTileDashboardColumnMode): void {\n if (this.#config) {\n if (mode === 'single') {\n this.#moveTilesToSingleColumn();\n } else {\n this.#moveTilesToMultiColumn();\n }\n }\n }\n\n /**\n * @internal\n */\n public getTileComponent(tileId: string): ComponentRef<any> | undefined {\n return this.#tileComponents?.find(\n (tileComponent) =>\n tileComponent.location.nativeElement.getAttribute(ATTR_TILE_ID) ===\n tileId,\n );\n }\n\n /**\n * @internal\n */\n public moveTileOnKeyDown(\n tileCmp: SkyTileComponent,\n direction: 'up' | 'down' | 'left' | 'right',\n tileDescription: string,\n ): void {\n if (this.#config) {\n const mode = this.#mode();\n const tileId = this.#getTileId(tileCmp);\n const tile = this.#findTile(tileId);\n\n let column: SkyTileDashboardConfigLayoutColumn | undefined;\n let colIndex = 0;\n\n if (mode === 'single') {\n column = this.#config.layout.singleColumn;\n } else if (this.#config.layout.multiColumn) {\n colIndex = this.#findTileColumnIndex(\n this.#config.layout.multiColumn,\n tileId,\n );\n column = this.#config.layout.multiColumn[colIndex];\n }\n\n if (column && tile && tileId) {\n if (direction === 'left' || direction === 'right') {\n if (mode === 'multi') {\n this.#moveTileArrowLeftRight(\n tile,\n tileDescription,\n direction,\n colIndex,\n column,\n this.#config.layout.multiColumn,\n );\n }\n } else {\n // Get the column element\n let columnEl: Element | undefined;\n if (mode === 'single') {\n columnEl = this.#getColumnEl(this.#singleColumn);\n } else {\n columnEl = this.#getColumnEl(this.#columns?.toArray()[colIndex]);\n }\n this.#moveTileArrowUpDown(\n tile,\n tileDescription,\n direction,\n colIndex,\n column,\n columnEl,\n );\n }\n }\n }\n }\n\n #moveTileArrowLeftRight(\n tile: SkyTileDashboardConfigLayoutTile,\n tileDescription: string,\n direction: 'left' | 'right',\n colIndex: number,\n column: SkyTileDashboardConfigLayoutColumn,\n multiColumn: SkyTileDashboardConfigLayoutColumn[],\n ): void {\n const operator = direction === 'left' ? -1 : 1;\n const newColumn = multiColumn[colIndex + operator];\n\n if (newColumn) {\n // Move the tile to the end of the new column\n newColumn.tiles.push(tile);\n column.tiles = column.tiles.filter((item) => item !== tile);\n this.#moveTilesToColumn(this.#columns?.toArray()[colIndex + operator], [\n tile,\n ]);\n\n // Report the change in configuration\n this.#emitTileMove(\n tileDescription,\n tile,\n colIndex + operator + 1,\n newColumn.tiles.length,\n );\n }\n }\n\n #moveTileArrowUpDown(\n tile: SkyTileDashboardConfigLayoutTile,\n tileDescription: string,\n direction: 'up' | 'down',\n colIndex: number,\n column: SkyTileDashboardConfigLayoutColumn,\n columnEl: Element | undefined,\n ): void {\n const operator = direction === 'up' ? -1 : 1;\n const curIndex = column.tiles.findIndex((value) => value.id === tile.id);\n const tileComponentInstance = this.getTileComponent(tile.id);\n\n if (tileComponentInstance && column.tiles[curIndex + operator]) {\n const temp = column.tiles[curIndex + operator];\n column.tiles[curIndex + operator] = tile;\n column.tiles[curIndex] = temp;\n\n if (columnEl) {\n // Move the tile element in the document\n if (curIndex + operator === column.tiles.length - 1) {\n this.#renderer.appendChild(\n columnEl,\n tileComponentInstance.location.nativeElement,\n );\n } else {\n this.#renderer.insertBefore(\n columnEl,\n tileComponentInstance.location.nativeElement,\n this.getTileComponent(column.tiles[curIndex + operator + 1].id)\n ?.location.nativeElement,\n );\n }\n }\n\n // Report the change in configuration\n this.#emitTileMove(\n tileDescription,\n tile,\n colIndex + 1,\n curIndex + operator + 1,\n );\n }\n }\n\n #emitTileMove(\n tileDescription: string,\n tile: SkyTileDashboardConfigLayoutTile,\n newColumnIndex: number,\n newRowIndex: number,\n ): void {\n const reportConfig = this.#getConfigForUIState();\n if (reportConfig) {\n if (this.#settingsKey) {\n this.#setUserConfig({ ...reportConfig });\n }\n reportConfig.movedTile = {\n tileDescription: this.#getTileDescription(tileDescription, tile),\n column: newColumnIndex,\n position: newRowIndex,\n };\n this.configChange.emit(reportConfig);\n }\n }\n\n #getTileDescription(\n tileDescription: string,\n tile: SkyTileDashboardConfigLayoutTile,\n ): string {\n return tileDescription || tile.id;\n }\n\n #getTileId(tile: SkyTileComponent | undefined): string | undefined {\n if (tile) {\n let el = tile.elementRef.nativeElement;\n let tileId: string;\n\n while (el) {\n tileId = el.getAttribute(ATTR_TILE_ID);\n\n if (tileId) {\n return tileId;\n }\n\n el = el.parentElement;\n }\n }\n\n return undefined;\n }\n\n #getTileOrRemoveFromLayout(\n layoutTile: SkyTileDashboardConfigLayoutTile,\n ): SkyTileDashboardConfigTile | undefined {\n if (layoutTile && this.#config) {\n for (const tile of this.#config.tiles) {\n if (tile.id === layoutTile.id) {\n return tile;\n }\n }\n\n // If the layout tile was not found in the list of tiles, it was removed since last the user updated settings\n if (this.#config?.layout.singleColumn) {\n this.#config.layout.singleColumn.tiles =\n this.#config.layout.singleColumn.tiles.filter(\n (elem) => elem.id !== layoutTile.id,\n );\n }\n\n this.#config?.layout.multiColumn.forEach((elem) => {\n elem.tiles = elem.tiles.filter((res) => res.id !== layoutTile.id);\n });\n }\n\n return undefined;\n }\n\n #checkReadyAndLoadTiles(\n columns: QueryList<SkyTileDashboardColumnComponent> | undefined,\n singleColumn: SkyTileDashboardColumnComponent | undefined,\n ): void {\n this.#columns = columns;\n this.#singleColumn = singleColumn;\n if (this.#config && this.#columns) {\n this.#loadTiles(this.#config, this.#columns.toArray());\n this.dashboardInitialized.emit();\n }\n }\n\n #loadTiles(\n config: SkyTileDashboardConfig,\n columns: SkyTileDashboardColumnComponent[],\n ): void {\n const layout = config.layout;\n\n if (this.#mode() === 'single') {\n for (const tile of layout.singleColumn.tiles) {\n this.#loadTileIntoColumn(this.#singleColumn, tile);\n }\n } else {\n for (let i = 0, n = layout.multiColumn.length; i < n; i++) {\n const column = columns[i];\n for (const tile of layout.multiColumn[i].tiles) {\n this.#loadTileIntoColumn(column, tile);\n }\n }\n }\n }\n\n #loadTileIntoColumn(\n column: SkyTileDashboardColumnComponent | undefined,\n layoutTile: SkyTileDashboardConfigLayoutTile,\n ): void {\n if (column) {\n const tile = this.#getTileOrRemoveFromLayout(layoutTile);\n\n if (tile && this.#dynamicComponentService) {\n const componentType = tile.componentType;\n const providers = tile.providers ?? [];\n\n const componentRef = this.#dynamicComponentService.createComponent(\n componentType,\n {\n providers: providers,\n viewContainerRef: column.content,\n environmentInjector: column.injector,\n className: 'sky-tile-parent',\n },\n );\n\n this.addTileComponent(layoutTile, componentRef);\n\n // Make sure the component is marked for changes in case the parent component uses\n // the OnPush change detection strategy.\n componentRef.changeDetectorRef.markForCheck();\n }\n }\n }\n\n #moveTilesToSingleColumn(): void {\n this.#moveTilesToColumn(\n this.#singleColumn,\n this.#config?.layout.singleColumn.tiles,\n );\n }\n\n #moveTilesToMultiColumn(): void {\n let layoutColumns: SkyTileDashboardConfigLayoutColumn[] = [];\n if (this.#config) {\n layoutColumns = this.#config.layout.multiColumn;\n }\n const columns: SkyTileDashboardColumnComponent[] =\n this.#columns?.toArray() ?? [];\n\n for (let i = 0, n = layoutColumns.length; i < n; i++) {\n this.#moveTilesToColumn(columns[i], layoutColumns[i].tiles);\n }\n }\n\n #moveTilesToColumn(\n column: SkyTileDashboardColumnComponent | undefined,\n layoutTiles: SkyTileDashboardConfigLayoutTile[] | undefined,\n ): void {\n const columnEl = this.#getColumnEl(column);\n if (columnEl && layoutTiles) {\n for (const layoutTile of layoutTiles) {\n const tileComponentInstance = this.getTileComponent(layoutTile.id);\n if (tileComponentInstance) {\n this.#renderer.appendChild(\n columnEl,\n tileComponentInstance.location.nativeElement,\n );\n }\n }\n }\n }\n\n #getConfigForUIState(): SkyTileDashboardConfig | undefined {\n if (this.#config) {\n this.#config = {\n tiles: this.#config.tiles,\n layout: {\n singleColumn: this.#getSingleColumnLayoutForUIState(this.#config),\n multiColumn: this.#getMultiColumnLayoutForUIState(this.#config),\n },\n };\n }\n\n return this.#config;\n }\n\n #getSingleColumnLayoutForUIState(\n config: SkyTileDashboardConfig,\n ): SkyTileDashboardConfigLayoutColumn {\n if (this.#mode() === 'single') {\n return {\n tiles: this.#getTilesInEl(this.#getColumnEl(this.#singleColumn)),\n };\n }\n\n return config.layout.singleColumn;\n }\n\n #getMultiColumnLayoutForUIState(\n config: SkyTileDashboardConfig,\n ): SkyTileDashboardConfigLayoutColumn[] {\n if (this.#mode() === 'multi') {\n const layoutColumns: SkyTileDashboardConfigLayoutColumn[] = [];\n let columns: SkyTileDashboardColumnComponent[] = [];\n if (this.#columns) {\n columns = this.#columns?.toArray();\n }\n\n for (const column of columns) {\n if (column !== this.#singleColumn) {\n const layoutColumn: SkyTileDashboardConfigLayoutColumn = {\n tiles: this.#getTilesInEl(this.#getColumnEl(column)),\n };\n\n layoutColumns.push(layoutColumn);\n }\n }\n\n return layoutColumns;\n }\n\n return config.layout.multiColumn;\n }\n\n #getTilesInEl(el: Element | undefined): SkyTileDashboardConfigLayoutTile[] {\n const tileEls = el?.querySelectorAll('[' + ATTR_TILE_ID + ']');\n const layoutTiles: SkyTileDashboardConfigLayoutTile[] = [];\n\n if (tileEls) {\n for (let i = 0, n = tileEls.length; i < n; i++) {\n const tileEl = tileEls[i];\n const tileId = tileEl.getAttribute(ATTR_TILE_ID);\n const tile = this.#findTile(tileId);\n\n if (tile) {\n layoutTiles.push(tile);\n }\n }\n }\n\n return layoutTiles;\n }\n\n #initDragula(): void {\n this.#dragulaService.createGroup(this.bagId, {\n moves: (el, container, handle) => {\n const target = el?.querySelector('.sky-tile-grab-handle');\n return !!target && target.contains(handle!);\n },\n });\n\n this.#dragulaService\n .drop(this.bagId)\n .pipe(takeUntilDestroyed(this.#destroyRef))\n .subscribe(() => {\n const config = this.#getConfigForUIState();\n\n if (config) {\n if (this.#settingsKey) {\n this.#setUserConfig(config);\n }\n\n this.configChange.emit(config);\n }\n });\n }\n\n #getColumnEl(\n column: SkyTileDashboardColumnComponent | undefined,\n ): Element | undefined {\n return column?.content?.element.nativeElement.parentNode;\n }\n\n #findTile(\n tileId: string | undefined | null,\n ): SkyTileDashboardConfigLayoutTile | undefined {\n if (this.#config && this.#config.layout.multiColumn) {\n for (const column of this.#config.layout.multiColumn) {\n if (column.tiles) {\n for (const tile of column.tiles) {\n if (tile.id === tileId) {\n return tile;\n }\n }\n }\n }\n }\n\n return undefined;\n }\n\n #findTileColumnIndex(\n multiColumn: SkyTileDashboardConfigLayoutColumn[],\n tileId: string | undefined,\n ): number {\n return multiColumn.findIndex(\n (col) => !!col.tiles?.find((tile) => tile.id === tileId),\n );\n }\n\n #setUserConfig(config?: SkyTileDashboardConfig): void {\n if (config && this.#settingsKey)\n this.#uiConfigService\n .setConfig(this.#settingsKey, {\n layout: config.layout,\n persisted: true,\n tileIds: config.tiles.map((elem) => elem.id),\n })\n .pipe(take(1), takeUntilDestroyed(this.#destroyRef))\n .subscribe({\n error: (err) => {\n console.warn('Could not save tile dashboard settings.');\n console.warn(err);\n },\n });\n }\n\n #checkForNewTiles(\n config: SkyTileDashboardConfig,\n oldTileIds: string[],\n ): boolean {\n // Get a list of tiles that are in the config's default list but not in the user's settings\n const newTiles = config.tiles.filter(({ id }) => !oldTileIds.includes(id));\n let hasChange = newTiles.length > 0;\n\n const multiColumn: SkyTileDashboardConfigLayoutColumn[] | undefined =\n config.layout.multiColumn;\n const singleColumn: SkyTileDashboardConfigLayoutColumn | undefined =\n config.layout.singleColumn;\n\n // Append new tiles to the end of the layouts\n if (multiColumn) {\n newTiles.forEach((elem) => {\n const smallest = Math.min(\n ...multiColumn.map((col) => col.tiles.length),\n );\n const locationToAdd = multiColumn.findIndex(\n (col) => col.tiles.length === smallest,\n );\n multiColumn[locationToAdd].tiles.push({\n id: elem.id,\n isCollapsed: false,\n });\n });\n }\n\n if (singleColumn) {\n newTiles.forEach((elem) => {\n singleColumn.tiles.push({ id: elem.id, isCollapsed: false });\n });\n }\n\n singleColumn?.tiles.forEach((tile) => {\n hasChange ||= !this.#getTileOrRemoveFromLayout(tile);\n });\n\n multiColumn?.forEach((column) => {\n column.tiles.forEach((tile) => {\n hasChange ||= !this.#getTileOrRemoveFromLayout(tile);\n });\n });\n\n return hasChange;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { skyAnimationSlide } from '@skyux/animations';\nimport { SkyIdModule, SkyIdService, SkyLogService } from '@skyux/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyChevronModule } from '@skyux/indicators';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyTilesResourcesModule } from '../../shared/sky-tiles-resources.module';\nimport { SkyTileDashboardService } from '../tile-dashboard/tile-dashboard.service';\n\nimport { SKY_TILE_TITLE_ID } from './tile-title-id-token';\nimport { SkyTileTitleComponent } from './tile-title.component';\n\n/**\n * Provides a common look-and-feel for tab content.\n */\n@Component({\n selector: 'sky-tile',\n styleUrls: ['./tile.component.scss'],\n templateUrl: './tile.component.html',\n animations: [skyAnimationSlide],\n imports: [\n CommonModule,\n SkyChevronModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyIdModule,\n SkyThemeModule,\n SkyTilesResourcesModule,\n ],\n providers: [\n {\n provide: SKY_TILE_TITLE_ID,\n useFactory(): string {\n const idService = inject(SkyIdService);\n return idService.generateId();\n },\n },\n ],\n})\nexport class SkyTileComponent implements OnChanges, OnDestroy {\n /**\n * A help key that identifies the global help content to display. When specified along with `tileName`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline) button is\n * added to the tile header. Clicking the button invokes global help as configured by the application.\n * This property only applies when `tileName` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n /**\n * The content of the help popover. When specified along with `tileName`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the tile header. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `tileName` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * Whether to display a settings button in the tile header. To display the\n * button, you must also listen for the `settingsClick` event.\n * @default true\n */\n @Input()\n public showSettings = true;\n\n /**\n * Whether to display a help button in the tile header. To display the\n * button, you must also listen for the `helpClick` event.\n * @default true\n * @deprecated Set the `helpKey` or `helpPopoverContent` inputs instead.\n */\n @Input()\n public showHelp = true;\n\n /**\n * The human-readable name for the tile that is available to the tile controls for multiple purposes, such as accessibility and instrumentation. The component uses the name to construct ARIA labels for the help, expand/collapse, settings, and drag handle buttons to [support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * For example, if the tile name is \"Constituents,\" the help input's `aria-label` is \"Constituents help\" and the drag handle's `aria-label` is \"Move Constituents.\" For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n */\n @Input()\n public tileName: string | undefined;\n\n /**\n * Fires when users select the settings button in the tile header. The settings\n * button only appears when the `showSettings` property is set to `true`.\n */\n @Output()\n public settingsClick = new EventEmitter();\n\n /**\n * Fires when the tile's collapsed state changes. Returns `true` when the tile\n * collapses and `false` when it expands.\n */\n @Output()\n public isCollapsedChange = new EventEmitter<boolean>();\n\n /**\n * Fires when users select the help button in the tile header. The help\n * button only appears when the `showHelp` property is set to `true`.\n * @deprecated Set the `helpKey` or `helpPopoverContent` inputs instead.\n */\n @Output()\n public helpClick = new EventEmitter();\n\n public get isCollapsed(): boolean {\n if (this.#dashboardService) {\n const configCollapsedState = this.#dashboardService.tileIsCollapsed(this);\n this.#_isCollapsed = configCollapsedState;\n }\n\n return this.#_isCollapsed;\n }\n\n /**\n * Whether the tile is in a collapsed state.\n * @default false\n */\n @Input()\n public set isCollapsed(value: boolean | undefined) {\n this.#_isCollapsed = !!value;\n\n if (this.#dashboardService) {\n this.#dashboardService.setTileCollapsed(this, this.#_isCollapsed);\n }\n\n this.isCollapsedChange.emit(this.#_isCollapsed);\n }\n\n public ariaDescribedBy: string | undefined;\n\n public isInDashboardColumn = false;\n\n @ViewChild('grabHandle', {\n read: ElementRef,\n static: false,\n })\n public grabHandle: ElementRef | undefined;\n\n @ViewChild('titleContainer', {\n read: ElementRef,\n static: false,\n })\n public title: ElementRef | undefined;\n\n @ContentChild(SkyTileTitleComponent, { read: ElementRef })\n protected titleRef: ElementRef | undefined;\n\n #changeDetector: ChangeDetectorRef;\n #dashboardService: SkyTileDashboardService | undefined;\n #ngUnsubscribe = new Subject<void>();\n #_isCollapsed = false;\n\n protected tileTitleId = inject(SKY_TILE_TITLE_ID);\n\n readonly #logSvc = inject(SkyLogService);\n\n constructor(\n public elementRef: ElementRef,\n changeDetector: ChangeDetectorRef,\n @Optional() dashboardService?: SkyTileDashboardService,\n ) {\n this.#changeDetector = changeDetector;\n this.#dashboardService = dashboardService;\n this.isInDashboardColumn = !!this.#dashboardService;\n\n if (this.#dashboardService) {\n this.ariaDescribedBy = `${this.#dashboardService.bagId}-move-instructions`;\n\n /**\n * This subscription ensures that if any values which come in from the dashboard service are\n * updated that the component will update if the tile's parent component utilizes OnPush\n * change detection.\n */\n this.#dashboardService.configChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#changeDetector.markForCheck();\n });\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['showHelp']?.firstChange) {\n this.#logSvc.deprecated('SkyTileComponent.showHelp', {\n deprecationMajorVersion: 10,\n replacementRecommendation:\n 'Set the `helpKey` or `helpPopoverContent` inputs instead.',\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public settingsButtonClicked(): void {\n this.settingsClick.emit(undefined);\n }\n\n /**\n * @deprecated\n */\n public helpButtonClicked(): void {\n this.helpClick.emit(undefined);\n }\n\n public get hasSettings(): boolean {\n return this.settingsClick.observed && this.showSettings;\n }\n\n /**\n * @deprecated\n */\n public get hasHelp(): boolean {\n return this.helpClick.observed && this.showHelp;\n }\n\n public titleClick(evt: MouseEvent): void {\n const targetEl = evt.target as HTMLElement | null;\n\n // Don't expand/collapse if the help inline button is clicked.\n if (targetEl?.closest('sky-help-inline') === null) {\n this.isCollapsed = !this.isCollapsed;\n }\n }\n\n public chevronDirectionChange(direction: string): void {\n this.isCollapsed = direction === 'down';\n }\n\n protected moveTile(event: KeyboardEvent): void {\n if (\n ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.key) &&\n this.#dashboardService\n ) {\n const direction = event.key.toLowerCase().replace('arrow', '') as\n | 'up'\n | 'down'\n | 'left'\n | 'right';\n this.#dashboardService.moveTileOnKeyDown(\n this,\n direction,\n this.title?.nativeElement.innerText,\n );\n this.#focusHandle();\n }\n }\n\n #focusHandle(): void {\n this.grabHandle?.nativeElement.focus();\n }\n}\n","<section\n class=\"sky-tile\"\n [ngClass]=\"{\n 'sky-tile-collapsed': isCollapsed\n }\"\n [skyThemeClass]=\"{\n 'sky-box sky-elevation-1-bordered sky-padding-even-xl': 'modern'\n }\"\n>\n <header class=\"sky-tile-header\">\n <div class=\"sky-tile-header-content\" (click)=\"titleClick($event)\">\n <div #titleContainer class=\"sky-tile-header-title\">\n <ng-content select=\"sky-tile-title\" />\n @if (tileName && (helpKey || helpPopoverContent)) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n [helpKey]=\"helpKey\"\n [labelText]=\"tileName\"\n [popoverContent]=\"helpPopoverContent\"\n [popoverTitle]=\"helpPopoverTitle\"\n />\n </span>\n }\n </div>\n <div class=\"sky-tile-summary sky-font-display-3\">\n <ng-content select=\"sky-tile-summary\" />\n </div>\n </div>\n <div class=\"sky-tile-header-column-tools\">\n <div class=\"sky-tile-tools\">\n <ng-container *skyThemeIf=\"'default'\">\n @if (hasHelp) {\n <button\n class=\"sky-btn sky-btn-icon-borderless sky-tile-tools-control sky-tile-help\"\n type=\"button\"\n [attr.aria-label]=\"\n tileName\n ? ('skyux_tile_help' | skyLibResources: tileName)\n : ('skyux_tile_help_default' | skyLibResources)\n \"\n (click)=\"helpButtonClicked()\"\n >\n <sky-icon iconName=\"question-circle\" />\n </button>\n }\n </ng-container>\n <sky-chevron\n class=\"sky-tile-tools-control\"\n [ariaControls]=\"tileContent.id\"\n [ariaLabel]=\"\n tileName\n ? ('skyux_tile_expand' | skyLibResources: tileName)\n : ('skyux_tile_expand_default' | skyLibResources)\n \"\n [direction]=\"isCollapsed ? 'down' : 'up'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n />\n @if (hasSettings) {\n <button\n class=\"sky-btn sky-tile-settings sky-btn-icon-borderless sky-tile-tools-control\"\n type=\"button\"\n [attr.aria-label]=\"\n tileName\n ? ('skyux_tile_settings' | skyLibResources: tileName)\n : ('skyux_tile_settings_default' | skyLibResources)\n \"\n (click)=\"settingsButtonClicked()\"\n >\n <sky-icon iconName=\"settings\" />\n </button>\n }\n @if (isInDashboardColumn) {\n <button\n #grabHandle\n class=\"sky-btn sky-btn-icon-borderless sky-tile-tools-control sky-tile-grab-handle\"\n type=\"button\"\n [attr.aria-label]=\"\n tileName\n ? ('skyux_tile_move' | skyLibResources: tileName)\n : ('skyux_tile_move_default' | skyLibResources)\n \"\n [attr.aria-describedby]=\"ariaDescribedBy\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"moveTile($event)\"\n >\n <sky-icon iconName=\"re-order-dots-vertical\" iconSize=\"s\" />\n </button>\n }\n </div>\n </div>\n </header>\n <div\n #tileContent=\"skyId\"\n class=\"sky-tile-content\"\n role=\"region\"\n skyId\n [attr.aria-label]=\"tileName\"\n [attr.aria-labelledby]=\"!tileName && titleRef ? tileTitleId : undefined\"\n [@skyAnimationSlide]=\"isCollapsed ? 'up' : 'down'\"\n >\n <ng-content select=\"sky-tile-content\" />\n </div>\n</section>\n","import { NgModule } from '@angular/core';\n\nimport { SkyTileSummaryComponent } from './tile-summary.component';\nimport { SkyTileTitleComponent } from './tile-title.component';\nimport { SkyTileComponent } from './tile.component';\n\n@NgModule({\n imports: [SkyTileComponent, SkyTileSummaryComponent, SkyTileTitleComponent],\n exports: [SkyTileComponent, SkyTileSummaryComponent, SkyTileTitleComponent],\n})\nexport class SkyTileModule {}\n","import { Component } from '@angular/core';\nimport { SkyThemeModule } from '@skyux/theme';\n\n/**\n * Specifies content to display inside a padded section of a SkyTileContentComponent.\n */\n@Component({\n selector: 'sky-tile-content-section',\n styleUrls: ['./tile-content-section.component.scss'],\n templateUrl: './tile-content-section.component.html',\n imports: [SkyThemeModule],\n})\nexport class SkyTileContentSectionComponent {}\n","<div class=\"sky-tile-content-section sky-border-bottom-row\">\n <ng-content />\n</div>\n","import { Component } from '@angular/core';\n\n/**\n * Specifies content to display in the tile's body.\n */\n@Component({\n standalone: true,\n selector: 'sky-tile-content',\n templateUrl: 'tile-content.component.html',\n})\nexport class SkyTileContentComponent {}\n","<ng-content />\n","import { NgModule } from '@angular/core';\n\nimport { SkyTileContentSectionComponent } from './tile-content-section.component';\nimport { SkyTileContentComponent } from './tile-content.component';\n\n@NgModule({\n imports: [SkyTileContentComponent, SkyTileContentSectionComponent],\n exports: [SkyTileContentComponent, SkyTileContentSectionComponent],\n})\nexport class SkyTileContentModule {}\n","/**\n * The type of message to send to the tile dashboard component.\n */\nexport enum SkyTileDashboardMessageType {\n /**\n * Expands all tiles within the tile dashboard.\n */\n ExpandAll = 0,\n\n /**\n * Collapses all tiles within the tile dashboard.\n */\n CollapseAll = 1,\n}\n","import {\n Component,\n EnvironmentInjector,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { SkyThemeComponentClassDirective } from '@skyux/theme';\n\nimport { DragulaModule } from 'ng2-dragula';\n\nimport { SkyTileDashboardService } from '../tile-dashboard/tile-dashboard.service';\n\nlet columnIdIndex = 0;\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-tile-dashboard-column',\n styleUrls: ['./tile-dashboard-column.component.scss'],\n templateUrl: './tile-dashboard-column.component.html',\n imports: [DragulaModule],\n hostDirectives: [SkyThemeComponentClassDirective],\n})\nexport class SkyTileDashboardColumnComponent {\n public bagId: string;\n\n public columnId: string;\n\n @ViewChild('content', {\n read: ViewContainerRef,\n static: false,\n })\n public content: ViewContainerRef | undefined;\n\n #dashboardService: SkyTileDashboardService;\n\n constructor(\n public injector: EnvironmentInjector,\n dashboardService: SkyTileDashboardService,\n ) {\n this.#dashboardService = dashboardService;\n\n this.columnId = `tile-dashboard-column-${++columnIdIndex}`;\n\n this.bagId = this.#dashboardService.bagId;\n }\n}\n","<div class=\"sky-tile-dashboard-column\" [dragula]=\"bagId\">\n <div #content></div>\n</div>\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n computed,\n inject,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { SkyMediaQueryService } from '@skyux/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyThemeComponentClassDirective } from '@skyux/theme';\n\nimport { Observable, Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\n\nimport { SkyTileDashboardColumnComponent } from '../tile-dashboard-column/tile-dashboard-column.component';\nimport { SkyTileDashboardConfig } from '../tile-dashboard-config/tile-dashboard-config';\n\nimport { SkyTileDashboardMessage } from './tile-dashboard-message';\nimport { SkyTileDashboardMessageType } from './tile-dashboard-message-type';\nimport { SkyTileDashboardService } from './tile-dashboard.service';\n\n/**\n * Specifies a container to group multiple tiles.\n */\n@Component({\n selector: 'sky-tile-dashboard',\n styleUrls: ['./tile-dashboard.component.scss'],\n templateUrl: './tile-dashboard.component.html',\n providers: [SkyTileDashboardService],\n host: {\n '[class]': 'layoutClassName()',\n },\n standalone: false,\n hostDirectives: [SkyThemeComponentClassDirective],\n})\nexport class SkyTileDashboardComponent implements AfterViewInit, OnDestroy {\n readonly #breakpoint = toSignal(\n inject(SkyMediaQueryService).breakpointChange,\n );\n\n /**\n * Populates the tile dashboard based on the `SkyTileDashboardConfig` object.\n * @required\n */\n @Input()\n public set config(value: SkyTileDashboardConfig | undefined) {\n if (value && !this.#configSet) {\n this.#_config = value;\n this.#configSet = true;\n this.#checkReady();\n }\n }\n\n public get config(): SkyTileDashboardConfig | undefined {\n return this.#_config;\n }\n\n /**\n * The observable to send commands to the tile dashboard. The commands must respect the\n * `SkyTileDashboardMessage` type.\n */\n @Input()\n public messageStream = new Subject<SkyTileDashboardMessage>();\n\n /**\n * The unique key for the UI Config Service to retrieve stored settings\n * from a database. The UI Config Service saves configuration settings for users\n * to preserve the layout and collapsed state of tile dashboards. The UI Config Service relies on `id` values from the `config` property to maintain user settings. For more information\n * about the UI Config Service, see the\n * [sticky settings documentation](https://developer.blackbaud.com/skyux/learn/develop/sticky-settings).\n */\n @Input()\n public settingsKey: string | undefined;\n\n /**\n * Fires when the tile dashboard changes state and emits a SkyTileDashboardConfig\n * object. This occurs when tiles collapse or expand and when users drag and drop\n * tiles to rearrange them.\n */\n @Output()\n public configChange = new EventEmitter<SkyTileDashboardConfig>();\n\n @ViewChildren(SkyTileDashboardColumnComponent)\n public columns: QueryList<SkyTileDashboardColumnComponent> | undefined;\n\n @ViewChild('singleColumn', {\n read: SkyTileDashboardColumnComponent,\n static: false,\n })\n public singleColumn: SkyTileDashboardColumnComponent | undefined;\n\n public tileMovedReport = '';\n\n public moveInstructionsId: string;\n\n protected layoutClassName = computed(() => {\n const breakpoint = this.#breakpoint();\n\n let layoutClassName = '';\n\n if (breakpoint === 'xs' || breakpoint === 'sm') {\n layoutClassName = 'sky-tile-dashboard-single-column';\n } else {\n layoutClassName = 'sky-tile-dashboard-multi-column';\n }\n\n if (breakpoint === 'xs') {\n layoutClassName += ' sky-tile-dashboard-xs';\n } else {\n layoutClassName += ' sky-tile-dashboard-gt-xs';\n }\n\n return layoutClassName;\n });\n\n #configSet = false;\n #dashboardService: SkyTileDashboardService;\n #ngUnsubscribe = new Subject<void>();\n #resourcesService: SkyLibResourcesService | undefined;\n #viewReady = false;\n #viewReadyTimer: ReturnType<typeof setTimeout> | undefined;\n #_config: SkyTileDashboardConfig | undefined;\n\n constructor(\n dashboardService: SkyTileDashboardService,\n @Optional() resourcesService?: SkyLibResourcesService,\n ) {\n this.#dashboardService = dashboardService;\n this.#resourcesService = resourcesService;\n this.moveInstructionsId =\n this.#dashboardService.bagId + '-move-instructions';\n\n this.#dashboardService.configChange.subscribe(\n (config: SkyTileDashboardConfig) => {\n this.configChange.emit(config);\n\n // Update aria live region with tile drag info\n if (config.movedTile && this.#resourcesService) {\n let messageObservable: Observable<string>;\n\n if (this.#breakpoint() === 'xs' || this.#breakpoint() === 'sm') {\n messageObservable = this.#resourcesService.getString(\n 'skyux_tile_moved_assistive_text',\n config.movedTile.tileDescription,\n '1',\n '1',\n config.movedTile.position.toString(),\n config.layout.singleColumn.tiles.length.toString(),\n );\n } else {\n messageObservable = this.#resourcesService.getString(\n 'skyux_tile_moved_assistive_text',\n config.movedTile.tileDescription,\n config.movedTile.column.toString(),\n config.layout.multiColumn.length.toString(),\n config.movedTile.position.toString(),\n config.layout.multiColumn[\n config.movedTile.column - 1\n ].tiles.length.toString(),\n );\n }\n messageObservable.pipe(take(1)).subscribe((message: string) => {\n this.tileMovedReport = message;\n });\n }\n },\n );\n }\n\n public ngAfterViewInit(): void {\n this.messageStream\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((message: SkyTileDashboardMessage) => {\n this.#handleIncomingMessages(message);\n });\n\n this.#viewReady = true;\n this.#checkReady();\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n #checkReady(): void {\n if (this.#viewReady && this.config && !this.#viewReadyTimer) {\n this.#viewReadyTimer = setTimeout(() => {\n this.#viewReadyTimer = undefined;\n if (this.config && this.columns && this.singleColumn) {\n this.#dashboardService.init(\n this.config,\n this.columns,\n this.singleColumn,\n this.settingsKey,\n );\n }\n }, 0);\n }\n }\n\n #handleIncomingMessages(message: SkyTileDashboardMessage): void {\n switch (message.type) {\n case SkyTileDashboardMessageType.ExpandAll:\n this.#dashboardService.setAllTilesCollapsed(false);\n break;\n\n case SkyTileDashboardMessageType.CollapseAll:\n this.#dashboardService.setAllTilesCollapsed(true);\n break;\n }\n }\n}\n","@if (config) {\n <span aria-live=\"assertive\" class=\"sky-assistive-text\">\n {{ tileMovedReport }}\n </span>\n @for (\n column of config.layout.multiColumn;\n track column;\n let first = $first, last = $last\n ) {\n <sky-tile-dashboard-column\n class=\"sky-tile-dashboard-layout-multi\"\n [ngClass]=\"{\n 'sky-tile-dashboard-layout-multi-first': first,\n 'sky-tile-dashboard-layout-multi-last': last\n }\"\n [ngStyle]=\"{\n 'flex-basis': 100 / config.layout.multiColumn.length + '%'\n }\"\n />\n }\n <sky-tile-dashboard-column\n #singleColumn\n class=\"sky-tile-dashboard-layout-single\"\n />\n <span class=\"sky-screen-reader-only\" [id]=\"moveInstructionsId\">{{\n 'skyux_tile_move_instructions' | skyLibResources\n }}</span>\n <ng-content />\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { DragulaService } from 'ng2-dragula';\n\nimport { SkyTilesResourcesModule } from '../../shared/sky-tiles-resources.module';\nimport { SkyTileDashboardColumnComponent } from '../tile-dashboard-column/tile-dashboard-column.component';\n\nimport { SkyTileDashboardComponent } from './tile-dashboard.component';\n\n@NgModule({\n declarations: [SkyTileDashboardComponent],\n providers: [DragulaService],\n imports: [\n CommonModule,\n SkyTileDashboardColumnComponent,\n SkyTilesResourcesModule,\n ],\n exports: [SkyTileDashboardComponent],\n})\nexport class SkyTileDashboardModule {}\n","import { NgModule } from '@angular/core';\n\nimport { SkyTileDashboardColumnComponent } from './tile-dashboard-column.component';\n\n@NgModule({\n imports: [SkyTileDashboardColumnComponent],\n exports: [SkyTileDashboardColumnComponent],\n})\nexport class SkyTileDashboardColumnModule {}\n","import { NgModule } from '@angular/core';\n\nimport { SkyTileContentModule } from './tile-content/tile-content.module';\nimport { SkyTileDashboardColumnModule } from './tile-dashboard-column/tile-dashboard-column.module';\nimport { SkyTileDashboardModule } from './tile-dashboard/tile-dashboard.module';\nimport { SkyTileModule } from './tile/tile.module';\n\n@NgModule({\n exports: [\n SkyTileContentModule,\n SkyTileModule,\n SkyTileDashboardColumnModule,\n SkyTileDashboardModule,\n ],\n})\nexport class SkyTilesModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SkyTileDashboardService","i2","i4","i6","i8","i3","i5.SkyTileDashboardColumnComponent"],"mappings":"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"}
|
|
@@ -85,7 +85,7 @@ export declare class SkyTileComponent implements OnChanges, OnDestroy {
|
|
|
85
85
|
get hasHelp(): boolean;
|
|
86
86
|
titleClick(evt: MouseEvent): void;
|
|
87
87
|
chevronDirectionChange(direction: string): void;
|
|
88
|
-
moveTile(event: KeyboardEvent): void;
|
|
88
|
+
protected moveTile(event: KeyboardEvent): void;
|
|
89
89
|
static ɵfac: i0.ɵɵFactoryDeclaration<SkyTileComponent, [null, null, { optional: true; }]>;
|
|
90
90
|
static ɵcmp: i0.ɵɵComponentDeclaration<SkyTileComponent, "sky-tile", never, { "helpKey": { "alias": "helpKey"; "required": false; }; "helpPopoverContent": { "alias": "helpPopoverContent"; "required": false; }; "helpPopoverTitle": { "alias": "helpPopoverTitle"; "required": false; }; "showSettings": { "alias": "showSettings"; "required": false; }; "showHelp": { "alias": "showHelp"; "required": false; }; "tileName": { "alias": "tileName"; "required": false; }; "isCollapsed": { "alias": "isCollapsed"; "required": false; }; }, { "settingsClick": "settingsClick"; "isCollapsedChange": "isCollapsedChange"; "helpClick": "helpClick"; }, ["titleRef"], ["sky-tile-title", "sky-tile-summary", "sky-tile-content"], true, never>;
|
|
91
91
|
}
|
|
@@ -61,7 +61,7 @@ export declare class SkyTileDashboardService {
|
|
|
61
61
|
/**
|
|
62
62
|
* @internal
|
|
63
63
|
*/
|
|
64
|
-
moveTileOnKeyDown(tileCmp: SkyTileComponent, direction:
|
|
64
|
+
moveTileOnKeyDown(tileCmp: SkyTileComponent, direction: 'up' | 'down' | 'left' | 'right', tileDescription: string): void;
|
|
65
65
|
static ɵfac: i0.ɵɵFactoryDeclaration<SkyTileDashboardService, never>;
|
|
66
66
|
static ɵprov: i0.ɵɵInjectableDeclaration<SkyTileDashboardService>;
|
|
67
67
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skyux/tiles",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.10.0",
|
|
4
4
|
"author": "Blackbaud, Inc.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"blackbaud",
|
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
"@angular/cdk": "^19.2.10",
|
|
20
20
|
"@angular/common": "^19.2.7",
|
|
21
21
|
"@angular/core": "^19.2.7",
|
|
22
|
-
"@skyux/animations": "12.
|
|
23
|
-
"@skyux/core": "12.
|
|
24
|
-
"@skyux/help-inline": "12.
|
|
25
|
-
"@skyux/i18n": "12.
|
|
26
|
-
"@skyux/icon": "12.
|
|
27
|
-
"@skyux/indicators": "12.
|
|
28
|
-
"@skyux/theme": "12.
|
|
22
|
+
"@skyux/animations": "12.10.0",
|
|
23
|
+
"@skyux/core": "12.10.0",
|
|
24
|
+
"@skyux/help-inline": "12.10.0",
|
|
25
|
+
"@skyux/i18n": "12.10.0",
|
|
26
|
+
"@skyux/icon": "12.10.0",
|
|
27
|
+
"@skyux/indicators": "12.10.0",
|
|
28
|
+
"@skyux/theme": "12.10.0"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@types/dragula": "2.1.36",
|