@datorama/core 21.3.1-rc.5 → 21.4.0-rc.11

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 (58) hide show
  1. package/bundle.scss +94 -2
  2. package/bundles/datorama-core.umd.js +314 -32
  3. package/bundles/datorama-core.umd.js.map +1 -1
  4. package/bundles/datorama-core.umd.min.js +58 -58
  5. package/bundles/datorama-core.umd.min.js.map +1 -1
  6. package/datorama-core.metadata.json +1 -1
  7. package/esm2015/lib/grid-v2/grid/grid-v2.component.js +5 -2
  8. package/esm2015/lib/grid-v2/grid/grid-v2.types.js +1 -1
  9. package/esm2015/lib/grid-v2/grid-column-header/grid-column-header.component.js +8 -7
  10. package/esm2015/lib/grid-v2/grid-controller/grid-controller.component.js +14 -1
  11. package/esm2015/lib/grid-v2/grid-filter/filter-validator.js +21 -3
  12. package/esm2015/lib/grid-v2/grid-filter/grid-filter.component.js +37 -7
  13. package/esm2015/lib/grid-v2/grid-filter/grid-filter.types.js +1 -1
  14. package/esm2015/lib/grid-v2/grid-pagination/grid-pagination.component.js +16 -3
  15. package/esm2015/lib/grid-v2/grid-store/grid.query.js +48 -4
  16. package/esm2015/lib/grid-v2/grid-store/grid.service.js +102 -6
  17. package/esm2015/lib/grid-v2/grid-store/grid.store.types.js +1 -1
  18. package/esm2015/lib/grid-v2/grid-store/public_api.js +2 -0
  19. package/esm2015/lib/grid-v2/grid-store/util.js +20 -1
  20. package/esm2015/lib/grid-v2/public_api.js +2 -2
  21. package/esm2015/lib/icon/icon.types.js +1 -1
  22. package/esm2015/lib/utils/array.js +10 -1
  23. package/esm5/lib/grid-v2/grid/grid-v2.component.js +9 -2
  24. package/esm5/lib/grid-v2/grid/grid-v2.types.js +1 -1
  25. package/esm5/lib/grid-v2/grid-column-header/grid-column-header.component.js +8 -11
  26. package/esm5/lib/grid-v2/grid-controller/grid-controller.component.js +14 -1
  27. package/esm5/lib/grid-v2/grid-filter/filter-validator.js +23 -4
  28. package/esm5/lib/grid-v2/grid-filter/grid-filter.component.js +43 -7
  29. package/esm5/lib/grid-v2/grid-filter/grid-filter.types.js +1 -1
  30. package/esm5/lib/grid-v2/grid-pagination/grid-pagination.component.js +16 -3
  31. package/esm5/lib/grid-v2/grid-store/grid.query.js +48 -4
  32. package/esm5/lib/grid-v2/grid-store/grid.service.js +139 -12
  33. package/esm5/lib/grid-v2/grid-store/grid.store.types.js +1 -1
  34. package/esm5/lib/grid-v2/grid-store/public_api.js +2 -0
  35. package/esm5/lib/grid-v2/grid-store/util.js +20 -1
  36. package/esm5/lib/grid-v2/public_api.js +2 -2
  37. package/esm5/lib/icon/icon.types.js +1 -1
  38. package/esm5/lib/utils/array.js +12 -1
  39. package/fesm2015/datorama-core.js +263 -23
  40. package/fesm2015/datorama-core.js.map +1 -1
  41. package/fesm5/datorama-core.js +313 -33
  42. package/fesm5/datorama-core.js.map +1 -1
  43. package/i18n/locale-en_US.json +2 -1
  44. package/lib/grid-v2/grid/grid-v2.component.d.ts +1 -0
  45. package/lib/grid-v2/grid/grid-v2.types.d.ts +2 -0
  46. package/lib/grid-v2/grid-column-header/grid-column-header.component.d.ts +0 -2
  47. package/lib/grid-v2/grid-controller/grid-controller.component.d.ts +6 -1
  48. package/lib/grid-v2/grid-filter/grid-filter.component.d.ts +6 -0
  49. package/lib/grid-v2/grid-filter/grid-filter.types.d.ts +9 -0
  50. package/lib/grid-v2/grid-pagination/grid-pagination.component.d.ts +4 -0
  51. package/lib/grid-v2/grid-store/grid.query.d.ts +8 -2
  52. package/lib/grid-v2/grid-store/grid.service.d.ts +13 -3
  53. package/lib/grid-v2/grid-store/grid.store.types.d.ts +4 -0
  54. package/lib/grid-v2/grid-store/public_api.d.ts +2 -0
  55. package/lib/grid-v2/grid-store/util.d.ts +9 -1
  56. package/lib/grid-v2/public_api.d.ts +1 -2
  57. package/lib/utils/array.d.ts +5 -0
  58. package/package.json +2 -2
