@porscheinformatik/clr-addons 21.0.7 → 21.1.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,5 +1,5 @@
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, DOCUMENT, Inject, ContentChild, Optional, input, ChangeDetectionStrategy, signal, computed, SkipSelf, inject, model, contentChild, linkedSignal, DestroyRef, contentChildren, effect, output, viewChild, InjectionToken, isSignal, HostListener, LOCALE_ID, Self, Host, ChangeDetectorRef, NgZone, Injector, untracked, runInInjectionContext } from '@angular/core';
2
+ import { Component, NgModule, Injectable, EventEmitter, Output, Input, Directive, ViewChild, ContentChildren, TemplateRef, ViewChildren, HostBinding, ElementRef, Renderer2, forwardRef, DOCUMENT, Inject, ContentChild, Optional, input, ChangeDetectionStrategy, signal, computed, SkipSelf, inject, model, contentChild, linkedSignal, DestroyRef, contentChildren, effect, viewChild, ViewContainerRef, output, afterRenderEffect, InjectionToken, isSignal, HostListener, LOCALE_ID, Self, Host, ChangeDetectorRef, NgZone, Injector, untracked, runInInjectionContext } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule, NgComponentOutlet, NgTemplateOutlet, getLocaleDateFormat, FormatWidth, NgOptimizedImage, NgClass } from '@angular/common';
5
5
  import * as i2 from '@clr/angular/icon';
@@ -7,9 +7,9 @@ import { ClarityIcons, arrowIcon, angleIcon, timesIcon, trashIcon, plusCircleIco
7
7
  import * as i3 from '@angular/forms';
8
8
  import { FormsModule, NG_VALIDATORS, NgControl, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormControl, NgModel } from '@angular/forms';
9
9
  import * as i1$2 from '@clr/angular';
10
- import { ClarityModule, ClrFormsModule, ClrDropdown, ClrIcon, ClrForm, ClrAlert, ClrPopoverPosition, ClrPopoverService, ClrCommonStringsService, ClrDropdownModule, ClrDatagrid, ClrDatagridColumn, ClrDatagridSortOrder, DatagridPropertyComparator, ClrDatagridPagination, ClrDatagridFilter, ClrControlLabel, ClrControlHelper, ClrControlError, ClrControlSuccess, ClrDatepickerModule, ClrTooltipModule } from '@clr/angular';
11
- import { Subject, BehaviorSubject, timer as timer$1, asyncScheduler, interval, map as map$1, distinctUntilChanged, shareReplay, combineLatest, skip, auditTime, fromEvent, take as take$1, merge, debounceTime as debounceTime$1, tap, of, switchMap, filter as filter$2, ReplaySubject, takeUntil as takeUntil$1, delay } from 'rxjs';
12
- import { takeUntil, take, observeOn, filter as filter$1, debounceTime } from 'rxjs/operators';
10
+ import { ClarityModule, ClrFormsModule, ClrDropdown, ClrIcon, ClrForm, ClrAlert, ClrPopoverPosition, ClrPopoverService, ClrCommonStringsService, ClrPopoverType, ClrPopoverHostDirective, CdkTrapFocusModule, ClrDropdownModule, ClrDatagrid, ClrDatagridColumn, ClrDatagridSortOrder, DatagridPropertyComparator, ClrDatagridPagination, ClrDatagridFilter, ClrControlLabel, ClrControlHelper, ClrControlError, ClrControlSuccess, ClrDatepickerModule, ClrTooltipModule } from '@clr/angular';
11
+ import { Subject, BehaviorSubject, timer as timer$1, asyncScheduler, interval, map as map$1, distinctUntilChanged, shareReplay, combineLatest, skip, auditTime, tap, share, merge, fromEvent, first, take as take$1, debounceTime as debounceTime$1, of, switchMap, filter as filter$2, ReplaySubject, takeUntil as takeUntil$1, delay } from 'rxjs';
12
+ import { takeUntil, take, observeOn, filter as filter$1, skip as skip$1, debounceTime } from 'rxjs/operators';
13
13
  import * as i2$1 from '@angular/router';
14
14
  import { RouterModule } from '@angular/router';
15
15
  import { trigger, transition, style, animate, state } from '@angular/animations';
@@ -20,10 +20,10 @@ import * as i2$3 from '@clr/angular/popover/common';
20
20
  import * as i2$4 from '@clr/angular/emphasis/alert';
21
21
  import { takeUntilDestroyed, toObservable, outputFromObservable, toSignal } from '@angular/core/rxjs-interop';
22
22
  import * as i1$3 from '@clr/angular/progress/spinner';
23
+ import * as i4 from '@clr/angular/forms/checkbox';
23
24
  import * as i3$2 from '@clr/angular/forms/input';
24
25
  import * as i1$4 from '@angular/common/http';
25
26
  import { CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';
26
- import * as i4 from '@clr/angular/forms/checkbox';
27
27
  import * as i4$1 from '@clr/angular/forms/datepicker';
28
28
  import { CdkCopyToClipboard } from '@angular/cdk/clipboard';
29
29
  import * as i1$5 from '@clr/angular/popover/tooltip';
@@ -3699,7 +3699,7 @@ class ClrTreetableActionOverflow {
3699
3699
  </div>
3700
3700
  </ng-container>
3701
3701
  }
3702
- `, isInline: true, dependencies: [{ kind: "component", type: i2.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }, { kind: "directive", type: i2.CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i2$3.ClrPopoverOrigin, selector: "[clrPopoverOrigin]" }, { kind: "directive", type: i2$3.ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: i2$3.ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentAvailablePositions", "clrPopoverContentType", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose", "clrPopoverContentOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3702
+ `, isInline: true, dependencies: [{ kind: "component", type: i2.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }, { kind: "directive", type: i2.CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i2$3.ClrPopoverOrigin, selector: "[clrPopoverOrigin]" }, { kind: "directive", type: i2$3.ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: i2$3.ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentAvailablePositions", "clrPopoverContentType", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose", "clrPopoverContentOrigin"] }, { kind: "directive", type: i1$2.CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3703
3703
  }
3704
3704
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ClrTreetableActionOverflow, decorators: [{
3705
3705
  type: Component,
@@ -3925,11 +3925,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
3925
3925
  }], propDecorators: { clrExpanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "clrExpanded", required: false }] }, { type: i0.Output, args: ["clrExpandedChange"] }], clrExpandable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clrExpandable", required: false }] }], clrClickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clrClickable", required: false }] }], clrTtItem: [{ type: i0.Input, args: [{ isSignal: true, alias: "clrTtItem", required: false }] }], _actionOverflow: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ClrTreetableActionOverflow), { isSignal: true }] }] } });
3926
3926
 
3927
3927
  /*
3928
- * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
3928
+ * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.
3929
3929
  * This software is released under MIT license.
3930
3930
  * The full license information can be found in LICENSE in the root directory of this project.
3931
3931
  */
3932
- class Sort {
3932
+ class SortStateService {
3933
3933
  constructor() {
3934
3934
  this._comparator = signal(null, ...(ngDevMode ? [{ debugName: "_comparator" }] : /* istanbul ignore next */ []));
3935
3935
  this._reverse = signal(false, ...(ngDevMode ? [{ debugName: "_reverse" }] : /* istanbul ignore next */ []));
@@ -3970,10 +3970,10 @@ class Sort {
3970
3970
  }
3971
3971
  return (this._reverse() ? -1 : 1) * currentComparator.compare(a, b);
3972
3972
  }
3973
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: Sort, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3974
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: Sort }); }
3973
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SortStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3974
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SortStateService }); }
3975
3975
  }
3976
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: Sort, decorators: [{
3976
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SortStateService, decorators: [{
3977
3977
  type: Injectable
3978
3978
  }] });
3979
3979
 
@@ -4186,7 +4186,7 @@ function areFiltersDistinct(prev, curr) {
4186
4186
  }
4187
4187
 
4188
4188
  /*
4189
- * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
4189
+ * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.
4190
4190
  * This software is released under MIT license.
4191
4191
  * The full license information can be found in LICENSE in the root directory of this project.
4192
4192
  */
@@ -4204,7 +4204,7 @@ class RegisteredTreetableFilter {
4204
4204
  this.unregister = unregister;
4205
4205
  }
4206
4206
  }
4207
- class Filters {
4207
+ class FilterStateService {
4208
4208
  constructor() {
4209
4209
  this._destroyRef = inject(DestroyRef);
4210
4210
  this.filterId = 0;
@@ -4269,10 +4269,10 @@ class Filters {
4269
4269
  });
4270
4270
  return registered;
4271
4271
  }
4272
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: Filters, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4273
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: Filters }); }
4272
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: FilterStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4273
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: FilterStateService }); }
4274
4274
  }
4275
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: Filters, decorators: [{
4275
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: FilterStateService, decorators: [{
4276
4276
  type: Injectable
4277
4277
  }], ctorParameters: () => [] });
4278
4278
 
@@ -4334,14 +4334,14 @@ function areTreetableStatesEqual(prev, curr) {
4334
4334
  }
4335
4335
 
4336
4336
  /*
4337
- * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
4337
+ * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.
4338
4338
  * This software is released under MIT license.
4339
4339
  * The full license information can be found in LICENSE in the root directory of this project.
4340
4340
  */
4341
4341
  class TreetableDataStateService {
4342
4342
  constructor() {
4343
- this._filters = inject((Filters));
4344
- this._sort = inject((Sort));
4343
+ this._filters = inject((FilterStateService));
4344
+ this._sort = inject((SortStateService));
4345
4345
  this._dataSource = signal(undefined, ...(ngDevMode ? [{ debugName: "_dataSource" }] : /* istanbul ignore next */ []));
4346
4346
  this._stickyIndeterminate = signal(false, ...(ngDevMode ? [{ debugName: "_stickyIndeterminate" }] : /* istanbul ignore next */ []));
4347
4347
  this._itemsExternallySelected = signal([], ...(ngDevMode ? [{ debugName: "_itemsExternallySelected" }] : /* istanbul ignore next */ []));
@@ -4489,8 +4489,164 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
4489
4489
  type: Injectable
4490
4490
  }], ctorParameters: () => [] });
4491
4491
 
