@porscheinformatik/clr-addons 18.1.8 → 18.1.10

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.
@@ -4,4 +4,5 @@
4
4
  * The full license information can be found in LICENSE in the root directory of this project.
5
5
  */
6
6
  export * from './escape.util';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xyLWFkZG9ucy91dGlsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxjQUFjLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggUG9yc2NoZSBJbmZvcm1hdGlrLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFRoZSBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2VzY2FwZS51dGlsJztcbiJdfQ==
7
+ export * from './numeric.format.util';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xyLWFkZG9ucy91dGlsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOCBQb3JzY2hlIEluZm9ybWF0aWsuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vZXNjYXBlLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9udW1lcmljLmZvcm1hdC51dGlsJztcbiJdfQ==
@@ -0,0 +1,99 @@
1
+ const NEGATIVE = '-';
2
+ const NUMBERS = new Set(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']);
3
+ export function formatNumber(value, finalFormatting, decimalSeparator, groupingSeparator, decimalPlaces, autofillDecimals) {
4
+ let result = strip(value, finalFormatting, decimalSeparator, groupingSeparator, decimalPlaces);
5
+ /* add grouping separator */
6
+ const decimalIndex = result.indexOf(decimalSeparator);
7
+ const isNegative = result[0] === NEGATIVE;
8
+ let i = decimalIndex > -1 ? decimalIndex : result.length;
9
+ while (i > (isNegative ? 4 : 3)) {
10
+ i -= 3;
11
+ result = result.substring(0, i) + groupingSeparator + result.substring(i, result.length);
12
+ }
13
+ if (finalFormatting) {
14
+ if (decimalPlaces > 0 && !!result) {
15
+ /* autofill decimal places */
16
+ let actualDecimalIndex = result.indexOf(decimalSeparator);
17
+ if (autofillDecimals) {
18
+ if (actualDecimalIndex === -1) {
19
+ actualDecimalIndex = result.length;
20
+ result += decimalSeparator;
21
+ }
22
+ result = addMissingLeadingZero(result, actualDecimalIndex);
23
+ actualDecimalIndex = result.indexOf(decimalSeparator);
24
+ const actualDecimalPlaces = result.length - actualDecimalIndex - 1;
25
+ for (let j = 0; j < decimalPlaces - actualDecimalPlaces; j++) {
26
+ result += '0';
27
+ }
28
+ }
29
+ else {
30
+ result = addMissingLeadingZero(result, actualDecimalIndex);
31
+ }
32
+ }
33
+ }
34
+ return result;
35
+ }
36
+ function addMissingLeadingZero(result, actualDecimalIndex) {
37
+ const isNegative = result[0] === NEGATIVE;
38
+ /* autoadd a zero before decimal separator, when it's missing */
39
+ if (actualDecimalIndex === 0) {
40
+ result = '0' + result;
41
+ }
42
+ /* autoadd a zero before decimal separator, when it's missing, for negative values */
43
+ if (actualDecimalIndex === 1 && isNegative) {
44
+ result = result[0] + '0' + result.substring(1, result.length);
45
+ }
46
+ return result;
47
+ }
48
+ export function strip(value, removeLeadingZeros = false, decimalSeparator, groupingSeparator, decimalPlaces) {
49
+ const allowedKeys = new Set(NUMBERS);
50
+ allowedKeys.add(NEGATIVE);
51
+ allowedKeys.add(decimalSeparator);
52
+ let result = '';
53
+ let indexDecimalSep = -1;
54
+ let j = -1;
55
+ let ignoredChars = 0;
56
+ for (const char of value) {
57
+ j++;
58
+ if (allowedKeys.has(char)) {
59
+ if (char === decimalSeparator) {
60
+ if (decimalPlaces === 0) {
61
+ /* dismiss content after a decimal separator, when no places allowed */
62
+ break;
63
+ }
64
+ else if (indexDecimalSep > -1) {
65
+ /* ignore subsequent decimal separators */
66
+ continue;
67
+ }
68
+ indexDecimalSep = j;
69
+ }
70
+ if (char === '0' && removeLeadingZeros) {
71
+ /* remove leading zero only if it's not the only zero in the 'value' string */
72
+ if ((result.length === 0 && j + 1 !== value.length) || result === NEGATIVE) {
73
+ ignoredChars++;
74
+ continue;
75
+ }
76
+ }
77
+ if (char === NEGATIVE && j > 0) {
78
+ /* dismiss content after a negative sign not on first position */
79
+ break;
80
+ }
81
+ if (indexDecimalSep > -1 && result.length + ignoredChars > indexDecimalSep + decimalPlaces) {
82
+ /* dismiss content after maximum decimal places reached */
83
+ break;
84
+ }
85
+ result += char;
86
+ }
87
+ else if (char === groupingSeparator) {
88
+ if (indexDecimalSep === -1) {
89
+ ignoredChars++;
90
+ }
91
+ }
92
+ else {
93
+ /* dismiss content after a invalid character */
94
+ break;
95
+ }
96
+ }
97
+ return result;
98
+ }
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtZXJpYy5mb3JtYXQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jbHItYWRkb25zL3V0aWwvbnVtZXJpYy5mb3JtYXQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRTVFLE1BQU0sVUFBVSxZQUFZLENBQzFCLEtBQWEsRUFDYixlQUF3QixFQUN4QixnQkFBd0IsRUFDeEIsaUJBQXlCLEVBQ3pCLGFBQXFCLEVBQ3JCLGdCQUF5QjtJQUV6QixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUUvRiw0QkFBNEI7SUFDNUIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUM7SUFDMUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDekQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1AsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENB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LCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknXSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROdW1iZXIoXG4gIHZhbHVlOiBzdHJpbmcsXG4gIGZpbmFsRm9ybWF0dGluZzogYm9vbGVhbixcbiAgZGVjaW1hbFNlcGFyYXRvcjogc3RyaW5nLFxuICBncm91cGluZ1NlcGFyYXRvcjogc3RyaW5nLFxuICBkZWNpbWFsUGxhY2VzOiBudW1iZXIsXG4gIGF1dG9maWxsRGVjaW1hbHM6IGJvb2xlYW5cbik6IHN0cmluZyB7XG4gIGxldCByZXN1bHQgPSBzdHJpcCh2YWx1ZSwgZmluYWxGb3JtYXR0aW5nLCBkZWNpbWFsU2VwYXJhdG9yLCBncm91cGluZ1NlcGFyYXRvciwgZGVjaW1hbFBsYWNlcyk7XG5cbiAgLyogYWRkIGdyb3VwaW5nIHNlcGFyYXRvciAqL1xuICBjb25zdCBkZWNpbWFsSW5kZXggPSByZXN1bHQuaW5kZXhPZihkZWNpbWFsU2VwYXJhdG9yKTtcbiAgY29uc3QgaXNOZWdhdGl2ZSA9IHJlc3VsdFswXSA9PT0gTkVHQVRJVkU7XG4gIGxldCBpID0gZGVjaW1hbEluZGV4ID4gLTEgPyBkZWNpbWFsSW5kZXggOiByZXN1bHQubGVuZ3RoO1xuICB3aGlsZSAoaSA+IChpc05lZ2F0aXZlID8gNCA6IDMpKSB7XG4gICAgaSAtPSAzO1xuICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgaSkgKyBncm91cGluZ1NlcGFyYXRvciArIHJlc3VsdC5zdWJzdHJpbmcoaSwgcmVzdWx0Lmxlbmd0aCk7XG4gIH1cblxuICBpZiAoZmluYWxGb3JtYXR0aW5nKSB7XG4gICAgaWYgKGRlY2ltYWxQbGFjZXMgPiAwICYmICEhcmVzdWx0KSB7XG4gICAgICAvKiBhdXRvZmlsbCBkZWNpbWFsIHBsYWNlcyAqL1xuICAgICAgbGV0IGFjdHVhbERlY2ltYWxJbmRleCA9IHJlc3VsdC5pbmRleE9mKGRlY2ltYWxTZXBhcmF0b3IpO1xuICAgICAgaWYgKGF1dG9maWxsRGVjaW1hbHMpIHtcbiAgICAgICAgaWYgKGFjdHVhbERlY2ltYWxJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICBhY3R1YWxEZWNpbWFsSW5kZXggPSByZXN1bHQubGVuZ3RoO1xuICAgICAgICAgIHJlc3VsdCArPSBkZWNpbWFsU2VwYXJhdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0ID0gYWRkTWlzc2luZ0xlYWRpbmdaZXJvKHJlc3VsdCwgYWN0dWFsRGVjaW1hbEluZGV4KTtcbiAgICAgICAgYWN0dWFsRGVjaW1hbEluZGV4ID0gcmVzdWx0LmluZGV4T2YoZGVjaW1hbFNlcGFyYXRvcik7XG5cbiAgICAgICAgY29uc3QgYWN0dWFsRGVjaW1hbFBsYWNlcyA9IHJlc3VsdC5sZW5ndGggLSBhY3R1YWxEZWNpbWFsSW5kZXggLSAxO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRlY2ltYWxQbGFjZXMgLSBhY3R1YWxEZWNpbWFsUGxhY2VzOyBqKyspIHtcbiAgICAgICAgICByZXN1bHQgKz0gJzAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBhZGRNaXNzaW5nTGVhZGluZ1plcm8ocmVzdWx0LCBhY3R1YWxEZWNpbWFsSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGFkZE1pc3NpbmdMZWFkaW5nWmVybyhyZXN1bHQ6IHN0cmluZywgYWN0dWFsRGVjaW1hbEluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBpc05lZ2F0aXZlID0gcmVzdWx0WzBdID09PSBORUdBVElWRTtcbiAgLyogYXV0b2FkZCBhIHplcm8gYmVmb3JlIGRlY2ltYWwgc2VwYXJhdG9yLCB3aGVuIGl0J3MgbWlzc2luZyAqL1xuICBpZiAoYWN0dWFsRGVjaW1hbEluZGV4ID09PSAwKSB7XG4gICAgcmVzdWx0ID0gJzAnICsgcmVzdWx0O1xuICB9XG4gIC8qIGF1dG9hZGQgYSB6ZXJvIGJlZm9yZSBkZWNpbWFsIHNlcGFyYXRvciwgd2hlbiBpdCdzIG1pc3NpbmcsIGZvciBuZWdhdGl2ZSB2YWx1ZXMgKi9cbiAgaWYgKGFjdHVhbERlY2ltYWxJbmRleCA9PT0gMSAmJiBpc05lZ2F0aXZlKSB7XG4gICAgcmVzdWx0ID0gcmVzdWx0WzBdICsgJzAnICsgcmVzdWx0LnN1YnN0cmluZygxLCByZXN1bHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXAoXG4gIHZhbHVlOiBzdHJpbmcsXG4gIHJlbW92ZUxlYWRpbmdaZXJvcyA9IGZhbHNlLFxuICBkZWNpbWFsU2VwYXJhdG9yOiBzdHJpbmcsXG4gIGdyb3VwaW5nU2VwYXJhdG9yOiBzdHJpbmcsXG4gIGRlY2ltYWxQbGFjZXM6IG51bWJlclxuKTogc3RyaW5nIHtcbiAgY29uc3QgYWxsb3dlZEtleXMgPSBuZXcgU2V0KE5VTUJFUlMpO1xuICBhbGxvd2VkS2V5cy5hZGQoTkVHQVRJVkUpO1xuICBhbGxvd2VkS2V5cy5hZGQoZGVjaW1hbFNlcGFyYXRvcik7XG5cbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgaW5kZXhEZWNpbWFsU2VwID0gLTE7XG4gIGxldCBqID0gLTE7XG4gIGxldCBpZ25vcmVkQ2hhcnMgPSAwO1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgdmFsdWUpIHtcbiAgICBqKys7XG4gICAgaWYgKGFsbG93ZWRLZXlzLmhhcyhjaGFyKSkge1xuICAgICAgaWYgKGNoYXIgPT09IGRlY2ltYWxTZXBhcmF0b3IpIHtcbiAgICAgICAgaWYgKGRlY2ltYWxQbGFjZXMgPT09IDApIHtcbiAgICAgICAgICAvKiBkaXNtaXNzIGNvbnRlbnQgYWZ0ZXIgYSBkZWNpbWFsIHNlcGFyYXRvciwgd2hlbiBubyBwbGFjZXMgYWxsb3dlZCAqL1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGluZGV4RGVjaW1hbFNlcCA+IC0xKSB7XG4gICAgICAgICAgLyogaWdub3JlIHN1YnNlcXVlbnQgZGVjaW1hbCBzZXBhcmF0b3JzICovXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXhEZWNpbWFsU2VwID0gajtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFyID09PSAnMCcgJiYgcmVtb3ZlTGVhZGluZ1plcm9zKSB7XG4gICAgICAgIC8qIHJlbW92ZSBsZWFkaW5nIHplcm8gb25seSBpZiBpdCdzIG5vdCB0aGUgb25seSB6ZXJvIGluIHRoZSAndmFsdWUnIHN0cmluZyAqL1xuICAgICAgICBpZiAoKHJlc3VsdC5sZW5ndGggPT09IDAgJiYgaiArIDEgIT09IHZhbHVlLmxlbmd0aCkgfHwgcmVzdWx0ID09PSBORUdBVElWRSkge1xuICAgICAgICAgIGlnbm9yZWRDaGFycysrO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hhciA9PT0gTkVHQVRJVkUgJiYgaiA+IDApIHtcbiAgICAgICAgLyogZGlzbWlzcyBjb250ZW50IGFmdGVyIGEgbmVnYXRpdmUgc2lnbiBub3Qgb24gZmlyc3QgcG9zaXRpb24gKi9cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXhEZWNpbWFsU2VwID4gLTEgJiYgcmVzdWx0Lmxlbmd0aCArIGlnbm9yZWRDaGFycyA+IGluZGV4RGVjaW1hbFNlcCArIGRlY2ltYWxQbGFjZXMpIHtcbiAgICAgICAgLyogZGlzbWlzcyBjb250ZW50IGFmdGVyIG1heGltdW0gZGVjaW1hbCBwbGFjZXMgcmVhY2hlZCAqL1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlc3VsdCArPSBjaGFyO1xuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gZ3JvdXBpbmdTZXBhcmF0b3IpIHtcbiAgICAgIGlmIChpbmRleERlY2ltYWxTZXAgPT09IC0xKSB7XG4gICAgICAgIGlnbm9yZWRDaGFycysrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvKiBkaXNtaXNzIGNvbnRlbnQgYWZ0ZXIgYSBpbnZhbGlkIGNoYXJhY3RlciAqL1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
@@ -6,7 +6,7 @@ import { ClarityIcons, arrowIcon, angleIcon, timesIcon, trashIcon, plusCircleIco
6
6
  import * as i2 from '@clr/angular';
7
7
  import { ClarityModule, ClrFormsModule, ClrDropdown, ClrForm, ClrAlert, ClrAxis, ClrSide, ClrAlignment, ClrPopoverToggleService, ClrPopoverEventsService, ClrPopoverPositionService, ClrIconModule, ClrDropdownModule, ClrDatagridSortOrder, DatagridPropertyComparator, ClrDatagridPagination, ClrDatagridFilter, ClrDateContainer, ClrLabel, ClrControlHelper, ClrControlError, ClrControlSuccess, ClrDatepickerModule } from '@clr/angular';
8
8
  import * as i3$1 from '@angular/forms';
9
- import { FormsModule, NG_VALIDATORS, NgControl, NG_VALUE_ACCESSOR, FormControl, ReactiveFormsModule } from '@angular/forms';
9
+ import { FormsModule, NG_VALIDATORS, NgControl, NG_VALUE_ACCESSOR, FormControl, ReactiveFormsModule, NgModel } from '@angular/forms';
10
10
  import { Subject, BehaviorSubject, timer, asyncScheduler, interval, takeUntil as takeUntil$1, of, ReplaySubject, delay } from 'rxjs';
11
11
  import { takeUntil, take, observeOn } from 'rxjs/operators';
12
12
  import * as i3 from '@angular/router';
@@ -2294,7 +2294,132 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
2294
2294
  */
2295
2295
 
2296
2296
  /*
2297
- * Copyright (c) 2018-2022 Porsche Informatik. All Rights Reserved.
2297
+ * Copyright (c) 2018 Porsche Informatik. All Rights Reserved.
2298
+ * This software is released under MIT license.
2299
+ * The full license information can be found in LICENSE in the root directory of this project.
2300
+ */
2301
+ const entityMap = new Map([
2302
+ ['&', '&amp;'],
2303
+ ['<', '&lt;'],
2304
+ ['>', '&gt;'],
2305
+ ['"', '&quot;'],
2306
+ ["'", '&#39;'],
2307
+ ['/', '&#x2F;'],
2308
+ ]);
2309
+ function escapeHtml(source) {
2310
+ return source.replace(/[&<>"'/]/g, s => entityMap.get(s));
2311
+ }
2312
+ function escapeRegex(s) {
2313
+ return String(s).replace(/[\\^$*+?.()|[\]{}]/g, '\\$&');
2314
+ }
2315
+
2316
+ const NEGATIVE$1 = '-';
2317
+ const NUMBERS$1 = new Set(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']);
2318
+ function formatNumber(value, finalFormatting, decimalSeparator, groupingSeparator, decimalPlaces, autofillDecimals) {
2319
+ let result = strip(value, finalFormatting, decimalSeparator, groupingSeparator, decimalPlaces);
2320
+ /* add grouping separator */
2321
+ const decimalIndex = result.indexOf(decimalSeparator);
2322
+ const isNegative = result[0] === NEGATIVE$1;
2323
+ let i = decimalIndex > -1 ? decimalIndex : result.length;
2324
+ while (i > (isNegative ? 4 : 3)) {
2325
+ i -= 3;
2326
+ result = result.substring(0, i) + groupingSeparator + result.substring(i, result.length);
2327
+ }
2328
+ if (finalFormatting) {
2329
+ if (decimalPlaces > 0 && !!result) {
2330
+ /* autofill decimal places */
2331
+ let actualDecimalIndex = result.indexOf(decimalSeparator);
2332
+ if (autofillDecimals) {
2333
+ if (actualDecimalIndex === -1) {
2334
+ actualDecimalIndex = result.length;
2335
+ result += decimalSeparator;
2336
+ }
2337
+ result = addMissingLeadingZero(result, actualDecimalIndex);
2338
+ actualDecimalIndex = result.indexOf(decimalSeparator);
2339
+ const actualDecimalPlaces = result.length - actualDecimalIndex - 1;
2340
+ for (let j = 0; j < decimalPlaces - actualDecimalPlaces; j++) {
2341
+ result += '0';
2342
+ }
2343
+ }
2344
+ else {
2345
+ result = addMissingLeadingZero(result, actualDecimalIndex);
2346
+ }
2347
+ }
2348
+ }
2349
+ return result;
2350
+ }
2351
+ function addMissingLeadingZero(result, actualDecimalIndex) {
2352
+ const isNegative = result[0] === NEGATIVE$1;
2353
+ /* autoadd a zero before decimal separator, when it's missing */
2354
+ if (actualDecimalIndex === 0) {
2355
+ result = '0' + result;
2356
+ }
2357
+ /* autoadd a zero before decimal separator, when it's missing, for negative values */
2358
+ if (actualDecimalIndex === 1 && isNegative) {
2359
+ result = result[0] + '0' + result.substring(1, result.length);
2360
+ }
2361
+ return result;
2362
+ }
2363
+ function strip(value, removeLeadingZeros = false, decimalSeparator, groupingSeparator, decimalPlaces) {
2364
+ const allowedKeys = new Set(NUMBERS$1);
2365
+ allowedKeys.add(NEGATIVE$1);
2366
+ allowedKeys.add(decimalSeparator);
2367
+ let result = '';
2368
+ let indexDecimalSep = -1;
2369
+ let j = -1;
2370
+ let ignoredChars = 0;
2371
+ for (const char of value) {
2372
+ j++;
2373
+ if (allowedKeys.has(char)) {
2374
+ if (char === decimalSeparator) {
2375
+ if (decimalPlaces === 0) {
2376
+ /* dismiss content after a decimal separator, when no places allowed */
2377
+ break;
2378
+ }
2379
+ else if (indexDecimalSep > -1) {
2380
+ /* ignore subsequent decimal separators */
2381
+ continue;
2382
+ }
2383
+ indexDecimalSep = j;
2384
+ }
2385
+ if (char === '0' && removeLeadingZeros) {
2386
+ /* remove leading zero only if it's not the only zero in the 'value' string */
2387
+ if ((result.length === 0 && j + 1 !== value.length) || result === NEGATIVE$1) {
2388
+ ignoredChars++;
2389
+ continue;
2390
+ }
2391
+ }
2392
+ if (char === NEGATIVE$1 && j > 0) {
2393
+ /* dismiss content after a negative sign not on first position */
2394
+ break;
2395
+ }
2396
+ if (indexDecimalSep > -1 && result.length + ignoredChars > indexDecimalSep + decimalPlaces) {
2397
+ /* dismiss content after maximum decimal places reached */
2398
+ break;
2399
+ }
2400
+ result += char;
2401
+ }
2402
+ else if (char === groupingSeparator) {
2403
+ if (indexDecimalSep === -1) {
2404
+ ignoredChars++;
2405
+ }
2406
+ }
2407
+ else {
2408
+ /* dismiss content after a invalid character */
2409
+ break;
2410
+ }
2411
+ }
2412
+ return result;
2413
+ }
2414
+
2415
+ /*
2416
+ * Copyright (c) 2018 Porsche Informatik. All Rights Reserved.
2417
+ * This software is released under MIT license.
2418
+ * The full license information can be found in LICENSE in the root directory of this project.
2419
+ */
2420
+
2421
+ /*
2422
+ * Copyright (c) 2018-2024 Porsche Informatik. All Rights Reserved.
2298
2423
  * This software is released under MIT license.
2299
2424
  * The full license information can be found in LICENSE in the root directory of this project.
2300
2425
  */
@@ -2429,114 +2554,21 @@ class ClrNumericField {
2429
2554
  this.injectUnitSymbol();
2430
2555
  }
2431
2556
  handleInputChanged() {
2432
- this.updateInput(this.formatNumber(this._numericValue.toString().replace(new RegExp('[.]', 'g'), this.decimalSeparator), true), true);
2557
+ this.updateInput(formatNumber(this._numericValue.toString().replace(new RegExp('[.]', 'g'), this.decimalSeparator), true, this.decimalSeparator, this.groupingSeparator, this.decimalPlaces, this.autofillDecimals), true);
2433
2558
  }
2434
2559
  formatInput(element, finalFormatting) {
2435
2560
  const cursorPos = element.selectionStart;
2436
2561
  const length = element.value.length;
2437
2562
  const setCursor = this.displayValue !== element.value;
2438
- this.updateInput(this.formatNumber(element.value, finalFormatting), false);
2563
+ this.updateInput(formatNumber(element.value, finalFormatting, this.decimalSeparator, this.groupingSeparator, this.decimalPlaces, this.autofillDecimals), false);
2439
2564
  if (setCursor) {
2440
2565
  element.selectionStart = element.selectionEnd = Math.max(cursorPos + element.value.length - length, 0);
2441
2566
  }
2442
2567
  }
2443
- formatNumber(value, finalFormatting) {
2444
- let result = this.strip(value, finalFormatting);
2445
- /* add grouping separator */
2446
- const decimalIndex = result.indexOf(this.decimalSeparator);
2447
- const isNegative = result[0] === NEGATIVE;
2448
- let i = decimalIndex > -1 ? decimalIndex : result.length;
2449
- while (i > (isNegative ? 4 : 3)) {
2450
- i -= 3;
2451
- result = result.substring(0, i) + this.groupingSeparator + result.substring(i, result.length);
2452
- }
2453
- if (finalFormatting) {
2454
- if (this.decimalPlaces > 0 && !!result) {
2455
- /* autofill decimal places */
2456
- let actualDecimalIndex = result.indexOf(this.decimalSeparator);
2457
- if (this.autofillDecimals) {
2458
- if (actualDecimalIndex === -1) {
2459
- actualDecimalIndex = result.length;
2460
- result += this.decimalSeparator;
2461
- }
2462
- result = this.addMissingLeadingZero(result, actualDecimalIndex);
2463
- actualDecimalIndex = result.indexOf(this.decimalSeparator);
2464
- const actualDecimalPlaces = result.length - actualDecimalIndex - 1;
2465
- for (let j = 0; j < this.decimalPlaces - actualDecimalPlaces; j++) {
2466
- result += '0';
2467
- }
2468
- }
2469
- else {
2470
- result = this.addMissingLeadingZero(result, actualDecimalIndex);
2471
- }
2472
- }
2473
- }
2474
- return result;
2475
- }
2476
- addMissingLeadingZero(result, actualDecimalIndex) {
2477
- const isNegative = result[0] === NEGATIVE;
2478
- /* autoadd a zero before decimal separator, when it's missing */
2479
- if (actualDecimalIndex === 0) {
2480
- result = '0' + result;
2481
- }
2482
- /* autoadd a zero before decimal separator, when it's missing, for negative values */
2483
- if (actualDecimalIndex === 1 && isNegative) {
2484
- result = result[0] + '0' + result.substring(1, result.length);
2485
- }
2486
- return result;
2487
- }
2488
- strip(value, removeLeadingZeros = false) {
2489
- let result = '';
2490
- let indexDecimalSep = -1;
2491
- let j = -1;
2492
- let ignoredChars = 0;
2493
- for (const char of value) {
2494
- j++;
2495
- if (this.allowedKeys.has(char)) {
2496
- if (char === this.decimalSeparator) {
2497
- if (this.decimalPlaces === 0) {
2498
- /* dismiss content after a decimal separator, when no places allowed */
2499
- break;
2500
- }
2501
- else if (indexDecimalSep > -1) {
2502
- /* ignore subsequent decimal separators */
2503
- continue;
2504
- }
2505
- indexDecimalSep = j;
2506
- }
2507
- if (char === '0' && removeLeadingZeros) {
2508
- /* remove leading zero only if it's not the only zero in the 'value' string */
2509
- if ((result.length === 0 && j + 1 !== value.length) || result === NEGATIVE) {
2510
- ignoredChars++;
2511
- continue;
2512
- }
2513
- }
2514
- if (char === NEGATIVE && j > 0) {
2515
- /* dismiss content after a negative sign not on first position */
2516
- break;
2517
- }
2518
- if (indexDecimalSep > -1 && result.length + ignoredChars > indexDecimalSep + this.decimalPlaces) {
2519
- /* dismiss content after maximum decimal places reached */
2520
- break;
2521
- }
2522
- result += char;
2523
- }
2524
- else if (char === this.groupingSeparator) {
2525
- if (indexDecimalSep === -1) {
2526
- ignoredChars++;
2527
- }
2528
- }
2529
- else {
2530
- /* dismiss content after a invalid character */
2531
- break;
2532
- }
2533
- }
2534
- return result;
2535
- }
2536
2568
  updateInput(value, updateAsync) {
2537
2569
  this.displayValue = value;
2538
2570
  this.inputEl.nativeElement.value = value;
2539
- this._numericValue = parseFloat(this.strip(value).replace(this.decimalSeparator, '.'));
2571
+ this._numericValue = parseFloat(strip(value, false, this.decimalSeparator, this.groupingSeparator, this.decimalPlaces).replace(this.decimalSeparator, '.'));
2540
2572
  if (this._numericValue !== this.roundOrTruncate(this.originalValue)) {
2541
2573
  this.originalValue = this._numericValue;
2542
2574
  if (updateAsync) {
@@ -8841,6 +8873,164 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
8841
8873
  }]
8842
8874
  }] });
8843
8875
 
8876
+ class ClrReadonlyDirective {
8877
+ constructor(elementRef, renderer, injector) {
8878
+ this.elementRef = elementRef;
8879
+ this.renderer = renderer;
8880
+ this.injector = injector;
8881
+ this.isMultiSelect = false;
8882
+ this.unitPosition = 'right';
8883
+ this.property = null;
8884
+ this.clrReadOnly = true;
8885
+ this.unit = '';
8886
+ this.decimalPlaces = 2;
8887
+ this.roundValue = false;
8888
+ this.autofillDecimals = false;
8889
+ this.decimalSeparator = ',';
8890
+ this.groupingSeparator = '.';
8891
+ this.isInitialized = false;
8892
+ }
8893
+ ngOnInit() {
8894
+ const ngControl = this.injector.get(NgControl, null);
8895
+ if (this.clrReadOnly) {
8896
+ this.renderAsSpan(ngControl);
8897
+ }
8898
+ }
8899
+ ngOnChanges() {
8900
+ if (this.isInitialized) {
8901
+ const ngControl = this.injector.get(NgControl, null);
8902
+ if (this.clrReadOnly) {
8903
+ this.renderAsSpan(ngControl);
8904
+ }
8905
+ else {
8906
+ this.resetReadonly();
8907
+ }
8908
+ }
8909
+ }
8910
+ ngAfterViewInit() {
8911
+ this.isInitialized = true;
8912
+ }
8913
+ resetReadonly() {
8914
+ const parentElement = this.elementRef.nativeElement.parentElement;
8915
+ this.renderer.removeClass(parentElement, 'clr-readonly-parent');
8916
+ const spanElement = this.elementRef.nativeElement.parentElement.querySelector('span.clr-readonly');
8917
+ if (spanElement != null) {
8918
+ this.renderer.removeChild(parentElement, spanElement);
8919
+ }
8920
+ }
8921
+ renderAsSpan(ngControl) {
8922
+ const parentElement = this.elementRef.nativeElement.parentElement;
8923
+ if (!parentElement) {
8924
+ return;
8925
+ }
8926
+ // Create a new span element to display the readonly value.
8927
+ const span = this.renderer.createElement('span');
8928
+ const formattedValue = this.formatControlValue(ngControl);
8929
+ const textNode = this.renderer.createText(formattedValue);
8930
+ // Add text and classes to the span element.
8931
+ this.renderer.appendChild(span, textNode);
8932
+ this.renderer.setAttribute(span, 'class', 'clr-readonly');
8933
+ this.renderer.addClass(parentElement, 'clr-readonly-parent');
8934
+ this.renderer.appendChild(parentElement, span);
8935
+ }
8936
+ determineControlType() {
8937
+ if (this.elementRef.nativeElement.attributes['clrnumeric']) {
8938
+ return 'numeric';
8939
+ }
8940
+ else if (this.elementRef.nativeElement.tagName.toLowerCase() === 'select') {
8941
+ return 'select';
8942
+ }
8943
+ else {
8944
+ return '';
8945
+ }
8946
+ }
8947
+ formatControlValue(ngControl) {
8948
+ const controlType = this.determineControlType();
8949
+ const controlValue = ngControl instanceof NgModel ? ngControl.model : ngControl.control?.value;
8950
+ if (controlValue == null || controlValue === '') {
8951
+ return '';
8952
+ }
8953
+ if (controlType === 'numeric') {
8954
+ return this.formatNumericValue(controlValue);
8955
+ }
8956
+ else if (this.isMultiSelect) {
8957
+ return this.formatMultiSelectValue(controlValue);
8958
+ }
8959
+ else if (controlType === 'select') {
8960
+ return this.formatListValue(controlValue);
8961
+ }
8962
+ return controlValue ?? '';
8963
+ }
8964
+ formatNumericValue(controlValue) {
8965
+ const result = formatNumber(controlValue + '', true, this.decimalSeparator, this.groupingSeparator, this.decimalPlaces, this.autofillDecimals);
8966
+ return this.unitPosition === 'left' ? `${this.unit} ${result}` : `${result} ${this.unit}`;
8967
+ }
8968
+ formatMultiSelectValue(controlValue) {
8969
+ return controlValue.map((item) => item[this.property]).join(', ');
8970
+ }
8971
+ formatListValue(controlValue) {
8972
+ const options = this.elementRef.nativeElement.querySelectorAll('option');
8973
+ const matchingOption = Array.from(options).find(option => option.value === controlValue);
8974
+ if (matchingOption) {
8975
+ return matchingOption.innerHTML;
8976
+ }
8977
+ else {
8978
+ return '';
8979
+ }
8980
+ }
8981
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrReadonlyDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
8982
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.5", type: ClrReadonlyDirective, selector: "[clrReadonly]", inputs: { isMultiSelect: ["clrMulti", "isMultiSelect"], unitPosition: ["clrUnitPosition", "unitPosition"], property: ["clrReadOnlyProperty", "property"], clrReadOnly: ["clrReadonly", "clrReadOnly"], unit: ["clrUnit", "unit"], decimalPlaces: ["clrDecimalPlaces", "decimalPlaces"], roundValue: ["clrRoundDisplayValue", "roundValue"], autofillDecimals: ["clrAutofillDecimals", "autofillDecimals"], decimalSeparator: ["clrDecimalSep", "decimalSeparator"], groupingSeparator: ["clrGroupingSep", "groupingSeparator"] }, usesOnChanges: true, ngImport: i0 }); }
8983
+ }
8984
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrReadonlyDirective, decorators: [{
8985
+ type: Directive,
8986
+ args: [{
8987
+ selector: '[clrReadonly]',
8988
+ }]
8989
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }], propDecorators: { isMultiSelect: [{
8990
+ type: Input,
8991
+ args: ['clrMulti']
8992
+ }], unitPosition: [{
8993
+ type: Input,
8994
+ args: ['clrUnitPosition']
8995
+ }], property: [{
8996
+ type: Input,
8997
+ args: ['clrReadOnlyProperty']
8998
+ }], clrReadOnly: [{
8999
+ type: Input,
9000
+ args: ['clrReadonly']
9001
+ }], unit: [{
9002
+ type: Input,
9003
+ args: ['clrUnit']
9004
+ }], decimalPlaces: [{
9005
+ type: Input,
9006
+ args: ['clrDecimalPlaces']
9007
+ }], roundValue: [{
9008
+ type: Input,
9009
+ args: ['clrRoundDisplayValue']
9010
+ }], autofillDecimals: [{
9011
+ type: Input,
9012
+ args: ['clrAutofillDecimals']
9013
+ }], decimalSeparator: [{
9014
+ type: Input,
9015
+ args: ['clrDecimalSep']
9016
+ }], groupingSeparator: [{
9017
+ type: Input,
9018
+ args: ['clrGroupingSep']
9019
+ }] } });
9020
+
9021
+ class ClrReadonlyDirectiveModule {
9022
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrReadonlyDirectiveModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9023
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.5", ngImport: i0, type: ClrReadonlyDirectiveModule, declarations: [ClrReadonlyDirective], exports: [ClrReadonlyDirective] }); }
9024
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrReadonlyDirectiveModule }); }
9025
+ }
9026
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrReadonlyDirectiveModule, decorators: [{
9027
+ type: NgModule,
9028
+ args: [{
9029
+ declarations: [ClrReadonlyDirective],
9030
+ exports: [ClrReadonlyDirective],
9031
+ }]
9032
+ }] });
9033
+
8844
9034
  /*
8845
9035
  * Copyright (c) 2018-2024 Porsche Informatik. All Rights Reserved.
8846
9036
  * This software is released under MIT license.
@@ -8880,7 +9070,8 @@ class ClrAddonsModule {
8880
9070
  ClrDateFilterModule,
8881
9071
  ClrDaterangepickerModule,
8882
9072
  ClrIfWarningModule,
8883
- ClrActionPanelModule] }); }
9073
+ ClrActionPanelModule,
9074
+ ClrReadonlyDirectiveModule] }); }
8884
9075
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrAddonsModule, imports: [ClrViewEditSectionModule,
8885
9076
  ClrPagerModule,
8886
9077
  ClrDotPagerModule,
@@ -8913,7 +9104,8 @@ class ClrAddonsModule {
8913
9104
  ClrDateFilterModule,
8914
9105
  ClrDaterangepickerModule,
8915
9106
  ClrIfWarningModule,
8916
- ClrActionPanelModule] }); }
9107
+ ClrActionPanelModule,
9108
+ ClrReadonlyDirectiveModule] }); }
8917
9109
  }
8918
9110
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrAddonsModule, decorators: [{
8919
9111
  type: NgModule,
@@ -8952,32 +9144,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
8952
9144
  ClrDaterangepickerModule,
8953
9145
  ClrIfWarningModule,
8954
9146
  ClrActionPanelModule,
9147
+ ClrReadonlyDirectiveModule,
8955
9148
  ],
8956
9149
  }]
8957
9150
  }] });
8958
9151
 
8959
9152
  /*
8960
- * Copyright (c) 2018 Porsche Informatik. All Rights Reserved.
8961
- * This software is released under MIT license.
8962
- * The full license information can be found in LICENSE in the root directory of this project.
8963
- */
8964
- const entityMap = new Map([
8965
- ['&', '&amp;'],
8966
- ['<', '&lt;'],
8967
- ['>', '&gt;'],
8968
- ['"', '&quot;'],
8969
- ["'", '&#39;'],
8970
- ['/', '&#x2F;'],
8971
- ]);
8972
- function escapeHtml(source) {
8973
- return source.replace(/[&<>"'/]/g, s => entityMap.get(s));
8974
- }
8975
- function escapeRegex(s) {
8976
- return String(s).replace(/[\\^$*+?.()|[\]{}]/g, '\\$&');
8977
- }
8978
-
8979
- /*
8980
- * Copyright (c) 2018 Porsche Informatik. All Rights Reserved.
9153
+ * Copyright (c) 2018-2024 Porsche Informatik. All Rights Reserved.
8981
9154
  * This software is released under MIT license.
8982
9155
  * The full license information can be found in LICENSE in the root directory of this project.
8983
9156
  */
@@ -8992,5 +9165,5 @@ function escapeRegex(s) {
8992
9165
  * Generated bundle index. Do not edit.
8993
9166
  */
8994
9167
 
8995
- export { ACShape, AcceptanceDateShape, AcceptedBrands, AccessoriesShape, AccessoryPartsShape, AudiBrandShape, AwardWinnerPremiumShape, BIG_ENDIAN, BlocksGroupForwardShape, BrochureShape, BundleForwardShape, BusinessCustomersCommercialShape, BusinessCustomersPrivateShape, BusinessPartnerWithCar, CLR_BLANK_OPTION, CONTENT_PROVIDER, CalculatorForwardShape, CaliforniaServiceShape, CaliforniaSpecialistShape, CampaignOutdatedShape, CampaignShape, CarOffSite, CarOnSite, CarPickupServiceShape, CarWashShape, CertifiedRepairShape, CertifiedRetailerShape, ClrActionPanel, ClrActionPanelContainer, ClrActionPanelContainerContent, ClrActionPanelContainerFooter, ClrActionPanelModule, ClrActiveNotification, ClrAddonsIconShapes, ClrAddonsLabel, ClrAddonsModule, ClrAutocompleteOff, ClrAutocompleteOffModule, ClrBackButton, ClrBackButtonModule, ClrBrandAvatar, ClrBrandAvatarModule, ClrBreadcrumb, ClrBreadcrumbModule, ClrBreadcrumbService, ClrCollapseExpandSection, ClrCollapseExpandSectionModule, ClrContentPanel, ClrContentPanelContainer, ClrContentPanelContainerContent, ClrContentPanelContainerFooter, ClrContentPanelModule, ClrContentRef, ClrDataListPredefinedValidatorDirective, ClrDataListValidatorModule, ClrDataListValidators, ClrDatagridStatePersistenceModule, ClrDateFilterComponent, ClrDateFilterModule, ClrDateTimeContainer, ClrDateTimeModule, ClrDaterangeMaxValidator, ClrDaterangeMinValidator, ClrDaterangeOrderValidator, ClrDaterangeRequiredValidator, ClrDaterangepickerContainerComponent, ClrDaterangepickerDirective, ClrDaterangepickerModule, ClrDotPager, ClrDotPagerModule, ClrDropdownOverflowDirective, ClrDropdownOverflowModule, ClrEnumFilterComponent, ClrEnumFilterModule, ClrFlowBar, ClrFlowBarModule, ClrFormModule, ClrGenericQuickList, ClrGenericQuickListModule, ClrHistory, ClrHistoryModule, ClrHistoryPinned, ClrHistoryService, ClrIfDaterangeErrorDirective, ClrIfWarning, ClrIfWarningModule, ClrLetterAvatar, ClrLetterAvatarModule, ClrLocationBarModule, ClrMainNavGroup, ClrMainNavGroupItem, ClrMainNavGroupModule, ClrMaxNumeric, ClrMinNumeric, ClrMultilingualInput, ClrMultilingualInputValidators, ClrMultilingualModule, ClrMultilingualSelector, ClrMultilingualTextarea, ClrNotification, ClrNotificationModule, ClrNotificationRef, ClrNotificationService, ClrNumericField, ClrNumericFieldModule, ClrNumericFieldValidators, ClrPagedSearchResultList, ClrPagedSearchResultListModule, ClrPager, ClrPagerModule, ClrProgressSpinnerComponent, ClrProgressSpinnerModule, ClrQuickList, ClrQuickListModule, ClrRequiredAllMultilang, ClrRequiredOneMultilang, ClrSearchField, ClrSearchFieldModule, ClrTimeInput, ClrTreetable, ClrTreetableActionOverflow, ClrTreetableCell, ClrTreetableColumn, ClrTreetableModule, ClrTreetablePlaceholder, ClrTreetableRow, ClrViewEditSection, ClrViewEditSectionModule, ColumnHiddenStatePersistenceDirective, CompletedByDateShape, ConfiguratorCommercialShape, ConfiguratorPrivateShape, ConsumptionShape, ContactDealerShape, CupraBrandShape, CustomersCenterShape, DATE, DELIMITER_REGEX, DWABrandShape, DatagridFieldDirective, DayModel, DieselShape, DollarBillForwardShape, DollarBillPartialShape, DriversAssistanceShape, EfficiencyShape, ElectricCarsServiceShape, ElectricCarsShape, ElectricityShape, EmissionShape, EnergyShape, EngineShape, ExpressServiceShape, ExteriorShape, ExternalPartForwardShape, FindACarShape, FleetServiceCommercialShape, FleetServicePrivateShape, GasCarsServiceShape, GasShape, HISTORY_NOTIFICATION_URL_PROVIDER, HISTORY_PROVIDER, HistoryProvider, HybridShape, InternalPartForwardShape, InvoiceReadyShape, InvoiceShape, ItemsForwardShape, ItemsReceiveShape, LITTLE_ENDIAN, LITTLE_ENDIAN_REGEX, LoadingVolumeShape, LocateShape, LocationBarComponent, LocationBarContentProvider, LocationBarNode, MIDDLE_ENDIAN, MIDDLE_ENDIAN_REGEX, MONTH, NewCarCommercialShape, NewCarPrivateShape, NewCarUtilityVehicleShape, NightServiceShape, NodeId, OffersShape, OnCallDutyShape, OpenSatShape, PaintMaterialForwardShape, PaintMaterialShape, PaintShopShape, ParkingLocation, PartNonStockForwardShape, PartsForwardShape, PartsNonStockShape, PartsShape, PayloadShape, PerformanceShape, PetrolShape, PlusServiceShape, PopoverPositions, PorscheBrandShape, PowerShape, PowerTrainShape, PriceTypeSwitchShape, QualifiedWorkshopShape, RepeatRepairShape, ReturnDateShape, RoadsideAssistanceShape, RouteShape, SEPARATOR_TEXT_DEFAULT, SeatAirShape, SeatBrandShape, SeatShape, ServiceBellShape, ServiceShape, SizeShape, SkodaBrandShape, StatePersistenceKeyDirective, StockLocatorCommercialShape, StockLocatorPrivateShape, TRANSLATIONS, TaskAndAppointment, TaxiDealerShape, TextForward, TimeModel, TopcardShape, TouaregServiceShape, TransmissionAutomaticShape, TransmissionManualShape, TreetableCellRenderer, TreetableHeaderRenderer, TreetableMainRenderer, TreetableRowRenderer, USER_INPUT_REGEX, UsedCarCommercialShape, UsedCarPrivateShape, VWBrandShape, VWNBrandShape, VWShape, VehicleConversionShape, View360Shape, VinShape, VirtualRealityShape, VsfSearchShape, WCPShape, WheelToWheelShape, WindscreenWashShape, WrenchForward, YEAR, acceptanceDateIcon, accessoriesIcon, accessoryPartsIcon, airConditionerIcon, allIcons, audiBrandIcon, awardWinnerPremiumIcon, blocksGroupForwardIcon, brochureIcon, bundleForwardIcon, businessCustomersCommercialIcon, businessCustomersPrivateIcon, businessPartnerWithCarIcon, calculatorForwardIcon, californiaServiceIcon, californiaSpecialistIcon, campaignIcon, campaignOutdatedIcon, carOffSite, carOnSite, carPickupServiceIcon, carWashIcon, certifiedRepairIcon, certifiedRetailerIcon, clrIconSVG, completedByDateIcon, configuratorCommercialIcon, configuratorPrivateIcon, consumptionIcon, contactDealerIcon, cupraBrandIcon, customersCenterIcon, dieselIcon, dollarBillForwardIcon, dollarBillPartialIcon, driversAssistanceIcon, dwaBrandIcon, efficiencyIcon, electricCarsIcon, electricCarsServiceIcon, electricityIcon, emissionIcon, energyIcon, engineIcon, escapeHtml, escapeRegex, expressServiceIcon, exteriorIcon, externalPartForwardIcon, findACarIcon, fleetServiceCommercialIcon, fleetServicePrivateIcon, gasCarsServiceIcon, gasIcon, hybridIcon, internalPartForwardIcon, invoiceIcon, invoiceReadyIcon, itemsForwardIcon, itemsRecieveIcon, loadingVolumeIcon, locateIcon, newCarCommercialIcon, newCarPrivateIcon, newCarUtilityVehicleIcon, nightServiceIcon, offersIcon, onCallDutyIcon, openSatIcon, paintMaterialForwardIcon, paintMaterialIcon, paintShopIcon, parkingLocationIcon, partsForwardIcon, partsIcon, partsNonStockForwardIcon, partsNonStockIcon, payloadIcon, performanceIcon, petrolIcon, plusServiceIcon, porscheBrandIcon, powerIcon, powerTrainIcon, priceTypeSwitchIcon, qualifiedWorkshopIcon, repeatRepairIcon, returnDateIcon, roadsideAssistanceIcon, routeIcon, seatAirIcon, seatBrandIcon, seatIcon, serviceBellIcon, serviceIcon, sizeIcon, skodaBrandIcon, stockLocatorCommercialIcon, stockLocatorPrivateIcon, taskAndAppointmentIcon, taxiDealerIcon, textForwardIcon, topcardIcon, touaregServiceIcon, transmissionAutomaticIcon, transmissionManualIcon, usedCarCommercialIcon, usedCarPrivateIcon, vehicleConversionIcon, view360Icon, vinIcon, virtualRealityIcon, volkswagenIcon, vsfSearchIcon, vwBrandIcon, vwnBrandIcon, wcpIcon, wheelToWheelIcon, windscreenWashIcon, wrenchForwardIcon };
9168
+ export { ACShape, AcceptanceDateShape, AcceptedBrands, AccessoriesShape, AccessoryPartsShape, AudiBrandShape, AwardWinnerPremiumShape, BIG_ENDIAN, BlocksGroupForwardShape, BrochureShape, BundleForwardShape, BusinessCustomersCommercialShape, BusinessCustomersPrivateShape, BusinessPartnerWithCar, CLR_BLANK_OPTION, CONTENT_PROVIDER, CalculatorForwardShape, CaliforniaServiceShape, CaliforniaSpecialistShape, CampaignOutdatedShape, CampaignShape, CarOffSite, CarOnSite, CarPickupServiceShape, CarWashShape, CertifiedRepairShape, CertifiedRetailerShape, ClrActionPanel, ClrActionPanelContainer, ClrActionPanelContainerContent, ClrActionPanelContainerFooter, ClrActionPanelModule, ClrActiveNotification, ClrAddonsIconShapes, ClrAddonsLabel, ClrAddonsModule, ClrAutocompleteOff, ClrAutocompleteOffModule, ClrBackButton, ClrBackButtonModule, ClrBrandAvatar, ClrBrandAvatarModule, ClrBreadcrumb, ClrBreadcrumbModule, ClrBreadcrumbService, ClrCollapseExpandSection, ClrCollapseExpandSectionModule, ClrContentPanel, ClrContentPanelContainer, ClrContentPanelContainerContent, ClrContentPanelContainerFooter, ClrContentPanelModule, ClrContentRef, ClrDataListPredefinedValidatorDirective, ClrDataListValidatorModule, ClrDataListValidators, ClrDatagridStatePersistenceModule, ClrDateFilterComponent, ClrDateFilterModule, ClrDateTimeContainer, ClrDateTimeModule, ClrDaterangeMaxValidator, ClrDaterangeMinValidator, ClrDaterangeOrderValidator, ClrDaterangeRequiredValidator, ClrDaterangepickerContainerComponent, ClrDaterangepickerDirective, ClrDaterangepickerModule, ClrDotPager, ClrDotPagerModule, ClrDropdownOverflowDirective, ClrDropdownOverflowModule, ClrEnumFilterComponent, ClrEnumFilterModule, ClrFlowBar, ClrFlowBarModule, ClrFormModule, ClrGenericQuickList, ClrGenericQuickListModule, ClrHistory, ClrHistoryModule, ClrHistoryPinned, ClrHistoryService, ClrIfDaterangeErrorDirective, ClrIfWarning, ClrIfWarningModule, ClrLetterAvatar, ClrLetterAvatarModule, ClrLocationBarModule, ClrMainNavGroup, ClrMainNavGroupItem, ClrMainNavGroupModule, ClrMaxNumeric, ClrMinNumeric, ClrMultilingualInput, ClrMultilingualInputValidators, ClrMultilingualModule, ClrMultilingualSelector, ClrMultilingualTextarea, ClrNotification, ClrNotificationModule, ClrNotificationRef, ClrNotificationService, ClrNumericField, ClrNumericFieldModule, ClrNumericFieldValidators, ClrPagedSearchResultList, ClrPagedSearchResultListModule, ClrPager, ClrPagerModule, ClrProgressSpinnerComponent, ClrProgressSpinnerModule, ClrQuickList, ClrQuickListModule, ClrReadonlyDirective, ClrReadonlyDirectiveModule, ClrRequiredAllMultilang, ClrRequiredOneMultilang, ClrSearchField, ClrSearchFieldModule, ClrTimeInput, ClrTreetable, ClrTreetableActionOverflow, ClrTreetableCell, ClrTreetableColumn, ClrTreetableModule, ClrTreetablePlaceholder, ClrTreetableRow, ClrViewEditSection, ClrViewEditSectionModule, ColumnHiddenStatePersistenceDirective, CompletedByDateShape, ConfiguratorCommercialShape, ConfiguratorPrivateShape, ConsumptionShape, ContactDealerShape, CupraBrandShape, CustomersCenterShape, DATE, DELIMITER_REGEX, DWABrandShape, DatagridFieldDirective, DayModel, DieselShape, DollarBillForwardShape, DollarBillPartialShape, DriversAssistanceShape, EfficiencyShape, ElectricCarsServiceShape, ElectricCarsShape, ElectricityShape, EmissionShape, EnergyShape, EngineShape, ExpressServiceShape, ExteriorShape, ExternalPartForwardShape, FindACarShape, FleetServiceCommercialShape, FleetServicePrivateShape, GasCarsServiceShape, GasShape, HISTORY_NOTIFICATION_URL_PROVIDER, HISTORY_PROVIDER, HistoryProvider, HybridShape, InternalPartForwardShape, InvoiceReadyShape, InvoiceShape, ItemsForwardShape, ItemsReceiveShape, LITTLE_ENDIAN, LITTLE_ENDIAN_REGEX, LoadingVolumeShape, LocateShape, LocationBarComponent, LocationBarContentProvider, LocationBarNode, MIDDLE_ENDIAN, MIDDLE_ENDIAN_REGEX, MONTH, NewCarCommercialShape, NewCarPrivateShape, NewCarUtilityVehicleShape, NightServiceShape, NodeId, OffersShape, OnCallDutyShape, OpenSatShape, PaintMaterialForwardShape, PaintMaterialShape, PaintShopShape, ParkingLocation, PartNonStockForwardShape, PartsForwardShape, PartsNonStockShape, PartsShape, PayloadShape, PerformanceShape, PetrolShape, PlusServiceShape, PopoverPositions, PorscheBrandShape, PowerShape, PowerTrainShape, PriceTypeSwitchShape, QualifiedWorkshopShape, RepeatRepairShape, ReturnDateShape, RoadsideAssistanceShape, RouteShape, SEPARATOR_TEXT_DEFAULT, SeatAirShape, SeatBrandShape, SeatShape, ServiceBellShape, ServiceShape, SizeShape, SkodaBrandShape, StatePersistenceKeyDirective, StockLocatorCommercialShape, StockLocatorPrivateShape, TRANSLATIONS, TaskAndAppointment, TaxiDealerShape, TextForward, TimeModel, TopcardShape, TouaregServiceShape, TransmissionAutomaticShape, TransmissionManualShape, TreetableCellRenderer, TreetableHeaderRenderer, TreetableMainRenderer, TreetableRowRenderer, USER_INPUT_REGEX, UsedCarCommercialShape, UsedCarPrivateShape, VWBrandShape, VWNBrandShape, VWShape, VehicleConversionShape, View360Shape, VinShape, VirtualRealityShape, VsfSearchShape, WCPShape, WheelToWheelShape, WindscreenWashShape, WrenchForward, YEAR, acceptanceDateIcon, accessoriesIcon, accessoryPartsIcon, airConditionerIcon, allIcons, audiBrandIcon, awardWinnerPremiumIcon, blocksGroupForwardIcon, brochureIcon, bundleForwardIcon, businessCustomersCommercialIcon, businessCustomersPrivateIcon, businessPartnerWithCarIcon, calculatorForwardIcon, californiaServiceIcon, californiaSpecialistIcon, campaignIcon, campaignOutdatedIcon, carOffSite, carOnSite, carPickupServiceIcon, carWashIcon, certifiedRepairIcon, certifiedRetailerIcon, clrIconSVG, completedByDateIcon, configuratorCommercialIcon, configuratorPrivateIcon, consumptionIcon, contactDealerIcon, cupraBrandIcon, customersCenterIcon, dieselIcon, dollarBillForwardIcon, dollarBillPartialIcon, driversAssistanceIcon, dwaBrandIcon, efficiencyIcon, electricCarsIcon, electricCarsServiceIcon, electricityIcon, emissionIcon, energyIcon, engineIcon, escapeHtml, escapeRegex, expressServiceIcon, exteriorIcon, externalPartForwardIcon, findACarIcon, fleetServiceCommercialIcon, fleetServicePrivateIcon, formatNumber, gasCarsServiceIcon, gasIcon, hybridIcon, internalPartForwardIcon, invoiceIcon, invoiceReadyIcon, itemsForwardIcon, itemsRecieveIcon, loadingVolumeIcon, locateIcon, newCarCommercialIcon, newCarPrivateIcon, newCarUtilityVehicleIcon, nightServiceIcon, offersIcon, onCallDutyIcon, openSatIcon, paintMaterialForwardIcon, paintMaterialIcon, paintShopIcon, parkingLocationIcon, partsForwardIcon, partsIcon, partsNonStockForwardIcon, partsNonStockIcon, payloadIcon, performanceIcon, petrolIcon, plusServiceIcon, porscheBrandIcon, powerIcon, powerTrainIcon, priceTypeSwitchIcon, qualifiedWorkshopIcon, repeatRepairIcon, returnDateIcon, roadsideAssistanceIcon, routeIcon, seatAirIcon, seatBrandIcon, seatIcon, serviceBellIcon, serviceIcon, sizeIcon, skodaBrandIcon, stockLocatorCommercialIcon, stockLocatorPrivateIcon, strip, taskAndAppointmentIcon, taxiDealerIcon, textForwardIcon, topcardIcon, touaregServiceIcon, transmissionAutomaticIcon, transmissionManualIcon, usedCarCommercialIcon, usedCarPrivateIcon, vehicleConversionIcon, view360Icon, vinIcon, virtualRealityIcon, volkswagenIcon, vsfSearchIcon, vwBrandIcon, vwnBrandIcon, wcpIcon, wheelToWheelIcon, windscreenWashIcon, wrenchForwardIcon };
8996
9169
  //# sourceMappingURL=clr-addons.mjs.map