valtech-components 2.0.276 → 2.0.278

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.
Files changed (26) hide show
  1. package/README.md +149 -6
  2. package/esm2022/lib/components/_examples/global-content-example-content.mjs +23 -0
  3. package/esm2022/lib/components/_examples/global-content-example.component.mjs +504 -0
  4. package/esm2022/lib/components/_examples/reactive-content-example-content.mjs +43 -0
  5. package/esm2022/lib/components/_examples/reactive-content-example.component.mjs +347 -0
  6. package/esm2022/lib/components/atoms/text/text.component.mjs +143 -15
  7. package/esm2022/lib/components/atoms/text/types.mjs +1 -1
  8. package/esm2022/lib/services/content.service.mjs +327 -0
  9. package/esm2022/lib/services/icons.service.mjs +3 -2
  10. package/esm2022/lib/services/lang-provider/content.mjs +136 -1
  11. package/esm2022/lib/services/lang-provider/lang-provider.service.mjs +118 -8
  12. package/esm2022/lib/shared/utils/content.mjs +186 -0
  13. package/esm2022/public-api.mjs +11 -5
  14. package/fesm2022/valtech-components.mjs +2938 -1359
  15. package/fesm2022/valtech-components.mjs.map +1 -1
  16. package/lib/components/_examples/global-content-example-content.d.ts +9 -0
  17. package/lib/components/_examples/global-content-example.component.d.ts +73 -0
  18. package/lib/components/_examples/reactive-content-example-content.d.ts +32 -0
  19. package/lib/components/_examples/reactive-content-example.component.d.ts +47 -0
  20. package/lib/components/atoms/text/text.component.d.ts +57 -8
  21. package/lib/components/atoms/text/types.d.ts +26 -5
  22. package/lib/services/content.service.d.ts +296 -0
  23. package/lib/services/lang-provider/lang-provider.service.d.ts +87 -7
  24. package/lib/shared/utils/content.d.ts +199 -0
  25. package/package.json +1 -1
  26. package/public-api.d.ts +9 -4
