@porscheinformatik/clr-addons 18.0.4 → 18.1.1

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 (53) hide show
  1. package/action-panel/action-panel-container-content.d.ts +5 -0
  2. package/action-panel/action-panel-container-footer.d.ts +5 -0
  3. package/action-panel/action-panel-container.d.ts +5 -0
  4. package/action-panel/action-panel.d.ts +14 -0
  5. package/action-panel/action-panel.module.d.ts +13 -0
  6. package/action-panel/index.d.ts +5 -0
  7. package/clr-addons.module.d.ts +2 -1
  8. package/datagrid/date-filter/date-filter.component.d.ts +8 -1
  9. package/datagrid/date-filter/date-filter.module.d.ts +3 -1
  10. package/daterangepicker/daterangepicker.module.d.ts +5 -4
  11. package/daterangepicker/directives/datepicker/datepicker.component.d.ts +2 -1
  12. package/daterangepicker/directives/daterangepicker/daterangepicker.directive.d.ts +6 -0
  13. package/daterangepicker/directives/daterangepicker-container/daterangepicker-container.component.d.ts +15 -2
  14. package/daterangepicker/directives/timepicker/timepicker.component.d.ts +33 -0
  15. package/daterangepicker/index.d.ts +3 -0
  16. package/daterangepicker/interfaces/timerange-preset.interface.d.ts +8 -0
  17. package/daterangepicker/interfaces/timerange.interface.d.ts +13 -0
  18. package/daterangepicker/models/time.model.d.ts +65 -0
  19. package/daterangepicker/providers/daterange-parsing.service.d.ts +3 -0
  20. package/daterangepicker/providers/daterange.service.d.ts +10 -1
  21. package/daterangepicker/validators/daterange-order.validator.d.ts +2 -1
  22. package/esm2022/action-panel/action-panel-container-content.mjs +22 -0
  23. package/esm2022/action-panel/action-panel-container-footer.mjs +22 -0
  24. package/esm2022/action-panel/action-panel-container.mjs +35 -0
  25. package/esm2022/action-panel/action-panel.mjs +80 -0
  26. package/esm2022/action-panel/action-panel.module.mjs +36 -0
  27. package/esm2022/action-panel/index.mjs +6 -0
  28. package/esm2022/clr-addons.module.mjs +7 -3
  29. package/esm2022/datagrid/date-filter/date-filter.component.mjs +45 -4
  30. package/esm2022/datagrid/date-filter/date-filter.module.mjs +6 -4
  31. package/esm2022/daterangepicker/daterangepicker.module.mjs +5 -2
  32. package/esm2022/daterangepicker/directives/datepicker/datepicker.component.mjs +5 -2
  33. package/esm2022/daterangepicker/directives/daterangepicker/daterangepicker.directive.mjs +76 -2
  34. package/esm2022/daterangepicker/directives/daterangepicker-container/daterangepicker-container.component.mjs +84 -14
  35. package/esm2022/daterangepicker/directives/timepicker/timepicker.component.mjs +54 -0
  36. package/esm2022/daterangepicker/index.mjs +4 -1
  37. package/esm2022/daterangepicker/interfaces/timerange-preset.interface.mjs +2 -0
  38. package/esm2022/daterangepicker/interfaces/timerange.interface.mjs +2 -0
  39. package/esm2022/daterangepicker/models/time.model.mjs +82 -0
  40. package/esm2022/daterangepicker/providers/daterange-parsing.service.mjs +21 -1
  41. package/esm2022/daterangepicker/providers/daterange.service.mjs +17 -5
  42. package/esm2022/daterangepicker/validators/daterange-order.validator.mjs +9 -2
  43. package/esm2022/history/history.mjs +3 -3
  44. package/esm2022/index.mjs +2 -1
  45. package/esm2022/main-nav-group/main-nav-group.mjs +2 -3
  46. package/fesm2022/clr-addons.mjs +564 -33
  47. package/fesm2022/clr-addons.mjs.map +1 -1
  48. package/index.d.ts +1 -0
  49. package/package.json +4 -4
  50. package/styles/clr-addons-phs.css +74 -0
  51. package/styles/clr-addons-phs.css.map +1 -1
  52. package/styles/clr-addons-phs.min.css +1 -1
  53. package/styles/clr-addons-phs.min.css.map +1 -1
@@ -1232,7 +1232,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
1232
1232
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }] });
1233
1233
 
1234
1234
  /*
1235
- * Copyright (c) 2018-2023 Porsche Informatik. All Rights Reserved.
1235
+ * Copyright (c) 2018-2024 Porsche Informatik. All Rights Reserved.
1236
1236
  * This software is released under MIT license.
1237
1237
  * The full license information can be found in LICENSE in the root directory of this project.
1238
1238
  */
