valtech-components 2.0.286 → 2.0.288
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.
- package/README.md +54 -14
- package/esm2022/lib/components/atoms/text/text.component.mjs +46 -10
- package/esm2022/lib/components/atoms/text/types.mjs +1 -1
- package/esm2022/lib/examples/custom-content-demo.component.mjs +291 -0
- package/esm2022/lib/examples/link-processing-example.component.mjs +139 -0
- package/esm2022/lib/services/lang-provider/content.mjs +1 -13
- package/esm2022/lib/services/link-processor.service.mjs +147 -0
- package/esm2022/lib/shared/pipes/process-links.pipe.mjs +69 -0
- package/esm2022/public-api.mjs +5 -4
- package/fesm2022/valtech-components.mjs +384 -925
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/text/text.component.d.ts +5 -1
- package/lib/components/atoms/text/types.d.ts +5 -0
- package/lib/examples/link-processing-example.component.d.ts +22 -0
- package/lib/services/link-processor.service.d.ts +92 -0
- package/lib/shared/pipes/process-links.pipe.d.ts +55 -0
- package/package.json +1 -1
- package/public-api.d.ts +4 -3
- package/esm2022/lib/components/_examples/custom-content-demo.component.mjs +0 -291
- package/esm2022/lib/components/_examples/global-content-example-content.mjs +0 -23
- package/esm2022/lib/components/_examples/global-content-example.component.mjs +0 -504
- package/esm2022/lib/components/_examples/reactive-content-example-content.mjs +0 -43
- package/esm2022/lib/components/_examples/reactive-content-example.component.mjs +0 -347
- package/esm2022/lib/services/lang-provider/components/theme-settings.mjs +0 -15
- package/lib/components/_examples/global-content-example-content.d.ts +0 -9
- package/lib/components/_examples/global-content-example.component.d.ts +0 -73
- package/lib/components/_examples/reactive-content-example-content.d.ts +0 -32
- package/lib/components/_examples/reactive-content-example.component.d.ts +0 -47
- package/lib/services/lang-provider/components/theme-settings.d.ts +0 -3
- /package/lib/{components/_examples → examples}/custom-content-demo.component.d.ts +0 -0
|
@@ -1,347 +0,0 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RpdmUtY29udGVudC1leGFtcGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRlY2gtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvX2V4YW1wbGVzL3JlYWN0aXZlLWNvbnRlbnQtZXhhbXBsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzVHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQTZIN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUNILE1BQU0sT0FBTywrQkFBK0I7SUFnRDFDO1FBL0NBLHlDQUF5QztRQUN6QyxZQUFPLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRWpDLG9EQUFvRDtRQUNwRCxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBZ0J2RSxnQ0FBZ0M7UUFDaEMscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRXpCLHdEQUF3RDtRQUN4RCxlQUFVLEdBQWlCO1lBQ3pCLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFlBQVksRUFBRSx3QkFBd0I7WUFDdEMsZUFBZSxFQUFFLGVBQWU7WUFDaEMsS0FB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RUFBRSxDQUFDO1FBQzlFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNILHNCQUFzQjtRQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILHNCQUFzQjtRQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7K0dBMUdVLCtCQUErQjttR0FBL0IsK0JBQStCLHdGQWxKaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtIVCwyakNBbkhTLFNBQVMsOENBQUUsSUFBSSw2RkFBRSxPQUFPLHlMQUFFLGNBQWMsK0VBQUUsYUFBYSxzR0FBRSxZQUFZLHNGQUFFLFNBQVMsb1BBQUUsYUFBYTs7NEZBbUo5RiwrQkFBK0I7a0JBdEozQyxTQUFTOytCQUNFLDhCQUE4QixjQUM1QixJQUFJLFdBQ1AsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLFlBQ2hHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrSFQsbUJBRWdCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkJ1dHRvbiwgSW9uQ2FyZCwgSW9uQ2FyZENvbnRlbnQsIElvbkNhcmRIZWFkZXIsIElvbkNhcmRUaXRsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDb250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBMYW5nT3B0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGFuZy1wcm92aWRlci90eXBlcyc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0TWV0YWRhdGEgfSBmcm9tICcuLi9hdG9tcy90ZXh0L3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXJlYWN0aXZlLWNvbnRlbnQtZXhhbXBsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtBc3luY1BpcGUsIE5nSWYsIElvbkNhcmQsIElvbkNhcmRDb250ZW50LCBJb25DYXJkSGVhZGVyLCBJb25DYXJkVGl0bGUsIElvbkJ1dHRvbiwgVGV4dENvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi1jYXJkPlxuICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgIDwhLS0gRXhhbXBsZSAxOiBEaXJlY3QgcmVhY3RpdmUgY29udGVudCB1c2luZyB2YWwtdGV4dCAtLT5cbiAgICAgICAgICA8dmFsLXRleHQgW3Byb3BzXT1cInRpdGxlUHJvcHNcIj48L3ZhbC10ZXh0PlxuICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgPC9pb24tY2FyZC1oZWFkZXI+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,15 +0,0 @@
|
|
|
1
|
-
import { TextContent } from '../types';
|
|
2
|
-
const text = {
|
|
3
|
-
es: {
|
|
4
|
-
light: 'Siempre claro',
|
|
5
|
-
dark: 'Siempre oscuro',
|
|
6
|
-
auto: 'Automático',
|
|
7
|
-
},
|
|
8
|
-
en: {
|
|
9
|
-
light: 'Always light',
|
|
10
|
-
dark: 'Always dark',
|
|
11
|
-
auto: 'System settings',
|
|
12
|
-
},
|
|
13
|
-
};
|
|
14
|
-
export default new TextContent(text);
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtc2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9zZXJ2aWNlcy9sYW5nLXByb3ZpZGVyL2NvbXBvbmVudHMvdGhlbWUtc2V0dGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekQsTUFBTSxJQUFJLEdBQXFCO0lBQzdCLEVBQUUsRUFBRTtRQUNGLEtBQUssRUFBRSxlQUFlO1FBQ3RCLElBQUksRUFBRSxnQkFBZ0I7UUFDdEIsSUFBSSxFQUFFLFlBQVk7S0FDbkI7SUFDRCxFQUFFLEVBQUU7UUFDRixLQUFLLEVBQUUsY0FBYztRQUNyQixJQUFJLEVBQUUsYUFBYTtRQUNuQixJQUFJLEVBQUUsaUJBQWlCO0tBQ3hCO0NBQ0YsQ0FBQztBQUVGLGVBQWUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYW5ndWFnZXNDb250ZW50LCBUZXh0Q29udGVudCB9IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgdGV4dDogTGFuZ3VhZ2VzQ29udGVudCA9IHtcbiAgZXM6IHtcbiAgICBsaWdodDogJ1NpZW1wcmUgY2xhcm8nLFxuICAgIGRhcms6ICdTaWVtcHJlIG9zY3VybycsXG4gICAgYXV0bzogJ0F1dG9tw6F0aWNvJyxcbiAgfSxcbiAgZW46IHtcbiAgICBsaWdodDogJ0Fsd2F5cyBsaWdodCcsXG4gICAgZGFyazogJ0Fsd2F5cyBkYXJrJyxcbiAgICBhdXRvOiAnU3lzdGVtIHNldHRpbmdzJyxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBUZXh0Q29udGVudCh0ZXh0KTtcbiJdfQ==
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Content configuration for the Global Content Example component.
|
|
3
|
-
*
|
|
4
|
-
* This demonstrates component-specific content that works alongside
|
|
5
|
-
* global content to create a comprehensive content management system.
|
|
6
|
-
*/
|
|
7
|
-
import { TextContent } from '../../services/lang-provider/types';
|
|
8
|
-
declare const _default: TextContent;
|
|
9
|
-
export default _default;
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { TextMetadata } from '../atoms/text/types';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
/**
|
|
4
|
-
* Comprehensive example demonstrating global content usage.
|
|
5
|
-
*
|
|
6
|
-
* This component shows:
|
|
7
|
-
* 1. Global button texts
|
|
8
|
-
* 2. Global state messages
|
|
9
|
-
* 3. Global confirmations with interpolation
|
|
10
|
-
* 4. Mixing global and component-specific content
|
|
11
|
-
* 5. Language switching
|
|
12
|
-
*/
|
|
13
|
-
export declare class GlobalContentExampleComponent {
|
|
14
|
-
private content;
|
|
15
|
-
private componentContent;
|
|
16
|
-
formData: {
|
|
17
|
-
name: string;
|
|
18
|
-
email: string;
|
|
19
|
-
message: string;
|
|
20
|
-
};
|
|
21
|
-
actionPerformed: boolean;
|
|
22
|
-
titleProps: TextMetadata;
|
|
23
|
-
languageLabel: TextMetadata;
|
|
24
|
-
componentDescriptionProps: TextMetadata;
|
|
25
|
-
saveButton$: import("rxjs").Observable<string>;
|
|
26
|
-
editButton$: import("rxjs").Observable<string>;
|
|
27
|
-
deleteButton$: import("rxjs").Observable<string>;
|
|
28
|
-
cancelButton$: import("rxjs").Observable<string>;
|
|
29
|
-
backButton$: import("rxjs").Observable<string>;
|
|
30
|
-
nextButton$: import("rxjs").Observable<string>;
|
|
31
|
-
okButton$: import("rxjs").Observable<string>;
|
|
32
|
-
closeButton$: import("rxjs").Observable<string>;
|
|
33
|
-
addButton$: import("rxjs").Observable<string>;
|
|
34
|
-
removeButton$: import("rxjs").Observable<string>;
|
|
35
|
-
searchButton$: import("rxjs").Observable<string>;
|
|
36
|
-
filterButton$: import("rxjs").Observable<string>;
|
|
37
|
-
sortButton$: import("rxjs").Observable<string>;
|
|
38
|
-
refreshButton$: import("rxjs").Observable<string>;
|
|
39
|
-
loadingText$: import("rxjs").Observable<string>;
|
|
40
|
-
successText$: import("rxjs").Observable<string>;
|
|
41
|
-
errorText$: import("rxjs").Observable<string>;
|
|
42
|
-
warningText$: import("rxjs").Observable<string>;
|
|
43
|
-
infoText$: import("rxjs").Observable<string>;
|
|
44
|
-
noDataText$: import("rxjs").Observable<string>;
|
|
45
|
-
requiredText$: import("rxjs").Observable<string>;
|
|
46
|
-
optionalText$: import("rxjs").Observable<string>;
|
|
47
|
-
searchPlaceholder$: import("rxjs").Observable<string>;
|
|
48
|
-
deleteConfirmation$: import("rxjs").Observable<string>;
|
|
49
|
-
areYouSureText$: import("rxjs").Observable<string>;
|
|
50
|
-
unsavedChangesText$: import("rxjs").Observable<string>;
|
|
51
|
-
/**
|
|
52
|
-
* Set language
|
|
53
|
-
*/
|
|
54
|
-
setLanguage(lang: 'es' | 'en'): void;
|
|
55
|
-
/**
|
|
56
|
-
* Perform an action to demonstrate status messages
|
|
57
|
-
*/
|
|
58
|
-
performAction(): void;
|
|
59
|
-
/**
|
|
60
|
-
* Cancel action
|
|
61
|
-
*/
|
|
62
|
-
cancelAction(): void;
|
|
63
|
-
/**
|
|
64
|
-
* Example of synchronous global content access
|
|
65
|
-
*/
|
|
66
|
-
getOkTextSync(): string;
|
|
67
|
-
/**
|
|
68
|
-
* Example of synchronous global content access using getText
|
|
69
|
-
*/
|
|
70
|
-
getCancelTextSync(): string;
|
|
71
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<GlobalContentExampleComponent, never>;
|
|
72
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<GlobalContentExampleComponent, "val-global-content-example", never, {}, {}, never, never, true, never>;
|
|
73
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Example content configuration for demonstrating the reactive content system.
|
|
3
|
-
*
|
|
4
|
-
* This file shows how to structure content for components that use the reactive
|
|
5
|
-
* language system with the new fromContent pattern.
|
|
6
|
-
*/
|
|
7
|
-
import { TextContent } from '../../services/lang-provider/types';
|
|
8
|
-
declare const _default: TextContent;
|
|
9
|
-
export default _default;
|
|
10
|
-
/**
|
|
11
|
-
* Type-safe content keys for the example component.
|
|
12
|
-
* Use this interface to ensure type safety when accessing content keys.
|
|
13
|
-
*/
|
|
14
|
-
export interface ExampleComponentContentKeys {
|
|
15
|
-
title: string;
|
|
16
|
-
subtitle: string;
|
|
17
|
-
description: string;
|
|
18
|
-
greeting: string;
|
|
19
|
-
welcomeMessage: string;
|
|
20
|
-
dynamicText: string;
|
|
21
|
-
buttonText: string;
|
|
22
|
-
loadingText: string;
|
|
23
|
-
errorMessage: string;
|
|
24
|
-
successMessage: string;
|
|
25
|
-
confirmDialog: string;
|
|
26
|
-
cancelButton: string;
|
|
27
|
-
acceptButton: string;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Utility type for getting content keys with type safety.
|
|
31
|
-
*/
|
|
32
|
-
export type ExampleContentKey = keyof ExampleComponentContentKeys;
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
2
|
-
import { Observable } from 'rxjs';
|
|
3
|
-
import { ContentService } from '../../services/content.service';
|
|
4
|
-
import { LangOption } from '../../services/lang-provider/types';
|
|
5
|
-
import { TextMetadata } from '../atoms/text/types';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export declare class ReactiveContentExampleComponent implements OnInit {
|
|
8
|
-
content: ContentService;
|
|
9
|
-
componentContent: {
|
|
10
|
-
get: (key: string, options?: {
|
|
11
|
-
fallback?: string;
|
|
12
|
-
interpolation?: Record<string, string | number>;
|
|
13
|
-
}) => Observable<string>;
|
|
14
|
-
getWithInterpolation: (key: string, interpolation: Record<string, string | number>, fallback?: string) => Observable<string>;
|
|
15
|
-
getMultiple: (keys: string[]) => Observable<Record<string, string>>;
|
|
16
|
-
getText: (key: string, fallback?: string) => string;
|
|
17
|
-
hasContent: (key: string) => boolean;
|
|
18
|
-
};
|
|
19
|
-
currentLanguage$: Observable<LangOption>;
|
|
20
|
-
buttonText$: Observable<string>;
|
|
21
|
-
saveButton$: Observable<string>;
|
|
22
|
-
cancelButton$: Observable<string>;
|
|
23
|
-
deleteButton$: Observable<string>;
|
|
24
|
-
okButton$: Observable<string>;
|
|
25
|
-
deleteConfirmationText$: Observable<string>;
|
|
26
|
-
loadingText$: Observable<string>;
|
|
27
|
-
showConfirmation: boolean;
|
|
28
|
-
titleProps: TextMetadata;
|
|
29
|
-
greetingProps: TextMetadata;
|
|
30
|
-
multipleContent$: Observable<Record<string, string>>;
|
|
31
|
-
constructor();
|
|
32
|
-
ngOnInit(): void;
|
|
33
|
-
/**
|
|
34
|
-
* Toggle between Spanish and English
|
|
35
|
-
*/
|
|
36
|
-
toggleLanguage(): void;
|
|
37
|
-
/**
|
|
38
|
-
* Show delete confirmation dialog
|
|
39
|
-
*/
|
|
40
|
-
showDeleteConfirmation(): void;
|
|
41
|
-
/**
|
|
42
|
-
* Hide delete confirmation dialog
|
|
43
|
-
*/
|
|
44
|
-
hideDeleteConfirmation(): void;
|
|
45
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ReactiveContentExampleComponent, never>;
|
|
46
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ReactiveContentExampleComponent, "val-reactive-content-example", never, {}, {}, never, never, true, never>;
|
|
47
|
-
}
|
|
File without changes
|