valtech-components 2.0.914 → 2.0.916

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.
@@ -5,7 +5,7 @@ import { IonAvatar, IonCard, IonIcon, IonButton, IonSpinner, IonText, IonModal,
5
5
  import * as i1 from '@angular/common';
6
6
  import { CommonModule, NgStyle, isPlatformBrowser, NgFor, DOCUMENT, NgClass } from '@angular/common';
7
7
  import { addIcons } from 'ionicons';
8
- import { addOutline, addCircleOutline, alertOutline, alertCircleOutline, arrowBackOutline, arrowForwardOutline, arrowDownOutline, settings, settingsOutline, checkmarkCircleOutline, ellipsisHorizontalOutline, notifications, notificationsOutline, openOutline, closeOutline, chatbubblesOutline, shareOutline, heart, heartOutline, home, homeOutline, eyeOffOutline, eyeOutline, scanOutline, chevronDownOutline, chevronForwardOutline, checkmarkOutline, clipboardOutline, copyOutline, filterOutline, locationOutline, calendarOutline, businessOutline, logoTwitter, logoInstagram, logoLinkedin, logoYoutube, logoTiktok, logoFacebook, logoGoogle, createOutline, trashOutline, playOutline, peopleOutline, phonePortraitOutline, refreshOutline, documentTextOutline, lockClosedOutline, informationCircleOutline, logoNpm, removeOutline, optionsOutline, personOutline, shieldCheckmarkOutline, keyOutline, desktopOutline, logOutOutline, cloudDownloadOutline, cloudOutline, gitBranchOutline, layersOutline, serverOutline, warningOutline, add, close, share, create, trash, star, camera, mic, send, downloadOutline, chevronDown, language, globeOutline, checkmark, list, grid, apps, menu, search, person, helpCircle, informationCircle, documentText, mail, calendar, folder, chevronForward, ellipsisHorizontal, chevronBack, playBack, playForward, ellipse, starOutline, starHalf, heartHalf, checkmarkCircle, timeOutline, flag, trendingUp, trendingDown, remove, analytics, people, cash, cart, eye, chatbubbleOutline, thumbsUpOutline, thumbsUp, happyOutline, happy, sadOutline, sad, chevronUp, pin, pencil, callOutline, logoWhatsapp, paperPlaneOutline, mailOutline, chevronDownCircleOutline, closeCircle, alertCircle, logoApple, logoMicrosoft, linkOutline, unlinkOutline, cloudOfflineOutline, documentOutline, attachOutline, cameraOutline, closeCircleOutline, imageOutline, chevronBackOutline, sendOutline, chatbubbleEllipsesOutline, swapVerticalOutline, chevronUpOutline, searchOutline, cartOutline, chatbubble, compass, compassOutline, gridOutline, listOutline, folderOutline, documents, documentsOutline, statsChart, statsChartOutline, menuOutline } from 'ionicons/icons';
8
+ import { addOutline, addCircleOutline, alertOutline, alertCircleOutline, arrowBackOutline, arrowForwardOutline, arrowDownOutline, settings, settingsOutline, checkmarkCircleOutline, ellipsisHorizontalOutline, notifications, notificationsOutline, openOutline, closeOutline, chatbubblesOutline, shareOutline, heart, heartOutline, home, homeOutline, eyeOffOutline, eyeOutline, scanOutline, chevronDownOutline, chevronForwardOutline, checkmarkOutline, clipboardOutline, copyOutline, filterOutline, locationOutline, calendarOutline, businessOutline, logoTwitter, logoInstagram, logoLinkedin, logoYoutube, logoTiktok, logoFacebook, logoGoogle, createOutline, trashOutline, playOutline, peopleOutline, phonePortraitOutline, refreshOutline, documentTextOutline, lockClosedOutline, informationCircleOutline, logoNpm, removeOutline, optionsOutline, personOutline, shieldCheckmarkOutline, keyOutline, desktopOutline, logOutOutline, cloudDownloadOutline, cloudOutline, gitBranchOutline, layersOutline, serverOutline, warningOutline, bulbOutline, lockOpenOutline, diamondOutline, add, close, share, create, trash, star, camera, mic, send, downloadOutline, chevronDown, language, globeOutline, checkmark, list, grid, apps, menu, search, person, helpCircle, informationCircle, documentText, mail, calendar, folder, chevronForward, ellipsisHorizontal, chevronBack, playBack, playForward, ellipse, starOutline, starHalf, heartHalf, checkmarkCircle, timeOutline, flag, trendingUp, trendingDown, remove, analytics, people, cash, cart, eye, chatbubbleOutline, thumbsUpOutline, thumbsUp, happyOutline, happy, sadOutline, sad, chevronUp, pin, pencil, callOutline, logoWhatsapp, paperPlaneOutline, mailOutline, chevronDownCircleOutline, closeCircle, alertCircle, logoApple, logoMicrosoft, linkOutline, unlinkOutline, cloudOfflineOutline, documentOutline, attachOutline, cameraOutline, closeCircleOutline, imageOutline, chevronBackOutline, sendOutline, chatbubbleEllipsesOutline, swapVerticalOutline, chevronUpOutline, searchOutline, cartOutline, chatbubble, compass, compassOutline, gridOutline, listOutline, folderOutline, documents, documentsOutline, statsChart, statsChartOutline, menuOutline } from 'ionicons/icons';
9
9
  import * as i1$1 from '@angular/router';
10
10
  import { RouterLink, Router, NavigationEnd, RouterOutlet, RouterModule } from '@angular/router';
11
11
  import { Browser } from '@capacitor/browser';
@@ -54,7 +54,7 @@ import 'prismjs/components/prism-json';
54
54
  * Current version of valtech-components.
55
55
  * This is automatically updated during the publish process.
56
56
  */
57
- const VERSION = '2.0.914';
57
+ const VERSION = '2.0.916';
58
58
 
59
59
  /**
60
60
  * Servicio para gestionar presets de componentes.
@@ -368,6 +368,9 @@ class IconService {
368
368
  layersOutline,
369
369
  serverOutline,
370
370
  warningOutline,
371
+ bulbOutline,
372
+ lockOpenOutline,
373
+ diamondOutline,
371
374
  });
372
375
  }
373
376
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IconService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -4371,6 +4374,26 @@ const VALTECH_DEFAULT_CONTENT = {
4371
4374
  passwordChangedSuccess: '¡Contraseña actualizada!',
4372
4375
  errorCurrentPasswordWrong: 'La contraseña actual es incorrecta',
4373
4376
  errorSamePassword: 'La nueva contraseña debe ser diferente a la actual',
4377
+ // Change email (3 pasos)
4378
+ changeEmailTitle: 'Cambiar email',
4379
+ changeEmailStep1Description: 'Ingresa tu contraseña actual y el nuevo email.',
4380
+ changeEmailNewEmail: 'Nuevo email',
4381
+ changeEmailNewEmailInvalid: 'Ingresa un email válido',
4382
+ changeEmailInitiate: 'Continuar',
4383
+ changeEmailStep2Title: 'Verifica tu identidad',
4384
+ changeEmailStep2Description: 'Ingresa el código de 6 dígitos que enviamos a tu email actual.',
4385
+ changeEmailCodeCurrent: 'Código de verificación',
4386
+ changeEmailConfirm1: 'Confirmar',
4387
+ changeEmailStep3Title: 'Confirma el nuevo email',
4388
+ changeEmailStep3Description: 'Ingresa el código de 6 dígitos que enviamos a {email}.',
4389
+ changeEmailCodeNew: 'Código del nuevo email',
4390
+ changeEmailConfirm2: 'Cambiar email',
4391
+ changeEmailSuccess: '¡Email actualizado!',
4392
+ changeEmailNoPasswordTitle: 'Contraseña requerida',
4393
+ changeEmailNoPasswordHint: 'Para cambiar el email debes tener una contraseña. Primero configúrala desde "Cambiar contraseña".',
4394
+ errorEmailSameAsCurrent: 'El nuevo email es igual al actual',
4395
+ errorEmailAlreadyInUse: 'Este email ya está en uso',
4396
+ errorEmailChangePendingExpired: 'El flujo expiró. Comienza de nuevo.',
4374
4397
  // Set password (cuenta OAuth-only)
4375
4398
  setPasswordTitle: 'Crear contraseña',
4376
4399
  setPasswordDescription: 'Tu cuenta usa inicio de sesión social. Crea una contraseña para entrar también con tu correo.',
@@ -4534,6 +4557,26 @@ const VALTECH_DEFAULT_CONTENT = {
4534
4557
  passwordChangedSuccess: 'Password updated!',
4535
4558
  errorCurrentPasswordWrong: 'Current password is incorrect',
4536
4559
  errorSamePassword: 'New password must be different from the current one',
4560
+ // Change email (3 steps)
4561
+ changeEmailTitle: 'Change email',
4562
+ changeEmailStep1Description: 'Enter your current password and the new email.',
4563
+ changeEmailNewEmail: 'New email',
4564
+ changeEmailNewEmailInvalid: 'Enter a valid email',
4565
+ changeEmailInitiate: 'Continue',
4566
+ changeEmailStep2Title: 'Verify your identity',
4567
+ changeEmailStep2Description: 'Enter the 6-digit code we sent to your current email.',
4568
+ changeEmailCodeCurrent: 'Verification code',
4569
+ changeEmailConfirm1: 'Confirm',
4570
+ changeEmailStep3Title: 'Confirm new email',
4571
+ changeEmailStep3Description: 'Enter the 6-digit code we sent to {email}.',
4572
+ changeEmailCodeNew: 'New email code',
4573
+ changeEmailConfirm2: 'Change email',
4574
+ changeEmailSuccess: 'Email updated!',
4575
+ changeEmailNoPasswordTitle: 'Password required',
4576
+ changeEmailNoPasswordHint: 'You need a password to change your email. Set one first via "Change password".',
4577
+ errorEmailSameAsCurrent: 'The new email is the same as the current one',
4578
+ errorEmailAlreadyInUse: 'This email is already in use',
4579
+ errorEmailChangePendingExpired: 'The flow expired. Start again.',
4537
4580
  // Set password (OAuth-only account)
4538
4581
  setPasswordTitle: 'Create password',
4539
4582
  setPasswordDescription: 'Your account uses social sign-in. Create a password to also sign in with your email.',
@@ -25810,8 +25853,8 @@ class AuthService {
25810
25853
  /** Error actual */
25811
25854
  this.error = this.stateService.error;
25812
25855
  if (!this.config && isDevMode()) {
25813
- console.warn("[valtech-components] AuthService: provideValtechAuth() no está en main.ts. " +
25814
- "Login, registro y sesión no funcionarán.");
25856
+ console.warn('[valtech-components] AuthService: provideValtechAuth() no está en main.ts. ' +
25857
+ 'Login, registro y sesión no funcionarán.');
25815
25858
  }
25816
25859
  }