@@ -1288,7 +1288,6 @@ class ClrMainNavGroup {
1288
1288
  closeMenus(selector) {
1289
1289
  selector = '.main-container:not(.open-hamburger-menu) ' + selector;
1290
1290
  const hiddenInputs = document.querySelectorAll(selector);
1291
- // tslint:disable-next-line:prefer-for-of
1292
1291
  for (let i = 0; i < hiddenInputs.length; i++) {
1293
1292
  hiddenInputs[i].checked = false;
1294
1293
  }
@@ -4527,11 +4526,11 @@ class ClrHistory {
4527
4526
  this.historyService.setHistoryPinned(this.username, !this.pinActivated);
4528
4527
  }
4529
4528
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrHistory, deps: [{ token: ClrHistoryService }, { token: HISTORY_PROVIDER, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
4530
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", 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 <cds-icon shape=\"history\" size=\"24\"></cds-icon>\n <cds-icon shape=\"angle\" direction=\"down\" size=\"12\"></cds-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.CdsIconCustomTag, selector: "cds-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", "clrMarginBottom"] }] }); }
4529
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", 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-outline-primary\" clrDropdownTrigger>\n <cds-icon shape=\"history\" size=\"24\"></cds-icon>\n <cds-icon shape=\"angle\" direction=\"down\" size=\"12\"></cds-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.CdsIconCustomTag, selector: "cds-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", "clrMarginBottom"] }] }); }
4531
4530
  }
4532
4531
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrHistory, decorators: [{
4533
4532
  type: Component,
4534
- args: [{ selector: 'clr-history', template: "<clr-dropdown>\n <button type=\"button\" class=\"btn btn-icon btn-link\" clrDropdownTrigger>\n <cds-icon shape=\"history\" size=\"24\"></cds-icon>\n <cds-icon shape=\"angle\" direction=\"down\" size=\"12\"></cds-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" }]
4533
+ args: [{ selector: 'clr-history', template: "<clr-dropdown>\n <button type=\"button\" class=\"btn btn-icon btn-outline-primary\" clrDropdownTrigger>\n <cds-icon shape=\"history\" size=\"24\"></cds-icon>\n <cds-icon shape=\"angle\" direction=\"down\" size=\"12\"></cds-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" }]
4535
4534
  }], ctorParameters: () => [{ type: ClrHistoryService }, { type: HistoryProvider, decorators: [{
4536
4535
  type: Inject,
4537
4536
  args: [HISTORY_PROVIDER]
@@ -6435,6 +6434,7 @@ class ClrDateFilterComponent {
6435
6434
  constructor(commonStrings, clrPopoverEventsService, filterContainer) {
6436
6435
  this.commonStrings = commonStrings;
6437
6436
  this.clrPopoverEventsService = clrPopoverEventsService;
6437
+ this.timeActive = false;
6438
6438
  this.filterValueChange = new EventEmitter();
6439
6439
  /**
6440
6440
  * Internal values and accessor
@@ -6478,16 +6478,35 @@ class ClrDateFilterComponent {
6478
6478
  get from() {
6479
6479
  return this._from;
6480
6480
  }
6481
+ get fromTime() {
6482
+ return this._fromTime;
6483
+ }
6484
+ get toTime() {
6485
+ return this._toTime;
6486
+ }
6481
6487
  set from(from) {
6482
6488
  if (typeof from === 'object' && from !== this._from) {
6483
6489
  if (from && typeof from.setHours === 'function') {
6484
6490
  from.setHours(0, 0, 0, 0); // set from-date to start of day
6485
6491
  }
6492
+ if (this.fromTime) {
6493
+ const [hours, minutes, seconds] = this.fromTime.split(':').map(n => parseInt(n));
6494
+ from.setHours(hours, minutes, seconds ? seconds : 0, 0);
6495
+ }
6486
6496
  this._from = from;
6487
6497
  this._changes.next([this._from, this._to]);
6488
6498
  this.filterValueChange.emit([this._from, this._to]);
6489
6499
  }
6490
6500
  }
6501
+ set fromTime(fromtime) {
6502
+ this._fromTime = fromtime;
6503
+ if (this._fromTime && this._from) {
6504
+ const [hours, minutes, seconds] = this._fromTime.split(':').map(n => parseInt(n));
6505
+ this._from.setHours(hours, minutes, seconds ? seconds : 0, 0);
6506
+ this._changes.next([this._from, this._to]);
6507
+ this.filterValueChange.emit([this._from, this._to]);
6508
+ }
6509
+ }
6491
6510
  get to() {
6492
6511
  return this._to;
6493
6512
  }
@@ -6496,11 +6515,24 @@ class ClrDateFilterComponent {
6496
6515
  if (to && typeof to.setHours === 'function') {
6497
6516
  to.setHours(23, 59, 59, 999); // set to-date to end of day
6498
6517
  }
6518
+ if (this.toTime) {
6519
+ const [hours, minutes, seconds] = this.toTime.split(':').map(n => parseInt(n));
6520
+ to.setHours(hours, minutes, seconds ? seconds : 0, 0);
6521
+ }
6499
6522
  this._to = to;
6500
6523
  this._changes.next([this._from, this._to]);
6501
6524
  this.filterValueChange.emit([this._from, this._to]);
6502
6525
  }
6503
6526
  }
6527
+ set toTime(totime) {
6528
+ this._toTime = totime;
6529
+ if (this._toTime && this._to) {
6530
+ const [hours, minutes, seconds] = this._toTime.split(':').map(n => parseInt(n));
6531
+ this._to.setHours(hours, minutes, seconds ? seconds : 0, 0);
6532
+ this._changes.next([this._from, this._to]);
6533
+ this.filterValueChange.emit([this._from, this._to]);
6534
+ }
6535
+ }
6504
6536
  /**
6505
6537
  * Indicates if the filter is currently active, (at least one input is set)
6506
6538
  */
@@ -6537,6 +6569,8 @@ class ClrDateFilterComponent {
6537
6569
  clearFilter() {
6538
6570
  this._from = null;
6539
6571
  this._to = null;
6572
+ this.fromTime = null;
6573
+ this.toTime = null;
6540
6574
  this._changes.next([this._from, this._to]);
6541
6575
  this.filterValueChange.emit([this._from, this._to]);
6542
6576
  }
@@ -6544,12 +6578,14 @@ class ClrDateFilterComponent {
6544
6578
  return other === this;
6545
6579
  }
6546
6580
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDateFilterComponent, deps: [{ token: i2.ClrCommonStringsService }, { token: i2.ClrPopoverEventsService }, { token: i2.ClrDatagridFilter }], target: i0.ɵɵFactoryTarget.Component }); }
6547
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", 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: "<button class=\"btn btn-sm btn-icon btn-link btn-trash\" (click)=\"clearFilter()\">\n <cds-icon shape=\"trash\"></cds-icon>\n</button>\n<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: [".btn-trash{position:absolute;top:15px;right:40px;padding:0}\n"], dependencies: [{ kind: "directive", type: i2.CdsIconCustomTag, selector: "cds-icon" }, { 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]" }] }); }
6581
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: ClrDateFilterComponent, selector: "clr-date-filter", inputs: { timeActive: "timeActive", property: ["clrProperty", "property"], maxPlaceholder: ["clrFilterMaxPlaceholder", "maxPlaceholder"], minPlaceholder: ["clrFilterMinPlaceholder", "minPlaceholder"], value: ["clrFilterValue", "value"] }, outputs: { filterValueChange: "clrFilterValueChange" }, ngImport: i0, template: "<button class=\"btn btn-sm btn-icon btn-link btn-trash\" (click)=\"clearFilter()\">\n <cds-icon shape=\"trash\"></cds-icon>\n</button>\n<ng-container *ngIf=\"!timeActive\">\n <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</ng-container>\n<ng-container *ngIf=\"timeActive\">\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" [(ngModel)]=\"fromTime\" />\n </clr-date-time-container>\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" [(ngModel)]=\"toTime\" />\n </clr-date-time-container>\n</ng-container>\n", styles: [".btn-trash{position:absolute;top:15px;right:40px;padding:0}.time-filter-active{width:12rem}.time-filter-active-input{width:5rem!important}\n"], dependencies: [{ kind: "directive", type: i2.CdsIconCustomTag, selector: "cds-icon" }, { 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]" }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrDateTimeContainer, selector: "clr-date-time-container" }, { kind: "directive", type: ClrTimeInput, selector: "[clrTime]" }] }); }
6548
6582
  }
6549
6583
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDateFilterComponent, decorators: [{
6550
6584
  type: Component,
6551
- args: [{ selector: 'clr-date-filter', template: "<button class=\"btn btn-sm btn-icon btn-link btn-trash\" (click)=\"clearFilter()\">\n <cds-icon shape=\"trash\"></cds-icon>\n</button>\n<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: [".btn-trash{position:absolute;top:15px;right:40px;padding:0}\n"] }]
6552
- }], ctorParameters: () => [{ type: i2.ClrCommonStringsService }, { type: i2.ClrPopoverEventsService }, { type: i2.ClrDatagridFilter }], propDecorators: { property: [{
6585
+ args: [{ selector: 'clr-date-filter', template: "<button class=\"btn btn-sm btn-icon btn-link btn-trash\" (click)=\"clearFilter()\">\n <cds-icon shape=\"trash\"></cds-icon>\n</button>\n<ng-container *ngIf=\"!timeActive\">\n <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</ng-container>\n<ng-container *ngIf=\"timeActive\">\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" [(ngModel)]=\"fromTime\" />\n </clr-date-time-container>\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" [(ngModel)]=\"toTime\" />\n </clr-date-time-container>\n</ng-container>\n", styles: [".btn-trash{position:absolute;top:15px;right:40px;padding:0}.time-filter-active{width:12rem}.time-filter-active-input{width:5rem!important}\n"] }]
6586
+ }], ctorParameters: () => [{ type: i2.ClrCommonStringsService }, { type: i2.ClrPopoverEventsService }, { type: i2.ClrDatagridFilter }], propDecorators: { timeActive: [{
6587
+ type: Input
6588
+ }], property: [{
6553
6589
  type: Input,
6554
6590
  args: ['clrProperty']
6555
6591
  }], maxPlaceholder: [{
@@ -6568,13 +6604,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
6568
6604
 
6569
6605
  class ClrDateFilterModule {
6570
6606
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDateFilterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6571
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.5", ngImport: i0, type: ClrDateFilterModule, declarations: [ClrDateFilterComponent], imports: [ClarityModule, CommonModule, FormsModule], exports: [ClrDateFilterComponent] }); }
6572
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDateFilterModule, imports: [ClarityModule, CommonModule, FormsModule] }); }
6607
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.5", ngImport: i0, type: ClrDateFilterModule, declarations: [ClrDateFilterComponent], imports: [ClarityModule, CommonModule, FormsModule, ClrDateTimeModule, ClrFormModule], exports: [ClrDateFilterComponent] }); }
6608
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDateFilterModule, imports: [ClarityModule, CommonModule, FormsModule, ClrDateTimeModule, ClrFormModule] }); }
6573
6609
  }
6574
6610
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDateFilterModule, decorators: [{
6575
6611
  type: NgModule,
6576
6612
  args: [{
6577
- imports: [ClarityModule, CommonModule, FormsModule],
6613
+ imports: [ClarityModule, CommonModule, FormsModule, ClrDateTimeModule, ClrFormModule],
6578
6614
  declarations: [ClrDateFilterComponent],
6579
6615
  exports: [ClrDateFilterComponent],
6580
6616
  }]
@@ -6783,6 +6819,7 @@ class ClrDatepickerComponent {
6783
6819
  * Maximum date that can be selected.
6784
6820
  */
6785
6821
  this.maxDate = undefined;
6822
+ this.timeSelection = false;
6786
6823
  /**
6787
6824
  * Event triggered when value changes.
6788
6825
  */
@@ -6807,7 +6844,7 @@ class ClrDatepickerComponent {
6807
6844
  this.inputElm.nativeElement.focus();
6808
6845
  }
6809
6846
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDatepickerComponent, deps: [{ token: OpenedDatepickersTrackerService }], target: i0.ɵɵFactoryTarget.Component }); }
6810
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", 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: i2.ClrLabel, selector: "label", inputs: ["for"] }, { 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]" }] }); }
6847
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: ClrDatepickerComponent, selector: "clr-datepicker", inputs: { value: "value", label: "label", minDate: "minDate", maxDate: "maxDate", timeSelection: "timeSelection" }, 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: i2.ClrLabel, selector: "label", inputs: ["for"] }, { 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]" }] }); }
6811
6848
  }
