valtech-components 2.0.302 → 2.0.304
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/button/button.component.mjs +103 -23
- package/esm2022/lib/components/types.mjs +1 -1
- package/esm2022/lib/services/lang-provider/content.mjs +1 -55
- package/esm2022/lib/services/lang-provider/lang-provider.service.mjs +4 -9
- package/esm2022/lib/shared/utils/content.mjs +2 -8
- package/esm2022/public-api.mjs +1 -12
- package/fesm2022/valtech-components.mjs +124 -2807
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/button/button.component.d.ts +33 -2
- package/lib/components/types.d.ts +19 -7
- package/package.json +1 -1
- package/public-api.d.ts +0 -10
- package/esm2022/lib/examples/comprehensive-link-test.component.mjs +0 -208
- package/esm2022/lib/examples/custom-content-demo.component.mjs +0 -291
- package/esm2022/lib/examples/display-demo.component.mjs +0 -518
- package/esm2022/lib/examples/display-simple-example.component.mjs +0 -202
- package/esm2022/lib/examples/link-processing-example.component.mjs +0 -233
- package/esm2022/lib/examples/multi-language-demo.component.mjs +0 -304
- package/esm2022/lib/examples/reactive-components-demo.component.mjs +0 -303
- package/esm2022/lib/examples/reactivity-test.component.mjs +0 -200
- package/esm2022/lib/examples/selector-examples.component.mjs +0 -234
- package/esm2022/lib/examples/user-issue-test.component.mjs +0 -267
- package/lib/examples/comprehensive-link-test.component.d.ts +0 -23
- package/lib/examples/custom-content-demo.component.d.ts +0 -26
- package/lib/examples/display-demo.component.d.ts +0 -62
- package/lib/examples/display-simple-example.component.d.ts +0 -23
- package/lib/examples/link-processing-example.component.d.ts +0 -26
- package/lib/examples/multi-language-demo.component.d.ts +0 -34
- package/lib/examples/reactive-components-demo.component.d.ts +0 -45
- package/lib/examples/reactivity-test.component.d.ts +0 -27
- package/lib/examples/selector-examples.component.d.ts +0 -21
- package/lib/examples/user-issue-test.component.d.ts +0 -31
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import { LanguageSelectorComponent } from '../components/molecules/language-selector/language-selector.component';
|
|
3
|
-
import { PopoverSelectorComponent } from '../components/molecules/popover-selector/popover-selector.component';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
/**
|
|
6
|
-
* Ejemplo de uso de los componentes popover-selector y language-selector
|
|
7
|
-
*/
|
|
8
|
-
export class SelectorExamplesComponent {
|
|
9
|
-
constructor() {
|
|
10
|
-
// ✅ Ejemplos de Popover Selector Genérico
|
|
11
|
-
this.categorySelector = {
|
|
12
|
-
options: [
|
|
13
|
-
{ value: 'work', label: 'Trabajo', icon: 'briefcase' },
|
|
14
|
-
{ value: 'personal', label: 'Personal', icon: 'person' },
|
|
15
|
-
{ value: 'travel', label: 'Viajes', icon: 'airplane' },
|
|
16
|
-
{ value: 'health', label: 'Salud', icon: 'fitness' },
|
|
17
|
-
],
|
|
18
|
-
selectedValue: 'work',
|
|
19
|
-
label: 'Categoría',
|
|
20
|
-
icon: 'folder',
|
|
21
|
-
color: 'primary',
|
|
22
|
-
size: 'default',
|
|
23
|
-
fill: 'outline',
|
|
24
|
-
};
|
|
25
|
-
this.prioritySelector = {
|
|
26
|
-
options: [
|
|
27
|
-
{ value: 'low', label: 'Baja', icon: 'arrow-down', disabled: false },
|
|
28
|
-
{ value: 'medium', label: 'Media', icon: 'remove' },
|
|
29
|
-
{ value: 'high', label: 'Alta', icon: 'arrow-up' },
|
|
30
|
-
{ value: 'urgent', label: 'Urgente', icon: 'warning' },
|
|
31
|
-
],
|
|
32
|
-
selectedValue: 'medium',
|
|
33
|
-
label: 'Prioridad',
|
|
34
|
-
icon: 'flag',
|
|
35
|
-
color: 'warning',
|
|
36
|
-
size: 'large',
|
|
37
|
-
fill: 'solid',
|
|
38
|
-
shape: 'round',
|
|
39
|
-
};
|
|
40
|
-
this.multipleSelector = {
|
|
41
|
-
options: [
|
|
42
|
-
{ value: 'email', label: 'Email', icon: 'mail' },
|
|
43
|
-
{ value: 'sms', label: 'SMS', icon: 'chatbox' },
|
|
44
|
-
{ value: 'push', label: 'Push', icon: 'notifications' },
|
|
45
|
-
{ value: 'in-app', label: 'In-App', icon: 'apps' },
|
|
46
|
-
],
|
|
47
|
-
selectedValue: ['email', 'push'],
|
|
48
|
-
label: 'Notificaciones',
|
|
49
|
-
icon: 'notifications-circle',
|
|
50
|
-
multiple: true,
|
|
51
|
-
color: 'tertiary',
|
|
52
|
-
size: 'default',
|
|
53
|
-
fill: 'outline',
|
|
54
|
-
showCheckmark: true,
|
|
55
|
-
};
|
|
56
|
-
// ✅ Ejemplos de Language Selector (con soporte multiidioma)
|
|
57
|
-
// Los nombres de idiomas se obtienen automáticamente del sistema de contenido
|
|
58
|
-
// y se muestran traducidos según el idioma actual de la aplicación
|
|
59
|
-
this.basicLanguageSelector = {
|
|
60
|
-
showLabel: true,
|
|
61
|
-
label: 'Idioma',
|
|
62
|
-
color: 'medium',
|
|
63
|
-
size: 'default',
|
|
64
|
-
fill: 'outline',
|
|
65
|
-
};
|
|
66
|
-
// Con banderas y nombres traducidos automáticamente
|
|
67
|
-
this.flagLanguageSelector = {
|
|
68
|
-
showLabel: true,
|
|
69
|
-
label: 'Language / Idioma',
|
|
70
|
-
showFlags: true,
|
|
71
|
-
color: 'primary',
|
|
72
|
-
size: 'large',
|
|
73
|
-
fill: 'solid',
|
|
74
|
-
};
|
|
75
|
-
// Con nombres personalizados (sobrescribe las traducciones automáticas)
|
|
76
|
-
this.customLanguageSelector = {
|
|
77
|
-
showLabel: true,
|
|
78
|
-
labelConfig: {
|
|
79
|
-
className: '_global',
|
|
80
|
-
key: 'language',
|
|
81
|
-
fallback: 'Idioma',
|
|
82
|
-
},
|
|
83
|
-
showFlags: true,
|
|
84
|
-
color: 'secondary',
|
|
85
|
-
size: 'default',
|
|
86
|
-
fill: 'outline',
|
|
87
|
-
shape: 'round',
|
|
88
|
-
customLanguageNames: {
|
|
89
|
-
es: 'Español (España)',
|
|
90
|
-
en: 'English (US)',
|
|
91
|
-
fr: 'Français',
|
|
92
|
-
de: 'Deutsch',
|
|
93
|
-
},
|
|
94
|
-
};
|
|
95
|
-
// Compacto sin etiqueta, solo banderas y nombres traducidos
|
|
96
|
-
this.compactLanguageSelector = {
|
|
97
|
-
showLabel: false,
|
|
98
|
-
showFlags: true,
|
|
99
|
-
color: 'tertiary',
|
|
100
|
-
size: 'small',
|
|
101
|
-
fill: 'clear',
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
// ✅ Event Handlers
|
|
105
|
-
onCategoryChange(category) {
|
|
106
|
-
console.log('Category changed:', category);
|
|
107
|
-
}
|
|
108
|
-
onPriorityChange(priority) {
|
|
109
|
-
console.log('Priority changed:', priority);
|
|
110
|
-
}
|
|
111
|
-
onMultipleChange(notifications) {
|
|
112
|
-
console.log('Notifications changed:', notifications);
|
|
113
|
-
}
|
|
114
|
-
onLanguageChange(language) {
|
|
115
|
-
console.log('Language changed to:', language);
|
|
116
|
-
// La aplicación automáticamente actualizará todos los nombres de idiomas
|
|
117
|
-
// según la nueva configuración de idioma seleccionada
|
|
118
|
-
}
|
|
119
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SelectorExamplesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
120
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SelectorExamplesComponent, isStandalone: true, selector: "app-selector-examples", ngImport: i0, template: `
|
|
121
|
-
<div class="selector-examples">
|
|
122
|
-
<h2>Ejemplos de Selectores</h2>
|
|
123
|
-
|
|
124
|
-
<!-- Popover Selector Genérico -->
|
|
125
|
-
<div class="section">
|
|
126
|
-
<h3>Popover Selector Genérico</h3>
|
|
127
|
-
|
|
128
|
-
<div class="example-group">
|
|
129
|
-
<h4>Selector de Categorías:</h4>
|
|
130
|
-
<val-popover-selector [props]="categorySelector" (selectionChange)="onCategoryChange($event)">
|
|
131
|
-
</val-popover-selector>
|
|
132
|
-
</div>
|
|
133
|
-
|
|
134
|
-
<div class="example-group">
|
|
135
|
-
<h4>Selector de Prioridad:</h4>
|
|
136
|
-
<val-popover-selector [props]="prioritySelector" (selectionChange)="onPriorityChange($event)">
|
|
137
|
-
</val-popover-selector>
|
|
138
|
-
</div>
|
|
139
|
-
|
|
140
|
-
<div class="example-group">
|
|
141
|
-
<h4>Selector Múltiple:</h4>
|
|
142
|
-
<val-popover-selector [props]="multipleSelector" (selectionChange)="onMultipleChange($event)">
|
|
143
|
-
</val-popover-selector>
|
|
144
|
-
</div>
|
|
145
|
-
</div>
|
|
146
|
-
|
|
147
|
-
<!-- Language Selector -->
|
|
148
|
-
<div class="section">
|
|
149
|
-
<h3>Selector de Idioma (Multiidioma)</h3>
|
|
150
|
-
<p>Los nombres de idiomas se muestran traducidos según el idioma actual:</p>
|
|
151
|
-
|
|
152
|
-
<div class="example-group">
|
|
153
|
-
<h4>Selector Básico (nombres traducidos):</h4>
|
|
154
|
-
<val-language-selector [props]="basicLanguageSelector"> </val-language-selector>
|
|
155
|
-
</div>
|
|
156
|
-
|
|
157
|
-
<div class="example-group">
|
|
158
|
-
<h4>Selector con Banderas (nombres traducidos):</h4>
|
|
159
|
-
<val-language-selector [props]="flagLanguageSelector"> </val-language-selector>
|
|
160
|
-
</div>
|
|
161
|
-
|
|
162
|
-
<div class="example-group">
|
|
163
|
-
<h4>Selector Personalizado (nombres propios):</h4>
|
|
164
|
-
<val-language-selector [props]="customLanguageSelector" (languageChange)="onLanguageChange($event)">
|
|
165
|
-
</val-language-selector>
|
|
166
|
-
</div>
|
|
167
|
-
|
|
168
|
-
<div class="example-group">
|
|
169
|
-
<h4>Selector Compacto:</h4>
|
|
170
|
-
<val-language-selector [props]="compactLanguageSelector"> </val-language-selector>
|
|
171
|
-
</div>
|
|
172
|
-
</div>
|
|
173
|
-
</div>
|
|
174
|
-
`, isInline: true, styles: [".selector-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 20px;color:var(--ion-color-primary)}.example-group{margin:20px 0;padding:15px;background:#fff;border-radius:8px;box-shadow:0 2px 4px #0000001a}.example-group h4{margin:0 0 15px;color:var(--ion-color-medium)}\n"], dependencies: [{ kind: "component", type: PopoverSelectorComponent, selector: "val-popover-selector", inputs: ["props"], outputs: ["selectionChange"] }, { kind: "component", type: LanguageSelectorComponent, selector: "val-language-selector", inputs: ["props"], outputs: ["languageChange"] }] }); }
|
|
175
|
-
}
|
|
176
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SelectorExamplesComponent, decorators: [{
|
|
177
|
-
type: Component,
|
|
178
|
-
args: [{ selector: 'app-selector-examples', standalone: true, imports: [PopoverSelectorComponent, LanguageSelectorComponent], template: `
|
|
179
|
-
<div class="selector-examples">
|
|
180
|
-
<h2>Ejemplos de Selectores</h2>
|
|
181
|
-
|
|
182
|
-
<!-- Popover Selector Genérico -->
|
|
183
|
-
<div class="section">
|
|
184
|
-
<h3>Popover Selector Genérico</h3>
|
|
185
|
-
|
|
186
|
-
<div class="example-group">
|
|
187
|
-
<h4>Selector de Categorías:</h4>
|
|
188
|
-
<val-popover-selector [props]="categorySelector" (selectionChange)="onCategoryChange($event)">
|
|
189
|
-
</val-popover-selector>
|
|
190
|
-
</div>
|
|
191
|
-
|
|
192
|
-
<div class="example-group">
|
|
193
|
-
<h4>Selector de Prioridad:</h4>
|
|
194
|
-
<val-popover-selector [props]="prioritySelector" (selectionChange)="onPriorityChange($event)">
|
|
195
|
-
</val-popover-selector>
|
|
196
|
-
</div>
|
|
197
|
-
|
|
198
|
-
<div class="example-group">
|
|
199
|
-
<h4>Selector Múltiple:</h4>
|
|
200
|
-
<val-popover-selector [props]="multipleSelector" (selectionChange)="onMultipleChange($event)">
|
|
201
|
-
</val-popover-selector>
|
|
202
|
-
</div>
|
|
203
|
-
</div>
|
|
204
|
-
|
|
205
|
-
<!-- Language Selector -->
|
|
206
|
-
<div class="section">
|
|
207
|
-
<h3>Selector de Idioma (Multiidioma)</h3>
|
|
208
|
-
<p>Los nombres de idiomas se muestran traducidos según el idioma actual:</p>
|
|
209
|
-
|
|
210
|
-
<div class="example-group">
|
|
211
|
-
<h4>Selector Básico (nombres traducidos):</h4>
|
|
212
|
-
<val-language-selector [props]="basicLanguageSelector"> </val-language-selector>
|
|
213
|
-
</div>
|
|
214
|
-
|
|
215
|
-
<div class="example-group">
|
|
216
|
-
<h4>Selector con Banderas (nombres traducidos):</h4>
|
|
217
|
-
<val-language-selector [props]="flagLanguageSelector"> </val-language-selector>
|
|
218
|
-
</div>
|
|
219
|
-
|
|
220
|
-
<div class="example-group">
|
|
221
|
-
<h4>Selector Personalizado (nombres propios):</h4>
|
|
222
|
-
<val-language-selector [props]="customLanguageSelector" (languageChange)="onLanguageChange($event)">
|
|
223
|
-
</val-language-selector>
|
|
224
|
-
</div>
|
|
225
|
-
|
|
226
|
-
<div class="example-group">
|
|
227
|
-
<h4>Selector Compacto:</h4>
|
|
228
|
-
<val-language-selector [props]="compactLanguageSelector"> </val-language-selector>
|
|
229
|
-
</div>
|
|
230
|
-
</div>
|
|
231
|
-
</div>
|
|
232
|
-
`, styles: [".selector-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 20px;color:var(--ion-color-primary)}.example-group{margin:20px 0;padding:15px;background:#fff;border-radius:8px;box-shadow:0 2px 4px #0000001a}.example-group h4{margin:0 0 15px;color:var(--ion-color-medium)}\n"] }]
|
|
233
|
-
}] });
|
|
234
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0b3ItZXhhbXBsZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGVjaC1jb21wb25lbnRzL3NyYy9saWIvZXhhbXBsZXMvc2VsZWN0b3ItZXhhbXBsZXMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFFbEgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUVBQXFFLENBQUM7O0FBRy9HOztHQUVHO0FBZ0dILE1BQU0sT0FBTyx5QkFBeUI7SUEvRnRDO1FBZ0dFLDBDQUEwQztRQUUxQyxxQkFBZ0IsR0FBNEI7WUFDMUMsT0FBTyxFQUFFO2dCQUNQLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQ3RELEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Z0JBQ3hELEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ3RELEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7YUFDckQ7WUFDRCxhQUFhLEVBQUUsTUFBTTtZQUNyQixLQUFLLEVBQUUsV0FBVztZQUNsQixJQUFJLEVBQUUsUUFBUTtZQUNkLEtBQUssRUFBRSxTQUFTO1lBQ2hCLElBQUksRUFBRSxTQUFTO1lBQ2YsSUFBSSxFQUFFLFNBQVM7U0FDaEIsQ0FBQztRQUVGLHFCQUFnQixHQUE0QjtZQUMxQyxPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxLQUFLLEVBQUUs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QUNkLENBQUM7S0FxQkg7SUFuQkMsbUJBQW1CO0lBRW5CLGdCQUFnQixDQUFDLFFBQTJCO1FBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQTJCO1FBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGdCQUFnQixDQUFDLGFBQWdDO1FBQy9DLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWdCO1FBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUMseUVBQXlFO1FBQ3pFLHNEQUFzRDtJQUN4RCxDQUFDOytHQXpIVSx5QkFBeUI7bUdBQXpCLHlCQUF5QixpRkEzRjFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzRFQsa2ZBdkRTLHdCQUF3QixrSEFBRSx5QkFBeUI7OzRGQTRGbEQseUJBQXlCO2tCQS9GckMsU0FBUzsrQkFDRSx1QkFBdUIsY0FDckIsSUFBSSxXQUNQLENBQUMsd0JBQXdCLEVBQUUseUJBQXlCLENBQUMsWUFDcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNEVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL2xhbmd1YWdlLXNlbGVjdG9yL2xhbmd1YWdlLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgfSBmcm9tICcuLi9jb21wb25lbnRzL21vbGVjdWxlcy9sYW5ndWFnZS1zZWxlY3Rvci90eXBlcyc7XG5pbXBvcnQgeyBQb3BvdmVyU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL21vbGVjdWxlcy9wb3BvdmVyLXNlbGVjdG9yL3BvcG92ZXItc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFBvcG92ZXJTZWxlY3Rvck1ldGFkYXRhIH0gZnJvbSAnLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvcG9wb3Zlci1zZWxlY3Rvci90eXBlcyc7XG5cbi8qKlxuICogRWplbXBsbyBkZSB1c28gZGUgbG9zIGNvbXBvbmVudGVzIHBvcG92ZXItc2VsZWN0b3IgeSBsYW5ndWFnZS1zZWxlY3RvclxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtc2VsZWN0b3ItZXhhbXBsZXMnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUG9wb3ZlclNlbGVjdG9yQ29tcG9uZW50LCBMYW5ndWFnZVNlbGVjdG9yQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0b3ItZXhhbXBsZXNcIj5cbiAgICAgIDxoMj5FamVtcGxvcyBkZSBTZWxlY3RvcmVzPC9oMj5cblxuICAgICAgPCEtLSBQb3BvdmVyIFNlbGVjdG9yIEdlbsOpcmljbyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgIDxoMz5Qb3BvdmVyIFNlbGVjdG9yIEdlbsOpcmljbzwvaDM+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV4YW1wbGUtZ3JvdXBcIj5cbiAgICAgICAgICA8aDQ+U2VsZWN0b3IgZGUgQ2F0ZWdvcsOtYXM6PC9oND5cbiAgICAgICAgICA8dmFsLXBvcG92ZXItc2VsZWN0b3IgW3Byb3BzXT1cImNhdGVnb3J5U2VsZWN0b3JcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQ2F0ZWdvcnlDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgIDwvdmFsLXBvcG92ZXItc2VsZWN0b3I+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLWdyb3VwXCI+XG4gICAgICAgICAgPGg0PlNlbGVjdG9yIGRlIFByaW9yaWRhZDo8L2g0PlxuICAgICAgICAgIDx2YWwtcG9wb3Zlci1zZWxlY3RvciBbcHJvcHNdPVwicHJpb3JpdHlTZWxlY3RvclwiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25Qcmlvcml0eUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgPC92YWwtcG9wb3Zlci1zZWxlY3Rvcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV4YW1wbGUtZ3JvdXBcIj5cbiAgICAgICAgICA8aDQ+U2VsZWN0b3IgTcO6bHRpcGxlOjwvaDQ+XG4gICAgICAgICAgPHZhbC1wb3BvdmVyLXNlbGVjdG9yIFtwcm9wc109XCJtdWx0aXBsZVNlbGVjdG9yXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbk11bHRpcGxlQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICA8L3ZhbC1wb3BvdmVyLXNlbGVjdG9yPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIExhbmd1YWdlIFNlbGVjdG9yIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgPGgzPlNlbGVjdG9yIGRlIElkaW9tYSAoTXVsdGlpZGlvbWEpPC9oMz5cbiAgICAgICAgPHA+TG9zIG5vbWJyZXMgZGUgaWRpb21hcyBzZSBtdWVzdHJhbiB0cmFkdWNpZG9zIHNlZ8O6biBlbCBpZGlvbWEgYWN0dWFsOjwvcD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1ncm91cFwiPlxuICAgICAgICAgIDxoND5TZWxlY3RvciBCw6FzaWNvIChub21icmVzIHRyYWR1Y2lkb3MpOjwvaDQ+XG4gICAgICAgICAgPHZhbC1sYW5ndWFnZS1zZWxlY3RvciBbcHJvcHNdPVwiYmFzaWNMYW5ndWFnZVNlbGVjdG9yXCI+IDwvdmFsLWxhbmd1YWdlLXNlbGVjdG9yPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1ncm91cFwiPlxuICAgICAgICAgIDxoND5TZWxlY3RvciBjb24gQmFuZGVyYXMgKG5vbWJyZXMgdHJhZHVjaWRvcyk6PC9oND5cbiAgICAgICAgICA8dmFsLWxhbmd1YWdlLXNlbGVjdG9yIFtwcm9wc109XCJmbGFnTGFuZ3VhZ2VTZWxlY3RvclwiPiA8L3ZhbC1sYW5ndWFnZS1zZWxlY3Rvcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV4YW1wbGUtZ3JvdXBcIj5cbiAgICAgICAgICA8aDQ+U2VsZWN0b3IgUGVyc29uYWxpemFkbyAobm9tYnJlcyBwcm9waW9zKTo8L2g0PlxuICAgICAgICAgIDx2YWwtbGFuZ3VhZ2Utc2VsZWN0b3IgW3Byb3BzXT1cImN1c3RvbUxhbmd1YWdlU2VsZWN0b3JcIiAobGFuZ3VhZ2VDaGFuZ2UpPVwib25MYW5ndWFnZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgPC92YWwtbGFuZ3VhZ2Utc2VsZWN0b3I+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLWdyb3VwXCI+XG4gICAgICAgICAgPGg0PlNlbGVjdG9yIENvbXBhY3RvOjwvaDQ+XG4gICAgICAgICAgPHZhbC1sYW5ndWFnZS1zZWxlY3RvciBbcHJvcHNdPVwiY29tcGFjdExhbmd1YWdlU2VsZWN0b3JcIj4gPC92YWwtbGFuZ3VhZ2Utc2VsZWN0b3I+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5zZWxlY3Rvci1leGFtcGxlcyB7XG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgIG1heC13aWR0aDogODAwcHg7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgfVxuXG4gICAgICAuc2VjdGlvbiB7XG4gICAgICAgIG1hcmdpbjogMzBweCAwO1xuICAgICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tY29sb3ItbGlnaHQpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1zdGVwLTUwKTtcbiAgICAgIH1cblxuICAgICAgLnNlY3Rpb24gaDMge1xuICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICB9XG5cbiAgICAgIC5leGFtcGxlLWdyb3VwIHtcbiAgICAgICAgbWFyZ2luOiAyMHB4IDA7XG4gICAgICAgIHBhZGRpbmc6IDE1cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIC5leGFtcGxlLWdyb3VwIGg0IHtcbiAgICAgICAgbWFyZ2luOiAwIDAgMTVweCAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0b3JFeGFtcGxlc0NvbXBvbmVudCB7XG4gIC8vIOKchSBFamVtcGxvcyBkZSBQb3BvdmVyIFNlbGVjdG9yIEdlbsOpcmljb1xuXG4gIGNhdGVnb3J5U2VsZWN0b3I6IFBvcG92ZXJTZWxlY3Rvck1ldGFkYXRhID0ge1xuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICd3b3JrJywgbGFiZWw6ICdUcmFiYWpvJywgaWNvbjogJ2JyaWVmY2FzZScgfSxcbiAgICAgIHsgdmFsdWU6ICdwZXJzb25hbCcsIGxhYmVsOiAnUGVyc29uYWwnLCBpY29uOiAncGVyc29uJyB9LFxuICAgICAgeyB2YWx1ZTogJ3RyYXZlbCcsIGxhYmVsOiAnVmlhamVzJywgaWNvbjogJ2FpcnBsYW5lJyB9LFxuICAgICAgeyB2YWx1ZTogJ2hlYWx0aCcsIGxhYmVsOiAnU2FsdWQnLCBpY29uOiAnZml0bmVzcycgfSxcbiAgICBdLFxuICAgIHNlbGVjdGVkVmFsdWU6ICd3b3JrJyxcbiAgICBsYWJlbDogJ0NhdGVnb3LDrWEnLFxuICAgIGljb246ICdmb2xkZXInLFxuICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgfTtcblxuICBwcmlvcml0eVNlbGVjdG9yOiBQb3BvdmVyU2VsZWN0b3JNZXRhZGF0YSA9IHtcbiAgICBvcHRpb25zOiBbXG4gICAgICB7IHZhbHVlOiAnbG93JywgbGFiZWw6ICdCYWphJywgaWNvbjogJ2Fycm93LWRvd24nLCBkaXNhYmxlZDogZmFsc2UgfSxcbiAgICAgIHsgdmFsdWU6ICdtZWRpdW0nLCBsYWJlbDogJ01lZGlhJywgaWNvbjogJ3JlbW92ZScgfSxcbiAgICAgIHsgdmFsdWU6ICdoaWdoJywgbGFiZWw6ICdBbHRhJywgaWNvbjogJ2Fycm93LXVwJyB9LFxuICAgICAgeyB2YWx1ZTogJ3VyZ2VudCcsIGxhYmVsOiAnVXJnZW50ZScsIGljb246ICd3YXJuaW5nJyB9LFxuICAgIF0sXG4gICAgc2VsZWN0ZWRWYWx1ZTogJ21lZGl1bScsXG4gICAgbGFiZWw6ICdQcmlvcmlkYWQnLFxuICAgIGljb246ICdmbGFnJyxcbiAgICBjb2xvcjogJ3dhcm5pbmcnLFxuICAgIHNpemU6ICdsYXJnZScsXG4gICAgZmlsbDogJ3NvbGlkJyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgfTtcblxuICBtdWx0aXBsZVNlbGVjdG9yOiBQb3BvdmVyU2VsZWN0b3JNZXRhZGF0YSA9IHtcbiAgICBvcHRpb25zOiBbXG4gICAgICB7IHZhbHVlOiAnZW1haWwnLCBsYWJlbDogJ0VtYWlsJywgaWNvbjogJ21haWwnIH0sXG4gICAgICB7IHZhbHVlOiAnc21zJywgbGFiZWw6ICdTTVMnLCBpY29uOiAnY2hhdGJveCcgfSxcbiAgICAgIHsgdmFsdWU6ICdwdXNoJywgbGFiZWw6ICdQdXNoJywgaWNvbjogJ25vdGlmaWNhdGlvbnMnIH0sXG4gICAgICB7IHZhbHVlOiAnaW4tYXBwJywgbGFiZWw6ICdJbi1BcHAnLCBpY29uOiAnYXBwcycgfSxcbiAgICBdLFxuICAgIHNlbGVjdGVkVmFsdWU6IFsnZW1haWwnLCAncHVzaCddLFxuICAgIGxhYmVsOiAnTm90aWZpY2FjaW9uZXMnLFxuICAgIGljb246ICdub3RpZmljYXRpb25zLWNpcmNsZScsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgY29sb3I6ICd0ZXJ0aWFyeScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaG93Q2hlY2ttYXJrOiB0cnVlLFxuICB9O1xuXG4gIC8vIOKchSBFamVtcGxvcyBkZSBMYW5ndWFnZSBTZWxlY3RvciAoY29uIHNvcG9ydGUgbXVsdGlpZGlvbWEpXG5cbiAgLy8gTG9zIG5vbWJyZXMgZGUgaWRpb21hcyBzZSBvYnRpZW5lbiBhdXRvbcOhdGljYW1lbnRlIGRlbCBzaXN0ZW1hIGRlIGNvbnRlbmlkb1xuICAvLyB5IHNlIG11ZXN0cmFuIHRyYWR1Y2lkb3Mgc2Vnw7puIGVsIGlkaW9tYSBhY3R1YWwgZGUgbGEgYXBsaWNhY2nDs25cbiAgYmFzaWNMYW5ndWFnZVNlbGVjdG9yOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgPSB7XG4gICAgc2hvd0xhYmVsOiB0cnVlLFxuICAgIGxhYmVsOiAnSWRpb21hJyxcbiAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgfTtcblxuICAvLyBDb24gYmFuZGVyYXMgeSBub21icmVzIHRyYWR1Y2lkb3MgYXV0b23DoXRpY2FtZW50ZVxuICBmbGFnTGFuZ3VhZ2VTZWxlY3RvcjogTGFuZ3VhZ2VTZWxlY3Rvck1ldGFkYXRhID0ge1xuICAgIHNob3dMYWJlbDogdHJ1ZSxcbiAgICBsYWJlbDogJ0xhbmd1YWdlIC8gSWRpb21hJyxcbiAgICBzaG93RmxhZ3M6IHRydWUsXG4gICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICBzaXplOiAnbGFyZ2UnLFxuICAgIGZpbGw6ICdzb2xpZCcsXG4gIH07XG5cbiAgLy8gQ29uIG5vbWJyZXMgcGVyc29uYWxpemFkb3MgKHNvYnJlc2NyaWJlIGxhcyB0cmFkdWNjaW9uZXMgYXV0b23DoXRpY2FzKVxuICBjdXN0b21MYW5ndWFnZVNlbGVjdG9yOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgPSB7XG4gICAgc2hvd0xhYmVsOiB0cnVlLFxuICAgIGxhYmVsQ29uZmlnOiB7XG4gICAgICBjbGFzc05hbWU6ICdfZ2xvYmFsJyxcbiAgICAgIGtleTogJ2xhbmd1YWdlJyxcbiAgICAgIGZhbGxiYWNrOiAnSWRpb21hJyxcbiAgICB9LFxuICAgIHNob3dGbGFnczogdHJ1ZSxcbiAgICBjb2xvcjogJ3NlY29uZGFyeScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICBjdXN0b21MYW5ndWFnZU5hbWVzOiB7XG4gICAgICBlczogJ0VzcGHDsW9sIChFc3Bhw7FhKScsXG4gICAgICBlbjogJ0VuZ2xpc2ggKFVTKScsXG4gICAgICBmcjogJ0ZyYW7Dp2FpcycsXG4gICAgICBkZTogJ0RldXRzY2gnLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gQ29tcGFjdG8gc2luIGV0aXF1ZXRhLCBzb2xvIGJhbmRlcmFzIHkgbm9tYnJlcyB0cmFkdWNpZG9zXG4gIGNvbXBhY3RMYW5ndWFnZVNlbGVjdG9yOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgPSB7XG4gICAgc2hvd0xhYmVsOiBmYWxzZSxcbiAgICBzaG93RmxhZ3M6IHRydWUsXG4gICAgY29sb3I6ICd0ZXJ0aWFyeScsXG4gICAgc2l6ZTogJ3NtYWxsJyxcbiAgICBmaWxsOiAnY2xlYXInLFxuICB9O1xuXG4gIC8vIOKchSBFdmVudCBIYW5kbGVyc1xuXG4gIG9uQ2F0ZWdvcnlDaGFuZ2UoY2F0ZWdvcnk6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgY29uc29sZS5sb2coJ0NhdGVnb3J5IGNoYW5nZWQ6JywgY2F0ZWdvcnkpO1xuICB9XG5cbiAgb25Qcmlvcml0eUNoYW5nZShwcmlvcml0eTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBjb25zb2xlLmxvZygnUHJpb3JpdHkgY2hhbmdlZDonLCBwcmlvcml0eSk7XG4gIH1cblxuICBvbk11bHRpcGxlQ2hhbmdlKG5vdGlmaWNhdGlvbnM6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgY29uc29sZS5sb2coJ05vdGlmaWNhdGlvbnMgY2hhbmdlZDonLCBub3RpZmljYXRpb25zKTtcbiAgfVxuXG4gIG9uTGFuZ3VhZ2VDaGFuZ2UobGFuZ3VhZ2U6IHN0cmluZykge1xuICAgIGNvbnNvbGUubG9nKCdMYW5ndWFnZSBjaGFuZ2VkIHRvOicsIGxhbmd1YWdlKTtcbiAgICAvLyBMYSBhcGxpY2FjacOzbiBhdXRvbcOhdGljYW1lbnRlIGFjdHVhbGl6YXLDoSB0b2RvcyBsb3Mgbm9tYnJlcyBkZSBpZGlvbWFzXG4gICAgLy8gc2Vnw7puIGxhIG51ZXZhIGNvbmZpZ3VyYWNpw7NuIGRlIGlkaW9tYSBzZWxlY2Npb25hZGFcbiAgfVxufVxuIl19
|
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, inject } from '@angular/core';
|
|
3
|
-
import { ContentService } from '../services/content.service';
|
|
4
|
-
import { LangService } from '../services/lang-provider/lang-provider.service';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/common";
|
|
7
|
-
/**
|
|
8
|
-
* Simple test component to diagnose the user's specific issue.
|
|
9
|
-
* Tests the exact pattern the user is using.
|
|
10
|
-
*/
|
|
11
|
-
export class UserIssueTestComponent {
|
|
12
|
-
constructor() {
|
|
13
|
-
this.contentService = inject(ContentService);
|
|
14
|
-
this.langService = inject(LangService);
|
|
15
|
-
// Current language observable
|
|
16
|
-
this.currentLang$ = this.langService.currentLang$;
|
|
17
|
-
// Direct ContentService pattern (what user is trying)
|
|
18
|
-
this.saveButtonDirect$ = this.contentService.fromContent({ key: 'save' });
|
|
19
|
-
this.cancelButtonDirect$ = this.contentService.fromContent({ key: 'cancel' });
|
|
20
|
-
// ContentHelper pattern (user's alternative)
|
|
21
|
-
this.contentHelper = this.contentService.forComponent('_global');
|
|
22
|
-
this.saveButtonHelper$ = this.contentHelper.get('save');
|
|
23
|
-
this.cancelButtonHelper$ = this.contentHelper.get('cancel');
|
|
24
|
-
// Direct LangService for comparison
|
|
25
|
-
this.saveButtonLang$ = this.langService.getContent('_global', 'save');
|
|
26
|
-
this.cancelButtonLang$ = this.langService.getContent('_global', 'cancel');
|
|
27
|
-
// Update counters
|
|
28
|
-
this.directUpdateCount = 0;
|
|
29
|
-
this.helperUpdateCount = 0;
|
|
30
|
-
this.langServiceUpdateCount = 0;
|
|
31
|
-
}
|
|
32
|
-
ngOnInit() {
|
|
33
|
-
console.log('UserIssueTestComponent: Initializing...');
|
|
34
|
-
// Subscribe to count updates
|
|
35
|
-
this.saveButtonDirect$.subscribe(value => {
|
|
36
|
-
this.directUpdateCount++;
|
|
37
|
-
console.log('Direct fromContent updated:', value, 'Count:', this.directUpdateCount);
|
|
38
|
-
});
|
|
39
|
-
this.saveButtonHelper$.subscribe(value => {
|
|
40
|
-
this.helperUpdateCount++;
|
|
41
|
-
console.log('Helper updated:', value, 'Count:', this.helperUpdateCount);
|
|
42
|
-
});
|
|
43
|
-
this.saveButtonLang$.subscribe(value => {
|
|
44
|
-
this.langServiceUpdateCount++;
|
|
45
|
-
console.log('LangService updated:', value, 'Count:', this.langServiceUpdateCount);
|
|
46
|
-
});
|
|
47
|
-
// Log initial state
|
|
48
|
-
console.log('Current language:', this.langService.currentLang);
|
|
49
|
-
console.log('Available languages:', this.langService.availableLangs);
|
|
50
|
-
console.log('Has save content:', this.langService.hasContent('_global', 'save'));
|
|
51
|
-
console.log('Has cancel content:', this.langService.hasContent('_global', 'cancel'));
|
|
52
|
-
}
|
|
53
|
-
switchToSpanish() {
|
|
54
|
-
console.log('Switching to Spanish...');
|
|
55
|
-
this.langService.setLang('es');
|
|
56
|
-
}
|
|
57
|
-
switchToEnglish() {
|
|
58
|
-
console.log('Switching to English...');
|
|
59
|
-
this.langService.setLang('en');
|
|
60
|
-
}
|
|
61
|
-
// Synchronous methods for debugging
|
|
62
|
-
getSaveTextSync() {
|
|
63
|
-
return this.contentService.getText('save', 'Save (fallback)');
|
|
64
|
-
}
|
|
65
|
-
getCancelTextSync() {
|
|
66
|
-
return this.contentService.getText('cancel', 'Cancel (fallback)');
|
|
67
|
-
}
|
|
68
|
-
getAvailableLanguages() {
|
|
69
|
-
return this.langService.availableLangs.join(', ');
|
|
70
|
-
}
|
|
71
|
-
hasContentSave() {
|
|
72
|
-
return this.langService.hasContent('_global', 'save');
|
|
73
|
-
}
|
|
74
|
-
hasContentCancel() {
|
|
75
|
-
return this.langService.hasContent('_global', 'cancel');
|
|
76
|
-
}
|
|
77
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserIssueTestComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
78
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: UserIssueTestComponent, isStandalone: true, selector: "val-user-issue-test", ngImport: i0, template: `
|
|
79
|
-
<div style="padding: 20px; border: 2px solid #007bff; margin: 10px; border-radius: 8px;">
|
|
80
|
-
<h3>User Issue Test - Exact Pattern</h3>
|
|
81
|
-
|
|
82
|
-
<!-- Current Language Display -->
|
|
83
|
-
<div style="margin-bottom: 20px; padding: 10px; background: #f0f8ff; border-radius: 4px;">
|
|
84
|
-
<strong>Current Language:</strong> {{ currentLang$ | async }}
|
|
85
|
-
</div>
|
|
86
|
-
|
|
87
|
-
<!-- Language Switch Buttons -->
|
|
88
|
-
<div style="margin-bottom: 20px;">
|
|
89
|
-
<button
|
|
90
|
-
(click)="switchToSpanish()"
|
|
91
|
-
style="margin-right: 10px; padding: 8px 16px; background: #28a745; color: white; border: none; border-radius: 4px; cursor: pointer;"
|
|
92
|
-
>
|
|
93
|
-
Switch to ES
|
|
94
|
-
</button>
|
|
95
|
-
<button
|
|
96
|
-
(click)="switchToEnglish()"
|
|
97
|
-
style="margin-right: 10px; padding: 8px 16px; background: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer;"
|
|
98
|
-
>
|
|
99
|
-
Switch to EN
|
|
100
|
-
</button>
|
|
101
|
-
</div>
|
|
102
|
-
|
|
103
|
-
<!-- Direct ContentService Tests -->
|
|
104
|
-
<div style="margin-bottom: 20px; padding: 10px; background: #fff3cd; border-radius: 4px;">
|
|
105
|
-
<h4>Direct ContentService fromContent (user's pattern)</h4>
|
|
106
|
-
<div>
|
|
107
|
-
<strong>Save Button:</strong>
|
|
108
|
-
<ng-container *ngIf="saveButtonDirect$ | async as save; else loading">{{ save }}</ng-container>
|
|
109
|
-
</div>
|
|
110
|
-
<div>
|
|
111
|
-
<strong>Cancel Button:</strong>
|
|
112
|
-
<ng-container *ngIf="cancelButtonDirect$ | async as cancel; else loading">{{ cancel }}</ng-container>
|
|
113
|
-
</div>
|
|
114
|
-
</div>
|
|
115
|
-
|
|
116
|
-
<!-- ContentHelper Tests -->
|
|
117
|
-
<div style="margin-bottom: 20px; padding: 10px; background: #d1ecf1; border-radius: 4px;">
|
|
118
|
-
<h4>ContentHelper forComponent (user's helper)</h4>
|
|
119
|
-
<div>
|
|
120
|
-
<strong>Save Button:</strong>
|
|
121
|
-
<ng-container *ngIf="saveButtonHelper$ | async as save; else loading">{{ save }}</ng-container>
|
|
122
|
-
</div>
|
|
123
|
-
<div>
|
|
124
|
-
<strong>Cancel Button:</strong>
|
|
125
|
-
<ng-container *ngIf="cancelButtonHelper$ | async as cancel; else loading">{{ cancel }}</ng-container>
|
|
126
|
-
</div>
|
|
127
|
-
</div>
|
|
128
|
-
|
|
129
|
-
<!-- Direct LangService Tests -->
|
|
130
|
-
<div style="margin-bottom: 20px; padding: 10px; background: '#d4edda'; border-radius: 4px;">
|
|
131
|
-
<h4>Direct LangService (for comparison)</h4>
|
|
132
|
-
<div>
|
|
133
|
-
<strong>Save Button:</strong>
|
|
134
|
-
<ng-container *ngIf="saveButtonLang$ | async as save; else loading">{{ save }}</ng-container>
|
|
135
|
-
</div>
|
|
136
|
-
<div>
|
|
137
|
-
<strong>Cancel Button:</strong>
|
|
138
|
-
<ng-container *ngIf="cancelButtonLang$ | async as cancel; else loading">{{ cancel }}</ng-container>
|
|
139
|
-
</div>
|
|
140
|
-
</div>
|
|
141
|
-
|
|
142
|
-
<ng-template #loading>Loading...</ng-template>
|
|
143
|
-
|
|
144
|
-
<!-- Synchronous Tests -->
|
|
145
|
-
<div style="margin-bottom: 20px; padding: 10px; background: #f8d7da; border-radius: 4px;">
|
|
146
|
-
<h4>Synchronous getText (for reference)</h4>
|
|
147
|
-
<div><strong>Save Button (sync):</strong> {{ getSaveTextSync() }}</div>
|
|
148
|
-
<div><strong>Cancel Button (sync):</strong> {{ getCancelTextSync() }}</div>
|
|
149
|
-
</div>
|
|
150
|
-
|
|
151
|
-
<!-- Debug Information -->
|
|
152
|
-
<div style="margin-bottom: 20px; padding: 10px; background: #e2e3e5; border-radius: 4px;">
|
|
153
|
-
<h4>Debug Info</h4>
|
|
154
|
-
<div><strong>Available Languages:</strong> {{ getAvailableLanguages() }}</div>
|
|
155
|
-
<div><strong>Has 'save' content:</strong> {{ hasContentSave() }}</div>
|
|
156
|
-
<div><strong>Has 'cancel' content:</strong> {{ hasContentCancel() }}</div>
|
|
157
|
-
</div>
|
|
158
|
-
|
|
159
|
-
<!-- Update Counters -->
|
|
160
|
-
<div style="padding: 10px; background: #fff; border: 1px solid #dee2e6; border-radius: 4px;">
|
|
161
|
-
<h4>Update Counters (should increment on language change)</h4>
|
|
162
|
-
<div><strong>Direct fromContent updates:</strong> {{ directUpdateCount }}</div>
|
|
163
|
-
<div><strong>Helper updates:</strong> {{ helperUpdateCount }}</div>
|
|
164
|
-
<div><strong>LangService updates:</strong> {{ langServiceUpdateCount }}</div>
|
|
165
|
-
</div>
|
|
166
|
-
</div>
|
|
167
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
|
|
168
|
-
}
|
|
169
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserIssueTestComponent, decorators: [{
|
|
170
|
-
type: Component,
|
|
171
|
-
args: [{
|
|
172
|
-
selector: 'val-user-issue-test',
|
|
173
|
-
standalone: true,
|
|
174
|
-
imports: [CommonModule],
|
|
175
|
-
template: `
|
|
176
|
-
<div style="padding: 20px; border: 2px solid #007bff; margin: 10px; border-radius: 8px;">
|
|
177
|
-
<h3>User Issue Test - Exact Pattern</h3>
|
|
178
|
-
|
|
179
|
-
<!-- Current Language Display -->
|
|
180
|
-
<div style="margin-bottom: 20px; padding: 10px; background: #f0f8ff; border-radius: 4px;">
|
|
181
|
-
<strong>Current Language:</strong> {{ currentLang$ | async }}
|
|
182
|
-
</div>
|
|
183
|
-
|
|
184
|
-
<!-- Language Switch Buttons -->
|
|
185
|
-
<div style="margin-bottom: 20px;">
|
|
186
|
-
<button
|
|
187
|
-
(click)="switchToSpanish()"
|
|
188
|
-
style="margin-right: 10px; padding: 8px 16px; background: #28a745; color: white; border: none; border-radius: 4px; cursor: pointer;"
|
|
189
|
-
>
|
|
190
|
-
Switch to ES
|
|
191
|
-
</button>
|
|
192
|
-
<button
|
|
193
|
-
(click)="switchToEnglish()"
|
|
194
|
-
style="margin-right: 10px; padding: 8px 16px; background: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer;"
|
|
195
|
-
>
|
|
196
|
-
Switch to EN
|
|
197
|
-
</button>
|
|
198
|
-
</div>
|
|
199
|
-
|
|
200
|
-
<!-- Direct ContentService Tests -->
|
|
201
|
-
<div style="margin-bottom: 20px; padding: 10px; background: #fff3cd; border-radius: 4px;">
|
|
202
|
-
<h4>Direct ContentService fromContent (user's pattern)</h4>
|
|
203
|
-
<div>
|
|
204
|
-
<strong>Save Button:</strong>
|
|
205
|
-
<ng-container *ngIf="saveButtonDirect$ | async as save; else loading">{{ save }}</ng-container>
|
|
206
|
-
</div>
|
|
207
|
-
<div>
|
|
208
|
-
<strong>Cancel Button:</strong>
|
|
209
|
-
<ng-container *ngIf="cancelButtonDirect$ | async as cancel; else loading">{{ cancel }}</ng-container>
|
|
210
|
-
</div>
|
|
211
|
-
</div>
|
|
212
|
-
|
|
213
|
-
<!-- ContentHelper Tests -->
|
|
214
|
-
<div style="margin-bottom: 20px; padding: 10px; background: #d1ecf1; border-radius: 4px;">
|
|
215
|
-
<h4>ContentHelper forComponent (user's helper)</h4>
|
|
216
|
-
<div>
|
|
217
|
-
<strong>Save Button:</strong>
|
|
218
|
-
<ng-container *ngIf="saveButtonHelper$ | async as save; else loading">{{ save }}</ng-container>
|
|
219
|
-
</div>
|
|
220
|
-
<div>
|
|
221
|
-
<strong>Cancel Button:</strong>
|
|
222
|
-
<ng-container *ngIf="cancelButtonHelper$ | async as cancel; else loading">{{ cancel }}</ng-container>
|
|
223
|
-
</div>
|
|
224
|
-
</div>
|
|
225
|
-
|
|
226
|
-
<!-- Direct LangService Tests -->
|
|
227
|
-
<div style="margin-bottom: 20px; padding: 10px; background: '#d4edda'; border-radius: 4px;">
|
|
228
|
-
<h4>Direct LangService (for comparison)</h4>
|
|
229
|
-
<div>
|
|
230
|
-
<strong>Save Button:</strong>
|
|
231
|
-
<ng-container *ngIf="saveButtonLang$ | async as save; else loading">{{ save }}</ng-container>
|
|
232
|
-
</div>
|
|
233
|
-
<div>
|
|
234
|
-
<strong>Cancel Button:</strong>
|
|
235
|
-
<ng-container *ngIf="cancelButtonLang$ | async as cancel; else loading">{{ cancel }}</ng-container>
|
|
236
|
-
</div>
|
|
237
|
-
</div>
|
|
238
|
-
|
|
239
|
-
<ng-template #loading>Loading...</ng-template>
|
|
240
|
-
|
|
241
|
-
<!-- Synchronous Tests -->
|
|
242
|
-
<div style="margin-bottom: 20px; padding: 10px; background: #f8d7da; border-radius: 4px;">
|
|
243
|
-
<h4>Synchronous getText (for reference)</h4>
|
|
244
|
-
<div><strong>Save Button (sync):</strong> {{ getSaveTextSync() }}</div>
|
|
245
|
-
<div><strong>Cancel Button (sync):</strong> {{ getCancelTextSync() }}</div>
|
|
246
|
-
</div>
|
|
247
|
-
|
|
248
|
-
<!-- Debug Information -->
|
|
249
|
-
<div style="margin-bottom: 20px; padding: 10px; background: #e2e3e5; border-radius: 4px;">
|
|
250
|
-
<h4>Debug Info</h4>
|
|
251
|
-
<div><strong>Available Languages:</strong> {{ getAvailableLanguages() }}</div>
|
|
252
|
-
<div><strong>Has 'save' content:</strong> {{ hasContentSave() }}</div>
|
|
253
|
-
<div><strong>Has 'cancel' content:</strong> {{ hasContentCancel() }}</div>
|
|
254
|
-
</div>
|
|
255
|
-
|
|
256
|
-
<!-- Update Counters -->
|
|
257
|
-
<div style="padding: 10px; background: #fff; border: 1px solid #dee2e6; border-radius: 4px;">
|
|
258
|
-
<h4>Update Counters (should increment on language change)</h4>
|
|
259
|
-
<div><strong>Direct fromContent updates:</strong> {{ directUpdateCount }}</div>
|
|
260
|
-
<div><strong>Helper updates:</strong> {{ helperUpdateCount }}</div>
|
|
261
|
-
<div><strong>LangService updates:</strong> {{ langServiceUpdateCount }}</div>
|
|
262
|
-
</div>
|
|
263
|
-
</div>
|
|
264
|
-
`,
|
|
265
|
-
}]
|
|
266
|
-
}] });
|
|
267
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1pc3N1ZS10ZXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRlY2gtY29tcG9uZW50cy9zcmMvbGliL2V4YW1wbGVzL3VzZXItaXNzdWUtdGVzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saURBQWlELENBQUM7OztBQUU5RTs7O0dBR0c7QUFnR0gsTUFBTSxPQUFPLHNCQUFzQjtJQS9GbkM7UUFnR1UsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFMUMsOEJBQThCO1FBQzlCLGlCQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7UUFFN0Msc0RBQXNEO1FBQ3RELHNCQUFpQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDckUsd0JBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUV6RSw2Q0FBNkM7UUFDckMsa0JBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRSxzQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCx3QkFBbUIsR0FBRyxJQUFJ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QUM7SUFDcEQsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQzsrR0FoRlUsc0JBQXNCO21HQUF0QixzQkFBc0IsK0VBM0Z2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5RlQsMkRBMUZTLFlBQVk7OzRGQTRGWCxzQkFBc0I7a0JBL0ZsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5RlQ7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb250ZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBMYW5nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xhbmctcHJvdmlkZXIvbGFuZy1wcm92aWRlci5zZXJ2aWNlJztcblxuLyoqXG4gKiBTaW1wbGUgdGVzdCBjb21wb25lbnQgdG8gZGlhZ25vc2UgdGhlIHVzZXIncyBzcGVjaWZpYyBpc3N1ZS5cbiAqIFRlc3RzIHRoZSBleGFjdCBwYXR0ZXJuIHRoZSB1c2VyIGlzIHVzaW5nLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtdXNlci1pc3N1ZS10ZXN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDIwcHg7IGJvcmRlcjogMnB4IHNvbGlkICMwMDdiZmY7IG1hcmdpbjogMTBweDsgYm9yZGVyLXJhZGl1czogOHB4O1wiPlxuICAgICAgPGgzPlVzZXIgSXNzdWUgVGVzdCAtIEV4YWN0IFBhdHRlcm48L2gzPlxuXG4gICAgICA8IS0tIEN1cnJlbnQgTGFuZ3VhZ2UgRGlzcGxheSAtLT5cbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAyMHB4OyBwYWRkaW5nOiAxMHB4OyBiYWNrZ3JvdW5kOiAjZjBmOGZmOyBib3JkZXItcmFkaXVzOiA0cHg7XCI+XG4gICAgICAgIDxzdHJvbmc+Q3VycmVudCBMYW5ndWFnZTo8L3N0cm9uZz4ge3sgY3VycmVudExhbmckIHwgYXN5bmMgfX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIExhbmd1YWdlIFN3aXRjaCBCdXR0b25zIC0tPlxuICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDIwcHg7XCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVG9TcGFuaXNoKClcIlxuICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4OyBwYWRkaW5nOiA4cHggMTZweDsgYmFja2dyb3VuZDogIzI4YTc0NTsgY29sb3I6IHdoaXRlOyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDRweDsgY3Vyc29yOiBwb2ludGVyO1wiXG4gICAgICAgID5cbiAgICAgICAgICBTd2l0Y2ggdG8gRVNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVG9FbmdsaXNoKClcIlxuICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4OyBwYWRkaW5nOiA4cHggMTZweDsgYmFja2dyb3VuZDogIzAwN2JmZjsgY29sb3I6IHdoaXRlOyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDRweDsgY3Vyc29yOiBwb2ludGVyO1wiXG4gICAgICAgID5cbiAgICAgICAgICBTd2l0Y2ggdG8gRU5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEaXJlY3QgQ29udGVudFNlcnZpY2UgVGVzdHMgLS0+XG4gICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMjBweDsgcGFkZGluZzogMTBweDsgYmFja2dyb3VuZDogI2ZmZjNjZDsgYm9yZGVyLXJhZGl1czogNHB4O1wiPlxuICAgICAgICA8aDQ+RGlyZWN0IENvbnRlbnRTZXJ2aWNlIGZyb21Db250ZW50ICh1c2VyJ3MgcGF0dGVybik8L2g0PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxzdHJvbmc+U2F2ZSBCdXR0b246PC9zdHJvbmc+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNhdmVCdXR0b25EaXJlY3QkIHwgYXN5bmMgYXMgc2F2ZTsgZWxzZSBsb2FkaW5nXCI+e3sgc2F2ZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8c3Ryb25nPkNhbmNlbCBCdXR0b246PC9zdHJvbmc+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbmNlbEJ1dHRvbkRpcmVjdCQgfCBhc3luYyBhcyBjYW5jZWw7IGVsc2UgbG9hZGluZ1wiPnt7IGNhbmNlbCB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENvbnRlbnRIZWxwZXIgVGVzdHMgLS0+XG4gICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMjBweDsgcGFkZGluZzogMTBweDsgYmFja2dyb3VuZDogI2QxZWNmMTsgYm9yZGVyLXJhZGl1czogNHB4O1wiPlxuICAgICAgICA8aDQ+Q29udGVudEhlbHBlciBmb3JDb21wb25lbnQgKHVzZXIncyBoZWxwZXIpPC9oND5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8c3Ryb25nPlNhdmUgQnV0dG9uOjwvc3Ryb25nPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzYXZlQnV0dG9uSGVscGVyJCB8IGFzeW5jIGFzIHNhdmU7IGVsc2UgbG9hZGluZ1wiPnt7IHNhdmUgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHN0cm9uZz5DYW5jZWwgQnV0dG9uOjwvc3Ryb25nPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYW5jZWxCdXR0b25IZWxwZXIkIHwgYXN5bmMgYXMgY2FuY2VsOyBlbHNlIGxvYWRpbmdcIj57eyBjYW5jZWwgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEaXJlY3QgTGFuZ1NlcnZpY2UgVGVzdHMgLS0+XG4gICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMjBweDsgcGFkZGluZzogMTBweDsgYmFja2dyb3VuZDogJyNkNGVkZGEnOyBib3JkZXItcmFkaXVzOiA0cHg7XCI+XG4gICAgICAgIDxoND5EaXJlY3QgTGFuZ1NlcnZpY2UgKGZvciBjb21wYXJpc29uKTwvaDQ+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHN0cm9uZz5TYXZlIEJ1dHRvbjo8L3N0cm9uZz5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2F2ZUJ1dHRvbkxhbmckIHwgYXN5bmMgYXMgc2F2ZTsgZWxzZSBsb2FkaW5nXCI+e3sgc2F2ZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8c3Ryb25nPkNhbmNlbCBCdXR0b246PC9zdHJvbmc+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbmNlbEJ1dHRvbkxhbmckIHwgYXN5bmMgYXMgY2FuY2VsOyBlbHNlIGxvYWRpbmdcIj57eyBjYW5jZWwgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nPkxvYWRpbmcuLi48L25nLXRlbXBsYXRlPlxuXG4gICAgICA8IS0tIFN5bmNocm9ub3VzIFRlc3RzIC0tPlxuICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDIwcHg7IHBhZGRpbmc6IDEwcHg7IGJhY2tncm91bmQ6ICNmOGQ3ZGE7IGJvcmRlci1yYWRpdXM6IDRweDtcIj5cbiAgICAgICAgPGg0PlN5bmNocm9ub3VzIGdldFRleHQgKGZvciByZWZlcmVuY2UpPC9oND5cbiAgICAgICAgPGRpdj48c3Ryb25nPlNhdmUgQnV0dG9uIChzeW5jKTo8L3N0cm9uZz4ge3sgZ2V0U2F2ZVRleHRTeW5jKCkgfX08L2Rpdj5cbiAgICAgICAgPGRpdj48c3Ryb25nPkNhbmNlbCBCdXR0b24gKHN5bmMpOjwvc3Ryb25nPiB7eyBnZXRDYW5jZWxUZXh0U3luYygpIH19PC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEZWJ1ZyBJbmZvcm1hdGlvbiAtLT5cbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAyMHB4OyBwYWRkaW5nOiAxMHB4OyBiYWNrZ3JvdW5kOiAjZTJlM2U1OyBib3JkZXItcmFkaXVzOiA0cHg7XCI+XG4gICAgICAgIDxoND5EZWJ1ZyBJbmZvPC9oND5cbiAgICAgICAgPGRpdj48c3Ryb25nPkF2YWlsYWJsZSBMYW5ndWFnZXM6PC9zdHJvbmc+IHt7IGdldEF2YWlsYWJsZUxhbmd1YWdlcygpIH19PC9kaXY+XG4gICAgICAgIDxkaXY+PHN0cm9uZz5IYXMgJ3NhdmUnIGNvbnRlbnQ6PC9zdHJvbmc+IHt7IGhhc0NvbnRlbnRTYXZlKCkgfX08L2Rpdj5cbiAgICAgICAgPGRpdj48c3Ryb25nPkhhcyAnY2FuY2VsJyBjb250ZW50Ojwvc3Ryb25nPiB7eyBoYXNDb250ZW50Q2FuY2VsKCkgfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFVwZGF0ZSBDb3VudGVycyAtLT5cbiAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAxMHB4OyBiYWNrZ3JvdW5kOiAjZmZmOyBib3JkZXI6IDFweCBzb2xpZCAjZGVlMmU2OyBib3JkZXItcmFkaXVzOiA0cHg7XCI+XG4gICAgICAgIDxoND5VcGRhdGUgQ291bnRlcnMgKHNob3VsZCBpbmNyZW1lbnQgb24gbGFuZ3VhZ2UgY2hhbmdlKTwvaDQ+XG4gICAgICAgIDxkaXY+PHN0cm9uZz5EaXJlY3QgZnJvbUNvbnRlbnQgdXBkYXRlczo8L3N0cm9uZz4ge3sgZGlyZWN0VXBkYXRlQ291bnQgfX08L2Rpdj5cbiAgICAgICAgPGRpdj48c3Ryb25nPkhlbHBlciB1cGRhdGVzOjwvc3Ryb25nPiB7eyBoZWxwZXJVcGRhdGVDb3VudCB9fTwvZGl2PlxuICAgICAgICA8ZGl2PjxzdHJvbmc+TGFuZ1NlcnZpY2UgdXBkYXRlczo8L3N0cm9uZz4ge3sgbGFuZ1NlcnZpY2VVcGRhdGVDb3VudCB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJJc3N1ZVRlc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIGNvbnRlbnRTZXJ2aWNlID0gaW5qZWN0KENvbnRlbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBsYW5nU2VydmljZSA9IGluamVjdChMYW5nU2VydmljZSk7XG5cbiAgLy8gQ3VycmVudCBsYW5ndWFnZSBvYnNlcnZhYmxlXG4gIGN1cnJlbnRMYW5nJCA9IHRoaXMubGFuZ1NlcnZpY2UuY3VycmVudExhbmckO1xuXG4gIC8vIERpcmVjdCBDb250ZW50U2VydmljZSBwYXR0ZXJuICh3aGF0IHVzZXIgaXMgdHJ5aW5nKVxuICBzYXZlQnV0dG9uRGlyZWN0JCA9IHRoaXMuY29udGVudFNlcnZpY2UuZnJvbUNvbnRlbnQoeyBrZXk6ICdzYXZlJyB9KTtcbiAgY2FuY2VsQnV0dG9uRGlyZWN0JCA9IHRoaXMuY29udGVudFNlcnZpY2UuZnJvbUNvbnRlbnQoeyBrZXk6ICdjYW5jZWwnIH0pO1xuXG4gIC8vIENvbnRlbnRIZWxwZXIgcGF0dGVybiAodXNlcidzIGFsdGVybmF0aXZlKVxuICBwcml2YXRlIGNvbnRlbnRIZWxwZXIgPSB0aGlzLmNvbnRlbnRTZXJ2aWNlLmZvckNvbXBvbmVudCgnX2dsb2JhbCcpO1xuICBzYXZlQnV0dG9uSGVscGVyJCA9IHRoaXMuY29udGVudEhlbHBlci5nZXQoJ3NhdmUnKTtcbiAgY2FuY2VsQnV0dG9uSGVscGVyJCA9IHRoaXMuY29udGVudEhlbHBlci5nZXQoJ2NhbmNlbCcpO1xuXG4gIC8vIERpcmVjdCBMYW5nU2VydmljZSBmb3IgY29tcGFyaXNvblxuICBzYXZlQnV0dG9uTGFuZyQgPSB0aGlzLmxhbmdTZXJ2aWNlLmdldENvbnRlbnQoJ19nbG9iYWwnLCAnc2F2ZScpO1xuICBjYW5jZWxCdXR0b25MYW5nJCA9IHRoaXMubGFuZ1NlcnZpY2UuZ2V0Q29udGVudCgnX2dsb2JhbCcsICdjYW5jZWwnKTtcblxuICAvLyBVcGRhdGUgY291bnRlcnNcbiAgZGlyZWN0VXBkYXRlQ291bnQgPSAwO1xuICBoZWxwZXJVcGRhdGVDb3VudCA9IDA7XG4gIGxhbmdTZXJ2aWNlVXBkYXRlQ291bnQgPSAwO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnNvbGUubG9nKCdVc2VySXNzdWVUZXN0Q29tcG9uZW50OiBJbml0aWFsaXppbmcuLi4nKTtcblxuICAgIC8vIFN1YnNjcmliZSB0byBjb3VudCB1cGRhdGVzXG4gICAgdGhpcy5zYXZlQnV0dG9uRGlyZWN0JC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5kaXJlY3RVcGRhdGVDb3VudCsrO1xuICAgICAgY29uc29sZS5sb2coJ0RpcmVjdCBmcm9tQ29udGVudCB1cGRhdGVkOicsIHZhbHVlLCAnQ291bnQ6JywgdGhpcy5kaXJlY3RVcGRhdGVDb3VudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNhdmVCdXR0b25IZWxwZXIkLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLmhlbHBlclVwZGF0ZUNvdW50Kys7XG4gICAgICBjb25zb2xlLmxvZygnSGVscGVyIHVwZGF0ZWQ6JywgdmFsdWUsICdDb3VudDonLCB0aGlzLmhlbHBlclVwZGF0ZUNvdW50KTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2F2ZUJ1dHRvbkxhbmckLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLmxhbmdTZXJ2aWNlVXBkYXRlQ291bnQrKztcbiAgICAgIGNvbnNvbGUubG9nKCdMYW5nU2VydmljZSB1cGRhdGVkOicsIHZhbHVlLCAnQ291bnQ6JywgdGhpcy5sYW5nU2VydmljZVVwZGF0ZUNvdW50KTtcbiAgICB9KTtcblxuICAgIC8vIExvZyBpbml0aWFsIHN0YXRlXG4gICAgY29uc29sZS5sb2coJ0N1cnJlbnQgbGFuZ3VhZ2U6JywgdGhpcy5sYW5nU2VydmljZS5jdXJyZW50TGFuZyk7XG4gICAgY29uc29sZS5sb2coJ0F2YWlsYWJsZSBsYW5ndWFnZXM6JywgdGhpcy5sYW5nU2VydmljZS5hdmFpbGFibGVMYW5ncyk7XG4gICAgY29uc29sZS5sb2coJ0hhcyBzYXZlIGNvbnRlbnQ6JywgdGhpcy5sYW5nU2VydmljZS5oYXNDb250ZW50KCdfZ2xvYmFsJywgJ3NhdmUnKSk7XG4gICAgY29uc29sZS5sb2coJ0hhcyBjYW5jZWwgY29udGVudDonLCB0aGlzLmxhbmdTZXJ2aWNlLmhhc0NvbnRlbnQoJ19nbG9iYWwnLCAnY2FuY2VsJykpO1xuICB9XG5cbiAgc3dpdGNoVG9TcGFuaXNoKCkge1xuICAgIGNvbnNvbGUubG9nKCdTd2l0Y2hpbmcgdG8gU3BhbmlzaC4uLicpO1xuICAgIHRoaXMubGFuZ1NlcnZpY2Uuc2V0TGFuZygnZXMnKTtcbiAgfVxuXG4gIHN3aXRjaFRvRW5nbGlzaCgpIHtcbiAgICBjb25zb2xlLmxvZygnU3dpdGNoaW5nIHRvIEVuZ2xpc2guLi4nKTtcbiAgICB0aGlzLmxhbmdTZXJ2aWNlLnNldExhbmcoJ2VuJyk7XG4gIH1cblxuICAvLyBTeW5jaHJvbm91cyBtZXRob2RzIGZvciBkZWJ1Z2dpbmdcbiAgZ2V0U2F2ZVRleHRTeW5jKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFNlcnZpY2UuZ2V0VGV4dCgnc2F2ZScsICdTYXZlIChmYWxsYmFjayknKTtcbiAgfVxuXG4gIGdldENhbmNlbFRleHRTeW5jKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFNlcnZpY2UuZ2V0VGV4dCgnY2FuY2VsJywgJ0NhbmNlbCAoZmFsbGJhY2spJyk7XG4gIH1cblxuICBnZXRBdmFpbGFibGVMYW5ndWFnZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sYW5nU2VydmljZS5hdmFpbGFibGVMYW5ncy5qb2luKCcsICcpO1xuICB9XG5cbiAgaGFzQ29udGVudFNhdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGFuZ1NlcnZpY2UuaGFzQ29udGVudCgnX2dsb2JhbCcsICdzYXZlJyk7XG4gIH1cblxuICBoYXNDb250ZW50Q2FuY2VsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxhbmdTZXJ2aWNlLmhhc0NvbnRlbnQoJ19nbG9iYWwnLCAnY2FuY2VsJyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { TextMetadata } from '../components/atoms/text/types';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
/**
|
|
4
|
-
* ComprehensiveLinkTestComponent - Componente de prueba exhaustiva para el procesamiento de enlaces.
|
|
5
|
-
*
|
|
6
|
-
* Este componente demuestra todos los casos edge y escenarios complejos de procesamiento de enlaces,
|
|
7
|
-
* incluyendo puntuación, URLs complejas, y mezclas de formatos.
|
|
8
|
-
*
|
|
9
|
-
* @example Uso en template:
|
|
10
|
-
* ```html
|
|
11
|
-
* <val-comprehensive-link-test></val-comprehensive-link-test>
|
|
12
|
-
* ```
|
|
13
|
-
*/
|
|
14
|
-
export declare class ComprehensiveLinkTestComponent {
|
|
15
|
-
punctuationProps: TextMetadata;
|
|
16
|
-
complexUrlProps: TextMetadata;
|
|
17
|
-
parenthesesProps: TextMetadata;
|
|
18
|
-
mixedFormatsProps: TextMetadata;
|
|
19
|
-
edgeCasesProps: TextMetadata;
|
|
20
|
-
devUrlsProps: TextMetadata;
|
|
21
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ComprehensiveLinkTestComponent, never>;
|
|
22
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ComprehensiveLinkTestComponent, "val-comprehensive-link-test", never, {}, {}, never, never, true, never>;
|
|
23
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class CustomContentDemoComponent implements OnInit {
|
|
4
|
-
private content;
|
|
5
|
-
currentLang: string;
|
|
6
|
-
saveText$: import("rxjs").Observable<string>;
|
|
7
|
-
cancelText$: import("rxjs").Observable<string>;
|
|
8
|
-
deleteText$: import("rxjs").Observable<string>;
|
|
9
|
-
loadingText$: import("rxjs").Observable<string>;
|
|
10
|
-
dashboardText$: import("rxjs").Observable<string>;
|
|
11
|
-
profileText$: import("rxjs").Observable<string>;
|
|
12
|
-
settingsText$: import("rxjs").Observable<string>;
|
|
13
|
-
welcomeText$: import("rxjs").Observable<string>;
|
|
14
|
-
spanishText$: import("rxjs").Observable<string>;
|
|
15
|
-
englishText$: import("rxjs").Observable<string>;
|
|
16
|
-
descriptionText$: import("rxjs").Observable<string>;
|
|
17
|
-
saveTextSync: string;
|
|
18
|
-
dashboardTextSync: string;
|
|
19
|
-
languageDescSync: string;
|
|
20
|
-
ngOnInit(): void;
|
|
21
|
-
switchLanguage(): void;
|
|
22
|
-
private updateSyncTexts;
|
|
23
|
-
private diagnoseConfiguration;
|
|
24
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<CustomContentDemoComponent, never>;
|
|
25
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CustomContentDemoComponent, "app-custom-content-demo", never, {}, {}, never, never, true, never>;
|
|
26
|
-
}
|