valtech-components 2.0.495 → 2.0.497

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,50 @@
1
+ import { makeEnvironmentProviders, APP_INITIALIZER, } from '@angular/core';
2
+ import { DEFAULT_I18N_CONFIG } from './types';
3
+ import { I18nService } from './i18n.service';
4
+ /**
5
+ * Configura el sistema de internacionalización de Valtech Components.
6
+ *
7
+ * @param config Configuración de i18n
8
+ * @returns Providers para agregar en app.config.ts
9
+ *
10
+ * @example
11
+ * // app.config.ts
12
+ * import { provideValtechI18n } from 'valtech-components';
13
+ * import { GLOBAL_CONTENT } from './i18n/_global';
14
+ * import { LOGIN_CONTENT } from './i18n/login.i18n';
15
+ *
16
+ * export const appConfig: ApplicationConfig = {
17
+ * providers: [
18
+ * provideValtechI18n({
19
+ * defaultLanguage: 'es',
20
+ * supportedLanguages: ['es', 'en'],
21
+ * detectBrowserLanguage: true,
22
+ * content: {
23
+ * '_global': GLOBAL_CONTENT,
24
+ * 'Login': LOGIN_CONTENT,
25
+ * }
26
+ * }),
27
+ * ]
28
+ * };
29
+ */
30
+ export function provideValtechI18n(config = {}) {
31
+ const mergedConfig = { ...DEFAULT_I18N_CONFIG, ...config };
32
+ return makeEnvironmentProviders([
33
+ {
34
+ provide: APP_INITIALIZER,
35
+ useFactory: (i18n) => {
36
+ return () => {
37
+ // Configurar idiomas soportados
38
+ i18n.setI18nLanguages(mergedConfig.supportedLanguages);
39
+ // Registrar contenido inicial
40
+ if (mergedConfig.content && Object.keys(mergedConfig.content).length > 0) {
41
+ i18n.registerContentBulk(mergedConfig.content);
42
+ }
43
+ };
44
+ },
45
+ deps: [I18nService],
46
+ multi: true,
47
+ },
48
+ ]);
49
+ }
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9pMThuL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsd0JBQXdCLEVBQ3hCLGVBQWUsR0FDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLG1CQUFtQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxTQUFxQixFQUFFO0lBQ3hELE1BQU0sWUFBWSxHQUFHLEVBQUUsR0FBRyxtQkFBbUIsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBRTNELE9BQU8sd0JBQXdCLENBQUM7UUFDOUI7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsQ0FBQyxJQUFpQixFQUFFLEVBQUU7Z0JBQ2hDLE9BQU8sR0FBRyxFQUFFO29CQUNWLGdDQUFnQztvQkFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO29CQUV2RCw4QkFBOEI7b0JBQzlCLElBQUksWUFBWSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQ3pFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ2pELENBQUM7Z0JBQ0gsQ0FBQyxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQztZQUNuQixLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVudmlyb25tZW50UHJvdmlkZXJzLFxuICBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIEFQUF9JTklUSUFMSVpFUixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJMThuQ29uZmlnLCBERUZBVUxUX0kxOE5fQ09ORklHIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4vaTE4bi5zZXJ2aWNlJztcblxuLyoqXG4gKiBDb25maWd1cmEgZWwgc2lzdGVtYSBkZSBpbnRlcm5hY2lvbmFsaXphY2nDs24gZGUgVmFsdGVjaCBDb21wb25lbnRzLlxuICpcbiAqIEBwYXJhbSBjb25maWcgQ29uZmlndXJhY2nDs24gZGUgaTE4blxuICogQHJldHVybnMgUHJvdmlkZXJzIHBhcmEgYWdyZWdhciBlbiBhcHAuY29uZmlnLnRzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIGFwcC5jb25maWcudHNcbiAqIGltcG9ydCB7IHByb3ZpZGVWYWx0ZWNoSTE4biB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKiBpbXBvcnQgeyBHTE9CQUxfQ09OVEVOVCB9IGZyb20gJy4vaTE4bi9fZ2xvYmFsJztcbiAqIGltcG9ydCB7IExPR0lOX0NPTlRFTlQgfSBmcm9tICcuL2kxOG4vbG9naW4uaTE4bic7XG4gKlxuICogZXhwb3J0IGNvbnN0IGFwcENvbmZpZzogQXBwbGljYXRpb25Db25maWcgPSB7XG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHByb3ZpZGVWYWx0ZWNoSTE4bih7XG4gKiAgICAgICBkZWZhdWx0TGFuZ3VhZ2U6ICdlcycsXG4gKiAgICAgICBzdXBwb3J0ZWRMYW5ndWFnZXM6IFsnZXMnLCAnZW4nXSxcbiAqICAgICAgIGRldGVjdEJyb3dzZXJMYW5ndWFnZTogdHJ1ZSxcbiAqICAgICAgIGNvbnRlbnQ6IHtcbiAqICAgICAgICAgJ19nbG9iYWwnOiBHTE9CQUxfQ09OVEVOVCxcbiAqICAgICAgICAgJ0xvZ2luJzogTE9HSU5fQ09OVEVOVCxcbiAqICAgICAgIH1cbiAqICAgICB9KSxcbiAqICAgXVxuICogfTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVWYWx0ZWNoSTE4bihjb25maWc6IEkxOG5Db25maWcgPSB7fSk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgY29uc3QgbWVyZ2VkQ29uZmlnID0geyAuLi5ERUZBVUxUX0kxOE5fQ09ORklHLCAuLi5jb25maWcgfTtcblxuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICB1c2VGYWN0b3J5OiAoaTE4bjogSTE4blNlcnZpY2UpID0+IHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAvLyBDb25maWd1cmFyIGlkaW9tYXMgc29wb3J0YWRvc1xuICAgICAgICAgIGkxOG4uc2V0STE4bkxhbmd1YWdlcyhtZXJnZWRDb25maWcuc3VwcG9ydGVkTGFuZ3VhZ2VzKTtcblxuICAgICAgICAgIC8vIFJlZ2lzdHJhciBjb250ZW5pZG8gaW5pY2lhbFxuICAgICAgICAgIGlmIChtZXJnZWRDb25maWcuY29udGVudCAmJiBPYmplY3Qua2V5cyhtZXJnZWRDb25maWcuY29udGVudCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaTE4bi5yZWdpc3RlckNvbnRlbnRCdWxrKG1lcmdlZENvbmZpZy5jb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgZGVwczogW0kxOG5TZXJ2aWNlXSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0pO1xufVxuIl19
@@ -0,0 +1,196 @@
1
+ import { Injectable, signal, computed } from '@angular/core';
2
+ import { LANG_STORAGE_KEY, DEFAULT_I18N_CONFIG, } from './types';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Servicio de internacionalización basado en Angular Signals.
6
+ *
7
+ * Características:
8
+ * - Sin RxJS: usa Signals para evitar memory leaks y congelamiento
9
+ * - Namespace-based: organiza traducciones por contexto
10
+ * - Fallback multi-nivel: namespace → _global → placeholder
11
+ * - Interpolación: soporta {variable} en textos
12
+ *
13
+ * @example
14
+ * // En un componente
15
+ * i18n = inject(I18nService);
16
+ *
17
+ * // Obtener texto
18
+ * const title = this.i18n.t('title', 'Login');
19
+ *
20
+ * // Con interpolación
21
+ * const welcome = this.i18n.t('welcome', 'Login', { name: 'Juan' });
22
+ *
23
+ * // Cambiar idioma
24
+ * this.i18n.setLanguage('en');
25
+ */
26
+ export class I18nService {
27
+ constructor() {
28
+ // Estado interno con Signals
29
+ this._lang = signal(DEFAULT_I18N_CONFIG.defaultLanguage);
30
+ this._content = signal({});
31
+ this._supportedLanguages = signal(DEFAULT_I18N_CONFIG.supportedLanguages);
32
+ // Públicos readonly
33
+ this.lang = this._lang.asReadonly();
34
+ this.supportedLanguages = this._supportedLanguages.asReadonly();
35
+ // Computed para verificaciones rápidas
36
+ this.isSpanish = computed(() => this._lang() === 'es');
37
+ this.isEnglish = computed(() => this._lang() === 'en');
38
+ this.loadStoredLanguage();
39
+ }
40
+ /**
41
+ * Obtiene texto traducido (alias corto de getText)
42
+ *
43
+ * @param key Clave del texto
44
+ * @param namespace Namespace (default: '_global')
45
+ * @param data Variables para interpolación
46
+ * @returns Texto traducido o placeholder [namespace.key]
47
+ *
48
+ * @example
49
+ * i18n.t('submit'); // busca en _global
50
+ * i18n.t('title', 'Login'); // busca en Login
51
+ * i18n.t('welcome', 'Login', {name}); // con interpolación
52
+ */
53
+ t(key, namespace, data) {
54
+ return this.getText(key, namespace, data);
55
+ }
56
+ /**
57
+ * Obtiene texto traducido
58
+ *
59
+ * Fallback order:
60
+ * 1. content[namespace][lang][key]
61
+ * 2. content['_global'][lang][key]
62
+ * 3. "[namespace.key]" (placeholder)
63
+ */
64
+ getText(key, namespace, data) {
65
+ const content = this._content();
66
+ const lang = this._lang();
67
+ const ns = namespace || '_global';
68
+ // Buscar en namespace específico
69
+ let text = content[ns]?.[lang]?.[key];
70
+ // Fallback a _global
71
+ if (!text && ns !== '_global') {
72
+ text = content['_global']?.[lang]?.[key];
73
+ }
74
+ // Fallback a placeholder
75
+ if (!text) {
76
+ console.warn(`[i18n] Missing translation: ${ns}.${key} (${lang})`);
77
+ return `[${ns}.${key}]`;
78
+ }
79
+ // Aplicar interpolación si hay data
80
+ if (data) {
81
+ return this.interpolate(text, data);
82
+ }
83
+ return text;
84
+ }
85
+ /**
86
+ * Cambia el idioma de la aplicación
87
+ *
88
+ * @param lang Nuevo idioma
89
+ * @param forceReload Si true, recarga la página (fallback si reactividad falla)
90
+ */
91
+ setLanguage(lang, forceReload = false) {
92
+ if (!this._supportedLanguages().includes(lang)) {
93
+ console.warn(`[i18n] Language '${lang}' not in supported languages`);
94
+ return;
95
+ }
96
+ if (lang === this._lang()) {
97
+ return;
98
+ }
99
+ // Persistir en localStorage
100
+ localStorage.setItem(LANG_STORAGE_KEY, lang);
101
+ // Actualizar signal
102
+ this._lang.set(lang);
103
+ // Fallback: recargar si se solicita
104
+ if (forceReload) {
105
+ window.location.reload();
106
+ }
107
+ }
108
+ /**
109
+ * Registra contenido de traducciones para un namespace
110
+ *
111
+ * @param namespace Nombre del namespace
112
+ * @param content Contenido de traducciones
113
+ *
114
+ * @example
115
+ * i18n.registerContent('Login', {
116
+ * es: { title: 'Iniciar sesión' },
117
+ * en: { title: 'Sign in' }
118
+ * });
119
+ */
120
+ registerContent(namespace, content) {
121
+ this._content.update((store) => ({
122
+ ...store,
123
+ [namespace]: content,
124
+ }));
125
+ }
126
+ /**
127
+ * Registra múltiples namespaces de una vez
128
+ *
129
+ * @param contentStore Objeto con namespaces como keys
130
+ */
131
+ registerContentBulk(contentStore) {
132
+ this._content.update((store) => ({
133
+ ...store,
134
+ ...contentStore,
135
+ }));
136
+ }
137
+ /**
138
+ * Configura los idiomas soportados
139
+ */
140
+ setI18nLanguages(languages) {
141
+ this._supportedLanguages.set(languages);
142
+ }
143
+ /**
144
+ * Obtiene todos los namespaces registrados
145
+ */
146
+ getNamespaces() {
147
+ return Object.keys(this._content());
148
+ }
149
+ /**
150
+ * Verifica si un namespace tiene traducciones
151
+ */
152
+ hasNamespace(namespace) {
153
+ return namespace in this._content();
154
+ }
155
+ /**
156
+ * Carga idioma guardado en localStorage o detecta del navegador
157
+ */
158
+ loadStoredLanguage() {
159
+ const stored = localStorage.getItem(LANG_STORAGE_KEY);
160
+ if (stored && this.isValidLanguage(stored)) {
161
+ this._lang.set(stored);
162
+ return;
163
+ }
164
+ // Detectar idioma del navegador
165
+ const browserLang = navigator.language.split('-')[0];
166
+ if (this.isValidLanguage(browserLang)) {
167
+ this._lang.set(browserLang);
168
+ localStorage.setItem(LANG_STORAGE_KEY, browserLang);
169
+ }
170
+ }
171
+ /**
172
+ * Valida si un idioma está soportado
173
+ */
174
+ isValidLanguage(lang) {
175
+ return this._supportedLanguages().includes(lang);
176
+ }
177
+ /**
178
+ * Reemplaza {variable} en texto con valores de data
179
+ *
180
+ * @example
181
+ * interpolate('Hola {name}', { name: 'Juan' }) // 'Hola Juan'
182
+ */
183
+ interpolate(text, data) {
184
+ return Object.entries(data).reduce((result, [key, value]) => {
185
+ const regex = new RegExp(`\\{${key}\\}`, 'g');
186
+ return result.replace(regex, value);
187
+ }, text);
188
+ }
189
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: I18nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
190
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: I18nService, providedIn: 'root' }); }
191
+ }
192
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: I18nService, decorators: [{
193
+ type: Injectable,
194
+ args: [{ providedIn: 'root' }]
195
+ }], ctorParameters: () => [] });
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9pMThuL2kxOG4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUlMLGdCQUFnQixFQUNoQixtQkFBbUIsR0FDcEIsTUFBTSxTQUFTLENBQUM7O0FBRWpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFFSCxNQUFNLE9BQU8sV0FBVztJQWdCdEI7UUFmQSw2QkFBNkI7UUFDWixVQUFLLEdBQUcsTUFBTSxDQUFXLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzlELGFBQVEsR0FBRyxNQUFNLENBQWUsRUFBRSxDQUFDLENBQUM7UUFDcEMsd0JBQW1CLEdBQUcsTUFBTSxDQUMzQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FDdkMsQ0FBQztRQUVGLG9CQUFvQjtRQUNYLFNBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQy9CLHVCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVwRSx1Q0FBdUM7UUFDOUIsY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDbEQsY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7UUFHekQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILENBQUMsQ0FBQyxHQUFXLEVBQUUsU0FBa0IsRUFBRSxJQUE2QjtRQUM5RCxPQUFPLElB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TUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUM7K0dBN0xVLFdBQVc7bUhBQVgsV0FBVyxjQURFLE1BQU07OzRGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEkxOG5MYW5nLFxuICBMYW5ndWFnZXNDb250ZW50LFxuICBDb250ZW50U3RvcmUsXG4gIExBTkdfU1RPUkFHRV9LRVksXG4gIERFRkFVTFRfSTE4Tl9DT05GSUcsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFNlcnZpY2lvIGRlIGludGVybmFjaW9uYWxpemFjacOzbiBiYXNhZG8gZW4gQW5ndWxhciBTaWduYWxzLlxuICpcbiAqIENhcmFjdGVyw61zdGljYXM6XG4gKiAtIFNpbiBSeEpTOiB1c2EgU2lnbmFscyBwYXJhIGV2aXRhciBtZW1vcnkgbGVha3MgeSBjb25nZWxhbWllbnRvXG4gKiAtIE5hbWVzcGFjZS1iYXNlZDogb3JnYW5pemEgdHJhZHVjY2lvbmVzIHBvciBjb250ZXh0b1xuICogLSBGYWxsYmFjayBtdWx0aS1uaXZlbDogbmFtZXNwYWNlIOKGkiBfZ2xvYmFsIOKGkiBwbGFjZWhvbGRlclxuICogLSBJbnRlcnBvbGFjacOzbjogc29wb3J0YSB7dmFyaWFibGV9IGVuIHRleHRvc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFbiB1biBjb21wb25lbnRlXG4gKiBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAqXG4gKiAvLyBPYnRlbmVyIHRleHRvXG4gKiBjb25zdCB0aXRsZSA9IHRoaXMuaTE4bi50KCd0aXRsZScsICdMb2dpbicpO1xuICpcbiAqIC8vIENvbiBpbnRlcnBvbGFjacOzblxuICogY29uc3Qgd2VsY29tZSA9IHRoaXMuaTE4bi50KCd3ZWxjb21lJywgJ0xvZ2luJywgeyBuYW1lOiAnSnVhbicgfSk7XG4gKlxuICogLy8gQ2FtYmlhciBpZGlvbWFcbiAqIHRoaXMuaTE4bi5zZXRMYW5ndWFnZSgnZW4nKTtcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBJMThuU2VydmljZSB7XG4gIC8vIEVzdGFkbyBpbnRlcm5vIGNvbiBTaWduYWxzXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhbmcgPSBzaWduYWw8STE4bkxhbmc+KERFRkFVTFRfSTE4Tl9DT05GSUcuZGVmYXVsdExhbmd1YWdlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29udGVudCA9IHNpZ25hbDxDb250ZW50U3RvcmU+KHt9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3VwcG9ydGVkTGFuZ3VhZ2VzID0gc2lnbmFsPEkxOG5MYW5nW10+KFxuICAgIERFRkFVTFRfSTE4Tl9DT05GSUcuc3VwcG9ydGVkTGFuZ3VhZ2VzXG4gICk7XG5cbiAgLy8gUMO6YmxpY29zIHJlYWRvbmx5XG4gIHJlYWRvbmx5IGxhbmcgPSB0aGlzLl9sYW5nLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgc3VwcG9ydGVkTGFuZ3VhZ2VzID0gdGhpcy5fc3VwcG9ydGVkTGFuZ3VhZ2VzLmFzUmVhZG9ubHkoKTtcblxuICAvLyBDb21wdXRlZCBwYXJhIHZlcmlmaWNhY2lvbmVzIHLDoXBpZGFzXG4gIHJlYWRvbmx5IGlzU3BhbmlzaCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2xhbmcoKSA9PT0gJ2VzJyk7XG4gIHJlYWRvbmx5IGlzRW5nbGlzaCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2xhbmcoKSA9PT0gJ2VuJyk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5sb2FkU3RvcmVkTGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHRleHRvIHRyYWR1Y2lkbyAoYWxpYXMgY29ydG8gZGUgZ2V0VGV4dClcbiAgICpcbiAgICogQHBhcmFtIGtleSBDbGF2ZSBkZWwgdGV4dG9cbiAgICogQHBhcmFtIG5hbWVzcGFjZSBOYW1lc3BhY2UgKGRlZmF1bHQ6ICdfZ2xvYmFsJylcbiAgICogQHBhcmFtIGRhdGEgVmFyaWFibGVzIHBhcmEgaW50ZXJwb2xhY2nDs25cbiAgICogQHJldHVybnMgVGV4dG8gdHJhZHVjaWRvIG8gcGxhY2Vob2xkZXIgW25hbWVzcGFjZS5rZXldXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGkxOG4udCgnc3VibWl0Jyk7ICAgICAgICAgICAgICAgICAgICAvLyBidXNjYSBlbiBfZ2xvYmFsXG4gICAqIGkxOG4udCgndGl0bGUnLCAnTG9naW4nKTsgICAgICAgICAgICAvLyBidXNjYSBlbiBMb2dpblxuICAgKiBpMThuLnQoJ3dlbGNvbWUnLCAnTG9naW4nLCB7bmFtZX0pOyAgLy8gY29uIGludGVycG9sYWNpw7NuXG4gICAqL1xuICB0KGtleTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUZXh0KGtleSwgbmFtZXNwYWNlLCBkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHRleHRvIHRyYWR1Y2lkb1xuICAgKlxuICAgKiBGYWxsYmFjayBvcmRlcjpcbiAgICogMS4gY29udGVudFtuYW1lc3BhY2VdW2xhbmddW2tleV1cbiAgICogMi4gY29udGVudFsnX2dsb2JhbCddW2xhbmddW2tleV1cbiAgICogMy4gXCJbbmFtZXNwYWNlLmtleV1cIiAocGxhY2Vob2xkZXIpXG4gICAqL1xuICBnZXRUZXh0KGtleTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5fY29udGVudCgpO1xuICAgIGNvbnN0IGxhbmcgPSB0aGlzLl9sYW5nKCk7XG4gICAgY29uc3QgbnMgPSBuYW1lc3BhY2UgfHwgJ19nbG9iYWwnO1xuXG4gICAgLy8gQnVzY2FyIGVuIG5hbWVzcGFjZSBlc3BlY8OtZmljb1xuICAgIGxldCB0ZXh0ID0gY29udGVudFtuc10/LltsYW5nXT8uW2tleV07XG5cbiAgICAvLyBGYWxsYmFjayBhIF9nbG9iYWxcbiAgICBpZiAoIXRleHQgJiYgbnMgIT09ICdfZ2xvYmFsJykge1xuICAgICAgdGV4dCA9IGNvbnRlbnRbJ19nbG9iYWwnXT8uW2xhbmddPy5ba2V5XTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBhIHBsYWNlaG9sZGVyXG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICBjb25zb2xlLndhcm4oYFtpMThuXSBNaXNzaW5nIHRyYW5zbGF0aW9uOiAke25zfS4ke2tleX0gKCR7bGFuZ30pYCk7XG4gICAgICByZXR1cm4gYFske25zfS4ke2tleX1dYDtcbiAgICB9XG5cbiAgICAvLyBBcGxpY2FyIGludGVycG9sYWNpw7NuIHNpIGhheSBkYXRhXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVycG9sYXRlKHRleHQsIGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbWJpYSBlbCBpZGlvbWEgZGUgbGEgYXBsaWNhY2nDs25cbiAgICpcbiAgICogQHBhcmFtIGxhbmcgTnVldm8gaWRpb21hXG4gICAqIEBwYXJhbSBmb3JjZVJlbG9hZCBTaSB0cnVlLCByZWNhcmdhIGxhIHDDoWdpbmEgKGZhbGxiYWNrIHNpIHJlYWN0aXZpZGFkIGZhbGxhKVxuICAgKi9cbiAgc2V0TGFuZ3VhZ2UobGFuZzogSTE4bkxhbmcsIGZvcmNlUmVsb2FkID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3N1cHBvcnRlZExhbmd1YWdlcygpLmluY2x1ZGVzKGxhbmcpKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFtpMThuXSBMYW5ndWFnZSAnJHtsYW5nfScgbm90IGluIHN1cHBvcnRlZCBsYW5ndWFnZXNgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobGFuZyA9PT0gdGhpcy5fbGFuZygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUGVyc2lzdGlyIGVuIGxvY2FsU3RvcmFnZVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExBTkdfU1RPUkFHRV9LRVksIGxhbmcpO1xuXG4gICAgLy8gQWN0dWFsaXphciBzaWduYWxcbiAgICB0aGlzLl9sYW5nLnNldChsYW5nKTtcblxuICAgIC8vIEZhbGxiYWNrOiByZWNhcmdhciBzaSBzZSBzb2xpY2l0YVxuICAgIGlmIChmb3JjZVJlbG9hZCkge1xuICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSBjb250ZW5pZG8gZGUgdHJhZHVjY2lvbmVzIHBhcmEgdW4gbmFtZXNwYWNlXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lc3BhY2UgTm9tYnJlIGRlbCBuYW1lc3BhY2VcbiAgICogQHBhcmFtIGNvbnRlbnQgQ29udGVuaWRvIGRlIHRyYWR1Y2Npb25lc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBpMThuLnJlZ2lzdGVyQ29udGVudCgnTG9naW4nLCB7XG4gICAqICAgZXM6IHsgdGl0bGU6ICdJbmljaWFyIHNlc2nDs24nIH0sXG4gICAqICAgZW46IHsgdGl0bGU6ICdTaWduIGluJyB9XG4gICAqIH0pO1xuICAgKi9cbiAgcmVnaXN0ZXJDb250ZW50KG5hbWVzcGFjZTogc3RyaW5nLCBjb250ZW50OiBMYW5ndWFnZXNDb250ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fY29udGVudC51cGRhdGUoKHN0b3JlKSA9PiAoe1xuICAgICAgLi4uc3RvcmUsXG4gICAgICBbbmFtZXNwYWNlXTogY29udGVudCxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgbcO6bHRpcGxlcyBuYW1lc3BhY2VzIGRlIHVuYSB2ZXpcbiAgICpcbiAgICogQHBhcmFtIGNvbnRlbnRTdG9yZSBPYmpldG8gY29uIG5hbWVzcGFjZXMgY29tbyBrZXlzXG4gICAqL1xuICByZWdpc3RlckNvbnRlbnRCdWxrKGNvbnRlbnRTdG9yZTogQ29udGVudFN0b3JlKTogdm9pZCB7XG4gICAgdGhpcy5fY29udGVudC51cGRhdGUoKHN0b3JlKSA9PiAoe1xuICAgICAgLi4uc3RvcmUsXG4gICAgICAuLi5jb250ZW50U3RvcmUsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYSBsb3MgaWRpb21hcyBzb3BvcnRhZG9zXG4gICAqL1xuICBzZXRJMThuTGFuZ3VhZ2VzKGxhbmd1YWdlczogSTE4bkxhbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuX3N1cHBvcnRlZExhbmd1YWdlcy5zZXQobGFuZ3VhZ2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHRvZG9zIGxvcyBuYW1lc3BhY2VzIHJlZ2lzdHJhZG9zXG4gICAqL1xuICBnZXROYW1lc3BhY2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fY29udGVudCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSB1biBuYW1lc3BhY2UgdGllbmUgdHJhZHVjY2lvbmVzXG4gICAqL1xuICBoYXNOYW1lc3BhY2UobmFtZXNwYWNlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmFtZXNwYWNlIGluIHRoaXMuX2NvbnRlbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXJnYSBpZGlvbWEgZ3VhcmRhZG8gZW4gbG9jYWxTdG9yYWdlIG8gZGV0ZWN0YSBkZWwgbmF2ZWdhZG9yXG4gICAqL1xuICBwcml2YXRlIGxvYWRTdG9yZWRMYW5ndWFnZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMQU5HX1NUT1JBR0VfS0VZKTtcblxuICAgIGlmIChzdG9yZWQgJiYgdGhpcy5pc1ZhbGlkTGFuZ3VhZ2Uoc3RvcmVkKSkge1xuICAgICAgdGhpcy5fbGFuZy5zZXQoc3RvcmVkIGFzIEkxOG5MYW5nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZXRlY3RhciBpZGlvbWEgZGVsIG5hdmVnYWRvclxuICAgIGNvbnN0IGJyb3dzZXJMYW5nID0gbmF2aWdhdG9yLmxhbmd1YWdlLnNwbGl0KCctJylbMF0gYXMgSTE4bkxhbmc7XG4gICAgaWYgKHRoaXMuaXNWYWxpZExhbmd1YWdlKGJyb3dzZXJMYW5nKSkge1xuICAgICAgdGhpcy5fbGFuZy5zZXQoYnJvd3NlckxhbmcpO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTEFOR19TVE9SQUdFX0tFWSwgYnJvd3NlckxhbmcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGEgc2kgdW4gaWRpb21hIGVzdMOhIHNvcG9ydGFkb1xuICAgKi9cbiAgcHJpdmF0ZSBpc1ZhbGlkTGFuZ3VhZ2UobGFuZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3N1cHBvcnRlZExhbmd1YWdlcygpLmluY2x1ZGVzKGxhbmcgYXMgSTE4bkxhbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZW1wbGF6YSB7dmFyaWFibGV9IGVuIHRleHRvIGNvbiB2YWxvcmVzIGRlIGRhdGFcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogaW50ZXJwb2xhdGUoJ0hvbGEge25hbWV9JywgeyBuYW1lOiAnSnVhbicgfSkgLy8gJ0hvbGEgSnVhbidcbiAgICovXG4gIHByaXZhdGUgaW50ZXJwb2xhdGUodGV4dDogc3RyaW5nLCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChyZXN1bHQsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxceyR7a2V5fVxcXFx9YCwgJ2cnKTtcbiAgICAgIHJldHVybiByZXN1bHQucmVwbGFjZShyZWdleCwgdmFsdWUpO1xuICAgIH0sIHRleHQpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,9 @@
1
+ // Types
2
+ export { LANG_STORAGE_KEY, } from './types';
3
+ // Service
4
+ export { I18nService } from './i18n.service';
5
+ // Pipe
6
+ export { TranslatePipe } from './translate.pipe';
7
+ // Config
8
+ export { provideValtechI18n } from './config';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2kxOG4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsUUFBUTtBQUNSLE9BQU8sRUFLTCxnQkFBZ0IsR0FDakIsTUFBTSxTQUFTLENBQUM7QUFFakIsVUFBVTtBQUNWLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPO0FBQ1AsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpELFNBQVM7QUFDVCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUeXBlc1xuZXhwb3J0IHtcbiAgSTE4bkxhbmcsXG4gIExhbmd1YWdlc0NvbnRlbnQsXG4gIENvbnRlbnRTdG9yZSxcbiAgSTE4bkNvbmZpZyxcbiAgTEFOR19TVE9SQUdFX0tFWSxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIFNlcnZpY2VcbmV4cG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi9pMThuLnNlcnZpY2UnO1xuXG4vLyBQaXBlXG5leHBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi90cmFuc2xhdGUucGlwZSc7XG5cbi8vIENvbmZpZ1xuZXhwb3J0IHsgcHJvdmlkZVZhbHRlY2hJMThuIH0gZnJvbSAnLi9jb25maWcnO1xuIl19
@@ -0,0 +1,50 @@
1
+ import { Pipe, inject } from '@angular/core';
2
+ import { I18nService } from './i18n.service';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Pipe de traducción para templates.
6
+ *
7
+ * NOTA: Es impure para detectar cambios de idioma.
8
+ * El costo es mínimo porque I18nService usa Signals internamente.
9
+ *
10
+ * @example
11
+ * <!-- Busca en _global -->
12
+ * {{ 'submit' | t }}
13
+ *
14
+ * <!-- Busca en namespace específico -->
15
+ * {{ 'title' | t:'Login' }}
16
+ *
17
+ * <!-- Con interpolación -->
18
+ * {{ 'welcome' | t:'Login':{ name: userName } }}
19
+ *
20
+ * <!-- En atributos -->
21
+ * <val-button [label]="'submit' | t"></val-button>
22
+ * <val-input [label]="'email' | t:'Login'"></val-input>
23
+ */
24
+ export class TranslatePipe {
25
+ constructor() {
26
+ this.i18n = inject(I18nService);
27
+ }
28
+ /**
29
+ * Transforma una key de traducción a su valor
30
+ *
31
+ * @param key Clave del texto
32
+ * @param namespace Namespace opcional (default: '_global')
33
+ * @param data Variables para interpolación opcional
34
+ * @returns Texto traducido
35
+ */
36
+ transform(key, namespace, data) {
37
+ return this.i18n.t(key, namespace, data);
38
+ }
39
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TranslatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
40
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: TranslatePipe, isStandalone: true, name: "t", pure: false }); }
41
+ }
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TranslatePipe, decorators: [{
43
+ type: Pipe,
44
+ args: [{
45
+ name: 't',
46
+ standalone: true,
47
+ pure: false, // Impure para detectar cambios de idioma
48
+ }]
49
+ }] });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2kxOG4vdHJhbnNsYXRlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFNSCxNQUFNLE9BQU8sYUFBYTtJQUwxQjtRQU1tQixTQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBYTdDO0lBWEM7Ozs7Ozs7T0FPRztJQUNILFNBQVMsQ0FBQyxHQUFXLEVBQUUsU0FBa0IsRUFBRSxJQUE2QjtRQUN0RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQzsrR0FiVSxhQUFhOzZHQUFiLGFBQWE7OzRGQUFiLGFBQWE7a0JBTHpCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLEdBQUc7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRSxLQUFLLEVBQUUseUNBQXlDO2lCQUN2RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuL2kxOG4uc2VydmljZSc7XG5cbi8qKlxuICogUGlwZSBkZSB0cmFkdWNjacOzbiBwYXJhIHRlbXBsYXRlcy5cbiAqXG4gKiBOT1RBOiBFcyBpbXB1cmUgcGFyYSBkZXRlY3RhciBjYW1iaW9zIGRlIGlkaW9tYS5cbiAqIEVsIGNvc3RvIGVzIG3DrW5pbW8gcG9ycXVlIEkxOG5TZXJ2aWNlIHVzYSBTaWduYWxzIGludGVybmFtZW50ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogPCEtLSBCdXNjYSBlbiBfZ2xvYmFsIC0tPlxuICoge3sgJ3N1Ym1pdCcgfCB0IH19XG4gKlxuICogPCEtLSBCdXNjYSBlbiBuYW1lc3BhY2UgZXNwZWPDrWZpY28gLS0+XG4gKiB7eyAndGl0bGUnIHwgdDonTG9naW4nIH19XG4gKlxuICogPCEtLSBDb24gaW50ZXJwb2xhY2nDs24gLS0+XG4gKiB7eyAnd2VsY29tZScgfCB0OidMb2dpbic6eyBuYW1lOiB1c2VyTmFtZSB9IH19XG4gKlxuICogPCEtLSBFbiBhdHJpYnV0b3MgLS0+XG4gKiA8dmFsLWJ1dHRvbiBbbGFiZWxdPVwiJ3N1Ym1pdCcgfCB0XCI+PC92YWwtYnV0dG9uPlxuICogPHZhbC1pbnB1dCBbbGFiZWxdPVwiJ2VtYWlsJyB8IHQ6J0xvZ2luJ1wiPjwvdmFsLWlucHV0PlxuICovXG5AUGlwZSh7XG4gIG5hbWU6ICd0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHVyZTogZmFsc2UsIC8vIEltcHVyZSBwYXJhIGRldGVjdGFyIGNhbWJpb3MgZGUgaWRpb21hXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcblxuICAvKipcbiAgICogVHJhbnNmb3JtYSB1bmEga2V5IGRlIHRyYWR1Y2Npw7NuIGEgc3UgdmFsb3JcbiAgICpcbiAgICogQHBhcmFtIGtleSBDbGF2ZSBkZWwgdGV4dG9cbiAgICogQHBhcmFtIG5hbWVzcGFjZSBOYW1lc3BhY2Ugb3BjaW9uYWwgKGRlZmF1bHQ6ICdfZ2xvYmFsJylcbiAgICogQHBhcmFtIGRhdGEgVmFyaWFibGVzIHBhcmEgaW50ZXJwb2xhY2nDs24gb3BjaW9uYWxcbiAgICogQHJldHVybnMgVGV4dG8gdHJhZHVjaWRvXG4gICAqL1xuICB0cmFuc2Zvcm0oa2V5OiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIG5hbWVzcGFjZSwgZGF0YSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Valores por defecto de configuración
3
+ */
4
+ export const DEFAULT_I18N_CONFIG = {
5
+ defaultLanguage: 'es',
6
+ supportedLanguages: ['es', 'en'],
7
+ detectBrowserLanguage: true,
8
+ content: {},
9
+ };
10
+ /**
11
+ * Clave para persistir idioma en localStorage
12
+ */
13
+ export const LANG_STORAGE_KEY = 'app_lang';
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2kxOG4vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMERBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQXlCO0lBQ3ZELGVBQWUsRUFBRSxJQUFJO0lBQ3JCLGtCQUFrQixFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztJQUNoQyxxQkFBcUIsRUFBRSxJQUFJO0lBQzNCLE9BQU8sRUFBRSxFQUFFO0NBQ1osQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJZGlvbWFzIHNvcG9ydGFkb3MgcG9yIGVsIHNpc3RlbWEgaTE4blxuICovXG5leHBvcnQgdHlwZSBJMThuTGFuZyA9ICdlcycgfCAnZW4nIHwgJ3B0JyB8ICdmcicgfCAnZGUnO1xuXG4vKipcbiAqIENvbnRlbmlkbyBkZSB0cmFkdWNjaW9uZXMgcGFyYSB1biBuYW1lc3BhY2VcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbG9naW5Db250ZW50OiBMYW5ndWFnZXNDb250ZW50ID0ge1xuICogICBlczogeyB0aXRsZTogJ0luaWNpYXIgc2VzacOzbicsIHN1Ym1pdDogJ0VudHJhcicgfSxcbiAqICAgZW46IHsgdGl0bGU6ICdTaWduIGluJywgc3VibWl0OiAnU2lnbiBpbicgfVxuICogfTtcbiAqL1xuZXhwb3J0IHR5cGUgTGFuZ3VhZ2VzQ29udGVudCA9IHtcbiAgW2xhbmcgaW4gSTE4bkxhbmddPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG5cbi8qKlxuICogQWxtYWPDqW4gZGUgY29udGVuaWRvIHBvciBuYW1lc3BhY2VcbiAqXG4gKiBAZXhhbXBsZVxuICoge1xuICogICAnX2dsb2JhbCc6IHsgZXM6IHsuLi59LCBlbjogey4uLn0gfSxcbiAqICAgJ0xvZ2luJzogeyBlczogey4uLn0sIGVuOiB7Li4ufSB9LFxuICogICAnUHJvZmlsZSc6IHsgZXM6IHsuLi59LCBlbjogey4uLn0gfVxuICogfVxuICovXG5leHBvcnQgdHlwZSBDb250ZW50U3RvcmUgPSBSZWNvcmQ8c3RyaW5nLCBMYW5ndWFnZXNDb250ZW50PjtcblxuLyoqXG4gKiBDb25maWd1cmFjacOzbiBwYXJhIHByb3ZpZGVWYWx0ZWNoSTE4bigpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSTE4bkNvbmZpZyB7XG4gIC8qKlxuICAgKiBJZGlvbWEgcG9yIGRlZmVjdG8gc2kgbm8gaGF5IHByZWZlcmVuY2lhIGd1YXJkYWRhXG4gICAqIEBkZWZhdWx0ICdlcydcbiAgICovXG4gIGRlZmF1bHRMYW5ndWFnZT86IEkxOG5MYW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0YSBkZSBpZGlvbWFzIGhhYmlsaXRhZG9zIGVuIGxhIGFwcFxuICAgKiBAZGVmYXVsdCBbJ2VzJywgJ2VuJ11cbiAgICovXG4gIHN1cHBvcnRlZExhbmd1YWdlcz86IEkxOG5MYW5nW107XG5cbiAgLyoqXG4gICAqIERldGVjdGFyIGlkaW9tYSBkZWwgbmF2ZWdhZG9yIGFsIGluaWNpYXJcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgZGV0ZWN0QnJvd3Nlckxhbmd1YWdlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udGVuaWRvIGluaWNpYWwgZGUgdHJhZHVjY2lvbmVzIHBvciBuYW1lc3BhY2VcbiAgICovXG4gIGNvbnRlbnQ/OiBDb250ZW50U3RvcmU7XG59XG5cbi8qKlxuICogVmFsb3JlcyBwb3IgZGVmZWN0byBkZSBjb25maWd1cmFjacOzblxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9JMThOX0NPTkZJRzogUmVxdWlyZWQ8STE4bkNvbmZpZz4gPSB7XG4gIGRlZmF1bHRMYW5ndWFnZTogJ2VzJyxcbiAgc3VwcG9ydGVkTGFuZ3VhZ2VzOiBbJ2VzJywgJ2VuJ10sXG4gIGRldGVjdEJyb3dzZXJMYW5ndWFnZTogdHJ1ZSxcbiAgY29udGVudDoge30sXG59O1xuXG4vKipcbiAqIENsYXZlIHBhcmEgcGVyc2lzdGlyIGlkaW9tYSBlbiBsb2NhbFN0b3JhZ2VcbiAqL1xuZXhwb3J0IGNvbnN0IExBTkdfU1RPUkFHRV9LRVkgPSAnYXBwX2xhbmcnO1xuIl19
@@ -0,0 +1,46 @@
1
+ import { makeEnvironmentProviders, APP_INITIALIZER, } from '@angular/core';
2
+ import { PresetService } from './preset.service';
3
+ /**
4
+ * Configura el sistema de presets de Valtech Components.
5
+ *
6
+ * @param presets Configuración de presets por componente
7
+ * @returns Providers para agregar en app.config.ts
8
+ *
9
+ * @example
10
+ * // app.config.ts
11
+ * import { provideValtechPresets } from 'valtech-components';
12
+ *
13
+ * export const appConfig: ApplicationConfig = {
14
+ * providers: [
15
+ * provideValtechPresets({
16
+ * button: {
17
+ * 'primary-action': { size: 'large', color: 'primary', fill: 'solid' },
18
+ * 'secondary': { size: 'medium', color: 'secondary', fill: 'outline' },
19
+ * 'danger': { size: 'medium', color: 'danger', fill: 'solid' },
20
+ * },
21
+ * card: {
22
+ * 'feature': { variant: 'elevated', padding: 'large' },
23
+ * 'compact': { variant: 'flat', padding: 'small' },
24
+ * },
25
+ * input: {
26
+ * 'form-field': { size: 'medium', fill: 'outline', labelPosition: 'floating' },
27
+ * }
28
+ * }),
29
+ * ]
30
+ * };
31
+ */
32
+ export function provideValtechPresets(presets) {
33
+ return makeEnvironmentProviders([
34
+ {
35
+ provide: APP_INITIALIZER,
36
+ useFactory: (presetService) => {
37
+ return () => {
38
+ presetService.registerPresets(presets);
39
+ };
40
+ },
41
+ deps: [PresetService],
42
+ multi: true,
43
+ },
44
+ ]);
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9wcmVzZXRzL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsd0JBQXdCLEVBQ3hCLGVBQWUsR0FDaEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE9BQXFCO0lBQ3pELE9BQU8sd0JBQXdCLENBQUM7UUFDOUI7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsQ0FBQyxhQUE0QixFQUFFLEVBQUU7Z0JBQzNDLE9BQU8sR0FBRyxFQUFFO29CQUNWLGFBQWEsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3pDLENBQUMsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUM7WUFDckIsS0FBSyxFQUFFLElBQUk7U0FDWjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFbnZpcm9ubWVudFByb3ZpZGVycyxcbiAgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxuICBBUFBfSU5JVElBTElaRVIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJlc2V0Q29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBQcmVzZXRTZXJ2aWNlIH0gZnJvbSAnLi9wcmVzZXQuc2VydmljZSc7XG5cbi8qKlxuICogQ29uZmlndXJhIGVsIHNpc3RlbWEgZGUgcHJlc2V0cyBkZSBWYWx0ZWNoIENvbXBvbmVudHMuXG4gKlxuICogQHBhcmFtIHByZXNldHMgQ29uZmlndXJhY2nDs24gZGUgcHJlc2V0cyBwb3IgY29tcG9uZW50ZVxuICogQHJldHVybnMgUHJvdmlkZXJzIHBhcmEgYWdyZWdhciBlbiBhcHAuY29uZmlnLnRzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIGFwcC5jb25maWcudHNcbiAqIGltcG9ydCB7IHByb3ZpZGVWYWx0ZWNoUHJlc2V0cyB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogZXhwb3J0IGNvbnN0IGFwcENvbmZpZzogQXBwbGljYXRpb25Db25maWcgPSB7XG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHByb3ZpZGVWYWx0ZWNoUHJlc2V0cyh7XG4gKiAgICAgICBidXR0b246IHtcbiAqICAgICAgICAgJ3ByaW1hcnktYWN0aW9uJzogeyBzaXplOiAnbGFyZ2UnLCBjb2xvcjogJ3ByaW1hcnknLCBmaWxsOiAnc29saWQnIH0sXG4gKiAgICAgICAgICdzZWNvbmRhcnknOiB7IHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ3NlY29uZGFyeScsIGZpbGw6ICdvdXRsaW5lJyB9LFxuICogICAgICAgICAnZGFuZ2VyJzogeyBzaXplOiAnbWVkaXVtJywgY29sb3I6ICdkYW5nZXInLCBmaWxsOiAnc29saWQnIH0sXG4gKiAgICAgICB9LFxuICogICAgICAgY2FyZDoge1xuICogICAgICAgICAnZmVhdHVyZSc6IHsgdmFyaWFudDogJ2VsZXZhdGVkJywgcGFkZGluZzogJ2xhcmdlJyB9LFxuICogICAgICAgICAnY29tcGFjdCc6IHsgdmFyaWFudDogJ2ZsYXQnLCBwYWRkaW5nOiAnc21hbGwnIH0sXG4gKiAgICAgICB9LFxuICogICAgICAgaW5wdXQ6IHtcbiAqICAgICAgICAgJ2Zvcm0tZmllbGQnOiB7IHNpemU6ICdtZWRpdW0nLCBmaWxsOiAnb3V0bGluZScsIGxhYmVsUG9zaXRpb246ICdmbG9hdGluZycgfSxcbiAqICAgICAgIH1cbiAqICAgICB9KSxcbiAqICAgXVxuICogfTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVWYWx0ZWNoUHJlc2V0cyhwcmVzZXRzOiBQcmVzZXRDb25maWcpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICAgIHVzZUZhY3Rvcnk6IChwcmVzZXRTZXJ2aWNlOiBQcmVzZXRTZXJ2aWNlKSA9PiB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgcHJlc2V0U2VydmljZS5yZWdpc3RlclByZXNldHMocHJlc2V0cyk7XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgZGVwczogW1ByZXNldFNlcnZpY2VdLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSk7XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ // Service
2
+ export { PresetService } from './preset.service';
3
+ // Config
4
+ export { provideValtechPresets } from './config';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3ByZXNldHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsVUFBVTtBQUNWLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxTQUFTO0FBQ1QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVHlwZXNcbmV4cG9ydCB7IFByZXNldENvbmZpZywgQ29tcG9uZW50UHJlc2V0cywgUHJlc2V0c09wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gU2VydmljZVxuZXhwb3J0IHsgUHJlc2V0U2VydmljZSB9IGZyb20gJy4vcHJlc2V0LnNlcnZpY2UnO1xuXG4vLyBDb25maWdcbmV4cG9ydCB7IHByb3ZpZGVWYWx0ZWNoUHJlc2V0cyB9IGZyb20gJy4vY29uZmlnJztcbiJdfQ==
@@ -0,0 +1,104 @@
1
+ import { Injectable, signal } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Servicio para gestionar presets de componentes.
5
+ *
6
+ * Los presets permiten definir configuraciones reutilizables
7
+ * de componentes (tamaño, color, variante, etc.) que se pueden
8
+ * aplicar con un nombre semántico.
9
+ *
10
+ * @example
11
+ * // En un componente
12
+ * presets = inject(PresetService);
13
+ *
14
+ * // Obtener preset
15
+ * const buttonProps = this.presets.get<ButtonMetadata>('button', 'primary-action');
16
+ * // { size: 'large', color: 'primary', fill: 'solid' }
17
+ */
18
+ export class PresetService {
19
+ constructor() {
20
+ this._presets = signal({});
21
+ }
22
+ /**
23
+ * Obtiene un preset específico para un componente
24
+ *
25
+ * @param component Tipo de componente (ej: 'button', 'card', 'input')
26
+ * @param presetName Nombre del preset (ej: 'primary-action', 'compact')
27
+ * @returns Propiedades del preset o objeto vacío si no existe
28
+ *
29
+ * @example
30
+ * // Obtener preset de botón
31
+ * const props = presets.get<ButtonMetadata>('button', 'primary-action');
32
+ *
33
+ * // Usar en componente
34
+ * <val-button [props]="props"></val-button>
35
+ */
36
+ get(component, presetName) {
37
+ const componentPresets = this._presets()[component];
38
+ if (!componentPresets) {
39
+ console.warn(`[presets] No presets registered for component: ${component}`);
40
+ return {};
41
+ }
42
+ const preset = componentPresets[presetName];
43
+ if (!preset) {
44
+ console.warn(`[presets] Preset '${presetName}' not found for component: ${component}`);
45
+ return {};
46
+ }
47
+ return preset;
48
+ }
49
+ /**
50
+ * Verifica si existe un preset
51
+ */
52
+ has(component, presetName) {
53
+ return !!this._presets()[component]?.[presetName];
54
+ }
55
+ /**
56
+ * Registra presets de la aplicación
57
+ *
58
+ * @param presets Configuración de presets
59
+ *
60
+ * @example
61
+ * presets.registerPresets({
62
+ * button: {
63
+ * 'primary-action': { size: 'large', color: 'primary' },
64
+ * },
65
+ * card: {
66
+ * 'feature': { variant: 'elevated' },
67
+ * }
68
+ * });
69
+ */
70
+ registerPresets(presets) {
71
+ this._presets.set(presets);
72
+ }
73
+ /**
74
+ * Agrega presets para un componente específico (merge con existentes)
75
+ */
76
+ registerComponentPresets(component, presets) {
77
+ this._presets.update((current) => ({
78
+ ...current,
79
+ [component]: {
80
+ ...current[component],
81
+ ...presets,
82
+ },
83
+ }));
84
+ }
85
+ /**
86
+ * Obtiene todos los nombres de presets para un componente
87
+ */
88
+ getPresetNames(component) {
89
+ return Object.keys(this._presets()[component] || {});
90
+ }
91
+ /**
92
+ * Obtiene todos los componentes con presets registrados
93
+ */
94
+ getRegisteredComponents() {
95
+ return Object.keys(this._presets());
96
+ }
97
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PresetService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
98
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PresetService, providedIn: 'root' }); }
99
+ }
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PresetService, decorators: [{
101
+ type: Injectable,
102
+ args: [{ providedIn: 'root' }]
103
+ }] });
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3ByZXNldHMvcHJlc2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBR25EOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsTUFBTSxPQUFPLGFBQWE7SUFEMUI7UUFFbUIsYUFBUSxHQUFHLE1BQU0sQ0FBZSxFQUFFLENBQUMsQ0FBQztLQW9GdEQ7SUFsRkM7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILEdBQUcsQ0FBb0MsU0FBaUIsRUFBRSxVQUFrQjtRQUMxRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLE9BQU8sRUFBZ0IsQ0FBQztRQUMxQixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsVUFBVSw4QkFBOEIsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUN2RixPQUFPLEVBQWdCLENBQUM7UUFDMUIsQ0FBQztRQUVELE9BQU8sTUFBb0IsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHLENBQUMsU0FBaUIsRUFBRSxVQUFrQjtRQUN2QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSCxlQUFlLENBQUMsT0FBcUI7UUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsd0JBQXdCLENBQUMsU0FBaUIsRUFBRSxPQUF5QjtRQUNuRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqQyxHQUFHLE9BQU87WUFDVixDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNYLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztnQkFDckIsR0FBRyxPQUFPO2FBQ1g7U0FDRixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWMsQ0FBQyxTQUFpQjtRQUM5QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QjtRQUNyQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQzsrR0FwRlUsYUFBYTttSEFBYixhQUFhLGNBREEsTUFBTTs7NEZBQ25CLGFBQWE7a0JBRHpCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQcmVzZXRDb25maWcsIENvbXBvbmVudFByZXNldHMgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBTZXJ2aWNpbyBwYXJhIGdlc3Rpb25hciBwcmVzZXRzIGRlIGNvbXBvbmVudGVzLlxuICpcbiAqIExvcyBwcmVzZXRzIHBlcm1pdGVuIGRlZmluaXIgY29uZmlndXJhY2lvbmVzIHJldXRpbGl6YWJsZXNcbiAqIGRlIGNvbXBvbmVudGVzICh0YW1hw7FvLCBjb2xvciwgdmFyaWFudGUsIGV0Yy4pIHF1ZSBzZSBwdWVkZW5cbiAqIGFwbGljYXIgY29uIHVuIG5vbWJyZSBzZW3DoW50aWNvLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFbiB1biBjb21wb25lbnRlXG4gKiBwcmVzZXRzID0gaW5qZWN0KFByZXNldFNlcnZpY2UpO1xuICpcbiAqIC8vIE9idGVuZXIgcHJlc2V0XG4gKiBjb25zdCBidXR0b25Qcm9wcyA9IHRoaXMucHJlc2V0cy5nZXQ8QnV0dG9uTWV0YWRhdGE+KCdidXR0b24nLCAncHJpbWFyeS1hY3Rpb24nKTtcbiAqIC8vIHsgc2l6ZTogJ2xhcmdlJywgY29sb3I6ICdwcmltYXJ5JywgZmlsbDogJ3NvbGlkJyB9XG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUHJlc2V0U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ByZXNldHMgPSBzaWduYWw8UHJlc2V0Q29uZmlnPih7fSk7XG5cbiAgLyoqXG4gICAqIE9idGllbmUgdW4gcHJlc2V0IGVzcGVjw61maWNvIHBhcmEgdW4gY29tcG9uZW50ZVxuICAgKlxuICAgKiBAcGFyYW0gY29tcG9uZW50IFRpcG8gZGUgY29tcG9uZW50ZSAoZWo6ICdidXR0b24nLCAnY2FyZCcsICdpbnB1dCcpXG4gICAqIEBwYXJhbSBwcmVzZXROYW1lIE5vbWJyZSBkZWwgcHJlc2V0IChlajogJ3ByaW1hcnktYWN0aW9uJywgJ2NvbXBhY3QnKVxuICAgKiBAcmV0dXJucyBQcm9waWVkYWRlcyBkZWwgcHJlc2V0IG8gb2JqZXRvIHZhY8OtbyBzaSBubyBleGlzdGVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gT2J0ZW5lciBwcmVzZXQgZGUgYm90w7NuXG4gICAqIGNvbnN0IHByb3BzID0gcHJlc2V0cy5nZXQ8QnV0dG9uTWV0YWRhdGE+KCdidXR0b24nLCAncHJpbWFyeS1hY3Rpb24nKTtcbiAgICpcbiAgICogLy8gVXNhciBlbiBjb21wb25lbnRlXG4gICAqIDx2YWwtYnV0dG9uIFtwcm9wc109XCJwcm9wc1wiPjwvdmFsLWJ1dHRvbj5cbiAgICovXG4gIGdldDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KGNvbXBvbmVudDogc3RyaW5nLCBwcmVzZXROYW1lOiBzdHJpbmcpOiBQYXJ0aWFsPFQ+IHtcbiAgICBjb25zdCBjb21wb25lbnRQcmVzZXRzID0gdGhpcy5fcHJlc2V0cygpW2NvbXBvbmVudF07XG4gICAgaWYgKCFjb21wb25lbnRQcmVzZXRzKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFtwcmVzZXRzXSBObyBwcmVzZXRzIHJlZ2lzdGVyZWQgZm9yIGNvbXBvbmVudDogJHtjb21wb25lbnR9YCk7XG4gICAgICByZXR1cm4ge30gYXMgUGFydGlhbDxUPjtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVzZXQgPSBjb21wb25lbnRQcmVzZXRzW3ByZXNldE5hbWVdO1xuICAgIGlmICghcHJlc2V0KSB7XG4gICAgICBjb25zb2xlLndhcm4oYFtwcmVzZXRzXSBQcmVzZXQgJyR7cHJlc2V0TmFtZX0nIG5vdCBmb3VuZCBmb3IgY29tcG9uZW50OiAke2NvbXBvbmVudH1gKTtcbiAgICAgIHJldHVybiB7fSBhcyBQYXJ0aWFsPFQ+O1xuICAgIH1cblxuICAgIHJldHVybiBwcmVzZXQgYXMgUGFydGlhbDxUPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBleGlzdGUgdW4gcHJlc2V0XG4gICAqL1xuICBoYXMoY29tcG9uZW50OiBzdHJpbmcsIHByZXNldE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuX3ByZXNldHMoKVtjb21wb25lbnRdPy5bcHJlc2V0TmFtZV07XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgcHJlc2V0cyBkZSBsYSBhcGxpY2FjacOzblxuICAgKlxuICAgKiBAcGFyYW0gcHJlc2V0cyBDb25maWd1cmFjacOzbiBkZSBwcmVzZXRzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByZXNldHMucmVnaXN0ZXJQcmVzZXRzKHtcbiAgICogICBidXR0b246IHtcbiAgICogICAgICdwcmltYXJ5LWFjdGlvbic6IHsgc2l6ZTogJ2xhcmdlJywgY29sb3I6ICdwcmltYXJ5JyB9LFxuICAgKiAgIH0sXG4gICAqICAgY2FyZDoge1xuICAgKiAgICAgJ2ZlYXR1cmUnOiB7IHZhcmlhbnQ6ICdlbGV2YXRlZCcgfSxcbiAgICogICB9XG4gICAqIH0pO1xuICAgKi9cbiAgcmVnaXN0ZXJQcmVzZXRzKHByZXNldHM6IFByZXNldENvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuX3ByZXNldHMuc2V0KHByZXNldHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFncmVnYSBwcmVzZXRzIHBhcmEgdW4gY29tcG9uZW50ZSBlc3BlY8OtZmljbyAobWVyZ2UgY29uIGV4aXN0ZW50ZXMpXG4gICAqL1xuICByZWdpc3RlckNvbXBvbmVudFByZXNldHMoY29tcG9uZW50OiBzdHJpbmcsIHByZXNldHM6IENvbXBvbmVudFByZXNldHMpOiB2b2lkIHtcbiAgICB0aGlzLl9wcmVzZXRzLnVwZGF0ZSgoY3VycmVudCkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICBbY29tcG9uZW50XToge1xuICAgICAgICAuLi5jdXJyZW50W2NvbXBvbmVudF0sXG4gICAgICAgIC4uLnByZXNldHMsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHRvZG9zIGxvcyBub21icmVzIGRlIHByZXNldHMgcGFyYSB1biBjb21wb25lbnRlXG4gICAqL1xuICBnZXRQcmVzZXROYW1lcyhjb21wb25lbnQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fcHJlc2V0cygpW2NvbXBvbmVudF0gfHwge30pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgdG9kb3MgbG9zIGNvbXBvbmVudGVzIGNvbiBwcmVzZXRzIHJlZ2lzdHJhZG9zXG4gICAqL1xuICBnZXRSZWdpc3RlcmVkQ29tcG9uZW50cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3ByZXNldHMoKSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3ByZXNldHMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJlc2V0cyBwYXJhIHVuIHRpcG8gZGUgY29tcG9uZW50ZVxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBidXR0b25QcmVzZXRzOiBDb21wb25lbnRQcmVzZXRzID0ge1xuICogICAncHJpbWFyeS1hY3Rpb24nOiB7IHNpemU6ICdsYXJnZScsIGNvbG9yOiAncHJpbWFyeScsIGZpbGw6ICdzb2xpZCcgfSxcbiAqICAgJ3NlY29uZGFyeSc6IHsgc2l6ZTogJ21lZGl1bScsIGNvbG9yOiAnc2Vjb25kYXJ5JywgZmlsbDogJ291dGxpbmUnIH0sXG4gKiAgICdkYW5nZXInOiB7IHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ2RhbmdlcicsIGZpbGw6ICdzb2xpZCcgfSxcbiAqIH07XG4gKi9cbmV4cG9ydCB0eXBlIENvbXBvbmVudFByZXNldHMgPSBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cbi8qKlxuICogQ29uZmlndXJhY2nDs24gY29tcGxldGEgZGUgcHJlc2V0cyBwb3IgY29tcG9uZW50ZVxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBhcHBQcmVzZXRzOiBQcmVzZXRDb25maWcgPSB7XG4gKiAgIGJ1dHRvbjoge1xuICogICAgICdwcmltYXJ5LWFjdGlvbic6IHsgc2l6ZTogJ2xhcmdlJywgY29sb3I6ICdwcmltYXJ5JywgZmlsbDogJ3NvbGlkJyB9LFxuICogICAgICdzZWNvbmRhcnknOiB7IHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ3NlY29uZGFyeScsIGZpbGw6ICdvdXRsaW5lJyB9LFxuICogICB9LFxuICogICBjYXJkOiB7XG4gKiAgICAgJ2ZlYXR1cmUnOiB7IHZhcmlhbnQ6ICdlbGV2YXRlZCcsIHBhZGRpbmc6ICdsYXJnZScgfSxcbiAqICAgICAnY29tcGFjdCc6IHsgdmFyaWFudDogJ2ZsYXQnLCBwYWRkaW5nOiAnc21hbGwnIH0sXG4gKiAgIH0sXG4gKiAgIGlucHV0OiB7XG4gKiAgICAgJ2Zvcm0tZmllbGQnOiB7IHNpemU6ICdtZWRpdW0nLCBmaWxsOiAnb3V0bGluZScsIGxhYmVsUG9zaXRpb246ICdmbG9hdGluZycgfSxcbiAqICAgfVxuICogfTtcbiAqL1xuZXhwb3J0IHR5cGUgUHJlc2V0Q29uZmlnID0gUmVjb3JkPHN0cmluZywgQ29tcG9uZW50UHJlc2V0cz47XG5cbi8qKlxuICogT3BjaW9uZXMgcGFyYSBwcm92aWRlVmFsdGVjaFByZXNldHMoKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXNldHNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFByZXNldHMgaW5pY2lhbGVzIGRlIGxhIGFwbGljYWNpw7NuXG4gICAqL1xuICBwcmVzZXRzOiBQcmVzZXRDb25maWc7XG59XG4iXX0=