@@ -1051,6 +1051,15 @@ function drop(array, n = 1) {
1051
1051
  function a(array, n = 1) {
1052
1052
  return array.filter((e, index) => index >= n);
1053
1053
  }
1054
+ /**
1055
+ * Compares 2 array and return whether their inner values are the same,
1056
+ * without considering their order
1057
+ */
1058
+ function isArrayValuesEqual(arrA = [], arrB = []) {
1059
+ const aInb = arrA.every(valA => arrB.find(valB => valB === valA));
1060
+ const bIna = arrB.every(valB => arrA.find(valA => valA === valB));
1061
+ return aInb && bIna && arrA.length === arrB.length;
1062
+ }
1054
1063
 
1055
1064
  function toBoolean(value, includeZero = false) {
1056
1065
  return value != null && `${value}` !== 'false' && ((includeZero && value !== 0) || !includeZero);
@@ -9992,6 +10001,25 @@ function getColumnsSizes(columns, original) {
9992
10001
  return sizeMap;
9993
10002
  }, {});
9994
10003
  }
10004
+ /**
10005
+ * Take pivoted value field if pivot column,
10006
+ * or field of the colDef,
10007
+ * or group field form showRowGroup if its agg column
10008
+ */
10009
+ function getColField(colDef) {
10010
+ const { field, showRowGroup, pivotValueColumn } = colDef;
10011
+ return pivotValueColumn ? pivotValueColumn.getColId() : field || showRowGroup;
10012
+ }
10013
+ function tryParsePivotValue(str) {
10014
+ let value;
10015
+ try {
10016
+ value = JSON.parse(str);
10017
+ }
10018
+ catch (e) {
10019
+ // Do nothing
10020
+ }
10021
+ return value;
10022
+ }
9995
10023
 
