valtech-components 2.0.780 → 2.0.782

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.
@@ -52,7 +52,7 @@ import 'prismjs/components/prism-json';
52
52
  * Current version of valtech-components.
53
53
  * This is automatically updated during the publish process.
54
54
  */
55
- const VERSION = '2.0.780';
55
+ const VERSION = '2.0.782';
56
56
 
57
57
  /**
58
58
  * Servicio para gestionar presets de componentes.
@@ -6290,6 +6290,8 @@ class UserAvatarComponent {
6290
6290
  constructor() {
6291
6291
  this.props_ = signal({});
6292
6292
  this.imageFailed = signal(false);
6293
+ /** Indica si el `<img>` actual disparó su evento `load`. Conduce el fade-in. */
6294
+ this.imageLoaded = signal(false);
6293
6295
  this.onClick = new EventEmitter();
6294
6296
  this.resolvedProps = computed(() => this.props_());
6295
6297
  /** Resuelve los campos del user (user prop > campos sueltos). */
@@ -6301,9 +6303,16 @@ class UserAvatarComponent {
6301
6303
  avatarUrl: p.user?.avatarUrl?.trim() || p.avatarUrl?.trim() || '',
6302
6304
  };
6303
6305
  });
6304
- /** URL de imagen — empty si no hay o si la carga falló. */
6305
- this.imageUrl = computed(() => this.resolvedUser().avatarUrl);
6306
- this.showImage = computed(() => !!this.imageUrl() && !this.imageFailed());
6306
+ /**
6307
+ * URL de imagen. Empty si la última carga falló — eso evita re-intentar
6308
+ * con la misma URL cuando el browser ya marcó error. El placeholder
6309
+ * (iniciales/icono) sigue visible debajo.
6310
+ */
6311
+ this.imageUrl = computed(() => {
6312
+ if (this.imageFailed())
6313
+ return '';
6314
+ return this.resolvedUser().avatarUrl;
6315
+ });
6307
6316
  /** Iniciales — 1-2 chars derivados de name (preferred) o email prefix. */
6308
6317
  this.initials = computed(() => {
6309
6318
  const { name, email } = this.resolvedUser();
@@ -6342,8 +6351,16 @@ class UserAvatarComponent {
6342
6351
  });
6343
6352
  }
6344
6353
  set props(value) {
6345
- this.props_.set(value ?? {});
6346
- this.imageFailed.set(false);
6354
+ const prev = this.props_();
6355
+ const next = value ?? {};
6356
+ this.props_.set(next);
6357
+ // Reset estado de carga si cambia la URL — re-disparar fade-in.
6358
+ const prevUrl = prev?.user?.avatarUrl || prev?.avatarUrl || '';
6359
+ const nextUrl = next.user?.avatarUrl || next.avatarUrl || '';
6360
+ if (prevUrl !== nextUrl) {
6361
+ this.imageFailed.set(false);
6362
+ this.imageLoaded.set(false);
6363
+ }
6347
6364
  }
6348
6365
  /** Subscribers — usado para condicionar cursor/aria. */