25817
25860
  // =============================================
@@ -26386,6 +26429,27 @@ class AuthService {
26386
26429
  .pipe(catchError(error => this.handleAuthError(error)));
26387
26430
  }
26388
26431
  // =============================================
26432
+ // CAMBIO DE EMAIL — flujo de 3 pasos
26433
+ // =============================================
26434
+ initiateEmailChange(currentPassword, newEmail) {
26435
+ const request = { currentPassword, newEmail };
26436
+ return this.http
26437
+ .post(`${this.baseUrl}/email/initiate`, request)
26438
+ .pipe(catchError(error => this.handleAuthError(error)));
26439
+ }
26440
+ confirmEmailChangeStep1(code) {
26441
+ const request = { code };
26442
+ return this.http
26443
+ .post(`${this.baseUrl}/email/confirm/1`, request)
26444
+ .pipe(catchError(error => this.handleAuthError(error)));
26445
+ }
26446
+ confirmEmailChangeStep2(code) {
26447
+ const request = { code };
26448
+ return this.http
26449
+ .post(`${this.baseUrl}/email/confirm/2`, request)
26450
+ .pipe(catchError(error => this.handleAuthError(error)));
26451
+ }
26452
+ // =============================================
26389
26453
  // ELIMINACIÓN DE CUENTA