9996
10024
  let GridQuery = class GridQuery extends Query {
9997
10025
  constructor(store) {
@@ -10038,7 +10066,7 @@ let GridQuery = class GridQuery extends Query {
10038
10066
  }
10039
10067
  getCurrentGridSettings() {
10040
10068
  const toColId = column => column.getColId();
10041
- const { columns, grid } = this.api;
10069
+ const { columns } = this.api;
10042
10070
  const groupedColumns = columns.getRowGroupColumns();
10043
10071
  const columnsOrder = columns.getAllColumns();
10044
10072
  const allGridColumns = columns.getAllGridColumns();
@@ -10048,7 +10076,7 @@ let GridQuery = class GridQuery extends Query {
10048
10076
  const storeSettings = this.getValue().settings;
10049
10077
  const settings = {
10050
10078
  gridAlignment: storeSettings.gridAlignment,
10051
- sort: grid.getSortModel().pop(),
10079
+ sort: this.getSort(),
10052
10080
  hiddenColumns,
10053
10081
  groupedColumns: groupedColumns.map(toColId),
10054
10082
  filter: this.getFilter(),
@@ -10062,6 +10090,28 @@ let GridQuery = class GridQuery extends Query {
10062
10090
  }
10063
10091
  return settings;
10064
10092
  }
10093
+ getSort() {
10094
+ if (this.gridRef.gridOptions.pivotMode) {
10095
+ const { sort, colId } = this.api.grid.getSortModel().pop() || {};
10096
+ const column = this.api.columns.getColumn(colId);
10097
+ const pivotedColumn = this.getSecondaryColumn(colId);
10098
+ if (pivotedColumn) {
10099
+ const uniquePivotParents = uniq(this.api.columns.getSecondaryColumns().map(column => column.getParent()));
10100
+ const secondaryColumn = this.getSecondaryColumn(pivotedColumn.getColId());
10101
+ const pivotColIndex = uniquePivotParents.indexOf(secondaryColumn.getParent());
10102
+ return { colId: getColField(pivotedColumn.getColDef()), sort, pivotColIndex };
10103
+ }
10104
+ else if (column) {
10105
+ return { colId: getColField(column.getColDef()), sort };
10106
+ }
10107
+ }
10108
+ else {
10109
+ return this.api.grid.getSortModel().pop();
10110
+ }
10111
+ }
10112
+ selectSort() {
10113
+ return this.select(state => state.settings.sort);
10114
+ }
10065
10115
  /* @internal */
10066
10116
  _setApi(api, gridRef) {
10067
10117
  this.api = api;
@@ -10078,6 +10128,20 @@ let GridQuery = class GridQuery extends Query {
10078
10128
  getFilter() {
10079
10129
  return this.getValue().settings.filter;
10080
10130
  }
10131
+ selectFilter() {
10132
+ return this.select(state => state.settings.filter);
10133
+ }
10134
+ filterChanged() {
10135
+ return this.selectFilter().pipe(map$1(filter => {
10136
+ return Object.keys(filter).reduce((filters, field) => {
10137
+ const datoFilter = filter[field];
10138
+ if (datoFilter) {
10139
+ filters.push({ colId: datoFilter.colId, field, filter: datoFilter });
10140
+ }
10141
+ return filters;
10142
+ }, []);
10143
+ }));
10144
+ }
10081
10145
  getSearchTerm() {
10082
10146
  return this.getValue().settings.searchTerm;
10083
10147
  }
@@ -10132,9 +10196,16 @@ let GridQuery = class GridQuery extends Query {
10132
10196
  getAllDisplayedColumns() {
10133
10197
  return this.filterCheckboxSelectionColumn(this.api.columns.getAllDisplayedColumns());
10134
10198
  }
10199
+ getAllPivotColumns() {
10200
+ return this.getAllColumns().filter(column => column.isPivotActive());
10201
+ }
10135
10202
  selectIsSelectAllRowsEnabled() {
10136
10203
  return this.select(state => state.serverSidePagination.selectAllRowsEnabled);
10137
10204
  }
10205
+ getSecondaryColumn(colId) {
10206
+ const secondaryColumns = this.api.columns.getSecondaryColumns();
10207
+ return secondaryColumns && secondaryColumns.find(col => col.getColId() === colId);
10208
+ }
10138
10209
  filterCheckboxSelectionColumn(columns) {
10139
10210
  return columns.filter((column) => !column.getUserProvidedColDef() || !column.getUserProvidedColDef().checkboxSelection);
10140
10211
  }
@@ -10224,7 +10295,7 @@ var OperatorTypes;
10224
10295
 
10225
10296
  function validateStringCondition(rowValue, { condition, value: filterValue }) {
10226
10297
  const filterTextLowerCase = filterValue ? filterValue.toLowerCase() : '';
10227
- const valueLowerCase = rowValue ? rowValue.toLowerCase() : '';
10298
+ const valueLowerCase = rowValue ? `${rowValue}`.toLowerCase() : '';
10228
10299
  switch (condition) {
10229
10300
  case DatoFilterConditions.EQUALS:
10230
10301
  return valueLowerCase === filterTextLowerCase;
@@ -10306,8 +10377,13 @@ function validateFilter({ row, api }, activeFilters) {
10306
10377
  const orderedFilters = Object.keys(activeFilters);
10307
10378
  for (const filter of orderedFilters) {
10308
10379
  let filterPasses = true;
10309
- const { byValue, conditional } = activeFilters[filter];
10380
+ const { byValue, conditional, pivotKeys } = activeFilters[filter];
10381
+ const currentRowPivotKeys = row.parent.childrenMapped && getRowPivotKeys(row.parent.childrenMapped);
10310
10382
  const rowValue = api.getValue(filter, row);
10383
+ /** If value is under a pivoted column but doesn't match the filter pivot */
10384
+ if (pivotKeys && pivotKeys.length > 0 && !isArrayValuesEqual(pivotKeys, currentRowPivotKeys)) {
10385
+ return true;
10386
+ }
10311
10387
  if (conditional) {
10312
10388
  const { operator, conditions, type } = conditional;
10313
10389
  const conditionsRelation = operator === OperatorTypes.AND ? 'every' : 'some';
@@ -10324,6 +10400,17 @@ function validateFilter({ row, api }, activeFilters) {
10324
10400
  }
10325
10401
  return true;
10326
10402
  }
10403
+ /**
10404
+ * Get pivot keys from a row parent
10405
+ */
10406
+ function getRowPivotKeys(childrenMapped, keys = []) {
10407
+ const key = Object.keys(childrenMapped)[0];
10408
+ const parsedKey = tryParsePivotValue(key);
10409
+ if (parsedKey) {
10410
+ keys = getRowPivotKeys(childrenMapped[key], [...keys, parsedKey.value]);
10411
+ }
10412
+ return keys;
10413
+ }
10327
10414
 
10328
10415
  var GridActionType;
10329
10416
  (function (GridActionType) {
@@ -11113,15 +11200,20 @@ let DatoGridFilterComponent = class DatoGridFilterComponent {
11113
11200
  return this.filterForm.get('conditional.conditions');
11114
11201
  }
11115
11202
  get colFilter() {
11116
- return this.gridQuery.getFilter()[this.colField];
11203
+ const filter = this.gridQuery.getFilter()[this.colField];
11204
+ return filter && isArrayValuesEqual(this.pivotKeys, filter.pivotKeys) ? filter : null;
11117
11205
  }
11118
11206
  get colDef() {
11119
11207
  return this.popover.data.column.getColDef();
11120
11208
  }
11209
+ get pivotKeys() {
11210
+ return this.colDef.pivotKeys || [];
11211
+ }
11121
11212
  ngOnInit() {
11122
11213
  const { gridService, gridQuery } = this.popover.data;
11123
- const { field, filter, filtersConfig = {} } = this.colDef;
11124
- this.colField = field;
11214
+ const { filter, filtersConfig = {}, pivotValueColumn, pivotKeys } = this.colDef;
11215
+ this.colField = getColField(this.colDef);
11216
+ this.pivotColumn = gridQuery.api.columns.getSecondaryPivotColumn(pivotKeys, pivotValueColumn);
11125
11217
  if (filtersConfig.sections) {
11126
11218
  this.filterSections = { [filtersConfig.sections]: true };
11127
11219
  }
@@ -11133,7 +11225,11 @@ let DatoGridFilterComponent = class DatoGridFilterComponent {
11133
11225
  this.listSortByKey = this.filterType === DatoGridFilterTypes.Number && this.colDef.valueFormatter ? 'id' : 'label';
11134
11226
  this.gridQuery = gridQuery;
11135
11227
  this.gridService = gridService;
11136
- this.hasFilter$ = this.gridQuery.select(state => state.settings.filter[field]).pipe(map$1(filter => !isNil(filter)));
11228
+ this.hasFilter$ = this.gridQuery
11229
+ .select(state => state.settings.filter[this.colField])
11230
+ .pipe(map$1(filter => {
11231
+ return !isNil(filter) && isArrayValuesEqual(filter.pivotKeys, this.pivotKeys);
11232
+ }));
11137
11233
  if (this.filterSections.Conditional) {
11138
11234
  let filterConditions = filterOptions || DatoGridStringFilterOptions;
11139
11235
  if (filtersConfig.showEmptyConditions) {
@@ -11196,6 +11292,7 @@ let DatoGridFilterComponent = class DatoGridFilterComponent {
11196
11292
  isEmpty(filter)
11197
11293
  ? this.gridService.clearColumnFilter(this.colField)
11198
11294
  : this.gridService.setColumnFilter(column, filter);
11295
+ this.gridService.notifyFilterUpdate();
11199
11296
  }
11200
11297
  }
11201
11298
  clearFilters() {
@@ -11240,7 +11337,14 @@ let DatoGridFilterComponent = class DatoGridFilterComponent {
11240
11337
  }
11241
11338
  buildFilter() {
11242
11339
  const { byValue, conditional } = this.filterForm.value;
11243
- const filter = {};
11340
+ const filter = { colId: this.colDef.colId };
11341
+ filter.pivotKeys = this.pivotKeys;
11342
+ if (this.pivotColumn) {
11343
+ filter.pivotFieldsMap = this.getPivotFields(this.pivotColumn.getParent()).reduce((fieldMap, field, index) => {
11344
+ fieldMap[field] = this.pivotKeys[index];
11345
+ return fieldMap;
11346
+ }, {});
11347
+ }
11244
11348
  if (this.filterSections.Conditional) {
11245
11349
  this.setConditionalFilter(filter, conditional);
11246
11350
  }
@@ -11547,6 +11651,18 @@ let DatoGridFilterComponent = class DatoGridFilterComponent {
11547
11651
  getNonExcludedValues(data) {
11548
11652
  return data.filter(v => !this.excludedValues.has(v));
11549
11653
  }
11654
+ /**
11655
+ * Get pivot dimensions as defined in the parent group column header class.
11656
+ */
11657
+ getPivotFields(parent, fields = []) {
11658
+ const grandParent = parent.getParent();
11659
+ const headerClass = parent.getOriginalColumnGroup().getColGroupDef().headerClass;
11660
+ if (grandParent) {
11661
+ this.getPivotFields(grandParent, fields);
11662
+ }
11663
+ headerClass && fields.push(headerClass[0]);
11664
+ return fields;
11665
+ }
11550
11666
  };
11551
11667
  DatoGridFilterComponent.ctorParameters = () => [
11552
11668
  { type: ElementRef },
@@ -11629,10 +11745,9 @@ let DatoGridColumnHeaderComponent = class DatoGridColumnHeaderComponent {
11629
11745
  const colDef = params.column.getColDef();
11630
11746
  this.headerInfo = colDef.info;
11631
11747
  this.headerName = colDef.headerName;
11632
- this.aggColumn = this.column.getColId().indexOf('ag-Grid-AutoColumn') !== -1;
11633
11748
  this.showFilter = colDef.filter !== DatoGridFilterTypes.None;
11634
11749
  this.showMoreMenu = isNil(colDef.moreMenuActions) || colDef.moreMenuActions.length > 0;
11635
- this.field = this.aggColumn ? this.groupField : colDef.field;
11750
+ this.field = getColField(colDef);
11636
11751
  this.context = {
11637
11752
  api: {
11638
11753
  grid: params.api,
@@ -11644,7 +11759,10 @@ let DatoGridColumnHeaderComponent = class DatoGridColumnHeaderComponent {
11644
11759
  this.customTemplates = gridService.getCustomHeader(this.field);
11645
11760
  this.filterActive$ = gridQuery
11646
11761
  .select(state => state.settings.filter[this.field])
11647
- .pipe(map$1(filter => size(filter) > 0));
11762
+ .pipe(map$1(filter => {
11763
+ const isPivotColumnMatchFilter = filter && isArrayValuesEqual(filter.pivotKeys, colDef.pivotKeys);
11764
+ return size(filter) > 0 && isPivotColumnMatchFilter;
11765
+ }));
11648
11766
  if (this.params.enableSorting) {
11649
11767
  fromEvent(this.host.nativeElement, 'click')
11650
11768
  .pipe(untilDestroyed(this))
@@ -11704,9 +11822,6 @@ let DatoGridColumnHeaderComponent = class DatoGridColumnHeaderComponent {
11704
11822
  });
11705
11823
  }
11706
11824
  ngOnDestroy() { }
11707
- get groupField() {
11708
- return this.column.getColDef().showRowGroup;
11709
- }
11710
11825
  };
11711
11826
  DatoGridColumnHeaderComponent.ctorParameters = () => [
11712
11827
  { type: ViewContainerRef },
@@ -12180,8 +12295,8 @@ let GridService = class GridService {
12180
12295
  this.svgRegistry = svgRegistry;
12181
12296
  this.storageAPI = storageAPI;
12182
12297
  this.logger = logger;
12183
- this.pageNumberToReturnAfterRefresh = -1;
12184
12298
  this.treeConfig = defaultGridTreeLabel;
12299
+ this.pageNumberToReturnAfterRefresh = -1;
12185
12300
  this.CHECKBOX_SELECTION_COL_ID = 'grid-checkbox-selection';
12186
12301
  }
12187
12302
  set treeData(isTreeData) {
@@ -12238,6 +12353,9 @@ let GridService = class GridService {
12238
12353
  const treeDate = convertToTreeData(data, this.treeConfig);
12239
12354
  this.api.grid.setRowData(treeDate);
12240
12355
  }
12356
+ else if (this.isPivotMode) {
12357
+ this.setPivotModeRows(data);
12358
+ }
12241
12359
  else {
12242
12360
  this.api.grid.setRowData(data);
12243
12361
  }
@@ -12349,6 +12467,12 @@ let GridService = class GridService {
12349
12467
  params.gridOptions.saveSettings = saveSettings !== false && !isNil(gridName);
12350
12468
  /** Server Side Pagination for select all option */
12351
12469
  this.initOnRowSelectedForServerSidePagination(params);
12470
+ /** Add pivot specific required settings */
12471
+ if (params.gridOptions.pivotMode) {
12472
+ this.initPivotSecondaryColsProcess(params);
12473
+ params.gridOptions.enableV2_1 = true;
12474
+ params.gridOptions.saveSettings = false;
12475
+ }
12352
12476
  return params.gridOptions;
12353
12477
  }
12354
12478
  normalizeColumns(colDefs, gridOptions = null) {
@@ -12510,18 +12634,37 @@ let GridService = class GridService {
12510
12634
  });
12511
12635
  this.notifyFilterUpdate();
12512
12636
  }
12513
- setColumnFilter(column, filter) {
12637
+ setColumnFilter(column, filter, notifyGrid = true) {
12514
12638
  this._logEvent("Grids - Filter Applied" /* GRID_FILTER_APPLIED */, {
12515
12639
  column: column.getColId(),
12516
12640
  numOfConditions: (filter.conditional && filter.conditional.conditions.length) || 0,
12517
12641
  byValue: !!filter.byValue ? 'Yes' : 'No'
12518
12642
  });
12643
+ this.updateFilter(column, filter);
12644
+ if (notifyGrid) {
12645
+ this.notifyFilterUpdate();
12646
+ }
12647
+ }
12648
+ setGridFilters(filters) {
12649
+ for (const { colId, filter } of filters) {
12650
+ const column = this.api.columns.getColumn(colId);
12651
+ if (column) {
12652
+ this.setColumnFilter(column, filter);
12653
+ }
12654
+ else {
12655
+ const pivotColumn = this.gridQuery.getSecondaryColumn(colId);
12656
+ this.setColumnFilter(pivotColumn, filter);
12657
+ }
12658
+ }
12659
+ this.notifyFilterUpdate();
12660
+ }
12661
+ updateFilter(column, filter) {
12662
+ const colField = getColField(column.getColDef());
12519
12663
  this.store.update(state => {
12520
12664
  return {
12521
- settings: Object.assign(Object.assign({}, state.settings), { filter: Object.assign(Object.assign({}, state.settings.filter), { [column.getColDef().field]: filter }) })
12665
+ settings: Object.assign(Object.assign({}, state.settings), { filter: Object.assign(Object.assign({}, state.settings.filter), { [colField]: filter }) })
12522
12666
  };
12523
12667
  });
12524
- this.notifyFilterUpdate();
12525
12668
  }
12526
12669
  setSearchTerm(searchTerm) {
12527
12670
  this.store.update(state => {
@@ -12973,6 +13116,74 @@ let GridService = class GridService {
12973
13116
  this.setServerSidePagination({ selectAllRowsEnabled: false, excludedFromSelectAll: [] });
12974
13117
  }
12975
13118
  }
13119
+ /**
13120
+ * When pivoting,
13121
+ * we add the field name to the column header class in order to access it through the auto generated pivot column.
13122
+ * @private
13123
+ */
13124
+ initPivotSecondaryColsProcess({ gridOptions }) {
13125
+ gridOptions.processSecondaryColDef = colDef => {
13126
+ const api = colDef.headerComponentParams && colDef.headerComponentParams.gridQuery.api;
13127
+ if (api) {
13128
+ const valueColumns = colDef.headerComponentParams.gridQuery.api.columns.getValueColumns();
13129
+ const originalColDef = valueColumns
13130
+ .map(({ userProvidedColDef }) => userProvidedColDef)
13131
+ .find(({ colId }) => colId === colDef.pivotValueColumn.getColId());
13132
+ if (originalColDef) {
13133
+ colDef.filter = originalColDef.filter;
13134
+ }
13135
+ }
13136
+ if (colDef.pivotKeys) {
13137
+ colDef.pivotKeys = colDef.pivotKeys.map(key => {
13138
+ const parsedKey = tryParsePivotValue(key);
13139
+ return (parsedKey && parsedKey.value) || '';
13140
+ });
13141
+ }
13142
+ };
13143
+ gridOptions.processSecondaryColGroupDef = (colGroupDef) => {
13144
+ if (colGroupDef.headerName) {
13145
+ const parsedValue = tryParsePivotValue(colGroupDef.headerName);
13146
+ if (parsedValue) {
13147
+ const { field, value } = parsedValue;
13148
+ colGroupDef.headerClass = [field];
13149
+ colGroupDef.headerName = value;
13150
+ if (colGroupDef.children && colGroupDef.children.length > 1) {
13151
+ colGroupDef.headerClass.push('group-pivot-cell');
13152
+ }
13153
+ }
13154
+ }
13155
+ else if (colGroupDef.children) {
13156
+ const [colChild] = colGroupDef.children;
13157
+ const pivotTotalColumnIds = colChild && colChild.pivotTotalColumnIds;
13158
+ if (pivotTotalColumnIds && pivotTotalColumnIds.length > 0) {
13159
+ colGroupDef.headerClass = ['total-pivot-cell'];
13160
+ colGroupDef.headerName = this.translate.transform('core.total');
13161
+ }
13162
+ }
13163
+ else {
13164
+ colGroupDef.headerClass = ['empty-pivot-header'];
13165
+ }
13166
+ if (colGroupDef.pivotKeys) {
13167
+ colGroupDef.pivotKeys = colGroupDef.pivotKeys.map(key => {
13168
+ const parsedKey = tryParsePivotValue(key);
13169
+ return (parsedKey && parsedKey.value) || '';
13170
+ });
13171
+ }
13172
+ };
13173
+ }
13174
+ setPivotModeRows(data) {
13175
+ const pivotColumns = this.gridQuery.getAllPivotColumns();
13176
+ const convertedData = data.map((currentValue, index) => {
13177
+ const mappedValues = Object.assign({}, currentValue);
13178
+ for (const col of pivotColumns) {
13179
+ const field = col.getColDef().field;
13180
+ const pivotValue = { field, value: currentValue[field] };
13181
+ mappedValues[field] = JSON.stringify(pivotValue);
13182
+ }
13183
+ return mappedValues;
13184
+ });
13185
+ this.api.grid.setRowData(convertedData);
13186
+ }
12976
13187
  };
12977
13188
  GridService.ctorParameters = () => [
12978
13189
  { type: GridStore },
@@ -13380,6 +13591,7 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
13380
13591
  set gridOptions(gridOptions) {
13381
13592
  this._gridOptions = gridOptions;
13382
13593
  this.gridService.treeData = gridOptions.treeData;
13594
+ this.gridService.isPivotMode = gridOptions.pivotMode;
13383
13595
  if (this.agGridEl) {
13384
13596
  if (gridOptions.treeData) {
13385
13597
  !this.agGridEl.classList.contains(this.treeGridClass) && this.agGridEl.classList.add(this.treeGridClass);
@@ -13453,6 +13665,18 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
13453
13665
  const defaults = Object.assign(Object.assign(Object.assign({}, defaultGridOptions), (this.gridOptions.treeData ? defaultTreeOptions : {})), { icons: this.getGridIcons() });
13454
13666
  return deepmerge(defaults, normalized);
13455
13667
  }
13668
+ setGridRows(data) {
13669
+ this.gridService.setRows(data);
13670
+ }
13671
+ setGridFilters(filters) {
13672
+ this.gridService.setGridFilters(filters);
13673
+ }
13674
+ onFilterChanged() {
13675
+ return this.gridQuery.filterChanged();
13676
+ }
13677
+ onSortChanged() {
13678
+ return this.gridQuery.selectSort();
13679
+ }
13456
13680
  getGridIcons() {
13457
13681
  const moveColumnIcon = `<span class="da-grid-icon pointer d-flex column-move">${this.iconRegistry.getSvg('move-column')}</span>`;
13458
13682
  return {
@@ -13806,6 +14030,9 @@ let DatoGridV2Component = class DatoGridV2Component {
13806
14030
  get enableV2_1() {
13807
14031
  return this.gridOptions ? this.gridOptions.enableV2_1 : false;
13808
14032
  }
14033
+ get isPivotMode() {
14034
+ return this.gridOptions ? this.gridOptions.pivotMode : false;
14035
+ }
13809
14036
  };
13810
14037
  DatoGridV2Component.ctorParameters = () => [
13811
14038
  { type: DatoGridControllerComponent },
@@ -13819,7 +14046,7 @@ __decorate([
13819
14046
  DatoGridV2Component = __decorate([
13820
14047
  Component({
13821
14048
  selector: 'dato-grid-v2',
13822
- 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\">\n</ag-grid-angular>\n<dato-grid-pagination-v2 [class.has-background]=\"enableBackground\"></dato-grid-pagination-v2>\n",
14049
+ 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-mode]=\"isPivotMode\">\n</ag-grid-angular>\n<dato-grid-pagination-v2 [class.has-background]=\"enableBackground\"></dato-grid-pagination-v2>\n",
13823
14050
  changeDetection: ChangeDetectionStrategy.OnPush,
13824
14051
  encapsulation: ViewEncapsulation.None,
13825
14052
  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}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}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}.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}"]
@@ -14090,6 +14317,9 @@ let DatoGridPaginationV2Component = class DatoGridPaginationV2Component {
14090
14317
  showFirstEllipsis: false,
14091
14318
  showLastPage: false
14092
14319
  };
14320
+ // Show fit cell content and collapse/expand row groups controls
14321
+ this.showBottomControls = false;
14322
+ this.isExpanded = true;
14093
14323
  this.isServerSidePagination = false;
14094
14324
  // The number of pages displayed in the navigation panel for each view as defined by product.
14095
14325
  this.MINI_DISPLAY_LENGTH = 2;
@@ -14124,7 +14354,10 @@ let DatoGridPaginationV2Component = class DatoGridPaginationV2Component {
14124
14354
  this.initPagination();
14125
14355
  });
14126
14356
  this.gridQuery.gridReady$
14127
- .pipe(tap(() => (this.gridApi = this.gridQuery.api.grid)), switchMap(() => {
14357
+ .pipe(tap(() => {
14358
+ this.gridApi = this.gridQuery.api.grid;
14359
+ this.showBottomControls = this.gridQuery.getGridOptions().showBottomControls;
14360
+ }), switchMap(() => {
14128
14361
  this.isServerSidePagination = this.gridQuery.isServerSide;
14129
14362
  return this.isServerSidePagination ? this.gridQuery.serverDataLoaded$ : this.gridQuery.rowDataChanged$;
14130
14363
  }), throttleTime(100), tapOnce(() => this.initPagination()), untilDestroyed(this))
@@ -14240,6 +14473,13 @@ let DatoGridPaginationV2Component = class DatoGridPaginationV2Component {
14240
14473
  trackByPage(index, page) {
14241
14474
  return page;
14242
14475
  }
14476
+ toggleGroupsState() {
14477
+ this.isExpanded ? this.gridApi.collapseAll() : this.gridApi.expandAll();
14478
+ this.isExpanded = !this.isExpanded;
14479
+ }
14480
+ autoFitGrid(type) {
14481
+ this.gridService.fitGrid(type);
14482
+ }
14243
14483
  ngOnDestroy() { }
14244
14484
  /**
14245
14485
  * Sets the rows display string
@@ -14329,7 +14569,7 @@ DatoGridPaginationV2Component = __decorate([
14329
14569
  Component({
14330
14570
  selector: 'dato-grid-pagination-v2',
14331
14571
  changeDetection: ChangeDetectionStrategy.OnPush,
14332
- template: "<div class=\"d-flex-row d-flex-auto d-flex-wrap container\" [class.small]=\"smallVersion\"\n [attr.data-pages-count]=\"totalPages\"\n [attr.data-current-page]=\"pageNumbersDisplay.currentPage\"\n [attr.data-page-size]=\"rowsPerPage\"\n [attr.data-rows-count]=\"rowCount\">\n <div *ngIf=\"totalPages > 1\" #navigation\n class=\"navigation d-flex-row d-flex-0-0-auto align-center\">\n\n <!-- First Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"mr-4\" data-auto-id=\"pagiantion-first-page\"\n icon=\"chevron-left-double\"\n datoType=\"secondary\"\n datoSize=\"md\"\n [disabled]=\"prevPageDisabled\"\n (click)=\"navigateFirstPage()\">\n </dato-icon-button>\n\n <!-- Previous Page -->\n <dato-icon-button icon=\"arrow-left\" datoType=\"secondary\" datoSize=\"md\"\n [disabled]=\"prevPageDisabled\" data-auto-id=\"pagiantion-previous-page\"\n (click)=\"navigatePrevPage()\">\n </dato-icon-button>\n\n\n <div class=\"d-flex mx-5 align-center number-container\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-previous-batch\"\n *ngIf=\"pageNumbersDisplay.showFirstEllipsis && !smallVersion\"\n (click)=\"showPreviousBatch()\">...\n </dato-link>\n <dato-link class=\"page-number mx-5\" [datoType]=\"page === pageNumbersDisplay.currentPage ? 'primary' : 'secondary'\" datoSize=\"sm\"\n *ngFor=\"let page of pageNumbersDisplay.pages; index as i; trackBy: trackByPage;\" [attr.data-auto-id]=\"'pagiantion-page-' + i\"\n (click)=\"navigatePage(page - 1)\">\n {{page}}\n </dato-link>\n\n <div class=\"d-flex\" *ngIf=\"pageNumbersDisplay.showLastPage && !smallVersion\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-next-batch\"\n (click)=\"showNextBatch()\">...</dato-link>\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\"\n [attr.data-auto-id]=\"'pagiantion-page-' + totalPages\"\n (click)=\"navigatePage(totalPages - 1)\">\n {{totalPages}}\n </dato-link>\n </div>\n\n </div>\n\n <!-- Next Page -->\n <dato-icon-button icon=\"arrow-right\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"navigateNextPage()\" data-auto-id=\"pagiantion-next-page\"\n [disabled]=\"nextPageDisabled\">\n </dato-icon-button>\n\n <!-- Last Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"ml-4\" icon=\"chevron-right-double\"\n datoType=\"secondary\" datoSize=\"md\" data-auto-id=\"pagiantion-last-page\"\n [disabled]=\"nextPageDisabled\"\n (click)=\"navigatePage(totalPages - 1)\">\n </dato-icon-button>\n\n </div>\n\n <div *ngIf=\"totalPages > 1 && !smallVersion\"\n class=\"separator mx-10 my-auto primary-100-background-color\">\n </div>\n\n <div class=\"total d-flex-0-0-auto d-flex-row align-center\">\n <span class=\"dato-note primary-300-color\">{{rowsRange}}</span>\n </div>\n\n</div>\n",
14572
+ template: "<div class=\"d-flex-row d-flex-auto d-flex-wrap container\" [class.small]=\"smallVersion\"\n [attr.data-pages-count]=\"totalPages\"\n [attr.data-current-page]=\"pageNumbersDisplay.currentPage\"\n [attr.data-page-size]=\"rowsPerPage\"\n [attr.data-rows-count]=\"rowCount\">\n <div *ngIf=\"totalPages > 1\" #navigation\n class=\"navigation d-flex-row d-flex-0-0-auto align-center\">\n\n <!-- First Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"mr-4\" data-auto-id=\"pagiantion-first-page\"\n icon=\"chevron-left-double\"\n datoType=\"secondary\"\n datoSize=\"md\"\n [disabled]=\"prevPageDisabled\"\n (click)=\"navigateFirstPage()\">\n </dato-icon-button>\n\n <!-- Previous Page -->\n <dato-icon-button icon=\"arrow-left\" datoType=\"secondary\" datoSize=\"md\"\n [disabled]=\"prevPageDisabled\" data-auto-id=\"pagiantion-previous-page\"\n (click)=\"navigatePrevPage()\">\n </dato-icon-button>\n\n\n <div class=\"d-flex mx-5 align-center number-container\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-previous-batch\"\n *ngIf=\"pageNumbersDisplay.showFirstEllipsis && !smallVersion\"\n (click)=\"showPreviousBatch()\">...\n </dato-link>\n <dato-link class=\"page-number mx-5\" [datoType]=\"page === pageNumbersDisplay.currentPage ? 'primary' : 'secondary'\" datoSize=\"sm\"\n *ngFor=\"let page of pageNumbersDisplay.pages; index as i; trackBy: trackByPage;\" [attr.data-auto-id]=\"'pagiantion-page-' + i\"\n (click)=\"navigatePage(page - 1)\">\n {{page}}\n </dato-link>\n\n <div class=\"d-flex\" *ngIf=\"pageNumbersDisplay.showLastPage && !smallVersion\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-next-batch\"\n (click)=\"showNextBatch()\">...</dato-link>\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\"\n [attr.data-auto-id]=\"'pagiantion-page-' + totalPages\"\n (click)=\"navigatePage(totalPages - 1)\">\n {{totalPages}}\n </dato-link>\n </div>\n\n </div>\n\n <!-- Next Page -->\n <dato-icon-button icon=\"arrow-right\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"navigateNextPage()\" data-auto-id=\"pagiantion-next-page\"\n [disabled]=\"nextPageDisabled\">\n </dato-icon-button>\n\n <!-- Last Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"ml-4\" icon=\"chevron-right-double\"\n datoType=\"secondary\" datoSize=\"md\" data-auto-id=\"pagiantion-last-page\"\n [disabled]=\"nextPageDisabled\"\n (click)=\"navigatePage(totalPages - 1)\">\n </dato-icon-button>\n\n </div>\n\n <div *ngIf=\"totalPages > 1 && !smallVersion\"\n class=\"separator mx-10 my-auto primary-100-background-color\">\n </div>\n\n <div class=\"total d-flex-0-0-auto d-flex-row align-center\">\n <span class=\"dato-note primary-300-color\">{{rowsRange}}</span>\n </div>\n\n <div *ngIf=\"showBottomControls\" class=\"grid-controls d-flex d-flex-1 justify-end\">\n <dato-icon-button [icon]=\"isExpanded ? 'collapse' : 'expand'\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"toggleGroupsState()\" data-auto-id=\"pagiantion-next-page\">\n </dato-icon-button>\n\n <dato-icon-button class=\"mx-4\" icon=\"maximize-horizontal\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"autoFitGrid('container')\" data-auto-id=\"pagiantion-next-page\">\n </dato-icon-button>\n\n <dato-icon-button icon=\"minimize-horizontal\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"autoFitGrid('content')\" data-auto-id=\"pagiantion-next-page\">\n </dato-icon-button>\n </div>\n</div>\n",
14333
14573
  providers: [DecimalPipe],
14334
14574
  styles: [":host{padding:12px 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;min-height:25px}:host .container{height:25px}:host .navigation .page-number{transition:color .3s ease-in-out}:host .navigation .page-number:first-of-type{margin-left:7px}:host .navigation .page-number:last-of-type{margin-right:7px}:host .separator{width:1px;height:25px}:host .container.small .navigation,:host .container.small .total{margin-top:8px;margin-left:auto;margin-right:auto}"]
14335
14575
  }),
@@ -22366,5 +22606,5 @@ window.coreVersion = '21.4.0-rc.';
22366
22606
  * Generated bundle index. Do not edit.
22367
22607
  */
22368
22608
 
22369
- 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, 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, 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, copyToClipboard, 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, 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, reject, relativeDateTypes, removeClass, resolveRange, round, searchHighlightCellRenderer, searchResultsGroupSort, searchResultsSort, setAttr, setAttribute, setDimensions, setEmptyFolderClass, setGridConfiguration, setGridModel, setMaxDimensions, setMinDimensions, setStyle, setStyles, size, sortBy, stubs, supportedLocales, tapLog, tapOnce, throttle, toBoolean, toFormData, toNumber, toResponseBody, toString, toggleClass, toolbarActionToContextAction, unescape, union, uniq, uniqBy, uploadProgress, validBase64Image, validUrl, validateCondition, validateDate, validateDateCondition, validateFilter, validateNumberCondition, validateRange, validateStringCondition, values, workerMap, 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, RichTextService as ɵo };
22609
+ 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, 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, 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, copyToClipboard, 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, reject, relativeDateTypes, removeClass, resolveRange, round, searchHighlightCellRenderer, searchResultsGroupSort, searchResultsSort, setAttr, setAttribute, setDimensions, setEmptyFolderClass, setGridConfiguration, setGridModel, setMaxDimensions, setMinDimensions, setStyle, setStyles, 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, 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, RichTextService as ɵo };
22370
22610
  //# sourceMappingURL=datorama-core.js.map