valtech-components 4.0.237 → 4.0.238

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.
@@ -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.237';
59
+ const VERSION = '4.0.238';
60
60
 
61
61
  // Control de estado de refresco (singleton a nivel de módulo)
62
62
  let isRefreshing = false;
@@ -30066,7 +30066,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
30066
30066
  type: Output
30067
30067
  }] } });
30068
30068
 
30069
- const DEFAULT_NAMESPACE$l = 'PermissionSelector';
30069
+ const DEFAULT_NAMESPACE$m = 'PermissionSelector';
30070
30070
  const PERMISSION_SELECTOR_I18N = {
30071
30071
  es: {
30072
30072
  selectAll: 'Todo',
@@ -30135,7 +30135,7 @@ class PermissionSelectorComponent {
30135
30135
  };
30136
30136
  });
30137
30137
  });
30138
- this.i18n.registerDefaults(DEFAULT_NAMESPACE$l, PERMISSION_SELECTOR_I18N);
30138
+ this.i18n.registerDefaults(DEFAULT_NAMESPACE$m, PERMISSION_SELECTOR_I18N);
30139
30139
  }
30140
30140
  toggleAction(code) {
30141
30141
  const sel = new Set(this.selected());
@@ -30161,7 +30161,7 @@ class PermissionSelectorComponent {
30161
30161
  }
30162
30162
  tt(key) {
30163
30163
  this.i18n.lang();
30164
- return this.i18n.t(key, DEFAULT_NAMESPACE$l);
30164
+ return this.i18n.t(key, DEFAULT_NAMESPACE$m);
30165
30165
  }
30166
30166
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PermissionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
30167
30167
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PermissionSelectorComponent, isStandalone: true, selector: "val-permission-selector", inputs: { permissions: { classPropertyName: "permissions", publicName: "permissions", isSignal: true, isRequired: false, transformFunction: null }, actionLabels: { classPropertyName: "actionLabels", publicName: "actionLabels", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selectedChange" }, ngImport: i0, template: `
@@ -45685,43 +45685,27 @@ const PROFILE_VIEW_I18N = {
45685
45685
  },
45686
45686
  };
45687
45687
 
45688
- /** Patrón sincronizado con backend handleRegex: lowercase alfanum + underscore. */
45689
45688
  const HANDLE_PATTERN = /^[a-z_][a-z0-9_]*$/;
45690
45689
  const HANDLE_MIN = 3;
45691
45690
  const HANDLE_MAX = 20;
45692
- const DEFAULT_NAMESPACE$k = 'Settings.Profile';
45691
+ const DEFAULT_NAMESPACE$l = 'Settings.Profile';
45693
45692
  /**
45694
- * `val-profile-view` — vista Perfil full-feature autocontenida (organism).
45695
- *
45696
- * Edita los campos públicos del usuario en UN solo formulario con UN solo botón
45697
- * "Guardar". Wireup:
45698
- * - Avatar — val-avatar-upload (Firebase Storage + backend sync). Separado del
45699
- * form porque es upload sync independiente.
45700
- * - Handle (@usuario) — InputType.HANDLE (val-username-input con check de
45701
- * disponibilidad async resuelto vía AuthService inyectado).
45702
- * - Nombre — InputType.TEXT.
45703
- * - Teléfono — InputType.PHONE.
45704
- *
45705
- * Submit handler dispatcha:
45706
- * 1. Si handle cambió → updateHandle PRIMERO (uniqueness).
45707
- * 2. Si name o phone cambió → updateProfile con ambos.
45693
+ * `val-profile-content` — CONTENIDO del perfil (avatar + handle + nombre + teléfono
45694
+ * en un form con un botón). Presentacional + lógica de datos, SIN cromática de
45695
+ * página: NO toca `NavigationService` ni el header del shell.
45708
45696
  *
45709
- * Lectura del perfil: suscribe al doc Firestore /users/{uid} (mirror que mantiene
45710
- * el backend). Reactivo cross-tab + auto-refresca tras save. Fallback REST
45711
- * (auth.getProfile) si el doc no existe o el listener falla.
45697
+ * Lo reutilizan tanto la vista ruteada (`val-profile-view`, que sí setea el header)
45698
+ * como el modal (`val-profile-modal`). Así el modal no contamina el header del shell.
45712
45699
  *
45713
- * NO renderiza ion-content vive dentro de val-page-wrapper.
45714
- *
45715
- * Auto-registra sus defaults i18n (es/en) en el constructor si el consumer no
45716
- * proveyó el namespace configurado (default `Settings.Profile`).
45700
+ * Toda la lógica (lectura reactiva del mirror Firestore /users/{uid} + fallback REST,
45701
+ * submit con diff handle→profile, avatar upload, estados, i18n) vive aquí.
45717
45702
  */
45718
- class ProfileViewComponent {
45719
- /** Namespace i18n resuelto (capturado una vez para llamadas no-reactivas). */
45703
+ class ProfileContentComponent {
45704
+ /** Namespace i18n resuelto (público para que la vista ruteada arme el header). */
45720
45705
  get ns() {
45721
45706
  return this.resolvedConfig().i18nNamespace;
45722
45707
  }
45723
45708
  constructor() {
45724
- this.nav = inject(NavigationService);
45725
45709
  this.auth = inject(AuthService);
45726
45710
  this.i18n = inject(I18nService);
45727
45711
  this.toast = inject(ToastService);
@@ -45729,7 +45713,6 @@ class ProfileViewComponent {
45729
45713
  this.firebase = inject(FirebaseService);
45730
45714
  this.collections = inject(FirestoreCollectionFactory);
45731
45715
  this.route = inject(ActivatedRoute, { optional: true });
45732
- /** Config mergeada con defaults. @Input gana sobre route data. */
45733
45716
  this.resolvedConfig = computed(() => {
45734
45717
  const fromRoute = (this.route?.snapshot.data['profileConfig'] ?? {});
45735
45718
  const merged = { ...fromRoute, ...(this.config ?? {}) };
@@ -45739,15 +45722,11 @@ class ProfileViewComponent {
45739
45722
  showPhone: merged.showPhone ?? true,
45740
45723
  showShareCta: merged.showShareCta ?? true,
45741
45724
  profileBaseUrl: merged.profileBaseUrl ?? '',
45742
- i18nNamespace: merged.i18nNamespace ?? DEFAULT_NAMESPACE$k,
45725
+ i18nNamespace: merged.i18nNamespace ?? DEFAULT_NAMESPACE$l,
45743
45726
  onSaved: merged.onSaved,
45744
45727
  onAvatarUploaded: merged.onAvatarUploaded,
45745
45728
  };
45746
45729
  });
45747
- /**
45748
- * Colección global /users/{uid} (skipAppPrefix: true — el doc vive fuera de
45749
- * apps/{appId}/... porque es cross-app, ver firestore.rules).
45750
- */
45751
45730
  this.usersCol = this.collections.create('users', {
45752
45731
  skipAppPrefix: true,
45753
45732
  });
@@ -45824,17 +45803,9 @@ class ProfileViewComponent {
45824
45803
  };
45825
45804
  });
45826
45805
  this.formMeta = this.buildFormMeta();
45827
- // Auto-registro i18n — respeta override del consumer. El namespace puede
45828
- // venir de @Input.config o del route data; lo resolvemos acá.
45829
45806
  const ns = this.ns;
45830
45807
  this.i18n.registerDefaults(ns, PROFILE_VIEW_I18N);
45831
- this.nav.setBackHeader('pageTitle', ns, { withMenu: true });
45832
45808
  connectPageRefresh(() => this.loadFromApi());
45833
- // Cargar perfil inmediatamente si el usuario ya está autenticado.
45834
- // Sin esto, si auth.user() ya estaba populado al montar el componente
45835
- // (sesión restaurada), el effect no dispara y la página queda vacía
45836
- // hasta que el usuario hace pull-to-refresh (Regla: no esperar a que
45837
- // una signal cambie si ya tiene valor inicial).
45838
45809
  void this.firebase.whenFirebaseAuthReady().then(() => {
45839
45810
  const uid = this._userId();
45840
45811
  if (uid) {
@@ -45880,7 +45851,6 @@ class ProfileViewComponent {
45880
45851
  sub?.unsubscribe();
45881
45852
  });
45882
45853
  }, { allowSignalWrites: true });
45883
- // saving → mutar state (val-form.ngDoCheck lo detecta).
45884
45854
  effect(() => {
45885
45855
  const isSaving = this.saving();
45886
45856
  const state = isSaving ? ComponentStates.WORKING : ComponentStates.ENABLED;
@@ -45888,7 +45858,6 @@ class ProfileViewComponent {
45888
45858
  this.formMeta.actions.state = state;
45889
45859
  this.formMeta.actions.text = isSaving ? this.t('saving') : this.t('save');
45890
45860
  });
45891
- // profile loaded + form mounted → patchValue al FormGroup.
45892
45861
  effect(() => {
45893
45862
  const p = this.profile();
45894
45863
  const form = this.formCmp()?.Form;
@@ -45900,13 +45869,11 @@ class ProfileViewComponent {
45900
45869
  phone: p.phone || '',
45901
45870
  }, { emitEvent: false });
45902
45871
  });
45903
- // i18n.lang change → mutar labels (rare, no afecta typing).
45904
45872
  effect(() => {
45905
45873
  this.i18n.lang();
45906
45874
  this.applyI18nLabels();
45907
45875
  });
45908
45876
  }
45909
- /** Construcción inicial — UNA vez. Gatea handle/phone según config. */
45910
45877
  buildFormMeta() {
45911
45878
  const cfg = this.resolvedConfig();
45912
45879
  const handleField = {
@@ -45959,7 +45926,6 @@ class ProfileViewComponent {
45959
45926
  value: '',
45960
45927
  state: ComponentStates.ENABLED,
45961
45928
  };
45962
- // Filtrado por config: el name siempre va; handle/phone son opt-out.
45963
45929
  const fields = [];
45964
45930
  if (cfg.showHandle)
45965
45931
  fields.push(handleField);
@@ -45990,7 +45956,6 @@ class ProfileViewComponent {
45990
45956
  actions: submitButton,
45991
45957
  };
45992
45958
  }
45993
- /** Re-aplica labels/hints/placeholders en cambio de idioma. */
45994
45959
  applyI18nLabels() {
45995
45960
  const section = this.formMeta.sections[0];
45996
45961
  for (const field of section.fields) {
@@ -46021,10 +45986,6 @@ class ProfileViewComponent {
46021
45986
  const button = this.formMeta.actions;
46022
45987
  button.text = this.saving() ? this.t('saving') : this.t('save');
46023
45988
  }
46024
- /**
46025
- * Fallback REST. Capa 4 (UI declarativa): NO toasteamos acá — el
46026
- * val-empty-state ES la UI del error.
46027
- */
46028
45989
  async loadFromApi() {
46029
45990
  this.loading.set(true);
46030
45991
  try {
@@ -46149,7 +46110,6 @@ class ProfileViewComponent {
46149
46110
  position: 'top',
46150
46111
  });
46151
46112
  }
46152
- /** Lee del namespace configurado. */
46153
46113
  t(key) {
46154
46114
  return this.i18n.t(key, this.ns);
46155
46115
  }
@@ -46163,8 +46123,8 @@ class ProfileViewComponent {
46163
46123
  const last = parts.length > 1 ? (parts[parts.length - 1]?.[0] ?? '') : '';
46164
46124
  return (first + last).toUpperCase() || '?';
46165
46125
  }
46166
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProfileViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
46167
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ProfileViewComponent, isStandalone: true, selector: "val-profile-view", inputs: { config: "config" }, viewQueries: [{ propertyName: "formCmp", first: true, predicate: ["form"], descendants: true, isSignal: true }], ngImport: i0, template: `
46126
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProfileContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
46127
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ProfileContentComponent, isStandalone: true, selector: "val-profile-content", inputs: { config: "config" }, viewQueries: [{ propertyName: "formCmp", first: true, predicate: ["form"], descendants: true, isSignal: true }], ngImport: i0, template: `
46168
46128
  <div class="page">
46169
46129
  <header class="page-header">
46170
46130
  <val-display [props]="{ size: 'small', color: 'dark', content: t('pageTitle') }" />
@@ -46223,17 +46183,14 @@ class ProfileViewComponent {
46223
46183
  }
46224
46184
 
46225
46185
  <val-form #form [props]="formMeta" (onSubmit)="onSubmit($event)" />
46226
-
46227
- <!-- Card de compartir + modal QR removidos temporalmente (se retoman luego).
46228
- Wiring intacto: shareCta(), shareModal(), shareOpen, showShareCta. -->
46229
46186
  }
46230
46187
  }
46231
46188
  </div>
46232
- `, isInline: true, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.page-header h1{font-size:22px;font-weight:700;margin:0 0 4px}.hint{font-size:13px;opacity:.7;margin:0 0 12px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.avatar-section{display:flex;align-items:center;gap:16px}.avatar-meta{display:flex;flex-direction:column;gap:2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: AvatarUploadComponent, selector: "val-avatar-upload", inputs: ["props", "customPath", "customThumbPath", "skipBackendSync"], outputs: ["uploaded", "error", "uploadStart"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }] }); }
46189
+ `, 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))}.avatar-section{display:flex;align-items:center;gap:16px}.avatar-meta{display:flex;flex-direction:column;gap:2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: AvatarUploadComponent, selector: "val-avatar-upload", inputs: ["props", "customPath", "customThumbPath", "skipBackendSync"], outputs: ["uploaded", "error", "uploadStart"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }] }); }
46233
46190
  }