26390
26454
  // =============================================
26391
26455
  /**
@@ -31283,6 +31347,287 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
31283
31347
  type: Output
31284
31348
  }] } });
31285
31349
 
31350
+ /**
31351
+ * `val-change-email-modal` — modal de cambio de email en 3 pasos.
31352
+ *
31353
+ * Paso 1: contraseña actual + nuevo email → `initiateEmailChange()`
31354
+ * Paso 2: código enviado al email actual → `confirmEmailChangeStep1()`
31355
+ * Paso 3: código enviado al nuevo email → `confirmEmailChangeStep2()`
31356
+ *
31357
+ * Si el user no tiene contraseña (cuenta OAuth-only), muestra aviso.
31358
+ *
31359
+ * @example
31360
+ * ```html
31361
+ * <val-change-email-modal
31362
+ * [isOpen]="isEmailModalOpen()"
31363
+ * (changed)="isEmailModalOpen.set(false)"
31364
+ * (dismissed)="isEmailModalOpen.set(false)"
31365
+ * />
31366
+ * ```
31367
+ */
31368
+ class ChangeEmailModalComponent {
31369
+ constructor() {
31370
+ this._isOpen = false;
31371
+ /** Emite al completar el cambio de email con éxito. El padre cierra el modal. */
31372
+ this.changed = new EventEmitter();
31373
+ /** Emite cuando el user cierra el modal. */
31374
+ this.dismissed = new EventEmitter();
31375
+ this.auth = inject(AuthService);
31376
+ this.toast = inject(ToastService);
31377
+ this.i18n = inject(I18nService);
31378
+ this.i18nHelper = inject(InputI18nHelper);
31379
+ this._step = signal('loading');
31380
+ this._pendingEmail = signal('');
31381
+ this._formState = signal(ComponentStates.ENABLED);
31382
+ this.noPasswordTitle = computed(() => this.t('changeEmailNoPasswordTitle'));
31383
+ this.noPasswordHint = computed(() => this.t('changeEmailNoPasswordHint'));
31384
+ this.step1Props = computed(() => this.i18nHelper.resolveForm({
31385
+ nameKey: 'changeEmailTitle',
31386
+ i18nNamespace: '_auth',
31387
+ sections: [
31388
+ {
31389
+ name: this.t('changeEmailStep1Description'),
31390
+ order: 0,
31391
+ fields: [
31392
+ {
31393
+ type: InputType.PASSWORD,
31394
+ name: 'currentPassword',
31395
+ token: 'change-email-password',
31396
+ labelKey: 'currentPassword',
31397
+ hint: '',
31398
+ placeholderKey: 'passwordPlaceholder',
31399
+ errorKeys: { required: 'currentPasswordRequired' },
31400
+ validators: [Validators.required],
31401
+ order: 0,
31402
+ state: ComponentStates.ENABLED,
31403
+ },
31404
+ {
31405
+ type: InputType.EMAIL,
31406
+ name: 'newEmail',
31407
+ token: 'change-email-new',
31408
+ labelKey: 'changeEmailNewEmail',
31409
+ hint: '',
31410
+ placeholderKey: 'emailPlaceholder',
31411
+ errorKeys: {
31412
+ required: 'emailRequired',
31413
+ email: 'changeEmailNewEmailInvalid',
31414
+ },
31415
+ validators: [Validators.required, Validators.email],
31416
+ order: 1,
31417
+ state: ComponentStates.ENABLED,
31418
+ },
31419
+ ],
31420
+ },
31421
+ ],
31422
+ actions: {
31423
+ ...SolidDefaultBlock('', 'submit'),
31424
+ token: 'change-email-initiate',
31425
+ textKey: 'changeEmailInitiate',
31426
+ },
31427
+ state: this._formState(),
31428
+ }));
31429
+ this.step2Props = computed(() => this.i18nHelper.resolveForm({
31430
+ nameKey: 'changeEmailStep2Title',
31431
+ i18nNamespace: '_auth',
31432
+ sections: [
31433
+ {
31434
+ name: this.t('changeEmailStep2Description'),
31435
+ order: 0,
31436
+ fields: [
31437
+ {
31438
+ type: InputType.PIN_CODE,
31439
+ name: 'code',
31440
+ token: 'change-email-code-current',
31441
+ labelKey: 'changeEmailCodeCurrent',
31442
+ hint: '',
31443
+ placeholderKey: '',
31444
+ errorKeys: { required: 'mfaCodeInvalid' },
31445
+ validators: [Validators.required],
31446
+ order: 0,
31447
+ state: ComponentStates.ENABLED,
31448
+ length: 6,
31449
+ allowNumbersOnly: true,
31450
+ autoFocus: true,
31451
+ },
31452
+ ],
31453
+ },
31454
+ ],
31455
+ actions: {
31456
+ ...SolidDefaultBlock('', 'submit'),
31457
+ token: 'change-email-confirm-1',
31458
+ textKey: 'changeEmailConfirm1',
31459
+ },
31460
+ state: this._formState(),
31461
+ }));
31462
+ this.step3Props = computed(() => {
31463
+ const email = this._pendingEmail();
31464
+ const desc = this.t('changeEmailStep3Description').replace('{email}', email);
31465
+ return this.i18nHelper.resolveForm({
31466
+ nameKey: 'changeEmailStep3Title',
31467
+ i18nNamespace: '_auth',
31468
+ sections: [
31469
+ {
31470
+ name: desc,
31471
+ order: 0,
31472
+ fields: [
31473
+ {
31474
+ type: InputType.PIN_CODE,
31475
+ name: 'code',
31476
+ token: 'change-email-code-new',
31477
+ labelKey: 'changeEmailCodeNew',
31478
+ hint: '',
31479
+ placeholderKey: '',
31480
+ errorKeys: { required: 'mfaCodeInvalid' },
31481
+ validators: [Validators.required],
31482
+ order: 0,
31483
+ state: ComponentStates.ENABLED,
31484
+ length: 6,
31485
+ allowNumbersOnly: true,
31486
+ autoFocus: true,
31487
+ },
31488
+ ],
31489
+ },
31490
+ ],
31491
+ actions: {
31492
+ ...SolidDefaultBlock('', 'submit'),
31493
+ token: 'change-email-confirm-2',
31494
+ textKey: 'changeEmailConfirm2',
31495
+ },
31496
+ state: this._formState(),
31497
+ });
31498
+ });
31499
+ }
31500
+ set isOpen(value) {
31501
+ const opening = value && !this._isOpen;
31502
+ this._isOpen = value;
31503
+ if (opening) {
31504
+ this.resolveMode();
31505
+ }
31506
+ }
31507
+ get isOpen() {
31508
+ return this._isOpen;
31509
+ }
31510
+ t(key) {
31511
+ return this.i18n.t(key, '_auth');
31512
+ }
31513
+ close() {
31514
+ this.dismissed.emit();
31515
+ }
31516
+ resolveMode() {
31517
+ this._step.set('loading');
31518
+ this._formState.set(ComponentStates.ENABLED);
31519
+ this._pendingEmail.set('');
31520
+ this.auth.checkHasPassword().subscribe({
31521
+ next: res => this._step.set(res.hasPassword ? 'step1' : 'no-password'),
31522
+ error: () => this._step.set('step1'),
31523
+ });
31524
+ }
31525
+ handleStep1(event) {
31526
+ const currentPassword = event.fields['currentPassword'];
31527
+ const newEmail = event.fields['newEmail'];
31528
+ if (!currentPassword || !newEmail) {
31529
+ this.showToast(this.t('completeAllFields'));
31530
+ return;
31531
+ }
31532
+ this._formState.set(ComponentStates.WORKING);
31533
+ this.auth.initiateEmailChange(currentPassword, newEmail).subscribe({
31534
+ next: res => {
31535
+ this._formState.set(ComponentStates.ENABLED);
31536
+ this._pendingEmail.set(res.pendingEmail);
31537
+ this._step.set('step2');
31538
+ },
31539
+ error: err => {
31540
+ this._formState.set(ComponentStates.ENABLED);
31541
+ this.showToast(this.resolveError(err));
31542
+ },
31543
+ });
31544
+ }
31545
+ handleStep2(event) {
31546
+ const code = event.fields['code'];
31547
+ if (!code) {
31548
+ this.showToast(this.t('mfaCodeInvalid'));
31549
+ return;
31550
+ }
31551
+ this._formState.set(ComponentStates.WORKING);
31552
+ this.auth.confirmEmailChangeStep1(code).subscribe({
31553
+ next: () => {
31554
+ this._formState.set(ComponentStates.ENABLED);
31555
+ this._step.set('step3');
31556
+ },
31557
+ error: err => {
31558
+ this._formState.set(ComponentStates.ENABLED);
31559
+ this.showToast(this.resolveError(err));
31560
+ },
31561
+ });
31562
+ }
31563
+ handleStep3(event) {
31564
+ const code = event.fields['code'];
31565
+ if (!code) {
31566
+ this.showToast(this.t('mfaCodeInvalid'));
31567
+ return;
31568
+ }
31569
+ this._formState.set(ComponentStates.WORKING);
31570
+ this.auth.confirmEmailChangeStep2(code).subscribe({
31571
+ next: () => {
31572
+ this._formState.set(ComponentStates.ENABLED);
31573
+ this.showToast(this.t('changeEmailSuccess'));
31574
+ this.changed.emit();
31575
+ },
31576
+ error: err => {
31577
+ this._formState.set(ComponentStates.ENABLED);
31578
+ this.showToast(this.resolveError(err));
31579
+ },
31580
+ });
31581
+ }
31582
+ resolveError(err) {
31583
+ const code = err?.code;
31584
+ switch (code) {
31585
+ case 'AUTHV2_INVALID_CURRENT_PASSWORD':
31586
+ return this.t('errorCurrentPasswordWrong');
31587
+ case 'AUTHV2_EMAIL_SAME_AS_CURRENT':
31588
+ return this.t('errorEmailSameAsCurrent');
31589
+ case 'AUTHV2_EMAIL_EXISTS':
31590
+ return this.t('errorEmailAlreadyInUse');
31591
+ case 'AUTHV2_EMAIL_CHANGE_PENDING_EXPIRED':
31592
+ return this.t('errorEmailChangePendingExpired');
31593
+ case 'AUTHV2_INVALID_CODE':
31594
+ return this.t('errorInvalidCode');
31595
+ case 'AUTHV2_EXPIRED_CODE':
31596
+ return this.t('errorExpiredCode');
31597
+ case 'AUTHV2_TOO_MANY_ATTEMPTS':
31598
+ return this.t('errorTooManyAttempts');
31599
+ default:
31600
+ return this.t('errorGeneric');
31601
+ }
31602
+ }
31603
+ showToast(message) {
31604
+ this.toast.show({ message, duration: 3500 });
31605
+ }
31606
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChangeEmailModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31607
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChangeEmailModalComponent, isStandalone: true, selector: "val-change-email-modal", inputs: { isOpen: "isOpen" }, outputs: { changed: "changed", dismissed: "dismissed" }, ngImport: i0, template: "<ion-modal [isOpen]=\"isOpen\" (didDismiss)=\"close()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"close()\">\n <strong>{{ t('close') }}</strong>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (_step() === 'loading') {\n <div class=\"modal-loading\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n </div>\n } @else if (_step() === 'no-password') {\n <val-display [props]=\"{ content: noPasswordTitle(), size: 'small', color: 'dark' }\" />\n <val-text [props]=\"{ content: noPasswordHint(), size: 'medium', color: 'medium', bold: false }\" />\n } @else if (_step() === 'step1') {\n <val-form [props]=\"step1Props()\" (onSubmit)=\"handleStep1($event)\" />\n } @else if (_step() === 'step2') {\n <val-form [props]=\"step2Props()\" (onSubmit)=\"handleStep2($event)\" />\n } @else if (_step() === 'step3') {\n <val-form [props]=\"step3Props()\" (onSubmit)=\"handleStep3($event)\" />\n }\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n", styles: [".modal-form-section{display:flex;flex-direction:column;gap:16px;max-width:420px;margin:0 auto;padding-top:8px}.modal-loading{display:flex;justify-content:center;padding:40px 0}\n"], 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: IonModal, selector: "ion-modal" }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { 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"] }] }); }
31608
+ }
31609
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChangeEmailModalComponent, decorators: [{
31610
+ type: Component,
31611
+ args: [{ selector: 'val-change-email-modal', standalone: true, imports: [
31612
+ IonButton,
31613
+ IonButtons,
31614
+ IonContent,
31615
+ IonHeader,
31616
+ IonModal,
31617
+ IonSpinner,
31618
+ IonToolbar,
31619
+ FormComponent,
31620
+ DisplayComponent,
31621
+ TextComponent,
31622
+ ], template: "<ion-modal [isOpen]=\"isOpen\" (didDismiss)=\"close()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"close()\">\n <strong>{{ t('close') }}</strong>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (_step() === 'loading') {\n <div class=\"modal-loading\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n </div>\n } @else if (_step() === 'no-password') {\n <val-display [props]=\"{ content: noPasswordTitle(), size: 'small', color: 'dark' }\" />\n <val-text [props]=\"{ content: noPasswordHint(), size: 'medium', color: 'medium', bold: false }\" />\n } @else if (_step() === 'step1') {\n <val-form [props]=\"step1Props()\" (onSubmit)=\"handleStep1($event)\" />\n } @else if (_step() === 'step2') {\n <val-form [props]=\"step2Props()\" (onSubmit)=\"handleStep2($event)\" />\n } @else if (_step() === 'step3') {\n <val-form [props]=\"step3Props()\" (onSubmit)=\"handleStep3($event)\" />\n }\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n", styles: [".modal-form-section{display:flex;flex-direction:column;gap:16px;max-width:420px;margin:0 auto;padding-top:8px}.modal-loading{display:flex;justify-content:center;padding:40px 0}\n"] }]
31623
+ }], propDecorators: { isOpen: [{
31624
+ type: Input
31625
+ }], changed: [{
31626
+ type: Output
31627
+ }], dismissed: [{
31628
+ type: Output
31629
+ }] } });
31630
+
31286
31631
  /**
31287
31632
  * `val-cookie-banner` — bottom/top fixed banner asking the user to choose
31288
31633
  * a cookie consent option. Presentational only: emits events on each
@@ -49256,5 +49601,5 @@ function buildFooterLinks(links, t, resolver) {
49256
49601
  * Generated bundle index. Do not edit.
49257
49602
  */