6812
6849
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDatepickerComponent, decorators: [{
6813
6850
  type: Component,
@@ -6820,6 +6857,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
6820
6857
  type: Input
6821
6858
  }], maxDate: [{
6822
6859
  type: Input
6860
+ }], timeSelection: [{
6861
+ type: Input
6823
6862
  }], inputElm: [{
6824
6863
  type: ViewChild,
6825
6864
  args: ['inputElm']
@@ -7008,6 +7047,26 @@ class DaterangeParsingService {
7008
7047
  const toDateStr = this.toLocaleDisplayFormatString(toDate);
7009
7048
  return fromDateStr + separator + toDateStr;
7010
7049
  }
7050
+ toLocaleStringWithTime(daterange, separator = SEPARATOR_TEXT_DEFAULT) {
7051
+ if (daterange == null) {
7052
+ return '';
7053
+ }
7054
+ const { from, to, fromTime, toTime } = daterange;
7055
+ if (from == null || to == null) {
7056
+ return '';
7057
+ }
7058
+ const fromDate = from.toDate();
7059
+ const toDate = to.toDate();
7060
+ const fromDateStr = this.toLocaleDisplayFormatString(fromDate);
7061
+ const toDateStr = this.toLocaleDisplayFormatString(toDate);
7062
+ if (fromTime === null || toTime === null) {
7063
+ return fromDateStr + separator + toDateStr;
7064
+ }
7065
+ return fromDateStr + ' ' + this.toTimeString(fromTime) + separator + toDateStr + ' ' + this.toTimeString(toTime);
7066
+ }
7067
+ toTimeString(time) {
7068
+ return time?.toHTML5SpecTimeString();
7069
+ }
7011
7070
  /**
7012
7071
  * Convert date to locale display format string.
7013
7072
  * @param date - Javascript Date object.
@@ -7167,6 +7226,8 @@ class DaterangeService {
7167
7226
  /** Maximum date that can be selected. */
7168
7227
  this.maxDate = null;
7169
7228
  this._selectedDaterange = null;
7229
+ this.timeActive = false;
7230
+ this.timeSecondsActive = false;
7170
7231
  /**
7171
7232
  * Event triggered when value changes.
7172
7233
  */
@@ -7190,16 +7251,26 @@ class DaterangeService {
7190
7251
  this.valueChange.emit(value);
7191
7252
  }
7192
7253
  }
7254
+ /**
7255
+ * Set selected Timerange value.
7256
+ * @param value - New selected Timerange value.
7257
+ * @param triggerEvent - Trigger change event (default true).
7258
+ */
7259
+ updateSelectedTimerange(value, triggerEvent = true) {
7260
+ this._selectedDaterange = value;
7261
+ if (triggerEvent) {
7262
+ this.valueChange.emit(value);
7263
+ }
7264
+ }
7193
7265
  /**
7194
7266
  * Checks if daterange is valid.
7195
7267
  * Daterange is considered invalid when it's empty, or when one of it's properties is absent.
7196
7268
  * @returns Wether daterange is valid.
7197
7269
  */
7198
7270
  isValid() {
7199
- if (this._selectedDaterange == null || this._selectedDaterange.from == null || this._selectedDaterange.to == null) {
7200
- return false;
7201
- }
7202
- return true;
7271
+ return !(this._selectedDaterange == null ||
7272
+ this._selectedDaterange.from == null ||
7273
+ this._selectedDaterange.to == null);
7203
7274
  }
7204
7275
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DaterangeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7205
7276
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DaterangeService }); }
@@ -7306,6 +7377,88 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
7306
7377
  args: [ClrControlSuccess]
7307
7378
  }] } });
7308
7379
 
7380
+ /**
7381
+ * Time model.
7382
+ * Takes care of keeping records of full time.
7383
+ */
7384
+ class TimeModel {
7385
+ constructor(...args) {
7386
+ if (args[0] instanceof Date) {
7387
+ const date = args[0];
7388
+ this.hours = date.getHours();
7389
+ this.minutes = date.getMinutes();
7390
+ this.seconds = date.getSeconds();
7391
+ }
7392
+ else if (typeof args[0] === 'string') {
7393
+ const [hours, minutes, seconds] = args[0].split(':').map(n => parseInt(n));
7394
+ this.hours = hours;
7395
+ this.minutes = minutes;
7396
+ this.seconds = seconds;
7397
+ }
7398
+ else {
7399
+ this.hours = args[0];
7400
+ this.minutes = args[1];
7401
+ this.seconds = args[2];
7402
+ }
7403
+ }
7404
+ /**
7405
+ * Checks if the passed value is equal to current time model.
7406
+ * @param value - Time model.
7407
+ * @returns Whether value is equal to current time model.
7408
+ */
7409
+ isEqual(value) {
7410
+ if (value) {
7411
+ return this.hours === value.hours && this.minutes === value.minutes && this.seconds === value.seconds;
7412
+ }
7413
+ return false;
7414
+ }
7415
+ /**
7416
+ * Checks if current time model is after value.
7417
+ * @param value - time model.
7418
+ * @returns Whether current time model is after value.
7419
+ */
7420
+ isAfter(value) {
7421
+ return this.toDate() > value.toDate();
7422
+ }
7423
+ /**
7424
+ * Checks if current time model is before value.
7425
+ * @param value - Time model.
7426
+ * @returns Whether current time model is before value.
7427
+ */
7428
+ isBefore(value) {
7429
+ return this.toDate() < value.toDate();
7430
+ }
7431
+ /**
7432
+ * Clones the current odel.
7433
+ * @returns Cloned model.
7434
+ */
7435
+ clone() {
7436
+ return new TimeModel(this.hours, this.minutes, this.seconds);
7437
+ }
7438
+ /**
7439
+ * Convert to Javascript Date object.
7440
+ * @returns Javascript Date object.
7441
+ */
7442
+ toDate() {
7443
+ return new Date(new Date().setHours(this.hours, this.minutes, this.seconds ? this.seconds : 0));
7444
+ }
7445
+ /**
7446
+ * To HTML5 time spec string.
7447
+ * @returns Time as HTML5 spec string.
7448
+ */
7449
+ toHTML5SpecTimeString() {
7450
+ // The clarity time picker uses the format 'hh:mm:ss'.
7451
+ if (this.seconds) {
7452
+ return this.pad(this.hours) + ':' + this.pad(this.minutes) + ':' + this.pad(this.seconds);
7453
+ }
7454
+ // The clarity time picker uses the format 'hh:mm'.
7455
+ return this.pad(this.hours) + ':' + this.pad(this.minutes);
7456
+ }
7457
+ pad(num) {
7458
+ return num < 10 ? `0${num}` : `${num}`;
7459
+ }
7460
+ }
7461
+
7309
7462
  /**
7310
7463
  * Daterangepicker.
7311
7464
  */
@@ -7323,6 +7476,16 @@ class ClrDaterangepickerDirective {
7323
7476
  this.daterangeService.maxDate = !value ? null : new DayModel(value);
7324
7477
  }
7325
7478
  get placeholderText() {
7479
+ if (this.daterangeService.timeActive) {
7480
+ return (this.placeholder ??
7481
+ this.daterangeParsingService.localeFormat +
7482
+ ' hh:mm' +
7483
+ (this.daterangeService.timeSecondsActive ? ':ss' : '') +
7484
+ this.separatorText +
7485
+ this.daterangeParsingService.localeFormat +
7486
+ ' hh:mm' +
7487
+ (this.daterangeService.timeSecondsActive ? ':ss' : ''));
7488
+ }
7326
7489
  return (this.placeholder ??
7327
7490
  this.daterangeParsingService.localeFormat + this.separatorText + this.daterangeParsingService.localeFormat);
7328
7491
  }