4492
+ const TreetableColumnUpdate = {
4493
+ WIDTH: 'WIDTH',
4494
+ HIDDEN: 'HIDDEN',
4495
+ RESET_HIDDEN: 'RESET_HIDDEN',
4496
+ };
4497
+ class TreetableColumnStateService {
4498
+ constructor() {
4499
+ this._changeWidth$ = new Subject();
4500
+ this._changeHideable$ = new Subject();
4501
+ this._changeHiddenForAll$ = new Subject();
4502
+ this._changeHidden$ = new Subject();
4503
+ this._resetHidden$ = new Subject();
4504
+ this._columnState = signal({}, ...(ngDevMode ? [{ debugName: "_columnState" }] : /* istanbul ignore next */ []));
4505
+ this.columns = computed(() => Object.values(this._columnState()).sort((a, b) => a.columnIndex - b.columnIndex), ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
4506
+ this.visibleColumns = computed(() => this.columns().filter(column => !column.hidden), ...(ngDevMode ? [{ debugName: "visibleColumns" }] : /* istanbul ignore next */ []));
4507
+ this.hideableColumns = computed(() => this.columns().filter(column => column.hideable), ...(ngDevMode ? [{ debugName: "hideableColumns" }] : /* istanbul ignore next */ []));
4508
+ this.hasHideableColumns = computed(() => this.hideableColumns()?.length > 0, ...(ngDevMode ? [{ debugName: "hasHideableColumns" }] : /* istanbul ignore next */ []));
4509
+ this._changeWidthAction$ = this._changeWidth$.pipe(tap(({ id, width }) => this.update(id, { width })), share());
4510
+ this._changeHideableAction$ = this._changeHideable$.pipe(tap(patch => {
4511
+ const current = this.getColumn(patch.id);
4512
+ if (current.hideable && !patch.hideable) {
4513
+ this.update(patch.id, { hideable: false, hidden: false, initialHidden: false });
4514
+ }
4515
+ if (!current.hideable && patch.hideable) {
4516
+ this.update(patch.id, { hideable: true, hidden: patch.hidden, initialHidden: patch.hidden });
4517
+ }
4518
+ this.update(patch.id, { hidden: patch.hidden });
4519
+ }), share());
4520
+ this._changeHiddenAction$ = this._changeHidden$.pipe(filter$1(change => this.getColumn(change.id)?.hideable), tap(change => this.update(change.id, { hidden: change.hidden })), share());
4521
+ this._changeHiddenForAllAction$ = this._changeHiddenForAll$.pipe(tap(change => {
4522
+ this._columnState.update(current => Object.fromEntries(Object.entries(current).map(([id, column]) => [
4523
+ id,
4524
+ {
4525
+ ...column,
4526
+ hidden: change,
4527
+ },
4528
+ ])));
4529
+ }), share());
4530
+ this._resetHiddenAction$ = this._resetHidden$.pipe(tap(() => {
4531
+ this._columnState.update(current => Object.fromEntries(Object.entries(current).map(([id, column]) => [
4532
+ id,
4533
+ column.hideable
4534
+ ? {
4535
+ ...column,
4536
+ hidden: column.initialHidden,
4537
+ }
4538
+ : column,
4539
+ ])));
4540
+ }), share());
4541
+ this.changes$ = merge(this._changeWidthAction$.pipe(map$1(() => TreetableColumnUpdate.WIDTH)), this._changeHideableAction$.pipe(map$1(() => TreetableColumnUpdate.HIDDEN)), this._changeHiddenForAllAction$.pipe(map$1(() => TreetableColumnUpdate.HIDDEN)), this._changeHiddenAction$.pipe(map$1(() => TreetableColumnUpdate.HIDDEN)), this._resetHiddenAction$.pipe(map$1(() => TreetableColumnUpdate.HIDDEN)));
4542
+ this._changeWidthAction$.pipe(takeUntilDestroyed()).subscribe();
4543
+ this._changeHideableAction$.pipe(takeUntilDestroyed()).subscribe();
4544
+ this._changeHiddenForAllAction$.pipe(takeUntilDestroyed()).subscribe();
4545
+ this._changeHiddenAction$.pipe(takeUntilDestroyed()).subscribe();
4546
+ this._resetHiddenAction$.pipe(takeUntilDestroyed()).subscribe();
4547
+ }
4548
+ register(options) {
4549
+ this._columnState.update(current => ({
4550
+ ...current,
4551
+ [options.id]: {
4552
+ id: options.id,
4553
+ columnIndex: Number.MAX_SAFE_INTEGER,
4554
+ hideable: false,
4555
+ hidden: false,
4556
+ initialHidden: false,
4557
+ titleTemplateRef: options.titleTemplateRef,
4558
+ },
4559
+ }));
4560
+ }
4561
+ registerHideable(columnId, options) {
4562
+ this._columnState.update(current => {
4563
+ const existing = current[columnId];
4564
+ if (!existing) {
4565
+ return current;
4566
+ }
4567
+ return {
4568
+ ...current,
4569
+ [columnId]: {
4570
+ ...existing,
4571
+ hideable: options.hideable,
4572
+ hidden: options.hidden,
4573
+ initialHidden: options.initialHidden ?? options.hidden,
4574
+ titleTemplateRef: options.titleTemplateRef,
4575
+ },
4576
+ };
4577
+ });
4578
+ }
4579
+ unregister(id) {
4580
+ this._columnState.update(current => {
4581
+ const next = { ...current };
4582
+ delete next[id];
4583
+ return next;
4584
+ });
4585
+ }
4586
+ initializeOrder(idsInRenderOrder) {
4587
+ this._columnState.update(current => {
4588
+ const next = { ...current };
4589
+ idsInRenderOrder.forEach((id, index) => {
4590
+ if (next[id]) {
4591
+ next[id] = {
4592
+ ...next[id],
4593
+ columnIndex: index,
4594
+ };
4595
+ }
4596
+ });
4597
+ return next;
4598
+ });
4599
+ }
4600
+ changeWidth(id, width) {
4601
+ this._changeWidth$.next({ id, width });
4602
+ }
4603
+ changeHideable(id, hideable, hidden) {
4604
+ this._changeHideable$.next({ id, hideable, hidden: hidden ?? false });
4605
+ }
4606
+ changeHiddenForAll(hidden) {
4607
+ this._changeHiddenForAll$.next(hidden);
4608
+ }
4609
+ displayAllColumns() {
4610
+ this.changeHiddenForAll(false);
4611
+ }
4612
+ toggleHidden(id) {
4613
+ const current = this.getColumn(id);
4614
+ this._changeHidden$.next({ id, hidden: !current.hidden });
4615
+ }
4616
+ resetToInitialHidden() {
4617
+ this._resetHidden$.next();
4618
+ }
4619
+ getColumnState(id) {
4620
+ return toObservable(this._columnState).pipe(map$1(columns => columns[id]), distinctUntilChanged());
4621
+ }
4622
+ getColumn(id) {
4623
+ return this._columnState()[id];
4624
+ }
4625
+ update(id, patch) {
4626
+ this._columnState.update(current => {
4627
+ const existing = current[id];
4628
+ if (!existing) {
4629
+ return current;
4630
+ }
4631
+ return {
4632
+ ...current,
4633
+ [id]: {
4634
+ ...existing,
4635
+ ...patch,
4636
+ id: existing.id,
4637
+ },
4638
+ };
4639
+ });
4640
+ }
4641
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TreetableColumnStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4642
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TreetableColumnStateService }); }
4643
+ }
4644
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TreetableColumnStateService, decorators: [{
4645
+ type: Injectable
4646
+ }], ctorParameters: () => [] });
4647
+
4492
4648
  /*
4493
- * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
4649
+ * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.
4494
4650
  * This software is released under MIT license.
4495
4651
  * The full license information can be found in LICENSE in the root directory of this project.
4496
4652
  */
@@ -4528,11 +4684,23 @@ class ClrTreetable {
4528
4684
  this._dataStateService.toggleSelectionForDisplayedNodes();
4529
4685
  }
