@porscheinformatik/clr-addons 19.6.1 → 19.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,17 +1,18 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, NgModule, Injectable, EventEmitter, Output, Input, Directive, ViewChild, ContentChildren, TemplateRef, ViewChildren, HostBinding, ElementRef, Renderer2, forwardRef, Inject, ContentChild, Optional, HostListener, InjectionToken, ChangeDetectionStrategy, isSignal, LOCALE_ID, Self } from '@angular/core';
2
+ import { Component, NgModule, Injectable, EventEmitter, Output, Input, Directive, ViewChild, ContentChildren, TemplateRef, ViewChildren, HostBinding, ElementRef, Renderer2, forwardRef, Inject, ContentChild, Optional, inject, ChangeDetectorRef, output, ChangeDetectionStrategy, DestroyRef, signal, input, IterableDiffers, ViewContainerRef, effect, InjectionToken, isSignal, HostListener, LOCALE_ID, Self } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
- import { CommonModule, DOCUMENT, getLocaleDateFormat, FormatWidth } from '@angular/common';
4
+ import { CommonModule, DOCUMENT, NgForOf, getLocaleDateFormat, FormatWidth } from '@angular/common';
5
5
  import { ClarityIcons, arrowIcon, angleIcon, timesIcon, trashIcon, plusCircleIcon, exclamationCircleIcon, searchIcon, ellipsisVerticalIcon, pencilIcon, historyIcon as historyIcon$1, treeViewIcon, organizationIcon, calendarIcon, checkCircleIcon, windowCloseIcon, exclamationTriangleIcon } from '@cds/core/icon';
6
6
  import * as i2 from '@clr/angular';
7
7
  import { ClarityModule, ClrFormsModule, ClrDropdown, ClrForm, ClrAlert, ClrAlignment, ClrSide, ClrAxis, ClrPopoverToggleService, ClrPopoverEventsService, ClrPopoverPositionService, ClrIconModule, ClrDropdownModule, ClrDatagridSortOrder, DatagridPropertyComparator, ClrDatagridPagination, ClrDatagridFilter, ClrDatagridColumn, ClrDateContainer, ClrLabel, ClrControlHelper, ClrControlError, ClrControlSuccess, ClrDatepickerModule } from '@clr/angular';
8
8
  import * as i3$1 from '@angular/forms';
9
- import { FormsModule, NG_VALIDATORS, NgControl, NG_VALUE_ACCESSOR, FormControl, ReactiveFormsModule, NgModel } from '@angular/forms';
10
- import { Subject, BehaviorSubject, timer as timer$1, asyncScheduler, interval, ReplaySubject, takeUntil as takeUntil$1, of, delay } from 'rxjs';
11
- import { takeUntil, take, observeOn } from 'rxjs/operators';
9
+ import { FormsModule, NG_VALIDATORS, NgControl, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormControl, NgModel } from '@angular/forms';
10
+ import { Subject, BehaviorSubject, timer as timer$1, asyncScheduler, interval, debounceTime, fromEvent, ReplaySubject, takeUntil as takeUntil$1, of, delay } from 'rxjs';
11
+ import { takeUntil, take, observeOn, debounceTime as debounceTime$1 } from 'rxjs/operators';
12
12
  import * as i3 from '@angular/router';
13
13
  import { RouterModule } from '@angular/router';
14
14
  import { trigger, transition, style, animate, state } from '@angular/animations';
15
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
15
16
  import * as i1$1 from '@angular/common/http';
16
17
  import '@cds/core/icon/register.js';
17
18
 
@@ -3578,27 +3579,404 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
3578
3579
  * The full license information can be found in LICENSE in the root directory of this project.
3579
3580
  */
3580
3581
 
3582
+ /*
3583
+ * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
3584
+ * This software is released under MIT license.
3585
+ * The full license information can be found in LICENSE in the root directory of this project.
3586
+ */
3587
+ var SelectionType;
3588
+ (function (SelectionType) {
3589
+ SelectionType[SelectionType["None"] = 0] = "None";
3590
+ SelectionType[SelectionType["Multi"] = 1] = "Multi";
3591
+ })(SelectionType || (SelectionType = {}));
3592
+
3593
+ /*
3594
+ * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
3595
+ * This software is released under MIT license.
3596
+ * The full license information can be found in LICENSE in the root directory of this project.
3597
+ */
3598
+ class Sort {
3599
+ constructor() {
3600
+ this._reverse = false;
3601
+ this._change = new Subject();
3602
+ }
3603
+ get comparator() {
3604
+ return this._comparator;
3605
+ }
3606
+ set comparator(value) {
3607
+ this._comparator = value;
3608
+ this.emitChange();
3609
+ }
3610
+ get reverse() {
3611
+ return this._reverse;
3612
+ }
3613
+ set reverse(value) {
3614
+ this._reverse = value;
3615
+ this.emitChange();
3616
+ }
3617
+ // We do not want to expose the Subject itself, but the Observable which is read-only
3618
+ get change() {
3619
+ return this._change.asObservable();
3620
+ }
3621
+ /**
3622
+ * Sets a comparator as the current one, or toggles reverse if the comparator is already used. The
3623
+ * optional forceReverse input parameter allows to override that toggling behavior by sorting in
3624
+ * reverse order if `true`.
3625
+ *
3626
+ * @memberof Sort
3627
+ */
3628
+ toggle(sortBy, forceReverse) {
3629
+ if (this.comparator === sortBy) {
3630
+ this._reverse = typeof forceReverse !== 'undefined' ? forceReverse || !this._reverse : !this._reverse;
3631
+ }
3632
+ else {
3633
+ this._comparator = sortBy;
3634
+ this._reverse = typeof forceReverse !== 'undefined' ? forceReverse : false;
3635
+ }
3636
+ this.emitChange();
3637
+ }
3638
+ clear() {
3639
+ this.comparator = null;
3640
+ }
3641
+ compare(a, b) {
3642
+ return (this.reverse ? -1 : 1) * this.comparator.compare(a, b);
3643
+ }
3644
+ emitChange() {
3645
+ this._change.next(this);
3646
+ }
3647
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: Sort, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3648
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: Sort }); }
3649
+ }
3650
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: Sort, decorators: [{
3651
+ type: Injectable
3652
+ }], ctorParameters: () => [] });
3653
+
3654
+ /*
3655
+ * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
3656
+ * This software is released under MIT license.
3657
+ * The full license information can be found in LICENSE in the root directory of this project.
3658
+ */
3659
+ class Items {
3660
+ constructor() {
3661
+ this._all = [];
3662
+ this._displayed = [];
3663
+ this._change = new Subject();
3664
+ this._sort = inject((Sort));
3665
+ this._sort.change.pipe(takeUntilDestroyed()).subscribe(() => {
3666
+ this.sortItems();
3667
+ });
3668
+ }
3669
+ get all() {
3670
+ return this._all;
3671
+ }
3672
+ addItems(items) {
3673
+ this._all = this._all.concat([items.slice()]);
3674
+ this._displayed = this._displayed.concat([items.slice()]);
3675
+ this.emitChange();
3676
+ }
3677
+ get displayed() {
3678
+ return this._displayed;
3679
+ }
3680
+ get change() {
3681
+ return this._change.asObservable();
3682
+ }
3683
+ /**
3684
+ * Checks if we don't have data to process yet, to abort early operations
3685
+ */
3686
+ get uninitialized() {
3687
+ return !this._all;
3688
+ }
3689
+ emitChange() {
3690
+ this._change.next(this.displayed);
3691
+ }
3692
+ sortItems() {
3693
+ if (this.uninitialized) {
3694
+ return;
3695
+ }
3696
+ if (this._sort.comparator) {
3697
+ this._displayed.forEach(subArray => {
3698
+ subArray.sort((a, b) => this._sort.compare(a, b));
3699
+ });
3700
+ }
3701
+ else {
3702
+ this._displayed = this._all.map(subArray => subArray.slice());
3703
+ }
3704
+ this.emitChange();
3705
+ }
3706
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: Items, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3707
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: Items }); }
3708
+ }
3709
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: Items, decorators: [{
3710
+ type: Injectable
3711
+ }], ctorParameters: () => [] });
3712
+
3713
+ /*
3714
+ * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
3715
+ * This software is released under MIT license.
3716
+ * The full license information can be found in LICENSE in the root directory of this project.
3717
+ */
3718
+ class Selection {
3719
+ constructor() {
3720
+ this._change = new Subject();
3721
+ this._allSelected = new Subject();
3722
+ //debounce and batch changes before emitting them to subscribers
3723
+ this._valueCollector = new Subject();
3724
+ this._selectionType = SelectionType.None;
3725
+ this._items = inject(Items);
3726
+ this._valueCollector.pipe(debounceTime(0), takeUntilDestroyed()).subscribe(() => this.emitChange());
3727
+ }
3728
+ get selectionType() {
3729
+ return this._selectionType;
3730
+ }
3731
+ set selectionType(value) {
3732
+ if (value === this.selectionType) {
3733
+ return;
3734
+ }
3735
+ this._selectionType = value;
3736
+ if (value === SelectionType.None) {
3737
+ delete this.current;
3738
+ }
3739
+ else {
3740
+ this.updateCurrent([], false);
3741
+ }
3742
+ }
3743
+ get current() {
3744
+ return this._current;
3745
+ }
3746
+ set current(value) {
3747
+ this.updateCurrent(value, true);
3748
+ }
3749
+ updateCurrent(value, emit) {
3750
+ this._current = value;
3751
+ if (emit) {
3752
+ this._valueCollector.next(value);
3753
+ }
3754
+ }
3755
+ get change() {
3756
+ return this._change.asObservable();
3757
+ }
3758
+ get allSelectedChange() {
3759
+ return this._allSelected.asObservable();
3760
+ }
3761
+ isSelected(item) {
3762
+ return this.current.indexOf(item) >= 0;
3763
+ }
3764
+ setSelected(item, selected) {
3765
+ const index = this.current ? this.current.indexOf(item) : -1;
3766
+ if (index >= 0 && !selected) {
3767
+ this.deselectItem(index);
3768
+ }
3769
+ else if (index < 0 && selected) {
3770
+ this.selectItem(item);
3771
+ }
3772
+ }
3773
+ isAllSelected() {
3774
+ const displayedItems = this._items.displayed;
3775
+ const nbDisplayed = displayedItems.length;
3776
+ if (nbDisplayed < 1) {
3777
+ return false;
3778
+ }
3779
+ const flattenedDisplayedItems = displayedItems.flat();
3780
+ const selectedItems = flattenedDisplayedItems.filter(item => this.current.indexOf(item) > -1);
3781
+ return selectedItems.length === flattenedDisplayedItems.length;
3782
+ }
3783
+ toggleAll() {
3784
+ const isAllSelected = this.isAllSelected();
3785
+ if (isAllSelected) {
3786
+ this._items.displayed.forEach(items => {
3787
+ items.forEach(item => {
3788
+ const currentIndex = this.current.indexOf(item);
3789
+ if (currentIndex > -1) {
3790
+ this.deselectItem(currentIndex);
3791
+ }
3792
+ });
3793
+ });
3794
+ }
3795
+ else {
3796
+ this._items.displayed.forEach(items => {
3797
+ items.forEach(item => {
3798
+ if (this.current.indexOf(item) < 0) {
3799
+ this.selectItem(item);
3800
+ }
3801
+ });
3802
+ });
3803
+ }
3804
+ this._allSelected.next(!isAllSelected);
3805
+ }
3806
+ selectItem(item) {
3807
+ this.current = this.current.concat(item);
3808
+ }
3809
+ deselectItem(indexOfItem) {
3810
+ this.current = this.current.slice(0, indexOfItem).concat(this.current.slice(indexOfItem + 1));
3811
+ }
3812
+ emitChange() {
3813
+ this._change.next(this.current);
3814
+ }
3815
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: Selection, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3816
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: Selection }); }
3817
+ }
3818
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: Selection, decorators: [{
3819
+ type: Injectable
3820
+ }], ctorParameters: () => [] });
3821
+
3822
+ /*
3823
+ * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
3824
+ * This software is released under MIT license.
3825
+ * The full license information can be found in LICENSE in the root directory of this project.
3826
+ */
3827
+ var ClrTreetableSortOrder;
3828
+ (function (ClrTreetableSortOrder) {
3829
+ ClrTreetableSortOrder[ClrTreetableSortOrder["UNSORTED"] = 0] = "UNSORTED";
3830
+ ClrTreetableSortOrder[ClrTreetableSortOrder["ASC"] = 1] = "ASC";
3831
+ ClrTreetableSortOrder[ClrTreetableSortOrder["DESC"] = -1] = "DESC";
3832
+ })(ClrTreetableSortOrder || (ClrTreetableSortOrder = {}));
3833
+
3581
3834
  /*
3582
3835
  * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
3583
3836
  * This software is released under MIT license.
3584
3837
  * The full license information can be found in LICENSE in the root directory of this project.
3585
3838
  */