@@ -7364,6 +7527,11 @@ class ClrDaterangepickerDirective {
7364
7527
  * Locale text between 'from' and 'to' dateranges.
7365
7528
  */
7366
7529
  this.separatorText = SEPARATOR_TEXT_DEFAULT;
7530
+ this.regex = /^[0-9]+[mhdw]$/;
7531
+ this.regexW = /^[0-9]+w$/;
7532
+ this.regexH = /^[0-9]+h$/;
7533
+ this.regexD = /^[0-9]+d$/;
7534
+ this.regexM = /^[0-9]+m$/;
7367
7535
  /**
7368
7536
  * Event that is triggered when value changes.
7369
7537
  */
@@ -7411,6 +7579,15 @@ class ClrDaterangepickerDirective {
7411
7579
  if (this.control.control.hasError('invalid')) {
7412
7580
  delete this.control.control.errors.invalid;
7413
7581
  }
7582
+ if (!target) {
7583
+ return;
7584
+ }
7585
+ console.log('aaaaa', target, this.regex.test(target.value));
7586
+ if (target.value && this.regex.test(target.value)) {
7587
+ // handle easy access
7588
+ this.handleEasyAccess(target.value);
7589
+ return;
7590
+ }
7414
7591
  // If there is nothing to parse, `ClrDaterangeRequiredValidator` will take care of this.
7415
7592
  if (!target.value) {
7416
7593
  this.daterangeService.updateSelectedDaterange(null, true);
@@ -7468,7 +7645,19 @@ class ClrDaterangepickerDirective {
7468
7645
  * Update input with friendly daterange text.
7469
7646
  */
7470
7647
  updateInput() {
7471
- const dateString = this.daterangeParsingService.toLocaleString(this.daterangeService.selectedDaterange, this.separatorText);
7648
+ let dateString;
7649
+ if (this.daterangeService.timeActive) {
7650
+ if (this.daterangeService.selectedDaterange &&
7651
+ Object.prototype.hasOwnProperty.call(this.daterangeService.selectedDaterange, 'fromTime')) {
7652
+ this.daterangeService.updateSelectedDaterange(this.daterangeService.selectedDaterange
7653
+ ? this.daterangeService.selectedDaterange
7654
+ : null, false);
7655
+ }
7656
+ dateString = this.daterangeParsingService.toLocaleStringWithTime(this.daterangeService.selectedDaterange, this.separatorText);
7657
+ }
7658
+ else {
7659
+ dateString = this.daterangeParsingService.toLocaleString(this.daterangeService.selectedDaterange, this.separatorText);
7660
+ }
7472
7661
  this.renderer.setProperty(this.element.nativeElement, 'value', dateString);
7473
7662
  }
7474
7663
  /**
@@ -7499,6 +7688,43 @@ class ClrDaterangepickerDirective {
7499
7688
  setDisabledState(disabled) {
7500
7689
  this.daterangeControlStateService.disabled = disabled;
7501
7690
  }
7691
+ handleEasyAccess(value) {
7692
+ const now = new Date();
7693
+ if (this.regexW.test(value)) {
7694
+ value = value.replace('w', '');
7695
+ now.setDate(now.getDate() - Number(value) * 7);
7696
+ this.daterangeService.updateSelectedDaterange({
7697
+ from: new DayModel(now),
7698
+ to: new DayModel(new Date()),
7699
+ }, true);
7700
+ }
7701
+ else if (this.regexD.test(value)) {
7702
+ value = value.replace('d', '');
7703
+ now.setDate(now.getDate() - Number(value));
7704
+ this.daterangeService.updateSelectedDaterange({
7705
+ from: new DayModel(now),
7706
+ to: new DayModel(new Date()),
7707
+ }, true);
7708
+ }
7709
+ else if (this.regexH.test(value)) {
7710
+ value = value.replace('h', '');
7711
+ this.daterangeService.updateSelectedDaterange({
7712
+ from: new DayModel(new Date()),
7713
+ to: new DayModel(new Date()),
7714
+ fromTime: new TimeModel(new Date(new Date().getTime() - Number(value) * 3600000)),
7715
+ toTime: new TimeModel(new Date()),
7716
+ }, true);
7717
+ }
7718
+ else if (this.regexM.test(value)) {
7719
+ value = value.replace('m', '');
7720
+ this.daterangeService.updateSelectedDaterange({
7721
+ from: new DayModel(new Date()),
7722
+ to: new DayModel(new Date()),
7723
+ fromTime: new TimeModel(new Date(new Date().getTime() - Number(value) * 60000)),
7724
+ toTime: new TimeModel(new Date()),
7725
+ }, true);
7726
+ }
7727
+ }
7502
7728
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", 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 }); }
7503
7729
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.5", 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 }); }
7504
7730
  }
@@ -7548,7 +7774,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
7548
7774
  args: ['blur']
7549
7775
  }] } });
7550
7776
 
7551
- ClarityIcons.addIcons(calendarIcon, exclamationCircleIcon, checkCircleIcon, windowCloseIcon);
7777
+ class ClrTimepickerComponent {
7778
+ get time() {
7779
+ if (typeof this.value === 'string') {
7780
+ return this.value;
7781
+ }
7782
+ if (this.value) {
7783
+ return this.value.toHTML5SpecTimeString();
7784
+ }
7785
+ }
7786
+ /**
7787
+ * Set time.
7788
+ */
7789
+ set time(val) {
7790
+ this.value = val;
7791
+ this.valueChange.emit(new TimeModel(val));
7792
+ }
7793
+ constructor() {
7794
+ /**
7795
+ * Activate/Deactivate seconds handling.
7796
+ */
7797
+ this.activateSeconds = false;
7798
+ /**
7799
+ * Event triggered when value changes.
7800
+ */
7801
+ this.valueChange = new EventEmitter();
7802
+ }
7803
+ /**
7804
+ * Focus input.
7805
+ */
7806
+ focus() {
7807
+ this.inputElm.nativeElement.focus();
7808
+ }
7809
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrTimepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7810
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: ClrTimepickerComponent, selector: "clr-timepicker", inputs: { value: "value", activateSeconds: "activateSeconds" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "inputElm", first: true, predicate: ["inputElm"], descendants: true }], ngImport: i0, template: "<clr-input-container class=\"clr-input-time\">\n <label class=\"clr-control-label\">&nbsp;</label>\n <input clrInput #inputElm [(ngModel)]=\"this.time\" type=\"time\" step=\"{{ activateSeconds ? 1 : 60 }}\" />\n</clr-input-container>\n", styles: [".clr-input-time{margin-top:0}\n"], dependencies: [{ 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i2.ClrInput, selector: "[clrInput]" }, { kind: "component", type: i2.ClrInputContainer, selector: "clr-input-container" }] }); }
7811
+ }
7812
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrTimepickerComponent, decorators: [{
7813
+ type: Component,
7814
+ args: [{ selector: 'clr-timepicker', template: "<clr-input-container class=\"clr-input-time\">\n <label class=\"clr-control-label\">&nbsp;</label>\n <input clrInput #inputElm [(ngModel)]=\"this.time\" type=\"time\" step=\"{{ activateSeconds ? 1 : 60 }}\" />\n</clr-input-container>\n", styles: [".clr-input-time{margin-top:0}\n"] }]
7815
+ }], ctorParameters: () => [], propDecorators: { value: [{
7816
+ type: Input
7817
+ }], activateSeconds: [{
7818
+ type: Input
7819
+ }], inputElm: [{
7820
+ type: ViewChild,
7821
+ args: ['inputElm']
7822
+ }], valueChange: [{
7823
+ type: Output
7824
+ }] } });
7825
+
7826
+ ClarityIcons.addIcons(calendarIcon, exclamationCircleIcon, checkCircleIcon, windowCloseIcon, trashIcon);
7552
7827
  /**
7553
7828
  * Daterangepicker container.
7554
7829
  */
