valtech-components 4.0.40 → 4.0.42
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/atoms/splash/splash.component.mjs +45 -0
- package/esm2022/lib/components/organisms/account-view/account-view.component.mjs +23 -12
- package/esm2022/lib/components/organisms/account-view/account-view.i18n.mjs +3 -1
- package/esm2022/lib/services/auth/auth.service.mjs +28 -26
- package/esm2022/lib/services/auth/oauth-callback.component.mjs +11 -13
- package/esm2022/lib/services/auth/oauth.service.mjs +14 -10
- package/esm2022/lib/services/auth/storage.service.mjs +11 -7
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/valtech-components.mjs +128 -65
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/splash/splash.component.d.ts +23 -0
- package/lib/components/organisms/account-view/account-view.component.d.ts +2 -0
- package/lib/services/auth/oauth.service.d.ts +6 -7
- package/lib/services/auth/storage.service.d.ts +1 -1
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -56,7 +56,7 @@ import { BrowserMultiFormatReader } from '@zxing/browser';
|
|
|
56
56
|
* Current version of valtech-components.
|
|
57
57
|
* This is automatically updated during the publish process.
|
|
58
58
|
*/
|
|
59
|
-
const VERSION = '4.0.
|
|
59
|
+
const VERSION = '4.0.42';
|
|
60
60
|
|
|
61
61
|
// Control de estado de refresco (singleton a nivel de módulo)
|
|
62
62
|
let isRefreshing = false;
|
|
@@ -2349,8 +2349,7 @@ class AuthStorageService {
|
|
|
2349
2349
|
return;
|
|
2350
2350
|
try {
|
|
2351
2351
|
localStorage.setItem(this.keys.ACCESS_TOKEN, state.accessToken);
|
|
2352
|
-
|
|
2353
|
-
// cookie HttpOnly que el backend emite. Así un XSS no puede exfiltrarlo.
|
|
2352
|
+
localStorage.setItem(this.keys.REFRESH_TOKEN, state.refreshToken);
|
|
2354
2353
|
localStorage.setItem(this.keys.ROLES, JSON.stringify(state.roles));
|
|
2355
2354
|
localStorage.setItem(this.keys.PERMISSIONS, JSON.stringify(state.permissions));
|
|
2356
2355
|
localStorage.setItem(this.keys.IS_SUPER_ADMIN, String(state.isSuperAdmin));
|
|
@@ -2408,10 +2407,15 @@ class AuthStorageService {
|
|
|
2408
2407
|
/**
|
|
2409
2408
|
* Guarda el refresh token (token rotation).
|
|
2410
2409
|
*/
|
|
2411
|
-
saveRefreshToken(
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
|
|
2410
|
+
saveRefreshToken(token) {
|
|
2411
|
+
if (!this.isBrowser)
|
|
2412
|
+
return;
|
|
2413
|
+
try {
|
|
2414
|
+
localStorage.setItem(this.keys.REFRESH_TOKEN, token);
|
|
2415
|
+
}
|
|
2416
|
+
catch (e) {
|
|
2417
|
+
console.warn('[ValtechAuth] Error guardando refresh token:', e);
|
|
2418
|
+
}
|
|
2415
2419
|
}
|
|
2416
2420
|
/**
|
|
2417
2421
|
* Guarda los permisos actualizados.
|
|
@@ -6752,20 +6756,24 @@ class OAuthService {
|
|
|
6752
6756
|
/**
|
|
6753
6757
|
* Verifica que el callback traiga el nonce del flujo actual (M-07).
|
|
6754
6758
|
*
|
|
6755
|
-
*
|
|
6756
|
-
*
|
|
6757
|
-
*
|
|
6758
|
-
*
|
|
6759
|
-
*
|
|
6760
|
-
*
|
|
6761
|
-
* (sin nonce) durante la ventana de transición.
|
|
6759
|
+
* Tolerante a la transición: solo se EXIGE coincidencia cuando el callback
|
|
6760
|
+
* trae un nonce. Si no lo trae (backend aún sin M-07 desplegado, p.ej. dev), no
|
|
6761
|
+
* se bloquea el login. Cuando el backend echa `client_nonce` en todos lados, un
|
|
6762
|
+
* callback forjado con un nonce distinto sí se rechaza. Un payload forjado por
|
|
6763
|
+
* XSS que OMITA el nonce no se frena por acá, pero igual pasa por las
|
|
6764
|
+
* validaciones de tipo/forma de `checkLocalStorageFallback`.
|
|
6762
6765
|
*/
|
|
6763
6766
|
isNonceValid(data) {
|
|
6767
|
+
// No hay flujo con nonce activo (legacy / link flow) → no bloquear.
|
|
6764
6768
|
if (!this.expectedNonce) {
|
|
6765
|
-
// No hay flujo con nonce activo (caso legacy / link flow) → no bloquear.
|
|
6766
6769
|
return true;
|
|
6767
6770
|
}
|
|
6768
|
-
|
|
6771
|
+
// El callback no trae nonce (backend sin M-07) → no bloquear (transición).
|
|
6772
|
+
if (!data?.nonce) {
|
|
6773
|
+
return true;
|
|
6774
|
+
}
|
|
6775
|
+
// Nonce presente → debe coincidir con el del flujo.
|
|
6776
|
+
return data.nonce === this.expectedNonce;
|
|
6769
6777
|
}
|
|
6770
6778
|
/**
|
|
6771
6779
|
* Valida la forma del payload del callback (M-07): debe ser un error o tokens
|
|
@@ -8193,12 +8201,8 @@ class AuthService {
|
|
|
8193
8201
|
this.setupFirestoreRBACSync(claims.uid);
|
|
8194
8202
|
}
|
|
8195
8203
|
}
|
|
8196
|
-
else if (storedState.
|
|
8197
|
-
// 4. Token
|
|
8198
|
-
// HttpOnly (H-05), no en storage — así que el disparador ya no es
|
|
8199
|
-
// "hay refresh en storage" sino "había un access token" (sesión
|
|
8200
|
-
// previa). El /refresh de fondo usa la cookie; si no es válida, falla
|
|
8201
|
-
// y caemos a signOut (catch más abajo).
|
|
8204
|
+
else if (storedState.refreshToken) {
|
|
8205
|
+
// 4. Token expirado pero hay refresh token en storage.
|
|
8202
8206
|
//
|
|
8203
8207
|
// NO bloqueamos el bootstrap esperando la red: un /refresh en una
|
|
8204
8208
|
// Lambda fría son 2-5s de pantalla en blanco (Angular no renderiza
|
|
@@ -8458,21 +8462,28 @@ class AuthService {
|
|
|
8458
8462
|
* que el cliente debe guardar para el próximo refresh.
|
|
8459
8463
|
*/
|
|
8460
8464
|
refreshAccessToken() {
|
|
8461
|
-
// H-05: el refresh token
|
|
8462
|
-
//
|
|
8463
|
-
//
|
|
8464
|
-
//
|
|
8465
|
-
//
|
|
8465
|
+
// Transición H-05: se envía el refresh token en el body (compat con el
|
|
8466
|
+
// backend actual, que lo exige) y se persiste el rotado. `withCredentials`
|
|
8467
|
+
// adjunta además la cookie HttpOnly cuando el backend ya soporta H-05 (que
|
|
8468
|
+
// prioriza el body). El paso "cookie-only" (dejar de guardar el refresh en
|
|
8469
|
+
// localStorage) se hace DESPUÉS de desplegar el backend con H-05 — hacerlo
|
|
8470
|
+
// antes rompe el /refresh contra el backend viejo (400 RefreshToken required).
|
|
8466
8471
|
const refreshToken = this.state().refreshToken;
|
|
8467
|
-
|
|
8472
|
+
if (!refreshToken) {
|
|
8473
|
+
return throwError(() => ({
|
|
8474
|
+
code: 'NO_REFRESH_TOKEN',
|
|
8475
|
+
message: 'No hay token de refresco',
|
|
8476
|
+
}));
|
|
8477
|
+
}
|
|
8468
8478
|
return this.http
|
|
8469
|
-
.post(`${this.baseUrl}/refresh`,
|
|
8479
|
+
.post(`${this.baseUrl}/refresh`, { refreshToken }, { withCredentials: true })
|
|
8470
8480
|
.pipe(tap(response => {
|
|
8471
8481
|
const expiresAt = Date.now() + response.expiresIn * 1000;
|
|
8472
|
-
// Token rotation: el access token
|
|
8473
|
-
// la cookie HttpOnly (NO se persiste en localStorage — H-05).
|
|
8482
|
+
// Token rotation: se guarda el access token Y el refresh rotado.
|
|
8474
8483
|
this.stateService.updateAccessToken(response.accessToken, response.expiresIn);
|
|
8484
|
+
this.stateService.updateRefreshToken(response.refreshToken);
|
|
8475
8485
|
this.storageService.saveAccessToken(response.accessToken, expiresAt);
|
|
8486
|
+
this.storageService.saveRefreshToken(response.refreshToken);
|
|
8476
8487
|
if (this.config?.enableFirebaseIntegration && response.firebaseToken) {
|
|
8477
8488
|
this.signInWithFirebase(response.firebaseToken);
|
|
8478
8489
|
}
|
|
@@ -8548,16 +8559,15 @@ class AuthService {
|
|
|
8548
8559
|
const refreshToken = this.state().refreshToken;
|
|
8549
8560
|
// Eliminar dispositivo del backend antes de cerrar sesión
|
|
8550
8561
|
await this.unregisterDevice();
|
|
8551
|
-
// Notificar al backend (fire and forget).
|
|
8552
|
-
//
|
|
8553
|
-
//
|
|
8554
|
-
|
|
8555
|
-
|
|
8556
|
-
|
|
8557
|
-
|
|
8558
|
-
|
|
8559
|
-
|
|
8560
|
-
.subscribe();
|
|
8562
|
+
// Notificar al backend (fire and forget). Se manda el refresh token en el
|
|
8563
|
+
// body (compat con el backend actual); withCredentials adjunta la cookie
|
|
8564
|
+
// cuando el backend ya soporta H-05 (revoca + expira la cookie).
|
|
8565
|
+
if (refreshToken) {
|
|
8566
|
+
this.http
|
|
8567
|
+
.post(`${this.baseUrl}/logout`, { refreshToken }, { withCredentials: true })
|
|
8568
|
+
.pipe(catchError(() => of(null)))
|
|
8569
|
+
.subscribe();
|
|
8570
|
+
}
|
|
8561
8571
|
// Cerrar sesión de Firebase si está integrado
|
|
8562
8572
|
this.signOutFirebase();
|
|
8563
8573
|
this.clearState();
|
|
@@ -9897,6 +9907,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
9897
9907
|
type: Output
|
|
9898
9908
|
}] } });
|
|
9899
9909
|
|
|
9910
|
+
/**
|
|
9911
|
+
* `val-splash` — splash a pantalla completa reutilizable, idéntico al de arranque
|
|
9912
|
+
* de la app (`.app-splash` del `index.html`): logo centrado con pulse, fondo
|
|
9913
|
+
* claro/oscuro vía `prefers-color-scheme`. Para cargas fundamentales dentro de la
|
|
9914
|
+
* app (p.ej. el callback OAuth) que deben verse iguales al arranque, en vez de
|
|
9915
|
+
* un segundo loader casi-duplicado.
|
|
9916
|
+
*
|
|
9917
|
+
* El logo apunta por defecto a `assets/images/main-{light,dark}.svg` — los mismos
|
|
9918
|
+
* assets de la app consumer que usa el splash de `index.html` — y resuelven en
|
|
9919
|
+
* runtime contra la app. Override por inputs si hace falta. Fondo overridable con
|
|
9920
|
+
* las CSS vars `--val-splash-bg` / `--val-splash-bg-dark`.
|
|
9921
|
+
*/
|
|
9922
|
+
class SplashComponent {
|
|
9923
|
+
constructor() {
|
|
9924
|
+
/** Logo para tema claro. Default = asset de la app (igual que index.html). */
|
|
9925
|
+
this.logoLight = input('assets/images/main-light.svg');
|
|
9926
|
+
/** Logo para tema oscuro (vía prefers-color-scheme). */
|
|
9927
|
+
this.logoDark = input('assets/images/main-dark.svg');
|
|
9928
|
+
/** Texto alternativo del logo. */
|
|
9929
|
+
this.alt = input('Valtech');
|
|
9930
|
+
}
|
|
9931
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SplashComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9932
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: SplashComponent, isStandalone: true, selector: "val-splash", inputs: { logoLight: { classPropertyName: "logoLight", publicName: "logoLight", isSignal: true, isRequired: false, transformFunction: null }, logoDark: { classPropertyName: "logoDark", publicName: "logoDark", isSignal: true, isRequired: false, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
9933
|
+
<div class="val-splash">
|
|
9934
|
+
<picture>
|
|
9935
|
+
<source media="(prefers-color-scheme: dark)" [srcset]="logoDark()" />
|
|
9936
|
+
<img class="val-splash__logo" [src]="logoLight()" [alt]="alt()" />
|
|
9937
|
+
</picture>
|
|
9938
|
+
</div>
|
|
9939
|
+
`, isInline: true, styles: [".val-splash{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:var(--val-splash-bg, #fbfbfb);z-index:9999;animation:val-splash-in .25s ease}.val-splash__logo{width:180px;max-width:50vw;animation:val-splash-pulse 1.8s ease-in-out infinite}@keyframes val-splash-in{0%{opacity:0}to{opacity:1}}@keyframes val-splash-pulse{0%,to{opacity:1}50%{opacity:.55}}@media (prefers-color-scheme: dark){.val-splash{background:var(--val-splash-bg-dark, #0e0420)}}\n"] }); }
|
|
9940
|
+
}
|
|
9941
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SplashComponent, decorators: [{
|
|
9942
|
+
type: Component,
|
|
9943
|
+
args: [{ selector: 'val-splash', standalone: true, template: `
|
|
9944
|
+
<div class="val-splash">
|
|
9945
|
+
<picture>
|
|
9946
|
+
<source media="(prefers-color-scheme: dark)" [srcset]="logoDark()" />
|
|
9947
|
+
<img class="val-splash__logo" [src]="logoLight()" [alt]="alt()" />
|
|
9948
|
+
</picture>
|
|
9949
|
+
</div>
|
|
9950
|
+
`, styles: [".val-splash{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:var(--val-splash-bg, #fbfbfb);z-index:9999;animation:val-splash-in .25s ease}.val-splash__logo{width:180px;max-width:50vw;animation:val-splash-pulse 1.8s ease-in-out infinite}@keyframes val-splash-in{0%{opacity:0}to{opacity:1}}@keyframes val-splash-pulse{0%,to{opacity:1}50%{opacity:.55}}@media (prefers-color-scheme: dark){.val-splash{background:var(--val-splash-bg-dark, #0e0420)}}\n"] }]
|
|
9951
|
+
}] });
|
|
9952
|
+
|
|
9900
9953
|
const POSITION_MAP = {
|
|
9901
9954
|
'top-left': '0% 0%',
|
|
9902
9955
|
top: '50% 0%',
|
|
@@ -33138,21 +33191,18 @@ class OAuthCallbackComponent {
|
|
|
33138
33191
|
}, 500);
|
|
33139
33192
|
}
|
|
33140
33193
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OAuthCallbackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33141
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: OAuthCallbackComponent, isStandalone: true, selector: "val-oauth-callback", ngImport: i0, template:
|
|
33142
|
-
<div class="oauth-callback">
|
|
33143
|
-
<div class="oauth-callback__spinner"></div>
|
|
33144
|
-
<p class="oauth-callback__text">{{ message }}</p>
|
|
33145
|
-
</div>
|
|
33146
|
-
`, isInline: true, styles: [".oauth-callback{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.oauth-callback__spinner{width:40px;height:40px;border:3px solid #f3f3f3;border-top:3px solid #3498db;border-radius:50%;animation:spin 1s linear infinite;margin-bottom:16px}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.oauth-callback__text{color:#666;font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
|
|
33194
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: OAuthCallbackComponent, isStandalone: true, selector: "val-oauth-callback", ngImport: i0, template: `<val-splash />`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: SplashComponent, selector: "val-splash", inputs: ["logoLight", "logoDark", "alt"] }] }); }
|
|
33147
33195
|
}
|
|
33148
33196
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OAuthCallbackComponent, decorators: [{
|
|
33149
33197
|
type: Component,
|
|
33150
|
-
args: [{
|
|
33151
|
-
|
|
33152
|
-
|
|
33153
|
-
|
|
33154
|
-
|
|
33155
|
-
|
|
33198
|
+
args: [{
|
|
33199
|
+
selector: 'val-oauth-callback',
|
|
33200
|
+
standalone: true,
|
|
33201
|
+
imports: [CommonModule, SplashComponent],
|
|
33202
|
+
// Mismo splash de arranque de la app (logo + pulse) en vez de un loader propio
|
|
33203
|
+
// casi-duplicado: el callback OAuth es una carga fundamental y debe verse igual.
|
|
33204
|
+
template: `<val-splash />`,
|
|
33205
|
+
}]
|
|
33156
33206
|
}] });
|
|
33157
33207
|
|
|
33158
33208
|
/**
|
|
@@ -48117,6 +48167,7 @@ const ACCOUNT_VIEW_I18N = {
|
|
|
48117
48167
|
pageTitle: 'Cuenta',
|
|
48118
48168
|
pageDescription: 'Organizaciones y seguridad de la cuenta',
|
|
48119
48169
|
orgsTitle: 'Tus organizaciones',
|
|
48170
|
+
orgsActiveTitle: 'Organización activa',
|
|
48120
48171
|
orgsCurrent: 'Actual',
|
|
48121
48172
|
orgsEmpty: 'Aún no perteneces a otras organizaciones.',
|
|
48122
48173
|
orgsSwitch: 'Cambiar',
|
|
@@ -48161,6 +48212,7 @@ const ACCOUNT_VIEW_I18N = {
|
|
|
48161
48212
|
pageTitle: 'Account',
|
|
48162
48213
|
pageDescription: 'Organizations and account security',
|
|
48163
48214
|
orgsTitle: 'Your organizations',
|
|
48215
|
+
orgsActiveTitle: 'Active organization',
|
|
48164
48216
|
orgsCurrent: 'Active',
|
|
48165
48217
|
orgsEmpty: "You don't belong to other organizations yet.",
|
|
48166
48218
|
orgsSwitch: 'Switch',
|
|
@@ -48242,7 +48294,7 @@ class AccountViewComponent {
|
|
|
48242
48294
|
return {
|
|
48243
48295
|
showPendingInvites: merged.showPendingInvites ?? true,
|
|
48244
48296
|
showOrganizations: merged.showOrganizations ?? true,
|
|
48245
|
-
showNewOrgCta: merged.showNewOrgCta ??
|
|
48297
|
+
showNewOrgCta: merged.showNewOrgCta ?? false,
|
|
48246
48298
|
showLogout: merged.showLogout ?? true,
|
|
48247
48299
|
showDeleteAccount: merged.showDeleteAccount ?? true,
|
|
48248
48300
|
i18nNamespace: merged.i18nNamespace ?? DEFAULT_NAMESPACE$d,
|
|
@@ -48277,12 +48329,14 @@ class AccountViewComponent {
|
|
|
48277
48329
|
});
|
|
48278
48330
|
this.createOrgOpen = signal(false);
|
|
48279
48331
|
this.deleteAccountOpen = signal(false);
|
|
48332
|
+
this.activeOrgLogoFailed = signal(false);
|
|
48280
48333
|
this.pendingInvites = signal([]);
|
|
48281
48334
|
this.pendingInvitesLoading = signal(false);
|
|
48282
48335
|
this.inviteAccepting = signal(null);
|
|
48283
48336
|
this.pageTitle = computed(() => this.tt('pageTitle'));
|
|
48284
48337
|
this.pageDescription = computed(() => this.tt('pageDescription'));
|
|
48285
48338
|
this.orgsTitle = computed(() => this.tt('orgsTitle'));
|
|
48339
|
+
this.orgsActiveTitle = computed(() => this.tt('orgsActiveTitle'));
|
|
48286
48340
|
this.orgsEmpty = computed(() => this.tt('orgsEmpty'));
|
|
48287
48341
|
this.orgsMoreInfo = computed(() => this.tt('orgsMoreInfo'));
|
|
48288
48342
|
this.orgsNewQuestion = computed(() => this.tt('orgsNewQuestion'));
|
|
@@ -48506,6 +48560,7 @@ class AccountViewComponent {
|
|
|
48506
48560
|
next: orgs => {
|
|
48507
48561
|
const activeId = this.activeOrgId();
|
|
48508
48562
|
this.orgs.set([...orgs].sort((a, b) => (a.id === activeId ? -1 : b.id === activeId ? 1 : 0)));
|
|
48563
|
+
this.activeOrgLogoFailed.set(false);
|
|
48509
48564
|
this.orgsLoading.set(false);
|
|
48510
48565
|
resolve();
|
|
48511
48566
|
},
|
|
@@ -48571,12 +48626,12 @@ class AccountViewComponent {
|
|
|
48571
48626
|
size: 'medium',
|
|
48572
48627
|
color: 'dark',
|
|
48573
48628
|
bold: true,
|
|
48574
|
-
content:
|
|
48629
|
+
content: orgsActiveTitle(),
|
|
48575
48630
|
}"
|
|
48576
48631
|
/>
|
|
48577
48632
|
@if (orgs().length > 1) {
|
|
48578
48633
|
<ion-button fill="outline" color="dark" shape="round" size="small" (click)="onSwitchAccount()">
|
|
48579
|
-
{{ tt('
|
|
48634
|
+
{{ tt('orgsSwitch') }}
|
|
48580
48635
|
</ion-button>
|
|
48581
48636
|
}
|
|
48582
48637
|
</div>
|
|
@@ -48590,7 +48645,11 @@ class AccountViewComponent {
|
|
|
48590
48645
|
<div class="orgs-list">
|
|
48591
48646
|
<div class="org-card org-card--active">
|
|
48592
48647
|
<div class="org-card__icon">
|
|
48593
|
-
|
|
48648
|
+
@if (activeOrg()?.logoUrl && !activeOrgLogoFailed()) {
|
|
48649
|
+
<img [src]="activeOrg()!.logoUrl!" [alt]="activeOrg()?.name ?? ''" (error)="activeOrgLogoFailed.set(true)" />
|
|
48650
|
+
} @else {
|
|
48651
|
+
<ion-icon name="business-outline" />
|
|
48652
|
+
}
|
|
48594
48653
|
</div>
|
|
48595
48654
|
<div class="org-card__body">
|
|
48596
48655
|
<span class="org-card__name">{{ org.name }}</span>
|
|
@@ -48667,7 +48726,7 @@ class AccountViewComponent {
|
|
|
48667
48726
|
|
|
48668
48727
|
@if (resolvedConfig().showDeleteAccount) {
|
|
48669
48728
|
<!-- Delete account -->
|
|
48670
|
-
<section class="settings-section">
|
|
48729
|
+
<section class="settings-section settings-section--danger">
|
|
48671
48730
|
<div class="section-title-danger">
|
|
48672
48731
|
<ion-icon name="warning-outline" class="danger-icon" aria-hidden="true"></ion-icon>
|
|
48673
48732
|
<val-title [props]="{ size: 'medium', color: 'dark', bold: true, content: dangerDeleteTitle() }" />
|
|
@@ -48699,7 +48758,7 @@ class AccountViewComponent {
|
|
|
48699
48758
|
(dismissed)="deleteAccountOpen.set(false)"
|
|
48700
48759
|
/>
|
|
48701
48760
|
</div>
|
|
48702
|
-
`, isInline: true, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.settings-section val-title{display:block;margin-bottom:12px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;flex-wrap:wrap;gap:8px}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.org-new-cta-card{display:block;margin-top:12px}.orgs-empty-card{background:var(--ion-color-secondary-tint, rgba(var(--ion-color-secondary-rgb, 130, 101, 208), .2));border-radius:18px;padding:18px 16px 12px;display:flex;flex-direction:column;gap:8px}.orgs-empty-card__main{display:flex;align-items:center;gap:10px}.orgs-empty-card__icon{font-size:20px;flex-shrink:0;color:var(--ion-color-dark)}.orgs-empty-card__text{font-size:.875rem;color:var(--ion-color-dark)}.orgs-empty-card__link{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;color:var(--ion-color-primary);text-align:left;text-decoration:underline;text-underline-offset:2px;font-family:inherit}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;background:var(--ion-color-light, #f4f5f8);border:1.5px solid transparent;cursor:pointer;transition:background .15s,border-color .15s}.org-card:active{opacity:.75}.org-card--active{border-color:var(--ion-color-primary);background:color-mix(in srgb,var(--ion-color-primary) 8%,transparent)}:host-context(body.dark) .org-card,:host-context(html.ion-palette-dark) .org-card,:host-context([data-theme=\"dark\"]) .org-card{background:#ffffff0d}:host-context(body.dark) .org-card--active,:host-context(html.ion-palette-dark) .org-card--active,:host-context([data-theme=\"dark\"]) .org-card--active{background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent)}.org-card__icon{width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px;color:var(--ion-color-primary)}.org-card__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-card__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-card__meta{display:flex;flex-direction:column;gap:1px;margin-top:3px}.org-card__meta-item{font-size:.78rem;color:var(--ion-color-dark)}.org-card__meta-label{font-weight:600;color:var(--ion-color-dark);margin-right:4px}.org-card__end{display:flex;align-items:center;gap:8px;flex-shrink:0}.section-title-danger{display:flex;align-items:center;gap:8px}.danger-icon{font-size:1.15rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}\n"], dependencies: [{ kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: CtaCardComponent, selector: "val-cta-card", inputs: ["props"], outputs: ["onAction"] }, { kind: "component", type: InvitationCardComponent, selector: "val-invitation-card", inputs: ["props"], outputs: ["onAccept", "onDecline"] }, { kind: "component", type: CreateOrgModalComponent, selector: "val-create-org-modal", inputs: ["i18nNamespace", "isOpen"], outputs: ["dismissed", "created"] }, { kind: "component", type: DeleteAccountModalComponent, selector: "val-delete-account-modal", inputs: ["i18nNamespace", "isOpen"], outputs: ["dismissed"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] }); }
|
|
48761
|
+
`, isInline: true, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.settings-section val-title{display:block;margin-bottom:12px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;flex-wrap:wrap;gap:8px}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.org-new-cta-card{display:block;margin-top:12px}.orgs-empty-card{background:var(--ion-color-secondary-tint, rgba(var(--ion-color-secondary-rgb, 130, 101, 208), .2));border-radius:18px;padding:18px 16px 12px;display:flex;flex-direction:column;gap:8px}.orgs-empty-card__main{display:flex;align-items:center;gap:10px}.orgs-empty-card__icon{font-size:20px;flex-shrink:0;color:var(--ion-color-dark)}.orgs-empty-card__text{font-size:.875rem;color:var(--ion-color-dark)}.orgs-empty-card__link{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;color:var(--ion-color-primary);text-align:left;text-decoration:underline;text-underline-offset:2px;font-family:inherit}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;background:var(--ion-color-light, #f4f5f8);border:1.5px solid transparent;cursor:pointer;transition:background .15s,border-color .15s}.org-card:active{opacity:.75}.org-card--active{border-color:var(--ion-color-primary);background:color-mix(in srgb,var(--ion-color-primary) 8%,transparent)}:host-context(body.dark) .org-card,:host-context(html.ion-palette-dark) .org-card,:host-context([data-theme=\"dark\"]) .org-card{background:#ffffff0d}:host-context(body.dark) .org-card--active,:host-context(html.ion-palette-dark) .org-card--active,:host-context([data-theme=\"dark\"]) .org-card--active{background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent)}.org-card__icon{width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px;color:var(--ion-color-primary);overflow:hidden;img{width:100%;height:100%;object-fit:cover;border-radius:50%}}.org-card__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-card__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-card__meta{display:flex;flex-direction:column;gap:1px;margin-top:3px}.org-card__meta-item{font-size:.78rem;color:var(--ion-color-dark)}.org-card__meta-label{font-weight:600;color:var(--ion-color-dark);margin-right:4px}.org-card__end{display:flex;align-items:center;gap:8px;flex-shrink:0}.section-title-danger{display:flex;align-items:center;gap:8px}.danger-icon{font-size:1.15rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}.settings-section--danger{background:color-mix(in srgb,var(--ion-color-danger) 4%,transparent);border-radius:14px;padding:16px;margin:0 -4px}:host-context(body.dark) .settings-section--danger,:host-context(html.ion-palette-dark) .settings-section--danger,:host-context([data-theme=\"dark\"]) .settings-section--danger{background:color-mix(in srgb,var(--ion-color-danger) 8%,transparent)}\n"], dependencies: [{ kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: CtaCardComponent, selector: "val-cta-card", inputs: ["props"], outputs: ["onAction"] }, { kind: "component", type: InvitationCardComponent, selector: "val-invitation-card", inputs: ["props"], outputs: ["onAccept", "onDecline"] }, { kind: "component", type: CreateOrgModalComponent, selector: "val-create-org-modal", inputs: ["i18nNamespace", "isOpen"], outputs: ["dismissed", "created"] }, { kind: "component", type: DeleteAccountModalComponent, selector: "val-delete-account-modal", inputs: ["i18nNamespace", "isOpen"], outputs: ["dismissed"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] }); }
|
|
48703
48762
|
}
|
|
48704
48763
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AccountViewComponent, decorators: [{
|
|
48705
48764
|
type: Component,
|
|
@@ -48767,12 +48826,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
48767
48826
|
size: 'medium',
|
|
48768
48827
|
color: 'dark',
|
|
48769
48828
|
bold: true,
|
|
48770
|
-
content:
|
|
48829
|
+
content: orgsActiveTitle(),
|
|
48771
48830
|
}"
|
|
48772
48831
|
/>
|
|
48773
48832
|
@if (orgs().length > 1) {
|
|
48774
48833
|
<ion-button fill="outline" color="dark" shape="round" size="small" (click)="onSwitchAccount()">
|
|
48775
|
-
{{ tt('
|
|
48834
|
+
{{ tt('orgsSwitch') }}
|
|
48776
48835
|
</ion-button>
|
|
48777
48836
|
}
|
|
48778
48837
|
</div>
|
|
@@ -48786,7 +48845,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
48786
48845
|
<div class="orgs-list">
|
|
48787
48846
|
<div class="org-card org-card--active">
|
|
48788
48847
|
<div class="org-card__icon">
|
|
48789
|
-
|
|
48848
|
+
@if (activeOrg()?.logoUrl && !activeOrgLogoFailed()) {
|
|
48849
|
+
<img [src]="activeOrg()!.logoUrl!" [alt]="activeOrg()?.name ?? ''" (error)="activeOrgLogoFailed.set(true)" />
|
|
48850
|
+
} @else {
|
|
48851
|
+
<ion-icon name="business-outline" />
|
|
48852
|
+
}
|
|
48790
48853
|
</div>
|
|
48791
48854
|
<div class="org-card__body">
|
|
48792
48855
|
<span class="org-card__name">{{ org.name }}</span>
|
|
@@ -48863,7 +48926,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
48863
48926
|
|
|
48864
48927
|
@if (resolvedConfig().showDeleteAccount) {
|
|
48865
48928
|
<!-- Delete account -->
|
|
48866
|
-
<section class="settings-section">
|
|
48929
|
+
<section class="settings-section settings-section--danger">
|
|
48867
48930
|
<div class="section-title-danger">
|
|
48868
48931
|
<ion-icon name="warning-outline" class="danger-icon" aria-hidden="true"></ion-icon>
|
|
48869
48932
|
<val-title [props]="{ size: 'medium', color: 'dark', bold: true, content: dangerDeleteTitle() }" />
|
|
@@ -48895,7 +48958,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
48895
48958
|
(dismissed)="deleteAccountOpen.set(false)"
|
|
48896
48959
|
/>
|
|
48897
48960
|
</div>
|
|
48898
|
-
`, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.settings-section val-title{display:block;margin-bottom:12px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;flex-wrap:wrap;gap:8px}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.org-new-cta-card{display:block;margin-top:12px}.orgs-empty-card{background:var(--ion-color-secondary-tint, rgba(var(--ion-color-secondary-rgb, 130, 101, 208), .2));border-radius:18px;padding:18px 16px 12px;display:flex;flex-direction:column;gap:8px}.orgs-empty-card__main{display:flex;align-items:center;gap:10px}.orgs-empty-card__icon{font-size:20px;flex-shrink:0;color:var(--ion-color-dark)}.orgs-empty-card__text{font-size:.875rem;color:var(--ion-color-dark)}.orgs-empty-card__link{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;color:var(--ion-color-primary);text-align:left;text-decoration:underline;text-underline-offset:2px;font-family:inherit}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;background:var(--ion-color-light, #f4f5f8);border:1.5px solid transparent;cursor:pointer;transition:background .15s,border-color .15s}.org-card:active{opacity:.75}.org-card--active{border-color:var(--ion-color-primary);background:color-mix(in srgb,var(--ion-color-primary) 8%,transparent)}:host-context(body.dark) .org-card,:host-context(html.ion-palette-dark) .org-card,:host-context([data-theme=\"dark\"]) .org-card{background:#ffffff0d}:host-context(body.dark) .org-card--active,:host-context(html.ion-palette-dark) .org-card--active,:host-context([data-theme=\"dark\"]) .org-card--active{background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent)}.org-card__icon{width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px;color:var(--ion-color-primary)}.org-card__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-card__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-card__meta{display:flex;flex-direction:column;gap:1px;margin-top:3px}.org-card__meta-item{font-size:.78rem;color:var(--ion-color-dark)}.org-card__meta-label{font-weight:600;color:var(--ion-color-dark);margin-right:4px}.org-card__end{display:flex;align-items:center;gap:8px;flex-shrink:0}.section-title-danger{display:flex;align-items:center;gap:8px}.danger-icon{font-size:1.15rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}\n"] }]
|
|
48961
|
+
`, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.settings-section val-title{display:block;margin-bottom:12px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;flex-wrap:wrap;gap:8px}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.org-new-cta-card{display:block;margin-top:12px}.orgs-empty-card{background:var(--ion-color-secondary-tint, rgba(var(--ion-color-secondary-rgb, 130, 101, 208), .2));border-radius:18px;padding:18px 16px 12px;display:flex;flex-direction:column;gap:8px}.orgs-empty-card__main{display:flex;align-items:center;gap:10px}.orgs-empty-card__icon{font-size:20px;flex-shrink:0;color:var(--ion-color-dark)}.orgs-empty-card__text{font-size:.875rem;color:var(--ion-color-dark)}.orgs-empty-card__link{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;color:var(--ion-color-primary);text-align:left;text-decoration:underline;text-underline-offset:2px;font-family:inherit}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;background:var(--ion-color-light, #f4f5f8);border:1.5px solid transparent;cursor:pointer;transition:background .15s,border-color .15s}.org-card:active{opacity:.75}.org-card--active{border-color:var(--ion-color-primary);background:color-mix(in srgb,var(--ion-color-primary) 8%,transparent)}:host-context(body.dark) .org-card,:host-context(html.ion-palette-dark) .org-card,:host-context([data-theme=\"dark\"]) .org-card{background:#ffffff0d}:host-context(body.dark) .org-card--active,:host-context(html.ion-palette-dark) .org-card--active,:host-context([data-theme=\"dark\"]) .org-card--active{background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent)}.org-card__icon{width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px;color:var(--ion-color-primary);overflow:hidden;img{width:100%;height:100%;object-fit:cover;border-radius:50%}}.org-card__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-card__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-card__meta{display:flex;flex-direction:column;gap:1px;margin-top:3px}.org-card__meta-item{font-size:.78rem;color:var(--ion-color-dark)}.org-card__meta-label{font-weight:600;color:var(--ion-color-dark);margin-right:4px}.org-card__end{display:flex;align-items:center;gap:8px;flex-shrink:0}.section-title-danger{display:flex;align-items:center;gap:8px}.danger-icon{font-size:1.15rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}.settings-section--danger{background:color-mix(in srgb,var(--ion-color-danger) 4%,transparent);border-radius:14px;padding:16px;margin:0 -4px}:host-context(body.dark) .settings-section--danger,:host-context(html.ion-palette-dark) .settings-section--danger,:host-context([data-theme=\"dark\"]) .settings-section--danger{background:color-mix(in srgb,var(--ion-color-danger) 8%,transparent)}\n"] }]
|
|
48899
48962
|
}], ctorParameters: () => [], propDecorators: { config: [{
|
|
48900
48963
|
type: Input
|
|
48901
48964
|
}] } });
|
|
@@ -67925,5 +67988,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
67925
67988
|
* Generated bundle index. Do not edit.
|
|
67926
67989
|
*/
|
|
67927
67990
|
|
|
67928
|
-
export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, APP_VERSION_PLATFORM_PLUGIN, APP_VERSION_REMOTE_PLUGIN, ARTICLE_CARD_DEFAULTS, ARTICLE_SPACING, ARTICLE_STRIP_DEFAULTS, AUTH_CTA_DEFAULTS, AVATAR_UPLOAD_DEFAULTS, AboutViewComponent, AccordionComponent, AccountViewComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimatedTerminalComponent, ApiKeyCreateModalComponent, ApiKeyService, ApiKeysModalComponent, ApiKeysViewComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleCardComponent, ArticleComponent, ArticleStripComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthCtaComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CORNER_KEYS, CTA_CARD_DEFAULTS, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentService, ContentTransformer, CookieBannerComponent, CountdownComponent, CreateOrgModalComponent, CtaCardComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_BUTTON_PRESETS, 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_LOGIN_LOGO, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_PRESETS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_SPLASH_SCREEN_CONFIG, DataTableComponent, DateInputComponent, DatePickerComponent, DateRangeInputComponent, DebugConsoleComponent, DeleteAccountModalComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EditOrgModalComponent, EmptyStateComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FUN_MODAL_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FieldListComponent, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FontSizeOption, FontSizeSelectorComponent, FontSizeService, FooterComponent, FooterLinksComponent, FormComponent, FormSkeletonComponent, FunHeaderComponent, FunModalComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HasPermissionDirective, HeaderComponent, HintComponent, HorizontalScrollComponent, HrefComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, INVITATION_CARD_DEFAULTS, IONIC_COLORS$5 as IONIC_COLORS, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, InvitationCardComponent, InviteMemberModalComponent, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginAttemptModalComponent, LoginComponent, MEDIA_OBJECT_DEFAULTS, MEMBER_CARD_DEFAULTS, METRIC_CARD_DEFAULTS, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MediaObjectComponent, MemberCardComponent, MemberDetailModalComponent, MemberImportModalComponent, MenuComponent, MessagingService, MetaService, MetricCardComponent, MfaModalComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationPreferencesViewComponent, NotificationsService, NotificationsViewComponent, NumberFromToComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OrgInfoSheetComponent, OrgService, OrgSwitchService, OrganizationViewComponent, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PermissionCatalogService, PermissionSelectorComponent, PermissionsModalComponent, PermissionsViewComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PreferencesViewComponent, PresetService, PriceTagComponent, ProcessLinksPipe, ProfileSkeletonComponent, ProfileViewComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QrScannerComponent, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RequestFirestoreService, RequestFormBuilderService, RequestService, RightsFooterComponent, RotatingTextComponent, SEARCH_HEADER_DEFAULTS, SETTINGS_SECTIONS_CATALOG, SHAPE_KEYS, SHARE_PROFILE_MODAL_DEFAULTS, SKELETON_LAYOUT_DEFAULT_ROWS, SKELETON_PRESETS, SOLID_KEYS, STATS_BAR_DEFAULTS, STROKE_KEYS, SearchHeaderComponent, SearchSelectorComponent, SearchbarComponent, SecurityViewComponent, SegmentControlComponent, SelectSearchComponent, SessionListModalComponent, SessionService, SettingsHubComponent, ShareButtonsComponent, ShareProfileModalComponent, SimpleComponent, SkeletonComponent, SkeletonLayoutComponent, SkeletonService, SplashScreenService, StatsBarComponent, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, SwitchOrgModalComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TicketCardComponent, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TransferOwnershipModalComponent, 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_CONTENT_CONFIG, 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_NETWORK_ERROR_KEY, VALTECH_SETTINGS_MENU_LINKS, VALTECH_SITE_PATHS, VALTECH_SOCIAL_LINKS, VALTECH_SPLASH_SCREEN, VALTECH_WEB_BASE_URLS, VALTECH_WHATSAPP_CONFIG, VERSION, ValtechErrorService, WhatsappFabComponent, WhatsappService, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, authPasswordValidator, beautifyLegalArticle, blogPost, buildCompanyFooterProps, buildFooterLinks, buildLegalLinkResolver, buildPath, buildSettingsCards, button, canSubmitRequestType, collections, connectPageRefresh, createErrorStateProps, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createPageState, createPermissionLabeler, createRefreshableStream, createTitleProps, docs, errorLoggingInterceptor, extractPathParams, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, guestGuard, hasEmulators, iconButton, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isIonicColor, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, provideSplashScreen, provideValtechAboutRoutes, provideValtechAccountRoutes, provideValtechAds, provideValtechApiKeysRoutes, provideValtechAppConfig, provideValtechAppVersion, provideValtechAppVersionHttp, provideValtechAuth, provideValtechAuthInterceptor, provideValtechContent, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechNotificationPreferencesRoutes, provideValtechNotificationsRoutes, provideValtechOrganizationRoutes, provideValtechPermissionsRoutes, provideValtechPreferencesRoutes, provideValtechPresets, provideValtechProfileRoutes, provideValtechSecurityRoutes, provideValtechSettingsRoutes, provideValtechSite, provideValtechSkeleton, provideValtechWhatsapp, query, renderPatternSvgInner, replaceSpecialChars, requestSubmitMode, resolveColor, resolveInputDefaultValue, resolveIonicColor, resolveWebBaseUrl, roleGuard, selectableRequestTypes, storagePaths, superAdminGuard, toArticle };
|
|
67991
|
+
export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, APP_VERSION_PLATFORM_PLUGIN, APP_VERSION_REMOTE_PLUGIN, ARTICLE_CARD_DEFAULTS, ARTICLE_SPACING, ARTICLE_STRIP_DEFAULTS, AUTH_CTA_DEFAULTS, AVATAR_UPLOAD_DEFAULTS, AboutViewComponent, AccordionComponent, AccountViewComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimatedTerminalComponent, ApiKeyCreateModalComponent, ApiKeyService, ApiKeysModalComponent, ApiKeysViewComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleCardComponent, ArticleComponent, ArticleStripComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthCtaComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CORNER_KEYS, CTA_CARD_DEFAULTS, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentService, ContentTransformer, CookieBannerComponent, CountdownComponent, CreateOrgModalComponent, CtaCardComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_BUTTON_PRESETS, 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_LOGIN_LOGO, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_PRESETS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_SPLASH_SCREEN_CONFIG, DataTableComponent, DateInputComponent, DatePickerComponent, DateRangeInputComponent, DebugConsoleComponent, DeleteAccountModalComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EditOrgModalComponent, EmptyStateComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FUN_MODAL_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FieldListComponent, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FontSizeOption, FontSizeSelectorComponent, FontSizeService, FooterComponent, FooterLinksComponent, FormComponent, FormSkeletonComponent, FunHeaderComponent, FunModalComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HasPermissionDirective, HeaderComponent, HintComponent, HorizontalScrollComponent, HrefComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, INVITATION_CARD_DEFAULTS, IONIC_COLORS$5 as IONIC_COLORS, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, InvitationCardComponent, InviteMemberModalComponent, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginAttemptModalComponent, LoginComponent, MEDIA_OBJECT_DEFAULTS, MEMBER_CARD_DEFAULTS, METRIC_CARD_DEFAULTS, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MediaObjectComponent, MemberCardComponent, MemberDetailModalComponent, MemberImportModalComponent, MenuComponent, MessagingService, MetaService, MetricCardComponent, MfaModalComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationPreferencesViewComponent, NotificationsService, NotificationsViewComponent, NumberFromToComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OrgInfoSheetComponent, OrgService, OrgSwitchService, OrganizationViewComponent, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PermissionCatalogService, PermissionSelectorComponent, PermissionsModalComponent, PermissionsViewComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PreferencesViewComponent, PresetService, PriceTagComponent, ProcessLinksPipe, ProfileSkeletonComponent, ProfileViewComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QrScannerComponent, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RequestFirestoreService, RequestFormBuilderService, RequestService, RightsFooterComponent, RotatingTextComponent, SEARCH_HEADER_DEFAULTS, SETTINGS_SECTIONS_CATALOG, SHAPE_KEYS, SHARE_PROFILE_MODAL_DEFAULTS, SKELETON_LAYOUT_DEFAULT_ROWS, SKELETON_PRESETS, SOLID_KEYS, STATS_BAR_DEFAULTS, STROKE_KEYS, SearchHeaderComponent, SearchSelectorComponent, SearchbarComponent, SecurityViewComponent, SegmentControlComponent, SelectSearchComponent, SessionListModalComponent, SessionService, SettingsHubComponent, ShareButtonsComponent, ShareProfileModalComponent, SimpleComponent, SkeletonComponent, SkeletonLayoutComponent, SkeletonService, SplashComponent, SplashScreenService, StatsBarComponent, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, SwitchOrgModalComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TicketCardComponent, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TransferOwnershipModalComponent, 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_CONTENT_CONFIG, 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_NETWORK_ERROR_KEY, VALTECH_SETTINGS_MENU_LINKS, VALTECH_SITE_PATHS, VALTECH_SOCIAL_LINKS, VALTECH_SPLASH_SCREEN, VALTECH_WEB_BASE_URLS, VALTECH_WHATSAPP_CONFIG, VERSION, ValtechErrorService, WhatsappFabComponent, WhatsappService, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, authPasswordValidator, beautifyLegalArticle, blogPost, buildCompanyFooterProps, buildFooterLinks, buildLegalLinkResolver, buildPath, buildSettingsCards, button, canSubmitRequestType, collections, connectPageRefresh, createErrorStateProps, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createPageState, createPermissionLabeler, createRefreshableStream, createTitleProps, docs, errorLoggingInterceptor, extractPathParams, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, guestGuard, hasEmulators, iconButton, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isIonicColor, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, provideSplashScreen, provideValtechAboutRoutes, provideValtechAccountRoutes, provideValtechAds, provideValtechApiKeysRoutes, provideValtechAppConfig, provideValtechAppVersion, provideValtechAppVersionHttp, provideValtechAuth, provideValtechAuthInterceptor, provideValtechContent, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechNotificationPreferencesRoutes, provideValtechNotificationsRoutes, provideValtechOrganizationRoutes, provideValtechPermissionsRoutes, provideValtechPreferencesRoutes, provideValtechPresets, provideValtechProfileRoutes, provideValtechSecurityRoutes, provideValtechSettingsRoutes, provideValtechSite, provideValtechSkeleton, provideValtechWhatsapp, query, renderPatternSvgInner, replaceSpecialChars, requestSubmitMode, resolveColor, resolveInputDefaultValue, resolveIonicColor, resolveWebBaseUrl, roleGuard, selectableRequestTypes, storagePaths, superAdminGuard, toArticle };
|
|
67929
67992
|
//# sourceMappingURL=valtech-components.mjs.map
|