@porscheinformatik/clr-addons 15.0.0 → 15.2.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 (64) hide show
  1. package/clr-addons.module.d.ts +2 -1
  2. package/datagrid/datagrid-state-persistence/datagrid-state-persistence-model.interface.d.ts +2 -0
  3. package/datagrid/datagrid-state-persistence/index.d.ts +1 -0
  4. package/datagrid/datagrid-state-persistence/state-persistence-key.directive.d.ts +13 -4
  5. package/datagrid/datagrid-state-persistence/state-persistence-options.interface.d.ts +8 -0
  6. package/daterangepicker/daterange.constants.d.ts +21 -0
  7. package/daterangepicker/daterangepicker.module.d.ts +17 -0
  8. package/daterangepicker/directives/abstract-container.component.d.ts +53 -0
  9. package/daterangepicker/directives/datepicker/datepicker.component.d.ts +65 -0
  10. package/daterangepicker/directives/daterangepicker/daterangepicker.directive.d.ts +127 -0
  11. package/daterangepicker/directives/daterangepicker-container/daterangepicker-container.component.d.ts +118 -0
  12. package/daterangepicker/directives/if-daterange-error.directive.d.ts +40 -0
  13. package/daterangepicker/index.d.ts +13 -0
  14. package/daterangepicker/interfaces/daterange-preset.interface.d.ts +8 -0
  15. package/daterangepicker/interfaces/daterange.interface.d.ts +12 -0
  16. package/daterangepicker/models/day.model.d.ts +80 -0
  17. package/daterangepicker/models/popover-positions.model.d.ts +20 -0
  18. package/daterangepicker/providers/daterange-control-state.service.d.ts +42 -0
  19. package/daterangepicker/providers/daterange-parsing.service.d.ts +66 -0
  20. package/daterangepicker/providers/daterange.service.d.ts +38 -0
  21. package/daterangepicker/providers/opened-datepickers-tracker.service.d.ts +20 -0
  22. package/daterangepicker/validators/daterange-max.validator.d.ts +32 -0
  23. package/daterangepicker/validators/daterange-min.validator.d.ts +32 -0
  24. package/daterangepicker/validators/daterange-order.validator.d.ts +29 -0
  25. package/daterangepicker/validators/daterange-required.validator.d.ts +29 -0
  26. package/esm2020/clr-addons.module.mjs +8 -4
  27. package/esm2020/datagrid/datagrid-state-persistence/column-hidden-state-persistence.directive.mjs +3 -2
  28. package/esm2020/datagrid/datagrid-state-persistence/datagrid-state-persistence-model.interface.mjs +1 -1
  29. package/esm2020/datagrid/datagrid-state-persistence/index.mjs +2 -1
  30. package/esm2020/datagrid/datagrid-state-persistence/state-persistence-key.directive.mjs +58 -12
  31. package/esm2020/datagrid/datagrid-state-persistence/state-persistence-options.interface.mjs +2 -0
  32. package/esm2020/daterangepicker/daterange.constants.mjs +27 -0
  33. package/esm2020/daterangepicker/daterangepicker.module.mjs +58 -0
  34. package/esm2020/daterangepicker/directives/abstract-container.component.mjs +104 -0
  35. package/esm2020/daterangepicker/directives/datepicker/datepicker.component.mjs +97 -0
  36. package/esm2020/daterangepicker/directives/daterangepicker/daterangepicker.directive.mjs +256 -0
  37. package/esm2020/daterangepicker/directives/daterangepicker-container/daterangepicker-container.component.mjs +251 -0
  38. package/esm2020/daterangepicker/directives/if-daterange-error.directive.mjs +94 -0
  39. package/esm2020/daterangepicker/index.mjs +14 -0
  40. package/esm2020/daterangepicker/interfaces/daterange-preset.interface.mjs +2 -0
  41. package/esm2020/daterangepicker/interfaces/daterange.interface.mjs +2 -0
  42. package/esm2020/daterangepicker/models/day.model.mjs +99 -0
  43. package/esm2020/daterangepicker/models/popover-positions.model.mjs +66 -0
  44. package/esm2020/daterangepicker/providers/daterange-control-state.service.mjs +62 -0
  45. package/esm2020/daterangepicker/providers/daterange-parsing.service.mjs +206 -0
  46. package/esm2020/daterangepicker/providers/daterange.service.mjs +54 -0
  47. package/esm2020/daterangepicker/providers/opened-datepickers-tracker.service.mjs +36 -0
  48. package/esm2020/daterangepicker/validators/daterange-max.validator.mjs +85 -0
  49. package/esm2020/daterangepicker/validators/daterange-min.validator.mjs +85 -0
  50. package/esm2020/daterangepicker/validators/daterange-order.validator.mjs +75 -0
  51. package/esm2020/daterangepicker/validators/daterange-required.validator.mjs +71 -0
  52. package/esm2020/index.mjs +3 -2
  53. package/esm2020/searchfield/search-field.mjs +7 -5
  54. package/fesm2015/clr-addons.mjs +1977 -270
  55. package/fesm2015/clr-addons.mjs.map +1 -1
  56. package/fesm2020/clr-addons.mjs +1858 -177
  57. package/fesm2020/clr-addons.mjs.map +1 -1
  58. package/index.d.ts +1 -0
  59. package/package.json +3 -3
  60. package/searchfield/search-field.d.ts +2 -2
  61. package/styles/clr-addons-phs.css +0 -13
  62. package/styles/clr-addons-phs.css.map +1 -1
  63. package/styles/clr-addons-phs.min.css +1 -1
  64. package/styles/clr-addons-phs.min.css.map +1 -1
@@ -1,17 +1,17 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, NgModule, Injectable, EventEmitter, Input, Output, Directive, ViewChild, ContentChildren, TemplateRef, ViewChildren, HostBinding, ElementRef, Renderer2, forwardRef, ContentChild, HostListener, InjectionToken, Inject, Optional } from '@angular/core';
2
+ import { Component, NgModule, Injectable, EventEmitter, Input, Output, Directive, ViewChild, ContentChildren, TemplateRef, ViewChildren, HostBinding, ElementRef, Renderer2, forwardRef, ContentChild, Optional, HostListener, InjectionToken, Inject, LOCALE_ID, Self } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
- import { CommonModule, DOCUMENT } from '@angular/common';
4
+ import { CommonModule, getLocaleDateFormat, FormatWidth, DOCUMENT } from '@angular/common';
5
5
  import * as i3$1 from '@angular/forms';
6
6
  import { FormsModule, NG_VALIDATORS, NgControl, NG_VALUE_ACCESSOR } from '@angular/forms';
7
- import * as i2 from '@clr/angular';
8
- import { ClarityModule, ClrFormsModule, ClrDropdown, ClrForm, ClrAlert, ClrAxis, ClrSide, ClrAlignment, ClrPopoverToggleService, ClrPopoverEventsService, ClrPopoverPositionService, ClrIconModule, ClrDropdownModule, ClrDatagridPagination, ClrDatagridFilter } from '@clr/angular';
7
+ import * as i1$1 from '@clr/angular';
8
+ import { ClarityModule, ClrFormsModule, ClrDropdown, ClrForm, ClrAlert, ClrAxis, ClrSide, ClrAlignment, ClrPopoverToggleService, ClrPopoverEventsService, ClrPopoverPositionService, ClrIconModule, ClrDropdownModule, ClrDatagridSortOrder, DatagridPropertyComparator, ClrDatagridPagination, ClrDatagridFilter, ClrDateContainer, ClrLabel, ClrControlHelper, ClrControlError, ClrControlSuccess, ClrDatepickerModule } from '@clr/angular';
9
9
  import { Subject, BehaviorSubject, timer, asyncScheduler, interval, of, ReplaySubject, takeUntil as takeUntil$1, delay } from 'rxjs';
10
10
  import { takeUntil, observeOn, take } from 'rxjs/operators';
11
11
  import * as i3 from '@angular/router';
12
12
  import { RouterModule } from '@angular/router';
13
13
  import { trigger, transition, style, animate, state } from '@angular/animations';
14
- import { ClarityIcons, treeViewIcon, angleIcon, organizationIcon } from '@cds/core/icon';
14
+ import { ClarityIcons, treeViewIcon, angleIcon, organizationIcon, calendarIcon, exclamationCircleIcon, checkCircleIcon, windowCloseIcon } from '@cds/core/icon';
15
15
  import '@cds/core/icon/register.js';
16
16
 