4530
4686
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ClrTreetable, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4531
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: ClrTreetable, isStandalone: false, selector: "clr-treetable", inputs: { clrClickableRows: { classPropertyName: "clrClickableRows", publicName: "clrClickableRows", isSignal: true, isRequired: false, transformFunction: null }, clrHideHeader: { classPropertyName: "clrHideHeader", publicName: "clrHideHeader", isSignal: true, isRequired: false, transformFunction: null }, clrTtLoading: { classPropertyName: "clrTtLoading", publicName: "clrTtLoading", isSignal: true, isRequired: false, transformFunction: null }, clrTtSelected: { classPropertyName: "clrTtSelected", publicName: "clrTtSelected", isSignal: true, isRequired: false, transformFunction: null }, clrTtAutoParentSelection: { classPropertyName: "clrTtAutoParentSelection", publicName: "clrTtAutoParentSelection", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clrTtSelectedChange: "clrTtSelectedChange", clrTtRefresh: "clrTtRefresh" }, host: { properties: { "class.empty": "empty()", "class.treetable-host": "true" } }, providers: [TREETABLE_RECURSION_SERVICE_PROVIDER, TreetableDataStateService, Sort, Filters], queries: [{ propertyName: "_ttRows", predicate: ClrTreetableRow, descendants: true, isSignal: true }, { propertyName: "_actionOverflow", predicate: ClrTreetableActionOverflow, descendants: true, isSignal: true }], ngImport: i0, template: "<!--\n~ Copyright (c) 2018-2026 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]=\"clrHideHeader()\">\n @if (showSelection() && !empty()) {\n <div class=\"clr-checkbox-wrapper treetable-row-selection treetable-column\" role=\"row\">\n <input\n type=\"checkbox\"\n data-testId=\"clrTtSelectAll\"\n [checked]=\"areAllRowsSelected()\"\n (change)=\"toggleSelectAll()\"\n />\n </div>\n } @if (hasActionOverflow()) {\n <div class=\"treetable-row-actions treetable-column\">&nbsp;</div>\n }\n <div class=\"treetable-row-scrollable\" role=\"row\">\n <ng-content select=\"clr-tt-column\" />\n </div>\n </div>\n <div class=\"treetable-body\">\n @if (isRecursionMode()) {\n <clr-tt-recursive-rows [children]=\"displayedNodes()\" />\n } @else {\n <ng-content select=\"clr-tt-row\" />\n } @if (empty()) {\n <ng-content select=\"clr-tt-placeholder\" />\n }\n </div>\n </div>\n @if (clrTtLoading()) {\n <div class=\"treetable-spinner\">\n <clr-spinner clrMedium />\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: i1$3.ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "component", type: ClrTreetableRecursiveRows, selector: "clr-tt-recursive-rows", inputs: ["parent", "children"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4687
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: ClrTreetable, isStandalone: false, selector: "clr-treetable", inputs: { clrClickableRows: { classPropertyName: "clrClickableRows", publicName: "clrClickableRows", isSignal: true, isRequired: false, transformFunction: null }, clrHideHeader: { classPropertyName: "clrHideHeader", publicName: "clrHideHeader", isSignal: true, isRequired: false, transformFunction: null }, clrTtLoading: { classPropertyName: "clrTtLoading", publicName: "clrTtLoading", isSignal: true, isRequired: false, transformFunction: null }, clrTtSelected: { classPropertyName: "clrTtSelected", publicName: "clrTtSelected", isSignal: true, isRequired: false, transformFunction: null }, clrTtAutoParentSelection: { classPropertyName: "clrTtAutoParentSelection", publicName: "clrTtAutoParentSelection", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clrTtSelectedChange: "clrTtSelectedChange", clrTtRefresh: "clrTtRefresh" }, host: { properties: { "class.empty": "empty()", "class.treetable-host": "true" } }, providers: [
4688
+ TREETABLE_RECURSION_SERVICE_PROVIDER,
4689
+ TreetableDataStateService,
4690
+ TreetableColumnStateService,
4691
+ SortStateService,
4692
+ FilterStateService,
4693
+ ], queries: [{ propertyName: "_ttRows", predicate: ClrTreetableRow, descendants: true, isSignal: true }, { propertyName: "_actionOverflow", predicate: ClrTreetableActionOverflow, descendants: true, isSignal: true }], ngImport: i0, template: "<!--\n~ Copyright (c) 2018-2026 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]=\"clrHideHeader()\">\n @if (showSelection() && !empty()) {\n <div class=\"clr-checkbox-wrapper treetable-row-selection treetable-column\" role=\"row\">\n <input\n type=\"checkbox\"\n data-testId=\"clrTtSelectAll\"\n [checked]=\"areAllRowsSelected()\"\n (change)=\"toggleSelectAll()\"\n />\n </div>\n } @if (hasActionOverflow()) {\n <div class=\"treetable-row-actions treetable-column\">&nbsp;</div>\n }\n <div class=\"treetable-row-scrollable\" role=\"row\">\n <ng-content select=\"clr-tt-column\" />\n </div>\n </div>\n\n <div class=\"treetable-body\">\n @if (isRecursionMode()) {\n <clr-tt-recursive-rows [children]=\"displayedNodes()\" />\n } @else {\n <ng-content select=\"clr-tt-row\" />\n } @if (empty() && !clrTtLoading()) {\n <ng-content select=\"clr-tt-placeholder\" />\n }\n </div>\n </div>\n\n <ng-content select=\"clr-tt-footer\"></ng-content>\n\n @if (clrTtLoading()) {\n <div class=\"treetable-spinner\">\n <clr-spinner clrMedium />\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: i1$3.ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "component", type: ClrTreetableRecursiveRows, selector: "clr-tt-recursive-rows", inputs: ["parent", "children"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4532
4694
  }
4533
4695
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ClrTreetable, decorators: [{
4534
4696
  type: Component,
4535
- args: [{ selector: 'clr-treetable', host: { '[class.empty]': 'empty()', '[class.treetable-host]': 'true' }, providers: [TREETABLE_RECURSION_SERVICE_PROVIDER, TreetableDataStateService, Sort, Filters], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<!--\n~ Copyright (c) 2018-2026 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]=\"clrHideHeader()\">\n @if (showSelection() && !empty()) {\n <div class=\"clr-checkbox-wrapper treetable-row-selection treetable-column\" role=\"row\">\n <input\n type=\"checkbox\"\n data-testId=\"clrTtSelectAll\"\n [checked]=\"areAllRowsSelected()\"\n (change)=\"toggleSelectAll()\"\n />\n </div>\n } @if (hasActionOverflow()) {\n <div class=\"treetable-row-actions treetable-column\">&nbsp;</div>\n }\n <div class=\"treetable-row-scrollable\" role=\"row\">\n <ng-content select=\"clr-tt-column\" />\n </div>\n </div>\n <div class=\"treetable-body\">\n @if (isRecursionMode()) {\n <clr-tt-recursive-rows [children]=\"displayedNodes()\" />\n } @else {\n <ng-content select=\"clr-tt-row\" />\n } @if (empty()) {\n <ng-content select=\"clr-tt-placeholder\" />\n }\n </div>\n </div>\n @if (clrTtLoading()) {\n <div class=\"treetable-spinner\">\n <clr-spinner clrMedium />\n </div>\n }\n</div>\n" }]
4697
+ args: [{ selector: 'clr-treetable', host: { '[class.empty]': 'empty()', '[class.treetable-host]': 'true' }, providers: [
4698
+ TREETABLE_RECURSION_SERVICE_PROVIDER,
4699
+ TreetableDataStateService,
4700
+ TreetableColumnStateService,
4701
+ SortStateService,
4702
+ FilterStateService,
4703
+ ], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<!--\n~ Copyright (c) 2018-2026 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]=\"clrHideHeader()\">\n @if (showSelection() && !empty()) {\n <div class=\"clr-checkbox-wrapper treetable-row-selection treetable-column\" role=\"row\">\n <input\n type=\"checkbox\"\n data-testId=\"clrTtSelectAll\"\n [checked]=\"areAllRowsSelected()\"\n (change)=\"toggleSelectAll()\"\n />\n </div>\n } @if (hasActionOverflow()) {\n <div class=\"treetable-row-actions treetable-column\">&nbsp;</div>\n }\n <div class=\"treetable-row-scrollable\" role=\"row\">\n <ng-content select=\"clr-tt-column\" />\n </div>\n </div>\n\n <div class=\"treetable-body\">\n @if (isRecursionMode()) {\n <clr-tt-recursive-rows [children]=\"displayedNodes()\" />\n } @else {\n <ng-content select=\"clr-tt-row\" />\n } @if (empty() && !clrTtLoading()) {\n <ng-content select=\"clr-tt-placeholder\" />\n }\n </div>\n </div>\n\n <ng-content select=\"clr-tt-footer\"></ng-content>\n\n @if (clrTtLoading()) {\n <div class=\"treetable-spinner\">\n <clr-spinner clrMedium />\n </div>\n }\n</div>\n" }]
4536
4704
  }], ctorParameters: () => [], propDecorators: { clrClickableRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "clrClickableRows", required: false }] }], clrHideHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "clrHideHeader", required: false }] }], clrTtLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "clrTtLoading", required: false }] }], clrTtSelected: [{ type: i0.Input, args: [{ isSignal: true, alias: "clrTtSelected", required: false }] }], clrTtAutoParentSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "clrTtAutoParentSelection", required: false }] }], clrTtSelectedChange: [{ type: i0.Output, args: ["clrTtSelectedChange"] }], clrTtRefresh: [{ type: i0.Output, args: ["clrTtRefresh"] }], _ttRows: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ClrTreetableRow), { ...{ descendants: true }, isSignal: true }] }], _actionOverflow: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ClrTreetableActionOverflow), { ...{ descendants: true }, isSignal: true }] }] } });
4537
4705
 
4538
4706
  /*
@@ -4552,12 +4720,20 @@ var ClrTreetableSortOrder;
4552
4720
  * This software is released under MIT license.
4553
4721
  * The full license information can be found in LICENSE in the root directory of this project.
4554
4722
  */
