@datorama/core 22.14.1 → 22.15.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.
Files changed (55) hide show
  1. package/bundle.scss +9987 -6561
  2. package/bundles/datorama-core.umd.js +242 -95
  3. package/bundles/datorama-core.umd.js.map +1 -1
  4. package/bundles/datorama-core.umd.min.js +60 -60
  5. package/bundles/datorama-core.umd.min.js.map +1 -1
  6. package/datorama-core.metadata.json +1 -1
  7. package/esm2015/lib/button/button.component.js +1 -1
  8. package/esm2015/lib/grid/dato-grid.js +4 -3
  9. package/esm2015/lib/grid/grid/grid.component.js +5 -9
  10. package/esm2015/lib/grid/grid-sort.utils.js +28 -0
  11. package/esm2015/lib/grid-v2/grid/grid-v2.component.js +10 -3
  12. package/esm2015/lib/grid-v2/grid/grid-v2.config.js +45 -14
  13. package/esm2015/lib/grid-v2/grid-column-header/grid-column-header.component.js +4 -1
  14. package/esm2015/lib/grid-v2/grid-column-header/grid-multi-select-header/grid-multi-select-header.component.js +4 -1
  15. package/esm2015/lib/grid-v2/grid-controller/grid-controller.component.js +60 -26
  16. package/esm2015/lib/grid-v2/grid-header/grid-header.component.js +3 -2
  17. package/esm2015/lib/grid-v2/grid-on-hover/grid-on-hover.component.js +17 -14
  18. package/esm2015/lib/grid-v2/grid-store/grid.query.js +11 -6
  19. package/esm2015/lib/grid-v2/grid-store/grid.service.js +19 -5
  20. package/esm2015/lib/grid-v2/grid-toolbar/grid-toolbar.component.js +23 -17
  21. package/esm2015/lib/radio/radio.component.js +1 -1
  22. package/esm2015/lib/utils/string.js +9 -11
  23. package/esm2015/lib/version.js +2 -2
  24. package/esm5/lib/button/button.component.js +1 -1
  25. package/esm5/lib/grid/dato-grid.js +4 -3
  26. package/esm5/lib/grid/grid/grid.component.js +5 -9
  27. package/esm5/lib/grid/grid-sort.utils.js +35 -0
  28. package/esm5/lib/grid-v2/grid/grid-v2.component.js +14 -3
  29. package/esm5/lib/grid-v2/grid/grid-v2.config.js +47 -15
  30. package/esm5/lib/grid-v2/grid-column-header/grid-column-header.component.js +4 -1
  31. package/esm5/lib/grid-v2/grid-column-header/grid-multi-select-header/grid-multi-select-header.component.js +4 -1
  32. package/esm5/lib/grid-v2/grid-controller/grid-controller.component.js +64 -26
  33. package/esm5/lib/grid-v2/grid-header/grid-header.component.js +3 -2
  34. package/esm5/lib/grid-v2/grid-on-hover/grid-on-hover.component.js +17 -14
  35. package/esm5/lib/grid-v2/grid-store/grid.query.js +11 -6
  36. package/esm5/lib/grid-v2/grid-store/grid.service.js +19 -5
  37. package/esm5/lib/grid-v2/grid-toolbar/grid-toolbar.component.js +23 -17
  38. package/esm5/lib/radio/radio.component.js +1 -1
  39. package/esm5/lib/utils/string.js +9 -11
  40. package/esm5/lib/version.js +2 -2
  41. package/fesm2015/datorama-core.js +226 -96
  42. package/fesm2015/datorama-core.js.map +1 -1
  43. package/fesm5/datorama-core.js +243 -97
  44. package/fesm5/datorama-core.js.map +1 -1
  45. package/lib/grid/grid-sort.utils.d.ts +15 -0
  46. package/lib/grid-v2/grid/grid-v2.component.d.ts +4 -0
  47. package/lib/grid-v2/grid/grid-v2.config.d.ts +1 -0
  48. package/lib/grid-v2/grid-column-header/grid-column-header.component.d.ts +2 -1
  49. package/lib/grid-v2/grid-column-header/grid-multi-select-header/grid-multi-select-header.component.d.ts +1 -0
  50. package/lib/grid-v2/grid-controller/grid-controller.component.d.ts +15 -0
  51. package/lib/grid-v2/grid-on-hover/grid-on-hover.component.d.ts +1 -3
  52. package/lib/grid-v2/grid-store/grid.service.d.ts +325 -281
  53. package/lib/grid-v2/grid-toolbar/grid-toolbar.component.d.ts +1 -0
  54. package/package.json +4 -1
  55. package/testing/src/grid/rows.ts +1 -1
@@ -1,6 +1,6 @@
1
1
  import { __decorate, __metadata, __param, __rest } from 'tslib';
2
2
  import { forwardRef, NgZone, Renderer2, Input, ViewChild, ElementRef, Component, ChangeDetectionStrategy, NgModule, Attribute, HostBinding, ɵɵdefineInjectable, Injectable, isDevMode, InjectionToken, Inject, ChangeDetectorRef, HostListener, Directive, EventEmitter, Output, ɵɵinject, ApplicationRef, Injector, INJECTOR, TemplateRef, ViewContainerRef, Pipe, ViewEncapsulation, ComponentFactoryResolver, ContentChildren, QueryList, ViewChildren, Optional, ContentChild, SkipSelf, Self, SecurityContext } from '@angular/core';
3
- import { fromEvent, merge as merge$1, Subject, combineLatest, Observable, forkJoin, of, Subscription, BehaviorSubject, EMPTY, defer, interval, ReplaySubject, throwError, isObservable, timer, pipe } from 'rxjs';
3
+ import { fromEvent, merge as merge$1, Subject, combineLatest, Observable, forkJoin, of, Subscription, BehaviorSubject, ReplaySubject, EMPTY, defer, interval, throwError, isObservable, timer, pipe } from 'rxjs';
4
4
  import { NG_VALUE_ACCESSOR, NgControl, FormControl, ReactiveFormsModule, Validators, FormBuilder, ControlContainer, FormGroup, FormControlDirective, FormControlName } from '@angular/forms';
5
5
  import { untilDestroyed } from 'ngx-take-until-destroy';
6
6
  import { debounceTime, filter as filter$1, map as map$1, pluck, tap, switchMap, takeUntil, take, auditTime, distinctUntilChanged, throttleTime, first, mapTo, startWith, pairwise, skip, shareReplay, delay as delay$1, switchMapTo, repeat, concatMap, concatMapTo } from 'rxjs/operators';
@@ -932,7 +932,7 @@ DatoButtonComponent = __decorate([
932
932
  selector: 'dato-button',
933
933
  template: "<button class=\"d-flex d-flex-row align-center\" [disabled]=\"_disabled\" [class.lightning]=\"lightning\">\n <ng-content></ng-content>\n</button>\n",
934
934
  changeDetection: ChangeDetectionStrategy.OnPush,
935
- styles: [":host{display:inline-block}:host button.lightning{border-radius:4px;height:35px;padding:0 16px;font-weight:500;font-family:'Salesforce Sans','Open Sans',sans-serif!important;font-size:13px;letter-spacing:0;line-height:17px;cursor:pointer}:host button{border:none;overflow:visible;text-transform:none;-webkit-appearance:button;-moz-appearance:button;appearance:button;cursor:pointer;border-radius:2px;height:35px;padding:0 10px;font-size:14px;font-weight:600;white-space:nowrap}:host[datoSize=lg] button{height:35px}:host[datoSize=sm] button{height:24px;font-size:12px}:host.disabled{pointer-events:none}:host button:focus{outline:0}:host[datoCircle] button{border-radius:50%}:host.dato-icon-button button,:host[datoCircle] button{padding:0;width:34px;height:34px}:host.dato-icon-button[datoSize=md] button,:host[datoCircle][datoSize=md] button{width:24px;height:24px}:host.dato-icon-button[datoSize=sm] button,:host[datoCircle][datoSize=sm] button{width:16px;height:16px}"]
935
+ styles: [":host{display:inline-block}:host button.lightning{border-radius:4px;height:35px;padding:0 16px;font-weight:500;font-family:\"Salesforce Sans\",\"Open Sans\",sans-serif!important;font-size:13px;letter-spacing:0;line-height:17px;cursor:pointer}:host button{border:none;overflow:visible;text-transform:none;-webkit-appearance:button;-moz-appearance:button;appearance:button;cursor:pointer;border-radius:2px;height:35px;padding:0 10px;font-size:14px;font-weight:600;white-space:nowrap}:host[datoSize=lg] button{height:35px}:host[datoSize=sm] button{height:24px;font-size:12px}:host.disabled{pointer-events:none}:host button:focus{outline:0}:host[datoCircle] button{border-radius:50%}:host.dato-icon-button button,:host[datoCircle] button{padding:0;width:34px;height:34px}:host.dato-icon-button[datoSize=md] button,:host[datoCircle][datoSize=md] button{width:24px;height:24px}:host.dato-icon-button[datoSize=sm] button,:host[datoCircle][datoSize=sm] button{width:16px;height:16px}"]
936
936
  }),
937
937
  __param(1, Attribute('width')),
938
938
  __param(2, Attribute('height')),