17
17
  /*
@@ -28,7 +28,7 @@ class ClrBackButton {
28
28
  }
29
29
  }
30
30
  ClrBackButton.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrBackButton, deps: [{ token: i1.Location }], target: i0.ɵɵFactoryTarget.Component });
31
- ClrBackButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrBackButton, selector: "clr-back-button", ngImport: i0, template: "<button type=\"button\" class=\"btn btn-icon btn-link back-button\" (click)=\"back()\">\n <clr-icon shape=\"arrow\" dir=\"left\" size=\"36\"></clr-icon>\n</button>\n", dependencies: [{ kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }] });
31
+ ClrBackButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrBackButton, selector: "clr-back-button", ngImport: i0, template: "<button type=\"button\" class=\"btn btn-icon btn-link back-button\" (click)=\"back()\">\n <clr-icon shape=\"arrow\" dir=\"left\" size=\"36\"></clr-icon>\n</button>\n", dependencies: [{ kind: "directive", type: i1$1.ClrIconCustomTag, selector: "clr-icon" }] });
32
32
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrBackButton, decorators: [{
33
33
  type: Component,
34
34
  args: [{ selector: 'clr-back-button', template: "<button type=\"button\" class=\"btn btn-icon btn-link back-button\" (click)=\"back()\">\n <clr-icon shape=\"arrow\" dir=\"left\" size=\"36\"></clr-icon>\n</button>\n" }]
@@ -147,7 +147,7 @@ class ClrCollapseExpandSection {
147
147
  }
148
148
  }
149
149
  ClrCollapseExpandSection.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrCollapseExpandSection, deps: [], target: i0.ɵɵFactoryTarget.Component });
150
- ClrCollapseExpandSection.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrCollapseExpandSection, selector: "clr-collapse-expand-section", inputs: { isCollapsed: ["clrIsCollapsed", "isCollapsed"], disableHeaderStyles: ["clrDisableHeaderStyles", "disableHeaderStyles"] }, outputs: { collapsed: "clrCollapsed", expanded: "clrExpanded" }, ngImport: i0, template: "<div class=\"ces\">\n <div class=\"ces-title\" [class.disabled-header-styles]=\"disableHeaderStyles\">\n <h2 *ngIf=\"!disableHeaderStyles; else title\">\n <ng-container *ngTemplateOutlet=\"title\"></ng-container>\n </h2>\n <ng-template #title>\n <ng-content select=\"[clr-ces-title]\"></ng-content>\n <button type=\"button\" (click)=\"onCollapseExpand()\" class=\"btn btn-icon btn-link ces-caret-btn\">\n <clr-icon shape=\"caret up\" size=\"28\" class=\"ces-caret-icon\" [@rotateIcon]=\"isCollapsed\"></clr-icon>\n </button>\n </ng-template>\n </div>\n <div class=\"ces-subtitle\">\n <h4 *ngIf=\"!disableHeaderStyles; else subtitle\">\n <ng-container *ngTemplateOutlet=\"subtitle\"></ng-container>\n </h4>\n <ng-template #subtitle>\n <ng-content select=\"[clr-ces-subtitle]\"></ng-content>\n </ng-template>\n </div>\n <div [@collapseExpandAnimation] *ngIf=\"!isCollapsed\">\n <ng-content select=\"[clr-ces-content]\"></ng-content>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }], animations: [
150
+ ClrCollapseExpandSection.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrCollapseExpandSection, selector: "clr-collapse-expand-section", inputs: { isCollapsed: ["clrIsCollapsed", "isCollapsed"], disableHeaderStyles: ["clrDisableHeaderStyles", "disableHeaderStyles"] }, outputs: { collapsed: "clrCollapsed", expanded: "clrExpanded" }, ngImport: i0, template: "<div class=\"ces\">\n <div class=\"ces-title\" [class.disabled-header-styles]=\"disableHeaderStyles\">\n <h2 *ngIf=\"!disableHeaderStyles; else title\">\n <ng-container *ngTemplateOutlet=\"title\"></ng-container>\n </h2>\n <ng-template #title>\n <ng-content select=\"[clr-ces-title]\"></ng-content>\n <button type=\"button\" (click)=\"onCollapseExpand()\" class=\"btn btn-icon btn-link ces-caret-btn\">\n <clr-icon shape=\"caret up\" size=\"28\" class=\"ces-caret-icon\" [@rotateIcon]=\"isCollapsed\"></clr-icon>\n </button>\n </ng-template>\n </div>\n <div class=\"ces-subtitle\">\n <h4 *ngIf=\"!disableHeaderStyles; else subtitle\">\n <ng-container *ngTemplateOutlet=\"subtitle\"></ng-container>\n </h4>\n <ng-template #subtitle>\n <ng-content select=\"[clr-ces-subtitle]\"></ng-content>\n </ng-template>\n </div>\n <div [@collapseExpandAnimation] *ngIf=\"!isCollapsed\">\n <ng-content select=\"[clr-ces-content]\"></ng-content>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.ClrIconCustomTag, selector: "clr-icon" }], animations: [
151
151
  trigger('collapseExpandAnimation', [
152
152
  transition(':enter', [
153
153
  style({ opacity: 0, height: 0, overflow: 'hidden' }),
@@ -260,7 +260,7 @@ class ClrContentPanel {
260
260
  }
261
261
  }
262
262
  ClrContentPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrContentPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
263
- ClrContentPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrContentPanel, selector: "clr-content-panel", outputs: { opened: "clrOpened", closed: "clrClosed" }, host: { properties: { "class.content-panel": "true" } }, ngImport: i0, template: "<ng-container *ngIf=\"_open\">\n <div [@slideIn] class=\"content-panel-content-wrapper\" (@slideIn.done)=\"resizeWindow()\">\n <h3 class=\"content-panel-title\">\n <button type=\"button\" class=\"close content-panel-close-btn\" (click)=\"close()\">\n <clr-icon class=\"content-panel-close-icon\" shape=\"close\" size=\"36\"></clr-icon>\n </button>\n <ng-content select=\"[clr-content-panel-title]\"></ng-content>\n </h3>\n <ng-content select=\"[clr-content-panel-content]\"></ng-content>\n </div>\n <div [@fade] class=\"content-panel-backdrop\" (click)=\"close()\" (@fade.done)=\"resizeWindow()\"></div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }], animations: [
263
+ ClrContentPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrContentPanel, selector: "clr-content-panel", outputs: { opened: "clrOpened", closed: "clrClosed" }, host: { properties: { "class.content-panel": "true" } }, ngImport: i0, template: "<ng-container *ngIf=\"_open\">\n <div [@slideIn] class=\"content-panel-content-wrapper\" (@slideIn.done)=\"resizeWindow()\">\n <h3 class=\"content-panel-title\">\n <button type=\"button\" class=\"close content-panel-close-btn\" (click)=\"close()\">\n <clr-icon class=\"content-panel-close-icon\" shape=\"close\" size=\"36\"></clr-icon>\n </button>\n <ng-content select=\"[clr-content-panel-title]\"></ng-content>\n </h3>\n <ng-content select=\"[clr-content-panel-content]\"></ng-content>\n </div>\n <div [@fade] class=\"content-panel-backdrop\" (click)=\"close()\" (@fade.done)=\"resizeWindow()\"></div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.ClrIconCustomTag, selector: "clr-icon" }], animations: [
264
264
  trigger('slideIn', [
265
265
  transition(':enter', [style({ opacity: 0, width: 0 }), animate('0.2s', style({ opacity: 1, width: '*' }))]),
266
266
  transition(':leave', [style({ opacity: 1, width: '*' }), animate('0.2s', style({ opacity: 0, width: 0 }))]),
@@ -601,7 +601,7 @@ class ClrDotPager {
601
601
  }
602
602
  }
603
603
  ClrDotPager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDotPager, deps: [], target: i0.ɵɵFactoryTarget.Component });
604
- ClrDotPager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrDotPager, selector: "clr-dot-pager", inputs: { pages: ["clrPages", "pages"], currentPage: ["clrCurrentPage", "currentPage"] }, outputs: { currentPageChange: "clrCurrentPageChange" }, host: { properties: { "class.dot-pager": "true" } }, ngImport: i0, template: "<clr-radio-container *ngIf=\"pages > 0\" clrInline>\n <clr-radio-wrapper *ngFor=\"let a of pageArray(); let page = index\">\n <input clrRadio type=\"radio\" [value]=\"page+1\" [(ngModel)]=\"currentPage\" name=\"{{uniqueName}}\" />\n <label>&nbsp;</label>\n </clr-radio-wrapper>\n</clr-radio-container>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i2.ClrRadio, selector: "[clrRadio]" }, { kind: "component", type: i2.ClrRadioContainer, selector: "clr-radio-container", inputs: ["clrInline"] }, { kind: "component", type: i2.ClrRadioWrapper, selector: "clr-radio-wrapper" }, { kind: "directive", type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
604
+ ClrDotPager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrDotPager, selector: "clr-dot-pager", inputs: { pages: ["clrPages", "pages"], currentPage: ["clrCurrentPage", "currentPage"] }, outputs: { currentPageChange: "clrCurrentPageChange" }, host: { properties: { "class.dot-pager": "true" } }, ngImport: i0, template: "<clr-radio-container *ngIf=\"pages > 0\" clrInline>\n <clr-radio-wrapper *ngFor=\"let a of pageArray(); let page = index\">\n <input clrRadio type=\"radio\" [value]=\"page+1\" [(ngModel)]=\"currentPage\" name=\"{{uniqueName}}\" />\n <label>&nbsp;</label>\n </clr-radio-wrapper>\n</clr-radio-container>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i1$1.ClrRadio, selector: "[clrRadio]" }, { kind: "component", type: i1$1.ClrRadioContainer, selector: "clr-radio-container", inputs: ["clrInline"] }, { kind: "component", type: i1$1.ClrRadioWrapper, selector: "clr-radio-wrapper" }, { kind: "directive", type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
605
605
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDotPager, decorators: [{
606
606
  type: Component,
607
607
  args: [{ selector: 'clr-dot-pager', host: { '[class.dot-pager]': 'true' }, template: "<clr-radio-container *ngIf=\"pages > 0\" clrInline>\n <clr-radio-wrapper *ngFor=\"let a of pageArray(); let page = index\">\n <input clrRadio type=\"radio\" [value]=\"page+1\" [(ngModel)]=\"currentPage\" name=\"{{uniqueName}}\" />\n <label>&nbsp;</label>\n </clr-radio-wrapper>\n</clr-radio-container>\n" }]
@@ -877,7 +877,7 @@ class ClrFlowBar {
877
877
  }
878
878
  }
879
879
  ClrFlowBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrFlowBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
880
- ClrFlowBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrFlowBar, selector: "clr-flow-bar", inputs: { _steps: ["clrSteps", "_steps"], _activeStep: ["clrActiveStep", "_activeStep"] }, outputs: { _activeStepChange: "clrActiveStepChange" }, host: { properties: { "class.flow-bar": "true" } }, ngImport: i0, template: "<div class=\"flow-bar-wrapper\">\n <ng-container *ngFor=\"let step of _steps; let index = index; let last = last\">\n <div class=\"flow-bar-step\" [class.active]=\"step === _activeStep\">\n <button\n class=\"btn btn-link flow-bar-btn\"\n [disabled]=\"!step.enabled\"\n [class.active]=\"step === _activeStep\"\n (click)=\"changeActiveStep(step)\"\n >\n {{index + 1}}. {{(step.title | async)}}\n </button>\n <clr-icon shape=\"caret right\" *ngIf=\"!last\"></clr-icon>\n </div>\n </ng-container>\n</div>\n<clr-dropdown class=\"flow-bar-dropdown clr-flex-fill\">\n <button type=\"button\" class=\"btn btn-outline-primary\" clrDropdownTrigger>\n {{_steps.indexOf(_activeStep) + 1}}. {{_activeStep?.title | async}}\n <clr-icon shape=\"caret down\"></clr-icon>\n </button>\n <clr-dropdown-menu>\n <ng-container *ngFor=\"let step of _steps; let index = index; let last = last\">\n <button clrDropdownItem type=\"button\" class=\"btn\" [disabled]=\"!step.enabled\" (click)=\"changeActiveStep(step)\">\n {{index + 1}}. {{step.title | async}}\n </button>\n </ng-container>\n </clr-dropdown-menu>\n</clr-dropdown>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "component", type: i2.ClrDropdown, selector: "clr-dropdown", inputs: ["clrCloseMenuOnItemClick"] }, { kind: "component", type: i2.ClrDropdownMenu, selector: "clr-dropdown-menu", inputs: ["clrPosition"] }, { kind: "directive", type: i2.ClrDropdownTrigger, selector: "[clrDropdownTrigger],[clrDropdownToggle]" }, { kind: "directive", type: i2.ClrDropdownItem, selector: "[clrDropdownItem]", inputs: ["clrDisabled", "id"] }, { kind: "directive", type: ClrDropdownOverflowDirective, selector: "clr-dropdown-menu", inputs: ["clrDropdownMenuMaxHeight", "clrDropdownMenuItemMinHeight"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
880
+ ClrFlowBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrFlowBar, selector: "clr-flow-bar", inputs: { _steps: ["clrSteps", "_steps"], _activeStep: ["clrActiveStep", "_activeStep"] }, outputs: { _activeStepChange: "clrActiveStepChange" }, host: { properties: { "class.flow-bar": "true" } }, ngImport: i0, template: "<div class=\"flow-bar-wrapper\">\n <ng-container *ngFor=\"let step of _steps; let index = index; let last = last\">\n <div class=\"flow-bar-step\" [class.active]=\"step === _activeStep\">\n <button\n class=\"btn btn-link flow-bar-btn\"\n [disabled]=\"!step.enabled\"\n [class.active]=\"step === _activeStep\"\n (click)=\"changeActiveStep(step)\"\n >\n {{index + 1}}. {{(step.title | async)}}\n </button>\n <clr-icon shape=\"caret right\" *ngIf=\"!last\"></clr-icon>\n </div>\n </ng-container>\n</div>\n<clr-dropdown class=\"flow-bar-dropdown clr-flex-fill\">\n <button type=\"button\" class=\"btn btn-outline-primary\" clrDropdownTrigger>\n {{_steps.indexOf(_activeStep) + 1}}. {{_activeStep?.title | async}}\n <clr-icon shape=\"caret down\"></clr-icon>\n </button>\n <clr-dropdown-menu>\n <ng-container *ngFor=\"let step of _steps; let index = index; let last = last\">\n <button clrDropdownItem type=\"button\" class=\"btn\" [disabled]=\"!step.enabled\" (click)=\"changeActiveStep(step)\">\n {{index + 1}}. {{step.title | async}}\n </button>\n </ng-container>\n </clr-dropdown-menu>\n</clr-dropdown>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "component", type: i1$1.ClrDropdown, selector: "clr-dropdown", inputs: ["clrCloseMenuOnItemClick"] }, { kind: "component", type: i1$1.ClrDropdownMenu, selector: "clr-dropdown-menu", inputs: ["clrPosition"] }, { kind: "directive", type: i1$1.ClrDropdownTrigger, selector: "[clrDropdownTrigger],[clrDropdownToggle]" }, { kind: "directive", type: i1$1.ClrDropdownItem, selector: "[clrDropdownItem]", inputs: ["clrDisabled", "id"] }, { kind: "directive", type: ClrDropdownOverflowDirective, selector: "clr-dropdown-menu", inputs: ["clrDropdownMenuMaxHeight", "clrDropdownMenuItemMinHeight"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
881
881
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrFlowBar, decorators: [{
882
882
  type: Component,
883
883
  args: [{ selector: 'clr-flow-bar', host: {
@@ -988,7 +988,7 @@ class ClrGenericQuickList {
988
988
  }
989
989
  }
990
990
  ClrGenericQuickList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrGenericQuickList, deps: [], target: i0.ɵɵFactoryTarget.Component });
991
- ClrGenericQuickList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrGenericQuickList, selector: "clr-generic-quick-list", inputs: { allItems: ["clrAllItems", "allItems"], addLabel: ["clrAddLabel", "addLabel"], addPossible: ["clrAddPossible", "addPossible"], blankItem: ["clrBlankItem", "blankItem"], controlClasses: ["clrControlClasses", "controlClasses"], required: ["clrMandatory", "required"], readonly: "readonly" }, outputs: { added: "clrAdded", removed: "clrRemoved" }, host: { properties: { "class.generic-quick-list": "true", "class.clr-form-control": "true" } }, queries: [{ propertyName: "itemTemplate", predicate: TemplateRef }], viewQueries: [{ propertyName: "itemRows", predicate: ["row"], descendants: true }], ngImport: i0, template: "<ng-content select=\"label\"></ng-content>\n<div class=\"clr-control-container\" [ngClass]=\"controlClasses\">\n <ng-content select=\".header-container\"></ng-content>\n\n <ng-container *ngFor=\"let item of allItems\">\n <div class=\"controls-wrapper\">\n <div class=\"controls-container\" *ngIf=\"itemTemplate\" #row>\n <ng-container *ngTemplateOutlet=\"itemTemplate.get(0); context: {$implicit:item}\"></ng-container>\n </div>\n <button\n *ngIf=\"!(readonly || readonly === '')\"\n type=\"button\"\n class=\"btn btn-icon btn-link btn-trash\"\n [disabled]=\"required && allItems.length === 1\"\n (click)=\"removeItem(item)\"\n >\n <clr-icon shape=\"trash\"></clr-icon>\n </button>\n </div>\n </ng-container>\n\n <button\n *ngIf=\"!(readonly || readonly === '')\"\n type=\"button\"\n class=\"btn btn-link btn-sm btn-add\"\n (click)=\"addItem()\"\n [disabled]=\"!addPossible\"\n >\n {{addLabel}}\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }] });
991
+ ClrGenericQuickList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrGenericQuickList, selector: "clr-generic-quick-list", inputs: { allItems: ["clrAllItems", "allItems"], addLabel: ["clrAddLabel", "addLabel"], addPossible: ["clrAddPossible", "addPossible"], blankItem: ["clrBlankItem", "blankItem"], controlClasses: ["clrControlClasses", "controlClasses"], required: ["clrMandatory", "required"], readonly: "readonly" }, outputs: { added: "clrAdded", removed: "clrRemoved" }, host: { properties: { "class.generic-quick-list": "true", "class.clr-form-control": "true" } }, queries: [{ propertyName: "itemTemplate", predicate: TemplateRef }], viewQueries: [{ propertyName: "itemRows", predicate: ["row"], descendants: true }], ngImport: i0, template: "<ng-content select=\"label\"></ng-content>\n<div class=\"clr-control-container\" [ngClass]=\"controlClasses\">\n <ng-content select=\".header-container\"></ng-content>\n\n <ng-container *ngFor=\"let item of allItems\">\n <div class=\"controls-wrapper\">\n <div class=\"controls-container\" *ngIf=\"itemTemplate\" #row>\n <ng-container *ngTemplateOutlet=\"itemTemplate.get(0); context: {$implicit:item}\"></ng-container>\n </div>\n <button\n *ngIf=\"!(readonly || readonly === '')\"\n type=\"button\"\n class=\"btn btn-icon btn-link btn-trash\"\n [disabled]=\"required && allItems.length === 1\"\n (click)=\"removeItem(item)\"\n >\n <clr-icon shape=\"trash\"></clr-icon>\n </button>\n </div>\n </ng-container>\n\n <button\n *ngIf=\"!(readonly || readonly === '')\"\n type=\"button\"\n class=\"btn btn-link btn-sm btn-add\"\n (click)=\"addItem()\"\n [disabled]=\"!addPossible\"\n >\n {{addLabel}}\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.ClrIconCustomTag, selector: "clr-icon" }] });
992
992
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrGenericQuickList, decorators: [{
993
993
  type: Component,
994
994
  args: [{ selector: 'clr-generic-quick-list', host: { '[class.generic-quick-list]': 'true', '[class.clr-form-control]': 'true' }, template: "<ng-content select=\"label\"></ng-content>\n<div class=\"clr-control-container\" [ngClass]=\"controlClasses\">\n <ng-content select=\".header-container\"></ng-content>\n\n <ng-container *ngFor=\"let item of allItems\">\n <div class=\"controls-wrapper\">\n <div class=\"controls-container\" *ngIf=\"itemTemplate\" #row>\n <ng-container *ngTemplateOutlet=\"itemTemplate.get(0); context: {$implicit:item}\"></ng-container>\n </div>\n <button\n *ngIf=\"!(readonly || readonly === '')\"\n type=\"button\"\n class=\"btn btn-icon btn-link btn-trash\"\n [disabled]=\"required && allItems.length === 1\"\n (click)=\"removeItem(item)\"\n >\n <clr-icon shape=\"trash\"></clr-icon>\n </button>\n </div>\n </ng-container>\n\n <button\n *ngIf=\"!(readonly || readonly === '')\"\n type=\"button\"\n class=\"btn btn-link btn-sm btn-add\"\n (click)=\"addItem()\"\n [disabled]=\"!addPossible\"\n >\n {{addLabel}}\n </button>\n</div>\n" }]
@@ -1276,7 +1276,7 @@ class ClrMainNavGroup {
1276
1276
  }
1277
1277
  }
1278
1278
  ClrMainNavGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrMainNavGroup, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
1279
- ClrMainNavGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrMainNavGroup, selector: "clr-main-nav-group", inputs: { title: ["clrTitle", "title"] }, host: { properties: { "class.main-nav-group": "true" } }, queries: [{ propertyName: "items", predicate: ClrMainNavGroupItem }], ngImport: i0, template: "<section\n class=\"nav-link collapsible\"\n (click)=\"onClick($event)\"\n (keydown.enter)=\"onClick($event)\"\n (keydown.space)=\"onClick($event)\"\n [class.active]=\"isActive()\"\n tabindex=\"0\"\n>\n <input id=\"{{prefix}}{{id}}\" type=\"checkbox\" [checked]=\"isChecked()\" />\n <label class=\"nav-text nav-trigger\" for=\"{{prefix}}{{id}}\">{{title}}<clr-icon shape=\"caret down\"></clr-icon></label>\n <div class=\"nav-list dropdown-menu\">\n <ng-content></ng-content>\n </div>\n</section>\n", dependencies: [{ kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i2.ClrLabel, selector: "label", inputs: ["for"] }] });
1279
+ ClrMainNavGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrMainNavGroup, selector: "clr-main-nav-group", inputs: { title: ["clrTitle", "title"] }, host: { properties: { "class.main-nav-group": "true" } }, queries: [{ propertyName: "items", predicate: ClrMainNavGroupItem }], ngImport: i0, template: "<section\n class=\"nav-link collapsible\"\n (click)=\"onClick($event)\"\n (keydown.enter)=\"onClick($event)\"\n (keydown.space)=\"onClick($event)\"\n [class.active]=\"isActive()\"\n tabindex=\"0\"\n>\n <input id=\"{{prefix}}{{id}}\" type=\"checkbox\" [checked]=\"isChecked()\" />\n <label class=\"nav-text nav-trigger\" for=\"{{prefix}}{{id}}\">{{title}}<clr-icon shape=\"caret down\"></clr-icon></label>\n <div class=\"nav-list dropdown-menu\">\n <ng-content></ng-content>\n </div>\n</section>\n", dependencies: [{ kind: "directive", type: i1$1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i1$1.ClrLabel, selector: "label", inputs: ["for"] }] });
1280
1280
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrMainNavGroup, decorators: [{
1281
1281
  type: Component,
1282
1282
  args: [{ selector: 'clr-main-nav-group', host: { '[class.main-nav-group]': 'true' }, template: "<section\n class=\"nav-link collapsible\"\n (click)=\"onClick($event)\"\n (keydown.enter)=\"onClick($event)\"\n (keydown.space)=\"onClick($event)\"\n [class.active]=\"isActive()\"\n tabindex=\"0\"\n>\n <input id=\"{{prefix}}{{id}}\" type=\"checkbox\" [checked]=\"isChecked()\" />\n <label class=\"nav-text nav-trigger\" for=\"{{prefix}}{{id}}\">{{title}}<clr-icon shape=\"caret down\"></clr-icon></label>\n <div class=\"nav-list dropdown-menu\">\n <ng-content></ng-content>\n </div>\n</section>\n" }]
@@ -1692,7 +1692,7 @@ ClrMultilingualSelector.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
1692
1692
  </clr-dropdown-menu>
1693
1693
  </clr-dropdown>
1694
1694
  </div>
1695
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i2.ClrIfOpen, selector: "[clrIfOpen]", inputs: ["clrIfOpen"], outputs: ["clrIfOpenChange"] }, { kind: "component", type: i2.ClrDropdown, selector: "clr-dropdown", inputs: ["clrCloseMenuOnItemClick"] }, { kind: "component", type: i2.ClrDropdownMenu, selector: "clr-dropdown-menu", inputs: ["clrPosition"] }, { kind: "directive", type: i2.ClrDropdownTrigger, selector: "[clrDropdownTrigger],[clrDropdownToggle]" }, { kind: "directive", type: i2.ClrDropdownItem, selector: "[clrDropdownItem]", inputs: ["clrDisabled", "id"] }, { kind: "directive", type: ClrDropdownOverflowDirective, selector: "clr-dropdown-menu", inputs: ["clrDropdownMenuMaxHeight", "clrDropdownMenuItemMinHeight"] }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }] });
1695
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i1$1.ClrIfOpen, selector: "[clrIfOpen]", inputs: ["clrIfOpen"], outputs: ["clrIfOpenChange"] }, { kind: "component", type: i1$1.ClrDropdown, selector: "clr-dropdown", inputs: ["clrCloseMenuOnItemClick"] }, { kind: "component", type: i1$1.ClrDropdownMenu, selector: "clr-dropdown-menu", inputs: ["clrPosition"] }, { kind: "directive", type: i1$1.ClrDropdownTrigger, selector: "[clrDropdownTrigger],[clrDropdownToggle]" }, { kind: "directive", type: i1$1.ClrDropdownItem, selector: "[clrDropdownItem]", inputs: ["clrDisabled", "id"] }, { kind: "directive", type: ClrDropdownOverflowDirective, selector: "clr-dropdown-menu", inputs: ["clrDropdownMenuMaxHeight", "clrDropdownMenuItemMinHeight"] }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }] });
1696
1696
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrMultilingualSelector, decorators: [{
1697
1697
  type: Component,
1698
1698
  args: [{
@@ -1754,7 +1754,7 @@ ClrMultilingualInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
1754
1754
  multi: true,
1755
1755
  },
1756
1756
  ControlIdService,
1757
- ], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"label\"></ng-content>\n<div class=\"clr-control-container\" [ngClass]=\"controlClasses\">\n <clr-multilingual-selector\n *ngIf=\"showLanguageSelector()\"\n [disabled]=\"disabled\"\n [texts]=\"shownTexts\"\n [selectedLang]=\"selectedLang\"\n (selectedLangChange)=\"changeLanguage($event)\"\n >\n </clr-multilingual-selector>\n <div class=\"clr-multi-input-wrapper\">\n <div class=\"clr-input-wrapper\">\n <input\n class=\"clr-input\"\n type=\"text\"\n [id]=\"inputId\"\n [ngModel]=\"!!shownTexts && !!selectedLang ? shownTexts.get(selectedLang) : ''\"\n (ngModelChange)=\"setText(selectedLang, $event)\"\n (blur)=\"onTouch()\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly || readonly === ''\"\n autocomplete=\"off\"\n [maxlength]=\"maxlength || null\"\n #input\n />\n <clr-icon *ngIf=\"showError\" class=\"clr-validate-icon\" shape=\"exclamation-circle\" aria-hidden=\"true\"></clr-icon>\n </div>\n <ng-content select=\"clr-control-helper\" *ngIf=\"!showError\"></ng-content>\n <ng-content select=\"clr-control-error\" *ngIf=\"showError\"></ng-content>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrMultilingualSelector, selector: "clr-multilingual-selector", inputs: ["disabled", "texts", "selectedLang"], outputs: ["selectedLangChange"] }] });
1757
+ ], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"label\"></ng-content>\n<div class=\"clr-control-container\" [ngClass]=\"controlClasses\">\n <clr-multilingual-selector\n *ngIf=\"showLanguageSelector()\"\n [disabled]=\"disabled\"\n [texts]=\"shownTexts\"\n [selectedLang]=\"selectedLang\"\n (selectedLangChange)=\"changeLanguage($event)\"\n >\n </clr-multilingual-selector>\n <div class=\"clr-multi-input-wrapper\">\n <div class=\"clr-input-wrapper\">\n <input\n class=\"clr-input\"\n type=\"text\"\n [id]=\"inputId\"\n [ngModel]=\"!!shownTexts && !!selectedLang ? shownTexts.get(selectedLang) : ''\"\n (ngModelChange)=\"setText(selectedLang, $event)\"\n (blur)=\"onTouch()\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly || readonly === ''\"\n autocomplete=\"off\"\n [maxlength]=\"maxlength || null\"\n #input\n />\n <clr-icon *ngIf=\"showError\" class=\"clr-validate-icon\" shape=\"exclamation-circle\" aria-hidden=\"true\"></clr-icon>\n </div>\n <ng-content select=\"clr-control-helper\" *ngIf=\"!showError\"></ng-content>\n <ng-content select=\"clr-control-error\" *ngIf=\"showError\"></ng-content>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrMultilingualSelector, selector: "clr-multilingual-selector", inputs: ["disabled", "texts", "selectedLang"], outputs: ["selectedLangChange"] }] });
1758
1758
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrMultilingualInput, decorators: [{
1759
1759
  type: Component,
1760
1760
  args: [{ selector: 'clr-multilingual-input', providers: [
@@ -1785,7 +1785,7 @@ ClrMultilingualTextarea.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
1785
1785
  multi: true,
1786
1786
  },
1787
1787
  ControlIdService,
1788
- ], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"label\"></ng-content>\n<div class=\"clr-control-container\" [ngClass]=\"controlClasses\">\n <clr-multilingual-selector\n *ngIf=\"showLanguageSelector()\"\n [disabled]=\"disabled\"\n [texts]=\"shownTexts\"\n [selectedLang]=\"selectedLang\"\n (selectedLangChange)=\"changeLanguage($event)\"\n >\n </clr-multilingual-selector>\n <div class=\"clr-multi-input-wrapper\">\n <div class=\"clr-textarea-wrapper\">\n <textarea\n class=\"clr-textarea\"\n [id]=\"inputId\"\n [ngModel]=\"!!shownTexts && !!selectedLang ? shownTexts.get(selectedLang) : ''\"\n (ngModelChange)=\"setText(selectedLang, $event)\"\n (blur)=\"onTouch()\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly || readonly === ''\"\n [maxlength]=\"maxlength || null\"\n [rows]=\"rows || 1\"\n #input\n ></textarea>\n <clr-icon *ngIf=\"showError\" class=\"clr-validate-icon\" shape=\"exclamation-circle\" aria-hidden=\"true\"></clr-icon>\n </div>\n <ng-content select=\"clr-control-helper\" *ngIf=\"!showError\"></ng-content>\n <ng-content select=\"clr-control-error\" *ngIf=\"showError\"></ng-content>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrMultilingualSelector, selector: "clr-multilingual-selector", inputs: ["disabled", "texts", "selectedLang"], outputs: ["selectedLangChange"] }] });
1788
+ ], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"label\"></ng-content>\n<div class=\"clr-control-container\" [ngClass]=\"controlClasses\">\n <clr-multilingual-selector\n *ngIf=\"showLanguageSelector()\"\n [disabled]=\"disabled\"\n [texts]=\"shownTexts\"\n [selectedLang]=\"selectedLang\"\n (selectedLangChange)=\"changeLanguage($event)\"\n >\n </clr-multilingual-selector>\n <div class=\"clr-multi-input-wrapper\">\n <div class=\"clr-textarea-wrapper\">\n <textarea\n class=\"clr-textarea\"\n [id]=\"inputId\"\n [ngModel]=\"!!shownTexts && !!selectedLang ? shownTexts.get(selectedLang) : ''\"\n (ngModelChange)=\"setText(selectedLang, $event)\"\n (blur)=\"onTouch()\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly || readonly === ''\"\n [maxlength]=\"maxlength || null\"\n [rows]=\"rows || 1\"\n #input\n ></textarea>\n <clr-icon *ngIf=\"showError\" class=\"clr-validate-icon\" shape=\"exclamation-circle\" aria-hidden=\"true\"></clr-icon>\n </div>\n <ng-content select=\"clr-control-helper\" *ngIf=\"!showError\"></ng-content>\n <ng-content select=\"clr-control-error\" *ngIf=\"showError\"></ng-content>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrMultilingualSelector, selector: "clr-multilingual-selector", inputs: ["disabled", "texts", "selectedLang"], outputs: ["selectedLangChange"] }] });
1789
1789
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrMultilingualTextarea, decorators: [{
1790
1790
  type: Component,
1791
1791
  args: [{ selector: 'clr-multilingual-textarea', providers: [
@@ -1959,7 +1959,7 @@ class ClrNotification {
1959
1959
  }
1960
1960
  }
1961
1961
  ClrNotification.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrNotification, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
1962
- ClrNotification.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrNotification, selector: "clr-notification", inputs: { timeout: "timeout", notificationType: "notificationType", dismissable: "dismissable", progressbar: "progressbar" }, outputs: { closed: "closed" }, host: { properties: { "class.notification": "true" } }, viewQueries: [{ propertyName: "clrAlert", first: true, predicate: ClrAlert, descendants: true, static: true }], ngImport: i0, template: "<div class=\"notification__wrapper\" [@slideDown] [@move]=\"state\" [@fade]=\"state\">\n <div class=\"progress top\" [ngClass]=\"notificationType\" *ngIf=\"progressbar && timeout > 0\">\n <progress class=\"progress\" [max]=\"timeout\" [value]=\"progressStatus\"></progress>\n </div>\n <clr-alert\n [clrAlertType]=\"notificationType\"\n [clrAlertAppLevel]=\"true\"\n [clrAlertClosable]=\"dismissable\"\n (clrAlertClosedChange)=\"close()\"\n >\n <div class=\"alert-item\">\n <span class=\"alert-text\">\n <ng-content select=\"[clr-notification-message]\"></ng-content>\n </span>\n </div>\n </clr-alert>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ClrAlert, selector: "clr-alert", inputs: ["clrAlertSizeSmall", "clrAlertClosable", "clrAlertAppLevel", "clrCloseButtonAriaLabel", "clrAlertClosed", "clrAlertType", "clrAlertIcon"], outputs: ["clrAlertClosedChange"] }, { kind: "directive", type: i2.ClrAlertText, selector: ".alert-text" }], animations: [
1962
+ ClrNotification.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrNotification, selector: "clr-notification", inputs: { timeout: "timeout", notificationType: "notificationType", dismissable: "dismissable", progressbar: "progressbar" }, outputs: { closed: "closed" }, host: { properties: { "class.notification": "true" } }, viewQueries: [{ propertyName: "clrAlert", first: true, predicate: ClrAlert, descendants: true, static: true }], ngImport: i0, template: "<div class=\"notification__wrapper\" [@slideDown] [@move]=\"state\" [@fade]=\"state\">\n <div class=\"progress top\" [ngClass]=\"notificationType\" *ngIf=\"progressbar && timeout > 0\">\n <progress class=\"progress\" [max]=\"timeout\" [value]=\"progressStatus\"></progress>\n </div>\n <clr-alert\n [clrAlertType]=\"notificationType\"\n [clrAlertAppLevel]=\"true\"\n [clrAlertClosable]=\"dismissable\"\n (clrAlertClosedChange)=\"close()\"\n >\n <div class=\"alert-item\">\n <span class=\"alert-text\">\n <ng-content select=\"[clr-notification-message]\"></ng-content>\n </span>\n </div>\n </clr-alert>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1$1.ClrAlert, selector: "clr-alert", inputs: ["clrAlertSizeSmall", "clrAlertClosable", "clrAlertAppLevel", "clrCloseButtonAriaLabel", "clrAlertClosed", "clrAlertType", "clrAlertIcon"], outputs: ["clrAlertClosedChange"] }, { kind: "directive", type: i1$1.ClrAlertText, selector: ".alert-text" }], animations: [
1963
1963
  trigger('slideDown', [
1964
1964
  transition(':enter', [
1965
1965
  style({ transform: 'translateY(-200%)' }),
@@ -2669,7 +2669,7 @@ class ClrPager {
2669
2669
  }
2670
2670
  }
2671
2671
  ClrPager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrPager, deps: [], target: i0.ɵɵFactoryTarget.Component });
2672
- ClrPager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrPager, selector: "clr-pager", inputs: { pageSize: ["clrPageSize", "pageSize"], totalItems: ["clrTotalItems", "totalItems"], last: ["clrLast", "last"], page: ["clrPage", "page"] }, outputs: { pageChange: "clrPageChange" }, host: { properties: { "class.pager": "true" } }, ngImport: i0, template: "<div class=\"btn-group\" *ngIf=\"last > 1\">\n <button class=\"btn pagination-previous\" (click)=\"previous()\" [disabled]=\"page == 1\">\n <clr-icon shape=\"angle left\"></clr-icon>\n </button>\n <button *ngIf=\"page > 2\" class=\"btn\" (click)=\"page = 1\">1</button>\n <button *ngIf=\"page > 3\" class=\"btn\" disabled>...</button>\n\n <ng-container *ngFor=\"let pageNum of middlePages\">\n <button *ngIf=\"pageNum !== page; else activePage\" class=\"btn\" (click)=\"page = pageNum\">{{pageNum}}</button>\n <ng-template #activePage>\n <button class=\"btn btn-primary\" type=\"button\">{{pageNum}}</button>\n </ng-template>\n </ng-container>\n\n <button *ngIf=\"page < last - 2\" class=\"btn\" disabled>...</button>\n <button *ngIf=\"page < last - 1\" class=\"btn\" (click)=\"page = last\">{{last}}</button>\n <button class=\"btn pagination-next\" (click)=\"next()\" [disabled]=\"page == last\">\n <clr-icon shape=\"angle right\"></clr-icon>\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }] });
2672
+ ClrPager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrPager, selector: "clr-pager", inputs: { pageSize: ["clrPageSize", "pageSize"], totalItems: ["clrTotalItems", "totalItems"], last: ["clrLast", "last"], page: ["clrPage", "page"] }, outputs: { pageChange: "clrPageChange" }, host: { properties: { "class.pager": "true" } }, ngImport: i0, template: "<div class=\"btn-group\" *ngIf=\"last > 1\">\n <button class=\"btn pagination-previous\" (click)=\"previous()\" [disabled]=\"page == 1\">\n <clr-icon shape=\"angle left\"></clr-icon>\n </button>\n <button *ngIf=\"page > 2\" class=\"btn\" (click)=\"page = 1\">1</button>\n <button *ngIf=\"page > 3\" class=\"btn\" disabled>...</button>\n\n <ng-container *ngFor=\"let pageNum of middlePages\">\n <button *ngIf=\"pageNum !== page; else activePage\" class=\"btn\" (click)=\"page = pageNum\">{{pageNum}}</button>\n <ng-template #activePage>\n <button class=\"btn btn-primary\" type=\"button\">{{pageNum}}</button>\n </ng-template>\n </ng-container>\n\n <button *ngIf=\"page < last - 2\" class=\"btn\" disabled>...</button>\n <button *ngIf=\"page < last - 1\" class=\"btn\" (click)=\"page = last\">{{last}}</button>\n <button class=\"btn pagination-next\" (click)=\"next()\" [disabled]=\"page == last\">\n <clr-icon shape=\"angle right\"></clr-icon>\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.ClrIconCustomTag, selector: "clr-icon" }] });
2673
2673
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrPager, decorators: [{
2674
2674
  type: Component,
2675
2675
  args: [{ selector: 'clr-pager', host: { '[class.pager]': 'true' }, template: "<div class=\"btn-group\" *ngIf=\"last > 1\">\n <button class=\"btn pagination-previous\" (click)=\"previous()\" [disabled]=\"page == 1\">\n <clr-icon shape=\"angle left\"></clr-icon>\n </button>\n <button *ngIf=\"page > 2\" class=\"btn\" (click)=\"page = 1\">1</button>\n <button *ngIf=\"page > 3\" class=\"btn\" disabled>...</button>\n\n <ng-container *ngFor=\"let pageNum of middlePages\">\n <button *ngIf=\"pageNum !== page; else activePage\" class=\"btn\" (click)=\"page = pageNum\">{{pageNum}}</button>\n <ng-template #activePage>\n <button class=\"btn btn-primary\" type=\"button\">{{pageNum}}</button>\n </ng-template>\n </ng-container>\n\n <button *ngIf=\"page < last - 2\" class=\"btn\" disabled>...</button>\n <button *ngIf=\"page < last - 1\" class=\"btn\" (click)=\"page = last\">{{last}}</button>\n <button class=\"btn pagination-next\" (click)=\"next()\" [disabled]=\"page == last\">\n <clr-icon shape=\"angle right\"></clr-icon>\n </button>\n</div>\n" }]
@@ -2907,7 +2907,7 @@ class ClrAddOption {
2907
2907
  }
2908
2908
  }
2909
2909
  ClrAddOption.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrAddOption, deps: [], target: i0.ɵɵFactoryTarget.Component });
2910
- ClrAddOption.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrAddOption, selector: "clr-add-option", inputs: { blankOption: "blankOption", value: "value", mandatory: "mandatory", allValues: "allValues", excludedValues: "excludedValues", readonly: "readonly", disabled: "disabled" }, outputs: { valueChanged: "valueChanged", remove: "remove" }, host: { properties: { "class.quick-list-option": "true" } }, viewQueries: [{ propertyName: "select", first: true, predicate: ["select"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"!(readonly || readonly === ''); else readonlyView\" class=\"clr-select-wrapper quick-list-input\">\n <select #select clr-select class=\"quick-list-select\" name=\"options\" [(ngModel)]=\"selectedValue\" [disabled]=\"disabled\">\n <option *ngIf=\"blankOption.id === selectedValue\" [selected]=\"true\" [disabled]=\"true\" [ngValue]=\"blankOption.id\">\n {{blankOption.label}}\n </option>\n <option *ngFor=\"let val of getValues()\" [selected]=\"val.id === selectedValue\" [ngValue]=\"val.id\">\n {{val.label}}\n </option>\n </select>\n</div>\n\n<ng-template #readonlyView>\n <span>{{value.label}}</span>\n</ng-template>\n\n<button\n *ngIf=\"!(readonly || readonly === '')\"\n type=\"button\"\n class=\"btn btn-icon btn-link quick-list-trash\"\n [disabled]=\"trashDisabled() || disabled\"\n (click)=\"remove.emit()\"\n>\n <clr-icon shape=\"trash\"></clr-icon>\n</button>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }] });
2910
+ ClrAddOption.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrAddOption, selector: "clr-add-option", inputs: { blankOption: "blankOption", value: "value", mandatory: "mandatory", allValues: "allValues", excludedValues: "excludedValues", readonly: "readonly", disabled: "disabled" }, outputs: { valueChanged: "valueChanged", remove: "remove" }, host: { properties: { "class.quick-list-option": "true" } }, viewQueries: [{ propertyName: "select", first: true, predicate: ["select"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"!(readonly || readonly === ''); else readonlyView\" class=\"clr-select-wrapper quick-list-input\">\n <select #select clr-select class=\"quick-list-select\" name=\"options\" [(ngModel)]=\"selectedValue\" [disabled]=\"disabled\">\n <option *ngIf=\"blankOption.id === selectedValue\" [selected]=\"true\" [disabled]=\"true\" [ngValue]=\"blankOption.id\">\n {{blankOption.label}}\n </option>\n <option *ngFor=\"let val of getValues()\" [selected]=\"val.id === selectedValue\" [ngValue]=\"val.id\">\n {{val.label}}\n </option>\n </select>\n</div>\n\n<ng-template #readonlyView>\n <span>{{value.label}}</span>\n</ng-template>\n\n<button\n *ngIf=\"!(readonly || readonly === '')\"\n type=\"button\"\n class=\"btn btn-icon btn-link quick-list-trash\"\n [disabled]=\"trashDisabled() || disabled\"\n (click)=\"remove.emit()\"\n>\n <clr-icon shape=\"trash\"></clr-icon>\n</button>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.ClrIconCustomTag, selector: "clr-icon" }] });
2911
2911
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrAddOption, decorators: [{
2912
2912
  type: Component,
2913
2913
  args: [{ selector: 'clr-add-option', host: { '[class.quick-list-option]': 'true' }, template: "<div *ngIf=\"!(readonly || readonly === ''); else readonlyView\" class=\"clr-select-wrapper quick-list-input\">\n <select #select clr-select class=\"quick-list-select\" name=\"options\" [(ngModel)]=\"selectedValue\" [disabled]=\"disabled\">\n <option *ngIf=\"blankOption.id === selectedValue\" [selected]=\"true\" [disabled]=\"true\" [ngValue]=\"blankOption.id\">\n {{blankOption.label}}\n </option>\n <option *ngFor=\"let val of getValues()\" [selected]=\"val.id === selectedValue\" [ngValue]=\"val.id\">\n {{val.label}}\n </option>\n </select>\n</div>\n\n<ng-template #readonlyView>\n <span>{{value.label}}</span>\n</ng-template>\n\n<button\n *ngIf=\"!(readonly || readonly === '')\"\n type=\"button\"\n class=\"btn btn-icon btn-link quick-list-trash\"\n [disabled]=\"trashDisabled() || disabled\"\n (click)=\"remove.emit()\"\n>\n <clr-icon shape=\"trash\"></clr-icon>\n</button>\n" }]
@@ -3068,7 +3068,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImpor
3068
3068
  }] });
3069
3069
 
3070
3070
  /*
3071
- * Copyright (c) 2018-2022 Porsche Informatik. All Rights Reserved.
3071
+ * Copyright (c) 2018-2023 Porsche Informatik. All Rights Reserved.
3072
3072
  * This software is released under MIT license.
3073
3073
  * The full license information can be found in LICENSE in the root directory of this project.
3074
3074
  */