46234
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProfileViewComponent, decorators: [{
46191
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProfileContentComponent, decorators: [{
46235
46192
  type: Component,
46236
- args: [{ selector: 'val-profile-view', standalone: true, imports: [
46193
+ args: [{ selector: 'val-profile-content', standalone: true, imports: [
46237
46194
  CommonModule,
46238
46195
  ReactiveFormsModule,
46239
46196
  AvatarUploadComponent,
@@ -46304,13 +46261,52 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
46304
46261
  }
46305
46262
 
46306
46263
  <val-form #form [props]="formMeta" (onSubmit)="onSubmit($event)" />
46307
-
46308
- <!-- Card de compartir + modal QR removidos temporalmente (se retoman luego).
46309
- Wiring intacto: shareCta(), shareModal(), shareOpen, showShareCta. -->
46310
46264
  }
46311
46265
  }
46312
46266
  </div>
46313
- `, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.page-header h1{font-size:22px;font-weight:700;margin:0 0 4px}.hint{font-size:13px;opacity:.7;margin:0 0 12px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.avatar-section{display:flex;align-items:center;gap:16px}.avatar-meta{display:flex;flex-direction:column;gap:2px}\n"] }]
46267
+ `, 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))}.avatar-section{display:flex;align-items:center;gap:16px}.avatar-meta{display:flex;flex-direction:column;gap:2px}\n"] }]
46268
+ }], ctorParameters: () => [], propDecorators: { config: [{
46269
+ type: Input
46270
+ }] } });
46271
+
46272
+ const DEFAULT_NAMESPACE$k = 'Settings.Profile';
46273
+ /**
46274
+ * `val-profile-view` — vista Perfil ruteada (organism). Wrapper delgado:
46275
+ * configura el header del shell (`NavigationService.setBackHeader`) y delega TODO
46276
+ * el contenido/lógica a `val-profile-content`.
46277
+ *
46278
+ * El contenido vive en `val-profile-content` (sin cromática de página) para poder
46279
+ * reutilizarse también desde `val-profile-modal` sin contaminar el header.
46280
+ *
46281
+ * Consumo: igual que antes (ruta vía `provideValtechProfileRoutes` o embebida con
46282
+ * `[config]`). La config se pasa tal cual al contenido.
46283
+ */
46284
+ class ProfileViewComponent {
46285
+ constructor() {
46286
+ this.nav = inject(NavigationService);
46287
+ this.i18n = inject(I18nService);
46288
+ this.route = inject(ActivatedRoute, { optional: true });
46289
+ this.ns = computed(() => {
46290
+ const fromRoute = (this.route?.snapshot.data['profileConfig'] ?? {});
46291
+ return this.config?.i18nNamespace ?? fromRoute.i18nNamespace ?? DEFAULT_NAMESPACE$k;
46292
+ });
46293
+ const ns = this.ns();
46294
+ // El header usa la key 'pageTitle' del namespace; el contenido registra los
46295
+ // defaults i18n, pero lo aseguramos también acá por si el header resuelve antes.
46296
+ this.i18n.registerDefaults(ns, PROFILE_VIEW_I18N);
46297
+ this.nav.setBackHeader('pageTitle', ns, { withMenu: true });
46298
+ }
46299
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProfileViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
46300
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ProfileViewComponent, isStandalone: true, selector: "val-profile-view", inputs: { config: "config" }, ngImport: i0, template: ` <val-profile-content [config]="config" /> `, isInline: true, dependencies: [{ kind: "component", type: ProfileContentComponent, selector: "val-profile-content", inputs: ["config"] }] }); }
46301
+ }
46302
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProfileViewComponent, decorators: [{
46303
+ type: Component,
46304
+ args: [{
46305
+ selector: 'val-profile-view',
46306
+ standalone: true,
46307
+ imports: [ProfileContentComponent],
46308
+ template: ` <val-profile-content [config]="config" /> `,
46309
+ }]
46314
46310
  }], ctorParameters: () => [], propDecorators: { config: [{
46315
46311
  type: Input
46316
46312
  }] } });
