@skyux/grids 14.0.0-alpha.1 → 14.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,6 @@
1
- import * as i4 from '@angular/common';
1
+ import * as i4 from '@angular/cdk/drag-drop';
2
+ import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
3
+ import * as i3 from '@angular/common';
2
4
  import { CommonModule } from '@angular/common';
3
5
  import * as i0 from '@angular/core';
4
6
  import { NgModule, ViewContainerRef, ViewChild, Input, ChangeDetectionStrategy, Component, EventEmitter, TemplateRef, ContentChildren, Injectable, inject, EnvironmentInjector, HostListener, ViewChildren, Output } from '@angular/core';
@@ -18,8 +20,6 @@ import * as i9 from '@skyux/layout';
18
20
  import { SkyInlineDeleteModule } from '@skyux/layout';
19
21
  import * as i10 from '@skyux/popovers';
20
22
  import { SkyPopoverModule } from '@skyux/popovers';
21
- import * as i2 from 'ng2-dragula';
22
- import { DragulaService, DragulaModule } from 'ng2-dragula';
23
23
  import * as i13 from '@skyux/i18n';
24
24
  import { SkyLibResourcesService, SkyI18nModule } from '@skyux/i18n';
25
25
  import { getData, ListItemModel } from '@skyux/list-builder-common';
@@ -234,11 +234,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImpor
234
234
  args: [TemplateRef]
235
235
  }] } });
236
236
 
237
- const GRID_HEADER_DRAGGING_CLASS = 'sky-grid-header-dragging';
238
- const GRID_HEADER_LOCKED_SELECTOR = '.sky-grid-header-locked';
239
- const GRID_HEADER_RESIZE_HANDLE = '.sky-grid-resize-handle';
240
- const GRID_ROW_DELETE_SELECTOR = '.sky-grid-row-delete-heading';
241
- const GRID_MULTISELECT_SELECTOR = '.sky-grid-multiselect-cell';
242
237
  /**
243
238
  * @internal
244
239
  */
@@ -247,45 +242,37 @@ class SkyGridAdapterService {
247
242
  this.rendererFactory = rendererFactory;
248
243
  this.renderer = this.rendererFactory.createRenderer(undefined, undefined);
249
244
  }
250
- initializeDragAndDrop(dragulaGroupName, dragulaService, dropCallback) {
251
- dragulaService
252
- .drag(dragulaGroupName)
253
- .subscribe((args) => args.el.classList.add(GRID_HEADER_DRAGGING_CLASS));
254
- dragulaService
255
- .dragend(dragulaGroupName)
256
- .subscribe((args) => args.el.classList.remove(GRID_HEADER_DRAGGING_CLASS));
257
- dragulaService.drop(dragulaGroupName).subscribe((args) => {
258
- const columnIds = [];
259
- const nodes = Array.from(args.target.querySelectorAll(`th:not(${GRID_MULTISELECT_SELECTOR}):not(${GRID_ROW_DELETE_SELECTOR})`));
260
- for (const el of nodes) {
261
- const id = el.getAttribute('sky-cmp-id');
262
- columnIds.push(id);
263
- }
264
- dropCallback(columnIds);
265
- });
266
- dragulaService.createGroup(dragulaGroupName, {
267
- moves: (el, container, handle) => {
268
- const columns = container.querySelectorAll('th div');
269
- const isLeftOfLocked = this.isLeftOfLocked(handle, columns);
270
- return (!el.querySelector(GRID_HEADER_LOCKED_SELECTOR) &&
271
- handle !== undefined &&
272
- !handle.matches(GRID_HEADER_RESIZE_HANDLE) &&
273
- !handle.matches(GRID_MULTISELECT_SELECTOR) &&
274
- !handle.matches(GRID_ROW_DELETE_SELECTOR) &&
275
- !isLeftOfLocked);
276
- },
277
- accepts: (el, target, source, sibling) => {
278
- if (sibling === undefined || !sibling) {
279
- return true;
245
+ /**
246
+ * Determines whether a column can be dropped at the given position.
247
+ * Columns cannot be dropped to the left of locked columns.
248
+ */
249
+ canDrop(displayedColumns, currentIndex, targetIndex) {
250
+ if (displayedColumns[currentIndex]?.locked) {
251
+ return false;
252
+ }
253
+ // Cannot drop to the left of a locked column.
254
+ if (targetIndex < currentIndex) {
255
+ for (let i = targetIndex; i < currentIndex; i++) {
256
+ if (displayedColumns[i]?.locked) {
257
+ return false;
280
258
  }
281
- const columns = source.querySelectorAll('th div');
282
- const siblingDiv = sibling.querySelector('div');
283
- const isLeftOfLocked = this.isLeftOfLocked(siblingDiv, columns);
284
- return (!sibling.matches(GRID_HEADER_LOCKED_SELECTOR) &&
285
- !sibling.matches(GRID_HEADER_RESIZE_HANDLE) &&
286
- !isLeftOfLocked);
287
- },
288
- });
259
+ }
260
+ }
261
+ return true;
262
+ }
263
+ /**
264
+ * Handles the CDK drop event and returns the updated column IDs.
265
+ */
266
+ onColumnDrop(event, displayedColumns) {
267
+ if (event.previousIndex === event.currentIndex) {
268
+ return undefined;
269
+ }
270
+ if (!this.canDrop(displayedColumns, event.previousIndex, event.currentIndex)) {
271
+ return undefined;
272
+ }
273
+ const columnIds = displayedColumns.map((col) => col.id);
274
+ moveItemInArray(columnIds, event.previousIndex, event.currentIndex);
275
+ return columnIds;
289
276
  }
290
277
  getRowHeight(el, index) {
291
278
  return (el.nativeElement.querySelectorAll('tbody tr')[index].scrollHeight + 'px');
@@ -295,23 +282,6 @@ class SkyGridAdapterService {
295
282
  this.renderer.setStyle(el.nativeElement, style, value);
296
283
  }
297
284
  }
298
- isLeftOfLocked(handle, columns) {
299
- let sourceColumn = handle;
300
- for (const column of Array.from(columns)) {
301
- if (column.contains(handle)) {
302
- sourceColumn = column;
303
- }
304
- }
305
- for (let i = columns.length - 1; i >= 0; i--) {
306
- if (columns[i].classList.contains('sky-grid-header-locked')) {
307
- return true;
308
- }
309
- if (columns[i] === sourceColumn) {
310
- break;
311
- }
312
- }
313
- return false;
314
- }
315
285
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SkyGridAdapterService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
316
286
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SkyGridAdapterService }); }
317
287
  }
@@ -424,10 +394,9 @@ class SkyGridComponent {
424
394
  return this.tableElementRef.nativeElement.offsetWidth;
425
395
  }
426
396
  #environmentInjector;
427
- constructor(affixService, changeDetector, dragulaService, gridAdapter, overlayService, skyWindow, uiConfigService, logger) {
397
+ constructor(affixService, changeDetector, gridAdapter, overlayService, skyWindow, uiConfigService, logger) {
428
398
  this.affixService = affixService;
429
399
  this.changeDetector = changeDetector;
430
- this.dragulaService = dragulaService;
431
400
  this.gridAdapter = gridAdapter;
432
401
  this.overlayService = overlayService;
433
402
  this.skyWindow = skyWindow;
@@ -509,7 +478,6 @@ class SkyGridComponent {
509
478
  fieldSelector: '',
510
479
  descending: false,
511
480
  });
512
- this.dragulaGroupName = `sky-grids-group-${this.gridId}`;
513
481
  }