@@ -3151,7 +3151,7 @@ class ClrSearchField {
3151
3151
  }
3152
3152
  }
3153
3153
  }
3154
- ClrSearchField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrSearchField, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i3$1.NgControl }], target: i0.ɵɵFactoryTarget.Directive });
3154
+ ClrSearchField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrSearchField, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i3$1.NgControl, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
3155
3155
  ClrSearchField.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: ClrSearchField, selector: "[clrSearch]", host: { properties: { "class.search-input": "true" } }, ngImport: i0 });
3156
3156
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrSearchField, decorators: [{
3157
3157
  type: Directive,
@@ -3159,7 +3159,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImpor
3159
3159
  selector: '[clrSearch]',
3160
3160
  host: { '[class.search-input]': 'true' },
3161
3161
  }]
3162
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i3$1.NgControl }]; } });
3162
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i3$1.NgControl, decorators: [{
3163
+ type: Optional
3164
+ }] }]; } });
3163
3165
 
3164
3166
  /*
3165
3167
  * Copyright (c) 2018-2019 Porsche Informatik. All Rights Reserved.
@@ -3219,7 +3221,7 @@ class ClrTreetableActionOverflow {
3219
3221
  this.destroyed$.complete();
3220
3222
  }
3221
3223
  }
3222
- ClrTreetableActionOverflow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrTreetableActionOverflow, deps: [{ token: i2.ClrPopoverToggleService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
3224
+ ClrTreetableActionOverflow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrTreetableActionOverflow, deps: [{ token: i1$1.ClrPopoverToggleService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
3223
3225
  ClrTreetableActionOverflow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrTreetableActionOverflow, selector: "clr-tt-action-overflow", inputs: { empty: "empty" }, host: { attributes: { "role": "cell" }, properties: { "class.treetable-row-actions": "true", "class.treetable-cell": "true" } }, providers: [ClrPopoverToggleService, ClrPopoverEventsService, ClrPopoverPositionService], ngImport: i0, template: `
3224
3226
  <ng-container *ngIf="!empty">
3225
3227
  <button class="treetable-action-trigger" clrPopoverAnchor clrPopoverOpenCloseButton>
@@ -3234,7 +3236,7 @@ ClrTreetableActionOverflow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
3234
3236
  <ng-content></ng-content>
3235
3237
  </div>
3236
3238
  </ng-container>
3237
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i2.ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: i2.ÇlrClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: i2.ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }] });
3239
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i1$1.ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: i1$1.ÇlrClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: i1$1.ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }] });
3238
3240
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrTreetableActionOverflow, decorators: [{
3239
3241
  type: Component,
3240
3242
  args: [{
@@ -3261,7 +3263,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImpor
3261
3263
  role: 'cell',
3262
3264
  },
3263
3265
  }]
3264
- }], ctorParameters: function () { return [{ type: i2.ClrPopoverToggleService }, { type: i0.NgZone }]; }, propDecorators: { empty: [{
3266
+ }], ctorParameters: function () { return [{ type: i1$1.ClrPopoverToggleService }, { type: i0.NgZone }]; }, propDecorators: { empty: [{
3265
3267
  type: Input
3266
3268
  }] } });
3267
3269
 
@@ -3313,7 +3315,7 @@ class ClrTreetableRow {
3313
3315
  }
3314
3316
  }
3315
3317
  ClrTreetableRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrTreetableRow, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
3316
- ClrTreetableRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrTreetableRow, selector: "clr-tt-row", inputs: { expanded: ["clrExpanded", "expanded"], clickable: ["clrClickable", "clickable"], clrExpandable: "clrExpandable" }, outputs: { hasActionOverflow: "hasActionOverflow", expandedChange: "clrExpandedChange" }, host: { properties: { "class.treetable-row-wrapper": "true" } }, queries: [{ propertyName: "actionOverflow", first: true, predicate: ClrTreetableActionOverflow, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2018-2021 Porsche Informatik. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n [ngClass]=\"{'clr-row-clickable': clickable && expandable}\"\n class=\"clr-tt-node-content treetable-row\"\n (click)=\"onRowClick($event)\"\n>\n <ng-content select=\"clr-tt-action-overflow\"></ng-content>\n <clr-tt-action-overflow *ngIf=\"showActionOverflow && showEmptyActionOverflow\" [empty]=\"true\"></clr-tt-action-overflow>\n <div class=\"treetable-scrolling-cells\">\n <div class=\"treetable-expandable-caret\" *ngIf=\"isExpandable()\">\n <button type=\"button\" class=\"treetable-expandable-caret-button\" (click)=\"onCaretClick()\">\n <clr-icon\n shape=\"caret\"\n [attr.dir]=\"expanded ? 'down' : 'right'\"\n class=\"treetable-expandable-caret-icon\"\n ></clr-icon>\n </button>\n </div>\n\n <ng-content select=\"clr-tt-cell\"></ng-content>\n </div>\n</div>\n<div [@collapseExpandAnimation]=\"expanded\">\n <ng-content select=\"clr-tt-row\"></ng-content>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "component", type: ClrTreetableActionOverflow, selector: "clr-tt-action-overflow", inputs: ["empty"] }], animations: [
3318
+ ClrTreetableRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrTreetableRow, selector: "clr-tt-row", inputs: { expanded: ["clrExpanded", "expanded"], clickable: ["clrClickable", "clickable"], clrExpandable: "clrExpandable" }, outputs: { hasActionOverflow: "hasActionOverflow", expandedChange: "clrExpandedChange" }, host: { properties: { "class.treetable-row-wrapper": "true" } }, queries: [{ propertyName: "actionOverflow", first: true, predicate: ClrTreetableActionOverflow, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2018-2021 Porsche Informatik. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n [ngClass]=\"{'clr-row-clickable': clickable && expandable}\"\n class=\"clr-tt-node-content treetable-row\"\n (click)=\"onRowClick($event)\"\n>\n <ng-content select=\"clr-tt-action-overflow\"></ng-content>\n <clr-tt-action-overflow *ngIf=\"showActionOverflow && showEmptyActionOverflow\" [empty]=\"true\"></clr-tt-action-overflow>\n <div class=\"treetable-scrolling-cells\">\n <div class=\"treetable-expandable-caret\" *ngIf=\"isExpandable()\">\n <button type=\"button\" class=\"treetable-expandable-caret-button\" (click)=\"onCaretClick()\">\n <clr-icon\n shape=\"caret\"\n [attr.dir]=\"expanded ? 'down' : 'right'\"\n class=\"treetable-expandable-caret-icon\"\n ></clr-icon>\n </button>\n </div>\n\n <ng-content select=\"clr-tt-cell\"></ng-content>\n </div>\n</div>\n<div [@collapseExpandAnimation]=\"expanded\">\n <ng-content select=\"clr-tt-row\"></ng-content>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "component", type: ClrTreetableActionOverflow, selector: "clr-tt-action-overflow", inputs: ["empty"] }], animations: [
3317
3319
  trigger('collapseExpandAnimation', [
3318
3320
  state('false', style({ display: 'none' })),
3319
3321
  state('true', style({ display: 'block' })),
@@ -3794,7 +3796,7 @@ class ClrViewEditSection {
3794
3796
  }
3795
3797
  }
3796
3798
  ClrViewEditSection.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrViewEditSection, deps: [], target: i0.ɵɵFactoryTarget.Component });
3797
- ClrViewEditSection.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrViewEditSection, selector: "clr-view-edit-section", inputs: { _title: ["clrTitle", "_title"], _saveText: ["clrSaveText", "_saveText"], _preventSave: ["clrPreventModeChangeOnSave", "_preventSave"], _cancelText: ["clrCancelText", "_cancelText"], _editable: ["clrEditable", "_editable"], _editIcon: ["clrEditIcon", "_editIcon"], _isCollapsible: ["clrIsCollapsible", "_isCollapsible"], _isCollapsed: ["clrIsCollapsed", "_isCollapsed"], viewRef: ["clrViewRef", "viewRef"], editRef: ["clrEditRef", "editRef"], editMode: ["clrEditMode", "editMode"] }, outputs: { _isCollapsedChange: "clrIsCollapsedChange", _editModeChanged: "clrEditModeChange", _submitted: "clrSectionSubmitted", _cancelled: "clrSectionEditCancelled" }, ngImport: i0, template: "<div class=\"card view-edit-section\" (keyup.escape)=\"onCancel()\">\n <div class=\"card-block\">\n <div class=\"card-title\">\n {{_title}}\n <button\n type=\"button\"\n (click)=\"onCollapseExpand()\"\n class=\"btn btn-icon btn-link ces-caret-btn\"\n *ngIf=\"_isCollapsible && !editMode\"\n >\n <clr-icon shape=\"caret up\" size=\"20\" class=\"ces-caret-icon\" [@rotateIcon]=\"_isCollapsed\"></clr-icon>\n </button>\n <div class=\"ves-actions\">\n <button\n type=\"button\"\n (click)=\"onEdit()\"\n class=\"btn btn-icon btn-link ves-action\"\n *ngIf=\"_editable && !editMode && actionBlock.children.length == 0\"\n >\n <clr-icon class=\"ves-edit-icon\" [attr.shape]=\"_editIcon\" size=\"20\"></clr-icon>\n </button>\n <div #actionBlock>\n <ng-content select=\"[action-block]\"></ng-content>\n </div>\n </div>\n </div>\n <div class=\"card-text\" [@collapseExpandAnimation] *ngIf=\"!(_isCollapsed && _isCollapsible)\">\n <ng-template [ngTemplateOutlet]=\"viewRef\" *ngIf=\"!editMode\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"editRef\" *ngIf=\"editMode\"></ng-template>\n <ng-container *ngIf=\"editMode\">\n <form clrForm (ngSubmit)=\"onSubmit()\" class=\"button-bar\">\n <button class=\"btn btn-primary ves-save\" type=\"submit\">{{_saveText}}</button>\n <button class=\"btn ves-cancel\" (click)=\"onCancel()\" type=\"button\">{{_cancelText}}</button>\n </form>\n </ng-container>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i2.ClrForm, selector: "[clrForm]", inputs: ["clrLabelSize"] }, { kind: "directive", type: i3$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }], animations: [
3799
+ ClrViewEditSection.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrViewEditSection, selector: "clr-view-edit-section", inputs: { _title: ["clrTitle", "_title"], _saveText: ["clrSaveText", "_saveText"], _preventSave: ["clrPreventModeChangeOnSave", "_preventSave"], _cancelText: ["clrCancelText", "_cancelText"], _editable: ["clrEditable", "_editable"], _editIcon: ["clrEditIcon", "_editIcon"], _isCollapsible: ["clrIsCollapsible", "_isCollapsible"], _isCollapsed: ["clrIsCollapsed", "_isCollapsed"], viewRef: ["clrViewRef", "viewRef"], editRef: ["clrEditRef", "editRef"], editMode: ["clrEditMode", "editMode"] }, outputs: { _isCollapsedChange: "clrIsCollapsedChange", _editModeChanged: "clrEditModeChange", _submitted: "clrSectionSubmitted", _cancelled: "clrSectionEditCancelled" }, ngImport: i0, template: "<div class=\"card view-edit-section\" (keyup.escape)=\"onCancel()\">\n <div class=\"card-block\">\n <div class=\"card-title\">\n {{_title}}\n <button\n type=\"button\"\n (click)=\"onCollapseExpand()\"\n class=\"btn btn-icon btn-link ces-caret-btn\"\n *ngIf=\"_isCollapsible && !editMode\"\n >\n <clr-icon shape=\"caret up\" size=\"20\" class=\"ces-caret-icon\" [@rotateIcon]=\"_isCollapsed\"></clr-icon>\n </button>\n <div class=\"ves-actions\">\n <button\n type=\"button\"\n (click)=\"onEdit()\"\n class=\"btn btn-icon btn-link ves-action\"\n *ngIf=\"_editable && !editMode && actionBlock.children.length == 0\"\n >\n <clr-icon class=\"ves-edit-icon\" [attr.shape]=\"_editIcon\" size=\"20\"></clr-icon>\n </button>\n <div #actionBlock>\n <ng-content select=\"[action-block]\"></ng-content>\n </div>\n </div>\n </div>\n <div class=\"card-text\" [@collapseExpandAnimation] *ngIf=\"!(_isCollapsed && _isCollapsible)\">\n <ng-template [ngTemplateOutlet]=\"viewRef\" *ngIf=\"!editMode\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"editRef\" *ngIf=\"editMode\"></ng-template>\n <ng-container *ngIf=\"editMode\">\n <form clrForm (ngSubmit)=\"onSubmit()\" class=\"button-bar\">\n <button class=\"btn btn-primary ves-save\" type=\"submit\">{{_saveText}}</button>\n <button class=\"btn ves-cancel\" (click)=\"onCancel()\" type=\"button\">{{_cancelText}}</button>\n </form>\n </ng-container>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i1$1.ClrForm, selector: "[clrForm]", inputs: ["clrLabelSize"] }, { kind: "directive", type: i3$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }], animations: [
3798
3800
  trigger('collapseExpandAnimation', [
3799
3801
  transition(':enter', [
3800
3802
  style({ opacity: 0, height: 0, overflow: 'hidden' }),
@@ -4144,7 +4146,7 @@ class ClrHistory {
4144
4146
  }
4145
4147
  }
4146
4148
  ClrHistory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrHistory, deps: [{ token: ClrHistoryService }], target: i0.ɵɵFactoryTarget.Component });
4147
- ClrHistory.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrHistory, selector: "clr-history", inputs: { username: ["clrUsername", "username"], context: ["clrContext", "context"], pinActive: ["clrPinActive", "pinActive"], dropdownHeader: ["clrDropdownHeader", "dropdownHeader"], dropdownPin: ["clrDropdownPin", "dropdownPin"], dropdownUnpin: ["clrDropdownUnpin", "dropdownUnpin"], domain: ["clrDomain", "domain"], position: ["clrPosition", "position"] }, ngImport: i0, template: "<clr-dropdown>\n <button type=\"button\" class=\"btn btn-icon btn-link\" clrDropdownTrigger>\n <clr-icon shape=\"history\" size=\"24\"></clr-icon>\n <clr-icon shape=\"caret down\" size=\"12\"></clr-icon>\n </button>\n <clr-dropdown-menu [clrPosition]=\"position\" *clrIfOpen>\n <label class=\"dropdown-header\" aria-hidden=\"true\">{{dropdownHeader}}</label>\n <button type=\"button\" clrDropdownItem *ngFor=\"let history of historyElements\" (click)=\"select(history)\">\n {{history.title}}\n </button>\n <div *ngIf=\"pinActive\" class=\"dropdown-divider\" role=\"separator\" aria-hidden=\"true\"></div>\n <button clrDropdownItem (click)=\"togglePinHistory()\">\n <span *ngIf=\"pinActive && !pinActivated\">{{dropdownPin}}</span>\n <span *ngIf=\"pinActive && pinActivated\">{{dropdownUnpin}}</span>\n </button>\n </clr-dropdown-menu>\n</clr-dropdown>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i2.ClrIfOpen, selector: "[clrIfOpen]", inputs: ["clrIfOpen"], outputs: ["clrIfOpenChange"] }, { kind: "directive", type: i2.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "component", type: i2.ClrDropdown, selector: "clr-dropdown", inputs: ["clrCloseMenuOnItemClick"] }, { kind: "component", type: i2.ClrDropdownMenu, selector: "clr-dropdown-menu", inputs: ["clrPosition"] }, { kind: "directive", type: i2.ClrDropdownTrigger, selector: "[clrDropdownTrigger],[clrDropdownToggle]" }, { kind: "directive", type: i2.ClrDropdownItem, selector: "[clrDropdownItem]", inputs: ["clrDisabled", "id"] }, { kind: "directive", type: ClrDropdownOverflowDirective, selector: "clr-dropdown-menu", inputs: ["clrDropdownMenuMaxHeight", "clrDropdownMenuItemMinHeight"] }] });
4149
+ ClrHistory.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrHistory, selector: "clr-history", inputs: { username: ["clrUsername", "username"], context: ["clrContext", "context"], pinActive: ["clrPinActive", "pinActive"], dropdownHeader: ["clrDropdownHeader", "dropdownHeader"], dropdownPin: ["clrDropdownPin", "dropdownPin"], dropdownUnpin: ["clrDropdownUnpin", "dropdownUnpin"], domain: ["clrDomain", "domain"], position: ["clrPosition", "position"] }, ngImport: i0, template: "<clr-dropdown>\n <button type=\"button\" class=\"btn btn-icon btn-link\" clrDropdownTrigger>\n <clr-icon shape=\"history\" size=\"24\"></clr-icon>\n <clr-icon shape=\"caret down\" size=\"12\"></clr-icon>\n </button>\n <clr-dropdown-menu [clrPosition]=\"position\" *clrIfOpen>\n <label class=\"dropdown-header\" aria-hidden=\"true\">{{dropdownHeader}}</label>\n <button type=\"button\" clrDropdownItem *ngFor=\"let history of historyElements\" (click)=\"select(history)\">\n {{history.title}}\n </button>\n <div *ngIf=\"pinActive\" class=\"dropdown-divider\" role=\"separator\" aria-hidden=\"true\"></div>\n <button clrDropdownItem (click)=\"togglePinHistory()\">\n <span *ngIf=\"pinActive && !pinActivated\">{{dropdownPin}}</span>\n <span *ngIf=\"pinActive && pinActivated\">{{dropdownUnpin}}</span>\n </button>\n </clr-dropdown-menu>\n</clr-dropdown>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i1$1.ClrIfOpen, selector: "[clrIfOpen]", inputs: ["clrIfOpen"], outputs: ["clrIfOpenChange"] }, { kind: "directive", type: i1$1.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "component", type: i1$1.ClrDropdown, selector: "clr-dropdown", inputs: ["clrCloseMenuOnItemClick"] }, { kind: "component", type: i1$1.ClrDropdownMenu, selector: "clr-dropdown-menu", inputs: ["clrPosition"] }, { kind: "directive", type: i1$1.ClrDropdownTrigger, selector: "[clrDropdownTrigger],[clrDropdownToggle]" }, { kind: "directive", type: i1$1.ClrDropdownItem, selector: "[clrDropdownItem]", inputs: ["clrDisabled", "id"] }, { kind: "directive", type: ClrDropdownOverflowDirective, selector: "clr-dropdown-menu", inputs: ["clrDropdownMenuMaxHeight", "clrDropdownMenuItemMinHeight"] }] });
4148
4150
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrHistory, decorators: [{
4149
4151
  type: Component,
4150
4152
  args: [{ selector: 'clr-history', template: "<clr-dropdown>\n <button type=\"button\" class=\"btn btn-icon btn-link\" clrDropdownTrigger>\n <clr-icon shape=\"history\" size=\"24\"></clr-icon>\n <clr-icon shape=\"caret down\" size=\"12\"></clr-icon>\n </button>\n <clr-dropdown-menu [clrPosition]=\"position\" *clrIfOpen>\n <label class=\"dropdown-header\" aria-hidden=\"true\">{{dropdownHeader}}</label>\n <button type=\"button\" clrDropdownItem *ngFor=\"let history of historyElements\" (click)=\"select(history)\">\n {{history.title}}\n </button>\n <div *ngIf=\"pinActive\" class=\"dropdown-divider\" role=\"separator\" aria-hidden=\"true\"></div>\n <button clrDropdownItem (click)=\"togglePinHistory()\">\n <span *ngIf=\"pinActive && !pinActivated\">{{dropdownPin}}</span>\n <span *ngIf=\"pinActive && pinActivated\">{{dropdownUnpin}}</span>\n </button>\n </clr-dropdown-menu>\n</clr-dropdown>\n" }]
@@ -4316,7 +4318,7 @@ class ClrBrandAvatar {
4316
4318
  }
4317
4319
  ClrBrandAvatar.DEFAULT_ICON_SHAPE = 'new-car-private';
4318
4320
  ClrBrandAvatar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrBrandAvatar, deps: [], target: i0.ɵɵFactoryTarget.Component });
4319
- ClrBrandAvatar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrBrandAvatar, selector: "clr-brand-avatar", inputs: { brand: ["clrBrand", "brand"] }, host: { properties: { "class.clr-brand-avatar": "this.avatar" } }, viewQueries: [{ propertyName: "avatarElement", first: true, predicate: ["avatar"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"brand-avatar-rectangle\">\n <div #avatar class=\"brand-avatar-icon-container\">\n <clr-icon [attr.size]=\"23\" [attr.shape]=\"getShape()\"></clr-icon>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }] });
4321
+ ClrBrandAvatar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrBrandAvatar, selector: "clr-brand-avatar", inputs: { brand: ["clrBrand", "brand"] }, host: { properties: { "class.clr-brand-avatar": "this.avatar" } }, viewQueries: [{ propertyName: "avatarElement", first: true, predicate: ["avatar"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"brand-avatar-rectangle\">\n <div #avatar class=\"brand-avatar-icon-container\">\n <clr-icon [attr.size]=\"23\" [attr.shape]=\"getShape()\"></clr-icon>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.ClrIconCustomTag, selector: "clr-icon" }] });
4320
4322
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrBrandAvatar, decorators: [{
4321
4323
  type: Component,
4322
4324
  args: [{ selector: 'clr-brand-avatar', template: "<div class=\"brand-avatar-rectangle\">\n <div #avatar class=\"brand-avatar-icon-container\">\n <clr-icon [attr.size]=\"23\" [attr.shape]=\"getShape()\"></clr-icon>\n </div>\n</div>\n" }]
@@ -4494,7 +4496,7 @@ class LocationBarNodeComponent {
4494
4496
  }
4495
4497
  }
4496
4498
  LocationBarNodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: LocationBarNodeComponent, deps: [{ token: CONTENT_PROVIDER, optional: true }], target: i0.ɵɵFactoryTarget.Component });
4497
- LocationBarNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: LocationBarNodeComponent, selector: "clr-location-bar-node", inputs: { parentNode: "parentNode" }, outputs: { selectionChanged: "selectionChanged" }, host: { properties: { "class.location-bar-node": "true" } }, ngImport: i0, template: "<ng-container *ngIf=\"parentNode\">\n <ng-content *ngIf=\"parentNode.getChildren()?.length > 0\"></ng-content>\n\n <ng-container\n *ngIf=\"\n (selectableChilds.length > 0 && !parentNode.getSelectedChild()) || selectableChilds.length > 1;\n else singleSelected\n \"\n >\n <clr-dropdown>\n <button class=\"btn btn-link btn-sm\" (blur)=\"focus = false\" (focus)=\"focus = true\" clrDropdownTrigger>\n <ng-container *ngIf=\"parentNode.getSelectedChild() as node; else unselected\">\n <span\n class=\"text-truncate\"\n [class.last-level]=\"!parentNode.getSelectedChild().getSelectedChild()\"\n title=\"{{ node.label }}\"\n >\n {{ node.label }}\n </span>\n <cds-icon shape=\"angle\" direction=\"down\" size=\"xs\" class=\"caret-icon\"></cds-icon>\n </ng-container>\n <ng-template #unselected>\n <cds-icon class=\"unselected\" size=\"18\" [attr.solid]=\"focus\" shape=\"tree-view\"></cds-icon>&nbsp;...\n </ng-template>\n </button>\n <clr-dropdown-menu [clrPosition]=\"'bottom-left'\" *clrIfOpen>\n <button\n *ngFor=\"let item of selectableChilds\"\n type=\"button\"\n clrDropdownItem\n class=\"text-truncate\"\n [class.selected-child]=\"item.id === parentNode.getSelectedChild()?.id\"\n (click)=\"selectNode(item)\"\n title=\"{{ item.label }}\"\n >\n {{ item.label }}\n </button>\n </clr-dropdown-menu>\n </clr-dropdown>\n </ng-container>\n\n <ng-template #singleSelected>\n <ng-container *ngIf=\"parentNode.getSelectedChild()\">\n <ng-container *ngIf=\"parentNode.getSelectedChild().selectable; else unselectable\">\n <button\n class=\"btn btn-link btn-sm\"\n (click)=\"selectNode(parentNode.getSelectedChild())\"\n [class.last-level]=\"!parentNode.getSelectedChild().getSelectedChild()\"\n title=\"{{ parentNode.getSelectedChild().label }}\"\n >\n {{ parentNode.getSelectedChild().label }}\n </button>\n </ng-container>\n <ng-template #unselectable>\n <span\n class=\"unselectable-node text-truncate\"\n [class.last-level]=\"!parentNode.getSelectedChild().getSelectedChild()\"\n title=\"{{ parentNode.getSelectedChild().label }}\"\n >\n {{ parentNode.getSelectedChild().label }}\n </span>\n </ng-template>\n </ng-container>\n </ng-template>\n\n <clr-location-bar-node\n *ngIf=\"parentNode.getSelectedChild() && parentNode.getChildren().length > 0\"\n [parentNode]=\"parentNode.getSelectedChild()\"\n (selectionChanged)=\"onSelectionChanged($event)\"\n >\n <span>/</span>\n </clr-location-bar-node>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: i2.ClrDropdown, selector: "clr-dropdown", inputs: ["clrCloseMenuOnItemClick"] }, { kind: "component", type: i2.ClrDropdownMenu, selector: "clr-dropdown-menu", inputs: ["clrPosition"] }, { kind: "directive", type: i2.ClrDropdownTrigger, selector: "[clrDropdownTrigger],[clrDropdownToggle]" }, { kind: "directive", type: i2.ClrDropdownItem, selector: "[clrDropdownItem]", inputs: ["clrDisabled", "id"] }, { kind: "directive", type: i2.ClrIfOpen, selector: "[clrIfOpen]", inputs: ["clrIfOpen"], outputs: ["clrIfOpenChange"] }, { kind: "directive", type: ClrDropdownOverflowDirective, selector: "clr-dropdown-menu", inputs: ["clrDropdownMenuMaxHeight", "clrDropdownMenuItemMinHeight"] }, { kind: "component", type: LocationBarNodeComponent, selector: "clr-location-bar-node", inputs: ["parentNode"], outputs: ["selectionChanged"] }] });
4499
+ LocationBarNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: LocationBarNodeComponent, selector: "clr-location-bar-node", inputs: { parentNode: "parentNode" }, outputs: { selectionChanged: "selectionChanged" }, host: { properties: { "class.location-bar-node": "true" } }, ngImport: i0, template: "<ng-container *ngIf=\"parentNode\">\n <ng-content *ngIf=\"parentNode.getChildren()?.length > 0\"></ng-content>\n\n <ng-container\n *ngIf=\"\n (selectableChilds.length > 0 && !parentNode.getSelectedChild()) || selectableChilds.length > 1;\n else singleSelected\n \"\n >\n <clr-dropdown>\n <button class=\"btn btn-link btn-sm\" (blur)=\"focus = false\" (focus)=\"focus = true\" clrDropdownTrigger>\n <ng-container *ngIf=\"parentNode.getSelectedChild() as node; else unselected\">\n <span\n class=\"text-truncate\"\n [class.last-level]=\"!parentNode.getSelectedChild().getSelectedChild()\"\n title=\"{{ node.label }}\"\n >\n {{ node.label }}\n </span>\n <cds-icon shape=\"angle\" direction=\"down\" size=\"xs\" class=\"caret-icon\"></cds-icon>\n </ng-container>\n <ng-template #unselected>\n <cds-icon class=\"unselected\" size=\"18\" [attr.solid]=\"focus\" shape=\"tree-view\"></cds-icon>&nbsp;...\n </ng-template>\n </button>\n <clr-dropdown-menu [clrPosition]=\"'bottom-left'\" *clrIfOpen>\n <button\n *ngFor=\"let item of selectableChilds\"\n type=\"button\"\n clrDropdownItem\n class=\"text-truncate\"\n [class.selected-child]=\"item.id === parentNode.getSelectedChild()?.id\"\n (click)=\"selectNode(item)\"\n title=\"{{ item.label }}\"\n >\n {{ item.label }}\n </button>\n </clr-dropdown-menu>\n </clr-dropdown>\n </ng-container>\n\n <ng-template #singleSelected>\n <ng-container *ngIf=\"parentNode.getSelectedChild()\">\n <ng-container *ngIf=\"parentNode.getSelectedChild().selectable; else unselectable\">\n <button\n class=\"btn btn-link btn-sm\"\n (click)=\"selectNode(parentNode.getSelectedChild())\"\n [class.last-level]=\"!parentNode.getSelectedChild().getSelectedChild()\"\n title=\"{{ parentNode.getSelectedChild().label }}\"\n >\n {{ parentNode.getSelectedChild().label }}\n </button>\n </ng-container>\n <ng-template #unselectable>\n <span\n class=\"unselectable-node text-truncate\"\n [class.last-level]=\"!parentNode.getSelectedChild().getSelectedChild()\"\n title=\"{{ parentNode.getSelectedChild().label }}\"\n >\n {{ parentNode.getSelectedChild().label }}\n </span>\n </ng-template>\n </ng-container>\n </ng-template>\n\n <clr-location-bar-node\n *ngIf=\"parentNode.getSelectedChild() && parentNode.getChildren().length > 0\"\n [parentNode]=\"parentNode.getSelectedChild()\"\n (selectionChanged)=\"onSelectionChanged($event)\"\n >\n <span>/</span>\n </clr-location-bar-node>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: i1$1.ClrDropdown, selector: "clr-dropdown", inputs: ["clrCloseMenuOnItemClick"] }, { kind: "component", type: i1$1.ClrDropdownMenu, selector: "clr-dropdown-menu", inputs: ["clrPosition"] }, { kind: "directive", type: i1$1.ClrDropdownTrigger, selector: "[clrDropdownTrigger],[clrDropdownToggle]" }, { kind: "directive", type: i1$1.ClrDropdownItem, selector: "[clrDropdownItem]", inputs: ["clrDisabled", "id"] }, { kind: "directive", type: i1$1.ClrIfOpen, selector: "[clrIfOpen]", inputs: ["clrIfOpen"], outputs: ["clrIfOpenChange"] }, { kind: "directive", type: ClrDropdownOverflowDirective, selector: "clr-dropdown-menu", inputs: ["clrDropdownMenuMaxHeight", "clrDropdownMenuItemMinHeight"] }, { kind: "component", type: LocationBarNodeComponent, selector: "clr-location-bar-node", inputs: ["parentNode"], outputs: ["selectionChanged"] }] });
4498
4500
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: LocationBarNodeComponent, decorators: [{
4499
4501
  type: Component,
4500
4502
  args: [{ selector: 'clr-location-bar-node', host: { '[class.location-bar-node]': 'true' }, template: "<ng-container *ngIf=\"parentNode\">\n <ng-content *ngIf=\"parentNode.getChildren()?.length > 0\"></ng-content>\n\n <ng-container\n *ngIf=\"\n (selectableChilds.length > 0 && !parentNode.getSelectedChild()) || selectableChilds.length > 1;\n else singleSelected\n \"\n >\n <clr-dropdown>\n <button class=\"btn btn-link btn-sm\" (blur)=\"focus = false\" (focus)=\"focus = true\" clrDropdownTrigger>\n <ng-container *ngIf=\"parentNode.getSelectedChild() as node; else unselected\">\n <span\n class=\"text-truncate\"\n [class.last-level]=\"!parentNode.getSelectedChild().getSelectedChild()\"\n title=\"{{ node.label }}\"\n >\n {{ node.label }}\n </span>\n <cds-icon shape=\"angle\" direction=\"down\" size=\"xs\" class=\"caret-icon\"></cds-icon>\n </ng-container>\n <ng-template #unselected>\n <cds-icon class=\"unselected\" size=\"18\" [attr.solid]=\"focus\" shape=\"tree-view\"></cds-icon>&nbsp;...\n </ng-template>\n </button>\n <clr-dropdown-menu [clrPosition]=\"'bottom-left'\" *clrIfOpen>\n <button\n *ngFor=\"let item of selectableChilds\"\n type=\"button\"\n clrDropdownItem\n class=\"text-truncate\"\n [class.selected-child]=\"item.id === parentNode.getSelectedChild()?.id\"\n (click)=\"selectNode(item)\"\n title=\"{{ item.label }}\"\n >\n {{ item.label }}\n </button>\n </clr-dropdown-menu>\n </clr-dropdown>\n </ng-container>\n\n <ng-template #singleSelected>\n <ng-container *ngIf=\"parentNode.getSelectedChild()\">\n <ng-container *ngIf=\"parentNode.getSelectedChild().selectable; else unselectable\">\n <button\n class=\"btn btn-link btn-sm\"\n (click)=\"selectNode(parentNode.getSelectedChild())\"\n [class.last-level]=\"!parentNode.getSelectedChild().getSelectedChild()\"\n title=\"{{ parentNode.getSelectedChild().label }}\"\n >\n {{ parentNode.getSelectedChild().label }}\n </button>\n </ng-container>\n <ng-template #unselectable>\n <span\n class=\"unselectable-node text-truncate\"\n [class.last-level]=\"!parentNode.getSelectedChild().getSelectedChild()\"\n title=\"{{ parentNode.getSelectedChild().label }}\"\n >\n {{ parentNode.getSelectedChild().label }}\n </span>\n </ng-template>\n </ng-container>\n </ng-template>\n\n <clr-location-bar-node\n *ngIf=\"parentNode.getSelectedChild() && parentNode.getChildren().length > 0\"\n [parentNode]=\"parentNode.getSelectedChild()\"\n (selectionChanged)=\"onSelectionChanged($event)\"\n >\n <span>/</span>\n </clr-location-bar-node>\n</ng-container>\n" }]
@@ -4530,7 +4532,7 @@ class LocationBarComponent {
4530
4532
  }
4531
4533
  }
4532
4534
  LocationBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: LocationBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4533
- LocationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: LocationBarComponent, selector: "clr-location-bar", inputs: { iconShape: ["clrIconShape", "iconShape"], iconTitle: ["clrIconTitle", "iconTitle"], roots: ["clrRoots", "roots"] }, outputs: { selectionChanged: "clrSelectionChanged" }, ngImport: i0, template: "<cds-icon *ngIf=\"iconShape\" [attr.shape]=\"iconShape\" [title]=\"iconTitle\"></cds-icon>\n<clr-location-bar-node (selectionChanged)=\"onSelectionChanged($event)\" [parentNode]=\"root$ | async\">\n</clr-location-bar-node>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: LocationBarNodeComponent, selector: "clr-location-bar-node", inputs: ["parentNode"], outputs: ["selectionChanged"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
4535
+ LocationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: LocationBarComponent, selector: "clr-location-bar", inputs: { iconShape: ["clrIconShape", "iconShape"], iconTitle: ["clrIconTitle", "iconTitle"], roots: ["clrRoots", "roots"] }, outputs: { selectionChanged: "clrSelectionChanged" }, ngImport: i0, template: "<cds-icon *ngIf=\"iconShape\" [attr.shape]=\"iconShape\" [title]=\"iconTitle\"></cds-icon>\n<clr-location-bar-node (selectionChanged)=\"onSelectionChanged($event)\" [parentNode]=\"root$ | async\">\n</clr-location-bar-node>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: LocationBarNodeComponent, selector: "clr-location-bar-node", inputs: ["parentNode"], outputs: ["selectionChanged"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
4534
4536
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: LocationBarComponent, decorators: [{
4535
4537
  type: Component,
4536
4538
  args: [{ selector: 'clr-location-bar', template: "<cds-icon *ngIf=\"iconShape\" [attr.shape]=\"iconShape\" [title]=\"iconTitle\"></cds-icon>\n<clr-location-bar-node (selectionChanged)=\"onSelectionChanged($event)\" [parentNode]=\"root$ | async\">\n</clr-location-bar-node>\n" }]
@@ -4649,8 +4651,10 @@ class StatePersistenceKeyDirective {
4649
4651
  const volatileDataState = this.getVolatileDataState();
4650
4652
  const localStorageState = this.getLocalStorageState();
4651
4653
  this.initFilter(volatileDataState);
4654
+ this.initSorting(localStorageState);
4652
4655
  this.initDatagridPersister();
4653
- if (this.pagination && this.pagination.page) {
4656
+ const paginationPersistenceEnabled = this.options.persistPagination ?? true;
4657
+ if (this.pagination?.page && paginationPersistenceEnabled) {
4654
4658
  this.initPageSizePersister(localStorageState);
4655
4659
  this.initCurrentPage(volatileDataState);
4656
4660
  }
@@ -4685,7 +4689,8 @@ class StatePersistenceKeyDirective {
4685
4689
  }
4686
4690
  }
4687
4691
  initFilter(savedState) {
4688
- if (savedState.columns) {
4692
+ const filterPersistenceEnabled = this.options.persistFilters ?? true;
4693
+ if (savedState.columns && filterPersistenceEnabled) {
4689
4694
  Object.keys(savedState.columns).forEach(prop => {
4690
4695
  const filter = this.getFilter(prop);
4691
4696
  if (filter) {
@@ -4697,13 +4702,40 @@ class StatePersistenceKeyDirective {
4697
4702
  });
4698
4703
  }
4699
4704
  }
4705
+ initSorting(savedState) {
4706
+ const sortPersistenceEnabled = this.options.persistSort ?? true;
4707
+ if (savedState.sortBy && sortPersistenceEnabled) {
4708
+ this.datagrid.columns.forEach(column => {
4709
+ if (this.getSortProperty(column.sortBy) === savedState.sortBy) {
4710
+ column.sortOrder = savedState.sortReverse ? ClrDatagridSortOrder.DESC : ClrDatagridSortOrder.ASC;
4711
+ }
4712
+ else {
4713
+ column.sortOrder = ClrDatagridSortOrder.UNSORTED;
4714
+ }
4715
+ });
4716
+ }
4717
+ }
4700
4718
  initDatagridPersister() {
4701
4719
  // delay is needed, as onDestroy the filters emit empty values.
4702
4720
  // So delay it to the end of the current cycle, so the directive is also destroyed before it gets the next values
4703
4721
  this.datagrid.refresh.pipe(delay(0), takeUntil(this.destroy$)).subscribe(dgState => {
4704
- const state = this.getVolatileDataState();
4722
+ this.persistFiltersAndCurrentPage(dgState);
4723
+ this.persistSorting(dgState);
4724
+ if (this.canShowPaginationDescription) {
4725
+ this.updatePaginationDescription();
4726
+ }
4727
+ });
4728
+ this.datagrid.items.change.pipe(takeUntil(this.destroy$)).subscribe(() => this.updatePaginationDescription());
4729
+ }
4730
+ persistFiltersAndCurrentPage(dgState) {
4731
+ const filterPersistenceEnabled = this.options.persistFilters ?? true;
4732
+ const paginationPersistenceEnabled = this.options.persistPagination ?? true;
4733
+ const state = this.getVolatileDataState();
4734
+ state.columns = state.columns || {};
4735
+ if (paginationPersistenceEnabled) {
4705
4736
  state.currentPage = dgState.page?.current;
4706
- state.columns = state.columns || {};
4737
+ }
4738
+ if (filterPersistenceEnabled) {
4707
4739
  Object.keys(state.columns).forEach(prop => (state.columns[prop].filterValue = undefined));
4708
4740
  dgState.filters?.forEach(filter => {
4709
4741
  const property = this.getFilterPropertyName(filter);
@@ -4712,12 +4744,17 @@ class StatePersistenceKeyDirective {
4712
4744
  state.columns[property].filterValue = this.enrichFilterValue(filter);
4713
4745
  }
4714
4746
  });
4715
- (this.useLocalStoreOnly ? localStorage : sessionStorage).setItem(this.options.key, JSON.stringify(state));
4716
- if (this.canShowPaginationDescription) {
4717
- this.updatePaginationDescription();
4718
- }
4719
- });
4720
- this.datagrid.items.change.pipe(takeUntil(this.destroy$)).subscribe(() => this.updatePaginationDescription());
4747
+ }
4748
+ (this.useLocalStoreOnly ? localStorage : sessionStorage).setItem(this.options.key, JSON.stringify(state));
4749
+ }
4750
+ persistSorting(dgState) {
4751
+ const sortPersistenceEnabled = this.options.persistSort ?? true;
4752
+ if (sortPersistenceEnabled) {
4753
+ const state = this.getLocalStorageState();
4754
+ state.sortBy = this.getSortProperty(dgState.sort?.by);
4755
+ state.sortReverse = dgState.sort?.reverse;
4756
+ localStorage.setItem(this.options.key, JSON.stringify(state));
4757
+ }
4721
4758
  }
4722
4759
  /**
4723
4760
  * Pagination description must be set by this directive,
@@ -4784,19 +4821,30 @@ class StatePersistenceKeyDirective {
4784
4821
  const filterWithProp = filter;
4785
4822
  return (filterWithProp.property?.prop || filterWithProp.property);
4786
4823
  }
4824
+ getSortProperty(sortBy) {
4825
+ if (sortBy) {
4826
+ if (typeof sortBy === 'string') {
4827
+ return sortBy;
4828
+ }
4829
+ if (sortBy instanceof DatagridPropertyComparator) {
4830
+ return sortBy.prop;
4831
+ }
4832
+ }
4833
+ return undefined;
4834
+ }
4787
4835
  ngOnDestroy() {
4788
4836
  this.destroy$.next();
4789
4837
  this.destroy$.complete();
4790
4838
  }
4791
4839
  }
4792
- StatePersistenceKeyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: StatePersistenceKeyDirective, deps: [{ token: i2.ClrDatagrid }], target: i0.ɵɵFactoryTarget.Directive });
4840
+ StatePersistenceKeyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: StatePersistenceKeyDirective, deps: [{ token: i1$1.ClrDatagrid }], target: i0.ɵɵFactoryTarget.Directive });
4793
4841
  StatePersistenceKeyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: StatePersistenceKeyDirective, selector: "[clrStatePersistenceKey]", inputs: { options: ["clrStatePersistenceKey", "options"], useLocalStoreOnly: ["clrUseLocalStoreOnly", "useLocalStoreOnly"], paginationDescription: ["clrPaginationDescription", "paginationDescription"] }, queries: [{ propertyName: "pagination", first: true, predicate: ClrDatagridPagination, descendants: true }, { propertyName: "paginationElem", first: true, predicate: ClrDatagridPagination, descendants: true, read: ElementRef }, { propertyName: "customFilters", predicate: ClrDatagridFilter, descendants: true }], ngImport: i0 });
4794
4842
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: StatePersistenceKeyDirective, decorators: [{
4795
4843
  type: Directive,
4796
4844
  args: [{
4797
4845
  selector: '[clrStatePersistenceKey]',
4798
4846
  }]
4799
- }], ctorParameters: function () { return [{ type: i2.ClrDatagrid }]; }, propDecorators: { options: [{
4847
+ }], ctorParameters: function () { return [{ type: i1$1.ClrDatagrid }]; }, propDecorators: { options: [{
4800
4848
  type: Input,
4801
4849
  args: ['clrStatePersistenceKey']
4802
4850
  }], useLocalStoreOnly: [{
@@ -4825,7 +4873,8 @@ class ColumnHiddenStatePersistenceDirective {
4825
4873
  this.destroy$ = new Subject();
4826
4874
  }
4827
4875
  ngOnInit() {
4828
- if (this.statePersistenceKey?.options.key && this.columnDirective?.clrDgField) {
4876
+ const persistenceEnabled = this.statePersistenceKey?.options?.persistHiddenColumns ?? true;
4877
+ if (this.statePersistenceKey?.options.key && this.columnDirective?.clrDgField && persistenceEnabled) {
4829
4878
  /* set hidden states from local storage (if existing) */
