valtech-components 2.0.800 → 2.0.802
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/content-reaction/content-reaction.component.mjs +13 -21
- package/esm2022/lib/components/organisms/login/login.component.mjs +14 -20
- package/esm2022/lib/components/templates/page-wrapper/page-wrapper.component.mjs +37 -3
- package/esm2022/lib/services/auth/guards.mjs +9 -4
- package/esm2022/lib/services/page-refresh/page-refresh.service.mjs +77 -0
- package/esm2022/lib/services/toast.service.mjs +9 -3
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/valtech-components.mjs +148 -44
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/templates/page-wrapper/page-wrapper.component.d.ts +9 -0
- package/lib/services/auth/guards.d.ts +3 -0
- package/lib/services/page-refresh/page-refresh.service.d.ts +64 -0
- package/lib/services/toast.service.d.ts +6 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -52,7 +52,7 @@ import 'prismjs/components/prism-json';
|
|
|
52
52
|
* Current version of valtech-components.
|
|
53
53
|
* This is automatically updated during the publish process.
|
|
54
54
|
*/
|
|
55
|
-
const VERSION = '2.0.
|
|
55
|
+
const VERSION = '2.0.802';
|
|
56
56
|
|
|
57
57
|
/**
|
|
58
58
|
* Servicio para gestionar presets de componentes.
|
|
@@ -31782,6 +31782,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
31782
31782
|
* Guard que verifica si el usuario está autenticado.
|
|
31783
31783
|
* Redirige a loginRoute si no está autenticado.
|
|
31784
31784
|
*
|
|
31785
|
+
* Preserva la URL solicitada en el query param `returnUrl` para que la
|
|
31786
|
+
* página de login pueda devolver al usuario a su destino tras autenticarse.
|
|
31787
|
+
*
|
|
31785
31788
|
* @example
|
|
31786
31789
|
* ```typescript
|
|
31787
31790
|
* import { authGuard } from 'valtech-components';
|
|
@@ -31795,14 +31798,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
31795
31798
|
* ];
|
|
31796
31799
|
* ```
|
|
31797
31800
|
*/
|
|
31798
|
-
const authGuard = () => {
|
|
31801
|
+
const authGuard = (_route, state) => {
|
|
31799
31802
|
const authService = inject(AuthService);
|
|
31800
31803
|
const router = inject(Router);
|
|
31801
31804
|
const config = inject(VALTECH_AUTH_CONFIG);
|
|
31802
31805
|
if (authService.isAuthenticated()) {
|
|
31803
31806
|
return true;
|
|
31804
31807
|
}
|
|
31805
|
-
return router.createUrlTree([config.loginRoute]
|
|
31808
|
+
return router.createUrlTree([config.loginRoute], {
|
|
31809
|
+
queryParams: { returnUrl: state.url },
|
|
31810
|
+
});
|
|
31806
31811
|
};
|
|
31807
31812
|
/**
|
|
31808
31813
|
* Guard que verifica si el usuario NO está autenticado.
|
|
@@ -31959,7 +31964,7 @@ function roleGuard(roles) {
|
|
|
31959
31964
|
const router = inject(Router);
|
|
31960
31965
|
const config = inject(VALTECH_AUTH_CONFIG);
|
|
31961
31966
|
const roleArray = Array.isArray(roles) ? roles : [roles];
|
|
31962
|
-
const hasRole = roleArray.some(
|
|
31967
|
+
const hasRole = roleArray.some(role => authService.hasRole(role));
|
|
31963
31968
|
if (hasRole) {
|
|
31964
31969
|
return true;
|
|
31965
31970
|
}
|
|
@@ -32803,14 +32808,20 @@ class ToastService {
|
|
|
32803
32808
|
}
|
|
32804
32809
|
/**
|
|
32805
32810
|
* Presents a toast notification with the given options.
|
|
32811
|
+
*
|
|
32812
|
+
* Estándar Valtech: todos los toasts son `color: 'dark'` y `position: 'top'`.
|
|
32813
|
+
* Estos son los defaults cuando el caller no los especifica — no hace falta
|
|
32814
|
+
* pasarlos en cada llamada. El diferenciador semántico (éxito/error) va en
|
|
32815
|
+
* el mensaje, no en el color.
|
|
32816
|
+
*
|
|
32806
32817
|
* @param request Toast options (message, duration, position, color, etc.)
|
|
32807
32818
|
*/
|
|
32808
32819
|
async presentToast(request) {
|
|
32809
32820
|
const toast = await this.toastController.create({
|
|
32810
32821
|
message: request.message,
|
|
32811
32822
|
duration: request.duration,
|
|
32812
|
-
position: request.position,
|
|
32813
|
-
color: request.color,
|
|
32823
|
+
position: request.position ?? 'top',
|
|
32824
|
+
color: request.color ?? 'dark',
|
|
32814
32825
|
});
|
|
32815
32826
|
await toast.present();
|
|
32816
32827
|
}
|
|
@@ -33049,11 +33060,7 @@ class LoginComponent {
|
|
|
33049
33060
|
// ==========================================
|
|
33050
33061
|
this.mfaVerifyFormProps = computed(() => {
|
|
33051
33062
|
const method = this._mfaMethod();
|
|
33052
|
-
const sectionName = method === 'TOTP'
|
|
33053
|
-
? this.t('mfaTOTP')
|
|
33054
|
-
: method === 'EMAIL'
|
|
33055
|
-
? this.t('mfaEmail')
|
|
33056
|
-
: this.t('mfaSMS');
|
|
33063
|
+
const sectionName = method === 'TOTP' ? this.t('mfaTOTP') : method === 'EMAIL' ? this.t('mfaEmail') : this.t('mfaSMS');
|
|
33057
33064
|
return this.i18nHelper.resolveForm({
|
|
33058
33065
|
nameKey: 'mfaTitle',
|
|
33059
33066
|
i18nNamespace: '_auth',
|
|
@@ -33216,7 +33223,7 @@ class LoginComponent {
|
|
|
33216
33223
|
}
|
|
33217
33224
|
this.handleLoginSuccess();
|
|
33218
33225
|
},
|
|
33219
|
-
error:
|
|
33226
|
+
error: err => {
|
|
33220
33227
|
this._loginFormState.set(ComponentStates.ENABLED);
|
|
33221
33228
|
const errorCode = err?.code;
|
|
33222
33229
|
if (errorCode === 'AUTHV2_EMAIL_NOT_VERIFIED') {
|
|
@@ -33238,7 +33245,7 @@ class LoginComponent {
|
|
|
33238
33245
|
}
|
|
33239
33246
|
this.handleLoginSuccess(provider);
|
|
33240
33247
|
},
|
|
33241
|
-
error:
|
|
33248
|
+
error: err => {
|
|
33242
33249
|
this.isOAuthLoading = false;
|
|
33243
33250
|
const errorCode = err?.code;
|
|
33244
33251
|
if (errorCode === 'POPUP_CLOSED') {
|
|
@@ -33272,7 +33279,7 @@ class LoginComponent {
|
|
|
33272
33279
|
this.closeRegisterModal();
|
|
33273
33280
|
this.openVerifyModal(email);
|
|
33274
33281
|
},
|
|
33275
|
-
error:
|
|
33282
|
+
error: err => {
|
|
33276
33283
|
this._registerFormState.set(ComponentStates.ENABLED);
|
|
33277
33284
|
this.handleError(err, 'signup');
|
|
33278
33285
|
},
|
|
@@ -33309,7 +33316,7 @@ class LoginComponent {
|
|
|
33309
33316
|
this.closeVerifyModal();
|
|
33310
33317
|
this.handleLoginSuccess();
|
|
33311
33318
|
},
|
|
33312
|
-
error:
|
|
33319
|
+
error: err => {
|
|
33313
33320
|
this._verifyFormState.set(ComponentStates.ENABLED);
|
|
33314
33321
|
this.handleError(err, 'verify');
|
|
33315
33322
|
},
|
|
@@ -33328,7 +33335,7 @@ class LoginComponent {
|
|
|
33328
33335
|
this.showToast(this.t('codeSent'));
|
|
33329
33336
|
this.startResendCooldown();
|
|
33330
33337
|
},
|
|
33331
|
-
error:
|
|
33338
|
+
error: err => {
|
|
33332
33339
|
this.handleError(err, 'verify');
|
|
33333
33340
|
},
|
|
33334
33341
|
});
|
|
@@ -33355,7 +33362,7 @@ class LoginComponent {
|
|
|
33355
33362
|
this.closeMFAVerifyModal();
|
|
33356
33363
|
this.handleLoginSuccess(undefined, true);
|
|
33357
33364
|
},
|
|
33358
|
-
error:
|
|
33365
|
+
error: err => {
|
|
33359
33366
|
this._mfaVerifyFormState.set(ComponentStates.ENABLED);
|
|
33360
33367
|
this.handleError(err, 'mfa');
|
|
33361
33368
|
},
|
|
@@ -33384,7 +33391,7 @@ class LoginComponent {
|
|
|
33384
33391
|
this.openResetPasswordModal(email);
|
|
33385
33392
|
this.showToast(this.t('codeSent'));
|
|
33386
33393
|
},
|
|
33387
|
-
error:
|
|
33394
|
+
error: err => {
|
|
33388
33395
|
this._forgotPasswordFormState.set(ComponentStates.ENABLED);
|
|
33389
33396
|
this.handleError(err, 'forgot');
|
|
33390
33397
|
},
|
|
@@ -33422,7 +33429,7 @@ class LoginComponent {
|
|
|
33422
33429
|
this.showToast(this.t('passwordUpdated'));
|
|
33423
33430
|
this.closeResetPasswordModal();
|
|
33424
33431
|
},
|
|
33425
|
-
error:
|
|
33432
|
+
error: err => {
|
|
33426
33433
|
this._resetPasswordFormState.set(ComponentStates.ENABLED);
|
|
33427
33434
|
this.handleError(err, 'reset');
|
|
33428
33435
|
},
|
|
@@ -33441,7 +33448,7 @@ class LoginComponent {
|
|
|
33441
33448
|
this.showToast(this.t('codeSent'));
|
|
33442
33449
|
this.startResetResendCooldown();
|
|
33443
33450
|
},
|
|
33444
|
-
error:
|
|
33451
|
+
error: err => {
|
|
33445
33452
|
this.handleError(err, 'reset');
|
|
33446
33453
|
},
|
|
33447
33454
|
});
|
|
@@ -33473,8 +33480,6 @@ class LoginComponent {
|
|
|
33473
33480
|
this.toastService.show({
|
|
33474
33481
|
message,
|
|
33475
33482
|
duration: 3500,
|
|
33476
|
-
position: 'top',
|
|
33477
|
-
color: 'dark',
|
|
33478
33483
|
});
|
|
33479
33484
|
}
|
|
33480
33485
|
getErrorMessage(err) {
|
|
@@ -35833,6 +35838,81 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
35833
35838
|
type: Output
|
|
35834
35839
|
}] } });
|
|
35835
35840
|
|
|
35841
|
+
/**
|
|
35842
|
+
* PageRefreshService — bus del pull-to-refresh estándar del factory.
|
|
35843
|
+
*
|
|
35844
|
+
* **Por qué existe:** `val-page-wrapper` posee un único `<ion-content>` y todas
|
|
35845
|
+
* las páginas se renderizan dentro vía `<router-outlet>`. Un `<ion-refresher>`
|
|
35846
|
+
* tiene que vivir dentro de ese `ion-content`, así que el refresher NO puede
|
|
35847
|
+
* declararse en el template de cada página — vive una sola vez en
|
|
35848
|
+
* `val-page-wrapper`. Este servicio es el puente: la página activa registra
|
|
35849
|
+
* *qué hacer* al refrescar; el page-wrapper dispara el gesto y cierra el spinner.
|
|
35850
|
+
*
|
|
35851
|
+
* **Uso en una página** (ver `frontend/CLAUDE.md` — es el patrón estándar):
|
|
35852
|
+
*
|
|
35853
|
+
* ```ts
|
|
35854
|
+
* export class MiPage implements ViewWillEnter, ViewWillLeave {
|
|
35855
|
+
* private pageRefresh = inject(PageRefreshService);
|
|
35856
|
+
*
|
|
35857
|
+
* ionViewWillEnter(): void {
|
|
35858
|
+
* this.pageRefresh.register(() => this.reload());
|
|
35859
|
+
* }
|
|
35860
|
+
* ionViewWillLeave(): void {
|
|
35861
|
+
* this.pageRefresh.unregister();
|
|
35862
|
+
* }
|
|
35863
|
+
*
|
|
35864
|
+
* private async reload(): Promise<void> {
|
|
35865
|
+
* // re-fetch / re-suscribir streams / etc.
|
|
35866
|
+
* }
|
|
35867
|
+
* }
|
|
35868
|
+
* ```
|
|
35869
|
+
*
|
|
35870
|
+
* Páginas que no llaman `register()` simplemente no muestran refresher —
|
|
35871
|
+
* opt-in, sin impacto.
|
|
35872
|
+
*/
|
|
35873
|
+
class PageRefreshService {
|
|
35874
|
+
constructor() {
|
|
35875
|
+
this.handler = null;
|
|
35876
|
+
/**
|
|
35877
|
+
* `true` cuando hay una página con handler registrado. `val-page-wrapper`
|
|
35878
|
+
* renderiza el `<val-refresher>` sólo cuando esto es `true`.
|
|
35879
|
+
*/
|
|
35880
|
+
this.hasHandler = signal(false);
|
|
35881
|
+
}
|
|
35882
|
+
/**
|
|
35883
|
+
* Registra el handler de refresh de la página activa. Llamar en
|
|
35884
|
+
* `ionViewWillEnter`. Si ya había uno, lo reemplaza (sólo hay una página
|
|
35885
|
+
* activa a la vez en el router-outlet de Ionic).
|
|
35886
|
+
*/
|
|
35887
|
+
register(handler) {
|
|
35888
|
+
this.handler = handler;
|
|
35889
|
+
this.hasHandler.set(true);
|
|
35890
|
+
}
|
|
35891
|
+
/**
|
|
35892
|
+
* Quita el handler. Llamar en `ionViewWillLeave` para que el refresher
|
|
35893
|
+
* desaparezca al salir de la vista.
|
|
35894
|
+
*/
|
|
35895
|
+
unregister() {
|
|
35896
|
+
this.handler = null;
|
|
35897
|
+
this.hasHandler.set(false);
|
|
35898
|
+
}
|
|
35899
|
+
/**
|
|
35900
|
+
* Ejecuta el handler registrado y espera a que termine. Lo invoca
|
|
35901
|
+
* `val-page-wrapper` al detectar el gesto de pull. No-op si no hay handler.
|
|
35902
|
+
*/
|
|
35903
|
+
async run() {
|
|
35904
|
+
if (!this.handler)
|
|
35905
|
+
return;
|
|
35906
|
+
await this.handler();
|
|
35907
|
+
}
|
|
35908
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PageRefreshService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
35909
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PageRefreshService, providedIn: 'root' }); }
|
|
35910
|
+
}
|
|
35911
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PageRefreshService, decorators: [{
|
|
35912
|
+
type: Injectable,
|
|
35913
|
+
args: [{ providedIn: 'root' }]
|
|
35914
|
+
}] });
|
|
35915
|
+
|
|
35836
35916
|
/**
|
|
35837
35917
|
* val-page-wrapper
|
|
35838
35918
|
*
|
|
@@ -35859,6 +35939,8 @@ class PageWrapperComponent {
|
|
|
35859
35939
|
this.theme = inject(ThemeService);
|
|
35860
35940
|
this.nav = inject(NavigationService);
|
|
35861
35941
|
this.router = inject(Router);
|
|
35942
|
+
/** Bus del pull-to-refresh — la página activa registra su handler aquí. */
|
|
35943
|
+
this.pageRefresh = inject(PageRefreshService);
|
|
35862
35944
|
/**
|
|
35863
35945
|
* Page wrapper configuration.
|
|
35864
35946
|
* Signal-based input for full reactivity with computed().
|
|
@@ -35919,6 +36001,18 @@ class PageWrapperComponent {
|
|
|
35919
36001
|
return resolveColor(bg);
|
|
35920
36002
|
});
|
|
35921
36003
|
}
|
|
36004
|
+
/**
|
|
36005
|
+
* Handler del gesto pull-to-refresh. Delega en el handler que registró la
|
|
36006
|
+
* página activa (`PageRefreshService.run`) y cierra el spinner al terminar.
|
|
36007
|
+
*/
|
|
36008
|
+
async onPageRefresh(event) {
|
|
36009
|
+
try {
|
|
36010
|
+
await this.pageRefresh.run();
|
|
36011
|
+
}
|
|
36012
|
+
finally {
|
|
36013
|
+
event.complete();
|
|
36014
|
+
}
|
|
36015
|
+
}
|
|
35922
36016
|
ngOnInit() {
|
|
35923
36017
|
if (this.props()?.scrollToTopOnNavigate !== false) {
|
|
35924
36018
|
this.routerSubscription = this.router.events
|
|
@@ -35973,6 +36067,11 @@ class PageWrapperComponent {
|
|
|
35973
36067
|
'--background': background(),
|
|
35974
36068
|
}"
|
|
35975
36069
|
>
|
|
36070
|
+
<!-- Pull-to-refresh estándar del factory. Se renderiza sólo cuando la
|
|
36071
|
+
página activa registró un handler vía PageRefreshService. -->
|
|
36072
|
+
@if (pageRefresh.hasHandler()) {
|
|
36073
|
+
<val-refresher (refresh)="onPageRefresh($event)" />
|
|
36074
|
+
}
|
|
35976
36075
|
<val-container [props]="{ size: contentMaxWidth() }">
|
|
35977
36076
|
<main>
|
|
35978
36077
|
<router-outlet></router-outlet>
|
|
@@ -35983,11 +36082,19 @@ class PageWrapperComponent {
|
|
|
35983
36082
|
}
|
|
35984
36083
|
</ion-content>
|
|
35985
36084
|
</div>
|
|
35986
|
-
`, isInline: true, styles: ["main{min-height:60vh;padding-bottom:calc(var(--val-bottom-nav-height, 0px) + env(safe-area-inset-bottom,0px) + 16px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: HeaderComponent, selector: "val-header", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: CompanyFooterComponent, selector: "val-company-footer", inputs: ["props"] }, { kind: "component", type: ContainerComponent, selector: "val-container", inputs: ["props"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }] }); }
|
|
36085
|
+
`, isInline: true, styles: ["main{min-height:60vh;padding-bottom:calc(var(--val-bottom-nav-height, 0px) + env(safe-area-inset-bottom,0px) + 16px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: HeaderComponent, selector: "val-header", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: CompanyFooterComponent, selector: "val-company-footer", inputs: ["props"] }, { kind: "component", type: ContainerComponent, selector: "val-container", inputs: ["props"] }, { kind: "component", type: RefresherComponent, selector: "val-refresher", inputs: ["props"], outputs: ["refresh", "pullProgressChange", "stateChange"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }] }); }
|
|
35987
36086
|
}
|
|
35988
36087
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PageWrapperComponent, decorators: [{
|
|
35989
36088
|
type: Component,
|
|
35990
|
-
args: [{ selector: 'val-page-wrapper', standalone: true, imports: [
|
|
36089
|
+
args: [{ selector: 'val-page-wrapper', standalone: true, imports: [
|
|
36090
|
+
CommonModule,
|
|
36091
|
+
HeaderComponent,
|
|
36092
|
+
CompanyFooterComponent,
|
|
36093
|
+
ContainerComponent,
|
|
36094
|
+
RefresherComponent,
|
|
36095
|
+
RouterOutlet,
|
|
36096
|
+
IonContent,
|
|
36097
|
+
], template: `
|
|
35991
36098
|
<div class="ion-page">
|
|
35992
36099
|
<val-header [props]="headerProps()" (onClick)="onHeaderClickHandler($event)" />
|
|
35993
36100
|
<ion-content
|
|
@@ -35997,6 +36104,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
35997
36104
|
'--background': background(),
|
|
35998
36105
|
}"
|
|
35999
36106
|
>
|
|
36107
|
+
<!-- Pull-to-refresh estándar del factory. Se renderiza sólo cuando la
|
|
36108
|
+
página activa registró un handler vía PageRefreshService. -->
|
|
36109
|
+
@if (pageRefresh.hasHandler()) {
|
|
36110
|
+
<val-refresher (refresh)="onPageRefresh($event)" />
|
|
36111
|
+
}
|
|
36000
36112
|
<val-container [props]="{ size: contentMaxWidth() }">
|
|
36001
36113
|
<main>
|
|
36002
36114
|
<router-outlet></router-outlet>
|
|
@@ -41734,11 +41846,7 @@ class ContentReactionComponent {
|
|
|
41734
41846
|
});
|
|
41735
41847
|
// Valores por defecto
|
|
41736
41848
|
this.defaultEmojis = ['😞', '😐', '😊'];
|
|
41737
|
-
this.defaultLabels = [
|
|
41738
|
-
'No me ayudó',
|
|
41739
|
-
'Regular',
|
|
41740
|
-
'Muy útil',
|
|
41741
|
-
];
|
|
41849
|
+
this.defaultLabels = ['No me ayudó', 'Regular', 'Muy útil'];
|
|
41742
41850
|
this.reactionValues = ['negative', 'neutral', 'positive'];
|
|
41743
41851
|
// Computed properties
|
|
41744
41852
|
this.resolvedProps = computed(() => ({
|
|
@@ -41770,7 +41878,7 @@ class ContentReactionComponent {
|
|
|
41770
41878
|
return;
|
|
41771
41879
|
// Si hay initialValue, usarlo directamente sin consultar
|
|
41772
41880
|
if (this.props.initialValue) {
|
|
41773
|
-
this.state.update(
|
|
41881
|
+
this.state.update(s => ({
|
|
41774
41882
|
...s,
|
|
41775
41883
|
selectedValue: this.props.initialValue,
|
|
41776
41884
|
hadPreviousReaction: true,
|
|
@@ -41783,11 +41891,11 @@ class ContentReactionComponent {
|
|
|
41783
41891
|
if (this.props.skipInitialCheck) {
|
|
41784
41892
|
return;
|
|
41785
41893
|
}
|
|
41786
|
-
this.state.update(
|
|
41894
|
+
this.state.update(s => ({ ...s, isLoading: true, error: null }));
|
|
41787
41895
|
try {
|
|
41788
41896
|
const check = await this.feedbackService.checkFeedback(this.props.entityRef.entityType, this.props.entityRef.entityId);
|
|
41789
41897
|
if (check.hasFeedback && check.reactionValue) {
|
|
41790
|
-
this.state.update(
|
|
41898
|
+
this.state.update(s => ({
|
|
41791
41899
|
...s,
|
|
41792
41900
|
selectedValue: check.reactionValue,
|
|
41793
41901
|
hadPreviousReaction: true,
|
|
@@ -41796,19 +41904,19 @@ class ContentReactionComponent {
|
|
|
41796
41904
|
}));
|
|
41797
41905
|
}
|
|
41798
41906
|
else {
|
|
41799
|
-
this.state.update(
|
|
41907
|
+
this.state.update(s => ({ ...s, isLoading: false }));
|
|
41800
41908
|
}
|
|
41801
41909
|
}
|
|
41802
41910
|
catch (error) {
|
|
41803
41911
|
console.error('Error loading previous reaction:', error);
|
|
41804
|
-
this.state.update(
|
|
41912
|
+
this.state.update(s => ({ ...s, isLoading: false }));
|
|
41805
41913
|
}
|
|
41806
41914
|
}
|
|
41807
41915
|
selectReaction(value) {
|
|
41808
41916
|
if (this.resolvedProps().disabled || this.resolvedProps().readonly)
|
|
41809
41917
|
return;
|
|
41810
41918
|
const previousValue = this.state().selectedValue;
|
|
41811
|
-
this.state.update(
|
|
41919
|
+
this.state.update(s => ({
|
|
41812
41920
|
...s,
|
|
41813
41921
|
selectedValue: value,
|
|
41814
41922
|
isSubmitted: false,
|
|
@@ -41821,7 +41929,7 @@ class ContentReactionComponent {
|
|
|
41821
41929
|
const props = this.resolvedProps();
|
|
41822
41930
|
if (!currentState.selectedValue || props.disabled)
|
|
41823
41931
|
return;
|
|
41824
|
-
this.state.update(
|
|
41932
|
+
this.state.update(s => ({ ...s, isLoading: true, error: null }));
|
|
41825
41933
|
try {
|
|
41826
41934
|
// Determinar si usar endpoint anónimo o autenticado
|
|
41827
41935
|
const isAuthenticated = this.auth?.isAuthenticated() ?? false;
|
|
@@ -41834,7 +41942,7 @@ class ContentReactionComponent {
|
|
|
41834
41942
|
// Usar endpoint autenticado
|
|
41835
41943
|
await this.feedbackService.createReaction(props.entityRef, currentState.selectedValue, currentState.comment || undefined);
|
|
41836
41944
|
}
|
|
41837
|
-
this.state.update(
|
|
41945
|
+
this.state.update(s => ({
|
|
41838
41946
|
...s,
|
|
41839
41947
|
isLoading: false,
|
|
41840
41948
|
isSubmitted: true,
|
|
@@ -41850,14 +41958,12 @@ class ContentReactionComponent {
|
|
|
41850
41958
|
this.toast.show({
|
|
41851
41959
|
message: props.thankYouMessage,
|
|
41852
41960
|
duration: 2000,
|
|
41853
|
-
position: 'bottom',
|
|
41854
|
-
color: 'dark',
|
|
41855
41961
|
});
|
|
41856
41962
|
}
|
|
41857
41963
|
}
|
|
41858
41964
|
catch (error) {
|
|
41859
41965
|
console.error('Error submitting reaction:', error);
|
|
41860
|
-
this.state.update(
|
|
41966
|
+
this.state.update(s => ({
|
|
41861
41967
|
...s,
|
|
41862
41968
|
isLoading: false,
|
|
41863
41969
|
error: this.t('errorSubmitting'),
|
|
@@ -41865,14 +41971,12 @@ class ContentReactionComponent {
|
|
|
41865
41971
|
this.toast.show({
|
|
41866
41972
|
message: this.t('errorSubmitting'),
|
|
41867
41973
|
duration: 3000,
|
|
41868
|
-
position: 'bottom',
|
|
41869
|
-
color: 'danger',
|
|
41870
41974
|
});
|
|
41871
41975
|
}
|
|
41872
41976
|
}
|
|
41873
41977
|
updateComment(event) {
|
|
41874
41978
|
const value = event.detail.value || '';
|
|
41875
|
-
this.state.update(
|
|
41979
|
+
this.state.update(s => ({ ...s, comment: value }));
|
|
41876
41980
|
}
|
|
41877
41981
|
getEmoji(index) {
|
|
41878
41982
|
return this.resolvedProps().emojis[index];
|
|
@@ -44671,5 +44775,5 @@ function buildFooterLinks(links, t, resolver) {
|
|
|
44671
44775
|
* Generated bundle index. Do not edit.
|
|
44672
44776
|
*/
|
|
44673
44777
|
|
|
44674
|
-
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, 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_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_CANCEL_BUTTON, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, 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, DownloadService, EmailInputComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FabComponent, 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, 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, UpdateBannerComponent, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_DEFAULT_CONTENT, 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, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, 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, provideValtechAuth, provideValtechAuthInterceptor, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechPresets, provideValtechSkeleton, query, renderPatternSvgInner, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard, toArticle };
|
|
44778
|
+
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, 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_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_CANCEL_BUTTON, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, 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, DownloadService, EmailInputComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FabComponent, 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, UpdateBannerComponent, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_DEFAULT_CONTENT, 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, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, 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, provideValtechAuth, provideValtechAuthInterceptor, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechPresets, provideValtechSkeleton, query, renderPatternSvgInner, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard, toArticle };
|
|
44675
44779
|
//# sourceMappingURL=valtech-components.mjs.map
|