6349
6366
  get hasClick() {
@@ -6351,9 +6368,11 @@ class UserAvatarComponent {
6351
6368
  }
6352
6369
  onImageError() {
6353
6370
  this.imageFailed.set(true);
6371
+ this.imageLoaded.set(false);
6354
6372
  }
6355
6373
  onImageLoad() {
6356
6374
  this.imageFailed.set(false);
6375
+ this.imageLoaded.set(true);
6357
6376
  }
6358
6377
  /**
6359
6378
  * Hash determinista string → HSL color del rango Valtech (purples/blues).
@@ -6379,20 +6398,34 @@ class UserAvatarComponent {
6379
6398
  [class.grayscale]="resolvedProps().grayscale"
6380
6399
  [class.has-click]="hasClick"
6381
6400
  [class]="shapeClass() + ' ' + sizeClass() + ' ' + (resolvedProps().cssClass || '')"
6382
- [style.background]="!showImage() ? bgColor() : 'transparent'"
6401
+ [style.background]="bgColor()"
6383
6402
  [style.color]="resolvedProps().foreground || '#fff'"
6384
6403
  [attr.aria-label]="ariaLabel()"
6385
6404
  (click)="onClick.emit()"
6386
6405
  >
6387
- @if (showImage()) {
6388
- <img class="val-user-avatar__img" [src]="imageUrl()" alt="" (error)="onImageError()" (load)="onImageLoad()" />
6389
- } @else if (initials()) {
6406
+ <!-- Placeholder layer (siempre presente) — iniciales o icono. La imagen
6407
+ se monta encima y hace fade-in al cargar; si falla queda invisible
6408
+ y el placeholder permanece visible sin parpadeo. -->
6409
+ @if (initials()) {
6390
6410
  <span class="val-user-avatar__initials">{{ initials() }}</span>
6391
6411
  } @else {
6392
6412
  <ion-icon name="person-outline" class="val-user-avatar__icon" aria-hidden="true" />
6393
6413
  }
6414
+
6415
+ @if (imageUrl()) {
6416
+ <img
6417
+ class="val-user-avatar__img"
6418
+ [class.loaded]="imageLoaded()"
6419
+ [src]="imageUrl()"
6420
+ alt=""
6421
+ loading="lazy"
6422
+ decoding="async"
6423
+ (error)="onImageError()"
6424
+ (load)="onImageLoad()"
6425
+ />
6426
+ }
6394
6427
  </button>
6395
- `, isInline: true, styles: [":host{display:inline-flex}.val-user-avatar{position:relative;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;padding:0;margin:0;border:none;background:var(--ion-color-medium, #92949c);color:#fff;font-weight:600;font-family:inherit;line-height:1;-webkit-user-select:none;user-select:none;cursor:default;transition:transform .15s ease,box-shadow .15s ease}.val-user-avatar.has-click{cursor:pointer}.val-user-avatar.has-click:hover{transform:scale(1.04)}.val-user-avatar.has-click:active{transform:scale(.96)}.val-user-avatar.circle{border-radius:50%}.val-user-avatar.square{border-radius:8px}.val-user-avatar.xsmall{width:24px;height:24px;font-size:.625rem}.val-user-avatar.small{width:32px;height:32px;font-size:.75rem}.val-user-avatar.medium{width:48px;height:48px;font-size:1rem}.val-user-avatar.large{width:72px;height:72px;font-size:1.5rem}.val-user-avatar.xlarge{width:96px;height:96px;font-size:2rem}.val-user-avatar.bordered{box-shadow:0 0 0 2px var(--ion-background-color, #fff)}.val-user-avatar.grayscale{filter:grayscale(100%)}.val-user-avatar__img{width:100%;height:100%;object-fit:cover;display:block}.val-user-avatar__initials{text-transform:uppercase;letter-spacing:.02em}.val-user-avatar__icon{font-size:60%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
6428
+ `, isInline: true, styles: [":host{display:inline-flex}.val-user-avatar{position:relative;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;padding:0;margin:0;border:none;background:var(--ion-color-medium, #92949c);color:#fff;font-weight:600;font-family:inherit;line-height:1;-webkit-user-select:none;user-select:none;cursor:default;transition:transform .15s ease,box-shadow .15s ease}.val-user-avatar.has-click{cursor:pointer}.val-user-avatar.has-click:hover{transform:scale(1.04)}.val-user-avatar.has-click:active{transform:scale(.96)}.val-user-avatar.circle{border-radius:50%}.val-user-avatar.square{border-radius:8px}.val-user-avatar.xsmall{width:24px;height:24px;font-size:.625rem}.val-user-avatar.small{width:32px;height:32px;font-size:.75rem}.val-user-avatar.medium{width:48px;height:48px;font-size:1rem}.val-user-avatar.large{width:72px;height:72px;font-size:1.5rem}.val-user-avatar.xlarge{width:96px;height:96px;font-size:2rem}.val-user-avatar.bordered{box-shadow:0 0 0 2px var(--ion-background-color, #fff)}.val-user-avatar.grayscale{filter:grayscale(100%)}.val-user-avatar__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;opacity:0;transition:opacity .35s ease-in-out;pointer-events:none}.val-user-avatar__img.loaded{opacity:1}.val-user-avatar__initials{text-transform:uppercase;letter-spacing:.02em;position:relative;z-index:0}.val-user-avatar__icon{font-size:60%;position:relative;z-index:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
6396
6429
  }
6397
6430
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UserAvatarComponent, decorators: [{
6398
6431
  type: Component,
@@ -6404,20 +6437,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
6404
6437
  [class.grayscale]="resolvedProps().grayscale"
6405
6438
  [class.has-click]="hasClick"
6406
6439
  [class]="shapeClass() + ' ' + sizeClass() + ' ' + (resolvedProps().cssClass || '')"
6407
- [style.background]="!showImage() ? bgColor() : 'transparent'"
6440
+ [style.background]="bgColor()"
6408
6441
  [style.color]="resolvedProps().foreground || '#fff'"
6409
6442
  [attr.aria-label]="ariaLabel()"
6410
6443
  (click)="onClick.emit()"
6411
6444
  >
6412
- @if (showImage()) {
6413
- <img class="val-user-avatar__img" [src]="imageUrl()" alt="" (error)="onImageError()" (load)="onImageLoad()" />
6414
- } @else if (initials()) {
6445
+ <!-- Placeholder layer (siempre presente) — iniciales o icono. La imagen
6446
+ se monta encima y hace fade-in al cargar; si falla queda invisible
6447
+ y el placeholder permanece visible sin parpadeo. -->
6448
+ @if (initials()) {
6415
6449
  <span class="val-user-avatar__initials">{{ initials() }}</span>
6416
6450
  } @else {
6417
6451
  <ion-icon name="person-outline" class="val-user-avatar__icon" aria-hidden="true" />
6418
6452
  }
6453
+
6454
+ @if (imageUrl()) {
6455
+ <img
6456
+ class="val-user-avatar__img"
6457
+ [class.loaded]="imageLoaded()"
6458
+ [src]="imageUrl()"
6459
+ alt=""
6460
+ loading="lazy"
6461
+ decoding="async"
6462
+ (error)="onImageError()"
6463
+ (load)="onImageLoad()"
6464
+ />
6465
+ }
6419
6466
  </button>
6420
- `, styles: [":host{display:inline-flex}.val-user-avatar{position:relative;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;padding:0;margin:0;border:none;background:var(--ion-color-medium, #92949c);color:#fff;font-weight:600;font-family:inherit;line-height:1;-webkit-user-select:none;user-select:none;cursor:default;transition:transform .15s ease,box-shadow .15s ease}.val-user-avatar.has-click{cursor:pointer}.val-user-avatar.has-click:hover{transform:scale(1.04)}.val-user-avatar.has-click:active{transform:scale(.96)}.val-user-avatar.circle{border-radius:50%}.val-user-avatar.square{border-radius:8px}.val-user-avatar.xsmall{width:24px;height:24px;font-size:.625rem}.val-user-avatar.small{width:32px;height:32px;font-size:.75rem}.val-user-avatar.medium{width:48px;height:48px;font-size:1rem}.val-user-avatar.large{width:72px;height:72px;font-size:1.5rem}.val-user-avatar.xlarge{width:96px;height:96px;font-size:2rem}.val-user-avatar.bordered{box-shadow:0 0 0 2px var(--ion-background-color, #fff)}.val-user-avatar.grayscale{filter:grayscale(100%)}.val-user-avatar__img{width:100%;height:100%;object-fit:cover;display:block}.val-user-avatar__initials{text-transform:uppercase;letter-spacing:.02em}.val-user-avatar__icon{font-size:60%}\n"] }]
6467
+ `, styles: [":host{display:inline-flex}.val-user-avatar{position:relative;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;padding:0;margin:0;border:none;background:var(--ion-color-medium, #92949c);color:#fff;font-weight:600;font-family:inherit;line-height:1;-webkit-user-select:none;user-select:none;cursor:default;transition:transform .15s ease,box-shadow .15s ease}.val-user-avatar.has-click{cursor:pointer}.val-user-avatar.has-click:hover{transform:scale(1.04)}.val-user-avatar.has-click:active{transform:scale(.96)}.val-user-avatar.circle{border-radius:50%}.val-user-avatar.square{border-radius:8px}.val-user-avatar.xsmall{width:24px;height:24px;font-size:.625rem}.val-user-avatar.small{width:32px;height:32px;font-size:.75rem}.val-user-avatar.medium{width:48px;height:48px;font-size:1rem}.val-user-avatar.large{width:72px;height:72px;font-size:1.5rem}.val-user-avatar.xlarge{width:96px;height:96px;font-size:2rem}.val-user-avatar.bordered{box-shadow:0 0 0 2px var(--ion-background-color, #fff)}.val-user-avatar.grayscale{filter:grayscale(100%)}.val-user-avatar__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;opacity:0;transition:opacity .35s ease-in-out;pointer-events:none}.val-user-avatar__img.loaded{opacity:1}.val-user-avatar__initials{text-transform:uppercase;letter-spacing:.02em;position:relative;z-index:0}.val-user-avatar__icon{font-size:60%;position:relative;z-index:0}\n"] }]
6421
6468
  }], propDecorators: { props: [{
6422
6469
  type: Input
6423
6470
  }], onClick: [{
@@ -14070,7 +14117,7 @@ class PhoneInputComponent {
14070
14117
  </ion-note>
14071
14118
  }
14072
14119
  </div>
14073
- `, isInline: true, styles: ["@charset \"UTF-8\";:host{display:block;width:100%}.phone-input-container.has-error .phone-input-wrapper{border-color:var(--ion-color-danger)}.phone-label{display:block;font-size:14px;font-weight:700;color:var(--ion-color-dark);margin-bottom:8px}.phone-input-wrapper{display:flex;align-items:stretch;border:1px solid var(--ion-border-color, #e0e0e0);border-radius:28px;background:var(--ion-background-color, #fff);overflow:hidden;transition:border-color .2s;height:56px}.phone-input-wrapper:focus-within{border-color:var(--ion-color-primary)}.phone-input-wrapper.disabled{opacity:.5;pointer-events:none}.country-selector{flex-shrink:0;border-right:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));background:transparent;display:flex;align-items:center;padding:0 4px 0 16px}.country-selector ion-select{--background: transparent;--border-style: none;--border-width: 0;--border-color: transparent;--border-radius: 0;--box-shadow: none;--padding-start: 4px;--padding-end: 4px;--padding-top: 0;--padding-bottom: 0;--highlight-color-focused: transparent;--highlight-color-valid: transparent;--highlight-color-invalid: transparent;min-width:80px;max-width:100px}.country-selector ion-select::part(container){border:none;box-shadow:none}.country-selector ion-select::part(icon){opacity:.6}.country-selector ion-select.select-expanded{border:none!important}.country-selector .flag{margin-right:4px}.dial-code-display{flex-shrink:0;padding:0 12px;font-weight:500;color:var(--ion-color-medium-shade);border-right:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));background:transparent;display:flex;align-items:center}.number-input{flex:1;display:flex;align-items:center;background:transparent;padding:0 16px 0 12px}.number-input .phone-icon{color:var(--ion-color-medium);font-size:18px;margin-right:10px;flex-shrink:0}.number-input .phone-native-input{flex:1;width:100%;height:100%;border:none;outline:none;background:transparent;font-size:16px;font-family:inherit;color:var(--ion-text-color, #000)}.number-input .phone-native-input::placeholder{color:var(--ion-color-medium, #92949c)}.number-input .phone-native-input:focus{outline:none;border:none}.number-input .phone-native-input:disabled{opacity:.5;cursor:not-allowed}.hint{display:block;font-size:12px;color:var(--ion-color-medium);margin-top:4px;padding-left:4px}.error-message{display:block;font-size:12px;margin-top:4px;padding-left:4px}::ng-deep .country-select-popover{--width: 200px}::ng-deep .country-select-popover .flag{margin-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
14120
+ `, isInline: true, styles: ["@charset \"UTF-8\";:host{display:block;width:100%}.phone-input-container.has-error .phone-input-wrapper{border-color:var(--ion-color-danger)}.phone-label{display:block;font-size:16px;line-height:24px;font-weight:700;color:var(--ion-color-dark);margin-bottom:8px}.phone-input-wrapper{display:flex;align-items:stretch;border:1px solid var(--ion-color-step-150, #d7d8da);border-radius:28px;background:var(--ion-background-color, #fff);overflow:hidden;transition:border-color .2s;height:56px}.phone-input-wrapper:focus-within{border-color:var(--ion-color-primary)}.phone-input-wrapper.disabled{opacity:.5;pointer-events:none}.country-selector{flex-shrink:0;border-right:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));background:transparent;display:flex;align-items:center;padding:0 4px 0 16px}.country-selector ion-select{--background: transparent;--border-style: none;--border-width: 0;--border-color: transparent;--border-radius: 0;--box-shadow: none;--padding-start: 4px;--padding-end: 4px;--padding-top: 0;--padding-bottom: 0;--highlight-color-focused: transparent;--highlight-color-valid: transparent;--highlight-color-invalid: transparent;min-width:80px;max-width:100px}.country-selector ion-select::part(container){border:none;box-shadow:none}.country-selector ion-select::part(icon){opacity:.6}.country-selector ion-select.select-expanded{border:none!important}.country-selector .flag{margin-right:4px}.dial-code-display{flex-shrink:0;padding:0 12px;font-weight:500;color:var(--ion-color-medium-shade);border-right:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));background:transparent;display:flex;align-items:center}.number-input{flex:1;display:flex;align-items:center;background:transparent;padding:0 16px 0 12px}.number-input .phone-icon{color:var(--ion-color-medium);font-size:18px;margin-right:10px;flex-shrink:0}.number-input .phone-native-input{flex:1;width:100%;height:100%;border:none;outline:none;background:transparent;font-size:16px;font-family:inherit;color:var(--ion-text-color, #000)}.number-input .phone-native-input::placeholder{color:var(--ion-color-medium, #92949c)}.number-input .phone-native-input:focus{outline:none;border:none}.number-input .phone-native-input:disabled{opacity:.5;cursor:not-allowed}.hint{display:block;font-size:12px;color:var(--ion-color-dark);opacity:.75;margin-top:6px;padding-left:4px}.error-message{display:block;font-size:12px;margin-top:4px;padding-left:4px}::ng-deep .country-select-popover{--width: 200px}::ng-deep .country-select-popover .flag{margin-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
14074
14121
  }
14075
14122
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhoneInputComponent, decorators: [{
14076
14123
  type: Component,
@@ -14133,7 +14180,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
14133
14180
  </ion-note>
14134
14181
  }
14135
14182
  </div>
14136
- `, styles: ["@charset \"UTF-8\";:host{display:block;width:100%}.phone-input-container.has-error .phone-input-wrapper{border-color:var(--ion-color-danger)}.phone-label{display:block;font-size:14px;font-weight:700;color:var(--ion-color-dark);margin-bottom:8px}.phone-input-wrapper{display:flex;align-items:stretch;border:1px solid var(--ion-border-color, #e0e0e0);border-radius:28px;background:var(--ion-background-color, #fff);overflow:hidden;transition:border-color .2s;height:56px}.phone-input-wrapper:focus-within{border-color:var(--ion-color-primary)}.phone-input-wrapper.disabled{opacity:.5;pointer-events:none}.country-selector{flex-shrink:0;border-right:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));background:transparent;display:flex;align-items:center;padding:0 4px 0 16px}.country-selector ion-select{--background: transparent;--border-style: none;--border-width: 0;--border-color: transparent;--border-radius: 0;--box-shadow: none;--padding-start: 4px;--padding-end: 4px;--padding-top: 0;--padding-bottom: 0;--highlight-color-focused: transparent;--highlight-color-valid: transparent;--highlight-color-invalid: transparent;min-width:80px;max-width:100px}.country-selector ion-select::part(container){border:none;box-shadow:none}.country-selector ion-select::part(icon){opacity:.6}.country-selector ion-select.select-expanded{border:none!important}.country-selector .flag{margin-right:4px}.dial-code-display{flex-shrink:0;padding:0 12px;font-weight:500;color:var(--ion-color-medium-shade);border-right:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));background:transparent;display:flex;align-items:center}.number-input{flex:1;display:flex;align-items:center;background:transparent;padding:0 16px 0 12px}.number-input .phone-icon{color:var(--ion-color-medium);font-size:18px;margin-right:10px;flex-shrink:0}.number-input .phone-native-input{flex:1;width:100%;height:100%;border:none;outline:none;background:transparent;font-size:16px;font-family:inherit;color:var(--ion-text-color, #000)}.number-input .phone-native-input::placeholder{color:var(--ion-color-medium, #92949c)}.number-input .phone-native-input:focus{outline:none;border:none}.number-input .phone-native-input:disabled{opacity:.5;cursor:not-allowed}.hint{display:block;font-size:12px;color:var(--ion-color-medium);margin-top:4px;padding-left:4px}.error-message{display:block;font-size:12px;margin-top:4px;padding-left:4px}::ng-deep .country-select-popover{--width: 200px}::ng-deep .country-select-popover .flag{margin-right:8px}\n"] }]
14183
+ `, styles: ["@charset \"UTF-8\";:host{display:block;width:100%}.phone-input-container.has-error .phone-input-wrapper{border-color:var(--ion-color-danger)}.phone-label{display:block;font-size:16px;line-height:24px;font-weight:700;color:var(--ion-color-dark);margin-bottom:8px}.phone-input-wrapper{display:flex;align-items:stretch;border:1px solid var(--ion-color-step-150, #d7d8da);border-radius:28px;background:var(--ion-background-color, #fff);overflow:hidden;transition:border-color .2s;height:56px}.phone-input-wrapper:focus-within{border-color:var(--ion-color-primary)}.phone-input-wrapper.disabled{opacity:.5;pointer-events:none}.country-selector{flex-shrink:0;border-right:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));background:transparent;display:flex;align-items:center;padding:0 4px 0 16px}.country-selector ion-select{--background: transparent;--border-style: none;--border-width: 0;--border-color: transparent;--border-radius: 0;--box-shadow: none;--padding-start: 4px;--padding-end: 4px;--padding-top: 0;--padding-bottom: 0;--highlight-color-focused: transparent;--highlight-color-valid: transparent;--highlight-color-invalid: transparent;min-width:80px;max-width:100px}.country-selector ion-select::part(container){border:none;box-shadow:none}.country-selector ion-select::part(icon){opacity:.6}.country-selector ion-select.select-expanded{border:none!important}.country-selector .flag{margin-right:4px}.dial-code-display{flex-shrink:0;padding:0 12px;font-weight:500;color:var(--ion-color-medium-shade);border-right:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));background:transparent;display:flex;align-items:center}.number-input{flex:1;display:flex;align-items:center;background:transparent;padding:0 16px 0 12px}.number-input .phone-icon{color:var(--ion-color-medium);font-size:18px;margin-right:10px;flex-shrink:0}.number-input .phone-native-input{flex:1;width:100%;height:100%;border:none;outline:none;background:transparent;font-size:16px;font-family:inherit;color:var(--ion-text-color, #000)}.number-input .phone-native-input::placeholder{color:var(--ion-color-medium, #92949c)}.number-input .phone-native-input:focus{outline:none;border:none}.number-input .phone-native-input:disabled{opacity:.5;cursor:not-allowed}.hint{display:block;font-size:12px;color:var(--ion-color-dark);opacity:.75;margin-top:6px;padding-left:4px}.error-message{display:block;font-size:12px;margin-top:4px;padding-left:4px}::ng-deep .country-select-popover{--width: 200px}::ng-deep .country-select-popover .flag{margin-right:8px}\n"] }]
14137
14184
  }], propDecorators: { preset: [{
14138
14185
  type: Input
14139
14186
  }], props: [{
@@ -25076,8 +25123,13 @@ class UsernameInputComponent {
25076
25123
  <small>{{ errorMessage() }}</small>
25077
25124
  </ion-text>
25078
25125
  }
25126
+
25127
+ <!-- Texto explicativo (hint). Consistente con phone-input.hint. -->
25128
+ @if (props.hint && !hasError()) {
25129
+ <small class="username-hint">{{ props.hint }}</small>
25130
+ }
25079
25131
  </div>
25080
- `, isInline: true, styles: [".username-input-container{margin-bottom:1rem}.username-label{display:block;font-size:.875rem;font-weight:700;color:var(--ion-color-dark);margin-bottom:.5rem}.username-prefix{font-size:1rem;font-weight:500;color:var(--ion-color-medium);-webkit-user-select:none;user-select:none;margin-inline-end:.25rem;display:inline-flex;align-items:center}.username-field{width:100%}.username-field.has-error{--highlight-color: var(--ion-color-danger)}.availability-indicator{display:inline-flex;align-items:center;justify-content:center;margin-inline-start:.5rem}.checking-spinner{width:18px;height:18px;--color: var(--ion-color-medium)}.status-icon{font-size:1.25rem}.status-icon.available{color:var(--ion-color-success)}.status-icon.taken{color:var(--ion-color-danger)}.status-icon.invalid{color:var(--ion-color-warning)}.status-message,.error-message{display:block;margin-top:.25rem;padding-left:.25rem}:host-context(body.dark) .username-label,:host-context(.dark) .username-label,:host-context(.ion-palette-dark) .username-label,:host-context(html.ion-palette-dark) .username-label,:host-context([data-theme=\"dark\"]) .username-label{color:var(--ion-color-dark)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }] }); }
25132
+ `, isInline: true, styles: [".username-input-container{margin-bottom:1rem}.username-label{display:block;font-size:16px;line-height:24px;font-weight:700;color:var(--ion-color-dark);margin-bottom:8px}.username-hint{display:block;font-size:12px;color:var(--ion-color-dark);opacity:.75;margin-top:6px;padding-left:4px}.username-prefix{font-size:1rem;font-weight:500;color:var(--ion-color-medium);-webkit-user-select:none;user-select:none;margin-inline-end:.25rem;display:inline-flex;align-items:center}.username-field{width:100%}.username-field.has-error{--highlight-color: var(--ion-color-danger)}.availability-indicator{display:inline-flex;align-items:center;justify-content:center;margin-inline-start:.5rem}.checking-spinner{width:18px;height:18px;--color: var(--ion-color-medium)}.status-icon{font-size:1.25rem}.status-icon.available{color:var(--ion-color-success)}.status-icon.taken{color:var(--ion-color-danger)}.status-icon.invalid{color:var(--ion-color-warning)}.status-message,.error-message{display:block;margin-top:.25rem;padding-left:.25rem}:host-context(body.dark) .username-label,:host-context(.dark) .username-label,:host-context(.ion-palette-dark) .username-label,:host-context(html.ion-palette-dark) .username-label,:host-context([data-theme=\"dark\"]) .username-label{color:var(--ion-color-dark)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }] }); }
25081
25133
  }
25082
25134
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UsernameInputComponent, decorators: [{
25083
25135
  type: Component,
@@ -25132,8 +25184,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
25132
25184
  <small>{{ errorMessage() }}</small>
25133
25185
  </ion-text>
25134
25186
  }
25187
+
25188
+ <!-- Texto explicativo (hint). Consistente con phone-input.hint. -->
25189
+ @if (props.hint && !hasError()) {
25190
+ <small class="username-hint">{{ props.hint }}</small>
25191
+ }
25135
25192
  </div>
25136
- `, styles: [".username-input-container{margin-bottom:1rem}.username-label{display:block;font-size:.875rem;font-weight:700;color:var(--ion-color-dark);margin-bottom:.5rem}.username-prefix{font-size:1rem;font-weight:500;color:var(--ion-color-medium);-webkit-user-select:none;user-select:none;margin-inline-end:.25rem;display:inline-flex;align-items:center}.username-field{width:100%}.username-field.has-error{--highlight-color: var(--ion-color-danger)}.availability-indicator{display:inline-flex;align-items:center;justify-content:center;margin-inline-start:.5rem}.checking-spinner{width:18px;height:18px;--color: var(--ion-color-medium)}.status-icon{font-size:1.25rem}.status-icon.available{color:var(--ion-color-success)}.status-icon.taken{color:var(--ion-color-danger)}.status-icon.invalid{color:var(--ion-color-warning)}.status-message,.error-message{display:block;margin-top:.25rem;padding-left:.25rem}:host-context(body.dark) .username-label,:host-context(.dark) .username-label,:host-context(.ion-palette-dark) .username-label,:host-context(html.ion-palette-dark) .username-label,:host-context([data-theme=\"dark\"]) .username-label{color:var(--ion-color-dark)}\n"] }]
25193
+ `, styles: [".username-input-container{margin-bottom:1rem}.username-label{display:block;font-size:16px;line-height:24px;font-weight:700;color:var(--ion-color-dark);margin-bottom:8px}.username-hint{display:block;font-size:12px;color:var(--ion-color-dark);opacity:.75;margin-top:6px;padding-left:4px}.username-prefix{font-size:1rem;font-weight:500;color:var(--ion-color-medium);-webkit-user-select:none;user-select:none;margin-inline-end:.25rem;display:inline-flex;align-items:center}.username-field{width:100%}.username-field.has-error{--highlight-color: var(--ion-color-danger)}.availability-indicator{display:inline-flex;align-items:center;justify-content:center;margin-inline-start:.5rem}.checking-spinner{width:18px;height:18px;--color: var(--ion-color-medium)}.status-icon{font-size:1.25rem}.status-icon.available{color:var(--ion-color-success)}.status-icon.taken{color:var(--ion-color-danger)}.status-icon.invalid{color:var(--ion-color-warning)}.status-message,.error-message{display:block;margin-top:.25rem;padding-left:.25rem}:host-context(body.dark) .username-label,:host-context(.dark) .username-label,:host-context(.ion-palette-dark) .username-label,:host-context(html.ion-palette-dark) .username-label,:host-context([data-theme=\"dark\"]) .username-label{color:var(--ion-color-dark)}\n"] }]
25137
25194
  }], propDecorators: { props: [{
25138
25195
  type: Input
25139
25196
  }] } });
@@ -27105,6 +27162,7 @@ class FormComponent {
27105
27162
  const result = {
27106
27163
  control: control,
27107
27164
  label: field.label,
27165
+ hint: field.hint,
27108
27166
  placeholder: field.placeholder,
27109
27167
  minLength: field.range?.min,
27110
27168
  maxLength: field.range?.max,
@@ -36015,6 +36073,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
36015
36073
  }]
36016
36074
  }] });
36017
36075
 
36076
+ /** Built-in label sets for the three platform locales. */
36077
+ const CALLOUT_LABELS = {
36078
+ es: {
36079
+ NOTE: 'Nota',
36080
+ TIP: 'Tip',
36081
+ INFO: 'Info',
36082
+ IMPORTANT: 'Importante',
36083
+ WARNING: 'Atención',
36084
+ CAUTION: 'Precaución',
36085
+ },
36086
+ en: {
36087
+ NOTE: 'Note',
36088
+ TIP: 'Tip',
36089
+ INFO: 'Info',
36090
+ IMPORTANT: 'Important',
36091
+ WARNING: 'Warning',
36092
+ CAUTION: 'Caution',
36093
+ },
36094
+ pt: {
36095
+ NOTE: 'Nota',
36096
+ TIP: 'Dica',
36097
+ INFO: 'Info',
36098
+ IMPORTANT: 'Importante',
36099
+ WARNING: 'Atenção',
36100
+ CAUTION: 'Cuidado',
36101
+ },
36102
+ };
36103
+ /**
36104
+ * Per-callout-kind color (Ionic semantic color). Fixed across locales since
36105
+ * red = danger no matter what language you speak.
36106
+ */
36107
+ const CALLOUT_COLORS = {
36108
+ NOTE: 'primary',
36109
+ TIP: 'success',
36110
+ INFO: 'tertiary',
36111
+ IMPORTANT: 'warning',
36112
+ WARNING: 'warning',
36113
+ CAUTION: 'danger',
36114
+ };
36018
36115
  const BOX_DRAWING = /[┌┐└┘├┤┬┴┼─│╔╗╚╝═║]/;
36019
36116
  const CALLOUT_RE = /^>\s*\[!(NOTE|TIP|INFO|WARNING|CAUTION|IMPORTANT)\]\s*(.*)$/i;
36020
36117
  const FENCE_RE = /^```([\w-]*)\s*$/;
@@ -36039,9 +36136,11 @@ const TABLE_ROW_RE = /^\s*\|(.+)\|\s*$/;
36039
36136
  * - Tables → flattened into paragraphs with bold keys
36040
36137
  * - Horizontal rules (---, ***, ___) → separator
36041
36138
  */
36042
- function parseMarkdownArticle(markdown, config) {
36139
+ function parseMarkdownArticle(markdown, options) {
36043
36140
  const lines = normalize(markdown).split('\n');
36044
36141
  const elements = [];
36142
+ const labels = options?.calloutLabels ??
36143
+ (options?.locale ? CALLOUT_LABELS[options.locale] : CALLOUT_LABELS.es);
36045
36144
  let i = 0;
36046
36145
  while (i < lines.length) {
36047
36146
  const line = lines[i];
@@ -36096,7 +36195,7 @@ function parseMarkdownArticle(markdown, config) {
36096
36195
  block.push(lines[i]);
36097
36196
  i++;
36098
36197
  }
36099
- elements.push(makeQuoteOrCallout(block));
36198
+ elements.push(makeQuoteOrCallout(block, labels));
36100
36199
  continue;
36101
36200
  }
36102
36201
  if (TABLE_ROW_RE.test(line)) {
@@ -36153,12 +36252,14 @@ function parseMarkdownArticle(markdown, config) {
36153
36252
  });
36154
36253
  }
36155
36254
  }
36255
+ // Strip parser-only options before merging into ArticleMetadata
36256
+ const { locale: _l, calloutLabels: _c, ...metadataOverrides } = options ?? {};
36156
36257
  return {
36157
36258
  elements,
36158
36259
  maxWidth: '900px',
36159
36260
  centered: true,
36160
36261
  theme: 'auto',
36161
- ...config,
36262
+ ...metadataOverrides,
36162
36263
  };
36163
36264
  }
36164
36265
  function normalize(md) {
@@ -36188,7 +36289,7 @@ function makeHeading(level, content) {
36188
36289
  props: { content, size, color: 'dark', bold: true },
36189
36290
  };
36190
36291
  }
36191
- function makeQuoteOrCallout(block) {
36292
+ function makeQuoteOrCallout(block, labels) {
36192
36293
  const first = block[0];
36193
36294
  const callout = first.match(CALLOUT_RE);
36194
36295
  const lines = block.map(l => l.replace(/^>\s?/, ''));
@@ -36197,7 +36298,7 @@ function makeQuoteOrCallout(block) {
36197
36298
  const firstLineRest = callout[2] || '';
36198
36299
  const rest = lines.slice(1).join(' ').trim();
36199
36300
  const text = [firstLineRest, rest].filter(Boolean).join(' ').trim();
36200
- return makeNote(type, text);
36301
+ return makeNote(type, text, labels);
36201
36302
  }
36202
36303
  const text = lines.join(' ').trim();
36203
36304
  return {
@@ -36212,22 +36313,13 @@ function makeQuoteOrCallout(block) {
36212
36313
  },
36213
36314
  };
36214
36315
  }
36215
- function makeNote(kind, text) {
36216
- const map = {
36217
- NOTE: { color: 'primary', prefix: 'Nota' },
36218
- TIP: { color: 'success', prefix: 'Tip' },
36219
- INFO: { color: 'tertiary', prefix: 'Info' },
36220
- IMPORTANT: { color: 'warning', prefix: 'Importante' },
36221
- WARNING: { color: 'warning', prefix: 'Atención' },
36222
- CAUTION: { color: 'danger', prefix: 'Precaución' },
36223
- };
36224
- const cfg = map[kind];
36316
+ function makeNote(kind, text, labels) {
36225
36317
  return {
36226
36318
  type: 'note',
36227
36319
  props: {
36228
36320
  text,
36229
- prefix: `${cfg.prefix}:`,
36230
- color: cfg.color,
36321
+ prefix: `${labels[kind]}:`,
36322
+ color: CALLOUT_COLORS[kind],
36231
36323
  textColor: 'dark',
36232
36324
  size: 'medium',
36233
36325
  rounded: true,
@@ -43809,5 +43901,5 @@ function buildFooterLinks(links, t, resolver) {
43809
43901
  * Generated bundle index. Do not edit.
43810
43902
  */
43811
43903
 
43812
- export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, ARTICLE_SPACING, AVATAR_UPLOAD_DEFAULTS, AccordionComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AppConfigService, ArticleBuilder, ArticleComponent, AuthBackgroundComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BaseDefault, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CHEV_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentTransformer, CookieBannerComponent, CountdownComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_CANCEL_BUTTON, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DataTableComponent, DateInputComponent, DateRangeInputComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DownloadService, EmailInputComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FabComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FooterComponent, FooterLinksComponent, FormComponent, FormFooterComponent, FormSkeletonComponent, FunHeaderComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGIN_DEFAULTS, LanguageSelectorComponent, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginComponent, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MenuComponent, MessagingService, MetaService, ModalService, MultiSelectSearchComponent, NavigationService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationsService, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OrgSwitchService, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PATTERN_MOTIFS, PATTERN_PALETTES, PLATFORM_CONFIGS, PageContentComponent, PageTemplateComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PresetService, PriceTagComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProfileSkeletonComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QueryBuilder, QuoteBoxComponent, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RightsFooterComponent, RotatingTextComponent, SHAPE_KEYS, SKELETON_PRESETS, SOLID_KEYS, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SegmentControlComponent, SelectSearchComponent, SessionService, ShareButtonsComponent, SimpleComponent, SkeletonComponent, SkeletonService, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TranslatePipe, TypedCollection, UpdateBannerComponent, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_DEFAULT_CONTENT, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_SOCIAL_LINKS, VERSION, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, blogPost, buildFooterLinks, buildPath, collections, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createTitleProps, docs, extractPathParams, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, guestGuard, hasEmulators, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, provideValtechAds, provideValtechAppConfig, provideValtechAuth, provideValtechAuthInterceptor, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechPresets, provideValtechSkeleton, query, renderPatternSvgInner, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard, toArticle };
43904
+ export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, ARTICLE_SPACING, AVATAR_UPLOAD_DEFAULTS, AccordionComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AppConfigService, ArticleBuilder, ArticleComponent, AuthBackgroundComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BaseDefault, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentTransformer, CookieBannerComponent, CountdownComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_CANCEL_BUTTON, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DataTableComponent, DateInputComponent, DateRangeInputComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DownloadService, EmailInputComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FabComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FooterComponent, FooterLinksComponent, FormComponent, FormFooterComponent, FormSkeletonComponent, FunHeaderComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGIN_DEFAULTS, LanguageSelectorComponent, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginComponent, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MenuComponent, MessagingService, MetaService, ModalService, MultiSelectSearchComponent, NavigationService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationsService, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OrgSwitchService, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PATTERN_MOTIFS, PATTERN_PALETTES, PLATFORM_CONFIGS, PageContentComponent, PageTemplateComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PresetService, PriceTagComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProfileSkeletonComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QueryBuilder, QuoteBoxComponent, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RightsFooterComponent, RotatingTextComponent, SHAPE_KEYS, SKELETON_PRESETS, SOLID_KEYS, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SegmentControlComponent, SelectSearchComponent, SessionService, ShareButtonsComponent, SimpleComponent, SkeletonComponent, SkeletonService, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TranslatePipe, TypedCollection, UpdateBannerComponent, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_DEFAULT_CONTENT, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_SOCIAL_LINKS, VERSION, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, blogPost, buildFooterLinks, buildPath, collections, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createTitleProps, docs, extractPathParams, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, guestGuard, hasEmulators, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, provideValtechAds, provideValtechAppConfig, provideValtechAuth, provideValtechAuthInterceptor, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechPresets, provideValtechSkeleton, query, renderPatternSvgInner, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard, toArticle };
43813
43905
  //# sourceMappingURL=valtech-components.mjs.map