3586
3839
  class ClrTreetableColumn {
3840
+ get sortBy() {
3841
+ return this._sortBy;
3842
+ }
3843
+ set sortBy(comparator) {
3844
+ this._sortBy = comparator;
3845
+ }
3846
+ get sortOrder() {
3847
+ return this._sortOrder;
3848
+ }
3849
+ set sortOrder(value) {
3850
+ if (typeof value === 'undefined') {
3851
+ return;
3852
+ }
3853
+ // nothing to do when incoming sort order is the same
3854
+ if (this._sortOrder === value) {
3855
+ return;
3856
+ }
3857
+ switch (value) {
3858
+ case ClrTreetableSortOrder.ASC:
3859
+ this.sort(false);
3860
+ break;
3861
+ case ClrTreetableSortOrder.DESC:
3862
+ this.sort(true);
3863
+ break;
3864
+ // UNSORTED when neither ASC or DESC
3865
+ case ClrTreetableSortOrder.UNSORTED:
3866
+ default:
3867
+ this._sort.clear();
3868
+ break;
3869
+ }
3870
+ }
3871
+ get sortDirection() {
3872
+ return this._sortDirection;
3873
+ }
3874
+ constructor() {
3875
+ this._sort = inject((Sort));
3876
+ this._cdr = inject(ChangeDetectorRef);
3877
+ this._sortOrder = ClrTreetableSortOrder.UNSORTED;
3878
+ this.sortOrderChange = output({ alias: 'clrTtSortOrderChange' });
3879
+ this.listenForSortingChanges();
3880
+ }
3881
+ get ariaSort() {
3882
+ switch (this._sortOrder) {
3883
+ case ClrTreetableSortOrder.ASC:
3884
+ return 'ascending';
3885
+ case ClrTreetableSortOrder.DESC:
3886
+ return 'descending';
3887
+ case ClrTreetableSortOrder.UNSORTED:
3888
+ default:
3889
+ return 'none';
3890
+ }
3891
+ }
3892
+ get sortable() {
3893
+ return !!this._sortBy;
3894
+ }
3895
+ sort(reverse) {
3896
+ if (!this.sortable) {
3897
+ return;
3898
+ }
3899
+ this._sort.toggle(this._sortBy, reverse);
3900
+ // setting the private variable to not retrigger the setter logic
3901
+ this._sortOrder = this._sort.reverse ? ClrTreetableSortOrder.DESC : ClrTreetableSortOrder.ASC;
3902
+ // Sets the correct icon for current sort order
3903
+ this._sortDirection = this._sortOrder === ClrTreetableSortOrder.DESC ? 'down' : 'up';
3904
+ this.sortOrderChange.emit(this._sortOrder);
3905
+ }
3906
+ listenForSortingChanges() {
3907
+ this._sort.change.pipe(takeUntilDestroyed()).subscribe(sort => {
3908
+ // Need to manually mark the component to be checked
3909
+ // for both activating and deactivating sorting
3910
+ this._cdr.markForCheck();
3911
+ // We're only listening to make sure we emit an event when the column goes from sorted to unsorted
3912
+ if (this.sortOrder !== ClrTreetableSortOrder.UNSORTED && sort.comparator !== this._sortBy) {
3913
+ this._sortOrder = ClrTreetableSortOrder.UNSORTED;
3914
+ this.sortOrderChange.emit(this._sortOrder);
3915
+ this._sortDirection = null;
3916
+ }
3917
+ });
3918
+ }
3587
3919
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ClrTreetableColumn, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3588
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.6", type: ClrTreetableColumn, isStandalone: false, selector: "clr-tt-column", host: { attributes: { "role": "columnheader" }, properties: { "class.treetable-column": "true" } }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true }); }
3920
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.6", type: ClrTreetableColumn, isStandalone: false, selector: "clr-tt-column", inputs: { sortBy: ["clrTtSortBy", "sortBy"], sortOrder: ["clrTtSortOrder", "sortOrder"] }, outputs: { sortOrderChange: "clrTtSortOrderChange" }, host: { attributes: { "role": "columnheader" }, properties: { "class.treetable-column": "true", "attr.aria-sort": "ariaSort" } }, ngImport: i0, template: `
3921
+ @if(sortable) {
3922
+ <button class="treetable-column-title" (click)="sort()" type="button">
3923
+ <ng-container *ngTemplateOutlet="columnTitle" />
3924
+ <cds-icon
3925
+ *ngIf="sortDirection"
3926
+ shape="arrow"
3927
+ [attr.direction]="sortDirection"
3928
+ aria-hidden="true"
3929
+ class="sort-icon"
3930
+ />
3931
+ </button>
3932
+ } @else {
3933
+ <ng-container *ngTemplateOutlet="columnTitle" />
3934
+ }
3935
+
3936
+ <ng-template #columnTitle>
3937
+ <ng-content />
3938
+ </ng-template>
3939
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CdsIconCustomTag, selector: "cds-icon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3589
3940
  }
3590
3941
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ClrTreetableColumn, decorators: [{
3591
3942
  type: Component,
3592
3943
  args: [{
3593
3944
  selector: 'clr-tt-column',
3594
- template: '<ng-content></ng-content>',
3945
+ template: `
3946
+ @if(sortable) {
3947
+ <button class="treetable-column-title" (click)="sort()" type="button">
3948
+ <ng-container *ngTemplateOutlet="columnTitle" />
3949
+ <cds-icon
3950
+ *ngIf="sortDirection"
3951
+ shape="arrow"
3952
+ [attr.direction]="sortDirection"
3953
+ aria-hidden="true"
3954
+ class="sort-icon"
3955
+ />
3956
+ </button>
3957
+ } @else {
3958
+ <ng-container *ngTemplateOutlet="columnTitle" />
3959
+ }
3960
+
3961
+ <ng-template #columnTitle>
3962
+ <ng-content />
3963
+ </ng-template>
3964
+ `,
3595
3965
  host: {
3596
3966
  '[class.treetable-column]': 'true',
3967
+ '[attr.aria-sort]': 'ariaSort',
3597
3968
  role: 'columnheader',
3598
3969
  },
3970
+ changeDetection: ChangeDetectionStrategy.OnPush,
3599
3971
  standalone: false,
3600
3972
  }]
3601
- }] });
3973
+ }], ctorParameters: () => [], propDecorators: { sortBy: [{
3974
+ type: Input,
3975
+ args: ['clrTtSortBy']
3976
+ }], sortOrder: [{
3977
+ type: Input,
3978
+ args: ['clrTtSortOrder']
3979
+ }] } });
3602
3980
 
3603
3981
  /*
3604
3982
  * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
@@ -3694,23 +4072,51 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
3694
4072
  */
3695
4073
  ClarityIcons.addIcons(angleIcon);
3696
4074
  class ClrTreetableRow {
3697
- set actionOverflow(actionOverflow) {
3698
- this.showActionOverflow = !!actionOverflow;
3699
- this.showEmptyActionOverflow = !this.showActionOverflow;
3700
- this.hasActionOverflow.emit(this.showActionOverflow);
3701
- }
3702
4075
  constructor() {
4076
+ this.selection = inject(Selection);
4077
+ this._cdr = inject(ChangeDetectorRef);
4078
+ this._destroyRef = inject(DestroyRef);
4079
+ this._selected = false;
4080
+ this.shouldAnimate = signal(false);
3703
4081
  this.expanded = false;
3704
4082
  this.clickable = true;
3705
4083
  this.expandable = false;
4084
+ this.clrTtItem = input();
3706
4085
  this.hasActionOverflow = new EventEmitter();
3707
4086
  this.expandedChange = new EventEmitter();
4087
+ this.selectedChanged = new EventEmitter(false);
3708
4088
  this.showActionOverflow = false;
3709
4089
  this.showEmptyActionOverflow = false;
3710
4090
  this.showClickClass = false;
4091
+ this.SelectionType = SelectionType;
4092
+ }
4093
+ set actionOverflow(actionOverflow) {
4094
+ this.showActionOverflow = !!actionOverflow;
4095
+ this.showEmptyActionOverflow = !this.showActionOverflow;
4096
+ this.hasActionOverflow.emit(this.showActionOverflow);
3711
4097
  }
3712
4098
  ngOnInit() {
3713
4099
  this.showClickClass = this.expandable && this.clickable;
4100
+ // We need to trigger change detection when the checkbox in overall treetable is clicked
4101
+ // because of ChangeDetectionStrategy.OnPush
4102
+ this.selection.allSelectedChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {
4103
+ this._cdr.markForCheck();
4104
+ });
4105
+ }
4106
+ onExpandCollapseClick() {
4107
+ // Only animate on user click (not on sorting or initial rendering)
4108
+ this.shouldAnimate.set(true);
4109
+ this.toggleExpand();
4110
+ // Remove .animate after animation to prevent unwanted transitions
4111
+ setTimeout(() => {
4112
+ this.shouldAnimate.set(false);
4113
+ }, 350);
4114
+ }
4115
+ toggle(selected = !this.selected) {
4116
+ if (selected !== this.selected) {
4117
+ this.selected = selected;
4118
+ this.selectedChanged.emit(selected);
4119
+ }
3714
4120
  }