@@ -7568,6 +7843,11 @@ class ClrDaterangepickerContainerComponent extends ClrAbstractContainer {
7568
7843
  get dateFrom() {
7569
7844
  return this.daterangeService.selectedDaterange?.from;
7570
7845
  }
7846
+ get timeFrom() {
7847
+ return this.daterangeService.selectedDaterange
7848
+ ? this.daterangeService.selectedDaterange.fromTime
7849
+ : null;
7850
+ }
7571
7851
  /**
7572
7852
  * Date to.
7573
7853
  * @returns Date to.
@@ -7575,6 +7855,11 @@ class ClrDaterangepickerContainerComponent extends ClrAbstractContainer {
7575
7855
  get dateTo() {
7576
7856
  return this.daterangeService.selectedDaterange?.to;
7577
7857
  }
7858
+ get timeTo() {
7859
+ return this.daterangeService.selectedDaterange
7860
+ ? this.daterangeService.selectedDaterange.toTime
7861
+ : null;
7862
+ }
7578
7863
  /**
7579
7864
  * Minimum date that can be selected.
7580
7865
  * @returns Minimum date that can be selected.
@@ -7616,6 +7901,12 @@ class ClrDaterangepickerContainerComponent extends ClrAbstractContainer {
7616
7901
  * List of presets.
7617
7902
  */
7618
7903
  this.presets = [];
7904
+ /**
7905
+ * List of time presets.
7906
+ */
7907
+ this.presetsDateTime = [];
7908
+ this.timeSelection = false;
7909
+ this.activateSeconds = false;
7619
7910
  /**
7620
7911
  * Text for the 'from' label.
7621
7912
  */
@@ -7641,6 +7932,8 @@ class ClrDaterangepickerContainerComponent extends ClrAbstractContainer {
7641
7932
  if (this.daterangepickerDirective == null) {
7642
7933
  throw new Error('`ClrDaterangepickerContainerComponent` requires an child `ClrDaterangepickerDirective`');
7643
7934
  }
7935
+ this.daterangeService.timeActive = this.timeSelection;
7936
+ this.daterangeService.timeSecondsActive = this.activateSeconds;
7644
7937
  this.listenForDaterangeValueChanges();
7645
7938
  this.listenForOpenedDatepickersTrackerChanges();
7646
7939
  this.listenForPopoverToggleChanges();
@@ -7705,20 +7998,40 @@ class ClrDaterangepickerContainerComponent extends ClrAbstractContainer {
7705
7998
  * @param value - Date from.
7706
7999
  */
7707
8000
  onDateFromChange(value) {
7708
- this.daterangeService.updateSelectedDaterange({
7709
- from: value,
7710
- to: this.dateTo,
7711
- });
8001
+ if (this.daterangeService.timeActive) {
8002
+ this.daterangeService.updateSelectedDaterange({
8003
+ from: value,
8004
+ to: this.dateTo,
8005
+ fromTime: this.timeFrom,
8006
+ toTime: this.timeTo,
8007
+ });
8008
+ }
8009
+ else {
8010
+ this.daterangeService.updateSelectedDaterange({
8011
+ from: value,
8012
+ to: this.dateTo,
8013
+ });
8014
+ }
7712
8015
  }
7713
8016
  /**
7714
8017
  * Event triggered when date to changed.
7715
8018
  * @param value - Date to.
7716
8019
  */
7717
8020
  onDateToChange(value) {
7718
- this.daterangeService.updateSelectedDaterange({
7719
- from: this.dateFrom,
7720
- to: value,
7721
- });
8021
+ if (this.daterangeService.timeActive) {
8022
+ this.daterangeService.updateSelectedDaterange({
8023
+ from: this.dateFrom,
8024
+ to: value,
8025
+ fromTime: this.timeFrom,
8026
+ toTime: this.timeTo,
8027
+ });
8028
+ }
8029
+ else {
8030
+ this.daterangeService.updateSelectedDaterange({
8031
+ from: this.dateFrom,
8032
+ to: value,
8033
+ });
8034
+ }
7722
8035
  }
7723
8036
  /**
7724
8037
  * Apply selected preset.
@@ -7733,8 +8046,33 @@ class ClrDaterangepickerContainerComponent extends ClrAbstractContainer {
7733
8046
  this.clrPopoverToggleService.open = false;
7734
8047
  }
7735
8048
  }
8049
+ applyPresetTime(preset) {
8050
+ const range = preset.range();
8051
+ this.daterangeService.updateSelectedDaterange(range);
8052
+ // Close popover here, because it's not possible to conditionally
8053
+ // apply `clrPopoverCloseButton` directive on preset button.
8054
+ if (this.daterangeService.isValid()) {
8055
+ this.clrPopoverToggleService.open = false;
8056
+ }
8057
+ }
8058
+ onTimeFromChange(value) {
8059
+ this.daterangeService.updateSelectedDaterange({
8060
+ from: this.dateFrom,
8061
+ to: this.dateTo,
8062
+ fromTime: value,
8063
+ toTime: this.timeTo,
8064
+ });
8065
+ }
8066
+ onTimeToChange(value) {
8067
+ this.daterangeService.updateSelectedDaterange({
8068
+ from: this.dateFrom,
8069
+ to: this.dateTo,
8070
+ fromTime: this.timeFrom,
8071
+ toTime: value,
8072
+ });
8073
+ }
7736
8074
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDaterangepickerContainerComponent, deps: [{ token: i2.ClrPopoverEventsService }, { token: i2.ClrPopoverToggleService }, { token: i2.ClrCommonStringsService }, { token: i2.ClrLayout, optional: true }, { token: DaterangeControlStateService }, { token: OpenedDatepickersTrackerService }, { token: DaterangeService }, { token: DaterangeParsingService }], target: i0.ɵɵFactoryTarget.Component }); }
7737
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: ClrDaterangepickerContainerComponent, selector: "clr-daterangepicker-container", inputs: { presets: "presets", clrPosition: "clrPosition", labelFrom: "labelFrom", labelTo: "labelTo" }, host: { properties: { "class": "this.classes" } }, providers: [
8075
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: ClrDaterangepickerContainerComponent, selector: "clr-daterangepicker-container", inputs: { presets: "presets", presetsDateTime: "presetsDateTime", timeSelection: "timeSelection", activateSeconds: "activateSeconds", clrPosition: "clrPosition", labelFrom: "labelFrom", labelTo: "labelTo" }, host: { properties: { "class": "this.classes" } }, providers: [
7738
8076
  ClrPopoverToggleService,
7739
8077
  ClrPopoverEventsService,
7740
8078
  ClrPopoverPositionService,
@@ -7742,7 +8080,7 @@ class ClrDaterangepickerContainerComponent extends ClrAbstractContainer {
7742
8080
  DaterangeService,
7743
8081
  OpenedDatepickersTrackerService,
7744
8082
  ControlIdService,
7745
- ], 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: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: i2.CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i2.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i2.ClrForm, selector: "[clrForm]", inputs: ["clrLabelSize"] }, { kind: "directive", type: i2.ClrLayout, selector: "[clrForm][clrLayout]", inputs: ["clrLayout"] }, { kind: "directive", type: i2.ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: i2.ÇlrClrPopoverCloseButton, selector: "[clrPopoverCloseButton]", outputs: ["clrPopoverOnCloseChange"] }, { kind: "directive", type: i2.ÇlrClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: i2.ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "component", type: ClrDatepickerComponent, selector: "clr-datepicker", inputs: ["value", "label", "minDate", "maxDate"], outputs: ["valueChange"] }] }); }
8083
+ ], 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-col-12]=\"this.addLayoutGrid\"\n [class.clr-col-md-10]=\"this.addLayoutGrid\"\n [class.clr-error]=\"this.isInvalid\"\n class=\"clr-control-container\"\n>\n <div class=\"clr-input-wrapper\" clrPopoverAnchor>\n <div [class.clr-focus]=\"this.focus\" class=\"clr-input-group\">\n <ng-content select=\"[clrDaterangepicker]\"></ng-content>\n <button\n [attr.aria-label]=\"this.friendlyDaterange\"\n [disabled]=\"this.disabled\"\n [title]=\"this.friendlyDaterange\"\n class=\"clr-input-group-icon-action\"\n clrPopoverOpenCloseButton\n type=\"button\"\n >\n <cds-icon shape=\"calendar\" status=\"info\"></cds-icon>\n </button>\n </div>\n <cds-icon\n *ngIf=\"this.isInvalid\"\n aria-hidden=\"true\"\n class=\"clr-validate-icon\"\n shape=\"exclamation-circle\"\n status=\"danger\"\n ></cds-icon>\n <cds-icon\n *ngIf=\"!this.isInvalid\"\n aria-hidden=\"true\"\n class=\"clr-validate-icon\"\n shape=\"check-circle\"\n status=\"success\"\n ></cds-icon>\n </div>\n <ng-content *ngIf=\"this.showHelper\" select=\"clr-control-helper\"></ng-content>\n <ng-content *ngIf=\"this.showInvalid\" select=\"clr-control-error\"></ng-content>\n <ng-content *ngIf=\"this.showValid\" select=\"clr-control-success\"></ng-content>\n\n <div\n *clrPopoverContent=\"this.open; at: this.popoverPosition; outsideClickToClose: true; scrollToClose: true\"\n class=\"clr-daterangepicker-container-popup datepicker\"\n >\n <button\n class=\"btn btn-sm btn-link close clr-smart-close-button btn-trash\"\n type=\"button\"\n (click)=\"daterangeService.updateSelectedDaterange(null)\"\n >\n <cds-icon shape=\"trash\"></cds-icon>\n </button>\n <button\n [attr.aria-label]=\"this.commonStrings.close\"\n class=\"btn btn-sm btn-link close\"\n clrPopoverCloseButton\n type=\"button\"\n >\n <cds-icon [attr.title]=\"this.commonStrings.close\" aria-hidden=\"true\" shape=\"window-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 [clrLayout]=\"'vertical'\" clrForm>\n <div class=\"datetime-container\">\n <clr-datepicker\n (valueChange)=\"this.onDateFromChange($event)\"\n [label]=\"this.labelFrom\"\n [maxDate]=\"this.maxDate\"\n [minDate]=\"this.minDate\"\n [value]=\"this.dateFrom\"\n class=\"clr-datepicker\"\n >\n </clr-datepicker>\n <clr-timepicker\n *ngIf=\"timeSelection\"\n class=\"timepicker\"\n (valueChange)=\"this.onTimeFromChange($event)\"\n [value]=\"this.timeFrom\"\n [activateSeconds]=\"activateSeconds\"\n >\n </clr-timepicker>\n </div>\n <div class=\"datetime-container datetime-container-to\">\n <clr-datepicker\n (valueChange)=\"this.onDateToChange($event)\"\n [label]=\"this.labelTo\"\n [maxDate]=\"this.maxDate\"\n [minDate]=\"this.minDate\"\n [value]=\"this.dateTo\"\n class=\"clr-datepicker\"\n >\n </clr-datepicker>\n <clr-timepicker\n *ngIf=\"timeSelection\"\n class=\"timepicker\"\n (valueChange)=\"this.onTimeToChange($event)\"\n [value]=\"this.timeTo\"\n [activateSeconds]=\"activateSeconds\"\n >\n </clr-timepicker>\n </div>\n </form>\n <div *ngIf=\"this.presets?.length > 0\" class=\"clr-daterangepicker-container-popup-content-presets\">\n <ng-container *ngFor=\"let preset of this.presets\">\n <button (click)=\"this.applyPreset(preset)\" class=\"btn btn-outline btn-sm btn-block\" type=\"button\">\n {{ preset.text }}\n </button>\n </ng-container>\n </div>\n <div *ngIf=\"this.presetsDateTime?.length > 0\" class=\"clr-daterangepicker-container-popup-content-presets\">\n <ng-container *ngFor=\"let preset of this.presetsDateTime\">\n <button (click)=\"this.applyPresetTime(preset)\" class=\"btn btn-outline btn-sm btn-block\" type=\"button\">\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: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;padding:0;position:absolute;right:0;margin:5px}.clr-daterangepicker-container-popup.datepicker .btn-trash{padding-right:25px;margin:5px}.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}.datetime-container{display:flex;flex-direction:row;align-items:flex-start}.datetime-container-to{padding-top:1rem}.timepicker{padding-left:1rem}.timepicker clr-input-container{margin-top:.8rem}\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: i2.CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i2.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i2.ClrForm, selector: "[clrForm]", inputs: ["clrLabelSize"] }, { kind: "directive", type: i2.ClrLayout, selector: "[clrForm][clrLayout]", inputs: ["clrLayout"] }, { kind: "directive", type: i2.ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: i2.ÇlrClrPopoverCloseButton, selector: "[clrPopoverCloseButton]", outputs: ["clrPopoverOnCloseChange"] }, { kind: "directive", type: i2.ÇlrClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: i2.ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "component", type: ClrDatepickerComponent, selector: "clr-datepicker", inputs: ["value", "label", "minDate", "maxDate", "timeSelection"], outputs: ["valueChange"] }, { kind: "component", type: ClrTimepickerComponent, selector: "clr-timepicker", inputs: ["value", "activateSeconds"], outputs: ["valueChange"] }] }); }
7746
8084
  }
7747
8085
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDaterangepickerContainerComponent, decorators: [{
7748
8086
  type: Component,
@@ -7754,11 +8092,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
7754
8092
  DaterangeService,
7755
8093
  OpenedDatepickersTrackerService,
7756
8094
  ControlIdService,
7757
- ], 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: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"] }]
8095
+ ], template: "<ng-content select=\"label\"></ng-content>\n<label *ngIf=\"!this.labelComponent && this.addLayoutGrid\"></label>\n<div\n [class.clr-col-12]=\"this.addLayoutGrid\"\n [class.clr-col-md-10]=\"this.addLayoutGrid\"\n [class.clr-error]=\"this.isInvalid\"\n class=\"clr-control-container\"\n>\n <div class=\"clr-input-wrapper\" clrPopoverAnchor>\n <div [class.clr-focus]=\"this.focus\" class=\"clr-input-group\">\n <ng-content select=\"[clrDaterangepicker]\"></ng-content>\n <button\n [attr.aria-label]=\"this.friendlyDaterange\"\n [disabled]=\"this.disabled\"\n [title]=\"this.friendlyDaterange\"\n class=\"clr-input-group-icon-action\"\n clrPopoverOpenCloseButton\n type=\"button\"\n >\n <cds-icon shape=\"calendar\" status=\"info\"></cds-icon>\n </button>\n </div>\n <cds-icon\n *ngIf=\"this.isInvalid\"\n aria-hidden=\"true\"\n class=\"clr-validate-icon\"\n shape=\"exclamation-circle\"\n status=\"danger\"\n ></cds-icon>\n <cds-icon\n *ngIf=\"!this.isInvalid\"\n aria-hidden=\"true\"\n class=\"clr-validate-icon\"\n shape=\"check-circle\"\n status=\"success\"\n ></cds-icon>\n </div>\n <ng-content *ngIf=\"this.showHelper\" select=\"clr-control-helper\"></ng-content>\n <ng-content *ngIf=\"this.showInvalid\" select=\"clr-control-error\"></ng-content>\n <ng-content *ngIf=\"this.showValid\" select=\"clr-control-success\"></ng-content>\n\n <div\n *clrPopoverContent=\"this.open; at: this.popoverPosition; outsideClickToClose: true; scrollToClose: true\"\n class=\"clr-daterangepicker-container-popup datepicker\"\n >\n <button\n class=\"btn btn-sm btn-link close clr-smart-close-button btn-trash\"\n type=\"button\"\n (click)=\"daterangeService.updateSelectedDaterange(null)\"\n >\n <cds-icon shape=\"trash\"></cds-icon>\n </button>\n <button\n [attr.aria-label]=\"this.commonStrings.close\"\n class=\"btn btn-sm btn-link close\"\n clrPopoverCloseButton\n type=\"button\"\n >\n <cds-icon [attr.title]=\"this.commonStrings.close\" aria-hidden=\"true\" shape=\"window-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 [clrLayout]=\"'vertical'\" clrForm>\n <div class=\"datetime-container\">\n <clr-datepicker\n (valueChange)=\"this.onDateFromChange($event)\"\n [label]=\"this.labelFrom\"\n [maxDate]=\"this.maxDate\"\n [minDate]=\"this.minDate\"\n [value]=\"this.dateFrom\"\n class=\"clr-datepicker\"\n >\n </clr-datepicker>\n <clr-timepicker\n *ngIf=\"timeSelection\"\n class=\"timepicker\"\n (valueChange)=\"this.onTimeFromChange($event)\"\n [value]=\"this.timeFrom\"\n [activateSeconds]=\"activateSeconds\"\n >\n </clr-timepicker>\n </div>\n <div class=\"datetime-container datetime-container-to\">\n <clr-datepicker\n (valueChange)=\"this.onDateToChange($event)\"\n [label]=\"this.labelTo\"\n [maxDate]=\"this.maxDate\"\n [minDate]=\"this.minDate\"\n [value]=\"this.dateTo\"\n class=\"clr-datepicker\"\n >\n </clr-datepicker>\n <clr-timepicker\n *ngIf=\"timeSelection\"\n class=\"timepicker\"\n (valueChange)=\"this.onTimeToChange($event)\"\n [value]=\"this.timeTo\"\n [activateSeconds]=\"activateSeconds\"\n >\n </clr-timepicker>\n </div>\n </form>\n <div *ngIf=\"this.presets?.length > 0\" class=\"clr-daterangepicker-container-popup-content-presets\">\n <ng-container *ngFor=\"let preset of this.presets\">\n <button (click)=\"this.applyPreset(preset)\" class=\"btn btn-outline btn-sm btn-block\" type=\"button\">\n {{ preset.text }}\n </button>\n </ng-container>\n </div>\n <div *ngIf=\"this.presetsDateTime?.length > 0\" class=\"clr-daterangepicker-container-popup-content-presets\">\n <ng-container *ngFor=\"let preset of this.presetsDateTime\">\n <button (click)=\"this.applyPresetTime(preset)\" class=\"btn btn-outline btn-sm btn-block\" type=\"button\">\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: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;padding:0;position:absolute;right:0;margin:5px}.clr-daterangepicker-container-popup.datepicker .btn-trash{padding-right:25px;margin:5px}.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}.datetime-container{display:flex;flex-direction:row;align-items:flex-start}.datetime-container-to{padding-top:1rem}.timepicker{padding-left:1rem}.timepicker clr-input-container{margin-top:.8rem}\n"] }]
7758
8096
  }], ctorParameters: () => [{ type: i2.ClrPopoverEventsService }, { type: i2.ClrPopoverToggleService }, { type: i2.ClrCommonStringsService }, { type: i2.ClrLayout, decorators: [{
7759
8097
  type: Optional
7760
8098
  }] }, { type: DaterangeControlStateService }, { type: OpenedDatepickersTrackerService }, { type: DaterangeService }, { type: DaterangeParsingService }], propDecorators: { presets: [{
7761
8099
  type: Input
8100
+ }], presetsDateTime: [{
8101
+ type: Input
8102
+ }], timeSelection: [{
8103
+ type: Input
8104
+ }], activateSeconds: [{
8105
+ type: Input
7762
8106
  }], clrPosition: [{
7763
8107
  type: Input
7764
8108
  }], labelFrom: [{
@@ -8058,11 +8402,18 @@ class ClrDaterangeOrderValidator {
8058
8402
  if (control.value == null) {
8059
8403
  return null;
8060
8404
  }
8061
- const { from, to } = control.value;
8405
+ const { from, to, fromTime, toTime } = control.value;
8062
8406
  // Validation with `null` values from 'from' & 'to' is done with the ClrDaterangeRequiredValidator.
8063
8407
  if (from == null || to == null) {
8064
8408
  return null;
8065
8409
  }
8410
+ if ((from.isAfter(to) || from.isEqual(to)) && fromTime && toTime) {
8411
+ if (fromTime.isAfter(toTime)) {
8412
+ return {
8413
+ [ClrDaterangeOrderValidator.validationErrorName]: control.value,
8414
+ };
8415
+ }
8416
+ }
8066
8417
  if (from.isAfter(to)) {
8067
8418
  return {
8068
8419
  [ClrDaterangeOrderValidator.validationErrorName]: control.value,
@@ -8173,7 +8524,8 @@ class ClrDaterangepickerModule {
8173
8524
  ClrDaterangepickerContainerComponent,
8174
8525
  ClrDaterangepickerDirective,
8175
8526
  ClrDaterangeRequiredValidator,
8176
- ClrIfDaterangeErrorDirective], imports: [CommonModule, FormsModule, ClarityModule, ClrDatepickerModule, ClrIconModule], exports: [ClrDaterangeMaxValidator,
8527
+ ClrIfDaterangeErrorDirective,
8528
+ ClrTimepickerComponent], imports: [CommonModule, FormsModule, ClarityModule, ClrDatepickerModule, ClrIconModule], exports: [ClrDaterangeMaxValidator,
8177
8529
  ClrDaterangeMinValidator,
8178
8530
  ClrDaterangeOrderValidator,
8179
8531
  ClrDaterangepickerContainerComponent,
@@ -8195,6 +8547,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
8195
8547
  ClrDaterangepickerDirective,
8196
8548
  ClrDaterangeRequiredValidator,
8197
8549
  ClrIfDaterangeErrorDirective,
8550
+ ClrTimepickerComponent,
8198
8551
  ],
8199
8552
  exports: [
8200
8553
  ClrDaterangeMaxValidator,
@@ -8294,6 +8647,181 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
8294
8647
  }]
8295
8648
  }] });
8296
8649
 
8650
+ /*
8651
+ * Copyright (c) 2018-2024 Porsche Informatik. All Rights Reserved.
8652
+ * This software is released under MIT license.
8653
+ * The full license information can be found in LICENSE in the root directory of this project.
8654
+ */
8655
+ ClarityIcons.addIcons(timesIcon);
8656
+ class ClrActionPanel {
8657
+ constructor() {
8658
+ this._open = false;
8659
+ this.opened = new EventEmitter();
8660
+ this.closed = new EventEmitter();
8661
+ }
8662
+ isOpen() {
8663
+ return this._open;
8664
+ }
8665
+ open() {
8666
+ if (this._open) {
8667
+ return;
8668
+ }
8669
+ this._open = true;
8670
+ this.opened.emit();
8671
+ }
8672
+ close() {
8673
+ if (!this._open) {
8674
+ return;
8675
+ }
8676
+ this._open = false;
8677
+ this.closed.emit();
8678
+ }
8679
+ toggle() {
8680
+ if (this._open) {
8681
+ this.close();
8682
+ }
8683
+ else {
8684
+ this.open();
8685
+ }
8686
+ }
8687
+ resizeWindow() {
8688
+ // this event is used by the tree table to adjust the colomns width
8689
+ window.dispatchEvent(new Event('resize'));
8690
+ }
8691
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrActionPanel, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8692
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: ClrActionPanel, selector: "clr-action-panel", outputs: { opened: "clrOpened", closed: "clrClosed" }, host: { properties: { "class.action-panel": "true" } }, ngImport: i0, template: "<ng-container *ngIf=\"_open\">\n <div [@slideIn] class=\"action-panel-action-wrapper\" (@slideIn.done)=\"resizeWindow()\">\n <ng-content select=\"[clr-action-panel-content]\"></ng-content>\n </div>\n <div [@fade] class=\"action-panel-backdrop\" (click)=\"close()\" (@fade.done)=\"resizeWindow()\"></div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: [
8693
+ trigger('slideIn', [
8694
+ transition(':enter', [style({ opacity: 0, width: 0 }), animate('0.2s', style({ opacity: 1, width: '*' }))]),
8695
+ transition(':leave', [style({ opacity: 1, width: '*' }), animate('0.2s', style({ opacity: 0, width: 0 }))]),
8696
+ ]),
8697
+ trigger('fade', [
8698
+ transition(':enter', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
8699
+ transition(':leave', [animate('0.2s ease-in-out', style({ opacity: 0 }))]),
8700
+ ]),
8701
+ ] }); }
8702
+ }
8703
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrActionPanel, decorators: [{
8704
+ type: Component,
8705
+ args: [{ selector: 'clr-action-panel', animations: [
8706
+ trigger('slideIn', [
8707
+ transition(':enter', [style({ opacity: 0, width: 0 }), animate('0.2s', style({ opacity: 1, width: '*' }))]),
8708
+ transition(':leave', [style({ opacity: 1, width: '*' }), animate('0.2s', style({ opacity: 0, width: 0 }))]),
8709
+ ]),
8710
+ trigger('fade', [
8711
+ transition(':enter', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
8712
+ transition(':leave', [animate('0.2s ease-in-out', style({ opacity: 0 }))]),
8713
+ ]),
8714
+ ], host: {
8715
+ '[class.action-panel]': 'true',
8716
+ }, template: "<ng-container *ngIf=\"_open\">\n <div [@slideIn] class=\"action-panel-action-wrapper\" (@slideIn.done)=\"resizeWindow()\">\n <ng-content select=\"[clr-action-panel-content]\"></ng-content>\n </div>\n <div [@fade] class=\"action-panel-backdrop\" (click)=\"close()\" (@fade.done)=\"resizeWindow()\"></div>\n</ng-container>\n" }]
8717
+ }], propDecorators: { opened: [{
8718
+ type: Output,
8719
+ args: ['clrOpened']
8720
+ }], closed: [{
8721
+ type: Output,
8722
+ args: ['clrClosed']
8723
+ }] } });
8724
+
8725
+ /*
8726
+ * Copyright (c) 2018-2024 Porsche Informatik. All Rights Reserved.
8727
+ * This software is released under MIT license.
8728
+ * The full license information can be found in LICENSE in the root directory of this project.
8729
+ */
8730
+ class ClrActionPanelContainer {
8731
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrActionPanelContainer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8732
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: ClrActionPanelContainer, selector: "clr-action-panel-container", host: { properties: { "class.content-container": "true", "class.action-panel-container": "true" } }, ngImport: i0, template: `
8733
+ <div class="action-panel-outer-wrapper">
8734
+ <ng-content select="clr-action-panel-container-content"></ng-content>
8735
+ <ng-content select="clr-action-panel-container-footer"></ng-content>
8736
+ </div>
8737
+ <ng-content select="clr-action-panel"></ng-content>
8738
+ `, isInline: true }); }
8739
+ }
8740
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrActionPanelContainer, decorators: [{
8741
+ type: Component,
8742
+ args: [{
8743
+ selector: 'clr-action-panel-container',
8744
+ template: `
8745
+ <div class="action-panel-outer-wrapper">
8746
+ <ng-content select="clr-action-panel-container-content"></ng-content>
8747
+ <ng-content select="clr-action-panel-container-footer"></ng-content>
8748
+ </div>
8749
+ <ng-content select="clr-action-panel"></ng-content>
8750
+ `,
8751
+ host: {
8752
+ '[class.content-container]': 'true',
8753
+ '[class.action-panel-container]': 'true',
8754
+ },
8755
+ }]
8756
+ }] });
8757
+
8758
+ /*
8759
+ * Copyright (c) 2018-2024 Porsche Informatik. All Rights Reserved.
8760
+ * This software is released under MIT license.
8761
+ * The full license information can be found in LICENSE in the root directory of this project.
8762
+ */
8763
+ class ClrActionPanelContainerContent {
8764
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrActionPanelContainerContent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8765
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: ClrActionPanelContainerContent, selector: "clr-action-panel-container-content", host: { properties: { "class.content-area": "true" } }, ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true }); }
8766
+ }
8767
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrActionPanelContainerContent, decorators: [{
8768
+ type: Component,
8769
+ args: [{
8770
+ selector: 'clr-action-panel-container-content',
8771
+ template: ` <ng-content></ng-content> `,
8772
+ host: {
8773
+ '[class.content-area]': 'true',
8774
+ },
8775
+ }]
8776
+ }] });
8777
+
8778
+ /*
8779
+ * Copyright (c) 2018-2024 Porsche Informatik. All Rights Reserved.
8780
+ * This software is released under MIT license.
8781
+ * The full license information can be found in LICENSE in the root directory of this project.
8782
+ */
8783
+ class ClrActionPanelContainerFooter {
8784
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrActionPanelContainerFooter, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8785
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: ClrActionPanelContainerFooter, selector: "clr-action-panel-container-footer", host: { properties: { "class.content-area-footer": "true" } }, ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true }); }
8786
+ }
8787
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrActionPanelContainerFooter, decorators: [{
8788
+ type: Component,
8789
+ args: [{
8790
+ selector: 'clr-action-panel-container-footer',
8791
+ template: ` <ng-content></ng-content> `,
8792
+ host: {
8793
+ '[class.content-area-footer]': 'true',
8794
+ },
8795
+ }]
8796
+ }] });
8797
+
8798
+ /*
8799
+ * Copyright (c) 2018-2024 Porsche Informatik. All Rights Reserved.
8800
+ * This software is released under MIT license.
8801
+ * The full license information can be found in LICENSE in the root directory of this project.
8802
+ */
8803
+ class ClrActionPanelModule {
8804
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrActionPanelModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8805
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.5", ngImport: i0, type: ClrActionPanelModule, declarations: [ClrActionPanel,
8806
+ ClrActionPanelContainer,
8807
+ ClrActionPanelContainerContent,
8808
+ ClrActionPanelContainerFooter], imports: [CommonModule, ClarityModule, FormsModule], exports: [ClrActionPanel, ClrActionPanelContainer, ClrActionPanelContainerContent, ClrActionPanelContainerFooter] }); }
8809
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrActionPanelModule, imports: [CommonModule, ClarityModule, FormsModule] }); }
8810
+ }
8811
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrActionPanelModule, decorators: [{
8812
+ type: NgModule,
8813
+ args: [{
8814
+ imports: [CommonModule, ClarityModule, FormsModule],
8815
+ declarations: [
8816
+ ClrActionPanel,
8817
+ ClrActionPanelContainer,
8818
+ ClrActionPanelContainerContent,
8819
+ ClrActionPanelContainerFooter,
8820
+ ],
8821
+ exports: [ClrActionPanel, ClrActionPanelContainer, ClrActionPanelContainerContent, ClrActionPanelContainerFooter],
8822
+ }]
8823
+ }] });
8824
+
8297
8825
  /*
8298
8826
  * Copyright (c) 2018-2024 Porsche Informatik. All Rights Reserved.
8299
8827
  * This software is released under MIT license.
@@ -8332,7 +8860,8 @@ class ClrAddonsModule {
8332
8860
  ClrEnumFilterModule,
8333
8861
  ClrDateFilterModule,
8334
8862
  ClrDaterangepickerModule,
8335
- ClrIfWarningModule] }); }
8863
+ ClrIfWarningModule,
8864
+ ClrActionPanelModule] }); }
8336
8865
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrAddonsModule, imports: [ClrViewEditSectionModule,
8337
8866
  ClrPagerModule,
8338
8867
  ClrDotPagerModule,
@@ -8364,7 +8893,8 @@ class ClrAddonsModule {
8364
8893
  ClrEnumFilterModule,
8365
8894
  ClrDateFilterModule,
8366
8895
  ClrDaterangepickerModule,
8367
- ClrIfWarningModule] }); }
8896
+ ClrIfWarningModule,
8897
+ ClrActionPanelModule] }); }
8368
8898
  }
8369
8899
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrAddonsModule, decorators: [{
8370
8900
  type: NgModule,
@@ -8402,6 +8932,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
8402
8932
  ClrDateFilterModule,
8403
8933
  ClrDaterangepickerModule,
8404
8934
  ClrIfWarningModule,
8935
+ ClrActionPanelModule,
8405
8936
  ],
8406
8937
  }]
8407
8938
  }] });
@@ -8442,5 +8973,5 @@ function escapeRegex(s) {
8442
8973
  * Generated bundle index. Do not edit.
8443
8974
  */
