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.
- package/esm2022/lib/components/organisms/debug-console/config.mjs +44 -0
- package/esm2022/lib/components/organisms/debug-console/debug-console.component.mjs +237 -0
- package/esm2022/lib/components/organisms/debug-console/types.mjs +12 -0
- package/esm2022/lib/services/app-version/app-version.service.mjs +10 -1
- package/esm2022/lib/services/auth/auth.service.mjs +26 -6
- package/esm2022/lib/services/firebase/notifications.service.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/valtech-components.mjs +324 -7
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
- package/lib/components/organisms/article/article.component.d.ts +2 -2
- package/lib/components/organisms/debug-console/config.d.ts +37 -0
- package/lib/components/organisms/debug-console/debug-console.component.d.ts +44 -0
- package/lib/components/organisms/debug-console/types.d.ts +27 -0
- package/lib/components/organisms/toolbar/toolbar.component.d.ts +1 -1
- package/lib/services/firebase/notifications.service.d.ts +0 -2
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
|
@@ -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.
|
|
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
|
|
24640
|
-
|
|
24641
|
-
|
|
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
|
-
|
|
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
|