4830
4879
  this.initHiddenState();
4831
4880
  /* listen to state changes and persist in local storage */
@@ -4872,7 +4921,7 @@ class ColumnHiddenStatePersistenceDirective {
4872
4921
  this.destroy$.complete();
4873
4922
  }
4874
4923
  }
4875
- ColumnHiddenStatePersistenceDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ColumnHiddenStatePersistenceDirective, deps: [{ token: DatagridFieldDirective, optional: true }, { token: StatePersistenceKeyDirective, optional: true }, { token: i2.ClrDatagrid }, { token: i2.ClrDatagridHideableColumn }], target: i0.ɵɵFactoryTarget.Directive });
4924
+ ColumnHiddenStatePersistenceDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ColumnHiddenStatePersistenceDirective, deps: [{ token: DatagridFieldDirective, optional: true }, { token: StatePersistenceKeyDirective, optional: true }, { token: i1$1.ClrDatagrid }, { token: i1$1.ClrDatagridHideableColumn }], target: i0.ɵɵFactoryTarget.Directive });
4876
4925
  ColumnHiddenStatePersistenceDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: ColumnHiddenStatePersistenceDirective, selector: "[clrDgHideableColumn]", ngImport: i0 });
4877
4926
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ColumnHiddenStatePersistenceDirective, decorators: [{
4878
4927
  type: Directive,
@@ -4883,7 +4932,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImpor
4883
4932
  type: Optional
4884
4933
  }] }, { type: StatePersistenceKeyDirective, decorators: [{
4885
4934
  type: Optional
4886
- }] }, { type: i2.ClrDatagrid }, { type: i2.ClrDatagridHideableColumn }]; } });
4935
+ }] }, { type: i1$1.ClrDatagrid }, { type: i1$1.ClrDatagridHideableColumn }]; } });
4887
4936
 
4888
4937
  class ClrDatagridStatePersistenceModule {
4889
4938
  }
@@ -4953,12 +5002,12 @@ class ClrEnumFilterComponent {
4953
5002
  this.destroyed$.complete();
4954
5003
  }
4955
5004
  }
4956
- ClrEnumFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrEnumFilterComponent, deps: [{ token: i2.ClrDatagridFilter }, { token: i2.ClrDatagrid }], target: i0.ɵɵFactoryTarget.Component });
4957
- ClrEnumFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrEnumFilterComponent, selector: "clr-enum-filter", inputs: { property: ["clrProperty", "property"], value: ["clrFilterValues", "value"], clrPossibleValues: "clrPossibleValues" }, outputs: { clrFilterValuesChange: "clrFilterValuesChange" }, ngImport: i0, template: "<clr-checkbox-container class=\"filter-selection\">\n <clr-checkbox-wrapper *ngFor=\"let possibleValue of possibleValues\">\n <input\n type=\"checkbox\"\n clrCheckbox\n value=\"{{ possibleValue }}\"\n name=\"possibleValue\"\n [ngModel]=\"filteredValues.includes(possibleValue)\"\n (ngModelChange)=\"onChange(possibleValue, $event)\"\n />\n <label>{{ possibleValue }}</label>\n </clr-checkbox-wrapper>\n</clr-checkbox-container>\n", styles: [".filter-selection{margin-top:0}\n"], dependencies: [{ kind: "directive", type: i2.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i2.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i2.ClrCheckboxContainer, selector: "clr-checkbox-container,clr-toggle-container", inputs: ["clrInline"] }, { kind: "component", type: i2.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
5005
+ ClrEnumFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrEnumFilterComponent, deps: [{ token: i1$1.ClrDatagridFilter }, { token: i1$1.ClrDatagrid }], target: i0.ɵɵFactoryTarget.Component });
5006
+ ClrEnumFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrEnumFilterComponent, selector: "clr-enum-filter", inputs: { property: ["clrProperty", "property"], value: ["clrFilterValues", "value"], clrPossibleValues: "clrPossibleValues" }, outputs: { clrFilterValuesChange: "clrFilterValuesChange" }, ngImport: i0, template: "<clr-checkbox-container class=\"filter-selection\">\n <clr-checkbox-wrapper *ngFor=\"let possibleValue of possibleValues\">\n <input\n type=\"checkbox\"\n clrCheckbox\n value=\"{{ possibleValue }}\"\n name=\"possibleValue\"\n [ngModel]=\"filteredValues.includes(possibleValue)\"\n (ngModelChange)=\"onChange(possibleValue, $event)\"\n />\n <label>{{ possibleValue }}</label>\n </clr-checkbox-wrapper>\n</clr-checkbox-container>\n", styles: [".filter-selection{margin-top:0}\n"], dependencies: [{ kind: "directive", type: i1$1.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i1$1.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i1$1.ClrCheckboxContainer, selector: "clr-checkbox-container,clr-toggle-container", inputs: ["clrInline"] }, { kind: "component", type: i1$1.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
4958
5007
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrEnumFilterComponent, decorators: [{
4959
5008
  type: Component,
4960
5009
  args: [{ selector: 'clr-enum-filter', template: "<clr-checkbox-container class=\"filter-selection\">\n <clr-checkbox-wrapper *ngFor=\"let possibleValue of possibleValues\">\n <input\n type=\"checkbox\"\n clrCheckbox\n value=\"{{ possibleValue }}\"\n name=\"possibleValue\"\n [ngModel]=\"filteredValues.includes(possibleValue)\"\n (ngModelChange)=\"onChange(possibleValue, $event)\"\n />\n <label>{{ possibleValue }}</label>\n </clr-checkbox-wrapper>\n</clr-checkbox-container>\n", styles: [".filter-selection{margin-top:0}\n"] }]
4961
- }], ctorParameters: function () { return [{ type: i2.ClrDatagridFilter }, { type: i2.ClrDatagrid }]; }, propDecorators: { property: [{
5010
+ }], ctorParameters: function () { return [{ type: i1$1.ClrDatagridFilter }, { type: i1$1.ClrDatagrid }]; }, propDecorators: { property: [{
4962
5011
  type: Input,
4963
5012
  args: ['clrProperty']
4964
5013
  }], value: [{
@@ -5134,12 +5183,12 @@ class ClrDateFilterComponent {
5134
5183
  return other === this;
5135
5184
  }
5136
5185
  }
5137
- ClrDateFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDateFilterComponent, deps: [{ token: i2.ClrCommonStringsService }, { token: i2.ClrPopoverEventsService }, { token: i2.ClrDatagridFilter }], target: i0.ɵɵFactoryTarget.Component });
5138
- ClrDateFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrDateFilterComponent, selector: "clr-date-filter", inputs: { property: ["clrProperty", "property"], maxPlaceholder: ["clrFilterMaxPlaceholder", "maxPlaceholder"], minPlaceholder: ["clrFilterMinPlaceholder", "minPlaceholder"], value: ["clrFilterValue", "value"] }, outputs: { filterValueChange: "clrFilterValueChange" }, ngImport: i0, template: "<clr-date-container>\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n</clr-date-container>\n<clr-date-container>\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n</clr-date-container>\n", styles: [""], dependencies: [{ kind: "component", type: i2.ClrDateContainer, selector: "clr-date-container", inputs: ["clrPosition"] }, { kind: "directive", type: i2.ClrDateInput, selector: "[clrDate]", inputs: ["placeholder", "clrDate", "min", "max", "disabled"], outputs: ["clrDateChange"] }, { kind: "directive", type: i2.ClrDateInputValidator, selector: "[clrDate]" }] });
5186
+ ClrDateFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDateFilterComponent, deps: [{ token: i1$1.ClrCommonStringsService }, { token: i1$1.ClrPopoverEventsService }, { token: i1$1.ClrDatagridFilter }], target: i0.ɵɵFactoryTarget.Component });
5187
+ ClrDateFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrDateFilterComponent, selector: "clr-date-filter", inputs: { property: ["clrProperty", "property"], maxPlaceholder: ["clrFilterMaxPlaceholder", "maxPlaceholder"], minPlaceholder: ["clrFilterMinPlaceholder", "minPlaceholder"], value: ["clrFilterValue", "value"] }, outputs: { filterValueChange: "clrFilterValueChange" }, ngImport: i0, template: "<clr-date-container>\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n</clr-date-container>\n<clr-date-container>\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n</clr-date-container>\n", styles: [""], dependencies: [{ kind: "component", type: i1$1.ClrDateContainer, selector: "clr-date-container", inputs: ["clrPosition"] }, { kind: "directive", type: i1$1.ClrDateInput, selector: "[clrDate]", inputs: ["placeholder", "clrDate", "min", "max", "disabled"], outputs: ["clrDateChange"] }, { kind: "directive", type: i1$1.ClrDateInputValidator, selector: "[clrDate]" }] });
5139
5188
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDateFilterComponent, decorators: [{
5140
5189
  type: Component,
5141
5190
  args: [{ selector: 'clr-date-filter', template: "<clr-date-container>\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n</clr-date-container>\n<clr-date-container>\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n</clr-date-container>\n" }]
5142
- }], ctorParameters: function () { return [{ type: i2.ClrCommonStringsService }, { type: i2.ClrPopoverEventsService }, { type: i2.ClrDatagridFilter }]; }, propDecorators: { property: [{
5191
+ }], ctorParameters: function () { return [{ type: i1$1.ClrCommonStringsService }, { type: i1$1.ClrPopoverEventsService }, { type: i1$1.ClrDatagridFilter }]; }, propDecorators: { property: [{
5143
5192
  type: Input,
5144
5193
  args: ['clrProperty']
5145
5194
  }], maxPlaceholder: [{
@@ -5170,139 +5219,1771 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImpor
5170
5219
  }]
5171
5220
  }] });
