valtech-components 2.0.829 → 2.0.831

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.
@@ -53,7 +53,7 @@ import 'prismjs/components/prism-json';
53
53
  * Current version of valtech-components.
54
54
  * This is automatically updated during the publish process.
55
55
  */
56
- const VERSION = '2.0.829';
56
+ const VERSION = '2.0.831';
57
57
 
58
58
  /**
59
59
  * Servicio para gestionar presets de componentes.
@@ -19839,6 +19839,15 @@ class AppVersionService {
19839
19839
  this.swUpdate.versionUpdates
19840
19840
  .pipe(filter$1(evt => evt.type === 'VERSION_READY'), takeUntilDestroyed(this.destroyRef))
19841
19841
  .subscribe(() => this.swUpdateReady.set(true));
19842
+ // SW en estado irrecuperable — la caché del service worker se corrompió o
19843
+ // fue parcialmente evictada (común en PWAs standalone de iOS tras deploys
19844
+ // repetidos). La app no puede cargar sus assets → pantalla en blanco.
19845
+ // Recuperación recomendada por Angular: recargar para traer todo fresco
19846
+ // desde la red.
19847
+ this.swUpdate.unrecoverable.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(event => {
19848
+ console.error('[AppVersionService] SW unrecoverable — reloading:', event.reason);
19849
+ this.document.defaultView?.location.reload();
19850
+ });
19842
19851
  // Chequeo periódico.
19843
19852
  const intervalMs = this.serviceConfig?.checkIntervalMs ?? DEFAULT_APP_VERSION_SERVICE_CONFIG.checkIntervalMs;
19844
19853
  interval(intervalMs)
@@ -24636,14 +24645,34 @@ class AuthService {
24636
24645
  void this.ensureFirebaseSessionOnBootstrap();
24637
24646
  }
24638
24647
  else if (storedState.refreshToken) {
24639
- // 4. Token expirado pero hay refresh token - intentar refrescar
24640
- try {
24641
- await firstValueFrom(this.refreshAccessToken());
24648
+ // 4. Token expirado pero hay refresh token.
24649
+ //
24650
+ // NO bloqueamos el bootstrap esperando la red: un /refresh en una
24651
+ // Lambda fría son 2-5s de pantalla en blanco (Angular no renderiza
24652
+ // nada hasta que el APP_INITIALIZER resuelve).
24653
+ //
24654
+ // Restauración optimista: el access token expiró pero sus claims
24655
+ // (uid/email/roles) siguen decodificables — `parseToken` NO valida
24656
+ // `exp`. Restauramos la sesión desde esos claims para que la app
24657
+ // renderice el shell autenticado de inmediato, y disparamos el
24658
+ // /refresh en segundo plano (fire-and-forget).
24659
+ //
24660
+ // Seguridad de la ventana sub-segundo antes de que el refresh llegue:
24661
+ // cualquier API call sale con el token expirado → 401 → el
24662
+ // authInterceptor refresca + reintenta automáticamente. Si el refresh
24663
+ // de fondo falla → signOut + clearState.
24664
+ console.log('[ValtechAuth] bootstrap — access token expired, refreshing in background');
24665
+ this.stateService.restoreFromStorage(storedState);
24666
+ const expiredClaims = this.tokenService.parseToken(storedState.accessToken);
24667
+ if (expiredClaims) {
24668
+ this.stateService.updateUserInfo(expiredClaims.uid, expiredClaims.email);
24642
24669
  }
24643
- catch {
24670
+ // Refresh en segundo plano — NO se hace await: initialize() resuelve ya.
24671
+ firstValueFrom(this.refreshAccessToken()).catch(() => {
24672
+ console.warn('[ValtechAuth] bootstrap — background refresh failed, signing out');
24644
24673
  this.signOutFirebase();
24645
24674
  this.clearState();
24646
- }
24675
+ });
24647
24676
  }
24648
24677
  else {
24649
24678
  this.signOutFirebase();
@@ -27493,6 +27522,294 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
27493
27522
  type: Output
27494
27523
  }] } });
27495
27524
 
27525
+ /**
27526
+ * DebugConsole Types
27527
+ *
27528
+ * Tipos para el overlay de logs en pantalla (`val-debug-console`).
27529
+ */
27530
+ /**
27531
+ * Configuración por defecto: deshabilitado (inerte).
27532
+ */
27533
+ const DEFAULT_DEBUG_CONSOLE_CONFIG = {
27534
+ enabled: false,
27535
+ };
27536
+
27537
+ /**
27538
+ * DebugConsole Provider
27539
+ *
27540
+ * Provider e injection token para el overlay de logs `val-debug-console`.
27541
+ */
27542
+ /**
27543
+ * Token de inyección para la configuración de DebugConsole.
27544
+ */
27545
+ const VALTECH_DEBUG_CONSOLE = new InjectionToken('ValtechDebugConsole');
27546
+ /**
27547
+ * Provee el overlay de logs `val-debug-console` a la aplicación Angular.
27548
+ *
27549
+ * El componente parchea `console.*` para espejar cada llamada a un panel en
27550
+ * pantalla — útil para leer logs en un PWA iOS añadido al home screen, donde
27551
+ * la consola del navegador no es accesible.
27552
+ *
27553
+ * El gate `enabled` lo decide la app (la lib no puede importar su
27554
+ * `environment`). Sin provider, el componente queda inerte (`enabled: false`).
27555
+ *
27556
+ * @example
27557
+ * ```typescript
27558
+ * // main.ts
27559
+ * import { provideValtechDebugConsole } from 'valtech-components';
27560
+ * import { environment } from './environments/environment';
27561
+ *
27562
+ * bootstrapApplication(AppComponent, {
27563
+ * providers: [
27564
+ * provideValtechDebugConsole({ enabled: !environment.production }),
27565
+ * ],
27566
+ * });
27567
+ * ```
27568
+ *
27569
+ * Luego declarar `<val-debug-console />` una vez en el componente raíz.
27570
+ */
27571
+ function provideValtechDebugConsole(config = {}) {
27572
+ const mergedConfig = {
27573
+ ...DEFAULT_DEBUG_CONSOLE_CONFIG,
27574
+ ...config,
27575
+ };
27576
+ return makeEnvironmentProviders([{ provide: VALTECH_DEBUG_CONSOLE, useValue: mergedConfig }]);
27577
+ }
27578
+
27579
+ /**
27580
+ * `val-debug-console` — overlay de logs en pantalla para diagnóstico.
27581
+ *
27582
+ * Herramienta de desarrollo. Permite leer los `console.*` desde un PWA en iOS
27583
+ * añadido a la pantalla de inicio, donde la consola del navegador no es
27584
+ * accesible.
27585
+ *
27586
+ * Comportamiento:
27587
+ * - Monkey-patch de `console.log/warn/error/info`: cada llamada también empuja
27588
+ * una entrada al buffer (últimas ~150) además de llamar al `console` original.
27589
+ * - Botón flotante (esquina) que abre/cierra un panel scrollable con las
27590
+ * entradas más nuevas abajo, coloreadas por nivel.
27591
+ * - Botones "copiar" (al portapapeles) y "limpiar".
27592
+ *
27593
+ * Gate maestro vía `provideValtechDebugConsole({ enabled })` en `main.ts`. Sin
27594
+ * provider — o con `enabled: false` — el componente NO parchea `console` y NO
27595
+ * renderiza nada. La app decide el valor (normalmente `!environment.production`).
27596
+ *
27597
+ * i18n: NO usa i18n a propósito — es un dev-tool que ningún end-user ve;
27598
+ * los labels van en español plano.
27599
+ *
27600
+ * @example
27601
+ * ```typescript
27602
+ * // main.ts
27603
+ * provideValtechDebugConsole({ enabled: !environment.production }),
27604
+ * ```
27605
+ * ```html
27606
+ * <!-- componente raíz, una sola vez -->
27607
+ * <val-debug-console />
27608
+ * ```
27609
+ */
27610
+ /** Máximo de entradas retenidas en el buffer. */
27611
+ const MAX_ENTRIES = 150;
27612
+ class DebugConsoleComponent {
27613
+ constructor() {
27614
+ /** Gate maestro: `false` (sin provider o `enabled: false`) → todo inerte. */
27615
+ this.enabled = inject(VALTECH_DEBUG_CONSOLE, { optional: true })?.enabled ?? false;
27616
+ this.open = signal(false);
27617
+ this.entries = signal([]);
27618
+ /**
27619
+ * Buffer plano (NO signal). `console.log` puede invocarse dentro de un
27620
+ * `effect()`/`computed()`; escribir el signal `entries` ahí mismo dispara
27621
+ * NG0600. Acumulamos en este array y volcamos al signal en un microtask,
27622
+ * fuera de todo contexto reactivo.
27623
+ */
27624
+ this.buffer = [];
27625
+ this.flushScheduled = false;
27626
+ /** Referencias a los métodos originales para restaurarlos en destroy. */
27627
+ this.original = {};
27628
+ }
27629
+ ngOnInit() {
27630
+ if (!this.enabled)
27631
+ return;
27632
+ this.patchConsole();
27633
+ }
27634
+ ngOnDestroy() {
27635
+ if (!this.enabled)
27636
+ return;
27637
+ this.restoreConsole();
27638
+ }
27639
+ toggle() {
27640
+ this.open.update(v => !v);
27641
+ }
27642
+ clear() {
27643
+ this.buffer = [];
27644
+ this.entries.set([]);
27645
+ }
27646
+ async copy() {
27647
+ const text = this.entries()
27648
+ .map(e => `${e.ts} [${e.level}] ${e.text}`)
27649
+ .join('\n');
27650
+ try {
27651
+ await navigator.clipboard.writeText(text);
27652
+ }
27653
+ catch {
27654
+ // Fallback para WebViews sin Clipboard API.
27655
+ const ta = document.createElement('textarea');
27656
+ ta.value = text;
27657
+ ta.style.position = 'fixed';
27658
+ ta.style.opacity = '0';
27659
+ document.body.appendChild(ta);
27660
+ ta.select();
27661
+ try {
27662
+ document.execCommand('copy');
27663
+ }
27664
+ catch {
27665
+ /* sin recurso de copia disponible */
27666
+ }
27667
+ document.body.removeChild(ta);
27668
+ }
27669
+ }
27670
+ /** Reemplaza los métodos de `console` para espejar cada llamada al buffer. */
27671
+ patchConsole() {
27672
+ const levels = ['log', 'warn', 'error', 'info'];
27673
+ for (const level of levels) {
27674
+ const orig = console[level].bind(console);
27675
+ this.original[level] = orig;
27676
+ console[level] = (...args) => {
27677
+ orig(...args);
27678
+ this.push(level, args);
27679
+ };
27680
+ }
27681
+ }
27682
+ /** Restaura los métodos originales de `console`. */
27683
+ restoreConsole() {
27684
+ for (const level of Object.keys(this.original)) {
27685
+ const orig = this.original[level];
27686
+ if (orig) {
27687
+ console[level] = orig;
27688
+ }
27689
+ }
27690
+ this.original = {};
27691
+ }
27692
+ /**
27693
+ * Agrega una entrada al buffer plano y programa el volcado al signal.
27694
+ * El volcado se difiere a un microtask: `console.log` puede llamarse desde
27695
+ * dentro de un `effect()`, y escribir un signal ahí lanzaría NG0600.
27696
+ */
27697
+ push(level, args) {
27698
+ const text = args.map(a => this.stringify(a)).join(' ');
27699
+ const ts = new Date().toISOString().slice(11, 23);
27700
+ this.buffer.push({ ts, level, text });
27701
+ if (this.buffer.length > MAX_ENTRIES) {
27702
+ this.buffer = this.buffer.slice(this.buffer.length - MAX_ENTRIES);
27703
+ }
27704
+ this.scheduleFlush();
27705
+ }
27706
+ /**
27707
+ * Vuelca el buffer al signal `entries` en un microtask — fuera del contexto
27708
+ * reactivo desde el que se haya llamado `console.log`. Batchea: múltiples
27709
+ * logs del mismo tick resultan en una sola escritura del signal.
27710
+ */
27711
+ scheduleFlush() {
27712
+ if (this.flushScheduled)
27713
+ return;
27714
+ this.flushScheduled = true;
27715
+ queueMicrotask(() => {
27716
+ this.flushScheduled = false;
27717
+ this.entries.set([...this.buffer]);
27718
+ });
27719
+ }
27720
+ /** Convierte cualquier argumento a una representación legible de una línea. */
27721
+ stringify(value) {
27722
+ if (typeof value === 'string')
27723
+ return value;
27724
+ if (value instanceof Error)
27725
+ return `${value.name}: ${value.message}`;
27726
+ try {
27727
+ return JSON.stringify(value);
27728
+ }
27729
+ catch {
27730
+ return String(value);
27731
+ }
27732
+ }
27733
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DebugConsoleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27734
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DebugConsoleComponent, isStandalone: true, selector: "val-debug-console", ngImport: i0, template: `
27735
+ @if (enabled) {
27736
+ <button
27737
+ type="button"
27738
+ class="dbg-fab"
27739
+ (click)="toggle()"
27740
+ [attr.aria-label]="open() ? 'Cerrar consola' : 'Abrir consola'"
27741
+ >
27742
+ {{ open() ? '×' : '‹/›' }}
27743
+ @if (!open() && entries().length) {
27744
+ <span class="dbg-fab__count">{{ entries().length }}</span>
27745
+ }
27746
+ </button>
27747
+
27748
+ @if (open()) {
27749
+ <div class="dbg-panel" role="log">
27750
+ <div class="dbg-panel__bar">
27751
+ <span class="dbg-panel__title"> Debug · {{ entries().length }} </span>
27752
+ <span class="dbg-panel__actions">
27753
+ <button type="button" (click)="copy()">copiar</button>
27754
+ <button type="button" (click)="clear()">limpiar</button>
27755
+ </span>
27756
+ </div>
27757
+ <div class="dbg-panel__body">
27758
+ @for (e of entries(); track $index) {
27759
+ <div class="dbg-line" [class]="'dbg-line--' + e.level">
27760
+ <span class="dbg-line__ts">{{ e.ts }}</span>
27761
+ <span class="dbg-line__text">{{ e.text }}</span>
27762
+ </div>
27763
+ } @empty {
27764
+ <div class="dbg-empty">Sin logs todavía.</div>
27765
+ }
27766
+ </div>
27767
+ </div>
27768
+ }
27769
+ }
27770
+ `, isInline: true, styles: [":host{position:fixed;z-index:2147483000;inset:auto 0 0 auto;pointer-events:none}.dbg-fab,.dbg-panel{pointer-events:auto}.dbg-fab{position:fixed;right:calc(12px + env(safe-area-inset-right,0px));bottom:calc(12px + env(safe-area-inset-bottom,0px));width:48px;height:48px;border-radius:50%;border:0;background:#1a1a1a;color:#fff;font-size:16px;font-weight:700;cursor:pointer;box-shadow:0 2px 10px #0006;display:flex;align-items:center;justify-content:center}.dbg-fab__count{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 4px;border-radius:9px;background:#d33;color:#fff;font-size:11px;line-height:18px;text-align:center}.dbg-panel{position:fixed;right:calc(8px + env(safe-area-inset-right,0px));left:calc(8px + env(safe-area-inset-left,0px));bottom:calc(68px + env(safe-area-inset-bottom,0px));max-width:560px;margin:0 auto;max-height:55vh;display:flex;flex-direction:column;background:#101010;color:#eee;border-radius:10px;box-shadow:0 6px 24px #00000080;overflow:hidden;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.dbg-panel__bar{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;background:#1c1c1c;border-bottom:1px solid #2c2c2c}.dbg-panel__title{font-size:12px;font-weight:700}.dbg-panel__actions button{margin-left:8px;background:#2c2c2c;color:#eee;border:0;border-radius:6px;padding:4px 10px;font-size:11px;cursor:pointer}.dbg-panel__body{overflow-y:auto;padding:6px 8px;-webkit-overflow-scrolling:touch}.dbg-line{display:flex;gap:6px;padding:3px 0;font-size:11px;line-height:1.4;border-bottom:1px solid rgba(255,255,255,.04);word-break:break-word}.dbg-line__ts{flex-shrink:0;color:#777}.dbg-line__text{white-space:pre-wrap}.dbg-line--log .dbg-line__text{color:#ddd}.dbg-line--info .dbg-line__text{color:#6cb6ff}.dbg-line--warn .dbg-line__text{color:#f1c40f}.dbg-line--error .dbg-line__text{color:#ff6b6b}.dbg-empty{padding:12px;font-size:11px;color:#777;text-align:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27771
+ }
27772
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DebugConsoleComponent, decorators: [{
27773
+ type: Component,
27774
+ args: [{ selector: 'val-debug-console', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
27775
+ @if (enabled) {
27776
+ <button
27777
+ type="button"
27778
+ class="dbg-fab"
27779
+ (click)="toggle()"
27780
+ [attr.aria-label]="open() ? 'Cerrar consola' : 'Abrir consola'"
27781
+ >
27782
+ {{ open() ? '×' : '‹/›' }}
27783
+ @if (!open() && entries().length) {
27784
+ <span class="dbg-fab__count">{{ entries().length }}</span>
27785
+ }
27786
+ </button>
27787
+
27788
+ @if (open()) {
27789
+ <div class="dbg-panel" role="log">
27790
+ <div class="dbg-panel__bar">
27791
+ <span class="dbg-panel__title"> Debug · {{ entries().length }} </span>
27792
+ <span class="dbg-panel__actions">
27793
+ <button type="button" (click)="copy()">copiar</button>
27794
+ <button type="button" (click)="clear()">limpiar</button>
27795
+ </span>
27796
+ </div>
27797
+ <div class="dbg-panel__body">
27798
+ @for (e of entries(); track $index) {
27799
+ <div class="dbg-line" [class]="'dbg-line--' + e.level">
27800
+ <span class="dbg-line__ts">{{ e.ts }}</span>
27801
+ <span class="dbg-line__text">{{ e.text }}</span>
27802
+ </div>
27803
+ } @empty {
27804
+ <div class="dbg-empty">Sin logs todavía.</div>
27805
+ }
27806
+ </div>
27807
+ </div>
27808
+ }
27809
+ }
27810
+ `, styles: [":host{position:fixed;z-index:2147483000;inset:auto 0 0 auto;pointer-events:none}.dbg-fab,.dbg-panel{pointer-events:auto}.dbg-fab{position:fixed;right:calc(12px + env(safe-area-inset-right,0px));bottom:calc(12px + env(safe-area-inset-bottom,0px));width:48px;height:48px;border-radius:50%;border:0;background:#1a1a1a;color:#fff;font-size:16px;font-weight:700;cursor:pointer;box-shadow:0 2px 10px #0006;display:flex;align-items:center;justify-content:center}.dbg-fab__count{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 4px;border-radius:9px;background:#d33;color:#fff;font-size:11px;line-height:18px;text-align:center}.dbg-panel{position:fixed;right:calc(8px + env(safe-area-inset-right,0px));left:calc(8px + env(safe-area-inset-left,0px));bottom:calc(68px + env(safe-area-inset-bottom,0px));max-width:560px;margin:0 auto;max-height:55vh;display:flex;flex-direction:column;background:#101010;color:#eee;border-radius:10px;box-shadow:0 6px 24px #00000080;overflow:hidden;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.dbg-panel__bar{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;background:#1c1c1c;border-bottom:1px solid #2c2c2c}.dbg-panel__title{font-size:12px;font-weight:700}.dbg-panel__actions button{margin-left:8px;background:#2c2c2c;color:#eee;border:0;border-radius:6px;padding:4px 10px;font-size:11px;cursor:pointer}.dbg-panel__body{overflow-y:auto;padding:6px 8px;-webkit-overflow-scrolling:touch}.dbg-line{display:flex;gap:6px;padding:3px 0;font-size:11px;line-height:1.4;border-bottom:1px solid rgba(255,255,255,.04);word-break:break-word}.dbg-line__ts{flex-shrink:0;color:#777}.dbg-line__text{white-space:pre-wrap}.dbg-line--log .dbg-line__text{color:#ddd}.dbg-line--info .dbg-line__text{color:#6cb6ff}.dbg-line--warn .dbg-line__text{color:#f1c40f}.dbg-line--error .dbg-line__text{color:#ff6b6b}.dbg-empty{padding:12px;font-size:11px;color:#777;text-align:center}\n"] }]
27811
+ }] });
27812
+
27496
27813
  /**
27497
27814
  * ToolbarComponent
27498
27815
  *
@@ -45964,5 +46281,5 @@ function buildFooterLinks(links, t, resolver) {
45964
46281
  * Generated bundle index. Do not edit.
45965
46282
  */
45966
46283
 
45967
- export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, ARTICLE_SPACING, AVATAR_UPLOAD_DEFAULTS, AccordionComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AppConfigService, AppVersionService, ArticleBuilder, ArticleComponent, AuthBackgroundComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BaseDefault, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentTransformer, CookieBannerComponent, CountdownComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_CANCEL_BUTTON, DEFAULT_CHECK_INTERVAL_MS, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_DONATION_CONFIG, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DataTableComponent, DateInputComponent, DateRangeInputComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EmailInputComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FooterComponent, FooterLinksComponent, FormComponent, FormFooterComponent, FormSkeletonComponent, FunHeaderComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGIN_DEFAULTS, LanguageSelectorComponent, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginComponent, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MenuComponent, MessagingService, MetaService, ModalService, MultiSelectSearchComponent, NavigationService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationsService, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OrgSwitchService, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PATTERN_MOTIFS, PATTERN_PALETTES, PLATFORM_CONFIGS, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PresetService, PriceTagComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProfileSkeletonComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QueryBuilder, QuoteBoxComponent, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RightsFooterComponent, RotatingTextComponent, SHAPE_KEYS, SKELETON_LAYOUT_DEFAULT_ROWS, SKELETON_PRESETS, SOLID_KEYS, 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, SkeletonLayoutComponent, SkeletonService, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TranslatePipe, TypedCollection, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_DEFAULT_CONTENT, VALTECH_DONATION_CONFIG, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_SOCIAL_LINKS, VERSION, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, blogPost, buildFooterLinks, buildPath, collections, connectPageRefresh, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createRefreshableStream, createTitleProps, docs, extractPathParams, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, guestGuard, hasEmulators, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, provideValtechAds, provideValtechAppConfig, provideValtechAppVersion, provideValtechAuth, provideValtechAuthInterceptor, provideValtechDonations, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechPresets, provideValtechSkeleton, query, renderPatternSvgInner, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard, toArticle };
46284
+ export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, ARTICLE_SPACING, AVATAR_UPLOAD_DEFAULTS, AccordionComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AppConfigService, AppVersionService, ArticleBuilder, ArticleComponent, AuthBackgroundComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BaseDefault, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentTransformer, CookieBannerComponent, CountdownComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_CANCEL_BUTTON, DEFAULT_CHECK_INTERVAL_MS, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_DEBUG_CONSOLE_CONFIG, DEFAULT_DONATION_CONFIG, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DataTableComponent, DateInputComponent, DateRangeInputComponent, DebugConsoleComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EmailInputComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FooterComponent, FooterLinksComponent, FormComponent, FormFooterComponent, FormSkeletonComponent, FunHeaderComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGIN_DEFAULTS, LanguageSelectorComponent, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginComponent, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MenuComponent, MessagingService, MetaService, ModalService, MultiSelectSearchComponent, NavigationService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationsService, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OrgSwitchService, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PATTERN_MOTIFS, PATTERN_PALETTES, PLATFORM_CONFIGS, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PresetService, PriceTagComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProfileSkeletonComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QueryBuilder, QuoteBoxComponent, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RightsFooterComponent, RotatingTextComponent, SHAPE_KEYS, SKELETON_LAYOUT_DEFAULT_ROWS, SKELETON_PRESETS, SOLID_KEYS, 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, SkeletonLayoutComponent, SkeletonService, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TranslatePipe, TypedCollection, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_DEBUG_CONSOLE, VALTECH_DEFAULT_CONTENT, VALTECH_DONATION_CONFIG, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_SOCIAL_LINKS, VERSION, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, blogPost, buildFooterLinks, buildPath, collections, connectPageRefresh, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createRefreshableStream, createTitleProps, docs, extractPathParams, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, guestGuard, hasEmulators, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, provideValtechAds, provideValtechAppConfig, provideValtechAppVersion, provideValtechAuth, provideValtechAuthInterceptor, provideValtechDebugConsole, provideValtechDonations, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechPresets, provideValtechSkeleton, query, renderPatternSvgInner, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard, toArticle };
45968
46285
  //# sourceMappingURL=valtech-components.mjs.map