@datorama/core 22.8.2-rc.1 → 22.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/bundles/datorama-core.umd.js +113 -116
  2. package/bundles/datorama-core.umd.js.map +1 -1
  3. package/bundles/datorama-core.umd.min.js +15 -15
  4. package/bundles/datorama-core.umd.min.js.map +1 -1
  5. package/datorama-core.d.ts +0 -1
  6. package/datorama-core.metadata.json +1 -1
  7. package/esm2015/datorama-core.js +1 -2
  8. package/esm2015/lib/breadcrumbs/breadcrumbs.component.js +2 -4
  9. package/esm2015/lib/grid-v2/grid/grid-v2.types.js +1 -1
  10. package/esm2015/lib/grid-v2/grid-column-header/grid-column-header.component.js +9 -3
  11. package/esm2015/lib/grid-v2/grid-controller/grid-controller.component.js +3 -8
  12. package/esm2015/lib/grid-v2/grid-filter/grid-filter.component.js +20 -4
  13. package/esm2015/lib/grid-v2/grid-settings.js +2 -2
  14. package/esm2015/lib/grid-v2/grid-store/grid.query.js +20 -17
  15. package/esm2015/lib/grid-v2/grid-store/grid.service.js +19 -22
  16. package/esm2015/lib/grid-v2/grid-toolbar/grid-toolbar.component.js +1 -7
  17. package/esm2015/lib/rich-text/rich-text.directive.js +33 -15
  18. package/esm2015/lib/select/select.component.js +10 -5
  19. package/esm2015/lib/version.js +2 -2
  20. package/esm5/datorama-core.js +1 -2
  21. package/esm5/lib/breadcrumbs/breadcrumbs.component.js +2 -4
  22. package/esm5/lib/grid-v2/grid/grid-v2.types.js +1 -1
  23. package/esm5/lib/grid-v2/grid-column-header/grid-column-header.component.js +9 -3
  24. package/esm5/lib/grid-v2/grid-controller/grid-controller.component.js +3 -8
  25. package/esm5/lib/grid-v2/grid-filter/grid-filter.component.js +24 -4
  26. package/esm5/lib/grid-v2/grid-settings.js +2 -2
  27. package/esm5/lib/grid-v2/grid-store/grid.query.js +21 -17
  28. package/esm5/lib/grid-v2/grid-store/grid.service.js +19 -22
  29. package/esm5/lib/grid-v2/grid-toolbar/grid-toolbar.component.js +1 -13
  30. package/esm5/lib/rich-text/rich-text.directive.js +34 -16
  31. package/esm5/lib/select/select.component.js +10 -5
  32. package/esm5/lib/version.js +2 -2
  33. package/fesm2015/datorama-core.js +108 -108
  34. package/fesm2015/datorama-core.js.map +1 -1
  35. package/fesm5/datorama-core.js +114 -116
  36. package/fesm5/datorama-core.js.map +1 -1
  37. package/lib/grid-v2/grid/grid-v2.types.d.ts +2 -1
  38. package/lib/grid-v2/grid-filter/grid-filter.component.d.ts +4 -1
  39. package/lib/grid-v2/grid-settings.d.ts +2 -2
  40. package/lib/grid-v2/grid-store/grid.query.d.ts +2 -2
  41. package/lib/grid-v2/grid-store/grid.service.d.ts +1 -0
  42. package/lib/grid-v2/grid-toolbar/grid-toolbar.component.d.ts +0 -2
  43. package/lib/rich-text/rich-text.directive.d.ts +6 -4
  44. package/package.json +1 -1
  45. package/esm2015/lib/rich-text/rich-text.service.js +0 -50
  46. package/esm5/lib/rich-text/rich-text.service.js +0 -51
  47. package/lib/rich-text/rich-text.service.d.ts +0 -10