5172
5221
 
5173
- /*
5174
- * Copyright (c) 2018-2022 Porsche Informatik. All Rights Reserved.
5175
- * This software is released under MIT license.
5176
- * The full license information can be found in LICENSE in the root directory of this project.
5222
+ /**
5223
+ * Day model.
5224
+ * Takes care of keeping records of full days, without the times & timezone issues.
5225
+ */
5226
+ class DayModel {
5227
+ constructor(...args) {
5228
+ if (args[0] instanceof Date) {
5229
+ const date = args[0];
5230
+ this.year = date.getFullYear();
5231
+ this.month = date.getMonth();
5232
+ this.date = date.getDate();
5233
+ }
5234
+ else if (typeof args[0] === 'string') {
5235
+ const [year, month, day] = args[0].split('-').map(n => parseInt(n, 10));
5236
+ this.year = year;
5237
+ this.month = month - 1;
5238
+ this.date = day;
5239
+ }
5240
+ else {
5241
+ this.year = args[0];
5242
+ this.month = args[1];
5243
+ this.date = args[2];
5244
+ }
5245
+ }
5246
+ /**
5247
+ * Checks if the passed value is equal to current day model.
5248
+ * @param value - Day model.
5249
+ * @returns Wether value is equal to current day model.
5250
+ */
5251
+ isEqual(value) {
5252
+ if (value) {
5253
+ return this.year === value.year && this.month === value.month && this.date === value.date;
5254
+ }
5255
+ return false;
5256
+ }
5257
+ /**
5258
+ * Increment day model with date value.
5259
+ * @param value - Incremental date value.
5260
+ * @returns Updated day model with incremented date value.
5261
+ */
5262
+ incrementBy(value) {
5263
+ // Creating new Javascript Date object to increment because
5264
+ // it will automatically take care of switching to next or previous
5265
+ // months & years without we having to worry about it.
5266
+ const date = new Date(this.year, this.month, this.date + value);
5267
+ this.year = date.getFullYear();
5268
+ this.month = date.getMonth();
5269
+ this.date = date.getDate();
5270
+ return this;
5271
+ }
5272
+ /**
5273
+ * Checks if current day model is after value.
5274
+ * @param value - Day model.
5275
+ * @returns Wether current day model is after value.
5276
+ */
5277
+ isAfter(value) {
5278
+ return this.toDate() > value.toDate();
5279
+ }
5280
+ /**
5281
+ * Checks if current day model is before value.
5282
+ * @param value - Day model.
5283
+ * @returns Wether current day model is before value.
5284
+ */
5285
+ isBefore(value) {
5286
+ return this.toDate() < value.toDate();
5287
+ }
5288
+ /**
5289
+ * Clones the current day model.
5290
+ * @returns Cloned day model.
5291
+ */
5292
+ clone() {
5293
+ return new DayModel(this.year, this.month, this.date);
5294
+ }
5295
+ /**
5296
+ * Convert to Javascript Date object.
5297
+ * @returns Javascript Date object.
5298
+ */
5299
+ toDate() {
5300
+ return new Date(this.year, this.month, this.date);
5301
+ }
5302
+ /**
5303
+ * To HTML5 date spec string.
5304
+ * See https://clarity.design/documentation/datepicker
5305
+ * @returns Date as HTML5 spec string.
5306
+ */
5307
+ toHTML5SpecDateString() {
5308
+ // The clarity date picker uses the format 'YYYY-MM-DD'.
5309
+ return `${this.year}-${this.pad(this.month + 1)}-${this.pad(this.date)}`;
5310
+ }
5311
+ /**
5312
+ * String padding with zeros.
5313
+ * @param num - Number to pad.
5314
+ * @returns Padded string.
5315
+ */
5316
+ pad(num) {
5317
+ return num < 10 ? `0${num}` : `${num}`;
5318
+ }
5319
+ }
5320
+
5321
+ /**
5322
+ * Keeps track of how many Clarity Datepicker there are open.
5323
+ * This is needed for the ClrDaterangepickerContainerComponent, to know when to close the popover.
5177
5324
  */
5178
- class ClrAddonsModule {
5325
+ class OpenedDatepickersTrackerService {
5326
+ constructor() {
5327
+ this.openedDatepickersCount = 0;
5328
+ /**
5329
+ * Event triggered when value changes.
5330
+ */
5331
+ this.valueChange = new EventEmitter();
5332
+ }
5333
+ /**
5334
+ * Tracks an opened datepicker.
5335
+ * @param opened - Opened state.
5336
+ */
5337
+ track(opened) {
5338
+ if (opened) {
5339
+ this.openedDatepickersCount++;
5340
+ }
5341
+ else {
5342
+ this.openedDatepickersCount--;
5343
+ }
5344
+ this.openedDatepickersCount = Math.max(0, this.openedDatepickersCount);
5345
+ this.valueChange.emit(this.openedDatepickersCount !== 0);
5346
+ }
5179
5347
  }
5180
- ClrAddonsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrAddonsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
5181
- ClrAddonsModulemod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.1", ngImport: i0, type: ClrAddonsModule, exports: [ClrViewEditSectionModule,
5182
- ClrPagerModule,
5183
- ClrDotPagerModule,
5184
- ClrPagedSearchResultListModule,
5185
- ClrCollapseExpandSectionModule,
5186
- ClrBreadcrumbModule,
5187
- ClrMainNavGroupModule,
5188
- ClrContentPanelModule,
5189
- ClrNotificationModule,
5190
- ClrFlowBarModule,
5191
- ClrBackButtonModule,
5192
- ClrNumericFieldModule,
5193
- ClrSearchFieldModule,
5194
- ClrTreetableModule,
5195
- ClrProgressSpinnerModule,
5196
- ClrDateTimeModule,
5197
- ClrQuickListModule,
5198
- ClrLetterAvatarModule,
5199
- ClrMultilingualModule,
5200
- ClrGenericQuickListModule,
5201
- ClrDataListValidatorModule,
5202
- ClrHistoryModule,
5203
- ClrAutocompleteOffModule,
5204
- ClrBrandAvatarModule,
5205
- ClrLocationBarModule,
5206
- ClrFormModule,
5207
- ClrDropdownOverflowModule,
5208
- ClrDatagridStatePersistenceModule,
5209
- ClrEnumFilterModule,
5210
- ClrDateFilterModule] });
5211
- ClrAddonsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrAddonsModule, imports: [ClrViewEditSectionModule,
5212
- ClrPagerModule,
5213
- ClrDotPagerModule,
5214
- ClrPagedSearchResultListModule,
5215
- ClrCollapseExpandSectionModule,
5216
- ClrBreadcrumbModule,
5217
- ClrMainNavGroupModule,
5218
- ClrContentPanelModule,
5219
- ClrNotificationModule,
5220
- ClrFlowBarModule,
5221
- ClrBackButtonModule,
5222
- ClrNumericFieldModule,
5223
- ClrSearchFieldModule,
5224
- ClrTreetableModule,
5225
- ClrProgressSpinnerModule,
5226
- ClrDateTimeModule,
5227
- ClrQuickListModule,
5228
- ClrLetterAvatarModule,
5229
- ClrMultilingualModule,
5230
- ClrGenericQuickListModule,
5231
- ClrDataListValidatorModule,
5232
- ClrHistoryModule,
5233
- ClrAutocompleteOffModule,
5234
- ClrBrandAvatarModule,
5235
- ClrLocationBarModule,
5236
- ClrFormModule,
5237
- ClrDropdownOverflowModule,
5238
- ClrDatagridStatePersistenceModule,
5239
- ClrEnumFilterModule,
5240
- ClrDateFilterModule] });
5241
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrAddonsModule, decorators: [{
5242
- type: NgModule,
5243
- args: [{
5244
- exports: [
5245
- ClrViewEditSectionModule,
5246
- ClrPagerModule,
5247
- ClrDotPagerModule,
5248
- ClrPagedSearchResultListModule,
5249
- ClrCollapseExpandSectionModule,
5250
- ClrBreadcrumbModule,
5251
- ClrMainNavGroupModule,
5252
- ClrContentPanelModule,
5253
- ClrNotificationModule,
5254
- ClrFlowBarModule,
5255
- ClrBackButtonModule,
5256
- ClrNumericFieldModule,
5257
- ClrSearchFieldModule,
5258
- ClrTreetableModule,
5259
- ClrProgressSpinnerModule,
5260
- ClrDateTimeModule,
5261
- ClrQuickListModule,
5262
- ClrLetterAvatarModule,
5263
- ClrMultilingualModule,
5264
- ClrGenericQuickListModule,
5265
- ClrDataListValidatorModule,
5266
- ClrHistoryModule,
5267
- ClrAutocompleteOffModule,
5268
- ClrBrandAvatarModule,
5269
- ClrLocationBarModule,
5270
- ClrFormModule,
5271
- ClrDropdownOverflowModule,
5272
- ClrDatagridStatePersistenceModule,
5273
- ClrEnumFilterModule,
5274
- ClrDateFilterModule,
5275
- ],
5276
- }]
5348
+ OpenedDatepickersTrackerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: OpenedDatepickersTrackerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5349
+ OpenedDatepickersTrackerServiceprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: OpenedDatepickersTrackerService, providedIn: 'root' });
5350
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: OpenedDatepickersTrackerService, decorators: [{
5351
+ type: Injectable,
5352
+ args: [{ providedIn: 'root' }]
5277
5353
  }] });
5278
5354
 
5279
- /*
5280
- * Copyright (c) 2018-2019 Porsche Informatik. All Rights Reserved.
5281
- * This software is released under MIT license.
5282
- * The full license information can be found in LICENSE in the root directory of this project.
5283
- */
5355
+ class ClrDatepickerComponent {
5356
+ constructor(openedDatepickersTrackerService) {
5357
+ this.openedDatepickersTrackerService = openedDatepickersTrackerService;
5358
+ /**
5359
+ * Text label.
5360
+ */
5361
+ this.label = 'Date';
5362
+ /**
5363
+ * Minimum date that can be selected.
5364
+ */
5365
+ this.minDate = undefined;
5366
+ /**
5367
+ * Maximum date that can be selected.
5368
+ */
5369
+ this.maxDate = undefined;
5370
+ /**
5371
+ * Event triggered when value changes.
5372
+ */
5373
+ this.valueChange = new EventEmitter();
5374
+ /** List of subscriptions to later destroy. */
5375
+ this.subscriptions = [];
5376
+ }
5377
+ /**
5378
+ * Get date.
5379
+ * @returns JavaScript Date object.
5380
+ */
5381
+ get date() {
5382
+ return this.value?.toDate();
5383
+ }
5384
+ /**
5385
+ * Set date.
5386
+ */
5387
+ set date(val) {
5388
+ this.value = val == null ? null : new DayModel(val);
5389
+ this.valueChange.emit(this.value);
5390
+ }
5391
+ /**
5392
+ * Minimum date as attribute string.
5393
+ * @returns Minimum date as attribute string.
5394
+ */
5395
+ get minDateAttr() {
5396
+ return this.minDate?.toHTML5SpecDateString();
5397
+ }
5398
+ /**
5399
+ * Maximum date as attribute string.
5400
+ * @returns Maximum date as attribute string.
5401
+ */
5402
+ get maxDateAttr() {
5403
+ return this.maxDate?.toHTML5SpecDateString();
5404
+ }
5405
+ ngAfterViewInit() {
5406
+ // eslint-disable-next-line dot-notation -- Need access to this private property.
5407
+ const toggleService = this.clrDateContainer['toggleService'];
5408
+ this.subscriptions.push(toggleService.openChange.subscribe(openState => {
5409
+ this.openedDatepickersTrackerService.track(openState);
5410
+ }));
5411
+ }
5412
+ ngOnDestroy() {
5413
+ this.subscriptions.forEach(subscription => subscription.unsubscribe());
5414
+ }
5415
+ /**
5416
+ * Focus input.
5417
+ */
5418
+ focus() {
5419
+ this.inputElm.nativeElement.focus();
5420
+ }
5421
+ }
5422
+ ClrDatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDatepickerComponent, deps: [{ token: OpenedDatepickersTrackerService }], target: i0.ɵɵFactoryTarget.Component });
5423
+ ClrDatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrDatepickerComponent, selector: "clr-datepicker", inputs: { value: "value", label: "label", minDate: "minDate", maxDate: "maxDate" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "inputElm", first: true, predicate: ["inputElm"], descendants: true }, { propertyName: "clrDateContainer", first: true, predicate: ClrDateContainer, descendants: true }], ngImport: i0, template: "<clr-date-container>\n <label>{{ this.label }}</label>\n <input #inputElm clrDate [(clrDate)]=\"this.date\" [min]=\"this.minDateAttr\" [max]=\"this.maxDateAttr\" />\n</clr-date-container>\n", dependencies: [{ kind: "directive", type: i1$1.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "component", type: i1$1.ClrDateContainer, selector: "clr-date-container", inputs: ["clrPosition"] }, { kind: "directive", type: i1$1.ClrDateInput, selector: "[clrDate]", inputs: ["placeholder", "clrDate", "min", "max", "disabled"], outputs: ["clrDateChange"] }, { kind: "directive", type: i1$1.ClrDateInputValidator, selector: "[clrDate]" }] });
5424
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDatepickerComponent, decorators: [{
5425
+ type: Component,
5426
+ args: [{ selector: 'clr-datepicker', template: "<clr-date-container>\n <label>{{ this.label }}</label>\n <input #inputElm clrDate [(clrDate)]=\"this.date\" [min]=\"this.minDateAttr\" [max]=\"this.maxDateAttr\" />\n</clr-date-container>\n" }]
5427
+ }], ctorParameters: function () { return [{ type: OpenedDatepickersTrackerService }]; }, propDecorators: { value: [{
5428
+ type: Input
5429
+ }], label: [{
5430
+ type: Input
5431
+ }], minDate: [{
5432
+ type: Input
5433
+ }], maxDate: [{
5434
+ type: Input
5435
+ }], inputElm: [{
5436
+ type: ViewChild,
5437
+ args: ['inputElm']
5438
+ }], clrDateContainer: [{
5439
+ type: ViewChild,
5440
+ args: [ClrDateContainer]
5441
+ }], valueChange: [{
5442
+ type: Output
5443
+ }] } });
5284
5444
 
5285
- /*
5286
- * Copyright (c) 2018-2019 Porsche Informatik. All Rights Reserved.
5287
- * This software is released under MIT license.
5288
- * The full license information can be found in LICENSE in the root directory of this project.
5289
- */
5445
+ const USER_INPUT_REGEX = /\d+/g;
5446
+ // https://en.wikipedia.org/wiki/Date_format_by_country
5447
+ const LITTLE_ENDIAN_REGEX = /d+.+m+.+y+/i;
5448
+ const MIDDLE_ENDIAN_REGEX = /m+.+d+.+y+/i;
5449
+ const DELIMITER_REGEX = /d+|m+|y+/i;
5450
+ const YEAR = 'YYYY';
5451
+ const MONTH = 'MM';
5452
+ const DATE = 'DD';
5453
+ const LITTLE_ENDIAN = {
5454
+ name: 'LITTLE_ENDIAN',
5455
+ format: [DATE, MONTH, YEAR],
5456
+ };
5457
+ const MIDDLE_ENDIAN = {
5458
+ name: 'MIDDLE_ENDIAN',
5459
+ format: [MONTH, DATE, YEAR],
5460
+ };
5461
+ const BIG_ENDIAN = {
5462
+ name: 'BIG_ENDIAN',
5463
+ format: [YEAR, MONTH, DATE],
5464
+ };
5465
+ /** Default separator text. */
5466
+ const SEPARATOR_TEXT_DEFAULT = ' - ';
5467
+ const TRANSLATIONS = {
5468
+ from: 'From',
5469
+ to: 'To',
5470
+ };
5290
5471
 
5291
- /*
5292
- * Copyright (c) 2018-2019 Porsche Informatik. All Rights Reserved.
5293
- * This software is released under MIT license.
5294
- * The full license information can be found in LICENSE in the root directory of this project.
5472
+ /**
5473
+ * Popover positions.
5474
+ * https://github.com/vmware-clarity/ng-clarity/blob/f1a668086bf88bcf5ef1cd36b0d150e45e88def7/projects/angular/src/utils/popover/enums/positions.enum.ts
5295
5475
  */
5476
+ class PopoverPositions {
5477
+ }
5478
+ PopoverPositions.options = [
5479
+ 'bottom-left',
5480
+ 'bottom-right',
5481
+ 'left-bottom',
5482
+ 'left-top',
5483
+ 'right-bottom',
5484
+ 'right-top',
5485
+ 'top-left',
5486
+ 'top-right',
5487
+ ];
5488
+ PopoverPositions['bottom-left'] = {
5489
+ axis: ClrAxis.VERTICAL,
5490
+ side: ClrSide.AFTER,
5491
+ anchor: ClrAlignment.START,
5492
+ content: ClrAlignment.START,
5493
+ };
5494
+ PopoverPositions['bottom-right'] = {
5495
+ axis: ClrAxis.VERTICAL,
5496
+ side: ClrSide.AFTER,
5497
+ anchor: ClrAlignment.END,
5498
+ content: ClrAlignment.END,
5499
+ };
5500
+ PopoverPositions['left-bottom'] = {
5501
+ axis: ClrAxis.HORIZONTAL,
5502
+ side: ClrSide.BEFORE,
5503
+ anchor: ClrAlignment.START,
5504
+ content: ClrAlignment.START,
5505
+ };
5506
+ PopoverPositions['left-top'] = {
5507
+ axis: ClrAxis.HORIZONTAL,
5508
+ side: ClrSide.BEFORE,
5509
+ anchor: ClrAlignment.CENTER,
5510
+ content: ClrAlignment.END,
5511
+ };
5512
+ PopoverPositions['right-bottom'] = {
5513
+ axis: ClrAxis.HORIZONTAL,
5514
+ side: ClrSide.AFTER,
5515
+ anchor: ClrAlignment.START,
5516
+ content: ClrAlignment.START,
5517
+ };
5518
+ PopoverPositions['right-top'] = {
5519
+ axis: ClrAxis.HORIZONTAL,
5520
+ side: ClrSide.AFTER,
5521
+ anchor: ClrAlignment.CENTER,
5522
+ content: ClrAlignment.END,
5523
+ };
5524
+ PopoverPositions['top-left'] = {
5525
+ axis: ClrAxis.VERTICAL,
5526
+ side: ClrSide.BEFORE,
5527
+ anchor: ClrAlignment.START,
5528
+ content: ClrAlignment.START,
5529
+ };
5530
+ PopoverPositions['top-right'] = {
5531
+ axis: ClrAxis.VERTICAL,
5532
+ side: ClrSide.BEFORE,
5533
+ anchor: ClrAlignment.END,
5534
+ content: ClrAlignment.END,
5535
+ };
5296
5536
 
5297
- /*
5298
- * Copyright (c) 2018-2019 Porsche Informatik. All Rights Reserved.
5299
- * This software is released under MIT license.
5300
- * The full license information can be found in LICENSE in the root directory of this project.
5537
+ /**
5538
+ * Daterange control state service.
5539
+ * Stores data for communication between daterange container and input.
5301
5540
  */
