valtech-components 2.0.291 → 2.0.293
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/esm2022/lib/components/atoms/avatar/avatar.component.mjs +3 -3
- package/esm2022/lib/components/atoms/box/box.component.mjs +3 -3
- package/esm2022/lib/components/atoms/button/button.component.mjs +45 -12
- package/esm2022/lib/components/atoms/display/display.component.mjs +47 -11
- package/esm2022/lib/components/atoms/display/types.mjs +1 -1
- package/esm2022/lib/components/atoms/divider/divider.component.mjs +3 -3
- package/esm2022/lib/components/atoms/href/href.component.mjs +3 -3
- package/esm2022/lib/components/atoms/icon/icon.component.mjs +3 -3
- package/esm2022/lib/components/atoms/image/image.component.mjs +3 -3
- package/esm2022/lib/components/atoms/progress-bar/progress-bar.component.mjs +3 -3
- package/esm2022/lib/components/atoms/text/text.component.mjs +3 -3
- package/esm2022/lib/components/atoms/title/title.component.mjs +77 -23
- package/esm2022/lib/components/atoms/title/types.mjs +30 -2
- package/esm2022/lib/components/molecules/alert-box/alert-box.component.mjs +57 -10
- package/esm2022/lib/components/molecules/alert-box/types.mjs +1 -1
- package/esm2022/lib/components/molecules/button-group/button-group.component.mjs +3 -3
- package/esm2022/lib/components/molecules/card/card.component.mjs +3 -3
- package/esm2022/lib/components/molecules/content-loader/content-loader.component.mjs +3 -3
- package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/file-input/file-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/hint/hint.component.mjs +3 -3
- package/esm2022/lib/components/molecules/layered-card/layered-card.component.mjs +3 -3
- package/esm2022/lib/components/molecules/link/link.component.mjs +3 -3
- package/esm2022/lib/components/molecules/links-cake/links-cake.component.mjs +3 -3
- package/esm2022/lib/components/molecules/notes-box/notes-box.component.mjs +3 -3
- package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/pin-input/pin-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +3 -3
- package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +3 -3
- package/esm2022/lib/components/molecules/searchbar/searchbar.component.mjs +3 -3
- package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/title-block/title-block.component.mjs +3 -3
- package/esm2022/lib/components/organisms/banner/banner.component.mjs +3 -3
- package/esm2022/lib/components/organisms/form/form.component.mjs +3 -3
- package/esm2022/lib/components/organisms/header/header.component.mjs +3 -3
- package/esm2022/lib/components/organisms/item-list/item-list.component.mjs +3 -3
- package/esm2022/lib/components/organisms/item-list/types.mjs +1 -1
- package/esm2022/lib/components/organisms/no-content/no-content.component.mjs +3 -3
- package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +3 -3
- package/esm2022/lib/components/organisms/wizard/wizard.component.mjs +3 -3
- package/esm2022/lib/components/templates/layout/layout.component.mjs +2 -2
- package/esm2022/lib/components/types.mjs +1 -1
- package/esm2022/lib/examples/custom-content-demo.component.mjs +3 -3
- package/esm2022/lib/examples/display-demo.component.mjs +518 -0
- package/esm2022/lib/examples/display-simple-example.component.mjs +202 -0
- package/esm2022/lib/examples/multi-language-demo.component.mjs +304 -0
- package/esm2022/lib/services/lang-provider/content.mjs +34 -2
- package/esm2022/lib/services/lang-provider/lang-provider.service.mjs +199 -13
- package/esm2022/lib/services/lang-provider/types.mjs +15 -6
- package/esm2022/lib/shared/utils/reactive-content.mjs +117 -0
- package/esm2022/public-api.mjs +5 -1
- package/fesm2022/valtech-components.mjs +3895 -2358
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/button/button.component.d.ts +10 -3
- package/lib/components/atoms/display/display.component.d.ts +12 -4
- package/lib/components/atoms/display/types.d.ts +13 -3
- package/lib/components/atoms/title/title.component.d.ts +6 -1
- package/lib/components/atoms/title/types.d.ts +29 -3
- package/lib/components/molecules/alert-box/alert-box.component.d.ts +17 -9
- package/lib/components/molecules/alert-box/types.d.ts +29 -0
- package/lib/components/organisms/item-list/types.d.ts +54 -9
- package/lib/components/types.d.ts +12 -3
- package/lib/examples/display-demo.component.d.ts +59 -0
- package/lib/examples/display-simple-example.component.d.ts +23 -0
- package/lib/examples/multi-language-demo.component.d.ts +34 -0
- package/lib/services/lang-provider/content.d.ts +4 -1
- package/lib/services/lang-provider/lang-provider.service.d.ts +64 -2
- package/lib/services/lang-provider/types.d.ts +19 -4
- package/lib/shared/utils/reactive-content.d.ts +109 -0
- package/package.json +4 -2
- package/public-api.d.ts +4 -0
- package/src/lib/components/styles/overrides.scss +583 -0
- package/src/lib/components/styles/variables.scss +7 -3
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { DisplayComponent } from '../components/atoms/display/display.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Ejemplo rápido de uso del componente val-display con contenido reactivo
|
|
6
|
+
*/
|
|
7
|
+
export class DisplayExampleComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
// ✅ Ejemplos de contenido estático
|
|
10
|
+
this.staticTitle = {
|
|
11
|
+
content: 'Este es un título estático',
|
|
12
|
+
color: 'primary',
|
|
13
|
+
size: 'xlarge',
|
|
14
|
+
};
|
|
15
|
+
this.staticSubtitle = {
|
|
16
|
+
content: 'Este es un subtítulo que no cambia',
|
|
17
|
+
color: 'medium',
|
|
18
|
+
size: 'large',
|
|
19
|
+
};
|
|
20
|
+
// ✅ Ejemplos de contenido reactivo (requiere configuración de i18n)
|
|
21
|
+
this.reactiveWelcome = {
|
|
22
|
+
contentConfig: {
|
|
23
|
+
className: 'displayExample',
|
|
24
|
+
key: 'welcome.title',
|
|
25
|
+
fallback: 'Bienvenido a la aplicación',
|
|
26
|
+
},
|
|
27
|
+
color: 'primary',
|
|
28
|
+
size: 'xlarge',
|
|
29
|
+
};
|
|
30
|
+
this.reactiveDescription = {
|
|
31
|
+
contentConfig: {
|
|
32
|
+
className: 'displayExample',
|
|
33
|
+
key: 'welcome.description',
|
|
34
|
+
fallback: 'Esta descripción cambia según el idioma',
|
|
35
|
+
},
|
|
36
|
+
color: 'dark',
|
|
37
|
+
size: 'medium',
|
|
38
|
+
};
|
|
39
|
+
// ✅ Ejemplos con interpolación de variables
|
|
40
|
+
this.userGreeting = {
|
|
41
|
+
contentConfig: {
|
|
42
|
+
className: 'displayExample',
|
|
43
|
+
key: 'user.greeting',
|
|
44
|
+
fallback: 'Hola, {{name}}! Tienes {{messages}} mensajes.',
|
|
45
|
+
interpolation: {
|
|
46
|
+
name: 'María',
|
|
47
|
+
messages: 5,
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
color: 'tertiary',
|
|
51
|
+
size: 'large',
|
|
52
|
+
};
|
|
53
|
+
this.statusMessage = {
|
|
54
|
+
contentConfig: {
|
|
55
|
+
className: 'displayExample',
|
|
56
|
+
key: 'status.online',
|
|
57
|
+
fallback: 'Estado: {{status}} desde {{time}}',
|
|
58
|
+
interpolation: {
|
|
59
|
+
status: 'En línea',
|
|
60
|
+
time: '10:30 AM',
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
color: 'success',
|
|
64
|
+
size: 'small',
|
|
65
|
+
};
|
|
66
|
+
// ✅ Ejemplos de diferentes tamaños
|
|
67
|
+
this.smallText = {
|
|
68
|
+
content: 'Texto pequeño (small)',
|
|
69
|
+
color: 'dark',
|
|
70
|
+
size: 'small',
|
|
71
|
+
};
|
|
72
|
+
this.mediumText = {
|
|
73
|
+
content: 'Texto mediano (medium)',
|
|
74
|
+
color: 'dark',
|
|
75
|
+
size: 'medium',
|
|
76
|
+
};
|
|
77
|
+
this.largeText = {
|
|
78
|
+
content: 'Texto grande (large)',
|
|
79
|
+
color: 'dark',
|
|
80
|
+
size: 'large',
|
|
81
|
+
};
|
|
82
|
+
this.xlargeText = {
|
|
83
|
+
content: 'Texto extra grande (xlarge)',
|
|
84
|
+
color: 'dark',
|
|
85
|
+
size: 'xlarge',
|
|
86
|
+
};
|
|
87
|
+
// ✅ Ejemplos de diferentes colores
|
|
88
|
+
this.primaryText = {
|
|
89
|
+
content: 'Texto color primary',
|
|
90
|
+
color: 'primary',
|
|
91
|
+
size: 'medium',
|
|
92
|
+
};
|
|
93
|
+
this.successText = {
|
|
94
|
+
content: 'Texto color success',
|
|
95
|
+
color: 'success',
|
|
96
|
+
size: 'medium',
|
|
97
|
+
};
|
|
98
|
+
this.warningText = {
|
|
99
|
+
content: 'Texto color warning',
|
|
100
|
+
color: 'warning',
|
|
101
|
+
size: 'medium',
|
|
102
|
+
};
|
|
103
|
+
this.dangerText = {
|
|
104
|
+
content: 'Texto color danger',
|
|
105
|
+
color: 'danger',
|
|
106
|
+
size: 'medium',
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DisplayExampleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
110
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DisplayExampleComponent, isStandalone: true, selector: "app-display-example", ngImport: i0, template: `
|
|
111
|
+
<div class="display-examples">
|
|
112
|
+
<h2>Ejemplos de val-display</h2>
|
|
113
|
+
|
|
114
|
+
<!-- Contenido estático -->
|
|
115
|
+
<div class="section">
|
|
116
|
+
<h3>Contenido Estático</h3>
|
|
117
|
+
<val-display [props]="staticTitle"></val-display>
|
|
118
|
+
<val-display [props]="staticSubtitle"></val-display>
|
|
119
|
+
</div>
|
|
120
|
+
|
|
121
|
+
<!-- Contenido reactivo -->
|
|
122
|
+
<div class="section">
|
|
123
|
+
<h3>Contenido Reactivo</h3>
|
|
124
|
+
<val-display [props]="reactiveWelcome"></val-display>
|
|
125
|
+
<val-display [props]="reactiveDescription"></val-display>
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
<!-- Contenido con interpolación -->
|
|
129
|
+
<div class="section">
|
|
130
|
+
<h3>Contenido con Variables</h3>
|
|
131
|
+
<val-display [props]="userGreeting"></val-display>
|
|
132
|
+
<val-display [props]="statusMessage"></val-display>
|
|
133
|
+
</div>
|
|
134
|
+
|
|
135
|
+
<!-- Diferentes tamaños -->
|
|
136
|
+
<div class="section">
|
|
137
|
+
<h3>Diferentes Tamaños</h3>
|
|
138
|
+
<val-display [props]="smallText"></val-display>
|
|
139
|
+
<val-display [props]="mediumText"></val-display>
|
|
140
|
+
<val-display [props]="largeText"></val-display>
|
|
141
|
+
<val-display [props]="xlargeText"></val-display>
|
|
142
|
+
</div>
|
|
143
|
+
|
|
144
|
+
<!-- Diferentes colores -->
|
|
145
|
+
<div class="section">
|
|
146
|
+
<h3>Diferentes Colores</h3>
|
|
147
|
+
<val-display [props]="primaryText"></val-display>
|
|
148
|
+
<val-display [props]="successText"></val-display>
|
|
149
|
+
<val-display [props]="warningText"></val-display>
|
|
150
|
+
<val-display [props]="dangerText"></val-display>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
`, isInline: true, styles: [".display-examples{padding:20px;max-width:800px;margin:0 auto}.section{margin:30px 0;padding:20px;border:1px solid var(--ion-color-light);border-radius:8px;background:var(--ion-color-step-50)}.section h3{margin:0 0 15px;color:var(--ion-color-primary)}val-display{display:block;margin:10px 0}\n"], dependencies: [{ kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }] }); }
|
|
154
|
+
}
|
|
155
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DisplayExampleComponent, decorators: [{
|
|
156
|
+
type: Component,
|
|
157
|
+
args: [{ selector: 'app-display-example', standalone: true, imports: [DisplayComponent], template: `
|
|
158
|
+
<div class="display-examples">
|
|
159
|
+
<h2>Ejemplos de val-display</h2>
|
|
160
|
+
|
|
161
|
+
<!-- Contenido estático -->
|
|
162
|
+
<div class="section">
|
|
163
|
+
<h3>Contenido Estático</h3>
|
|
164
|
+
<val-display [props]="staticTitle"></val-display>
|
|
165
|
+
<val-display [props]="staticSubtitle"></val-display>
|
|
166
|
+
</div>
|
|
167
|
+
|
|
168
|
+
<!-- Contenido reactivo -->
|
|
169
|
+
<div class="section">
|
|
170
|
+
<h3>Contenido Reactivo</h3>
|
|
171
|
+
<val-display [props]="reactiveWelcome"></val-display>
|
|
172
|
+
<val-display [props]="reactiveDescription"></val-display>
|
|
173
|
+
</div>
|
|
174
|
+
|
|
175
|
+
<!-- Contenido con interpolación -->
|
|
176
|
+
<div class="section">
|
|
177
|
+
<h3>Contenido con Variables</h3>
|
|
178
|
+
<val-display [props]="userGreeting"></val-display>
|
|
179
|
+
<val-display [props]="statusMessage"></val-display>
|
|
180
|
+
</div>
|
|
181
|
+
|
|
182
|
+
<!-- Diferentes tamaños -->
|
|
183
|
+
<div class="section">
|
|
184
|
+
<h3>Diferentes Tamaños</h3>
|
|
185
|
+
<val-display [props]="smallText"></val-display>
|
|
186
|
+
<val-display [props]="mediumText"></val-display>
|
|
187
|
+
<val-display [props]="largeText"></val-display>
|
|
188
|
+
<val-display [props]="xlargeText"></val-display>
|
|
189
|
+
</div>
|
|
190
|
+
|
|
191
|
+
<!-- Diferentes colores -->
|
|
192
|
+
<div class="section">
|
|
193
|
+
<h3>Diferentes Colores</h3>
|
|
194
|
+
<val-display [props]="primaryText"></val-display>
|
|
195
|
+
<val-display [props]="successText"></val-display>
|
|
196
|
+
<val-display [props]="warningText"></val-display>
|
|
197
|
+
<val-display [props]="dangerText"></val-display>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
`, styles: [".display-examples{padding:20px;max-width:800px;margin:0 auto}.section{margin:30px 0;padding:20px;border:1px solid var(--ion-color-light);border-radius:8px;background:var(--ion-color-step-50)}.section h3{margin:0 0 15px;color:var(--ion-color-primary)}val-display{display:block;margin:10px 0}\n"] }]
|
|
201
|
+
}] });
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS1zaW1wbGUtZXhhbXBsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9leGFtcGxlcy9kaXNwbGF5LXNpbXBsZS1leGFtcGxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDOztBQUdqRjs7R0FFRztBQTZFSCxNQUFNLE9BQU8sdUJBQXVCO0lBNUVwQztRQTZFRSxtQ0FBbUM7UUFDbkMsZ0JBQVcsR0FBb0I7WUFDN0IsT0FBTyxFQUFFLDRCQUE0QjtZQUNyQyxLQUFLLEVBQUUsU0FBUztZQUNoQixJQUFJLEVBQUUsUUFBUTtTQUNmLENBQUM7UUFFRixtQkFBYyxHQUFvQjtZQUNoQyxPQUFPLEVBQUUsb0NBQW9DO1lBQzdDLEtBQUssRUFBRSxRQUFRO1lBQ2YsSUFBSSxFQUFFLE9BQU87U0FDZCxDQUFDO1FBRUYsb0VBQW9FO1FBQ3BFLG9CQUFlLEdBQW9CO1lBQ2pDLGFBQWEsRUFBRTtnQkFDYixTQUFTLEVBQUUsZ0JBQWdCO2dCQUMzQixHQUFHLEVBQUUsZUFBZTtnQkFDcEIsUUFBUSxFQUFFLDRCQUE0QjthQUN2QztZQUNELEtBQUssRUFBRSxTQUFTO1lBQ2hCLElBQUksRUFBRSxRQUFRO1NBQ2YsQ0FBQztRQUVGLHdCQUFtQixHQUFvQjtZQUNyQyxhQUFhLEVBQUU7Z0JBQ2IsU0FBUyxFQUFFLGdCQUFnQjtnQkFDM0IsR0FBRyxFQUFFLHFCQUFxQjtnQkFDMUIsUUFBUSxFQUFFLHlDQUF5QzthQUNwRDtZQUNELEtBQUssRUFBRSxNQUFNO1lBQ2IsSUFBSSxFQUFFLFFBQVE7U0FDZixDQUFDO1FBRUYsNENBQTRDO1FBQzVDLGlCQUFZLEdBQW9CO1lBQzlCLGFBQWEsRUFBRTtnQkFDYixTQUFTLEVBQUUsZ0JBQWdCO2dCQUMzQixHQUFHLEVBQUUsZUFBZTtnQkFDcEIsUUFBUSxFQUFFLCtDQUErQztnQkFDekQsYUFBYSxFQUFFO29CQUNiLElBQUksRUFBRSxPQUFPO29CQUNiLFFBQVEsRUFBRSxDQUFDO2lCQUNaO2FBQ0Y7WUFDRCxLQUFLLEVBQUUsVUFBVTtZQUNqQixJQUFJLEVBQUUsT0FBTztTQUNkLENBQUM7UUFFRixrQkFBYSxHQUFvQjtZQUMvQixhQUFhLEVBQUU7Z0JBQ2IsU0FBUyxFQUFFLGdCQUFnQjtnQkFDM0IsR0FBRyxFQUFFLGVBQWU7Z0JBQ3BCLFFBQVEsRUFBRSxtQ0FBbUM7Z0JBQzdDLGFBQWEsRUFBRTtvQkFDYixNQUFNLEVBQUUsVUFBVTtvQkFDbEIsSUFBSSxFQUFFLFVBQVU7aUJBQ2pCO2FBQ0Y7WUFDRCxLQUFLLEVBQUUsU0FBUztZQUNoQixJQUFJLEVBQUUsT0FBTztTQUNkLENBQUM7UUFFRixtQ0FBbUM7UUFDbkMsY0FBUyxHQUFvQjtZQUMzQixPQUFPLEVBQUUsdUJBQXVCO1lBQ2hDLEtBQUssRUFBRSxNQUFNO1lBQ2IsSUFBSSxFQUFFLE9BQU87U0FDZCxDQUFDO1FBRUYsZUFBVSxHQUFvQjtZQUM1QixPQUFPLEVBQUUsd0JBQXdCO1lBQ2pDLEtBQUssRUFBRSxNQUFNO1lBQ2IsSUFBSSxFQUFFLFFBQVE7U0FDZixDQUFDO1FBRUYsY0FBUyxHQUFvQjtZQUMzQixPQUFPLEVBQUUsc0JBQXNCO1lBQy9CLEtBQUssRUFBRSxNQUFNO1lBQ2IsSUFBSSxFQUFFLE9BQU87U0FDZCxDQUFDO1FBRUYsZUFBVSxHQUFvQjtZQUM1QixPQUFPLEVBQUUsNkJBQTZCO1lBQ3RDLEtBQUssRUFBRSxNQUFNO1lBQ2IsSUFBSSxFQUFFLFFBQVE7U0FDZixDQUFDO1FBRUYsbUNBQW1DO1FBQ25DLGdCQUFXLEdBQW9CO1lBQzdCLE9BQU8sRUFBRSxxQkFBcUI7WUFDOUIsS0FBSyxFQUFFLFNBQVM7WUFDaEIsSUFBSSxFQUFFLFFBQVE7U0FDZixDQUFDO1FBRUYsZ0JBQVcsR0FBb0I7WUFDN0IsT0FBTyxFQUFFLHFCQUFxQjtZQUM5QixLQUFLLEVBQUUsU0FBUztZQUNoQixJQUFJLEVBQUUsUUFBUTtTQUNmLENBQUM7UUFFRixnQkFBVyxHQUFvQjtZQUM3QixPQUFPLEVBQUUscUJBQXFCO1lBQzlCLEtBQUssRUFBRSxTQUFTO1lBQ2hCLElBQUksRUFBRSxRQUFRO1NBQ2YsQ0FBQztRQUVGLGVBQVUsR0FBb0I7WUFDNUIsT0FBTyxFQUFFLG9CQUFvQjtZQUM3QixLQUFLLEVBQUUsUUFBUTtZQUNmLElBQUksRUFBRSxRQUFRO1NBQ2YsQ0FBQztLQUNIOytHQWpIWSx1QkFBdUI7bUdBQXZCLHVCQUF1QiwrRUF4RXhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkNULDhXQTVDUyxnQkFBZ0I7OzRGQXlFZix1QkFBdUI7a0JBNUVuQyxTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUNqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlzcGxheUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5TWV0YWRhdGEgfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL2Rpc3BsYXkvdHlwZXMnO1xuXG4vKipcbiAqIEVqZW1wbG8gcsOhcGlkbyBkZSB1c28gZGVsIGNvbXBvbmVudGUgdmFsLWRpc3BsYXkgY29uIGNvbnRlbmlkbyByZWFjdGl2b1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZGlzcGxheS1leGFtcGxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0Rpc3BsYXlDb21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJkaXNwbGF5LWV4YW1wbGVzXCI+XG4gICAgICA8aDI+RWplbXBsb3MgZGUgdmFsLWRpc3BsYXk8L2gyPlxuXG4gICAgICA8IS0tIENvbnRlbmlkbyBlc3TDoXRpY28gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICA8aDM+Q29udGVuaWRvIEVzdMOhdGljbzwvaDM+XG4gICAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwic3RhdGljVGl0bGVcIj48L3ZhbC1kaXNwbGF5PlxuICAgICAgICA8dmFsLWRpc3BsYXkgW3Byb3BzXT1cInN0YXRpY1N1YnRpdGxlXCI+PC92YWwtZGlzcGxheT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENvbnRlbmlkbyByZWFjdGl2byAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgIDxoMz5Db250ZW5pZG8gUmVhY3Rpdm88L2gzPlxuICAgICAgICA8dmFsLWRpc3BsYXkgW3Byb3BzXT1cInJlYWN0aXZlV2VsY29tZVwiPjwvdmFsLWRpc3BsYXk+XG4gICAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwicmVhY3RpdmVEZXNjcmlwdGlvblwiPjwvdmFsLWRpc3BsYXk+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBDb250ZW5pZG8gY29uIGludGVycG9sYWNpw7NuIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgPGgzPkNvbnRlbmlkbyBjb24gVmFyaWFibGVzPC9oMz5cbiAgICAgICAgPHZhbC1kaXNwbGF5IFtwcm9wc109XCJ1c2VyR3JlZXRpbmdcIj48L3ZhbC1kaXNwbGF5PlxuICAgICAgICA8dmFsLWRpc3BsYXkgW3Byb3BzXT1cInN0YXR1c01lc3NhZ2VcIj48L3ZhbC1kaXNwbGF5PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRGlmZXJlbnRlcyB0YW1hw7FvcyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgIDxoMz5EaWZlcmVudGVzIFRhbWHDsW9zPC9oMz5cbiAgICAgICAgPHZhbC1kaXNwbGF5IFtwcm9wc109XCJzbWFsbFRleHRcIj48L3ZhbC1kaXNwbGF5PlxuICAgICAgICA8dmFsLWRpc3BsYXkgW3Byb3BzXT1cIm1lZGl1bVRleHRcIj48L3ZhbC1kaXNwbGF5PlxuICAgICAgICA8dmFsLWRpc3BsYXkgW3Byb3BzXT1cImxhcmdlVGV4dFwiPjwvdmFsLWRpc3BsYXk+XG4gICAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwieGxhcmdlVGV4dFwiPjwvdmFsLWRpc3BsYXk+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEaWZlcmVudGVzIGNvbG9yZXMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICA8aDM+RGlmZXJlbnRlcyBDb2xvcmVzPC9oMz5cbiAgICAgICAgPHZhbC1kaXNwbGF5IFtwcm9wc109XCJwcmltYXJ5VGV4dFwiPjwvdmFsLWRpc3BsYXk+XG4gICAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwic3VjY2Vzc1RleHRcIj48L3ZhbC1kaXNwbGF5PlxuICAgICAgICA8dmFsLWRpc3BsYXkgW3Byb3BzXT1cIndhcm5pbmdUZXh0XCI+PC92YWwtZGlzcGxheT5cbiAgICAgICAgPHZhbC1kaXNwbGF5IFtwcm9wc109XCJkYW5nZXJUZXh0XCI+PC92YWwtZGlzcGxheT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAuZGlzcGxheS1leGFtcGxlcyB7XG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgIG1heC13aWR0aDogODAwcHg7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgfVxuXG4gICAgICAuc2VjdGlvbiB7XG4gICAgICAgIG1hcmdpbjogMzBweCAwO1xuICAgICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tY29sb3ItbGlnaHQpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1zdGVwLTUwKTtcbiAgICAgIH1cblxuICAgICAgLnNlY3Rpb24gaDMge1xuICAgICAgICBtYXJnaW46IDAgMCAxNXB4IDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICB9XG5cbiAgICAgIHZhbC1kaXNwbGF5IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbjogMTBweCAwO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERpc3BsYXlFeGFtcGxlQ29tcG9uZW50IHtcbiAgLy8g4pyFIEVqZW1wbG9zIGRlIGNvbnRlbmlkbyBlc3TDoXRpY29cbiAgc3RhdGljVGl0bGU6IERpc3BsYXlNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OiAnRXN0ZSBlcyB1biB0w610dWxvIGVzdMOhdGljbycsXG4gICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICBzaXplOiAneGxhcmdlJyxcbiAgfTtcblxuICBzdGF0aWNTdWJ0aXRsZTogRGlzcGxheU1ldGFkYXRhID0ge1xuICAgIGNvbnRlbnQ6ICdFc3RlIGVzIHVuIHN1YnTDrXR1bG8gcXVlIG5vIGNhbWJpYScsXG4gICAgY29sb3I6ICdtZWRpdW0nLFxuICAgIHNpemU6ICdsYXJnZScsXG4gIH07XG5cbiAgLy8g4pyFIEVqZW1wbG9zIGRlIGNvbnRlbmlkbyByZWFjdGl2byAocmVxdWllcmUgY29uZmlndXJhY2nDs24gZGUgaTE4bilcbiAgcmVhY3RpdmVXZWxjb21lOiBEaXNwbGF5TWV0YWRhdGEgPSB7XG4gICAgY29udGVudENvbmZpZzoge1xuICAgICAgY2xhc3NOYW1lOiAnZGlzcGxheUV4YW1wbGUnLFxuICAgICAga2V5OiAnd2VsY29tZS50aXRsZScsXG4gICAgICBmYWxsYmFjazogJ0JpZW52ZW5pZG8gYSBsYSBhcGxpY2FjacOzbicsXG4gICAgfSxcbiAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgIHNpemU6ICd4bGFyZ2UnLFxuICB9O1xuXG4gIHJlYWN0aXZlRGVzY3JpcHRpb246IERpc3BsYXlNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50Q29uZmlnOiB7XG4gICAgICBjbGFzc05hbWU6ICdkaXNwbGF5RXhhbXBsZScsXG4gICAgICBrZXk6ICd3ZWxjb21lLmRlc2NyaXB0aW9uJyxcbiAgICAgIGZhbGxiYWNrOiAnRXN0YSBkZXNjcmlwY2nDs24gY2FtYmlhIHNlZ8O6biBlbCBpZGlvbWEnLFxuICAgIH0sXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBzaXplOiAnbWVkaXVtJyxcbiAgfTtcblxuICAvLyDinIUgRWplbXBsb3MgY29uIGludGVycG9sYWNpw7NuIGRlIHZhcmlhYmxlc1xuICB1c2VyR3JlZXRpbmc6IERpc3BsYXlNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50Q29uZmlnOiB7XG4gICAgICBjbGFzc05hbWU6ICdkaXNwbGF5RXhhbXBsZScsXG4gICAgICBrZXk6ICd1c2VyLmdyZWV0aW5nJyxcbiAgICAgIGZhbGxiYWNrOiAnSG9sYSwge3tuYW1lfX0hIFRpZW5lcyB7e21lc3NhZ2VzfX0gbWVuc2FqZXMuJyxcbiAgICAgIGludGVycG9sYXRpb246IHtcbiAgICAgICAgbmFtZTogJ01hcsOtYScsXG4gICAgICAgIG1lc3NhZ2VzOiA1LFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNvbG9yOiAndGVydGlhcnknLFxuICAgIHNpemU6ICdsYXJnZScsXG4gIH07XG5cbiAgc3RhdHVzTWVzc2FnZTogRGlzcGxheU1ldGFkYXRhID0ge1xuICAgIGNvbnRlbnRDb25maWc6IHtcbiAgICAgIGNsYXNzTmFtZTogJ2Rpc3BsYXlFeGFtcGxlJyxcbiAgICAgIGtleTogJ3N0YXR1cy5vbmxpbmUnLFxuICAgICAgZmFsbGJhY2s6ICdFc3RhZG86IHt7c3RhdHVzfX0gZGVzZGUge3t0aW1lfX0nLFxuICAgICAgaW50ZXJwb2xhdGlvbjoge1xuICAgICAgICBzdGF0dXM6ICdFbiBsw61uZWEnLFxuICAgICAgICB0aW1lOiAnMTA6MzAgQU0nLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNvbG9yOiAnc3VjY2VzcycsXG4gICAgc2l6ZTogJ3NtYWxsJyxcbiAgfTtcblxuICAvLyDinIUgRWplbXBsb3MgZGUgZGlmZXJlbnRlcyB0YW1hw7Fvc1xuICBzbWFsbFRleHQ6IERpc3BsYXlNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OiAnVGV4dG8gcGVxdWXDsW8gKHNtYWxsKScsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBzaXplOiAnc21hbGwnLFxuICB9O1xuXG4gIG1lZGl1bVRleHQ6IERpc3BsYXlNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OiAnVGV4dG8gbWVkaWFubyAobWVkaXVtKScsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBzaXplOiAnbWVkaXVtJyxcbiAgfTtcblxuICBsYXJnZVRleHQ6IERpc3BsYXlNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OiAnVGV4dG8gZ3JhbmRlIChsYXJnZSknLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgc2l6ZTogJ2xhcmdlJyxcbiAgfTtcblxuICB4bGFyZ2VUZXh0OiBEaXNwbGF5TWV0YWRhdGEgPSB7XG4gICAgY29udGVudDogJ1RleHRvIGV4dHJhIGdyYW5kZSAoeGxhcmdlKScsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBzaXplOiAneGxhcmdlJyxcbiAgfTtcblxuICAvLyDinIUgRWplbXBsb3MgZGUgZGlmZXJlbnRlcyBjb2xvcmVzXG4gIHByaW1hcnlUZXh0OiBEaXNwbGF5TWV0YWRhdGEgPSB7XG4gICAgY29udGVudDogJ1RleHRvIGNvbG9yIHByaW1hcnknLFxuICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgc2l6ZTogJ21lZGl1bScsXG4gIH07XG5cbiAgc3VjY2Vzc1RleHQ6IERpc3BsYXlNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OiAnVGV4dG8gY29sb3Igc3VjY2VzcycsXG4gICAgY29sb3I6ICdzdWNjZXNzJyxcbiAgICBzaXplOiAnbWVkaXVtJyxcbiAgfTtcblxuICB3YXJuaW5nVGV4dDogRGlzcGxheU1ldGFkYXRhID0ge1xuICAgIGNvbnRlbnQ6ICdUZXh0byBjb2xvciB3YXJuaW5nJyxcbiAgICBjb2xvcjogJ3dhcm5pbmcnLFxuICAgIHNpemU6ICdtZWRpdW0nLFxuICB9O1xuXG4gIGRhbmdlclRleHQ6IERpc3BsYXlNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OiAnVGV4dG8gY29sb3IgZGFuZ2VyJyxcbiAgICBjb2xvcjogJ2RhbmdlcicsXG4gICAgc2l6ZTogJ21lZGl1bScsXG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import { ButtonComponent } from '../components/atoms/button/button.component';
|
|
4
|
+
import { TextComponent } from '../components/atoms/text/text.component';
|
|
5
|
+
import { LANGUAGES } from '../services/lang-provider/types';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../services/content.service";
|
|
8
|
+
import * as i2 from "../services/lang-provider/lang-provider.service";
|
|
9
|
+
import * as i3 from "@angular/common";
|
|
10
|
+
/**
|
|
11
|
+
* MultiLanguageDemoComponent - Demuestra el sistema de idiomas flexible.
|
|
12
|
+
*
|
|
13
|
+
* Este componente muestra cómo el sistema maneja múltiples idiomas,
|
|
14
|
+
* fallbacks automáticos y warnings por traducciones faltantes.
|
|
15
|
+
*/
|
|
16
|
+
export class MultiLanguageDemoComponent {
|
|
17
|
+
constructor(content, langService) {
|
|
18
|
+
this.content = content;
|
|
19
|
+
this.langService = langService;
|
|
20
|
+
this.availableLanguages = [];
|
|
21
|
+
this.analysisResults = null;
|
|
22
|
+
// Global content observables
|
|
23
|
+
this.okButton$ = this.content.fromContent({ key: 'ok' });
|
|
24
|
+
this.cancelButton$ = this.content.fromContent({ key: 'cancel' });
|
|
25
|
+
this.saveButton$ = this.content.fromContent({ key: 'save' });
|
|
26
|
+
this.deleteButton$ = this.content.fromContent({ key: 'delete' });
|
|
27
|
+
// Content that might have missing translations
|
|
28
|
+
this.nextButton$ = this.content.fromContent({ key: 'next', fallback: 'Next' });
|
|
29
|
+
this.finishButton$ = this.content.fromContent({ key: 'finish', fallback: 'Finish' });
|
|
30
|
+
this.searchPlaceholder$ = this.content.fromContent({ key: 'searchPlaceholder', fallback: 'Search...' });
|
|
31
|
+
this.noDataMessage$ = this.content.fromContent({ key: 'noData', fallback: 'No data available' });
|
|
32
|
+
}
|
|
33
|
+
ngOnInit() {
|
|
34
|
+
this.availableLanguages = this.langService.availableLangs;
|
|
35
|
+
}
|
|
36
|
+
switchLanguage(lang) {
|
|
37
|
+
console.log(`Switching to language: ${lang}`);
|
|
38
|
+
this.langService.setLang(lang);
|
|
39
|
+
this.analysisResults = null; // Reset analysis when language changes
|
|
40
|
+
}
|
|
41
|
+
getLanguageName(lang) {
|
|
42
|
+
const names = {
|
|
43
|
+
[LANGUAGES.ES]: 'Español',
|
|
44
|
+
[LANGUAGES.EN]: 'English',
|
|
45
|
+
[LANGUAGES.FR]: 'Français',
|
|
46
|
+
[LANGUAGES.DE]: 'Deutsch',
|
|
47
|
+
pt: 'Português',
|
|
48
|
+
};
|
|
49
|
+
return names[lang] || lang.toUpperCase();
|
|
50
|
+
}
|
|
51
|
+
analyzeCurrentComponent() {
|
|
52
|
+
const componentName = '_global'; // Analyzing global content for this demo
|
|
53
|
+
const availableLanguages = this.langService.getAvailableLanguagesForComponent(componentName);
|
|
54
|
+
const missingKeys = this.langService.getMissingContentKeys(componentName, this.langService.currentLang);
|
|
55
|
+
this.analysisResults = {
|
|
56
|
+
availableLanguages,
|
|
57
|
+
missingKeys,
|
|
58
|
+
};
|
|
59
|
+
console.log('Component analysis results:', this.analysisResults);
|
|
60
|
+
}
|
|
61
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MultiLanguageDemoComponent, deps: [{ token: i1.ContentService }, { token: i2.LangService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
62
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MultiLanguageDemoComponent, isStandalone: true, selector: "val-multi-language-demo", ngImport: i0, template: `
|
|
63
|
+
<div class="multi-lang-demo">
|
|
64
|
+
<h2>Sistema de Idiomas Flexible</h2>
|
|
65
|
+
|
|
66
|
+
<div class="language-info">
|
|
67
|
+
<h3>Información del Sistema:</h3>
|
|
68
|
+
<p><strong>Idioma actual:</strong> {{ langService.currentLang }}</p>
|
|
69
|
+
<p><strong>Idioma por defecto:</strong> {{ langService.defaultLanguage }}</p>
|
|
70
|
+
<p><strong>Idiomas disponibles:</strong> {{ langService.availableLangs.join(', ') }}</p>
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
<div class="language-switcher">
|
|
74
|
+
<h3>Cambiar Idioma:</h3>
|
|
75
|
+
<div class="button-group">
|
|
76
|
+
<button
|
|
77
|
+
*ngFor="let lang of availableLanguages"
|
|
78
|
+
[class.active]="lang === langService.currentLang"
|
|
79
|
+
(click)="switchLanguage(lang)"
|
|
80
|
+
>
|
|
81
|
+
{{ getLanguageName(lang) }}
|
|
82
|
+
</button>
|
|
83
|
+
<!-- Ejemplo de idioma no disponible -->
|
|
84
|
+
<button (click)="switchLanguage('pt')">Português (no disponible)</button>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<div class="content-examples">
|
|
89
|
+
<h3>Contenido Global:</h3>
|
|
90
|
+
<div class="example-grid">
|
|
91
|
+
<val-text
|
|
92
|
+
[props]="{ content: okButton$ | async, size: 'medium', color: 'dark', bold: false, processLinks: false }"
|
|
93
|
+
></val-text>
|
|
94
|
+
<val-text
|
|
95
|
+
[props]="{
|
|
96
|
+
content: cancelButton$ | async,
|
|
97
|
+
size: 'medium',
|
|
98
|
+
color: 'dark',
|
|
99
|
+
bold: false,
|
|
100
|
+
processLinks: false,
|
|
101
|
+
}"
|
|
102
|
+
></val-text>
|
|
103
|
+
<val-text
|
|
104
|
+
[props]="{ content: saveButton$ | async, size: 'medium', color: 'dark', bold: false, processLinks: false }"
|
|
105
|
+
></val-text>
|
|
106
|
+
<val-text
|
|
107
|
+
[props]="{
|
|
108
|
+
content: deleteButton$ | async,
|
|
109
|
+
size: 'medium',
|
|
110
|
+
color: 'dark',
|
|
111
|
+
bold: false,
|
|
112
|
+
processLinks: false,
|
|
113
|
+
}"
|
|
114
|
+
></val-text>
|
|
115
|
+
</div>
|
|
116
|
+
|
|
117
|
+
<h3>Contenido con Fallback (algunas traducciones faltantes):</h3>
|
|
118
|
+
<div class="example-grid">
|
|
119
|
+
<val-text
|
|
120
|
+
[props]="{ content: nextButton$ | async, size: 'medium', color: 'dark', bold: false, processLinks: false }"
|
|
121
|
+
></val-text>
|
|
122
|
+
<val-text
|
|
123
|
+
[props]="{
|
|
124
|
+
content: finishButton$ | async,
|
|
125
|
+
size: 'medium',
|
|
126
|
+
color: 'dark',
|
|
127
|
+
bold: false,
|
|
128
|
+
processLinks: false,
|
|
129
|
+
}"
|
|
130
|
+
></val-text>
|
|
131
|
+
<val-text
|
|
132
|
+
[props]="{
|
|
133
|
+
content: searchPlaceholder$ | async,
|
|
134
|
+
size: 'medium',
|
|
135
|
+
color: 'dark',
|
|
136
|
+
bold: false,
|
|
137
|
+
processLinks: false,
|
|
138
|
+
}"
|
|
139
|
+
></val-text>
|
|
140
|
+
<val-text
|
|
141
|
+
[props]="{
|
|
142
|
+
content: noDataMessage$ | async,
|
|
143
|
+
size: 'medium',
|
|
144
|
+
color: 'dark',
|
|
145
|
+
bold: false,
|
|
146
|
+
processLinks: false,
|
|
147
|
+
}"
|
|
148
|
+
></val-text>
|
|
149
|
+
</div>
|
|
150
|
+
</div>
|
|
151
|
+
|
|
152
|
+
<div class="warning-info">
|
|
153
|
+
<h3>Información de Warnings:</h3>
|
|
154
|
+
<p>
|
|
155
|
+
Abre la consola del navegador para ver los warnings cuando cambies a idiomas con traducciones incompletas
|
|
156
|
+
(francés, alemán).
|
|
157
|
+
</p>
|
|
158
|
+
<p>El sistema automáticamente usará el idioma por defecto o el primer idioma disponible como fallback.</p>
|
|
159
|
+
</div>
|
|
160
|
+
|
|
161
|
+
<div class="component-analysis">
|
|
162
|
+
<h3>Análisis del Componente:</h3>
|
|
163
|
+
<button (click)="analyzeCurrentComponent()">Analizar Contenido</button>
|
|
164
|
+
<div *ngIf="analysisResults" class="analysis-results">
|
|
165
|
+
<p>
|
|
166
|
+
<strong>Idiomas disponibles para este componente:</strong>
|
|
167
|
+
{{ analysisResults.availableLanguages.join(', ') }}
|
|
168
|
+
</p>
|
|
169
|
+
<div *ngIf="analysisResults.missingKeys.length > 0">
|
|
170
|
+
<p>
|
|
171
|
+
<strong>Claves faltantes en {{ langService.currentLang }}:</strong>
|
|
172
|
+
</p>
|
|
173
|
+
<ul>
|
|
174
|
+
<li *ngFor="let key of analysisResults.missingKeys">{{ key }}</li>
|
|
175
|
+
</ul>
|
|
176
|
+
</div>
|
|
177
|
+
</div>
|
|
178
|
+
</div>
|
|
179
|
+
</div>
|
|
180
|
+
`, isInline: true, styles: [".multi-lang-demo{padding:20px;max-width:800px}.language-info,.content-examples,.warning-info,.component-analysis{margin:20px 0;padding:15px;border:1px solid var(--ion-color-light, #f4f5f8);border-radius:8px;background:var(--ion-color-light-tint, #f5f6f9)}.button-group{display:flex;gap:10px;flex-wrap:wrap}.button-group button{padding:8px 16px;border:1px solid var(--ion-color-primary, #3880ff);background:#fff;color:var(--ion-color-primary, #3880ff);border-radius:4px;cursor:pointer;transition:all .2s}.button-group button:hover{background:var(--ion-color-primary-tint, #4992ff);color:#fff}.button-group button.active{background:var(--ion-color-primary, #3880ff);color:#fff}.example-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px;margin-top:10px}.analysis-results{margin-top:10px;padding:10px;background:#fff;border-radius:4px}h2{color:var(--ion-color-primary, #3880ff)}h3{color:var(--ion-color-dark, #222428);margin-bottom:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }] }); }
|
|
181
|
+
}
|
|
182
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MultiLanguageDemoComponent, decorators: [{
|
|
183
|
+
type: Component,
|
|
184
|
+
args: [{ selector: 'val-multi-language-demo', standalone: true, imports: [CommonModule, TextComponent, ButtonComponent], template: `
|
|
185
|
+
<div class="multi-lang-demo">
|
|
186
|
+
<h2>Sistema de Idiomas Flexible</h2>
|
|
187
|
+
|
|
188
|
+
<div class="language-info">
|
|
189
|
+
<h3>Información del Sistema:</h3>
|
|
190
|
+
<p><strong>Idioma actual:</strong> {{ langService.currentLang }}</p>
|
|
191
|
+
<p><strong>Idioma por defecto:</strong> {{ langService.defaultLanguage }}</p>
|
|
192
|
+
<p><strong>Idiomas disponibles:</strong> {{ langService.availableLangs.join(', ') }}</p>
|
|
193
|
+
</div>
|
|
194
|
+
|
|
195
|
+
<div class="language-switcher">
|
|
196
|
+
<h3>Cambiar Idioma:</h3>
|
|
197
|
+
<div class="button-group">
|
|
198
|
+
<button
|
|
199
|
+
*ngFor="let lang of availableLanguages"
|
|
200
|
+
[class.active]="lang === langService.currentLang"
|
|
201
|
+
(click)="switchLanguage(lang)"
|
|
202
|
+
>
|
|
203
|
+
{{ getLanguageName(lang) }}
|
|
204
|
+
</button>
|
|
205
|
+
<!-- Ejemplo de idioma no disponible -->
|
|
206
|
+
<button (click)="switchLanguage('pt')">Português (no disponible)</button>
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
209
|
+
|
|
210
|
+
<div class="content-examples">
|
|
211
|
+
<h3>Contenido Global:</h3>
|
|
212
|
+
<div class="example-grid">
|
|
213
|
+
<val-text
|
|
214
|
+
[props]="{ content: okButton$ | async, size: 'medium', color: 'dark', bold: false, processLinks: false }"
|
|
215
|
+
></val-text>
|
|
216
|
+
<val-text
|
|
217
|
+
[props]="{
|
|
218
|
+
content: cancelButton$ | async,
|
|
219
|
+
size: 'medium',
|
|
220
|
+
color: 'dark',
|
|
221
|
+
bold: false,
|
|
222
|
+
processLinks: false,
|
|
223
|
+
}"
|
|
224
|
+
></val-text>
|
|
225
|
+
<val-text
|
|
226
|
+
[props]="{ content: saveButton$ | async, size: 'medium', color: 'dark', bold: false, processLinks: false }"
|
|
227
|
+
></val-text>
|
|
228
|
+
<val-text
|
|
229
|
+
[props]="{
|
|
230
|
+
content: deleteButton$ | async,
|
|
231
|
+
size: 'medium',
|
|
232
|
+
color: 'dark',
|
|
233
|
+
bold: false,
|
|
234
|
+
processLinks: false,
|
|
235
|
+
}"
|
|
236
|
+
></val-text>
|
|
237
|
+
</div>
|
|
238
|
+
|
|
239
|
+
<h3>Contenido con Fallback (algunas traducciones faltantes):</h3>
|
|
240
|
+
<div class="example-grid">
|
|
241
|
+
<val-text
|
|
242
|
+
[props]="{ content: nextButton$ | async, size: 'medium', color: 'dark', bold: false, processLinks: false }"
|
|
243
|
+
></val-text>
|
|
244
|
+
<val-text
|
|
245
|
+
[props]="{
|
|
246
|
+
content: finishButton$ | async,
|
|
247
|
+
size: 'medium',
|
|
248
|
+
color: 'dark',
|
|
249
|
+
bold: false,
|
|
250
|
+
processLinks: false,
|
|
251
|
+
}"
|
|
252
|
+
></val-text>
|
|
253
|
+
<val-text
|
|
254
|
+
[props]="{
|
|
255
|
+
content: searchPlaceholder$ | async,
|
|
256
|
+
size: 'medium',
|
|
257
|
+
color: 'dark',
|
|
258
|
+
bold: false,
|
|
259
|
+
processLinks: false,
|
|
260
|
+
}"
|
|
261
|
+
></val-text>
|
|
262
|
+
<val-text
|
|
263
|
+
[props]="{
|
|
264
|
+
content: noDataMessage$ | async,
|
|
265
|
+
size: 'medium',
|
|
266
|
+
color: 'dark',
|
|
267
|
+
bold: false,
|
|
268
|
+
processLinks: false,
|
|
269
|
+
}"
|
|
270
|
+
></val-text>
|
|
271
|
+
</div>
|
|
272
|
+
</div>
|
|
273
|
+
|
|
274
|
+
<div class="warning-info">
|
|
275
|
+
<h3>Información de Warnings:</h3>
|
|
276
|
+
<p>
|
|
277
|
+
Abre la consola del navegador para ver los warnings cuando cambies a idiomas con traducciones incompletas
|
|
278
|
+
(francés, alemán).
|
|
279
|
+
</p>
|
|
280
|
+
<p>El sistema automáticamente usará el idioma por defecto o el primer idioma disponible como fallback.</p>
|
|
281
|
+
</div>
|
|
282
|
+
|
|
283
|
+
<div class="component-analysis">
|
|
284
|
+
<h3>Análisis del Componente:</h3>
|
|
285
|
+
<button (click)="analyzeCurrentComponent()">Analizar Contenido</button>
|
|
286
|
+
<div *ngIf="analysisResults" class="analysis-results">
|
|
287
|
+
<p>
|
|
288
|
+
<strong>Idiomas disponibles para este componente:</strong>
|
|
289
|
+
{{ analysisResults.availableLanguages.join(', ') }}
|
|
290
|
+
</p>
|
|
291
|
+
<div *ngIf="analysisResults.missingKeys.length > 0">
|
|
292
|
+
<p>
|
|
293
|
+
<strong>Claves faltantes en {{ langService.currentLang }}:</strong>
|
|
294
|
+
</p>
|
|
295
|
+
<ul>
|
|
296
|
+
<li *ngFor="let key of analysisResults.missingKeys">{{ key }}</li>
|
|
297
|
+
</ul>
|
|
298
|
+
</div>
|
|
299
|
+
</div>
|
|
300
|
+
</div>
|
|
301
|
+
</div>
|
|
302
|
+
`, styles: [".multi-lang-demo{padding:20px;max-width:800px}.language-info,.content-examples,.warning-info,.component-analysis{margin:20px 0;padding:15px;border:1px solid var(--ion-color-light, #f4f5f8);border-radius:8px;background:var(--ion-color-light-tint, #f5f6f9)}.button-group{display:flex;gap:10px;flex-wrap:wrap}.button-group button{padding:8px 16px;border:1px solid var(--ion-color-primary, #3880ff);background:#fff;color:var(--ion-color-primary, #3880ff);border-radius:4px;cursor:pointer;transition:all .2s}.button-group button:hover{background:var(--ion-color-primary-tint, #4992ff);color:#fff}.button-group button.active{background:var(--ion-color-primary, #3880ff);color:#fff}.example-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px;margin-top:10px}.analysis-results{margin-top:10px;padding:10px;background:#fff;border-radius:4px}h2{color:var(--ion-color-primary, #3880ff)}h3{color:var(--ion-color-dark, #222428);margin-bottom:10px}\n"] }]
|
|
303
|
+
}], ctorParameters: () => [{ type: i1.ContentService }, { type: i2.LangService }] });
|
|
304
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktbGFuZ3VhZ2UtZGVtby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9leGFtcGxlcy9tdWx0aS1sYW5ndWFnZS1kZW1vLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBR3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7QUFFNUQ7Ozs7O0dBS0c7QUFpTUgsTUFBTSxPQUFPLDBCQUEwQjtJQWdCckMsWUFDUyxPQUF1QixFQUN2QixXQUF3QjtRQUR4QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWpCakMsdUJBQWtCLEdBQWEsRUFBRSxDQUFDO1FBQ2xDLG9CQUFlLEdBQW1FLElBQUksQ0FBQztRQUV2Riw2QkFBNkI7UUFDN0IsY0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEQsa0JBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzVELGdCQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN4RCxrQkFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFNUQsK0NBQStDO1FBQy9DLGdCQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLGtCQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLHVCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ25HLG1CQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7SUFLekYsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUM7SUFDNUQsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsQ0FBQyx1Q0FBdUM7SUFDdEUsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFZO1FBQzFCLE1BQU0sS0FBSyxHQUEyQjtZQUNwQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTO1lBQ3pCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVM7WUFDekIsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVTtZQUMxQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTO1lBQ3pCLEVBQUUsRUFBRSxXQUFXO1NBQ2hCLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQyx5Q0FBeUM7UUFDMUUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlDQUFpQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFeEcsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQixrQkFBa0I7WUFDbEIsV0FBVztTQUNaLENBQUM7UUFFRixPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNuRSxDQUFDOytHQXJEVSwwQkFBMEI7bUdBQTFCLDBCQUEwQixtRkE1TDNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0hULGtoQ0F2SFMsWUFBWSxxVEFBRSxhQUFhOzs0RkE2TDFCLDBCQUEwQjtrQkFoTXRDLFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3ZCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLFlBQzdDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0hUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL3RleHQvdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgTGFuZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sYW5nLXByb3ZpZGVyL2xhbmctcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMQU5HVUFHRVMgfSBmcm9tICcuLi9zZXJ2aWNlcy9sYW5nLXByb3ZpZGVyL3R5cGVzJztcblxuLyoqXG4gKiBNdWx0aUxhbmd1YWdlRGVtb0NvbXBvbmVudCAtIERlbXVlc3RyYSBlbCBzaXN0ZW1hIGRlIGlkaW9tYXMgZmxleGlibGUuXG4gKlxuICogRXN0ZSBjb21wb25lbnRlIG11ZXN0cmEgY8OzbW8gZWwgc2lzdGVtYSBtYW5lamEgbcO6bHRpcGxlcyBpZGlvbWFzLFxuICogZmFsbGJhY2tzIGF1dG9tw6F0aWNvcyB5IHdhcm5pbmdzIHBvciB0cmFkdWNjaW9uZXMgZmFsdGFudGVzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtbXVsdGktbGFuZ3VhZ2UtZGVtbycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRleHRDb21wb25lbnQsIEJ1dHRvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cIm11bHRpLWxhbmctZGVtb1wiPlxuICAgICAgPGgyPlNpc3RlbWEgZGUgSWRpb21hcyBGbGV4aWJsZTwvaDI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJsYW5ndWFnZS1pbmZvXCI+XG4gICAgICAgIDxoMz5JbmZvcm1hY2nDs24gZGVsIFNpc3RlbWE6PC9oMz5cbiAgICAgICAgPHA+PHN0cm9uZz5JZGlvbWEgYWN0dWFsOjwvc3Ryb25nPiB7eyBsYW5nU2VydmljZS5jdXJyZW50TGFuZyB9fTwvcD5cbiAgICAgICAgPHA+PHN0cm9uZz5JZGlvbWEgcG9yIGRlZmVjdG86PC9zdHJvbmc+IHt7IGxhbmdTZXJ2aWNlLmRlZmF1bHRMYW5ndWFnZSB9fTwvcD5cbiAgICAgICAgPHA+PHN0cm9uZz5JZGlvbWFzIGRpc3BvbmlibGVzOjwvc3Ryb25nPiB7eyBsYW5nU2VydmljZS5hdmFpbGFibGVMYW5ncy5qb2luKCcsICcpIH19PC9wPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJsYW5ndWFnZS1zd2l0Y2hlclwiPlxuICAgICAgICA8aDM+Q2FtYmlhciBJZGlvbWE6PC9oMz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBsYW5nIG9mIGF2YWlsYWJsZUxhbmd1YWdlc1wiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImxhbmcgPT09IGxhbmdTZXJ2aWNlLmN1cnJlbnRMYW5nXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hMYW5ndWFnZShsYW5nKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgZ2V0TGFuZ3VhZ2VOYW1lKGxhbmcpIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPCEtLSBFamVtcGxvIGRlIGlkaW9tYSBubyBkaXNwb25pYmxlIC0tPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInN3aXRjaExhbmd1YWdlKCdwdCcpXCI+UG9ydHVndcOqcyAobm8gZGlzcG9uaWJsZSk8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtZXhhbXBsZXNcIj5cbiAgICAgICAgPGgzPkNvbnRlbmlkbyBHbG9iYWw6PC9oMz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV4YW1wbGUtZ3JpZFwiPlxuICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgW3Byb3BzXT1cInsgY29udGVudDogb2tCdXR0b24kIHwgYXN5bmMsIHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ2RhcmsnLCBib2xkOiBmYWxzZSwgcHJvY2Vzc0xpbmtzOiBmYWxzZSB9XCJcbiAgICAgICAgICA+PC92YWwtdGV4dD5cbiAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGNhbmNlbEJ1dHRvbiQgfCBhc3luYyxcbiAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICBwcm9jZXNzTGlua3M6IGZhbHNlLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPjwvdmFsLXRleHQ+XG4gICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICBbcHJvcHNdPVwieyBjb250ZW50OiBzYXZlQnV0dG9uJCB8IGFzeW5jLCBzaXplOiAnbWVkaXVtJywgY29sb3I6ICdkYXJrJywgYm9sZDogZmFsc2UsIHByb2Nlc3NMaW5rczogZmFsc2UgfVwiXG4gICAgICAgICAgPjwvdmFsLXRleHQ+XG4gICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBjb250ZW50OiBkZWxldGVCdXR0b24kIHwgYXN5bmMsXG4gICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgcHJvY2Vzc0xpbmtzOiBmYWxzZSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID48L3ZhbC10ZXh0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8aDM+Q29udGVuaWRvIGNvbiBGYWxsYmFjayAoYWxndW5hcyB0cmFkdWNjaW9uZXMgZmFsdGFudGVzKTo8L2gzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1ncmlkXCI+XG4gICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICBbcHJvcHNdPVwieyBjb250ZW50OiBuZXh0QnV0dG9uJCB8IGFzeW5jLCBzaXplOiAnbWVkaXVtJywgY29sb3I6ICdkYXJrJywgYm9sZDogZmFsc2UsIHByb2Nlc3NMaW5rczogZmFsc2UgfVwiXG4gICAgICAgICAgPjwvdmFsLXRleHQ+XG4gICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBjb250ZW50OiBmaW5pc2hCdXR0b24kIHwgYXN5bmMsXG4gICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgcHJvY2Vzc0xpbmtzOiBmYWxzZSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID48L3ZhbC10ZXh0PlxuICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgY29udGVudDogc2VhcmNoUGxhY2Vob2xkZXIkIHwgYXN5bmMsXG4gICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgcHJvY2Vzc0xpbmtzOiBmYWxzZSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID48L3ZhbC10ZXh0PlxuICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgY29udGVudDogbm9EYXRhTWVzc2FnZSQgfCBhc3luYyxcbiAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICBwcm9jZXNzTGlua3M6IGZhbHNlLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPjwvdmFsLXRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3YXJuaW5nLWluZm9cIj5cbiAgICAgICAgPGgzPkluZm9ybWFjacOzbiBkZSBXYXJuaW5nczo8L2gzPlxuICAgICAgICA8cD5cbiAgICAgICAgICBBYnJlIGxhIGNvbnNvbGEgZGVsIG5hdmVnYWRvciBwYXJhIHZlciBsb3Mgd2FybmluZ3MgY3VhbmRvIGNhbWJpZXMgYSBpZGlvbWFzIGNvbiB0cmFkdWNjaW9uZXMgaW5jb21wbGV0YXNcbiAgICAgICAgICAoZnJhbmPDqXMsIGFsZW3DoW4pLlxuICAgICAgICA8L3A+XG4gICAgICAgIDxwPkVsIHNpc3RlbWEgYXV0b23DoXRpY2FtZW50ZSB1c2Fyw6EgZWwgaWRpb21hIHBvciBkZWZlY3RvIG8gZWwgcHJpbWVyIGlkaW9tYSBkaXNwb25pYmxlIGNvbW8gZmFsbGJhY2suPC9wPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb21wb25lbnQtYW5hbHlzaXNcIj5cbiAgICAgICAgPGgzPkFuw6FsaXNpcyBkZWwgQ29tcG9uZW50ZTo8L2gzPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhbmFseXplQ3VycmVudENvbXBvbmVudCgpXCI+QW5hbGl6YXIgQ29udGVuaWRvPC9idXR0b24+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJhbmFseXNpc1Jlc3VsdHNcIiBjbGFzcz1cImFuYWx5c2lzLXJlc3VsdHNcIj5cbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIDxzdHJvbmc+SWRpb21hcyBkaXNwb25pYmxlcyBwYXJhIGVzdGUgY29tcG9uZW50ZTo8L3N0cm9uZz5cbiAgICAgICAgICAgIHt7IGFuYWx5c2lzUmVzdWx0cy5hdmFpbGFibGVMYW5ndWFnZXMuam9pbignLCAnKSB9fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYW5hbHlzaXNSZXN1bHRzLm1pc3NpbmdLZXlzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICA8c3Ryb25nPkNsYXZlcyBmYWx0YW50ZXMgZW4ge3sgbGFuZ1NlcnZpY2UuY3VycmVudExhbmcgfX06PC9zdHJvbmc+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQga2V5IG9mIGFuYWx5c2lzUmVzdWx0cy5taXNzaW5nS2V5c1wiPnt7IGtleSB9fTwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAubXVsdGktbGFuZy1kZW1vIHtcbiAgICAgICAgcGFkZGluZzogMjBweDtcbiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDtcbiAgICAgIH1cblxuICAgICAgLmxhbmd1YWdlLWluZm8sXG4gICAgICAuY29udGVudC1leGFtcGxlcyxcbiAgICAgIC53YXJuaW5nLWluZm8sXG4gICAgICAuY29tcG9uZW50LWFuYWx5c2lzIHtcbiAgICAgICAgbWFyZ2luOiAyMHB4IDA7XG4gICAgICAgIHBhZGRpbmc6IDE1cHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlvbi1jb2xvci1saWdodCwgI2Y0ZjVmOCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LXRpbnQsICNmNWY2ZjkpO1xuICAgICAgfVxuXG4gICAgICAuYnV0dG9uLWdyb3VwIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICB9XG5cbiAgICAgIC5idXR0b24tZ3JvdXAgYnV0dG9uIHtcbiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjMzg4MGZmKTtcbiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSwgIzM4ODBmZik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycztcbiAgICAgIH1cblxuICAgICAgLmJ1dHRvbi1ncm91cCBidXR0b246aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeS10aW50LCAjNDk5MmZmKTtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgfVxuXG4gICAgICAuYnV0dG9uLWdyb3VwIGJ1dHRvbi5hY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSwgIzM4ODBmZik7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIH1cblxuICAgICAgLmV4YW1wbGUtZ3JpZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjAwcHgsIDFmcikpO1xuICAgICAgICBnYXA6IDEwcHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICB9XG5cbiAgICAgIC5hbmFseXNpcy1yZXN1bHRzIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICAgICAgcGFkZGluZzogMTBweDtcbiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIH1cblxuICAgICAgaDIge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnksICMzODgwZmYpO1xuICAgICAgfVxuXG4gICAgICBoMyB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyaywgIzIyMjQyOCk7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlMYW5ndWFnZURlbW9Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBhdmFpbGFibGVMYW5ndWFnZXM6IHN0cmluZ1tdID0gW107XG4gIGFuYWx5c2lzUmVzdWx0czogeyBhdmFpbGFibGVMYW5ndWFnZXM6IHN0cmluZ1tdOyBtaXNzaW5nS2V5czogc3RyaW5nW10gfSB8IG51bGwgPSBudWxsO1xuXG4gIC8vIEdsb2JhbCBjb250ZW50IG9ic2VydmFibGVzXG4gIG9rQnV0dG9uJCA9IHRoaXMuY29udGVudC5mcm9tQ29udGVudCh7IGtleTogJ29rJyB9KTtcbiAgY2FuY2VsQnV0dG9uJCA9IHRoaXMuY29udGVudC5mcm9tQ29udGVudCh7IGtleTogJ2NhbmNlbCcgfSk7XG4gIHNhdmVCdXR0b24kID0gdGhpcy5jb250ZW50LmZyb21Db250ZW50KHsga2V5OiAnc2F2ZScgfSk7XG4gIGRlbGV0ZUJ1dHRvbiQgPSB0aGlzLmNvbnRlbnQuZnJvbUNvbnRlbnQoeyBrZXk6ICdkZWxldGUnIH0pO1xuXG4gIC8vIENvbnRlbnQgdGhhdCBtaWdodCBoYXZlIG1pc3NpbmcgdHJhbnNsYXRpb25zXG4gIG5leHRCdXR0b24kID0gdGhpcy5jb250ZW50LmZyb21Db250ZW50KHsga2V5OiAnbmV4dCcsIGZhbGxiYWNrOiAnTmV4dCcgfSk7XG4gIGZpbmlzaEJ1dHRvbiQgPSB0aGlzLmNvbnRlbnQuZnJvbUNvbnRlbnQoeyBrZXk6ICdmaW5pc2gnLCBmYWxsYmFjazogJ0ZpbmlzaCcgfSk7XG4gIHNlYXJjaFBsYWNlaG9sZGVyJCA9IHRoaXMuY29udGVudC5mcm9tQ29udGVudCh7IGtleTogJ3NlYXJjaFBsYWNlaG9sZGVyJywgZmFsbGJhY2s6ICdTZWFyY2guLi4nIH0pO1xuICBub0RhdGFNZXNzYWdlJCA9IHRoaXMuY29udGVudC5mcm9tQ29udGVudCh7IGtleTogJ25vRGF0YScsIGZhbGxiYWNrOiAnTm8gZGF0YSBhdmFpbGFibGUnIH0pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb250ZW50OiBDb250ZW50U2VydmljZSxcbiAgICBwdWJsaWMgbGFuZ1NlcnZpY2U6IExhbmdTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyA9IHRoaXMubGFuZ1NlcnZpY2UuYXZhaWxhYmxlTGFuZ3M7XG4gIH1cblxuICBzd2l0Y2hMYW5ndWFnZShsYW5nOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmxvZyhgU3dpdGNoaW5nIHRvIGxhbmd1YWdlOiAke2xhbmd9YCk7XG4gICAgdGhpcy5sYW5nU2VydmljZS5zZXRMYW5nKGxhbmcpO1xuICAgIHRoaXMuYW5hbHlzaXNSZXN1bHRzID0gbnVsbDsgLy8gUmVzZXQgYW5hbHlzaXMgd2hlbiBsYW5ndWFnZSBjaGFuZ2VzXG4gIH1cblxuICBnZXRMYW5ndWFnZU5hbWUobGFuZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBuYW1lczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIFtMQU5HVUFHRVMuRVNdOiAnRXNwYcOxb2wnLFxuICAgICAgW0xBTkdVQUdFUy5FTl06ICdFbmdsaXNoJyxcbiAgICAgIFtMQU5HVUFHRVMuRlJdOiAnRnJhbsOnYWlzJyxcbiAgICAgIFtMQU5HVUFHRVMuREVdOiAnRGV1dHNjaCcsXG4gICAgICBwdDogJ1BvcnR1Z3XDqnMnLFxuICAgIH07XG4gICAgcmV0dXJuIG5hbWVzW2xhbmddIHx8IGxhbmcudG9VcHBlckNhc2UoKTtcbiAgfVxuXG4gIGFuYWx5emVDdXJyZW50Q29tcG9uZW50KCkge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSAnX2dsb2JhbCc7IC8vIEFuYWx5emluZyBnbG9iYWwgY29udGVudCBmb3IgdGhpcyBkZW1vXG4gICAgY29uc3QgYXZhaWxhYmxlTGFuZ3VhZ2VzID0gdGhpcy5sYW5nU2VydmljZS5nZXRBdmFpbGFibGVMYW5ndWFnZXNGb3JDb21wb25lbnQoY29tcG9uZW50TmFtZSk7XG4gICAgY29uc3QgbWlzc2luZ0tleXMgPSB0aGlzLmxhbmdTZXJ2aWNlLmdldE1pc3NpbmdDb250ZW50S2V5cyhjb21wb25lbnROYW1lLCB0aGlzLmxhbmdTZXJ2aWNlLmN1cnJlbnRMYW5nKTtcblxuICAgIHRoaXMuYW5hbHlzaXNSZXN1bHRzID0ge1xuICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzLFxuICAgICAgbWlzc2luZ0tleXMsXG4gICAgfTtcblxuICAgIGNvbnNvbGUubG9nKCdDb21wb25lbnQgYW5hbHlzaXMgcmVzdWx0czonLCB0aGlzLmFuYWx5c2lzUmVzdWx0cyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -3,7 +3,10 @@ import { TextContent } from './types';
|
|
|
3
3
|
/**
|
|
4
4
|
* Global content that can be used across all components.
|
|
5
5
|
* These are common texts like buttons, actions, states, etc.
|
|
6
|
-
* Structure: {es: {key1: 'value1', key2: 'value2'}, en: {key1: 'value1', key2: 'value2'}}
|
|
6
|
+
* Structure: {es: {key1: 'value1', key2: 'value2'}, en: {key1: 'value1', key2: 'value2'}, fr: {...}}
|
|
7
|
+
*
|
|
8
|
+
* Note: You can add any language code. The system will automatically detect available languages
|
|
9
|
+
* and provide intelligent fallbacks with warnings for missing translations.
|
|
7
10
|
*/
|
|
8
11
|
const globalContentData = {
|
|
9
12
|
es: {
|
|
@@ -33,6 +36,7 @@ const globalContentData = {
|
|
|
33
36
|
success: 'Éxito',
|
|
34
37
|
warning: 'Advertencia',
|
|
35
38
|
info: 'Información',
|
|
39
|
+
language: 'Idioma',
|
|
36
40
|
// Common confirmations
|
|
37
41
|
areYouSure: '¿Estás seguro?',
|
|
38
42
|
deleteConfirmation: '¿Estás seguro de que deseas eliminar {itemName}?',
|
|
@@ -74,6 +78,34 @@ const globalContentData = {
|
|
|
74
78
|
// Common placeholders
|
|
75
79
|
searchPlaceholder: 'Search...',
|
|
76
80
|
},
|
|
81
|
+
fr: {
|
|
82
|
+
// Common buttons - Example of partial translation (missing some keys intentionally)
|
|
83
|
+
ok: 'OK',
|
|
84
|
+
cancel: 'Annuler',
|
|
85
|
+
save: 'Sauvegarder',
|
|
86
|
+
delete: 'Supprimer',
|
|
87
|
+
edit: 'Modifier',
|
|
88
|
+
close: 'Fermer',
|
|
89
|
+
back: 'Retour',
|
|
90
|
+
// Common states and messages (intentionally incomplete to show fallback behavior)
|
|
91
|
+
loading: 'Chargement...',
|
|
92
|
+
error: 'Erreur',
|
|
93
|
+
success: 'Succès',
|
|
94
|
+
// Common confirmations
|
|
95
|
+
areYouSure: 'Êtes-vous sûr?',
|
|
96
|
+
},
|
|
97
|
+
de: {
|
|
98
|
+
// Common buttons - Another example of partial translation
|
|
99
|
+
ok: 'OK',
|
|
100
|
+
cancel: 'Abbrechen',
|
|
101
|
+
save: 'Speichern',
|
|
102
|
+
delete: 'Löschen',
|
|
103
|
+
// Common states and messages
|
|
104
|
+
loading: 'Laden...',
|
|
105
|
+
error: 'Fehler',
|
|
106
|
+
// Common confirmations
|
|
107
|
+
areYouSure: 'Sind Sie sicher?',
|
|
108
|
+
},
|
|
77
109
|
};
|
|
78
110
|
const GlobalContent = new TextContent(globalContentData);
|
|
79
111
|
const content = {
|
|
@@ -83,4 +115,4 @@ const content = {
|
|
|
83
115
|
export default content;
|
|
84
116
|
// Export named exports for user convenience
|
|
85
117
|
export { content, GlobalContent, globalContentData };
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRlY2gtY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2VzL2xhbmctcHJvdmlkZXIvY29udGVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFlBQVksTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQW9CLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQU14RDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxpQkFBaUIsR0FBcUI7SUFDMUMsRUFBRSxFQUFFO1FBQ0YsaUJBQWlCO1FBQ2pCLEVBQUUsRUFBRSxTQUFTO1FBQ2IsTUFBTSxFQUFFLFVBQVU7UUFDbEIsSUFBSSxFQUFFLFNBQVM7UUFDZixNQUFNLEVBQUUsVUFBVTtRQUNsQixJQUFJLEVBQUUsUUFBUTtRQUNkLEtBQUssRUFBRSxRQUFRO1FBQ2YsSUFBSSxFQUFFLFFBQVE7UUFDZCxJQUFJLEVBQUUsV0FBVztRQUNqQixRQUFRLEVBQUUsVUFBVTtRQUNwQixNQUFNLEVBQUUsV0FBVztRQUNuQixRQUFRLEVBQUUsV0FBVztRQUVyQixpQkFBaUI7UUFDakIsR0FBRyxFQUFFLFNBQVM7UUFDZCxNQUFNLEVBQUUsUUFBUTtRQUNoQixNQUFNLEVBQUUsUUFBUTtRQUNoQixNQUFNLEVBQUUsU0FBUztRQUNqQixJQUFJLEVBQUUsU0FBUztRQUNmLE9BQU8sRUFBRSxZQUFZO1FBRXJCLDZCQUE2QjtRQUM3QixPQUFPLEVBQUUsYUFBYTtRQUN0QixNQUFNLEVBQUUsMEJBQTBCO1FBQ2xDLEtBQUssRUFBRSxPQUFPO1FBQ2QsT0FBTyxFQUFFLE9BQU87UUFDaEIsT0FBTyxFQUFFLGFBQWE7UUFDdEIsSUFBSSxFQUFFLGFBQWE7UUFDbkIsUUFBUSxFQUFFLFFBQVE7UUFFbEIsdUJBQXVCO1FBQ3ZCLFVBQVUsRUFBRSxnQkFBZ0I7UUFDNUIsa0JBQWtCLEVBQUUsa0RBQWtEO1FBQ3RFLGNBQWMsRUFBRSxnREFBZ0Q7UUFFaEUsc0JBQXNCO1FBQ3RCLGlCQUFpQixFQUFFLFdBQVc7S0FDL0I7SUFDRCxFQUFFLEVBQUU7UUFDRixpQkFBaUI7UUFDakIsRUFBRSxFQUFFLElBQUk7UUFDUixNQUFNLEVBQUUsUUFBUTtRQUNoQixJQUFJLEVBQUUsTUFBTTtRQUNaLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLElBQUksRUFBRSxNQUFNO1FBQ1osS0FBSyxFQUFFLE9BQU87UUFDZCxJQUFJLEVBQUUsTUFBTTtRQUNaLElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLFVBQVU7UUFDcEIsTUFBTSxFQUFFLFFBQVE7UUFDaEIsUUFBUSxFQUFFLFVBQVU7UUFFcEIsaUJBQWlCO1FBQ2pCLEdBQUcsRUFBRSxLQUFLO1FBQ1YsTUFBTSxFQUFFLFFBQVE7UUFDaEIsTUFBTSxFQUFFLFFBQVE7UUFDaEIsTUFBTSxFQUFFLFFBQVE7UUFDaEIsSUFBSSxFQUFFLE1BQU07UUFDWixPQUFPLEVBQUUsU0FBUztRQUVsQiw2QkFBNkI7UUFDN0IsT0FBTyxFQUFFLFlBQVk7UUFDckIsTUFBTSxFQUFFLG1CQUFtQjtRQUMzQixLQUFLLEVBQUUsT0FBTztRQUNkLE9BQU8sRUFBRSxTQUFTO1FBQ2xCLE9BQU8sRUFBRSxTQUFTO1FBQ2xCLElBQUksRUFBRSxhQUFhO1FBRW5CLHVCQUF1QjtRQUN2QixVQUFVLEVBQUUsZUFBZTtRQUMzQixrQkFBa0IsRUFBRSw2Q0FBNkM7UUFDakUsY0FBYyxFQUFFLG9EQUFvRDtRQUVwRSxzQkFBc0I7UUFDdEIsaUJBQWlCLEVBQUUsV0FBVztLQUMvQjtJQUNELEVBQUUsRUFBRTtRQUNGLG9GQUFvRjtRQUNwRixFQUFFLEVBQUUsSUFBSTtRQUNSLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLElBQUksRUFBRSxhQUFhO1FBQ25CLE1BQU0sRUFBRSxXQUFXO1FBQ25CLElBQUksRUFBRSxVQUFVO1FBQ2hCLEtBQUssRUFBRSxRQUFRO1FBQ2YsSUFBSSxFQUFFLFFBQVE7UUFFZCxrRkFBa0Y7UUFDbEYsT0FBTyxFQUFFLGVBQWU7UUFDeEIsS0FBSyxFQUFFLFFBQVE7UUFDZixPQUFPLEVBQUUsUUFBUTtRQUVqQix1QkFBdUI7UUFDdkIsVUFBVSxFQUFFLGdCQUFnQjtLQUM3QjtJQUNELEVBQUUsRUFBRTtRQUNGLDBEQUEwRDtRQUMxRCxFQUFFLEVBQUUsSUFBSTtRQUNSLE1BQU0sRUFBRSxXQUFXO1FBQ25CLElBQUksRUFBRSxXQUFXO1FBQ2pCLE1BQU0sRUFBRSxTQUFTO1FBRWpCLDZCQUE2QjtRQUM3QixPQUFPLEVBQUUsVUFBVTtRQUNuQixLQUFLLEVBQUUsUUFBUTtRQUVmLHVCQUF1QjtRQUN2QixVQUFVLEVBQUUsa0JBQWtCO0tBQy9CO0NBQ0YsQ0FBQztBQUVGLE1BQU0sYUFBYSxHQUFHLElBQUksV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFekQsTUFBTSxPQUFPLEdBQWE7SUFDeEIsT0FBTyxFQUFFLGFBQWE7SUFDdEIsWUFBWTtDQUNiLENBQUM7QUFFRixlQUFlLE9BQU8sQ0FBQztBQUV2Qiw0Q0FBNEM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMYW5nU2V0dGluZ3MgZnJvbSAnLi9jb21wb25lbnRzL2xhbmctc2V0dGluZ3MnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VzQ29udGVudCwgVGV4dENvbnRlbnQgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlciB7XG4gIFt4OiBzdHJpbmddOiBUZXh0Q29udGVudDtcbn1cblxuLyoqXG4gKiBHbG9iYWwgY29udGVudCB0aGF0IGNhbiBiZSB1c2VkIGFjcm9zcyBhbGwgY29tcG9uZW50cy5cbiAqIFRoZXNlIGFyZSBjb21tb24gdGV4dHMgbGlrZSBidXR0b25zLCBhY3Rpb25zLCBzdGF0ZXMsIGV0Yy5cbiAqIFN0cnVjdHVyZToge2VzOiB7a2V5MTogJ3ZhbHVlMScsIGtleTI6ICd2YWx1ZTInfSwgZW46IHtrZXkxOiAndmFsdWUxJywga2V5MjogJ3ZhbHVlMid9LCBmcjogey4uLn19XG4gKlxuICogTm90ZTogWW91IGNhbiBhZGQgYW55IGxhbmd1YWdlIGNvZGUuIFRoZSBzeXN0ZW0gd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCBhdmFpbGFibGUgbGFuZ3VhZ2VzXG4gKiBhbmQgcHJvdmlkZSBpbnRlbGxpZ2VudCBmYWxsYmFja3Mgd2l0aCB3YXJuaW5ncyBmb3IgbWlzc2luZyB0cmFuc2xhdGlvbnMuXG4gKi9cbmNvbnN0IGdsb2JhbENvbnRlbnREYXRhOiBMYW5ndWFnZXNDb250ZW50ID0ge1xuICBlczoge1xuICAgIC8vIENvbW1vbiBidXR0b25zXG4gICAgb2s6ICdBY2VwdGFyJyxcbiAgICBjYW5jZWw6ICdDYW5jZWxhcicsXG4gICAgc2F2ZTogJ0d1YXJkYXInLFxuICAgIGRlbGV0ZTogJ0VsaW1pbmFyJyxcbiAgICBlZGl0OiAnRWRpdGFyJyxcbiAgICBjbG9zZTogJ0NlcnJhcicsXG4gICAgYmFjazogJ1ZvbHZlcicsXG4gICAgbmV4dDogJ1NpZ3VpZW50ZScsXG4gICAgcHJldmlvdXM6ICdBbnRlcmlvcicsXG4gICAgZmluaXNoOiAnRmluYWxpemFyJyxcbiAgICBjb250aW51ZTogJ0NvbnRpbnVhcicsXG5cbiAgICAvLyBDb21tb24gYWN0aW9uc1xuICAgIGFkZDogJ0FncmVnYXInLFxuICAgIHJlbW92ZTogJ1F1aXRhcicsXG4gICAgc2VhcmNoOiAnQnVzY2FyJyxcbiAgICBmaWx0ZXI6ICdGaWx0cmFyJyxcbiAgICBzb3J0OiAnT3JkZW5hcicsXG4gICAgcmVmcmVzaDogJ0FjdHVhbGl6YXInLFxuXG4gICAgLy8gQ29tbW9uIHN0YXRlcyBhbmQgbWVzc2FnZXNcbiAgICBsb2FkaW5nOiAnQ2FyZ2FuZG8uLi4nLFxuICAgIG5vRGF0YTogJ05vIGhheSBkYXRvcyBkaXNwb25pYmxlcycsXG4gICAgZXJyb3I6ICdFcnJvcicsXG4gICAgc3VjY2VzczogJ8OJeGl0bycsXG4gICAgd2FybmluZzogJ0FkdmVydGVuY2lhJyxcbiAgICBpbmZvOiAnSW5mb3JtYWNpw7NuJyxcbiAgICBsYW5ndWFnZTogJ0lkaW9tYScsXG5cbiAgICAvLyBDb21tb24gY29uZmlybWF0aW9uc1xuICAgIGFyZVlvdVN1cmU6ICfCv0VzdMOhcyBzZWd1cm8/JyxcbiAgICBkZWxldGVDb25maXJtYXRpb246ICfCv0VzdMOhcyBzZWd1cm8gZGUgcXVlIGRlc2VhcyBlbGltaW5hciB7aXRlbU5hbWV9PycsXG4gICAgdW5zYXZlZENoYW5nZXM6ICdUaWVuZXMgY2FtYmlvcyBzaW4gZ3VhcmRhci4gwr9EZXNlYXMgY29udGludWFyPycsXG5cbiAgICAvLyBDb21tb24gcGxhY2Vob2xkZXJzXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdCdXNjYXIuLi4nLFxuICB9LFxuICBlbjoge1xuICAgIC8vIENvbW1vbiBidXR0b25zXG4gICAgb2s6ICdPSycsXG4gICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICBzYXZlOiAnU2F2ZScsXG4gICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICBlZGl0OiAnRWRpdCcsXG4gICAgY2xvc2U6ICdDbG9zZScsXG4gICAgYmFjazogJ0JhY2snLFxuICAgIG5leHQ6ICdOZXh0JyxcbiAgICBwcmV2aW91czogJ1ByZXZpb3VzJyxcbiAgICBmaW5pc2g6ICdGaW5pc2gnLFxuICAgIGNvbnRpbnVlOiAnQ29udGludWUnLFxuXG4gICAgLy8gQ29tbW9uIGFjdGlvbnNcbiAgICBhZGQ6ICdBZGQnLFxuICAgIHJlbW92ZTogJ1JlbW92ZScsXG4gICAgc2VhcmNoOiAnU2VhcmNoJyxcbiAgICBmaWx0ZXI6ICdGaWx0ZXInLFxuICAgIHNvcnQ6ICdTb3J0JyxcbiAgICByZWZyZXNoOiAnUmVmcmVzaCcsXG5cbiAgICAvLyBDb21tb24gc3RhdGVzIGFuZCBtZXNzYWdlc1xuICAgIGxvYWRpbmc6ICdMb2FkaW5nLi4uJyxcbiAgICBub0RhdGE6ICdObyBkYXRhIGF2YWlsYWJsZScsXG4gICAgZXJyb3I6ICdFcnJvcicsXG4gICAgc3VjY2VzczogJ1N1Y2Nlc3MnLFxuICAgIHdhcm5pbmc6ICdXYXJuaW5nJyxcbiAgICBpbmZvOiAnSW5mb3JtYXRpb24nLFxuXG4gICAgLy8gQ29tbW9uIGNvbmZpcm1hdGlvbnNcbiAgICBhcmVZb3VTdXJlOiAnQXJlIHlvdSBzdXJlPycsXG4gICAgZGVsZXRlQ29uZmlybWF0aW9uOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB7aXRlbU5hbWV9PycsXG4gICAgdW5zYXZlZENoYW5nZXM6ICdZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPycsXG5cbiAgICAvLyBDb21tb24gcGxhY2Vob2xkZXJzXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdTZWFyY2guLi4nLFxuICB9LFxuICBmcjoge1xuICAgIC8vIENvbW1vbiBidXR0b25zIC0gRXhhbXBsZSBvZiBwYXJ0aWFsIHRyYW5zbGF0aW9uIChtaXNzaW5nIHNvbWUga2V5cyBpbnRlbnRpb25hbGx5KVxuICAgIG9rOiAnT0snLFxuICAgIGNhbmNlbDogJ0FubnVsZXInLFxuICAgIHNhdmU6ICdTYXV2ZWdhcmRlcicsXG4gICAgZGVsZXRlOiAnU3VwcHJpbWVyJyxcbiAgICBlZGl0OiAnTW9kaWZpZXInLFxuICAgIGNsb3NlOiAnRmVybWVyJyxcbiAgICBiYWNrOiAnUmV0b3VyJyxcblxuICAgIC8vIENvbW1vbiBzdGF0ZXMgYW5kIG1lc3NhZ2VzIChpbnRlbnRpb25hbGx5IGluY29tcGxldGUgdG8gc2hvdyBmYWxsYmFjayBiZWhhdmlvcilcbiAgICBsb2FkaW5nOiAnQ2hhcmdlbWVudC4uLicsXG4gICAgZXJyb3I6ICdFcnJldXInLFxuICAgIHN1Y2Nlc3M6ICdTdWNjw6hzJyxcblxuICAgIC8vIENvbW1vbiBjb25maXJtYXRpb25zXG4gICAgYXJlWW91U3VyZTogJ8OKdGVzLXZvdXMgc8O7cj8nLFxuICB9LFxuICBkZToge1xuICAgIC8vIENvbW1vbiBidXR0b25zIC0gQW5vdGhlciBleGFtcGxlIG9mIHBhcnRpYWwgdHJhbnNsYXRpb25cbiAgICBvazogJ09LJyxcbiAgICBjYW5jZWw6ICdBYmJyZWNoZW4nLFxuICAgIHNhdmU6ICdTcGVpY2hlcm4nLFxuICAgIGRlbGV0ZTogJ0zDtnNjaGVuJyxcblxuICAgIC8vIENvbW1vbiBzdGF0ZXMgYW5kIG1lc3NhZ2VzXG4gICAgbG9hZGluZzogJ0xhZGVuLi4uJyxcbiAgICBlcnJvcjogJ0ZlaGxlcicsXG5cbiAgICAvLyBDb21tb24gY29uZmlybWF0aW9uc1xuICAgIGFyZVlvdVN1cmU6ICdTaW5kIFNpZSBzaWNoZXI/JyxcbiAgfSxcbn07XG5cbmNvbnN0IEdsb2JhbENvbnRlbnQgPSBuZXcgVGV4dENvbnRlbnQoZ2xvYmFsQ29udGVudERhdGEpO1xuXG5jb25zdCBjb250ZW50OiBQcm92aWRlciA9IHtcbiAgX2dsb2JhbDogR2xvYmFsQ29udGVudCxcbiAgTGFuZ1NldHRpbmdzLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29udGVudDtcblxuLy8gRXhwb3J0IG5hbWVkIGV4cG9ydHMgZm9yIHVzZXIgY29udmVuaWVuY2VcbmV4cG9ydCB7IGNvbnRlbnQsIEdsb2JhbENvbnRlbnQsIGdsb2JhbENvbnRlbnREYXRhIH07XG4iXX0=
|