valtech-components 2.0.496 → 2.0.498
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/molecules/language-selector/language-selector.component.mjs +23 -14
- package/esm2022/lib/components/molecules/language-selector/types.mjs +1 -1
- package/esm2022/lib/services/auth/auth.service.mjs +16 -3
- package/esm2022/lib/services/auth/types.mjs +1 -1
- package/esm2022/lib/services/firebase/analytics-types.mjs +7 -0
- package/esm2022/lib/services/firebase/types.mjs +1 -1
- package/esm2022/lib/services/i18n/config.mjs +50 -0
- package/esm2022/lib/services/i18n/i18n.service.mjs +196 -0
- package/esm2022/lib/services/i18n/index.mjs +9 -0
- package/esm2022/lib/services/i18n/translate.pipe.mjs +50 -0
- package/esm2022/lib/services/i18n/types.mjs +14 -0
- package/esm2022/lib/services/presets/config.mjs +46 -0
- package/esm2022/lib/services/presets/index.mjs +5 -0
- package/esm2022/lib/services/presets/preset.service.mjs +104 -0
- package/esm2022/lib/services/presets/types.mjs +2 -0
- package/esm2022/public-api.mjs +9 -1
- package/fesm2022/valtech-components.mjs +526 -54
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/molecules/language-selector/language-selector.component.d.ts +1 -4
- package/lib/components/molecules/language-selector/types.d.ts +7 -0
- package/lib/services/auth/auth.service.d.ts +4 -2
- package/lib/services/auth/types.d.ts +4 -0
- package/lib/services/firebase/analytics-types.d.ts +219 -0
- package/lib/services/firebase/types.d.ts +11 -0
- package/lib/services/i18n/config.d.ts +29 -0
- package/lib/services/i18n/i18n.service.d.ts +112 -0
- package/lib/services/i18n/index.d.ts +4 -0
- package/lib/services/i18n/translate.pipe.d.ts +36 -0
- package/lib/services/i18n/types.d.ts +59 -0
- package/lib/services/presets/config.d.ts +32 -0
- package/lib/services/presets/index.d.ts +3 -0
- package/lib/services/presets/preset.service.d.ts +69 -0
- package/lib/services/presets/types.d.ts +39 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, Component, Input, Output, Injectable, HostListener, inject, Pipe, ChangeDetectionStrategy, ViewChild,
|
|
2
|
+
import { EventEmitter, Component, Input, Output, Injectable, HostListener, inject, Pipe, ChangeDetectionStrategy, ViewChild, signal, computed, makeEnvironmentProviders, APP_INITIALIZER, ChangeDetectorRef, ElementRef, InjectionToken, Inject, PLATFORM_ID, Optional, runInInjectionContext, effect } from '@angular/core';
|
|
3
3
|
import * as i2$1 from '@ionic/angular/standalone';
|
|
4
4
|
import { IonAvatar, IonCard, IonIcon, IonButton, IonSpinner, IonText, IonModal, IonHeader, IonToolbar, IonContent, IonButtons, IonTitle, IonProgressBar, IonSkeletonText, IonFab, IonFabButton, IonFabList, IonLabel, IonCardContent, IonCardHeader, IonCardTitle, IonCardSubtitle, IonCheckbox, IonTextarea, IonDatetime, IonDatetimeButton, IonInput, IonSelect, IonSelectOption, IonRadioGroup, IonRadio, IonRange, IonSearchbar, IonSegment, IonSegmentButton, IonToggle, IonAccordion, IonAccordionGroup, IonItem, IonTabBar, IonTabButton, IonBadge, IonBreadcrumb, IonBreadcrumbs, IonChip, IonPopover, IonList, IonNote, ToastController as ToastController$1, IonCol, IonRow, IonMenuButton, IonFooter, IonListHeader, IonInfiniteScroll, IonInfiniteScrollContent, IonGrid, MenuController, IonMenu, IonMenuToggle, AlertController } from '@ionic/angular/standalone';
|
|
5
5
|
import * as i1 from '@angular/common';
|
|
@@ -5112,78 +5112,308 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
5112
5112
|
}] } });
|
|
5113
5113
|
|
|
5114
5114
|
/**
|
|
5115
|
-
*
|
|
5115
|
+
* Valores por defecto de configuración
|
|
5116
5116
|
*/
|
|
5117
|
-
const
|
|
5117
|
+
const DEFAULT_I18N_CONFIG = {
|
|
5118
|
+
defaultLanguage: 'es',
|
|
5119
|
+
supportedLanguages: ['es', 'en'],
|
|
5120
|
+
detectBrowserLanguage: true,
|
|
5121
|
+
content: {},
|
|
5122
|
+
};
|
|
5118
5123
|
/**
|
|
5119
|
-
*
|
|
5124
|
+
* Clave para persistir idioma en localStorage
|
|
5120
5125
|
*/
|
|
5121
|
-
const
|
|
5126
|
+
const LANG_STORAGE_KEY$1 = 'app_lang';
|
|
5127
|
+
|
|
5122
5128
|
/**
|
|
5123
|
-
* Servicio
|
|
5129
|
+
* Servicio de internacionalización basado en Angular Signals.
|
|
5124
5130
|
*
|
|
5125
|
-
*
|
|
5126
|
-
* -
|
|
5127
|
-
* -
|
|
5131
|
+
* Características:
|
|
5132
|
+
* - Sin RxJS: usa Signals para evitar memory leaks y congelamiento
|
|
5133
|
+
* - Namespace-based: organiza traducciones por contexto
|
|
5134
|
+
* - Fallback multi-nivel: namespace → _global → placeholder
|
|
5135
|
+
* - Interpolación: soporta {variable} en textos
|
|
5128
5136
|
*
|
|
5129
5137
|
* @example
|
|
5130
5138
|
* // En un componente
|
|
5131
|
-
*
|
|
5139
|
+
* i18n = inject(I18nService);
|
|
5132
5140
|
*
|
|
5133
|
-
* // Obtener
|
|
5134
|
-
*
|
|
5141
|
+
* // Obtener texto
|
|
5142
|
+
* const title = this.i18n.t('title', 'Login');
|
|
5135
5143
|
*
|
|
5136
|
-
* //
|
|
5137
|
-
* this.
|
|
5144
|
+
* // Con interpolación
|
|
5145
|
+
* const welcome = this.i18n.t('welcome', 'Login', { name: 'Juan' });
|
|
5146
|
+
*
|
|
5147
|
+
* // Cambiar idioma
|
|
5148
|
+
* this.i18n.setLanguage('en');
|
|
5138
5149
|
*/
|
|
5139
|
-
class
|
|
5150
|
+
class I18nService {
|
|
5140
5151
|
constructor() {
|
|
5141
|
-
|
|
5152
|
+
// Estado interno con Signals
|
|
5153
|
+
this._lang = signal(DEFAULT_I18N_CONFIG.defaultLanguage);
|
|
5154
|
+
this._content = signal({});
|
|
5155
|
+
this._supportedLanguages = signal(DEFAULT_I18N_CONFIG.supportedLanguages);
|
|
5156
|
+
// Públicos readonly
|
|
5157
|
+
this.lang = this._lang.asReadonly();
|
|
5158
|
+
this.supportedLanguages = this._supportedLanguages.asReadonly();
|
|
5159
|
+
// Computed para verificaciones rápidas
|
|
5160
|
+
this.isSpanish = computed(() => this._lang() === 'es');
|
|
5161
|
+
this.isEnglish = computed(() => this._lang() === 'en');
|
|
5162
|
+
this.loadStoredLanguage();
|
|
5163
|
+
}
|
|
5164
|
+
/**
|
|
5165
|
+
* Obtiene texto traducido (alias corto de getText)
|
|
5166
|
+
*
|
|
5167
|
+
* @param key Clave del texto
|
|
5168
|
+
* @param namespace Namespace (default: '_global')
|
|
5169
|
+
* @param data Variables para interpolación
|
|
5170
|
+
* @returns Texto traducido o placeholder [namespace.key]
|
|
5171
|
+
*
|
|
5172
|
+
* @example
|
|
5173
|
+
* i18n.t('submit'); // busca en _global
|
|
5174
|
+
* i18n.t('title', 'Login'); // busca en Login
|
|
5175
|
+
* i18n.t('welcome', 'Login', {name}); // con interpolación
|
|
5176
|
+
*/
|
|
5177
|
+
t(key, namespace, data) {
|
|
5178
|
+
return this.getText(key, namespace, data);
|
|
5142
5179
|
}
|
|
5143
5180
|
/**
|
|
5144
|
-
*
|
|
5145
|
-
* Guarda en localStorage y recarga la página para aplicar el cambio.
|
|
5181
|
+
* Obtiene texto traducido
|
|
5146
5182
|
*
|
|
5147
|
-
*
|
|
5183
|
+
* Fallback order:
|
|
5184
|
+
* 1. content[namespace][lang][key]
|
|
5185
|
+
* 2. content['_global'][lang][key]
|
|
5186
|
+
* 3. "[namespace.key]" (placeholder)
|
|
5187
|
+
*/
|
|
5188
|
+
getText(key, namespace, data) {
|
|
5189
|
+
const content = this._content();
|
|
5190
|
+
const lang = this._lang();
|
|
5191
|
+
const ns = namespace || '_global';
|
|
5192
|
+
// Buscar en namespace específico
|
|
5193
|
+
let text = content[ns]?.[lang]?.[key];
|
|
5194
|
+
// Fallback a _global
|
|
5195
|
+
if (!text && ns !== '_global') {
|
|
5196
|
+
text = content['_global']?.[lang]?.[key];
|
|
5197
|
+
}
|
|
5198
|
+
// Fallback a placeholder
|
|
5199
|
+
if (!text) {
|
|
5200
|
+
console.warn(`[i18n] Missing translation: ${ns}.${key} (${lang})`);
|
|
5201
|
+
return `[${ns}.${key}]`;
|
|
5202
|
+
}
|
|
5203
|
+
// Aplicar interpolación si hay data
|
|
5204
|
+
if (data) {
|
|
5205
|
+
return this.interpolate(text, data);
|
|
5206
|
+
}
|
|
5207
|
+
return text;
|
|
5208
|
+
}
|
|
5209
|
+
/**
|
|
5210
|
+
* Cambia el idioma de la aplicación
|
|
5211
|
+
*
|
|
5212
|
+
* @param lang Nuevo idioma
|
|
5213
|
+
* @param forceReload Si true, recarga la página (fallback si reactividad falla)
|
|
5148
5214
|
*/
|
|
5149
|
-
|
|
5150
|
-
if (
|
|
5215
|
+
setLanguage(lang, forceReload = false) {
|
|
5216
|
+
if (!this._supportedLanguages().includes(lang)) {
|
|
5217
|
+
console.warn(`[i18n] Language '${lang}' not in supported languages`);
|
|
5151
5218
|
return;
|
|
5152
5219
|
}
|
|
5153
|
-
|
|
5154
|
-
|
|
5220
|
+
if (lang === this._lang()) {
|
|
5221
|
+
return;
|
|
5222
|
+
}
|
|
5223
|
+
// Persistir en localStorage
|
|
5224
|
+
localStorage.setItem(LANG_STORAGE_KEY$1, lang);
|
|
5225
|
+
// Actualizar signal
|
|
5226
|
+
this._lang.set(lang);
|
|
5227
|
+
// Fallback: recargar si se solicita
|
|
5228
|
+
if (forceReload) {
|
|
5229
|
+
window.location.reload();
|
|
5230
|
+
}
|
|
5155
5231
|
}
|
|
5156
5232
|
/**
|
|
5157
|
-
*
|
|
5158
|
-
*
|
|
5233
|
+
* Registra contenido de traducciones para un namespace
|
|
5234
|
+
*
|
|
5235
|
+
* @param namespace Nombre del namespace
|
|
5236
|
+
* @param content Contenido de traducciones
|
|
5237
|
+
*
|
|
5238
|
+
* @example
|
|
5239
|
+
* i18n.registerContent('Login', {
|
|
5240
|
+
* es: { title: 'Iniciar sesión' },
|
|
5241
|
+
* en: { title: 'Sign in' }
|
|
5242
|
+
* });
|
|
5159
5243
|
*/
|
|
5160
|
-
|
|
5161
|
-
|
|
5162
|
-
|
|
5163
|
-
|
|
5244
|
+
registerContent(namespace, content) {
|
|
5245
|
+
this._content.update((store) => ({
|
|
5246
|
+
...store,
|
|
5247
|
+
[namespace]: content,
|
|
5248
|
+
}));
|
|
5249
|
+
}
|
|
5250
|
+
/**
|
|
5251
|
+
* Registra múltiples namespaces de una vez
|
|
5252
|
+
*
|
|
5253
|
+
* @param contentStore Objeto con namespaces como keys
|
|
5254
|
+
*/
|
|
5255
|
+
registerContentBulk(contentStore) {
|
|
5256
|
+
this._content.update((store) => ({
|
|
5257
|
+
...store,
|
|
5258
|
+
...contentStore,
|
|
5259
|
+
}));
|
|
5260
|
+
}
|
|
5261
|
+
/**
|
|
5262
|
+
* Configura los idiomas soportados
|
|
5263
|
+
*/
|
|
5264
|
+
setI18nLanguages(languages) {
|
|
5265
|
+
this._supportedLanguages.set(languages);
|
|
5266
|
+
}
|
|
5267
|
+
/**
|
|
5268
|
+
* Obtiene todos los namespaces registrados
|
|
5269
|
+
*/
|
|
5270
|
+
getNamespaces() {
|
|
5271
|
+
return Object.keys(this._content());
|
|
5272
|
+
}
|
|
5273
|
+
/**
|
|
5274
|
+
* Verifica si un namespace tiene traducciones
|
|
5275
|
+
*/
|
|
5276
|
+
hasNamespace(namespace) {
|
|
5277
|
+
return namespace in this._content();
|
|
5278
|
+
}
|
|
5279
|
+
/**
|
|
5280
|
+
* Carga idioma guardado en localStorage o detecta del navegador
|
|
5281
|
+
*/
|
|
5282
|
+
loadStoredLanguage() {
|
|
5283
|
+
const stored = localStorage.getItem(LANG_STORAGE_KEY$1);
|
|
5284
|
+
if (stored && this.isValidLanguage(stored)) {
|
|
5285
|
+
this._lang.set(stored);
|
|
5286
|
+
return;
|
|
5287
|
+
}
|
|
5288
|
+
// Detectar idioma del navegador
|
|
5289
|
+
const browserLang = navigator.language.split('-')[0];
|
|
5290
|
+
if (this.isValidLanguage(browserLang)) {
|
|
5291
|
+
this._lang.set(browserLang);
|
|
5292
|
+
localStorage.setItem(LANG_STORAGE_KEY$1, browserLang);
|
|
5164
5293
|
}
|
|
5165
|
-
return DEFAULT_LANG;
|
|
5166
5294
|
}
|
|
5167
5295
|
/**
|
|
5168
|
-
*
|
|
5296
|
+
* Valida si un idioma está soportado
|
|
5169
5297
|
*/
|
|
5170
|
-
|
|
5171
|
-
return this.lang
|
|
5298
|
+
isValidLanguage(lang) {
|
|
5299
|
+
return this._supportedLanguages().includes(lang);
|
|
5172
5300
|
}
|
|
5173
5301
|
/**
|
|
5174
|
-
*
|
|
5302
|
+
* Reemplaza {variable} en texto con valores de data
|
|
5303
|
+
*
|
|
5304
|
+
* @example
|
|
5305
|
+
* interpolate('Hola {name}', { name: 'Juan' }) // 'Hola Juan'
|
|
5175
5306
|
*/
|
|
5176
|
-
|
|
5177
|
-
return
|
|
5307
|
+
interpolate(text, data) {
|
|
5308
|
+
return Object.entries(data).reduce((result, [key, value]) => {
|
|
5309
|
+
const regex = new RegExp(`\\{${key}\\}`, 'g');
|
|
5310
|
+
return result.replace(regex, value);
|
|
5311
|
+
}, text);
|
|
5178
5312
|
}
|
|
5179
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type:
|
|
5180
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type:
|
|
5313
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: I18nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
5314
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: I18nService, providedIn: 'root' }); }
|
|
5181
5315
|
}
|
|
5182
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type:
|
|
5316
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: I18nService, decorators: [{
|
|
5183
5317
|
type: Injectable,
|
|
5184
5318
|
args: [{ providedIn: 'root' }]
|
|
5185
5319
|
}], ctorParameters: () => [] });
|
|
5186
5320
|
|
|
5321
|
+
/**
|
|
5322
|
+
* Pipe de traducción para templates.
|
|
5323
|
+
*
|
|
5324
|
+
* NOTA: Es impure para detectar cambios de idioma.
|
|
5325
|
+
* El costo es mínimo porque I18nService usa Signals internamente.
|
|
5326
|
+
*
|
|
5327
|
+
* @example
|
|
5328
|
+
* <!-- Busca en _global -->
|
|
5329
|
+
* {{ 'submit' | t }}
|
|
5330
|
+
*
|
|
5331
|
+
* <!-- Busca en namespace específico -->
|
|
5332
|
+
* {{ 'title' | t:'Login' }}
|
|
5333
|
+
*
|
|
5334
|
+
* <!-- Con interpolación -->
|
|
5335
|
+
* {{ 'welcome' | t:'Login':{ name: userName } }}
|
|
5336
|
+
*
|
|
5337
|
+
* <!-- En atributos -->
|
|
5338
|
+
* <val-button [label]="'submit' | t"></val-button>
|
|
5339
|
+
* <val-input [label]="'email' | t:'Login'"></val-input>
|
|
5340
|
+
*/
|
|
5341
|
+
class TranslatePipe {
|
|
5342
|
+
constructor() {
|
|
5343
|
+
this.i18n = inject(I18nService);
|
|
5344
|
+
}
|
|
5345
|
+
/**
|
|
5346
|
+
* Transforma una key de traducción a su valor
|
|
5347
|
+
*
|
|
5348
|
+
* @param key Clave del texto
|
|
5349
|
+
* @param namespace Namespace opcional (default: '_global')
|
|
5350
|
+
* @param data Variables para interpolación opcional
|
|
5351
|
+
* @returns Texto traducido
|
|
5352
|
+
*/
|
|
5353
|
+
transform(key, namespace, data) {
|
|
5354
|
+
return this.i18n.t(key, namespace, data);
|
|
5355
|
+
}
|
|
5356
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TranslatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
5357
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: TranslatePipe, isStandalone: true, name: "t", pure: false }); }
|
|
5358
|
+
}
|
|
5359
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TranslatePipe, decorators: [{
|
|
5360
|
+
type: Pipe,
|
|
5361
|
+
args: [{
|
|
5362
|
+
name: 't',
|
|
5363
|
+
standalone: true,
|
|
5364
|
+
pure: false, // Impure para detectar cambios de idioma
|
|
5365
|
+
}]
|
|
5366
|
+
}] });
|
|
5367
|
+
|
|
5368
|
+
/**
|
|
5369
|
+
* Configura el sistema de internacionalización de Valtech Components.
|
|
5370
|
+
*
|
|
5371
|
+
* @param config Configuración de i18n
|
|
5372
|
+
* @returns Providers para agregar en app.config.ts
|
|
5373
|
+
*
|
|
5374
|
+
* @example
|
|
5375
|
+
* // app.config.ts
|
|
5376
|
+
* import { provideValtechI18n } from 'valtech-components';
|
|
5377
|
+
* import { GLOBAL_CONTENT } from './i18n/_global';
|
|
5378
|
+
* import { LOGIN_CONTENT } from './i18n/login.i18n';
|
|
5379
|
+
*
|
|
5380
|
+
* export const appConfig: ApplicationConfig = {
|
|
5381
|
+
* providers: [
|
|
5382
|
+
* provideValtechI18n({
|
|
5383
|
+
* defaultLanguage: 'es',
|
|
5384
|
+
* supportedLanguages: ['es', 'en'],
|
|
5385
|
+
* detectBrowserLanguage: true,
|
|
5386
|
+
* content: {
|
|
5387
|
+
* '_global': GLOBAL_CONTENT,
|
|
5388
|
+
* 'Login': LOGIN_CONTENT,
|
|
5389
|
+
* }
|
|
5390
|
+
* }),
|
|
5391
|
+
* ]
|
|
5392
|
+
* };
|
|
5393
|
+
*/
|
|
5394
|
+
function provideValtechI18n(config = {}) {
|
|
5395
|
+
const mergedConfig = { ...DEFAULT_I18N_CONFIG, ...config };
|
|
5396
|
+
return makeEnvironmentProviders([
|
|
5397
|
+
{
|
|
5398
|
+
provide: APP_INITIALIZER,
|
|
5399
|
+
useFactory: (i18n) => {
|
|
5400
|
+
return () => {
|
|
5401
|
+
// Configurar idiomas soportados
|
|
5402
|
+
i18n.setI18nLanguages(mergedConfig.supportedLanguages);
|
|
5403
|
+
// Registrar contenido inicial
|
|
5404
|
+
if (mergedConfig.content && Object.keys(mergedConfig.content).length > 0) {
|
|
5405
|
+
i18n.registerContentBulk(mergedConfig.content);
|
|
5406
|
+
}
|
|
5407
|
+
};
|
|
5408
|
+
},
|
|
5409
|
+
deps: [I18nService],
|
|
5410
|
+
multi: true,
|
|
5411
|
+
},
|
|
5412
|
+
]);
|
|
5413
|
+
}
|
|
5414
|
+
|
|
5415
|
+
// Types
|
|
5416
|
+
|
|
5187
5417
|
/**
|
|
5188
5418
|
* val-popover-selector
|
|
5189
5419
|
*
|
|
@@ -5366,8 +5596,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
5366
5596
|
/**
|
|
5367
5597
|
* val-language-selector
|
|
5368
5598
|
*
|
|
5369
|
-
* A language selector component that uses
|
|
5370
|
-
*
|
|
5599
|
+
* A language selector component that uses I18nService.
|
|
5600
|
+
* By default, language changes are reactive (no page reload).
|
|
5601
|
+
* Set forceReload: true in props to reload on change.
|
|
5371
5602
|
*
|
|
5372
5603
|
* @example
|
|
5373
5604
|
* <val-language-selector
|
|
@@ -5375,7 +5606,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
5375
5606
|
* </val-language-selector>
|
|
5376
5607
|
*
|
|
5377
5608
|
* @input props: LanguageSelectorMetadata - Configuration for the language selector
|
|
5378
|
-
* @output languageChange: EventEmitter<string> - Emitted when language changes
|
|
5609
|
+
* @output languageChange: EventEmitter<string> - Emitted when language changes
|
|
5379
5610
|
*/
|
|
5380
5611
|
class LanguageSelectorComponent {
|
|
5381
5612
|
constructor() {
|
|
@@ -5386,31 +5617,35 @@ class LanguageSelectorComponent {
|
|
|
5386
5617
|
/**
|
|
5387
5618
|
* Event emitted when the language selection changes.
|
|
5388
5619
|
* Emits the selected language code.
|
|
5389
|
-
* Note: Page will reload after this event.
|
|
5390
5620
|
*/
|
|
5391
5621
|
this.languageChange = new EventEmitter();
|
|
5392
|
-
this.
|
|
5622
|
+
this.i18n = inject(I18nService);
|
|
5393
5623
|
/** Default language display names */
|
|
5394
5624
|
this.defaultLanguageNames = {
|
|
5395
5625
|
es: 'Español',
|
|
5396
5626
|
en: 'English',
|
|
5627
|
+
pt: 'Português',
|
|
5628
|
+
fr: 'Français',
|
|
5629
|
+
de: 'Deutsch',
|
|
5397
5630
|
};
|
|
5398
5631
|
/** Default flag icons for languages */
|
|
5399
5632
|
this.defaultLanguageFlags = {
|
|
5400
5633
|
es: '🇪🇸',
|
|
5401
5634
|
en: '🇺🇸',
|
|
5635
|
+
pt: '🇧🇷',
|
|
5636
|
+
fr: '🇫🇷',
|
|
5637
|
+
de: '🇩🇪',
|
|
5402
5638
|
};
|
|
5403
|
-
/** Available languages */
|
|
5404
|
-
this.availableLanguages = ['es', 'en'];
|
|
5405
5639
|
addIcons({ language });
|
|
5406
5640
|
}
|
|
5407
5641
|
ngOnInit() {
|
|
5408
5642
|
this.initializePopoverProps();
|
|
5409
5643
|
}
|
|
5410
5644
|
initializePopoverProps() {
|
|
5411
|
-
const currentLanguage = this.
|
|
5645
|
+
const currentLanguage = this.i18n.lang();
|
|
5646
|
+
const availableLanguages = this.props.availableLanguages || this.i18n.supportedLanguages();
|
|
5412
5647
|
// Convert language codes to popover options
|
|
5413
|
-
const options =
|
|
5648
|
+
const options = availableLanguages.map(lang => ({
|
|
5414
5649
|
value: lang,
|
|
5415
5650
|
label: this.getLanguageDisplayName(lang),
|
|
5416
5651
|
}));
|
|
@@ -5453,10 +5688,14 @@ class LanguageSelectorComponent {
|
|
|
5453
5688
|
onLanguageChange(selectedLanguage) {
|
|
5454
5689
|
if (typeof selectedLanguage === 'string') {
|
|
5455
5690
|
const newLang = selectedLanguage;
|
|
5456
|
-
// Emit the change event
|
|
5691
|
+
// Emit the change event
|
|
5457
5692
|
this.languageChange.emit(selectedLanguage);
|
|
5458
|
-
// Set the new language (
|
|
5459
|
-
this.
|
|
5693
|
+
// Set the new language (reactive by default, reload if forceReload is true)
|
|
5694
|
+
this.i18n.setLanguage(newLang, this.props.forceReload);
|
|
5695
|
+
// Update popover selected value for reactive UI
|
|
5696
|
+
if (this.popoverProps) {
|
|
5697
|
+
this.popoverProps = { ...this.popoverProps, selectedValue: newLang };
|
|
5698
|
+
}
|
|
5460
5699
|
}
|
|
5461
5700
|
}
|
|
5462
5701
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LanguageSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -20564,6 +20803,79 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
20564
20803
|
type: Output
|
|
20565
20804
|
}] } });
|
|
20566
20805
|
|
|
20806
|
+
/**
|
|
20807
|
+
* Clave para persistir el idioma en localStorage
|
|
20808
|
+
*/
|
|
20809
|
+
const LANG_STORAGE_KEY = 'app_lang';
|
|
20810
|
+
/**
|
|
20811
|
+
* Idioma por defecto
|
|
20812
|
+
*/
|
|
20813
|
+
const DEFAULT_LANG = 'es';
|
|
20814
|
+
/**
|
|
20815
|
+
* Servicio mínimo de localización.
|
|
20816
|
+
*
|
|
20817
|
+
* - Lee el idioma desde localStorage al iniciar
|
|
20818
|
+
* - Proporciona método para cambiar idioma (recarga la página)
|
|
20819
|
+
* - Sin observables ni subscripciones
|
|
20820
|
+
*
|
|
20821
|
+
* @example
|
|
20822
|
+
* // En un componente
|
|
20823
|
+
* locale = inject(LocaleService);
|
|
20824
|
+
*
|
|
20825
|
+
* // Obtener idioma actual
|
|
20826
|
+
* console.log(this.locale.lang); // 'es' o 'en'
|
|
20827
|
+
*
|
|
20828
|
+
* // Cambiar idioma (recarga la página)
|
|
20829
|
+
* this.locale.setLang('en');
|
|
20830
|
+
*/
|
|
20831
|
+
class LocaleService {
|
|
20832
|
+
constructor() {
|
|
20833
|
+
this.lang = this.getStoredLang();
|
|
20834
|
+
}
|
|
20835
|
+
/**
|
|
20836
|
+
* Cambia el idioma de la aplicación.
|
|
20837
|
+
* Guarda en localStorage y recarga la página para aplicar el cambio.
|
|
20838
|
+
*
|
|
20839
|
+
* @param lang Nuevo idioma ('es' o 'en')
|
|
20840
|
+
*/
|
|
20841
|
+
setLang(lang) {
|
|
20842
|
+
if (lang === this.lang) {
|
|
20843
|
+
return;
|
|
20844
|
+
}
|
|
20845
|
+
localStorage.setItem(LANG_STORAGE_KEY, lang);
|
|
20846
|
+
window.location.reload();
|
|
20847
|
+
}
|
|
20848
|
+
/**
|
|
20849
|
+
* Obtiene el idioma almacenado en localStorage.
|
|
20850
|
+
* Si no existe o no es válido, retorna el idioma por defecto.
|
|
20851
|
+
*/
|
|
20852
|
+
getStoredLang() {
|
|
20853
|
+
const stored = localStorage.getItem(LANG_STORAGE_KEY);
|
|
20854
|
+
if (stored === 'es' || stored === 'en') {
|
|
20855
|
+
return stored;
|
|
20856
|
+
}
|
|
20857
|
+
return DEFAULT_LANG;
|
|
20858
|
+
}
|
|
20859
|
+
/**
|
|
20860
|
+
* Verifica si el idioma actual es español
|
|
20861
|
+
*/
|
|
20862
|
+
get isSpanish() {
|
|
20863
|
+
return this.lang === 'es';
|
|
20864
|
+
}
|
|
20865
|
+
/**
|
|
20866
|
+
* Verifica si el idioma actual es inglés
|
|
20867
|
+
*/
|
|
20868
|
+
get isEnglish() {
|
|
20869
|
+
return this.lang === 'en';
|
|
20870
|
+
}
|
|
20871
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocaleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20872
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocaleService, providedIn: 'root' }); }
|
|
20873
|
+
}
|
|
20874
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocaleService, decorators: [{
|
|
20875
|
+
type: Injectable,
|
|
20876
|
+
args: [{ providedIn: 'root' }]
|
|
20877
|
+
}], ctorParameters: () => [] });
|
|
20878
|
+
|
|
20567
20879
|
/**
|
|
20568
20880
|
* Service for displaying toast notifications using Ionic's ToastController.
|
|
20569
20881
|
* Provides methods to show and present toasts with custom options.
|
|
@@ -24966,7 +25278,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
24966
25278
|
* ```
|
|
24967
25279
|
*/
|
|
24968
25280
|
class AuthService {
|
|
24969
|
-
constructor(config, http, router, stateService, tokenService, storageService, syncService, firebaseService, messagingService) {
|
|
25281
|
+
constructor(config, http, router, stateService, tokenService, storageService, syncService, firebaseService, messagingService, i18nService) {
|
|
24970
25282
|
this.config = config;
|
|
24971
25283
|
this.http = http;
|
|
24972
25284
|
this.router = router;
|
|
@@ -24976,6 +25288,7 @@ class AuthService {
|
|
|
24976
25288
|
this.syncService = syncService;
|
|
24977
25289
|
this.firebaseService = firebaseService;
|
|
24978
25290
|
this.messagingService = messagingService;
|
|
25291
|
+
this.i18nService = i18nService;
|
|
24979
25292
|
// Timer para refresh proactivo
|
|
24980
25293
|
this.refreshTimerId = null;
|
|
24981
25294
|
this.syncSubscription = null;
|
|
@@ -25426,6 +25739,15 @@ class AuthService {
|
|
|
25426
25739
|
if (this.config.enableDeviceRegistration) {
|
|
25427
25740
|
this.registerDeviceIfNeeded(); // fire-and-forget
|
|
25428
25741
|
}
|
|
25742
|
+
// Sincronizar idioma del usuario con i18n
|
|
25743
|
+
if (this.i18nService && 'language' in response && response.language) {
|
|
25744
|
+
const userLang = response.language;
|
|
25745
|
+
const currentLang = this.i18nService.lang();
|
|
25746
|
+
if (userLang !== currentLang) {
|
|
25747
|
+
this.i18nService.setLanguage(userLang);
|
|
25748
|
+
console.log(`[ValtechAuth] Language synced to: ${userLang}`);
|
|
25749
|
+
}
|
|
25750
|
+
}
|
|
25429
25751
|
}
|
|
25430
25752
|
clearState() {
|
|
25431
25753
|
this.stopRefreshTimer();
|
|
@@ -25771,7 +26093,7 @@ class AuthService {
|
|
|
25771
26093
|
}
|
|
25772
26094
|
return { platform: 'web', browser, os };
|
|
25773
26095
|
}
|
|
25774
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthService, deps: [{ token: VALTECH_AUTH_CONFIG }, { token: i1$8.HttpClient }, { token: i1$1.Router }, { token: AuthStateService }, { token: TokenService }, { token: AuthStorageService }, { token: AuthSyncService }, { token: FirebaseService }, { token: MessagingService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
26096
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthService, deps: [{ token: VALTECH_AUTH_CONFIG }, { token: i1$8.HttpClient }, { token: i1$1.Router }, { token: AuthStateService }, { token: TokenService }, { token: AuthStorageService }, { token: AuthSyncService }, { token: FirebaseService }, { token: MessagingService, optional: true }, { token: I18nService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
25775
26097
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthService, providedIn: 'root' }); }
|
|
25776
26098
|
}
|
|
25777
26099
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthService, decorators: [{
|
|
@@ -25782,6 +26104,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
25782
26104
|
args: [VALTECH_AUTH_CONFIG]
|
|
25783
26105
|
}] }, { type: i1$8.HttpClient }, { type: i1$1.Router }, { type: AuthStateService }, { type: TokenService }, { type: AuthStorageService }, { type: AuthSyncService }, { type: FirebaseService }, { type: MessagingService, decorators: [{
|
|
25784
26106
|
type: Optional
|
|
26107
|
+
}] }, { type: I18nService, decorators: [{
|
|
26108
|
+
type: Optional
|
|
25785
26109
|
}] }] });
|
|
25786
26110
|
|
|
25787
26111
|
/**
|
|
@@ -26473,6 +26797,154 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
26473
26797
|
*/
|
|
26474
26798
|
// Tipos
|
|
26475
26799
|
|
|
26800
|
+
/**
|
|
26801
|
+
* Servicio para gestionar presets de componentes.
|
|
26802
|
+
*
|
|
26803
|
+
* Los presets permiten definir configuraciones reutilizables
|
|
26804
|
+
* de componentes (tamaño, color, variante, etc.) que se pueden
|
|
26805
|
+
* aplicar con un nombre semántico.
|
|
26806
|
+
*
|
|
26807
|
+
* @example
|
|
26808
|
+
* // En un componente
|
|
26809
|
+
* presets = inject(PresetService);
|
|
26810
|
+
*
|
|
26811
|
+
* // Obtener preset
|
|
26812
|
+
* const buttonProps = this.presets.get<ButtonMetadata>('button', 'primary-action');
|
|
26813
|
+
* // { size: 'large', color: 'primary', fill: 'solid' }
|
|
26814
|
+
*/
|
|
26815
|
+
class PresetService {
|
|
26816
|
+
constructor() {
|
|
26817
|
+
this._presets = signal({});
|
|
26818
|
+
}
|
|
26819
|
+
/**
|
|
26820
|
+
* Obtiene un preset específico para un componente
|
|
26821
|
+
*
|
|
26822
|
+
* @param component Tipo de componente (ej: 'button', 'card', 'input')
|
|
26823
|
+
* @param presetName Nombre del preset (ej: 'primary-action', 'compact')
|
|
26824
|
+
* @returns Propiedades del preset o objeto vacío si no existe
|
|
26825
|
+
*
|
|
26826
|
+
* @example
|
|
26827
|
+
* // Obtener preset de botón
|
|
26828
|
+
* const props = presets.get<ButtonMetadata>('button', 'primary-action');
|
|
26829
|
+
*
|
|
26830
|
+
* // Usar en componente
|
|
26831
|
+
* <val-button [props]="props"></val-button>
|
|
26832
|
+
*/
|
|
26833
|
+
get(component, presetName) {
|
|
26834
|
+
const componentPresets = this._presets()[component];
|
|
26835
|
+
if (!componentPresets) {
|
|
26836
|
+
console.warn(`[presets] No presets registered for component: ${component}`);
|
|
26837
|
+
return {};
|
|
26838
|
+
}
|
|
26839
|
+
const preset = componentPresets[presetName];
|
|
26840
|
+
if (!preset) {
|
|
26841
|
+
console.warn(`[presets] Preset '${presetName}' not found for component: ${component}`);
|
|
26842
|
+
return {};
|
|
26843
|
+
}
|
|
26844
|
+
return preset;
|
|
26845
|
+
}
|
|
26846
|
+
/**
|
|
26847
|
+
* Verifica si existe un preset
|
|
26848
|
+
*/
|
|
26849
|
+
has(component, presetName) {
|
|
26850
|
+
return !!this._presets()[component]?.[presetName];
|
|
26851
|
+
}
|
|
26852
|
+
/**
|
|
26853
|
+
* Registra presets de la aplicación
|
|
26854
|
+
*
|
|
26855
|
+
* @param presets Configuración de presets
|
|
26856
|
+
*
|
|
26857
|
+
* @example
|
|
26858
|
+
* presets.registerPresets({
|
|
26859
|
+
* button: {
|
|
26860
|
+
* 'primary-action': { size: 'large', color: 'primary' },
|
|
26861
|
+
* },
|
|
26862
|
+
* card: {
|
|
26863
|
+
* 'feature': { variant: 'elevated' },
|
|
26864
|
+
* }
|
|
26865
|
+
* });
|
|
26866
|
+
*/
|
|
26867
|
+
registerPresets(presets) {
|
|
26868
|
+
this._presets.set(presets);
|
|
26869
|
+
}
|
|
26870
|
+
/**
|
|
26871
|
+
* Agrega presets para un componente específico (merge con existentes)
|
|
26872
|
+
*/
|
|
26873
|
+
registerComponentPresets(component, presets) {
|
|
26874
|
+
this._presets.update((current) => ({
|
|
26875
|
+
...current,
|
|
26876
|
+
[component]: {
|
|
26877
|
+
...current[component],
|
|
26878
|
+
...presets,
|
|
26879
|
+
},
|
|
26880
|
+
}));
|
|
26881
|
+
}
|
|
26882
|
+
/**
|
|
26883
|
+
* Obtiene todos los nombres de presets para un componente
|
|
26884
|
+
*/
|
|
26885
|
+
getPresetNames(component) {
|
|
26886
|
+
return Object.keys(this._presets()[component] || {});
|
|
26887
|
+
}
|
|
26888
|
+
/**
|
|
26889
|
+
* Obtiene todos los componentes con presets registrados
|
|
26890
|
+
*/
|
|
26891
|
+
getRegisteredComponents() {
|
|
26892
|
+
return Object.keys(this._presets());
|
|
26893
|
+
}
|
|
26894
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PresetService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
26895
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PresetService, providedIn: 'root' }); }
|
|
26896
|
+
}
|
|
26897
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PresetService, decorators: [{
|
|
26898
|
+
type: Injectable,
|
|
26899
|
+
args: [{ providedIn: 'root' }]
|
|
26900
|
+
}] });
|
|
26901
|
+
|
|
26902
|
+
/**
|
|
26903
|
+
* Configura el sistema de presets de Valtech Components.
|
|
26904
|
+
*
|
|
26905
|
+
* @param presets Configuración de presets por componente
|
|
26906
|
+
* @returns Providers para agregar en app.config.ts
|
|
26907
|
+
*
|
|
26908
|
+
* @example
|
|
26909
|
+
* // app.config.ts
|
|
26910
|
+
* import { provideValtechPresets } from 'valtech-components';
|
|
26911
|
+
*
|
|
26912
|
+
* export const appConfig: ApplicationConfig = {
|
|
26913
|
+
* providers: [
|
|
26914
|
+
* provideValtechPresets({
|
|
26915
|
+
* button: {
|
|
26916
|
+
* 'primary-action': { size: 'large', color: 'primary', fill: 'solid' },
|
|
26917
|
+
* 'secondary': { size: 'medium', color: 'secondary', fill: 'outline' },
|
|
26918
|
+
* 'danger': { size: 'medium', color: 'danger', fill: 'solid' },
|
|
26919
|
+
* },
|
|
26920
|
+
* card: {
|
|
26921
|
+
* 'feature': { variant: 'elevated', padding: 'large' },
|
|
26922
|
+
* 'compact': { variant: 'flat', padding: 'small' },
|
|
26923
|
+
* },
|
|
26924
|
+
* input: {
|
|
26925
|
+
* 'form-field': { size: 'medium', fill: 'outline', labelPosition: 'floating' },
|
|
26926
|
+
* }
|
|
26927
|
+
* }),
|
|
26928
|
+
* ]
|
|
26929
|
+
* };
|
|
26930
|
+
*/
|
|
26931
|
+
function provideValtechPresets(presets) {
|
|
26932
|
+
return makeEnvironmentProviders([
|
|
26933
|
+
{
|
|
26934
|
+
provide: APP_INITIALIZER,
|
|
26935
|
+
useFactory: (presetService) => {
|
|
26936
|
+
return () => {
|
|
26937
|
+
presetService.registerPresets(presets);
|
|
26938
|
+
};
|
|
26939
|
+
},
|
|
26940
|
+
deps: [PresetService],
|
|
26941
|
+
multi: true,
|
|
26942
|
+
},
|
|
26943
|
+
]);
|
|
26944
|
+
}
|
|
26945
|
+
|
|
26946
|
+
// Service
|
|
26947
|
+
|
|
26476
26948
|
/*
|
|
26477
26949
|
* Public API Surface of valtech-components
|
|
26478
26950
|
*/
|
|
@@ -26481,5 +26953,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
26481
26953
|
* Generated bundle index. Do not edit.
|
|
26482
26954
|
*/
|
|
26483
26955
|
|
|
26484
|
-
export { ARTICLE_SPACING, AccordionComponent, ActionHeaderComponent, ActionType, AlertBoxComponent, ArticleBuilder, ArticleComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, BannerComponent, BaseDefault, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, CheckInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContentLoaderComponent, CountdownComponent, CurrencyInputComponent, DEFAULT_AUTH_CONFIG, DEFAULT_CANCEL_BUTTON, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_EMPTY_STATE, DEFAULT_LEGEND_LABELS, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PAYMENT_STATUS_COLORS, DEFAULT_PAYMENT_STATUS_LABELS, DEFAULT_PLATFORMS, DEFAULT_STATUS_COLORS, DEFAULT_STATUS_LABELS, DEFAULT_WINNER_LABELS, DataTableComponent, DateInputComponent, DateRangeInputComponent, DeviceService, DisplayComponent, DividerComponent, DownloadService, EmailInputComponent, ExpandableTextComponent, FabComponent, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FooterComponent, FooterLinksComponent, FormComponent, FormFooterComponent, FunHeaderComponent, GlowCardComponent, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, Icon, IconComponent, IconService, ImageComponent, InAppBrowserService, InfoComponent, InputType, ItemListComponent, LanguageSelectorComponent, LayeredCardComponent, LayoutComponent, LinkComponent, LinkProcessorService, LinksAccordionComponent, LinksCakeComponent, LocalStorageService, LocaleService, MODAL_SIZES, MOTION, MenuComponent, MessagingService, ModalService, MultiSelectSearchComponent, NavigationService, NoContentComponent, NotesBoxComponent, NotificationsService, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PLATFORM_CONFIGS, PageContentComponent, PageTemplateComponent, PageWrapperComponent, PaginationComponent, ParticipantCardComponent, PasswordInputComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PriceTagComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QueryBuilder, QuoteBoxComponent, RadioInputComponent, RaffleStatusCardComponent, RangeInputComponent, RatingComponent, RecapCardComponent, RightsFooterComponent, SKELETON_PRESETS, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SegmentControlComponent, SelectSearchComponent, SessionService, ShareButtonsComponent, SimpleComponent, SkeletonComponent, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, TabbedContentComponent, TabsComponent, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TicketGridComponent, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TypedCollection, VALTECH_AUTH_CONFIG, VALTECH_FIREBASE_CONFIG, WinnerDisplayComponent, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, buildPath, collections, createFirebaseConfig, createGlowCardProps, createNumberFromToField, createTitleProps, extractPathParams, getCollectionPath, getDocumentId, goToTop, guestGuard, hasEmulators, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, permissionGuard, permissionGuardFromRoute, provideValtechAuth, provideValtechAuthInterceptor, provideValtechFirebase, query, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard };
|
|
26956
|
+
export { ARTICLE_SPACING, AccordionComponent, ActionHeaderComponent, ActionType, AlertBoxComponent, ArticleBuilder, ArticleComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, BannerComponent, BaseDefault, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, CheckInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContentLoaderComponent, CountdownComponent, CurrencyInputComponent, DEFAULT_AUTH_CONFIG, DEFAULT_CANCEL_BUTTON, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_EMPTY_STATE, DEFAULT_LEGEND_LABELS, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PAYMENT_STATUS_COLORS, DEFAULT_PAYMENT_STATUS_LABELS, DEFAULT_PLATFORMS, DEFAULT_STATUS_COLORS, DEFAULT_STATUS_LABELS, DEFAULT_WINNER_LABELS, DataTableComponent, DateInputComponent, DateRangeInputComponent, DeviceService, DisplayComponent, DividerComponent, DownloadService, EmailInputComponent, ExpandableTextComponent, FabComponent, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FooterComponent, FooterLinksComponent, FormComponent, FormFooterComponent, FunHeaderComponent, GlowCardComponent, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, I18nService, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, Icon, IconComponent, IconService, ImageComponent, InAppBrowserService, InfoComponent, InputType, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LanguageSelectorComponent, LayeredCardComponent, LayoutComponent, LinkComponent, LinkProcessorService, LinksAccordionComponent, LinksCakeComponent, LocalStorageService, LocaleService, MODAL_SIZES, MOTION, MenuComponent, MessagingService, ModalService, MultiSelectSearchComponent, NavigationService, NoContentComponent, NotesBoxComponent, NotificationsService, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PLATFORM_CONFIGS, PageContentComponent, PageTemplateComponent, PageWrapperComponent, PaginationComponent, ParticipantCardComponent, PasswordInputComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PresetService, PriceTagComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QueryBuilder, QuoteBoxComponent, RadioInputComponent, RaffleStatusCardComponent, RangeInputComponent, RatingComponent, RecapCardComponent, RightsFooterComponent, SKELETON_PRESETS, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SegmentControlComponent, SelectSearchComponent, SessionService, ShareButtonsComponent, SimpleComponent, SkeletonComponent, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, TabbedContentComponent, TabsComponent, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TicketGridComponent, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TranslatePipe, TypedCollection, VALTECH_AUTH_CONFIG, VALTECH_FIREBASE_CONFIG, WinnerDisplayComponent, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, buildPath, collections, createFirebaseConfig, createGlowCardProps, createNumberFromToField, createTitleProps, extractPathParams, getCollectionPath, getDocumentId, goToTop, guestGuard, hasEmulators, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, permissionGuard, permissionGuardFromRoute, provideValtechAuth, provideValtechAuthInterceptor, provideValtechFirebase, provideValtechI18n, provideValtechPresets, query, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard };
|
|
26485
26957
|
//# sourceMappingURL=valtech-components.mjs.map
|