514
482
  ngOnInit() {
515
483
  this.messageStream
@@ -527,10 +495,6 @@ class SkyGridComponent {
527
495
  else {
528
496
  this.initColumns();
529
497
  }
530
- // Setup column drag-and-drop.
531
- this.gridAdapter.initializeDragAndDrop(this.dragulaGroupName, this.dragulaService, (selectedColumnIds) => {
532
- this.onHeaderDrop(selectedColumnIds);
533
- });
534
498
  this.applySelectedRows();
535
499
  }
536
500
  ngAfterViewInit() {
@@ -585,7 +549,6 @@ class SkyGridComponent {
585
549
  Object.keys(this.rowDeleteContents).forEach((id) => {
586
550
  this.destroyRowDelete(id);
587
551
  });
588
- this.dragulaService.destroy(this.dragulaGroupName);
589
552
  }
590
553
  onWindowResize() {
591
554
  this.checkUserColumnWidthsForScroll();
@@ -832,6 +795,15 @@ class SkyGridComponent {
832
795
  getRowDeleteItem(id) {
833
796
  return this.rowDeleteConfigs.find((rowDelete) => rowDelete.id === id);
834
797
  }
798
+ /**
799
+ * Handles the CDK drag-and-drop event when a column header is dropped.
800
+ */
801
+ onColumnDropped(event) {
802
+ const newColumnIds = this.gridAdapter.onColumnDrop(event, this.displayedColumns);
803
+ if (newColumnIds) {
804
+ this.onHeaderDrop(newColumnIds);
805
+ }
806
+ }
835
807
  // Prevent touch devices from inadvertently scrolling grid while dragging columns.
836
808
  onTouchMove(event) {
837
809
  event.preventDefault();
@@ -1288,13 +1260,13 @@ class SkyGridComponent {
1288
1260
  return (arrayA.length === arrayB.length &&
1289
1261
  arrayA.every((value, index) => value === arrayB[index]));
1290
1262
  }
1291
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SkyGridComponent, deps: [{ token: i1.SkyAffixService }, { token: i0.ChangeDetectorRef }, { token: i2.DragulaService }, { token: SkyGridAdapterService }, { token: i1.SkyOverlayService }, { token: i1.SkyAppWindowRef }, { token: i1.SkyUIConfigService }, { token: i1.SkyLogService }], target: i0.ɵɵFactoryTarget.Component }); }
1292
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: SkyGridComponent, isStandalone: false, selector: "sky-grid", inputs: { columns: "columns", data: "data", enableMultiselect: "enableMultiselect", fit: "fit", hasToolbar: "hasToolbar", height: "height", highlightText: "highlightText", messageStream: "messageStream", multiselectRowId: "multiselectRowId", rowHighlightedId: "rowHighlightedId", selectedColumnIds: "selectedColumnIds", selectedRowIds: "selectedRowIds", settingsKey: "settingsKey", sortField: "sortField", width: "width" }, outputs: { columnWidthChange: "columnWidthChange", multiselectSelectionChange: "multiselectSelectionChange", rowDeleteCancel: "rowDeleteCancel", rowDeleteConfirm: "rowDeleteConfirm", selectedColumnIdsChange: "selectedColumnIdsChange", sortFieldChange: "sortFieldChange" }, host: { listeners: { "window:resize": "onWindowResize()" } }, providers: [SkyGridAdapterService], queries: [{ propertyName: "columnComponents", predicate: SkyGridColumnComponent }], viewQueries: [{ propertyName: "inlineDeleteTemplateRef", first: true, predicate: ["inlineDeleteTemplateRef"], descendants: true, read: TemplateRef }, { propertyName: "tableContainerElementRef", first: true, predicate: ["gridContainer"], descendants: true }, { propertyName: "tableElementRef", first: true, predicate: ["gridTable"], descendants: true }, { propertyName: "topScrollContainerElementRef", first: true, predicate: ["topScrollContainer"], descendants: true }, { propertyName: "resizeBar", first: true, predicate: ["resizeBar"], descendants: true }, { propertyName: "columnElementRefs", predicate: ["gridCol"], descendants: true }, { propertyName: "columnRangeInputElementRefs", predicate: ["colSizeRange"], descendants: true }, { propertyName: "inlineDeleteRefs", predicate: ["inlineDeleteRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sky-grid\">\n @if (showTopScroll) {\n <div\n #topScrollContainer\n class=\"sky-grid-top-scroll-container\"\n (scroll)=\"onTopScroll($event)\"\n >\n <div\n class=\"sky-grid-top-scroll\"\n [style.width.px]=\"getTopScrollWidth()\"\n ></div>\n </div>\n }\n <div\n #gridContainer\n class=\"sky-grid-table-container\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n (scroll)=\"onGridScroll($event)\"\n >\n <table #gridTable class=\"sky-grid-table\" [ngClass]=\"getTableClassNames()\">\n <thead>\n <tr [dragula]=\"dragulaGroupName\">\n @if (enableMultiselect) {\n <th\n class=\"sky-grid-heading sky-grid-multiselect-cell sky-grid-header-locked\"\n scope=\"col\"\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <span class=\"screen-reader-only\">\n {{ 'skyux_grid_multiselect_select_row' | skyLibResources }}\n </span>\n </th>\n }\n @for (\n column of displayedColumns;\n track column;\n let last = $last;\n let i = $index\n ) {\n <th\n #gridCol\n class=\"sky-grid-heading sky-field-label\"\n scope=\"col\"\n [attr.sky-cmp-index]=\"i\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n [attr.aria-sort]=\"getAriaSortDirection(column) | async\"\n [id]=\"'sky-grid-' + gridId + '-column-' + i\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n [tabIndex]=\"column.isSortable ? 0 : -1\"\n (mouseup)=\"sortByColumn(column)\"\n (keydown)=\"onKeydown($event, column)\"\n (touchmove)=\"onTouchMove($event)\"\n >\n <div\n class=\"overflow\"\n [ngClass]=\"getTableHeaderClassNames(column)\"\n [style.max-width.px]=\"column.width - 1\"\n [style.width.px]=\"column.width - 1\"\n >\n @if ((getCaretVisibility(column.field) | async) === 'hidden') {\n <span class=\"sky-grid-header-caret-hidden-spacing\"></span>\n }\n <!-- The no spacing here is intentional to avoid extra spaces due to these being inline elements -->\n <span class=\"sky-grid-header-text\">{{\n column.heading?.trim()\n }}</span>\n <sky-icon\n class=\"sky-grid-heading-sort\"\n variant=\"solid\"\n [ngClass]=\"\n 'sky-grid-heading-sort-' +\n (getCaretVisibility(column.field) | async)\n \"\n [iconName]=\"getCaretIconNames(column)\"\n />\n @if (column.inlineHelpPopover) {\n <sky-help-inline\n [ngClass]=\"{\n 'sky-grid-help-inline-sort-hidden':\n getHelpInlineClass(column.field) | async\n }\"\n [skyPopover]=\"column.inlineHelpPopover\"\n (keydown.enter)=\"$event.stopPropagation()\"\n (keydown.space)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n (mouseup)=\"$event.stopPropagation()\"\n />\n }\n </div>\n @if ((fit === 'width' && !last) || fit === 'scroll') {\n <span\n aria-hidden=\"true\"\n class=\"sky-grid-resize-handle\"\n tabindex=\"-1\"\n [attr.sky-cmp-index]=\"i\"\n (mousedown)=\"onResizeColumnStart($event)\"\n (touchstart)=\"onResizeColumnStart($event)\"\n >\n </span>\n }\n <input\n #colSizeRange\n aria-label=\"Width of column\"\n class=\"sky-grid-column-input-aria-only\"\n role=\"slider\"\n type=\"range\"\n [attr.aria-controls]=\"'sky-grid-' + gridId + '-column-' + i\"\n [attr.aria-valuemin]=\"minColWidth\"\n [attr.aria-valuemax]=\"maxColWidth\"\n [attr.aria-valuenow]=\"column.width\"\n [attr.sky-cmp-index]=\"i\"\n [min]=\"minColWidth\"\n [max]=\"maxColWidth\"\n [step]=\"columnResizeStep\"\n [(ngModel)]=\"column.width\"\n (blur)=\"onResizeHandleBlur()\"\n (focus)=\"onResizeHandleFocus($event)\"\n (keydown)=\"onKeydownResizeCol($event)\"\n (change)=\"onInputChangeResizeCol($event)\"\n />\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"sky-grid-tbody\">\n @for (item of items; track item; let i = $index) {\n <tr\n class=\"sky-grid-row\"\n [attr.aria-current]=\"isRowHighlighted(item.id) ? true : null\"\n [attr.sky-cmp-id]=\"item.id\"\n [ngClass]=\"{\n 'sky-grid-multiselect-selected-row': item.isSelected,\n 'sky-grid-multiselect-row': enableMultiselect,\n 'sky-grid-row-highlight': isRowHighlighted(item.id)\n }\"\n (click)=\"onRowClick($event, item)\"\n >\n @if (enableMultiselect) {\n <td class=\"sky-grid-multiselect-cell sky-grid-header-locked\">\n <div\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <sky-checkbox\n [label]=\"\n 'skyux_grid_multiselect_select_row' | skyLibResources\n \"\n [(ngModel)]=\"item.isSelected\"\n (change)=\"onMultiselectCheckboxChange()\"\n />\n </div>\n </td>\n }\n @for (\n column of displayedColumns;\n track column;\n let last = $last;\n let i = $index\n ) {\n <td\n class=\"sky-grid-cell\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n >\n <sky-grid-cell\n [skyHighlight]=\"\n !column.excludeFromHighlighting ? highlightText : undefined\n \"\n [template]=\"column.template || defaultCellTemplate\"\n [fieldSelector]=\"column.field\"\n [item]=\"item\"\n [columnId]=\"column.id\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (showResizeBar) {\n <div\n #resizeBar\n aria-hidden=\"true\"\n class=\"sky-grid-resize-bar\"\n tabindex=\"-1\"\n ></div>\n }\n </div>\n</div>\n\n<ng-template #defaultCellTemplate let-row=\"row\" let-value=\"value\">{{\n value\n}}</ng-template>\n\n<ng-template #inlineDeleteTemplateRef let-item>\n <div\n #inlineDeleteRef\n [id]=\"'row-delete-ref-' + item.id\"\n [ngStyle]=\"{\n height: getRowHeight(0),\n position: 'fixed',\n width: tableWidth + 'px'\n }\"\n >\n <sky-inline-delete\n [pending]=\"getRowDeleteItem(item.id).pending\"\n (cancelTriggered)=\"cancelRowDelete(item.id)\"\n (deleteTriggered)=\"confirmRowDelete(item.id)\"\n />\n </div>\n</ng-template>\n", styles: [".sky-grid:not(.sky-theme-modern *){--sky-override-grid-font-size: 15px;--sky-override-grid-header-background: #ffffff;--sky-override-grid-heading-border: 1px solid #cdcfd2;--sky-override-grid-heading-color: var(--sky-text-color-deemphasized);--sky-override-grid-heading-drag-color: #eeeeef;--sky-override-grid-heading-font-size: 15px;--sky-override-grid-heading-font-weight: 400;--sky-override-grid-heading-font: BLKB Sans, Helvetica Neue, Arial, sans-serif;--sky-override-grid-heading-sort-space: 5px;--sky-override-grid-multiselect-display: block;--sky-override-grid-resize-handle-color: #00b4f1;--sky-override-grid-resize-handle-width: 5px;--sky-override-grid-resize-opacity: .6;--sky-override-grid-row-border: 1px dotted #cdcfd2;--sky-override-grid-row-color-even: #ffffff;--sky-override-grid-row-color-odd: #fbfbfb;--sky-override-grid-row-selected-background-hover: rgb(232.7615384615, 227.9961538462, 240.7038461538);--sky-override-grid-row-selected-background: #f1eef6;--sky-override-grid-row-selected-border: 1px solid #0974a1;--sky-override-grid-row-selected-border: 1px solid #dadbf6;--sky-override-grid-row-selected-box-shadow: 0px 0px 0px 3px inset #0974a1}.sky-grid{position:relative;display:block}.sky-grid-table-container{overflow:auto}.sky-grid-table{position:relative;table-layout:fixed;border-collapse:collapse;margin:0;font-size:var(--sky-override-grid-font-size, var(--sky-font-size-body-m));min-width:100%}.sky-grid-table.sky-grid-fit{max-width:100%;width:100%}.sky-grid-tbody{background-color:var(--sky-override-grid-row-color-even, var(--sky-color-background-row-base))}.sky-grid-row{border-bottom:var(--sky-override-grid-row-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-row:nth-child(odd){background-color:var(--sky-override-grid-row-color-odd, var(--sky-color-background-row-base))}.sky-grid-row.sky-grid-row-highlight{border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) solid var(--sky-color-border-selected));box-shadow:var(--sky-override-grid-row-selected-box-shadow, 0 0 0 var(--sky-border-width-selected-m) inset var(--sky-color-border-selected))}.sky-grid-row .sky-grid-cell{padding:0;min-width:10px}.sky-grid-heading{position:relative;border-top:var(--sky-override-grid-heading-border, none);border-bottom:var(--sky-override-grid-heading-border, var(--sky-border-width-emphasized) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-left:var(--sky-override-grid-heading-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));color:var(--sky-override-grid-heading-color, var(--sky-color-text-heading));font-family:var(--sky-override-grid-heading-font, var(--sky-font-family-primary));font-weight:var(--sky-override-grid-heading-font-weight, var(--sky-font-style-heading-4));font-size:var(--sky-override-grid-heading-font-size, var(--sky-font-size-heading-4));padding:0;cursor:pointer;background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)));overflow:visible;background-clip:padding-box}.sky-grid-heading:first-child{border-left:1px solid transparent}.sky-grid-heading.sky-grid-header-dragging{background-color:var(--sky-override-grid-heading-drag-color, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-heading-sort,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-heading-sort{width:14px}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-help-inline-sort-hidden,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-help-inline-sort-hidden{margin-left:-14px;margin-right:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-header-caret-hidden-spacing{padding-left:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-heading-sort-visible{width:14px}.sky-grid-heading{-webkit-user-select:none;-webkit-tap-highlight-color:transparent;-moz-user-select:none;-ms-user-select:none;user-select:none}.sky-grid-heading div{padding:8px}.sky-grid-heading .overflow{text-overflow:ellipsis;white-space:nowrap;position:relative;z-index:1;overflow:hidden;min-width:100%}.sky-grid-heading .sky-grid-column-input-aria-only{-webkit-appearance:none;-moz-appearance:none;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);position:absolute;display:block;top:0;bottom:0;right:0}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-track{background:transparent}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-ms-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only:focus{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-column-alignment-left{text-align:left}.sky-grid-column-alignment-center{text-align:center}.sky-grid-column-alignment-right{text-align:right}.sky-grid-multiselect-cell{padding:0;text-align:center}.sky-grid-multiselect-cell ::ng-deep .sky-switch-control{margin:0 auto}.sky-grid-multiselect-cell div{display:var(--sky-override-grid-multiselect-display, flex);justify-content:space-around}th.sky-grid-multiselect-cell{cursor:default}th.sky-grid-multiselect-cell .screen-reader-only{width:0;height:0;padding:0;opacity:0;position:absolute;margin:-1px;border:0;overflow:hidden;clip:rect(0,0,0,0);outline:none;white-space:nowrap}@-moz-document url-prefix(){.sky-grid-multiselect-row td{border-left:0px solid transparent;border-right:0px solid transparent}}.sky-grid-multiselect-row:hover{background-color:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-selected-row{background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft));border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-bottom:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-multiselect-selected-row:nth-child(odd){background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover{background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-has-toolbar .sky-grid-heading{border-top-width:0px}.sky-grid-heading-sort.sky-grid-heading-sort-hidden{visibility:hidden}.sky-grid-heading-sort.sky-grid-heading-sort-visible{visibility:visible;padding-left:var(--sky-override-grid-heading-sort-space, var(--sky-space-gap-text_action-xs))}.sky-grid-resize-handle{position:absolute;right:0;top:0;bottom:0;width:30px;z-index:2;min-height:20px;height:100%!important;vertical-align:middle;cursor:col-resize}.sky-grid-resize-handle:hover:after{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-resize-handle:after{position:absolute;right:0;top:0;bottom:0;width:var(--sky-override-grid-resize-handle-width, 3px);height:100%;content:\"\";background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-resize-bar{position:absolute;top:0;left:0;z-index:99;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);background:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider));opacity:var(--sky-override-grid-resize-opacity, 1)}tr{position:relative}.sky-grid-top-scroll-container{overflow:auto}.sky-grid-top-scroll{height:1px}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.DragulaDirective, selector: "[dragula]", inputs: ["dragula", "dragulaModel"], outputs: ["dragulaModelChange"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.λ3, selector: "sky-checkbox", inputs: ["label", "labelledBy", "id", "disabled", "tabindex", "name", "helpPopoverContent", "helpPopoverTitle", "iconName", "checkboxType", "checked", "indeterminate", "required", "labelText", "labelHidden", "hintText", "stacked", "helpKey"], outputs: ["change", "checkedChange", "disabledChange", "indeterminateChange"] }, { kind: "component", type: i7.λ1, selector: "sky-help-inline", inputs: ["ariaControls", "ariaExpanded", "ariaLabel", "helpKey", "labelledBy", "labelText", "popoverContent", "popoverTitle"], outputs: ["actionClick"] }, { kind: "component", type: i8.λ1, selector: "sky-icon", inputs: ["iconName", "variant", "iconSize"] }, { kind: "component", type: i9.λ8, selector: "sky-inline-delete", inputs: ["pending"], outputs: ["cancelTriggered", "deleteTriggered"] }, { kind: "directive", type: i10.λ7, selector: "[skyPopover]", inputs: ["skyPopover", "skyPopoverAlignment", "skyPopoverMessageStream", "skyPopoverPlacement", "skyPopoverTrigger"] }, { kind: "directive", type: i11.SkyTextHighlightDirective, selector: "[skyHighlight]", inputs: ["skyHighlight"] }, { kind: "component", type: SkyGridCellComponent, selector: "sky-grid-cell", inputs: ["item", "columnId", "template", "fieldSelector"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i13.SkyLibResourcesPipe, name: "skyLibResources" }], viewProviders: [DragulaService], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1263
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SkyGridComponent, deps: [{ token: i1.SkyAffixService }, { token: i0.ChangeDetectorRef }, { token: SkyGridAdapterService }, { token: i1.SkyOverlayService }, { token: i1.SkyAppWindowRef }, { token: i1.SkyUIConfigService }, { token: i1.SkyLogService }], target: i0.ɵɵFactoryTarget.Component }); }
1264
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: SkyGridComponent, isStandalone: false, selector: "sky-grid", inputs: { columns: "columns", data: "data", enableMultiselect: "enableMultiselect", fit: "fit", hasToolbar: "hasToolbar", height: "height", highlightText: "highlightText", messageStream: "messageStream", multiselectRowId: "multiselectRowId", rowHighlightedId: "rowHighlightedId", selectedColumnIds: "selectedColumnIds", selectedRowIds: "selectedRowIds", settingsKey: "settingsKey", sortField: "sortField", width: "width" }, outputs: { columnWidthChange: "columnWidthChange", multiselectSelectionChange: "multiselectSelectionChange", rowDeleteCancel: "rowDeleteCancel", rowDeleteConfirm: "rowDeleteConfirm", selectedColumnIdsChange: "selectedColumnIdsChange", sortFieldChange: "sortFieldChange" }, host: { listeners: { "window:resize": "onWindowResize()" } }, providers: [SkyGridAdapterService], queries: [{ propertyName: "columnComponents", predicate: SkyGridColumnComponent }], viewQueries: [{ propertyName: "inlineDeleteTemplateRef", first: true, predicate: ["inlineDeleteTemplateRef"], descendants: true, read: TemplateRef }, { propertyName: "tableContainerElementRef", first: true, predicate: ["gridContainer"], descendants: true }, { propertyName: "tableElementRef", first: true, predicate: ["gridTable"], descendants: true }, { propertyName: "topScrollContainerElementRef", first: true, predicate: ["topScrollContainer"], descendants: true }, { propertyName: "resizeBar", first: true, predicate: ["resizeBar"], descendants: true }, { propertyName: "columnElementRefs", predicate: ["gridCol"], descendants: true }, { propertyName: "columnRangeInputElementRefs", predicate: ["colSizeRange"], descendants: true }, { propertyName: "inlineDeleteRefs", predicate: ["inlineDeleteRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sky-grid\">\n @if (showTopScroll) {\n <div\n #topScrollContainer\n class=\"sky-grid-top-scroll-container\"\n (scroll)=\"onTopScroll($event)\"\n >\n <div\n class=\"sky-grid-top-scroll\"\n [style.width.px]=\"getTopScrollWidth()\"\n ></div>\n </div>\n }\n <div\n #gridContainer\n class=\"sky-grid-table-container\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n (scroll)=\"onGridScroll($event)\"\n >\n <table #gridTable class=\"sky-grid-table\" [ngClass]=\"getTableClassNames()\">\n <thead>\n <tr\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"displayedColumns\"\n (cdkDropListDropped)=\"onColumnDropped($event)\"\n >\n @if (enableMultiselect) {\n <th\n class=\"sky-grid-heading sky-grid-multiselect-cell sky-grid-header-locked\"\n scope=\"col\"\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <span class=\"screen-reader-only\">\n {{ 'skyux_grid_multiselect_select_row' | skyLibResources }}\n </span>\n </th>\n }\n @for (\n column of displayedColumns;\n track column;\n let last = $last;\n let i = $index\n ) {\n <th\n #gridCol\n cdkDrag\n class=\"sky-grid-heading sky-field-label\"\n scope=\"col\"\n [attr.sky-cmp-index]=\"i\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n [attr.aria-sort]=\"getAriaSortDirection(column) | async\"\n [cdkDragDisabled]=\"column.locked\"\n [id]=\"'sky-grid-' + gridId + '-column-' + i\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n [tabIndex]=\"column.isSortable ? 0 : -1\"\n (mouseup)=\"sortByColumn(column)\"\n (keydown)=\"onKeydown($event, column)\"\n (touchmove)=\"onTouchMove($event)\"\n >\n <div\n class=\"overflow\"\n [ngClass]=\"getTableHeaderClassNames(column)\"\n [style.max-width.px]=\"column.width - 1\"\n [style.width.px]=\"column.width - 1\"\n >\n @if ((getCaretVisibility(column.field) | async) === 'hidden') {\n <span class=\"sky-grid-header-caret-hidden-spacing\"></span>\n }\n <!-- The no spacing here is intentional to avoid extra spaces due to these being inline elements -->\n <span class=\"sky-grid-header-text\">{{\n column.heading?.trim()\n }}</span>\n <sky-icon\n class=\"sky-grid-heading-sort\"\n variant=\"solid\"\n [ngClass]=\"\n 'sky-grid-heading-sort-' +\n (getCaretVisibility(column.field) | async)\n \"\n [iconName]=\"getCaretIconNames(column)\"\n />\n @if (column.inlineHelpPopover) {\n <sky-help-inline\n [ngClass]=\"{\n 'sky-grid-help-inline-sort-hidden':\n getHelpInlineClass(column.field) | async\n }\"\n [skyPopover]=\"column.inlineHelpPopover\"\n (keydown.enter)=\"$event.stopPropagation()\"\n (keydown.space)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n (mouseup)=\"$event.stopPropagation()\"\n />\n }\n </div>\n @if ((fit === 'width' && !last) || fit === 'scroll') {\n <span\n aria-hidden=\"true\"\n class=\"sky-grid-resize-handle\"\n tabindex=\"-1\"\n [attr.sky-cmp-index]=\"i\"\n (mousedown)=\"onResizeColumnStart($event)\"\n (touchstart)=\"onResizeColumnStart($event)\"\n >\n </span>\n }\n <input\n #colSizeRange\n aria-label=\"Width of column\"\n class=\"sky-grid-column-input-aria-only\"\n role=\"slider\"\n type=\"range\"\n [attr.aria-controls]=\"'sky-grid-' + gridId + '-column-' + i\"\n [attr.aria-valuemin]=\"minColWidth\"\n [attr.aria-valuemax]=\"maxColWidth\"\n [attr.aria-valuenow]=\"column.width\"\n [attr.sky-cmp-index]=\"i\"\n [min]=\"minColWidth\"\n [max]=\"maxColWidth\"\n [step]=\"columnResizeStep\"\n [(ngModel)]=\"column.width\"\n (blur)=\"onResizeHandleBlur()\"\n (focus)=\"onResizeHandleFocus($event)\"\n (keydown)=\"onKeydownResizeCol($event)\"\n (change)=\"onInputChangeResizeCol($event)\"\n />\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"sky-grid-tbody\">\n @for (item of items; track item; let i = $index) {\n <tr\n class=\"sky-grid-row\"\n [attr.aria-current]=\"isRowHighlighted(item.id) ? true : null\"\n [attr.sky-cmp-id]=\"item.id\"\n [ngClass]=\"{\n 'sky-grid-multiselect-selected-row': item.isSelected,\n 'sky-grid-multiselect-row': enableMultiselect,\n 'sky-grid-row-highlight': isRowHighlighted(item.id)\n }\"\n (click)=\"onRowClick($event, item)\"\n >\n @if (enableMultiselect) {\n <td class=\"sky-grid-multiselect-cell sky-grid-header-locked\">\n <div\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <sky-checkbox\n [label]=\"\n 'skyux_grid_multiselect_select_row' | skyLibResources\n \"\n [(ngModel)]=\"item.isSelected\"\n (change)=\"onMultiselectCheckboxChange()\"\n />\n </div>\n </td>\n }\n @for (\n column of displayedColumns;\n track column;\n let last = $last;\n let i = $index\n ) {\n <td\n class=\"sky-grid-cell\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n >\n <sky-grid-cell\n [skyHighlight]=\"\n !column.excludeFromHighlighting ? highlightText : undefined\n \"\n [template]=\"column.template || defaultCellTemplate\"\n [fieldSelector]=\"column.field\"\n [item]=\"item\"\n [columnId]=\"column.id\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (showResizeBar) {\n <div\n #resizeBar\n aria-hidden=\"true\"\n class=\"sky-grid-resize-bar\"\n tabindex=\"-1\"\n ></div>\n }\n </div>\n</div>\n\n<ng-template #defaultCellTemplate let-row=\"row\" let-value=\"value\">{{\n value\n}}</ng-template>\n\n<ng-template #inlineDeleteTemplateRef let-item>\n <div\n #inlineDeleteRef\n [id]=\"'row-delete-ref-' + item.id\"\n [ngStyle]=\"{\n height: getRowHeight(0),\n position: 'fixed',\n width: tableWidth + 'px'\n }\"\n >\n <sky-inline-delete\n [pending]=\"getRowDeleteItem(item.id).pending\"\n (cancelTriggered)=\"cancelRowDelete(item.id)\"\n (deleteTriggered)=\"confirmRowDelete(item.id)\"\n />\n </div>\n</ng-template>\n", styles: [".sky-grid:not(.sky-theme-modern *){--sky-override-grid-font-size: 15px;--sky-override-grid-header-background: #ffffff;--sky-override-grid-heading-border: 1px solid #cdcfd2;--sky-override-grid-heading-color: var(--sky-text-color-deemphasized);--sky-override-grid-heading-drag-color: #eeeeef;--sky-override-grid-heading-font-size: 15px;--sky-override-grid-heading-font-weight: 400;--sky-override-grid-heading-font: BLKB Sans, Helvetica Neue, Arial, sans-serif;--sky-override-grid-heading-sort-space: 5px;--sky-override-grid-multiselect-display: block;--sky-override-grid-resize-handle-color: #00b4f1;--sky-override-grid-resize-handle-width: 5px;--sky-override-grid-resize-opacity: .6;--sky-override-grid-row-border: 1px dotted #cdcfd2;--sky-override-grid-row-color-even: #ffffff;--sky-override-grid-row-color-odd: #fbfbfb;--sky-override-grid-row-selected-background-hover: rgb(232.7615384615, 227.9961538462, 240.7038461538);--sky-override-grid-row-selected-background: #f1eef6;--sky-override-grid-row-selected-border: 1px solid #0974a1;--sky-override-grid-row-selected-border: 1px solid #dadbf6;--sky-override-grid-row-selected-box-shadow: 0px 0px 0px 3px inset #0974a1}.sky-grid{position:relative;display:block}.sky-grid-table-container{overflow:auto}.sky-grid-table{position:relative;table-layout:fixed;border-collapse:collapse;margin:0;font-size:var(--sky-override-grid-font-size, var(--sky-font-size-body-m));min-width:100%}.sky-grid-table.sky-grid-fit{max-width:100%;width:100%}.sky-grid-tbody{background-color:var(--sky-override-grid-row-color-even, var(--sky-color-background-row-base))}.sky-grid-row{border-bottom:var(--sky-override-grid-row-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-row:nth-child(odd){background-color:var(--sky-override-grid-row-color-odd, var(--sky-color-background-row-base))}.sky-grid-row.sky-grid-row-highlight{border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) solid var(--sky-color-border-selected));box-shadow:var(--sky-override-grid-row-selected-box-shadow, 0 0 0 var(--sky-border-width-selected-m) inset var(--sky-color-border-selected))}.sky-grid-row .sky-grid-cell{padding:0;min-width:10px}.sky-grid-heading{position:relative;border-top:var(--sky-override-grid-heading-border, none);border-bottom:var(--sky-override-grid-heading-border, var(--sky-border-width-emphasized) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-left:var(--sky-override-grid-heading-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));color:var(--sky-override-grid-heading-color, var(--sky-color-text-heading));font-family:var(--sky-override-grid-heading-font, var(--sky-font-family-primary));font-weight:var(--sky-override-grid-heading-font-weight, var(--sky-font-style-heading-4));font-size:var(--sky-override-grid-heading-font-size, var(--sky-font-size-heading-4));padding:0;cursor:pointer;background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)));overflow:visible;background-clip:padding-box}.sky-grid-heading:first-child{border-left:1px solid transparent}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-heading-sort,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-heading-sort{width:14px}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-help-inline-sort-hidden,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-help-inline-sort-hidden{margin-left:-14px;margin-right:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-header-caret-hidden-spacing{padding-left:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-heading-sort-visible{width:14px}.sky-grid-heading{-webkit-user-select:none;-webkit-tap-highlight-color:transparent;-moz-user-select:none;-ms-user-select:none;user-select:none}.sky-grid-heading div{padding:8px}.sky-grid-heading .overflow{text-overflow:ellipsis;white-space:nowrap;position:relative;z-index:1;overflow:hidden;min-width:100%}.sky-grid-heading .sky-grid-column-input-aria-only{-webkit-appearance:none;-moz-appearance:none;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);position:absolute;display:block;top:0;bottom:0;right:0}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-track{background:transparent}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-ms-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only:focus{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-column-alignment-left{text-align:left}.sky-grid-column-alignment-center{text-align:center}.sky-grid-column-alignment-right{text-align:right}.sky-grid-multiselect-cell{padding:0;text-align:center}.sky-grid-multiselect-cell ::ng-deep .sky-switch-control{margin:0 auto}.sky-grid-multiselect-cell div{display:var(--sky-override-grid-multiselect-display, flex);justify-content:space-around}th.sky-grid-multiselect-cell{cursor:default}th.sky-grid-multiselect-cell .screen-reader-only{width:0;height:0;padding:0;opacity:0;position:absolute;margin:-1px;border:0;overflow:hidden;clip:rect(0,0,0,0);outline:none;white-space:nowrap}@-moz-document url-prefix(){.sky-grid-multiselect-row td{border-left:0px solid transparent;border-right:0px solid transparent}}.sky-grid-multiselect-row:hover{background-color:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-selected-row{background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft));border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-bottom:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-multiselect-selected-row:nth-child(odd){background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover{background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-has-toolbar .sky-grid-heading{border-top-width:0px}.sky-grid-heading-sort.sky-grid-heading-sort-hidden{visibility:hidden}.sky-grid-heading-sort.sky-grid-heading-sort-visible{visibility:visible;padding-left:var(--sky-override-grid-heading-sort-space, var(--sky-space-gap-text_action-xs))}.sky-grid-resize-handle{position:absolute;right:0;top:0;bottom:0;width:30px;z-index:2;min-height:20px;height:100%!important;vertical-align:middle;cursor:col-resize}.sky-grid-resize-handle:hover:after{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-resize-handle:after{position:absolute;right:0;top:0;bottom:0;width:var(--sky-override-grid-resize-handle-width, 3px);height:100%;content:\"\";background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-resize-bar{position:absolute;top:0;left:0;z-index:99;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);background:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider));opacity:var(--sky-override-grid-resize-opacity, 1)}tr{position:relative}.sky-grid-top-scroll-container{overflow:auto}.sky-grid-top-scroll{height:1px}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.λ3, selector: "sky-checkbox", inputs: ["label", "labelledBy", "id", "disabled", "tabindex", "name", "helpPopoverContent", "helpPopoverTitle", "iconName", "checkboxType", "checked", "indeterminate", "required", "labelText", "labelHidden", "hintText", "stacked", "helpKey"], outputs: ["change", "checkedChange", "disabledChange", "indeterminateChange"] }, { kind: "component", type: i7.λ1, selector: "sky-help-inline", inputs: ["ariaControls", "ariaExpanded", "ariaLabel", "helpKey", "labelledBy", "labelText", "popoverContent", "popoverTitle"], outputs: ["actionClick"] }, { kind: "component", type: i8.λ1, selector: "sky-icon", inputs: ["iconName", "variant", "iconSize"] }, { kind: "component", type: i9.λ8, selector: "sky-inline-delete", inputs: ["pending"], outputs: ["cancelTriggered", "deleteTriggered"] }, { kind: "directive", type: i10.λ7, selector: "[skyPopover]", inputs: ["skyPopover", "skyPopoverAlignment", "skyPopoverMessageStream", "skyPopoverPlacement", "skyPopoverTrigger"] }, { kind: "directive", type: i11.SkyTextHighlightDirective, selector: "[skyHighlight]", inputs: ["skyHighlight"] }, { kind: "component", type: SkyGridCellComponent, selector: "sky-grid-cell", inputs: ["item", "columnId", "template", "fieldSelector"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i13.SkyLibResourcesPipe, name: "skyLibResources" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1293
1265
  }
1294
1266
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SkyGridComponent, decorators: [{
1295
1267
  type: Component,
1296
- args: [{ selector: 'sky-grid', viewProviders: [DragulaService], providers: [SkyGridAdapterService], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div class=\"sky-grid\">\n @if (showTopScroll) {\n <div\n #topScrollContainer\n class=\"sky-grid-top-scroll-container\"\n (scroll)=\"onTopScroll($event)\"\n >\n <div\n class=\"sky-grid-top-scroll\"\n [style.width.px]=\"getTopScrollWidth()\"\n ></div>\n </div>\n }\n <div\n #gridContainer\n class=\"sky-grid-table-container\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n (scroll)=\"onGridScroll($event)\"\n >\n <table #gridTable class=\"sky-grid-table\" [ngClass]=\"getTableClassNames()\">\n <thead>\n <tr [dragula]=\"dragulaGroupName\">\n @if (enableMultiselect) {\n <th\n class=\"sky-grid-heading sky-grid-multiselect-cell sky-grid-header-locked\"\n scope=\"col\"\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <span class=\"screen-reader-only\">\n {{ 'skyux_grid_multiselect_select_row' | skyLibResources }}\n </span>\n </th>\n }\n @for (\n column of displayedColumns;\n track column;\n let last = $last;\n let i = $index\n ) {\n <th\n #gridCol\n class=\"sky-grid-heading sky-field-label\"\n scope=\"col\"\n [attr.sky-cmp-index]=\"i\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n [attr.aria-sort]=\"getAriaSortDirection(column) | async\"\n [id]=\"'sky-grid-' + gridId + '-column-' + i\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n [tabIndex]=\"column.isSortable ? 0 : -1\"\n (mouseup)=\"sortByColumn(column)\"\n (keydown)=\"onKeydown($event, column)\"\n (touchmove)=\"onTouchMove($event)\"\n >\n <div\n class=\"overflow\"\n [ngClass]=\"getTableHeaderClassNames(column)\"\n [style.max-width.px]=\"column.width - 1\"\n [style.width.px]=\"column.width - 1\"\n >\n @if ((getCaretVisibility(column.field) | async) === 'hidden') {\n <span class=\"sky-grid-header-caret-hidden-spacing\"></span>\n }\n <!-- The no spacing here is intentional to avoid extra spaces due to these being inline elements -->\n <span class=\"sky-grid-header-text\">{{\n column.heading?.trim()\n }}</span>\n <sky-icon\n class=\"sky-grid-heading-sort\"\n variant=\"solid\"\n [ngClass]=\"\n 'sky-grid-heading-sort-' +\n (getCaretVisibility(column.field) | async)\n \"\n [iconName]=\"getCaretIconNames(column)\"\n />\n @if (column.inlineHelpPopover) {\n <sky-help-inline\n [ngClass]=\"{\n 'sky-grid-help-inline-sort-hidden':\n getHelpInlineClass(column.field) | async\n }\"\n [skyPopover]=\"column.inlineHelpPopover\"\n (keydown.enter)=\"$event.stopPropagation()\"\n (keydown.space)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n (mouseup)=\"$event.stopPropagation()\"\n />\n }\n </div>\n @if ((fit === 'width' && !last) || fit === 'scroll') {\n <span\n aria-hidden=\"true\"\n class=\"sky-grid-resize-handle\"\n tabindex=\"-1\"\n [attr.sky-cmp-index]=\"i\"\n (mousedown)=\"onResizeColumnStart($event)\"\n (touchstart)=\"onResizeColumnStart($event)\"\n >\n </span>\n }\n <input\n #colSizeRange\n aria-label=\"Width of column\"\n class=\"sky-grid-column-input-aria-only\"\n role=\"slider\"\n type=\"range\"\n [attr.aria-controls]=\"'sky-grid-' + gridId + '-column-' + i\"\n [attr.aria-valuemin]=\"minColWidth\"\n [attr.aria-valuemax]=\"maxColWidth\"\n [attr.aria-valuenow]=\"column.width\"\n [attr.sky-cmp-index]=\"i\"\n [min]=\"minColWidth\"\n [max]=\"maxColWidth\"\n [step]=\"columnResizeStep\"\n [(ngModel)]=\"column.width\"\n (blur)=\"onResizeHandleBlur()\"\n (focus)=\"onResizeHandleFocus($event)\"\n (keydown)=\"onKeydownResizeCol($event)\"\n (change)=\"onInputChangeResizeCol($event)\"\n />\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"sky-grid-tbody\">\n @for (item of items; track item; let i = $index) {\n <tr\n class=\"sky-grid-row\"\n [attr.aria-current]=\"isRowHighlighted(item.id) ? true : null\"\n [attr.sky-cmp-id]=\"item.id\"\n [ngClass]=\"{\n 'sky-grid-multiselect-selected-row': item.isSelected,\n 'sky-grid-multiselect-row': enableMultiselect,\n 'sky-grid-row-highlight': isRowHighlighted(item.id)\n }\"\n (click)=\"onRowClick($event, item)\"\n >\n @if (enableMultiselect) {\n <td class=\"sky-grid-multiselect-cell sky-grid-header-locked\">\n <div\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <sky-checkbox\n [label]=\"\n 'skyux_grid_multiselect_select_row' | skyLibResources\n \"\n [(ngModel)]=\"item.isSelected\"\n (change)=\"onMultiselectCheckboxChange()\"\n />\n </div>\n </td>\n }\n @for (\n column of displayedColumns;\n track column;\n let last = $last;\n let i = $index\n ) {\n <td\n class=\"sky-grid-cell\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n >\n <sky-grid-cell\n [skyHighlight]=\"\n !column.excludeFromHighlighting ? highlightText : undefined\n \"\n [template]=\"column.template || defaultCellTemplate\"\n [fieldSelector]=\"column.field\"\n [item]=\"item\"\n [columnId]=\"column.id\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (showResizeBar) {\n <div\n #resizeBar\n aria-hidden=\"true\"\n class=\"sky-grid-resize-bar\"\n tabindex=\"-1\"\n ></div>\n }\n </div>\n</div>\n\n<ng-template #defaultCellTemplate let-row=\"row\" let-value=\"value\">{{\n value\n}}</ng-template>\n\n<ng-template #inlineDeleteTemplateRef let-item>\n <div\n #inlineDeleteRef\n [id]=\"'row-delete-ref-' + item.id\"\n [ngStyle]=\"{\n height: getRowHeight(0),\n position: 'fixed',\n width: tableWidth + 'px'\n }\"\n >\n <sky-inline-delete\n [pending]=\"getRowDeleteItem(item.id).pending\"\n (cancelTriggered)=\"cancelRowDelete(item.id)\"\n (deleteTriggered)=\"confirmRowDelete(item.id)\"\n />\n </div>\n</ng-template>\n", styles: [".sky-grid:not(.sky-theme-modern *){--sky-override-grid-font-size: 15px;--sky-override-grid-header-background: #ffffff;--sky-override-grid-heading-border: 1px solid #cdcfd2;--sky-override-grid-heading-color: var(--sky-text-color-deemphasized);--sky-override-grid-heading-drag-color: #eeeeef;--sky-override-grid-heading-font-size: 15px;--sky-override-grid-heading-font-weight: 400;--sky-override-grid-heading-font: BLKB Sans, Helvetica Neue, Arial, sans-serif;--sky-override-grid-heading-sort-space: 5px;--sky-override-grid-multiselect-display: block;--sky-override-grid-resize-handle-color: #00b4f1;--sky-override-grid-resize-handle-width: 5px;--sky-override-grid-resize-opacity: .6;--sky-override-grid-row-border: 1px dotted #cdcfd2;--sky-override-grid-row-color-even: #ffffff;--sky-override-grid-row-color-odd: #fbfbfb;--sky-override-grid-row-selected-background-hover: rgb(232.7615384615, 227.9961538462, 240.7038461538);--sky-override-grid-row-selected-background: #f1eef6;--sky-override-grid-row-selected-border: 1px solid #0974a1;--sky-override-grid-row-selected-border: 1px solid #dadbf6;--sky-override-grid-row-selected-box-shadow: 0px 0px 0px 3px inset #0974a1}.sky-grid{position:relative;display:block}.sky-grid-table-container{overflow:auto}.sky-grid-table{position:relative;table-layout:fixed;border-collapse:collapse;margin:0;font-size:var(--sky-override-grid-font-size, var(--sky-font-size-body-m));min-width:100%}.sky-grid-table.sky-grid-fit{max-width:100%;width:100%}.sky-grid-tbody{background-color:var(--sky-override-grid-row-color-even, var(--sky-color-background-row-base))}.sky-grid-row{border-bottom:var(--sky-override-grid-row-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-row:nth-child(odd){background-color:var(--sky-override-grid-row-color-odd, var(--sky-color-background-row-base))}.sky-grid-row.sky-grid-row-highlight{border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) solid var(--sky-color-border-selected));box-shadow:var(--sky-override-grid-row-selected-box-shadow, 0 0 0 var(--sky-border-width-selected-m) inset var(--sky-color-border-selected))}.sky-grid-row .sky-grid-cell{padding:0;min-width:10px}.sky-grid-heading{position:relative;border-top:var(--sky-override-grid-heading-border, none);border-bottom:var(--sky-override-grid-heading-border, var(--sky-border-width-emphasized) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-left:var(--sky-override-grid-heading-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));color:var(--sky-override-grid-heading-color, var(--sky-color-text-heading));font-family:var(--sky-override-grid-heading-font, var(--sky-font-family-primary));font-weight:var(--sky-override-grid-heading-font-weight, var(--sky-font-style-heading-4));font-size:var(--sky-override-grid-heading-font-size, var(--sky-font-size-heading-4));padding:0;cursor:pointer;background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)));overflow:visible;background-clip:padding-box}.sky-grid-heading:first-child{border-left:1px solid transparent}.sky-grid-heading.sky-grid-header-dragging{background-color:var(--sky-override-grid-heading-drag-color, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-heading-sort,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-heading-sort{width:14px}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-help-inline-sort-hidden,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-help-inline-sort-hidden{margin-left:-14px;margin-right:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-header-caret-hidden-spacing{padding-left:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-heading-sort-visible{width:14px}.sky-grid-heading{-webkit-user-select:none;-webkit-tap-highlight-color:transparent;-moz-user-select:none;-ms-user-select:none;user-select:none}.sky-grid-heading div{padding:8px}.sky-grid-heading .overflow{text-overflow:ellipsis;white-space:nowrap;position:relative;z-index:1;overflow:hidden;min-width:100%}.sky-grid-heading .sky-grid-column-input-aria-only{-webkit-appearance:none;-moz-appearance:none;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);position:absolute;display:block;top:0;bottom:0;right:0}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-track{background:transparent}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-ms-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only:focus{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-column-alignment-left{text-align:left}.sky-grid-column-alignment-center{text-align:center}.sky-grid-column-alignment-right{text-align:right}.sky-grid-multiselect-cell{padding:0;text-align:center}.sky-grid-multiselect-cell ::ng-deep .sky-switch-control{margin:0 auto}.sky-grid-multiselect-cell div{display:var(--sky-override-grid-multiselect-display, flex);justify-content:space-around}th.sky-grid-multiselect-cell{cursor:default}th.sky-grid-multiselect-cell .screen-reader-only{width:0;height:0;padding:0;opacity:0;position:absolute;margin:-1px;border:0;overflow:hidden;clip:rect(0,0,0,0);outline:none;white-space:nowrap}@-moz-document url-prefix(){.sky-grid-multiselect-row td{border-left:0px solid transparent;border-right:0px solid transparent}}.sky-grid-multiselect-row:hover{background-color:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-selected-row{background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft));border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-bottom:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-multiselect-selected-row:nth-child(odd){background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover{background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-has-toolbar .sky-grid-heading{border-top-width:0px}.sky-grid-heading-sort.sky-grid-heading-sort-hidden{visibility:hidden}.sky-grid-heading-sort.sky-grid-heading-sort-visible{visibility:visible;padding-left:var(--sky-override-grid-heading-sort-space, var(--sky-space-gap-text_action-xs))}.sky-grid-resize-handle{position:absolute;right:0;top:0;bottom:0;width:30px;z-index:2;min-height:20px;height:100%!important;vertical-align:middle;cursor:col-resize}.sky-grid-resize-handle:hover:after{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-resize-handle:after{position:absolute;right:0;top:0;bottom:0;width:var(--sky-override-grid-resize-handle-width, 3px);height:100%;content:\"\";background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-resize-bar{position:absolute;top:0;left:0;z-index:99;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);background:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider));opacity:var(--sky-override-grid-resize-opacity, 1)}tr{position:relative}.sky-grid-top-scroll-container{overflow:auto}.sky-grid-top-scroll{height:1px}\n"] }]
1297
- }], ctorParameters: () => [{ type: i1.SkyAffixService }, { type: i0.ChangeDetectorRef }, { type: i2.DragulaService }, { type: SkyGridAdapterService }, { type: i1.SkyOverlayService }, { type: i1.SkyAppWindowRef }, { type: i1.SkyUIConfigService }, { type: i1.SkyLogService }], propDecorators: { columns: [{
1268
+ args: [{ selector: 'sky-grid', providers: [SkyGridAdapterService], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div class=\"sky-grid\">\n @if (showTopScroll) {\n <div\n #topScrollContainer\n class=\"sky-grid-top-scroll-container\"\n (scroll)=\"onTopScroll($event)\"\n >\n <div\n class=\"sky-grid-top-scroll\"\n [style.width.px]=\"getTopScrollWidth()\"\n ></div>\n </div>\n }\n <div\n #gridContainer\n class=\"sky-grid-table-container\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n (scroll)=\"onGridScroll($event)\"\n >\n <table #gridTable class=\"sky-grid-table\" [ngClass]=\"getTableClassNames()\">\n <thead>\n <tr\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"displayedColumns\"\n (cdkDropListDropped)=\"onColumnDropped($event)\"\n >\n @if (enableMultiselect) {\n <th\n class=\"sky-grid-heading sky-grid-multiselect-cell sky-grid-header-locked\"\n scope=\"col\"\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <span class=\"screen-reader-only\">\n {{ 'skyux_grid_multiselect_select_row' | skyLibResources }}\n </span>\n </th>\n }\n @for (\n column of displayedColumns;\n track column;\n let last = $last;\n let i = $index\n ) {\n <th\n #gridCol\n cdkDrag\n class=\"sky-grid-heading sky-field-label\"\n scope=\"col\"\n [attr.sky-cmp-index]=\"i\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n [attr.aria-sort]=\"getAriaSortDirection(column) | async\"\n [cdkDragDisabled]=\"column.locked\"\n [id]=\"'sky-grid-' + gridId + '-column-' + i\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n [tabIndex]=\"column.isSortable ? 0 : -1\"\n (mouseup)=\"sortByColumn(column)\"\n (keydown)=\"onKeydown($event, column)\"\n (touchmove)=\"onTouchMove($event)\"\n >\n <div\n class=\"overflow\"\n [ngClass]=\"getTableHeaderClassNames(column)\"\n [style.max-width.px]=\"column.width - 1\"\n [style.width.px]=\"column.width - 1\"\n >\n @if ((getCaretVisibility(column.field) | async) === 'hidden') {\n <span class=\"sky-grid-header-caret-hidden-spacing\"></span>\n }\n <!-- The no spacing here is intentional to avoid extra spaces due to these being inline elements -->\n <span class=\"sky-grid-header-text\">{{\n column.heading?.trim()\n }}</span>\n <sky-icon\n class=\"sky-grid-heading-sort\"\n variant=\"solid\"\n [ngClass]=\"\n 'sky-grid-heading-sort-' +\n (getCaretVisibility(column.field) | async)\n \"\n [iconName]=\"getCaretIconNames(column)\"\n />\n @if (column.inlineHelpPopover) {\n <sky-help-inline\n [ngClass]=\"{\n 'sky-grid-help-inline-sort-hidden':\n getHelpInlineClass(column.field) | async\n }\"\n [skyPopover]=\"column.inlineHelpPopover\"\n (keydown.enter)=\"$event.stopPropagation()\"\n (keydown.space)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n (mouseup)=\"$event.stopPropagation()\"\n />\n }\n </div>\n @if ((fit === 'width' && !last) || fit === 'scroll') {\n <span\n aria-hidden=\"true\"\n class=\"sky-grid-resize-handle\"\n tabindex=\"-1\"\n [attr.sky-cmp-index]=\"i\"\n (mousedown)=\"onResizeColumnStart($event)\"\n (touchstart)=\"onResizeColumnStart($event)\"\n >\n </span>\n }\n <input\n #colSizeRange\n aria-label=\"Width of column\"\n class=\"sky-grid-column-input-aria-only\"\n role=\"slider\"\n type=\"range\"\n [attr.aria-controls]=\"'sky-grid-' + gridId + '-column-' + i\"\n [attr.aria-valuemin]=\"minColWidth\"\n [attr.aria-valuemax]=\"maxColWidth\"\n [attr.aria-valuenow]=\"column.width\"\n [attr.sky-cmp-index]=\"i\"\n [min]=\"minColWidth\"\n [max]=\"maxColWidth\"\n [step]=\"columnResizeStep\"\n [(ngModel)]=\"column.width\"\n (blur)=\"onResizeHandleBlur()\"\n (focus)=\"onResizeHandleFocus($event)\"\n (keydown)=\"onKeydownResizeCol($event)\"\n (change)=\"onInputChangeResizeCol($event)\"\n />\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"sky-grid-tbody\">\n @for (item of items; track item; let i = $index) {\n <tr\n class=\"sky-grid-row\"\n [attr.aria-current]=\"isRowHighlighted(item.id) ? true : null\"\n [attr.sky-cmp-id]=\"item.id\"\n [ngClass]=\"{\n 'sky-grid-multiselect-selected-row': item.isSelected,\n 'sky-grid-multiselect-row': enableMultiselect,\n 'sky-grid-row-highlight': isRowHighlighted(item.id)\n }\"\n (click)=\"onRowClick($event, item)\"\n >\n @if (enableMultiselect) {\n <td class=\"sky-grid-multiselect-cell sky-grid-header-locked\">\n <div\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <sky-checkbox\n [label]=\"\n 'skyux_grid_multiselect_select_row' | skyLibResources\n \"\n [(ngModel)]=\"item.isSelected\"\n (change)=\"onMultiselectCheckboxChange()\"\n />\n </div>\n </td>\n }\n @for (\n column of displayedColumns;\n track column;\n let last = $last;\n let i = $index\n ) {\n <td\n class=\"sky-grid-cell\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n >\n <sky-grid-cell\n [skyHighlight]=\"\n !column.excludeFromHighlighting ? highlightText : undefined\n \"\n [template]=\"column.template || defaultCellTemplate\"\n [fieldSelector]=\"column.field\"\n [item]=\"item\"\n [columnId]=\"column.id\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (showResizeBar) {\n <div\n #resizeBar\n aria-hidden=\"true\"\n class=\"sky-grid-resize-bar\"\n tabindex=\"-1\"\n ></div>\n }\n </div>\n</div>\n\n<ng-template #defaultCellTemplate let-row=\"row\" let-value=\"value\">{{\n value\n}}</ng-template>\n\n<ng-template #inlineDeleteTemplateRef let-item>\n <div\n #inlineDeleteRef\n [id]=\"'row-delete-ref-' + item.id\"\n [ngStyle]=\"{\n height: getRowHeight(0),\n position: 'fixed',\n width: tableWidth + 'px'\n }\"\n >\n <sky-inline-delete\n [pending]=\"getRowDeleteItem(item.id).pending\"\n (cancelTriggered)=\"cancelRowDelete(item.id)\"\n (deleteTriggered)=\"confirmRowDelete(item.id)\"\n />\n </div>\n</ng-template>\n", styles: [".sky-grid:not(.sky-theme-modern *){--sky-override-grid-font-size: 15px;--sky-override-grid-header-background: #ffffff;--sky-override-grid-heading-border: 1px solid #cdcfd2;--sky-override-grid-heading-color: var(--sky-text-color-deemphasized);--sky-override-grid-heading-drag-color: #eeeeef;--sky-override-grid-heading-font-size: 15px;--sky-override-grid-heading-font-weight: 400;--sky-override-grid-heading-font: BLKB Sans, Helvetica Neue, Arial, sans-serif;--sky-override-grid-heading-sort-space: 5px;--sky-override-grid-multiselect-display: block;--sky-override-grid-resize-handle-color: #00b4f1;--sky-override-grid-resize-handle-width: 5px;--sky-override-grid-resize-opacity: .6;--sky-override-grid-row-border: 1px dotted #cdcfd2;--sky-override-grid-row-color-even: #ffffff;--sky-override-grid-row-color-odd: #fbfbfb;--sky-override-grid-row-selected-background-hover: rgb(232.7615384615, 227.9961538462, 240.7038461538);--sky-override-grid-row-selected-background: #f1eef6;--sky-override-grid-row-selected-border: 1px solid #0974a1;--sky-override-grid-row-selected-border: 1px solid #dadbf6;--sky-override-grid-row-selected-box-shadow: 0px 0px 0px 3px inset #0974a1}.sky-grid{position:relative;display:block}.sky-grid-table-container{overflow:auto}.sky-grid-table{position:relative;table-layout:fixed;border-collapse:collapse;margin:0;font-size:var(--sky-override-grid-font-size, var(--sky-font-size-body-m));min-width:100%}.sky-grid-table.sky-grid-fit{max-width:100%;width:100%}.sky-grid-tbody{background-color:var(--sky-override-grid-row-color-even, var(--sky-color-background-row-base))}.sky-grid-row{border-bottom:var(--sky-override-grid-row-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-row:nth-child(odd){background-color:var(--sky-override-grid-row-color-odd, var(--sky-color-background-row-base))}.sky-grid-row.sky-grid-row-highlight{border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) solid var(--sky-color-border-selected));box-shadow:var(--sky-override-grid-row-selected-box-shadow, 0 0 0 var(--sky-border-width-selected-m) inset var(--sky-color-border-selected))}.sky-grid-row .sky-grid-cell{padding:0;min-width:10px}.sky-grid-heading{position:relative;border-top:var(--sky-override-grid-heading-border, none);border-bottom:var(--sky-override-grid-heading-border, var(--sky-border-width-emphasized) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-left:var(--sky-override-grid-heading-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));color:var(--sky-override-grid-heading-color, var(--sky-color-text-heading));font-family:var(--sky-override-grid-heading-font, var(--sky-font-family-primary));font-weight:var(--sky-override-grid-heading-font-weight, var(--sky-font-style-heading-4));font-size:var(--sky-override-grid-heading-font-size, var(--sky-font-size-heading-4));padding:0;cursor:pointer;background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)));overflow:visible;background-clip:padding-box}.sky-grid-heading:first-child{border-left:1px solid transparent}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-heading-sort,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-heading-sort{width:14px}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-help-inline-sort-hidden,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-help-inline-sort-hidden{margin-left:-14px;margin-right:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-header-caret-hidden-spacing{padding-left:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-heading-sort-visible{width:14px}.sky-grid-heading{-webkit-user-select:none;-webkit-tap-highlight-color:transparent;-moz-user-select:none;-ms-user-select:none;user-select:none}.sky-grid-heading div{padding:8px}.sky-grid-heading .overflow{text-overflow:ellipsis;white-space:nowrap;position:relative;z-index:1;overflow:hidden;min-width:100%}.sky-grid-heading .sky-grid-column-input-aria-only{-webkit-appearance:none;-moz-appearance:none;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);position:absolute;display:block;top:0;bottom:0;right:0}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-track{background:transparent}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-ms-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only:focus{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-column-alignment-left{text-align:left}.sky-grid-column-alignment-center{text-align:center}.sky-grid-column-alignment-right{text-align:right}.sky-grid-multiselect-cell{padding:0;text-align:center}.sky-grid-multiselect-cell ::ng-deep .sky-switch-control{margin:0 auto}.sky-grid-multiselect-cell div{display:var(--sky-override-grid-multiselect-display, flex);justify-content:space-around}th.sky-grid-multiselect-cell{cursor:default}th.sky-grid-multiselect-cell .screen-reader-only{width:0;height:0;padding:0;opacity:0;position:absolute;margin:-1px;border:0;overflow:hidden;clip:rect(0,0,0,0);outline:none;white-space:nowrap}@-moz-document url-prefix(){.sky-grid-multiselect-row td{border-left:0px solid transparent;border-right:0px solid transparent}}.sky-grid-multiselect-row:hover{background-color:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-selected-row{background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft));border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-bottom:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-multiselect-selected-row:nth-child(odd){background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover{background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-has-toolbar .sky-grid-heading{border-top-width:0px}.sky-grid-heading-sort.sky-grid-heading-sort-hidden{visibility:hidden}.sky-grid-heading-sort.sky-grid-heading-sort-visible{visibility:visible;padding-left:var(--sky-override-grid-heading-sort-space, var(--sky-space-gap-text_action-xs))}.sky-grid-resize-handle{position:absolute;right:0;top:0;bottom:0;width:30px;z-index:2;min-height:20px;height:100%!important;vertical-align:middle;cursor:col-resize}.sky-grid-resize-handle:hover:after{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-resize-handle:after{position:absolute;right:0;top:0;bottom:0;width:var(--sky-override-grid-resize-handle-width, 3px);height:100%;content:\"\";background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-resize-bar{position:absolute;top:0;left:0;z-index:99;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);background:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider));opacity:var(--sky-override-grid-resize-opacity, 1)}tr{position:relative}.sky-grid-top-scroll-container{overflow:auto}.sky-grid-top-scroll{height:1px}\n"] }]
1269
+ }], ctorParameters: () => [{ type: i1.SkyAffixService }, { type: i0.ChangeDetectorRef }, { type: SkyGridAdapterService }, { type: i1.SkyOverlayService }, { type: i1.SkyAppWindowRef }, { type: i1.SkyUIConfigService }, { type: i1.SkyLogService }], propDecorators: { columns: [{
1298
1270
  type: Input
1299
1271
  }], data: [{
1300
1272
  type: Input
@@ -1376,7 +1348,7 @@ class SkyGridModule {
1376
1348
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.2", ngImport: i0, type: SkyGridModule, declarations: [SkyGridComponent,
1377
1349
  SkyGridColumnComponent,
1378
1350
  SkyGridCellComponent], imports: [CommonModule,
1379
- DragulaModule,
1351
+ DragDropModule,
1380
1352
  FormsModule,
1381
1353
  SkyAffixModule,
1382
1354
  SkyCheckboxModule,
@@ -1387,7 +1359,7 @@ class SkyGridModule {
1387
1359
  SkyPopoverModule,
1388
1360
  SkyTextHighlightModule], exports: [SkyGridComponent, SkyGridColumnComponent] }); }
1389
1361
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SkyGridModule, imports: [CommonModule,
1390
- DragulaModule,
1362
+ DragDropModule,
1391
1363
  FormsModule,
1392
1364
  SkyAffixModule,
1393
1365
  SkyCheckboxModule,
@@ -1408,7 +1380,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImpor
1408
1380
  ],
1409
1381
  imports: [
1410
1382
  CommonModule,
1411
- DragulaModule,
1383
+ DragDropModule,
1412
1384
  FormsModule,
1413
1385
  SkyAffixModule,
1414
1386
  SkyCheckboxModule,
@@ -1 +1 @@
1
- {"version":3,"file":"skyux-grids.mjs","sources":["../../../../../libs/components/grids/src/lib/modules/grid/grid-column.model.ts","../../../../../libs/components/grids/src/lib/modules/shared/sky-grids-resources.module.ts","../../../../../libs/components/grids/src/lib/modules/grid/grid-cell.component.ts","../../../../../libs/components/grids/src/lib/modules/grid/grid-column.component.ts","../../../../../libs/components/grids/src/lib/modules/grid/grid-adapter.service.ts","../../../../../libs/components/grids/src/lib/modules/grid/types/grid-message-type.ts","../../../../../libs/components/grids/src/lib/modules/grid/types/grid-selected-rows-source.ts","../../../../../libs/components/grids/src/lib/modules/grid/grid.component.ts","../../../../../libs/components/grids/src/lib/modules/grid/grid.component.html","../../../../../libs/components/grids/src/lib/modules/grid/grid.module.ts","../../../../../libs/components/grids/src/skyux-grids.ts"],"sourcesContent":["import { TemplateRef } from '@angular/core';\n\nimport { SkyGridColumnAlignment } from './types/grid-column-alignment';\n\n/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridColumnModel {\n public template: TemplateRef<unknown>;\n public id: string;\n public field: string;\n public heading: string;\n public inlineHelpPopover: any;\n public type: string;\n public width: number;\n public hidden: boolean;\n public locked: boolean;\n public description: string;\n public isSortable = true;\n public excludeFromHighlighting: boolean;\n\n /**\n * The horizontal alignment of the column's data and header.\n */\n public alignment: SkyGridColumnAlignment;\n\n public searchFunction: (data: any, searchText: string) => boolean;\n\n constructor(template: TemplateRef<unknown>, data?: any) {\n this.template = template;\n\n if (data) {\n this.id = data.id || data.field;\n this.type = data.type;\n this.field = data.field;\n this.heading = data.heading;\n this.inlineHelpPopover = data.inlineHelpPopover;\n this.width = data.width ? Number(data.width) : undefined;\n this.hidden = data.hidden;\n this.locked = data.locked;\n this.description = data.description;\n this.searchFunction = data.searchFunction;\n this.isSortable = data.isSortable;\n this.excludeFromHighlighting = data.excludeFromHighlighting;\n this.alignment = data.alignment;\n }\n }\n}\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-grids' 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': { skyux_grid_multiselect_select_row: { message: 'Select row' } },\n 'FR-CA': {\n skyux_grid_multiselect_select_row: { message: 'Sélectionner une ligne' },\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 SkyGridsResourcesModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { ListItemModel, getData } from '@skyux/list-builder-common';\n\n/**\n * @internal\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\n@Component({\n selector: 'sky-grid-cell',\n template: '<ng-template #cell />',\n styleUrls: ['./grid-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyGridCellComponent implements OnInit {\n @Input()\n public item: ListItemModel;\n\n @Input()\n public columnId: string;\n\n @Input()\n public template: TemplateRef<unknown>;\n\n @Input()\n public fieldSelector: string;\n\n @ViewChild('cell', {\n read: ViewContainerRef,\n static: true,\n })\n private container: ViewContainerRef;\n\n public ngOnInit(): void {\n this.container.createEmbeddedView(this.template, this);\n }\n\n public get row(): any {\n return this.item.data;\n }\n\n public get value(): any {\n if (this.item.data && (this.fieldSelector || this.columnId)) {\n return getData(this.item.data, this.fieldSelector || this.columnId);\n }\n\n return undefined;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n EventEmitter,\n Input,\n OnChanges,\n QueryList,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\n\nimport { SkyGridColumnAlignment } from './types/grid-column-alignment';\nimport { SkyGridColumnDescriptionModelChange } from './types/grid-column-description-model-change';\nimport { SkyGridColumnHeadingModelChange } from './types/grid-column-heading-model-change';\nimport { SkyGridColumnInlineHelpPopoverModelChange } from './types/grid-column-inline-help-popover-model-change';\n\n/**\n * Specifies the column information.\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\n@Component({\n selector: 'sky-grid-column',\n template: '<ng-content />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyGridColumnComponent implements OnChanges {\n /**\n * The horizontal alignment of the column's data and header.\n * Options include: `\"left\"`, `\"center\"`, and `\"right\"`.\n * @default \"left\"\n */\n @Input()\n public alignment: SkyGridColumnAlignment = 'left';\n\n /**\n * The description for the column.\n */\n @Input()\n public description: string;\n\n /**\n * Whether to disable the highlighting of search text in the column.\n * @default false\n */\n @Input()\n public excludeFromHighlighting: boolean;\n\n /**\n * The property to retrieve cell information from an entry on the grid `data` array.\n * You must provide either the `id` or `field` property for every column,\n * but do not provide both. If `id` does not exist on a column, then `field` is the entry\n * for the grid `selectedColumnIds` array.\n */\n @Input()\n public field: string;\n\n /**\n * Text to display in the column header.\n */\n @Input()\n public heading: string;\n\n /**\n * Whether the column is initially hidden when grid `selectedColumnIds` are not provided.\n * @default false\n */\n @Input()\n public hidden: boolean;\n\n /**\n * The unique ID for the column. You must provide either the `id` or `field` property\n * for every column, but do not provide both. If `field` does not exist on a column,\n * then the `id` property retrieves cell information from an entry on the grid `data` array.\n */\n @Input()\n public id: string;\n\n /**\n * The template to display inside an inline help popup for this column.\n */\n @Input()\n public inlineHelpPopover: any;\n\n /**\n * Whether the column sorts the grid when users click the column header.\n * @default true\n */\n @Input()\n public isSortable = true;\n\n /**\n * Whether the column is locked. The intent is to display locked columns first\n * on the left side of the grid. If set to `true`, then users cannot drag the column\n * to another position and or drag other columns before the locked column.\n * @default false\n */\n @Input()\n public locked: boolean;\n\n /**\n * The search function to apply for the specific column. By default,\n * the column executes a string compare on the column data.\n * @default (value, searchText) => value.toString().toLowerCase().indexOf(searchText) !== -1\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('search')\n public searchFunction: (value: any, searchText: string) => boolean =\n this.search;\n\n /**\n * @internal\n */\n @Input()\n public type: string;\n\n /**\n * The template for a column. This can be assigned as a reference\n * to the `template` attribute, or it can be assigned as a child of the `template` element\n * inside the `sky-grid-column` component. The template has access to the `value` variable,\n * which contains the value passed to the column, and the `row` variable, which contains\n * the entire row data.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('template')\n public templateInput: TemplateRef<unknown>;\n\n /**\n * The width of the column in pixels.\n * If undefined, the column width is evenly distributed.\n */\n @Input()\n public width: number;\n\n public descriptionChanges: EventEmitter<string> = new EventEmitter<string>();\n\n public descriptionModelChanges =\n new EventEmitter<SkyGridColumnDescriptionModelChange>();\n\n public headingChanges: EventEmitter<string> = new EventEmitter<string>();\n\n public headingModelChanges =\n new EventEmitter<SkyGridColumnHeadingModelChange>();\n\n public inlineHelpPopoverModelChanges =\n new EventEmitter<SkyGridColumnInlineHelpPopoverModelChange>();\n\n @ContentChildren(TemplateRef)\n private templates: QueryList<TemplateRef<unknown>>;\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['heading'] && changes['heading'].firstChange === false) {\n this.headingChanges.emit(this.heading);\n this.headingModelChanges.emit({\n value: this.heading,\n id: this.id,\n field: this.field,\n });\n }\n if (\n changes['description'] &&\n changes['description'].firstChange === false\n ) {\n this.descriptionChanges.emit(this.description);\n this.descriptionModelChanges.emit({\n value: this.description,\n id: this.id,\n field: this.field,\n });\n }\n if (\n changes['inlineHelpPopover'] &&\n changes['inlineHelpPopover'].firstChange === false\n ) {\n this.inlineHelpPopoverModelChanges.emit({\n value: this.inlineHelpPopover,\n id: this.id,\n field: this.field,\n });\n }\n }\n\n public get template(): TemplateRef<unknown> {\n if (this.templates.length > 0) {\n return this.templates.first;\n }\n\n return this.templateInput;\n }\n\n private search(value: any, searchText: string): boolean {\n if (value !== undefined && value !== null) {\n return value.toString().toLowerCase().indexOf(searchText) !== -1;\n }\n\n return false;\n }\n}\n","import {\n ElementRef,\n Injectable,\n Renderer2,\n RendererFactory2,\n} from '@angular/core';\n\nimport { DragulaService } from 'ng2-dragula';\n\nconst GRID_HEADER_DRAGGING_CLASS = 'sky-grid-header-dragging';\nconst GRID_HEADER_LOCKED_SELECTOR = '.sky-grid-header-locked';\nconst GRID_HEADER_RESIZE_HANDLE = '.sky-grid-resize-handle';\nconst GRID_ROW_DELETE_SELECTOR = '.sky-grid-row-delete-heading';\nconst GRID_MULTISELECT_SELECTOR = '.sky-grid-multiselect-cell';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyGridAdapterService {\n private renderer: Renderer2;\n\n constructor(private rendererFactory: RendererFactory2) {\n this.renderer = this.rendererFactory.createRenderer(undefined, undefined);\n }\n\n public initializeDragAndDrop(\n dragulaGroupName: string,\n dragulaService: DragulaService,\n dropCallback: (newColumnIds: string[]) => void,\n ): void {\n dragulaService\n .drag(dragulaGroupName)\n .subscribe((args) => args.el.classList.add(GRID_HEADER_DRAGGING_CLASS));\n\n dragulaService\n .dragend(dragulaGroupName)\n .subscribe((args) =>\n args.el.classList.remove(GRID_HEADER_DRAGGING_CLASS),\n );\n\n dragulaService.drop(dragulaGroupName).subscribe((args) => {\n const columnIds: string[] = [];\n const nodes = Array.from<HTMLElement>(\n args.target.querySelectorAll(\n `th:not(${GRID_MULTISELECT_SELECTOR}):not(${GRID_ROW_DELETE_SELECTOR})`,\n ),\n );\n for (const el of nodes) {\n const id = el.getAttribute('sky-cmp-id');\n columnIds.push(id);\n }\n dropCallback(columnIds);\n });\n\n dragulaService.createGroup(dragulaGroupName, {\n moves: (el: HTMLElement, container: HTMLElement, handle: HTMLElement) => {\n const columns: NodeListOf<HTMLElement> =\n container.querySelectorAll('th div');\n const isLeftOfLocked = this.isLeftOfLocked(handle, columns);\n\n return (\n !el.querySelector(GRID_HEADER_LOCKED_SELECTOR) &&\n handle !== undefined &&\n !handle.matches(GRID_HEADER_RESIZE_HANDLE) &&\n !handle.matches(GRID_MULTISELECT_SELECTOR) &&\n !handle.matches(GRID_ROW_DELETE_SELECTOR) &&\n !isLeftOfLocked\n );\n },\n accepts: (\n el: HTMLElement,\n target: HTMLElement,\n source: HTMLElement,\n sibling: HTMLElement,\n ) => {\n if (sibling === undefined || !sibling) {\n return true;\n }\n\n const columns: NodeListOf<HTMLElement> =\n source.querySelectorAll('th div');\n const siblingDiv = sibling.querySelector('div');\n const isLeftOfLocked = this.isLeftOfLocked(siblingDiv, columns);\n\n return (\n !sibling.matches(GRID_HEADER_LOCKED_SELECTOR) &&\n !sibling.matches(GRID_HEADER_RESIZE_HANDLE) &&\n !isLeftOfLocked\n );\n },\n });\n }\n\n public getRowHeight(el: ElementRef, index: number): string {\n return (\n el.nativeElement.querySelectorAll('tbody tr')[index].scrollHeight + 'px'\n );\n }\n\n public setStyle(el: ElementRef, style: string, value: string): void {\n if (el) {\n this.renderer.setStyle(el.nativeElement, style, value);\n }\n }\n\n private isLeftOfLocked(\n handle: HTMLElement,\n columns: NodeListOf<HTMLElement>,\n ): boolean {\n let sourceColumn = handle;\n for (const column of Array.from(columns)) {\n if (column.contains(handle)) {\n sourceColumn = column;\n }\n }\n\n for (let i = columns.length - 1; i >= 0; i--) {\n if (columns[i].classList.contains('sky-grid-header-locked')) {\n return true;\n }\n\n if (columns[i] === sourceColumn) {\n break;\n }\n }\n\n return false;\n }\n}\n","/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport enum SkyGridMessageType {\n /**\n * Selects the multiselect checkboxes for all rows in the grid.\n */\n SelectAll = 0,\n\n /**\n * Clears the multiselect checkboxes for all rows in the grid.\n */\n ClearAll = 1,\n\n /**\n * @internal\n */\n PromptDeleteRow = 2,\n\n /**\n * @internal\n */\n AbortDeleteRow = 3,\n}\n","/**\n * @internal\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport enum SkyGridSelectedRowsSource {\n CheckboxChange,\n ClearAll,\n RowClick,\n SelectAll,\n SelectedRowIdsChange,\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EnvironmentInjector,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n inject,\n} from '@angular/core';\nimport {\n SkyAffixAutoFitContext,\n SkyAffixService,\n SkyAppWindowRef,\n SkyLogService,\n SkyOverlayService,\n SkyUIConfigService,\n} from '@skyux/core';\nimport {\n ListItemModel,\n ListSortFieldSelectorModel,\n} from '@skyux/list-builder-common';\n\nimport { DragulaService } from 'ng2-dragula';\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n Subscription,\n fromEvent,\n merge,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n map,\n take,\n takeUntil,\n takeWhile,\n} from 'rxjs/operators';\n\nimport { SkyGridAdapterService } from './grid-adapter.service';\nimport { SkyGridColumnComponent } from './grid-column.component';\nimport { SkyGridColumnModel } from './grid-column.model';\nimport { SkyGridColumnDescriptionModelChange } from './types/grid-column-description-model-change';\nimport { SkyGridColumnHeadingModelChange } from './types/grid-column-heading-model-change';\nimport { SkyGridColumnInlineHelpPopoverModelChange } from './types/grid-column-inline-help-popover-model-change';\nimport { SkyGridColumnWidthModelChange } from './types/grid-column-width-model-change';\nimport { SkyGridMessage } from './types/grid-message';\nimport { SkyGridMessageType } from './types/grid-message-type';\nimport { SkyGridRowDeleteCancelArgs } from './types/grid-row-delete-cancel-args';\nimport { SkyGridRowDeleteConfig } from './types/grid-row-delete-config';\nimport { SkyGridRowDeleteConfirmArgs } from './types/grid-row-delete-confirm-args';\nimport { SkyGridRowDeleteContents } from './types/grid-row-delete-contents';\nimport { SkyGridSelectedRowsModelChange } from './types/grid-selected-rows-model-change';\nimport { SkyGridSelectedRowsSource } from './types/grid-selected-rows-source';\nimport { SkyGridUIConfig } from './types/grid-ui-config';\n\nlet nextId = 0;\n\n/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\n@Component({\n selector: 'sky-grid',\n templateUrl: './grid.component.html',\n styleUrls: ['./grid.component.scss'],\n viewProviders: [DragulaService],\n providers: [SkyGridAdapterService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyGridComponent\n implements OnInit, AfterContentInit, AfterViewInit, OnChanges, OnDestroy\n{\n /**\n * Columns and column properties for the grid.\n */\n @Input()\n public set columns(newColumns: SkyGridColumnModel[]) {\n const oldColumns = this.columns;\n this._columns = newColumns;\n if (oldColumns) {\n this.transferColumnWidths(oldColumns, this.columns);\n this.isResized = false;\n this.setDisplayedColumns(true);\n }\n this.changeDetector.markForCheck();\n }\n\n public get columns(): SkyGridColumnModel[] {\n return this._columns;\n }\n\n /**\n * The data for the grid. Each item requires an `id` and a property that maps\n * to the `field` or `id` property of each column in the grid.\n */\n @Input()\n public data: any[];\n\n /**\n * Whether to enable the multiselect feature to display a column of\n * checkboxes on the left side of the grid. You can specify a unique ID with\n * the `multiselectRowId` property, but multiselect defaults to the `id` property on\n * the `data` object.\n * @default false\n */\n @Input()\n public enableMultiselect = false;\n\n /**\n * How the grid fits to its parent. The valid options are `width`,\n * which fits the grid to the parent's full width, and `scroll`, which allows the grid\n * to exceed the parent's width. If the grid does not have enough columns to fill\n * the parent's width, it always stretches to the parent's full width.\n * @default \"width\"\n */\n @Input()\n public fit = 'width';\n\n /**\n * Whether to display a toolbar with the grid.\n */\n @Input()\n public hasToolbar = false;\n\n /**\n * The height of the grid.\n */\n @Input()\n public height: number;\n\n /**\n * Text to highlight within the grid.\n * Typically, this property is used in conjunction with search.\n */\n @Input()\n public highlightText: string;\n\n /**\n * The observable to send commands to the grid.\n */\n @Input()\n public messageStream = new Subject<SkyGridMessage>();\n\n /**\n * The unique ID that matches a property on the `data` object.\n * By default, this property uses the `id` property.\n */\n @Input()\n public multiselectRowId: string;\n\n /**\n * The ID of the row to highlight. The ID matches the `id` property\n * of the `data` object. Typically, this property is used in conjunction with\n * the flyout component to indicate the currently selected row.\n */\n @Input()\n public rowHighlightedId: string;\n\n /**\n * The columns to display in the grid based on the `id` or `field` properties\n * of the columns. If no columns are specified, then the grid displays all columns.\n */\n @Input()\n public set selectedColumnIds(value: string[]) {\n const currentIds = this._selectedColumnIds;\n this._selectedColumnIds = value;\n\n if (this.columns) {\n this.setDisplayedColumns();\n }\n\n // Ensure that the ids have changed.\n if (!currentIds || !value || !this.arraysEqual(value, currentIds)) {\n // This variable ensures that we do not set user config options or fire the change event\n // on the first time that the columns are set up\n if (this.selectedColumnIdsSet) {\n this.setUserConfig({\n selectedColumnIds: value,\n });\n\n this.selectedColumnIdsChange.emit(this._selectedColumnIds);\n\n if (this.isResized) {\n this.resetTableWidth();\n }\n }\n }\n\n this.selectedColumnIdsSet = true;\n }\n\n public get selectedColumnIds(): string[] {\n return this._selectedColumnIds;\n }\n\n /**\n * The set of IDs for the rows to select in a multiselect grid.\n * The IDs match the `id` properties of the `data` objects.\n * Rows with IDs that are not included are de-selected in the grid.\n */\n @Input()\n public set selectedRowIds(value: string[]) {\n if (value) {\n this._selectedRowIds = value;\n this.applySelectedRows();\n this.emitSelectedRows(SkyGridSelectedRowsSource.SelectedRowIdsChange);\n }\n }\n\n public get selectedRowIds(): string[] {\n return this._selectedRowIds;\n }\n\n /**\n * The unique key for the UI Config Service to retrieve stored settings from a database.\n * The UI Config Service saves configuration settings for users and returns\n * `selectedColumnIds` to preserve the columns to display and the preferred column order. You must provide `id` values for your `sky-grid-column` elements because the UI Config Service depends on those values to organize columns based on user settings. For more information about the UI Config Service, see [the sticky settings documentation](https://developer.blackbaud.com/skyux/learn/develop/sticky-settings).\n */\n @Input()\n public settingsKey: string;\n\n /**\n * Displays a caret in the column that was used to sort the grid. This is particularly useful\n * when you programmatically sort data and want to visually indicate how the grid was sorted.\n * This property accepts a `ListSortFieldSelectorModel` value with the following properties:\n * - `fieldSelector` Represents the current sort field. This property accepts `string` values.\n * - `descending` Indicates whether to sort in descending order. The caret that visually\n * indicates the sort order points down for descending order and up for ascending order.\n * This property accepts `boolean` values. Default is `false`.\n */\n @Input()\n public sortField: ListSortFieldSelectorModel;\n\n /**\n * The width of the grid in pixels.\n */\n @Input()\n public width: number;\n\n /**\n * Fires when the width of a column changes.\n */\n @Output()\n public columnWidthChange = new EventEmitter<\n SkyGridColumnWidthModelChange[]\n >();\n\n /**\n * Fires when the selection of multiselect checkboxes changes.\n * Emits an array of IDs for the selected rows based on the `multiselectRowId` property\n * that the consumer provides.\n */\n @Output()\n public multiselectSelectionChange =\n new EventEmitter<SkyGridSelectedRowsModelChange>();\n\n /**\n * @internal\n */\n @Output()\n public rowDeleteCancel = new EventEmitter<SkyGridRowDeleteCancelArgs>();\n\n /**\n * @internal\n */\n @Output()\n public rowDeleteConfirm = new EventEmitter<SkyGridRowDeleteConfirmArgs>();\n\n /**\n * Fires when the columns to display in the grid change or when the order of the columns changes.\n * The event emits an array of IDs for the displayed columns that reflects the column order.\n */\n @Output()\n public selectedColumnIdsChange = new EventEmitter<string[]>();\n\n /**\n * Fires when the active sort field changes.\n */\n @Output()\n public sortFieldChange = new EventEmitter<ListSortFieldSelectorModel>();\n\n public columnResizeStep = 10;\n public currentSortField: BehaviorSubject<ListSortFieldSelectorModel>;\n public displayedColumns: SkyGridColumnModel[];\n public dragulaGroupName: string;\n public gridId: number = ++nextId;\n public rowDeleteConfigs: SkyGridRowDeleteConfig[] = [];\n public items: any[];\n public maxColWidth = 9999; // This is an arbitrary number, as the input range picker won't work without a value.\n public minColWidth = 50;\n public showResizeBar = false;\n public showTopScroll = false;\n\n public get tableWidth(): any {\n return this.tableElementRef.nativeElement.offsetWidth;\n }\n\n @ContentChildren(SkyGridColumnComponent)\n private columnComponents: QueryList<SkyGridColumnComponent>;\n\n @ViewChildren('gridCol')\n private columnElementRefs: QueryList<ElementRef>;\n @ViewChildren('colSizeRange')\n private columnRangeInputElementRefs: QueryList<ElementRef>;\n @ViewChildren('inlineDeleteRef')\n private inlineDeleteRefs: QueryList<ElementRef>;\n @ViewChild('inlineDeleteTemplateRef', { read: TemplateRef })\n private inlineDeleteTemplateRef: TemplateRef<unknown>;\n @ViewChild('gridContainer')\n private tableContainerElementRef: ElementRef;\n @ViewChild('gridTable')\n private tableElementRef: ElementRef;\n @ViewChild('topScrollContainer')\n private topScrollContainerElementRef: ElementRef;\n @ViewChild('resizeBar')\n private resizeBar: ElementRef;\n\n private activeResizeColumnIndex: string;\n private isDraggingResizeHandle = false;\n private isResized = false;\n private ngUnsubscribe = new Subject<void>();\n private rowDeleteContents: Record<string, SkyGridRowDeleteContents> = {};\n private startColumnWidth: number;\n private subscriptions: Subscription[] = [];\n private scrollTriggered = false;\n private selectedColumnIdsSet = false;\n private xPosStart: number;\n\n private _columns: SkyGridColumnModel[];\n private _selectedColumnIds: string[];\n private _selectedRowIds: string[];\n\n readonly #environmentInjector = inject(EnvironmentInjector);\n\n constructor(\n private affixService: SkyAffixService,\n private changeDetector: ChangeDetectorRef,\n private dragulaService: DragulaService,\n private gridAdapter: SkyGridAdapterService,\n private overlayService: SkyOverlayService,\n private skyWindow: SkyAppWindowRef,\n private uiConfigService: SkyUIConfigService,\n logger: SkyLogService,\n ) {\n logger.deprecated('SkyGridComponent', {\n deprecationMajorVersion: 6,\n moreInfoUrl: 'https://developer.blackbaud.com/skyux/components/data-grid',\n replacementRecommendation: 'Use data grid instead.',\n });\n\n this.displayedColumns = new Array<SkyGridColumnModel>();\n this.items = new Array<any>();\n this.currentSortField = new BehaviorSubject<ListSortFieldSelectorModel>({\n fieldSelector: '',\n descending: false,\n });\n this.dragulaGroupName = `sky-grids-group-${this.gridId}`;\n }\n\n public ngOnInit(): void {\n this.messageStream\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((message: SkyGridMessage) => {\n this.handleIncomingMessages(message);\n });\n }\n\n public ngAfterContentInit(): void {\n if (this.settingsKey) {\n this.applyUserConfig().then(() => {\n this.initColumns();\n });\n } else {\n this.initColumns();\n }\n\n // Setup column drag-and-drop.\n this.gridAdapter.initializeDragAndDrop(\n this.dragulaGroupName,\n this.dragulaService,\n (selectedColumnIds: string[]) => {\n this.onHeaderDrop(selectedColumnIds);\n },\n );\n\n this.applySelectedRows();\n }\n\n public ngAfterViewInit(): void {\n this.checkUserColumnWidthsForScroll();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['columns'] && this.columns) {\n if (this.selectedColumnIds) {\n this.selectedColumnIds = this.selectedColumnIds.filter((columnId) => {\n return this.columns.find((column) => column.id === columnId);\n });\n }\n this.setDisplayedColumns(true);\n }\n\n if (changes['data'] && this.data) {\n this.transformData();\n\n // This set timeout is necessary to ensure the data has rendered in the grid\n setTimeout(() => {\n // This cleans up any lingering row deletes for items that have been removed.\n Object.keys(this.rowDeleteContents).forEach((id) => {\n if (!this.data.find((item) => item.id === id)) {\n this.destroyRowDelete(id);\n } else {\n // The rows re-render thus messing up the affixers. We must reaffix them so that things\n // continue to render correctly.\n const rowElement: HTMLElement =\n this.tableElementRef.nativeElement.querySelector(\n '[sky-cmp-id=\"' + id + '\"]',\n );\n\n this.rowDeleteContents[id].affixer.affixTo(rowElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n isSticky: true,\n placement: 'above',\n verticalAlignment: 'top',\n horizontalAlignment: 'left',\n enableAutoFit: false,\n });\n }\n });\n\n this.checkUserColumnWidthsForScroll();\n });\n }\n\n if (changes['sortField']) {\n this.setSortHeaders();\n }\n }\n\n public ngOnDestroy(): void {\n this.subscriptions.forEach((subscription: Subscription) => {\n subscription.unsubscribe();\n });\n this.multiselectSelectionChange.complete();\n\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n\n Object.keys(this.rowDeleteContents).forEach((id) => {\n this.destroyRowDelete(id);\n });\n\n this.dragulaService.destroy(this.dragulaGroupName);\n }\n\n @HostListener('window:resize')\n public onWindowResize(): void {\n this.checkUserColumnWidthsForScroll();\n }\n\n public getTopScrollWidth(): string {\n return this.tableElementRef.nativeElement.scrollWidth;\n }\n\n public getTableClassNames(): string {\n const classNames: string[] = [];\n\n if (this.fit !== 'scroll') {\n classNames.push('sky-grid-fit');\n }\n\n if (this.hasToolbar) {\n classNames.push('sky-grid-has-toolbar');\n }\n\n return this.addDelimiter(classNames, ' ');\n }\n\n public getTableHeaderClassNames(column: SkyGridColumnModel): string {\n const classNames: string[] = [];\n\n if (column && column.locked) {\n classNames.push('sky-grid-header-locked');\n }\n\n return this.addDelimiter(classNames, ' ');\n }\n\n public getCaretIconNames(column: SkyGridColumnModel): string {\n const iconNames: string[] = [];\n\n this.getSortDirection(column.field).subscribe((sortDir) => {\n if (sortDir === 'asc') {\n iconNames.push('chevron-up');\n }\n if (sortDir === 'desc') {\n iconNames.push('chevron-down');\n }\n });\n\n return this.addDelimiter(iconNames, ' ');\n }\n\n public onKeydown(event: KeyboardEvent, column: SkyGridColumnModel): void {\n const key = event.key.toLowerCase();\n if (key === 'enter' || key === ' ') {\n this.sortByColumn(column);\n }\n }\n\n public sortByColumn(column: SkyGridColumnModel): void {\n if (!this.isDraggingResizeHandle && column.isSortable) {\n this.currentSortField\n .pipe(\n take(1),\n map((field) => {\n let selector = {\n fieldSelector: column.field,\n descending: true,\n };\n\n if (\n field &&\n field.fieldSelector === column.field &&\n field.descending\n ) {\n selector = {\n fieldSelector: column.field,\n descending: false,\n };\n }\n this.sortFieldChange.emit(selector);\n this.currentSortField.next(selector);\n }),\n )\n .subscribe();\n }\n }\n\n public getSortDirection(columnField: string): Observable<string> {\n return this.currentSortField.pipe(\n distinctUntilChanged(),\n map((field) => {\n return field.fieldSelector === columnField\n ? field.descending\n ? 'desc'\n : 'asc'\n : undefined;\n }),\n );\n }\n\n public getAriaSortDirection(column: SkyGridColumnModel): Observable<string> {\n return this.currentSortField.pipe(\n distinctUntilChanged(),\n map((field) => {\n return field.fieldSelector === column.field\n ? field.descending\n ? 'descending'\n : 'ascending'\n : column.isSortable\n ? 'none'\n : undefined;\n }),\n );\n }\n\n public getCaretVisibility(columnField: string): Observable<string> {\n return this.currentSortField.pipe(\n distinctUntilChanged(),\n map((field) => {\n return field.fieldSelector === columnField ? 'visible' : 'hidden';\n }),\n );\n }\n\n public getHelpInlineClass(columnField: string): Observable<boolean> {\n return this.getCaretVisibility(columnField).pipe(\n map((visibility: string) => {\n return visibility === 'hidden';\n }),\n );\n }\n\n public onMultiselectCheckboxChange(): void {\n this.emitSelectedRows(SkyGridSelectedRowsSource.CheckboxChange);\n }\n\n public updateColumnHeading(change: SkyGridColumnHeadingModelChange): void {\n const foundColumnModel = this.columns.find((column: SkyGridColumnModel) => {\n return (\n (change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field)\n );\n });\n\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.heading = change.value;\n this.changeDetector.markForCheck();\n }\n }\n\n public updateInlineHelpPopover(\n change: SkyGridColumnInlineHelpPopoverModelChange,\n ): void {\n const foundColumnModel = this.columns.find((column: SkyGridColumnModel) => {\n return (\n (change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field)\n );\n });\n\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.inlineHelpPopover = change.value;\n this.changeDetector.markForCheck();\n }\n }\n\n public updateColumnDescription(\n change: SkyGridColumnDescriptionModelChange,\n ): void {\n const foundColumnModel = this.columns.find((column: SkyGridColumnModel) => {\n return (\n (change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field)\n );\n });\n\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.description = change.value;\n this.changeDetector.markForCheck();\n }\n }\n\n public onResizeColumnStart(event: {\n stopPropagation: () => void;\n preventDefault: () => void;\n pageX?: number;\n }): void {\n // If this table hasn't been resized, initialize all the resize widths.\n if (!this.isResized) {\n this.initColumnWidths();\n this.isResized = true;\n }\n\n this.initializeResizeColumn(event);\n\n this.isDraggingResizeHandle = true;\n this.xPosStart = event.pageX;\n this.showResizeBar = true;\n\n // Show visual indicator of where mouse is dragging (resizeBar).\n this.changeDetector.detectChanges();\n this.setResizeBarPosition(event.pageX);\n\n event.preventDefault();\n event.stopPropagation();\n\n const mouseMoveEvent = fromEvent(document, 'mousemove');\n const touchMoveEvent = fromEvent(document, 'touchmove');\n\n merge(mouseMoveEvent, touchMoveEvent)\n .pipe(\n takeWhile(() => {\n return this.isDraggingResizeHandle;\n }),\n )\n .subscribe((moveEvent: any) => {\n this.onResizeHandleMove(moveEvent);\n });\n\n const mouseUpEvent = fromEvent(document, 'mouseup');\n const touchEndEvent = fromEvent(document, 'touchend');\n\n merge(mouseUpEvent, touchEndEvent)\n .pipe(\n takeWhile(() => {\n return this.isDraggingResizeHandle;\n }),\n )\n .subscribe((endEvent: any) => {\n this.onResizeHandleRelease(endEvent);\n });\n }\n\n public onKeydownResizeCol(event: KeyboardEvent): void {\n // If this table hasn't been resized, initialize all the resize widths.\n if (!this.isResized) {\n this.initColumnWidths();\n this.isResized = true;\n }\n\n this.initializeResizeColumn(event);\n }\n\n public onInputChangeResizeCol(event: Event): void {\n const input = event.target as HTMLInputElement;\n const newValue = Number(input.value);\n const deltaX = newValue - this.startColumnWidth;\n this.resizeColumnByIndex(this.activeResizeColumnIndex, newValue, deltaX);\n const left = input.getBoundingClientRect().left;\n this.setResizeBarPosition(left);\n }\n\n public onResizeHandleMove(event: MouseEvent): void {\n const deltaX = event.pageX - this.xPosStart;\n const newColWidth = this.startColumnWidth + deltaX;\n\n if (newColWidth <= this.minColWidth) {\n event.stopPropagation();\n return;\n }\n\n const max = this.getMaxRangeByIndex(this.activeResizeColumnIndex);\n if (this.fit === 'width' && newColWidth > max) {\n event.stopPropagation();\n return;\n }\n\n this.setResizeBarPosition(event.pageX);\n }\n\n public onResizeHandleBlur(): void {\n this.showResizeBar = false;\n }\n\n public onResizeHandleFocus(event: FocusEvent): void {\n this.showResizeBar = true;\n this.changeDetector.detectChanges();\n\n const target = event.target as HTMLElement;\n const left = target.getBoundingClientRect().left;\n this.setResizeBarPosition(left);\n }\n\n public onResizeHandleRelease(event: MouseEvent): void {\n this.showResizeBar = false;\n const deltaX = event.pageX - this.xPosStart;\n const newColWidth = this.startColumnWidth + deltaX;\n this.resizeColumnByIndex(this.activeResizeColumnIndex, newColWidth, deltaX);\n this.isDraggingResizeHandle = false;\n this.activeResizeColumnIndex = undefined;\n\n event.stopPropagation();\n this.changeDetector.markForCheck();\n }\n\n public onRowClick(event: any, selectedItem: ListItemModel): void {\n /* istanbul ignore else */\n if (this.enableMultiselect) {\n if (\n event.target === event.currentTarget ||\n !this.isInteractiveElement(event)\n ) {\n selectedItem.isSelected = !selectedItem.isSelected;\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.RowClick);\n }\n }\n }\n\n public isRowHighlighted(id: string): boolean {\n if (this.rowHighlightedId) {\n return id === this.rowHighlightedId;\n }\n return false;\n }\n\n public getRowHeight(index: number): string {\n return this.gridAdapter.getRowHeight(this.tableElementRef, index);\n }\n\n public cancelRowDelete(id: string): void {\n this.rowDeleteConfigs = this.rowDeleteConfigs.filter(\n (config) => config.id !== id,\n );\n this.rowDeleteCancel.emit({ id: id });\n\n this.destroyRowDelete(id);\n }\n\n public confirmRowDelete(id: string): void {\n this.rowDeleteConfigs.find((config) => config.id === id).pending = true;\n this.rowDeleteConfirm.emit({ id: id });\n }\n\n public getRowDeleteItem(id: string): SkyGridRowDeleteConfig {\n return this.rowDeleteConfigs.find((rowDelete) => rowDelete.id === id);\n }\n\n // Prevent touch devices from inadvertently scrolling grid while dragging columns.\n public onTouchMove(event: any): void {\n event.preventDefault();\n }\n\n public onTopScroll(event: any): void {\n /* sanity check */\n /* istanbul ignore else */\n if (this.tableContainerElementRef) {\n if (this.scrollTriggered) {\n this.scrollTriggered = false;\n this.tableContainerElementRef.nativeElement.scrollLeft =\n this.topScrollContainerElementRef.nativeElement.scrollLeft;\n } else {\n this.scrollTriggered = true;\n }\n }\n }\n\n public onGridScroll(event: any): void {\n /* sanity check */\n /* istanbul ignore else */\n if (this.topScrollContainerElementRef) {\n if (this.scrollTriggered) {\n this.scrollTriggered = false;\n this.topScrollContainerElementRef.nativeElement.scrollLeft =\n this.tableContainerElementRef.nativeElement.scrollLeft;\n } else {\n this.scrollTriggered = true;\n }\n }\n }\n\n private checkUserColumnWidthsForScroll(): void {\n if (\n !this.showTopScroll &&\n this.columnElementRefs &&\n this.columnElementRefs.length > 0\n ) {\n let columnsWidthTotal = 0;\n const windowSize = this.skyWindow.nativeWindow.innerWidth;\n this.columnElementRefs.forEach((col) => {\n if (!this.showTopScroll) {\n const computedWidth = parseFloat(\n window.getComputedStyle(col.nativeElement).width,\n );\n const offsetWidth = col.nativeElement.offsetWidth;\n const width = Math.max(\n computedWidth || offsetWidth,\n this.minColWidth,\n );\n columnsWidthTotal = columnsWidthTotal + width;\n if (columnsWidthTotal > windowSize) {\n this.showTopScroll = true;\n setTimeout(() => {\n this.changeDetector.markForCheck();\n });\n }\n }\n });\n }\n }\n\n private multiselectSelectAll(): void {\n for (const item of this.items) {\n item.isSelected = true;\n }\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.SelectAll);\n }\n\n private multiselectClearAll(): void {\n for (const item of this.items) {\n item.isSelected = false;\n }\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.ClearAll);\n }\n\n private handleIncomingMessages(message: SkyGridMessage): void {\n switch (message.type) {\n case SkyGridMessageType.SelectAll:\n this.multiselectSelectAll();\n break;\n\n case SkyGridMessageType.ClearAll:\n this.multiselectClearAll();\n break;\n case SkyGridMessageType.PromptDeleteRow:\n /* sanity check */\n /* istanbul ignore else */\n if (message.data && message.data.promptDeleteRow) {\n const existingConfig = this.rowDeleteConfigs.find(\n (config) => config.id === message.data.promptDeleteRow.id,\n );\n if (existingConfig) {\n existingConfig.pending = false;\n } else {\n this.rowDeleteConfigs.push({\n id: message.data.promptDeleteRow.id,\n pending: false,\n });\n const overlay = this.overlayService.create({\n enableScroll: true,\n showBackdrop: false,\n closeOnNavigation: true,\n enableClose: false,\n enablePointerEvents: true,\n environmentInjector: this.#environmentInjector,\n });\n\n overlay.attachTemplate(this.inlineDeleteTemplateRef, {\n $implicit: this.data.find(\n (item) => item.id === message.data.promptDeleteRow.id,\n ),\n });\n\n /**\n * We are manually setting the z-index here because overlays will always be on top of\n * the omnibar. This manual setting is 1 less than the omnibar's z-index of 1000. We\n * discussed changing the overlay service to allow for this but decided against that\n * change at this time due to its niche nature.\n */\n overlay.componentRef.instance.zIndex = '999';\n\n setTimeout(() => {\n const inlineDeleteRef = this.inlineDeleteRefs\n .toArray()\n .find((elRef) => {\n return (\n elRef.nativeElement.id ===\n 'row-delete-ref-' + message.data.promptDeleteRow.id\n );\n });\n const affixer = this.affixService.createAffixer(inlineDeleteRef);\n\n const rowElement: HTMLElement =\n this.tableElementRef.nativeElement.querySelector(\n '[sky-cmp-id=\"' + message.data.promptDeleteRow.id + '\"]',\n );\n\n affixer.affixTo(rowElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n isSticky: true,\n placement: 'above',\n verticalAlignment: 'top',\n horizontalAlignment: 'left',\n enableAutoFit: false,\n });\n\n this.rowDeleteContents[message.data.promptDeleteRow.id] = {\n affixer: affixer,\n overlay: overlay,\n };\n });\n }\n }\n break;\n case SkyGridMessageType.AbortDeleteRow:\n /* sanity check */\n /* istanbul ignore else */\n if (message.data && message.data.abortDeleteRow) {\n this.rowDeleteConfigs = this.rowDeleteConfigs.filter(\n (config) => config.id !== message.data.abortDeleteRow.id,\n );\n\n this.destroyRowDelete(message.data.abortDeleteRow.id);\n }\n break;\n }\n this.changeDetector.markForCheck();\n }\n\n private onHeaderDrop(newColumnIds: string[]): void {\n // update selected columnIds\n this.selectedColumnIdsSet = true;\n this.selectedColumnIds = newColumnIds;\n\n // mark for check because we are using ChangeDetectionStrategy.onPush\n this.changeDetector.markForCheck();\n }\n\n private setDisplayedColumns(respectHidden = false): void {\n /* sanity check */\n /* istanbul ignore else */\n if (this.columns) {\n if (this.selectedColumnIds !== undefined) {\n // setup displayed columns\n this.displayedColumns = this.selectedColumnIds\n .filter((columnId) => {\n return this.columns.find((column) => column.id === columnId);\n })\n .map((columnId) => {\n return this.columns.filter((column) => column.id === columnId)[0];\n });\n } else if (respectHidden) {\n this.displayedColumns = this.columns.filter((column) => {\n return !column.hidden;\n });\n } else {\n this.displayedColumns = this.columns;\n }\n }\n }\n\n private transformData(): void {\n // Transform data into object with id and data properties\n if (\n this.data &&\n this.data.length > 0 &&\n this.data[0].id &&\n !this.data[0].data\n ) {\n if (this.multiselectRowId) {\n this.items = this.getGridDataWithSelectedRows();\n } else {\n this.items = this.data.map((item) => new ListItemModel(item.id, item));\n }\n } else {\n this.items = this.data;\n }\n }\n\n private getGridDataWithSelectedRows(): ListItemModel[] {\n const selectedRows = this.getSelectedRows();\n return this.data.map((item) => {\n let checked;\n if (Object.prototype.hasOwnProperty.call(item, this.multiselectRowId)) {\n checked = selectedRows.indexOf(item[this.multiselectRowId]) > -1;\n } else {\n checked = selectedRows.indexOf(item.id) > -1;\n }\n return new ListItemModel(item.id, item, checked);\n });\n }\n\n private applySelectedRows(): void {\n if (this.items && this.items.length > 0 && this.selectedRowIds) {\n for (const item of this.items) {\n item.isSelected = this.selectedRowIds.indexOf(item.id) > -1;\n }\n this.changeDetector.markForCheck();\n }\n }\n\n private setSortHeaders(): void {\n this.currentSortField.next(\n this.sortField || { fieldSelector: '', descending: false },\n );\n }\n\n private getColumnsFromComponent(): void {\n this.columns = this.columnComponents.map((columnComponent) => {\n return new SkyGridColumnModel(columnComponent.template, columnComponent);\n });\n }\n\n private updateColumns(): void {\n this.getColumnsFromComponent();\n\n // This set timeout is necessary to ensure the columns have rendered in the grid\n setTimeout(() => {\n this.checkUserColumnWidthsForScroll();\n });\n }\n\n private resizeColumnByIndex(\n columnIndex: string,\n newColWidth: number,\n deltaX: number,\n ): void {\n const column = this.getColumnModelByIndex(columnIndex);\n\n // Prevent accidental shrinkage below minimum width.\n if (newColWidth <= this.minColWidth) {\n deltaX = deltaX + this.minColWidth - newColWidth;\n newColWidth = this.minColWidth;\n }\n\n // fit=width adds/removes width from the last column\n // fit=scroll adds/removes width from the table\n if (this.fit === 'width') {\n const lastColumn = this.getLastDisplayedColumn();\n\n // Prevent accidental growth that would bump last column off screen.\n const max = this.getMaxRangeByIndex(columnIndex);\n if (newColWidth > max) {\n newColWidth = max;\n deltaX = max - this.startColumnWidth;\n }\n column.width = newColWidth;\n lastColumn.width = lastColumn.width - deltaX;\n this.updateMaxRange();\n } else {\n this.gridAdapter.setStyle(\n this.tableElementRef,\n 'width',\n `${this.tableWidth + deltaX}px`,\n );\n column.width = newColWidth;\n }\n\n this.changeDetector.detectChanges();\n this.columnWidthChange.emit(this.getColumnWidthModelChange());\n }\n\n private initColumnWidths(): void {\n // Establish table width.\n this.showTopScroll = true;\n\n // Set column widths based on the width initially given by the browser.\n // computedWidth prevents accidental overflow for browsers with sub-pixel widths.\n this.columnElementRefs.forEach((col, index) => {\n const computedWidth = parseFloat(\n window.getComputedStyle(col.nativeElement).width,\n );\n const offsetWidth = col.nativeElement.offsetWidth;\n /* istanbul ignore next */\n this.getColumnModelByIndex(index).width = Math.max(\n computedWidth || offsetWidth,\n this.minColWidth,\n );\n });\n\n // 'scroll' tables should be allowed to expand outside of their constraints.\n if (this.fit === 'scroll') {\n this.gridAdapter.setStyle(this.tableElementRef, 'min-width', 'auto');\n }\n\n // Update max limits for input ranges.\n if (this.fit === 'width') {\n this.updateMaxRange();\n }\n\n this.changeDetector.detectChanges();\n }\n\n private transferColumnWidths(\n oldColumns: SkyGridColumnModel[],\n newColumns: SkyGridColumnModel[],\n ): void {\n /* sanity check */\n /* istanbul ignore else */\n if (oldColumns && newColumns) {\n for (const oldColumn of oldColumns) {\n if (oldColumn.width) {\n const matchingColumn = newColumns.find(\n (newColumn) => oldColumn.id === newColumn.id,\n );\n if (matchingColumn && !matchingColumn.width) {\n matchingColumn.width = oldColumn.width;\n }\n }\n }\n }\n this.changeDetector.markForCheck();\n }\n\n private getColumnWidthModelChange(): SkyGridColumnWidthModelChange[] {\n const columnWidthModelChange = new Array<SkyGridColumnWidthModelChange>();\n this.columns.forEach((column) => {\n columnWidthModelChange.push({\n id: column.id,\n field: column.field,\n width: column.width,\n });\n });\n return columnWidthModelChange;\n }\n\n private updateMaxRange(): void {\n const leftoverWidth =\n this.getLastDisplayedColumn().width - this.minColWidth;\n this.displayedColumns.forEach((column, index) => {\n const newMaxRange = column.width + leftoverWidth;\n const rangeInput = this.getRangeInputByIndex(index);\n rangeInput.nativeElement.max = newMaxRange;\n rangeInput.nativeElement.setAttribute('aria-valuemax', newMaxRange);\n });\n }\n\n private initializeResizeColumn(event: any): void {\n const clickTarget = event.target as HTMLElement;\n this.activeResizeColumnIndex = clickTarget.getAttribute('sky-cmp-index');\n const column = this.getColumnModelByIndex(this.activeResizeColumnIndex);\n this.startColumnWidth = column.width;\n }\n\n private resetTableWidth(): void {\n this.skyWindow.nativeWindow.setTimeout(() => {\n this.gridAdapter.setStyle(this.tableElementRef, 'width', `auto`);\n this.changeDetector.detectChanges();\n this.gridAdapter.setStyle(\n this.tableElementRef,\n 'width',\n `${this.tableWidth}px`,\n );\n this.changeDetector.detectChanges();\n });\n }\n\n private getRangeInputByIndex(index: string | number): ElementRef {\n return this.columnRangeInputElementRefs.find(\n (input) =>\n input.nativeElement.getAttribute('sky-cmp-index') === index.toString(),\n );\n }\n\n private getColumnModelByIndex(index: string | number): SkyGridColumnModel {\n return this.displayedColumns[Number(index)];\n }\n\n private getMaxRangeByIndex(index: string): number {\n const columnElementRef = this.columnElementRefs.find(\n (th) => th.nativeElement.getAttribute('sky-cmp-index') === index,\n );\n const rangeInput = columnElementRef.nativeElement.querySelector(\n '.sky-grid-column-input-aria-only',\n );\n return Number(rangeInput.max);\n }\n\n private getLastDisplayedColumn(): SkyGridColumnModel {\n return this.getColumnModelByIndex(this.displayedColumns.length - 1);\n }\n\n private addDelimiter(text: string[], delimiter: string): string {\n return text.filter((val) => val).join(delimiter);\n }\n\n private destroyRowDelete(id: string): void {\n const rowDeleteContents = this.rowDeleteContents[id];\n /* istanbul ignore else */\n if (rowDeleteContents) {\n rowDeleteContents.affixer.destroy();\n this.overlayService.close(rowDeleteContents.overlay);\n delete this.rowDeleteContents[id];\n }\n }\n\n private emitSelectedRows(source: SkyGridSelectedRowsSource): void {\n const selectedRows: SkyGridSelectedRowsModelChange = {\n selectedRowIds: this.getSelectedRows(),\n source: source,\n };\n this.multiselectSelectionChange.emit(selectedRows);\n }\n\n private getSelectedRows(): any[] {\n return this.items\n .filter((item) => {\n return item.isSelected;\n })\n .map((item) => {\n if (\n Object.prototype.hasOwnProperty.call(item.data, this.multiselectRowId)\n ) {\n return item.data[this.multiselectRowId];\n }\n return item.id;\n });\n }\n\n private isInteractiveElement(event: any): any {\n const interactiveElSelectors = `\n a,\n button,\n input,\n label,\n option,\n select,\n textarea,\n details,\n dialog,\n menu,\n menuitem,\n summary`;\n return event.target.closest(interactiveElSelectors);\n }\n\n private setResizeBarPosition(xPosition: number): void {\n const parentScroll = this.tableContainerElementRef.nativeElement.scrollLeft;\n const resizeBarX =\n xPosition -\n this.tableElementRef.nativeElement.getBoundingClientRect().left -\n parentScroll;\n this.gridAdapter.setStyle(this.resizeBar, 'left', resizeBarX + 'px');\n }\n\n private applyUserConfig(): Promise<void> {\n return new Promise<void>((resolve) => {\n this.uiConfigService\n .getConfig(this.settingsKey)\n .pipe(take(1))\n .subscribe(\n (config: SkyGridUIConfig) => {\n /* istanbul ignore else */\n if (config && config.selectedColumnIds) {\n // Remove any columnIds that don't exist in the current data set.\n this.selectedColumnIds = config.selectedColumnIds.filter((id) =>\n this.columns.find((column) => column.id === id),\n );\n this.changeDetector.markForCheck();\n }\n\n resolve();\n },\n () => {\n resolve();\n },\n );\n });\n }\n\n private setUserConfig(config: SkyGridUIConfig): void {\n if (!this.settingsKey) {\n return;\n }\n\n this.uiConfigService\n .setConfig(this.settingsKey, config)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n () => {},\n (err) => {\n console.warn('Could not save grid settings.');\n console.warn(err);\n },\n );\n }\n\n private initColumns(): void {\n /* istanbul ignore else */\n if (this.columnComponents.length !== 0 || this.columns !== undefined) {\n /* istanbul ignore else */\n /* sanity check */\n if (this.columnComponents.length > 0) {\n this.getColumnsFromComponent();\n }\n\n this.transformData();\n this.setDisplayedColumns(true);\n this.changeDetector.markForCheck();\n }\n\n // Watch for added/removed columns:\n this.subscriptions.push(\n this.columnComponents.changes.subscribe(() => this.updateColumns()),\n );\n\n // Watch for column heading changes:\n this.columnComponents.forEach((comp: SkyGridColumnComponent) => {\n this.subscriptions.push(\n comp.headingModelChanges.subscribe(\n (change: SkyGridColumnHeadingModelChange) => {\n this.updateColumnHeading(change);\n },\n ),\n );\n this.subscriptions.push(\n comp.descriptionModelChanges.subscribe(\n (change: SkyGridColumnDescriptionModelChange) => {\n this.updateColumnDescription(change);\n },\n ),\n );\n this.subscriptions.push(\n comp.inlineHelpPopoverModelChanges.subscribe(\n (change: SkyGridColumnInlineHelpPopoverModelChange) => {\n this.updateInlineHelpPopover(change);\n },\n ),\n );\n });\n }\n\n private arraysEqual(arrayA: any[], arrayB: any[]): boolean {\n return (\n arrayA.length === arrayB.length &&\n arrayA.every((value, index) => value === arrayB[index])\n );\n }\n}\n","<div class=\"sky-grid\">\n @if (showTopScroll) {\n <div\n #topScrollContainer\n class=\"sky-grid-top-scroll-container\"\n (scroll)=\"onTopScroll($event)\"\n >\n <div\n class=\"sky-grid-top-scroll\"\n [style.width.px]=\"getTopScrollWidth()\"\n ></div>\n </div>\n }\n <div\n #gridContainer\n class=\"sky-grid-table-container\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n (scroll)=\"onGridScroll($event)\"\n >\n <table #gridTable class=\"sky-grid-table\" [ngClass]=\"getTableClassNames()\">\n <thead>\n <tr [dragula]=\"dragulaGroupName\">\n @if (enableMultiselect) {\n <th\n class=\"sky-grid-heading sky-grid-multiselect-cell sky-grid-header-locked\"\n scope=\"col\"\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <span class=\"screen-reader-only\">\n {{ 'skyux_grid_multiselect_select_row' | skyLibResources }}\n </span>\n </th>\n }\n @for (\n column of displayedColumns;\n track column;\n let last = $last;\n let i = $index\n ) {\n <th\n #gridCol\n class=\"sky-grid-heading sky-field-label\"\n scope=\"col\"\n [attr.sky-cmp-index]=\"i\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n [attr.aria-sort]=\"getAriaSortDirection(column) | async\"\n [id]=\"'sky-grid-' + gridId + '-column-' + i\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n [tabIndex]=\"column.isSortable ? 0 : -1\"\n (mouseup)=\"sortByColumn(column)\"\n (keydown)=\"onKeydown($event, column)\"\n (touchmove)=\"onTouchMove($event)\"\n >\n <div\n class=\"overflow\"\n [ngClass]=\"getTableHeaderClassNames(column)\"\n [style.max-width.px]=\"column.width - 1\"\n [style.width.px]=\"column.width - 1\"\n >\n @if ((getCaretVisibility(column.field) | async) === 'hidden') {\n <span class=\"sky-grid-header-caret-hidden-spacing\"></span>\n }\n <!-- The no spacing here is intentional to avoid extra spaces due to these being inline elements -->\n <span class=\"sky-grid-header-text\">{{\n column.heading?.trim()\n }}</span>\n <sky-icon\n class=\"sky-grid-heading-sort\"\n variant=\"solid\"\n [ngClass]=\"\n 'sky-grid-heading-sort-' +\n (getCaretVisibility(column.field) | async)\n \"\n [iconName]=\"getCaretIconNames(column)\"\n />\n @if (column.inlineHelpPopover) {\n <sky-help-inline\n [ngClass]=\"{\n 'sky-grid-help-inline-sort-hidden':\n getHelpInlineClass(column.field) | async\n }\"\n [skyPopover]=\"column.inlineHelpPopover\"\n (keydown.enter)=\"$event.stopPropagation()\"\n (keydown.space)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n (mouseup)=\"$event.stopPropagation()\"\n />\n }\n </div>\n @if ((fit === 'width' && !last) || fit === 'scroll') {\n <span\n aria-hidden=\"true\"\n class=\"sky-grid-resize-handle\"\n tabindex=\"-1\"\n [attr.sky-cmp-index]=\"i\"\n (mousedown)=\"onResizeColumnStart($event)\"\n (touchstart)=\"onResizeColumnStart($event)\"\n >\n </span>\n }\n <input\n #colSizeRange\n aria-label=\"Width of column\"\n class=\"sky-grid-column-input-aria-only\"\n role=\"slider\"\n type=\"range\"\n [attr.aria-controls]=\"'sky-grid-' + gridId + '-column-' + i\"\n [attr.aria-valuemin]=\"minColWidth\"\n [attr.aria-valuemax]=\"maxColWidth\"\n [attr.aria-valuenow]=\"column.width\"\n [attr.sky-cmp-index]=\"i\"\n [min]=\"minColWidth\"\n [max]=\"maxColWidth\"\n [step]=\"columnResizeStep\"\n [(ngModel)]=\"column.width\"\n (blur)=\"onResizeHandleBlur()\"\n (focus)=\"onResizeHandleFocus($event)\"\n (keydown)=\"onKeydownResizeCol($event)\"\n (change)=\"onInputChangeResizeCol($event)\"\n />\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"sky-grid-tbody\">\n @for (item of items; track item; let i = $index) {\n <tr\n class=\"sky-grid-row\"\n [attr.aria-current]=\"isRowHighlighted(item.id) ? true : null\"\n [attr.sky-cmp-id]=\"item.id\"\n [ngClass]=\"{\n 'sky-grid-multiselect-selected-row': item.isSelected,\n 'sky-grid-multiselect-row': enableMultiselect,\n 'sky-grid-row-highlight': isRowHighlighted(item.id)\n }\"\n (click)=\"onRowClick($event, item)\"\n >\n @if (enableMultiselect) {\n <td class=\"sky-grid-multiselect-cell sky-grid-header-locked\">\n <div\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <sky-checkbox\n [label]=\"\n 'skyux_grid_multiselect_select_row' | skyLibResources\n \"\n [(ngModel)]=\"item.isSelected\"\n (change)=\"onMultiselectCheckboxChange()\"\n />\n </div>\n </td>\n }\n @for (\n column of displayedColumns;\n track column;\n let last = $last;\n let i = $index\n ) {\n <td\n class=\"sky-grid-cell\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n >\n <sky-grid-cell\n [skyHighlight]=\"\n !column.excludeFromHighlighting ? highlightText : undefined\n \"\n [template]=\"column.template || defaultCellTemplate\"\n [fieldSelector]=\"column.field\"\n [item]=\"item\"\n [columnId]=\"column.id\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (showResizeBar) {\n <div\n #resizeBar\n aria-hidden=\"true\"\n class=\"sky-grid-resize-bar\"\n tabindex=\"-1\"\n ></div>\n }\n </div>\n</div>\n\n<ng-template #defaultCellTemplate let-row=\"row\" let-value=\"value\">{{\n value\n}}</ng-template>\n\n<ng-template #inlineDeleteTemplateRef let-item>\n <div\n #inlineDeleteRef\n [id]=\"'row-delete-ref-' + item.id\"\n [ngStyle]=\"{\n height: getRowHeight(0),\n position: 'fixed',\n width: tableWidth + 'px'\n }\"\n >\n <sky-inline-delete\n [pending]=\"getRowDeleteItem(item.id).pending\"\n (cancelTriggered)=\"cancelRowDelete(item.id)\"\n (deleteTriggered)=\"confirmRowDelete(item.id)\"\n />\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyAffixModule } from '@skyux/core';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyTextHighlightModule } from '@skyux/indicators';\nimport { SkyInlineDeleteModule } from '@skyux/layout';\nimport { SkyPopoverModule } from '@skyux/popovers';\n\nimport { DragulaModule } from 'ng2-dragula';\n\nimport { SkyGridsResourcesModule } from '../shared/sky-grids-resources.module';\n\nimport { SkyGridCellComponent } from './grid-cell.component';\nimport { SkyGridColumnComponent } from './grid-column.component';\nimport { SkyGridComponent } from './grid.component';\n\n/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\n@NgModule({\n declarations: [\n SkyGridComponent,\n SkyGridColumnComponent,\n SkyGridCellComponent,\n ],\n imports: [\n CommonModule,\n DragulaModule,\n FormsModule,\n SkyAffixModule,\n SkyCheckboxModule,\n SkyGridsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyInlineDeleteModule,\n SkyPopoverModule,\n SkyTextHighlightModule,\n ],\n exports: [SkyGridComponent, SkyGridColumnComponent],\n})\nexport class SkyGridModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3.SkyGridAdapterService","i12.SkyGridCellComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;AAEG;MACU,kBAAkB,CAAA;IAqB7B,WAAA,CAAY,QAA8B,EAAE,IAAU,EAAA;QAV/C,IAAA,CAAA,UAAU,GAAG,IAAI;AAWtB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QAExB,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK;AAC/B,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AACrB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACvB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAC3B,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB;AAC/C,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS;AACxD,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AACzB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AACzB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AACnC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;AACzC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACjC,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB;AAC3D,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;QACjC;IACF;AACD;;AC/CD;AACA;;;;;AAKG;AAQH,MAAM,SAAS,GAAoC;IACjD,OAAO,EAAE,EAAE,iCAAiC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE;AACzE,IAAA,OAAO,EAAE;AACP,QAAA,iCAAiC,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE;AACzE,KAAA;CACF;AAED,sBAAsB,CAAC,YAAY,CAAC,SAAS,CAAC;AAE9C;;AAEG;MAIU,uBAAuB,CAAA;8GAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,YAFxB,aAAa,CAAA,EAAA,CAAA,CAAA;AAEZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,YAFxB,aAAa,CAAA,EAAA,CAAA,CAAA;;2FAEZ,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,aAAa,CAAC;AACzB,iBAAA;;;ACjBD;;;AAGG;MAQU,oBAAoB,CAAA;IAmBxB,QAAQ,GAAA;QACb,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxD;AAEA,IAAA,IAAW,GAAG,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI;IACvB;AAEA,IAAA,IAAW,KAAK,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC3D,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC;QACrE;AAEA,QAAA,OAAO,SAAS;IAClB;8GAjCW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAcvB,gBAAgB,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnBd,uBAAuB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8GAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKtB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,YACf,uBAAuB,EAAA,eAAA,EAEhB,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,MAAA,EAAA,CAAA,8GAAA,CAAA,EAAA;;sBAGhB;;sBAGA;;sBAGA;;sBAGA;;sBAGA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,MAAM,EAAE;AACjB,wBAAA,IAAI,EAAE,gBAAgB;AACtB,wBAAA,MAAM,EAAE,IAAI;AACb,qBAAA;;;ACrBH;;;AAGG;MAOU,sBAAsB,CAAA;AANnC,IAAA,WAAA,GAAA;AAOE;;;;AAIG;QAEI,IAAA,CAAA,SAAS,GAA2B,MAAM;AAmDjD;;;AAGG;QAEI,IAAA,CAAA,UAAU,GAAG,IAAI;AAWxB;;;;AAIG;;AAGI,QAAA,IAAA,CAAA,cAAc,GACnB,IAAI,CAAC,MAAM;AA0BN,QAAA,IAAA,CAAA,kBAAkB,GAAyB,IAAI,YAAY,EAAU;AAErE,QAAA,IAAA,CAAA,uBAAuB,GAC5B,IAAI,YAAY,EAAuC;AAElD,QAAA,IAAA,CAAA,cAAc,GAAyB,IAAI,YAAY,EAAU;AAEjE,QAAA,IAAA,CAAA,mBAAmB,GACxB,IAAI,YAAY,EAAmC;AAE9C,QAAA,IAAA,CAAA,6BAA6B,GAClC,IAAI,YAAY,EAA6C;AAoDhE,IAAA;AA/CQ,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,KAAK,KAAK,EAAE;YAClE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACtC,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;gBAC5B,KAAK,EAAE,IAAI,CAAC,OAAO;gBACnB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,aAAA,CAAC;QACJ;QACA,IACE,OAAO,CAAC,aAAa,CAAC;YACtB,OAAO,CAAC,aAAa,CAAC,CAAC,WAAW,KAAK,KAAK,EAC5C;YACA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9C,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;gBAChC,KAAK,EAAE,IAAI,CAAC,WAAW;gBACvB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,aAAA,CAAC;QACJ;QACA,IACE,OAAO,CAAC,mBAAmB,CAAC;YAC5B,OAAO,CAAC,mBAAmB,CAAC,CAAC,WAAW,KAAK,KAAK,EAClD;AACA,YAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC;gBACtC,KAAK,EAAE,IAAI,CAAC,iBAAiB;gBAC7B,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,IAAW,QAAQ,GAAA;QACjB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK;QAC7B;QAEA,OAAO,IAAI,CAAC,aAAa;IAC3B;IAEQ,MAAM,CAAC,KAAU,EAAE,UAAkB,EAAA;QAC3C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACzC,YAAA,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAClE;AAEA,QAAA,OAAO,KAAK;IACd;8GA1KW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,cAAA,EAAA,CAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,aAAA,EAAA,CAAA,UAAA,EAAA,eAAA,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAyHhB,WAAW,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7HlB,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIf,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,QAAQ,EAAE,gBAAgB;oBAC1B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE,KAAK;AAClB,iBAAA;;sBAOE;;sBAMA;;sBAOA;;sBASA;;sBAMA;;sBAOA;;sBAQA;;sBAMA;;sBAOA;;sBASA;;sBASA,KAAK;uBAAC,QAAQ;;sBAOd;;sBAWA,KAAK;uBAAC,UAAU;;sBAOhB;;sBAgBA,eAAe;uBAAC,WAAW;;;AC3I9B,MAAM,0BAA0B,GAAG,0BAA0B;AAC7D,MAAM,2BAA2B,GAAG,yBAAyB;AAC7D,MAAM,yBAAyB,GAAG,yBAAyB;AAC3D,MAAM,wBAAwB,GAAG,8BAA8B;AAC/D,MAAM,yBAAyB,GAAG,4BAA4B;AAE9D;;AAEG;MAEU,qBAAqB,CAAA;AAGhC,IAAA,WAAA,CAAoB,eAAiC,EAAA;QAAjC,IAAA,CAAA,eAAe,GAAf,eAAe;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC;IAC3E;AAEO,IAAA,qBAAqB,CAC1B,gBAAwB,EACxB,cAA8B,EAC9B,YAA8C,EAAA;QAE9C;aACG,IAAI,CAAC,gBAAgB;AACrB,aAAA,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAEzE;aACG,OAAO,CAAC,gBAAgB;AACxB,aAAA,SAAS,CAAC,CAAC,IAAI,KACd,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,0BAA0B,CAAC,CACrD;QAEH,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;YACvD,MAAM,SAAS,GAAa,EAAE;AAC9B,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CACtB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAC1B,UAAU,yBAAyB,CAAA,MAAA,EAAS,wBAAwB,CAAA,CAAA,CAAG,CACxE,CACF;AACD,YAAA,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE;gBACtB,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC;AACxC,gBAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB;YACA,YAAY,CAAC,SAAS,CAAC;AACzB,QAAA,CAAC,CAAC;AAEF,QAAA,cAAc,CAAC,WAAW,CAAC,gBAAgB,EAAE;YAC3C,KAAK,EAAE,CAAC,EAAe,EAAE,SAAsB,EAAE,MAAmB,KAAI;gBACtE,MAAM,OAAO,GACX,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC;gBACtC,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC;AAE3D,gBAAA,QACE,CAAC,EAAE,CAAC,aAAa,CAAC,2BAA2B,CAAC;AAC9C,oBAAA,MAAM,KAAK,SAAS;AACpB,oBAAA,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC;AAC1C,oBAAA,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC;AAC1C,oBAAA,CAAC,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC;oBACzC,CAAC,cAAc;YAEnB,CAAC;YACD,OAAO,EAAE,CACP,EAAe,EACf,MAAmB,EACnB,MAAmB,EACnB,OAAoB,KAClB;AACF,gBAAA,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,EAAE;AACrC,oBAAA,OAAO,IAAI;gBACb;gBAEA,MAAM,OAAO,GACX,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC;gBACnC,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC;gBAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC;AAE/D,gBAAA,QACE,CAAC,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC;AAC7C,oBAAA,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC;oBAC3C,CAAC,cAAc;YAEnB,CAAC;AACF,SAAA,CAAC;IACJ;IAEO,YAAY,CAAC,EAAc,EAAE,KAAa,EAAA;AAC/C,QAAA,QACE,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,IAAI;IAE5E;AAEO,IAAA,QAAQ,CAAC,EAAc,EAAE,KAAa,EAAE,KAAa,EAAA;QAC1D,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC;QACxD;IACF;IAEQ,cAAc,CACpB,MAAmB,EACnB,OAAgC,EAAA;QAEhC,IAAI,YAAY,GAAG,MAAM;QACzB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACxC,YAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBAC3B,YAAY,GAAG,MAAM;YACvB;QACF;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5C,YAAA,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE;AAC3D,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE;gBAC/B;YACF;QACF;AAEA,QAAA,OAAO,KAAK;IACd;8GA7GW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAArB,qBAAqB,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;AClBD;;AAEG;IACS;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC5B;;AAEG;AACH,IAAA,kBAAA,CAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa;AAEb;;AAEG;AACH,IAAA,kBAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY;AAEZ;;AAEG;AACH,IAAA,kBAAA,CAAA,kBAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAmB;AAEnB;;AAEG;AACH,IAAA,kBAAA,CAAA,kBAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAkB;AACpB,CAAC,EApBW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;;ACH9B;;;AAGG;IACS;AAAZ,CAAA,UAAY,yBAAyB,EAAA;AACnC,IAAA,yBAAA,CAAA,yBAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAc;AACd,IAAA,yBAAA,CAAA,yBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACR,IAAA,yBAAA,CAAA,yBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACR,IAAA,yBAAA,CAAA,yBAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACT,IAAA,yBAAA,CAAA,yBAAA,CAAA,sBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,sBAAoB;AACtB,CAAC,EANW,yBAAyB,KAAzB,yBAAyB,GAAA,EAAA,CAAA,CAAA;;ACkErC,IAAI,MAAM,GAAG,CAAC;AAEd;;AAEG;MAUU,gBAAgB,CAAA;AAG3B;;AAEG;IACH,IACW,OAAO,CAAC,UAAgC,EAAA;AACjD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO;AAC/B,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;QAC1B,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC;AACnD,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAChC;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IACpC;AAEA,IAAA,IAAW,OAAO,GAAA;QAChB,OAAO,IAAI,CAAC,QAAQ;IACtB;AAqEA;;;AAGG;IACH,IACW,iBAAiB,CAAC,KAAe,EAAA;AAC1C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB;AAC1C,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAE/B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,mBAAmB,EAAE;QAC5B;;AAGA,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;;;AAGjE,YAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;gBAC7B,IAAI,CAAC,aAAa,CAAC;AACjB,oBAAA,iBAAiB,EAAE,KAAK;AACzB,iBAAA,CAAC;gBAEF,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAE1D,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;oBAClB,IAAI,CAAC,eAAe,EAAE;gBACxB;YACF;QACF;AAEA,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;IAClC;AAEA,IAAA,IAAW,iBAAiB,GAAA;QAC1B,OAAO,IAAI,CAAC,kBAAkB;IAChC;AAEA;;;;AAIG;IACH,IACW,cAAc,CAAC,KAAe,EAAA;QACvC,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,oBAAoB,CAAC;QACvE;IACF;AAEA,IAAA,IAAW,cAAc,GAAA;QACvB,OAAO,IAAI,CAAC,eAAe;IAC7B;AAkFA,IAAA,IAAW,UAAU,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,WAAW;IACvD;AAqCS,IAAA,oBAAoB;AAE7B,IAAA,WAAA,CACU,YAA6B,EAC7B,cAAiC,EACjC,cAA8B,EAC9B,WAAkC,EAClC,cAAiC,EACjC,SAA0B,EAC1B,eAAmC,EAC3C,MAAqB,EAAA;QAPb,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,eAAe,GAAf,eAAe;AAnPzB;;;;;;AAMG;QAEI,IAAA,CAAA,iBAAiB,GAAG,KAAK;AAEhC;;;;;;AAMG;QAEI,IAAA,CAAA,GAAG,GAAG,OAAO;AAEpB;;AAEG;QAEI,IAAA,CAAA,UAAU,GAAG,KAAK;AAezB;;AAEG;AAEI,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAkB;AAkGpD;;AAEG;AAEI,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAExC;AAEH;;;;AAIG;AAEI,QAAA,IAAA,CAAA,0BAA0B,GAC/B,IAAI,YAAY,EAAkC;AAEpD;;AAEG;AAEI,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAA8B;AAEvE;;AAEG;AAEI,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAA+B;AAEzE;;;AAGG;AAEI,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,YAAY,EAAY;AAE7D;;AAEG;AAEI,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAA8B;QAEhE,IAAA,CAAA,gBAAgB,GAAG,EAAE;QAIrB,IAAA,CAAA,MAAM,GAAW,EAAE,MAAM;QACzB,IAAA,CAAA,gBAAgB,GAA6B,EAAE;AAE/C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC;QACnB,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,aAAa,GAAG,KAAK;QACrB,IAAA,CAAA,aAAa,GAAG,KAAK;QA2BpB,IAAA,CAAA,sBAAsB,GAAG,KAAK;QAC9B,IAAA,CAAA,SAAS,GAAG,KAAK;AACjB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ;QACnC,IAAA,CAAA,iBAAiB,GAA6C,EAAE;QAEhE,IAAA,CAAA,aAAa,GAAmB,EAAE;QAClC,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,oBAAoB,GAAG,KAAK;AAO3B,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAYzD,QAAA,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE;AACpC,YAAA,uBAAuB,EAAE,CAAC;AAC1B,YAAA,WAAW,EAAE,4DAA4D;AACzE,YAAA,yBAAyB,EAAE,wBAAwB;AACpD,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,KAAK,EAAsB;AACvD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,EAAO;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,CAA6B;AACtE,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,UAAU,EAAE,KAAK;AAClB,SAAA,CAAC;QACF,IAAI,CAAC,gBAAgB,GAAG,CAAA,gBAAA,EAAmB,IAAI,CAAC,MAAM,EAAE;IAC1D;IAEO,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAClC,aAAA,SAAS,CAAC,CAAC,OAAuB,KAAI;AACrC,YAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;AACtC,QAAA,CAAC,CAAC;IACN;IAEO,kBAAkB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,MAAK;gBAC/B,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,CAAC,CAAC;QACJ;aAAO;YACL,IAAI,CAAC,WAAW,EAAE;QACpB;;AAGA,QAAA,IAAI,CAAC,WAAW,CAAC,qBAAqB,CACpC,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,cAAc,EACnB,CAAC,iBAA2B,KAAI;AAC9B,YAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC;AACtC,QAAA,CAAC,CACF;QAED,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEO,eAAe,GAAA;QACpB,IAAI,CAAC,8BAA8B,EAAE;IACvC;AAEO,IAAA,WAAW,CAAC,OAAsB,EAAA;QACvC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACtC,YAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAI;AAClE,oBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC;AAC9D,gBAAA,CAAC,CAAC;YACJ;AACA,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAChC;QAEA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YAChC,IAAI,CAAC,aAAa,EAAE;;YAGpB,UAAU,CAAC,MAAK;;AAEd,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACjD,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AAC7C,wBAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBAC3B;yBAAO;;;AAGL,wBAAA,MAAM,UAAU,GACd,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,aAAa,CAC9C,eAAe,GAAG,EAAE,GAAG,IAAI,CAC5B;wBAEH,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE;4BACrD,cAAc,EAAE,sBAAsB,CAAC,QAAQ;AAC/C,4BAAA,QAAQ,EAAE,IAAI;AACd,4BAAA,SAAS,EAAE,OAAO;AAClB,4BAAA,iBAAiB,EAAE,KAAK;AACxB,4BAAA,mBAAmB,EAAE,MAAM;AAC3B,4BAAA,aAAa,EAAE,KAAK;AACrB,yBAAA,CAAC;oBACJ;AACF,gBAAA,CAAC,CAAC;gBAEF,IAAI,CAAC,8BAA8B,EAAE;AACvC,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE;YACxB,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;IAEO,WAAW,GAAA;QAChB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,YAA0B,KAAI;YACxD,YAAY,CAAC,WAAW,EAAE;AAC5B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE;AAE1C,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AACzB,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAE7B,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACjD,YAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;AAC3B,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACpD;IAGO,cAAc,GAAA;QACnB,IAAI,CAAC,8BAA8B,EAAE;IACvC;IAEO,iBAAiB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,WAAW;IACvD;IAEO,kBAAkB,GAAA;QACvB,MAAM,UAAU,GAAa,EAAE;AAE/B,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,EAAE;AACzB,YAAA,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;QACjC;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACzC;QAEA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;IAC3C;AAEO,IAAA,wBAAwB,CAAC,MAA0B,EAAA;QACxD,MAAM,UAAU,GAAa,EAAE;AAE/B,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;AAC3B,YAAA,UAAU,CAAC,IAAI,CAAC,wBAAwB,CAAC;QAC3C;QAEA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;IAC3C;AAEO,IAAA,iBAAiB,CAAC,MAA0B,EAAA;QACjD,MAAM,SAAS,GAAa,EAAE;AAE9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,KAAI;AACxD,YAAA,IAAI,OAAO,KAAK,KAAK,EAAE;AACrB,gBAAA,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;YAC9B;AACA,YAAA,IAAI,OAAO,KAAK,MAAM,EAAE;AACtB,gBAAA,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;YAChC;AACF,QAAA,CAAC,CAAC;QAEF,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;IAC1C;IAEO,SAAS,CAAC,KAAoB,EAAE,MAA0B,EAAA;QAC/D,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE;QACnC,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,GAAG,EAAE;AAClC,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QAC3B;IACF;AAEO,IAAA,YAAY,CAAC,MAA0B,EAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,MAAM,CAAC,UAAU,EAAE;AACrD,YAAA,IAAI,CAAC;iBACF,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,KAAK,KAAI;AACZ,gBAAA,IAAI,QAAQ,GAAG;oBACb,aAAa,EAAE,MAAM,CAAC,KAAK;AAC3B,oBAAA,UAAU,EAAE,IAAI;iBACjB;AAED,gBAAA,IACE,KAAK;AACL,oBAAA,KAAK,CAAC,aAAa,KAAK,MAAM,CAAC,KAAK;oBACpC,KAAK,CAAC,UAAU,EAChB;AACA,oBAAA,QAAQ,GAAG;wBACT,aAAa,EAAE,MAAM,CAAC,KAAK;AAC3B,wBAAA,UAAU,EAAE,KAAK;qBAClB;gBACH;AACA,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtC,YAAA,CAAC,CAAC;AAEH,iBAAA,SAAS,EAAE;QAChB;IACF;AAEO,IAAA,gBAAgB,CAAC,WAAmB,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC/B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,KAAK,KAAI;AACZ,YAAA,OAAO,KAAK,CAAC,aAAa,KAAK;kBAC3B,KAAK,CAAC;AACN,sBAAE;AACF,sBAAE;kBACF,SAAS;QACf,CAAC,CAAC,CACH;IACH;AAEO,IAAA,oBAAoB,CAAC,MAA0B,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC/B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,KAAK,KAAI;AACZ,YAAA,OAAO,KAAK,CAAC,aAAa,KAAK,MAAM,CAAC;kBAClC,KAAK,CAAC;AACN,sBAAE;AACF,sBAAE;kBACF,MAAM,CAAC;AACP,sBAAE;sBACA,SAAS;QACjB,CAAC,CAAC,CACH;IACH;AAEO,IAAA,kBAAkB,CAAC,WAAmB,EAAA;AAC3C,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC/B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,KAAK,KAAI;AACZ,YAAA,OAAO,KAAK,CAAC,aAAa,KAAK,WAAW,GAAG,SAAS,GAAG,QAAQ;QACnE,CAAC,CAAC,CACH;IACH;AAEO,IAAA,kBAAkB,CAAC,WAAmB,EAAA;AAC3C,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,IAAI,CAC9C,GAAG,CAAC,CAAC,UAAkB,KAAI;YACzB,OAAO,UAAU,KAAK,QAAQ;QAChC,CAAC,CAAC,CACH;IACH;IAEO,2BAA2B,GAAA;AAChC,QAAA,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,cAAc,CAAC;IACjE;AAEO,IAAA,mBAAmB,CAAC,MAAuC,EAAA;QAChE,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAA0B,KAAI;AACxE,YAAA,QACE,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;AACnD,iBAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC;AAEjE,QAAA,CAAC,CAAC;;QAGF,IAAI,gBAAgB,EAAE;AACpB,YAAA,gBAAgB,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK;AACvC,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;QACpC;IACF;AAEO,IAAA,uBAAuB,CAC5B,MAAiD,EAAA;QAEjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAA0B,KAAI;AACxE,YAAA,QACE,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;AACnD,iBAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC;AAEjE,QAAA,CAAC,CAAC;;QAGF,IAAI,gBAAgB,EAAE;AACpB,YAAA,gBAAgB,CAAC,iBAAiB,GAAG,MAAM,CAAC,KAAK;AACjD,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;QACpC;IACF;AAEO,IAAA,uBAAuB,CAC5B,MAA2C,EAAA;QAE3C,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAA0B,KAAI;AACxE,YAAA,QACE,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;AACnD,iBAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC;AAEjE,QAAA,CAAC,CAAC;;QAGF,IAAI,gBAAgB,EAAE;AACpB,YAAA,gBAAgB,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK;AAC3C,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;QACpC;IACF;AAEO,IAAA,mBAAmB,CAAC,KAI1B,EAAA;;AAEC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB;AAEA,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AAElC,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;AAGzB,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACnC,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;QAEtC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QAEvB,MAAM,cAAc,GAAG,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC;QACvD,MAAM,cAAc,GAAG,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC;AAEvD,QAAA,KAAK,CAAC,cAAc,EAAE,cAAc;AACjC,aAAA,IAAI,CACH,SAAS,CAAC,MAAK;YACb,OAAO,IAAI,CAAC,sBAAsB;AACpC,QAAA,CAAC,CAAC;AAEH,aAAA,SAAS,CAAC,CAAC,SAAc,KAAI;AAC5B,YAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;AACpC,QAAA,CAAC,CAAC;QAEJ,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC;QACnD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC;AAErD,QAAA,KAAK,CAAC,YAAY,EAAE,aAAa;AAC9B,aAAA,IAAI,CACH,SAAS,CAAC,MAAK;YACb,OAAO,IAAI,CAAC,sBAAsB;AACpC,QAAA,CAAC,CAAC;AAEH,aAAA,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3B,YAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;AACtC,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,kBAAkB,CAAC,KAAoB,EAAA;;AAE5C,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB;AAEA,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;IACpC;AAEO,IAAA,sBAAsB,CAAC,KAAY,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;QAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;AACpC,QAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,gBAAgB;QAC/C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,uBAAuB,EAAE,QAAQ,EAAE,MAAM,CAAC;QACxE,MAAM,IAAI,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC,IAAI;AAC/C,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;IACjC;AAEO,IAAA,kBAAkB,CAAC,KAAiB,EAAA;QACzC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS;AAC3C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,GAAG,MAAM;AAElD,QAAA,IAAI,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE;YACnC,KAAK,CAAC,eAAe,EAAE;YACvB;QACF;QAEA,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,uBAAuB,CAAC;QACjE,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,IAAI,WAAW,GAAG,GAAG,EAAE;YAC7C,KAAK,CAAC,eAAe,EAAE;YACvB;QACF;AAEA,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;IACxC;IAEO,kBAAkB,GAAA;AACvB,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;IAC5B;AAEO,IAAA,mBAAmB,CAAC,KAAiB,EAAA;AAC1C,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AAEnC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC,IAAI;AAChD,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;IACjC;AAEO,IAAA,qBAAqB,CAAC,KAAiB,EAAA;AAC5C,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS;AAC3C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,GAAG,MAAM;QAClD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,uBAAuB,EAAE,WAAW,EAAE,MAAM,CAAC;AAC3E,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AACnC,QAAA,IAAI,CAAC,uBAAuB,GAAG,SAAS;QAExC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IACpC;IAEO,UAAU,CAAC,KAAU,EAAE,YAA2B,EAAA;;AAEvD,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IACE,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa;AACpC,gBAAA,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EACjC;AACA,gBAAA,YAAY,CAAC,UAAU,GAAG,CAAC,YAAY,CAAC,UAAU;AAClD,gBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAClC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,QAAQ,CAAC;YAC3D;QACF;IACF;AAEO,IAAA,gBAAgB,CAAC,EAAU,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,OAAO,EAAE,KAAK,IAAI,CAAC,gBAAgB;QACrC;AACA,QAAA,OAAO,KAAK;IACd;AAEO,IAAA,YAAY,CAAC,KAAa,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC;IACnE;AAEO,IAAA,eAAe,CAAC,EAAU,EAAA;QAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAClD,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,CAC7B;QACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAErC,QAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;IAC3B;AAEO,IAAA,gBAAgB,CAAC,EAAU,EAAA;QAChC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI;QACvE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACxC;AAEO,IAAA,gBAAgB,CAAC,EAAU,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;IACvE;;AAGO,IAAA,WAAW,CAAC,KAAU,EAAA;QAC3B,KAAK,CAAC,cAAc,EAAE;IACxB;AAEO,IAAA,WAAW,CAAC,KAAU,EAAA;;;AAG3B,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;AACjC,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,gBAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,UAAU;AACpD,oBAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,UAAU;YAC9D;iBAAO;AACL,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC7B;QACF;IACF;AAEO,IAAA,YAAY,CAAC,KAAU,EAAA;;;AAG5B,QAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE;AACrC,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,gBAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,UAAU;AACxD,oBAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,UAAU;YAC1D;iBAAO;AACL,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC7B;QACF;IACF;IAEQ,8BAA8B,GAAA;QACpC,IACE,CAAC,IAAI,CAAC,aAAa;AACnB,YAAA,IAAI,CAAC,iBAAiB;AACtB,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EACjC;YACA,IAAI,iBAAiB,GAAG,CAAC;YACzB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU;YACzD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACrC,gBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,oBAAA,MAAM,aAAa,GAAG,UAAU,CAC9B,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,CACjD;AACD,oBAAA,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,WAAW;AACjD,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,aAAa,IAAI,WAAW,EAC5B,IAAI,CAAC,WAAW,CACjB;AACD,oBAAA,iBAAiB,GAAG,iBAAiB,GAAG,KAAK;AAC7C,oBAAA,IAAI,iBAAiB,GAAG,UAAU,EAAE;AAClC,wBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;wBACzB,UAAU,CAAC,MAAK;AACd,4BAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AACpC,wBAAA,CAAC,CAAC;oBACJ;gBACF;AACF,YAAA,CAAC,CAAC;QACJ;IACF;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACxB;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAClC,QAAA,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,SAAS,CAAC;IAC5D;IAEQ,mBAAmB,GAAA;AACzB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACzB;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAClC,QAAA,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,QAAQ,CAAC;IAC3D;AAEQ,IAAA,sBAAsB,CAAC,OAAuB,EAAA;AACpD,QAAA,QAAQ,OAAO,CAAC,IAAI;YAClB,KAAK,kBAAkB,CAAC,SAAS;gBAC/B,IAAI,CAAC,oBAAoB,EAAE;gBAC3B;YAEF,KAAK,kBAAkB,CAAC,QAAQ;gBAC9B,IAAI,CAAC,mBAAmB,EAAE;gBAC1B;YACF,KAAK,kBAAkB,CAAC,eAAe;;;gBAGrC,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE;oBAChD,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC/C,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAC1D;oBACD,IAAI,cAAc,EAAE;AAClB,wBAAA,cAAc,CAAC,OAAO,GAAG,KAAK;oBAChC;yBAAO;AACL,wBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACzB,4BAAA,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AACnC,4BAAA,OAAO,EAAE,KAAK;AACf,yBAAA,CAAC;AACF,wBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AACzC,4BAAA,YAAY,EAAE,IAAI;AAClB,4BAAA,YAAY,EAAE,KAAK;AACnB,4BAAA,iBAAiB,EAAE,IAAI;AACvB,4BAAA,WAAW,EAAE,KAAK;AAClB,4BAAA,mBAAmB,EAAE,IAAI;4BACzB,mBAAmB,EAAE,IAAI,CAAC,oBAAoB;AAC/C,yBAAA,CAAC;AAEF,wBAAA,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,uBAAuB,EAAE;4BACnD,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CACvB,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CACtD;AACF,yBAAA,CAAC;AAEF;;;;;AAKG;wBACH,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK;wBAE5C,UAAU,CAAC,MAAK;AACd,4BAAA,MAAM,eAAe,GAAG,IAAI,CAAC;AAC1B,iCAAA,OAAO;AACP,iCAAA,IAAI,CAAC,CAAC,KAAK,KAAI;AACd,gCAAA,QACE,KAAK,CAAC,aAAa,CAAC,EAAE;oCACtB,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AAEvD,4BAAA,CAAC,CAAC;4BACJ,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,eAAe,CAAC;4BAEhE,MAAM,UAAU,GACd,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,aAAa,CAC9C,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,GAAG,IAAI,CACzD;AAEH,4BAAA,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE;gCAC1B,cAAc,EAAE,sBAAsB,CAAC,QAAQ;AAC/C,gCAAA,QAAQ,EAAE,IAAI;AACd,gCAAA,SAAS,EAAE,OAAO;AAClB,gCAAA,iBAAiB,EAAE,KAAK;AACxB,gCAAA,mBAAmB,EAAE,MAAM;AAC3B,gCAAA,aAAa,EAAE,KAAK;AACrB,6BAAA,CAAC;4BAEF,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG;AACxD,gCAAA,OAAO,EAAE,OAAO;AAChB,gCAAA,OAAO,EAAE,OAAO;6BACjB;AACH,wBAAA,CAAC,CAAC;oBACJ;gBACF;gBACA;YACF,KAAK,kBAAkB,CAAC,cAAc;;;gBAGpC,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE;oBAC/C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAClD,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CACzD;oBAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;gBACvD;gBACA;;AAEJ,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IACpC;AAEQ,IAAA,YAAY,CAAC,YAAsB,EAAA;;AAEzC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,iBAAiB,GAAG,YAAY;;AAGrC,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IACpC;IAEQ,mBAAmB,CAAC,aAAa,GAAG,KAAK,EAAA;;;AAG/C,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE;;AAExC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC1B,qBAAA,MAAM,CAAC,CAAC,QAAQ,KAAI;AACnB,oBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC;AAC9D,gBAAA,CAAC;AACA,qBAAA,GAAG,CAAC,CAAC,QAAQ,KAAI;oBAChB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;AACnE,gBAAA,CAAC,CAAC;YACN;iBAAO,IAAI,aAAa,EAAE;AACxB,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;AACrD,oBAAA,OAAO,CAAC,MAAM,CAAC,MAAM;AACvB,gBAAA,CAAC,CAAC;YACJ;iBAAO;AACL,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO;YACtC;QACF;IACF;IAEQ,aAAa,GAAA;;QAEnB,IACE,IAAI,CAAC,IAAI;AACT,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;AACpB,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;YACf,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAClB;AACA,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,2BAA2B,EAAE;YACjD;iBAAO;gBACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACxE;QACF;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI;QACxB;IACF;IAEQ,2BAA2B,GAAA;AACjC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC5B,YAAA,IAAI,OAAO;AACX,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE;AACrE,gBAAA,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC;YAClE;iBAAO;AACL,gBAAA,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAC9C;YACA,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC;AAClD,QAAA,CAAC,CAAC;IACJ;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;AAC9D,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAC7D;AACA,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;QACpC;IACF;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CACxB,IAAI,CAAC,SAAS,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAC3D;IACH;IAEQ,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,eAAe,KAAI;YAC3D,OAAO,IAAI,kBAAkB,CAAC,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC;AAC1E,QAAA,CAAC,CAAC;IACJ;IAEQ,aAAa,GAAA;QACnB,IAAI,CAAC,uBAAuB,EAAE;;QAG9B,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,8BAA8B,EAAE;AACvC,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,mBAAmB,CACzB,WAAmB,EACnB,WAAmB,EACnB,MAAc,EAAA;QAEd,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC;;AAGtD,QAAA,IAAI,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE;YACnC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,WAAW;AAChD,YAAA,WAAW,GAAG,IAAI,CAAC,WAAW;QAChC;;;AAIA,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,EAAE;AACxB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,EAAE;;YAGhD,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC;AAChD,YAAA,IAAI,WAAW,GAAG,GAAG,EAAE;gBACrB,WAAW,GAAG,GAAG;AACjB,gBAAA,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB;YACtC;AACA,YAAA,MAAM,CAAC,KAAK,GAAG,WAAW;YAC1B,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,MAAM;YAC5C,IAAI,CAAC,cAAc,EAAE;QACvB;aAAO;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CACvB,IAAI,CAAC,eAAe,EACpB,OAAO,EACP,CAAA,EAAG,IAAI,CAAC,UAAU,GAAG,MAAM,CAAA,EAAA,CAAI,CAChC;AACD,YAAA,MAAM,CAAC,KAAK,GAAG,WAAW;QAC5B;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;IAC/D;IAEQ,gBAAgB,GAAA;;AAEtB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;;QAIzB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AAC5C,YAAA,MAAM,aAAa,GAAG,UAAU,CAC9B,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,CACjD;AACD,YAAA,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,WAAW;;YAEjD,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAChD,aAAa,IAAI,WAAW,EAC5B,IAAI,CAAC,WAAW,CACjB;AACH,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,MAAM,CAAC;QACtE;;AAGA,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,EAAE;YACxB,IAAI,CAAC,cAAc,EAAE;QACvB;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;IACrC;IAEQ,oBAAoB,CAC1B,UAAgC,EAChC,UAAgC,EAAA;;;AAIhC,QAAA,IAAI,UAAU,IAAI,UAAU,EAAE;AAC5B,YAAA,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;AAClC,gBAAA,IAAI,SAAS,CAAC,KAAK,EAAE;AACnB,oBAAA,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CACpC,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAC7C;AACD,oBAAA,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3C,wBAAA,cAAc,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK;oBACxC;gBACF;YACF;QACF;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IACpC;IAEQ,yBAAyB,GAAA;AAC/B,QAAA,MAAM,sBAAsB,GAAG,IAAI,KAAK,EAAiC;QACzE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YAC9B,sBAAsB,CAAC,IAAI,CAAC;gBAC1B,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;AACpB,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,sBAAsB;IAC/B;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,aAAa,GACjB,IAAI,CAAC,sBAAsB,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW;QACxD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AAC9C,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,GAAG,aAAa;YAChD,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACnD,YAAA,UAAU,CAAC,aAAa,CAAC,GAAG,GAAG,WAAW;YAC1C,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,eAAe,EAAE,WAAW,CAAC;AACrE,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,sBAAsB,CAAC,KAAU,EAAA;AACvC,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,MAAqB;QAC/C,IAAI,CAAC,uBAAuB,GAAG,WAAW,CAAC,YAAY,CAAC,eAAe,CAAC;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACvE,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,KAAK;IACtC;IAEQ,eAAe,GAAA;QACrB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,MAAK;AAC1C,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,CAAA,IAAA,CAAM,CAAC;AAChE,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACnC,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CACvB,IAAI,CAAC,eAAe,EACpB,OAAO,EACP,CAAA,EAAG,IAAI,CAAC,UAAU,CAAA,EAAA,CAAI,CACvB;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,oBAAoB,CAAC,KAAsB,EAAA;QACjD,OAAO,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAC1C,CAAC,KAAK,KACJ,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,KAAK,CAAC,QAAQ,EAAE,CACzE;IACH;AAEQ,IAAA,qBAAqB,CAAC,KAAsB,EAAA;QAClD,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C;AAEQ,IAAA,kBAAkB,CAAC,KAAa,EAAA;QACtC,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAClD,CAAC,EAAE,KAAK,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,KAAK,CACjE;QACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,CAAC,aAAa,CAC7D,kCAAkC,CACnC;AACD,QAAA,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;IAC/B;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;IACrE;IAEQ,YAAY,CAAC,IAAc,EAAE,SAAiB,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IAClD;AAEQ,IAAA,gBAAgB,CAAC,EAAU,EAAA;QACjC,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;;QAEpD,IAAI,iBAAiB,EAAE;AACrB,YAAA,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE;YACnC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC;AACpD,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACnC;IACF;AAEQ,IAAA,gBAAgB,CAAC,MAAiC,EAAA;AACxD,QAAA,MAAM,YAAY,GAAmC;AACnD,YAAA,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE;AACtC,YAAA,MAAM,EAAE,MAAM;SACf;AACD,QAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,YAAY,CAAC;IACpD;IAEQ,eAAe,GAAA;QACrB,OAAO,IAAI,CAAC;AACT,aAAA,MAAM,CAAC,CAAC,IAAI,KAAI;YACf,OAAO,IAAI,CAAC,UAAU;AACxB,QAAA,CAAC;AACA,aAAA,GAAG,CAAC,CAAC,IAAI,KAAI;AACZ,YAAA,IACE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,EACtE;gBACA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;YACzC;YACA,OAAO,IAAI,CAAC,EAAE;AAChB,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,oBAAoB,CAAC,KAAU,EAAA;AACrC,QAAA,MAAM,sBAAsB,GAAG;;;;;;;;;;;;cAYrB;QACV,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC;IACrD;AAEQ,IAAA,oBAAoB,CAAC,SAAiB,EAAA;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,UAAU;QAC3E,MAAM,UAAU,GACd,SAAS;YACT,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,IAAI;AAC/D,YAAA,YAAY;AACd,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACtE;IAEQ,eAAe,GAAA;AACrB,QAAA,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;AACnC,YAAA,IAAI,CAAC;AACF,iBAAA,SAAS,CAAC,IAAI,CAAC,WAAW;AAC1B,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CACR,CAAC,MAAuB,KAAI;;AAE1B,gBAAA,IAAI,MAAM,IAAI,MAAM,CAAC,iBAAiB,EAAE;;AAEtC,oBAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,KAC1D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAChD;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;gBACpC;AAEA,gBAAA,OAAO,EAAE;YACX,CAAC,EACD,MAAK;AACH,gBAAA,OAAO,EAAE;AACX,YAAA,CAAC,CACF;AACL,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,aAAa,CAAC,MAAuB,EAAA;AAC3C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB;QACF;AAEA,QAAA,IAAI,CAAC;AACF,aAAA,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM;AAClC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;aAClC,SAAS;;AAER,QAAA,MAAK,EAAE,CAAC,EACR,CAAC,GAAG,KAAI;AACN,YAAA,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC;AAC7C,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACnB,QAAA,CAAC,CACF;IACL;IAEQ,WAAW,GAAA;;AAEjB,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;;;YAGpE,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpC,IAAI,CAAC,uBAAuB,EAAE;YAChC;YAEA,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;QACpC;;QAGA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,CACpE;;QAGD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAA4B,KAAI;AAC7D,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAChC,CAAC,MAAuC,KAAI;AAC1C,gBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;YAClC,CAAC,CACF,CACF;AACD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,uBAAuB,CAAC,SAAS,CACpC,CAAC,MAA2C,KAAI;AAC9C,gBAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;YACtC,CAAC,CACF,CACF;AACD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAC1C,CAAC,MAAiD,KAAI;AACpD,gBAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;YACtC,CAAC,CACF,CACF;AACH,QAAA,CAAC,CAAC;IACJ;IAEQ,WAAW,CAAC,MAAa,EAAE,MAAa,EAAA;AAC9C,QAAA,QACE,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;AAC/B,YAAA,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;IAE3D;8GA1xCW,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,GAAA,EAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,SAAA,EAJhB,CAAC,qBAAqB,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,SAAA,EAwOjB,sBAAsB,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EASO,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,6BAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjU3D,y8PAyNA,EAAA,MAAA,EAAA,CAAA,ggRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,8FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,SAAA,EAAA,eAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,WAAA,EAAA,SAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,EAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,qBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,GAAA,CAAA,mBAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,aAAA,ED1IiB,CAAC,cAAc,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKpB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAT5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,aAAA,EAGL,CAAC,cAAc,CAAC,EAAA,SAAA,EACpB,CAAC,qBAAqB,CAAC,EAAA,eAAA,EACjB,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,y8PAAA,EAAA,MAAA,EAAA,CAAA,ggRAAA,CAAA,EAAA;;sBAQhB;;sBAoBA;;sBAUA;;sBAUA;;sBAMA;;sBAMA;;sBAOA;;sBAMA;;sBAOA;;sBAQA;;sBAOA;;sBAsCA;;sBAkBA;;sBAYA;;sBAMA;;sBAMA;;sBAUA;;sBAOA;;sBAMA;;sBAOA;;sBAMA;;sBAmBA,eAAe;uBAAC,sBAAsB;;sBAGtC,YAAY;uBAAC,SAAS;;sBAEtB,YAAY;uBAAC,cAAc;;sBAE3B,YAAY;uBAAC,iBAAiB;;sBAE9B,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,yBAAyB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;;sBAE1D,SAAS;uBAAC,eAAe;;sBAEzB,SAAS;uBAAC,WAAW;;sBAErB,SAAS;uBAAC,oBAAoB;;sBAE9B,SAAS;uBAAC,WAAW;;sBA6IrB,YAAY;uBAAC,eAAe;;;AEnc/B;;AAEG;MAsBU,aAAa,CAAA;8GAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,iBAnBtB,gBAAgB;YAChB,sBAAsB;AACtB,YAAA,oBAAoB,aAGpB,YAAY;YACZ,aAAa;YACb,WAAW;YACX,cAAc;YACd,iBAAiB;YACjB,uBAAuB;YACvB,mBAAmB;YACnB,aAAa;YACb,qBAAqB;YACrB,gBAAgB;YAChB,sBAAsB,CAAA,EAAA,OAAA,EAAA,CAEd,gBAAgB,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA;AAEvC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YAdtB,YAAY;YACZ,aAAa;YACb,WAAW;YACX,cAAc;YACd,iBAAiB;YACjB,uBAAuB;YACvB,mBAAmB;YACnB,aAAa;YACb,qBAAqB;YACrB,gBAAgB;YAChB,sBAAsB,CAAA,EAAA,CAAA,CAAA;;2FAIb,aAAa,EAAA,UAAA,EAAA,CAAA;kBArBzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,gBAAgB;wBAChB,sBAAsB;wBACtB,oBAAoB;AACrB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,aAAa;wBACb,WAAW;wBACX,cAAc;wBACd,iBAAiB;wBACjB,uBAAuB;wBACvB,mBAAmB;wBACnB,aAAa;wBACb,qBAAqB;wBACrB,gBAAgB;wBAChB,sBAAsB;AACvB,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;AACpD,iBAAA;;;AC1CD;;AAEG;;;;"}
1
+ {"version":3,"file":"skyux-grids.mjs","sources":["../../../../../libs/components/grids/src/lib/modules/grid/grid-column.model.ts","../../../../../libs/components/grids/src/lib/modules/shared/sky-grids-resources.module.ts","../../../../../libs/components/grids/src/lib/modules/grid/grid-cell.component.ts","../../../../../libs/components/grids/src/lib/modules/grid/grid-column.component.ts","../../../../../libs/components/grids/src/lib/modules/grid/grid-adapter.service.ts","../../../../../libs/components/grids/src/lib/modules/grid/types/grid-message-type.ts","../../../../../libs/components/grids/src/lib/modules/grid/types/grid-selected-rows-source.ts","../../../../../libs/components/grids/src/lib/modules/grid/grid.component.ts","../../../../../libs/components/grids/src/lib/modules/grid/grid.component.html","../../../../../libs/components/grids/src/lib/modules/grid/grid.module.ts","../../../../../libs/components/grids/src/skyux-grids.ts"],"sourcesContent":["import { TemplateRef } from '@angular/core';\n\nimport { SkyGridColumnAlignment } from './types/grid-column-alignment';\n\n/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridColumnModel {\n public template: TemplateRef<unknown>;\n public id: string;\n public field: string;\n public heading: string;\n public inlineHelpPopover: any;\n public type: string;\n public width: number;\n public hidden: boolean;\n public locked: boolean;\n public description: string;\n public isSortable = true;\n public excludeFromHighlighting: boolean;\n\n /**\n * The horizontal alignment of the column's data and header.\n */\n public alignment: SkyGridColumnAlignment;\n\n public searchFunction: (data: any, searchText: string) => boolean;\n\n constructor(template: TemplateRef<unknown>, data?: any) {\n this.template = template;\n\n if (data) {\n this.id = data.id || data.field;\n this.type = data.type;\n this.field = data.field;\n this.heading = data.heading;\n this.inlineHelpPopover = data.inlineHelpPopover;\n this.width = data.width ? Number(data.width) : undefined;\n this.hidden = data.hidden;\n this.locked = data.locked;\n this.description = data.description;\n this.searchFunction = data.searchFunction;\n this.isSortable = data.isSortable;\n this.excludeFromHighlighting = data.excludeFromHighlighting;\n this.alignment = data.alignment;\n }\n }\n}\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-grids' 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': { skyux_grid_multiselect_select_row: { message: 'Select row' } },\n 'FR-CA': {\n skyux_grid_multiselect_select_row: { message: 'Sélectionner une ligne' },\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 SkyGridsResourcesModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { ListItemModel, getData } from '@skyux/list-builder-common';\n\n/**\n * @internal\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\n@Component({\n selector: 'sky-grid-cell',\n template: '<ng-template #cell />',\n styleUrls: ['./grid-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyGridCellComponent implements OnInit {\n @Input()\n public item: ListItemModel;\n\n @Input()\n public columnId: string;\n\n @Input()\n public template: TemplateRef<unknown>;\n\n @Input()\n public fieldSelector: string;\n\n @ViewChild('cell', {\n read: ViewContainerRef,\n static: true,\n })\n private container: ViewContainerRef;\n\n public ngOnInit(): void {\n this.container.createEmbeddedView(this.template, this);\n }\n\n public get row(): any {\n return this.item.data;\n }\n\n public get value(): any {\n if (this.item.data && (this.fieldSelector || this.columnId)) {\n return getData(this.item.data, this.fieldSelector || this.columnId);\n }\n\n return undefined;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n EventEmitter,\n Input,\n OnChanges,\n QueryList,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\n\nimport { SkyGridColumnAlignment } from './types/grid-column-alignment';\nimport { SkyGridColumnDescriptionModelChange } from './types/grid-column-description-model-change';\nimport { SkyGridColumnHeadingModelChange } from './types/grid-column-heading-model-change';\nimport { SkyGridColumnInlineHelpPopoverModelChange } from './types/grid-column-inline-help-popover-model-change';\n\n/**\n * Specifies the column information.\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\n@Component({\n selector: 'sky-grid-column',\n template: '<ng-content />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyGridColumnComponent implements OnChanges {\n /**\n * The horizontal alignment of the column's data and header.\n * Options include: `\"left\"`, `\"center\"`, and `\"right\"`.\n * @default \"left\"\n */\n @Input()\n public alignment: SkyGridColumnAlignment = 'left';\n\n /**\n * The description for the column.\n */\n @Input()\n public description: string;\n\n /**\n * Whether to disable the highlighting of search text in the column.\n * @default false\n */\n @Input()\n public excludeFromHighlighting: boolean;\n\n /**\n * The property to retrieve cell information from an entry on the grid `data` array.\n * You must provide either the `id` or `field` property for every column,\n * but do not provide both. If `id` does not exist on a column, then `field` is the entry\n * for the grid `selectedColumnIds` array.\n */\n @Input()\n public field: string;\n\n /**\n * Text to display in the column header.\n */\n @Input()\n public heading: string;\n\n /**\n * Whether the column is initially hidden when grid `selectedColumnIds` are not provided.\n * @default false\n */\n @Input()\n public hidden: boolean;\n\n /**\n * The unique ID for the column. You must provide either the `id` or `field` property\n * for every column, but do not provide both. If `field` does not exist on a column,\n * then the `id` property retrieves cell information from an entry on the grid `data` array.\n */\n @Input()\n public id: string;\n\n /**\n * The template to display inside an inline help popup for this column.\n */\n @Input()\n public inlineHelpPopover: any;\n\n /**\n * Whether the column sorts the grid when users click the column header.\n * @default true\n */\n @Input()\n public isSortable = true;\n\n /**\n * Whether the column is locked. The intent is to display locked columns first\n * on the left side of the grid. If set to `true`, then users cannot drag the column\n * to another position and or drag other columns before the locked column.\n * @default false\n */\n @Input()\n public locked: boolean;\n\n /**\n * The search function to apply for the specific column. By default,\n * the column executes a string compare on the column data.\n * @default (value, searchText) => value.toString().toLowerCase().indexOf(searchText) !== -1\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('search')\n public searchFunction: (value: any, searchText: string) => boolean =\n this.search;\n\n /**\n * @internal\n */\n @Input()\n public type: string;\n\n /**\n * The template for a column. This can be assigned as a reference\n * to the `template` attribute, or it can be assigned as a child of the `template` element\n * inside the `sky-grid-column` component. The template has access to the `value` variable,\n * which contains the value passed to the column, and the `row` variable, which contains\n * the entire row data.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('template')\n public templateInput: TemplateRef<unknown>;\n\n /**\n * The width of the column in pixels.\n * If undefined, the column width is evenly distributed.\n */\n @Input()\n public width: number;\n\n public descriptionChanges: EventEmitter<string> = new EventEmitter<string>();\n\n public descriptionModelChanges =\n new EventEmitter<SkyGridColumnDescriptionModelChange>();\n\n public headingChanges: EventEmitter<string> = new EventEmitter<string>();\n\n public headingModelChanges =\n new EventEmitter<SkyGridColumnHeadingModelChange>();\n\n public inlineHelpPopoverModelChanges =\n new EventEmitter<SkyGridColumnInlineHelpPopoverModelChange>();\n\n @ContentChildren(TemplateRef)\n private templates: QueryList<TemplateRef<unknown>>;\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['heading'] && changes['heading'].firstChange === false) {\n this.headingChanges.emit(this.heading);\n this.headingModelChanges.emit({\n value: this.heading,\n id: this.id,\n field: this.field,\n });\n }\n if (\n changes['description'] &&\n changes['description'].firstChange === false\n ) {\n this.descriptionChanges.emit(this.description);\n this.descriptionModelChanges.emit({\n value: this.description,\n id: this.id,\n field: this.field,\n });\n }\n if (\n changes['inlineHelpPopover'] &&\n changes['inlineHelpPopover'].firstChange === false\n ) {\n this.inlineHelpPopoverModelChanges.emit({\n value: this.inlineHelpPopover,\n id: this.id,\n field: this.field,\n });\n }\n }\n\n public get template(): TemplateRef<unknown> {\n if (this.templates.length > 0) {\n return this.templates.first;\n }\n\n return this.templateInput;\n }\n\n private search(value: any, searchText: string): boolean {\n if (value !== undefined && value !== null) {\n return value.toString().toLowerCase().indexOf(searchText) !== -1;\n }\n\n return false;\n }\n}\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport {\n ElementRef,\n Injectable,\n Renderer2,\n RendererFactory2,\n} from '@angular/core';\n\nimport { SkyGridColumnModel } from './grid-column.model';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyGridAdapterService {\n private renderer: Renderer2;\n\n constructor(private rendererFactory: RendererFactory2) {\n this.renderer = this.rendererFactory.createRenderer(undefined, undefined);\n }\n\n /**\n * Determines whether a column can be dropped at the given position.\n * Columns cannot be dropped to the left of locked columns.\n */\n public canDrop(\n displayedColumns: SkyGridColumnModel[],\n currentIndex: number,\n targetIndex: number,\n ): boolean {\n if (displayedColumns[currentIndex]?.locked) {\n return false;\n }\n\n // Cannot drop to the left of a locked column.\n if (targetIndex < currentIndex) {\n for (let i = targetIndex; i < currentIndex; i++) {\n if (displayedColumns[i]?.locked) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * Handles the CDK drop event and returns the updated column IDs.\n */\n public onColumnDrop(\n event: CdkDragDrop<SkyGridColumnModel[]>,\n displayedColumns: SkyGridColumnModel[],\n ): string[] | undefined {\n if (event.previousIndex === event.currentIndex) {\n return undefined;\n }\n\n if (\n !this.canDrop(displayedColumns, event.previousIndex, event.currentIndex)\n ) {\n return undefined;\n }\n\n const columnIds = displayedColumns.map((col) => col.id);\n moveItemInArray(columnIds, event.previousIndex, event.currentIndex);\n\n return columnIds;\n }\n\n public getRowHeight(el: ElementRef, index: number): string {\n return (\n el.nativeElement.querySelectorAll('tbody tr')[index].scrollHeight + 'px'\n );\n }\n\n public setStyle(el: ElementRef, style: string, value: string): void {\n if (el) {\n this.renderer.setStyle(el.nativeElement, style, value);\n }\n }\n}\n","/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport enum SkyGridMessageType {\n /**\n * Selects the multiselect checkboxes for all rows in the grid.\n */\n SelectAll = 0,\n\n /**\n * Clears the multiselect checkboxes for all rows in the grid.\n */\n ClearAll = 1,\n\n /**\n * @internal\n */\n PromptDeleteRow = 2,\n\n /**\n * @internal\n */\n AbortDeleteRow = 3,\n}\n","/**\n * @internal\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport enum SkyGridSelectedRowsSource {\n CheckboxChange,\n ClearAll,\n RowClick,\n SelectAll,\n SelectedRowIdsChange,\n}\n","import { CdkDragDrop } from '@angular/cdk/drag-drop';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EnvironmentInjector,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n inject,\n} from '@angular/core';\nimport {\n SkyAffixAutoFitContext,\n SkyAffixService,\n SkyAppWindowRef,\n SkyLogService,\n SkyOverlayService,\n SkyUIConfigService,\n} from '@skyux/core';\nimport {\n ListItemModel,\n ListSortFieldSelectorModel,\n} from '@skyux/list-builder-common';\n\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n Subscription,\n fromEvent,\n merge,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n map,\n take,\n takeUntil,\n takeWhile,\n} from 'rxjs/operators';\n\nimport { SkyGridAdapterService } from './grid-adapter.service';\nimport { SkyGridColumnComponent } from './grid-column.component';\nimport { SkyGridColumnModel } from './grid-column.model';\nimport { SkyGridColumnDescriptionModelChange } from './types/grid-column-description-model-change';\nimport { SkyGridColumnHeadingModelChange } from './types/grid-column-heading-model-change';\nimport { SkyGridColumnInlineHelpPopoverModelChange } from './types/grid-column-inline-help-popover-model-change';\nimport { SkyGridColumnWidthModelChange } from './types/grid-column-width-model-change';\nimport { SkyGridMessage } from './types/grid-message';\nimport { SkyGridMessageType } from './types/grid-message-type';\nimport { SkyGridRowDeleteCancelArgs } from './types/grid-row-delete-cancel-args';\nimport { SkyGridRowDeleteConfig } from './types/grid-row-delete-config';\nimport { SkyGridRowDeleteConfirmArgs } from './types/grid-row-delete-confirm-args';\nimport { SkyGridRowDeleteContents } from './types/grid-row-delete-contents';\nimport { SkyGridSelectedRowsModelChange } from './types/grid-selected-rows-model-change';\nimport { SkyGridSelectedRowsSource } from './types/grid-selected-rows-source';\nimport { SkyGridUIConfig } from './types/grid-ui-config';\n\nlet nextId = 0;\n\n/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\n@Component({\n selector: 'sky-grid',\n templateUrl: './grid.component.html',\n styleUrls: ['./grid.component.scss'],\n providers: [SkyGridAdapterService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyGridComponent\n implements OnInit, AfterContentInit, AfterViewInit, OnChanges, OnDestroy\n{\n /**\n * Columns and column properties for the grid.\n */\n @Input()\n public set columns(newColumns: SkyGridColumnModel[]) {\n const oldColumns = this.columns;\n this._columns = newColumns;\n if (oldColumns) {\n this.transferColumnWidths(oldColumns, this.columns);\n this.isResized = false;\n this.setDisplayedColumns(true);\n }\n this.changeDetector.markForCheck();\n }\n\n public get columns(): SkyGridColumnModel[] {\n return this._columns;\n }\n\n /**\n * The data for the grid. Each item requires an `id` and a property that maps\n * to the `field` or `id` property of each column in the grid.\n */\n @Input()\n public data: any[];\n\n /**\n * Whether to enable the multiselect feature to display a column of\n * checkboxes on the left side of the grid. You can specify a unique ID with\n * the `multiselectRowId` property, but multiselect defaults to the `id` property on\n * the `data` object.\n * @default false\n */\n @Input()\n public enableMultiselect = false;\n\n /**\n * How the grid fits to its parent. The valid options are `width`,\n * which fits the grid to the parent's full width, and `scroll`, which allows the grid\n * to exceed the parent's width. If the grid does not have enough columns to fill\n * the parent's width, it always stretches to the parent's full width.\n * @default \"width\"\n */\n @Input()\n public fit = 'width';\n\n /**\n * Whether to display a toolbar with the grid.\n */\n @Input()\n public hasToolbar = false;\n\n /**\n * The height of the grid.\n */\n @Input()\n public height: number;\n\n /**\n * Text to highlight within the grid.\n * Typically, this property is used in conjunction with search.\n */\n @Input()\n public highlightText: string;\n\n /**\n * The observable to send commands to the grid.\n */\n @Input()\n public messageStream = new Subject<SkyGridMessage>();\n\n /**\n * The unique ID that matches a property on the `data` object.\n * By default, this property uses the `id` property.\n */\n @Input()\n public multiselectRowId: string;\n\n /**\n * The ID of the row to highlight. The ID matches the `id` property\n * of the `data` object. Typically, this property is used in conjunction with\n * the flyout component to indicate the currently selected row.\n */\n @Input()\n public rowHighlightedId: string;\n\n /**\n * The columns to display in the grid based on the `id` or `field` properties\n * of the columns. If no columns are specified, then the grid displays all columns.\n */\n @Input()\n public set selectedColumnIds(value: string[]) {\n const currentIds = this._selectedColumnIds;\n this._selectedColumnIds = value;\n\n if (this.columns) {\n this.setDisplayedColumns();\n }\n\n // Ensure that the ids have changed.\n if (!currentIds || !value || !this.arraysEqual(value, currentIds)) {\n // This variable ensures that we do not set user config options or fire the change event\n // on the first time that the columns are set up\n if (this.selectedColumnIdsSet) {\n this.setUserConfig({\n selectedColumnIds: value,\n });\n\n this.selectedColumnIdsChange.emit(this._selectedColumnIds);\n\n if (this.isResized) {\n this.resetTableWidth();\n }\n }\n }\n\n this.selectedColumnIdsSet = true;\n }\n\n public get selectedColumnIds(): string[] {\n return this._selectedColumnIds;\n }\n\n /**\n * The set of IDs for the rows to select in a multiselect grid.\n * The IDs match the `id` properties of the `data` objects.\n * Rows with IDs that are not included are de-selected in the grid.\n */\n @Input()\n public set selectedRowIds(value: string[]) {\n if (value) {\n this._selectedRowIds = value;\n this.applySelectedRows();\n this.emitSelectedRows(SkyGridSelectedRowsSource.SelectedRowIdsChange);\n }\n }\n\n public get selectedRowIds(): string[] {\n return this._selectedRowIds;\n }\n\n /**\n * The unique key for the UI Config Service to retrieve stored settings from a database.\n * The UI Config Service saves configuration settings for users and returns\n * `selectedColumnIds` to preserve the columns to display and the preferred column order. You must provide `id` values for your `sky-grid-column` elements because the UI Config Service depends on those values to organize columns based on user settings. For more information about the UI Config Service, see [the sticky settings documentation](https://developer.blackbaud.com/skyux/learn/develop/sticky-settings).\n */\n @Input()\n public settingsKey: string;\n\n /**\n * Displays a caret in the column that was used to sort the grid. This is particularly useful\n * when you programmatically sort data and want to visually indicate how the grid was sorted.\n * This property accepts a `ListSortFieldSelectorModel` value with the following properties:\n * - `fieldSelector` Represents the current sort field. This property accepts `string` values.\n * - `descending` Indicates whether to sort in descending order. The caret that visually\n * indicates the sort order points down for descending order and up for ascending order.\n * This property accepts `boolean` values. Default is `false`.\n */\n @Input()\n public sortField: ListSortFieldSelectorModel;\n\n /**\n * The width of the grid in pixels.\n */\n @Input()\n public width: number;\n\n /**\n * Fires when the width of a column changes.\n */\n @Output()\n public columnWidthChange = new EventEmitter<\n SkyGridColumnWidthModelChange[]\n >();\n\n /**\n * Fires when the selection of multiselect checkboxes changes.\n * Emits an array of IDs for the selected rows based on the `multiselectRowId` property\n * that the consumer provides.\n */\n @Output()\n public multiselectSelectionChange =\n new EventEmitter<SkyGridSelectedRowsModelChange>();\n\n /**\n * @internal\n */\n @Output()\n public rowDeleteCancel = new EventEmitter<SkyGridRowDeleteCancelArgs>();\n\n /**\n * @internal\n */\n @Output()\n public rowDeleteConfirm = new EventEmitter<SkyGridRowDeleteConfirmArgs>();\n\n /**\n * Fires when the columns to display in the grid change or when the order of the columns changes.\n * The event emits an array of IDs for the displayed columns that reflects the column order.\n */\n @Output()\n public selectedColumnIdsChange = new EventEmitter<string[]>();\n\n /**\n * Fires when the active sort field changes.\n */\n @Output()\n public sortFieldChange = new EventEmitter<ListSortFieldSelectorModel>();\n\n public columnResizeStep = 10;\n public currentSortField: BehaviorSubject<ListSortFieldSelectorModel>;\n public displayedColumns: SkyGridColumnModel[];\n public gridId: number = ++nextId;\n public rowDeleteConfigs: SkyGridRowDeleteConfig[] = [];\n public items: any[];\n public maxColWidth = 9999; // This is an arbitrary number, as the input range picker won't work without a value.\n public minColWidth = 50;\n public showResizeBar = false;\n public showTopScroll = false;\n\n public get tableWidth(): any {\n return this.tableElementRef.nativeElement.offsetWidth;\n }\n\n @ContentChildren(SkyGridColumnComponent)\n private columnComponents: QueryList<SkyGridColumnComponent>;\n\n @ViewChildren('gridCol')\n private columnElementRefs: QueryList<ElementRef>;\n @ViewChildren('colSizeRange')\n private columnRangeInputElementRefs: QueryList<ElementRef>;\n @ViewChildren('inlineDeleteRef')\n private inlineDeleteRefs: QueryList<ElementRef>;\n @ViewChild('inlineDeleteTemplateRef', { read: TemplateRef })\n private inlineDeleteTemplateRef: TemplateRef<unknown>;\n @ViewChild('gridContainer')\n private tableContainerElementRef: ElementRef;\n @ViewChild('gridTable')\n private tableElementRef: ElementRef;\n @ViewChild('topScrollContainer')\n private topScrollContainerElementRef: ElementRef;\n @ViewChild('resizeBar')\n private resizeBar: ElementRef;\n\n private activeResizeColumnIndex: string;\n private isDraggingResizeHandle = false;\n private isResized = false;\n private ngUnsubscribe = new Subject<void>();\n private rowDeleteContents: Record<string, SkyGridRowDeleteContents> = {};\n private startColumnWidth: number;\n private subscriptions: Subscription[] = [];\n private scrollTriggered = false;\n private selectedColumnIdsSet = false;\n private xPosStart: number;\n\n private _columns: SkyGridColumnModel[];\n private _selectedColumnIds: string[];\n private _selectedRowIds: string[];\n\n readonly #environmentInjector = inject(EnvironmentInjector);\n\n constructor(\n private affixService: SkyAffixService,\n private changeDetector: ChangeDetectorRef,\n private gridAdapter: SkyGridAdapterService,\n private overlayService: SkyOverlayService,\n private skyWindow: SkyAppWindowRef,\n private uiConfigService: SkyUIConfigService,\n logger: SkyLogService,\n ) {\n logger.deprecated('SkyGridComponent', {\n deprecationMajorVersion: 6,\n moreInfoUrl: 'https://developer.blackbaud.com/skyux/components/data-grid',\n replacementRecommendation: 'Use data grid instead.',\n });\n\n this.displayedColumns = new Array<SkyGridColumnModel>();\n this.items = new Array<any>();\n this.currentSortField = new BehaviorSubject<ListSortFieldSelectorModel>({\n fieldSelector: '',\n descending: false,\n });\n }\n\n public ngOnInit(): void {\n this.messageStream\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((message: SkyGridMessage) => {\n this.handleIncomingMessages(message);\n });\n }\n\n public ngAfterContentInit(): void {\n if (this.settingsKey) {\n this.applyUserConfig().then(() => {\n this.initColumns();\n });\n } else {\n this.initColumns();\n }\n\n this.applySelectedRows();\n }\n\n public ngAfterViewInit(): void {\n this.checkUserColumnWidthsForScroll();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['columns'] && this.columns) {\n if (this.selectedColumnIds) {\n this.selectedColumnIds = this.selectedColumnIds.filter((columnId) => {\n return this.columns.find((column) => column.id === columnId);\n });\n }\n this.setDisplayedColumns(true);\n }\n\n if (changes['data'] && this.data) {\n this.transformData();\n\n // This set timeout is necessary to ensure the data has rendered in the grid\n setTimeout(() => {\n // This cleans up any lingering row deletes for items that have been removed.\n Object.keys(this.rowDeleteContents).forEach((id) => {\n if (!this.data.find((item) => item.id === id)) {\n this.destroyRowDelete(id);\n } else {\n // The rows re-render thus messing up the affixers. We must reaffix them so that things\n // continue to render correctly.\n const rowElement: HTMLElement =\n this.tableElementRef.nativeElement.querySelector(\n '[sky-cmp-id=\"' + id + '\"]',\n );\n\n this.rowDeleteContents[id].affixer.affixTo(rowElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n isSticky: true,\n placement: 'above',\n verticalAlignment: 'top',\n horizontalAlignment: 'left',\n enableAutoFit: false,\n });\n }\n });\n\n this.checkUserColumnWidthsForScroll();\n });\n }\n\n if (changes['sortField']) {\n this.setSortHeaders();\n }\n }\n\n public ngOnDestroy(): void {\n this.subscriptions.forEach((subscription: Subscription) => {\n subscription.unsubscribe();\n });\n this.multiselectSelectionChange.complete();\n\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n\n Object.keys(this.rowDeleteContents).forEach((id) => {\n this.destroyRowDelete(id);\n });\n }\n\n @HostListener('window:resize')\n public onWindowResize(): void {\n this.checkUserColumnWidthsForScroll();\n }\n\n public getTopScrollWidth(): string {\n return this.tableElementRef.nativeElement.scrollWidth;\n }\n\n public getTableClassNames(): string {\n const classNames: string[] = [];\n\n if (this.fit !== 'scroll') {\n classNames.push('sky-grid-fit');\n }\n\n if (this.hasToolbar) {\n classNames.push('sky-grid-has-toolbar');\n }\n\n return this.addDelimiter(classNames, ' ');\n }\n\n public getTableHeaderClassNames(column: SkyGridColumnModel): string {\n const classNames: string[] = [];\n\n if (column && column.locked) {\n classNames.push('sky-grid-header-locked');\n }\n\n return this.addDelimiter(classNames, ' ');\n }\n\n public getCaretIconNames(column: SkyGridColumnModel): string {\n const iconNames: string[] = [];\n\n this.getSortDirection(column.field).subscribe((sortDir) => {\n if (sortDir === 'asc') {\n iconNames.push('chevron-up');\n }\n if (sortDir === 'desc') {\n iconNames.push('chevron-down');\n }\n });\n\n return this.addDelimiter(iconNames, ' ');\n }\n\n public onKeydown(event: KeyboardEvent, column: SkyGridColumnModel): void {\n const key = event.key.toLowerCase();\n if (key === 'enter' || key === ' ') {\n this.sortByColumn(column);\n }\n }\n\n public sortByColumn(column: SkyGridColumnModel): void {\n if (!this.isDraggingResizeHandle && column.isSortable) {\n this.currentSortField\n .pipe(\n take(1),\n map((field) => {\n let selector = {\n fieldSelector: column.field,\n descending: true,\n };\n\n if (\n field &&\n field.fieldSelector === column.field &&\n field.descending\n ) {\n selector = {\n fieldSelector: column.field,\n descending: false,\n };\n }\n this.sortFieldChange.emit(selector);\n this.currentSortField.next(selector);\n }),\n )\n .subscribe();\n }\n }\n\n public getSortDirection(columnField: string): Observable<string> {\n return this.currentSortField.pipe(\n distinctUntilChanged(),\n map((field) => {\n return field.fieldSelector === columnField\n ? field.descending\n ? 'desc'\n : 'asc'\n : undefined;\n }),\n );\n }\n\n public getAriaSortDirection(column: SkyGridColumnModel): Observable<string> {\n return this.currentSortField.pipe(\n distinctUntilChanged(),\n map((field) => {\n return field.fieldSelector === column.field\n ? field.descending\n ? 'descending'\n : 'ascending'\n : column.isSortable\n ? 'none'\n : undefined;\n }),\n );\n }\n\n public getCaretVisibility(columnField: string): Observable<string> {\n return this.currentSortField.pipe(\n distinctUntilChanged(),\n map((field) => {\n return field.fieldSelector === columnField ? 'visible' : 'hidden';\n }),\n );\n }\n\n public getHelpInlineClass(columnField: string): Observable<boolean> {\n return this.getCaretVisibility(columnField).pipe(\n map((visibility: string) => {\n return visibility === 'hidden';\n }),\n );\n }\n\n public onMultiselectCheckboxChange(): void {\n this.emitSelectedRows(SkyGridSelectedRowsSource.CheckboxChange);\n }\n\n public updateColumnHeading(change: SkyGridColumnHeadingModelChange): void {\n const foundColumnModel = this.columns.find((column: SkyGridColumnModel) => {\n return (\n (change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field)\n );\n });\n\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.heading = change.value;\n this.changeDetector.markForCheck();\n }\n }\n\n public updateInlineHelpPopover(\n change: SkyGridColumnInlineHelpPopoverModelChange,\n ): void {\n const foundColumnModel = this.columns.find((column: SkyGridColumnModel) => {\n return (\n (change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field)\n );\n });\n\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.inlineHelpPopover = change.value;\n this.changeDetector.markForCheck();\n }\n }\n\n public updateColumnDescription(\n change: SkyGridColumnDescriptionModelChange,\n ): void {\n const foundColumnModel = this.columns.find((column: SkyGridColumnModel) => {\n return (\n (change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field)\n );\n });\n\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.description = change.value;\n this.changeDetector.markForCheck();\n }\n }\n\n public onResizeColumnStart(event: {\n stopPropagation: () => void;\n preventDefault: () => void;\n pageX?: number;\n }): void {\n // If this table hasn't been resized, initialize all the resize widths.\n if (!this.isResized) {\n this.initColumnWidths();\n this.isResized = true;\n }\n\n this.initializeResizeColumn(event);\n\n this.isDraggingResizeHandle = true;\n this.xPosStart = event.pageX;\n this.showResizeBar = true;\n\n // Show visual indicator of where mouse is dragging (resizeBar).\n this.changeDetector.detectChanges();\n this.setResizeBarPosition(event.pageX);\n\n event.preventDefault();\n event.stopPropagation();\n\n const mouseMoveEvent = fromEvent(document, 'mousemove');\n const touchMoveEvent = fromEvent(document, 'touchmove');\n\n merge(mouseMoveEvent, touchMoveEvent)\n .pipe(\n takeWhile(() => {\n return this.isDraggingResizeHandle;\n }),\n )\n .subscribe((moveEvent: any) => {\n this.onResizeHandleMove(moveEvent);\n });\n\n const mouseUpEvent = fromEvent(document, 'mouseup');\n const touchEndEvent = fromEvent(document, 'touchend');\n\n merge(mouseUpEvent, touchEndEvent)\n .pipe(\n takeWhile(() => {\n return this.isDraggingResizeHandle;\n }),\n )\n .subscribe((endEvent: any) => {\n this.onResizeHandleRelease(endEvent);\n });\n }\n\n public onKeydownResizeCol(event: KeyboardEvent): void {\n // If this table hasn't been resized, initialize all the resize widths.\n if (!this.isResized) {\n this.initColumnWidths();\n this.isResized = true;\n }\n\n this.initializeResizeColumn(event);\n }\n\n public onInputChangeResizeCol(event: Event): void {\n const input = event.target as HTMLInputElement;\n const newValue = Number(input.value);\n const deltaX = newValue - this.startColumnWidth;\n this.resizeColumnByIndex(this.activeResizeColumnIndex, newValue, deltaX);\n const left = input.getBoundingClientRect().left;\n this.setResizeBarPosition(left);\n }\n\n public onResizeHandleMove(event: MouseEvent): void {\n const deltaX = event.pageX - this.xPosStart;\n const newColWidth = this.startColumnWidth + deltaX;\n\n if (newColWidth <= this.minColWidth) {\n event.stopPropagation();\n return;\n }\n\n const max = this.getMaxRangeByIndex(this.activeResizeColumnIndex);\n if (this.fit === 'width' && newColWidth > max) {\n event.stopPropagation();\n return;\n }\n\n this.setResizeBarPosition(event.pageX);\n }\n\n public onResizeHandleBlur(): void {\n this.showResizeBar = false;\n }\n\n public onResizeHandleFocus(event: FocusEvent): void {\n this.showResizeBar = true;\n this.changeDetector.detectChanges();\n\n const target = event.target as HTMLElement;\n const left = target.getBoundingClientRect().left;\n this.setResizeBarPosition(left);\n }\n\n public onResizeHandleRelease(event: MouseEvent): void {\n this.showResizeBar = false;\n const deltaX = event.pageX - this.xPosStart;\n const newColWidth = this.startColumnWidth + deltaX;\n this.resizeColumnByIndex(this.activeResizeColumnIndex, newColWidth, deltaX);\n this.isDraggingResizeHandle = false;\n this.activeResizeColumnIndex = undefined;\n\n event.stopPropagation();\n this.changeDetector.markForCheck();\n }\n\n public onRowClick(event: any, selectedItem: ListItemModel): void {\n /* istanbul ignore else */\n if (this.enableMultiselect) {\n if (\n event.target === event.currentTarget ||\n !this.isInteractiveElement(event)\n ) {\n selectedItem.isSelected = !selectedItem.isSelected;\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.RowClick);\n }\n }\n }\n\n public isRowHighlighted(id: string): boolean {\n if (this.rowHighlightedId) {\n return id === this.rowHighlightedId;\n }\n return false;\n }\n\n public getRowHeight(index: number): string {\n return this.gridAdapter.getRowHeight(this.tableElementRef, index);\n }\n\n public cancelRowDelete(id: string): void {\n this.rowDeleteConfigs = this.rowDeleteConfigs.filter(\n (config) => config.id !== id,\n );\n this.rowDeleteCancel.emit({ id: id });\n\n this.destroyRowDelete(id);\n }\n\n public confirmRowDelete(id: string): void {\n this.rowDeleteConfigs.find((config) => config.id === id).pending = true;\n this.rowDeleteConfirm.emit({ id: id });\n }\n\n public getRowDeleteItem(id: string): SkyGridRowDeleteConfig {\n return this.rowDeleteConfigs.find((rowDelete) => rowDelete.id === id);\n }\n\n /**\n * Handles the CDK drag-and-drop event when a column header is dropped.\n */\n protected onColumnDropped(event: CdkDragDrop<SkyGridColumnModel[]>): void {\n const newColumnIds = this.gridAdapter.onColumnDrop(\n event,\n this.displayedColumns,\n );\n\n if (newColumnIds) {\n this.onHeaderDrop(newColumnIds);\n }\n }\n\n // Prevent touch devices from inadvertently scrolling grid while dragging columns.\n public onTouchMove(event: any): void {\n event.preventDefault();\n }\n\n public onTopScroll(event: any): void {\n /* sanity check */\n /* istanbul ignore else */\n if (this.tableContainerElementRef) {\n if (this.scrollTriggered) {\n this.scrollTriggered = false;\n this.tableContainerElementRef.nativeElement.scrollLeft =\n this.topScrollContainerElementRef.nativeElement.scrollLeft;\n } else {\n this.scrollTriggered = true;\n }\n }\n }\n\n public onGridScroll(event: any): void {\n /* sanity check */\n /* istanbul ignore else */\n if (this.topScrollContainerElementRef) {\n if (this.scrollTriggered) {\n this.scrollTriggered = false;\n this.topScrollContainerElementRef.nativeElement.scrollLeft =\n this.tableContainerElementRef.nativeElement.scrollLeft;\n } else {\n this.scrollTriggered = true;\n }\n }\n }\n\n private checkUserColumnWidthsForScroll(): void {\n if (\n !this.showTopScroll &&\n this.columnElementRefs &&\n this.columnElementRefs.length > 0\n ) {\n let columnsWidthTotal = 0;\n const windowSize = this.skyWindow.nativeWindow.innerWidth;\n this.columnElementRefs.forEach((col) => {\n if (!this.showTopScroll) {\n const computedWidth = parseFloat(\n window.getComputedStyle(col.nativeElement).width,\n );\n const offsetWidth = col.nativeElement.offsetWidth;\n const width = Math.max(\n computedWidth || offsetWidth,\n this.minColWidth,\n );\n columnsWidthTotal = columnsWidthTotal + width;\n if (columnsWidthTotal > windowSize) {\n this.showTopScroll = true;\n setTimeout(() => {\n this.changeDetector.markForCheck();\n });\n }\n }\n });\n }\n }\n\n private multiselectSelectAll(): void {\n for (const item of this.items) {\n item.isSelected = true;\n }\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.SelectAll);\n }\n\n private multiselectClearAll(): void {\n for (const item of this.items) {\n item.isSelected = false;\n }\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.ClearAll);\n }\n\n private handleIncomingMessages(message: SkyGridMessage): void {\n switch (message.type) {\n case SkyGridMessageType.SelectAll:\n this.multiselectSelectAll();\n break;\n\n case SkyGridMessageType.ClearAll:\n this.multiselectClearAll();\n break;\n case SkyGridMessageType.PromptDeleteRow:\n /* sanity check */\n /* istanbul ignore else */\n if (message.data && message.data.promptDeleteRow) {\n const existingConfig = this.rowDeleteConfigs.find(\n (config) => config.id === message.data.promptDeleteRow.id,\n );\n if (existingConfig) {\n existingConfig.pending = false;\n } else {\n this.rowDeleteConfigs.push({\n id: message.data.promptDeleteRow.id,\n pending: false,\n });\n const overlay = this.overlayService.create({\n enableScroll: true,\n showBackdrop: false,\n closeOnNavigation: true,\n enableClose: false,\n enablePointerEvents: true,\n environmentInjector: this.#environmentInjector,\n });\n\n overlay.attachTemplate(this.inlineDeleteTemplateRef, {\n $implicit: this.data.find(\n (item) => item.id === message.data.promptDeleteRow.id,\n ),\n });\n\n /**\n * We are manually setting the z-index here because overlays will always be on top of\n * the omnibar. This manual setting is 1 less than the omnibar's z-index of 1000. We\n * discussed changing the overlay service to allow for this but decided against that\n * change at this time due to its niche nature.\n */\n overlay.componentRef.instance.zIndex = '999';\n\n setTimeout(() => {\n const inlineDeleteRef = this.inlineDeleteRefs\n .toArray()\n .find((elRef) => {\n return (\n elRef.nativeElement.id ===\n 'row-delete-ref-' + message.data.promptDeleteRow.id\n );\n });\n const affixer = this.affixService.createAffixer(inlineDeleteRef);\n\n const rowElement: HTMLElement =\n this.tableElementRef.nativeElement.querySelector(\n '[sky-cmp-id=\"' + message.data.promptDeleteRow.id + '\"]',\n );\n\n affixer.affixTo(rowElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n isSticky: true,\n placement: 'above',\n verticalAlignment: 'top',\n horizontalAlignment: 'left',\n enableAutoFit: false,\n });\n\n this.rowDeleteContents[message.data.promptDeleteRow.id] = {\n affixer: affixer,\n overlay: overlay,\n };\n });\n }\n }\n break;\n case SkyGridMessageType.AbortDeleteRow:\n /* sanity check */\n /* istanbul ignore else */\n if (message.data && message.data.abortDeleteRow) {\n this.rowDeleteConfigs = this.rowDeleteConfigs.filter(\n (config) => config.id !== message.data.abortDeleteRow.id,\n );\n\n this.destroyRowDelete(message.data.abortDeleteRow.id);\n }\n break;\n }\n this.changeDetector.markForCheck();\n }\n\n private onHeaderDrop(newColumnIds: string[]): void {\n // update selected columnIds\n this.selectedColumnIdsSet = true;\n this.selectedColumnIds = newColumnIds;\n\n // mark for check because we are using ChangeDetectionStrategy.onPush\n this.changeDetector.markForCheck();\n }\n\n private setDisplayedColumns(respectHidden = false): void {\n /* sanity check */\n /* istanbul ignore else */\n if (this.columns) {\n if (this.selectedColumnIds !== undefined) {\n // setup displayed columns\n this.displayedColumns = this.selectedColumnIds\n .filter((columnId) => {\n return this.columns.find((column) => column.id === columnId);\n })\n .map((columnId) => {\n return this.columns.filter((column) => column.id === columnId)[0];\n });\n } else if (respectHidden) {\n this.displayedColumns = this.columns.filter((column) => {\n return !column.hidden;\n });\n } else {\n this.displayedColumns = this.columns;\n }\n }\n }\n\n private transformData(): void {\n // Transform data into object with id and data properties\n if (\n this.data &&\n this.data.length > 0 &&\n this.data[0].id &&\n !this.data[0].data\n ) {\n if (this.multiselectRowId) {\n this.items = this.getGridDataWithSelectedRows();\n } else {\n this.items = this.data.map((item) => new ListItemModel(item.id, item));\n }\n } else {\n this.items = this.data;\n }\n }\n\n private getGridDataWithSelectedRows(): ListItemModel[] {\n const selectedRows = this.getSelectedRows();\n return this.data.map((item) => {\n let checked;\n if (Object.prototype.hasOwnProperty.call(item, this.multiselectRowId)) {\n checked = selectedRows.indexOf(item[this.multiselectRowId]) > -1;\n } else {\n checked = selectedRows.indexOf(item.id) > -1;\n }\n return new ListItemModel(item.id, item, checked);\n });\n }\n\n private applySelectedRows(): void {\n if (this.items && this.items.length > 0 && this.selectedRowIds) {\n for (const item of this.items) {\n item.isSelected = this.selectedRowIds.indexOf(item.id) > -1;\n }\n this.changeDetector.markForCheck();\n }\n }\n\n private setSortHeaders(): void {\n this.currentSortField.next(\n this.sortField || { fieldSelector: '', descending: false },\n );\n }\n\n private getColumnsFromComponent(): void {\n this.columns = this.columnComponents.map((columnComponent) => {\n return new SkyGridColumnModel(columnComponent.template, columnComponent);\n });\n }\n\n private updateColumns(): void {\n this.getColumnsFromComponent();\n\n // This set timeout is necessary to ensure the columns have rendered in the grid\n setTimeout(() => {\n this.checkUserColumnWidthsForScroll();\n });\n }\n\n private resizeColumnByIndex(\n columnIndex: string,\n newColWidth: number,\n deltaX: number,\n ): void {\n const column = this.getColumnModelByIndex(columnIndex);\n\n // Prevent accidental shrinkage below minimum width.\n if (newColWidth <= this.minColWidth) {\n deltaX = deltaX + this.minColWidth - newColWidth;\n newColWidth = this.minColWidth;\n }\n\n // fit=width adds/removes width from the last column\n // fit=scroll adds/removes width from the table\n if (this.fit === 'width') {\n const lastColumn = this.getLastDisplayedColumn();\n\n // Prevent accidental growth that would bump last column off screen.\n const max = this.getMaxRangeByIndex(columnIndex);\n if (newColWidth > max) {\n newColWidth = max;\n deltaX = max - this.startColumnWidth;\n }\n column.width = newColWidth;\n lastColumn.width = lastColumn.width - deltaX;\n this.updateMaxRange();\n } else {\n this.gridAdapter.setStyle(\n this.tableElementRef,\n 'width',\n `${this.tableWidth + deltaX}px`,\n );\n column.width = newColWidth;\n }\n\n this.changeDetector.detectChanges();\n this.columnWidthChange.emit(this.getColumnWidthModelChange());\n }\n\n private initColumnWidths(): void {\n // Establish table width.\n this.showTopScroll = true;\n\n // Set column widths based on the width initially given by the browser.\n // computedWidth prevents accidental overflow for browsers with sub-pixel widths.\n this.columnElementRefs.forEach((col, index) => {\n const computedWidth = parseFloat(\n window.getComputedStyle(col.nativeElement).width,\n );\n const offsetWidth = col.nativeElement.offsetWidth;\n /* istanbul ignore next */\n this.getColumnModelByIndex(index).width = Math.max(\n computedWidth || offsetWidth,\n this.minColWidth,\n );\n });\n\n // 'scroll' tables should be allowed to expand outside of their constraints.\n if (this.fit === 'scroll') {\n this.gridAdapter.setStyle(this.tableElementRef, 'min-width', 'auto');\n }\n\n // Update max limits for input ranges.\n if (this.fit === 'width') {\n this.updateMaxRange();\n }\n\n this.changeDetector.detectChanges();\n }\n\n private transferColumnWidths(\n oldColumns: SkyGridColumnModel[],\n newColumns: SkyGridColumnModel[],\n ): void {\n /* sanity check */\n /* istanbul ignore else */\n if (oldColumns && newColumns) {\n for (const oldColumn of oldColumns) {\n if (oldColumn.width) {\n const matchingColumn = newColumns.find(\n (newColumn) => oldColumn.id === newColumn.id,\n );\n if (matchingColumn && !matchingColumn.width) {\n matchingColumn.width = oldColumn.width;\n }\n }\n }\n }\n this.changeDetector.markForCheck();\n }\n\n private getColumnWidthModelChange(): SkyGridColumnWidthModelChange[] {\n const columnWidthModelChange = new Array<SkyGridColumnWidthModelChange>();\n this.columns.forEach((column) => {\n columnWidthModelChange.push({\n id: column.id,\n field: column.field,\n width: column.width,\n });\n });\n return columnWidthModelChange;\n }\n\n private updateMaxRange(): void {\n const leftoverWidth =\n this.getLastDisplayedColumn().width - this.minColWidth;\n this.displayedColumns.forEach((column, index) => {\n const newMaxRange = column.width + leftoverWidth;\n const rangeInput = this.getRangeInputByIndex(index);\n rangeInput.nativeElement.max = newMaxRange;\n rangeInput.nativeElement.setAttribute('aria-valuemax', newMaxRange);\n });\n }\n\n private initializeResizeColumn(event: any): void {\n const clickTarget = event.target as HTMLElement;\n this.activeResizeColumnIndex = clickTarget.getAttribute('sky-cmp-index');\n const column = this.getColumnModelByIndex(this.activeResizeColumnIndex);\n this.startColumnWidth = column.width;\n }\n\n private resetTableWidth(): void {\n this.skyWindow.nativeWindow.setTimeout(() => {\n this.gridAdapter.setStyle(this.tableElementRef, 'width', `auto`);\n this.changeDetector.detectChanges();\n this.gridAdapter.setStyle(\n this.tableElementRef,\n 'width',\n `${this.tableWidth}px`,\n );\n this.changeDetector.detectChanges();\n });\n }\n\n private getRangeInputByIndex(index: string | number): ElementRef {\n return this.columnRangeInputElementRefs.find(\n (input) =>\n input.nativeElement.getAttribute('sky-cmp-index') === index.toString(),\n );\n }\n\n private getColumnModelByIndex(index: string | number): SkyGridColumnModel {\n return this.displayedColumns[Number(index)];\n }\n\n private getMaxRangeByIndex(index: string): number {\n const columnElementRef = this.columnElementRefs.find(\n (th) => th.nativeElement.getAttribute('sky-cmp-index') === index,\n );\n const rangeInput = columnElementRef.nativeElement.querySelector(\n '.sky-grid-column-input-aria-only',\n );\n return Number(rangeInput.max);\n }\n\n private getLastDisplayedColumn(): SkyGridColumnModel {\n return this.getColumnModelByIndex(this.displayedColumns.length - 1);\n }\n\n private addDelimiter(text: string[], delimiter: string): string {\n return text.filter((val) => val).join(delimiter);\n }\n\n private destroyRowDelete(id: string): void {\n const rowDeleteContents = this.rowDeleteContents[id];\n /* istanbul ignore else */\n if (rowDeleteContents) {\n rowDeleteContents.affixer.destroy();\n this.overlayService.close(rowDeleteContents.overlay);\n delete this.rowDeleteContents[id];\n }\n }\n\n private emitSelectedRows(source: SkyGridSelectedRowsSource): void {\n const selectedRows: SkyGridSelectedRowsModelChange = {\n selectedRowIds: this.getSelectedRows(),\n source: source,\n };\n this.multiselectSelectionChange.emit(selectedRows);\n }\n\n private getSelectedRows(): any[] {\n return this.items\n .filter((item) => {\n return item.isSelected;\n })\n .map((item) => {\n if (\n Object.prototype.hasOwnProperty.call(item.data, this.multiselectRowId)\n ) {\n return item.data[this.multiselectRowId];\n }\n return item.id;\n });\n }\n\n private isInteractiveElement(event: any): any {\n const interactiveElSelectors = `\n a,\n button,\n input,\n label,\n option,\n select,\n textarea,\n details,\n dialog,\n menu,\n menuitem,\n summary`;\n return event.target.closest(interactiveElSelectors);\n }\n\n private setResizeBarPosition(xPosition: number): void {\n const parentScroll = this.tableContainerElementRef.nativeElement.scrollLeft;\n const resizeBarX =\n xPosition -\n this.tableElementRef.nativeElement.getBoundingClientRect().left -\n parentScroll;\n this.gridAdapter.setStyle(this.resizeBar, 'left', resizeBarX + 'px');\n }\n\n private applyUserConfig(): Promise<void> {\n return new Promise<void>((resolve) => {\n this.uiConfigService\n .getConfig(this.settingsKey)\n .pipe(take(1))\n .subscribe(\n (config: SkyGridUIConfig) => {\n /* istanbul ignore else */\n if (config && config.selectedColumnIds) {\n // Remove any columnIds that don't exist in the current data set.\n this.selectedColumnIds = config.selectedColumnIds.filter((id) =>\n this.columns.find((column) => column.id === id),\n );\n this.changeDetector.markForCheck();\n }\n\n resolve();\n },\n () => {\n resolve();\n },\n );\n });\n }\n\n private setUserConfig(config: SkyGridUIConfig): void {\n if (!this.settingsKey) {\n return;\n }\n\n this.uiConfigService\n .setConfig(this.settingsKey, config)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n () => {},\n (err) => {\n console.warn('Could not save grid settings.');\n console.warn(err);\n },\n );\n }\n\n private initColumns(): void {\n /* istanbul ignore else */\n if (this.columnComponents.length !== 0 || this.columns !== undefined) {\n /* istanbul ignore else */\n /* sanity check */\n if (this.columnComponents.length > 0) {\n this.getColumnsFromComponent();\n }\n\n this.transformData();\n this.setDisplayedColumns(true);\n this.changeDetector.markForCheck();\n }\n\n // Watch for added/removed columns:\n this.subscriptions.push(\n this.columnComponents.changes.subscribe(() => this.updateColumns()),\n );\n\n // Watch for column heading changes:\n this.columnComponents.forEach((comp: SkyGridColumnComponent) => {\n this.subscriptions.push(\n comp.headingModelChanges.subscribe(\n (change: SkyGridColumnHeadingModelChange) => {\n this.updateColumnHeading(change);\n },\n ),\n );\n this.subscriptions.push(\n comp.descriptionModelChanges.subscribe(\n (change: SkyGridColumnDescriptionModelChange) => {\n this.updateColumnDescription(change);\n },\n ),\n );\n this.subscriptions.push(\n comp.inlineHelpPopoverModelChanges.subscribe(\n (change: SkyGridColumnInlineHelpPopoverModelChange) => {\n this.updateInlineHelpPopover(change);\n },\n ),\n );\n });\n }\n\n private arraysEqual(arrayA: any[], arrayB: any[]): boolean {\n return (\n arrayA.length === arrayB.length &&\n arrayA.every((value, index) => value === arrayB[index])\n );\n }\n}\n","<div class=\"sky-grid\">\n @if (showTopScroll) {\n <div\n #topScrollContainer\n class=\"sky-grid-top-scroll-container\"\n (scroll)=\"onTopScroll($event)\"\n >\n <div\n class=\"sky-grid-top-scroll\"\n [style.width.px]=\"getTopScrollWidth()\"\n ></div>\n </div>\n }\n <div\n #gridContainer\n class=\"sky-grid-table-container\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n (scroll)=\"onGridScroll($event)\"\n >\n <table #gridTable class=\"sky-grid-table\" [ngClass]=\"getTableClassNames()\">\n <thead>\n <tr\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"displayedColumns\"\n (cdkDropListDropped)=\"onColumnDropped($event)\"\n >\n @if (enableMultiselect) {\n <th\n class=\"sky-grid-heading sky-grid-multiselect-cell sky-grid-header-locked\"\n scope=\"col\"\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <span class=\"screen-reader-only\">\n {{ 'skyux_grid_multiselect_select_row' | skyLibResources }}\n </span>\n </th>\n }\n @for (\n column of displayedColumns;\n track column;\n let last = $last;\n let i = $index\n ) {\n <th\n #gridCol\n cdkDrag\n class=\"sky-grid-heading sky-field-label\"\n scope=\"col\"\n [attr.sky-cmp-index]=\"i\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n [attr.aria-sort]=\"getAriaSortDirection(column) | async\"\n [cdkDragDisabled]=\"column.locked\"\n [id]=\"'sky-grid-' + gridId + '-column-' + i\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n [tabIndex]=\"column.isSortable ? 0 : -1\"\n (mouseup)=\"sortByColumn(column)\"\n (keydown)=\"onKeydown($event, column)\"\n (touchmove)=\"onTouchMove($event)\"\n >\n <div\n class=\"overflow\"\n [ngClass]=\"getTableHeaderClassNames(column)\"\n [style.max-width.px]=\"column.width - 1\"\n [style.width.px]=\"column.width - 1\"\n >\n @if ((getCaretVisibility(column.field) | async) === 'hidden') {\n <span class=\"sky-grid-header-caret-hidden-spacing\"></span>\n }\n <!-- The no spacing here is intentional to avoid extra spaces due to these being inline elements -->\n <span class=\"sky-grid-header-text\">{{\n column.heading?.trim()\n }}</span>\n <sky-icon\n class=\"sky-grid-heading-sort\"\n variant=\"solid\"\n [ngClass]=\"\n 'sky-grid-heading-sort-' +\n (getCaretVisibility(column.field) | async)\n \"\n [iconName]=\"getCaretIconNames(column)\"\n />\n @if (column.inlineHelpPopover) {\n <sky-help-inline\n [ngClass]=\"{\n 'sky-grid-help-inline-sort-hidden':\n getHelpInlineClass(column.field) | async\n }\"\n [skyPopover]=\"column.inlineHelpPopover\"\n (keydown.enter)=\"$event.stopPropagation()\"\n (keydown.space)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n (mouseup)=\"$event.stopPropagation()\"\n />\n }\n </div>\n @if ((fit === 'width' && !last) || fit === 'scroll') {\n <span\n aria-hidden=\"true\"\n class=\"sky-grid-resize-handle\"\n tabindex=\"-1\"\n [attr.sky-cmp-index]=\"i\"\n (mousedown)=\"onResizeColumnStart($event)\"\n (touchstart)=\"onResizeColumnStart($event)\"\n >\n </span>\n }\n <input\n #colSizeRange\n aria-label=\"Width of column\"\n class=\"sky-grid-column-input-aria-only\"\n role=\"slider\"\n type=\"range\"\n [attr.aria-controls]=\"'sky-grid-' + gridId + '-column-' + i\"\n [attr.aria-valuemin]=\"minColWidth\"\n [attr.aria-valuemax]=\"maxColWidth\"\n [attr.aria-valuenow]=\"column.width\"\n [attr.sky-cmp-index]=\"i\"\n [min]=\"minColWidth\"\n [max]=\"maxColWidth\"\n [step]=\"columnResizeStep\"\n [(ngModel)]=\"column.width\"\n (blur)=\"onResizeHandleBlur()\"\n (focus)=\"onResizeHandleFocus($event)\"\n (keydown)=\"onKeydownResizeCol($event)\"\n (change)=\"onInputChangeResizeCol($event)\"\n />\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"sky-grid-tbody\">\n @for (item of items; track item; let i = $index) {\n <tr\n class=\"sky-grid-row\"\n [attr.aria-current]=\"isRowHighlighted(item.id) ? true : null\"\n [attr.sky-cmp-id]=\"item.id\"\n [ngClass]=\"{\n 'sky-grid-multiselect-selected-row': item.isSelected,\n 'sky-grid-multiselect-row': enableMultiselect,\n 'sky-grid-row-highlight': isRowHighlighted(item.id)\n }\"\n (click)=\"onRowClick($event, item)\"\n >\n @if (enableMultiselect) {\n <td class=\"sky-grid-multiselect-cell sky-grid-header-locked\">\n <div\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <sky-checkbox\n [label]=\"\n 'skyux_grid_multiselect_select_row' | skyLibResources\n \"\n [(ngModel)]=\"item.isSelected\"\n (change)=\"onMultiselectCheckboxChange()\"\n />\n </div>\n </td>\n }\n @for (\n column of displayedColumns;\n track column;\n let last = $last;\n let i = $index\n ) {\n <td\n class=\"sky-grid-cell\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n >\n <sky-grid-cell\n [skyHighlight]=\"\n !column.excludeFromHighlighting ? highlightText : undefined\n \"\n [template]=\"column.template || defaultCellTemplate\"\n [fieldSelector]=\"column.field\"\n [item]=\"item\"\n [columnId]=\"column.id\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (showResizeBar) {\n <div\n #resizeBar\n aria-hidden=\"true\"\n class=\"sky-grid-resize-bar\"\n tabindex=\"-1\"\n ></div>\n }\n </div>\n</div>\n\n<ng-template #defaultCellTemplate let-row=\"row\" let-value=\"value\">{{\n value\n}}</ng-template>\n\n<ng-template #inlineDeleteTemplateRef let-item>\n <div\n #inlineDeleteRef\n [id]=\"'row-delete-ref-' + item.id\"\n [ngStyle]=\"{\n height: getRowHeight(0),\n position: 'fixed',\n width: tableWidth + 'px'\n }\"\n >\n <sky-inline-delete\n [pending]=\"getRowDeleteItem(item.id).pending\"\n (cancelTriggered)=\"cancelRowDelete(item.id)\"\n (deleteTriggered)=\"confirmRowDelete(item.id)\"\n />\n </div>\n</ng-template>\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyAffixModule } from '@skyux/core';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyTextHighlightModule } from '@skyux/indicators';\nimport { SkyInlineDeleteModule } from '@skyux/layout';\nimport { SkyPopoverModule } from '@skyux/popovers';\n\nimport { SkyGridsResourcesModule } from '../shared/sky-grids-resources.module';\n\nimport { SkyGridCellComponent } from './grid-cell.component';\nimport { SkyGridColumnComponent } from './grid-column.component';\nimport { SkyGridComponent } from './grid.component';\n\n/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\n@NgModule({\n declarations: [\n SkyGridComponent,\n SkyGridColumnComponent,\n SkyGridCellComponent,\n ],\n imports: [\n CommonModule,\n DragDropModule,\n FormsModule,\n SkyAffixModule,\n SkyCheckboxModule,\n SkyGridsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyInlineDeleteModule,\n SkyPopoverModule,\n SkyTextHighlightModule,\n ],\n exports: [SkyGridComponent, SkyGridColumnComponent],\n})\nexport class SkyGridModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.SkyGridAdapterService","i12.SkyGridCellComponent"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skyux/grids",
3
- "version": "14.0.0-alpha.1",
3
+ "version": "14.0.0-alpha.2",
4
4
  "author": "Blackbaud, Inc.",
5
5
  "keywords": [
6
6
  "blackbaud",
@@ -16,33 +16,24 @@
16
16
  },
17
17
  "homepage": "https://github.com/blackbaud/skyux#readme",
18
18
  "peerDependencies": {
19
+ "@angular/cdk": "^21.1.3",
19
20
  "@angular/common": "^21.1.2",
20
21
  "@angular/core": "^21.1.2",
21
22
  "@angular/forms": "^21.1.2",
22
- "@skyux/core": "14.0.0-alpha.1",
23
- "@skyux/forms": "14.0.0-alpha.1",
24
- "@skyux/help-inline": "14.0.0-alpha.1",
25
- "@skyux/i18n": "14.0.0-alpha.1",
26
- "@skyux/icon": "14.0.0-alpha.1",
27
- "@skyux/indicators": "14.0.0-alpha.1",
28
- "@skyux/layout": "14.0.0-alpha.1",
29
- "@skyux/list-builder-common": "14.0.0-alpha.1",
30
- "@skyux/popovers": "14.0.0-alpha.1"
23
+ "@skyux/core": "14.0.0-alpha.2",
24
+ "@skyux/forms": "14.0.0-alpha.2",
25
+ "@skyux/help-inline": "14.0.0-alpha.2",
26
+ "@skyux/i18n": "14.0.0-alpha.2",
27
+ "@skyux/icon": "14.0.0-alpha.2",
28
+ "@skyux/indicators": "14.0.0-alpha.2",
29
+ "@skyux/layout": "14.0.0-alpha.2",
30
+ "@skyux/list-builder-common": "14.0.0-alpha.2",
31
+ "@skyux/popovers": "14.0.0-alpha.2"
31
32
  },
32
33
  "dependencies": {
33
- "@types/dragula": "2.1.36",
34
- "dragula": "3.7.3",
35
- "ng2-dragula": "5.1.0",
36
34
  "tslib": "^2.8.1"
37
35
  },
38
36
  "sideEffects": false,
39
- "overrides": {
40
- "ng2-dragula@5.1.0": {
41
- "@angular/animations": ">=19.0.0",
42
- "@angular/core": ">=19.0.0",
43
- "@angular/common": ">=19.0.0"
44
- }
45
- },
46
37
  "module": "fesm2022/skyux-grids.mjs",
47
38
  "typings": "types/skyux-grids.d.ts",
48
39
  "exports": {
@@ -1,10 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { TemplateRef, RendererFactory2, ElementRef, OnInit, AfterContentInit, AfterViewInit, OnChanges, OnDestroy, EventEmitter, ChangeDetectorRef, SimpleChanges } from '@angular/core';
3
+ import * as i5 from '@angular/cdk/drag-drop';
4
+ import { CdkDragDrop } from '@angular/cdk/drag-drop';
3
5
  import * as i7 from '@skyux/core';
4
6
  import { SkyAffixService, SkyOverlayService, SkyAppWindowRef, SkyUIConfigService, SkyLogService } from '@skyux/core';
5
7
  import { ListSortFieldSelectorModel, ListItemModel } from '@skyux/list-builder-common';
6
- import * as i5 from 'ng2-dragula';
7
- import { DragulaService } from 'ng2-dragula';
8
8
  import { Subject, BehaviorSubject, Observable } from 'rxjs';
9
9
  import * as i4 from '@angular/common';
10
10
  import * as i6 from '@angular/forms';
@@ -53,10 +53,17 @@ declare class SkyGridAdapterService {
53
53
  private rendererFactory;
54
54
  private renderer;
55
55
  constructor(rendererFactory: RendererFactory2);
56
- initializeDragAndDrop(dragulaGroupName: string, dragulaService: DragulaService, dropCallback: (newColumnIds: string[]) => void): void;
56
+ /**
57
+ * Determines whether a column can be dropped at the given position.
58
+ * Columns cannot be dropped to the left of locked columns.
59
+ */
60
+ canDrop(displayedColumns: SkyGridColumnModel[], currentIndex: number, targetIndex: number): boolean;
61
+ /**
62
+ * Handles the CDK drop event and returns the updated column IDs.
63
+ */
64
+ onColumnDrop(event: CdkDragDrop<SkyGridColumnModel[]>, displayedColumns: SkyGridColumnModel[]): string[] | undefined;
57
65
  getRowHeight(el: ElementRef, index: number): string;
58
66
  setStyle(el: ElementRef, style: string, value: string): void;
59
- private isLeftOfLocked;
60
67
  static ɵfac: i0.ɵɵFactoryDeclaration<SkyGridAdapterService, never>;
61
68
  static ɵprov: i0.ɵɵInjectableDeclaration<SkyGridAdapterService>;
62
69
  }
@@ -212,7 +219,6 @@ declare class SkyGridComponent implements OnInit, AfterContentInit, AfterViewIni
212
219
  #private;
213
220
  private affixService;
214
221
  private changeDetector;
215
- private dragulaService;
216
222
  private gridAdapter;
217
223
  private overlayService;
218
224
  private skyWindow;
@@ -334,7 +340,6 @@ declare class SkyGridComponent implements OnInit, AfterContentInit, AfterViewIni
334
340
  columnResizeStep: number;
335
341
  currentSortField: BehaviorSubject<ListSortFieldSelectorModel>;
336
342
  displayedColumns: SkyGridColumnModel[];
337
- dragulaGroupName: string;
338
343
  gridId: number;
339
344
  rowDeleteConfigs: SkyGridRowDeleteConfig[];
340
345
  items: any[];
@@ -365,7 +370,7 @@ declare class SkyGridComponent implements OnInit, AfterContentInit, AfterViewIni
365
370
  private _columns;
366
371
  private _selectedColumnIds;
367
372
  private _selectedRowIds;
368
- constructor(affixService: SkyAffixService, changeDetector: ChangeDetectorRef, dragulaService: DragulaService, gridAdapter: SkyGridAdapterService, overlayService: SkyOverlayService, skyWindow: SkyAppWindowRef, uiConfigService: SkyUIConfigService, logger: SkyLogService);
373
+ constructor(affixService: SkyAffixService, changeDetector: ChangeDetectorRef, gridAdapter: SkyGridAdapterService, overlayService: SkyOverlayService, skyWindow: SkyAppWindowRef, uiConfigService: SkyUIConfigService, logger: SkyLogService);
369
374
  ngOnInit(): void;
370
375
  ngAfterContentInit(): void;
371
376
  ngAfterViewInit(): void;
@@ -403,6 +408,10 @@ declare class SkyGridComponent implements OnInit, AfterContentInit, AfterViewIni
403
408
  cancelRowDelete(id: string): void;
404
409
  confirmRowDelete(id: string): void;
405
410
  getRowDeleteItem(id: string): SkyGridRowDeleteConfig;
411
+ /**
412
+ * Handles the CDK drag-and-drop event when a column header is dropped.
413
+ */
414
+ protected onColumnDropped(event: CdkDragDrop<SkyGridColumnModel[]>): void;
406
415
  onTouchMove(event: any): void;
407
416
  onTopScroll(event: any): void;
408
417
  onGridScroll(event: any): void;
@@ -568,7 +577,7 @@ declare class SkyGridsResourcesModule {
568
577
  */
569
578
  declare class SkyGridModule {
570
579
  static ɵfac: i0.ɵɵFactoryDeclaration<SkyGridModule, never>;
571
- static ɵmod: i0.ɵɵNgModuleDeclaration<SkyGridModule, [typeof SkyGridComponent, typeof SkyGridColumnComponent, typeof SkyGridCellComponent], [typeof i4.CommonModule, typeof i5.DragulaModule, typeof i6.FormsModule, typeof i7.SkyAffixModule, typeof i8.SkyCheckboxModule, typeof SkyGridsResourcesModule, typeof i10.SkyHelpInlineModule, typeof i11.SkyIconModule, typeof i12.SkyInlineDeleteModule, typeof i13.SkyPopoverModule, typeof i14.SkyTextHighlightModule], [typeof SkyGridComponent, typeof SkyGridColumnComponent]>;
580
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SkyGridModule, [typeof SkyGridComponent, typeof SkyGridColumnComponent, typeof SkyGridCellComponent], [typeof i4.CommonModule, typeof i5.DragDropModule, typeof i6.FormsModule, typeof i7.SkyAffixModule, typeof i8.SkyCheckboxModule, typeof SkyGridsResourcesModule, typeof i10.SkyHelpInlineModule, typeof i11.SkyIconModule, typeof i12.SkyInlineDeleteModule, typeof i13.SkyPopoverModule, typeof i14.SkyTextHighlightModule], [typeof SkyGridComponent, typeof SkyGridColumnComponent]>;
572
581
  static ɵinj: i0.ɵɵInjectorDeclaration<SkyGridModule>;
573
582
  }
574
583