4723
+ let columnId = 0;
4555
4724
  class ClrTreetableColumn {
4725
+ ngOnInit() {
4726
+ this._columnState.register({ id: this.columnId, titleTemplateRef: this._columnTitleRef() });
4727
+ }
4728
+ ngOnDestroy() {
4729
+ this._columnState.unregister(this.columnId);
4730
+ }
4556
4731
  constructor() {
4557
- this._sort = inject((Sort));
4732
+ this.columnId = `clr-tt-col-${columnId++}`;
4733
+ this._columnTitleRef = viewChild('columnTitle', { ...(ngDevMode ? { debugName: "_columnTitleRef" } : /* istanbul ignore next */ {}), read: TemplateRef });
4734
+ this._columnState = inject(TreetableColumnStateService);
4735
+ this._sort = inject((SortStateService));
4558
4736
  this.clrTtSortBy = input(null, ...(ngDevMode ? [{ debugName: "clrTtSortBy" }] : /* istanbul ignore next */ []));
4559
- this.clrTtSortOrder = input(ClrTreetableSortOrder.UNSORTED, ...(ngDevMode ? [{ debugName: "clrTtSortOrder" }] : /* istanbul ignore next */ []));
4560
- this.clrTtSortOrderChange = output();
4561
4737
  this._internalSortOrder = computed(() => {
4562
4738
  const sortState = this._sort.sortState();
4563
4739
  const sortBy = this.clrTtSortBy();
@@ -4566,6 +4742,8 @@ class ClrTreetableColumn {
4566
4742
  }
4567
4743
  return sortState.reverse ? ClrTreetableSortOrder.DESC : ClrTreetableSortOrder.ASC;
4568
4744
  }, ...(ngDevMode ? [{ debugName: "_internalSortOrder" }] : /* istanbul ignore next */ []));
4745
+ this.clrTtSortOrder = input(ClrTreetableSortOrder.UNSORTED, ...(ngDevMode ? [{ debugName: "clrTtSortOrder" }] : /* istanbul ignore next */ []));
4746
+ this.clrTtSortOrderChange = outputFromObservable(toObservable(this._internalSortOrder));
4569
4747
  this.isSortable = computed(() => !!this.clrTtSortBy(), ...(ngDevMode ? [{ debugName: "isSortable" }] : /* istanbul ignore next */ []));
4570
4748
  this.sortDirection = computed(() => {
4571
4749
  const order = this._internalSortOrder();
@@ -4620,11 +4798,6 @@ class ClrTreetableColumn {
4620
4798
  break;
4621
4799
  }
4622
4800
  });
4623
- // Emit sort order changes of the column
4624
- effect(() => {
4625
- const internalSortOrder = this._internalSortOrder();
4626
- this.clrTtSortOrderChange.emit(internalSortOrder);
4627
- });
4628
4801
  }
4629
4802
  sort(reverse) {
4630
4803
  const comparator = this.clrTtSortBy();
@@ -4634,7 +4807,7 @@ class ClrTreetableColumn {
4634
4807
  this._sort.toggle(comparator, reverse);
4635
4808
  }
4636
4809
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ClrTreetableColumn, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4637
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: ClrTreetableColumn, isStandalone: false, selector: "clr-tt-column", inputs: { clrTtSortBy: { classPropertyName: "clrTtSortBy", publicName: "clrTtSortBy", isSignal: true, isRequired: false, transformFunction: null }, clrTtSortOrder: { classPropertyName: "clrTtSortOrder", publicName: "clrTtSortOrder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clrTtSortOrderChange: "clrTtSortOrderChange" }, host: { attributes: { "role": "columnheader" }, properties: { "class.treetable-column": "true", "attr.aria-sort": "ariaSort()" } }, providers: [ClrPopoverService], ngImport: i0, template: `
4810
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: ClrTreetableColumn, isStandalone: false, selector: "clr-tt-column", inputs: { clrTtSortBy: { classPropertyName: "clrTtSortBy", publicName: "clrTtSortBy", isSignal: true, isRequired: false, transformFunction: null }, clrTtSortOrder: { classPropertyName: "clrTtSortOrder", publicName: "clrTtSortOrder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clrTtSortOrderChange: "clrTtSortOrderChange" }, host: { attributes: { "role": "columnheader" }, properties: { "class.treetable-column": "true", "attr.aria-sort": "ariaSort()" } }, providers: [ClrPopoverService], viewQueries: [{ propertyName: "_columnTitleRef", first: true, predicate: ["columnTitle"], descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: `
4638
4811
  @if (isSortable()) {
4639
4812
  <button type="button" class="treetable-column-title" data-testId="clrTtSortButton" (click)="sort()">
4640
4813
  <ng-container *ngTemplateOutlet="columnTitle" />
@@ -4700,7 +4873,341 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
4700
4873
  changeDetection: ChangeDetectionStrategy.OnPush,
4701
4874
  standalone: false,
4702
4875
  }]
4703
- }], ctorParameters: () => [], propDecorators: { clrTtSortBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "clrTtSortBy", required: false }] }], clrTtSortOrder: [{ type: i0.Input, args: [{ isSignal: true, alias: "clrTtSortOrder", required: false }] }], clrTtSortOrderChange: [{ type: i0.Output, args: ["clrTtSortOrderChange"] }] } });
4876
+ }], ctorParameters: () => [], propDecorators: { _columnTitleRef: [{ type: i0.ViewChild, args: ['columnTitle', { ...{ read: TemplateRef }, isSignal: true }] }], clrTtSortBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "clrTtSortBy", required: false }] }], clrTtSortOrder: [{ type: i0.Input, args: [{ isSignal: true, alias: "clrTtSortOrder", required: false }] }], clrTtSortOrderChange: [{ type: i0.Output, args: ["clrTtSortOrderChange"] }] } });
4877
+
4878
+ let id = 0;
4879
+ class ClrTreetableColumnManagerMenuComponent {
4880
+ constructor() {
4881
+ this.popoverId = `clr-column-manager-menu-id-${id++}`;
4882
+ this._commonStringsService = inject(ClrCommonStringsService);
4883
+ this._popoverService = inject(ClrPopoverService);
4884
+ this._columnService = inject(TreetableColumnStateService);
4885
+ // Template constants
4886
+ this.popoverPosition = ClrPopoverPosition.TOP_LEFT;
4887
+ this.popoverType = ClrPopoverType.DROPDOWN;
4888
+ this.commonStrings = this._commonStringsService.keys;
4889
+ this.resetLabel = input.required(...(ngDevMode ? [{ debugName: "resetLabel" }] : /* istanbul ignore next */ []));
4890
+ this.open = toSignal(this._popoverService.openChange);
4891
+ this.hideableColumns = this._columnService.hideableColumns;
4892
+ this.hasOnlyOneVisibleColumn = computed(() => this._columnService.columns().length === this._columnService.hideableColumns().length &&
4893
+ this._columnService.visibleColumns().length === 1, ...(ngDevMode ? [{ debugName: "hasOnlyOneVisibleColumn" }] : /* istanbul ignore next */ []));
4894
+ this.areAllColumnsVisible = computed(() => this._columnService.visibleColumns().length === this._columnService.columns().length, ...(ngDevMode ? [{ debugName: "areAllColumnsVisible" }] : /* istanbul ignore next */ []));
4895
+ this.areAllColumnsReset = computed(() => this._columnService.hideableColumns().every(column => column.hidden === column.initialHidden), ...(ngDevMode ? [{ debugName: "areAllColumnsReset" }] : /* istanbul ignore next */ []));
4896
+ }
4897
+ toggleColumnState(id) {
4898
+ this._columnService.toggleHidden(id);
4899
+ }
4900
+ selectAll() {
4901
+ if (!this.areAllColumnsVisible()) {
4902
+ this._columnService.displayAllColumns();
4903
+ }
4904
+ }
4905
+ resetAllToInitial() {
4906
+ this._columnService.resetToInitialHidden();
4907
+ }
4908
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ClrTreetableColumnManagerMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4909
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: ClrTreetableColumnManagerMenuComponent, isStandalone: false, selector: "clr-tt-column-manager-menu", inputs: { resetLabel: { classPropertyName: "resetLabel", publicName: "resetLabel", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.column-manager-menu": "true", "class.active": "open()" } }, hostDirectives: [{ directive: i1$2.ClrPopoverHostDirective }], ngImport: i0, template: `
4910
+ <button
4911
+ role="button"
4912
+ type="button"
4913
+ class="btn btn-sm column-manager-menu-open"
4914
+ clrPopoverOrigin
4915
+ clrPopoverOpenCloseButton
4916
+ [attr.aria-controls]="popoverId"
4917
+ [attr.aria-expanded]="open()"
4918
+ [attr.aria-haspopup]="'menu'"
4919
+ >
4920
+ {{ commonStrings.pickColumns }}
4921
+ </button>
4922
+ <div
4923
+ class="column-switch"
4924
+ role="dialog"
4925
+ [attr.aria-label]="commonStrings.showColumnsMenuDescription"
4926
+ [id]="popoverId"
4927
+ cdkTrapFocus
4928
+ cdkTrapFocusAutoCapture
4929
+ *clrPopoverContent="
4930
+ open();
4931
+ at: popoverPosition;
4932
+ type: popoverType;
4933
+ outsideClickToClose: true;
4934
+ scrollToClose: true
4935
+ "
4936
+ >
4937
+ <div class="switch-header">
4938
+ <div class="clr-sr-only" tabindex="-1" #allSelected>{{ commonStrings.allColumnsSelected }}</div>
4939
+ <h2>{{ commonStrings.showColumns }}</h2>
4940
+ <button
4941
+ class="btn btn-sm btn-link-neutral toggle-switch-close-button"
4942
+ clrPopoverCloseButton
4943
+ type="button"
4944
+ [attr.aria-label]="commonStrings.close"
4945
+ >
4946
+ <cds-icon shape="window-close" aria-hidden="true" [attr.title]="commonStrings.close"></cds-icon>
4947
+ <span class="clr-sr-only">{{ commonStrings.close }}</span>
4948
+ </button>
4949
+ </div>
4950
+ <ul class="switch-content list-unstyled">
4951
+ @for (column of hideableColumns(); track column.id) {
4952
+ <li>
4953
+ <clr-checkbox-wrapper>
4954
+ <input
4955
+ clrCheckbox
4956
+ type="checkbox"
4957
+ [disabled]="hasOnlyOneVisibleColumn() && !column.hidden"
4958
+ [ngModel]="!column.hidden"
4959
+ (ngModelChange)="toggleColumnState(column.id)"
4960
+ />
4961
+ <label>
4962
+ <ng-template [ngTemplateOutlet]="column.titleTemplateRef"></ng-template>
4963
+ </label>
4964
+ </clr-checkbox-wrapper>
4965
+ </li>
4966
+ }
4967
+ </ul>
4968
+ <div class="switch-footer">
4969
+ <button
4970
+ type="button"
4971
+ class="btn btn-sm btn-link switch-button"
4972
+ [disabled]="areAllColumnsVisible()"
4973
+ (click)="selectAll()"
4974
+ >
4975
+ {{ commonStrings.selectAll }}
4976
+ </button>
4977
+ <button
4978
+ type="button"
4979
+ class="btn btn-sm btn-link switch-button"
4980
+ [disabled]="areAllColumnsReset()"
4981
+ (click)="resetAllToInitial()"
4982
+ >
4983
+ {{ resetLabel() }}
4984
+ </button>
4985
+ </div>
4986
+ </div>
4987
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }, { kind: "directive", type: i2.CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i1$1.ClrControlLabel, selector: "label", inputs: ["id", "for"] }, { kind: "directive", type: i4.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i4.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i2$3.ClrPopoverOrigin, selector: "[clrPopoverOrigin]" }, { kind: "directive", type: i2$3.ClrPopoverCloseButton, selector: "[clrPopoverCloseButton]", outputs: ["clrPopoverOnCloseChange"] }, { kind: "directive", type: i2$3.ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: i2$3.ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentAvailablePositions", "clrPopoverContentType", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose", "clrPopoverContentOrigin"] }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$2.CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4988
+ }
4989
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ClrTreetableColumnManagerMenuComponent, decorators: [{
4990
+ type: Component,
4991
+ args: [{
4992
+ selector: 'clr-tt-column-manager-menu',
4993
+ template: `
4994
+ <button
4995
+ role="button"
4996
+ type="button"
4997
+ class="btn btn-sm column-manager-menu-open"
4998
+ clrPopoverOrigin
4999
+ clrPopoverOpenCloseButton
5000
+ [attr.aria-controls]="popoverId"
5001
+ [attr.aria-expanded]="open()"
5002
+ [attr.aria-haspopup]="'menu'"
5003
+ >
5004
+ {{ commonStrings.pickColumns }}
5005
+ </button>
5006
+ <div
5007
+ class="column-switch"
5008
+ role="dialog"
5009
+ [attr.aria-label]="commonStrings.showColumnsMenuDescription"
5010
+ [id]="popoverId"
5011
+ cdkTrapFocus
5012
+ cdkTrapFocusAutoCapture
5013
+ *clrPopoverContent="
5014
+ open();
5015
+ at: popoverPosition;
5016
+ type: popoverType;
5017
+ outsideClickToClose: true;
5018
+ scrollToClose: true
5019
+ "
5020
+ >
5021
+ <div class="switch-header">
5022
+ <div class="clr-sr-only" tabindex="-1" #allSelected>{{ commonStrings.allColumnsSelected }}</div>
5023
+ <h2>{{ commonStrings.showColumns }}</h2>
5024
+ <button
5025
+ class="btn btn-sm btn-link-neutral toggle-switch-close-button"
5026
+ clrPopoverCloseButton
5027
+ type="button"
5028
+ [attr.aria-label]="commonStrings.close"
5029
+ >
5030
+ <cds-icon shape="window-close" aria-hidden="true" [attr.title]="commonStrings.close"></cds-icon>
5031
+ <span class="clr-sr-only">{{ commonStrings.close }}</span>
5032
+ </button>
5033
+ </div>
5034
+ <ul class="switch-content list-unstyled">
5035
+ @for (column of hideableColumns(); track column.id) {
5036
+ <li>
5037
+ <clr-checkbox-wrapper>
5038
+ <input
5039
+ clrCheckbox
5040
+ type="checkbox"
5041
+ [disabled]="hasOnlyOneVisibleColumn() && !column.hidden"
5042
+ [ngModel]="!column.hidden"
5043
+ (ngModelChange)="toggleColumnState(column.id)"
5044
+ />
5045
+ <label>
5046
+ <ng-template [ngTemplateOutlet]="column.titleTemplateRef"></ng-template>
5047
+ </label>
5048
+ </clr-checkbox-wrapper>
5049
+ </li>
5050
+ }
5051
+ </ul>
5052
+ <div class="switch-footer">
5053
+ <button
5054
+ type="button"
5055
+ class="btn btn-sm btn-link switch-button"
5056
+ [disabled]="areAllColumnsVisible()"
5057
+ (click)="selectAll()"
5058
+ >
5059
+ {{ commonStrings.selectAll }}
5060
+ </button>
5061
+ <button
5062
+ type="button"
5063
+ class="btn btn-sm btn-link switch-button"
5064
+ [disabled]="areAllColumnsReset()"
5065
+ (click)="resetAllToInitial()"
5066
+ >
5067
+ {{ resetLabel() }}
5068
+ </button>
5069
+ </div>
5070
+ </div>
5071
+ `,
5072
+ host: {
5073
+ '[class.column-manager-menu]': 'true',
5074
+ '[class.active]': 'open()',
5075
+ },
5076
+ hostDirectives: [ClrPopoverHostDirective],
5077
+ changeDetection: ChangeDetectionStrategy.OnPush,
5078
+ standalone: false,
5079
+ }]
5080
+ }], propDecorators: { resetLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetLabel", required: true }] }] } });
5081
+
5082
+ class ClrTreetableFooter {
5083
+ constructor() {
5084
+ this._commonStringsService = inject(ClrCommonStringsService);
5085
+ this._columnService = inject(TreetableColumnStateService);
5086
+ this._dataService = inject(TreetableDataStateService);
5087
+ this.commonStrings = this._commonStringsService.keys;
5088
+ this.clrResetLabel = input('RESET', ...(ngDevMode ? [{ debugName: "clrResetLabel" }] : /* istanbul ignore next */ []));
5089
+ this.hasHideableColumns = this._columnService.hasHideableColumns;
5090
+ this.selectedRows = this._dataService.selectedNodes;
5091
+ this.hasSelectedRows = computed(() => this.selectedRows()?.length > 0, ...(ngDevMode ? [{ debugName: "hasSelectedRows" }] : /* istanbul ignore next */ []));
5092
+ }
5093
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ClrTreetableFooter, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5094
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: ClrTreetableFooter, isStandalone: false, selector: "clr-tt-footer", inputs: { clrResetLabel: { classPropertyName: "clrResetLabel", publicName: "clrResetLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.treetable-footer": "true" } }, ngImport: i0, template: `
5095
+ @if (hasSelectedRows()) {
5096
+ <div class="clr-form-control-disabled">
5097
+ <clr-checkbox-wrapper class="treetable-footer-select">
5098
+ <input clrCheckbox type="checkbox" checked="checked" disabled />
5099
+ <label>{{ selectedRows().length }}</label>
5100
+ <span class="clr-sr-only">{{ commonStrings.selectedRows }}</span>
5101
+ </clr-checkbox-wrapper>
5102
+ </div>
5103
+ } @if (hasHideableColumns()) {
5104
+ <clr-tt-column-manager-menu [resetLabel]="clrResetLabel()" />
5105
+ }
5106
+
5107
+ <div class="treetable-footer-description">
5108
+ <ng-content />
5109
+ </div>
5110
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1$1.ClrControlLabel, selector: "label", inputs: ["id", "for"] }, { kind: "directive", type: i4.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i4.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "component", type: ClrTreetableColumnManagerMenuComponent, selector: "clr-tt-column-manager-menu", inputs: ["resetLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5111
+ }
5112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ClrTreetableFooter, decorators: [{
5113
+ type: Component,
5114
+ args: [{
5115
+ selector: 'clr-tt-footer',
5116
+ template: `
5117
+ @if (hasSelectedRows()) {
5118
+ <div class="clr-form-control-disabled">
5119
+ <clr-checkbox-wrapper class="treetable-footer-select">
5120
+ <input clrCheckbox type="checkbox" checked="checked" disabled />
5121
+ <label>{{ selectedRows().length }}</label>
5122
+ <span class="clr-sr-only">{{ commonStrings.selectedRows }}</span>
5123
+ </clr-checkbox-wrapper>
5124
+ </div>
5125
+ } @if (hasHideableColumns()) {
5126
+ <clr-tt-column-manager-menu [resetLabel]="clrResetLabel()" />
5127
+ }
5128
+
5129
+ <div class="treetable-footer-description">
5130
+ <ng-content />
5131
+ </div>
5132
+ `,
5133
+ host: {
5134
+ '[class.treetable-footer]': 'true',
5135
+ },
5136
+ changeDetection: ChangeDetectionStrategy.OnPush,
5137
+ standalone: false,
5138
+ }]
5139
+ }], propDecorators: { clrResetLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clrResetLabel", required: false }] }] } });
5140
+
5141
+ /*
5142
+ * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.
5143
+ * This software is released under MIT license.
5144
+ * The full license information can be found in LICENSE in the root directory of this project.
5145
+ */
5146
+ /**
5147
+ * A structural directive meant to be used inside a clr-tt-column component.
5148
+ *
5149
+ * @example
5150
+ * <clr-tt-column>
5151
+ * <ng-container *clrTtHideableColumn="{ hidden: true }">
5152
+ * User ID
5153
+ * </ng-container>
5154
+ * </clr-tt-column>
5155
+ *
5156
+ * It sets up state and properties so that columns can be managed for hide/show
5157
+ * by a service and the column manager menu component.
5158
+ *
5159
+ * The structural directive captures its content as a TemplateRef (without ng-content),
5160
+ * which allows it to be safely instantiated in multiple places (header + menu).
5161
+ */
5162
+ class ClrTreetableHideableColumn {
5163
+ constructor() {
5164
+ this._titleTemplateRef = inject(TemplateRef);
5165
+ this._viewContainerRef = inject(ViewContainerRef);
5166
+ this._columnState = inject(TreetableColumnStateService);
5167
+ this._column = inject(ClrTreetableColumn);
5168
+ this.clrTtHideableColumn = input('', ...(ngDevMode ? [{ debugName: "clrTtHideableColumn" }] : /* istanbul ignore next */ []));
5169
+ this.clrTtHiddenChange = output();
5170
+ this.resolvedHidden = computed(() => {
5171
+ const value = this.clrTtHideableColumn();
5172
+ if (typeof value === 'string') {
5173
+ return { hidden: false, initialHidden: false };
5174
+ }
5175
+ const hidden = value?.hidden ?? false;
5176
+ return { hidden: hidden, initialHidden: value?.initial ?? hidden };
5177
+ }, ...(ngDevMode ? [{ debugName: "resolvedHidden" }] : /* istanbul ignore next */ []));
5178
+ // Render the content in-place (inside the column header)
5179
+ this._viewContainerRef.createEmbeddedView(this._titleTemplateRef);
5180
+ // React to input changes after initial registration (skip the first emission handled by ngOnInit)
5181
+ toObservable(this.resolvedHidden)
5182
+ .pipe(skip$1(1), takeUntilDestroyed())
5183
+ .subscribe(value => {
5184
+ this._columnState.changeHideable(this._column.columnId, true, value.hidden);
5185
+ });
5186
+ }
5187
+ ngOnInit() {
5188
+ // Register the hideable state with the titleTemplateRef that does NOT contain <ng-content>
5189
+ const resolvedHidden = this.resolvedHidden();
5190
+ this._columnState.registerHideable(this._column.columnId, {
5191
+ hideable: true,
5192
+ hidden: resolvedHidden.hidden,
5193
+ initialHidden: resolvedHidden.initialHidden,
5194
+ titleTemplateRef: this._titleTemplateRef,
5195
+ });
5196
+ }
5197
+ ngOnDestroy() {
5198
+ // When the directive is destroyed, mark the column as non-hideable
5199
+ this._columnState.changeHideable(this._column.columnId, false, false);
5200
+ }
5201
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ClrTreetableHideableColumn, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5202
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.17", type: ClrTreetableHideableColumn, isStandalone: false, selector: "[clrTtHideableColumn]", inputs: { clrTtHideableColumn: { classPropertyName: "clrTtHideableColumn", publicName: "clrTtHideableColumn", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clrTtHiddenChange: "clrTtHiddenChange" }, ngImport: i0 }); }
5203
+ }
5204
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ClrTreetableHideableColumn, decorators: [{
5205
+ type: Directive,
5206
+ args: [{
5207
+ selector: '[clrTtHideableColumn]',
5208
+ standalone: false,
5209
+ }]
5210
+ }], ctorParameters: () => [], propDecorators: { clrTtHideableColumn: [{ type: i0.Input, args: [{ isSignal: true, alias: "clrTtHideableColumn", required: false }] }], clrTtHiddenChange: [{ type: i0.Output, args: ["clrTtHiddenChange"] }] } });
4704
5211
 
4705
5212
  /*
4706
5213
  * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.
@@ -4709,14 +5216,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
4709
5216
  */
4710
5217
  class ClrTreetableFilter {
4711
5218
  constructor() {
4712
- this.commonStringsService = inject(ClrCommonStringsService);
4713
- this.smartToggleService = inject(ClrPopoverService);
4714
- this.filterProvider = inject((Filters));
4715
- // Smart Popover
4716
- this.smartPosition = ClrPopoverPosition.BOTTOM_LEFT;
5219
+ this._commonStringsService = inject(ClrCommonStringsService);
5220
+ this._popoverService = inject(ClrPopoverService);
5221
+ this.filterProvider = inject((FilterStateService));
5222
+ // Template constants
5223
+ this.popoverPosition = ClrPopoverPosition.BOTTOM_LEFT;
5224
+ this.commonStrings = this._commonStringsService.keys;
4717
5225
  this.clrTtFilter = input.required(...(ngDevMode ? [{ debugName: "clrTtFilter" }] : /* istanbul ignore next */ []));
4718
5226
  this.registered = signal(undefined, ...(ngDevMode ? [{ debugName: "registered" }] : /* istanbul ignore next */ []));
4719
- this.open = toSignal(this.smartToggleService.openChange);
5227
+ this.open = toSignal(this._popoverService.openChange);
4720
5228
  this.active = computed(() => this.clrTtFilter()?.isActive(), ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
4721
5229
  }
4722
5230
  ngOnInit() {
@@ -4750,18 +5258,18 @@ class ClrTreetableFilter {
4750
5258
  class="treetable-filter"
4751
5259
  role="dialog"
4752
5260
  cdkTrapFocus
4753
- *clrPopoverContent="open(); at: smartPosition; outsideClickToClose: true; scrollToClose: true"
4754
- [attr.aria-label]="commonStringsService.keys.datagridFilterDialogAriaLabel"
5261
+ *clrPopoverContent="open(); at: popoverPosition; outsideClickToClose: true; scrollToClose: true"
5262
+ [attr.aria-label]="commonStrings.datagridFilterDialogAriaLabel"
4755
5263
  >
4756
5264
  <div class="treetable-filter-close-wrapper">
4757
5265
  <button type="button" class="close" clrPopoverCloseButton>
4758
- <cds-icon shape="window-close" [attr.aria-label]="commonStringsService.keys.close"></cds-icon>
5266
+ <cds-icon shape="window-close" [attr.aria-label]="commonStrings.close"></cds-icon>
4759
5267
  </button>
4760
5268
  </div>
4761
5269
 
4762
5270
  <ng-content></ng-content>
4763
5271
  </div>
4764
- `, isInline: true, dependencies: [{ kind: "component", type: i2.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }, { kind: "directive", type: i2.CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i2$3.ClrPopoverOrigin, selector: "[clrPopoverOrigin]" }, { kind: "directive", type: i2$3.ClrPopoverCloseButton, selector: "[clrPopoverCloseButton]", outputs: ["clrPopoverOnCloseChange"] }, { kind: "directive", type: i2$3.ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: i2$3.ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentAvailablePositions", "clrPopoverContentType", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose", "clrPopoverContentOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5272
+ `, isInline: true, dependencies: [{ kind: "component", type: i2.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }, { kind: "directive", type: i2.CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i2$3.ClrPopoverOrigin, selector: "[clrPopoverOrigin]" }, { kind: "directive", type: i2$3.ClrPopoverCloseButton, selector: "[clrPopoverCloseButton]", outputs: ["clrPopoverOnCloseChange"] }, { kind: "directive", type: i2$3.ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: i2$3.ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentAvailablePositions", "clrPopoverContentType", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose", "clrPopoverContentOrigin"] }, { kind: "directive", type: i1$2.CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4765
5273
  }
4766
5274
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ClrTreetableFilter, decorators: [{
4767
5275
  type: Component,
@@ -4789,12 +5297,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
4789
5297
  class="treetable-filter"
4790
5298
  role="dialog"
4791
5299
  cdkTrapFocus
4792
- *clrPopoverContent="open(); at: smartPosition; outsideClickToClose: true; scrollToClose: true"
4793
- [attr.aria-label]="commonStringsService.keys.datagridFilterDialogAriaLabel"
5300
+ *clrPopoverContent="open(); at: popoverPosition; outsideClickToClose: true; scrollToClose: true"
5301
+ [attr.aria-label]="commonStrings.datagridFilterDialogAriaLabel"
4794
5302
  >
4795
5303
  <div class="treetable-filter-close-wrapper">
4796
5304
  <button type="button" class="close" clrPopoverCloseButton>
4797
- <cds-icon shape="window-close" [attr.aria-label]="commonStringsService.keys.close"></cds-icon>
5305
+ <cds-icon shape="window-close" [attr.aria-label]="commonStrings.close"></cds-icon>
4798
5306
  </button>
4799
5307
  </div>
4800
5308
 
@@ -4859,28 +5367,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
4859
5367
  }]
4860
5368
  }] });
4861
5369
 
5370
+ /**
5371
+ * The CSS class to use to hide a column and its related cells in the treetable.
5372
+ */
5373
+ const HIDDEN_COLUMN_CSS_CLASS = 'treetable-hidden-column';
5374
+
4862
5375
  /*
4863
- * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
5376
+ * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.
4864
5377
  * This software is released under MIT license.
4865
5378
  * The full license information can be found in LICENSE in the root directory of this project.
4866
5379
  */
4867
5380
  class TreetableHeaderRenderer {
4868
- constructor(el, renderer) {
4869
- this.el = el;
4870
- this.renderer = renderer;
5381
+ constructor() {
5382
+ this.elementRef = inject(ElementRef);
5383
+ this.renderer = inject(Renderer2);
4871
5384
  }
4872
5385
  /**
4873
5386
  * Returns the client width of the header cell.
4874
5387
  */
4875
5388
  getWidth() {
4876
- return this.el.nativeElement.clientWidth;
5389
+ return this.elementRef.nativeElement.clientWidth;
5390
+ }
5391
+ hide() {
5392
+ this.renderer.addClass(this.elementRef.nativeElement, HIDDEN_COLUMN_CSS_CLASS);
5393
+ }
5394
+ show() {
5395
+ const element = this.elementRef.nativeElement;
5396
+ if (element.classList.contains(HIDDEN_COLUMN_CSS_CLASS)) {
5397
+ this.renderer.removeClass(element, HIDDEN_COLUMN_CSS_CLASS);
5398
+ }
4877
5399
  }
4878
5400
  /**
4879
5401
  * Returns all classes starting with 'clr-col'.
4880
5402
  */
4881
5403
  getColumnClasses() {
4882
5404
  const classes = [];
4883
- this.el.nativeElement.classList.forEach((className) => {
5405
+ this.elementRef.nativeElement.classList.forEach((className) => {
4884
5406
  if (className.indexOf('clr-col') !== -1) {
4885
5407
  classes.push(className);
4886
5408
  }
@@ -4888,9 +5410,9 @@ class TreetableHeaderRenderer {
4888
5410
  return classes;
4889
5411
  }
4890
5412
  setDefaultColumnClass() {
4891
- this.renderer.addClass(this.el.nativeElement, 'clr-col');
5413
+ this.renderer.addClass(this.elementRef.nativeElement, 'clr-col');
4892
5414
  }
4893
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TreetableHeaderRenderer, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
5415
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TreetableHeaderRenderer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
4894
5416
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.17", type: TreetableHeaderRenderer, isStandalone: false, selector: "clr-tt-column", ngImport: i0 }); }
4895
5417
  }
4896
5418
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TreetableHeaderRenderer, decorators: [{
@@ -4899,27 +5421,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
4899
5421
  selector: 'clr-tt-column',
4900
5422
  standalone: false,
4901
5423
  }]
4902
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }] });
5424
+ }] });
4903
5425
 
4904
5426
  /*
4905
- * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
5427
+ * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.
4906
5428
  * This software is released under MIT license.
4907
5429
  * The full license information can be found in LICENSE in the root directory of this project.
4908
5430
  */
4909
5431
  class TreetableCellRenderer {
4910
- constructor(el, renderer) {
4911
- this.el = el;
4912
- this.renderer = renderer;
5432
+ constructor() {
5433
+ this.elementRef = inject(ElementRef);
5434
+ this.renderer = inject(Renderer2);
4913
5435
  }
4914
5436
  setColumnClasses(columnClasses) {
4915
5437
  columnClasses.forEach((className) => {
4916
- this.renderer.addClass(this.el.nativeElement, className);
5438
+ this.renderer.addClass(this.elementRef.nativeElement, className);
4917
5439
  });
4918
5440
  }
5441
+ hide() {
5442
+ this.renderer.addClass(this.elementRef.nativeElement, HIDDEN_COLUMN_CSS_CLASS);
5443
+ }
5444
+ show() {
5445
+ const element = this.elementRef.nativeElement;
5446
+ if (element.classList.contains(HIDDEN_COLUMN_CSS_CLASS)) {
5447
+ this.renderer.removeClass(element, HIDDEN_COLUMN_CSS_CLASS);
5448
+ }
5449
+ }
4919
5450
  setMaxWidth(maxWidth) {
4920
- this.renderer.setStyle(this.el.nativeElement, 'max-width', maxWidth + 'px');
5451
+ this.renderer.setStyle(this.elementRef.nativeElement, 'max-width', maxWidth + 'px');
4921
5452
  }
4922
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TreetableCellRenderer, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
5453
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TreetableCellRenderer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
4923
5454
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.17", type: TreetableCellRenderer, isStandalone: false, selector: "clr-tt-cell", ngImport: i0 }); }
4924
5455
  }
4925
5456
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TreetableCellRenderer, decorators: [{
@@ -4928,16 +5459,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
4928
5459
  selector: 'clr-tt-cell',
4929
5460
  standalone: false,
4930
5461
  }]
4931
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }] });
5462
+ }] });
4932
5463
 
4933
5464
  /*
4934
- * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
5465
+ * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.
4935
5466
  * This software is released under MIT license.
4936
5467
  * The full license information can be found in LICENSE in the root directory of this project.
4937
5468
  */
4938
5469
  class TreetableRowRenderer {
5470
+ constructor() {
5471
+ this.cells = contentChildren(TreetableCellRenderer, ...(ngDevMode ? [{ debugName: "cells" }] : /* istanbul ignore next */ []));
5472
+ }
4939
5473
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TreetableRowRenderer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
4940
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.17", type: TreetableRowRenderer, isStandalone: false, selector: "clr-tt-row", queries: [{ propertyName: "cells", predicate: TreetableCellRenderer }], ngImport: i0 }); }
5474
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.17", type: TreetableRowRenderer, isStandalone: false, selector: "clr-tt-row", queries: [{ propertyName: "cells", predicate: TreetableCellRenderer, isSignal: true }], ngImport: i0 }); }
4941
5475
  }
4942
5476
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TreetableRowRenderer, decorators: [{
4943
5477
  type: Directive,
@@ -4945,93 +5479,176 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
4945
5479
  selector: 'clr-tt-row',
4946
5480
  standalone: false,
4947
5481
  }]
4948
- }], propDecorators: { cells: [{
4949
- type: ContentChildren,
4950
- args: [TreetableCellRenderer]
4951
- }] } });
5482
+ }], propDecorators: { cells: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => TreetableCellRenderer), { isSignal: true }] }] } });
4952
5483
 
4953
5484
  /*
4954
- * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
5485
+ * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.
4955
5486
  * This software is released under MIT license.
4956
5487
  * The full license information can be found in LICENSE in the root directory of this project.
4957
5488
  */
4958
5489
  class TreetableMainRenderer {
4959
5490
  constructor() {
4960
- this.shouldStabilizeColumn = true;
4961
- }
4962
- ngOnInit() {
5491
+ this._columnState = inject(TreetableColumnStateService);
5492
+ this.headers = contentChildren(TreetableHeaderRenderer, ...(ngDevMode ? [{ debugName: "headers" }] : /* istanbul ignore next */ []));
5493
+ this.rows = contentChildren(TreetableRowRenderer, { ...(ngDevMode ? { debugName: "rows" } : /* istanbul ignore next */ {}), descendants: true });
5494
+ this.columns = contentChildren(ClrTreetableColumn, ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
5495
+ this.rules = [
5496
+ this.createClassesRule(),
5497
+ this.createFirstColumnWidthRule(),
5498
+ this.createDisplayRule(),
5499
+ ];
4963
5500
  fromEvent(window, 'resize')
4964
- .pipe(debounceTime(200))
4965
- .subscribe(() => this.applyMaxWidth());
4966
- }
4967
- ngAfterContentInit() {
4968
- this.headers.changes.subscribe(() => {
4969
- this.shouldStabilizeColumn = true;
5501
+ .pipe(debounceTime(200), takeUntilDestroyed())
5502
+ .subscribe(() => this.renderRuleByKey('first-column-width', this.headers(), this.rows()));
5503
+ afterRenderEffect(() => {
5504
+ const headers = this.headers();
5505
+ const rows = this.rows();
5506
+ if (headers.length > 0) {
5507
+ this.renderAllRules(headers, rows);
5508
+ }
4970
5509
  });
4971
- this.rows.changes.subscribe(() => {
4972
- this.shouldStabilizeColumn = true;
5510
+ this._columnState.changes$.pipe(takeUntilDestroyed()).subscribe(event => {
5511
+ const headers = this.headers();
5512
+ const rows = this.rows();
5513
+ switch (event) {
5514
+ case TreetableColumnUpdate.HIDDEN:
5515
+ this.renderRulesByKeys(['display', 'first-column-width'], headers, rows);
5516
+ break;
5517
+ case TreetableColumnUpdate.RESET_HIDDEN:
5518
+ this.renderAllRules(headers, rows); // resetHidden etc.
5519
+ break;
5520
+ case TreetableColumnUpdate.WIDTH:
5521
+ this.renderRuleByKey('first-column-width', headers, rows);
5522
+ break;
5523
+ default:
5524
+ this.renderAllRules(headers, rows);
5525
+ }
4973
5526
  });
4974
- }
4975
- ngAfterViewChecked() {
4976
- if (this.shouldStabilizeColumn) {
4977
- this.applyColumnClasses();
4978
- setTimeout(() => {
4979
- this.applyMaxWidth();
4980
- }, 10);
4981
- }
5527
+ toObservable(this.columns)
5528
+ .pipe(first())
5529
+ .subscribe(columns => this.initializeColumnOrder(columns));
4982
5530
  }
4983
5531
  /**
4984
- * Applies css column class to every header and cell.
5532
+ * Initializes the index order of the columns as they are rendered.
4985
5533
  */
4986
- applyColumnClasses() {
4987
- this.shouldStabilizeColumn = false;
4988
- const headersArray = this.headers.toArray();
4989
- const rowsArray = this.rows.toArray();
4990
- headersArray.forEach((header, headerIndex) => {
4991
- const columnClasses = header.getColumnClasses();
4992
- if (columnClasses.length === 0) {
4993
- header.setDefaultColumnClass();
4994
- rowsArray.forEach(row => {
4995
- // set every child cell of the same index to default class
4996
- const cell = row.cells.find((_c, cellIndex) => cellIndex === headerIndex);
4997
- if (cell) {
4998
- cell.setColumnClasses(['clr-col']);
4999
- }
5000
- });
5001
- }
5002
- else {
5003
- // set every child cell of the same index to the same class
5004
- // we do not allow overriding column width on a per cell basis different to the header.
5005
- rowsArray.forEach(row => {
5006
- const cell = row.cells.find((_c, cellIndex) => cellIndex === headerIndex);
5007
- if (cell) {
5008
- cell.setColumnClasses(columnClasses);
5009
- }
5010
- });
5011
- }
5012
- });
5013
- }
5014
- applyMaxWidth() {
5015
- if (this.headers.first) {
5016
- const maxWidth = this.headers.first.getWidth();
5017
- if (maxWidth === 0) {
5018
- // If the max width is zero, call this in a timeout to be able to retrieve the client rendered value
5019
- setTimeout(() => {
5020
- this.applyMaxWidthOnEachRow(this.headers.first.getWidth());
5021
- }, 100);
5534
+ initializeColumnOrder(columns) {
5535
+ const idsInOrder = columns.map(column => column.columnId);
5536
+ this._columnState.initializeOrder(idsInOrder);
5537
+ }
5538
+ renderAllRules(headers, rows) {
5539
+ this.render(this.rules, headers, rows);
5540
+ }
5541
+ renderRuleByKey(key, headers, rows) {
5542
+ this.renderRulesByKeys([key], headers, rows);
5543
+ }
5544
+ renderRulesByKeys(keys, headers, rows) {
5545
+ const keySet = new Set(keys);
5546
+ const activeRules = this.rules.filter(rule => keySet.has(rule.key));
5547
+ this.render(activeRules, headers, rows);
5548
+ }
5549
+ render(activeRules, headers, rows) {
5550
+ const columnStates = this._columnState.columns();
5551
+ const statesByIdx = new Map(columnStates.map(state => [state.columnIndex, state]));
5552
+ const firstVisibleIndex = headers.findIndex((_, idx) => !statesByIdx.get(idx)?.hidden);
5553
+ const contexts = headers.map((header, idx) => ({
5554
+ index: idx,
5555
+ isFirstVisible: idx === firstVisibleIndex,
5556
+ header,
5557
+ state: statesByIdx.get(idx),
5558
+ }));
5559
+ const unstableLayoutRules = activeRules.filter(r => r.layoutPhase === 'unstable');
5560
+ const stableLayoutRules = activeRules.filter(r => r.layoutPhase === 'stable');
5561
+ // Phase 1: apply all DOM-mutating rules (classes, display)
5562
+ if (unstableLayoutRules.length) {
5563
+ this.applyRules(unstableLayoutRules, contexts, rows);
5564
+ }
5565
+ // Phase 2: stable - apply all DOM-reading rules (browser reflows on first read after mutations)
5566
+ if (stableLayoutRules.length) {
5567
+ this.applyRules(stableLayoutRules, contexts, rows);
5568
+ }
5569
+ }
5570
+ applyRules(activeRules, contexts, rows) {
5571
+ for (const ctx of contexts) {
5572
+ const preparedRules = activeRules
5573
+ .map(rule => ({ rule, data: rule.prepareData(ctx) }))
5574
+ .filter((x) => x.data !== null);
5575
+ if (ctx.header) {
5576
+ for (const { rule, data } of preparedRules) {
5577
+ rule.applyHeader?.(ctx.header, data, ctx);
5578
+ }
5022
5579
  }
5023
- else {
5024
- this.applyMaxWidthOnEachRow(maxWidth);
5580
+ for (const row of rows) {
5581
+ const cell = row.cells()[ctx.index];
5582
+ if (!cell) {
5583
+ continue;
5584
+ }
5585
+ for (const { rule, data } of preparedRules) {
5586
+ rule.applyCell?.(cell, data, ctx);
5587
+ }
5025
5588
  }
5026
5589
  }
5027
5590
  }
5028
- applyMaxWidthOnEachRow(maxWidth) {
5029
- this.rows.forEach(row => {
5030
- row.cells.first.setMaxWidth(maxWidth);
5031
- });
5591
+ createClassesRule() {
5592
+ return {
5593
+ key: 'classes',
5594
+ layoutPhase: 'unstable',
5595
+ prepareData: ctx => {
5596
+ if (!ctx.header) {
5597
+ return null;
5598
+ }
5599
+ const classes = ctx.header.getColumnClasses();
5600
+ return { classes: classes.length ? classes : ['clr-col'], useDefault: classes.length === 0 };
5601
+ },
5602
+ applyHeader: (header, data) => {
5603
+ if (data.useDefault) {
5604
+ header.setDefaultColumnClass();
5605
+ }
5606
+ },
5607
+ applyCell: (cell, data) => {
5608
+ cell.setColumnClasses(data.classes);
5609
+ },
5610
+ };
5611
+ }
5612
+ createFirstColumnWidthRule() {
5613
+ return {
5614
+ key: 'first-column-width',
5615
+ layoutPhase: 'stable',
5616
+ prepareData: ctx => {
5617
+ if (!ctx.isFirstVisible || !ctx.header) {
5618
+ return null;
5619
+ }
5620
+ return { width: ctx.header.getWidth() };
5621
+ },
5622
+ applyCell: (cell, data) => {
5623
+ cell.setMaxWidth(data.width);
5624
+ },
5625
+ };
5626
+ }
5627
+ createDisplayRule() {
5628
+ return {
5629
+ key: 'display',
5630
+ layoutPhase: 'unstable',
5631
+ prepareData: ctx => ({ hidden: !!ctx.state?.hidden }),
5632
+ applyHeader: (header, data) => {
5633
+ if (data.hidden) {
5634
+ header.hide();
5635
+ }
5636
+ else {
5637
+ header.show();
5638
+ }
5639
+ },
5640
+ applyCell: (cell, data) => {
5641
+ if (data.hidden) {
5642
+ cell.hide();
5643
+ }
5644
+ else {
5645
+ cell.show();
5646
+ }
5647
+ },
5648
+ };
5032
5649
  }
5033
5650
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TreetableMainRenderer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5034
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.17", type: TreetableMainRenderer, isStandalone: false, selector: "clr-treetable", queries: [{ propertyName: "headers", predicate: TreetableHeaderRenderer }, { propertyName: "rows", predicate: TreetableRowRenderer, descendants: true }, { propertyName: "columns", predicate: ClrTreetableColumn }], ngImport: i0 }); }
5651
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.17", type: TreetableMainRenderer, isStandalone: false, selector: "clr-treetable", queries: [{ propertyName: "headers", predicate: TreetableHeaderRenderer, isSignal: true }, { propertyName: "rows", predicate: TreetableRowRenderer, descendants: true, isSignal: true }, { propertyName: "columns", predicate: ClrTreetableColumn, isSignal: true }], ngImport: i0 }); }
5035
5652
  }
5036
5653
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TreetableMainRenderer, decorators: [{
5037
5654
  type: Directive,
@@ -5039,16 +5656,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
5039
5656
  selector: 'clr-treetable',
5040
5657
  standalone: false,
5041
5658
  }]
5042
- }], propDecorators: { headers: [{
5043
- type: ContentChildren,
5044
- args: [TreetableHeaderRenderer]
5045
- }], rows: [{
5046
- type: ContentChildren,
5047
- args: [TreetableRowRenderer, { descendants: true }]
5048
- }], columns: [{
5049
- type: ContentChildren,
5050
- args: [ClrTreetableColumn]
5051
- }] } });
5659
+ }], ctorParameters: () => [], propDecorators: { headers: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => TreetableHeaderRenderer), { isSignal: true }] }], rows: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => TreetableRowRenderer), { ...{ descendants: true }, isSignal: true }] }], columns: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ClrTreetableColumn), { isSignal: true }] }] } });
5052
5660
 
5053
5661
  /*
5054
5662
  * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
@@ -5213,6 +5821,8 @@ const CLR_TREETABLE_DIRECTIVES = [
5213
5821
  ClrTreetableRow,
5214
5822
  ClrTreetableCell,
5215
5823
  ClrTreetableColumn,
5824
+ ClrTreetableHideableColumn,
5825
+ ClrTreetableFooter,
5216
5826
  ClrTreetablePlaceholder,
5217
5827
  ClrTreetableActionOverflow,
5218
5828
  TreetableMainRenderer,
@@ -5232,6 +5842,8 @@ class ClrTreetableModule {
5232
5842
  ClrTreetableRow,
5233
5843
  ClrTreetableCell,
5234
5844
  ClrTreetableColumn,
5845
+ ClrTreetableHideableColumn,
5846
+ ClrTreetableFooter,
5235
5847
  ClrTreetablePlaceholder,
5236
5848
  ClrTreetableActionOverflow,
5237
5849
  TreetableMainRenderer,
@@ -5240,10 +5852,14 @@ class ClrTreetableModule {
5240
5852
  TreetableCellRenderer,
5241
5853
  TreetableItemsDirective,
5242
5854
  ClrTreetableFilter,
5243
- ClrTreetableStringFilter, ClrTreetableRecursiveRows, ClrTreetableRowCheckbox], imports: [CommonModule, ClarityModule, ReactiveFormsModule, FormsModule], exports: [ClrTreetable,
5855
+ ClrTreetableStringFilter, ClrTreetableRecursiveRows,
5856
+ ClrTreetableRowCheckbox,
5857
+ ClrTreetableColumnManagerMenuComponent], imports: [CommonModule, ClarityModule, ReactiveFormsModule, FormsModule, CdkTrapFocusModule], exports: [ClrTreetable,
5244
5858
  ClrTreetableRow,
5245
5859
  ClrTreetableCell,
5246
5860
  ClrTreetableColumn,
5861
+ ClrTreetableHideableColumn,
5862
+ ClrTreetableFooter,
5247
5863
  ClrTreetablePlaceholder,
5248
5864
  ClrTreetableActionOverflow,
5249
5865
  TreetableMainRenderer,
@@ -5253,13 +5869,18 @@ class ClrTreetableModule {
5253
5869
  TreetableItemsDirective,
5254
5870
  ClrTreetableFilter,
5255
5871
  ClrTreetableStringFilter] }); }
5256
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ClrTreetableModule, imports: [CommonModule, ClarityModule, ReactiveFormsModule, FormsModule] }); }
5872
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ClrTreetableModule, imports: [CommonModule, ClarityModule, ReactiveFormsModule, FormsModule, CdkTrapFocusModule] }); }
5257
5873
  }
5258
5874
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ClrTreetableModule, decorators: [{
5259
5875
  type: NgModule,
5260
5876
  args: [{
5261
- imports: [CommonModule, ClarityModule, ReactiveFormsModule, FormsModule],
5262
- declarations: [CLR_TREETABLE_DIRECTIVES, ClrTreetableRecursiveRows, ClrTreetableRowCheckbox],
5877
+ imports: [CommonModule, ClarityModule, ReactiveFormsModule, FormsModule, CdkTrapFocusModule],
5878
+ declarations: [
5879
+ CLR_TREETABLE_DIRECTIVES,
5880
+ ClrTreetableRecursiveRows,
5881
+ ClrTreetableRowCheckbox,
5882
+ ClrTreetableColumnManagerMenuComponent,
5883
+ ],
5263
5884
  exports: [CLR_TREETABLE_DIRECTIVES],
5264
5885
  }]
5265
5886
  }], ctorParameters: () => [] });
@@ -5283,7 +5904,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
5283
5904
  */
5284
5905
 
5285
5906
  /*
5286
- * Copyright (c) 2018-2025 Porsche Informatik. All Rights Reserved.
5907
+ * Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.
5287
5908
  * This software is released under MIT license.
5288
5909
  * The full license information can be found in LICENSE in the root directory of this project.
5289
5910
  */
@@ -17202,5 +17823,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
17202
17823
  * Generated bundle index. Do not edit.
17203
17824
  */
17204
17825
 
17205
- 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, ClrControlEnterSubmitDirective, ClrCopyToClipboard, ClrDataListPredefinedValidatorDirective, ClrDataListValidatorModule, ClrDataListValidators, ClrDatagridColumnReorderModule, ClrDatagridStatePersistenceModule, ClrDateFilterComponent, ClrDateFilterModule, ClrDateTimeContainer, ClrDateTimeModule, ClrDaterangeMaxValidator, ClrDaterangeMinValidator, ClrDaterangeOrderValidator, ClrDaterangeRequiredValidator, ClrDaterangepickerContainerComponent, ClrDaterangepickerDirective, ClrDaterangepickerModule, ClrDotPager, ClrDotPagerModule, ClrDropdownOverflowDirective, ClrDropdownOverflowModule, ClrEnumFilterComponent, ClrEnumFilterModule, ClrExportDatagridButtonModule, ClrFlowBar, ClrFlowBarModule, ClrFocusFirstInvalidFieldDirective, ClrFormModule, ClrGenericQuickList, ClrGenericQuickListModule, ClrHistory, ClrHistoryModule, ClrHistoryPinned, ClrHistoryService, ClrIconAvatar, ClrIconAvatarModule, ClrIfDaterangeErrorDirective, ClrIfWarning, ClrIfWarningModule, ClrImageCarousel, ClrImageGallery, ClrImageGalleryModule, ClrKeyboardNavAltMnemonicDirective, ClrKeyboardNavCtrlArrowDirective, 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, ClrSummaryArea, ClrSummaryAreaStateService, ClrSummaryAreaToggle, ClrSummaryItem, ClrSummaryItemValue, ClrTimeInput, ClrTreetable, ClrTreetableActionOverflow, ClrTreetableCell, ClrTreetableColumn, ClrTreetableFilter, ClrTreetableModule, ClrTreetablePlaceholder, ClrTreetableRow, ClrTreetableSortOrder, ClrTreetableStringFilter, ClrTreetableTreeNode, ClrViewEditSection, ClrViewEditSectionModule, ColumnHiddenStatePersistenceDirective, CompletedByDateShape, CupraBrandShape, Customer, CustomerVip, CustomerVipCollection, CustomerWaiting, CustomerWaitingCollection, DATE, DELIMITER_REGEX, DWABrandShape, DatagridColumnReorderDirective, DatagridFieldDirective, DayModel, DeliveryDate, DieselShape, DollarBillForwardShape, DollarBillPartialShape, DynamicCellContentComponent, EnergyShape, ExportDatagridButtonComponent, ExportDatagridService, ExportTypeEnum, 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, PorscheBrandShape, PriceTypeSwitchShape, RepeatRepairCollection, RepeatRepairShape, ReplacementVehicleCollection, ReplacementVehicleShape, ReturnDateShape, SEPARATOR_TEXT_DEFAULT, SeatBrandShape, ServiceAdvisor, SkodaBrandShape, Sort, StatePersistenceKeyDirective, TRANSLATIONS, TaskAndAppointment, TextForward, TimeModel, TopcardShape, TouaregServiceShape, TreetableCellRenderer, TreetableDataStateService, 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, defaultSummaryAreaCollapsedKey, 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, mapToInternalTree, 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 };
17826
+ 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, ClrControlEnterSubmitDirective, ClrCopyToClipboard, ClrDataListPredefinedValidatorDirective, ClrDataListValidatorModule, ClrDataListValidators, ClrDatagridColumnReorderModule, ClrDatagridStatePersistenceModule, ClrDateFilterComponent, ClrDateFilterModule, ClrDateTimeContainer, ClrDateTimeModule, ClrDaterangeMaxValidator, ClrDaterangeMinValidator, ClrDaterangeOrderValidator, ClrDaterangeRequiredValidator, ClrDaterangepickerContainerComponent, ClrDaterangepickerDirective, ClrDaterangepickerModule, ClrDotPager, ClrDotPagerModule, ClrDropdownOverflowDirective, ClrDropdownOverflowModule, ClrEnumFilterComponent, ClrEnumFilterModule, ClrExportDatagridButtonModule, ClrFlowBar, ClrFlowBarModule, ClrFocusFirstInvalidFieldDirective, ClrFormModule, ClrGenericQuickList, ClrGenericQuickListModule, ClrHistory, ClrHistoryModule, ClrHistoryPinned, ClrHistoryService, ClrIconAvatar, ClrIconAvatarModule, ClrIfDaterangeErrorDirective, ClrIfWarning, ClrIfWarningModule, ClrImageCarousel, ClrImageGallery, ClrImageGalleryModule, ClrKeyboardNavAltMnemonicDirective, ClrKeyboardNavCtrlArrowDirective, 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, ClrSummaryArea, ClrSummaryAreaStateService, ClrSummaryAreaToggle, ClrSummaryItem, ClrSummaryItemValue, ClrTimeInput, ClrTreetable, ClrTreetableActionOverflow, ClrTreetableCell, ClrTreetableColumn, ClrTreetableFilter, ClrTreetableFooter, ClrTreetableHideableColumn, ClrTreetableModule, ClrTreetablePlaceholder, ClrTreetableRow, ClrTreetableSortOrder, ClrTreetableStringFilter, ClrTreetableTreeNode, ClrViewEditSection, ClrViewEditSectionModule, ColumnHiddenStatePersistenceDirective, CompletedByDateShape, CupraBrandShape, Customer, CustomerVip, CustomerVipCollection, CustomerWaiting, CustomerWaitingCollection, DATE, DELIMITER_REGEX, DWABrandShape, DatagridColumnReorderDirective, DatagridFieldDirective, DayModel, DeliveryDate, DieselShape, DollarBillForwardShape, DollarBillPartialShape, DynamicCellContentComponent, EnergyShape, ExportDatagridButtonComponent, ExportDatagridService, ExportTypeEnum, 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, PorscheBrandShape, PriceTypeSwitchShape, RepeatRepairCollection, RepeatRepairShape, ReplacementVehicleCollection, ReplacementVehicleShape, ReturnDateShape, SEPARATOR_TEXT_DEFAULT, SeatBrandShape, ServiceAdvisor, SkodaBrandShape, SortStateService, StatePersistenceKeyDirective, TRANSLATIONS, TaskAndAppointment, TextForward, TimeModel, TopcardShape, TouaregServiceShape, TreetableCellRenderer, TreetableDataStateService, 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, defaultSummaryAreaCollapsedKey, 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, mapToInternalTree, 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 };
17206
17827
  //# sourceMappingURL=porscheinformatik-clr-addons.mjs.map