3715
4121
  toggleExpand() {
3716
4122
  if (this.expandable) {
@@ -3720,47 +4126,32 @@ class ClrTreetableRow {
3720
4126
  }
3721
4127
  onRowClick(event) {
3722
4128
  if (this.clickable && !event.target.closest('.treetable-action-trigger')) {
3723
- this.toggleExpand();
4129
+ this.onExpandCollapseClick();
3724
4130
  }
3725
4131
  }
3726
4132
  onCaretClick() {
3727
4133
  if (!this.clickable) {
3728
- this.toggleExpand();
4134
+ this.onExpandCollapseClick();
4135
+ }
4136
+ }
4137
+ get selected() {
4138
+ if (this.selection.selectionType === SelectionType.None) {
4139
+ return this._selected;
4140
+ }
4141
+ else {
4142
+ return this.selection.isSelected(this.clrTtItem());
3729
4143
  }
3730
4144
  }
4145
+ set selected(value) {
4146
+ this.selection.setSelected(this.clrTtItem(), value);
4147
+ }
3731
4148
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ClrTreetableRow, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3732
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.6", type: ClrTreetableRow, isStandalone: false, selector: "clr-tt-row", inputs: { expanded: ["clrExpanded", "expanded"], clickable: ["clrClickable", "clickable"], expandable: ["clrExpandable", "expandable"] }, outputs: { hasActionOverflow: "hasActionOverflow", expandedChange: "clrExpandedChange" }, host: { properties: { "class.treetable-row-wrapper": "true" } }, queries: [{ propertyName: "actionOverflow", first: true, predicate: ClrTreetableActionOverflow, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2018-2024 Porsche Informatik. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n [ngClass]=\"{'clr-row-clickable': showClickClass}\"\n class=\"clr-tt-node-content treetable-row\"\n (click)=\"onRowClick($event)\"\n>\n <ng-content select=\"clr-tt-action-overflow\"></ng-content>\n <clr-tt-action-overflow *ngIf=\"showActionOverflow && showEmptyActionOverflow\" [empty]=\"true\"></clr-tt-action-overflow>\n <div class=\"treetable-scrolling-cells\">\n <div class=\"treetable-expandable-caret\" *ngIf=\"expandable\">\n <button type=\"button\" class=\"treetable-expandable-caret-button\" (click)=\"onCaretClick()\">\n <cds-icon\n shape=\"angle\"\n [attr.direction]=\"expanded ? 'down' : 'right'\"\n class=\"treetable-expandable-caret-icon\"\n ></cds-icon>\n </button>\n </div>\n\n <ng-content select=\"clr-tt-cell\"></ng-content>\n </div>\n</div>\n<div [@collapseExpandAnimation]=\"expanded\">\n <ng-content select=\"clr-tt-row\"></ng-content>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: ClrTreetableActionOverflow, selector: "clr-tt-action-overflow", inputs: ["empty"] }], animations: [
3733
- trigger('collapseExpandAnimation', [
3734
- state('false', style({ display: 'none' })),
3735
- state('true', style({ display: 'block' })),
3736
- transition('false => true', [
3737
- style({ opacity: 0, height: 0, overflow: 'hidden', display: 'block' }),
3738
- animate('300ms', style({ opacity: 1, height: '*' })),
3739
- ]),
3740
- transition('true => false', [
3741
- style({ opacity: 1, height: '*', overflow: 'hidden' }),
3742
- animate('300ms', style({ opacity: 0, height: 0 })),
3743
- ]),
3744
- ]),
3745
- ] }); }
4149
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.6", type: ClrTreetableRow, isStandalone: false, selector: "clr-tt-row", inputs: { expanded: { classPropertyName: "expanded", publicName: "clrExpanded", isSignal: false, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clrClickable", isSignal: false, isRequired: false, transformFunction: null }, expandable: { classPropertyName: "expandable", publicName: "clrExpandable", isSignal: false, isRequired: false, transformFunction: null }, clrTtItem: { classPropertyName: "clrTtItem", publicName: "clrTtItem", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { hasActionOverflow: "hasActionOverflow", expandedChange: "clrExpandedChange", selectedChanged: "clrTtSelectedChange" }, host: { properties: { "class.treetable-row-wrapper": "true", "class.treetable-selected": "selected" } }, queries: [{ propertyName: "actionOverflow", first: true, predicate: ClrTreetableActionOverflow, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n [ngClass]=\"{'clr-row-clickable': showClickClass, 'treetable-selected': selected}\"\n class=\"clr-tt-node-content treetable-row\"\n (click)=\"onRowClick($event)\"\n>\n @if(selection.selectionType === SelectionType.Multi){\n <div class=\"clr-checkbox-wrapper treetable-row-selection treetable-cell\">\n <input type=\"checkbox\" [ngModel]=\"selected\" (ngModelChange)=\"toggle($event)\" (click)=\"$event.stopPropagation()\" />\n </div>\n }\n\n <ng-content select=\"clr-tt-action-overflow\"></ng-content>\n <clr-tt-action-overflow *ngIf=\"showActionOverflow && showEmptyActionOverflow\" [empty]=\"true\"></clr-tt-action-overflow>\n <div class=\"treetable-scrolling-cells\">\n <div class=\"treetable-expandable-caret\" *ngIf=\"expandable\">\n <button type=\"button\" class=\"treetable-expandable-caret-button\" (click)=\"onCaretClick()\">\n <cds-icon\n shape=\"angle\"\n [attr.direction]=\"expanded ? 'down' : 'right'\"\n class=\"treetable-expandable-caret-icon\"\n ></cds-icon>\n </button>\n </div>\n\n <ng-content select=\"clr-tt-cell\"></ng-content>\n </div>\n</div>\n\n<div\n class=\"treetable-row-animation-container\"\n [class.expanded]=\"expanded\"\n [class.collapsed]=\"!expanded\"\n [class.animate]=\"shouldAnimate()\"\n>\n <div class=\"treetable-row-animation-wrapper\">\n <ng-content select=\"clr-tt-row\"></ng-content>\n </div>\n</div>\n", styles: [".treetable-row-animation-container.expanded{display:grid;grid-template-rows:1fr;opacity:1}.treetable-row-animation-container.collapsed{display:none;grid-template-rows:0fr;opacity:0}.treetable-row-animation-container.animate{transition:grid-template-rows .3s ease,opacity .3s ease,display .3s ease allow-discrete}@starting-style{.treetable-row-animation-container.animate.expanded{grid-template-rows:0fr;opacity:0}}@starting-style{.treetable-row-animation-container.animate.collapsed{grid-template-rows:1fr;opacity:1}}.treetable-row-animation-wrapper{min-height:0;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i3$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrTreetableActionOverflow, selector: "clr-tt-action-overflow", inputs: ["empty"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3746
4150
  }
3747
4151
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ClrTreetableRow, decorators: [{
3748
4152
  type: Component,
3749
- args: [{ selector: 'clr-tt-row', host: { '[class.treetable-row-wrapper]': 'true' }, animations: [
3750
- trigger('collapseExpandAnimation', [
3751
- state('false', style({ display: 'none' })),
3752
- state('true', style({ display: 'block' })),
3753
- transition('false => true', [
3754
- style({ opacity: 0, height: 0, overflow: 'hidden', display: 'block' }),
3755
- animate('300ms', style({ opacity: 1, height: '*' })),
3756
- ]),
3757
- transition('true => false', [
3758
- style({ opacity: 1, height: '*', overflow: 'hidden' }),
3759
- animate('300ms', style({ opacity: 0, height: 0 })),
3760
- ]),
3761
- ]),
3762
- ], standalone: false, template: "<!--\n ~ Copyright (c) 2018-2024 Porsche Informatik. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n [ngClass]=\"{'clr-row-clickable': showClickClass}\"\n class=\"clr-tt-node-content treetable-row\"\n (click)=\"onRowClick($event)\"\n>\n <ng-content select=\"clr-tt-action-overflow\"></ng-content>\n <clr-tt-action-overflow *ngIf=\"showActionOverflow && showEmptyActionOverflow\" [empty]=\"true\"></clr-tt-action-overflow>\n <div class=\"treetable-scrolling-cells\">\n <div class=\"treetable-expandable-caret\" *ngIf=\"expandable\">\n <button type=\"button\" class=\"treetable-expandable-caret-button\" (click)=\"onCaretClick()\">\n <cds-icon\n shape=\"angle\"\n [attr.direction]=\"expanded ? 'down' : 'right'\"\n class=\"treetable-expandable-caret-icon\"\n ></cds-icon>\n </button>\n </div>\n\n <ng-content select=\"clr-tt-cell\"></ng-content>\n </div>\n</div>\n<div [@collapseExpandAnimation]=\"expanded\">\n <ng-content select=\"clr-tt-row\"></ng-content>\n</div>\n" }]
3763
- }], ctorParameters: () => [], propDecorators: { expanded: [{
4153
+ args: [{ selector: 'clr-tt-row', host: { '[class.treetable-row-wrapper]': 'true', '[class.treetable-selected]': 'selected' }, standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n [ngClass]=\"{'clr-row-clickable': showClickClass, 'treetable-selected': selected}\"\n class=\"clr-tt-node-content treetable-row\"\n (click)=\"onRowClick($event)\"\n>\n @if(selection.selectionType === SelectionType.Multi){\n <div class=\"clr-checkbox-wrapper treetable-row-selection treetable-cell\">\n <input type=\"checkbox\" [ngModel]=\"selected\" (ngModelChange)=\"toggle($event)\" (click)=\"$event.stopPropagation()\" />\n </div>\n }\n\n <ng-content select=\"clr-tt-action-overflow\"></ng-content>\n <clr-tt-action-overflow *ngIf=\"showActionOverflow && showEmptyActionOverflow\" [empty]=\"true\"></clr-tt-action-overflow>\n <div class=\"treetable-scrolling-cells\">\n <div class=\"treetable-expandable-caret\" *ngIf=\"expandable\">\n <button type=\"button\" class=\"treetable-expandable-caret-button\" (click)=\"onCaretClick()\">\n <cds-icon\n shape=\"angle\"\n [attr.direction]=\"expanded ? 'down' : 'right'\"\n class=\"treetable-expandable-caret-icon\"\n ></cds-icon>\n </button>\n </div>\n\n <ng-content select=\"clr-tt-cell\"></ng-content>\n </div>\n</div>\n\n<div\n class=\"treetable-row-animation-container\"\n [class.expanded]=\"expanded\"\n [class.collapsed]=\"!expanded\"\n [class.animate]=\"shouldAnimate()\"\n>\n <div class=\"treetable-row-animation-wrapper\">\n <ng-content select=\"clr-tt-row\"></ng-content>\n </div>\n</div>\n", styles: [".treetable-row-animation-container.expanded{display:grid;grid-template-rows:1fr;opacity:1}.treetable-row-animation-container.collapsed{display:none;grid-template-rows:0fr;opacity:0}.treetable-row-animation-container.animate{transition:grid-template-rows .3s ease,opacity .3s ease,display .3s ease allow-discrete}@starting-style{.treetable-row-animation-container.animate.expanded{grid-template-rows:0fr;opacity:0}}@starting-style{.treetable-row-animation-container.animate.collapsed{grid-template-rows:1fr;opacity:1}}.treetable-row-animation-wrapper{min-height:0;overflow:hidden}\n"] }]
4154
+ }], propDecorators: { expanded: [{
3764
4155
  type: Input,
3765
4156
  args: ['clrExpanded']
3766
4157
  }], clickable: [{
@@ -3774,11 +4165,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
3774
4165
  }], expandedChange: [{
3775
4166
  type: Output,
3776
4167
  args: ['clrExpandedChange']
4168
+ }], selectedChanged: [{
4169
+ type: Output,
4170
+ args: ['clrTtSelectedChange']
3777
4171
  }], actionOverflow: [{
3778
4172
  type: ContentChild,
3779
4173
  args: [ClrTreetableActionOverflow]
3780
4174
  }] } });
3781
4175
 
4176
+ /*
4177
+ * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
4178
+ * This software is released under MIT license.
4179
+ * The full license information can be found in LICENSE in the root directory of this project.
4180
+ */
4181
+ class TreetableItemsDirective {
4182
+ get clrTtItems() {
4183
+ return this.ttItems();
4184
+ }
4185
+ set clrTtItems(items) {
4186
+ if (items == null || items.length === 0) {
4187
+ return;
4188
+ }
4189
+ this._items.addItems(items);
4190
+ if (this._sort.comparator) {
4191
+ this._cdr.detach();
4192
+ items.sort((a, b) => this._sort.compare(a, b)); // Sort in place
4193
+ this._cdr.reattach();
4194
+ }
4195
+ this.ttItems.set(items);
4196
+ }
4197
+ set trackBy(value) {
4198
+ this._iterableProxy.ngForTrackBy = value;
4199
+ }
4200
+ constructor() {
4201
+ this._items = inject((Items));
4202
+ this._sort = inject((Sort));
4203
+ this._template = inject((TemplateRef));
4204
+ this._differs = inject(IterableDiffers);
4205
+ this._vcr = inject(ViewContainerRef);
4206
+ this._cdr = inject(ChangeDetectorRef);
4207
+ this.ttItems = signal([]);
4208
+ this._iterableProxy = new NgForOf(this._vcr, this._template, this._differs);
4209
+ effect(() => {
4210
+ const newItems = this.ttItems();
4211
+ if (newItems) {
4212
+ this._iterableProxy.ngForOf = newItems;
4213
+ this._iterableProxy.ngDoCheck();
4214
+ }
4215
+ });
4216
+ }
4217
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: TreetableItemsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
4218
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.6", type: TreetableItemsDirective, isStandalone: false, selector: "[clrTtItems]", inputs: { clrTtItems: "clrTtItems", trackBy: ["clrTtItemsTrackBy", "trackBy"] }, ngImport: i0 }); }
4219
+ }
4220
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: TreetableItemsDirective, decorators: [{
4221
+ type: Directive,
4222
+ args: [{
4223
+ selector: '[clrTtItems]',
4224
+ standalone: false,
4225
+ }]
4226
+ }], ctorParameters: () => [], propDecorators: { clrTtItems: [{
4227
+ type: Input
4228
+ }], trackBy: [{
4229
+ type: Input,
4230
+ args: ['clrTtItemsTrackBy']
4231
+ }] } });
4232
+
3782
4233
  /*
3783
4234
  * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
3784
4235
  * This software is released under MIT license.
@@ -3786,11 +4237,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
3786
4237
  */
3787
4238
  class ClrTreetable {
3788
4239
  constructor() {
4240
+ this.selection = inject((Selection));
4241
+ this._items = inject((Items));
4242
+ this._destroyRef = inject(DestroyRef);
3789
4243
  this.clrClickableRows = true;
3790
4244
  this.hideHeader = false;
4245
+ this.selectedChanged = new EventEmitter(false);
3791
4246
  this.empty = true;
3792
4247
  this.hasActionOverflow = false;
3793
- this.destroyed$ = new Subject();
4248
+ this.SelectionType = SelectionType;
4249
+ }
4250
+ set selected(value) {
4251
+ if (value) {
4252
+ this.selection.selectionType = SelectionType.Multi;
4253
+ }
4254
+ else {
4255
+ this.selection.selectionType = SelectionType.None;
4256
+ }
4257
+ this.selection.updateCurrent(value, false);
3794
4258
  }
3795
4259
  set ttRows(items) {
3796
4260
  this._ttRows = items;
@@ -3799,6 +4263,22 @@ class ClrTreetable {
3799
4263
  this.initEmpty();
3800
4264
  this.initActionOverflow();
3801
4265
  }
4266
+ ngAfterViewInit() {
4267
+ this.selection.change.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(items => {
4268
+ this.selectedChanged.emit(items);
4269
+ });
4270
+ //_items changed, therefore we need to update the ttItems in the directives
4271
+ // in order to display them right again -> e.g when sorting changed
4272
+ this._items.change.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((allItems) => {
4273
+ const directives = this.iterator.toArray();
4274
+ directives.forEach((directive, index) => {
4275
+ if (allItems[index]) {
4276
+ const sortedItems = [...allItems[index]];
4277
+ directive.ttItems.set(sortedItems);
4278
+ }
4279
+ });
4280
+ });
4281
+ }
3802
4282
  initClickableRows() {
3803
4283
  if (this._ttRows) {
3804
4284
  this._ttRows.forEach(ttRow => {
@@ -3812,7 +4292,7 @@ class ClrTreetable {
3812
4292
  initActionOverflow() {
3813
4293
  this._ttRows.forEach(row => {
3814
4294
  this.setActionOverflow(row.showActionOverflow);
3815
- row.hasActionOverflow.pipe(takeUntil(this.destroyed$)).subscribe((hasActionOverflow) => {
4295
+ row.hasActionOverflow.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((hasActionOverflow) => {
3816
4296
  this.setActionOverflow(hasActionOverflow);
3817
4297
  });
3818
4298
  });
@@ -3828,27 +4308,43 @@ class ClrTreetable {
3828
4308
  });
3829
4309
  }
3830
4310
  }
3831
- ngOnDestroy() {
3832
- this.destroyed$.next();
3833
- this.destroyed$.complete();
4311
+ get allSelected() {
4312
+ return this.selection.isAllSelected();
4313
+ }
4314
+ set allSelected(_) {
4315
+ /**
4316
+ * This is a setter but we ignore the value.
4317
+ * It's strange, but it lets us have an indeterminate state where only
4318
+ * some of the _items are selected.
4319
+ */
4320
+ this.selection.toggleAll();
3834
4321
  }
3835
4322
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ClrTreetable, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3836
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.6", type: ClrTreetable, isStandalone: false, selector: "clr-treetable", inputs: { clrClickableRows: "clrClickableRows", hideHeader: ["clrHideHeader", "hideHeader"] }, host: { properties: { "class.empty": "empty", "class.treetable-host": "true" } }, queries: [{ propertyName: "ttColumns", predicate: ClrTreetableColumn, descendants: true }, { propertyName: "ttRows", predicate: ClrTreetableRow, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2018-2021 Porsche Informatik. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div class=\"treetable\">\n <div class=\"treetable-grid\" role=\"grid\">\n <div class=\"treetable-header\" role=\"rowgroup\" [class.hide-header]=\"hideHeader\">\n <div *ngIf=\"hasActionOverflow\" class=\"treetable-row-actions treetable-column\">&nbsp;</div>\n <div class=\"treetable-row-scrollable\" role=\"row\">\n <ng-content select=\"clr-tt-column\"></ng-content>\n </div>\n </div>\n <div class=\"treetable-body\">\n <ng-content select=\"clr-tt-row\"></ng-content>\n <ng-content select=\"clr-tt-placeholder\"></ng-content>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
4323
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.6", type: ClrTreetable, isStandalone: false, selector: "clr-treetable", inputs: { clrClickableRows: "clrClickableRows", hideHeader: ["clrHideHeader", "hideHeader"], selected: ["clrTtSelected", "selected"] }, outputs: { selectedChanged: "clrTtSelectedChange" }, host: { properties: { "class.empty": "empty", "class.treetable-host": "true" } }, providers: [Selection, Items, Sort], queries: [{ propertyName: "ttColumns", predicate: ClrTreetableColumn, descendants: true }, { propertyName: "ttRows", predicate: ClrTreetableRow, descendants: true }, { propertyName: "iterator", predicate: TreetableItemsDirective, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div class=\"treetable\">\n <div class=\"treetable-grid\" role=\"grid\">\n <div class=\"treetable-header\" role=\"rowgroup\" [class.hide-header]=\"hideHeader\">\n @if(selection.selectionType === SelectionType.Multi && !empty){\n <div class=\"clr-checkbox-wrapper treetable-row-selection treetable-column\" role=\"row\">\n <input type=\"checkbox\" [(ngModel)]=\"allSelected\" />\n </div>\n }\n\n <div *ngIf=\"hasActionOverflow\" class=\"treetable-row-actions treetable-column\">&nbsp;</div>\n <div class=\"treetable-row-scrollable\" role=\"row\">\n <ng-content select=\"clr-tt-column\"></ng-content>\n </div>\n </div>\n <div class=\"treetable-body\">\n <ng-content select=\"clr-tt-row\"></ng-content>\n <ng-content select=\"clr-tt-placeholder\"></ng-content>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3837
4324
  }
3838
4325
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ClrTreetable, decorators: [{
3839
4326
  type: Component,
3840
- args: [{ selector: 'clr-treetable', host: { '[class.empty]': 'empty', '[class.treetable-host]': 'true' }, standalone: false, template: "<!--\n ~ Copyright (c) 2018-2021 Porsche Informatik. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div class=\"treetable\">\n <div class=\"treetable-grid\" role=\"grid\">\n <div class=\"treetable-header\" role=\"rowgroup\" [class.hide-header]=\"hideHeader\">\n <div *ngIf=\"hasActionOverflow\" class=\"treetable-row-actions treetable-column\">&nbsp;</div>\n <div class=\"treetable-row-scrollable\" role=\"row\">\n <ng-content select=\"clr-tt-column\"></ng-content>\n </div>\n </div>\n <div class=\"treetable-body\">\n <ng-content select=\"clr-tt-row\"></ng-content>\n <ng-content select=\"clr-tt-placeholder\"></ng-content>\n </div>\n </div>\n</div>\n" }]
4327
+ args: [{ selector: 'clr-treetable', host: { '[class.empty]': 'empty', '[class.treetable-host]': 'true' }, standalone: false, providers: [Selection, Items, Sort], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div class=\"treetable\">\n <div class=\"treetable-grid\" role=\"grid\">\n <div class=\"treetable-header\" role=\"rowgroup\" [class.hide-header]=\"hideHeader\">\n @if(selection.selectionType === SelectionType.Multi && !empty){\n <div class=\"clr-checkbox-wrapper treetable-row-selection treetable-column\" role=\"row\">\n <input type=\"checkbox\" [(ngModel)]=\"allSelected\" />\n </div>\n }\n\n <div *ngIf=\"hasActionOverflow\" class=\"treetable-row-actions treetable-column\">&nbsp;</div>\n <div class=\"treetable-row-scrollable\" role=\"row\">\n <ng-content select=\"clr-tt-column\"></ng-content>\n </div>\n </div>\n <div class=\"treetable-body\">\n <ng-content select=\"clr-tt-row\"></ng-content>\n <ng-content select=\"clr-tt-placeholder\"></ng-content>\n </div>\n </div>\n</div>\n" }]
3841
4328
  }], propDecorators: { clrClickableRows: [{
3842
4329
  type: Input
3843
4330
  }], hideHeader: [{
3844
4331
  type: Input,
3845
4332
  args: ['clrHideHeader']
4333
+ }], selected: [{
4334
+ type: Input,
4335
+ args: ['clrTtSelected']
4336
+ }], selectedChanged: [{
4337
+ type: Output,
4338
+ args: ['clrTtSelectedChange']
3846
4339
  }], ttColumns: [{
3847
4340
  type: ContentChildren,
3848
4341
  args: [ClrTreetableColumn, { descendants: true }]
3849
4342
  }], ttRows: [{
3850
4343
  type: ContentChildren,
3851
4344
  args: [ClrTreetableRow, { descendants: true }]
4345
+ }], iterator: [{
4346
+ type: ContentChildren,
4347
+ args: [TreetableItemsDirective, { descendants: true }]
3852
4348
  }] } });
3853
4349
 
3854
4350
  /*
@@ -3858,7 +4354,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
3858
4354
  */
3859
4355
  class ClrTreetableCell {
3860
4356
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ClrTreetableCell, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3861
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.6", type: ClrTreetableCell, isStandalone: false, selector: "clr-tt-cell", host: { attributes: { "role": "cell" }, properties: { "class.treetable-cell": "true" } }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true }); }
4357
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.6", type: ClrTreetableCell, isStandalone: false, selector: "clr-tt-cell", host: { attributes: { "role": "cell" }, properties: { "class.treetable-cell": "true" } }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3862
4358
  }
3863
4359
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ClrTreetableCell, decorators: [{
3864
4360
  type: Component,
@@ -3870,6 +4366,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
3870
4366
  role: 'cell',
3871
4367
  },
3872
4368
  standalone: false,
4369
+ changeDetection: ChangeDetectionStrategy.OnPush,
3873
4370
  }]
3874
4371
  }] });