@@ -59442,16 +59438,16 @@ class ProfileModalComponent {
59442
59438
  </ion-toolbar>
59443
59439
  </ion-header>
59444
59440
  <ion-content class="ion-padding">
59445
- <val-profile-view />
59441
+ <val-profile-content />
59446
59442
  </ion-content>
59447
- `, isInline: true, dependencies: [{ 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: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: ProfileViewComponent, selector: "val-profile-view", inputs: ["config"] }] }); }
59443
+ `, isInline: true, dependencies: [{ 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: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: ProfileContentComponent, selector: "val-profile-content", inputs: ["config"] }] }); }
59448
59444
  }
59449
59445
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProfileModalComponent, decorators: [{
59450
59446
  type: Component,
59451
59447
  args: [{
59452
59448
  selector: 'val-profile-modal',
59453
59449
  standalone: true,
59454
- imports: [IonButton, IonButtons, IonContent, IonHeader, IonToolbar, ProfileViewComponent],
59450
+ imports: [IonButton, IonButtons, IonContent, IonHeader, IonToolbar, ProfileContentComponent],
59455
59451
  template: `
59456
59452
  <ion-header>
59457
59453
  <ion-toolbar>
@@ -59463,7 +59459,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
59463
59459
  </ion-toolbar>
59464
59460
  </ion-header>
59465
59461
  <ion-content class="ion-padding">
59466
- <val-profile-view />
59462
+ <val-profile-content />
59467
59463
  </ion-content>
59468
59464
  `,
59469
59465
  }]
@@ -62335,7 +62331,6 @@ class HeaderActionsService {
62335
62331
  constructor() {
62336
62332
  this.modal = inject(ModalService);
62337
62333
  this.router = inject(Router);
62338
- this.nav = inject(NavigationService);
62339
62334
  }
62340
62335
  async handle(token, config = {}) {
62341
62336
  const notificationsRoute = config.notificationsRoute ?? '/app/notifications';
@@ -62346,11 +62341,9 @@ class HeaderActionsService {
62346
62341
  await this.router.navigate([notificationsRoute]);
62347
62342
  return true;
62348
62343
  case 'profile':
62344
+ // El modal usa val-profile-content (sin cromática de página) → no toca
62345
+ // el header del shell, así que no hace falta restaurarlo al cerrar.
62349
62346
  await this.modal.open({ component: ProfileModalComponent });
62350
- // val-profile-view setea el header del shell (es una vista de settings
62351
- // ruteada). Al reusarla en el modal contamina el header; lo restauramos
62352
- // al home al cerrar para no dejar el híbrido perfil/home.
62353
- this.nav.resetHeader();
62354
62347
  return true;
62355
62348
  case 'org':
62356
62349
  await this.modal.open({
@@ -74066,5 +74059,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
74066
74059
  * Generated bundle index. Do not edit.
74067
74060
  */
74068
74061
 
74069
- 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, ChatComposerComponent, ChatInputComponent, ChatWindowComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentService, ContentTransformer, ConversationListItemComponent, ConversationService, CookieBannerComponent, CookieSettingsComponent, 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_POST_UPDATE_GRACE_MS, 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, EntityCardComponent, EntityFeedService, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FUN_MODAL_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FieldListComponent, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FontSizeOption, FontSizeSelectorComponent, FontSizeService, FooterComponent, FooterLinksComponent, FormComponent, FormFieldComponent, FormSkeletonComponent, FunHeaderComponent, FunModalComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HapticsService, HasPermissionDirective, HeaderActionsService, HeaderComponent, HintComponent, HorizontalScrollComponent, HrefComponent, HtmlViewerModalComponent, 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, LOGGED_IN_HINT_COOKIE, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LanguageSelectorV2Component, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadMoreComponent, 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, MessageBubbleComponent, 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, OptionCardsComponent, OrgInfoSheetComponent, OrgService, OrgSwitchService, OrganizationViewComponent, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, POST_UPDATE_TS_KEY, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PdfService, PermissionCatalogService, PermissionSelectorComponent, PermissionsModalComponent, PermissionsViewComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PreferencesViewComponent, PresetService, PriceTagComponent, ProcessLinksPipe, ProfileModalComponent, ProfileSkeletonComponent, ProfileViewComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QrScannerComponent, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, ReactionBarComponent, ReactionsService, RefresherComponent, RequestFirestoreService, RequestFormBuilderService, RequestFormComponent, RequestModalComponent, 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, SectionHeaderComponent, 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, ThreadPanelComponent, TicketCardComponent, TicketCardImageService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TransferOwnershipModalComponent, TranslatePipe, TypedCollection, TypingIndicatorComponent, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_CHAT_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_REACTIONS_CONFIG, VALTECH_SETTINGS_MENU_LINKS, VALTECH_SITE_PATHS, VALTECH_SOCIAL_LINKS, VALTECH_SPLASH_SCREEN, VALTECH_WEB_BASE_URLS, VALTECH_WHATSAPP_CONFIG, VERSION, ValtechErrorService, VerifyViewComponent, 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, formatClockTime, formatDateSeparator, formatRelativeTime, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, groupPermissionsByScope, 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, provideValtechChat, provideValtechContent, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechNotificationPreferencesRoutes, provideValtechNotificationsRoutes, provideValtechOrganizationRoutes, provideValtechPermissionsRoutes, provideValtechPreferencesRoutes, provideValtechPresets, provideValtechProfileRoutes, provideValtechReactions, provideValtechSecurityRoutes, provideValtechSettingsRoutes, provideValtechSite, provideValtechSkeleton, provideValtechWhatsapp, query, rbacGuard, renderPatternSvgInner, replaceSpecialChars, requestSubmitMode, resolveColor, resolveInputDefaultValue, resolveIonicColor, resolveWebBaseUrl, roleGuard, selectableRequestTypes, storagePaths, superAdminGuard, toArticle };
74062
+ 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, ChatComposerComponent, ChatInputComponent, ChatWindowComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentService, ContentTransformer, ConversationListItemComponent, ConversationService, CookieBannerComponent, CookieSettingsComponent, 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_POST_UPDATE_GRACE_MS, 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, EntityCardComponent, EntityFeedService, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FUN_MODAL_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FieldListComponent, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FontSizeOption, FontSizeSelectorComponent, FontSizeService, FooterComponent, FooterLinksComponent, FormComponent, FormFieldComponent, FormSkeletonComponent, FunHeaderComponent, FunModalComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HapticsService, HasPermissionDirective, HeaderActionsService, HeaderComponent, HintComponent, HorizontalScrollComponent, HrefComponent, HtmlViewerModalComponent, 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, LOGGED_IN_HINT_COOKIE, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LanguageSelectorV2Component, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadMoreComponent, 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, MessageBubbleComponent, 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, OptionCardsComponent, OrgInfoSheetComponent, OrgService, OrgSwitchService, OrganizationViewComponent, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, POST_UPDATE_TS_KEY, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PdfService, PermissionCatalogService, PermissionSelectorComponent, PermissionsModalComponent, PermissionsViewComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PreferencesViewComponent, PresetService, PriceTagComponent, ProcessLinksPipe, ProfileContentComponent, ProfileModalComponent, ProfileSkeletonComponent, ProfileViewComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QrScannerComponent, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, ReactionBarComponent, ReactionsService, RefresherComponent, RequestFirestoreService, RequestFormBuilderService, RequestFormComponent, RequestModalComponent, 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, SectionHeaderComponent, 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, ThreadPanelComponent, TicketCardComponent, TicketCardImageService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TransferOwnershipModalComponent, TranslatePipe, TypedCollection, TypingIndicatorComponent, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_CHAT_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_REACTIONS_CONFIG, VALTECH_SETTINGS_MENU_LINKS, VALTECH_SITE_PATHS, VALTECH_SOCIAL_LINKS, VALTECH_SPLASH_SCREEN, VALTECH_WEB_BASE_URLS, VALTECH_WHATSAPP_CONFIG, VERSION, ValtechErrorService, VerifyViewComponent, 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, formatClockTime, formatDateSeparator, formatRelativeTime, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, groupPermissionsByScope, 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, provideValtechChat, provideValtechContent, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechNotificationPreferencesRoutes, provideValtechNotificationsRoutes, provideValtechOrganizationRoutes, provideValtechPermissionsRoutes, provideValtechPreferencesRoutes, provideValtechPresets, provideValtechProfileRoutes, provideValtechReactions, provideValtechSecurityRoutes, provideValtechSettingsRoutes, provideValtechSite, provideValtechSkeleton, provideValtechWhatsapp, query, rbacGuard, renderPatternSvgInner, replaceSpecialChars, requestSubmitMode, resolveColor, resolveInputDefaultValue, resolveIonicColor, resolveWebBaseUrl, roleGuard, selectableRequestTypes, storagePaths, superAdminGuard, toArticle };
74070
74063
  //# sourceMappingURL=valtech-components.mjs.map