5302
-
5303
- /*
5304
- * Copyright (c) 2018-2019 Porsche Informatik. All Rights Reserved.
5305
- * This software is released under MIT license.
5541
+ class DaterangeControlStateService {
5542
+ constructor() {
5543
+ /** Disabled control state. */
5544
+ this.disabled = false;
5545
+ /** Focused. */
5546
+ this.focused = false;
5547
+ /** List of validation errors. */
5548
+ this.errors = null;
5549
+ this._invalid = false;
5550
+ this._touched = false;
5551
+ /**
5552
+ * Event triggered when status changes.
5553
+ */
5554
+ this.statusChange = new EventEmitter();
5555
+ }
5556
+ /**
5557
+ * Control invalid status.
5558
+ * @returns Control invalid status.
5559
+ */
5560
+ get invalid() {
5561
+ return this._invalid;
5562
+ }
5563
+ /**
5564
+ * Touched.
5565
+ * @returns Touched.
5566
+ */
5567
+ get touched() {
5568
+ return this._touched;
5569
+ }
5570
+ /**
5571
+ * Update status.
5572
+ * Only for valid & invalid status changes.
5573
+ * And only if there was a real change.
5574
+ * Also updates errors list.
5575
+ * Emits `statusChange` event.
5576
+ * @param control
5577
+ */
5578
+ updateStatus(control) {
5579
+ this._touched = control.touched;
5580
+ // We only care about valid & invalid status changes.
5581
+ // There is an bug where `ClrDaterangepickerDirective.writeValue` is called twice with same value (`null`).
5582
+ // Setting ` && (control.touched || control.dirty)` in next if-statement will hide the errors,
5583
+ // but the control will still be invalid with errors (just hidden).
5584
+ if (['VALID', 'INVALID'].includes(control.status)) {
5585
+ this.errors = control.errors;
5586
+ this._invalid = control.invalid;
5587
+ this.statusChange.emit(this._invalid);
5588
+ }
5589
+ }
5590
+ }
5591
+ DaterangeControlStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: DaterangeControlStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5592
+ DaterangeControlStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: DaterangeControlStateService });
5593
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: DaterangeControlStateService, decorators: [{
5594
+ type: Injectable
5595
+ }] });
5596
+
5597
+ /**
5598
+ * Daterange parsing service.
5599
+ * Heavy inspired by `date-io.service.ts` from Clarity.
5600
+ * https://github.com/vmware-clarity/ng-clarity/blob/a21fe726fe91ae3c929b8f016359afe354bb89c6/projects/angular/src/forms/datepicker/providers/date-io.service.ts
5601
+ */
5602
+ class DaterangeParsingService {
5603
+ constructor(locale) {
5604
+ this.locale = locale;
5605
+ this.localeDelimiter = [];
5606
+ const localeFormat = getLocaleDateFormat(this.locale, FormatWidth.Short);
5607
+ const format = localeFormat.toLocaleLowerCase();
5608
+ if (LITTLE_ENDIAN_REGEX.test(format)) {
5609
+ this.localeDisplayFormat = LITTLE_ENDIAN;
5610
+ }
5611
+ else if (MIDDLE_ENDIAN_REGEX.test(format)) {
5612
+ this.localeDisplayFormat = MIDDLE_ENDIAN;
5613
+ }
5614
+ else {
5615
+ this.localeDisplayFormat = BIG_ENDIAN;
5616
+ }
5617
+ // Splitting it by date, month and year, leaves us with the delimiters.
5618
+ // E.g. `"dd/MM/y".split(/d+|m+|y+/i)` results in `["", "/", "/", ""]`.
5619
+ const delimiters = localeFormat.split(DELIMITER_REGEX);
5620
+ this.localeDelimiter = [delimiters[1], delimiters[2]];
5621
+ }
5622
+ /** Locale format. */
5623
+ get localeFormat() {
5624
+ return (this.localeDisplayFormat.format[0] +
5625
+ this.localeDelimiter[0] +
5626
+ this.localeDisplayFormat.format[1] +
5627
+ this.localeDelimiter[1] +
5628
+ this.localeDisplayFormat.format[2]);
5629
+ }
5630
+ /**
5631
+ * Convert daterange to locale friendly text.
5632
+ * @param daterange - Daterange.
5633
+ * @param separator - Separator between 'from' and 'to' dates.
5634
+ * @returns Friendly daterange text.
5635
+ */
5636
+ toLocaleString(daterange, separator = SEPARATOR_TEXT_DEFAULT) {
5637
+ if (daterange == null) {
5638
+ return '';
5639
+ }
5640
+ const { from, to } = daterange;
5641
+ if (from == null || to == null) {
5642
+ return '';
5643
+ }
5644
+ const fromDate = from.toDate();
5645
+ const toDate = to.toDate();
5646
+ const fromDateStr = this.toLocaleDisplayFormatString(fromDate);
5647
+ const toDateStr = this.toLocaleDisplayFormatString(toDate);
5648
+ return fromDateStr + separator + toDateStr;
5649
+ }
5650
+ /**
5651
+ * Convert date to locale display format string.
5652
+ * @param date - Javascript Date object.
5653
+ * @returns Locale display format string.
5654
+ */
5655
+ toLocaleDisplayFormatString(date) {
5656
+ const dateNo = date.getDate();
5657
+ const monthNo = date.getMonth() + 1;
5658
+ const yearNo = date.getFullYear();
5659
+ const dateStr = this.pad(dateNo);
5660
+ const monthStr = this.pad(monthNo);
5661
+ const delim1 = this.localeDelimiter[0];
5662
+ const delim2 = this.localeDelimiter[1];
5663
+ if (this.localeDisplayFormat === LITTLE_ENDIAN) {
5664
+ return dateStr + delim1 + monthStr + delim2 + yearNo;
5665
+ }
5666
+ else if (this.localeDisplayFormat === MIDDLE_ENDIAN) {
5667
+ return monthStr + delim1 + dateStr + delim2 + yearNo;
5668
+ }
5669
+ else {
5670
+ return yearNo + delim1 + monthStr + delim2 + dateStr;
5671
+ }
5672
+ }
5673
+ /**
5674
+ * String padding with zeros.
5675
+ * @param num - Number to pad.
5676
+ * @returns Padded string.
5677
+ */
5678
+ pad(num) {
5679
+ return num < 10 ? `0${num}` : `${num}`;
5680
+ }
5681
+ /**
5682
+ * Parse daterange string to daterange object.
5683
+ * @param daterangeString - Daterange string.
5684
+ * @param separator - Separator text.
5685
+ * @returns Daterange object.
5686
+ */
5687
+ parse(daterangeString, separator = SEPARATOR_TEXT_DEFAULT) {
5688
+ if (daterangeString == null || daterangeString === '') {
5689
+ return null;
5690
+ }
5691
+ const [fromString, toString] = daterangeString.split(separator);
5692
+ const from = this.getDayModelFromDateString(fromString);
5693
+ const to = this.getDayModelFromDateString(toString);
5694
+ if (from == null && to == null) {
5695
+ return null;
5696
+ }
5697
+ return { from, to };
5698
+ }
5699
+ /**
5700
+ * Get `DayModel` from date string.
5701
+ * @param dateString - Date string.
5702
+ * @returns DayModel.
5703
+ */
5704
+ getDayModelFromDateString(dateString) {
5705
+ if (dateString == null || dateString === '') {
5706
+ return null;
5707
+ }
5708
+ const dateParts = dateString.match(USER_INPUT_REGEX);
5709
+ if (dateParts == null || dateParts.length !== 3) {
5710
+ return null;
5711
+ }
5712
+ const [firstPart, secondPart, thirdPart] = dateParts;
5713
+ if (this.localeDisplayFormat === LITTLE_ENDIAN) {
5714
+ // secondPart is month && firstPart is date.
5715
+ return this.getDayModelFromDateParts(thirdPart, secondPart, firstPart);
5716
+ }
5717
+ else if (this.localeDisplayFormat === MIDDLE_ENDIAN) {
5718
+ // firstPart is month && secondPart is date.
5719
+ return this.getDayModelFromDateParts(thirdPart, firstPart, secondPart);
5720
+ }
5721
+ else {
5722
+ // secondPart is month && thirdPart is date.
5723
+ return this.getDayModelFromDateParts(firstPart, secondPart, thirdPart);
5724
+ }
5725
+ }
5726
+ /**
5727
+ * Get `DayModel` from date string parts.
5728
+ * @param yearString - Year string.
5729
+ * @param monthString - Month string.
5730
+ * @param dateString - Date string.
5731
+ * @returns DayModel.
5732
+ */
5733
+ getDayModelFromDateParts(yearString, monthString, dateString) {
5734
+ // Check for valid date part strings.
5735
+ let year = parseInt(yearString);
5736
+ if (isNaN(year)) {
5737
+ return null;
5738
+ }
5739
+ let month = parseInt(monthString);
5740
+ if (isNaN(month)) {
5741
+ return null;
5742
+ }
5743
+ const date = parseInt(dateString);
5744
+ if (isNaN(date)) {
5745
+ return null;
5746
+ }
5747
+ // Convert year to 4 digit year.
5748
+ year = this.parseToFourDigitYear(year);
5749
+ if (year == null) {
5750
+ return null;
5751
+ }
5752
+ // Month is zero-indexed.
5753
+ month -= 1;
5754
+ // Creating new Javascript Date object, because it will automatically take care of
5755
+ // switching to next or previous months & years without we having to worry about it.
5756
+ const parsedDate = new Date(year, month, date);
5757
+ if (isNaN(parsedDate.getTime())) {
5758
+ return null;
5759
+ }
5760
+ return new DayModel(parsedDate);
5761
+ }
5762
+ /**
5763
+ * Takes in a year and if it is a 2 digit year, returns the corresponding 4 digit year.
5764
+ * Window of 80 years before and 20 years after the present year.
5765
+ * Credit: https://github.com/globalizejs/globalize/blob/e1b31cd6a4f1cff75b185b68b7a32220aac5196f/src/date/parse.js
5766
+ * @param year - Year.
5767
+ * @returns Four-digit year.
5768
+ */
5769
+ parseToFourDigitYear(year) {
5770
+ // Impossible years.
5771
+ if (year > 9999 || (year > 100 && year < 999) || year < 10) {
5772
+ return null;
5773
+ }
5774
+ if (year > 999) {
5775
+ return year;
5776
+ }
5777
+ const currYear = new Date().getFullYear();
5778
+ const century = Math.floor(currYear / 100) * 100;
5779
+ let result = year + century;
5780
+ if (result > currYear + 20) {
5781
+ result = result - 100;
5782
+ }
5783
+ return result;
5784
+ }
5785
+ }
5786
+ DaterangeParsingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: DaterangeParsingService, deps: [{ token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Injectable });
5787
+ DaterangeParsingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: DaterangeParsingService, providedIn: 'root' });
5788
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: DaterangeParsingService, decorators: [{
5789
+ type: Injectable,
5790
+ args: [{
5791
+ providedIn: 'root',
5792
+ }]
5793
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
5794
+ type: Inject,
5795
+ args: [LOCALE_ID]
5796
+ }] }]; } });
5797
+
5798
+ /**
5799
+ * Daterange service.
5800
+ * Keeps track of daterange related values.
5801
+ */
5802
+ class DaterangeService {
5803
+ constructor() {
5804
+ /** Minimum date that can be selected. */
5805
+ this.minDate = null;
5806
+ /** Maximum date that can be selected. */
5807
+ this.maxDate = null;
5808
+ this._selectedDaterange = null;
5809
+ /**
5810
+ * Event triggered when value changes.
5811
+ */
5812
+ this.valueChange = new EventEmitter();
5813
+ }
5814
+ /**
5815
+ * Selected daterange value.
5816
+ * @returns Selected daterange value.
5817
+ */
5818
+ get selectedDaterange() {
5819
+ return this._selectedDaterange;
5820
+ }
5821
+ /**
5822
+ * Set selected daterange value.
5823
+ * @param value - New selected daterange value.
5824
+ * @param triggerEvent - Trigger change event (default true).
5825
+ */
5826
+ updateSelectedDaterange(value, triggerEvent = true) {
5827
+ this._selectedDaterange = value;
5828
+ if (triggerEvent) {
5829
+ this.valueChange.emit(value);
5830
+ }
5831
+ }
5832
+ /**
5833
+ * Checks if daterange is valid.
5834
+ * Daterange is considered invalid when it's empty, or when one of it's properties is absent.
5835
+ * @returns Wether daterange is valid.
5836
+ */
5837
+ isValid() {
5838
+ if (this._selectedDaterange == null || this._selectedDaterange.from == null || this._selectedDaterange.to == null) {
5839
+ return false;
5840
+ }
5841
+ return true;
5842
+ }
5843
+ }
5844
+ DaterangeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: DaterangeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5845
+ DaterangeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: DaterangeService });
5846
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: DaterangeService, decorators: [{
5847
+ type: Injectable
5848
+ }] });
5849
+
5850
+ class ClrAbstractContainer {
5851
+ constructor(clrLayout, daterangeControlStateService) {
5852
+ this.clrLayout = clrLayout;
5853
+ this.daterangeControlStateService = daterangeControlStateService;
5854
+ this.isFormControl = true;
5855
+ }
5856
+ /**
5857
+ * Detect if container is not part of an vertical form to apply correct grid classes.
5858
+ */
5859
+ get addLayoutGrid() {
5860
+ return !this.clrLayout?.layoutService?.isVertical();
5861
+ }
5862
+ /**
5863
+ * Wether to show the helper control.
5864
+ * @returns Wether to show the helper control.
5865
+ */
5866
+ get showHelper() {
5867
+ if (this.controlHelperComponent == null) {
5868
+ return false;
5869
+ }
5870
+ // Helper Component exist and the state of the form is NONE (not touched).
5871
+ if (!this.daterangeControlStateService.touched) {
5872
+ return true;
5873
+ }
5874
+ // Or there is no success component but the state of the form is VALID - show helper information.
5875
+ if (this.controlSuccessComponent == null &&
5876
+ this.daterangeControlStateService.touched &&
5877
+ !this.daterangeControlStateService.invalid) {
5878
+ return true;
5879
+ }
5880
+ // Or there is no error component but the state of the form is INVALID - show helper information.
5881
+ if (this.controlErrorComponent == null && this.daterangeControlStateService.invalid) {
5882
+ return true;
5883
+ }
5884
+ return false;
5885
+ }
5886
+ /**
5887
+ * Wether to show the valid control.
5888
+ * @returns Wether to show the valid control.
5889
+ */
5890
+ get showValid() {
5891
+ return !this.daterangeControlStateService.invalid && !!this.controlSuccessComponent;
5892
+ }
5893
+ /**
5894
+ * Wether to show the invalid control.
5895
+ * @returns Wether to show the invalid control.
5896
+ */
5897
+ get showInvalid() {
5898
+ return this.daterangeControlStateService.invalid && !!this.controlErrorComponent;
5899
+ }
5900
+ /**
5901
+ * Disabled state.
5902
+ * @returns Disabled state.
5903
+ */
5904
+ get disabled() {
5905
+ return this.daterangeControlStateService.disabled;
5906
+ }
5907
+ /**
5908
+ * If control is focused.
5909
+ * @returns Wether control is focused.
5910
+ */
5911
+ get focus() {
5912
+ return this.daterangeControlStateService.focused;
5913
+ }
5914
+ /**
5915
+ * Wether control is invalid.
5916
+ * @returns Wether control is invalid.
5917
+ */
5918
+ get isInvalid() {
5919
+ return this.daterangeControlStateService.invalid;
5920
+ }
5921
+ }
5922
+ ClrAbstractContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrAbstractContainer, deps: [{ token: i1$1.ClrLayout, optional: true }, { token: DaterangeControlStateService }], target: i0.ɵɵFactoryTarget.Directive });
5923
+ ClrAbstractContainer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: ClrAbstractContainer, host: { properties: { "class.clr-form-control": "this.isFormControl", "class.clr-row": "this.addLayoutGrid" } }, queries: [{ propertyName: "labelComponent", first: true, predicate: ClrLabel, descendants: true }, { propertyName: "controlHelperComponent", first: true, predicate: ClrControlHelper, descendants: true }, { propertyName: "controlErrorComponent", first: true, predicate: ClrControlError, descendants: true }, { propertyName: "controlSuccessComponent", first: true, predicate: ClrControlSuccess, descendants: true }], ngImport: i0 });
5924
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrAbstractContainer, decorators: [{
5925
+ type: Directive
5926
+ }], ctorParameters: function () { return [{ type: i1$1.ClrLayout, decorators: [{
5927
+ type: Optional
5928
+ }] }, { type: DaterangeControlStateService }]; }, propDecorators: { isFormControl: [{
5929
+ type: HostBinding,
5930
+ args: ['class.clr-form-control']
5931
+ }], addLayoutGrid: [{
5932
+ type: HostBinding,
5933
+ args: ['class.clr-row']
5934
+ }], labelComponent: [{
5935
+ type: ContentChild,
5936
+ args: [ClrLabel]
5937
+ }], controlHelperComponent: [{
5938
+ type: ContentChild,
5939
+ args: [ClrControlHelper]
5940
+ }], controlErrorComponent: [{
5941
+ type: ContentChild,
5942
+ args: [ClrControlError]
5943
+ }], controlSuccessComponent: [{
5944
+ type: ContentChild,
5945
+ args: [ClrControlSuccess]
5946
+ }] } });
5947
+
5948
+ /**
5949
+ * Daterangepicker.
5950
+ */
5951
+ class ClrDaterangepickerDirective {
5952
+ constructor(control, element, renderer, daterangeControlStateService, controlIdService, daterangeService, daterangeParsingService) {
5953
+ this.control = control;
5954
+ this.element = element;
5955
+ this.renderer = renderer;
5956
+ this.daterangeControlStateService = daterangeControlStateService;
5957
+ this.controlIdService = controlIdService;
5958
+ this.daterangeService = daterangeService;
5959
+ this.daterangeParsingService = daterangeParsingService;
5960
+ /**
5961
+ * Locale text between 'from' and 'to' dateranges.
5962
+ */
5963
+ this.separatorText = SEPARATOR_TEXT_DEFAULT;
5964
+ /**
5965
+ * Event that is triggered when value changes.
5966
+ */
5967
+ this.valueChange = new EventEmitter();
5968
+ /** Set the `type` attribute always to "text", to not get the native datepicker. */
5969
+ this.inputType = 'text';
5970
+ this.inputClass = true;
5971
+ /** List of subscriptions to later destroy. */
5972
+ this.subscriptions = [];
5973
+ this.onChanged = (_value) => undefined;
5974
+ this.onTouched = (_value) => undefined;
5975
+ // To get access to the NgControl, we had to remove the `NG_VALUE_ACCESSOR`
5976
+ // provider and set them manually, while still keeping the interfaces.
5977
+ this.control.valueAccessor = this;
5978
+ }
5979
+ /**
5980
+ * Minimum date that can be selected.
5981
+ */
5982
+ set min(value) {
5983
+ this.daterangeService.minDate = !value ? null : new DayModel(value);
5984
+ }
5985
+ /**
5986
+ * Maximum date that can be selected.
5987
+ */
5988
+ set max(value) {
5989
+ this.daterangeService.maxDate = !value ? null : new DayModel(value);
5990
+ }
5991
+ get placeholderText() {
5992
+ return (this.placeholder ??
5993
+ this.daterangeParsingService.localeFormat + this.separatorText + this.daterangeParsingService.localeFormat);
5994
+ }
5995
+ /**
5996
+ * Id-attribute.
5997
+ */
5998
+ get id() {
5999
+ return this.controlIdService.id;
6000
+ }
6001
+ /**
6002
+ * Id-attribute.
6003
+ * @returns Id-attribute.
6004
+ */
6005
+ set id(value) {
6006
+ this.controlIdService.id = value;
6007
+ }
6008
+ /**
6009
+ * Disable control.
6010
+ */
6011
+ set disabled(value) {
6012
+ this.daterangeControlStateService.disabled = value;
6013
+ }
6014
+ /**
6015
+ * Disabled state.
6016
+ * @returns Disabled state.
6017
+ */
6018
+ get disabled() {
6019
+ return this.daterangeControlStateService.disabled;
6020
+ }
6021
+ ngOnInit() {
6022
+ this.listenForDaterangeValueChanges();
6023
+ this.listenForControlStatusChanges();
6024
+ }
6025
+ ngOnDestroy() {
6026
+ this.subscriptions.forEach(subscription => subscription.unsubscribe());
6027
+ }
6028
+ /**
6029
+ * Listen for daterange value changes.
6030
+ */
6031
+ listenForDaterangeValueChanges() {
6032
+ this.subscriptions.push(this.daterangeService.valueChange.subscribe((_daterange) => {
6033
+ this.triggerChange();
6034
+ }));
6035
+ }
6036
+ /**
6037
+ * Listen for control status changes.
6038
+ */
6039
+ listenForControlStatusChanges() {
6040
+ this.subscriptions.push(this.control.statusChanges.subscribe((_status) => {
6041
+ this.daterangeControlStateService.updateStatus(this.control.control);
6042
+ }));
6043
+ }
6044
+ /**
6045
+ * Listen to manual changes to the input.
6046
+ * @param target - Input element.
6047
+ */
6048
+ onChangeEvent(target) {
6049
+ // Remove 'invalid' error.
6050
+ if (this.control.control.hasError('invalid')) {
6051
+ delete this.control.control.errors.invalid;
6052
+ }
6053
+ // If there is nothing to parse, `ClrDaterangeRequiredValidator` will take care of this.
6054
+ if (!target.value) {
6055
+ this.daterangeService.updateSelectedDaterange(null, true);
6056
+ return;
6057
+ }
6058
+ const daterange = this.daterangeParsingService.parse(target.value, this.separatorText);
6059
+ const invalidDaterange = daterange == null || daterange.from == null || daterange.to == null;
6060
+ // Invalid manual daterange specified.
6061
+ if (invalidDaterange) {
6062
+ this.control.control.setErrors({
6063
+ invalid: target.value,
6064
+ });
6065
+ }
6066
+ // Update selected daterange, but only notify when valid.
6067
+ this.daterangeService.updateSelectedDaterange(daterange, !invalidDaterange);
6068
+ }
6069
+ /**
6070
+ * Listen to focus event.
6071
+ */
6072
+ focusEvent() {
6073
+ this.daterangeControlStateService.focused = true;
6074
+ }
6075
+ /**
6076
+ * Listen to blur event.
6077
+ */
6078
+ blurEvent() {
6079
+ this.daterangeControlStateService.focused = false;
6080
+ }
6081
+ /**
6082
+ * Focus input.
6083
+ */
6084
+ focus() {
6085
+ this.element.nativeElement.focus();
6086
+ }
6087
+ /**
6088
+ * Trigger events to notify form controls, trigger validation and update attributes/properties.
6089
+ */
6090
+ triggerChange() {
6091
+ let daterange = this.daterangeService.selectedDaterange;
6092
+ // When `from` or `to` properties are not set, return null.
6093
+ // This will trigger the `required` validator (if present).
6094
+ if (!this.daterangeService.isValid()) {
6095
+ daterange = null;
6096
+ }
6097
+ // Mark control dirty.
6098
+ this.onTouched(daterange);
6099
+ // Update NgModel.
6100
+ this.onChanged(daterange);
6101
+ // Notify parent.
6102
+ this.valueChange.emit(daterange);
6103
+ // Update attributes/properties.
6104
+ this.updateInput();
6105
+ }
6106
+ /**
6107
+ * Update input with friendly daterange text.
6108
+ */
6109
+ updateInput() {
6110
+ const dateString = this.daterangeParsingService.toLocaleString(this.daterangeService.selectedDaterange, this.separatorText);
6111
+ this.renderer.setProperty(this.element.nativeElement, 'value', dateString);
6112
+ }
6113
+ /**
6114
+ * ControlValueAccessor method. Set value from NgModel.
6115
+ * @param value - Daterange value.
6116
+ */
6117
+ writeValue(value) {
6118
+ this.daterangeService.updateSelectedDaterange(value);
6119
+ }
6120
+ /**
6121
+ * ControlValueAccessor method. Register change event. When value changes.
6122
+ * @param fn - Change event.
6123
+ */
6124
+ registerOnChange(fn) {
6125
+ this.onChanged = fn;
6126
+ }
6127
+ /**
6128
+ * ControlValueAccessor method. Register touch event. When control is dirty.
6129
+ * @param fn - Touch event.
6130
+ */
6131
+ registerOnTouched(fn) {
6132
+ this.onTouched = fn;
6133
+ }
6134
+ /**
6135
+ * ControlValueAccessor method. Set disabled state.
6136
+ * @param disabled - Disabled state.
6137
+ */
6138
+ setDisabledState(disabled) {
6139
+ this.daterangeControlStateService.disabled = disabled;
6140
+ }
6141
+ }
6142
+ ClrDaterangepickerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDaterangepickerDirective, deps: [{ token: i3$1.NgControl, self: true }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DaterangeControlStateService }, { token: ControlIdService }, { token: DaterangeService }, { token: DaterangeParsingService }], target: i0.ɵɵFactoryTarget.Directive });
6143
+ ClrDaterangepickerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: ClrDaterangepickerDirective, selector: "[clrDaterangepicker]", inputs: { min: "min", max: "max", separatorText: "separatorText", placeholder: "placeholder", id: "id", disabled: "disabled" }, outputs: { valueChange: "valueChange" }, host: { listeners: { "change": "onChangeEvent($event.target)", "focus": "focusEvent()", "blur": "blurEvent()" }, properties: { "attr.placeholder": "this.placeholderText", "id": "this.id", "disabled": "this.disabled", "attr.type": "this.inputType", "class.clr-input": "this.inputClass" } }, ngImport: i0 });
6144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDaterangepickerDirective, decorators: [{
6145
+ type: Directive,
6146
+ args: [{
6147
+ selector: '[clrDaterangepicker]',
6148
+ }]
6149
+ }], ctorParameters: function () { return [{ type: i3$1.NgControl, decorators: [{
6150
+ type: Self
6151
+ }] }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DaterangeControlStateService }, { type: ControlIdService }, { type: DaterangeService }, { type: DaterangeParsingService }]; }, propDecorators: { min: [{
6152
+ type: Input
6153
+ }], max: [{
6154
+ type: Input
6155
+ }], separatorText: [{
6156
+ type: Input
6157
+ }], placeholder: [{
6158
+ type: Input
6159
+ }], placeholderText: [{
6160
+ type: HostBinding,
6161
+ args: ['attr.placeholder']
6162
+ }], id: [{
6163
+ type: HostBinding
6164
+ }, {
6165
+ type: Input
6166
+ }], disabled: [{
6167
+ type: HostBinding,
6168
+ args: ['disabled']
6169
+ }, {
6170
+ type: Input
6171
+ }], valueChange: [{
6172
+ type: Output
6173
+ }], inputType: [{
6174
+ type: HostBinding,
6175
+ args: ['attr.type']
6176
+ }], inputClass: [{
6177
+ type: HostBinding,
6178
+ args: ['class.clr-input']
6179
+ }], onChangeEvent: [{
6180
+ type: HostListener,
6181
+ args: ['change', ['$event.target']]
6182
+ }], focusEvent: [{
6183
+ type: HostListener,
6184
+ args: ['focus']
6185
+ }], blurEvent: [{
6186
+ type: HostListener,
6187
+ args: ['blur']
6188
+ }] } });
6189
+
6190
+ ClarityIcons.addIcons(calendarIcon, exclamationCircleIcon, checkCircleIcon, windowCloseIcon);
6191
+ /**
6192
+ * Daterangepicker container.
6193
+ */
6194
+ class ClrDaterangepickerContainerComponent extends ClrAbstractContainer {
6195
+ constructor(clrPopoverEventsService, clrPopoverToggleService, clrCommonStringsService, clrLayout, daterangeControlStateService, openedDatepickersTrackerService, daterangeService, daterangeParsingService) {
6196
+ super(clrLayout, daterangeControlStateService);
6197
+ this.clrPopoverEventsService = clrPopoverEventsService;
6198
+ this.clrPopoverToggleService = clrPopoverToggleService;
6199
+ this.clrCommonStringsService = clrCommonStringsService;
6200
+ this.clrLayout = clrLayout;
6201
+ this.daterangeControlStateService = daterangeControlStateService;
6202
+ this.openedDatepickersTrackerService = openedDatepickersTrackerService;
6203
+ this.daterangeService = daterangeService;
6204
+ this.daterangeParsingService = daterangeParsingService;
6205
+ /**
6206
+ * List of presets.
6207
+ */
6208
+ this.presets = [];
6209
+ /**
6210
+ * Text for the 'from' label.
6211
+ */
6212
+ this.labelFrom = TRANSLATIONS.from;
6213
+ /**
6214
+ * Text for the 'to' label.
6215
+ */
6216
+ this.labelTo = TRANSLATIONS.to;
6217
+ /** CSS classes. */
6218
+ this.classes = 'clr-date-container';
6219
+ /**
6220
+ * Popover open state.
6221
+ */
6222
+ this.open = false;
6223
+ /**
6224
+ * Popover position config.
6225
+ */
6226
+ this.popoverPosition = PopoverPositions['bottom-left'];
6227
+ /** List of subscriptions to later destroy. */
6228
+ this.subscriptions = [];
6229
+ }
6230
+ /**
6231
+ * Set popover position.
6232
+ */
6233
+ set clrPosition(position) {
6234
+ if (position && PopoverPositions[position]) {
6235
+ this.popoverPosition = PopoverPositions[position];
6236
+ }
6237
+ }
6238
+ /**
6239
+ * Date from.
6240
+ * @returns Date from.
6241
+ */
6242
+ get dateFrom() {
6243
+ return this.daterangeService.selectedDaterange?.from;
6244
+ }
6245
+ /**
6246
+ * Date to.
6247
+ * @returns Date to.
6248
+ */
6249
+ get dateTo() {
6250
+ return this.daterangeService.selectedDaterange?.to;
6251
+ }
6252
+ /**
6253
+ * Minimum date that can be selected.
6254
+ * @returns Minimum date that can be selected.
6255
+ */
6256
+ get minDate() {
6257
+ return this.daterangeService.minDate;
6258
+ }
6259
+ /**
6260
+ * Maximum date that can be selected.
6261
+ * @returns Maximum date that can be selected.
6262
+ */
6263
+ get maxDate() {
6264
+ return this.daterangeService.maxDate;
6265
+ }
6266
+ /**
6267
+ * Get friendly daterange text.
6268
+ * @returns Friendly daterange text.
6269
+ */
6270
+ get friendlyDaterange() {
6271
+ return this._friendlyDaterange || this.commonStrings.datepickerToggleChooseDateLabel;
6272
+ }
6273
+ /**
6274
+ * List of common translation keys.
6275
+ */
6276
+ get commonStrings() {
6277
+ return this.clrCommonStringsService.keys;
6278
+ }
6279
+ ngAfterViewInit() {
6280
+ if (this.daterangepickerDirective == null) {
6281
+ throw new Error('`ClrDaterangepickerContainerComponent` requires an child `ClrDaterangepickerDirective`');
6282
+ }
6283
+ this.listenForDaterangeValueChanges();
6284
+ this.listenForOpenedDatepickersTrackerChanges();
6285
+ this.listenForPopoverToggleChanges();
6286
+ }
6287
+ ngOnDestroy() {
6288
+ this.subscriptions.forEach(subscription => subscription.unsubscribe());
6289
+ }
6290
+ /**
6291
+ * Listen for daterange value changes.
6292
+ */
6293
+ listenForDaterangeValueChanges() {
6294
+ this.subscriptions.push(this.daterangeService.valueChange.subscribe((daterange) => {
6295
+ this._friendlyDaterange = this.daterangeParsingService.toLocaleString(daterange, this.daterangepickerDirective.separatorText);
6296
+ }));
6297
+ }
6298
+ /**
6299
+ * Listen for any opened datepickers tracker state changes.
6300
+ */
6301
+ listenForOpenedDatepickersTrackerChanges() {
6302
+ this.subscriptions.push(this.openedDatepickersTrackerService.valueChange.subscribe(hasOpenDatePickers => {
6303
+ // When choosing an date in the DatePicker calender, all popovers are closed. Even our own popover.
6304
+ // Therefor we have to remove the ability to close our own popover.
6305
+ // Simply changing the `outsideClickClose` property after initialization does nothing.
6306
+ // We need to manually remove the listener, change the `outsideClickClose` property and re-attach the click listener.
6307
+ // Steps to reproduce with 2 daterangepickers:
6308
+ // 1. Click on second daterangepicker action icon to open the popover.
6309
+ // 2. Click on one of the datepickers to open calender.
6310
+ // 3. Close datepicker.
6311
+ // 4. Click on first daterangepicker action icon. Error.
6312
+ this.clrPopoverEventsService.removeClickListener();
6313
+ this.clrPopoverEventsService.outsideClickClose = !hasOpenDatePickers;
6314
+ // We need to wait before we attach the click listener.
6315
+ requestAnimationFrame(() => {
6316
+ this.clrPopoverEventsService.addClickListener();
6317
+ });
6318
+ }));
6319
+ }
6320
+ /**
6321
+ * Listen for popover toggle changes.
6322
+ */
6323
+ listenForPopoverToggleChanges() {
6324
+ this.subscriptions.push(this.clrPopoverToggleService.openChange.subscribe(opened => {
6325
+ // Focus first datepicker when popover opens.
6326
+ // Focus back to input when popover is closed.
6327
+ if (opened) {
6328
+ // Wait for the datepicker components to be rendered.
6329
+ requestAnimationFrame(() => {
6330
+ this.datepickerComponents.first.focus();
6331
+ });
6332
+ }
6333
+ else {
6334
+ this.daterangepickerDirective.focus();
6335
+ // When closing popover modal and daterange is not valid, reset model.
6336
+ if (!this.daterangeService.isValid()) {
6337
+ this.daterangeService.updateSelectedDaterange(null);
6338
+ }
6339
+ }
6340
+ }));
6341
+ }
6342
+ /**
6343
+ * Event triggered when date from changed.
6344
+ * @param value - Date from.
6345
+ */
6346
+ onDateFromChange(value) {
6347
+ this.daterangeService.updateSelectedDaterange({
6348
+ from: value,
6349
+ to: this.dateTo,
6350
+ });
6351
+ }
6352
+ /**
6353
+ * Event triggered when date to changed.
6354
+ * @param value - Date to.
6355
+ */
6356
+ onDateToChange(value) {
6357
+ this.daterangeService.updateSelectedDaterange({
6358
+ from: this.dateFrom,
6359
+ to: value,
6360
+ });
6361
+ }
6362
+ /**
6363
+ * Apply selected preset.
6364
+ * @param preset - Selected preset.
6365
+ */
6366
+ applyPreset(preset) {
6367
+ const range = preset.range();
6368
+ this.daterangeService.updateSelectedDaterange(range);
6369
+ // Close popover here, because it's not possible to conditionally
6370
+ // apply `clrPopoverCloseButton` directive on preset button.
6371
+ if (this.daterangeService.isValid()) {
6372
+ this.clrPopoverToggleService.open = false;
6373
+ }
6374
+ }
6375
+ }
6376
+ ClrDaterangepickerContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDaterangepickerContainerComponent, deps: [{ token: i1$1.ClrPopoverEventsService }, { token: i1$1.ClrPopoverToggleService }, { token: i1$1.ClrCommonStringsService }, { token: i1$1.ClrLayout, optional: true }, { token: DaterangeControlStateService }, { token: OpenedDatepickersTrackerService }, { token: DaterangeService }, { token: DaterangeParsingService }], target: i0.ɵɵFactoryTarget.Component });
6377
+ ClrDaterangepickerContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: ClrDaterangepickerContainerComponent, selector: "clr-daterangepicker-container", inputs: { presets: "presets", clrPosition: "clrPosition", labelFrom: "labelFrom", labelTo: "labelTo" }, host: { properties: { "class": "this.classes" } }, providers: [
6378
+ ClrPopoverToggleService,
6379
+ ClrPopoverEventsService,
6380
+ ClrPopoverPositionService,
6381
+ DaterangeControlStateService,
6382
+ DaterangeService,
6383
+ OpenedDatepickersTrackerService,
6384
+ ControlIdService,
6385
+ ], queries: [{ propertyName: "daterangepickerDirective", first: true, predicate: ClrDaterangepickerDirective, descendants: true }], viewQueries: [{ propertyName: "datepickerComponents", predicate: ClrDatepickerComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"label\"></ng-content>\n<label *ngIf=\"!this.labelComponent && this.addLayoutGrid\"></label>\n<div\n class=\"clr-control-container\"\n [class.clr-error]=\"this.isInvalid\"\n [class.clr-col-12]=\"this.addLayoutGrid\"\n [class.clr-col-md-10]=\"this.addLayoutGrid\"\n>\n <div class=\"clr-input-wrapper\" clrPopoverAnchor>\n <div class=\"clr-input-group\" [class.clr-focus]=\"this.focus\">\n <ng-content select=\"[clrDaterangepicker]\"></ng-content>\n <button\n type=\"button\"\n class=\"clr-input-group-icon-action\"\n [disabled]=\"this.disabled\"\n [title]=\"this.friendlyDaterange\"\n [attr.aria-label]=\"this.friendlyDaterange\"\n clrPopoverOpenCloseButton\n >\n <cds-icon status=\"info\" shape=\"calendar\"></cds-icon>\n </button>\n </div>\n <cds-icon\n *ngIf=\"this.isInvalid\"\n class=\"clr-validate-icon\"\n shape=\"exclamation-circle\"\n status=\"danger\"\n aria-hidden=\"true\"\n ></cds-icon>\n <cds-icon\n *ngIf=\"!this.isInvalid\"\n class=\"clr-validate-icon\"\n shape=\"check-circle\"\n status=\"success\"\n aria-hidden=\"true\"\n ></cds-icon>\n </div>\n <ng-content select=\"clr-control-helper\" *ngIf=\"this.showHelper\"></ng-content>\n <ng-content select=\"clr-control-error\" *ngIf=\"this.showInvalid\"></ng-content>\n <ng-content select=\"clr-control-success\" *ngIf=\"this.showValid\"></ng-content>\n\n <div\n class=\"clr-daterangepicker-container-popup datepicker\"\n *clrPopoverContent=\"this.open; at: this.popoverPosition; outsideClickToClose: true; scrollToClose: true\"\n >\n <button\n class=\"btn btn-sm btn-link close\"\n clrPopoverCloseButton\n type=\"button\"\n [attr.aria-label]=\"this.commonStrings.close\"\n >\n <cds-icon shape=\"window-close\" aria-hidden=\"true\" [attr.title]=\"this.commonStrings.close\"></cds-icon>\n <span class=\"clr-sr-only\">{{ this.commonStrings.close }}</span>\n </button>\n <div class=\"clr-daterangepicker-container-popup-content\">\n <form clrForm [clrLayout]=\"'vertical'\">\n <clr-datepicker\n class=\"clr-datepicker\"\n [label]=\"this.labelFrom\"\n [value]=\"this.dateFrom\"\n [minDate]=\"this.minDate\"\n [maxDate]=\"this.maxDate\"\n (valueChange)=\"this.onDateFromChange($event)\"\n >\n </clr-datepicker>\n <clr-datepicker\n class=\"clr-datepicker\"\n [label]=\"this.labelTo\"\n [value]=\"this.dateTo\"\n [minDate]=\"this.minDate\"\n [maxDate]=\"this.maxDate\"\n (valueChange)=\"this.onDateToChange($event)\"\n >\n </clr-datepicker>\n </form>\n <div class=\"clr-daterangepicker-container-popup-content-presets\" *ngIf=\"this.presets?.length > 0\">\n <ng-container *ngFor=\"let preset of this.presets\">\n <button class=\"btn btn-outline btn-sm btn-block\" type=\"button\" (click)=\"this.applyPreset(preset)\">\n {{ preset.text }}\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [".clr-input-wrapper>.clr-input-group{max-width:-moz-fit-content;max-width:fit-content;padding-right:1.5rem}.clr-input-wrapper>.clr-input-group ::ng-deep>.clr-input{width:100%;padding:0 .3rem}.clr-daterangepicker-container-popup.datepicker{padding:0;width:auto;height:auto;display:block}.clr-daterangepicker-container-popup.datepicker .clr-smart-close-button{min-width:1.2rem;margin:0;padding:0;position:absolute;right:0}.clr-daterangepicker-container-popup.datepicker .clr-daterangepicker-container-popup-content{padding:.6rem;display:flex;flex-direction:row}.clr-daterangepicker-container-popup.datepicker .clr-daterangepicker-container-popup-content .clr-form ::ng-deep clr-datepicker:first-of-type ::ng-deep clr-date-container{margin-top:0}.clr-daterangepicker-container-popup.datepicker .clr-daterangepicker-container-popup-content .clr-daterangepicker-container-popup-content-presets{margin-left:.6rem;padding:.3rem}.clr-daterangepicker-container-popup.datepicker .clr-daterangepicker-container-popup-content .clr-daterangepicker-container-popup-content-presets .btn{margin-right:0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i1$1.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i1$1.ClrForm, selector: "[clrForm]", inputs: ["clrLabelSize"] }, { kind: "directive", type: i1$1.ClrLayout, selector: "[clrForm][clrLayout]", inputs: ["clrLayout"] }, { kind: "directive", type: i1$1.ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: i1$1.ÇlrClrPopoverCloseButton, selector: "[clrPopoverCloseButton]", outputs: ["clrPopoverOnCloseChange"] }, { kind: "directive", type: i1$1.ÇlrClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: i1$1.ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "component", type: ClrDatepickerComponent, selector: "clr-datepicker", inputs: ["value", "label", "minDate", "maxDate"], outputs: ["valueChange"] }] });
6386
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDaterangepickerContainerComponent, decorators: [{
6387
+ type: Component,
6388
+ args: [{ selector: 'clr-daterangepicker-container', providers: [
6389
+ ClrPopoverToggleService,
6390
+ ClrPopoverEventsService,
6391
+ ClrPopoverPositionService,
6392
+ DaterangeControlStateService,
6393
+ DaterangeService,
6394
+ OpenedDatepickersTrackerService,
6395
+ ControlIdService,
6396
+ ], template: "<ng-content select=\"label\"></ng-content>\n<label *ngIf=\"!this.labelComponent && this.addLayoutGrid\"></label>\n<div\n class=\"clr-control-container\"\n [class.clr-error]=\"this.isInvalid\"\n [class.clr-col-12]=\"this.addLayoutGrid\"\n [class.clr-col-md-10]=\"this.addLayoutGrid\"\n>\n <div class=\"clr-input-wrapper\" clrPopoverAnchor>\n <div class=\"clr-input-group\" [class.clr-focus]=\"this.focus\">\n <ng-content select=\"[clrDaterangepicker]\"></ng-content>\n <button\n type=\"button\"\n class=\"clr-input-group-icon-action\"\n [disabled]=\"this.disabled\"\n [title]=\"this.friendlyDaterange\"\n [attr.aria-label]=\"this.friendlyDaterange\"\n clrPopoverOpenCloseButton\n >\n <cds-icon status=\"info\" shape=\"calendar\"></cds-icon>\n </button>\n </div>\n <cds-icon\n *ngIf=\"this.isInvalid\"\n class=\"clr-validate-icon\"\n shape=\"exclamation-circle\"\n status=\"danger\"\n aria-hidden=\"true\"\n ></cds-icon>\n <cds-icon\n *ngIf=\"!this.isInvalid\"\n class=\"clr-validate-icon\"\n shape=\"check-circle\"\n status=\"success\"\n aria-hidden=\"true\"\n ></cds-icon>\n </div>\n <ng-content select=\"clr-control-helper\" *ngIf=\"this.showHelper\"></ng-content>\n <ng-content select=\"clr-control-error\" *ngIf=\"this.showInvalid\"></ng-content>\n <ng-content select=\"clr-control-success\" *ngIf=\"this.showValid\"></ng-content>\n\n <div\n class=\"clr-daterangepicker-container-popup datepicker\"\n *clrPopoverContent=\"this.open; at: this.popoverPosition; outsideClickToClose: true; scrollToClose: true\"\n >\n <button\n class=\"btn btn-sm btn-link close\"\n clrPopoverCloseButton\n type=\"button\"\n [attr.aria-label]=\"this.commonStrings.close\"\n >\n <cds-icon shape=\"window-close\" aria-hidden=\"true\" [attr.title]=\"this.commonStrings.close\"></cds-icon>\n <span class=\"clr-sr-only\">{{ this.commonStrings.close }}</span>\n </button>\n <div class=\"clr-daterangepicker-container-popup-content\">\n <form clrForm [clrLayout]=\"'vertical'\">\n <clr-datepicker\n class=\"clr-datepicker\"\n [label]=\"this.labelFrom\"\n [value]=\"this.dateFrom\"\n [minDate]=\"this.minDate\"\n [maxDate]=\"this.maxDate\"\n (valueChange)=\"this.onDateFromChange($event)\"\n >\n </clr-datepicker>\n <clr-datepicker\n class=\"clr-datepicker\"\n [label]=\"this.labelTo\"\n [value]=\"this.dateTo\"\n [minDate]=\"this.minDate\"\n [maxDate]=\"this.maxDate\"\n (valueChange)=\"this.onDateToChange($event)\"\n >\n </clr-datepicker>\n </form>\n <div class=\"clr-daterangepicker-container-popup-content-presets\" *ngIf=\"this.presets?.length > 0\">\n <ng-container *ngFor=\"let preset of this.presets\">\n <button class=\"btn btn-outline btn-sm btn-block\" type=\"button\" (click)=\"this.applyPreset(preset)\">\n {{ preset.text }}\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [".clr-input-wrapper>.clr-input-group{max-width:-moz-fit-content;max-width:fit-content;padding-right:1.5rem}.clr-input-wrapper>.clr-input-group ::ng-deep>.clr-input{width:100%;padding:0 .3rem}.clr-daterangepicker-container-popup.datepicker{padding:0;width:auto;height:auto;display:block}.clr-daterangepicker-container-popup.datepicker .clr-smart-close-button{min-width:1.2rem;margin:0;padding:0;position:absolute;right:0}.clr-daterangepicker-container-popup.datepicker .clr-daterangepicker-container-popup-content{padding:.6rem;display:flex;flex-direction:row}.clr-daterangepicker-container-popup.datepicker .clr-daterangepicker-container-popup-content .clr-form ::ng-deep clr-datepicker:first-of-type ::ng-deep clr-date-container{margin-top:0}.clr-daterangepicker-container-popup.datepicker .clr-daterangepicker-container-popup-content .clr-daterangepicker-container-popup-content-presets{margin-left:.6rem;padding:.3rem}.clr-daterangepicker-container-popup.datepicker .clr-daterangepicker-container-popup-content .clr-daterangepicker-container-popup-content-presets .btn{margin-right:0}\n"] }]
6397
+ }], ctorParameters: function () { return [{ type: i1$1.ClrPopoverEventsService }, { type: i1$1.ClrPopoverToggleService }, { type: i1$1.ClrCommonStringsService }, { type: i1$1.ClrLayout, decorators: [{
6398
+ type: Optional
6399
+ }] }, { type: DaterangeControlStateService }, { type: OpenedDatepickersTrackerService }, { type: DaterangeService }, { type: DaterangeParsingService }]; }, propDecorators: { presets: [{
6400
+ type: Input
6401
+ }], clrPosition: [{
6402
+ type: Input
6403
+ }], labelFrom: [{
6404
+ type: Input
6405
+ }], labelTo: [{
6406
+ type: Input
6407
+ }], datepickerComponents: [{
6408
+ type: ViewChildren,
6409
+ args: [ClrDatepickerComponent]
6410
+ }], daterangepickerDirective: [{
6411
+ type: ContentChild,
6412
+ args: [ClrDaterangepickerDirective]
6413
+ }], classes: [{
6414
+ type: HostBinding,
6415
+ args: ['class']
6416
+ }] } });
6417
+
6418
+ /**
6419
+ * Directive for multiple error messages.
6420
+ * It works the same as Clarity `ClrIfError`, but for customized `ClrDaterangepickerContainerComponent`.
6421
+ * Using Clarity `ClrIfError` requires the container to have service implemented that are not publicly exported.
6422
+ *
6423
+ * @see https://clarity.design/documentation/forms (section "Multiple error messages").
6424
+ *
6425
+ * Altered version from https://github.com/vmware-clarity/ng-clarity/blob/138a6dd95fdc4ffb67b054391c44ce5fa3c44660/projects/angular/src/forms/common/if-control-state/if-error.ts
6426
+ */
6427
+ class ClrIfDaterangeErrorDirective {
6428
+ constructor(template, container, daterangeControlStateService, daterangepickerContainerComponent) {
6429
+ this.template = template;
6430
+ this.container = container;
6431
+ this.daterangeControlStateService = daterangeControlStateService;
6432
+ this.daterangepickerContainerComponent = daterangepickerContainerComponent;
6433
+ /** Flag to remember if content is displayed. */
6434
+ this.displayedContent = false;
6435
+ /** List of subscriptions to later destroy. */
6436
+ this.subscriptions = [];
6437
+ // This directive only works inside `clr-daterangepicker-container`.
6438
+ if (this.daterangeControlStateService == null || this.daterangepickerContainerComponent == null) {
6439
+ throw new Error('`ClrIfDaterangeErrorDirective` can only be used within `ClrDaterangepickerContainerComponent`');
6440
+ }
6441
+ // Listen to status changes to toggle error visibility.
6442
+ this.subscriptions.push(this.daterangeControlStateService.statusChange.subscribe((_status) => {
6443
+ this.handleState();
6444
+ }));
6445
+ }
6446
+ ngOnDestroy() {
6447
+ this.subscriptions.forEach(subscription => subscription.unsubscribe());
6448
+ }
6449
+ /**
6450
+ * Handle error depending on states.
6451
+ */
6452
+ handleState() {
6453
+ if (!this.daterangeControlStateService.invalid) {
6454
+ // If control is not invalid, hide all errors.
6455
+ this.toggleErrorVisibility(false);
6456
+ }
6457
+ else if (this.clrIfDaterangeError) {
6458
+ // Display error only if error input is list of errors.
6459
+ const hasError = this.clrIfDaterangeError in this.daterangeControlStateService.errors;
6460
+ this.toggleErrorVisibility(hasError);
6461
+ }
6462
+ else {
6463
+ // Display error.
6464
+ this.toggleErrorVisibility(true);
6465
+ }
6466
+ }
6467
+ /**
6468
+ * Display/hide error.
6469
+ * @param displayError - Wether to show/hide error.
6470
+ */
6471
+ toggleErrorVisibility(displayError) {
6472
+ if (displayError) {
6473
+ const error = this.daterangeControlStateService.errors[this.clrIfDaterangeError];
6474
+ if (this.displayedContent === false) {
6475
+ this.embeddedViewRef = this.container.createEmbeddedView(this.template, {
6476
+ error,
6477
+ });
6478
+ this.displayedContent = true;
6479
+ }
6480
+ else if (this.embeddedViewRef && this.embeddedViewRef.context) {
6481
+ // If view is already rendered, update the error object to keep it in sync.
6482
+ this.embeddedViewRef.context.error = error;
6483
+ }
6484
+ }
6485
+ else {
6486
+ this.container.clear();
6487
+ this.displayedContent = false;
6488
+ }
6489
+ }
6490
+ }
6491
+ ClrIfDaterangeErrorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrIfDaterangeErrorDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: DaterangeControlStateService, optional: true }, { token: ClrDaterangepickerContainerComponent, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
6492
+ ClrIfDaterangeErrorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: ClrIfDaterangeErrorDirective, selector: "[clrIfDaterangeError]", inputs: { clrIfDaterangeError: "clrIfDaterangeError" }, ngImport: i0 });
6493
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrIfDaterangeErrorDirective, decorators: [{
6494
+ type: Directive,
6495
+ args: [{
6496
+ selector: '[clrIfDaterangeError]',
6497
+ }]
6498
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: DaterangeControlStateService, decorators: [{
6499
+ type: Optional
6500
+ }] }, { type: ClrDaterangepickerContainerComponent, decorators: [{
6501
+ type: Optional
6502
+ }] }]; }, propDecorators: { clrIfDaterangeError: [{
6503
+ type: Input
6504
+ }] } });
6505
+
6506
+ /**
6507
+ * Validator for daterangepicker to validate that 'to' date is not after 'max' value.
6508
+ * Otherwise will throw corresponding `max` validation error.
6509
+ *
6510
+ * Validator is applied to the ClrDaterangepickerDirective with `max` attribute.
6511
+ * Or when set manually with `clrDaterangeMax` attribute.
6512
+ *
6513
+ * Validator is active by default when applied. It can be disabled with: `[clrDaterangeMax]="false"`
6514
+ */
6515
+ class ClrDaterangeMaxValidator {
6516
+ constructor(daterangeService) {
6517
+ this.daterangeService = daterangeService;
6518
+ this._active = true;
6519
+ }
6520
+ /**
6521
+ * Disable validator by setting value to `false`.
6522
+ */
6523
+ set active(active) {
6524
+ this._active = active == null || (active !== false && `${active}` !== 'false');
6525
+ }
6526
+ /**
6527
+ * Validator method. Method that performs synchronous validation against the provided control.
6528
+ * @param control - The control to validate against.
6529
+ * @returns A map of validation errors if validation fails, otherwise null.
6530
+ */
6531
+ validate(control) {
6532
+ if (!this._active) {
6533
+ return null;
6534
+ }
6535
+ if (control.value == null) {
6536
+ return null;
6537
+ }
6538
+ const max = this.daterangeService.maxDate;
6539
+ if (max == null) {
6540
+ return null;
6541
+ }
6542
+ const { to } = control.value;
6543
+ if (to == null) {
6544
+ return null;
6545
+ }
6546
+ if (to.isAfter(max)) {
6547
+ return {
6548
+ [ClrDaterangeMaxValidator.validationErrorName]: {
6549
+ max,
6550
+ actual: to,
6551
+ },
6552
+ };
6553
+ }
6554
+ return null;
6555
+ }
6556
+ }
6557
+ /** Validation error name. */
6558
+ ClrDaterangeMaxValidator.validationErrorName = 'max';
6559
+ ClrDaterangeMaxValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDaterangeMaxValidator, deps: [{ token: DaterangeService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
6560
+ ClrDaterangeMaxValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: ClrDaterangeMaxValidator, selector: "[clrDaterangepicker][max], [clrDaterangeMax]", inputs: { active: ["clrDaterangeMax", "active"] }, providers: [
6561
+ {
6562
+ provide: NG_VALIDATORS,
6563
+ useExisting: forwardRef(() => ClrDaterangeMaxValidator),
6564
+ multi: true,
6565
+ },
6566
+ ], ngImport: i0 });
6567
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDaterangeMaxValidator, decorators: [{
6568
+ type: Directive,
6569
+ args: [{
6570
+ selector: '[clrDaterangepicker][max], [clrDaterangeMax]',
6571
+ providers: [
6572
+ {
6573
+ provide: NG_VALIDATORS,
6574
+ useExisting: forwardRef(() => ClrDaterangeMaxValidator),
6575
+ multi: true,
6576
+ },
6577
+ ],
6578
+ }]
6579
+ }], ctorParameters: function () { return [{ type: DaterangeService, decorators: [{
6580
+ type: Optional
6581
+ }] }]; }, propDecorators: { active: [{
6582
+ type: Input,
6583
+ args: ['clrDaterangeMax']
6584
+ }] } });
6585
+
6586
+ /**
6587
+ * Validator for daterangepicker to validate that 'from' date is not before 'min' value.
6588
+ * Otherwise will throw corresponding `min` validation error.
6589
+ *
6590
+ * Validator is applied to the ClrDaterangepickerDirective with `min` attribute.
6591
+ * Or when set manually with `clrDaterangeMin` attribute.
6592
+ *
6593
+ * Validator is active by default when applied. It can be disabled with: `[clrDaterangeMin]="false"`
6594
+ */
6595
+ class ClrDaterangeMinValidator {
6596
+ constructor(daterangeService) {
6597
+ this.daterangeService = daterangeService;
6598
+ this._active = true;
6599
+ }
6600
+ /**
6601
+ * Disable validator by setting value to `false`.
6602
+ */
6603
+ set active(active) {
6604
+ this._active = active == null || (active !== false && `${active}` !== 'false');
6605
+ }
6606
+ /**
6607
+ * Validator method. Method that performs synchronous validation against the provided control.
6608
+ * @param control - The control to validate against.
6609
+ * @returns A map of validation errors if validation fails, otherwise null.
6610
+ */
6611
+ validate(control) {
6612
+ if (!this._active) {
6613
+ return null;
6614
+ }
6615
+ if (control.value == null) {
6616
+ return null;
6617
+ }
6618
+ const min = this.daterangeService.minDate;
6619
+ if (min == null) {
6620
+ return null;
6621
+ }
6622
+ const { from } = control.value;
6623
+ if (from == null) {
6624
+ return null;
6625
+ }
6626
+ if (from.isBefore(min)) {
6627
+ return {
6628
+ [ClrDaterangeMinValidator.validationErrorName]: {
6629
+ min,
6630
+ actual: from,
6631
+ },
6632
+ };
6633
+ }
6634
+ return null;
6635
+ }
6636
+ }
6637
+ /** Validation error name. */
6638
+ ClrDaterangeMinValidator.validationErrorName = 'min';
6639
+ ClrDaterangeMinValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDaterangeMinValidator, deps: [{ token: DaterangeService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
6640
+ ClrDaterangeMinValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: ClrDaterangeMinValidator, selector: "[clrDaterangepicker][min], [clrDaterangeMin]", inputs: { active: ["clrDaterangeMin", "active"] }, providers: [
6641
+ {
6642
+ provide: NG_VALIDATORS,
6643
+ useExisting: forwardRef(() => ClrDaterangeMinValidator),
6644
+ multi: true,
6645
+ },
6646
+ ], ngImport: i0 });
6647
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDaterangeMinValidator, decorators: [{
6648
+ type: Directive,
6649
+ args: [{
6650
+ selector: '[clrDaterangepicker][min], [clrDaterangeMin]',
6651
+ providers: [
6652
+ {
6653
+ provide: NG_VALIDATORS,
6654
+ useExisting: forwardRef(() => ClrDaterangeMinValidator),
6655
+ multi: true,
6656
+ },
6657
+ ],
6658
+ }]
6659
+ }], ctorParameters: function () { return [{ type: DaterangeService, decorators: [{
6660
+ type: Optional
6661
+ }] }]; }, propDecorators: { active: [{
6662
+ type: Input,
6663
+ args: ['clrDaterangeMin']
6664
+ }] } });
6665
+
6666
+ /**
6667
+ * Validator for daterangepicker to validate that 'from' date is before 'to' date.
6668
+ * Otherwise will throw `fromIsAfterTo` validation error.
6669
+ *
6670
+ * This validator is applied automatically on ClrDaterangepickerDirective.
6671
+ * Or when set manually with `clrDaterangeOrder` attribute.
6672
+ *
6673
+ * Validator is active by default when applied. It can be disabled with: `[clrDaterangeOrder]="false"`
6674
+ */
6675
+ class ClrDaterangeOrderValidator {
6676
+ constructor() {
6677
+ this._active = true;
6678
+ }
6679
+ /**
6680
+ * Disable validator by setting value to `false`.
6681
+ */
6682
+ set active(active) {
6683
+ this._active = active == null || (active !== false && `${active}` !== 'false');
6684
+ }
6685
+ /**
6686
+ * Validator method. Method that performs synchronous validation against the provided control.
6687
+ * @param control - The control to validate against.
6688
+ * @returns A map of validation errors if validation fails, otherwise null.
6689
+ */
6690
+ validate(control) {
6691
+ if (!this._active) {
6692
+ return null;
6693
+ }
6694
+ // Validation with `null` value is done with the regular required validator.
6695
+ if (control.value == null) {
6696
+ return null;
6697
+ }
6698
+ const { from, to } = control.value;
6699
+ // Validation with `null` values from 'from' & 'to' is done with the ClrDaterangeRequiredValidator.
6700
+ if (from == null || to == null) {
6701
+ return null;
6702
+ }
6703
+ if (from.isAfter(to)) {
6704
+ return {
6705
+ [ClrDaterangeOrderValidator.validationErrorName]: control.value,
6706
+ };
6707
+ }
6708
+ return null;
6709
+ }
6710
+ }
6711
+ /** Validation error name. */
6712
+ ClrDaterangeOrderValidator.validationErrorName = 'fromIsAfterTo';
6713
+ ClrDaterangeOrderValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDaterangeOrderValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6714
+ ClrDaterangeOrderValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: ClrDaterangeOrderValidator, selector: "[clrDaterangepicker], [clrDaterangeOrder]", inputs: { active: ["clrDaterangeOrder", "active"] }, providers: [
6715
+ {
6716
+ provide: NG_VALIDATORS,
6717
+ useExisting: forwardRef(() => ClrDaterangeOrderValidator),
6718
+ multi: true,
6719
+ },
6720
+ ], ngImport: i0 });
6721
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDaterangeOrderValidator, decorators: [{
6722
+ type: Directive,
6723
+ args: [{
6724
+ selector: '[clrDaterangepicker], [clrDaterangeOrder]',
6725
+ providers: [
6726
+ {
6727
+ provide: NG_VALIDATORS,
6728
+ useExisting: forwardRef(() => ClrDaterangeOrderValidator),
6729
+ multi: true,
6730
+ },
6731
+ ],
6732
+ }]
6733
+ }], propDecorators: { active: [{
6734
+ type: Input,
6735
+ args: ['clrDaterangeOrder']
6736
+ }] } });
6737
+
6738
+ /**
6739
+ * Validator for daterangepicker to validate that 'from' *AND* 'to' date are not `null`.
6740
+ * Will throw `required` validation error.
6741
+ *
6742
+ * Validator is applied to the ClrDaterangepickerDirective with `required` attribute.
6743
+ * Or when set manually with `clrDaterangeRequired` attribute.
6744
+ *
6745
+ * Validator is active by default when applied. It can be disabled with: `[clrDaterangeRequired]="false"`
6746
+ */
6747
+ class ClrDaterangeRequiredValidator {
6748
+ constructor() {
6749
+ this._active = true;
6750
+ }
6751
+ /**
6752
+ * Disable validator by setting value to `false`.
6753
+ */
6754
+ set active(active) {
6755
+ this._active = active == null || (active !== false && `${active}` !== 'false');
6756
+ }
6757
+ /**
6758
+ * Validator method. Method that performs synchronous validation against the provided control.
6759
+ * @param control - The control to validate against.
6760
+ * @returns A map of validation errors if validation fails, otherwise null.
6761
+ */
6762
+ validate(control) {
6763
+ if (!this._active) {
6764
+ return null;
6765
+ }
6766
+ // Validation with `null` value is done with the regular required validator.
6767
+ if (control.value == null) {
6768
+ return null;
6769
+ }
6770
+ const { from, to } = control.value;
6771
+ if (from == null || to == null) {
6772
+ return {
6773
+ [ClrDaterangeRequiredValidator.validationErrorName]: control.value,
6774
+ };
6775
+ }
6776
+ return null;
6777
+ }
6778
+ }
6779
+ /** Validation error name. */
6780
+ ClrDaterangeRequiredValidator.validationErrorName = 'required';
6781
+ ClrDaterangeRequiredValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDaterangeRequiredValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6782
+ ClrDaterangeRequiredValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: ClrDaterangeRequiredValidator, selector: "[clrDaterangepicker][required], [clrDaterangeRequired]", inputs: { active: ["clrDaterangeRequired", "active"] }, providers: [
6783
+ {
6784
+ provide: NG_VALIDATORS,
6785
+ useExisting: forwardRef(() => ClrDaterangeRequiredValidator),
6786
+ multi: true,
6787
+ },
6788
+ ], ngImport: i0 });
6789
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDaterangeRequiredValidator, decorators: [{
6790
+ type: Directive,
6791
+ args: [{
6792
+ selector: '[clrDaterangepicker][required], [clrDaterangeRequired]',
6793
+ providers: [
6794
+ {
6795
+ provide: NG_VALIDATORS,
6796
+ useExisting: forwardRef(() => ClrDaterangeRequiredValidator),
6797
+ multi: true,
6798
+ },
6799
+ ],
6800
+ }]
6801
+ }], propDecorators: { active: [{
6802
+ type: Input,
6803
+ args: ['clrDaterangeRequired']
6804
+ }] } });
6805
+
6806
+ class ClrDaterangepickerModule {
6807
+ }
6808
+ ClrDaterangepickerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDaterangepickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
6809
+ ClrDaterangepickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.1", ngImport: i0, type: ClrDaterangepickerModule, declarations: [ClrDatepickerComponent,
6810
+ ClrDaterangeMaxValidator,
6811
+ ClrDaterangeMinValidator,
6812
+ ClrDaterangeOrderValidator,
6813
+ ClrDaterangepickerContainerComponent,
6814
+ ClrDaterangepickerDirective,
6815
+ ClrDaterangeRequiredValidator,
6816
+ ClrIfDaterangeErrorDirective], imports: [CommonModule, FormsModule, ClarityModule, ClrDatepickerModule, ClrIconModule], exports: [ClrDaterangeMaxValidator,
6817
+ ClrDaterangeMinValidator,
6818
+ ClrDaterangeOrderValidator,
6819
+ ClrDaterangepickerContainerComponent,
6820
+ ClrDaterangepickerDirective,
6821
+ ClrDaterangeRequiredValidator,
6822
+ ClrIfDaterangeErrorDirective] });
6823
+ ClrDaterangepickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDaterangepickerModule, imports: [CommonModule, FormsModule, ClarityModule, ClrDatepickerModule, ClrIconModule] });
6824
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrDaterangepickerModule, decorators: [{
6825
+ type: NgModule,
6826
+ args: [{
6827
+ imports: [CommonModule, FormsModule, ClarityModule, ClrDatepickerModule, ClrIconModule],
6828
+ declarations: [
6829
+ ClrDatepickerComponent,
6830
+ ClrDaterangeMaxValidator,
6831
+ ClrDaterangeMinValidator,
6832
+ ClrDaterangeOrderValidator,
6833
+ ClrDaterangepickerContainerComponent,
6834
+ ClrDaterangepickerDirective,
6835
+ ClrDaterangeRequiredValidator,
6836
+ ClrIfDaterangeErrorDirective,
6837
+ ],
6838
+ entryComponents: [ClrDatepickerComponent],
6839
+ exports: [
6840
+ ClrDaterangeMaxValidator,
6841
+ ClrDaterangeMinValidator,
6842
+ ClrDaterangeOrderValidator,
6843
+ ClrDaterangepickerContainerComponent,
6844
+ ClrDaterangepickerDirective,
6845
+ ClrDaterangeRequiredValidator,
6846
+ ClrIfDaterangeErrorDirective,
6847
+ ],
6848
+ }]
6849
+ }] });
6850
+
6851
+ /*
6852
+ * Copyright (c) 2018-2023 Porsche Informatik. All Rights Reserved.
6853
+ * This software is released under MIT license.
6854
+ * The full license information can be found in LICENSE in the root directory of this project.
6855
+ */
6856
+ class ClrAddonsModule {
6857
+ }
6858
+ ClrAddonsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrAddonsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
6859
+ ClrAddonsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.1", ngImport: i0, type: ClrAddonsModule, exports: [ClrViewEditSectionModule,
6860
+ ClrPagerModule,
6861
+ ClrDotPagerModule,
6862
+ ClrPagedSearchResultListModule,
6863
+ ClrCollapseExpandSectionModule,
6864
+ ClrBreadcrumbModule,
6865
+ ClrMainNavGroupModule,
6866
+ ClrContentPanelModule,
6867
+ ClrNotificationModule,
6868
+ ClrFlowBarModule,
6869
+ ClrBackButtonModule,
6870
+ ClrNumericFieldModule,
6871
+ ClrSearchFieldModule,
6872
+ ClrTreetableModule,
6873
+ ClrProgressSpinnerModule,
6874
+ ClrDateTimeModule,
6875
+ ClrQuickListModule,
6876
+ ClrLetterAvatarModule,
6877
+ ClrMultilingualModule,
6878
+ ClrGenericQuickListModule,
6879
+ ClrDataListValidatorModule,
6880
+ ClrHistoryModule,
6881
+ ClrAutocompleteOffModule,
6882
+ ClrBrandAvatarModule,
6883
+ ClrLocationBarModule,
6884
+ ClrFormModule,
6885
+ ClrDropdownOverflowModule,
6886
+ ClrDatagridStatePersistenceModule,
6887
+ ClrEnumFilterModule,
6888
+ ClrDateFilterModule,
6889
+ ClrDaterangepickerModule] });
6890
+ ClrAddonsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrAddonsModule, imports: [ClrViewEditSectionModule,
6891
+ ClrPagerModule,
6892
+ ClrDotPagerModule,
6893
+ ClrPagedSearchResultListModule,
6894
+ ClrCollapseExpandSectionModule,
6895
+ ClrBreadcrumbModule,
6896
+ ClrMainNavGroupModule,
6897
+ ClrContentPanelModule,
6898
+ ClrNotificationModule,
6899
+ ClrFlowBarModule,
6900
+ ClrBackButtonModule,
6901
+ ClrNumericFieldModule,
6902
+ ClrSearchFieldModule,
6903
+ ClrTreetableModule,
6904
+ ClrProgressSpinnerModule,
6905
+ ClrDateTimeModule,
6906
+ ClrQuickListModule,
6907
+ ClrLetterAvatarModule,
6908
+ ClrMultilingualModule,
6909
+ ClrGenericQuickListModule,
6910
+ ClrDataListValidatorModule,
6911
+ ClrHistoryModule,
6912
+ ClrAutocompleteOffModule,
6913
+ ClrBrandAvatarModule,
6914
+ ClrLocationBarModule,
6915
+ ClrFormModule,
6916
+ ClrDropdownOverflowModule,
6917
+ ClrDatagridStatePersistenceModule,
6918
+ ClrEnumFilterModule,
6919
+ ClrDateFilterModule,
6920
+ ClrDaterangepickerModule] });
6921
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrAddonsModule, decorators: [{
6922
+ type: NgModule,
6923
+ args: [{
6924
+ exports: [
6925
+ ClrViewEditSectionModule,
6926
+ ClrPagerModule,
6927
+ ClrDotPagerModule,
6928
+ ClrPagedSearchResultListModule,
6929
+ ClrCollapseExpandSectionModule,
6930
+ ClrBreadcrumbModule,
6931
+ ClrMainNavGroupModule,
6932
+ ClrContentPanelModule,
6933
+ ClrNotificationModule,
6934
+ ClrFlowBarModule,
6935
+ ClrBackButtonModule,
6936
+ ClrNumericFieldModule,
6937
+ ClrSearchFieldModule,
6938
+ ClrTreetableModule,
6939
+ ClrProgressSpinnerModule,
6940
+ ClrDateTimeModule,
6941
+ ClrQuickListModule,
6942
+ ClrLetterAvatarModule,
6943
+ ClrMultilingualModule,
6944
+ ClrGenericQuickListModule,
6945
+ ClrDataListValidatorModule,
6946
+ ClrHistoryModule,
6947
+ ClrAutocompleteOffModule,
6948
+ ClrBrandAvatarModule,
6949
+ ClrLocationBarModule,
6950
+ ClrFormModule,
6951
+ ClrDropdownOverflowModule,
6952
+ ClrDatagridStatePersistenceModule,
6953
+ ClrEnumFilterModule,
6954
+ ClrDateFilterModule,
6955
+ ClrDaterangepickerModule,
6956
+ ],
6957
+ }]
6958
+ }] });
6959
+
6960
+ /*
6961
+ * Copyright (c) 2018-2019 Porsche Informatik. All Rights Reserved.
6962
+ * This software is released under MIT license.
6963
+ * The full license information can be found in LICENSE in the root directory of this project.
6964
+ */
6965
+
6966
+ /*
6967
+ * Copyright (c) 2018-2019 Porsche Informatik. All Rights Reserved.
6968
+ * This software is released under MIT license.
6969
+ * The full license information can be found in LICENSE in the root directory of this project.
6970
+ */
6971
+
6972
+ /*
6973
+ * Copyright (c) 2018-2019 Porsche Informatik. All Rights Reserved.
6974
+ * This software is released under MIT license.
6975
+ * The full license information can be found in LICENSE in the root directory of this project.
6976
+ */
6977
+
6978
+ /*
6979
+ * Copyright (c) 2018-2019 Porsche Informatik. All Rights Reserved.
6980
+ * This software is released under MIT license.
6981
+ * The full license information can be found in LICENSE in the root directory of this project.
6982
+ */
6983
+
6984
+ /*
6985
+ * Copyright (c) 2018-2019 Porsche Informatik. All Rights Reserved.
6986
+ * This software is released under MIT license.
5306
6987
  * The full license information can be found in LICENSE in the root directory of this project.
5307
6988
  */