3875
4372
 
@@ -3885,7 +4382,7 @@ class ClrTreetablePlaceholder {
3885
4382
  <div class="treetable-placeholder-image"></div>
3886
4383
  <ng-content></ng-content>
3887
4384
  </div>
3888
- `, isInline: true }); }
4385
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3889
4386
  }
3890
4387
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ClrTreetablePlaceholder, decorators: [{
3891
4388
  type: Component,
@@ -3899,6 +4396,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
3899
4396
  `,
3900
4397
  host: { '[class.treetable-placeholder-container]': 'true' },
3901
4398
  standalone: false,
4399
+ changeDetection: ChangeDetectionStrategy.OnPush,
3902
4400
  }]
3903
4401
  }] });
3904
4402
 
@@ -4002,8 +4500,10 @@ class TreetableMainRenderer {
4002
4500
  constructor() {
4003
4501
  this.shouldStabilizeColumn = true;
4004
4502
  }
4005
- onResize() {
4006
- this.applyMaxWidth();
4503
+ ngOnInit() {
4504
+ fromEvent(window, 'resize')
4505
+ .pipe(debounceTime$1(200))
4506
+ .subscribe(() => this.applyMaxWidth());
4007
4507
  }
4008
4508
  ngAfterContentInit() {
4009
4509
  this.headers.changes.subscribe(() => {
@@ -4026,11 +4526,13 @@ class TreetableMainRenderer {
4026
4526
  */
4027
4527
  applyColumnClasses() {
4028
4528
  this.shouldStabilizeColumn = false;
4029
- this.headers.forEach((header, headerIndex) => {
4529
+ const headersArray = this.headers.toArray();
4530
+ const rowsArray = this.rows.toArray();
4531
+ headersArray.forEach((header, headerIndex) => {
4030
4532
  const columnClasses = header.getColumnClasses();
4031
4533
  if (columnClasses.length === 0) {
4032
4534
  header.setDefaultColumnClass();
4033
- this.rows.forEach(row => {
4535
+ rowsArray.forEach(row => {
4034
4536
  // set every child cell of the same index to default class
4035
4537
  const cell = row.cells.find((_c, cellIndex) => cellIndex === headerIndex);
4036
4538
  if (cell) {
@@ -4041,7 +4543,7 @@ class TreetableMainRenderer {
4041
4543
  else {
4042
4544
  // set every child cell of the same index to the same class
4043
4545
  // we do not allow overriding column width on a per cell basis different to the header.
4044
- this.rows.forEach(row => {
4546
+ rowsArray.forEach(row => {
4045
4547
  const cell = row.cells.find((_c, cellIndex) => cellIndex === headerIndex);
4046
4548
  if (cell) {
4047
4549
  cell.setColumnClasses(columnClasses);
@@ -4070,7 +4572,7 @@ class TreetableMainRenderer {
4070
4572
  });
4071
4573
  }
4072
4574
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: TreetableMainRenderer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
4073
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.6", type: TreetableMainRenderer, isStandalone: false, selector: "clr-treetable", host: { listeners: { "window:resize": "onResize()" } }, queries: [{ propertyName: "headers", predicate: TreetableHeaderRenderer }, { propertyName: "rows", predicate: TreetableRowRenderer, descendants: true }, { propertyName: "columns", predicate: ClrTreetableColumn }], ngImport: i0 }); }
4575
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.6", type: TreetableMainRenderer, isStandalone: false, selector: "clr-treetable", queries: [{ propertyName: "headers", predicate: TreetableHeaderRenderer }, { propertyName: "rows", predicate: TreetableRowRenderer, descendants: true }, { propertyName: "columns", predicate: ClrTreetableColumn }], ngImport: i0 }); }
4074
4576
  }
4075
4577
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: TreetableMainRenderer, decorators: [{
4076
4578
  type: Directive,
@@ -4087,13 +4589,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
4087
4589
  }], columns: [{
4088
4590
  type: ContentChildren,
4089
4591
  args: [ClrTreetableColumn]
4090
- }], onResize: [{
4091
- type: HostListener,
4092
- args: ['window:resize']
4093
4592
  }] } });
4094
4593
 
4095
4594
  /*
4096
- * Copyright (c) 2018-2022 Porsche Informatik. All Rights Reserved.
4595
+ * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
4097
4596
  * This software is released under MIT license.
4098
4597
  * The full license information can be found in LICENSE in the root directory of this project.
4099
4598
  */
@@ -4108,6 +4607,7 @@ const CLR_TREETABLE_DIRECTIVES = [
4108
4607
  TreetableHeaderRenderer,
4109
4608
  TreetableRowRenderer,
4110
4609
  TreetableCellRenderer,
4610
+ TreetableItemsDirective,
4111
4611
  ];
4112
4612
  class ClrTreetableModule {
4113
4613
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ClrTreetableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -4120,7 +4620,8 @@ class ClrTreetableModule {
4120
4620
  TreetableMainRenderer,
4121
4621
  TreetableHeaderRenderer,
4122
4622
  TreetableRowRenderer,
4123
- TreetableCellRenderer], imports: [CommonModule, ClarityModule], exports: [ClrTreetable,
4623
+ TreetableCellRenderer,
4624
+ TreetableItemsDirective], imports: [CommonModule, ClarityModule, ReactiveFormsModule, FormsModule], exports: [ClrTreetable,
4124
4625
  ClrTreetableRow,
4125
4626
  ClrTreetableCell,
4126
4627
  ClrTreetableColumn,
@@ -4129,20 +4630,27 @@ class ClrTreetableModule {
4129
4630
  TreetableMainRenderer,
4130
4631
  TreetableHeaderRenderer,
4131
4632
  TreetableRowRenderer,
4132
- TreetableCellRenderer] }); }
4133
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ClrTreetableModule, imports: [CommonModule, ClarityModule] }); }
4633
+ TreetableCellRenderer,
4634
+ TreetableItemsDirective] }); }
4635
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ClrTreetableModule, imports: [CommonModule, ClarityModule, ReactiveFormsModule, FormsModule] }); }
4134
4636
  }
4135
4637
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ClrTreetableModule, decorators: [{
4136
4638
  type: NgModule,
4137
4639
  args: [{
4138
- imports: [CommonModule, ClarityModule],
4640
+ imports: [CommonModule, ClarityModule, ReactiveFormsModule, FormsModule],
4139
4641
  declarations: [CLR_TREETABLE_DIRECTIVES],
4140
4642
  exports: [CLR_TREETABLE_DIRECTIVES],
4141
4643
  }]
4142
4644
  }] });
4143
4645
 
4144
4646
  /*
4145
- * Copyright (c) 2018-2022 Porsche Informatik. All Rights Reserved.
4647
+ * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
4648
+ * This software is released under MIT license.
4649
+ * The full license information can be found in LICENSE in the root directory of this project.
4650
+ */
4651
+
4652
+ /*
4653
+ * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
4146
4654
  * This software is released under MIT license.
4147
4655
  * The full license information can be found in LICENSE in the root directory of this project.
4148
4656
  */
@@ -4369,6 +4877,7 @@ class ClrHistoryService {
4369
4877
  historySettings.push({ username: username, historyPinned: false });
4370
4878
  }
4371
4879
  this.cookieSettings$.next(historySettings);
4880
+ return historySettings.find(hSetting => hSetting.username === username);
4372
4881
  }
4373
4882
  setHistoryPinned(username, pin, domain) {
4374
4883
  const historySettings = this.getCookieByName(this.cookieNameSettings);
@@ -4539,13 +5048,15 @@ class ClrHistoryPinned {
4539
5048
  * The array of history elements to be displayed.
4540
5049
  */
4541
5050
  this.historyElements$ = new ReplaySubject(1);
4542
- this.active$ = new ReplaySubject(1);
5051
+ this.active$ = new BehaviorSubject(this.initActive());
5052
+ }
5053
+ initActive() {
5054
+ return this.historyService.initializeCookieSettings(this.username, this.domain).historyPinned;
4543
5055
  }
4544
5056
  ngOnInit() {
4545
5057
  this.historyService.getHistory(this.username, this.tenantId).subscribe(elements => {
4546
5058
  this.historyElements$.next(this.historyProvider ? this.historyProvider.getModifiedHistoryEntries(elements) : elements);
4547
5059
  });
4548
- this.historyService.initializeCookieSettings(this.username, this.domain);
4549
5060
  this.settingsSubscription = this.historyService.cookieSettings$.subscribe(settings => {
4550
5061
  const setting = settings.find(setting => setting.username === this.username);
4551
5062
  this.active$.next(setting?.historyPinned);
@@ -4556,11 +5067,11 @@ class ClrHistoryPinned {
4556
5067
  this.settingsSubscription.unsubscribe();
4557
5068
  }
4558
5069
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ClrHistoryPinned, deps: [{ token: ClrHistoryService }, { token: HISTORY_PROVIDER, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
4559
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.6", type: ClrHistoryPinned, isStandalone: false, selector: "clr-history-pinned", inputs: { username: ["clrUsername", "username"], tenantId: ["clrTenantId", "tenantId"], context: ["clrContext", "context"], domain: ["clrDomain", "domain"] }, ngImport: i0, template: "<div [ngClass]=\"{'history-container-pinned': active$ | async}\"></div>\n<nav\n aria-label=\"history\"\n class=\"history-container\"\n *ngIf=\"(active$ | async) && (historyElements$ | async) as historyElements\"\n>\n <ol class=\"history\">\n <ng-container *ngFor=\"let historyItem of historyElements\">\n <li *ngIf=\"historyItem.url\" class=\"history-item\">\n <a [href]=\"historyItem.url\">{{ historyItem.title }}</a>\n </li>\n </ng-container>\n </ol>\n</nav>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
5070
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.6", type: ClrHistoryPinned, isStandalone: false, selector: "clr-history-pinned", inputs: { username: ["clrUsername", "username"], tenantId: ["clrTenantId", "tenantId"], context: ["clrContext", "context"], domain: ["clrDomain", "domain"] }, ngImport: i0, template: "<div class=\"history-container-pinned\" *ngIf=\"(active$ | async)\"></div>\n<nav\n aria-label=\"history\"\n class=\"history-container\"\n *ngIf=\"(active$ | async) && (historyElements$ | async) as historyElements\"\n>\n <ol class=\"history\">\n <ng-container *ngFor=\"let historyItem of historyElements\">\n <li *ngIf=\"historyItem.url\" class=\"history-item\">\n <a [href]=\"historyItem.url\">{{ historyItem.title }}</a>\n </li>\n </ng-container>\n </ol>\n</nav>\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: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
4560
5071
  }
4561
5072
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ClrHistoryPinned, decorators: [{
4562
5073
  type: Component,
4563
- args: [{ selector: 'clr-history-pinned', standalone: false, template: "<div [ngClass]=\"{'history-container-pinned': active$ | async}\"></div>\n<nav\n aria-label=\"history\"\n class=\"history-container\"\n *ngIf=\"(active$ | async) && (historyElements$ | async) as historyElements\"\n>\n <ol class=\"history\">\n <ng-container *ngFor=\"let historyItem of historyElements\">\n <li *ngIf=\"historyItem.url\" class=\"history-item\">\n <a [href]=\"historyItem.url\">{{ historyItem.title }}</a>\n </li>\n </ng-container>\n </ol>\n</nav>\n" }]
5074
+ args: [{ selector: 'clr-history-pinned', standalone: false, template: "<div class=\"history-container-pinned\" *ngIf=\"(active$ | async)\"></div>\n<nav\n aria-label=\"history\"\n class=\"history-container\"\n *ngIf=\"(active$ | async) && (historyElements$ | async) as historyElements\"\n>\n <ol class=\"history\">\n <ng-container *ngFor=\"let historyItem of historyElements\">\n <li *ngIf=\"historyItem.url\" class=\"history-item\">\n <a [href]=\"historyItem.url\">{{ historyItem.title }}</a>\n </li>\n </ng-container>\n </ol>\n</nav>\n" }]
4564
5075
  }], ctorParameters: () => [{ type: ClrHistoryService }, { type: HistoryProvider, decorators: [{
4565
5076
  type: Inject,
4566
5077
  args: [HISTORY_PROVIDER]
@@ -14019,7 +14530,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
14019
14530
  }] });
14020
14531
 
14021
14532
  /*
14022
- * Copyright (c) 2018-2024 Porsche Informatik. All Rights Reserved.
14533
+ * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
14023
14534
  * This software is released under MIT license.
14024
14535
  * The full license information can be found in LICENSE in the root directory of this project.
14025
14536
  */
@@ -14143,7 +14654,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
14143
14654
  */
14144
14655
 
14145
14656
  /*
14146
- * Copyright (c) 2018-2024 Porsche Informatik. All Rights Reserved.
14657
+ * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
14147
14658
  * This software is released under MIT license.
14148
14659
  * The full license information can be found in LICENSE in the root directory of this project.
14149
14660
  */
@@ -14152,5 +14663,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
14152
14663
  * Generated bundle index. Do not edit.
14153
14664
  */
14154
14665
 
14155
- export { ACShape, AcceptanceDateShape, AcceptedBrands, AccessoryPartsShape, AudiBrandShape, AwardWinnerPremiumShape, BIG_ENDIAN, BlocksGroupForwardShape, BundleForwardShape, BusinessCustomersCommercialShape, BusinessCustomersPrivateShape, BusinessPartnerWithCar, CLR_BLANK_OPTION, CONTENT_PROVIDER, CalculatorForwardShape, CaliforniaServiceShape, CampaignOutdatedShape, CampaignShape, CarOffSite, CarOnSite, CircleFilled, CircleHalfFilled, CircleQuarterFilled, CircleThreeQuartersFilled, ClrActionPanel, ClrActionPanelContainer, ClrActionPanelContainerContent, ClrActionPanelContainerFooter, ClrActionPanelModule, ClrActiveNotification, 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, ClrReadonlyDirective, ClrReadonlyDirectiveModule, ClrRequiredAllMultilang, ClrRequiredOneMultilang, ClrSearchField, ClrSearchFieldModule, ClrTimeInput, ClrTreetable, ClrTreetableActionOverflow, ClrTreetableCell, ClrTreetableColumn, ClrTreetableModule, ClrTreetablePlaceholder, ClrTreetableRow, ClrViewEditSection, ClrViewEditSectionModule, ColumnHiddenStatePersistenceDirective, CompletedByDateShape, CupraBrandShape, Customer, CustomerVip, CustomerVipCollection, CustomerWaiting, CustomerWaitingCollection, DATE, DELIMITER_REGEX, DWABrandShape, DatagridFieldDirective, DayModel, DeliveryDate, DieselShape, DollarBillForwardShape, DollarBillPartialShape, EnergyShape, ExternalPartForwardShape, FirstRegistrationDate, GasCarsServiceShape, GasShape, HISTORY_NOTIFICATION_URL_PROVIDER, HISTORY_PROVIDER, HISTORY_TOKEN, HistoryProvider, InternalPartForwardShape, InvoiceReadyShape, InvoiceRecipient, InvoiceShape, ItemsForwardShape, ItemsReceiveShape, LITTLE_ENDIAN, LITTLE_ENDIAN_REGEX, LocationBarComponent, LocationBarContentProvider, LocationBarNode, LogoCommissionModule, LogoCommissionModuleFavIcon, LogoCommissionModuleNegative, LogoCommissionModuleNegativeFavIcon, LogoCostApproval, LogoCostApprovalFavIcon, LogoCostApprovalNegative, LogoCostApprovalNegativeFavIcon, LogoCostControlling, LogoCostControllingFavIcon, LogoCostControllingNegative, LogoCostControllingNegativeFavIcon, LogoDigitalServiceReception, LogoDigitalServiceReceptionFavIcon, LogoDigitalServiceReceptionNegative, LogoDigitalServiceReceptionNegativeFavIcon, LogoDocFlow, LogoDocFlowFavIcon, LogoDocFlowNegative, LogoDocFlowNegativeFavIcon, LogoDocScan, LogoDocScanFavIcon, LogoDocScanNegative, LogoDocScanNegativeFavIcon, LogoDocStore, LogoDocStoreFavIcon, LogoDocStoreNegative, LogoDocStoreNegativeFavIcon, LogoEBilling, LogoEBillingFavIcon, LogoEBillingNegative, LogoEBillingNegativeFavIcon, LogoEPayment, LogoEPaymentFavIcon, LogoEPaymentNegative, LogoEPaymentNegativeFavIcon, LogoMobilityPlanner, LogoMobilityPlannerFavIcon, LogoMobilityPlannerNegative, LogoMobilityPlannerNegativeFavIcon, LogoPartsMobile, LogoPartsMobileFavIcon, LogoPartsMobileNegative, LogoPartsMobileNegativeFavIcon, LogoSBO, LogoSBOFavIcon, LogoSBONegative, LogoSBONegativeFavIcon, LogoServiceCube, LogoServiceCubeFavIcon, LogoServiceCubeNegative, LogoServiceCubeNegativeFavIcon, LogoWCP, LogoWCPFavIcon, LogoWCPNegative, LogoWCPNegativeFavIcon, LogoWorkshopOrderTracker, LogoWorkshopOrderTrackerFavIcon, LogoWorkshopOrderTrackerNegative, LogoWorkshopOrderTrackerNegativeFavIcon, MIDDLE_ENDIAN, MIDDLE_ENDIAN_REGEX, MONTH, Mechanic, NewCarUtilityVehicleShape, NodeId, Number0, Number1, Number10, Number11, Number12, Number13, Number14, Number15, Number16, Number17, Number18, Number19, Number2, Number20, Number3, Number4, Number5, Number6, Number7, Number8, Number9, OrderShape, OrderStatusShape, PaintMaterialForwardShape, PaintMaterialShape, ParkingLocation, PartAvailabilityInfoShape, PartAvailabilityNoShape, PartAvailabilityUnknownShape, PartAvailabilityWarningShape, PartAvailabilityYesShape, PartIdenticalPredecessorShape, PartIdenticalShape, PartIdenticalSuccessorShape, PartIdenticalSuccpredecessorShape, PartNonStockForwardShape, PartPredecessorShape, PartSuccessorPredecessorShape, PartSuccessorShape, PartsChangelocation, PartsForwardShape, PartsInventory, PartsNonStockShape, PartsPicking, PartsPickingPlus, PartsReceiving, PartsShape, PlusServiceShape, PopoverPositions, PorscheBrandShape, PriceTypeSwitchShape, RepeatRepairCollection, RepeatRepairShape, ReplacementVehicleCollection, ReplacementVehicleShape, ReturnDateShape, SEPARATOR_TEXT_DEFAULT, SeatBrandShape, ServiceAdvisor, SkodaBrandShape, StatePersistenceKeyDirective, TRANSLATIONS, TaskAndAppointment, TextForward, TimeModel, TopcardShape, TouaregServiceShape, TreetableCellRenderer, TreetableHeaderRenderer, TreetableMainRenderer, TreetableRowRenderer, USER_INPUT_REGEX, VWBrandShape, VWNBrandShape, VWShape, VehicleConversionShape, VinShape, VsfSearchShape, VsfSearchShape48, WCPShape, WrenchForward, YEAR, acceleration, accelerationIcon, acceptanceDateIcon, accessories, accessoriesIcon, accessoryPartsIcon, adblueAppIcon, adblue_app, add, addIcon, airConditionerIcon, air_conditioning, alert, alertFilledAppIcon, alertIcon, alertNotificationFilledAppIcon, alert_filled_app, alert_notification_filled_app, allIcons, ambientLightAppIcon, ambient_light_app, amplifier, amplifierIcon, appConnectAppIcon, app_connect_app, archive, archiveIcon, arrowDownIcon, arrowLeftAlignedAppIcon, arrowLeftIcon, arrowRightIcon, arrowSliderAppIcon, arrowUpIcon, arrow_down, arrow_left, arrow_left_aligned_app, arrow_right, arrow_slider_app, arrow_up, attachment, attachmentIcon, audiBrandIcon, authentPlugChargeAppIcon, authentQrAppIcon, authentRfidAppIcon, authentTouchidAppIcon, authent_plug_charge_app, authent_qr_app, authent_rfid_app, authent_touch_id_app, automaticTempAppIcon, automatic_temp_app, awardWinnerPremiumIcon, award_winner_premium, back, backIcon, battery, batteryIcon, batterySocChargingAppIcon, batterySocDepartureAppIcon, batterySocDestinationAppIcon, battery_soc_charging_app, battery_soc_departure_app, battery_soc_destination_app, bin, binIcon, blocksGroupForwardIcon, bluetooth, bluetoothIcon, bookmark, bookmarkFilledIcon, bookmarkIcon, bookmark_filled, brakeAppIcon, brake_app, brochure, brochureIcon, bulletpointAppIcon, bulletpoint_app, bundleForwardIcon, businessCustomersCommercialIcon, businessCustomersPrivateIcon, businessPartnerWithCarIcon, business_customers_commercial, business_customers_private, calc, calcIcon, calculatorForwardIcon, calendar, calendarCustomIcon, californiaServiceIcon, californiaSpecialistIcon, california_specialist, cameraScanIcon, camera_scan, campaignIcon, campaignOutdatedIcon, carDocumentsIcon, carErrorAppIcon, carInsuranceIcon, carOffSite, carOnSite, carPickupServiceIcon, carPlusIcon, carSettingsIcon, carVerifiedAppIcon, carWashIcon, carWheelAppIcon, car_documents, car_error_app, car_insurance, car_pickup_service, car_plus, car_settings, car_verified_app, car_wheel_app, carwash, certifiedRepairIcon, certifiedRetailerIcon, certified_repair, certified_retailer, challengeAppIcon, challenge_app, charging, chargingIcon, chargingPduAppIcon, chargingStationIcon, chargingTarifOverviewAppIcon, charging_pdu_app, charging_station, charging_tarif_overview_app, chat, chatAppIcon, chatIcon, chat_app, checkboxCheckedAppIcon, checkboxCheckedIcon, checkboxUncheckedAppIcon, checkboxUncheckedIcon, checkbox_checked, checkbox_checked_app, checkbox_unchecked, checkbox_unchecked_app, checkmark, checkmarkAppIcon, checkmarkFilledAppIcon, checkmarkIcon, checkmark_app, checkmark_filled_app, chevronDownIcon, chevronLeftAlignedappIcon, chevronLeftIcon, chevronRightAlignedappIcon, chevronRightIcon, chevronSmallLeftAlignedappIcon, chevronSmallRightAlignedappIcon, chevronUpIcon, chevron_down, chevron_left, chevron_left_alignedapp, chevron_right, chevron_right_alignedapp, chevron_small_left_alignedapp, chevron_small_right_alignedapp, chevron_up, circleFilledIcon, circleHalfFilledIcon, circleQuarterFilledIcon, circleThreeQuartersFilledIcon, city, cityIcon, clearAppIcon, clearRightAlignedappIcon, clear_app, clear_right_alignedapp, clock, clockIcon, close, closeAppIcon, closeCircleIcon, closeIcon, closeLeftAlignedappIcon, closeRightAlignedappIcon, close_app, close_circle, close_left_alignedapp, close_right_alignedapp, clrIconSVG, coffeeFilledAppIcon, coffee_filled_app, compassAppIcon, compass_app, completedByDateIcon, configuratorCommercialIcon, configuratorPrivateIcon, configurator_commercial, configurator_private, construction, constructionIcon, consumptionFuelFilledAppIcon, consumptionIcon, consumption_fuel, consumption_fuel_filled_app, contact, contactDealerFilledAppIcon, contactDealerIcon, contactIcon, contact_dealer, contact_dealer_filled_app, countryRoadIcon, country_road, craft, craftIcon, cupraBrandIcon, customerIcon, customerVipIcon, customerWaitingIcon, customersCenterIcon, customers_center, dataCopyAppIcon, dataExpiredIcon, dataFilledIcon, dataInputIcon, dataPlugAppIcon, dataSearchIcon, dataTimeExtensionIcon, data_copy_app, data_expired, data_filled, data_input, data_plug_app, data_search, data_time_extension, defogDefrostAutoAppIcon, defogDefrostIcon, defog_defrost, defog_defrost_auto_app, deliveryDateIcon, destinationAppIcon, destination_app, dieselIcon, direction, directionIcon, dischargingAppIcon, discharging_app, discountAppIcon, discount_app, discoveryAppIcon, discovery_app, dollarBillForwardIcon, dollarBillPartialIcon, download, downloadCustomIcon, dragIndicatorIcon, drag_indicator, driversAssistanceIcon, drivers_assistance, dropFilledAppIcon, drop_filled_app, dwaBrandIcon, eco, ecoIcon, edit, editIcon, editSmallRightAlignedAppIcon, edit_small_right_aligned_app, efficiency, efficiencyIcon, electricCarsIcon, electricCarsServiceIcon, electric_cars, electric_cars_service, electricity, electricityFilledAppIcon, electricityIcon, electricity_filled_app, emergency, emergencyIcon, emission, emissionIcon, energyIcon, engine, engineIcon, entertainment, entertainmentIcon, escapeHtml, escapeRegex, exportAppIcon, export_app, expressServiceIcon, express_service, exterior, exterior360Icon, exteriorIcon, exterior_360, externalPartForwardIcon, faq, faqIcon, fastForwardIcon, fast_forward, fax, faxIcon, filter, filterIcon, findACarIcon, findADealerIcon, find_a_car, find_a_dealer, firstRegistrationDateIcon, fleetServiceCommercialIcon, fleetServicePrivateIcon, fleet_service_commercial, fleet_service_private, folderFilledAppIcon, folder_filled_app, foodFilledAppIcon, food_filled_app, formatNumber, fullscreenEnterIcon, fullscreenExitIcon, fullscreen_enter, fullscreen_exit, gallery, galleryIcon, garageAppIcon, garage_app, gasAppIcon, gasCarsServiceIcon, gasIcon, gas_app, glassDamageAppIcon, glass_damage_app, gte, gteIcon, heart, heartFilledAppIcon, heartIcon, heart_filled_app, heightAppIcon, height_app, highwayRoadIcon, highway_road, history, historyIcon, homeAppIcon, homeEnergyAppIcon, homeFilledAppIcon, home_app, home_energy_app, home_filled_app, hornAppIcon, hornFilledAppIcon, horn_app, horn_filled_app, hybrid, hybridIcon, immediateChargingAppIcon, immediate_charging_app, info, infoFilledIcon, infoIcon, info_filled, inputHideIcon, inputShowIcon, input_hide, input_show, interior, interior360Icon, interiorIcon, interior_360, internalPartForwardIcon, internet, internetIcon, invitationAppIcon, invitation_app, invoiceIcon, invoiceReadyIcon, invoiceRecipientIcon, itemsForwardIcon, itemsRecieveIcon, jobportal, jobportalIcon, keyAppIcon, keyCardAppIcon, keyDigitalAppIcon, key_app, key_card_app, key_digital_app, keyboardAppIcon, keyboard_app, layerCollapseAppIcon, layerExpandAppIcon, layer_collapse_app, layer_expand_app, layersAppIcon, layers_app, legalTermsAndConditionsAppIcon, legal_terms_and_conditions_app, licencePlateAppIcon, licence_plate_app, lightAssistappIcon, light_assistapp, lightingAppIcon, lighting_app, linkExternAppIcon, link_extern_app, list, listIcon, loadingVolumeIcon, loading_volume, localBusinessIcon, local_business, locate, locateIcon, lock, lockIcon, lockOpenIcon, lock_open, login, loginIcon, logistic, logisticIcon, logoCommissionModuleFavIcon, logoCommissionModuleIcon, logoCommissionModuleNegativeFavIcon, logoCommissionModuleNegativeIcon, logoCostApprovalFavIcon, logoCostApprovalIcon, logoCostApprovalNegativeFavIcon, logoCostApprovalNegativeIcon, logoCrossControllingFavIcon, logoCrossControllingIcon, logoCrossControllingNegativeFavIcon, logoCrossControllingNegativeIcon, logoDigitalServiceReceptionFavIcon, logoDigitalServiceReceptionIcon, logoDigitalServiceReceptionNegativeFavIcon, logoDigitalServiceReceptionNegativeIcon, logoDocFlowFavIcon, logoDocFlowIcon, logoDocFlowNegativeFavIcon, logoDocFlowNegativeIcon, logoDocScanFavIcon, logoDocScanIcon, logoDocScanNegativeFavIcon, logoDocScanNegativeIcon, logoDocStoreFavIcon, logoDocStoreIcon, logoDocStoreNegativeFavIcon, logoDocStoreNegativeIcon, logoEBillingFavIcon, logoEBillingIcon, logoEBillingNegativeFavIcon, logoEBillingNegativeIcon, logoEPaymentFavIcon, logoEPaymentIcon, logoEPaymentNegativeFavIcon, logoEPaymentNegativeIcon, logoMobilityPlannerFavIcon, logoMobilityPlannerIcon, logoMobilityPlannerNegativeFavIcon, logoMobilityPlannerNegativeIcon, logoPartsMobileFavIcon, logoPartsMobileIcon, logoPartsMobileNegativeFavIcon, logoPartsMobileNegativeIcon, logoSBOFavIcon, logoSBOIcon, logoSBONegativeFavIcon, logoSBONegativeIcon, logoServiceCubeFavIcon, logoServiceCubeIcon, logoServiceCubeNegativeFavIcon, logoServiceCubeNegativeIcon, logoWCPFavIcon, logoWCPIcon, logoWCPNegativeFavIcon, logoWCPNegativeIcon, logoWorkshopOrderTrackerFavIcon, logoWorkshopOrderTrackerIcon, logoWorkshopOrderTrackerNegativeFavIcon, logoWorkshopOrderTrackerNegativeIcon, logout, logoutIcon, magnifier, magnifierIcon, magnifierMinusIcon, magnifierPlusIcon, magnifier_minus, magnifier_plus, mail, mailIcon, mailResendAppIcon, mail_resend_app, manual, manualIcon, map, mapIcon, mechanicIcon, media, mediaIcon, menu, menuAppAppIcon, menuIcon, menu_app_app, microphoneAppIcon, microphone_app, mobile, mobileIcon, moreAppIcon, moreAppbarAppIcon, more_app, more_appbar_app, mot, motIcon, motability, motabilityIcon, navigate, navigateFilledAppIcon, navigateIcon, navigate_filled_app, newCarCommercialIcon, newCarPrivateFilledAppIcon, newCarPrivateIcon, newCarUtilityVehicleIcon, new_car_commercial, new_car_private, new_car_private_filled_app, nightServiceIcon, night_service, notification, notificationFilledIcon, notificationIcon, notification_filled, number0Icon, number10Icon, number11Icon, number12Icon, number13Icon, number14Icon, number15Icon, number16Icon, number17Icon, number18Icon, number19Icon, number1Icon, number20Icon, number2Icon, number3Icon, number4Icon, number5Icon, number6Icon, number7Icon, number8Icon, number9Icon, offers, offersFilledAppIcon, offersIcon, offers_filled_app, officeAppIcon, officeFilledAppIcon, office_app, office_filled_app, oilLevelIcon, oilLevelWarningIcon, oilTemperatureAppIcon, oil_level, oil_level_warning, oil_temperature_app, onCallDutyIcon, on_call_duty, openSatIcon, open_sat, orderIcon, orderStatusIcon, paintMaterialForwardIcon, paintMaterialIcon, paintShopIcon, paint_shop, paragraphAppIcon, paragraph_app, parkHeaterAppIcon, park_heater_app, parking, parkingFilledAppIcon, parkingGarageAppIcon, parkingIcon, parkingLocationIcon, parkingRouteAppIcon, parkingValetAppIcon, parking_filled_app, parking_garage_app, parking_route_app, parking_valet_app, partAvailabilityInfoIcon, partAvailabilityNoIcon, partAvailabilityUnknownIcon, partAvailabilityWarningIcon, partAvailabilityYesIcon, partIdenticalIcon, partIdenticalPredecessorIcon, partIdenticalSuccessorIcon, partIdenticalSuccpredecessorIcon, partPredecessorIcon, partSuccessorIcon, partSuccessorPredecessorIcon, partsChangelocationIcon, partsForwardIcon, partsIcon, partsInventoryIcon, partsNonStockForwardIcon, partsNonStockIcon, partsPickingIcon, partsPickingPlusIcon, partsReceivingIcon, pause, pauseIcon, payload, payloadIcon, paymentAppIcon, paymentCashAppIcon, paymentChargingCardAppIcon, paymentCreditcardAppIcon, paymentMachineAppIcon, payment_app, payment_cash_app, payment_charging_card_app, payment_creditcard_app, payment_machine_app, performance, performanceIcon, petrol, petrolIcon, phone, phoneIcon, pin, pinFilledAppIcon, pinGenericFilledAppIcon, pinIcon, pin_filled_app, pin_generic_filled_app, play, playIcon, plugCcsAppIcon, plugChademoAppIcon, plugChargeAppIcon, plugGenericAppIcon, plugSchukoAppIcon, plugType1AppIcon, plugType2AppIcon, plug_ccs_app, plug_chademo_app, plug_charge_app, plug_generic_app, plug_schuko_app, plug_type1_app, plug_type2_app, plusServiceIcon, porscheBrandIcon, power, powerIcon, powerTrainIcon, powertrain, preHeaterAppIcon, pre_heater_app, preciseLaneNavigationAppIcon, precise_lane_navigation_app, presentAppIcon, present_app, priceTypeSwitchIcon, printer, printerIcon, privacyAppIcon, privacy_app, profile, profileIcon, profileRegisterAppIcon, profileVerifiedIcon, profile_register_app, profile_verified, publicServiceIcon, publicTransportAppIcon, public_service, public_transport_app, qualifiedWorkshopIcon, qualified_workshop, questionnaireAppIcon, questionnaire_app, radio, radioButtonInselectedIcon, radioButtonSelectedForDefIcon, radioButtonSelectedIcon, radioIcon, radio_button_inselected, radio_button_selected, radio_button_selected_for_development, range, rangeIcon, reload, reloadIcon, remove, removeIcon, repeat, repeatIcon, repeatRepairIcon, replacementVehicleIcon, returnDateIcon, rewind, rewindIcon, roadsideAssistanceIcon, roadside_assistance, route, routeArrowAppIcon, routeIcon, route_arrow_app, routesHistoryAppIcon, routes_history_app, rss, rssIcon, safety, safetyIcon, save, saveAppIcon, saveIcon, save_app, seat, seatAirIcon, seatBrandIcon, seatIcon, seat_air, secretTipAppIcon, secretTipFilledAppIcon, secret_tip_app, secret_tip_filled_app, selected, selectedIcon, selectedPartnerNetworkAppIcon, selected_partner_network_app, sendToCarAppIcon, send_to_car_app, service, serviceAdvisorIcon, serviceBellIcon, serviceFilledAppIcon, serviceIcon, service_bell, service_filled_app, settings, settingsIcon, shareAndroidIcon, shareIosIcon, share_android, share_ios, shoppingCartFilledAppIcon, shoppingCartIcon, shopping_cart, shopping_cart_filled_app, shuffle, shuffleIcon, size, sizeIcon, skillAppIcon, skill_app, skipBackwardIcon, skipForwardIcon, skip_backward, skip_forward, skodaBrandIcon, softwareDownloadAppIcon, software_download_app, sortingAppIcon, sorting_app, sound, soundIcon, standardEquipmentIcon, standard_equipment, starFilledIcon, starOutlineIcon, star_filled, star_outline, statisticAppIcon, statistic_app, stockLocatorCommercialIcon, stockLocatorPrivateIcon, stock_locator_commercial, stock_locator_private, stop, stopIcon, strip, switchPositionAppIcon, switch_position_app, syncAppIcon, sync_app, taskAndAppointmentIcon, taxiDealerIcon, taxi_dealer, technicalSpecificationIcon, technical_specification, temperatureAppIcon, temperature_app, testDriveIcon, test_drive, textForwardIcon, thumbsdownAppIcon, thumbsdownFilledAppIcon, thumbsdown_app, thumbsdown_filled_app, thumbsupAppIcon, thumbsupFilledAppIcon, thumbsup_app, thumbsup_filled_app, timeClimatisationAppIcon, timePreferredAppIcon, time_climatisation_app, time_preferred_app, timer, timerIcon, topcardIcon, touaregServiceIcon, transcriptDownloadIcon, transcript_download, transmissionAutomaticIcon, transmissionManualIcon, transmission_automatic, transmission_manual, tripAppIcon, tripLongAppIcon, tripPartedAppIcon, tripShortAppIcon, trip_app, trip_long_app, trip_parted_app, trip_short_app, turnSignalsIcon, turn_signals, unselected, unselectedIcon, updateRefreshAppIcon, update_refresh_app, upload, uploadAppIcon, uploadCustomIcon, upload_app, usedCarCommercialIcon, usedCarPrivateIcon, used_car_commercial, used_car_private, vehicleAmarokIcon, vehicleCaddyIcon, vehicleConversionIcon, vehicleCrafterIcon, vehicleHightIcon, vehicleIdBuzzIcon, vehicleMultivanIcon, vehicleTransporterIcon, vehicle_amarok, vehicle_caddy, vehicle_crafter, vehicle_hight, vehicle_idbuzz, vehicle_multivan, vehicle_transporter, videoChatIcon, video_chat, view360Icon, view_360, vinIcon, virtualRealityIcon, virtual_reality, voiceMessageAppIcon, voice_message_app, volkswagenAppIcon, volkswagenIcon, volkswagen_app, volumeMaximumIcon, volumeMediumIcon, volumeMuteIcon, volume_maximum, volume_medium, volume_mute, vsfSearch48Icon, vsfSearchIcon, vwBrandIcon, vwConnectLicenseAppIcon, vw_connect_license_app, vwnBrandIcon, walkingAppIcon, walkingFilledAppIcon, walking_app, walking_filled_app, wallbox, wallboxIcon, wcAppIcon, wc_app, wcpIcon, weAssistAppIcon, weChargeAppIcon, weDeliverAppIcon, weExperienceAppIcon, weParkAppIcon, weUpgradeAppIcon, we_assist_app, we_charge_app, we_deliver_app, we_experience_app, we_park_app, we_upgrade_app, weatherSunAppIcon, weather_sun_app, wheelToWheelIcon, wheel_to_wheel, windscreenWashIcon, windscreen_wash, wlanHotspotIcon, wlan_hotspot, wrenchForwardIcon };
14666
+ export { ACShape, AcceptanceDateShape, AcceptedBrands, AccessoryPartsShape, AudiBrandShape, AwardWinnerPremiumShape, BIG_ENDIAN, BlocksGroupForwardShape, BundleForwardShape, BusinessCustomersCommercialShape, BusinessCustomersPrivateShape, BusinessPartnerWithCar, CLR_BLANK_OPTION, CONTENT_PROVIDER, CalculatorForwardShape, CaliforniaServiceShape, CampaignOutdatedShape, CampaignShape, CarOffSite, CarOnSite, CircleFilled, CircleHalfFilled, CircleQuarterFilled, CircleThreeQuartersFilled, ClrActionPanel, ClrActionPanelContainer, ClrActionPanelContainerContent, ClrActionPanelContainerFooter, ClrActionPanelModule, ClrActiveNotification, 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, ClrReadonlyDirective, ClrReadonlyDirectiveModule, ClrRequiredAllMultilang, ClrRequiredOneMultilang, ClrSearchField, ClrSearchFieldModule, ClrTimeInput, ClrTreetable, ClrTreetableActionOverflow, ClrTreetableCell, ClrTreetableColumn, ClrTreetableModule, ClrTreetablePlaceholder, ClrTreetableRow, ClrTreetableSortOrder, ClrViewEditSection, ClrViewEditSectionModule, ColumnHiddenStatePersistenceDirective, CompletedByDateShape, CupraBrandShape, Customer, CustomerVip, CustomerVipCollection, CustomerWaiting, CustomerWaitingCollection, DATE, DELIMITER_REGEX, DWABrandShape, DatagridFieldDirective, DayModel, DeliveryDate, DieselShape, DollarBillForwardShape, DollarBillPartialShape, EnergyShape, ExternalPartForwardShape, FirstRegistrationDate, GasCarsServiceShape, GasShape, HISTORY_NOTIFICATION_URL_PROVIDER, HISTORY_PROVIDER, HISTORY_TOKEN, HistoryProvider, InternalPartForwardShape, InvoiceReadyShape, InvoiceRecipient, InvoiceShape, Items, ItemsForwardShape, ItemsReceiveShape, LITTLE_ENDIAN, LITTLE_ENDIAN_REGEX, LocationBarComponent, LocationBarContentProvider, LocationBarNode, LogoCommissionModule, LogoCommissionModuleFavIcon, LogoCommissionModuleNegative, LogoCommissionModuleNegativeFavIcon, LogoCostApproval, LogoCostApprovalFavIcon, LogoCostApprovalNegative, LogoCostApprovalNegativeFavIcon, LogoCostControlling, LogoCostControllingFavIcon, LogoCostControllingNegative, LogoCostControllingNegativeFavIcon, LogoDigitalServiceReception, LogoDigitalServiceReceptionFavIcon, LogoDigitalServiceReceptionNegative, LogoDigitalServiceReceptionNegativeFavIcon, LogoDocFlow, LogoDocFlowFavIcon, LogoDocFlowNegative, LogoDocFlowNegativeFavIcon, LogoDocScan, LogoDocScanFavIcon, LogoDocScanNegative, LogoDocScanNegativeFavIcon, LogoDocStore, LogoDocStoreFavIcon, LogoDocStoreNegative, LogoDocStoreNegativeFavIcon, LogoEBilling, LogoEBillingFavIcon, LogoEBillingNegative, LogoEBillingNegativeFavIcon, LogoEPayment, LogoEPaymentFavIcon, LogoEPaymentNegative, LogoEPaymentNegativeFavIcon, LogoMobilityPlanner, LogoMobilityPlannerFavIcon, LogoMobilityPlannerNegative, LogoMobilityPlannerNegativeFavIcon, LogoPartsMobile, LogoPartsMobileFavIcon, LogoPartsMobileNegative, LogoPartsMobileNegativeFavIcon, LogoSBO, LogoSBOFavIcon, LogoSBONegative, LogoSBONegativeFavIcon, LogoServiceCube, LogoServiceCubeFavIcon, LogoServiceCubeNegative, LogoServiceCubeNegativeFavIcon, LogoWCP, LogoWCPFavIcon, LogoWCPNegative, LogoWCPNegativeFavIcon, LogoWorkshopOrderTracker, LogoWorkshopOrderTrackerFavIcon, LogoWorkshopOrderTrackerNegative, LogoWorkshopOrderTrackerNegativeFavIcon, MIDDLE_ENDIAN, MIDDLE_ENDIAN_REGEX, MONTH, Mechanic, NewCarUtilityVehicleShape, NodeId, Number0, Number1, Number10, Number11, Number12, Number13, Number14, Number15, Number16, Number17, Number18, Number19, Number2, Number20, Number3, Number4, Number5, Number6, Number7, Number8, Number9, OrderShape, OrderStatusShape, PaintMaterialForwardShape, PaintMaterialShape, ParkingLocation, PartAvailabilityInfoShape, PartAvailabilityNoShape, PartAvailabilityUnknownShape, PartAvailabilityWarningShape, PartAvailabilityYesShape, PartIdenticalPredecessorShape, PartIdenticalShape, PartIdenticalSuccessorShape, PartIdenticalSuccpredecessorShape, PartNonStockForwardShape, PartPredecessorShape, PartSuccessorPredecessorShape, PartSuccessorShape, PartsChangelocation, PartsForwardShape, PartsInventory, PartsNonStockShape, PartsPicking, PartsPickingPlus, PartsReceiving, PartsShape, PlusServiceShape, PopoverPositions, PorscheBrandShape, PriceTypeSwitchShape, RepeatRepairCollection, RepeatRepairShape, ReplacementVehicleCollection, ReplacementVehicleShape, ReturnDateShape, SEPARATOR_TEXT_DEFAULT, SeatBrandShape, Selection, ServiceAdvisor, SkodaBrandShape, Sort, StatePersistenceKeyDirective, TRANSLATIONS, TaskAndAppointment, TextForward, TimeModel, TopcardShape, TouaregServiceShape, TreetableCellRenderer, TreetableHeaderRenderer, TreetableItemsDirective, TreetableMainRenderer, TreetableRowRenderer, USER_INPUT_REGEX, VWBrandShape, VWNBrandShape, VWShape, VehicleConversionShape, VinShape, VsfSearchShape, VsfSearchShape48, WCPShape, WrenchForward, YEAR, acceleration, accelerationIcon, acceptanceDateIcon, accessories, accessoriesIcon, accessoryPartsIcon, adblueAppIcon, adblue_app, add, addIcon, airConditionerIcon, air_conditioning, alert, alertFilledAppIcon, alertIcon, alertNotificationFilledAppIcon, alert_filled_app, alert_notification_filled_app, allIcons, ambientLightAppIcon, ambient_light_app, amplifier, amplifierIcon, appConnectAppIcon, app_connect_app, archive, archiveIcon, arrowDownIcon, arrowLeftAlignedAppIcon, arrowLeftIcon, arrowRightIcon, arrowSliderAppIcon, arrowUpIcon, arrow_down, arrow_left, arrow_left_aligned_app, arrow_right, arrow_slider_app, arrow_up, attachment, attachmentIcon, audiBrandIcon, authentPlugChargeAppIcon, authentQrAppIcon, authentRfidAppIcon, authentTouchidAppIcon, authent_plug_charge_app, authent_qr_app, authent_rfid_app, authent_touch_id_app, automaticTempAppIcon, automatic_temp_app, awardWinnerPremiumIcon, award_winner_premium, back, backIcon, battery, batteryIcon, batterySocChargingAppIcon, batterySocDepartureAppIcon, batterySocDestinationAppIcon, battery_soc_charging_app, battery_soc_departure_app, battery_soc_destination_app, bin, binIcon, blocksGroupForwardIcon, bluetooth, bluetoothIcon, bookmark, bookmarkFilledIcon, bookmarkIcon, bookmark_filled, brakeAppIcon, brake_app, brochure, brochureIcon, bulletpointAppIcon, bulletpoint_app, bundleForwardIcon, businessCustomersCommercialIcon, businessCustomersPrivateIcon, businessPartnerWithCarIcon, business_customers_commercial, business_customers_private, calc, calcIcon, calculatorForwardIcon, calendar, calendarCustomIcon, californiaServiceIcon, californiaSpecialistIcon, california_specialist, cameraScanIcon, camera_scan, campaignIcon, campaignOutdatedIcon, carDocumentsIcon, carErrorAppIcon, carInsuranceIcon, carOffSite, carOnSite, carPickupServiceIcon, carPlusIcon, carSettingsIcon, carVerifiedAppIcon, carWashIcon, carWheelAppIcon, car_documents, car_error_app, car_insurance, car_pickup_service, car_plus, car_settings, car_verified_app, car_wheel_app, carwash, certifiedRepairIcon, certifiedRetailerIcon, certified_repair, certified_retailer, challengeAppIcon, challenge_app, charging, chargingIcon, chargingPduAppIcon, chargingStationIcon, chargingTarifOverviewAppIcon, charging_pdu_app, charging_station, charging_tarif_overview_app, chat, chatAppIcon, chatIcon, chat_app, checkboxCheckedAppIcon, checkboxCheckedIcon, checkboxUncheckedAppIcon, checkboxUncheckedIcon, checkbox_checked, checkbox_checked_app, checkbox_unchecked, checkbox_unchecked_app, checkmark, checkmarkAppIcon, checkmarkFilledAppIcon, checkmarkIcon, checkmark_app, checkmark_filled_app, chevronDownIcon, chevronLeftAlignedappIcon, chevronLeftIcon, chevronRightAlignedappIcon, chevronRightIcon, chevronSmallLeftAlignedappIcon, chevronSmallRightAlignedappIcon, chevronUpIcon, chevron_down, chevron_left, chevron_left_alignedapp, chevron_right, chevron_right_alignedapp, chevron_small_left_alignedapp, chevron_small_right_alignedapp, chevron_up, circleFilledIcon, circleHalfFilledIcon, circleQuarterFilledIcon, circleThreeQuartersFilledIcon, city, cityIcon, clearAppIcon, clearRightAlignedappIcon, clear_app, clear_right_alignedapp, clock, clockIcon, close, closeAppIcon, closeCircleIcon, closeIcon, closeLeftAlignedappIcon, closeRightAlignedappIcon, close_app, close_circle, close_left_alignedapp, close_right_alignedapp, clrIconSVG, coffeeFilledAppIcon, coffee_filled_app, compassAppIcon, compass_app, completedByDateIcon, configuratorCommercialIcon, configuratorPrivateIcon, configurator_commercial, configurator_private, construction, constructionIcon, consumptionFuelFilledAppIcon, consumptionIcon, consumption_fuel, consumption_fuel_filled_app, contact, contactDealerFilledAppIcon, contactDealerIcon, contactIcon, contact_dealer, contact_dealer_filled_app, countryRoadIcon, country_road, craft, craftIcon, cupraBrandIcon, customerIcon, customerVipIcon, customerWaitingIcon, customersCenterIcon, customers_center, dataCopyAppIcon, dataExpiredIcon, dataFilledIcon, dataInputIcon, dataPlugAppIcon, dataSearchIcon, dataTimeExtensionIcon, data_copy_app, data_expired, data_filled, data_input, data_plug_app, data_search, data_time_extension, defogDefrostAutoAppIcon, defogDefrostIcon, defog_defrost, defog_defrost_auto_app, deliveryDateIcon, destinationAppIcon, destination_app, dieselIcon, direction, directionIcon, dischargingAppIcon, discharging_app, discountAppIcon, discount_app, discoveryAppIcon, discovery_app, dollarBillForwardIcon, dollarBillPartialIcon, download, downloadCustomIcon, dragIndicatorIcon, drag_indicator, driversAssistanceIcon, drivers_assistance, dropFilledAppIcon, drop_filled_app, dwaBrandIcon, eco, ecoIcon, edit, editIcon, editSmallRightAlignedAppIcon, edit_small_right_aligned_app, efficiency, efficiencyIcon, electricCarsIcon, electricCarsServiceIcon, electric_cars, electric_cars_service, electricity, electricityFilledAppIcon, electricityIcon, electricity_filled_app, emergency, emergencyIcon, emission, emissionIcon, energyIcon, engine, engineIcon, entertainment, entertainmentIcon, escapeHtml, escapeRegex, exportAppIcon, export_app, expressServiceIcon, express_service, exterior, exterior360Icon, exteriorIcon, exterior_360, externalPartForwardIcon, faq, faqIcon, fastForwardIcon, fast_forward, fax, faxIcon, filter, filterIcon, findACarIcon, findADealerIcon, find_a_car, find_a_dealer, firstRegistrationDateIcon, fleetServiceCommercialIcon, fleetServicePrivateIcon, fleet_service_commercial, fleet_service_private, folderFilledAppIcon, folder_filled_app, foodFilledAppIcon, food_filled_app, formatNumber, fullscreenEnterIcon, fullscreenExitIcon, fullscreen_enter, fullscreen_exit, gallery, galleryIcon, garageAppIcon, garage_app, gasAppIcon, gasCarsServiceIcon, gasIcon, gas_app, glassDamageAppIcon, glass_damage_app, gte, gteIcon, heart, heartFilledAppIcon, heartIcon, heart_filled_app, heightAppIcon, height_app, highwayRoadIcon, highway_road, history, historyIcon, homeAppIcon, homeEnergyAppIcon, homeFilledAppIcon, home_app, home_energy_app, home_filled_app, hornAppIcon, hornFilledAppIcon, horn_app, horn_filled_app, hybrid, hybridIcon, immediateChargingAppIcon, immediate_charging_app, info, infoFilledIcon, infoIcon, info_filled, inputHideIcon, inputShowIcon, input_hide, input_show, interior, interior360Icon, interiorIcon, interior_360, internalPartForwardIcon, internet, internetIcon, invitationAppIcon, invitation_app, invoiceIcon, invoiceReadyIcon, invoiceRecipientIcon, itemsForwardIcon, itemsRecieveIcon, jobportal, jobportalIcon, keyAppIcon, keyCardAppIcon, keyDigitalAppIcon, key_app, key_card_app, key_digital_app, keyboardAppIcon, keyboard_app, layerCollapseAppIcon, layerExpandAppIcon, layer_collapse_app, layer_expand_app, layersAppIcon, layers_app, legalTermsAndConditionsAppIcon, legal_terms_and_conditions_app, licencePlateAppIcon, licence_plate_app, lightAssistappIcon, light_assistapp, lightingAppIcon, lighting_app, linkExternAppIcon, link_extern_app, list, listIcon, loadingVolumeIcon, loading_volume, localBusinessIcon, local_business, locate, locateIcon, lock, lockIcon, lockOpenIcon, lock_open, login, loginIcon, logistic, logisticIcon, logoCommissionModuleFavIcon, logoCommissionModuleIcon, logoCommissionModuleNegativeFavIcon, logoCommissionModuleNegativeIcon, logoCostApprovalFavIcon, logoCostApprovalIcon, logoCostApprovalNegativeFavIcon, logoCostApprovalNegativeIcon, logoCrossControllingFavIcon, logoCrossControllingIcon, logoCrossControllingNegativeFavIcon, logoCrossControllingNegativeIcon, logoDigitalServiceReceptionFavIcon, logoDigitalServiceReceptionIcon, logoDigitalServiceReceptionNegativeFavIcon, logoDigitalServiceReceptionNegativeIcon, logoDocFlowFavIcon, logoDocFlowIcon, logoDocFlowNegativeFavIcon, logoDocFlowNegativeIcon, logoDocScanFavIcon, logoDocScanIcon, logoDocScanNegativeFavIcon, logoDocScanNegativeIcon, logoDocStoreFavIcon, logoDocStoreIcon, logoDocStoreNegativeFavIcon, logoDocStoreNegativeIcon, logoEBillingFavIcon, logoEBillingIcon, logoEBillingNegativeFavIcon, logoEBillingNegativeIcon, logoEPaymentFavIcon, logoEPaymentIcon, logoEPaymentNegativeFavIcon, logoEPaymentNegativeIcon, logoMobilityPlannerFavIcon, logoMobilityPlannerIcon, logoMobilityPlannerNegativeFavIcon, logoMobilityPlannerNegativeIcon, logoPartsMobileFavIcon, logoPartsMobileIcon, logoPartsMobileNegativeFavIcon, logoPartsMobileNegativeIcon, logoSBOFavIcon, logoSBOIcon, logoSBONegativeFavIcon, logoSBONegativeIcon, logoServiceCubeFavIcon, logoServiceCubeIcon, logoServiceCubeNegativeFavIcon, logoServiceCubeNegativeIcon, logoWCPFavIcon, logoWCPIcon, logoWCPNegativeFavIcon, logoWCPNegativeIcon, logoWorkshopOrderTrackerFavIcon, logoWorkshopOrderTrackerIcon, logoWorkshopOrderTrackerNegativeFavIcon, logoWorkshopOrderTrackerNegativeIcon, logout, logoutIcon, magnifier, magnifierIcon, magnifierMinusIcon, magnifierPlusIcon, magnifier_minus, magnifier_plus, mail, mailIcon, mailResendAppIcon, mail_resend_app, manual, manualIcon, map, mapIcon, mechanicIcon, media, mediaIcon, menu, menuAppAppIcon, menuIcon, menu_app_app, microphoneAppIcon, microphone_app, mobile, mobileIcon, moreAppIcon, moreAppbarAppIcon, more_app, more_appbar_app, mot, motIcon, motability, motabilityIcon, navigate, navigateFilledAppIcon, navigateIcon, navigate_filled_app, newCarCommercialIcon, newCarPrivateFilledAppIcon, newCarPrivateIcon, newCarUtilityVehicleIcon, new_car_commercial, new_car_private, new_car_private_filled_app, nightServiceIcon, night_service, notification, notificationFilledIcon, notificationIcon, notification_filled, number0Icon, number10Icon, number11Icon, number12Icon, number13Icon, number14Icon, number15Icon, number16Icon, number17Icon, number18Icon, number19Icon, number1Icon, number20Icon, number2Icon, number3Icon, number4Icon, number5Icon, number6Icon, number7Icon, number8Icon, number9Icon, offers, offersFilledAppIcon, offersIcon, offers_filled_app, officeAppIcon, officeFilledAppIcon, office_app, office_filled_app, oilLevelIcon, oilLevelWarningIcon, oilTemperatureAppIcon, oil_level, oil_level_warning, oil_temperature_app, onCallDutyIcon, on_call_duty, openSatIcon, open_sat, orderIcon, orderStatusIcon, paintMaterialForwardIcon, paintMaterialIcon, paintShopIcon, paint_shop, paragraphAppIcon, paragraph_app, parkHeaterAppIcon, park_heater_app, parking, parkingFilledAppIcon, parkingGarageAppIcon, parkingIcon, parkingLocationIcon, parkingRouteAppIcon, parkingValetAppIcon, parking_filled_app, parking_garage_app, parking_route_app, parking_valet_app, partAvailabilityInfoIcon, partAvailabilityNoIcon, partAvailabilityUnknownIcon, partAvailabilityWarningIcon, partAvailabilityYesIcon, partIdenticalIcon, partIdenticalPredecessorIcon, partIdenticalSuccessorIcon, partIdenticalSuccpredecessorIcon, partPredecessorIcon, partSuccessorIcon, partSuccessorPredecessorIcon, partsChangelocationIcon, partsForwardIcon, partsIcon, partsInventoryIcon, partsNonStockForwardIcon, partsNonStockIcon, partsPickingIcon, partsPickingPlusIcon, partsReceivingIcon, pause, pauseIcon, payload, payloadIcon, paymentAppIcon, paymentCashAppIcon, paymentChargingCardAppIcon, paymentCreditcardAppIcon, paymentMachineAppIcon, payment_app, payment_cash_app, payment_charging_card_app, payment_creditcard_app, payment_machine_app, performance, performanceIcon, petrol, petrolIcon, phone, phoneIcon, pin, pinFilledAppIcon, pinGenericFilledAppIcon, pinIcon, pin_filled_app, pin_generic_filled_app, play, playIcon, plugCcsAppIcon, plugChademoAppIcon, plugChargeAppIcon, plugGenericAppIcon, plugSchukoAppIcon, plugType1AppIcon, plugType2AppIcon, plug_ccs_app, plug_chademo_app, plug_charge_app, plug_generic_app, plug_schuko_app, plug_type1_app, plug_type2_app, plusServiceIcon, porscheBrandIcon, power, powerIcon, powerTrainIcon, powertrain, preHeaterAppIcon, pre_heater_app, preciseLaneNavigationAppIcon, precise_lane_navigation_app, presentAppIcon, present_app, priceTypeSwitchIcon, printer, printerIcon, privacyAppIcon, privacy_app, profile, profileIcon, profileRegisterAppIcon, profileVerifiedIcon, profile_register_app, profile_verified, publicServiceIcon, publicTransportAppIcon, public_service, public_transport_app, qualifiedWorkshopIcon, qualified_workshop, questionnaireAppIcon, questionnaire_app, radio, radioButtonInselectedIcon, radioButtonSelectedForDefIcon, radioButtonSelectedIcon, radioIcon, radio_button_inselected, radio_button_selected, radio_button_selected_for_development, range, rangeIcon, reload, reloadIcon, remove, removeIcon, repeat, repeatIcon, repeatRepairIcon, replacementVehicleIcon, returnDateIcon, rewind, rewindIcon, roadsideAssistanceIcon, roadside_assistance, route, routeArrowAppIcon, routeIcon, route_arrow_app, routesHistoryAppIcon, routes_history_app, rss, rssIcon, safety, safetyIcon, save, saveAppIcon, saveIcon, save_app, seat, seatAirIcon, seatBrandIcon, seatIcon, seat_air, secretTipAppIcon, secretTipFilledAppIcon, secret_tip_app, secret_tip_filled_app, selected, selectedIcon, selectedPartnerNetworkAppIcon, selected_partner_network_app, sendToCarAppIcon, send_to_car_app, service, serviceAdvisorIcon, serviceBellIcon, serviceFilledAppIcon, serviceIcon, service_bell, service_filled_app, settings, settingsIcon, shareAndroidIcon, shareIosIcon, share_android, share_ios, shoppingCartFilledAppIcon, shoppingCartIcon, shopping_cart, shopping_cart_filled_app, shuffle, shuffleIcon, size, sizeIcon, skillAppIcon, skill_app, skipBackwardIcon, skipForwardIcon, skip_backward, skip_forward, skodaBrandIcon, softwareDownloadAppIcon, software_download_app, sortingAppIcon, sorting_app, sound, soundIcon, standardEquipmentIcon, standard_equipment, starFilledIcon, starOutlineIcon, star_filled, star_outline, statisticAppIcon, statistic_app, stockLocatorCommercialIcon, stockLocatorPrivateIcon, stock_locator_commercial, stock_locator_private, stop, stopIcon, strip, switchPositionAppIcon, switch_position_app, syncAppIcon, sync_app, taskAndAppointmentIcon, taxiDealerIcon, taxi_dealer, technicalSpecificationIcon, technical_specification, temperatureAppIcon, temperature_app, testDriveIcon, test_drive, textForwardIcon, thumbsdownAppIcon, thumbsdownFilledAppIcon, thumbsdown_app, thumbsdown_filled_app, thumbsupAppIcon, thumbsupFilledAppIcon, thumbsup_app, thumbsup_filled_app, timeClimatisationAppIcon, timePreferredAppIcon, time_climatisation_app, time_preferred_app, timer, timerIcon, topcardIcon, touaregServiceIcon, transcriptDownloadIcon, transcript_download, transmissionAutomaticIcon, transmissionManualIcon, transmission_automatic, transmission_manual, tripAppIcon, tripLongAppIcon, tripPartedAppIcon, tripShortAppIcon, trip_app, trip_long_app, trip_parted_app, trip_short_app, turnSignalsIcon, turn_signals, unselected, unselectedIcon, updateRefreshAppIcon, update_refresh_app, upload, uploadAppIcon, uploadCustomIcon, upload_app, usedCarCommercialIcon, usedCarPrivateIcon, used_car_commercial, used_car_private, vehicleAmarokIcon, vehicleCaddyIcon, vehicleConversionIcon, vehicleCrafterIcon, vehicleHightIcon, vehicleIdBuzzIcon, vehicleMultivanIcon, vehicleTransporterIcon, vehicle_amarok, vehicle_caddy, vehicle_crafter, vehicle_hight, vehicle_idbuzz, vehicle_multivan, vehicle_transporter, videoChatIcon, video_chat, view360Icon, view_360, vinIcon, virtualRealityIcon, virtual_reality, voiceMessageAppIcon, voice_message_app, volkswagenAppIcon, volkswagenIcon, volkswagen_app, volumeMaximumIcon, volumeMediumIcon, volumeMuteIcon, volume_maximum, volume_medium, volume_mute, vsfSearch48Icon, vsfSearchIcon, vwBrandIcon, vwConnectLicenseAppIcon, vw_connect_license_app, vwnBrandIcon, walkingAppIcon, walkingFilledAppIcon, walking_app, walking_filled_app, wallbox, wallboxIcon, wcAppIcon, wc_app, wcpIcon, weAssistAppIcon, weChargeAppIcon, weDeliverAppIcon, weExperienceAppIcon, weParkAppIcon, weUpgradeAppIcon, we_assist_app, we_charge_app, we_deliver_app, we_experience_app, we_park_app, we_upgrade_app, weatherSunAppIcon, weather_sun_app, wheelToWheelIcon, wheel_to_wheel, windscreenWashIcon, windscreen_wash, wlanHotspotIcon, wlan_hotspot, wrenchForwardIcon };
14156
14667
  //# sourceMappingURL=clr-addons.mjs.map