@@ -7604,8 +7604,9 @@ let DatoSelectComponent = class DatoSelectComponent extends BaseCustomControl {
7604
7604
  writeValue(activeOptions) {
7605
7605
  this._model = activeOptions ? coerceArray$1(activeOptions) : [];
7606
7606
  if (this.options) {
7607
+ const overTheLimit = this.limitSelectedTo && this.isMulti && this._model.length >= this.limitSelectedTo;
7607
7608
  this.markAsActive(this._model, { deselectAll: true });
7608
- this.limitSelectedTo && this.updateDisabledState();
7609
+ overTheLimit && this.updateDisabledState();
7609
7610
  }
7610
7611
  /** For later updates */
7611
7612
  this.cdr.markForCheck();
@@ -7641,7 +7642,7 @@ let DatoSelectComponent = class DatoSelectComponent extends BaseCustomControl {
7641
7642
  */
7642
7643
  if (this.hasValue && this._initialOpen) {
7643
7644
  this.markAsActive(this._model);
7644
- if (this.limitSelectedTo) {
7645
+ if (this.limitSelectedTo && this._model.length === this.limitSelectedTo) {
7645
7646
  this.updateDisabledState();
7646
7647
  }
7647
7648
  this._initialOpen = false;
@@ -7708,6 +7709,7 @@ let DatoSelectComponent = class DatoSelectComponent extends BaseCustomControl {
7708
7709
  this.onChange(this._model);
7709
7710
  }
7710
7711
  removeOption(option) {
7712
+ const updateDisabled = this.limitSelectedTo && this._model.length === this.limitSelectedTo;
7711
7713
  this._model = this._model.filter(current => current[this.idKey] !== option[this.idKey]);
7712
7714
  const optionToRemove = this.options.find(datoOption => datoOption.option && datoOption.option[this.idKey] === option[this.idKey]);
7713
7715
  /**
@@ -7717,7 +7719,7 @@ let DatoSelectComponent = class DatoSelectComponent extends BaseCustomControl {
7717
7719
  if (optionToRemove) {
7718
7720
  optionToRemove.active = false;
7719
7721
  }
7720
- this.limitSelectedTo && this.updateDisabledState();
7722
+ updateDisabled && this.updateDisabledState();
7721
7723
  this.onChange(this._model);
7722
7724
  this.cdr.markForCheck();
7723
7725
  this.asyncUpdateDropdownPosition();
@@ -7991,6 +7993,9 @@ let DatoSelectComponent = class DatoSelectComponent extends BaseCustomControl {
7991
7993
  if (!datoOption) {
7992
7994
  return;
7993
7995
  }
7996
+ const modelLength = this._model.length;
7997
+ const updateDisabled = this.limitSelectedTo &&
7998
+ (modelLength === this.limitSelectedTo || (modelLength === this.limitSelectedTo - 1 && !datoOption.active));
7994
7999
  datoOption.active = !datoOption.active;
7995
8000
  const rawOption = datoOption.option;
7996
8001
  if (datoOption.active) {
@@ -7999,7 +8004,7 @@ let DatoSelectComponent = class DatoSelectComponent extends BaseCustomControl {
7999
8004
  else {
8000
8005
  this._model = this._model.filter(current => current[this.idKey] !== rawOption[this.idKey]);
8001
8006
  }
8002
- this.limitSelectedTo && this.updateDisabledState();
8007
+ updateDisabled && this.updateDisabledState();
8003
8008
  this.onChange(this._model);
8004
8009
  this.cdr.markForCheck();
8005
8010
  this.asyncUpdateDropdownPosition();
@@ -10092,7 +10097,7 @@ let GridQuery = class GridQuery extends Query {
10092
10097
  const storeSettings = this.getValue().settings;
10093
10098
  const settings = {
10094
10099
  gridAlignment: storeSettings.gridAlignment,
10095
- sort: this.getGridOptions().sortByStore ? this.getSort() : this.getSortModel(),
10100
+ sort: this.getGridOptions().sortByStore ? this.getSavedSort() : this.getSortModel(),
10096
10101
  hiddenColumns,
10097
10102
  groupedColumns: groupedColumns.map(toColId),
10098
10103
  filter: this.getFilter(),
@@ -10109,25 +10114,28 @@ let GridQuery = class GridQuery extends Query {
10109
10114
  getSortModel() {
10110
10115
  return this.api.grid.getSortModel().pop();
10111
10116
  }
10112
- getSort() {
10117
+ getSavedSort() {
10113
10118
  return this.getValue().settings.sort || this.getSortModel();
10114
10119
  }
10115
- getExternalSort() {
10116
- const { sort, colId, sortIndex: savedSortIndex } = this.getSort() || {};
10117
- const column = this.api.columns.getColumn(colId);
10118
- const allColumns = this.api.columns.getAllGridColumns();
10119
- if (column) {
10120
- const field = getColField(column.getColDef());
10121
- return { colId, sort, field };
10122
- }
10123
- else {
10124
- const secondaryColumn = this.getSecondaryColumn(colId);
10125
- if (secondaryColumn) {
10126
- const sortIndex = savedSortIndex || allColumns.indexOf(secondaryColumn);
10127
- const field = getColField(secondaryColumn.getColDef());
10128
- return { colId, sort, field, sortIndex };
10120
+ getSort(savedSort = this.getSavedSort()) {
10121
+ if (savedSort) {
10122
+ const { colId, sort, sortIndex } = savedSort;
10123
+ const column = this.api.columns.getColumn(colId);
10124
+ const allColumns = this.api.columns.getAllGridColumns();
10125
+ if (column) {
10126
+ const field = getColField(column.getColDef());
10127
+ return { colId, sort, field };
10128
+ }
10129
+ else {
10130
+ const secondaryColumn = this.getSecondaryColumn(colId);
10131
+ if (secondaryColumn) {
10132
+ const columnIndex = sortIndex || allColumns.indexOf(secondaryColumn);
10133
+ const field = getColField(secondaryColumn.getColDef());
10134
+ return { colId, sort, field, sortIndex: columnIndex };
10135
+ }
10129
10136
  }
10130
10137
  }
10138
+ return { colId: null, sort: null };
10131
10139
  }
10132
10140
  /* @internal */
10133
10141
  _setApi(api, gridRef) {
@@ -10508,7 +10516,7 @@ function toolbarActionToContextAction(params) {
10508
10516
  return contextActions;
10509
10517
  }
10510
10518
 
10511
- const DATO_GRID_STORAGE_API = new InjectionToken('DATO_GRID_STORAGE_AP');
10519
+ const DATO_GRID_STORAGE_API = new InjectionToken('DATO_GRID_STORAGE_API');
10512
10520
 
10513
10521
  const defaultEditableColumnRenderer = params => params && params.value ? `<div class="value-wrapper ellipsis">${params.value}</div>` : null;
10514
10522
  const editableCellRendererWithSearchHighlight = (params, searchTerm) => {
@@ -11193,6 +11201,16 @@ let DatoGridFilterComponent = class DatoGridFilterComponent {
11193
11201
  this.showClearFiltersButton = true;
11194
11202
  this.excludedValues = new Set();
11195
11203
  }
11204
+ set operatorToggler(togglers) {
11205
+ if (togglers && this.inputConditionsOperator) {
11206
+ togglers.forEach((toggler) => {
11207
+ if (!toggler.isDisabled) {
11208
+ toggler.setDisabledState(true);
11209
+ }
11210
+ });
11211
+ this.cdr.detectChanges();
11212
+ }
11213
+ }
11196
11214
  get byValueControl() {
11197
11215
  return this.filterForm.get('byValue');
11198
11216
  }
@@ -11255,6 +11273,7 @@ let DatoGridFilterComponent = class DatoGridFilterComponent {
11255
11273
  const colFilter = filter || colDef.filter;
11256
11274
  const filterOptions = DatoGridFilterOptionsMap[colFilter];
11257
11275
  this.pivotColumn = gridQuery.api.columns.getSecondaryPivotColumn(pivotKeys, pivotValueColumn);
11276
+ this.inputConditionsOperator = filtersConfig.inputConditionsOperator;
11258
11277
  if (!isNil(filtersConfig.showClearFiltersButton)) {
11259
11278
  this.showClearFiltersButton = filtersConfig.showClearFiltersButton;
11260
11279
  }
@@ -11574,7 +11593,7 @@ let DatoGridFilterComponent = class DatoGridFilterComponent {
11574
11593
  return this.defaultConditional;
11575
11594
  }
11576
11595
  return this.fb.group({
11577
- operator: [conditional.operator],
11596
+ operator: [this.inputConditionsOperator || conditional.operator],
11578
11597
  conditions: this.fb.array(this.buildConditions(conditional.conditions))
11579
11598
  });
11580
11599
  }
@@ -11729,10 +11748,15 @@ DatoGridFilterComponent.ctorParameters = () => [
11729
11748
  { type: DatoTranslateService },
11730
11749
  { type: ChangeDetectorRef }
11731
11750
  ];
11751
+ __decorate([
11752
+ ViewChildren('operatorToggler'),
11753
+ __metadata("design:type", QueryList),
11754
+ __metadata("design:paramtypes", [QueryList])
11755
+ ], DatoGridFilterComponent.prototype, "operatorToggler", null);
11732
11756
  DatoGridFilterComponent = __decorate([
11733
11757
  Component({
11734
11758
  selector: 'dato-grid-filter',
11735
- template: "<form class=\"container primary-0-background-color\" [formGroup]=\"filterForm\" datoForm\n *datoSubscribe=\"hasFilter$ as hasFilter\">\n <ng-container>\n <dato-accordion closeOthers=\"true\" class=\"filter-options\" [activeIds]=\"activeAccordionId\">\n <ng-container *ngIf=\"filterSections.Conditional\">\n\n <dato-accordion-group>\n <dato-accordion-header class=\"dato-note-bold primary-600-color\" data-auto-id=\"conditional-filters\"\n [class.primary-100-background-color]=\"header_1.isOpen\" #header_1>\n <div class=\"px-10 d-flex align-start-center\">\n <div class=\"filter-title d-flex-grow d-flex align-start-center\">{{'core.filterByCondition' | translate}}</div>\n <dato-icon class=\"primary-200-color\" height=\"18px\"\n [icon]=\"header_1.isOpen ? 'collapse' : 'expand'\"></dato-icon>\n </div>\n </dato-accordion-header>\n <dato-accordion-content #conditionalContent>\n <div class=\"conditional-content-container d-flex-column\" formGroupName=\"conditional\"\n [class.multi-conditions]=\"conditionsControls.length > 1\">\n <div class=\"operand d-flex-column mb-10\"\n [attr.data-auto-id]=\"'condition-' + i\"\n *ngFor=\"let operand of conditionsControls; index as i; last as last\">\n <div class=\"d-flex\">\n <div class=\"d-flex-column d-flex-grow min-width-0\">\n <ng-container formArrayName=\"conditions\">\n\n <ng-container [formGroupName]=\"i\">\n <dato-select datoSize=\"sm\" class=\"mb-10\" [attr.data-auto-id]=\"'condition-' + i + '-operand'\" formControlName=\"type\"\n datoSelectClass=\"operand-select\"\n [dataSet]=\"conditionalFilterOptions\"\n [isCombo]=\"false\" #select>\n <dato-option *ngFor=\"let option of select.data; index as index\"\n [option]=\"option\">\n {{ option.label }}\n </dato-option>\n </dato-select>\n <ng-container [ngSwitch]=\"filterType\">\n <div class=\"d-flex\" *ngSwitchCase=\"gridFilterTypes.Date\">\n <dato-date-picker [attr.data-auto-id]=\"'condition-date-' + i + '-value'\"\n formControlName=\"value\" class=\"d-flex-grow range-calendar\">\n <ng-template>\n <dato-date-picker-range *ngIf=\"getOperandType(i) === rangeOperand; else singleDate\"></dato-date-picker-range>\n <ng-template #singleDate>\n <dato-date-picker-single></dato-date-picker-single>\n </ng-template>\n </ng-template>\n </dato-date-picker>\n </div>\n <ng-container *ngIf=\"!isConditionalEmpty(operand)\">\n <dato-input *ngSwitchCase=\"gridFilterTypes.String\" datoSize=\"sm\"\n (keydown.enter.stop.prevent)=\"closePopUp()\"\n datoControlErrors [attr.data-auto-id]=\"'condition-string-' + i + '-value'\"\n [datoControlErrorsOnBlur]=\"false\"\n class=\"condition-value\"\n placeholder=\"core.filter\" formControlName=\"value\"\n [isFocused]=\"conditionalContent._expanded\"\n ></dato-input>\n <div class=\"d-flex\" *ngSwitchCase=\"gridFilterTypes.Number\">\n <dato-input-number (keydown.enter.stop.prevent)=\"closePopUp()\" [showControls]=\"false\"\n class=\"width-100 condition-value\" allowNegative=\"true\">\n <input type=\"number\" formControlName=\"value\" [attr.data-auto-id]=\"'condition-number-' + i + '-value'\"\n datoInputNumber datoSize=\"sm\" datoControlErrors [datoAutoFocus]=\"conditionalContent._expanded\"\n [datoControlErrorsOnBlur]=\"false\"/>\n </dato-input-number>\n <ng-container *ngIf=\"getOperandType(i) === rangeOperand\">\n <div class=\"mx-5\">-</div>\n <dato-input-number (keydown.enter.stop.prevent)=\"closePopUp()\"\n class=\"width-100 condition-value\" allowNegative=\"true\">\n <input type=\"number\" formControlName=\"rangeEnd\" [attr.data-auto-id]=\"'condition-number-' + i + '-range-end'\"\n datoInputNumber datoSize=\"sm\" datoControlErrors\n [datoControlErrorsOnBlur]=\"false\"/>\n </dato-input-number>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n <div>\n\n <dato-icon-button datoSize=\"md\"\n datoType=\"none\" icon=\"trash\"\n class=\"overflow-hidden delete\"\n datoTooltip=\"core.deleteFilterCondition\"\n [attr.data-auto-id]=\"'condition-' + i + '-remove'\"\n (click)=\"removeCondition(i)\"\n datoTooltipPosition=\"right-start\"></dato-icon-button>\n </div>\n </div>\n <dato-operator-toggler class=\"mt-10 justify-center width-100 d-flex\" data-auto-id=\"operator-toggler\"\n expanded=\"true\" [datoTogglerValue]=\"conditionsOperator\"\n *ngIf=\"conditionsControls.length > 1 && !last\"\n formControlName=\"operator\"></dato-operator-toggler>\n </div>\n <div class=\"d-flex align-center\">\n <dato-link *ngIf=\"conditionsControls.length < 3\" class=\"no-select\" datoSize=\"sm\" data-auto-id=\"add-condition\"\n datoType=\"secondary\" (click)=\"addCondition()\">\n <dato-icon height=\"10px\" width=\"10px\" icon=\"plus-simple\"></dato-icon>\n {{ 'core.condition' | translate }}\n </dato-link>\n </div>\n </div>\n </dato-accordion-content>\n </dato-accordion-group>\n <div class=\"separator\"></div>\n </ng-container>\n <ng-container *ngIf=\"filterSections.By_Value\">\n <dato-accordion-group class=\"list-content\">\n <dato-accordion-header class=\"dato-note-bold primary-600-color\" data-auto-id=\"by-value-filters\"\n [class.primary-100-background-color]=\"header_2.isOpen\" #header_2>\n <div class=\"px-10 d-flex align-start-center\">\n <div class=\"filter-title d-flex d-flex-grow align-start-center\">{{'core.filterByValue' | translate}}</div>\n <dato-icon class=\"primary-200-color\" height=\"18px\"\n [icon]=\"header_2.isOpen ? 'collapse' : 'expand'\"></dato-icon>\n </div>\n </dato-accordion-header>\n <dato-accordion-content #byValueContent>\n <div class=\"value-content-container d-flex-column\">\n <dato-input datoSize=\"sm\" placeholder=\"core.search-all-values\" [debounceTime]=\"300\" #search [formControl]=\"listSearchControl\" [isFocused]=\"byValueContent._expanded\"></dato-input>\n <dato-list-v2 class=\"primary-0-background-color\"\n containerHeight=\"195px\"\n [withSelectAll]=\"true\"\n [clientSearch]=\"isClientSideGrid\"\n [sortByKey]=\"listSortByKey\"\n [labelType]=\"listLabelType\"\n [searchController]=\"search\"\n [options]=\"listOptions\"\n [isSortList]=\"!keepPredefinedListOriginalOrder\"\n [loading]=\"loadingList\"\n [noDataTpl]=\"isClientSideGrid ? null : noData\"\n formControlName=\"byValue\"\n data-auto-id=\"by-value-filters-list\">\n </dato-list-v2>\n <ng-template #noData>\n <div *ngIf=\"serverSearchErrored; else noResults\" class=\"mb-10 d-flex-1 d-flex-column align-center\" data-auto-id=\"by-value-server-error\">\n <img class=\"mt-20\" datoStaticSrc=\"core/grid/filter-server-error.svg\"/>\n <p class=\"dato-note-bold mt-10 mb-10 primary-300-color\">{{ 'core.something-went-wrong' | translate }}</p>\n <p class=\"dato-note-italic primary-300-color\">{{ 'core.try-again-later' | translate }}</p>\n </div>\n <ng-template #noResults>\n <dato-list-no-result class=\"mb-10 block\" data-auto-id=\"by-value-no-results\"></dato-list-no-result>\n </ng-template>\n </ng-template>\n </div>\n </dato-accordion-content>\n </dato-accordion-group>\n <div class=\"separator\"></div>\n </ng-container>\n </dato-accordion>\n </ng-container>\n <div class=\"actions no-select px-10 py-12 d-flex align-end-center\">\n <dato-link *ngIf=\"showClearFiltersButton\" class=\"mr-30\" datoType=\"secondary\" datoSize=\"sm\"\n (click)=\"clearFilters()\" data-auto-id=\"clear-filters\" [disabled]=\"!hasFilter\">\n {{ 'core.clearFilters' | translate }}\n </dato-link>\n <dato-button datoSize=\"sm\" [datoTooltip]=\"hotKeyTooltip\" [datoHotkeys]=\"applyHotKeyConfig\" (click)=\"closePopUp()\" data-auto-id=\"apply-filters\">{{'core.apply' | translate}}</dato-button>\n </div>\n</form>\n",
11759
+ template: "<form class=\"container primary-0-background-color\" [formGroup]=\"filterForm\" datoForm\n *datoSubscribe=\"hasFilter$ as hasFilter\">\n <ng-container>\n <dato-accordion closeOthers=\"true\" class=\"filter-options\" [activeIds]=\"activeAccordionId\">\n <ng-container *ngIf=\"filterSections.Conditional\">\n\n <dato-accordion-group>\n <dato-accordion-header class=\"dato-note-bold primary-600-color\" data-auto-id=\"conditional-filters\"\n [class.primary-100-background-color]=\"header_1.isOpen\" #header_1>\n <div class=\"px-10 d-flex align-start-center\">\n <div class=\"filter-title d-flex-grow d-flex align-start-center\">{{'core.filterByCondition' | translate}}</div>\n <dato-icon class=\"primary-200-color\" height=\"18px\"\n [icon]=\"header_1.isOpen ? 'collapse' : 'expand'\"></dato-icon>\n </div>\n </dato-accordion-header>\n <dato-accordion-content #conditionalContent>\n <div class=\"conditional-content-container d-flex-column\" formGroupName=\"conditional\"\n [class.multi-conditions]=\"conditionsControls.length > 1\">\n <div class=\"operand d-flex-column mb-10\"\n [attr.data-auto-id]=\"'condition-' + i\"\n *ngFor=\"let operand of conditionsControls; index as i; last as last\">\n <div class=\"d-flex\">\n <div class=\"d-flex-column d-flex-grow min-width-0\">\n <ng-container formArrayName=\"conditions\">\n\n <ng-container [formGroupName]=\"i\">\n <dato-select datoSize=\"sm\" class=\"mb-10\" [attr.data-auto-id]=\"'condition-' + i + '-operand'\" formControlName=\"type\"\n datoSelectClass=\"operand-select\"\n [dataSet]=\"conditionalFilterOptions\"\n [isCombo]=\"false\" #select>\n <dato-option *ngFor=\"let option of select.data; index as index\"\n [option]=\"option\">\n {{ option.label }}\n </dato-option>\n </dato-select>\n <ng-container [ngSwitch]=\"filterType\">\n <div class=\"d-flex\" *ngSwitchCase=\"gridFilterTypes.Date\">\n <dato-date-picker [attr.data-auto-id]=\"'condition-date-' + i + '-value'\"\n formControlName=\"value\" class=\"d-flex-grow range-calendar\">\n <ng-template>\n <dato-date-picker-range *ngIf=\"getOperandType(i) === rangeOperand; else singleDate\"></dato-date-picker-range>\n <ng-template #singleDate>\n <dato-date-picker-single></dato-date-picker-single>\n </ng-template>\n </ng-template>\n </dato-date-picker>\n </div>\n <ng-container *ngIf=\"!isConditionalEmpty(operand)\">\n <dato-input *ngSwitchCase=\"gridFilterTypes.String\" datoSize=\"sm\"\n (keydown.enter.stop.prevent)=\"closePopUp()\"\n datoControlErrors [attr.data-auto-id]=\"'condition-string-' + i + '-value'\"\n [datoControlErrorsOnBlur]=\"false\"\n class=\"condition-value\"\n placeholder=\"core.filter\" formControlName=\"value\"\n [isFocused]=\"conditionalContent._expanded\"\n ></dato-input>\n <div class=\"d-flex\" *ngSwitchCase=\"gridFilterTypes.Number\">\n <dato-input-number (keydown.enter.stop.prevent)=\"closePopUp()\" [showControls]=\"false\"\n class=\"width-100 condition-value\" allowNegative=\"true\">\n <input type=\"number\" formControlName=\"value\" [attr.data-auto-id]=\"'condition-number-' + i + '-value'\"\n datoInputNumber datoSize=\"sm\" datoControlErrors [datoAutoFocus]=\"conditionalContent._expanded\"\n [datoControlErrorsOnBlur]=\"false\"/>\n </dato-input-number>\n <ng-container *ngIf=\"getOperandType(i) === rangeOperand\">\n <div class=\"mx-5\">-</div>\n <dato-input-number (keydown.enter.stop.prevent)=\"closePopUp()\"\n class=\"width-100 condition-value\" allowNegative=\"true\">\n <input type=\"number\" formControlName=\"rangeEnd\" [attr.data-auto-id]=\"'condition-number-' + i + '-range-end'\"\n datoInputNumber datoSize=\"sm\" datoControlErrors\n [datoControlErrorsOnBlur]=\"false\"/>\n </dato-input-number>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n <div>\n\n <dato-icon-button datoSize=\"md\"\n datoType=\"none\" icon=\"trash\"\n class=\"overflow-hidden delete\"\n datoTooltip=\"core.deleteFilterCondition\"\n [attr.data-auto-id]=\"'condition-' + i + '-remove'\"\n (click)=\"removeCondition(i)\"\n datoTooltipPosition=\"right-start\"></dato-icon-button>\n </div>\n </div>\n <dato-operator-toggler class=\"mt-10 justify-center width-100 d-flex\" data-auto-id=\"operator-toggler\"\n expanded=\"true\" [datoTogglerValue]=\"conditionsOperator\"\n *ngIf=\"conditionsControls.length > 1 && !last\"\n formControlName=\"operator\" #operatorToggler></dato-operator-toggler>\n </div>\n <div class=\"d-flex align-center\">\n <dato-link *ngIf=\"conditionsControls.length < 3\" class=\"no-select\" datoSize=\"sm\" data-auto-id=\"add-condition\"\n datoType=\"secondary\" (click)=\"addCondition()\">\n <dato-icon height=\"10px\" width=\"10px\" icon=\"plus-simple\"></dato-icon>\n {{ 'core.condition' | translate }}\n </dato-link>\n </div>\n </div>\n </dato-accordion-content>\n </dato-accordion-group>\n <div class=\"separator\"></div>\n </ng-container>\n <ng-container *ngIf=\"filterSections.By_Value\">\n <dato-accordion-group class=\"list-content\">\n <dato-accordion-header class=\"dato-note-bold primary-600-color\" data-auto-id=\"by-value-filters\"\n [class.primary-100-background-color]=\"header_2.isOpen\" #header_2>\n <div class=\"px-10 d-flex align-start-center\">\n <div class=\"filter-title d-flex d-flex-grow align-start-center\">{{'core.filterByValue' | translate}}</div>\n <dato-icon class=\"primary-200-color\" height=\"18px\"\n [icon]=\"header_2.isOpen ? 'collapse' : 'expand'\"></dato-icon>\n </div>\n </dato-accordion-header>\n <dato-accordion-content #byValueContent>\n <div class=\"value-content-container d-flex-column\">\n <dato-input datoSize=\"sm\" placeholder=\"core.search-all-values\" [debounceTime]=\"300\" #search [formControl]=\"listSearchControl\" [isFocused]=\"byValueContent._expanded\"></dato-input>\n <dato-list-v2 class=\"primary-0-background-color\"\n containerHeight=\"195px\"\n [withSelectAll]=\"true\"\n [clientSearch]=\"isClientSideGrid\"\n [sortByKey]=\"listSortByKey\"\n [labelType]=\"listLabelType\"\n [searchController]=\"search\"\n [options]=\"listOptions\"\n [isSortList]=\"!keepPredefinedListOriginalOrder\"\n [loading]=\"loadingList\"\n [noDataTpl]=\"isClientSideGrid ? null : noData\"\n formControlName=\"byValue\"\n data-auto-id=\"by-value-filters-list\">\n </dato-list-v2>\n <ng-template #noData>\n <div *ngIf=\"serverSearchErrored; else noResults\" class=\"mb-10 d-flex-1 d-flex-column align-center\" data-auto-id=\"by-value-server-error\">\n <img class=\"mt-20\" datoStaticSrc=\"core/grid/filter-server-error.svg\"/>\n <p class=\"dato-note-bold mt-10 mb-10 primary-300-color\">{{ 'core.something-went-wrong' | translate }}</p>\n <p class=\"dato-note-italic primary-300-color\">{{ 'core.try-again-later' | translate }}</p>\n </div>\n <ng-template #noResults>\n <dato-list-no-result class=\"mb-10 block\" data-auto-id=\"by-value-no-results\"></dato-list-no-result>\n </ng-template>\n </ng-template>\n </div>\n </dato-accordion-content>\n </dato-accordion-group>\n <div class=\"separator\"></div>\n </ng-container>\n </dato-accordion>\n </ng-container>\n <div class=\"actions no-select px-10 py-12 d-flex align-end-center\">\n <dato-link *ngIf=\"showClearFiltersButton\" class=\"mr-30\" datoType=\"secondary\" datoSize=\"sm\"\n (click)=\"clearFilters()\" data-auto-id=\"clear-filters\" [disabled]=\"!hasFilter\">\n {{ 'core.clearFilters' | translate }}\n </dato-link>\n <dato-button datoSize=\"sm\" [datoTooltip]=\"hotKeyTooltip\" [datoHotkeys]=\"applyHotKeyConfig\" (click)=\"closePopUp()\" data-auto-id=\"apply-filters\">{{'core.apply' | translate}}</dato-button>\n </div>\n</form>\n",
11736
11760
  changeDetection: ChangeDetectionStrategy.OnPush,
11737
11761
  styles: [":host dato-accordion-header{transition:background-color .2s ease-in-out}:host>.container{width:242px}:host .value-content-container dato-input{padding:10px}:host .conditional-content-container{padding:10px;transition:padding-right .2s ease-in-out}:host .conditional-content-container.multi-conditions{padding-right:0}:host .conditional-content-container.multi-conditions .delete{width:24px}:host .filter-title{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;height:40px;transition:color .2s ease-in-out}:host .separator{height:1px;width:100%}:host .delete{transition:width .2s ease-in-out;width:0}"]
11738
11762
  }),
@@ -11828,6 +11852,7 @@ let DatoGridColumnHeaderComponent = class DatoGridColumnHeaderComponent {
11828
11852
  const sortingOrder = this.column.getColDef() ? this.column.getColDef().sortingOrder : null;
11829
11853
  let sort;
11830
11854
  const currentSort = this.column.getSort();
11855
+ const colId = this.column.getColId();
11831
11856
  if (sortingOrder && sortingOrder.length > 0) {
11832
11857
  const currentSortIndex = sortingOrder.indexOf(currentSort);
11833
11858
  let newSortIndex;
@@ -11844,10 +11869,15 @@ let DatoGridColumnHeaderComponent = class DatoGridColumnHeaderComponent {
11844
11869
  }
11845
11870
  gridService._logEvent("Grids - Column Action" /* GRID_COLUMN_ACTION */, {
11846
11871
  action: 'Sort',
11847
- column: this.column.getColId()
11872
+ column: colId
11848
11873
  });
11849
11874
  gridQuery.isServerSide && gridService.setLoading(true);
11850
- this.params.setSort(sort);
11875
+ if (gridQuery.getGridOptions().sortByStore) {
11876
+ gridService.setSortByColumn(colId, sort);
11877
+ }
11878
+ else {
11879
+ this.params.setSort(sort);
11880
+ }
11851
11881
  });
11852
11882
  this.sortingInfo$ = gridQuery
11853
11883
  .waitForGrid(() => gridQuery.gridRef.sortChanged)
@@ -12713,38 +12743,36 @@ let GridService = class GridService {
12713
12743
  this.notifyFilterUpdate();
12714
12744
  }
12715
12745
  }
12746
+ setSortByColumn(colId, sort) {
12747
+ const sortToSet = this.gridQuery.getSort({ colId, sort });
12748
+ this.setGridSort(sortToSet);
12749
+ }
12716
12750
  setGridSort(gridSort) {
12717
12751
  if (gridSort && this.api && this.api.grid.getDisplayedRowCount() > 0) {
12718
12752
  const { colId, sort, sortIndex } = gridSort;
12719
- let sortToApply = gridSort;
12720
- if (!isNil(sortIndex)) {
12721
- const gridColumns = this.api.columns.getAllGridColumns();
12722
- if (gridColumns) {
12753
+ const gridColumns = this.api.columns.getAllGridColumns();
12754
+ if (gridColumns) {
12755
+ let sortToApply = gridSort;
12756
+ /** Sort by column id */
12757
+ const columnById = gridColumns.find((col) => {
12758
+ return (col.getColDef().showRowGroup || col.getColId()) === colId;
12759
+ });
12760
+ if (columnById) {
12761
+ sortToApply = { colId: columnById.getColId(), sort };
12762
+ }
12763
+ else if (!isNil(sortIndex)) {
12723
12764
  const valueColumns = this.api.columns.getValueColumns();
12724
12765
  const valueColumn = valueColumns.find((col) => col.getColId() === colId);
12725
12766
  const isPivotColId = colId.startsWith('pivot');
12726
12767
  if (isPivotColId || valueColumn) {
12727
12768
  /** Column is pivot value column, sort by index */
12728
12769
  const columnByIndex = gridColumns[sortIndex];
12729
- // const pivotValueColumn = columnByIndex && columnByIndex.getColDef().pivotValueColumn;
12730
- // const pivotValueColumnId = pivotValueColumn && pivotValueColumn.getColId();
12731
- // if (pivotValueColumnId === colId) {
12732
12770
  sortToApply = { colId: columnByIndex.getColId(), sort, sortIndex };
12733
- // }
12734
- }
12735
- else {
12736
- /** Sort by column id */
12737
- const columnById = gridColumns.find((col) => {
12738
- return (col.getColDef().showRowGroup || col.getColId()) === colId;
12739
- });
12740
- if (columnById) {
12741
- sortToApply = { colId: columnById.getColId(), sort };
12742
- }
12743
12771
  }
12744
12772
  }
12773
+ this.updateSettings({ sort: sortToApply });
12774
+ this.api.grid.setSortModel([sortToApply]);
12745
12775
  }
12746
- this.updateSettings({ sort: sortToApply });
12747
- this.api.grid.setSortModel([sortToApply]);
12748
12776
  }
12749
12777
  }
12750
12778
  updateFilter(column, filter) {
@@ -12801,8 +12829,7 @@ let GridService = class GridService {
12801
12829
  this.updateSettings({ gridAlignment, columnsSizes: null });
12802
12830
  }
12803
12831
  saveSettingsToServer(settings) {
12804
- const isGlobal = this.gridQuery.getGridOptions().isGlobalSettings;
12805
- this.storageAPI.set(this.gridName, settings, isGlobal);
12832
+ this.storageAPI.set(this.gridName, settings);
12806
12833
  }
12807
12834
  /**
12808
12835
  * @internal used to log grid events to the platform's logging service
@@ -13711,10 +13738,7 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
13711
13738
  .pipe(switchMap(() => {
13712
13739
  this.gridOptions = this.normalizeOptions();
13713
13740
  agGrid.gridOptions = this.gridOptions;
13714
- const isGlobal = this.gridOptions.isGlobalSettings;
13715
- const settingsLoader = this.gridOptions.saveSettings === false
13716
- ? of(null)
13717
- : this.storageAPI.get(this.gridOptions.gridName, isGlobal);
13741
+ const settingsLoader = this.gridOptions.saveSettings === false ? of(null) : this.storageAPI.get(this.gridOptions.gridName);
13718
13742
  return combineLatest([agGrid.gridReady, settingsLoader]);
13719
13743
  }), untilDestroyed(this))
13720
13744
  .subscribe(([{ api, columnApi }, savedSettings = {}]) => {
@@ -13817,11 +13841,10 @@ let DatoGridControllerComponent = class DatoGridControllerComponent {
13817
13841
  const data = this.getGridData();
13818
13842
  this.onGridChange.emit({
13819
13843
  filter: this.gridQuery.getExternalFilter(),
13820
- sort: this.gridQuery.getExternalSort(),
13844
+ sort: this.gridQuery.getSort(),
13821
13845
  type,
13822
13846
  data
13823
13847
  });
13824
- triggerWindowResize();
13825
13848
  });
13826
13849
  }
13827
13850
  listenToStoreSettingsChanges() {
@@ -14840,12 +14863,6 @@ let DatoGridV2ToolbarComponent = class DatoGridV2ToolbarComponent {
14840
14863
  this.registerGroupListeners();
14841
14864
  this.subscribeRowsSelectionData();
14842
14865
  }
14843
- getCellValueChangeEvent() {
14844
- return this.gridController.gridQuery.waitForGrid(() => this.gridQuery.gridRef.cellValueChanged.pipe(debounceTime(100), untilDestroyed(this)));
14845
- }
14846
- getRowDataUpdatedEvent() {
14847
- return this.gridController.gridQuery.waitForGrid(() => this.gridQuery.gridRef.rowDataUpdated.pipe(debounceTime(100), untilDestroyed(this)));
14848
- }
14849
14866
  onActionClick(action) {
14850
14867
  if (isFunction(action.onClick)) {
14851
14868
  const selectedRowsCount = this.gridController.gridQuery.getSelectedRowsCount();
@@ -18913,39 +18930,6 @@ DatoEditableHeaderModule = __decorate([
18913
18930
  * found in the LICENSE file at https://github.com/datorama/client-core/blob/master/LICENSE
18914
18931
  */
18915
18932
 
18916
- let RichTextService = class RichTextService {
18917
- constructor(http, config) {
18918
- this.http = http;
18919
- this.config = config;
18920
- }
18921
- getLib(appendScriptFunc, appendStyleFunc) {
18922
- if (!this.richTextScript$) {
18923
- this.initLib(appendScriptFunc, appendStyleFunc);
18924
- }
18925
- return this.richTextScript$;
18926
- }
18927
- initLib(appendScriptFunc, appendStyleFunc) {
18928
- this.richTextScript$ = combineLatest([
18929
- this.http
18930
- .get(`${this.config.paths.richText}/index.js`, { responseType: 'text' })
18931
- .pipe(tap(lib => appendScriptFunc(lib, 'rich-text-editor'))),
18932
- this.http
18933
- .get(`${this.config.paths.richText}/plugins/autocomplete/plugin.css`, { responseType: 'text' })
18934
- .pipe(tap(style => appendStyleFunc(style, 'tinymce-autocomplete')))
18935
- ]).pipe(shareReplay(1));
18936
- }
18937
- };
18938
- RichTextService.ctorParameters = () => [
18939
- { type: HttpClient },
18940
- { type: undefined, decorators: [{ type: Inject, args: [DATO_CORE_CONFIG,] }] }
18941
- ];
18942
- RichTextService.ɵprov = ɵɵdefineInjectable({ factory: function RichTextService_Factory() { return new RichTextService(ɵɵinject(HttpClient), ɵɵinject(DATO_CORE_CONFIG)); }, token: RichTextService, providedIn: "root" });
18943
- RichTextService = __decorate([
18944
- Injectable({ providedIn: 'root' }),
18945
- __param(1, Inject(DATO_CORE_CONFIG)),
18946
- __metadata("design:paramtypes", [HttpClient, Object])
18947
- ], RichTextService);
18948
-
18949
18933
  /**
18950
18934
  * @license
18951
18935
  * Copyright Datorama. All Rights Reserved.
@@ -18959,12 +18943,12 @@ const getTinymce = () => {
18959
18943
  };
18960
18944
  const ɵ0$3 = getTinymce;
18961
18945
  let DatoRichTextDirective = DatoRichTextDirective_1 = class DatoRichTextDirective extends BaseCustomControl {
18962
- constructor(ngZone, richTextService, config, host) {
18946
+ constructor(ngZone, http, host, config) {
18963
18947
  super();
18964
18948
  this.ngZone = ngZone;
18965
- this.richTextService = richTextService;
18966
- this.config = config;
18949
+ this.http = http;
18967
18950
  this.host = host;
18951
+ this.config = config;
18968
18952
  this.autocompleteOptions = {};
18969
18953
  this.forcePlainTextPasting = false;
18970
18954
  this.format = 'html';
@@ -18991,11 +18975,28 @@ let DatoRichTextDirective = DatoRichTextDirective_1 = class DatoRichTextDirectiv
18991
18975
  base: this.config.paths.richText,
18992
18976
  query: ''
18993
18977
  };
18994
- this.richTextService
18995
- .getLib(appendScript, appendStyle)
18996
- .pipe(untilDestroyed(this))
18997
- .subscribe(() => {
18978
+ /**
18979
+ * We support only one instance in load time
18980
+ */
18981
+ if (window.tinymce) {
18998
18982
  this.init.call(this);
18983
+ }
18984
+ else {
18985
+ this.loadLib().subscribe(lib => {
18986
+ appendScript(lib, 'rich-text-editor');
18987
+ this.init.call(this);
18988
+ this.loadAutoCompleteStyle();
18989
+ });
18990
+ }
18991
+ }
18992
+ loadLib() {
18993
+ return this.http.get(`${this.config.paths.richText}/index.js`, { responseType: 'text' });
18994
+ }
18995
+ loadAutoCompleteStyle() {
18996
+ this.http
18997
+ .get(`${this.config.paths.richText}/plugins/autocomplete/plugin.css`, { responseType: 'text' })
18998
+ .subscribe(style => {
18999
+ appendStyle(style, 'tinymce-autocomplete');
18999
19000
  });
19000
19001
  }
19001
19002
  initEditor(_, editor) {
@@ -19096,9 +19097,9 @@ let DatoRichTextDirective = DatoRichTextDirective_1 = class DatoRichTextDirectiv
19096
19097
  };
19097
19098
  DatoRichTextDirective.ctorParameters = () => [
19098
19099
  { type: NgZone },
19099
- { type: RichTextService },
19100
- { type: undefined, decorators: [{ type: Inject, args: [DATO_CORE_CONFIG,] }] },
19101
- { type: ElementRef }
19100
+ { type: HttpClient },
19101
+ { type: ElementRef },
19102
+ { type: undefined, decorators: [{ type: Inject, args: [DATO_CORE_CONFIG,] }] }
19102
19103
  ];
19103
19104
  __decorate([
19104
19105
  Input(),
@@ -19164,9 +19165,10 @@ DatoRichTextDirective = DatoRichTextDirective_1 = __decorate([
19164
19165
  }
19165
19166
  ]
19166
19167
  }),
19167
- __param(2, Inject(DATO_CORE_CONFIG)),
19168
+ __param(3, Inject(DATO_CORE_CONFIG)),
19168
19169
  __metadata("design:paramtypes", [NgZone,
19169
- RichTextService, Object, ElementRef])
19170
+ HttpClient,
19171
+ ElementRef, Object])
19170
19172
  ], DatoRichTextDirective);
19171
19173
 
19172
19174
  /**
@@ -21447,9 +21449,7 @@ let DatoBreadcrumbsComponent = class DatoBreadcrumbsComponent {
21447
21449
  this._breadcrumbs = [...start, ...dots, ...end];
21448
21450
  }
21449
21451
  initEditableHeader() {
21450
- this.headerControl.valueChanges
21451
- .pipe(debounceTime(300), untilDestroyed(this))
21452
- .subscribe((res) => {
21452
+ this.headerControl.valueChanges.pipe(debounceTime(300), untilDestroyed(this)).subscribe((res) => {
21453
21453
  this.updateEditableText.emit(res);
21454
21454
  this.cdr.detectChanges();
21455
21455
  });
@@ -22714,7 +22714,7 @@ function fixNgLeaks() {
22714
22714
  };
22715
22715
  }
22716
22716
 
22717
- window.coreVersion = '22.8.2-rc.';
22717
+ window.coreVersion = '22.9.0';
22718
22718
 
22719
22719
  /**
22720
22720
  * @license
@@ -22728,5 +22728,5 @@ window.coreVersion = '22.8.2-rc.';
22728
22728
  * Generated bundle index. Do not edit.
22729
22729
  */
22730
22730
 
22731
- 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 };
22731
+ 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 };
22732
22732
  //# sourceMappingURL=datorama-core.js.map