@@ -0,0 +1,347 @@
1
+ import { AsyncPipe, NgIf } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
3
+ import { IonButton, IonCard, IonCardContent, IonCardHeader, IonCardTitle } from '@ionic/angular/standalone';
4
+ import { ContentService } from '../../services/content.service';
5
+ import { LangOption } from '../../services/lang-provider/types';
6
+ import { TextComponent } from '../atoms/text/text.component';
7
+ import * as i0 from "@angular/core";
8
+ /**
9
+ * Reactive Content Example Component
10
+ *
11
+ * This component demonstrates various ways to use the new reactive content system with ContentService:
12
+ * 1. Direct reactive content binding with val-text
13
+ * 2. Content with interpolation (dynamic values)
14
+ * 3. Multiple content keys retrieved at once
15
+ * 4. Using the scoped content helper (forComponent)
16
+ * 5. Language switching functionality
17
+ *
18
+ * The component automatically updates all text when the language changes,
19
+ * using the simplified ContentService API that eliminates the need for manual
20
+ * LangService injection and utility function imports.
21
+ *
22
+ * @example Usage patterns:
23
+ * ```typescript
24
+ * // Simple injection
25
+ * content = inject(ContentService);
26
+ *
27
+ * // Scoped helper for this component
28
+ * componentContent = this.content.forComponent('MyComponent');
29
+ *
30
+ * // Get reactive content
31
+ * title$ = this.componentContent.get('title');
32
+ * multipleTexts$ = this.componentContent.getMultiple(['title', 'subtitle']);
33
+ * ```
34
+ * without requiring manual subscriptions or change detection triggers.
35
+ */
36
+ export class ReactiveContentExampleComponent {
37
+ constructor() {
38
+ // Use the new ContentService with inject
39
+ this.content = inject(ContentService);
40
+ // Create a scoped content helper for this component
41
+ this.componentContent = this.content.forComponent('ReactiveContentExample');
42
+ // State for confirmation dialog
43
+ this.showConfirmation = false;
44
+ // Example 1: Simple reactive content props for val-text
45
+ this.titleProps = {
46
+ contentKey: 'title',
47
+ contentClass: 'ReactiveContentExample',
48
+ contentFallback: 'Default Title',
49
+ color: 'primary',
50
+ size: 'xlarge',
51
+ bold: true,
52
+ };
53
+ // Example 2: Reactive content with interpolation
54
+ this.greetingProps = {
55
+ contentKey: 'greeting',
56
+ contentClass: 'ReactiveContentExample',
57
+ contentInterpolation: { name: 'Developer', count: 3 },
58
+ contentFallback: 'Hello Developer',
59
+ color: 'secondary',
60
+ size: 'large',
61
+ bold: false,
62
+ };
63
+ }
64
+ ngOnInit() {
65
+ // Set up reactive observables using ContentService
66
+ this.currentLanguage$ = this.content.currentLang$;
67
+ // Example 3: Get multiple content keys reactively - using the new API
68
+ this.multipleContent$ = this.componentContent.getMultiple(['description', 'dynamicText']);
69
+ // Button text reactive - using the new simplified API with options
70
+ this.buttonText$ = this.componentContent.get('buttonText');
71
+ // Global content observables using unified fromContent method
72
+ this.saveButton$ = this.content.fromContent({ key: 'save' });
73
+ this.cancelButton$ = this.content.fromContent({ key: 'cancel' });
74
+ this.deleteButton$ = this.content.fromContent({ key: 'delete' });
75
+ this.okButton$ = this.content.fromContent({ key: 'ok' });
76
+ this.loadingText$ = this.content.fromContent({ key: 'loading' });
77
+ // Global content with interpolation using unified method
78
+ this.deleteConfirmationText$ = this.content.fromContent({
79
+ key: 'deleteConfirmation',
80
+ interpolation: { itemName: 'este elemento' },
81
+ });
82
+ // Example of synchronous global content access
83
+ console.log('Global save text:', this.content.getText('save'));
84
+ console.log('Global cancel text:', this.content.getGlobalText('cancel'));
85
+ // Example of using new scoped helper with interpolation
86
+ const greetingWithNewAPI$ = this.componentContent.get('greeting', {
87
+ interpolation: { name: 'Developer', count: 3 },
88
+ fallback: 'Hello!',
89
+ });
90
+ console.log('New unified API works!', greetingWithNewAPI$);
91
+ }
92
+ /**
93
+ * Toggle between Spanish and English
94
+ */
95
+ toggleLanguage() {
96
+ const currentLang = this.content.currentLang;
97
+ const newLang = currentLang === LangOption.ES ? LangOption.EN : LangOption.ES;
98
+ this.content.setLang(newLang);
99
+ }
100
+ /**
101
+ * Show delete confirmation dialog
102
+ */
103
+ showDeleteConfirmation() {
104
+ this.showConfirmation = true;
105
+ }
106
+ /**
107
+ * Hide delete confirmation dialog
108
+ */
109
+ hideDeleteConfirmation() {
110
+ this.showConfirmation = false;
111
+ }
112
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReactiveContentExampleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
113
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ReactiveContentExampleComponent, isStandalone: true, selector: "val-reactive-content-example", ngImport: i0, template: `
114
+ <ion-card>
115
+ <ion-card-header>
116
+ <ion-card-title>
117
+ <!-- Example 1: Direct reactive content using val-text -->
118
+ <val-text [props]="titleProps"></val-text>
119
+ </ion-card-title>
120
+ </ion-card-header>
121
+
122
+ <ion-card-content>
123
+ <!-- Example 2: Reactive content with interpolation -->
124
+ <val-text [props]="greetingProps"></val-text>
125
+
126
+ <div class="example-divider"></div>
127
+
128
+ <!-- Example 3: Multiple content keys -->
129
+ <div *ngIf="multipleContent$ | async as content">
130
+ <val-text
131
+ [props]="{
132
+ content: content['description'],
133
+ color: 'medium',
134
+ size: 'medium',
135
+ bold: false,
136
+ }"
137
+ ></val-text>
138
+
139
+ <br /><br />
140
+
141
+ <val-text
142
+ [props]="{
143
+ content: content['dynamicText'],
144
+ color: 'primary',
145
+ size: 'small',
146
+ bold: true,
147
+ }"
148
+ ></val-text>
149
+ </div>
150
+
151
+ <div class="example-divider"></div>
152
+
153
+ <!-- Example 4: Using content helper -->
154
+ <val-text
155
+ [props]="{
156
+ content: componentContent.getText('welcomeMessage'),
157
+ color: 'success',
158
+ size: 'large',
159
+ bold: true,
160
+ }"
161
+ ></val-text>
162
+
163
+ <div class="example-divider"></div>
164
+
165
+ <!-- Example 5: Global content - buttons using global text -->
166
+ <div class="button-group">
167
+ <ion-button [fill]="'solid'" [color]="'primary'">
168
+ {{ saveButton$ | async }}
169
+ </ion-button>
170
+ <ion-button [fill]="'outline'" [color]="'secondary'">
171
+ {{ cancelButton$ | async }}
172
+ </ion-button>
173
+ <ion-button [fill]="'outline'" [color]="'danger'" (click)="showDeleteConfirmation()">
174
+ {{ deleteButton$ | async }}
175
+ </ion-button>
176
+ </div>
177
+
178
+ <div class="example-divider"></div>
179
+
180
+ <!-- Example 6: Global content with interpolation -->
181
+ <div *ngIf="showConfirmation" class="confirmation-message">
182
+ <val-text
183
+ [props]="{
184
+ content: deleteConfirmationText$ | async,
185
+ color: 'warning',
186
+ size: 'medium',
187
+ bold: true,
188
+ }"
189
+ ></val-text>
190
+ <br /><br />
191
+ <ion-button [fill]="'solid'" [color]="'danger'" size="small" (click)="hideDeleteConfirmation()">
192
+ {{ okButton$ | async }}
193
+ </ion-button>
194
+ <ion-button [fill]="'clear'" [color]="'medium'" size="small" (click)="hideDeleteConfirmation()">
195
+ {{ cancelButton$ | async }}
196
+ </ion-button>
197
+ </div>
198
+
199
+ <div class="example-divider"></div>
200
+
201
+ <!-- Example 7: Language switching button -->
202
+ <ion-button expand="block" fill="outline" color="tertiary" (click)="toggleLanguage()">
203
+ {{ buttonText$ | async }}
204
+ </ion-button>
205
+
206
+ <!-- Example 8: Current language display -->
207
+ <div class="language-info">
208
+ <p>
209
+ Current language:
210
+ <strong>{{ currentLanguage$ | async }}</strong>
211
+ </p>
212
+
213
+ <!-- Example of mixed global and component content -->
214
+ <p>
215
+ <val-text
216
+ [props]="{
217
+ content: loadingText$ | async,
218
+ color: 'medium',
219
+ size: 'small',
220
+ bold: false,
221
+ }"
222
+ ></val-text>
223
+ </p>
224
+ </div>
225
+ </ion-card-content>
226
+ </ion-card>
227
+ `, isInline: true, styles: [":host{display:block;margin:16px}.example-divider{margin:24px 0;border-bottom:1px solid var(--ion-color-light);padding-bottom:16px}.language-info{margin-top:24px;padding:16px;background-color:var(--ion-color-light);border-radius:8px;text-align:center}.language-info p{margin:0;color:var(--ion-color-dark)}.language-info strong{color:var(--ion-color-primary);text-transform:uppercase}ion-card{margin:0;border-radius:12px;box-shadow:0 4px 16px #0000001a}ion-card-header{padding-bottom:8px}ion-card-title{font-size:1.5rem;font-weight:600}ion-card-content{padding-top:16px}ion-button{margin:16px 0;--border-radius: 8px}ion-card-content{padding:20px}.language-info{margin-top:16px;padding:12px;background-color:var(--ion-color-light);border-radius:8px;text-align:center}.content-section{margin:16px 0;padding:12px;border:1px solid var(--ion-color-light);border-radius:8px}.content-section h3{margin-top:0;color:var(--ion-color-primary)}.example-divider{margin:24px 0;height:1px;background-color:var(--ion-color-light)}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
228
+ }
229
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReactiveContentExampleComponent, decorators: [{
230
+ type: Component,
231
+ args: [{ selector: 'val-reactive-content-example', standalone: true, imports: [AsyncPipe, NgIf, IonCard, IonCardContent, IonCardHeader, IonCardTitle, IonButton, TextComponent], template: `
232
+ <ion-card>
233
+ <ion-card-header>
234
+ <ion-card-title>
235
+ <!-- Example 1: Direct reactive content using val-text -->
236
+ <val-text [props]="titleProps"></val-text>
237
+ </ion-card-title>
238
+ </ion-card-header>
239
+
240
+ <ion-card-content>
241
+ <!-- Example 2: Reactive content with interpolation -->
242
+ <val-text [props]="greetingProps"></val-text>
243
+
244
+ <div class="example-divider"></div>
245
+
246
+ <!-- Example 3: Multiple content keys -->
247
+ <div *ngIf="multipleContent$ | async as content">
248
+ <val-text
249
+ [props]="{
250
+ content: content['description'],
251
+ color: 'medium',
252
+ size: 'medium',
253
+ bold: false,
254
+ }"
255
+ ></val-text>
256
+
257
+ <br /><br />
258
+
259
+ <val-text
260
+ [props]="{
261
+ content: content['dynamicText'],
262
+ color: 'primary',
263
+ size: 'small',
264
+ bold: true,
265
+ }"
266
+ ></val-text>
267
+ </div>
268
+
269
+ <div class="example-divider"></div>
270
+
271
+ <!-- Example 4: Using content helper -->
272
+ <val-text
273
+ [props]="{
274
+ content: componentContent.getText('welcomeMessage'),
275
+ color: 'success',
276
+ size: 'large',
277
+ bold: true,
278
+ }"
279
+ ></val-text>
280
+
281
+ <div class="example-divider"></div>
282
+
283
+ <!-- Example 5: Global content - buttons using global text -->
284
+ <div class="button-group">
285
+ <ion-button [fill]="'solid'" [color]="'primary'">
286
+ {{ saveButton$ | async }}
287
+ </ion-button>
288
+ <ion-button [fill]="'outline'" [color]="'secondary'">
289
+ {{ cancelButton$ | async }}
290
+ </ion-button>
291
+ <ion-button [fill]="'outline'" [color]="'danger'" (click)="showDeleteConfirmation()">
292
+ {{ deleteButton$ | async }}
293
+ </ion-button>
294
+ </div>
295
+
296
+ <div class="example-divider"></div>
297
+
298
+ <!-- Example 6: Global content with interpolation -->
299
+ <div *ngIf="showConfirmation" class="confirmation-message">
300
+ <val-text
301
+ [props]="{
302
+ content: deleteConfirmationText$ | async,
303
+ color: 'warning',
304
+ size: 'medium',
305
+ bold: true,
306
+ }"
307
+ ></val-text>
308
+ <br /><br />
309
+ <ion-button [fill]="'solid'" [color]="'danger'" size="small" (click)="hideDeleteConfirmation()">
310
+ {{ okButton$ | async }}
311
+ </ion-button>
312
+ <ion-button [fill]="'clear'" [color]="'medium'" size="small" (click)="hideDeleteConfirmation()">
313
+ {{ cancelButton$ | async }}
314
+ </ion-button>
315
+ </div>
316
+
317
+ <div class="example-divider"></div>
318
+
319
+ <!-- Example 7: Language switching button -->
320
+ <ion-button expand="block" fill="outline" color="tertiary" (click)="toggleLanguage()">
321
+ {{ buttonText$ | async }}
322
+ </ion-button>
323
+
324
+ <!-- Example 8: Current language display -->
325
+ <div class="language-info">
326
+ <p>
327
+ Current language:
328
+ <strong>{{ currentLanguage$ | async }}</strong>
329
+ </p>
330
+
331
+ <!-- Example of mixed global and component content -->
332
+ <p>
333
+ <val-text
334
+ [props]="{
335
+ content: loadingText$ | async,
336
+ color: 'medium',
337
+ size: 'small',
338
+ bold: false,
339
+ }"
340
+ ></val-text>
341
+ </p>
342
+ </div>
343
+ </ion-card-content>
344
+ </ion-card>
345
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;margin:16px}.example-divider{margin:24px 0;border-bottom:1px solid var(--ion-color-light);padding-bottom:16px}.language-info{margin-top:24px;padding:16px;background-color:var(--ion-color-light);border-radius:8px;text-align:center}.language-info p{margin:0;color:var(--ion-color-dark)}.language-info strong{color:var(--ion-color-primary);text-transform:uppercase}ion-card{margin:0;border-radius:12px;box-shadow:0 4px 16px #0000001a}ion-card-header{padding-bottom:8px}ion-card-title{font-size:1.5rem;font-weight:600}ion-card-content{padding-top:16px}ion-button{margin:16px 0;--border-radius: 8px}ion-card-content{padding:20px}.language-info{margin-top:16px;padding:12px;background-color:var(--ion-color-light);border-radius:8px;text-align:center}.content-section{margin:16px 0;padding:12px;border:1px solid var(--ion-color-light);border-radius:8px}.content-section h3{margin-top:0;color:var(--ion-color-primary)}.example-divider{margin:24px 0;height:1px;background-color:var(--ion-color-light)}\n"] }]
346
+ }], ctorParameters: () => [] });
347
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RpdmUtY29udGVudC1leGFtcGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRlY2gtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvX2V4YW1wbGVzL3JlYWN0aXZlLWNvbnRlbnQtZXhhbXBsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzVHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQTZIN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUNILE1BQU0sT0FBTywrQkFBK0I7SUFnRDFDO1FBL0NBLHlDQUF5QztRQUN6QyxZQUFPLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRWpDLG9EQUFvRDtRQUNwRCxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBZ0J2RSxnQ0FBZ0M7UUFDaEMscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRXpCLHdEQUF3RDtRQUN4RCxlQUFVLEdBQWlCO1lBQ3pCLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFlBQVksRUFBRSx3QkFBd0I7WUFDdEMsZUFBZSxFQUFFLGVBQWU7WUFDaEMsS0FBSyxFQUFFLFNBQVM7WUFDaEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUM7UUFFRixpREFBaUQ7UUFDakQsa0JBQWEsR0FBaUI7WUFDNUIsVUFBVSxFQUFFLFVBQVU7WUFDdEIsWUFBWSxFQUFFLHdCQUF3QjtZQUN0QyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUNyRCxlQUFlLEVBQUUsaUJBQWlCO1lBQ2xDLEtBQUssRUFBRSxXQUFXO1lBQ2xCLElBQUksRUFBRSxPQUFPO1lBQ2IsSUFBSSxFQUFFLEtBQUs7U0FDWixDQUFDO0lBS2EsQ0FBQztJQUVoQixRQUFRO1FBQ04sbURBQW1EO1FBQ25ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUVsRCxzRUFBc0U7UUFDdEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUUxRixtRUFBbUU7UUFDbkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTNELDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRWpFLHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDdEQsR0FBRyxFQUFFLG9CQUFvQjtZQUN6QixhQUFhLEVBQUUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFO1NBQzdDLENBQUMsQ0FBQztRQUVILCtDQUErQztRQUMvQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDL0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRXpFLHdEQUF3RDtRQUN4RCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFO1lBQ2hFLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUM5QyxRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYztRQUNaLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQzdDLE1BQU0sT0FBTyxHQUFHLFdBQVcsS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzlFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNILHNCQUFzQjtRQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILHNCQUFzQjtRQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7K0dBMUdVLCtCQUErQjttR0FBL0IsK0JBQStCLHdGQWxKaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtIVCwyakNBbkhTLFNBQVMsOENBQUUsSUFBSSw2RkFBRSxPQUFPLHlMQUFFLGNBQWMsK0VBQUUsYUFBYSxzR0FBRSxZQUFZLHNGQUFFLFNBQVMsb1BBQUUsYUFBYTs7NEZBbUo5RiwrQkFBK0I7a0JBdEozQyxTQUFTOytCQUNFLDhCQUE4QixjQUM1QixJQUFJLFdBQ1AsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLFlBQ2hHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrSFQsbUJBRWdCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkJ1dHRvbiwgSW9uQ2FyZCwgSW9uQ2FyZENvbnRlbnQsIElvbkNhcmRIZWFkZXIsIElvbkNhcmRUaXRsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDb250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBMYW5nT3B0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGFuZy1wcm92aWRlci90eXBlcyc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0TWV0YWRhdGEgfSBmcm9tICcuLi9hdG9tcy90ZXh0L3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXJlYWN0aXZlLWNvbnRlbnQtZXhhbXBsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtBc3luY1BpcGUsIE5nSWYsIElvbkNhcmQsIElvbkNhcmRDb250ZW50LCBJb25DYXJkSGVhZGVyLCBJb25DYXJkVGl0bGUsIElvbkJ1dHRvbiwgVGV4dENvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi1jYXJkPlxuICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgIDwhLS0gRXhhbXBsZSAxOiBEaXJlY3QgcmVhY3RpdmUgY29udGVudCB1c2luZyB2YWwtdGV4dCAtLT5cbiAgICAgICAgICA8dmFsLXRleHQgW3Byb3BzXT1cInRpdGxlUHJvcHNcIj48L3ZhbC10ZXh0PlxuICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG5cbiAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICA8IS0tIEV4YW1wbGUgMjogUmVhY3RpdmUgY29udGVudCB3aXRoIGludGVycG9sYXRpb24gLS0+XG4gICAgICAgIDx2YWwtdGV4dCBbcHJvcHNdPVwiZ3JlZXRpbmdQcm9wc1wiPjwvdmFsLXRleHQ+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV4YW1wbGUtZGl2aWRlclwiPjwvZGl2PlxuXG4gICAgICAgIDwhLS0gRXhhbXBsZSAzOiBNdWx0aXBsZSBjb250ZW50IGtleXMgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJtdWx0aXBsZUNvbnRlbnQkIHwgYXN5bmMgYXMgY29udGVudFwiPlxuICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgY29udGVudDogY29udGVudFsnZGVzY3JpcHRpb24nXSxcbiAgICAgICAgICAgICAgY29sb3I6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+PC92YWwtdGV4dD5cblxuICAgICAgICAgIDxiciAvPjxiciAvPlxuXG4gICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50WydkeW5hbWljVGV4dCddLFxuICAgICAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgICAgICAgICAgICBzaXplOiAnc21hbGwnLFxuICAgICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPjwvdmFsLXRleHQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLWRpdmlkZXJcIj48L2Rpdj5cblxuICAgICAgICA8IS0tIEV4YW1wbGUgNDogVXNpbmcgY29udGVudCBoZWxwZXIgLS0+XG4gICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICBjb250ZW50OiBjb21wb25lbnRDb250ZW50LmdldFRleHQoJ3dlbGNvbWVNZXNzYWdlJyksXG4gICAgICAgICAgICBjb2xvcjogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgfVwiXG4gICAgICAgID48L3ZhbC10ZXh0PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLWRpdmlkZXJcIj48L2Rpdj5cblxuICAgICAgICA8IS0tIEV4YW1wbGUgNTogR2xvYmFsIGNvbnRlbnQgLSBidXR0b25zIHVzaW5nIGdsb2JhbCB0ZXh0IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gW2ZpbGxdPVwiJ3NvbGlkJ1wiIFtjb2xvcl09XCIncHJpbWFyeSdcIj5cbiAgICAgICAgICAgIHt7IHNhdmVCdXR0b24kIHwgYXN5bmMgfX1cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPGlvbi1idXR0b24gW2ZpbGxdPVwiJ291dGxpbmUnXCIgW2NvbG9yXT1cIidzZWNvbmRhcnknXCI+XG4gICAgICAgICAgICB7eyBjYW5jZWxCdXR0b24kIHwgYXN5bmMgfX1cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPGlvbi1idXR0b24gW2ZpbGxdPVwiJ291dGxpbmUnXCIgW2NvbG9yXT1cIidkYW5nZXInXCIgKGNsaWNrKT1cInNob3dEZWxldGVDb25maXJtYXRpb24oKVwiPlxuICAgICAgICAgICAge3sgZGVsZXRlQnV0dG9uJCB8IGFzeW5jIH19XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1kaXZpZGVyXCI+PC9kaXY+XG5cbiAgICAgICAgPCEtLSBFeGFtcGxlIDY6IEdsb2JhbCBjb250ZW50IHdpdGggaW50ZXJwb2xhdGlvbiAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dDb25maXJtYXRpb25cIiBjbGFzcz1cImNvbmZpcm1hdGlvbi1tZXNzYWdlXCI+XG4gICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBjb250ZW50OiBkZWxldGVDb25maXJtYXRpb25UZXh0JCB8IGFzeW5jLFxuICAgICAgICAgICAgICBjb2xvcjogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID48L3ZhbC10ZXh0PlxuICAgICAgICAgIDxiciAvPjxiciAvPlxuICAgICAgICAgIDxpb24tYnV0dG9uIFtmaWxsXT1cIidzb2xpZCdcIiBbY29sb3JdPVwiJ2RhbmdlcidcIiBzaXplPVwic21hbGxcIiAoY2xpY2spPVwiaGlkZURlbGV0ZUNvbmZpcm1hdGlvbigpXCI+XG4gICAgICAgICAgICB7eyBva0J1dHRvbiQgfCBhc3luYyB9fVxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBbZmlsbF09XCInY2xlYXInXCIgW2NvbG9yXT1cIidtZWRpdW0nXCIgc2l6ZT1cInNtYWxsXCIgKGNsaWNrKT1cImhpZGVEZWxldGVDb25maXJtYXRpb24oKVwiPlxuICAgICAgICAgICAge3sgY2FuY2VsQnV0dG9uJCB8IGFzeW5jIH19XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1kaXZpZGVyXCI+PC9kaXY+XG5cbiAgICAgICAgPCEtLSBFeGFtcGxlIDc6IExhbmd1YWdlIHN3aXRjaGluZyBidXR0b24gLS0+XG4gICAgICAgIDxpb24tYnV0dG9uIGV4cGFuZD1cImJsb2NrXCIgZmlsbD1cIm91dGxpbmVcIiBjb2xvcj1cInRlcnRpYXJ5XCIgKGNsaWNrKT1cInRvZ2dsZUxhbmd1YWdlKClcIj5cbiAgICAgICAgICB7eyBidXR0b25UZXh0JCB8IGFzeW5jIH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgICA8IS0tIEV4YW1wbGUgODogQ3VycmVudCBsYW5ndWFnZSBkaXNwbGF5IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGFuZ3VhZ2UtaW5mb1wiPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAgQ3VycmVudCBsYW5ndWFnZTpcbiAgICAgICAgICAgIDxzdHJvbmc+e3sgY3VycmVudExhbmd1YWdlJCB8IGFzeW5jIH19PC9zdHJvbmc+XG4gICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgPCEtLSBFeGFtcGxlIG9mIG1peGVkIGdsb2JhbCBhbmQgY29tcG9uZW50IGNvbnRlbnQgLS0+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICBjb250ZW50OiBsb2FkaW5nVGV4dCQgfCBhc3luYyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+PC92YWwtdGV4dD5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgIDwvaW9uLWNhcmQ+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL3JlYWN0aXZlLWNvbnRlbnQtZXhhbXBsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG4vKipcbiAqIFJlYWN0aXZlIENvbnRlbnQgRXhhbXBsZSBDb21wb25lbnRcbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBkZW1vbnN0cmF0ZXMgdmFyaW91cyB3YXlzIHRvIHVzZSB0aGUgbmV3IHJlYWN0aXZlIGNvbnRlbnQgc3lzdGVtIHdpdGggQ29udGVudFNlcnZpY2U6XG4gKiAxLiBEaXJlY3QgcmVhY3RpdmUgY29udGVudCBiaW5kaW5nIHdpdGggdmFsLXRleHRcbiAqIDIuIENvbnRlbnQgd2l0aCBpbnRlcnBvbGF0aW9uIChkeW5hbWljIHZhbHVlcylcbiAqIDMuIE11bHRpcGxlIGNvbnRlbnQga2V5cyByZXRyaWV2ZWQgYXQgb25jZVxuICogNC4gVXNpbmcgdGhlIHNjb3BlZCBjb250ZW50IGhlbHBlciAoZm9yQ29tcG9uZW50KVxuICogNS4gTGFuZ3VhZ2Ugc3dpdGNoaW5nIGZ1bmN0aW9uYWxpdHlcbiAqXG4gKiBUaGUgY29tcG9uZW50IGF1dG9tYXRpY2FsbHkgdXBkYXRlcyBhbGwgdGV4dCB3aGVuIHRoZSBsYW5ndWFnZSBjaGFuZ2VzLFxuICogdXNpbmcgdGhlIHNpbXBsaWZpZWQgQ29udGVudFNlcnZpY2UgQVBJIHRoYXQgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgbWFudWFsXG4gKiBMYW5nU2VydmljZSBpbmplY3Rpb24gYW5kIHV0aWxpdHkgZnVuY3Rpb24gaW1wb3J0cy5cbiAqXG4gKiBAZXhhbXBsZSBVc2FnZSBwYXR0ZXJuczpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFNpbXBsZSBpbmplY3Rpb25cbiAqIGNvbnRlbnQgPSBpbmplY3QoQ29udGVudFNlcnZpY2UpO1xuICpcbiAqIC8vIFNjb3BlZCBoZWxwZXIgZm9yIHRoaXMgY29tcG9uZW50XG4gKiBjb21wb25lbnRDb250ZW50ID0gdGhpcy5jb250ZW50LmZvckNvbXBvbmVudCgnTXlDb21wb25lbnQnKTtcbiAqXG4gKiAvLyBHZXQgcmVhY3RpdmUgY29udGVudFxuICogdGl0bGUkID0gdGhpcy5jb21wb25lbnRDb250ZW50LmdldCgndGl0bGUnKTtcbiAqIG11bHRpcGxlVGV4dHMkID0gdGhpcy5jb21wb25lbnRDb250ZW50LmdldE11bHRpcGxlKFsndGl0bGUnLCAnc3VidGl0bGUnXSk7XG4gKiBgYGBcbiAqIHdpdGhvdXQgcmVxdWlyaW5nIG1hbnVhbCBzdWJzY3JpcHRpb25zIG9yIGNoYW5nZSBkZXRlY3Rpb24gdHJpZ2dlcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWFjdGl2ZUNvbnRlbnRFeGFtcGxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gVXNlIHRoZSBuZXcgQ29udGVudFNlcnZpY2Ugd2l0aCBpbmplY3RcbiAgY29udGVudCA9IGluamVjdChDb250ZW50U2VydmljZSk7XG5cbiAgLy8gQ3JlYXRlIGEgc2NvcGVkIGNvbnRlbnQgaGVscGVyIGZvciB0aGlzIGNvbXBvbmVudFxuICBjb21wb25lbnRDb250ZW50ID0gdGhpcy5jb250ZW50LmZvckNvbXBvbmVudCgnUmVhY3RpdmVDb250ZW50RXhhbXBsZScpO1xuXG4gIC8vIE9ic2VydmFibGUgZm9yIGN1cnJlbnQgbGFuZ3VhZ2VcbiAgY3VycmVudExhbmd1YWdlJDogT2JzZXJ2YWJsZTxMYW5nT3B0aW9uPjtcblxuICAvLyBPYnNlcnZhYmxlIGZvciBidXR0b24gdGV4dFxuICBidXR0b25UZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIC8vIEdsb2JhbCBjb250ZW50IG9ic2VydmFibGVzXG4gIHNhdmVCdXR0b24kOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGNhbmNlbEJ1dHRvbiQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgZGVsZXRlQnV0dG9uJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBva0J1dHRvbiQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgZGVsZXRlQ29uZmlybWF0aW9uVGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgbG9hZGluZ1RleHQkOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgLy8gU3RhdGUgZm9yIGNvbmZpcm1hdGlvbiBkaWFsb2dcbiAgc2hvd0NvbmZpcm1hdGlvbiA9IGZhbHNlO1xuXG4gIC8vIEV4YW1wbGUgMTogU2ltcGxlIHJlYWN0aXZlIGNvbnRlbnQgcHJvcHMgZm9yIHZhbC10ZXh0XG4gIHRpdGxlUHJvcHM6IFRleHRNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50S2V5OiAndGl0bGUnLFxuICAgIGNvbnRlbnRDbGFzczogJ1JlYWN0aXZlQ29udGVudEV4YW1wbGUnLFxuICAgIGNvbnRlbnRGYWxsYmFjazogJ0RlZmF1bHQgVGl0bGUnLFxuICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgc2l6ZTogJ3hsYXJnZScsXG4gICAgYm9sZDogdHJ1ZSxcbiAgfTtcblxuICAvLyBFeGFtcGxlIDI6IFJlYWN0aXZlIGNvbnRlbnQgd2l0aCBpbnRlcnBvbGF0aW9uXG4gIGdyZWV0aW5nUHJvcHM6IFRleHRNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50S2V5OiAnZ3JlZXRpbmcnLFxuICAgIGNvbnRlbnRDbGFzczogJ1JlYWN0aXZlQ29udGVudEV4YW1wbGUnLFxuICAgIGNvbnRlbnRJbnRlcnBvbGF0aW9uOiB7IG5hbWU6ICdEZXZlbG9wZXInLCBjb3VudDogMyB9LFxuICAgIGNvbnRlbnRGYWxsYmFjazogJ0hlbGxvIERldmVsb3BlcicsXG4gICAgY29sb3I6ICdzZWNvbmRhcnknLFxuICAgIHNpemU6ICdsYXJnZScsXG4gICAgYm9sZDogZmFsc2UsXG4gIH07XG5cbiAgLy8gRXhhbXBsZSAzOiBNdWx0aXBsZSBjb250ZW50IGtleXNcbiAgbXVsdGlwbGVDb250ZW50JDogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gU2V0IHVwIHJlYWN0aXZlIG9ic2VydmFibGVzIHVzaW5nIENvbnRlbnRTZXJ2aWNlXG4gICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UkID0gdGhpcy5jb250ZW50LmN1cnJlbnRMYW5nJDtcblxuICAgIC8vIEV4YW1wbGUgMzogR2V0IG11bHRpcGxlIGNvbnRlbnQga2V5cyByZWFjdGl2ZWx5IC0gdXNpbmcgdGhlIG5ldyBBUElcbiAgICB0aGlzLm11bHRpcGxlQ29udGVudCQgPSB0aGlzLmNvbXBvbmVudENvbnRlbnQuZ2V0TXVsdGlwbGUoWydkZXNjcmlwdGlvbicsICdkeW5hbWljVGV4dCddKTtcblxuICAgIC8vIEJ1dHRvbiB0ZXh0IHJlYWN0aXZlIC0gdXNpbmcgdGhlIG5ldyBzaW1wbGlmaWVkIEFQSSB3aXRoIG9wdGlvbnNcbiAgICB0aGlzLmJ1dHRvblRleHQkID0gdGhpcy5jb21wb25lbnRDb250ZW50LmdldCgnYnV0dG9uVGV4dCcpO1xuXG4gICAgLy8gR2xvYmFsIGNvbnRlbnQgb2JzZXJ2YWJsZXMgdXNpbmcgdW5pZmllZCBmcm9tQ29udGVudCBtZXRob2RcbiAgICB0aGlzLnNhdmVCdXR0b24kID0gdGhpcy5jb250ZW50LmZyb21Db250ZW50KHsga2V5OiAnc2F2ZScgfSk7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24kID0gdGhpcy5jb250ZW50LmZyb21Db250ZW50KHsga2V5OiAnY2FuY2VsJyB9KTtcbiAgICB0aGlzLmRlbGV0ZUJ1dHRvbiQgPSB0aGlzLmNvbnRlbnQuZnJvbUNvbnRlbnQoeyBrZXk6ICdkZWxldGUnIH0pO1xuICAgIHRoaXMub2tCdXR0b24kID0gdGhpcy5jb250ZW50LmZyb21Db250ZW50KHsga2V5OiAnb2snIH0pO1xuICAgIHRoaXMubG9hZGluZ1RleHQkID0gdGhpcy5jb250ZW50LmZyb21Db250ZW50KHsga2V5OiAnbG9hZGluZycgfSk7XG5cbiAgICAvLyBHbG9iYWwgY29udGVudCB3aXRoIGludGVycG9sYXRpb24gdXNpbmcgdW5pZmllZCBtZXRob2RcbiAgICB0aGlzLmRlbGV0ZUNvbmZpcm1hdGlvblRleHQkID0gdGhpcy5jb250ZW50LmZyb21Db250ZW50KHtcbiAgICAgIGtleTogJ2RlbGV0ZUNvbmZpcm1hdGlvbicsXG4gICAgICBpbnRlcnBvbGF0aW9uOiB7IGl0ZW1OYW1lOiAnZXN0ZSBlbGVtZW50bycgfSxcbiAgICB9KTtcblxuICAgIC8vIEV4YW1wbGUgb2Ygc3luY2hyb25vdXMgZ2xvYmFsIGNvbnRlbnQgYWNjZXNzXG4gICAgY29uc29sZS5sb2coJ0dsb2JhbCBzYXZlIHRleHQ6JywgdGhpcy5jb250ZW50LmdldFRleHQoJ3NhdmUnKSk7XG4gICAgY29uc29sZS5sb2coJ0dsb2JhbCBjYW5jZWwgdGV4dDonLCB0aGlzLmNvbnRlbnQuZ2V0R2xvYmFsVGV4dCgnY2FuY2VsJykpO1xuXG4gICAgLy8gRXhhbXBsZSBvZiB1c2luZyBuZXcgc2NvcGVkIGhlbHBlciB3aXRoIGludGVycG9sYXRpb25cbiAgICBjb25zdCBncmVldGluZ1dpdGhOZXdBUEkkID0gdGhpcy5jb21wb25lbnRDb250ZW50LmdldCgnZ3JlZXRpbmcnLCB7XG4gICAgICBpbnRlcnBvbGF0aW9uOiB7IG5hbWU6ICdEZXZlbG9wZXInLCBjb3VudDogMyB9LFxuICAgICAgZmFsbGJhY2s6ICdIZWxsbyEnLFxuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKCdOZXcgdW5pZmllZCBBUEkgd29ya3MhJywgZ3JlZXRpbmdXaXRoTmV3QVBJJCk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIGJldHdlZW4gU3BhbmlzaCBhbmQgRW5nbGlzaFxuICAgKi9cbiAgdG9nZ2xlTGFuZ3VhZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudExhbmcgPSB0aGlzLmNvbnRlbnQuY3VycmVudExhbmc7XG4gICAgY29uc3QgbmV3TGFuZyA9IGN1cnJlbnRMYW5nID09PSBMYW5nT3B0aW9uLkVTID8gTGFuZ09wdGlvbi5FTiA6IExhbmdPcHRpb24uRVM7XG4gICAgdGhpcy5jb250ZW50LnNldExhbmcobmV3TGFuZyk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBkZWxldGUgY29uZmlybWF0aW9uIGRpYWxvZ1xuICAgKi9cbiAgc2hvd0RlbGV0ZUNvbmZpcm1hdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dDb25maXJtYXRpb24gPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgZGVsZXRlIGNvbmZpcm1hdGlvbiBkaWFsb2dcbiAgICovXG4gIGhpZGVEZWxldGVDb25maXJtYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zaG93Q29uZmlybWF0aW9uID0gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
@@ -1,34 +1,162 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { AsyncPipe } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
3
  import { IonText } from '@ionic/angular/standalone';
4
+ import { of, Subscription } from 'rxjs';
3
5
  import * as i0 from "@angular/core";
6
+ import * as i1 from "../../../services/content.service";
4
7
  /**
5
8
  * val-text
6
9
  *
7
- * For displaying styled text with color, size, and bold options.
10
+ * Enhanced text component that supports both static content and reactive content from the language service.
11
+ * The component automatically updates when the language changes if using reactive content.
8
12
  *
9
- * @example
10
- * <val-text [props]="{ content: 'Some text', color: 'medium', size: 'small', bold: true }"></val-text>
13
+ * @example Static content:
14
+ * ```html
15
+ * <val-text [props]="{
16
+ * content: 'Static text',
17
+ * color: 'primary',
18
+ * size: 'medium',
19
+ * bold: false
20
+ * }"></val-text>
21
+ * ```
22
+ *
23
+ * @example Reactive content:
24
+ * ```html
25
+ * <val-text [props]="{
26
+ * contentKey: 'welcomeMessage',
27
+ * contentClass: 'HomeComponent',
28
+ * contentFallback: 'Welcome!',
29
+ * color: 'primary',
30
+ * size: 'large',
31
+ * bold: true
32
+ * }"></val-text>
33
+ * ```
34
+ *
35
+ * @example Reactive content with interpolation:
36
+ * ```html
37
+ * <val-text [props]="{
38
+ * contentKey: 'greeting',
39
+ * contentClass: 'UserComponent',
40
+ * contentInterpolation: { name: 'John', count: 5 },
41
+ * color: 'secondary',
42
+ * size: 'medium',
43
+ * bold: false
44
+ * }"></val-text>
45
+ * ```
11
46
  *
12
- * @input props: TextMetadata - Configuration for the text (content, color, size, bold)
47
+ * @example Using ContentService helper:
48
+ * ```typescript
49
+ * // In component
50
+ * content = inject(ContentService);
51
+ * componentContent = this.content.forComponent('MyComponent');
52
+ *
53
+ * textProps = {
54
+ * content: this.componentContent.getText('title'), // sync
55
+ * color: 'primary',
56
+ * size: 'large',
57
+ * bold: true
58
+ * };
59
+ * // Or with reactive binding:
60
+ * title$ = this.componentContent.get('title');
61
+ * ```
62
+ *
63
+ * @input props: TextMetadata - Configuration for the text (content, styling, and reactive content options)
13
64
  */
14
65
  export class TextComponent {
15
- constructor() { }
16
- ngOnInit() { }
17
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
66
+ constructor(contentService) {
67
+ this.contentService = contentService;
68
+ this.subscription = new Subscription();
69
+ }
70
+ ngOnInit() {
71
+ this.setupDisplayContent();
72
+ }
73
+ ngOnDestroy() {
74
+ this.subscription.unsubscribe();
75
+ }
76
+ /**
77
+ * Set up the content observable based on the props configuration.
78
+ * Priority: static content > reactive content with interpolation > reactive content
79
+ */
80
+ setupDisplayContent() {
81
+ if (this.props.content) {
82
+ // Static content takes precedence
83
+ this.displayContent$ = of(this.props.content);
84
+ }
85
+ else if (this.props.contentKey && this.props.contentClass) {
86
+ // Reactive content from language service
87
+ if (this.props.contentInterpolation) {
88
+ // With interpolation
89
+ this.displayContent$ = this.contentService.fromContentWithInterpolation({
90
+ className: this.props.contentClass,
91
+ key: this.props.contentKey,
92
+ fallback: this.props.contentFallback,
93
+ interpolation: this.props.contentInterpolation,
94
+ });
95
+ }
96
+ else {
97
+ // Simple reactive content
98
+ this.displayContent$ = this.contentService.fromContent({
99
+ className: this.props.contentClass,
100
+ key: this.props.contentKey,
101
+ fallback: this.props.contentFallback,
102
+ });
103
+ }
104
+ }
105
+ else {
106
+ // Fallback to empty string if no valid content configuration
107
+ console.warn('val-text: No valid content configuration provided. Use either "content" for static text or "contentKey" + "contentClass" for reactive content.');
108
+ this.displayContent$ = of(this.props.contentFallback || '');
109
+ }
110
+ }
111
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextComponent, deps: [{ token: i1.ContentService }], target: i0.ɵɵFactoryTarget.Component }); }
18
112
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TextComponent, isStandalone: true, selector: "val-text", inputs: { props: "props" }, ngImport: i0, template: `
19
113
  <ion-text [color]="props.color">
20
- <p [class]="props.size" [class.bold]="props.bold">{{ props.content }}</p>
114
+ <p [class]="props.size" [class.bold]="props.bold">{{ displayContent$ | async }}</p>
21
115
  </ion-text>
22
- `, isInline: true, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143,73,248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255,255,255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.small{font-size:.75rem;line-height:1.25rem;font-weight:400}.small.bold{font-size:.75rem;line-height:1.25rem;font-weight:700}.medium{font-size:.875rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.medium{font-size:1rem;line-height:1.5rem}}.medium.bold{font-size:.875rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.medium.bold{font-size:1rem;line-height:1.5rem}}.large{font-size:1rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.large{font-size:1.125rem;line-height:1.5rem}}.large.bold{font-size:1rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.large.bold{font-size:1.125rem;line-height:1.5rem}}.xlarge{font-size:1.125rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.xlarge{font-size:1.5rem;line-height:2rem}}.xlarge.bold{font-size:1.125rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.xlarge.bold{font-size:1.5rem;line-height:2rem}}\n"], dependencies: [{ kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }] }); }
116
+ `, isInline: true, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143,73,248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255,255,255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.small{font-size:.75rem;line-height:1.25rem;font-weight:400}.small.bold{font-size:.75rem;line-height:1.25rem;font-weight:700}.medium{font-size:.875rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.medium{font-size:1rem;line-height:1.5rem}}.medium.bold{font-size:.875rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.medium.bold{font-size:1rem;line-height:1.5rem}}.large{font-size:1rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.large{font-size:1.125rem;line-height:1.5rem}}.large.bold{font-size:1rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.large.bold{font-size:1.125rem;line-height:1.5rem}}.xlarge{font-size:1.125rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.xlarge{font-size:1.5rem;line-height:2rem}}.xlarge.bold{font-size:1.125rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.xlarge.bold{font-size:1.5rem;line-height:2rem}}\n"], dependencies: [{ kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23
117
  }
24
118
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextComponent, decorators: [{
25
119
  type: Component,
26
- args: [{ selector: 'val-text', standalone: true, imports: [IonText], template: `
120
+ args: [{ selector: 'val-text', standalone: true, imports: [IonText, AsyncPipe], template: `
27
121
  <ion-text [color]="props.color">
28
- <p [class]="props.size" [class.bold]="props.bold">{{ props.content }}</p>
122
+ <p [class]="props.size" [class.bold]="props.bold">{{ displayContent$ | async }}</p>
29
123
  </ion-text>
30
- `, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143,73,248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255,255,255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.small{font-size:.75rem;line-height:1.25rem;font-weight:400}.small.bold{font-size:.75rem;line-height:1.25rem;font-weight:700}.medium{font-size:.875rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.medium{font-size:1rem;line-height:1.5rem}}.medium.bold{font-size:.875rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.medium.bold{font-size:1rem;line-height:1.5rem}}.large{font-size:1rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.large{font-size:1.125rem;line-height:1.5rem}}.large.bold{font-size:1rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.large.bold{font-size:1.125rem;line-height:1.5rem}}.xlarge{font-size:1.125rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.xlarge{font-size:1.5rem;line-height:2rem}}.xlarge.bold{font-size:1.125rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.xlarge.bold{font-size:1.5rem;line-height:2rem}}\n"] }]
31
- }], ctorParameters: () => [], propDecorators: { props: [{
124
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143,73,248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255,255,255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.small{font-size:.75rem;line-height:1.25rem;font-weight:400}.small.bold{font-size:.75rem;line-height:1.25rem;font-weight:700}.medium{font-size:.875rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.medium{font-size:1rem;line-height:1.5rem}}.medium.bold{font-size:.875rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.medium.bold{font-size:1rem;line-height:1.5rem}}.large{font-size:1rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.large{font-size:1.125rem;line-height:1.5rem}}.large.bold{font-size:1rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.large.bold{font-size:1.125rem;line-height:1.5rem}}.xlarge{font-size:1.125rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.xlarge{font-size:1.5rem;line-height:2rem}}.xlarge.bold{font-size:1.125rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.xlarge.bold{font-size:1.5rem;line-height:2rem}}\n"] }]
125
+ }], ctorParameters: () => [{ type: i1.ContentService }], propDecorators: { props: [{
32
126
  type: Input
33
127
  }] } });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2F0b21zL3RleHQvdGV4dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQWNwRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQVl4QixnQkFBZSxDQUFDO0lBRWhCLFFBQVEsS0FBSSxDQUFDOytHQWRGLGFBQWE7bUdBQWIsYUFBYSxnR0FqQmQ7Ozs7R0FJVCx3MEdBTFMsT0FBTzs7NEZBa0JOLGFBQWE7a0JBckJ6QixTQUFTOytCQUNFLFVBQVUsY0FDUixJQUFJLFdBQ1AsQ0FBQyxPQUFPLENBQUMsWUFDUjs7OztHQUlUO3dEQXVCRCxLQUFLO3NCQURKLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvblRleHQgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IFRleHRNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtdGV4dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtJb25UZXh0XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8aW9uLXRleHQgW2NvbG9yXT1cInByb3BzLmNvbG9yXCI+XG4gICAgICA8cCBbY2xhc3NdPVwicHJvcHMuc2l6ZVwiIFtjbGFzcy5ib2xkXT1cInByb3BzLmJvbGRcIj57eyBwcm9wcy5jb250ZW50IH19PC9wPlxuICAgIDwvaW9uLXRleHQ+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL3RleHQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG4vKipcbiAqIHZhbC10ZXh0XG4gKlxuICogRm9yIGRpc3BsYXlpbmcgc3R5bGVkIHRleHQgd2l0aCBjb2xvciwgc2l6ZSwgYW5kIGJvbGQgb3B0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogPHZhbC10ZXh0IFtwcm9wc109XCJ7IGNvbnRlbnQ6ICdTb21lIHRleHQnLCBjb2xvcjogJ21lZGl1bScsIHNpemU6ICdzbWFsbCcsIGJvbGQ6IHRydWUgfVwiPjwvdmFsLXRleHQ+XG4gKlxuICogQGlucHV0IHByb3BzOiBUZXh0TWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgdGV4dCAoY29udGVudCwgY29sb3IsIHNpemUsIGJvbGQpXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIFRleHQgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAqIEB0eXBlIHtUZXh0TWV0YWRhdGF9XG4gICAqIEBwcm9wZXJ0eSBjb250ZW50IC0gVGhlIHRleHQgdG8gZGlzcGxheS5cbiAgICogQHByb3BlcnR5IGNvbG9yIC0gVGhlIHRleHQgY29sb3IgKElvbmljIGNvbG9yIHN0cmluZykuXG4gICAqIEBwcm9wZXJ0eSBzaXplIC0gVGhlIHRleHQgc2l6ZSAoJ3NtYWxsJyB8ICdtZWRpdW0nIHwgJ2xhcmdlJyB8ICd4bGFyZ2UnKS5cbiAgICogQHByb3BlcnR5IGJvbGQgLSBXaGV0aGVyIHRoZSB0ZXh0IGlzIGJvbGQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwcm9wczogVGV4dE1ldGFkYXRhO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uSW5pdCgpIHt9XG59XG4iXX0=
128
+ /**
129
+ * Helper function to create reactive text props from content configuration.
130
+ * This provides a convenient way to create val-text props with reactive content.
131
+ *
132
+ * @param contentConfig - Content configuration
133
+ * @param styleConfig - Optional style configuration
134
+ * @returns Partial TextMetadata with content properties set
135
+ *
136
+ * @example
137
+ * ```typescript
138
+ * // In component
139
+ * titleProps: TextMetadata = {
140
+ * ...createTextProps({
141
+ * contentKey: 'title',
142
+ * contentClass: 'HeaderComponent'
143
+ * }, {
144
+ * color: 'primary',
145
+ * size: 'large',
146
+ * bold: true
147
+ * })
148
+ * };
149
+ * ```
150
+ */
151
+ export function createTextProps(contentConfig, styleConfig = {}) {
152
+ return {
153
+ contentKey: contentConfig.contentKey,
154
+ contentClass: contentConfig.contentClass,
155
+ contentFallback: contentConfig.contentFallback,
156
+ contentInterpolation: contentConfig.contentInterpolation,
157
+ color: styleConfig.color || 'dark',
158
+ size: styleConfig.size || 'medium',
159
+ bold: styleConfig.bold || false,
160
+ };
161
+ }
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2F0b21zL3RleHQvdGV4dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFjLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQWdCcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlERztBQUNILE1BQU0sT0FBTyxhQUFhO0lBOEJ4QixZQUFvQixjQUE4QjtRQUE5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFGMUMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRVcsQ0FBQztJQUV0RCxRQUFRO1FBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLGtDQUFrQztZQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDNUQseUNBQXlDO1lBQ3pDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUNwQyxxQkFBcUI7Z0JBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsQ0FBQztvQkFDdEUsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtvQkFDbEMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVTtvQkFDMUIsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZTtvQkFDcEMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CO2lCQUMvQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sMEJBQTBCO2dCQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDO29CQUNyRCxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZO29CQUNsQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVO29CQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlO2lCQUNyQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTiw2REFBNkQ7WUFDN0QsT0FBTyxDQUFDLElBQUksQ0FDVixnSkFBZ0osQ0FDakosQ0FBQztZQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDSCxDQUFDOytHQXpFVSxhQUFhO21HQUFiLGFBQWEsZ0dBbEVkOzs7O0dBSVQsdzBHQUxTLE9BQU8sMkVBQUUsU0FBUzs7NEZBbUVqQixhQUFhO2tCQXRFekIsU0FBUzsrQkFDRSxVQUFVLGNBQ1IsSUFBSSxXQUNQLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxZQUNuQjs7OztHQUlULG1CQUVnQix1QkFBdUIsQ0FBQyxNQUFNO21GQWdGL0MsS0FBSztzQkFESixLQUFLOztBQXlEUjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQzdCLGFBQWdDLEVBQ2hDLGNBQXNFLEVBQUU7SUFFeEUsT0FBTztRQUNMLFVBQVUsRUFBRSxhQUFhLENBQUMsVUFBVTtRQUNwQyxZQUFZLEVBQUUsYUFBYSxDQUFDLFlBQVk7UUFDeEMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxlQUFlO1FBQzlDLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxvQkFBb0I7UUFDeEQsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLElBQUksTUFBTTtRQUNsQyxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksSUFBSSxRQUFRO1FBQ2xDLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLEtBQUs7S0FDaEMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJb25UZXh0IH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBUZXh0Q29udGVudENvbmZpZywgVGV4dE1ldGFkYXRhIH0gZnJvbSAnLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC10ZXh0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0lvblRleHQsIEFzeW5jUGlwZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi10ZXh0IFtjb2xvcl09XCJwcm9wcy5jb2xvclwiPlxuICAgICAgPHAgW2NsYXNzXT1cInByb3BzLnNpemVcIiBbY2xhc3MuYm9sZF09XCJwcm9wcy5ib2xkXCI+e3sgZGlzcGxheUNvbnRlbnQkIHwgYXN5bmMgfX08L3A+XG4gICAgPC9pb24tdGV4dD5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG4vKipcbiAqIHZhbC10ZXh0XG4gKlxuICogRW5oYW5jZWQgdGV4dCBjb21wb25lbnQgdGhhdCBzdXBwb3J0cyBib3RoIHN0YXRpYyBjb250ZW50IGFuZCByZWFjdGl2ZSBjb250ZW50IGZyb20gdGhlIGxhbmd1YWdlIHNlcnZpY2UuXG4gKiBUaGUgY29tcG9uZW50IGF1dG9tYXRpY2FsbHkgdXBkYXRlcyB3aGVuIHRoZSBsYW5ndWFnZSBjaGFuZ2VzIGlmIHVzaW5nIHJlYWN0aXZlIGNvbnRlbnQuXG4gKlxuICogQGV4YW1wbGUgU3RhdGljIGNvbnRlbnQ6XG4gKiBgYGBodG1sXG4gKiA8dmFsLXRleHQgW3Byb3BzXT1cIntcbiAqICAgY29udGVudDogJ1N0YXRpYyB0ZXh0JyxcbiAqICAgY29sb3I6ICdwcmltYXJ5JyxcbiAqICAgc2l6ZTogJ21lZGl1bScsXG4gKiAgIGJvbGQ6IGZhbHNlXG4gKiB9XCI+PC92YWwtdGV4dD5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFJlYWN0aXZlIGNvbnRlbnQ6XG4gKiBgYGBodG1sXG4gKiA8dmFsLXRleHQgW3Byb3BzXT1cIntcbiAqICAgY29udGVudEtleTogJ3dlbGNvbWVNZXNzYWdlJyxcbiAqICAgY29udGVudENsYXNzOiAnSG9tZUNvbXBvbmVudCcsXG4gKiAgIGNvbnRlbnRGYWxsYmFjazogJ1dlbGNvbWUhJyxcbiAqICAgY29sb3I6ICdwcmltYXJ5JyxcbiAqICAgc2l6ZTogJ2xhcmdlJyxcbiAqICAgYm9sZDogdHJ1ZVxuICogfVwiPjwvdmFsLXRleHQ+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBSZWFjdGl2ZSBjb250ZW50IHdpdGggaW50ZXJwb2xhdGlvbjpcbiAqIGBgYGh0bWxcbiAqIDx2YWwtdGV4dCBbcHJvcHNdPVwie1xuICogICBjb250ZW50S2V5OiAnZ3JlZXRpbmcnLFxuICogICBjb250ZW50Q2xhc3M6ICdVc2VyQ29tcG9uZW50JyxcbiAqICAgY29udGVudEludGVycG9sYXRpb246IHsgbmFtZTogJ0pvaG4nLCBjb3VudDogNSB9LFxuICogICBjb2xvcjogJ3NlY29uZGFyeScsXG4gKiAgIHNpemU6ICdtZWRpdW0nLFxuICogICBib2xkOiBmYWxzZVxuICogfVwiPjwvdmFsLXRleHQ+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBVc2luZyBDb250ZW50U2VydmljZSBoZWxwZXI6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBJbiBjb21wb25lbnRcbiAqIGNvbnRlbnQgPSBpbmplY3QoQ29udGVudFNlcnZpY2UpO1xuICogY29tcG9uZW50Q29udGVudCA9IHRoaXMuY29udGVudC5mb3JDb21wb25lbnQoJ015Q29tcG9uZW50Jyk7XG4gKlxuICogdGV4dFByb3BzID0ge1xuICogICBjb250ZW50OiB0aGlzLmNvbXBvbmVudENvbnRlbnQuZ2V0VGV4dCgndGl0bGUnKSwgLy8gc3luY1xuICogICBjb2xvcjogJ3ByaW1hcnknLFxuICogICBzaXplOiAnbGFyZ2UnLFxuICogICBib2xkOiB0cnVlXG4gKiB9O1xuICogLy8gT3Igd2l0aCByZWFjdGl2ZSBiaW5kaW5nOlxuICogdGl0bGUkID0gdGhpcy5jb21wb25lbnRDb250ZW50LmdldCgndGl0bGUnKTtcbiAqIGBgYFxuICpcbiAqIEBpbnB1dCBwcm9wczogVGV4dE1ldGFkYXRhIC0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIHRleHQgKGNvbnRlbnQsIHN0eWxpbmcsIGFuZCByZWFjdGl2ZSBjb250ZW50IG9wdGlvbnMpXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogVGV4dCBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICogQHR5cGUge1RleHRNZXRhZGF0YX1cbiAgICpcbiAgICogRm9yIHN0YXRpYyBjb250ZW50OlxuICAgKiBAcHJvcGVydHkgY29udGVudCAtIFRoZSB0ZXh0IHRvIGRpc3BsYXkgKHRha2VzIHByZWNlZGVuY2Ugb3ZlciByZWFjdGl2ZSBjb250ZW50KVxuICAgKlxuICAgKiBGb3IgcmVhY3RpdmUgY29udGVudDpcbiAgICogQHByb3BlcnR5IGNvbnRlbnRLZXkgLSBUaGUgY29udGVudCBrZXkgdG8gcmV0cmlldmUgZnJvbSBsYW5ndWFnZSBzZXJ2aWNlXG4gICAqIEBwcm9wZXJ0eSBjb250ZW50Q2xhc3MgLSBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWUgZm9yIGNvbnRlbnQgbG9va3VwXG4gICAqIEBwcm9wZXJ0eSBjb250ZW50RmFsbGJhY2sgLSBPcHRpb25hbCBmYWxsYmFjayB0ZXh0IGlmIGNvbnRlbnQgaXMgbm90IGZvdW5kXG4gICAqIEBwcm9wZXJ0eSBjb250ZW50SW50ZXJwb2xhdGlvbiAtIE9wdGlvbmFsIHZhbHVlcyB0byBpbnRlcnBvbGF0ZSBpbnRvIGNvbnRlbnRcbiAgICpcbiAgICogRm9yIHN0eWxpbmc6XG4gICAqIEBwcm9wZXJ0eSBjb2xvciAtIFRoZSB0ZXh0IGNvbG9yIChJb25pYyBjb2xvciBzdHJpbmcpXG4gICAqIEBwcm9wZXJ0eSBzaXplIC0gVGhlIHRleHQgc2l6ZSAoJ3NtYWxsJyB8ICdtZWRpdW0nIHwgJ2xhcmdlJyB8ICd4bGFyZ2UnKVxuICAgKiBAcHJvcGVydHkgYm9sZCAtIFdoZXRoZXIgdGhlIHRleHQgaXMgYm9sZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHJvcHM6IFRleHRNZXRhZGF0YTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB0aGF0IHByb3ZpZGVzIHRoZSBjb250ZW50IHRvIGRpc3BsYXkuXG4gICAqIFRoaXMgd2lsbCBiZSBlaXRoZXIgc3RhdGljIGNvbnRlbnQgb3IgcmVhY3RpdmUgY29udGVudCBmcm9tIHRoZSBsYW5ndWFnZSBzZXJ2aWNlLlxuICAgKi9cbiAgZGlzcGxheUNvbnRlbnQkOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb250ZW50U2VydmljZTogQ29udGVudFNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXR1cERpc3BsYXlDb250ZW50KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCB0aGUgY29udGVudCBvYnNlcnZhYmxlIGJhc2VkIG9uIHRoZSBwcm9wcyBjb25maWd1cmF0aW9uLlxuICAgKiBQcmlvcml0eTogc3RhdGljIGNvbnRlbnQgPiByZWFjdGl2ZSBjb250ZW50IHdpdGggaW50ZXJwb2xhdGlvbiA+IHJlYWN0aXZlIGNvbnRlbnRcbiAgICovXG4gIHByaXZhdGUgc2V0dXBEaXNwbGF5Q29udGVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcy5jb250ZW50KSB7XG4gICAgICAvLyBTdGF0aWMgY29udGVudCB0YWtlcyBwcmVjZWRlbmNlXG4gICAgICB0aGlzLmRpc3BsYXlDb250ZW50JCA9IG9mKHRoaXMucHJvcHMuY29udGVudCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmNvbnRlbnRLZXkgJiYgdGhpcy5wcm9wcy5jb250ZW50Q2xhc3MpIHtcbiAgICAgIC8vIFJlYWN0aXZlIGNvbnRlbnQgZnJvbSBsYW5ndWFnZSBzZXJ2aWNlXG4gICAgICBpZiAodGhpcy5wcm9wcy5jb250ZW50SW50ZXJwb2xhdGlvbikge1xuICAgICAgICAvLyBXaXRoIGludGVycG9sYXRpb25cbiAgICAgICAgdGhpcy5kaXNwbGF5Q29udGVudCQgPSB0aGlzLmNvbnRlbnRTZXJ2aWNlLmZyb21Db250ZW50V2l0aEludGVycG9sYXRpb24oe1xuICAgICAgICAgIGNsYXNzTmFtZTogdGhpcy5wcm9wcy5jb250ZW50Q2xhc3MsXG4gICAgICAgICAga2V5OiB0aGlzLnByb3BzLmNvbnRlbnRLZXksXG4gICAgICAgICAgZmFsbGJhY2s6IHRoaXMucHJvcHMuY29udGVudEZhbGxiYWNrLFxuICAgICAgICAgIGludGVycG9sYXRpb246IHRoaXMucHJvcHMuY29udGVudEludGVycG9sYXRpb24sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2ltcGxlIHJlYWN0aXZlIGNvbnRlbnRcbiAgICAgICAgdGhpcy5kaXNwbGF5Q29udGVudCQgPSB0aGlzLmNvbnRlbnRTZXJ2aWNlLmZyb21Db250ZW50KHtcbiAgICAgICAgICBjbGFzc05hbWU6IHRoaXMucHJvcHMuY29udGVudENsYXNzLFxuICAgICAgICAgIGtleTogdGhpcy5wcm9wcy5jb250ZW50S2V5LFxuICAgICAgICAgIGZhbGxiYWNrOiB0aGlzLnByb3BzLmNvbnRlbnRGYWxsYmFjayxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZhbGxiYWNrIHRvIGVtcHR5IHN0cmluZyBpZiBubyB2YWxpZCBjb250ZW50IGNvbmZpZ3VyYXRpb25cbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ3ZhbC10ZXh0OiBObyB2YWxpZCBjb250ZW50IGNvbmZpZ3VyYXRpb24gcHJvdmlkZWQuIFVzZSBlaXRoZXIgXCJjb250ZW50XCIgZm9yIHN0YXRpYyB0ZXh0IG9yIFwiY29udGVudEtleVwiICsgXCJjb250ZW50Q2xhc3NcIiBmb3IgcmVhY3RpdmUgY29udGVudC4nXG4gICAgICApO1xuICAgICAgdGhpcy5kaXNwbGF5Q29udGVudCQgPSBvZih0aGlzLnByb3BzLmNvbnRlbnRGYWxsYmFjayB8fCAnJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSByZWFjdGl2ZSB0ZXh0IHByb3BzIGZyb20gY29udGVudCBjb25maWd1cmF0aW9uLlxuICogVGhpcyBwcm92aWRlcyBhIGNvbnZlbmllbnQgd2F5IHRvIGNyZWF0ZSB2YWwtdGV4dCBwcm9wcyB3aXRoIHJlYWN0aXZlIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIGNvbnRlbnRDb25maWcgLSBDb250ZW50IGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBzdHlsZUNvbmZpZyAtIE9wdGlvbmFsIHN0eWxlIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIFBhcnRpYWwgVGV4dE1ldGFkYXRhIHdpdGggY29udGVudCBwcm9wZXJ0aWVzIHNldFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBJbiBjb21wb25lbnRcbiAqIHRpdGxlUHJvcHM6IFRleHRNZXRhZGF0YSA9IHtcbiAqICAgLi4uY3JlYXRlVGV4dFByb3BzKHtcbiAqICAgICBjb250ZW50S2V5OiAndGl0bGUnLFxuICogICAgIGNvbnRlbnRDbGFzczogJ0hlYWRlckNvbXBvbmVudCdcbiAqICAgfSwge1xuICogICAgIGNvbG9yOiAncHJpbWFyeScsXG4gKiAgICAgc2l6ZTogJ2xhcmdlJyxcbiAqICAgICBib2xkOiB0cnVlXG4gKiAgIH0pXG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUZXh0UHJvcHMoXG4gIGNvbnRlbnRDb25maWc6IFRleHRDb250ZW50Q29uZmlnLFxuICBzdHlsZUNvbmZpZzogUGFydGlhbDxQaWNrPFRleHRNZXRhZGF0YSwgJ2NvbG9yJyB8ICdzaXplJyB8ICdib2xkJz4+ID0ge31cbik6IFBhcnRpYWw8VGV4dE1ldGFkYXRhPiB7XG4gIHJldHVybiB7XG4gICAgY29udGVudEtleTogY29udGVudENvbmZpZy5jb250ZW50S2V5LFxuICAgIGNvbnRlbnRDbGFzczogY29udGVudENvbmZpZy5jb250ZW50Q2xhc3MsXG4gICAgY29udGVudEZhbGxiYWNrOiBjb250ZW50Q29uZmlnLmNvbnRlbnRGYWxsYmFjayxcbiAgICBjb250ZW50SW50ZXJwb2xhdGlvbjogY29udGVudENvbmZpZy5jb250ZW50SW50ZXJwb2xhdGlvbixcbiAgICBjb2xvcjogc3R5bGVDb25maWcuY29sb3IgfHwgJ2RhcmsnLFxuICAgIHNpemU6IHN0eWxlQ29uZmlnLnNpemUgfHwgJ21lZGl1bScsXG4gICAgYm9sZDogc3R5bGVDb25maWcuYm9sZCB8fCBmYWxzZSxcbiAgfTtcbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2F0b21zL3RleHQvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbG9yIH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuXG4vKipcbiAqIFByb3BzIGZvciB2YWwtdGV4dCBjb21wb25lbnQuXG4gKlxuICogQHByb3BlcnR5IGNvbnRlbnQgLSBUaGUgdGV4dCB0byBkaXNwbGF5LlxuICogQHByb3BlcnR5IGNvbG9yIC0gVGhlIHRleHQgY29sb3IgKElvbmljIGNvbG9yIHN0cmluZykuXG4gKiBAcHJvcGVydHkgc2l6ZSAtIFRoZSB0ZXh0IHNpemUgKCdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZScgfCAneGxhcmdlJykuXG4gKiBAcHJvcGVydHkgYm9sZCAtIFdoZXRoZXIgdGhlIHRleHQgaXMgYm9sZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXh0TWV0YWRhdGEge1xuICBzaXplOiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnIHwgJ3hsYXJnZSc7XG4gIGNvbG9yOiBDb2xvcjtcbiAgY29udGVudDogc3RyaW5nO1xuICBib2xkOiBib29sZWFuO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2F0b21zL3RleHQvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbG9yIH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuXG4vKipcbiAqIFByb3BzIGZvciB2YWwtdGV4dCBjb21wb25lbnQuXG4gKlxuICogVGhlIGNvbXBvbmVudCBzdXBwb3J0cyBib3RoIHN0YXRpYyBjb250ZW50IGFuZCByZWFjdGl2ZSBjb250ZW50IGZyb20gdGhlIGxhbmd1YWdlIHNlcnZpY2UuXG4gKiBVc2UgZWl0aGVyIGBjb250ZW50YCBmb3Igc3RhdGljIHRleHQgb3IgYGNvbnRlbnRLZXlgICsgYGNvbnRlbnRDbGFzc2AgZm9yIHJlYWN0aXZlIHRleHQuXG4gKlxuICogQHByb3BlcnR5IGNvbnRlbnQgLSBTdGF0aWMgdGV4dCB0byBkaXNwbGF5ICh0YWtlcyBwcmVjZWRlbmNlIG92ZXIgY29udGVudEtleSlcbiAqIEBwcm9wZXJ0eSBjb250ZW50S2V5IC0gS2V5IGZvciBkeW5hbWljIGNvbnRlbnQgZnJvbSBsYW5ndWFnZSBzZXJ2aWNlXG4gKiBAcHJvcGVydHkgY29udGVudENsYXNzIC0gQ29tcG9uZW50IGNsYXNzIG5hbWUgZm9yIGNvbnRlbnQgbG9va3VwIChyZXF1aXJlZCB3aXRoIGNvbnRlbnRLZXkpXG4gKiBAcHJvcGVydHkgY29udGVudEZhbGxiYWNrIC0gRmFsbGJhY2sgdGV4dCBpZiBjb250ZW50S2V5IGlzIG5vdCBmb3VuZFxuICogQHByb3BlcnR5IGNvbnRlbnRJbnRlcnBvbGF0aW9uIC0gVmFsdWVzIHRvIGludGVycG9sYXRlIGludG8gdGhlIGNvbnRlbnQgc3RyaW5nXG4gKiBAcHJvcGVydHkgY29sb3IgLSBUaGUgdGV4dCBjb2xvciAoSW9uaWMgY29sb3Igc3RyaW5nKVxuICogQHByb3BlcnR5IHNpemUgLSBUaGUgdGV4dCBzaXplICgnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnIHwgJ3hsYXJnZScpXG4gKiBAcHJvcGVydHkgYm9sZCAtIFdoZXRoZXIgdGhlIHRleHQgaXMgYm9sZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRleHRNZXRhZGF0YSB7XG4gIHNpemU6ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZScgfCAneGxhcmdlJztcbiAgY29sb3I6IENvbG9yO1xuICBjb250ZW50Pzogc3RyaW5nO1xuICBib2xkOiBib29sZWFuO1xuXG4gIC8vIFJlYWN0aXZlIGNvbnRlbnQgcHJvcGVydGllc1xuICBjb250ZW50S2V5Pzogc3RyaW5nO1xuICBjb250ZW50Q2xhc3M/OiBzdHJpbmc7XG4gIGNvbnRlbnRGYWxsYmFjaz86IHN0cmluZztcbiAgY29udGVudEludGVycG9sYXRpb24/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHJlYWN0aXZlIGNvbnRlbnQgaW4gdmFsLXRleHQgY29tcG9uZW50LlxuICogVXNlIHRoaXMgaW50ZXJmYWNlIHdoZW4geW91IG9ubHkgbmVlZCB0byBzcGVjaWZ5IGNvbnRlbnQtcmVsYXRlZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRleHRDb250ZW50Q29uZmlnIHtcbiAgY29udGVudEtleTogc3RyaW5nO1xuICBjb250ZW50Q2xhc3M6IHN0cmluZztcbiAgY29udGVudEZhbGxiYWNrPzogc3RyaW5nO1xuICBjb250ZW50SW50ZXJwb2xhdGlvbj86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj47XG59XG4iXX0=