5308
6989
 
@@ -5912,7 +7593,7 @@ const ClrAddonsIconShapes = {
5912
7593
  */
5913
7594
 
5914
7595
  /*
5915
- * Copyright (c) 2018-2022 Porsche Informatik. All Rights Reserved.
7596
+ * Copyright (c) 2018-2023 Porsche Informatik. All Rights Reserved.
5916
7597
  * This software is released under MIT license.
5917
7598
  * The full license information can be found in LICENSE in the root directory of this project.
5918
7599
  */
@@ -5921,5 +7602,5 @@ const ClrAddonsIconShapes = {
5921
7602
  * Generated bundle index. Do not edit.
5922
7603
  */
5923
7604
 
5924
- export { ACShape, AcceptedBrands, AccessoriesShape, AccessoryPartsShape, AudiBrandShape, AwardWinnerPremiumShape, BlocksGroupForwardShape, BrochureShape, BundleForwardShape, BusinessCustomersCommercialShape, BusinessCustomersPrivateShape, BusinessPartnerWithCar, CLR_BLANK_OPTION, CONTENT_PROVIDER, CalculatorForwardShape, CaliforniaServiceShape, CaliforniaSpecialistShape, CampaignOutdatedShape, CampaignShape, CarPickupServiceShape, CarWashShape, CertifiedRepairShape, CertifiedRetailerShape, ClrActiveNotification, ClrAddonsIconShapes, ClrAddonsLabel, ClrAddonsModule, ClrAutocompleteOff, ClrAutocompleteOffModule, ClrBackButton, ClrBackButtonModule, ClrBrandAvatar, ClrBrandAvatarModule, ClrBreadcrumb, ClrBreadcrumbModule, ClrBreadcrumbService, ClrCollapseExpandSection, ClrCollapseExpandSectionModule, ClrContentPanel, ClrContentPanelContainer, ClrContentPanelContainerContent, ClrContentPanelContainerFooter, ClrContentPanelModule, ClrContentRef, ClrDataListPredefinedValidatorDirective, ClrDataListValidatorModule, ClrDataListValidators, ClrDatagridStatePersistenceModule, ClrDateFilterComponent, ClrDateFilterModule, ClrDateTimeContainer, ClrDateTimeModule, ClrDotPager, ClrDotPagerModule, ClrDropdownOverflowDirective, ClrDropdownOverflowModule, ClrEnumFilterComponent, ClrEnumFilterModule, ClrFlowBar, ClrFlowBarModule, ClrFormModule, ClrGenericQuickList, ClrGenericQuickListModule, ClrHistory, ClrHistoryModule, ClrHistoryPinned, ClrHistoryService, ClrLetterAvatar, ClrLetterAvatarModule, ClrLocationBarModule, ClrMainNavGroup, ClrMainNavGroupItem, ClrMainNavGroupModule, ClrMaxNumeric, ClrMinNumeric, ClrMultilingualInput, ClrMultilingualInputValidators, ClrMultilingualModule, ClrMultilingualSelector, ClrMultilingualTextarea, ClrNotification, ClrNotificationModule, ClrNotificationRef, ClrNotificationService, ClrNumericField, ClrNumericFieldModule, ClrNumericFieldValidators, ClrPagedSearchResultList, ClrPagedSearchResultListModule, ClrPager, ClrPagerModule, ClrProgressSpinnerComponent, ClrProgressSpinnerModule, ClrQuickList, ClrQuickListModule, ClrRequiredAllMultilang, ClrRequiredOneMultilang, ClrSearchField, ClrSearchFieldModule, ClrTimeInput, ClrTreetable, ClrTreetableActionOverflow, ClrTreetableCell, ClrTreetableColumn, ClrTreetableModule, ClrTreetablePlaceholder, ClrTreetableRow, ClrViewEditSection, ClrViewEditSectionModule, ColumnHiddenStatePersistenceDirective, ConfiguratorCommercialShape, ConfiguratorPrivateShape, ConsumptionShape, ContactDealerShape, CupraBrandShape, CustomersCenterShape, DWABrandShape, DatagridFieldDirective, DieselShape, DollarBillForwardShape, DollarBillPartialShape, DriversAssistanceShape, EfficiencyShape, ElectricCarsServiceShape, ElectricCarsShape, ElectricityShape, EmissionShape, EnergyShape, EngineShape, ExpressServiceShape, ExteriorShape, ExternalPartForwardShape, FindACarShape, FleetServiceCommercialShape, FleetServicePrivateShape, GasCarsServiceShape, GasShape, HybridShape, InternalPartForwardShape, ItemsForwardShape, ItemsRecieveShape, LoadingVolumeShape, LocateShape, LocationBarComponent, LocationBarContentProvider, LocationBarNode, NewCarCommercialShape, NewCarPrivateShape, NewCarUtilityVehicleShape, NightServiceShape, NodeId, OffersShape, OnCallDutyShape, OpenSatShape, PaintMaterialForwardShape, PaintMaterialShape, PaintShopShape, PartNonStockForwardShape, PartsForwardShape, PartsNonStockShape, PartsShape, PayloadShape, PerformanceShape, PetrolShape, PlusServiceShape, PorscheBrandShape, PowerShape, PowerTrainShape, PriceTypeSwitchShape, QualifiedWorkshopShape, RoadsideAssistanceShape, RouteShape, SeatAirShape, SeatBrandShape, SeatShape, ServiceBellShape, ServiceShape, SizeShape, SkodaBrandShape, StatePersistenceKeyDirective, StockLocatorCommercialShape, StockLocatorPrivateShape, TaskAndAppointment, TaxiDealerShape, TextForward, TopcardShape, TouaregServiceShape, TransmissionAutomaticShape, TransmissionManualShape, TreetableCellRenderer, TreetableHeaderRenderer, TreetableMainRenderer, TreetableRowRenderer, UsedCarCommercialShape, UsedCarPrivateShape, VWBrandShape, VWNBrandShape, VWShape, VehicleConversionShape, View360Shape, VirtualRealityShape, WheelToWheelShape, WindscreenWashShape, WrenchForward, clrIconSVG, escapeHtml, escapeRegex };
7605
+ export { ACShape, AcceptedBrands, AccessoriesShape, AccessoryPartsShape, AudiBrandShape, AwardWinnerPremiumShape, BIG_ENDIAN, BlocksGroupForwardShape, BrochureShape, BundleForwardShape, BusinessCustomersCommercialShape, BusinessCustomersPrivateShape, BusinessPartnerWithCar, CLR_BLANK_OPTION, CONTENT_PROVIDER, CalculatorForwardShape, CaliforniaServiceShape, CaliforniaSpecialistShape, CampaignOutdatedShape, CampaignShape, CarPickupServiceShape, CarWashShape, CertifiedRepairShape, CertifiedRetailerShape, ClrActiveNotification, ClrAddonsIconShapes, ClrAddonsLabel, ClrAddonsModule, ClrAutocompleteOff, ClrAutocompleteOffModule, ClrBackButton, ClrBackButtonModule, ClrBrandAvatar, ClrBrandAvatarModule, ClrBreadcrumb, ClrBreadcrumbModule, ClrBreadcrumbService, ClrCollapseExpandSection, ClrCollapseExpandSectionModule, ClrContentPanel, ClrContentPanelContainer, ClrContentPanelContainerContent, ClrContentPanelContainerFooter, ClrContentPanelModule, ClrContentRef, ClrDataListPredefinedValidatorDirective, ClrDataListValidatorModule, ClrDataListValidators, ClrDatagridStatePersistenceModule, ClrDateFilterComponent, ClrDateFilterModule, ClrDateTimeContainer, ClrDateTimeModule, ClrDaterangeMaxValidator, ClrDaterangeMinValidator, ClrDaterangeOrderValidator, ClrDaterangeRequiredValidator, ClrDaterangepickerContainerComponent, ClrDaterangepickerDirective, ClrDaterangepickerModule, ClrDotPager, ClrDotPagerModule, ClrDropdownOverflowDirective, ClrDropdownOverflowModule, ClrEnumFilterComponent, ClrEnumFilterModule, ClrFlowBar, ClrFlowBarModule, ClrFormModule, ClrGenericQuickList, ClrGenericQuickListModule, ClrHistory, ClrHistoryModule, ClrHistoryPinned, ClrHistoryService, ClrIfDaterangeErrorDirective, ClrLetterAvatar, ClrLetterAvatarModule, ClrLocationBarModule, ClrMainNavGroup, ClrMainNavGroupItem, ClrMainNavGroupModule, ClrMaxNumeric, ClrMinNumeric, ClrMultilingualInput, ClrMultilingualInputValidators, ClrMultilingualModule, ClrMultilingualSelector, ClrMultilingualTextarea, ClrNotification, ClrNotificationModule, ClrNotificationRef, ClrNotificationService, ClrNumericField, ClrNumericFieldModule, ClrNumericFieldValidators, ClrPagedSearchResultList, ClrPagedSearchResultListModule, ClrPager, ClrPagerModule, ClrProgressSpinnerComponent, ClrProgressSpinnerModule, ClrQuickList, ClrQuickListModule, ClrRequiredAllMultilang, ClrRequiredOneMultilang, ClrSearchField, ClrSearchFieldModule, ClrTimeInput, ClrTreetable, ClrTreetableActionOverflow, ClrTreetableCell, ClrTreetableColumn, ClrTreetableModule, ClrTreetablePlaceholder, ClrTreetableRow, ClrViewEditSection, ClrViewEditSectionModule, ColumnHiddenStatePersistenceDirective, ConfiguratorCommercialShape, ConfiguratorPrivateShape, ConsumptionShape, ContactDealerShape, CupraBrandShape, CustomersCenterShape, DATE, DELIMITER_REGEX, DWABrandShape, DatagridFieldDirective, DayModel, DieselShape, DollarBillForwardShape, DollarBillPartialShape, DriversAssistanceShape, EfficiencyShape, ElectricCarsServiceShape, ElectricCarsShape, ElectricityShape, EmissionShape, EnergyShape, EngineShape, ExpressServiceShape, ExteriorShape, ExternalPartForwardShape, FindACarShape, FleetServiceCommercialShape, FleetServicePrivateShape, GasCarsServiceShape, GasShape, HybridShape, InternalPartForwardShape, ItemsForwardShape, ItemsRecieveShape, LITTLE_ENDIAN, LITTLE_ENDIAN_REGEX, LoadingVolumeShape, LocateShape, LocationBarComponent, LocationBarContentProvider, LocationBarNode, MIDDLE_ENDIAN, MIDDLE_ENDIAN_REGEX, MONTH, NewCarCommercialShape, NewCarPrivateShape, NewCarUtilityVehicleShape, NightServiceShape, NodeId, OffersShape, OnCallDutyShape, OpenSatShape, PaintMaterialForwardShape, PaintMaterialShape, PaintShopShape, PartNonStockForwardShape, PartsForwardShape, PartsNonStockShape, PartsShape, PayloadShape, PerformanceShape, PetrolShape, PlusServiceShape, PopoverPositions, PorscheBrandShape, PowerShape, PowerTrainShape, PriceTypeSwitchShape, QualifiedWorkshopShape, RoadsideAssistanceShape, RouteShape, SEPARATOR_TEXT_DEFAULT, SeatAirShape, SeatBrandShape, SeatShape, ServiceBellShape, ServiceShape, SizeShape, SkodaBrandShape, StatePersistenceKeyDirective, StockLocatorCommercialShape, StockLocatorPrivateShape, TRANSLATIONS, TaskAndAppointment, TaxiDealerShape, TextForward, TopcardShape, TouaregServiceShape, TransmissionAutomaticShape, TransmissionManualShape, TreetableCellRenderer, TreetableHeaderRenderer, TreetableMainRenderer, TreetableRowRenderer, USER_INPUT_REGEX, UsedCarCommercialShape, UsedCarPrivateShape, VWBrandShape, VWNBrandShape, VWShape, VehicleConversionShape, View360Shape, VirtualRealityShape, WheelToWheelShape, WindscreenWashShape, WrenchForward, YEAR, clrIconSVG, escapeHtml, escapeRegex };
5925
7606
  //# sourceMappingURL=clr-addons.mjs.map