@@ -1518,15 +1518,12 @@ function capitalize(str) {
1518
1518
  * @returns {string}
1519
1519
  */
1520
1520
  function camelCase(str) {
1521
- const camelCase = str => {
1522
- let string = str
1523
- .toLowerCase()
1524
- .replace(/[^A-Za-z0-9]/g, ' ')
1525
- .split(' ')
1526
- .reduce((result, word) => result + capitalize(word.toLowerCase()));
1527
- return string.charAt(0).toLowerCase() + string.slice(1);
1528
- };
1529
- return camelCase(str);
1521
+ const string = str
1522
+ .toLowerCase()
1523
+ .replace(/[^A-Za-z0-9]/g, ' ')
1524
+ .split(' ')
1525
+ .reduce((result, word) => result + capitalize(word.toLowerCase()));
1526
+ return string.charAt(0).toLowerCase() + string.slice(1);
1530
1527
  }
1531
1528
  /**
1532
1529
  *
@@ -1544,7 +1541,8 @@ function kebabCase(str) {
1544
1541
  * @returns {string} - The GUID
1545
1542
  */
1546
1543
  function createGUID() {
1547
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
1544
+ const template = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
1545
+ return template.replace(/[xy]/g, c => {
1548
1546
  const r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8;
1549
1547
  return v.toString(16);
1550
1548
  });
@@ -5100,10 +5098,10 @@ let DatoGridComponent = class DatoGridComponent extends BaseCustomControl {
5100
5098
  this.onChange(selectedRows);
5101
5099
  },
5102
5100
  rowSelection: 'multiple',
5103
- rowDeselection: true,
5101
+ // rowDeselection removed: true by default in AG Grid 27 (suppress with suppressRowDeselection).
5104
5102
  unSortIcon: true,
5105
- animateRows: true,
5106
- rememberGroupStateWhenNewData: true
5103
+ animateRows: true
5104
+ // rememberGroupStateWhenNewData removed: no-op since AG Grid 24 (transaction updates keep group state).
5107
5105
  };
5108
5106
  this.infinitePagination = false;
5109
5107
  this.isRowsCollapsed = true;
@@ -5123,10 +5121,6 @@ let DatoGridComponent = class DatoGridComponent extends BaseCustomControl {
5123
5121
  classFunc(this.hostElement, 'grid-pagination');
5124
5122
  if (this.gridOptions.rowModelType === 'infinite' || this.gridOptions.rowModelType === 'serverSide') {
5125
5123
  this.infinitePagination = true;
5126
- const { defaultColDef } = this.gridOptions;
5127
- if (defaultColDef.filter) {
5128
- defaultColDef.filterParams = { newRowsAction: 'keep' };
5129
- }
5130
5124
  }
5131
5125
  }
5132
5126
  get options() {
@@ -5260,7 +5254,7 @@ DatoGridComponent = __decorate([
5260
5254
  changeDetection: ChangeDetectionStrategy.OnPush,
5261
5255
  encapsulation: ViewEncapsulation.None,
5262
5256
  providers: [valueAccessor$2],
5263
- styles: ["@font-face{font-family:agGridClassic;src:url(\"data:application/font-woff;charset=utf-8;base64,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\") format(\"woff\"),url(\"data:application/x-font-ttf;charset=utf-8;base64,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AAAAdAAAADoAAAB1AAAAdQAAAEkAAAB2AAAAdgAAAE4AAAB3AAAAdwAAAD4AAAB4AAAAeAAAAEUAAAB5AAAAeQAAAEsAAAB6AAAAegAAAE0AAPEBAADxAQAAAAEAAPECAADxAgAAAAIAAPEDAADxAwAAAAMAAPEEAADxBAAAAAQAAPEFAADxBQAAAAUAAPEGAADxBgAAAAYAAPEHAADxBwAAAAcAAPEIAADxCAAAAAgAAPEJAADxCQAAAAkAAPEKAADxCgAAAAoAAPELAADxCwAAAAsAAPEMAADxDAAAAAwAAPENAADxDQAAAA0AAPEOAADxDgAAAA4AAPEPAADxDwAAAA8AAPEQAADxEAAAABAAAPERAADxEQAAABEAAPESAADxEgAAABIAAPETAADxEwAAABMAAPEUAADxFAAAABUAAPEVAADxFQAAABYAAPEWAADxFgAAABcAAPEXAADxFwAAABgAAPEYAADxGAAAABkAAPEZAADxGQAAABoAAPEaAADxGgAAABsAAPEbAADxGwAAABwAAPEcAADxHAAAAB0AAPEdAADxHQAAAB4AAPEeAADxHgAAAB8AAPEfAADxHwAAACAAAPEgAADxIAAAACEAAPEhAADxIQAAACIAAPEiAADxIgAAACMAAPEjAADxIwAAACQAAPEkAADxJAAAACUAAPElAADxJQAAACYAAPEmAADxJgAAACcAAPEnAADxJwAAACgAAPEoAADxKAAAACkAAPEpAADxKQAAACoAAPEqAADxKgAAACsAAPErAADxKwAAACwAAPEsAADxLAAAAC0AAPEtAADxLQAAAC4AAPEuAADxLgAAAC8AAPEvAADxLwAAADAAAPEwAADxMAAAADEAAPExAADxMQAAADIAAPEyAADxMgAAADMAAPEzAADxMwAAADEAAPE0AADxNAAAACIAAPE1AADxNQAAAC8AAPE2AADxNgAAADQAAAAAABgAUgBqAIQA0AEUAVQBjAG+AdQCAAJIAmwCjgMUA2YDfgO+BCQEigTmBPwFFgViBaYF+AYQBigG0AcCB1QHcAfCB9AH4ggECFoIeAiUCPYJCgkcCWIJvAnUCf4KDAoaCigKNgpKCtQLXgteC14LXgteC14LXgteC14LXgteC14LXgteC14LXgteC14LXgteC14LXgteC14LXgteAAEAAAAAAzYDawAJ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AHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVAAC2FnZ3JlZ2F0aW9uBmFycm93cwNhc2MGY2FuY2VsBWNoYXJ0EGNoZWNrYm94LWNoZWNrZWQWY2hlY2tib3gtaW5kZXRlcm1pbmF0ZRJjaGVja2JveC11bmNoZWNrZWQMY29sb3ItcGlja2VyBmNvbHVtbgdjb2x1bW5zCmNvbnRyYWN0ZWQEY29weQVjcm9zcwNjdXQEZGF0YQRkZXNjCGV4cGFuZGVkCWV5ZS1zbGFzaAtleWUtc2xhc2gtMQNleWUGZmlsdGVyBWZpcnN0BGdyaXAFZ3JvdXANaW5kZXRlcm1pbmF0ZQRsYXN0BGxlZnQGbGlua2VkB2xvYWRpbmcIbWF4aW1pemUEbWVudQhtaW5pbWl6ZQVtaW51cwRuZXh0BG5vbmULbm90LWFsbG93ZWQFcGFzdGUDcGluBXBpdm90BHBsdXMIcHJldmlvdXMQcmFkaW8tYnV0dG9uLW9mZg9yYWRpby1idXR0b24tb24FcmlnaHQEc2F2ZQpzbWFsbC1kb3duCnNtYWxsLWxlZnQLc21hbGwtcmlnaHQIc21hbGwtdXAEdGljawh1bmxpbmtlZAp1bmxpbmtlZC0xAWEBZwFyAWUBdAFpAW8BbgF3AXMBYwFsAWgBawFiAXgBLQFkAW0BdQFwAXkBZgF6AXYAAAA=\") format(\"truetype\");font-weight:400;font-style:normal}dato-grid{display:block;width:100%;height:100%;overflow:hidden}dato-grid.grid-pagination{padding-bottom:0;display:flex;flex-direction:column}dato-grid.grid-pagination ag-grid-angular{margin-bottom:7px;height:calc(100% - 32px)}.ag-dato-core{width:100%;height:100%}.ag-dato-core .da-grid-icon{display:inline-block;line-height:31px;vertical-align:middle}.ag-dato-core .ag-menu .da-grid-icon svg{vertical-align:middle}.ag-dato-core .ag-header-cell-sortable .ag-sort-none-icon{opacity:0;transition:opacity .2s}.ag-dato-core .ag-header-cell-sortable:hover .ag-sort-none-icon{opacity:1}.ag-dato-core .sort-icon svg{width:14px;height:16px}.ag-dato-core .filter-icon svg{width:13px}.ag-dato-core .menu-icon svg{width:4px;height:14px}.ag-dato-core .menu-auto-size-icon svg,.ag-dato-core .menu-group-icon,.ag-dato-core .menu-pin-icon,.ag-dato-core .menu-un-group-icon{width:16px;height:16px}.ag-dato-core .menu-check-icon svg{width:15px;height:18px}.ag-dato-core .group-contracted-icon,.ag-dato-core .group-expanded-icon{width:7px}.ag-dato-core .group-expanded-icon{transform:rotate(90deg)}"]
5257
+ styles: ["dato-grid{display:block;width:100%;height:100%;overflow:hidden}dato-grid.grid-pagination{padding-bottom:0;display:flex;flex-direction:column}dato-grid.grid-pagination ag-grid-angular{margin-bottom:7px;height:calc(100% - 32px)}.ag-dato-core{width:100%;height:100%}.ag-dato-core .da-grid-icon{display:inline-block;line-height:31px;vertical-align:middle}.ag-dato-core .ag-menu .da-grid-icon svg{vertical-align:middle}.ag-dato-core .ag-header-cell-sortable .ag-sort-none-icon{opacity:0;transition:opacity .2s}.ag-dato-core .ag-header-cell-sortable:hover .ag-sort-none-icon{opacity:1}.ag-dato-core .sort-icon svg{width:14px;height:16px}.ag-dato-core .filter-icon svg{width:13px}.ag-dato-core .menu-icon svg{width:4px;height:14px}.ag-dato-core .menu-auto-size-icon svg,.ag-dato-core .menu-group-icon,.ag-dato-core .menu-pin-icon,.ag-dato-core .menu-un-group-icon{width:16px;height:16px}.ag-dato-core .menu-check-icon svg{width:15px;height:18px}.ag-dato-core .group-contracted-icon,.ag-dato-core .group-expanded-icon{width:7px}.ag-dato-core .group-expanded-icon{transform:rotate(90deg)}"]
5264
5258
  }),
5265
5259
  __metadata("design:paramtypes", [DatoGridHelper,
5266
5260
  ElementRef,
@@ -9904,6 +9898,34 @@ function getGridModel(gridName) {
9904
9898
  };
9905
9899
  }
9906
9900
 
9901
+ /**
9902
+ * Returns the active sort model using the Column State API introduced as the
9903
+ * replacement for GridApi#getSortModel in AG Grid 24 and required in AG Grid 27.
9904
+ */
9905
+ function getSortModel(columnApi) {
9906
+ const sortIndexes = {};
9907
+ // AG Grid 27: getColumnState() returns undefined before the grid's columns are initialized.
9908
+ // getSortModel() is reached via getCurrentGridSettings()/onFilterSortChanged() on resize/data
9909
+ // events that can fire before that point, so guard against undefined to avoid
9910
+ // "Cannot read properties of undefined (reading 'filter')".
9911
+ const columnState = columnApi.getColumnState() || [];
9912
+ const sortedColumns = columnState.filter(state => state.sort != null);
9913
+ sortedColumns.forEach(columnState => {
9914
+ sortIndexes[columnState.colId] = columnState.sortIndex;
9915
+ });
9916
+ return sortedColumns
9917
+ .map(({ colId, sort }) => ({ colId, sort }))
9918
+ .sort((left, right) => sortIndexes[left.colId] - sortIndexes[right.colId]);
9919
+ }
9920
+ /**
9921
+ * Applies the complete sort model and clears sorting from columns omitted from
9922
+ * the model, matching the behavior of the removed GridApi#setSortModel method.
9923
+ */
9924
+ function applySortModel(columnApi, sortModel = []) {
9925
+ const state = sortModel.map(({ colId, sort }, sortIndex) => ({ colId, sort, sortIndex }));
9926
+ return columnApi.applyColumnState({ state, defaultState: { sort: null } });
9927
+ }
9928
+
9907
9929
  /**
9908
9930
  * @license
9909
9931
  * Copyright Datorama. All Rights Reserved.
@@ -9961,7 +9983,7 @@ let DatoGrid = class DatoGrid extends DatoGridAPI {
9961
9983
  */
9962
9984
  onFilterSortChanged() {
9963
9985
  const filter = this.gridApi.getFilterModel();
9964
- const sort = this.gridApi.getSortModel();
9986
+ const sort = getSortModel(this.columnApi);
9965
9987
  // save grid's configuration
9966
9988
  setGridModel(this.gridName, {
9967
9989
  filter,
@@ -9974,7 +9996,7 @@ let DatoGrid = class DatoGrid extends DatoGridAPI {
9974
9996
  setSavedModel() {
9975
9997
  const { sort, filter } = getGridModel(this.gridName);
9976
9998
  if (sort) {
9977
- this.gridApi.setSortModel(sort);
9999
+ applySortModel(this.columnApi, sort);
9978
10000
  }
9979
10001
  if (filter) {
9980
10002
  this.gridApi.setFilterModel(filter);
@@ -10133,9 +10155,13 @@ let GridQuery = class GridQuery extends Query {
10133
10155
  getCurrentGridSettings() {
10134
10156
  const toColId = column => column.getColId();
10135
10157
  const { columns } = this.api;
10136
- const groupedColumns = columns.getRowGroupColumns();
10137
- const columnsOrder = columns.getAllColumns();
10138
- const allGridColumns = columns.getAllGridColumns();
10158
+ // AG Grid 27: getAllColumns() returns Column[] | null (and the grouped/grid column getters can
10159
+ // likewise be empty) before the grid's columns are initialized. getCurrentGridSettings() is
10160
+ // reached via fitGrid -> updateSettings on window resize, which can fire before that point, so
10161
+ // guard against null to avoid "Cannot read properties of undefined (reading 'filter')".
10162
+ const groupedColumns = columns.getRowGroupColumns() || [];
10163
+ const columnsOrder = columns.getAllColumns() || [];
10164
+ const allGridColumns = columns.getAllGridColumns() || [];
10139
10165
  const hiddenColumns = columnsOrder
10140
10166
  .filter(column => !column.isVisible() && !groupedColumns.includes(column))
10141
10167
  .map(toColId);
@@ -10146,7 +10172,7 @@ let GridQuery = class GridQuery extends Query {
10146
10172
  hiddenColumns,
10147
10173
  groupedColumns: groupedColumns.map(toColId),
10148
10174
  filter: this.getFilter(),
10149
- pinnedColumns: columns.getDisplayedLeftColumns().map(toColId),
10175
+ pinnedColumns: (columns.getDisplayedLeftColumns() || []).map(toColId),
10150
10176
  columnsOrder: allGridColumns.map(toColId),
10151
10177
  columnsSizes: null,
10152
10178
  searchTerm: null
@@ -10157,7 +10183,7 @@ let GridQuery = class GridQuery extends Query {
10157
10183
  return settings;
10158
10184
  }
10159
10185
  getSortModel() {
10160
- return this.api.grid.getSortModel().pop();
10186
+ return getSortModel(this.api.columns).pop();
10161
10187
  }
10162
10188
  getSavedSort() {
10163
10189
  return this.getValue().settings.sort || this.getSortModel();
@@ -11927,6 +11953,9 @@ let DatoGridColumnHeaderComponent = class DatoGridColumnHeaderComponent {
11927
11953
  this.filtersMenuOpen = false;
11928
11954
  }
11929
11955
  afterGuiAttached(params) { }
11956
+ refresh(_params) {
11957
+ return false;
11958
+ }
11930
11959
  agInit(params) {
11931
11960
  this.params = params;
11932
11961
  this.column = params.column;
@@ -12056,13 +12085,12 @@ function getTime$1(val) {
12056
12085
  }
12057
12086
  const ROOT_NODE_ID = 'ROOT_NODE_ID';
12058
12087
  const ɵ0$2 = item => item[gridTreeFilePathKey];
12059
- const defaultTreeOptions = {
12088
+ const defaultTreeOptionsBase = {
12060
12089
  getDataPath: ɵ0$2,
12061
12090
  components: {
12062
12091
  fileCellRenderer: getGridTreeCellRenderer()
12063
12092
  },
12064
12093
  onRowDragMove: onRowDragMove,
12065
- onRowDragEnd: onRowDragEnd,
12066
12094
  onRowSelected: onRowSelected,
12067
12095
  onRowGroupOpened: rowGroupOpened,
12068
12096
  suppressRowClickSelection: true,
@@ -12071,6 +12099,10 @@ const defaultTreeOptions = {
12071
12099
  rowDrag: '<dato-icon icon="drag" class="dato-icon-font-drag primary-400-color"></dato-icon>'
12072
12100
  }
12073
12101
  };
12102
+ function createDefaultTreeOptions(maxDepth = -1) {
12103
+ return Object.assign(Object.assign({}, defaultTreeOptionsBase), { onRowDragEnd: event => onRowDragEnd(event, maxDepth) });
12104
+ }
12105
+ const defaultTreeOptions = createDefaultTreeOptions();
12074
12106
  const ɵ1$2 = (a, b) => (a || '').toLowerCase().localeCompare((b || '').toLowerCase());
12075
12107
  const stringColDef = {
12076
12108
  filter: DatoGridFilterTypes.String,
@@ -12086,7 +12118,27 @@ const defaultGridOptions = Object.assign({
12086
12118
  comparator: (a, b) => getTime$1(a) - getTime$1(b)
12087
12119
  },
12088
12120
  [DatoGridColumnTypes.Number]: {
12089
- filter: DatoGridFilterTypes.Number
12121
+ filter: DatoGridFilterTypes.Number,
12122
+ // AG Grid resolves a column's sort comparator only from its merged colDef.comparator.
12123
+ // Number columns had none, so they fell back to AG Grid's default comparator, which sorts
12124
+ // string-typed values lexicographically ("10" before "2"). Provide an explicit numeric
12125
+ // comparator. Map null/empty/non-numeric to -Infinity so we never return NaN (AG Grid's
12126
+ // sorter skips a NaN result). Ascending-sense only — AG Grid flips the sign for descending.
12127
+ comparator: (a, b) => {
12128
+ const toNum = (v) => {
12129
+ const n = v == null || v === '' ? NaN : Number(v);
12130
+ return isNaN(n) ? -Infinity : n;
12131
+ };
12132
+ const na = toNum(a);
12133
+ const nb = toNum(b);
12134
+ // Compare relationally (not by subtraction): two missing/non-numeric values both map to
12135
+ // -Infinity, and -Infinity - (-Infinity) === NaN, which AG Grid's sorter skips. Returning
12136
+ // 0 / -1 / 1 avoids NaN entirely. Ascending sense — AG Grid flips the sign for descending.
12137
+ if (na === nb) {
12138
+ return 0;
12139
+ }
12140
+ return na < nb ? -1 : 1;
12141
+ }
12090
12142
  },
12091
12143
  [DatoGridColumnTypes.String]: stringColDef,
12092
12144
  [DatoGridColumnTypes.Status]: Object.assign(Object.assign({}, stringColDef), { cellRenderer: 'DatoGridStatusCellComponent' }),
@@ -12094,14 +12146,20 @@ const defaultGridOptions = Object.assign({
12094
12146
  [DatoGridColumnTypes.ItemsCount]: Object.assign(Object.assign({}, stringColDef), { cellRenderer: 'DatoGridItemsCountCellComponent' }),
12095
12147
  [DatoGridColumnTypes.Initials]: Object.assign(Object.assign({}, stringColDef), { cellRenderer: 'DatoGridInitialsCellComponent' }),
12096
12148
  [DatoGridColumnTypes.Avatar]: Object.assign(Object.assign({}, stringColDef), { cellRenderer: 'DatoGridAvatarCellComponent' })
12097
- }, multiSortKey: 'ctrl', suppressPaginationPanel: true, pagination: true, paginateChildRows: true, deltaColumnMode: true, loadingOverlayComponentFramework: DatoGridV2LoaderComponent, noRowsOverlayComponentFramework: DatoGridV2NoDataOverlayComponent, defaultColDef: {
12149
+ }, multiSortKey: 'ctrl', suppressPaginationPanel: true, pagination: true, paginateChildRows: true,
12150
+ // deltaColumnMode removed: deprecated in AG Grid 27, delta column updates are the default now.
12151
+ loadingOverlayComponentFramework: DatoGridV2LoaderComponent, noRowsOverlayComponentFramework: DatoGridV2NoDataOverlayComponent, defaultColDef: {
12098
12152
  minWidth: GridMinWidths.Default,
12099
12153
  sortable: true,
12100
12154
  resizable: true,
12101
12155
  type: DatoGridColumnTypes.String,
12102
12156
  menuTabs: ['filterMenuTab'],
12103
12157
  headerComponentFramework: DatoGridColumnHeaderComponent
12104
- }, suppressCellSelection: true, suppressPropertyNamesCheck: true, rowHeight: 35, headerHeight: 30, rowSelection: GridRowSelectionType.MULTIPLE, rowDeselection: true, unSortIcon: true, animateRows: true, rememberGroupStateWhenNewData: true, groupMultiAutoColumn: true, groupDefaultExpanded: -1, usePivotGridStyle: false, disabledHTMLRenderingFields: [] }, (isTestEnv() ? { suppressColumnVirtualisation: true, rowBuffer: 99999 } : {}));
12158
+ }, suppressCellFocus: true, suppressPropertyNamesCheck: true, rowHeight: 35, headerHeight: 30, rowSelection: GridRowSelectionType.MULTIPLE,
12159
+ // rowDeselection removed: true by default in AG Grid 27 (suppress with suppressRowDeselection).
12160
+ unSortIcon: true, animateRows: true,
12161
+ // rememberGroupStateWhenNewData removed: no-op since AG Grid 24 (transaction updates keep group state).
12162
+ groupDisplayType: 'multipleColumns', groupDefaultExpanded: -1, usePivotGridStyle: false, disabledHTMLRenderingFields: [] }, (isTestEnv() ? { suppressColumnVirtualisation: true, rowBuffer: 99999 } : {}));
12105
12163
  const DEFAULT_GRID_SEARCH_DEBOUNCE_TIME = {
12106
12164
  CLIENT: 200,
12107
12165
  SERVER: 250
@@ -12189,7 +12247,10 @@ function getCellByRowID(rowID) {
12189
12247
  * relevant css style to it.
12190
12248
  * @param overNode
12191
12249
  */
12192
- function onRowDragMove({ overNode, node }) {
12250
+ function getRootNode(api) {
12251
+ return api.getModel().getRootNode();
12252
+ }
12253
+ function onRowDragMove({ overNode, node, api }) {
12193
12254
  let folderToDropInto;
12194
12255
  if (overNode) {
12195
12256
  // folder to drop into is where we are going to move the file/folder to
@@ -12200,7 +12261,7 @@ function onRowDragMove({ overNode, node }) {
12200
12261
  overNode.parent;
12201
12262
  }
12202
12263
  else {
12203
- folderToDropInto = node.rowModel.rootNode;
12264
+ folderToDropInto = getRootNode(api);
12204
12265
  }
12205
12266
  if (potentialParent) {
12206
12267
  if (potentialParent.id === folderToDropInto.id) {
@@ -12221,7 +12282,7 @@ function onRowDragMove({ overNode, node }) {
12221
12282
  folderToDropIntoElement && folderToDropIntoElement.classList.add(agRowHoverClassName);
12222
12283
  }
12223
12284
  }
12224
- function onRowDragEnd({ overNode, node }) {
12285
+ function onRowDragEnd({ overNode, node, api }, maxDepth) {
12225
12286
  let nodeParent;
12226
12287
  let folderToDropInto;
12227
12288
  if (overNode) {
@@ -12234,17 +12295,16 @@ function onRowDragEnd({ overNode, node }) {
12234
12295
  overNode.parent;
12235
12296
  }
12236
12297
  else {
12237
- nodeParent = node.rowModel.rootNode;
12238
- folderToDropInto = node.rowModel.rootNode;
12298
+ nodeParent = getRootNode(api);
12299
+ folderToDropInto = getRootNode(api);
12239
12300
  }
12240
12301
  // the data we want to move
12241
12302
  const movingData = node.data;
12242
- const treeMaxDepth = node.gridOptionsWrapper.gridOptions.maxDepth || -1;
12243
12303
  // Disable nested drag when tree depth is above the limit
12244
12304
  if (movingData.isFolder &&
12245
- treeMaxDepth !== -1 &&
12305
+ maxDepth !== -1 &&
12246
12306
  nodeParent.id !== ROOT_NODE_ID &&
12247
- overNode.data.agGridFilePath.length > treeMaxDepth) {
12307
+ overNode.data.agGridFilePath.length > maxDepth) {
12248
12308
  return;
12249
12309
  }
12250
12310
  // take new parent path from parent, if data is missing, means it's the root node,
@@ -12438,6 +12498,9 @@ let DatoGridMultiSelectColumnHeaderComponent = class DatoGridMultiSelectColumnHe
12438
12498
  this.toggleMultiSelection(isSelectAll);
12439
12499
  });
12440
12500
  }
12501
+ refresh(_params) {
12502
+ return false;
12503
+ }
12441
12504
  subscribeRowsSelectionData() {
12442
12505
  this.gridQuery.gridReady$
12443
12506
  .pipe(take(1), switchMap(() => this.gridQuery.rowsSelectionData$), untilDestroyed(this))
@@ -12748,8 +12811,21 @@ let GridService = class GridService {
12748
12811
  gridOptions.enableSearchHighlight) {
12749
12812
  normalized.cellRenderer = (params) => {
12750
12813
  const allowHTML = isHtmlAllowedForCol(gridOptions, params.colDef);
12751
- const isEditable = (isFunction(normalized.editable) && normalized.editable(params)) ||
12752
- (!isFunction(normalized.editable) && normalized.editable);
12814
+ const { column, colDef } = params;
12815
+ const editableParams = column && colDef
12816
+ ? {
12817
+ api: params.api,
12818
+ columnApi: params.columnApi,
12819
+ context: params.context,
12820
+ node: params.node,
12821
+ data: params.data,
12822
+ column,
12823
+ colDef
12824
+ }
12825
+ : null;
12826
+ const isEditable = isFunction(normalized.editable)
12827
+ ? editableParams && normalized.editable(editableParams)
12828
+ : normalized.editable;
12753
12829
  return isEditable
12754
12830
  ? editableCellRendererWithSearchHighlight(params, this.gridQuery.getSearchTerm(), allowHTML)
12755
12831
  : searchHighlightCellRenderer(params, this.gridQuery.getSearchTerm(), allowHTML);
@@ -12918,7 +12994,7 @@ let GridService = class GridService {
12918
12994
  }
12919
12995
  }
12920
12996
  this.updateSettings({ sort: sortToApply });
12921
- this.api.grid.setSortModel([sortToApply]);
12997
+ applySortModel(this.api.columns, [sortToApply]);
12922
12998
  if (this.gridRef.gridOptions.usePivotGridStyle) {
12923
12999
  this.api.grid.redrawRows();
12924
13000
  }
@@ -13145,7 +13221,7 @@ let GridService = class GridService {
13145
13221
  columns.setColumnsVisible(removeGrouped, true);
13146
13222
  /* Apply sort */
13147
13223
  const gridSort = sort || this.initialSettings.sort;
13148
- grid.setSortModel(gridSort ? [gridSort] : null);
13224
+ applySortModel(columns, gridSort ? [gridSort] : []);
13149
13225
  /* Align grid */
13150
13226
  if (gridAlignment === 2 /* CUSTOM */) {
13151
13227
  /* Set column sizes */
@@ -13630,10 +13706,9 @@ const pallete = {
13630
13706
  * found in the LICENSE file at https://github.com/datorama/client-core/blob/master/LICENSE
13631
13707
  */
13632
13708
  let DatoGridOnHoverComponent = class DatoGridOnHoverComponent {
13633
- constructor(host, gridService, gridQuery, cdr) {
13709
+ constructor(host, gridService, cdr) {
13634
13710
  this.host = host;
13635
13711
  this.gridService = gridService;
13636
- this.gridQuery = gridQuery;
13637
13712
  this.cdr = cdr;
13638
13713
  this.displayedActions = [];
13639
13714
  this.setBgColorBound = this.setBackgroundColor.bind(this);
@@ -13664,13 +13739,22 @@ let DatoGridOnHoverComponent = class DatoGridOnHoverComponent {
13664
13739
  });
13665
13740
  }
13666
13741
  openActionMenu(event) {
13667
- /* Hack to open the ag grid context menu */
13668
- /* https://github.com/ag-grid/ag-grid-enterprise/issues/72 */
13669
- const { rowIndex, node, column, value } = this.params;
13670
- const cell = this.gridQuery.api.grid.rowRenderer.rowCompsByIndex[rowIndex].getRenderedCellForColumn(column);
13671
13742
  /* The actions menu is different from the regular menu, we use the grid's context to signal that this is the actions menu*/
13672
13743
  this.gridService.updateGridContext({ contextMenu: { fromOnHover: true } });
13673
- cell.beans.contextMenuFactory.showMenu(node, column, value, event);
13744
+ const target = this.params.event && this.params.event.target;
13745
+ if (!(target instanceof Element)) {
13746
+ return;
13747
+ }
13748
+ const cell = target.closest('.ag-cell');
13749
+ if (!cell) {
13750
+ return;
13751
+ }
13752
+ cell.dispatchEvent(new MouseEvent('contextmenu', {
13753
+ bubbles: true,
13754
+ cancelable: true,
13755
+ clientX: event.clientX,
13756
+ clientY: event.clientY
13757
+ }));
13674
13758
  }
13675
13759
  updateScrollPos(left) {
13676
13760
  const cellBorder = 1;
@@ -13721,7 +13805,6 @@ let DatoGridOnHoverComponent = class DatoGridOnHoverComponent {
13721
13805
  DatoGridOnHoverComponent.ctorParameters = () => [
13722
13806
  { type: ElementRef },
13723
13807
  { type: GridService },
13724
- { type: GridQuery },
13725
13808
  { type: ChangeDetectorRef }
13726
13809
  ];
13727
13810
  DatoGridOnHoverComponent = __decorate([
@@ -13731,10 +13814,7 @@ DatoGridOnHoverComponent = __decorate([
13731
13814
  changeDetection: ChangeDetectionStrategy.OnPush,
13732
13815
  styles: [":host{display:flex;justify-content:flex-end;align-content:center;align-items:center;position:absolute;max-width:150px;transition:opacity .3s ease-in-out;opacity:0}:host .gradient{min-width:20px}"]
13733
13816
  }),
13734
- __metadata("design:paramtypes", [ElementRef,
13735
- GridService,
13736
- GridQuery,
13737
- ChangeDetectorRef])
13817
+ __metadata("design:paramtypes", [ElementRef, GridService, ChangeDetectorRef])
13738
13818
  ], DatoGridOnHoverComponent);
13739
13819
 
13740
13820
  let DatoHotkeysHelpComponent = class DatoHotkeysHelpComponent {
@@ -13880,14 +13960,26 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
13880
13960
  this.gridActions = [];
13881
13961
  this.gridReady$ = this.gridQuery.gridReady$;
13882
13962
  this.contentInit = new Subject();
13963
+ // ngx-take-until-destroy patches ngOnDestroy on the instance, which Ivy never calls (it uses the
13964
+ // prototype hook), so listeners outlived the grid and hit the destroyed AG Grid API.
13965
+ this.destroy$ = new Subject();
13966
+ this.hasGridOptions = new BehaviorSubject(false);
13967
+ this.agGridReady = new ReplaySubject(1);
13883
13968
  this.gridElements = {
13884
13969
  centerViewport: null,
13885
13970
  centerContainer: null,
13886
13971
  bodyViewport: null
13887
13972
  };
13888
13973
  this.treeGridClass = 'tree';
13974
+ this.hasGridOptions$ = this.hasGridOptions.asObservable();
13889
13975
  }
13890
13976
  set gridOptions(gridOptions) {
13977
+ // The [gridOptions] binding can resolve to undefined during the host's initial change-detection
13978
+ // pass (before the consumer computes its options). Ignore it instead of throwing
13979
+ // "Cannot read properties of undefined" from initGridOptions() and aborting the view render.
13980
+ if (!gridOptions) {
13981
+ return;
13982
+ }
13891
13983
  this._gridOptions = this.gridService.initGridOptions(gridOptions);
13892
13984
  this.gridService.treeData = gridOptions.treeData;
13893
13985
  this.gridService.isPivotMode = gridOptions.pivotMode;
@@ -13899,16 +13991,33 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
13899
13991
  this.agGridEl.classList.add(this.treeGridClass);
13900
13992
  }
13901
13993
  }
13994
+ !this.hasGridOptions.value && this.hasGridOptions.next(true);
13902
13995
  }
13903
13996
  get gridOptions() {
13904
13997
  return this._gridOptions;
13905
13998
  }
13999
+ /* @internal */
14000
+ get agGridOptions() {
14001
+ if (!this._agGridOptions && this._gridOptions) {
14002
+ this.gridOptions = this.normalizeOptions();
14003
+ this._agGridOptions = this.gridOptions;
14004
+ }
14005
+ return this._agGridOptions;
14006
+ }
13906
14007
  ngOnDestroy() {
14008
+ this.destroy$.next();
14009
+ this.destroy$.complete();
13907
14010
  this.contentInit.complete();
14011
+ this.hasGridOptions.complete();
14012
+ this.agGridReady.complete();
13908
14013
  this.clearTooltip();
13909
14014
  this.rowHoverComponent && this.rowHoverComponent.destroy();
13910
14015
  this.rowHoverComponent = null;
13911
14016
  }
14017
+ /* @internal */
14018
+ onAgGridReady(event) {
14019
+ this.agGridReady.next(event);
14020
+ }
13912
14021
  initializeGrid(agGrid, agGridEl) {
13913
14022
  if (!this.contentInit.isStopped) {
13914
14023
  this._initializeGrid(agGrid, agGridEl);
@@ -13922,11 +14031,13 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
13922
14031
  this.contentInit
13923
14032
  .asObservable()
13924
14033
  .pipe(switchMap(() => {
13925
- this.gridOptions = this.normalizeOptions();
13926
- agGrid.gridOptions = this.gridOptions;
14034
+ // Already normalized when dato-grid-v2 bound them to <ag-grid-angular [gridOptions]>.
14035
+ if (!this.agGridOptions) {
14036
+ return EMPTY;
14037
+ }
13927
14038
  const settingsLoader = this.gridOptions.saveSettings === false ? of(null) : this.storageAPI.get(this.gridOptions.gridName);
13928
- return combineLatest([agGrid.gridReady, settingsLoader]);
13929
- }), untilDestroyed(this))
14039
+ return combineLatest([this.agGridReady, settingsLoader]);
14040
+ }), takeUntil(this.destroy$))
13930
14041
  .subscribe(([{ api, columnApi }, savedSettings = {}]) => {
13931
14042
  if (!this.gridOptions.rowData) {
13932
14043
  api.showLoadingOverlay();
@@ -13960,7 +14071,7 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
13960
14071
  rowActions: this.rowActions
13961
14072
  };
13962
14073
  let normalized = this.gridService.normalizeOptions(params);
13963
- const defaults = Object.assign(Object.assign(Object.assign({}, defaultGridOptions), (this.gridOptions.treeData ? defaultTreeOptions : {})), { icons: this.getGridIcons(), disabledHTMLRenderingFields: normalized.disabledHTMLRenderingFields || defaultGridOptions.disabledHTMLRenderingFields });
14074
+ const defaults = Object.assign(Object.assign(Object.assign({}, defaultGridOptions), (this.gridOptions.treeData ? createDefaultTreeOptions(this.gridOptions.maxDepth) : {})), { icons: this.getGridIcons(), disabledHTMLRenderingFields: normalized.disabledHTMLRenderingFields || defaultGridOptions.disabledHTMLRenderingFields });
13964
14075
  return deepmerge(defaults, normalized);
13965
14076
  }
13966
14077
  setGridRows(data) {
@@ -13996,7 +14107,7 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
13996
14107
  observable = observable.pipe(filter$1(({ source }) => source === 'uiColumnDragged'), tap(() => this.updateOnHoverPos()));
13997
14108
  }
13998
14109
  observable
13999
- .pipe(auditTime(100), filter$1(({ finished, source }) => finished && source === 'uiColumnDragged'), untilDestroyed(this))
14110
+ .pipe(auditTime(100), filter$1(({ finished, source }) => finished && source === 'uiColumnDragged'), takeUntil(this.destroy$))
14000
14111
  .subscribe(e => {
14001
14112
  const [column] = e.columns;
14002
14113
  let columnsSizes = Object.assign({}, this.gridQuery.getColumnSizes());
@@ -14014,7 +14125,7 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
14014
14125
  merge$1(columnVisible, sortChanged, columnRowGroupChanged, columnPinned, dragStopped, filterChanged)
14015
14126
  .pipe(
14016
14127
  /* Skip the initial sorting event fired by the grid when adding rows */
14017
- skip(1), untilDestroyed(this))
14128
+ skip(1), takeUntil(this.destroy$))
14018
14129
  .subscribe(({ type }) => {
14019
14130
  const settingsDiff = this.gridService.getSettingsDiff();
14020
14131
  this.gridService.updateSettings(settingsDiff);
@@ -14030,7 +14141,7 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
14030
14141
  listenToStoreSettingsChanges() {
14031
14142
  this.gridQuery
14032
14143
  .select(state => state.settings)
14033
- .pipe(skip(1), debounceTime(1000), untilDestroyed(this))
14144
+ .pipe(skip(1), debounceTime(1000), takeUntil(this.destroy$))
14034
14145
  .subscribe(() => {
14035
14146
  const settingsDiff = this.gridService.getSettingsDiff();
14036
14147
  this.gridService.saveSettingsToServer(settingsDiff);
@@ -14055,14 +14166,14 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
14055
14166
  return columns.length === 0
14056
14167
  ? EMPTY
14057
14168
  : agGrid.cellClicked.pipe(filter$1(({ value, node }) => value !== undefined && node.group === true));
14058
- }), untilDestroyed(this))
14169
+ }), takeUntil(this.destroy$))
14059
14170
  .subscribe(({ node }) => {
14060
14171
  node.setExpanded(!node.expanded);
14061
14172
  });
14062
14173
  /* When closing a grouped row we want to hide the on hover actions */
14063
14174
  if (this.onHoverEnabled()) {
14064
14175
  agGrid.rowGroupOpened
14065
- .pipe(filter$1(({ node }) => node.expanded === false), untilDestroyed(this))
14176
+ .pipe(filter$1(({ node }) => node.expanded === false), takeUntil(this.destroy$))
14066
14177
  .subscribe(() => {
14067
14178
  this.lastHoveredRow = null;
14068
14179
  this.setOnHoverState(false);
@@ -14077,7 +14188,7 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
14077
14188
  fromEvent(bodyViewport, 'click')
14078
14189
  .pipe(filter$1((event) => {
14079
14190
  return (event.target === bodyViewport || event.target === centerViewport) && api.getSelectedRows().length > 0;
14080
- }), untilDestroyed(this))
14191
+ }), takeUntil(this.destroy$))
14081
14192
  .subscribe(() => api.deselectAll());
14082
14193
  }
14083
14194
  onHoverEnabled() {
@@ -14089,7 +14200,7 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
14089
14200
  const onHoverEnabled = this.onHoverEnabled();
14090
14201
  if (onHoverEnabled) {
14091
14202
  fromEvent(centerContainer, 'mouseleave')
14092
- .pipe(untilDestroyed(this))
14203
+ .pipe(takeUntil(this.destroy$))
14093
14204
  .subscribe(() => {
14094
14205
  this.toggleRowHoverClass(this.lastHoveredRow);
14095
14206
  this.lastHoveredRow = null;
@@ -14097,13 +14208,13 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
14097
14208
  lastHoveredCell = null;
14098
14209
  });
14099
14210
  merge$1(agGrid.bodyScroll.pipe(filter$1(({ direction }) => direction === 'horizontal')), agGrid.rowDataChanged)
14100
- .pipe(untilDestroyed(this))
14211
+ .pipe(takeUntil(this.destroy$))
14101
14212
  .subscribe(() => {
14102
14213
  this.updateOnHoverPos();
14103
14214
  });
14104
14215
  this.addOnHoverElement();
14105
14216
  }
14106
- agGrid.cellMouseOver.pipe(untilDestroyed(this)).subscribe((event) => {
14217
+ agGrid.cellMouseOver.pipe(takeUntil(this.destroy$)).subscribe((event) => {
14107
14218
  const { node, column } = event;
14108
14219
  if (lastHoveredCell === `${node.id}-${column.getColId()}`) {
14109
14220
  clearTimeout(this.cellMouseOutTimer);
@@ -14120,12 +14231,12 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
14120
14231
  }
14121
14232
  });
14122
14233
  const onTooltipOut = merge$1(fromEvent(bodyViewport, 'scroll'), fromEvent(this.agGridEl, 'mouseleave'));
14123
- onTooltipOut.pipe(untilDestroyed(this)).subscribe(() => {
14234
+ onTooltipOut.pipe(takeUntil(this.destroy$)).subscribe(() => {
14124
14235
  lastHoveredCell = null;
14125
14236
  this.clearTooltip();
14126
14237
  });
14127
14238
  agGrid.cellMouseOut
14128
- .pipe(filter$1(() => !isNil(this.tooltip)), untilDestroyed(this))
14239
+ .pipe(filter$1(() => !isNil(this.tooltip)), takeUntil(this.destroy$))
14129
14240
  .subscribe(() => {
14130
14241
  this.cellMouseOutTimer = window.setTimeout(() => this.clearTooltip());
14131
14242
  });
@@ -14142,9 +14253,13 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
14142
14253
  if (cell.tagName === 'SPAN' && cell.scrollWidth === 0) {
14143
14254
  cell = cell.parentElement;
14144
14255
  }
14145
- if (event.colDef.editable) {
14256
+ if (event.colDef.editable && cell) {
14146
14257
  cell = cell.querySelector('.value-wrapper') || cell;
14147
14258
  }
14259
+ // AG Grid 27 can fire cellMouseOver for an element that was already detached by a re-render.
14260
+ if (!cell) {
14261
+ return;
14262
+ }
14148
14263
  const textOverflow = cell.offsetWidth < cell.scrollWidth;
14149
14264
  if (textOverflow) {
14150
14265
  clearTimeout(this.cellMouseOutTimer);
@@ -14220,14 +14335,14 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
14220
14335
  keys: 'meta.a',
14221
14336
  ignoreInEditable: true
14222
14337
  })
14223
- .pipe(untilDestroyed(this))
14338
+ .pipe(takeUntil(this.destroy$))
14224
14339
  .subscribe(() => {
14225
14340
  this.gridService.selectAllCurrentPageRows();
14226
14341
  });
14227
14342
  }
14228
14343
  registerWindowResizeListener() {
14229
14344
  fromEvent(window, 'resize')
14230
- .pipe(debounceTime(100), filter$1(() => this.gridQuery.gridAlignment !== 2 /* CUSTOM */), untilDestroyed(this))
14345
+ .pipe(debounceTime(100), filter$1(() => this.gridQuery.gridAlignment !== 2 /* CUSTOM */), takeUntil(this.destroy$))
14231
14346
  .subscribe(() => {
14232
14347
  const fitTo = this.gridQuery.gridAlignment === 0 /* FIT_TO_CONTAINER */ ? 'container' : 'content';
14233
14348
  this.gridService.fitGrid(fitTo);
@@ -14247,7 +14362,7 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
14247
14362
  const events$ = this.gridQuery.isServerSide
14248
14363
  ? merge$1(agGrid.sortChanged, agGrid.filterChanged)
14249
14364
  : agGrid.filterChanged;
14250
- events$.pipe(untilDestroyed(this)).subscribe(() => {
14365
+ events$.pipe(takeUntil(this.destroy$)).subscribe(() => {
14251
14366
  this.gridService.deselectAllRows();
14252
14367
  });
14253
14368
  }
@@ -14255,7 +14370,7 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
14255
14370
  if (!this.gridQuery.isServerSide) {
14256
14371
  return;
14257
14372
  }
14258
- agGrid.paginationChanged.pipe(untilDestroyed(this)).subscribe(() => {
14373
+ agGrid.paginationChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {
14259
14374
  if (this.gridQuery.isServerSelectAllRowsEnabled) {
14260
14375
  this.gridService.selectAllCurrentPageRows(true, true);
14261
14376
  }
@@ -14328,6 +14443,7 @@ let DatoGridV2Component = class DatoGridV2Component {
14328
14443
  constructor(controller, host) {
14329
14444
  this.controller = controller;
14330
14445
  this.host = host;
14446
+ this.hasGridOptions$ = this.controller.hasGridOptions$;
14331
14447
  }
14332
14448
  set grid(agGrid) {
14333
14449
  if (agGrid) {
@@ -14335,6 +14451,9 @@ let DatoGridV2Component = class DatoGridV2Component {
14335
14451
  this.controller.initializeGrid(agGrid, agGridEl);
14336
14452
  }
14337
14453
  }
14454
+ get agGridOptions() {
14455
+ return this.controller.agGridOptions;
14456
+ }
14338
14457
  get gridOptions() {
14339
14458
  return this.controller ? this.controller.gridOptions : null;
14340
14459
  }
@@ -14347,6 +14466,9 @@ let DatoGridV2Component = class DatoGridV2Component {
14347
14466
  get isPivotStyle() {
14348
14467
  return this.gridOptions && this.gridOptions.usePivotGridStyle;
14349
14468
  }
14469
+ onGridReady(event) {
14470
+ this.controller.onAgGridReady(event);
14471
+ }
14350
14472
  };
14351
14473
  DatoGridV2Component.ctorParameters = () => [
14352
14474
  { type: DatoGridControllerComponent },
@@ -14360,10 +14482,10 @@ __decorate([
14360
14482
  DatoGridV2Component = __decorate([
14361
14483
  Component({
14362
14484
  selector: 'dato-grid-v2',
14363
- template: "<ag-grid-angular data-auto-id=\"grid\" class=\"dato-grid ag-theme-material\" [class.has-background]=\"enableBackground\" [class.enable-v2_1]=\"enableV2_1\"\n [class.with-multi-selection-col]=\"gridOptions?.showMultiSelectionCheckboxes\" [class.pivot-style]=\"isPivotStyle\">\n</ag-grid-angular>\n<dato-grid-pagination-v2 [class.has-background]=\"enableBackground\"></dato-grid-pagination-v2>\n",
14485
+ template: "<ag-grid-angular *ngIf=\"hasGridOptions$ | async\" [gridOptions]=\"agGridOptions\" (gridReady)=\"onGridReady($event)\"\n data-auto-id=\"grid\" class=\"dato-grid ag-theme-material\" [class.has-background]=\"enableBackground\" [class.enable-v2_1]=\"enableV2_1\"\n [class.with-multi-selection-col]=\"gridOptions?.showMultiSelectionCheckboxes\" [class.pivot-style]=\"isPivotStyle\">\n</ag-grid-angular>\n<dato-grid-pagination-v2 [class.has-background]=\"enableBackground\"></dato-grid-pagination-v2>\n",
14364
14486
  changeDetection: ChangeDetectionStrategy.OnPush,
14365
14487
  encapsulation: ViewEncapsulation.None,
14366
- styles: ["dato-grid-v2{flex-grow:1;display:flex;flex-direction:column;position:relative}dato-grid-v2 .dato-grid,dato-grid-v2 dato-grid-pagination-v2{position:absolute;left:0;right:0;bottom:0}dato-grid-v2 .dato-grid{top:0;bottom:50px}dato-grid-v2 .grid-hover-actions{position:absolute;z-index:2;transition:opacity .2s ease-in-out}dato-grid-v2 .ag-row-drag{width:initial!important;min-width:auto!important}dato-grid-v2 .da-grid-icon{display:inline-block;line-height:31px;vertical-align:middle;width:initial;height:initial}dato-grid-v2 .da-grid-icon.drag{width:14px;height:14px;margin-right:6px;opacity:0;transition:opacity .3s;transform:translateY(-50%)}dato-grid-v2 .da-grid-icon.folder{width:18px;height:35px;margin:0 8px}dato-grid-v2 .ag-row.ag-row-hover .da-grid-icon.drag{opacity:1}dato-grid-v2 ag-grid-angular.tree .ag-group-contracted,dato-grid-v2 ag-grid-angular.tree .ag-group-expanded{display:inline-block;width:18px;text-align:center}dato-grid-v2 ag-grid-angular.tree .ag-group-checkbox{display:none}dato-grid-v2 ag-grid-angular.tree .ag-row.ag-empty-folder .folder{margin-left:26px}dato-grid-v2 ag-grid-angular.tree .ag-row.ag-row-level-1 .ag-cell-wrapper .ag-row-drag{padding-right:calc(55px * 1)}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-row-group-indent-1{margin-left:0!important;padding-left:0!important}dato-grid-v2 ag-grid-angular.tree .ag-row.ag-row-level-2 .ag-cell-wrapper .ag-row-drag{padding-right:calc(55px * 2)}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-row-group-indent-2{margin-left:0!important;padding-left:0!important}dato-grid-v2 ag-grid-angular.tree .ag-row.ag-row-level-3 .ag-cell-wrapper .ag-row-drag{padding-right:calc(55px * 3)}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-row-group-indent-3{margin-left:0!important;padding-left:0!important}dato-grid-v2 ag-grid-angular.tree .ag-row.ag-row-level-4 .ag-cell-wrapper .ag-row-drag{padding-right:calc(55px * 4)}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-row-group-indent-4{margin-left:0!important;padding-left:0!important}dato-grid-v2 ag-grid-angular.tree .ag-row div[col-id=ag-Grid-AutoColumn]{padding-left:0}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-cell{display:flex;align-items:center}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-cell .ag-group-value>span{display:inline-block;vertical-align:middle}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-cell .initials{border-radius:50%;padding:4px;margin-right:8px;margin-left:20px;width:28px;height:28px;display:inline-block;text-align:center}dato-grid-v2 ag-grid-angular.tree .ag-row-group-leaf-indent{margin-left:0!important}dato-grid-v2 ag-grid-angular.tree .ag-selection-checkbox .ag-icon-checkbox-indeterminate:before{text-align:center;content:'-';display:inline-block;position:absolute;top:0;left:0;right:0;bottom:0;line-height:.5;color:#fff}dato-grid-v2 ag-grid-angular.row-height-35 .ag-cell{line-height:33px}dato-grid-v2 ag-grid-angular.row-height-35 .ag-cell.dato-editable-cell{line-height:29px}dato-grid-v2 ag-grid-angular.row-height-35 .ag-cell.ag-cell-inline-editing{height:35px}dato-grid-v2 ag-grid-angular.row-height-44 .ag-cell{line-height:42px}dato-grid-v2 ag-grid-angular.row-height-44 .ag-cell.dato-editable-cell{line-height:38px}dato-grid-v2 ag-grid-angular.row-height-44 .ag-cell.ag-cell-inline-editing{height:44px}dato-grid-v2 ag-grid-angular.row-height-50 .ag-cell{line-height:48px}dato-grid-v2 ag-grid-angular.row-height-50 .ag-cell.dato-editable-cell{line-height:44px}dato-grid-v2 ag-grid-angular.row-height-50 .ag-cell.ag-cell-inline-editing{height:50px}dato-grid-v2 ag-grid-angular.row-height-59 .ag-cell{line-height:57px}dato-grid-v2 ag-grid-angular.row-height-59 .ag-cell.dato-editable-cell{line-height:53px}dato-grid-v2 ag-grid-angular.row-height-59 .ag-cell.ag-cell-inline-editing{height:59px}dato-grid-v2 ag-grid-angular .ag-cell.checkbox-selection-cell{display:flex;padding-right:0}dato-grid-v2 .ag-menu .da-grid-icon svg{vertical-align:middle}dato-grid-v2 .ag-header-cell-sortable .ag-sort-none-icon{opacity:0;transition:opacity .2s}dato-grid-v2 .ag-header-cell-sortable:hover .ag-sort-none-icon{opacity:1}dato-grid-v2 .group-contracted-icon,dato-grid-v2 .group-expanded-icon{width:7px}dato-grid-v2 .group-expanded-icon{transform:rotate(90deg)}dato-grid-v2 .dato-grid .ag-cell{border-top:0;border-bottom:0}dato-grid-v2 .ag-overlay-wrapper ng-component{display:flex}.ag-dnd-ghost{min-width:100px;border:none;display:flex;justify-content:flex-start;align-content:center;align-items:center;cursor:-webkit-grabbing;cursor:grabbing;z-index:10000000}.ag-dnd-ghost .da-grid-icon.column-move-hide svg{height:18px;width:18px}.ag-dnd-ghost .da-grid-icon.column-move svg,.ag-dnd-ghost .da-grid-icon.column-move-pin svg{height:16px;width:16px}"]
14488
+ styles: ["dato-grid-v2{flex-grow:1;display:flex;flex-direction:column;position:relative}dato-grid-v2 .dato-grid,dato-grid-v2 dato-grid-pagination-v2{position:absolute;left:0;right:0;bottom:0}dato-grid-v2 .dato-grid{top:0;bottom:50px}dato-grid-v2 .grid-hover-actions{position:absolute;z-index:2;transition:opacity .2s ease-in-out}dato-grid-v2 .ag-row-drag{width:initial!important;min-width:auto!important}dato-grid-v2 .da-grid-icon{display:inline-block;line-height:31px;vertical-align:middle;width:initial;height:initial}dato-grid-v2 .da-grid-icon.drag{width:14px;height:14px;margin-right:6px;opacity:0;transition:opacity .3s;transform:translateY(-50%)}dato-grid-v2 .da-grid-icon.folder{width:18px;height:35px;margin:0 8px}dato-grid-v2 .ag-row.ag-row-hover .da-grid-icon.drag{opacity:1}dato-grid-v2 ag-grid-angular.tree .ag-group-contracted,dato-grid-v2 ag-grid-angular.tree .ag-group-expanded{display:inline-block;width:18px;text-align:center}dato-grid-v2 ag-grid-angular.tree .ag-group-checkbox{display:none}dato-grid-v2 ag-grid-angular.tree .ag-row.ag-empty-folder .folder{margin-left:26px}dato-grid-v2 ag-grid-angular.tree .ag-row.ag-row-level-1 .ag-cell-wrapper .ag-row-drag{padding-right:calc(55px * 1)}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-row-group-indent-1{margin-left:0!important;padding-left:0!important}dato-grid-v2 ag-grid-angular.tree .ag-row.ag-row-level-2 .ag-cell-wrapper .ag-row-drag{padding-right:calc(55px * 2)}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-row-group-indent-2{margin-left:0!important;padding-left:0!important}dato-grid-v2 ag-grid-angular.tree .ag-row.ag-row-level-3 .ag-cell-wrapper .ag-row-drag{padding-right:calc(55px * 3)}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-row-group-indent-3{margin-left:0!important;padding-left:0!important}dato-grid-v2 ag-grid-angular.tree .ag-row.ag-row-level-4 .ag-cell-wrapper .ag-row-drag{padding-right:calc(55px * 4)}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-row-group-indent-4{margin-left:0!important;padding-left:0!important}dato-grid-v2 ag-grid-angular.tree .ag-row div[col-id=ag-Grid-AutoColumn]{padding-left:0}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-cell{display:flex;align-items:center}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-cell .ag-group-value>span{display:inline-block;vertical-align:middle}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-cell .initials{border-radius:50%;padding:4px;margin-right:8px;margin-left:20px;width:28px;height:28px;display:inline-block;text-align:center}dato-grid-v2 ag-grid-angular.tree .ag-row-group-leaf-indent{margin-left:0!important}dato-grid-v2 ag-grid-angular.tree .ag-selection-checkbox .ag-checkbox-input-wrapper.ag-indeterminate:before{text-align:center;content:\"-\";display:inline-block;position:absolute;top:0;left:0;right:0;bottom:0;line-height:.5;color:#fff}dato-grid-v2 ag-grid-angular.row-height-35 .ag-cell{line-height:33px}dato-grid-v2 ag-grid-angular.row-height-35 .ag-cell.dato-editable-cell{line-height:29px}dato-grid-v2 ag-grid-angular.row-height-35 .ag-cell.ag-cell-inline-editing{height:35px}dato-grid-v2 ag-grid-angular.row-height-44 .ag-cell{line-height:42px}dato-grid-v2 ag-grid-angular.row-height-44 .ag-cell.dato-editable-cell{line-height:38px}dato-grid-v2 ag-grid-angular.row-height-44 .ag-cell.ag-cell-inline-editing{height:44px}dato-grid-v2 ag-grid-angular.row-height-50 .ag-cell{line-height:48px}dato-grid-v2 ag-grid-angular.row-height-50 .ag-cell.dato-editable-cell{line-height:44px}dato-grid-v2 ag-grid-angular.row-height-50 .ag-cell.ag-cell-inline-editing{height:50px}dato-grid-v2 ag-grid-angular.row-height-59 .ag-cell{line-height:57px}dato-grid-v2 ag-grid-angular.row-height-59 .ag-cell.dato-editable-cell{line-height:53px}dato-grid-v2 ag-grid-angular.row-height-59 .ag-cell.ag-cell-inline-editing{height:59px}dato-grid-v2 ag-grid-angular .ag-cell.checkbox-selection-cell{display:flex;padding-right:0}dato-grid-v2 .ag-menu .da-grid-icon svg{vertical-align:middle}dato-grid-v2 .ag-header-cell-sortable .ag-sort-none-icon{opacity:0;transition:opacity .2s}dato-grid-v2 .ag-header-cell-sortable:hover .ag-sort-none-icon{opacity:1}dato-grid-v2 .group-contracted-icon,dato-grid-v2 .group-expanded-icon{width:7px}dato-grid-v2 .group-expanded-icon{transform:rotate(90deg)}dato-grid-v2 .dato-grid .ag-cell{border-top:0;border-bottom:0}dato-grid-v2 .ag-overlay-wrapper ng-component{display:flex}.ag-dnd-ghost{min-width:100px;border:none;display:flex;justify-content:flex-start;align-content:center;align-items:center;cursor:-webkit-grabbing;cursor:grabbing;z-index:10000000}.ag-dnd-ghost .da-grid-icon.column-move-hide svg{height:18px;width:18px}.ag-dnd-ghost .da-grid-icon.column-move svg,.ag-dnd-ghost .da-grid-icon.column-move-pin svg{height:16px;width:16px}"]
14367
14489
  }),
14368
14490
  __metadata("design:paramtypes", [DatoGridControllerComponent, ElementRef])
14369
14491
  ], DatoGridV2Component);
@@ -14545,7 +14667,8 @@ let DatoGridHeaderV2Component = class DatoGridHeaderV2Component {
14545
14667
  this.displayRowCount = true;
14546
14668
  }
14547
14669
  get enableBackground() {
14548
- return this.controller.gridOptions.enableBackground;
14670
+ const { gridOptions } = this.controller;
14671
+ return gridOptions ? gridOptions.enableBackground : false;
14549
14672
  }
14550
14673
  ngOnInit() {
14551
14674
  this.rowCount$ = this.gridQuery.gridReady$.pipe(switchMap(() => this.rowsCount()));
@@ -14987,6 +15110,7 @@ let DatoGridV2ToolbarComponent = class DatoGridV2ToolbarComponent {
14987
15110
  this.gridService = gridService;
14988
15111
  this.MAX_VISIBLE_ROW_ACTIONS = 5;
14989
15112
  this.MAX_VISIBLE_GRID_ACTIONS = 2;
15113
+ this.destroy$ = new Subject();
14990
15114
  this._maxRowActions = this.MAX_VISIBLE_ROW_ACTIONS;
14991
15115
  this.displayExport = true;
14992
15116
  this.rowActions = { mainList: [], moreMenu: [] };
@@ -15019,13 +15143,16 @@ let DatoGridV2ToolbarComponent = class DatoGridV2ToolbarComponent {
15019
15143
  }
15020
15144
  }
15021
15145
  get enableV2_1() {
15022
- return this.gridController.gridOptions.enableV2_1;
15146
+ const { gridOptions } = this.gridController;
15147
+ return gridOptions ? gridOptions.enableV2_1 : false;
15023
15148
  }
15024
15149
  get enableSearch() {
15025
- return this.gridController.gridOptions.enableSearch;
15150
+ const { gridOptions } = this.gridController;
15151
+ return gridOptions ? gridOptions.enableSearch : false;
15026
15152
  }
15027
15153
  get enableBackground() {
15028
- return this.gridController.gridOptions.enableBackground;
15154
+ const { gridOptions } = this.gridController;
15155
+ return gridOptions ? gridOptions.enableBackground : false;
15029
15156
  }
15030
15157
  get isRowActionsVisible() {
15031
15158
  return !this.enableV2_1 || (this.enableV2_1 && this.isSelectedRow);
@@ -15043,16 +15170,16 @@ let DatoGridV2ToolbarComponent = class DatoGridV2ToolbarComponent {
15043
15170
  return this.gridController.gridQuery.api;
15044
15171
  }
15045
15172
  ngOnInit() {
15046
- const dataChanges = this.gridController.gridQuery.waitForGrid(() => merge$1(this.gridQuery.gridRef.cellValueChanged, this.gridQuery.gridRef.rowDataUpdated, this.gridQuery.rowActionVisibilityChanged$).pipe(debounceTime(100), untilDestroyed(this)));
15173
+ const dataChanges = this.gridController.gridQuery.waitForGrid(() => merge$1(this.gridQuery.gridRef.cellValueChanged, this.gridQuery.gridRef.rowDataUpdated, this.gridQuery.rowActionVisibilityChanged$).pipe(debounceTime(100), takeUntil(this.destroy$)));
15047
15174
  const gridInit = this.gridQuery.gridReady$.pipe(take(1));
15048
- gridInit.pipe(untilDestroyed(this)).subscribe(() => {
15175
+ gridInit.pipe(takeUntil(this.destroy$)).subscribe(() => {
15049
15176
  this.groupsAllowed = !this.hideGrouping && !this.gridQuery.getValue().serverSidePagination.enabled;
15050
15177
  });
15051
15178
  this.initGridActions();
15052
15179
  const selectedRowsChanged$ = this.gridQuery.selectedRowsChange$;
15053
15180
  const isSelectAllRowsChanged$ = this.gridQuery.selectIsSelectAllRowsEnabled();
15054
15181
  merge$1(dataChanges, gridInit, selectedRowsChanged$, isSelectAllRowsChanged$)
15055
- .pipe(filter$1(() => !!this.api), untilDestroyed(this))
15182
+ .pipe(filter$1(() => !!this.api), takeUntil(this.destroy$))
15056
15183
  .subscribe(() => {
15057
15184
  this.resolveVisibleActions();
15058
15185
  this.cdr.detectChanges();
@@ -15186,7 +15313,7 @@ let DatoGridV2ToolbarComponent = class DatoGridV2ToolbarComponent {
15186
15313
  processCellCallback: ({ column, value }) => {
15187
15314
  const formatter = column.getColDef().valueFormatter;
15188
15315
  // TODO: followup: https://ag-grid.zendesk.com/hc/en-us/requests/10963?page=1
15189
- return formatter ? formatter({ value }) : value;
15316
+ return isFunction(formatter) ? formatter({ value }) : value;
15190
15317
  }
15191
15318
  });
15192
15319
  }
@@ -15214,7 +15341,7 @@ let DatoGridV2ToolbarComponent = class DatoGridV2ToolbarComponent {
15214
15341
  const waitForAnimation = this.hasGroups ? 0 : 200;
15215
15342
  /** When changing the tables grouping all the rows are automatically expanded, we need to update the icon state */
15216
15343
  const expandSubscription = this.gridQuery.gridRef.columnRowGroupChanged
15217
- .pipe(take(1), untilDestroyed(this))
15344
+ .pipe(take(1), takeUntil(this.destroy$))
15218
15345
  .subscribe(() => {
15219
15346
  this.rowGroupsCollapsed = false;
15220
15347
  this.cdr.detectChanges();
@@ -15231,7 +15358,7 @@ let DatoGridV2ToolbarComponent = class DatoGridV2ToolbarComponent {
15231
15358
  gridService: this.gridService
15232
15359
  }
15233
15360
  })
15234
- .pipe(untilDestroyed(this))
15361
+ .pipe(takeUntil(this.destroy$))
15235
15362
  .subscribe(() => {
15236
15363
  expandSubscription.unsubscribe();
15237
15364
  this.openMenus.group = false;
@@ -15248,7 +15375,10 @@ let DatoGridV2ToolbarComponent = class DatoGridV2ToolbarComponent {
15248
15375
  clearSelectedRows() {
15249
15376
  this.gridService.deselectAllRows();
15250
15377
  }
15251
- ngOnDestroy() { }
15378
+ ngOnDestroy() {
15379
+ this.destroy$.next();
15380
+ this.destroy$.complete();
15381
+ }
15252
15382
  getCollapseState({ node, api }) {
15253
15383
  let collapsed = true;
15254
15384
  if (node.rowGroupIndex === 0) {
@@ -15264,7 +15394,7 @@ let DatoGridV2ToolbarComponent = class DatoGridV2ToolbarComponent {
15264
15394
  /** Listen to adding or removing row groups from the columns and not the groups menu */
15265
15395
  this.gridQuery
15266
15396
  .waitForGrid(() => this.gridQuery.gridRef.columnRowGroupChanged)
15267
- .pipe(filter$1(() => !this.openMenus.group), untilDestroyed(this))
15397
+ .pipe(filter$1(() => !this.openMenus.group), takeUntil(this.destroy$))
15268
15398
  .subscribe(() => {
15269
15399
  this.rowGroupsCollapsed = false;
15270
15400
  this.cdr.detectChanges();
@@ -15272,7 +15402,7 @@ let DatoGridV2ToolbarComponent = class DatoGridV2ToolbarComponent {
15272
15402
  /** Listen to row collapse state to update the icon */
15273
15403
  this.gridQuery
15274
15404
  .waitForGrid(() => this.gridQuery.gridRef.rowGroupOpened)
15275
- .pipe(untilDestroyed(this))
15405
+ .pipe(takeUntil(this.destroy$))
15276
15406
  .subscribe((event) => {
15277
15407
  const collapsed = this.getCollapseState(event);
15278
15408
  if (collapsed !== this.rowGroupsCollapsed) {
@@ -15283,7 +15413,7 @@ let DatoGridV2ToolbarComponent = class DatoGridV2ToolbarComponent {
15283
15413
  }
15284
15414
  subscribeRowsSelectionData() {
15285
15415
  this.gridQuery.rowsSelectionData$
15286
- .pipe(untilDestroyed(this))
15416
+ .pipe(takeUntil(this.destroy$))
15287
15417
  .subscribe(({ totalRowsCount, selectedRowsCount, selectedPageRowsCount, isAllPageRowsSelected }) => {
15288
15418
  this.totalRowsCount = totalRowsCount;
15289
15419
  this.selectedRowsCount = selectedRowsCount;
@@ -18710,7 +18840,7 @@ DatoRadioComponent = __decorate([
18710
18840
  changeDetection: ChangeDetectionStrategy.OnPush,
18711
18841
  exportAs: 'datoRadio',
18712
18842
  providers: [valueAccessor$8],
18713
- styles: [":host{display:block}.dato-radio{margin:.5rem;display:inline-block}.dato-radio label{cursor:pointer}.dato-radio input[type=radio]{position:absolute;opacity:0;min-width:10px!important;max-width:10px!important}.dato-radio input[type=radio]+.radio-label:before{content:'';border-radius:100%;display:inline-block;box-sizing:border-box;min-width:16px;width:16px;height:16px;position:relative;top:1px;margin-right:10px;vertical-align:middle;cursor:pointer;text-align:center;transition:250ms}.dato-radio input[type=radio]:focus+.radio-label:before{outline:0}.dato-radio input[type=radio]+.radio-label:empty:before{margin-right:0}"]
18843
+ styles: [":host{display:block}.dato-radio{margin:.5rem;display:inline-block}.dato-radio label{cursor:pointer}.dato-radio input[type=radio]{position:absolute;opacity:0;min-width:10px!important;max-width:10px!important}.dato-radio input[type=radio]+.radio-label:before{content:\"\";border-radius:100%;display:inline-block;box-sizing:border-box;min-width:16px;width:16px;height:16px;position:relative;top:1px;margin-right:10px;vertical-align:middle;cursor:pointer;text-align:center;transition:250ms}.dato-radio input[type=radio]:focus+.radio-label:before{outline:0}.dato-radio input[type=radio]+.radio-label:empty:before{margin-right:0}"]
18714
18844
  }),
18715
18845
  __metadata("design:paramtypes", [Renderer2, ChangeDetectorRef, ElementRef])
18716
18846
  ], DatoRadioComponent);
@@ -22928,7 +23058,7 @@ function fixNgLeaks() {
22928
23058
  };
22929
23059
  }
22930
23060
 
22931
- window.coreVersion = '22.14.1';
23061
+ window.coreVersion = '22.15.2';
22932
23062
 
22933
23063
  /**
22934
23064
  * @license
@@ -22942,5 +23072,5 @@ window.coreVersion = '22.14.1';
22942
23072
  * Generated bundle index. Do not edit.
22943
23073
  */
22944
23074
 
22945
- export { APP_TRANSLATE, AceService, BaseCustomControl, COMPARE_RESULT, CUSTOM_RANGE_ID, ColorPalette, ConfirmationType, ContentRef, ContentType, CustomHeaderControllerService, DATE_PICKER_CONFIG, DATE_PICKER_POPOVER_ID, DATO_CORE_LOGGER, DATO_FORM_ERRORS, DATO_GRID_STORAGE_API, DEFAULT_FORMAT, DEFAULT_GRID_SEARCH_DEBOUNCE_TIME, DatePickerConfig, DatePickerMonthComponent, DateType, DatoAccordionComponent, DatoAccordionContentComponent, DatoAccordionGroupComponent, DatoAccordionHeaderComponent, DatoAccordionModule, DatoAceDirective, DatoAceDraggableDirective, DatoAceModule, DatoActionType, DatoAutoCompleteContentDirective, DatoAutoFocusDirective, DatoAutocompleteComponent, DatoAutocompleteDirective, DatoAutocompleteModule, DatoBreadcrumbsComponent, DatoBreadcrumbsModule, DatoButtonComponent, DatoButtonGroupComponent, DatoButtonGroupModule, DatoButtonModule, DatoCamelCasePipe, DatoCarouselComponent, DatoCarouselItemDirective, DatoCarouselItemElement, DatoCarouselModule, DatoCheckboxComponent, DatoCheckboxModule, DatoClipboardDirective, DatoColorDirective, DatoConfirmationDialogComponent, DatoControlErrorComponent, DatoControlErrorContainerDirective, DatoControlErrorsDirective, DatoCoreError, DatoCoreModule, DatoCustomHeaderTemplateComponent, DatoCustomHeaderTemplateDirective, DatoCustomMoreMenuTemplateDirective, DatoDatePickerContainerComponent, DatoDatePickerModule, DatoDatePickerRangeComponent, DatoDatePickerSingleComponent, DatoDialog, DatoDialogCloseDirective, DatoDialogComponent, DatoDialogContentComponent, DatoDialogDismissDirective, DatoDialogFooterComponent, DatoDialogHeaderComponent, DatoDialogModule, DatoDialogRef, DatoDirectivesModule, DatoDisableControlDirective, DatoDraggableDirective, DatoDynamicContentComponent, DatoDynamicContentModule, DatoEditableHeaderComponent, DatoEditableHeaderModule, DatoFileInputComponent, DatoFileInputDefaultComponent, DatoFileInputModule, DatoFilterConditions, DatoFontDirective, DatoFontIconComponent, DatoFontIconModule, DatoFormSubmitDirective, DatoFormValidationModule, DatoGrid, DatoGridAPI, DatoGridAvatarCellComponent, DatoGridColumnDisplayMenuComponent, DatoGridColumnHeaderComponent, DatoGridColumnHeaderMoreMenuComponent, DatoGridColumnTypes, DatoGridComponent, DatoGridControllerComponent, DatoGridDateFilterOptions, DatoGridFilterComponent, DatoGridFilterOptionsMap, DatoGridFilterSections, DatoGridFilterTypes, DatoGridGroupsMenuComponent, DatoGridHeaderComponent, DatoGridHeaderV2Component, DatoGridInitialsCellComponent, DatoGridItemsCellComponent, DatoGridModule, DatoGridMoreMenuActions, DatoGridNumberFilterOptions, DatoGridOnHoverComponent, DatoGridPaginationComponent, DatoGridPaginationV2Component, DatoGridStatusCellComponent, DatoGridStringFilterOptions, DatoGridToolbarComponent, DatoGridToolbarItemDirective, DatoGridToolbarItemElementDirective, DatoGridV2Component, DatoGridV2LoaderComponent, DatoGridV2Module, DatoGridV2NoDataOverlayComponent, DatoGridV2ToolbarButtonComponent, DatoGridV2ToolbarComponent, DatoGroupComponent, DatoHighlightPipe, DatoHotkeys, DatoHotkeysDirective, DatoHotkeysHelpComponent, DatoHotkeysModule, DatoIconButtonComponent, DatoIconButtonModule, DatoIconComponent, DatoIconModule, DatoInfiniteScrollComponent, DatoInfiniteScrollModule, DatoInputComponent, DatoInputModule, DatoInputNumberComponent, DatoInputNumberDirective, DatoInputNumberModule, DatoKebabCasePipe, DatoLinkButtonComponent, DatoLinkButtonModule, DatoListComponent, DatoListModule, DatoListNoDataComponent, DatoListNoResultComponent, DatoListV2Component, DatoListV2Module, DatoLoaderComponent, DatoLoadersModule, DatoMenuComponent, DatoMenuContentDirective, DatoMenuItemDirective, DatoMenuModule, DatoMenuTriggerForDirective, DatoMultiOptionComponent, DatoMultiOptionV2Component, DatoOperatorTogglerComponent, DatoOperatorTogglerModule, DatoOptionComponent, DatoOptionV2Component, DatoOptionsModule, DatoOriginDirective, DatoOverlay, DatoPageLoaderComponent, DatoPanel, DatoPanelComponent, DatoPanelContentComponent, DatoPanelFooterComponent, DatoPanelHeaderComponent, DatoPanelInternalConfig, DatoPanelModule, DatoPanelRef, DatoPillsComponent, DatoPillsModule, DatoPipesModule, DatoPopover, DatoPopoverComponent, DatoPopoverModule, DatoProgressBarComponent, DatoProgressBarModule, DatoRadioComponent, DatoRadioModule, DatoRichTextDirective, DatoRichTextModule, DatoSearchResultsGroupSortPipe, DatoSearchResultsSortPipe, DatoSearchableContainerComponent, DatoSearchableDirective, DatoSearchableHighlightDirective, DatoSearchableModule, DatoSelectActiveDirective, DatoSelectComponent, DatoSelectEmptyComponent, DatoSelectModule, DatoShortNumberPipe, DatoSliderComponent, DatoSliderModule, DatoSnackbar, DatoSnackbarComponent, DatoSnackbarModule, DatoSortableComponent, DatoSortableHandleDirective, DatoSortableModule, DatoStaticImageSrcDirective, DatoStaticImagesSrcModule, DatoSubscribeContext, DatoSubscribeDirective, DatoTab, DatoTabContent, DatoTabTitle, DatoTabsModule, DatoTabset, DatoTemplatePortal, DatoTextModule, DatoThemesModule, DatoToast, DatoToastComponent, DatoToastModule, DatoTogglerComponent, DatoTogglerModule, DatoTooltipDirective, DatoTooltipV2Directive, DatoTrackByPropPipe, DatoTranslateService, DatoTreePipe, DatoTriggerMulti, DatoTriggerSingle, DialogConfig, DialogResultStatus, Dimensions, EventModifiersPlugin, GridActionType, GridMinWidths, GridRowSelectionType, GridStatusColumnTypes, GridToolbarService, ISO_FORMAT, IconRegistry, KeyCodes, KeyboardEventKeys, ListValueTypes, MockService, OperatorTypes, POPPER_BOUNDARY, PaletteDirective, PanelResultCloseTrigger, PillType, PopoverCloseDirective, PopoverContentDirective, PopoverRef, PopoverTrigger, ROOT_NODE_ID, RelativeDateType, RenderMethod, RowSelectionType, RowSelectionTypeV2, SELECT_MAX_HEIGHT, SUPPORTED_LOCALES, SelectType, SnackbarRef, SnackbarType, Store, SvgRegistry, ToolbarActionType, ToolbarArea, ToolbarConfirmation, ToolbarDeleteConfirmation, ToolbarHandler, TranslatePipe, Types, _valueChanges, a, addClass, addJSObjectCompletor, allowedFileTypes, alphabeticalGroupSort, alphabeticalSort, appendChild, appendScript, appendStyle, appendToBody, assertString, camelCase, capitalize, cloneDeep, closest, coerceArray, coerceElement, compareWith, compose, convertFromTreeData, convertToTreeData, createComponent, createElement, createGUID, createHTMLCompletor, curry, dateCompare, daysOfTheMonth, debounce, declarations$2 as declarations, deepEqual, deepmerge, defaultActions$1 as defaultActions, defaultConfig, defaultEditableColumnRenderer, defaultGridOptions, defaultGridTreeLabel, defaultOptionsDisplayLimit, defaultTreeOptions, dialogSizePreset, diff, difference, differenceBy, dimensionsChanges, directives, drop, editableCellRendererWithSearchHighlight, escape, escapeRegExp, filter, filterByControlValue, filterByTerm, filterDialogDismissed, filterDialogSuccess, filterGroupByControlValue, filterGroupByTerm, filterKey, find, findIndex, findKey, fixNgLeaks, forEach, formatKeys, generateMonths, get, getAttr, getCustomRange, getDateISOString, getDefaultConfirmationOptions, getDefaultOptions, getDefaultsToastOptions, getElementCoords, getFunctionName, getGridConfiguration, getGridModel, getInitials, getLocalizedFormat, getMultiTemplate, getOptionTemplate, getPopperDefaults, getUTCDate, getVisibleActions, gridTreeFilePathKey, groupBy, groupSortOrder, has, inView, intersection, invert, isArrayValuesEqual, isArrowUpDown, isBoolean, isEmpty, isEmptyString, isEnter, isEqual, isEscape, isFraction, isFunction, isMacintosh, isNil, isNumber, isObject, isRangeCondition, isRangeCustom, isString, isTestEnv, isValidMediaLink, kebabCase, keyBy, keysSymbols, last, map, mapKeys, mapValues, maxFileSize, merge, minBy, mockInDev, mocks, ngContentResolver, noop, normalizeData, omit, omitBy, optionalDebounce, pallete, parseDateString, partial, polling, prependChild, publicApi$1 as publicApi, query, queryAll, random, rawDiff, readFromClipboard, reject, relativeDateTypes, removeClass, resolveRange, round, searchHighlightCellRenderer, searchResultsGroupSort, searchResultsSort, setAttr, setAttribute, setDimensions, setGridConfiguration, setGridModel, setMaxDimensions, setMinDimensions, setStyle, setStyles, shortNumber, size, sortBy, stubs, supportedLocales, tapLog, tapOnce, throttle, toBoolean, toFormData, toNumber, toResponseBody, toString, toggleClass, toolbarActionToContextAction, tryParsePivotValue, unescape, union, uniq, uniqBy, uploadProgress, validBase64Image, validUrl, validateCondition, validateDate, validateDateCondition, validateFilter, validateNumberCondition, validateRange, validateStringCondition, values, workerMap, writeToClipboard, zoneStable, ɵ0$2 as ɵ0, ɵ1$2 as ɵ1, ɵ2, DATO_CORE_CONFIG as ɵb, DatoGridHelper as ɵc, Popper as ɵd, GridQuery as ɵe, GridStore as ɵf, GridService as ɵg, DatoDateRangesFilterPipe as ɵh, ListStore as ɵi, DatoListSelectAllComponent as ɵj, DatoGridMultiSelectColumnHeaderComponent as ɵk, DatoGridItemsCountCellComponent as ɵl, DatoGridV2ToolbarMoreMenuComponent as ɵm, DatoGridSearchBarComponent as ɵn };
23075
+ export { APP_TRANSLATE, AceService, BaseCustomControl, COMPARE_RESULT, CUSTOM_RANGE_ID, ColorPalette, ConfirmationType, ContentRef, ContentType, CustomHeaderControllerService, DATE_PICKER_CONFIG, DATE_PICKER_POPOVER_ID, DATO_CORE_LOGGER, DATO_FORM_ERRORS, DATO_GRID_STORAGE_API, DEFAULT_FORMAT, DEFAULT_GRID_SEARCH_DEBOUNCE_TIME, DatePickerConfig, DatePickerMonthComponent, DateType, DatoAccordionComponent, DatoAccordionContentComponent, DatoAccordionGroupComponent, DatoAccordionHeaderComponent, DatoAccordionModule, DatoAceDirective, DatoAceDraggableDirective, DatoAceModule, DatoActionType, DatoAutoCompleteContentDirective, DatoAutoFocusDirective, DatoAutocompleteComponent, DatoAutocompleteDirective, DatoAutocompleteModule, DatoBreadcrumbsComponent, DatoBreadcrumbsModule, DatoButtonComponent, DatoButtonGroupComponent, DatoButtonGroupModule, DatoButtonModule, DatoCamelCasePipe, DatoCarouselComponent, DatoCarouselItemDirective, DatoCarouselItemElement, DatoCarouselModule, DatoCheckboxComponent, DatoCheckboxModule, DatoClipboardDirective, DatoColorDirective, DatoConfirmationDialogComponent, DatoControlErrorComponent, DatoControlErrorContainerDirective, DatoControlErrorsDirective, DatoCoreError, DatoCoreModule, DatoCustomHeaderTemplateComponent, DatoCustomHeaderTemplateDirective, DatoCustomMoreMenuTemplateDirective, DatoDatePickerContainerComponent, DatoDatePickerModule, DatoDatePickerRangeComponent, DatoDatePickerSingleComponent, DatoDialog, DatoDialogCloseDirective, DatoDialogComponent, DatoDialogContentComponent, DatoDialogDismissDirective, DatoDialogFooterComponent, DatoDialogHeaderComponent, DatoDialogModule, DatoDialogRef, DatoDirectivesModule, DatoDisableControlDirective, DatoDraggableDirective, DatoDynamicContentComponent, DatoDynamicContentModule, DatoEditableHeaderComponent, DatoEditableHeaderModule, DatoFileInputComponent, DatoFileInputDefaultComponent, DatoFileInputModule, DatoFilterConditions, DatoFontDirective, DatoFontIconComponent, DatoFontIconModule, DatoFormSubmitDirective, DatoFormValidationModule, DatoGrid, DatoGridAPI, DatoGridAvatarCellComponent, DatoGridColumnDisplayMenuComponent, DatoGridColumnHeaderComponent, DatoGridColumnHeaderMoreMenuComponent, DatoGridColumnTypes, DatoGridComponent, DatoGridControllerComponent, DatoGridDateFilterOptions, DatoGridFilterComponent, DatoGridFilterOptionsMap, DatoGridFilterSections, DatoGridFilterTypes, DatoGridGroupsMenuComponent, DatoGridHeaderComponent, DatoGridHeaderV2Component, DatoGridInitialsCellComponent, DatoGridItemsCellComponent, DatoGridModule, DatoGridMoreMenuActions, DatoGridNumberFilterOptions, DatoGridOnHoverComponent, DatoGridPaginationComponent, DatoGridPaginationV2Component, DatoGridStatusCellComponent, DatoGridStringFilterOptions, DatoGridToolbarComponent, DatoGridToolbarItemDirective, DatoGridToolbarItemElementDirective, DatoGridV2Component, DatoGridV2LoaderComponent, DatoGridV2Module, DatoGridV2NoDataOverlayComponent, DatoGridV2ToolbarButtonComponent, DatoGridV2ToolbarComponent, DatoGroupComponent, DatoHighlightPipe, DatoHotkeys, DatoHotkeysDirective, DatoHotkeysHelpComponent, DatoHotkeysModule, DatoIconButtonComponent, DatoIconButtonModule, DatoIconComponent, DatoIconModule, DatoInfiniteScrollComponent, DatoInfiniteScrollModule, DatoInputComponent, DatoInputModule, DatoInputNumberComponent, DatoInputNumberDirective, DatoInputNumberModule, DatoKebabCasePipe, DatoLinkButtonComponent, DatoLinkButtonModule, DatoListComponent, DatoListModule, DatoListNoDataComponent, DatoListNoResultComponent, DatoListV2Component, DatoListV2Module, DatoLoaderComponent, DatoLoadersModule, DatoMenuComponent, DatoMenuContentDirective, DatoMenuItemDirective, DatoMenuModule, DatoMenuTriggerForDirective, DatoMultiOptionComponent, DatoMultiOptionV2Component, DatoOperatorTogglerComponent, DatoOperatorTogglerModule, DatoOptionComponent, DatoOptionV2Component, DatoOptionsModule, DatoOriginDirective, DatoOverlay, DatoPageLoaderComponent, DatoPanel, DatoPanelComponent, DatoPanelContentComponent, DatoPanelFooterComponent, DatoPanelHeaderComponent, DatoPanelInternalConfig, DatoPanelModule, DatoPanelRef, DatoPillsComponent, DatoPillsModule, DatoPipesModule, DatoPopover, DatoPopoverComponent, DatoPopoverModule, DatoProgressBarComponent, DatoProgressBarModule, DatoRadioComponent, DatoRadioModule, DatoRichTextDirective, DatoRichTextModule, DatoSearchResultsGroupSortPipe, DatoSearchResultsSortPipe, DatoSearchableContainerComponent, DatoSearchableDirective, DatoSearchableHighlightDirective, DatoSearchableModule, DatoSelectActiveDirective, DatoSelectComponent, DatoSelectEmptyComponent, DatoSelectModule, DatoShortNumberPipe, DatoSliderComponent, DatoSliderModule, DatoSnackbar, DatoSnackbarComponent, DatoSnackbarModule, DatoSortableComponent, DatoSortableHandleDirective, DatoSortableModule, DatoStaticImageSrcDirective, DatoStaticImagesSrcModule, DatoSubscribeContext, DatoSubscribeDirective, DatoTab, DatoTabContent, DatoTabTitle, DatoTabsModule, DatoTabset, DatoTemplatePortal, DatoTextModule, DatoThemesModule, DatoToast, DatoToastComponent, DatoToastModule, DatoTogglerComponent, DatoTogglerModule, DatoTooltipDirective, DatoTooltipV2Directive, DatoTrackByPropPipe, DatoTranslateService, DatoTreePipe, DatoTriggerMulti, DatoTriggerSingle, DialogConfig, DialogResultStatus, Dimensions, EventModifiersPlugin, GridActionType, GridMinWidths, GridRowSelectionType, GridStatusColumnTypes, GridToolbarService, ISO_FORMAT, IconRegistry, KeyCodes, KeyboardEventKeys, ListValueTypes, MockService, OperatorTypes, POPPER_BOUNDARY, PaletteDirective, PanelResultCloseTrigger, PillType, PopoverCloseDirective, PopoverContentDirective, PopoverRef, PopoverTrigger, ROOT_NODE_ID, RelativeDateType, RenderMethod, RowSelectionType, RowSelectionTypeV2, SELECT_MAX_HEIGHT, SUPPORTED_LOCALES, SelectType, SnackbarRef, SnackbarType, Store, SvgRegistry, ToolbarActionType, ToolbarArea, ToolbarConfirmation, ToolbarDeleteConfirmation, ToolbarHandler, TranslatePipe, Types, _valueChanges, a, addClass, addJSObjectCompletor, allowedFileTypes, alphabeticalGroupSort, alphabeticalSort, appendChild, appendScript, appendStyle, appendToBody, assertString, camelCase, capitalize, cloneDeep, closest, coerceArray, coerceElement, compareWith, compose, convertFromTreeData, convertToTreeData, createComponent, createDefaultTreeOptions, createElement, createGUID, createHTMLCompletor, curry, dateCompare, daysOfTheMonth, debounce, declarations$2 as declarations, deepEqual, deepmerge, defaultActions$1 as defaultActions, defaultConfig, defaultEditableColumnRenderer, defaultGridOptions, defaultGridTreeLabel, defaultOptionsDisplayLimit, defaultTreeOptions, dialogSizePreset, diff, difference, differenceBy, dimensionsChanges, directives, drop, editableCellRendererWithSearchHighlight, escape, escapeRegExp, filter, filterByControlValue, filterByTerm, filterDialogDismissed, filterDialogSuccess, filterGroupByControlValue, filterGroupByTerm, filterKey, find, findIndex, findKey, fixNgLeaks, forEach, formatKeys, generateMonths, get, getAttr, getCustomRange, getDateISOString, getDefaultConfirmationOptions, getDefaultOptions, getDefaultsToastOptions, getElementCoords, getFunctionName, getGridConfiguration, getGridModel, getInitials, getLocalizedFormat, getMultiTemplate, getOptionTemplate, getPopperDefaults, getUTCDate, getVisibleActions, gridTreeFilePathKey, groupBy, groupSortOrder, has, inView, intersection, invert, isArrayValuesEqual, isArrowUpDown, isBoolean, isEmpty, isEmptyString, isEnter, isEqual, isEscape, isFraction, isFunction, isMacintosh, isNil, isNumber, isObject, isRangeCondition, isRangeCustom, isString, isTestEnv, isValidMediaLink, kebabCase, keyBy, keysSymbols, last, map, mapKeys, mapValues, maxFileSize, merge, minBy, mockInDev, mocks, ngContentResolver, noop, normalizeData, omit, omitBy, optionalDebounce, pallete, parseDateString, partial, polling, prependChild, publicApi$1 as publicApi, query, queryAll, random, rawDiff, readFromClipboard, reject, relativeDateTypes, removeClass, resolveRange, round, searchHighlightCellRenderer, searchResultsGroupSort, searchResultsSort, setAttr, setAttribute, setDimensions, setGridConfiguration, setGridModel, setMaxDimensions, setMinDimensions, setStyle, setStyles, shortNumber, size, sortBy, stubs, supportedLocales, tapLog, tapOnce, throttle, toBoolean, toFormData, toNumber, toResponseBody, toString, toggleClass, toolbarActionToContextAction, tryParsePivotValue, unescape, union, uniq, uniqBy, uploadProgress, validBase64Image, validUrl, validateCondition, validateDate, validateDateCondition, validateFilter, validateNumberCondition, validateRange, validateStringCondition, values, workerMap, writeToClipboard, zoneStable, ɵ0$2 as ɵ0, ɵ1$2 as ɵ1, ɵ2, DATO_CORE_CONFIG as ɵb, DatoGridHelper as ɵc, Popper as ɵd, GridQuery as ɵe, GridStore as ɵf, GridService as ɵg, DatoDateRangesFilterPipe as ɵh, ListStore as ɵi, DatoListSelectAllComponent as ɵj, DatoGridMultiSelectColumnHeaderComponent as ɵk, DatoGridItemsCountCellComponent as ɵl, DatoGridV2ToolbarMoreMenuComponent as ɵm, DatoGridSearchBarComponent as ɵn };
22946
23076
  //# sourceMappingURL=datorama-core.js.map