49258
49603
 
49259
- export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, ARTICLE_SPACING, AVATAR_UPLOAD_DEFAULTS, AccordionComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimatedTerminalComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BaseDefault, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CORNER_KEYS, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangePasswordModalComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentTransformer, CookieBannerComponent, CountdownComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_CANCEL_BUTTON, DEFAULT_CHECK_INTERVAL_MS, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_DEBUG_CONSOLE_CONFIG, DEFAULT_DONATION_CONFIG, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_SPLASH_SCREEN_CONFIG, DataTableComponent, DateInputComponent, DateRangeInputComponent, DebugConsoleComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EmailInputComponent, EmptyStateComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FooterComponent, FooterLinksComponent, FormComponent, FormFooterComponent, FormSkeletonComponent, FunHeaderComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginComponent, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MenuComponent, MessagingService, MetaService, MfaModalComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationsService, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OrgService, OrgSwitchService, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PresetService, PriceTagComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProfileSkeletonComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QueryBuilder, QuoteBoxComponent, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RightsFooterComponent, RotatingTextComponent, SHAPE_KEYS, SKELETON_LAYOUT_DEFAULT_ROWS, SKELETON_PRESETS, SOLID_KEYS, STROKE_KEYS, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SegmentControlComponent, SelectSearchComponent, SessionService, ShareButtonsComponent, SimpleComponent, SkeletonComponent, SkeletonLayoutComponent, SkeletonService, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, SplashScreenService, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TranslatePipe, TypedCollection, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_DEBUG_CONSOLE, VALTECH_DEFAULT_CONTENT, VALTECH_DONATION_CONFIG, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_NETWORK_ERROR_KEY, VALTECH_SOCIAL_LINKS, VALTECH_SPLASH_SCREEN, VERSION, ValtechErrorService, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, blogPost, buildFooterLinks, buildPath, collections, connectPageRefresh, createErrorStateProps, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createRefreshableStream, createTitleProps, docs, errorLoggingInterceptor, extractPathParams, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, guestGuard, hasEmulators, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, provideSplashScreen, provideValtechAds, provideValtechAppConfig, provideValtechAppVersion, provideValtechAuth, provideValtechAuthInterceptor, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechPresets, provideValtechSkeleton, query, renderPatternSvgInner, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard, toArticle };
49604
+ export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, ARTICLE_SPACING, AVATAR_UPLOAD_DEFAULTS, AccordionComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimatedTerminalComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BaseDefault, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CORNER_KEYS, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentTransformer, CookieBannerComponent, CountdownComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_CANCEL_BUTTON, DEFAULT_CHECK_INTERVAL_MS, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_DEBUG_CONSOLE_CONFIG, DEFAULT_DONATION_CONFIG, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_SPLASH_SCREEN_CONFIG, DataTableComponent, DateInputComponent, DateRangeInputComponent, DebugConsoleComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EmailInputComponent, EmptyStateComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FooterComponent, FooterLinksComponent, FormComponent, FormFooterComponent, FormSkeletonComponent, FunHeaderComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginComponent, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MenuComponent, MessagingService, MetaService, MfaModalComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationsService, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OrgService, OrgSwitchService, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PresetService, PriceTagComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProfileSkeletonComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QueryBuilder, QuoteBoxComponent, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RightsFooterComponent, RotatingTextComponent, SHAPE_KEYS, SKELETON_LAYOUT_DEFAULT_ROWS, SKELETON_PRESETS, SOLID_KEYS, STROKE_KEYS, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SegmentControlComponent, SelectSearchComponent, SessionService, ShareButtonsComponent, SimpleComponent, SkeletonComponent, SkeletonLayoutComponent, SkeletonService, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, SplashScreenService, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TranslatePipe, TypedCollection, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_DEBUG_CONSOLE, VALTECH_DEFAULT_CONTENT, VALTECH_DONATION_CONFIG, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_NETWORK_ERROR_KEY, VALTECH_SOCIAL_LINKS, VALTECH_SPLASH_SCREEN, VERSION, ValtechErrorService, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, blogPost, buildFooterLinks, buildPath, collections, connectPageRefresh, createErrorStateProps, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createRefreshableStream, createTitleProps, docs, errorLoggingInterceptor, extractPathParams, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, guestGuard, hasEmulators, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, provideSplashScreen, provideValtechAds, provideValtechAppConfig, provideValtechAppVersion, provideValtechAuth, provideValtechAuthInterceptor, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechPresets, provideValtechSkeleton, query, renderPatternSvgInner, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard, toArticle };
49260
49605
  //# sourceMappingURL=valtech-components.mjs.map