@scania-nl/tegel-angular-extensions 0.0.4 → 0.0.6

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.
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Parses the contents of a `.env`-style file into a nested JavaScript object.
3
+ *
4
+ * Each line in the input string is expected to follow the format `KEY=VALUE`.
5
+ * Nested keys can be created using a configurable delimiter (default: `"__"`).
6
+ * Lines starting with `#` or containing only whitespace are ignored.
7
+ *
8
+ * Examples:
9
+ * ```env
10
+ * API_URL=https://api.local
11
+ * LOG__LEVEL=debug
12
+ * DB__CONNECTION__TIMEOUT=30
13
+ * ```
14
+ * Produces:
15
+ * ```ts
16
+ * {
17
+ * API_URL: "https://api.local",
18
+ * LOG: { LEVEL: "debug" },
19
+ * DB: { CONNECTION: { TIMEOUT: "30" } }
20
+ * }
21
+ * ```
22
+ *
23
+ * @param raw - The raw `.env` file content as a string.
24
+ * @param delimiter - The delimiter used to represent nested keys (default: `"__"`).
25
+ * @returns A nested object representing all parsed key-value pairs.
26
+ */
27
+ export function parseEnvFile(raw, delimiter = '__') {
28
+ const result = {};
29
+ // Normalize CRLF -> LF and split into lines
30
+ const lines = raw.replace(/\r/g, '').split('\n');
31
+ for (const rawLine of lines) {
32
+ const line = rawLine.trim();
33
+ // Skip blank lines and comments
34
+ if (!line || line.startsWith('#'))
35
+ continue;
36
+ // Split "KEY=VALUE" (first '=' only)
37
+ const { key, value } = splitEnvLine(line);
38
+ if (!key)
39
+ continue; // malformed line with no key
40
+ // Support nesting via delimiter: "A__B__C" -> ["A","B","C"]
41
+ const path = key.split(delimiter).filter(Boolean);
42
+ // Coerce value (handles simple arrays)
43
+ const parsedValue = parseEnvValue(value);
44
+ // Write into `result` at nested path, creating objects as needed
45
+ assignNested(result, path, parsedValue);
46
+ }
47
+ return result;
48
+ }
49
+ /**
50
+ * Parses an environment variable value into a typed representation.
51
+ *
52
+ * Supports array syntax in square brackets:
53
+ * ```
54
+ * [one, two, three] -> ['one', 'two', 'three']
55
+ * ["a", "b", "c"] -> ['"a"', '"b"', '"c"']
56
+ * ```
57
+ * All other values are returned as raw strings.
58
+ *
59
+ * @param value - The raw string value to parse from a `.env` line.
60
+ * @returns The parsed value (string or array of strings).
61
+ */
62
+ function parseEnvValue(value) {
63
+ // Remove leading/trailing whitespace
64
+ const trimmed = value.trim();
65
+ // Detect array syntax: [item1, item2, item3]
66
+ if (trimmed.startsWith('[') && trimmed.endsWith(']')) {
67
+ // Remove surrounding brackets and trim inner content
68
+ const inner = trimmed.slice(1, -1).trim();
69
+ if (!inner)
70
+ return []; // Empty array → []
71
+ // Split by comma and trim each entry
72
+ return inner.split(',').map((item) => item.trim());
73
+ }
74
+ // For non-array values, return as-is
75
+ return value;
76
+ }
77
+ /**
78
+ * Writes a value into a nested object structure using a key path.
79
+ *
80
+ * Example:
81
+ * ```ts
82
+ * const obj = {};
83
+ * assignNested(obj, ['Database', 'Host'], 'localhost');
84
+ * // Result: { Database: { Host: 'localhost' } }
85
+ * ```
86
+ *
87
+ * Intermediate objects are created automatically if they do not exist.
88
+ *
89
+ * @typeParam T - The type of the value being assigned.
90
+ * @param target - The root object to modify.
91
+ * @param path - The array of path segments (e.g., ['A','B','C']).
92
+ * @param value - The value to assign at the final key.
93
+ */
94
+ function assignNested(target, path, value) {
95
+ // Start from the root object reference
96
+ let ref = target;
97
+ // Walk through all path segments except the last one
98
+ for (let i = 0; i < path.length - 1; i++) {
99
+ const seg = path[i];
100
+ // Ensure that each segment points to a plain object;
101
+ // replace invalid types (null, arrays, primitives) with {}
102
+ if (typeof ref[seg] !== 'object' ||
103
+ ref[seg] === null ||
104
+ Array.isArray(ref[seg])) {
105
+ ref[seg] = {};
106
+ }
107
+ // Move deeper into the structure
108
+ ref = ref[seg];
109
+ }
110
+ // Set the final property to the given value
111
+ ref[path[path.length - 1]] = value;
112
+ }
113
+ /**
114
+ * Splits a `.env` line into its key and value components.
115
+ *
116
+ * Example:
117
+ * ```
118
+ * "API_URL=https://api.example.com"
119
+ * -> { key: "API_URL", value: "https://api.example.com" }
120
+ * ```
121
+ *
122
+ * The split occurs at the **first** '=' character only.
123
+ * If the line does not contain '=', an empty `{ key: '', value: '' }` is returned.
124
+ *
125
+ * @param line - A single `.env` line to split.
126
+ * @returns An object containing the key and value strings.
127
+ */
128
+ function splitEnvLine(line) {
129
+ // Find first '='; keys in .env files never contain '='
130
+ const eq = line.indexOf('=');
131
+ // Skip malformed lines
132
+ if (eq === -1)
133
+ return { key: '', value: '' };
134
+ // Extract key before '=' and value after '='
135
+ const key = line.slice(0, eq).trim();
136
+ const value = line.slice(eq + 1).trim();
137
+ // Return key-value pair
138
+ return { key, value };
139
+ }
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UtZW52LWZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RlZ2VsLWFuZ3VsYXItZXh0ZW5zaW9ucy9zcmMvbGliL2Vudi9jb3JlL3BhcnNlLWVudi1maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsR0FBVyxFQUNYLFNBQVMsR0FBRyxJQUFJO0lBRWhCLE1BQU0sTUFBTSxHQUE0QixFQUFFLENBQUM7SUFFM0MsNENBQTRDO0lBQzVDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVqRCxLQUFLLE1BQU0sT0FBTyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUU1QixnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUFFLFNBQVM7UUFFNUMscUNBQXFDO1FBQ3JDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxHQUFHO1lBQUUsU0FBUyxDQUFDLDZCQUE2QjtRQUVqRCw0REFBNEQ7UUFDNUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbEQsdUNBQXVDO1FBQ3ZDLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6QyxpRUFBaUU7UUFDakUsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxLQUFhO0lBQ2xDLHFDQUFxQztJQUNyQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFN0IsNkNBQTZDO0lBQzdDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDckQscURBQXFEO1FBQ3JELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQjtRQUUxQyxxQ0FBcUM7UUFDckMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILFNBQVMsWUFBWSxDQUNuQixNQUF5QixFQUN6QixJQUFjLEVBQ2QsS0FBUTtJQUVSLHVDQUF1QztJQUN2QyxJQUFJLEdBQUcsR0FBNEIsTUFBTSxDQUFDO0lBRTFDLHFEQUFxRDtJQUNyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN6QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEIscURBQXFEO1FBQ3JELDJEQUEyRDtRQUMzRCxJQUNFLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVE7WUFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUk7WUFDakIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDdkIsQ0FBQztZQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUVELGlDQUFpQztRQUNqQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBNEIsQ0FBQztJQUM1QyxDQUFDO0lBRUQsNENBQTRDO0lBQzVDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNyQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxJQUFZO0lBQ2hDLHVEQUF1RDtJQUN2RCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTdCLHVCQUF1QjtJQUN2QixJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFFN0MsNkNBQTZDO0lBQzdDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRXhDLHdCQUF3QjtJQUN4QixPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBhcnNlcyB0aGUgY29udGVudHMgb2YgYSBgLmVudmAtc3R5bGUgZmlsZSBpbnRvIGEgbmVzdGVkIEphdmFTY3JpcHQgb2JqZWN0LlxuICpcbiAqIEVhY2ggbGluZSBpbiB0aGUgaW5wdXQgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGZvbGxvdyB0aGUgZm9ybWF0IGBLRVk9VkFMVUVgLlxuICogTmVzdGVkIGtleXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgYSBjb25maWd1cmFibGUgZGVsaW1pdGVyIChkZWZhdWx0OiBgXCJfX1wiYCkuXG4gKiBMaW5lcyBzdGFydGluZyB3aXRoIGAjYCBvciBjb250YWluaW5nIG9ubHkgd2hpdGVzcGFjZSBhcmUgaWdub3JlZC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqIGBgYGVudlxuICogQVBJX1VSTD1odHRwczovL2FwaS5sb2NhbFxuICogTE9HX19MRVZFTD1kZWJ1Z1xuICogREJfX0NPTk5FQ1RJT05fX1RJTUVPVVQ9MzBcbiAqIGBgYFxuICogUHJvZHVjZXM6XG4gKiBgYGB0c1xuICoge1xuICogICBBUElfVVJMOiBcImh0dHBzOi8vYXBpLmxvY2FsXCIsXG4gKiAgIExPRzogeyBMRVZFTDogXCJkZWJ1Z1wiIH0sXG4gKiAgIERCOiB7IENPTk5FQ1RJT046IHsgVElNRU9VVDogXCIzMFwiIH0gfVxuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIHJhdyAtIFRoZSByYXcgYC5lbnZgIGZpbGUgY29udGVudCBhcyBhIHN0cmluZy5cbiAqIEBwYXJhbSBkZWxpbWl0ZXIgLSBUaGUgZGVsaW1pdGVyIHVzZWQgdG8gcmVwcmVzZW50IG5lc3RlZCBrZXlzIChkZWZhdWx0OiBgXCJfX1wiYCkuXG4gKiBAcmV0dXJucyBBIG5lc3RlZCBvYmplY3QgcmVwcmVzZW50aW5nIGFsbCBwYXJzZWQga2V5LXZhbHVlIHBhaXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFbnZGaWxlKFxuICByYXc6IHN0cmluZyxcbiAgZGVsaW1pdGVyID0gJ19fJ1xuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgLy8gTm9ybWFsaXplIENSTEYgLT4gTEYgYW5kIHNwbGl0IGludG8gbGluZXNcbiAgY29uc3QgbGluZXMgPSByYXcucmVwbGFjZSgvXFxyL2csICcnKS5zcGxpdCgnXFxuJyk7XG5cbiAgZm9yIChjb25zdCByYXdMaW5lIG9mIGxpbmVzKSB7XG4gICAgY29uc3QgbGluZSA9IHJhd0xpbmUudHJpbSgpO1xuXG4gICAgLy8gU2tpcCBibGFuayBsaW5lcyBhbmQgY29tbWVudHNcbiAgICBpZiAoIWxpbmUgfHwgbGluZS5zdGFydHNXaXRoKCcjJykpIGNvbnRpbnVlO1xuXG4gICAgLy8gU3BsaXQgXCJLRVk9VkFMVUVcIiAoZmlyc3QgJz0nIG9ubHkpXG4gICAgY29uc3QgeyBrZXksIHZhbHVlIH0gPSBzcGxpdEVudkxpbmUobGluZSk7XG4gICAgaWYgKCFrZXkpIGNvbnRpbnVlOyAvLyBtYWxmb3JtZWQgbGluZSB3aXRoIG5vIGtleVxuXG4gICAgLy8gU3VwcG9ydCBuZXN0aW5nIHZpYSBkZWxpbWl0ZXI6IFwiQV9fQl9fQ1wiIC0+IFtcIkFcIixcIkJcIixcIkNcIl1cbiAgICBjb25zdCBwYXRoID0ga2V5LnNwbGl0KGRlbGltaXRlcikuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgLy8gQ29lcmNlIHZhbHVlIChoYW5kbGVzIHNpbXBsZSBhcnJheXMpXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBwYXJzZUVudlZhbHVlKHZhbHVlKTtcblxuICAgIC8vIFdyaXRlIGludG8gYHJlc3VsdGAgYXQgbmVzdGVkIHBhdGgsIGNyZWF0aW5nIG9iamVjdHMgYXMgbmVlZGVkXG4gICAgYXNzaWduTmVzdGVkKHJlc3VsdCwgcGF0aCwgcGFyc2VkVmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWUgaW50byBhIHR5cGVkIHJlcHJlc2VudGF0aW9uLlxuICpcbiAqIFN1cHBvcnRzIGFycmF5IHN5bnRheCBpbiBzcXVhcmUgYnJhY2tldHM6XG4gKiBgYGBcbiAqIFtvbmUsIHR3bywgdGhyZWVdICAtPiBbJ29uZScsICd0d28nLCAndGhyZWUnXVxuICogW1wiYVwiLCBcImJcIiwgXCJjXCJdICAgIC0+IFsnXCJhXCInLCAnXCJiXCInLCAnXCJjXCInXVxuICogYGBgXG4gKiBBbGwgb3RoZXIgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByYXcgc3RyaW5ncy5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgcmF3IHN0cmluZyB2YWx1ZSB0byBwYXJzZSBmcm9tIGEgYC5lbnZgIGxpbmUuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIHZhbHVlIChzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncykuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRW52VmFsdWUodmFsdWU6IHN0cmluZyk6IHVua25vd24ge1xuICAvLyBSZW1vdmUgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlXG4gIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XG5cbiAgLy8gRGV0ZWN0IGFycmF5IHN5bnRheDogW2l0ZW0xLCBpdGVtMiwgaXRlbTNdXG4gIGlmICh0cmltbWVkLnN0YXJ0c1dpdGgoJ1snKSAmJiB0cmltbWVkLmVuZHNXaXRoKCddJykpIHtcbiAgICAvLyBSZW1vdmUgc3Vycm91bmRpbmcgYnJhY2tldHMgYW5kIHRyaW0gaW5uZXIgY29udGVudFxuICAgIGNvbnN0IGlubmVyID0gdHJpbW1lZC5zbGljZSgxLCAtMSkudHJpbSgpO1xuICAgIGlmICghaW5uZXIpIHJldHVybiBbXTsgLy8gRW1wdHkgYXJyYXkg4oaSIFtdXG5cbiAgICAvLyBTcGxpdCBieSBjb21tYSBhbmQgdHJpbSBlYWNoIGVudHJ5XG4gICAgcmV0dXJuIGlubmVyLnNwbGl0KCcsJykubWFwKChpdGVtKSA9PiBpdGVtLnRyaW0oKSk7XG4gIH1cblxuICAvLyBGb3Igbm9uLWFycmF5IHZhbHVlcywgcmV0dXJuIGFzLWlzXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBXcml0ZXMgYSB2YWx1ZSBpbnRvIGEgbmVzdGVkIG9iamVjdCBzdHJ1Y3R1cmUgdXNpbmcgYSBrZXkgcGF0aC5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHNcbiAqIGNvbnN0IG9iaiA9IHt9O1xuICogYXNzaWduTmVzdGVkKG9iaiwgWydEYXRhYmFzZScsICdIb3N0J10sICdsb2NhbGhvc3QnKTtcbiAqIC8vIFJlc3VsdDogeyBEYXRhYmFzZTogeyBIb3N0OiAnbG9jYWxob3N0JyB9IH1cbiAqIGBgYFxuICpcbiAqIEludGVybWVkaWF0ZSBvYmplY3RzIGFyZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhleSBkbyBub3QgZXhpc3QuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIGJlaW5nIGFzc2lnbmVkLlxuICogQHBhcmFtIHRhcmdldCAtIFRoZSByb290IG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBhcnJheSBvZiBwYXRoIHNlZ21lbnRzIChlLmcuLCBbJ0EnLCdCJywnQyddKS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBhc3NpZ24gYXQgdGhlIGZpbmFsIGtleS5cbiAqL1xuZnVuY3Rpb24gYXNzaWduTmVzdGVkPFQ+KFxuICB0YXJnZXQ6IFJlY29yZDxzdHJpbmcsIFQ+LFxuICBwYXRoOiBzdHJpbmdbXSxcbiAgdmFsdWU6IFRcbik6IHZvaWQge1xuICAvLyBTdGFydCBmcm9tIHRoZSByb290IG9iamVjdCByZWZlcmVuY2VcbiAgbGV0IHJlZjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB0YXJnZXQ7XG5cbiAgLy8gV2FsayB0aHJvdWdoIGFsbCBwYXRoIHNlZ21lbnRzIGV4Y2VwdCB0aGUgbGFzdCBvbmVcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGNvbnN0IHNlZyA9IHBhdGhbaV07XG5cbiAgICAvLyBFbnN1cmUgdGhhdCBlYWNoIHNlZ21lbnQgcG9pbnRzIHRvIGEgcGxhaW4gb2JqZWN0O1xuICAgIC8vIHJlcGxhY2UgaW52YWxpZCB0eXBlcyAobnVsbCwgYXJyYXlzLCBwcmltaXRpdmVzKSB3aXRoIHt9XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHJlZltzZWddICE9PSAnb2JqZWN0JyB8fFxuICAgICAgcmVmW3NlZ10gPT09IG51bGwgfHxcbiAgICAgIEFycmF5LmlzQXJyYXkocmVmW3NlZ10pXG4gICAgKSB7XG4gICAgICByZWZbc2VnXSA9IHt9O1xuICAgIH1cblxuICAgIC8vIE1vdmUgZGVlcGVyIGludG8gdGhlIHN0cnVjdHVyZVxuICAgIHJlZiA9IHJlZltzZWddIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9XG5cbiAgLy8gU2V0IHRoZSBmaW5hbCBwcm9wZXJ0eSB0byB0aGUgZ2l2ZW4gdmFsdWVcbiAgcmVmW3BhdGhbcGF0aC5sZW5ndGggLSAxXV0gPSB2YWx1ZTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgYSBgLmVudmAgbGluZSBpbnRvIGl0cyBrZXkgYW5kIHZhbHVlIGNvbXBvbmVudHMuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYFxuICogXCJBUElfVVJMPWh0dHBzOi8vYXBpLmV4YW1wbGUuY29tXCJcbiAqICAgLT4geyBrZXk6IFwiQVBJX1VSTFwiLCB2YWx1ZTogXCJodHRwczovL2FwaS5leGFtcGxlLmNvbVwiIH1cbiAqIGBgYFxuICpcbiAqIFRoZSBzcGxpdCBvY2N1cnMgYXQgdGhlICoqZmlyc3QqKiAnPScgY2hhcmFjdGVyIG9ubHkuXG4gKiBJZiB0aGUgbGluZSBkb2VzIG5vdCBjb250YWluICc9JywgYW4gZW1wdHkgYHsga2V5OiAnJywgdmFsdWU6ICcnIH1gIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBsaW5lIC0gQSBzaW5nbGUgYC5lbnZgIGxpbmUgdG8gc3BsaXQuXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUga2V5IGFuZCB2YWx1ZSBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBzcGxpdEVudkxpbmUobGluZTogc3RyaW5nKTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9IHtcbiAgLy8gRmluZCBmaXJzdCAnPSc7IGtleXMgaW4gLmVudiBmaWxlcyBuZXZlciBjb250YWluICc9J1xuICBjb25zdCBlcSA9IGxpbmUuaW5kZXhPZignPScpO1xuXG4gIC8vIFNraXAgbWFsZm9ybWVkIGxpbmVzXG4gIGlmIChlcSA9PT0gLTEpIHJldHVybiB7IGtleTogJycsIHZhbHVlOiAnJyB9O1xuXG4gIC8vIEV4dHJhY3Qga2V5IGJlZm9yZSAnPScgYW5kIHZhbHVlIGFmdGVyICc9J1xuICBjb25zdCBrZXkgPSBsaW5lLnNsaWNlKDAsIGVxKS50cmltKCk7XG4gIGNvbnN0IHZhbHVlID0gbGluZS5zbGljZShlcSArIDEpLnRyaW0oKTtcblxuICAvLyBSZXR1cm4ga2V5LXZhbHVlIHBhaXJcbiAgcmV0dXJuIHsga2V5LCB2YWx1ZSB9O1xufVxuIl19
@@ -24,11 +24,11 @@ export class ToastComponent {
24
24
  * @returns void
25
25
  */
26
26
  closeToast = (toast) => this.toastService.close(toast.id);
27
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
28
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", type: ToastComponent, isStandalone: true, selector: "tds-ext-toast", ngImport: i0, template: "<ul class=\"toast-list\" aria-live=\"polite\" aria-atomic=\"true\">\n @for (toast of toastsSignal(); track toast.id) {\n <li\n class=\"toast-item\"\n [class]=\"'toast-' + toast.type\"\n [class.toast-closing]=\"toast.state === 'closing'\"\n [style.--duration.ms]=\"toast.duration\"\n [style.--close-duration.ms]=\"toast.closeDuration\"\n role=\"status\"\n >\n <tds-toast\n [variant]=\"toast.type\"\n [header]=\"toast.title\"\n [subheader]=\"toast.description\"\n [closable]=\"toast.closable\"\n tds-close-aria-label=\"Toast close button\"\n >\n @if (toast.link) {\n <tds-link slot=\"actions\">\n <a [routerLink]=\"toast.link\">\n {{ toast.linkText ?? 'Click here' }}\n </a>\n </tds-link>\n } @else if (toast.action) {\n <tds-link slot=\"actions\">\n <a href=\"#\" (click)=\"toast.action()\">\n {{ toast.linkText ?? 'Click here' }}\n </a>\n </tds-link>\n }\n </tds-toast>\n @if (toast.closable) {\n <button\n class=\"toast-close\"\n (click)=\"closeToast(toast)\"\n aria-label=\"Close toast\"\n ></button>\n }\n </li>\n }\n</ul>\n", styles: [":host{position:fixed;right:0;bottom:0;overflow:hidden;z-index:9999}.toast-list{display:grid;grid-template-columns:1fr;gap:6px;list-style:none;padding:6px;margin:0}.toast-item{position:relative;animation:fadeIn .3s ease-in forwards}.toast-item.toast-closing{animation-name:fadeOut;animation-duration:var(--close-duration, .3s);animation-fill-mode:forwards;pointer-events:none}.toast-item:before{content:\"\";position:absolute;height:3px;width:100%;bottom:0;left:4px;right:0;animation:progress var(--duration, 7s) linear forwards;border-top-right-radius:4px;border-bottom-right-radius:4px}.toast-item.toast-information:before{background:var(--tds-information)}.toast-item.toast-success:before{background:var(--tds-positive)}.toast-item.toast-warning:before{background:var(--tds-warning)}.toast-item.toast-error:before{background:var(--tds-negative)}.toast-item .toast-close{height:20px;width:20px;box-sizing:border-box;cursor:pointer;position:absolute;top:14px;right:14px;border:0;background:transparent}.toast-item .toast-close:active{border:2px solid var(--tds-blue-400);outline-offset:-2px}@keyframes fadeIn{0%{transform:translateY(40%);opacity:0;margin-bottom:-25%}to{transform:translateY(0);opacity:1;margin-bottom:0%}}@keyframes fadeOut{0%{transform:translateY(0);opacity:1;margin-top:0}to{opacity:0;transform:translateY(75%);margin-top:-25%}}@keyframes progress{to{width:0%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TegelModule }, { kind: "component", type: i1.TdsLink, selector: "tds-link", inputs: ["disabled", "standalone", "underline"] }, { kind: "component", type: i1.TdsToast, selector: "tds-toast", inputs: ["closable", "header", "hidden", "subheader", "tdsAriaLive", "tdsCloseAriaLabel", "toastId", "toastRole", "variant"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
27
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
28
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: ToastComponent, isStandalone: true, selector: "tae-toast", ngImport: i0, template: "<ul class=\"toast-list\" aria-live=\"polite\" aria-atomic=\"true\">\n @for (toast of toastsSignal(); track toast.id) {\n <li\n class=\"toast-item\"\n [class]=\"'toast-' + toast.type\"\n [class.toast-closing]=\"toast.state === 'closing'\"\n [style.--duration.ms]=\"toast.duration\"\n [style.--close-duration.ms]=\"toast.closeDuration\"\n role=\"status\"\n >\n <tds-toast\n [variant]=\"toast.type\"\n [header]=\"toast.title\"\n [subheader]=\"toast.description\"\n [closable]=\"toast.closable\"\n tds-close-aria-label=\"Toast close button\"\n >\n @if (toast.link) {\n <tds-link slot=\"actions\">\n <a [routerLink]=\"toast.link\">\n {{ toast.linkText ?? 'Click here' }}\n </a>\n </tds-link>\n } @else if (toast.action) {\n <tds-link slot=\"actions\">\n <a href=\"#\" (click)=\"toast.action()\">\n {{ toast.linkText ?? 'Click here' }}\n </a>\n </tds-link>\n }\n </tds-toast>\n @if (toast.closable) {\n <button\n class=\"toast-close\"\n (click)=\"closeToast(toast)\"\n aria-label=\"Close toast\"\n ></button>\n }\n </li>\n }\n</ul>\n", styles: [":host{position:fixed;right:0;bottom:0;overflow:hidden;z-index:9999}.toast-list{display:grid;grid-template-columns:1fr;gap:6px;list-style:none;padding:6px;margin:0}.toast-item{position:relative;animation:fadeIn .3s ease-in forwards}.toast-item.toast-closing{animation-name:fadeOut;animation-duration:var(--close-duration, .3s);animation-fill-mode:forwards;pointer-events:none}.toast-item:before{content:\"\";position:absolute;height:3px;width:100%;bottom:0;left:4px;right:0;animation:progress var(--duration, 7s) linear forwards;border-top-right-radius:4px;border-bottom-right-radius:4px}.toast-item.toast-information:before{background:var(--tds-information)}.toast-item.toast-success:before{background:var(--tds-positive)}.toast-item.toast-warning:before{background:var(--tds-warning)}.toast-item.toast-error:before{background:var(--tds-negative)}.toast-item .toast-close{height:20px;width:20px;box-sizing:border-box;cursor:pointer;position:absolute;top:14px;right:14px;border:0;background:transparent}.toast-item .toast-close:active{border:2px solid var(--tds-blue-400);outline-offset:-2px}@keyframes fadeIn{0%{transform:translateY(40%);opacity:0;margin-bottom:-25%}to{transform:translateY(0);opacity:1;margin-bottom:0%}}@keyframes fadeOut{0%{transform:translateY(0);opacity:1;margin-top:0}to{opacity:0;transform:translateY(75%);margin-top:-25%}}@keyframes progress{to{width:0%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TegelModule }, { kind: "component", type: i1.TdsLink, selector: "tds-link", inputs: ["disabled", "standalone", "underline"] }, { kind: "component", type: i1.TdsToast, selector: "tds-toast", inputs: ["closable", "header", "hidden", "subheader", "tdsAriaLive", "tdsCloseAriaLabel", "toastId", "toastRole", "variant"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
29
29
  }
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ToastComponent, decorators: [{
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ToastComponent, decorators: [{
31
31
  type: Component,
32
- args: [{ selector: 'tds-ext-toast', imports: [CommonModule, TegelModule, RouterLink], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ul class=\"toast-list\" aria-live=\"polite\" aria-atomic=\"true\">\n @for (toast of toastsSignal(); track toast.id) {\n <li\n class=\"toast-item\"\n [class]=\"'toast-' + toast.type\"\n [class.toast-closing]=\"toast.state === 'closing'\"\n [style.--duration.ms]=\"toast.duration\"\n [style.--close-duration.ms]=\"toast.closeDuration\"\n role=\"status\"\n >\n <tds-toast\n [variant]=\"toast.type\"\n [header]=\"toast.title\"\n [subheader]=\"toast.description\"\n [closable]=\"toast.closable\"\n tds-close-aria-label=\"Toast close button\"\n >\n @if (toast.link) {\n <tds-link slot=\"actions\">\n <a [routerLink]=\"toast.link\">\n {{ toast.linkText ?? 'Click here' }}\n </a>\n </tds-link>\n } @else if (toast.action) {\n <tds-link slot=\"actions\">\n <a href=\"#\" (click)=\"toast.action()\">\n {{ toast.linkText ?? 'Click here' }}\n </a>\n </tds-link>\n }\n </tds-toast>\n @if (toast.closable) {\n <button\n class=\"toast-close\"\n (click)=\"closeToast(toast)\"\n aria-label=\"Close toast\"\n ></button>\n }\n </li>\n }\n</ul>\n", styles: [":host{position:fixed;right:0;bottom:0;overflow:hidden;z-index:9999}.toast-list{display:grid;grid-template-columns:1fr;gap:6px;list-style:none;padding:6px;margin:0}.toast-item{position:relative;animation:fadeIn .3s ease-in forwards}.toast-item.toast-closing{animation-name:fadeOut;animation-duration:var(--close-duration, .3s);animation-fill-mode:forwards;pointer-events:none}.toast-item:before{content:\"\";position:absolute;height:3px;width:100%;bottom:0;left:4px;right:0;animation:progress var(--duration, 7s) linear forwards;border-top-right-radius:4px;border-bottom-right-radius:4px}.toast-item.toast-information:before{background:var(--tds-information)}.toast-item.toast-success:before{background:var(--tds-positive)}.toast-item.toast-warning:before{background:var(--tds-warning)}.toast-item.toast-error:before{background:var(--tds-negative)}.toast-item .toast-close{height:20px;width:20px;box-sizing:border-box;cursor:pointer;position:absolute;top:14px;right:14px;border:0;background:transparent}.toast-item .toast-close:active{border:2px solid var(--tds-blue-400);outline-offset:-2px}@keyframes fadeIn{0%{transform:translateY(40%);opacity:0;margin-bottom:-25%}to{transform:translateY(0);opacity:1;margin-bottom:0%}}@keyframes fadeOut{0%{transform:translateY(0);opacity:1;margin-top:0}to{opacity:0;transform:translateY(75%);margin-top:-25%}}@keyframes progress{to{width:0%}}\n"] }]
32
+ args: [{ selector: 'tae-toast', imports: [CommonModule, TegelModule, RouterLink], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ul class=\"toast-list\" aria-live=\"polite\" aria-atomic=\"true\">\n @for (toast of toastsSignal(); track toast.id) {\n <li\n class=\"toast-item\"\n [class]=\"'toast-' + toast.type\"\n [class.toast-closing]=\"toast.state === 'closing'\"\n [style.--duration.ms]=\"toast.duration\"\n [style.--close-duration.ms]=\"toast.closeDuration\"\n role=\"status\"\n >\n <tds-toast\n [variant]=\"toast.type\"\n [header]=\"toast.title\"\n [subheader]=\"toast.description\"\n [closable]=\"toast.closable\"\n tds-close-aria-label=\"Toast close button\"\n >\n @if (toast.link) {\n <tds-link slot=\"actions\">\n <a [routerLink]=\"toast.link\">\n {{ toast.linkText ?? 'Click here' }}\n </a>\n </tds-link>\n } @else if (toast.action) {\n <tds-link slot=\"actions\">\n <a href=\"#\" (click)=\"toast.action()\">\n {{ toast.linkText ?? 'Click here' }}\n </a>\n </tds-link>\n }\n </tds-toast>\n @if (toast.closable) {\n <button\n class=\"toast-close\"\n (click)=\"closeToast(toast)\"\n aria-label=\"Close toast\"\n ></button>\n }\n </li>\n }\n</ul>\n", styles: [":host{position:fixed;right:0;bottom:0;overflow:hidden;z-index:9999}.toast-list{display:grid;grid-template-columns:1fr;gap:6px;list-style:none;padding:6px;margin:0}.toast-item{position:relative;animation:fadeIn .3s ease-in forwards}.toast-item.toast-closing{animation-name:fadeOut;animation-duration:var(--close-duration, .3s);animation-fill-mode:forwards;pointer-events:none}.toast-item:before{content:\"\";position:absolute;height:3px;width:100%;bottom:0;left:4px;right:0;animation:progress var(--duration, 7s) linear forwards;border-top-right-radius:4px;border-bottom-right-radius:4px}.toast-item.toast-information:before{background:var(--tds-information)}.toast-item.toast-success:before{background:var(--tds-positive)}.toast-item.toast-warning:before{background:var(--tds-warning)}.toast-item.toast-error:before{background:var(--tds-negative)}.toast-item .toast-close{height:20px;width:20px;box-sizing:border-box;cursor:pointer;position:absolute;top:14px;right:14px;border:0;background:transparent}.toast-item .toast-close:active{border:2px solid var(--tds-blue-400);outline-offset:-2px}@keyframes fadeIn{0%{transform:translateY(40%);opacity:0;margin-bottom:-25%}to{transform:translateY(0);opacity:1;margin-bottom:0%}}@keyframes fadeOut{0%{transform:translateY(0);opacity:1;margin-top:0}to{opacity:0;transform:translateY(75%);margin-top:-25%}}@keyframes progress{to{width:0%}}\n"] }]
33
33
  }] });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy90ZWdlbC1hbmd1bGFyLWV4dGVuc2lvbnMvc3JjL2xpYi90b2FzdC90b2FzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RlZ2VsLWFuZ3VsYXItZXh0ZW5zaW9ucy9zcmMvbGliL3RvYXN0L3RvYXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRS9DOzs7OztHQUtHO0FBUUgsTUFBTSxPQUFPLGNBQWM7SUFDUixZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRXJEOztPQUVHO0lBQ00sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO0lBRXZEOzs7OztPQUtHO0lBQ0gsVUFBVSxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7d0dBZHRELGNBQWM7NEZBQWQsY0FBYyx5RUNyQjNCLDBxQ0F5Q0EsKzVDRHZCWSxZQUFZLDhCQUFFLFdBQVcsOFVBQUUsVUFBVTs7NEZBR3BDLGNBQWM7a0JBUDFCLFNBQVM7K0JBQ0UsZUFBZSxXQUdoQixDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLG1CQUMvQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTGluayB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUZWdlbE1vZHVsZSB9IGZyb20gJ0BzY2FuaWEvdGVnZWwtYW5ndWxhci0xNyc7XG5cbmltcG9ydCB7IFRvYXN0IH0gZnJvbSAnLi9tb2RlbHMvdG9hc3QubW9kZWwnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi90b2FzdC5zZXJ2aWNlJztcblxuLyoqXG4gKiBEaXNwbGF5cyB0b2FzdCBub3RpZmljYXRpb25zIHByb3ZpZGVkIGJ5IHRoZSBUb2FzdFNlcnZpY2UuXG4gKlxuICogVG9hc3RzIGFyZSBub24tYmxvY2tpbmcgbWVzc2FnZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGRpc2FwcGVhciBhZnRlciBhIHNldCBkdXJhdGlvblxuICogb3IgY2FuIGJlIGRpc21pc3NlZCBtYW51YWxseSBieSB0aGUgdXNlci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGRzLWV4dC10b2FzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90b2FzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RvYXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRlZ2VsTW9kdWxlLCBSb3V0ZXJMaW5rXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRvYXN0Q29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0b2FzdFNlcnZpY2UgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcblxuICAvKipcbiAgICogQSByZWFjdGl2ZSBzaWduYWwgb2YgYWxsIGN1cnJlbnRseSBhY3RpdmUgdG9hc3RzIChvcGVuIG9yIGNsb3NpbmcpLlxuICAgKi9cbiAgcmVhZG9ubHkgdG9hc3RzU2lnbmFsID0gdGhpcy50b2FzdFNlcnZpY2UuYWN0aXZlVG9hc3RzO1xuXG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgdGhlIGNsb3NpbmcgcHJvY2VzcyBmb3IgdGhlIGdpdmVuIHRvYXN0LlxuICAgKlxuICAgKiBAcGFyYW0gdG9hc3QgVGhlIHRvYXN0IHRvIGJlIGNsb3NlZC5cbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgY2xvc2VUb2FzdCA9ICh0b2FzdDogVG9hc3QpID0+IHRoaXMudG9hc3RTZXJ2aWNlLmNsb3NlKHRvYXN0LmlkKTtcbn1cbiIsIjx1bCBjbGFzcz1cInRvYXN0LWxpc3RcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIj5cbiAgQGZvciAodG9hc3Qgb2YgdG9hc3RzU2lnbmFsKCk7IHRyYWNrIHRvYXN0LmlkKSB7XG4gIDxsaVxuICAgIGNsYXNzPVwidG9hc3QtaXRlbVwiXG4gICAgW2NsYXNzXT1cIid0b2FzdC0nICsgdG9hc3QudHlwZVwiXG4gICAgW2NsYXNzLnRvYXN0LWNsb3NpbmddPVwidG9hc3Quc3RhdGUgPT09ICdjbG9zaW5nJ1wiXG4gICAgW3N0eWxlLi0tZHVyYXRpb24ubXNdPVwidG9hc3QuZHVyYXRpb25cIlxuICAgIFtzdHlsZS4tLWNsb3NlLWR1cmF0aW9uLm1zXT1cInRvYXN0LmNsb3NlRHVyYXRpb25cIlxuICAgIHJvbGU9XCJzdGF0dXNcIlxuICA+XG4gICAgPHRkcy10b2FzdFxuICAgICAgW3ZhcmlhbnRdPVwidG9hc3QudHlwZVwiXG4gICAgICBbaGVhZGVyXT1cInRvYXN0LnRpdGxlXCJcbiAgICAgIFtzdWJoZWFkZXJdPVwidG9hc3QuZGVzY3JpcHRpb25cIlxuICAgICAgW2Nsb3NhYmxlXT1cInRvYXN0LmNsb3NhYmxlXCJcbiAgICAgIHRkcy1jbG9zZS1hcmlhLWxhYmVsPVwiVG9hc3QgY2xvc2UgYnV0dG9uXCJcbiAgICA+XG4gICAgICBAaWYgKHRvYXN0LmxpbmspIHtcbiAgICAgIDx0ZHMtbGluayBzbG90PVwiYWN0aW9uc1wiPlxuICAgICAgICA8YSBbcm91dGVyTGlua109XCJ0b2FzdC5saW5rXCI+XG4gICAgICAgICAge3sgdG9hc3QubGlua1RleHQgPz8gJ0NsaWNrIGhlcmUnIH19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvdGRzLWxpbms+XG4gICAgICB9IEBlbHNlIGlmICh0b2FzdC5hY3Rpb24pIHtcbiAgICAgIDx0ZHMtbGluayBzbG90PVwiYWN0aW9uc1wiPlxuICAgICAgICA8YSBocmVmPVwiI1wiIChjbGljayk9XCJ0b2FzdC5hY3Rpb24oKVwiPlxuICAgICAgICAgIHt7IHRvYXN0LmxpbmtUZXh0ID8/ICdDbGljayBoZXJlJyB9fVxuICAgICAgICA8L2E+XG4gICAgICA8L3Rkcy1saW5rPlxuICAgICAgfVxuICAgIDwvdGRzLXRvYXN0PlxuICAgIEBpZiAodG9hc3QuY2xvc2FibGUpIHtcbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInRvYXN0LWNsb3NlXCJcbiAgICAgIChjbGljayk9XCJjbG9zZVRvYXN0KHRvYXN0KVwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xvc2UgdG9hc3RcIlxuICAgID48L2J1dHRvbj5cbiAgICB9XG4gIDwvbGk+XG4gIH1cbjwvdWw+XG4iXX0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy90ZWdlbC1hbmd1bGFyLWV4dGVuc2lvbnMvc3JjL2xpYi90b2FzdC90b2FzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RlZ2VsLWFuZ3VsYXItZXh0ZW5zaW9ucy9zcmMvbGliL3RvYXN0L3RvYXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRS9DOzs7OztHQUtHO0FBUUgsTUFBTSxPQUFPLGNBQWM7SUFDUixZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRXJEOztPQUVHO0lBQ00sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO0lBRXZEOzs7OztPQUtHO0lBQ0gsVUFBVSxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7d0dBZHRELGNBQWM7NEZBQWQsY0FBYyxxRUNyQjNCLDBxQ0F5Q0EsKzVDRHZCWSxZQUFZLDhCQUFFLFdBQVcsOFVBQUUsVUFBVTs7NEZBR3BDLGNBQWM7a0JBUDFCLFNBQVM7K0JBQ0UsV0FBVyxXQUdaLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsbUJBQy9CLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRlZ2VsTW9kdWxlIH0gZnJvbSAnQHNjYW5pYS90ZWdlbC1hbmd1bGFyLTE3JztcblxuaW1wb3J0IHsgVG9hc3QgfSBmcm9tICcuL21vZGVscy90b2FzdC5tb2RlbCc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuL3RvYXN0LnNlcnZpY2UnO1xuXG4vKipcbiAqIERpc3BsYXlzIHRvYXN0IG5vdGlmaWNhdGlvbnMgcHJvdmlkZWQgYnkgdGhlIFRvYXN0U2VydmljZS5cbiAqXG4gKiBUb2FzdHMgYXJlIG5vbi1ibG9ja2luZyBtZXNzYWdlcyB0aGF0IGF1dG9tYXRpY2FsbHkgZGlzYXBwZWFyIGFmdGVyIGEgc2V0IGR1cmF0aW9uXG4gKiBvciBjYW4gYmUgZGlzbWlzc2VkIG1hbnVhbGx5IGJ5IHRoZSB1c2VyLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0YWUtdG9hc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vdG9hc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90b2FzdC5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUZWdlbE1vZHVsZSwgUm91dGVyTGlua10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUb2FzdENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG5cbiAgLyoqXG4gICAqIEEgcmVhY3RpdmUgc2lnbmFsIG9mIGFsbCBjdXJyZW50bHkgYWN0aXZlIHRvYXN0cyAob3BlbiBvciBjbG9zaW5nKS5cbiAgICovXG4gIHJlYWRvbmx5IHRvYXN0c1NpZ25hbCA9IHRoaXMudG9hc3RTZXJ2aWNlLmFjdGl2ZVRvYXN0cztcblxuICAvKipcbiAgICogSW5pdGlhdGVzIHRoZSBjbG9zaW5nIHByb2Nlc3MgZm9yIHRoZSBnaXZlbiB0b2FzdC5cbiAgICpcbiAgICogQHBhcmFtIHRvYXN0IFRoZSB0b2FzdCB0byBiZSBjbG9zZWQuXG4gICAqIEByZXR1cm5zIHZvaWRcbiAgICovXG4gIGNsb3NlVG9hc3QgPSAodG9hc3Q6IFRvYXN0KSA9PiB0aGlzLnRvYXN0U2VydmljZS5jbG9zZSh0b2FzdC5pZCk7XG59XG4iLCI8dWwgY2xhc3M9XCJ0b2FzdC1saXN0XCIgYXJpYS1saXZlPVwicG9saXRlXCIgYXJpYS1hdG9taWM9XCJ0cnVlXCI+XG4gIEBmb3IgKHRvYXN0IG9mIHRvYXN0c1NpZ25hbCgpOyB0cmFjayB0b2FzdC5pZCkge1xuICA8bGlcbiAgICBjbGFzcz1cInRvYXN0LWl0ZW1cIlxuICAgIFtjbGFzc109XCIndG9hc3QtJyArIHRvYXN0LnR5cGVcIlxuICAgIFtjbGFzcy50b2FzdC1jbG9zaW5nXT1cInRvYXN0LnN0YXRlID09PSAnY2xvc2luZydcIlxuICAgIFtzdHlsZS4tLWR1cmF0aW9uLm1zXT1cInRvYXN0LmR1cmF0aW9uXCJcbiAgICBbc3R5bGUuLS1jbG9zZS1kdXJhdGlvbi5tc109XCJ0b2FzdC5jbG9zZUR1cmF0aW9uXCJcbiAgICByb2xlPVwic3RhdHVzXCJcbiAgPlxuICAgIDx0ZHMtdG9hc3RcbiAgICAgIFt2YXJpYW50XT1cInRvYXN0LnR5cGVcIlxuICAgICAgW2hlYWRlcl09XCJ0b2FzdC50aXRsZVwiXG4gICAgICBbc3ViaGVhZGVyXT1cInRvYXN0LmRlc2NyaXB0aW9uXCJcbiAgICAgIFtjbG9zYWJsZV09XCJ0b2FzdC5jbG9zYWJsZVwiXG4gICAgICB0ZHMtY2xvc2UtYXJpYS1sYWJlbD1cIlRvYXN0IGNsb3NlIGJ1dHRvblwiXG4gICAgPlxuICAgICAgQGlmICh0b2FzdC5saW5rKSB7XG4gICAgICA8dGRzLWxpbmsgc2xvdD1cImFjdGlvbnNcIj5cbiAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwidG9hc3QubGlua1wiPlxuICAgICAgICAgIHt7IHRvYXN0LmxpbmtUZXh0ID8/ICdDbGljayBoZXJlJyB9fVxuICAgICAgICA8L2E+XG4gICAgICA8L3Rkcy1saW5rPlxuICAgICAgfSBAZWxzZSBpZiAodG9hc3QuYWN0aW9uKSB7XG4gICAgICA8dGRzLWxpbmsgc2xvdD1cImFjdGlvbnNcIj5cbiAgICAgICAgPGEgaHJlZj1cIiNcIiAoY2xpY2spPVwidG9hc3QuYWN0aW9uKClcIj5cbiAgICAgICAgICB7eyB0b2FzdC5saW5rVGV4dCA/PyAnQ2xpY2sgaGVyZScgfX1cbiAgICAgICAgPC9hPlxuICAgICAgPC90ZHMtbGluaz5cbiAgICAgIH1cbiAgICA8L3Rkcy10b2FzdD5cbiAgICBAaWYgKHRvYXN0LmNsb3NhYmxlKSB7XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJ0b2FzdC1jbG9zZVwiXG4gICAgICAoY2xpY2spPVwiY2xvc2VUb2FzdCh0b2FzdClcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlIHRvYXN0XCJcbiAgICA+PC9idXR0b24+XG4gICAgfVxuICA8L2xpPlxuICB9XG48L3VsPlxuIl19
@@ -194,10 +194,10 @@ export class ToastService {
194
194
  const num = typeof value === 'number' ? value : fallback;
195
195
  return !Number.isFinite(num) || num < 0 ? 0 : num;
196
196
  }
197
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
198
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ToastService, providedIn: 'root' });
197
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
198
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ToastService, providedIn: 'root' });
199
199
  }
200
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ToastService, decorators: [{
200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ToastService, decorators: [{
201
201
  type: Injectable,
202
202
  args: [{
203
203
  providedIn: 'root',