@porscheinformatik/clr-addons 21.0.7 → 21.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
  */
@@ -6517,6 +7138,14 @@ const skip_forward = clrIconSVG('<g id="24px/skip forward"> <path id="Shape" fil
6517
7138
  const software_download_app = clrIconSVG('<g id="24px/software download [APP]"> <path id="Shape" fill-rule="evenodd" clip-rule="evenodd" d="M18.761 7.1219C17.7695 4.29783 15.0831 2.33496 12 2.33496L11.7586 2.33895C7.99336 2.46356 4.96356 5.49336 4.83895 9.25865L4.83696 9.33896L4.58685 9.35519C2.48052 9.56259 0.834961 11.3391 0.834961 13.5C0.834961 15.8002 2.69969 17.665 4.99996 17.665H8.49996V16.335H4.99996L4.82726 16.3298C3.34195 16.2405 2.16496 15.0077 2.16496 13.5C2.16496 11.9342 3.43423 10.665 4.99996 10.665C5.1435 10.665 5.28547 10.6756 5.42517 10.6965L6.26447 10.8225L6.18603 9.97745L6.1702 9.74394L6.16496 9.49996C6.16496 6.27738 8.77738 3.66496 12 3.66496C14.7242 3.66496 17.0687 5.54737 17.6814 8.16377L17.793 8.64026L18.2811 8.67543L18.4792 8.69485C20.3794 8.9308 21.835 10.5535 21.835 12.5C21.835 14.618 20.118 16.335 18 16.335H15.5V17.665H18L18.2183 17.6604C20.9696 17.546 23.165 15.2794 23.165 12.5L23.1601 12.2751C23.0576 9.88836 21.3307 7.90559 19.0361 7.43915L18.853 7.40496L18.761 7.1219ZM12.66 19.45V13H11.34V19.45L10.15 18.14L9.15996 19.03L9.53257 19.4451C11.472 21.6028 11.6367 21.7229 11.9438 21.7296H12.0561C12.3167 21.7239 12.4747 21.6366 13.7013 20.2923L14.84 19.03L13.84 18.14L12.66 19.45Z" /> </g> ', '0 0 24 24');
6518
7139
  const sorting_app = clrIconSVG('<g id="24px/sorting [APP]"> <path id="Shape" fill-rule="evenodd" clip-rule="evenodd" d="M2.77007 8.77004L1.82007 7.82004C4.96007 4.45004 6.39007 3.04004 6.96007 3.04004C7.53007 3.04004 8.96007 4.45004 12.1801 7.82004L11.2301 8.77004C10.8254 8.35271 10.4507 7.96537 10.1041 7.60707C9.35439 6.83207 8.73611 6.19292 8.23007 5.68004L7.68007 5.14004V20.04H6.36007V5.11004C6.25127 5.20675 6.13882 5.31807 6.0183 5.43738C5.93942 5.51546 5.85709 5.59697 5.77007 5.68004C4.99007 6.43004 4.01007 7.45004 2.77007 8.77004ZM21.2301 15.31L22.1801 16.26C19.0401 19.63 17.6101 21.04 17.0401 21.04C16.4701 21.04 15.0401 19.63 11.8201 16.26L12.7701 15.31C13.1747 15.7274 13.5494 16.1147 13.896 16.473C14.6457 17.248 15.264 17.8872 15.7701 18.4L16.3201 18.94V4.04004H17.6401V18.97C17.7489 18.8733 17.8613 18.762 17.9818 18.6427C18.0607 18.5646 18.143 18.4831 18.2301 18.4C19.0101 17.65 19.9901 16.63 21.2301 15.31Z" /> </g> ', '0 0 24 24');
6519
7140
  const sound = clrIconSVG('<g id="24px/sound"> <path id="Shape" fill-rule="evenodd" clip-rule="evenodd" d="M13.3599 1.21002C15.0665 1.37858 16.59 2.35211 17.4599 3.83002C18.1999 5.21002 17.9999 7.63002 16.8799 11.22L15.6099 10.82C16.8599 6.85002 16.6699 5.17002 16.2899 4.45002C15.7749 3.56072 14.9123 2.92648 13.9099 2.70002V18.91C13.9188 20.7431 12.6468 22.3336 10.8566 22.7279C9.06647 23.1222 7.24395 22.2132 6.48196 20.546C5.71997 18.8788 6.22531 16.9058 7.69496 15.8102C9.1646 14.7146 11.1997 14.7937 12.5799 16V1.08002L13.3599 1.21002ZM7.4199 18.89C7.4199 20.3149 8.57501 21.47 9.9999 21.47C11.4225 21.4645 12.5744 20.3126 12.5799 18.89C12.5799 17.4651 11.4248 16.31 9.9999 16.31C8.57501 16.31 7.4199 17.4651 7.4199 18.89Z" /> </g> ', '0 0 24 24');
7141
+ const sparkles = clrIconSVG('<g id="36px/sparkles" transform="matrix(2.145977,0,0,1.979201,-9.797101,-5.151016)">\n' +
7142
+ ' <g transform="matrix(0.583979,0,0,0.633187,0.601632,-0.765988)">\n' +
7143
+ ' <path d="M21.151,10.108C21.151,12.187 21.828,14.944 23.859,16.975C25.89,19.006 28.647,19.683 30.726,19.683C28.647,19.683 25.89,20.36 23.859,22.392C21.828,24.423 21.151,27.179 21.151,29.259C21.151,27.179 20.473,24.423 18.442,22.392C16.411,20.36 13.655,19.683 11.575,19.683C13.655,19.683 16.411,19.006 18.442,16.975C20.473,14.944 21.151,12.187 21.151,10.108Z" style="fill:none;stroke:black;stroke-width:1.6px;"/>\n' +
7144
+ ' </g>\n' +
7145
+ ' <g transform="matrix(0.179686,0,0,0.194827,13.023949,12.059837)">\n' +
7146
+ ' <path d="M21.151,10.108C21.151,12.187 21.828,14.944 23.859,16.975C25.89,19.006 28.647,19.683 30.726,19.683C28.647,19.683 25.89,20.36 23.859,22.392C21.828,24.423 21.151,27.179 21.151,29.259C21.151,27.179 20.473,24.423 18.442,22.392C16.411,20.36 13.655,19.683 11.575,19.683C13.655,19.683 16.411,19.006 18.442,16.975C20.473,14.944 21.151,12.187 21.151,10.108Z" style="fill:none;stroke:black;stroke-width:5.19px;"/>\n' +
7147
+ ' </g>\n' +
7148
+ ' </g>', '0 0 36 36');
6520
7149
  const standard_equipment = clrIconSVG('<g id="24px/standard equipment"> <path id="Shape" fill-rule="evenodd" clip-rule="evenodd" d="M17.1562 3.15H18.2053C19.3996 3.15116 20.3677 4.11875 20.3695 5.3131V20.8239C20.3682 22.0186 19.4 22.9867 18.2054 22.988H5.86405C4.66938 22.9867 3.70122 22.0186 3.69995 20.8239V5.3132C3.7016 4.11883 4.66968 3.15116 5.86405 3.15H7.00105V2H17.1562V3.15ZM15.8262 3.33H8.33105V3.66C8.33116 4.21162 8.77834 4.65874 9.32995 4.6588H14.8274C15.379 4.6588 15.8262 4.21162 15.8262 3.66V3.33ZM19.0393 20.8238C19.0388 21.2842 18.6657 21.6574 18.2053 21.6578H5.86405C5.40363 21.6574 5.03049 21.2842 5.03005 20.8238V5.3131C5.03093 4.85302 5.40397 4.48043 5.86405 4.4801H7.15735C7.49727 5.38579 8.36218 5.98663 9.32955 5.9891H14.8274C15.7947 5.98659 16.6595 5.38576 16.9995 4.4801H18.2052C18.6652 4.48043 19.0383 4.85302 19.0392 5.3131V20.8238H19.0393ZM9.98135 16.6212L11.4854 17.8622L14.5334 14.8242L15.4724 15.7662L11.5694 19.6552L9.13535 17.6472L9.98135 16.6212ZM7.80405 8.351H16.8041V9.651H7.80405V8.351ZM16.8041 11.6512H7.80405V12.9512H16.8041V11.6512Z" /> </g> ', '0 0 24 24');
6521
7150
  const star_outline = clrIconSVG('<g id="24px/star outline"> <path id="Shape" fill-rule="evenodd" clip-rule="evenodd" d="M12.0001 18.12L18.4201 22.62L19.4301 21.9L17.1201 14.45L23.3901 9.69001L23.0001 8.50001L15.2201 8.38001L12.6401 0.950012H11.3801L8.8701 8.34001L1.0001 8.50001L0.600098 9.67001L6.9001 14.35L4.6201 21.88L5.6201 22.62L12.0001 18.12ZM7.6701 13.37L2.9301 9.77001L8.8401 9.65001C9.36636 9.63682 9.82896 9.29785 10.0001 8.80001L12.0001 3.17001L14.0001 8.80001C14.1588 9.26895 14.5774 9.60149 15.0701 9.65001L21.0701 9.77001L16.3301 13.37C15.9094 13.6839 15.7297 14.2272 15.8801 14.73L17.6101 20.43L12.7201 17.03C12.2874 16.7287 11.7128 16.7287 11.2801 17.03L6.3901 20.43L8.1201 14.73C8.2705 14.2272 8.09075 13.6839 7.6701 13.37Z" /> </g> ', '0 0 24 24');
6522
7151
  const statistic_app = clrIconSVG('<g id="24px/statistic [APP]"> <path id="Shape" d="M3.66496 3V20.335H6.83396L6.83496 12.5H8.16496L8.16396 20.335H11.334L11.335 8.5H12.665L12.664 20.335H15.834L15.835 14.5H17.165L17.164 20.335H22V21.665H2.33496V3H3.66496Z" /> </g> ', '0 0 24 24');
@@ -10694,6 +11323,7 @@ const skipForwardIcon = buildIconShapeTuple('skip-forward', skip_forward);
10694
11323
  const softwareDownloadAppIcon = buildIconShapeTuple('software-download-app', software_download_app);
10695
11324
  const sortingAppIcon = buildIconShapeTuple('sorting-app', sorting_app);
10696
11325
  const soundIcon = buildIconShapeTuple('sound', sound);
11326
+ const sparklesIcon = buildIconShapeTuple('sparkles', sparkles);
10697
11327
  const standardEquipmentIcon = buildIconShapeTuple('standard-equipment', standard_equipment);
10698
11328
  const starOutlineIcon = buildIconShapeTuple('star-outline', star_outline);
10699
11329
  const statisticAppIcon = buildIconShapeTuple('statistic-app', statistic_app);
@@ -11260,6 +11890,7 @@ const allIcons = [
11260
11890
  softwareDownloadAppIcon,
11261
11891
  sortingAppIcon,
11262
11892
  soundIcon,
11893
+ sparklesIcon,
11263
11894
  standardEquipmentIcon,
11264
11895
  starOutlineIcon,
11265
11896
  statisticAppIcon,
@@ -17202,5 +17833,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
17202
17833
  * Generated bundle index. Do not edit.
17203
17834
  */
17204
17835
 
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 };
17836
+ 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, sparkles, sparklesIcon, 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
17837
  //# sourceMappingURL=porscheinformatik-clr-addons.mjs.map