8444
8975
 
8445
- export { ACShape, AcceptanceDateShape, AcceptedBrands, AccessoriesShape, AccessoryPartsShape, AudiBrandShape, AwardWinnerPremiumShape, BIG_ENDIAN, BlocksGroupForwardShape, BrochureShape, BundleForwardShape, BusinessCustomersCommercialShape, BusinessCustomersPrivateShape, BusinessPartnerWithCar, CLR_BLANK_OPTION, CONTENT_PROVIDER, CalculatorForwardShape, CaliforniaServiceShape, CaliforniaSpecialistShape, CampaignOutdatedShape, CampaignShape, CarOffSite, CarOnSite, 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, ClrIfWarning, ClrIfWarningModule, 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, CompletedByDateShape, 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, HISTORY_NOTIFICATION_URL_PROVIDER, HISTORY_PROVIDER, HistoryProvider, HybridShape, InternalPartForwardShape, InvoiceReadyShape, InvoiceShape, ItemsForwardShape, ItemsReceiveShape, 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, ParkingLocation, PartNonStockForwardShape, PartsForwardShape, PartsNonStockShape, PartsShape, PayloadShape, PerformanceShape, PetrolShape, PlusServiceShape, PopoverPositions, PorscheBrandShape, PowerShape, PowerTrainShape, PriceTypeSwitchShape, QualifiedWorkshopShape, RepeatRepairShape, ReturnDateShape, 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, VinShape, VirtualRealityShape, VsfSearchShape, WCPShape, WheelToWheelShape, WindscreenWashShape, WrenchForward, YEAR, acceptanceDateIcon, accessoriesIcon, accessoryPartsIcon, airConditionerIcon, allIcons, audiBrandIcon, awardWinnerPremiumIcon, blocksGroupForwardIcon, brochureIcon, bundleForwardIcon, businessCustomersCommercialIcon, businessCustomersPrivateIcon, businessPartnerWithCarIcon, calculatorForwardIcon, californiaServiceIcon, californiaSpecialistIcon, campaignIcon, campaignOutdatedIcon, carOffSite, carOnSite, carPickupServiceIcon, carWashIcon, certifiedRepairIcon, certifiedRetailerIcon, clrIconSVG, completedByDateIcon, configuratorCommercialIcon, configuratorPrivateIcon, consumptionIcon, contactDealerIcon, cupraBrandIcon, customersCenterIcon, dieselIcon, dollarBillForwardIcon, dollarBillPartialIcon, driversAssistanceIcon, dwaBrandIcon, efficiencyIcon, electricCarsIcon, electricCarsServiceIcon, electricityIcon, emissionIcon, energyIcon, engineIcon, escapeHtml, escapeRegex, expressServiceIcon, exteriorIcon, externalPartForwardIcon, findACarIcon, fleetServiceCommercialIcon, fleetServicePrivateIcon, gasCarsServiceIcon, gasIcon, hybridIcon, internalPartForwardIcon, invoiceIcon, invoiceReadyIcon, itemsForwardIcon, itemsRecieveIcon, loadingVolumeIcon, locateIcon, newCarCommercialIcon, newCarPrivateIcon, newCarUtilityVehicleIcon, nightServiceIcon, offersIcon, onCallDutyIcon, openSatIcon, paintMaterialForwardIcon, paintMaterialIcon, paintShopIcon, parkingLocationIcon, partsForwardIcon, partsIcon, partsNonStockForwardIcon, partsNonStockIcon, payloadIcon, performanceIcon, petrolIcon, plusServiceIcon, porscheBrandIcon, powerIcon, powerTrainIcon, priceTypeSwitchIcon, qualifiedWorkshopIcon, repeatRepairIcon, returnDateIcon, roadsideAssistanceIcon, routeIcon, seatAirIcon, seatBrandIcon, seatIcon, serviceBellIcon, serviceIcon, sizeIcon, skodaBrandIcon, stockLocatorCommercialIcon, stockLocatorPrivateIcon, taskAndAppointmentIcon, taxiDealerIcon, textForwardIcon, topcardIcon, touaregServiceIcon, transmissionAutomaticIcon, transmissionManualIcon, usedCarCommercialIcon, usedCarPrivateIcon, vehicleConversionIcon, view360Icon, vinIcon, virtualRealityIcon, volkswagenIcon, vsfSearchIcon, vwBrandIcon, vwnBrandIcon, wcpIcon, wheelToWheelIcon, windscreenWashIcon, wrenchForwardIcon };
8976
+ export { ACShape, AcceptanceDateShape, AcceptedBrands, AccessoriesShape, AccessoryPartsShape, AudiBrandShape, AwardWinnerPremiumShape, BIG_ENDIAN, BlocksGroupForwardShape, BrochureShape, BundleForwardShape, BusinessCustomersCommercialShape, BusinessCustomersPrivateShape, BusinessPartnerWithCar, CLR_BLANK_OPTION, CONTENT_PROVIDER, CalculatorForwardShape, CaliforniaServiceShape, CaliforniaSpecialistShape, CampaignOutdatedShape, CampaignShape, CarOffSite, CarOnSite, CarPickupServiceShape, CarWashShape, CertifiedRepairShape, CertifiedRetailerShape, ClrActionPanel, ClrActionPanelContainer, ClrActionPanelContainerContent, ClrActionPanelContainerFooter, ClrActionPanelModule, 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, ClrIfWarning, ClrIfWarningModule, 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, CompletedByDateShape, 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, HISTORY_NOTIFICATION_URL_PROVIDER, HISTORY_PROVIDER, HistoryProvider, HybridShape, InternalPartForwardShape, InvoiceReadyShape, InvoiceShape, ItemsForwardShape, ItemsReceiveShape, 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, ParkingLocation, PartNonStockForwardShape, PartsForwardShape, PartsNonStockShape, PartsShape, PayloadShape, PerformanceShape, PetrolShape, PlusServiceShape, PopoverPositions, PorscheBrandShape, PowerShape, PowerTrainShape, PriceTypeSwitchShape, QualifiedWorkshopShape, RepeatRepairShape, ReturnDateShape, RoadsideAssistanceShape, RouteShape, SEPARATOR_TEXT_DEFAULT, SeatAirShape, SeatBrandShape, SeatShape, ServiceBellShape, ServiceShape, SizeShape, SkodaBrandShape, StatePersistenceKeyDirective, StockLocatorCommercialShape, StockLocatorPrivateShape, TRANSLATIONS, TaskAndAppointment, TaxiDealerShape, TextForward, TimeModel, TopcardShape, TouaregServiceShape, TransmissionAutomaticShape, TransmissionManualShape, TreetableCellRenderer, TreetableHeaderRenderer, TreetableMainRenderer, TreetableRowRenderer, USER_INPUT_REGEX, UsedCarCommercialShape, UsedCarPrivateShape, VWBrandShape, VWNBrandShape, VWShape, VehicleConversionShape, View360Shape, VinShape, VirtualRealityShape, VsfSearchShape, WCPShape, WheelToWheelShape, WindscreenWashShape, WrenchForward, YEAR, acceptanceDateIcon, accessoriesIcon, accessoryPartsIcon, airConditionerIcon, allIcons, audiBrandIcon, awardWinnerPremiumIcon, blocksGroupForwardIcon, brochureIcon, bundleForwardIcon, businessCustomersCommercialIcon, businessCustomersPrivateIcon, businessPartnerWithCarIcon, calculatorForwardIcon, californiaServiceIcon, californiaSpecialistIcon, campaignIcon, campaignOutdatedIcon, carOffSite, carOnSite, carPickupServiceIcon, carWashIcon, certifiedRepairIcon, certifiedRetailerIcon, clrIconSVG, completedByDateIcon, configuratorCommercialIcon, configuratorPrivateIcon, consumptionIcon, contactDealerIcon, cupraBrandIcon, customersCenterIcon, dieselIcon, dollarBillForwardIcon, dollarBillPartialIcon, driversAssistanceIcon, dwaBrandIcon, efficiencyIcon, electricCarsIcon, electricCarsServiceIcon, electricityIcon, emissionIcon, energyIcon, engineIcon, escapeHtml, escapeRegex, expressServiceIcon, exteriorIcon, externalPartForwardIcon, findACarIcon, fleetServiceCommercialIcon, fleetServicePrivateIcon, gasCarsServiceIcon, gasIcon, hybridIcon, internalPartForwardIcon, invoiceIcon, invoiceReadyIcon, itemsForwardIcon, itemsRecieveIcon, loadingVolumeIcon, locateIcon, newCarCommercialIcon, newCarPrivateIcon, newCarUtilityVehicleIcon, nightServiceIcon, offersIcon, onCallDutyIcon, openSatIcon, paintMaterialForwardIcon, paintMaterialIcon, paintShopIcon, parkingLocationIcon, partsForwardIcon, partsIcon, partsNonStockForwardIcon, partsNonStockIcon, payloadIcon, performanceIcon, petrolIcon, plusServiceIcon, porscheBrandIcon, powerIcon, powerTrainIcon, priceTypeSwitchIcon, qualifiedWorkshopIcon, repeatRepairIcon, returnDateIcon, roadsideAssistanceIcon, routeIcon, seatAirIcon, seatBrandIcon, seatIcon, serviceBellIcon, serviceIcon, sizeIcon, skodaBrandIcon, stockLocatorCommercialIcon, stockLocatorPrivateIcon, taskAndAppointmentIcon, taxiDealerIcon, textForwardIcon, topcardIcon, touaregServiceIcon, transmissionAutomaticIcon, transmissionManualIcon, usedCarCommercialIcon, usedCarPrivateIcon, vehicleConversionIcon, view360Icon, vinIcon, virtualRealityIcon, volkswagenIcon, vsfSearchIcon, vwBrandIcon, vwnBrandIcon, wcpIcon, wheelToWheelIcon, windscreenWashIcon, wrenchForwardIcon };
8446
8977
  //# sourceMappingURL=clr-addons.mjs.map