valtech-components 4.0.203 → 4.0.205

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.
@@ -3,7 +3,7 @@ import { inject, InjectionToken, makeEnvironmentProviders, APP_INITIALIZER, Erro
3
3
  import { BehaviorSubject, throwError, Subject, map, distinctUntilChanged, filter as filter$1, take as take$1, firstValueFrom, of, from, EMPTY, Observable, interval, debounceTime, switchMap as switchMap$1, catchError as catchError$1, takeUntil, isObservable, forkJoin, race, timer, shareReplay as shareReplay$1 } from 'rxjs';
4
4
  import { catchError, switchMap, finalize, filter, take, timeout, map as map$1, tap, shareReplay, distinctUntilChanged as distinctUntilChanged$1, retry, debounceTime as debounceTime$1, takeUntil as takeUntil$1 } from 'rxjs/operators';
5
5
  import * as i1$3 from '@angular/common/http';
6
- import { provideHttpClient, withInterceptors, HttpClient, HttpErrorResponse } from '@angular/common/http';
6
+ import { provideHttpClient, withInterceptors, HttpClient, HttpErrorResponse, HttpParams } from '@angular/common/http';
7
7
  import * as i1$1 from '@angular/fire/firestore';
8
8
  import { provideFirestore, getFirestore, connectFirestoreEmulator, enableMultiTabIndexedDbPersistence, doc, getDoc, collection, query as query$1, getDocs, getCountFromServer, limit, docData, collectionData, serverTimestamp, addDoc, setDoc, updateDoc, deleteDoc, writeBatch, arrayUnion, arrayRemove, increment, where, orderBy, startAfter, startAt, endBefore, endAt, Timestamp, onSnapshot, Firestore } from '@angular/fire/firestore';
9
9
  import * as i1$5 from '@angular/common';
@@ -56,7 +56,7 @@ import { BrowserMultiFormatReader } from '@zxing/browser';
56
56
  * Current version of valtech-components.
57
57
  * This is automatically updated during the publish process.
58
58
  */
59
- const VERSION = '4.0.203';
59
+ const VERSION = '4.0.204';
60
60
 
61
61
  // Control de estado de refresco (singleton a nivel de módulo)
62
62
  let isRefreshing = false;
@@ -37169,7 +37169,7 @@ class ToolbarComponent {
37169
37169
  <!-- experimental -->
37170
37170
  <ng-content select="[toolbar-bottom]"></ng-content>
37171
37171
  </ion-toolbar>
37172
- `, isInline: true, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-padding: 16px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}ion-button{font-family:var(--ion-default-font),Arial,sans-serif}.left-buttons{margin-left:-1rem}.background{background:var(--ion-background-color)}:host ion-title{--color: var(--ion-text-color)}:host ion-button{--color: var(--ion-text-color)}:host ion-icon{color:var(--ion-text-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { 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: 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"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: ImageComponent, selector: "val-image", inputs: ["props"] }, { kind: "component", type: UserAvatarComponent, selector: "val-user-avatar", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: IonMenuButton, selector: "ion-menu-button", inputs: ["autoHide", "color", "disabled", "menu", "mode", "type"] }, { kind: "component", type: LanguageSelectorComponent, selector: "val-language-selector", inputs: ["props"], outputs: ["languageChange"] }, { kind: "component", type: FontSizeSelectorComponent, selector: "val-font-size-selector", inputs: ["props"] }] }); }
37172
+ `, isInline: true, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-padding: 16px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}ion-button{font-family:var(--ion-default-font),Arial,sans-serif}.left-buttons{margin-left:-1rem}.background{background:var(--ion-background-color)}:host ion-title{--color: var(--ion-text-color)}:host ion-button{--color: var(--ion-text-color)}:host ion-icon{color:var(--ion-text-color)}:host val-user-avatar+val-user-avatar{margin-left:6px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { 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: 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"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: ImageComponent, selector: "val-image", inputs: ["props"] }, { kind: "component", type: UserAvatarComponent, selector: "val-user-avatar", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: IonMenuButton, selector: "ion-menu-button", inputs: ["autoHide", "color", "disabled", "menu", "mode", "type"] }, { kind: "component", type: LanguageSelectorComponent, selector: "val-language-selector", inputs: ["props"], outputs: ["languageChange"] }, { kind: "component", type: FontSizeSelectorComponent, selector: "val-font-size-selector", inputs: ["props"] }] }); }
37173
37173
  }
37174
37174
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToolbarComponent, decorators: [{
37175
37175
  type: Component,
@@ -37294,7 +37294,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
37294
37294
  <!-- experimental -->
37295
37295
  <ng-content select="[toolbar-bottom]"></ng-content>
37296
37296
  </ion-toolbar>
37297
- `, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-padding: 16px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}ion-button{font-family:var(--ion-default-font),Arial,sans-serif}.left-buttons{margin-left:-1rem}.background{background:var(--ion-background-color)}:host ion-title{--color: var(--ion-text-color)}:host ion-button{--color: var(--ion-text-color)}:host ion-icon{color:var(--ion-text-color)}\n"] }]
37297
+ `, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-padding: 16px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}ion-button{font-family:var(--ion-default-font),Arial,sans-serif}.left-buttons{margin-left:-1rem}.background{background:var(--ion-background-color)}:host ion-title{--color: var(--ion-text-color)}:host ion-button{--color: var(--ion-text-color)}:host ion-icon{color:var(--ion-text-color)}:host val-user-avatar+val-user-avatar{margin-left:6px}\n"] }]
37298
37298
  }], ctorParameters: () => [{ type: IconService }], propDecorators: { props: [{
37299
37299
  type: Input
37300
37300
  }], onClick: [{
@@ -66836,6 +66836,431 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
66836
66836
  type: Output
66837
66837
  }] } });
66838
66838
 
66839
+ /**
66840
+ * Token de inyeccion para la configuracion del servicio de Reactions.
66841
+ */
66842
+ const VALTECH_REACTIONS_CONFIG = new InjectionToken('ValtechReactionsConfig');
66843
+ /**
66844
+ * Provee el servicio de reactions a la aplicacion Angular.
66845
+ *
66846
+ * @param config - Configuracion de reactions
66847
+ * @returns EnvironmentProviders para usar en bootstrapApplication
66848
+ *
66849
+ * @example
66850
+ * bootstrapApplication(AppComponent, {
66851
+ * providers: [
66852
+ * provideValtechReactions({ apiUrl: environment.apiUrl, appId: 'my-app' }),
66853
+ * ],
66854
+ * });
66855
+ */
66856
+ function provideValtechReactions(config) {
66857
+ return makeEnvironmentProviders([{ provide: VALTECH_REACTIONS_CONFIG, useValue: config }]);
66858
+ }
66859
+
66860
+ /**
66861
+ * Servicio para gestionar reacciones emoji configurables por contexto.
66862
+ *
66863
+ * Requiere provideValtechReactions() en el bootstrap de la app.
66864
+ *
66865
+ * @example
66866
+ * const svc = inject(ReactionsService);
66867
+ * svc.react({ entityRef: { entityType: 'post', entityId: '1' }, token: 'heart', appId: 'app' })
66868
+ * .subscribe(res => console.log(res.counts));
66869
+ */
66870
+ class ReactionsService {
66871
+ constructor() {
66872
+ this.http = inject(HttpClient);
66873
+ this.config = inject(VALTECH_REACTIONS_CONFIG, { optional: true });
66874
+ if (!this.config && isDevMode()) {
66875
+ console.warn('[valtech-components] ReactionsService: provideValtechReactions() no esta en main.ts. ' +
66876
+ 'Las reacciones no funcionaran.');
66877
+ }
66878
+ }
66879
+ get apiUrl() {
66880
+ return this.config?.apiUrl ?? '';
66881
+ }
66882
+ get baseUrl() {
66883
+ return `${this.apiUrl}/v2/reactions`;
66884
+ }
66885
+ /**
66886
+ * Toggle reaccion — retorna estado nuevo + conteos actualizados.
66887
+ */
66888
+ react(req) {
66889
+ if (!this.config)
66890
+ return EMPTY;
66891
+ return this.http.post(this.baseUrl, req);
66892
+ }
66893
+ /**
66894
+ * Conteos + reacciones del usuario para una entidad.
66895
+ */
66896
+ getCounts(appId, entityType, entityId) {
66897
+ if (!this.config)
66898
+ return EMPTY;
66899
+ const params = new HttpParams()
66900
+ .set('appId', appId)
66901
+ .set('entityType', entityType)
66902
+ .set('entityId', entityId);
66903
+ return this.http.get(`${this.baseUrl}/counts`, { params });
66904
+ }
66905
+ /**
66906
+ * Solo mis tokens activos para una entidad.
66907
+ */
66908
+ getMyReactions(appId, entityType, entityId) {
66909
+ if (!this.config)
66910
+ return EMPTY;
66911
+ const params = new HttpParams()
66912
+ .set('appId', appId)
66913
+ .set('entityType', entityType)
66914
+ .set('entityId', entityId);
66915
+ return this.http
66916
+ .get(`${this.baseUrl}/mine`, { params })
66917
+ .pipe(map(res => res.tokens));
66918
+ }
66919
+ /**
66920
+ * Obtener un set de reacciones por ID.
66921
+ */
66922
+ getSet(setId) {
66923
+ if (!this.config)
66924
+ return EMPTY;
66925
+ return this.http.get(`${this.baseUrl}/sets/${setId}`);
66926
+ }
66927
+ /**
66928
+ * Listar todos los sets disponibles para una app.
66929
+ */
66930
+ listSets(appId) {
66931
+ if (!this.config)
66932
+ return EMPTY;
66933
+ const params = new HttpParams().set('appId', appId);
66934
+ return this.http.get(`${this.baseUrl}/sets`, { params });
66935
+ }
66936
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReactionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
66937
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReactionsService, providedIn: 'root' }); }
66938
+ }
66939
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReactionsService, decorators: [{
66940
+ type: Injectable,
66941
+ args: [{ providedIn: 'root' }]
66942
+ }], ctorParameters: () => [] });
66943
+
66944
+ const REACTION_BAR_I18N = {
66945
+ es: {
66946
+ loading: 'Cargando reacciones...',
66947
+ addReaction: 'Agregar reaccion',
66948
+ close: 'Cerrar',
66949
+ errorLoading: 'Error al cargar reacciones.',
66950
+ },
66951
+ en: {
66952
+ loading: 'Loading reactions...',
66953
+ addReaction: 'Add reaction',
66954
+ close: 'Close',
66955
+ errorLoading: 'Failed to load reactions.',
66956
+ },
66957
+ };
66958
+ /**
66959
+ * Barra de reacciones emoji configurables por contexto.
66960
+ *
66961
+ * Muestra un set de emojis y permite al usuario reaccionar a una entidad.
66962
+ * Soporta conteos, multiples reacciones y modo picker (popup).
66963
+ *
66964
+ * @example
66965
+ * html
66966
+ * <val-reaction-bar
66967
+ * [props]="{
66968
+ * entityRef: { entityType: 'post', entityId: 'p1' },
66969
+ * reactionSet: mySet,
66970
+ * showCounts: true
66971
+ * }"
66972
+ * (reactionChange)="onReaction($event)"
66973
+ * />
66974
+ */
66975
+ class ReactionBarComponent {
66976
+ constructor() {
66977
+ this.reactionChange = new EventEmitter();
66978
+ this.reactionsService = inject(ReactionsService);
66979
+ this.i18n = inject(I18nService);
66980
+ this.reactionSet = signal(null);
66981
+ this.myReactions = signal([]);
66982
+ this.counts = signal({});
66983
+ this.isLoading = signal(true);
66984
+ this.pickerOpen = signal(false);
66985
+ this.enrichedReactions = computed(() => {
66986
+ const set = this.reactionSet();
66987
+ if (!set)
66988
+ return [];
66989
+ const my = this.myReactions();
66990
+ const c = this.counts();
66991
+ return [...set.reactions]
66992
+ .sort((a, b) => a.order - b.order)
66993
+ .map(r => ({
66994
+ ...r,
66995
+ count: c[r.token] ?? 0,
66996
+ active: my.includes(r.token),
66997
+ }));
66998
+ });
66999
+ this.i18n.registerDefaults('ReactionBar', REACTION_BAR_I18N);
67000
+ }
67001
+ ngOnInit() {
67002
+ if (this.props.initialCounts) {
67003
+ this.counts.set(this.props.initialCounts);
67004
+ }
67005
+ if (this.props.initialMyReactions) {
67006
+ this.myReactions.set(this.props.initialMyReactions);
67007
+ }
67008
+ if (this.props.reactionSet) {
67009
+ this.reactionSet.set(this.props.reactionSet);
67010
+ this.isLoading.set(false);
67011
+ if (!this.props.skipInitialLoad && !this.props.initialCounts) {
67012
+ void this.loadCounts();
67013
+ }
67014
+ return;
67015
+ }
67016
+ if (this.props.reactionSetId) {
67017
+ void this.loadSetAndCounts(this.props.reactionSetId);
67018
+ return;
67019
+ }
67020
+ this.isLoading.set(false);
67021
+ }
67022
+ async loadSetAndCounts(setId) {
67023
+ this.isLoading.set(true);
67024
+ try {
67025
+ const set = await firstValueFrom(this.reactionsService.getSet(setId));
67026
+ this.reactionSet.set(set);
67027
+ if (!this.props.skipInitialLoad && !this.props.initialCounts) {
67028
+ await this.loadCounts();
67029
+ }
67030
+ }
67031
+ catch (err) {
67032
+ console.error('[ReactionBarComponent] Error loading reaction set:', err);
67033
+ }
67034
+ finally {
67035
+ this.isLoading.set(false);
67036
+ }
67037
+ }
67038
+ async loadCounts() {
67039
+ const appId = this.props.appId ?? '';
67040
+ const { entityType, entityId } = this.props.entityRef;
67041
+ try {
67042
+ const res = await firstValueFrom(this.reactionsService.getCounts(appId, entityType, entityId));
67043
+ this.counts.set(res.counts);
67044
+ if (!this.props.initialMyReactions) {
67045
+ this.myReactions.set(res.myReactions);
67046
+ }
67047
+ }
67048
+ catch (err) {
67049
+ console.error('[ReactionBarComponent] Error loading counts:', err);
67050
+ }
67051
+ }
67052
+ onReact(token) {
67053
+ if (this.props.readonly)
67054
+ return;
67055
+ void this.handleReact(token);
67056
+ }
67057
+ onReactAndClosePicker(token) {
67058
+ this.pickerOpen.set(false);
67059
+ this.onReact(token);
67060
+ }
67061
+ togglePicker() {
67062
+ this.pickerOpen.update(v => !v);
67063
+ }
67064
+ async handleReact(token) {
67065
+ const appId = this.props.appId ?? '';
67066
+ const { entityType, entityId } = this.props.entityRef;
67067
+ const maxReactions = this.props.maxReactions ?? 1;
67068
+ const currentMy = this.myReactions();
67069
+ const isActive = currentMy.includes(token);
67070
+ let newMyReactions;
67071
+ if (isActive) {
67072
+ newMyReactions = currentMy.filter(t => t !== token);
67073
+ }
67074
+ else if (maxReactions === 1) {
67075
+ newMyReactions = [token];
67076
+ }
67077
+ else if (maxReactions === 0 || currentMy.length < maxReactions) {
67078
+ newMyReactions = [...currentMy, token];
67079
+ }
67080
+ else {
67081
+ newMyReactions = currentMy;
67082
+ }
67083
+ const prevCounts = this.counts();
67084
+ const optimisticCounts = { ...prevCounts };
67085
+ if (isActive) {
67086
+ optimisticCounts[token] = Math.max(0, (optimisticCounts[token] ?? 1) - 1);
67087
+ }
67088
+ else {
67089
+ optimisticCounts[token] = (optimisticCounts[token] ?? 0) + 1;
67090
+ if (maxReactions === 1 && currentMy.length > 0) {
67091
+ const removed = currentMy[0];
67092
+ optimisticCounts[removed] = Math.max(0, (optimisticCounts[removed] ?? 1) - 1);
67093
+ }
67094
+ }
67095
+ this.myReactions.set(newMyReactions);
67096
+ this.counts.set(optimisticCounts);
67097
+ try {
67098
+ const res = await firstValueFrom(this.reactionsService.react({ entityRef: { entityType, entityId }, token, appId }));
67099
+ this.counts.set(res.counts);
67100
+ if (!res.active) {
67101
+ this.myReactions.set(this.myReactions().filter(t => t !== token));
67102
+ }
67103
+ else if (!this.myReactions().includes(token)) {
67104
+ this.myReactions.update(arr => [...arr, token]);
67105
+ }
67106
+ this.reactionChange.emit({
67107
+ token,
67108
+ active: res.active,
67109
+ entityRef: { entityType, entityId },
67110
+ counts: res.counts,
67111
+ });
67112
+ }
67113
+ catch (err) {
67114
+ console.error('[ReactionBarComponent] Error reacting:', err);
67115
+ this.myReactions.set(currentMy);
67116
+ this.counts.set(prevCounts);
67117
+ }
67118
+ }
67119
+ t(key) {
67120
+ return this.i18n.t(key, 'ReactionBar') || key;
67121
+ }
67122
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReactionBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
67123
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ReactionBarComponent, isStandalone: true, selector: "val-reaction-bar", inputs: { props: "props" }, outputs: { reactionChange: "reactionChange" }, ngImport: i0, template: `
67124
+ <div class="reaction-bar" [class.layout-picker]="props.layout === 'picker'" [attr.aria-label]="t('addReaction')">
67125
+ @if (isLoading()) {
67126
+ <div class="reaction-skeleton" aria-hidden="true">
67127
+ <span class="skeleton-circle"></span>
67128
+ <span class="skeleton-circle"></span>
67129
+ <span class="skeleton-circle"></span>
67130
+ </div>
67131
+ } @else {
67132
+ @for (r of enrichedReactions(); track r.token) {
67133
+ <button
67134
+ type="button"
67135
+ class="reaction-btn"
67136
+ [class.active]="r.active"
67137
+ [disabled]="props.readonly"
67138
+ [attr.aria-label]="r.label"
67139
+ [attr.aria-pressed]="r.active"
67140
+ (click)="onReact(r.token)"
67141
+ >
67142
+ <span class="emoji">{{ r.emoji }}</span>
67143
+ @if (props.showCounts && r.count > 0) {
67144
+ <span class="count">{{ r.count }}</span>
67145
+ }
67146
+ </button>
67147
+ }
67148
+ @if (props.layout === 'picker' && !pickerOpen()) {
67149
+ <button
67150
+ type="button"
67151
+ class="reaction-btn reaction-btn--add"
67152
+ [disabled]="props.readonly"
67153
+ [attr.aria-label]="t('addReaction')"
67154
+ (click)="togglePicker()"
67155
+ >
67156
+ <span class="emoji">+</span>
67157
+ </button>
67158
+ }
67159
+ @if (props.layout === 'picker' && pickerOpen()) {
67160
+ <div class="picker-popover" role="dialog" [attr.aria-label]="t('addReaction')">
67161
+ @for (r of enrichedReactions(); track r.token) {
67162
+ <button
67163
+ type="button"
67164
+ class="reaction-btn"
67165
+ [class.active]="r.active"
67166
+ [attr.aria-label]="r.label"
67167
+ [attr.aria-pressed]="r.active"
67168
+ (click)="onReactAndClosePicker(r.token)"
67169
+ >
67170
+ <span class="emoji">{{ r.emoji }}</span>
67171
+ @if (props.showCounts && r.count > 0) {
67172
+ <span class="count">{{ r.count }}</span>
67173
+ }
67174
+ </button>
67175
+ }
67176
+ <button
67177
+ type="button"
67178
+ class="reaction-btn reaction-btn--close"
67179
+ [attr.aria-label]="t('close')"
67180
+ (click)="togglePicker()"
67181
+ >
67182
+ <span class="emoji">x</span>
67183
+ </button>
67184
+ </div>
67185
+ }
67186
+ }
67187
+ </div>
67188
+ `, isInline: true, styles: [":host{display:block}.reaction-bar{display:flex;flex-wrap:wrap;gap:4px;align-items:center;position:relative}.reaction-btn{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border-radius:16px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-card-background, var(--ion-background-color, #fff));cursor:pointer;transition:all .15s ease;font-size:1rem;font-family:inherit;line-height:1}.reaction-btn:hover:not(:disabled){background:var(--ion-color-light, #f4f5f8)}.reaction-btn.active{background:var(--ion-color-primary-tint, rgba(76, 141, 255, .1));border-color:var(--ion-color-primary, #3880ff)}.reaction-btn:disabled{opacity:.6;cursor:default}.reaction-btn--add{border-style:dashed}.reaction-btn--close{border-color:var(--ion-color-medium, #92949c)}.emoji{font-size:1.1em;line-height:1}.count{font-size:.75rem;font-weight:600;color:var(--ion-color-medium, #92949c)}.active .count{color:var(--ion-color-primary, #3880ff)}.reaction-skeleton{display:flex;gap:4px;align-items:center}.skeleton-circle{display:inline-block;width:36px;height:28px;border-radius:16px;background:var(--ion-color-light, #f4f5f8);animation:skeleton-pulse 1.4s ease-in-out infinite}.skeleton-circle:nth-child(2){animation-delay:.2s}.skeleton-circle:nth-child(3){animation-delay:.4s}@keyframes skeleton-pulse{0%,to{opacity:1}50%{opacity:.4}}.picker-popover{display:flex;flex-wrap:wrap;gap:4px;align-items:center;padding:6px 8px;border-radius:20px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-card-background, var(--ion-background-color, #fff));box-shadow:0 4px 12px #0000001f;position:absolute;bottom:calc(100% + 8px);left:0;z-index:100}:host(.sm) .reaction-btn{padding:2px 6px;font-size:.875rem}:host(.lg) .reaction-btn{padding:6px 12px;font-size:1.2rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
67189
+ }
67190
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReactionBarComponent, decorators: [{
67191
+ type: Component,
67192
+ args: [{ selector: 'val-reaction-bar', standalone: true, imports: [CommonModule], template: `
67193
+ <div class="reaction-bar" [class.layout-picker]="props.layout === 'picker'" [attr.aria-label]="t('addReaction')">
67194
+ @if (isLoading()) {
67195
+ <div class="reaction-skeleton" aria-hidden="true">
67196
+ <span class="skeleton-circle"></span>
67197
+ <span class="skeleton-circle"></span>
67198
+ <span class="skeleton-circle"></span>
67199
+ </div>
67200
+ } @else {
67201
+ @for (r of enrichedReactions(); track r.token) {
67202
+ <button
67203
+ type="button"
67204
+ class="reaction-btn"
67205
+ [class.active]="r.active"
67206
+ [disabled]="props.readonly"
67207
+ [attr.aria-label]="r.label"
67208
+ [attr.aria-pressed]="r.active"
67209
+ (click)="onReact(r.token)"
67210
+ >
67211
+ <span class="emoji">{{ r.emoji }}</span>
67212
+ @if (props.showCounts && r.count > 0) {
67213
+ <span class="count">{{ r.count }}</span>
67214
+ }
67215
+ </button>
67216
+ }
67217
+ @if (props.layout === 'picker' && !pickerOpen()) {
67218
+ <button
67219
+ type="button"
67220
+ class="reaction-btn reaction-btn--add"
67221
+ [disabled]="props.readonly"
67222
+ [attr.aria-label]="t('addReaction')"
67223
+ (click)="togglePicker()"
67224
+ >
67225
+ <span class="emoji">+</span>
67226
+ </button>
67227
+ }
67228
+ @if (props.layout === 'picker' && pickerOpen()) {
67229
+ <div class="picker-popover" role="dialog" [attr.aria-label]="t('addReaction')">
67230
+ @for (r of enrichedReactions(); track r.token) {
67231
+ <button
67232
+ type="button"
67233
+ class="reaction-btn"
67234
+ [class.active]="r.active"
67235
+ [attr.aria-label]="r.label"
67236
+ [attr.aria-pressed]="r.active"
67237
+ (click)="onReactAndClosePicker(r.token)"
67238
+ >
67239
+ <span class="emoji">{{ r.emoji }}</span>
67240
+ @if (props.showCounts && r.count > 0) {
67241
+ <span class="count">{{ r.count }}</span>
67242
+ }
67243
+ </button>
67244
+ }
67245
+ <button
67246
+ type="button"
67247
+ class="reaction-btn reaction-btn--close"
67248
+ [attr.aria-label]="t('close')"
67249
+ (click)="togglePicker()"
67250
+ >
67251
+ <span class="emoji">x</span>
67252
+ </button>
67253
+ </div>
67254
+ }
67255
+ }
67256
+ </div>
67257
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.reaction-bar{display:flex;flex-wrap:wrap;gap:4px;align-items:center;position:relative}.reaction-btn{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border-radius:16px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-card-background, var(--ion-background-color, #fff));cursor:pointer;transition:all .15s ease;font-size:1rem;font-family:inherit;line-height:1}.reaction-btn:hover:not(:disabled){background:var(--ion-color-light, #f4f5f8)}.reaction-btn.active{background:var(--ion-color-primary-tint, rgba(76, 141, 255, .1));border-color:var(--ion-color-primary, #3880ff)}.reaction-btn:disabled{opacity:.6;cursor:default}.reaction-btn--add{border-style:dashed}.reaction-btn--close{border-color:var(--ion-color-medium, #92949c)}.emoji{font-size:1.1em;line-height:1}.count{font-size:.75rem;font-weight:600;color:var(--ion-color-medium, #92949c)}.active .count{color:var(--ion-color-primary, #3880ff)}.reaction-skeleton{display:flex;gap:4px;align-items:center}.skeleton-circle{display:inline-block;width:36px;height:28px;border-radius:16px;background:var(--ion-color-light, #f4f5f8);animation:skeleton-pulse 1.4s ease-in-out infinite}.skeleton-circle:nth-child(2){animation-delay:.2s}.skeleton-circle:nth-child(3){animation-delay:.4s}@keyframes skeleton-pulse{0%,to{opacity:1}50%{opacity:.4}}.picker-popover{display:flex;flex-wrap:wrap;gap:4px;align-items:center;padding:6px 8px;border-radius:20px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-card-background, var(--ion-background-color, #fff));box-shadow:0 4px 12px #0000001f;position:absolute;bottom:calc(100% + 8px);left:0;z-index:100}:host(.sm) .reaction-btn{padding:2px 6px;font-size:.875rem}:host(.lg) .reaction-btn{padding:6px 12px;font-size:1.2rem}\n"] }]
67258
+ }], ctorParameters: () => [], propDecorators: { props: [{
67259
+ type: Input
67260
+ }], reactionChange: [{
67261
+ type: Output
67262
+ }] } });
67263
+
66839
67264
  const DEFAULT_SPLASH_SCREEN_CONFIG = {
66840
67265
  fadeOutDuration: 300,
66841
67266
  };
@@ -71257,5 +71682,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
71257
71682
  * Generated bundle index. Do not edit.
71258
71683
  */
71259
71684
 
71260
- export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, APP_VERSION_PLATFORM_PLUGIN, APP_VERSION_REMOTE_PLUGIN, ARTICLE_CARD_DEFAULTS, ARTICLE_SPACING, ARTICLE_STRIP_DEFAULTS, AUTH_CTA_DEFAULTS, AVATAR_UPLOAD_DEFAULTS, AboutViewComponent, AccordionComponent, AccountViewComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimatedTerminalComponent, ApiKeyCreateModalComponent, ApiKeyService, ApiKeysModalComponent, ApiKeysViewComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleCardComponent, ArticleComponent, ArticleStripComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthCtaComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CORNER_KEYS, CTA_CARD_DEFAULTS, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentService, ContentTransformer, CookieBannerComponent, CookieSettingsComponent, CountdownComponent, CreateOrgModalComponent, CtaCardComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_BUTTON_PRESETS, DEFAULT_CANCEL_BUTTON, DEFAULT_CHECK_INTERVAL_MS, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_DEBUG_CONSOLE_CONFIG, DEFAULT_DONATION_CONFIG, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_LOGIN_LOGO, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_POST_UPDATE_GRACE_MS, DEFAULT_PRESETS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_SPLASH_SCREEN_CONFIG, DataTableComponent, DateInputComponent, DatePickerComponent, DateRangeInputComponent, DebugConsoleComponent, DeleteAccountModalComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EditOrgModalComponent, EmptyStateComponent, EntityCardComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FUN_MODAL_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FieldListComponent, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FontSizeOption, FontSizeSelectorComponent, FontSizeService, FooterComponent, FooterLinksComponent, FormComponent, FormFieldComponent, FormSkeletonComponent, FunHeaderComponent, FunModalComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HapticsService, HasPermissionDirective, HeaderComponent, HintComponent, HorizontalScrollComponent, HrefComponent, HtmlViewerModalComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, INVITATION_CARD_DEFAULTS, IONIC_COLORS$5 as IONIC_COLORS, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, InvitationCardComponent, InviteMemberModalComponent, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGGED_IN_HINT_COOKIE, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LanguageSelectorV2Component, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadMoreComponent, LoadingDirective, LocalStorageService, LocaleService, LoginAttemptModalComponent, LoginComponent, MEDIA_OBJECT_DEFAULTS, MEMBER_CARD_DEFAULTS, METRIC_CARD_DEFAULTS, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MediaObjectComponent, MemberCardComponent, MemberDetailModalComponent, MemberImportModalComponent, MenuComponent, MessagingService, MetaService, MetricCardComponent, MfaModalComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationPreferencesViewComponent, NotificationsService, NotificationsViewComponent, NumberFromToComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OptionCardsComponent, OrgInfoSheetComponent, OrgService, OrgSwitchService, OrganizationViewComponent, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, POST_UPDATE_TS_KEY, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PermissionCatalogService, PermissionSelectorComponent, PermissionsModalComponent, PermissionsViewComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PreferencesViewComponent, PresetService, PriceTagComponent, ProcessLinksPipe, ProfileSkeletonComponent, ProfileViewComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QrScannerComponent, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RequestFirestoreService, RequestFormBuilderService, RequestFormComponent, RequestModalComponent, RequestService, RightsFooterComponent, RotatingTextComponent, SEARCH_HEADER_DEFAULTS, SETTINGS_SECTIONS_CATALOG, SHAPE_KEYS, SHARE_PROFILE_MODAL_DEFAULTS, SKELETON_LAYOUT_DEFAULT_ROWS, SKELETON_PRESETS, SOLID_KEYS, STATS_BAR_DEFAULTS, STROKE_KEYS, SearchHeaderComponent, SearchSelectorComponent, SearchbarComponent, SectionHeaderComponent, SecurityViewComponent, SegmentControlComponent, SelectSearchComponent, SessionListModalComponent, SessionService, SettingsHubComponent, ShareButtonsComponent, ShareProfileModalComponent, SimpleComponent, SkeletonComponent, SkeletonLayoutComponent, SkeletonService, SplashComponent, SplashScreenService, StatsBarComponent, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, SwitchOrgModalComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TicketCardComponent, TicketCardImageService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TransferOwnershipModalComponent, TranslatePipe, TypedCollection, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_CONTENT_CONFIG, VALTECH_DEBUG_CONSOLE, VALTECH_DEFAULT_CONTENT, VALTECH_DONATION_CONFIG, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_NETWORK_ERROR_KEY, VALTECH_SETTINGS_MENU_LINKS, VALTECH_SITE_PATHS, VALTECH_SOCIAL_LINKS, VALTECH_SPLASH_SCREEN, VALTECH_WEB_BASE_URLS, VALTECH_WHATSAPP_CONFIG, VERSION, ValtechErrorService, VerifyViewComponent, WhatsappFabComponent, WhatsappService, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, authPasswordValidator, beautifyLegalArticle, blogPost, buildCompanyFooterProps, buildFooterLinks, buildLegalLinkResolver, buildPath, buildSettingsCards, button, canSubmitRequestType, collections, connectPageRefresh, createErrorStateProps, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createPageState, createPermissionLabeler, createRefreshableStream, createTitleProps, docs, errorLoggingInterceptor, extractPathParams, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, groupPermissionsByScope, guestGuard, hasEmulators, iconButton, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isIonicColor, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, provideSplashScreen, provideValtechAboutRoutes, provideValtechAccountRoutes, provideValtechAds, provideValtechApiKeysRoutes, provideValtechAppConfig, provideValtechAppVersion, provideValtechAppVersionHttp, provideValtechAuth, provideValtechAuthInterceptor, provideValtechContent, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechNotificationPreferencesRoutes, provideValtechNotificationsRoutes, provideValtechOrganizationRoutes, provideValtechPermissionsRoutes, provideValtechPreferencesRoutes, provideValtechPresets, provideValtechProfileRoutes, provideValtechSecurityRoutes, provideValtechSettingsRoutes, provideValtechSite, provideValtechSkeleton, provideValtechWhatsapp, query, rbacGuard, renderPatternSvgInner, replaceSpecialChars, requestSubmitMode, resolveColor, resolveInputDefaultValue, resolveIonicColor, resolveWebBaseUrl, roleGuard, selectableRequestTypes, storagePaths, superAdminGuard, toArticle };
71685
+ export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, APP_VERSION_PLATFORM_PLUGIN, APP_VERSION_REMOTE_PLUGIN, ARTICLE_CARD_DEFAULTS, ARTICLE_SPACING, ARTICLE_STRIP_DEFAULTS, AUTH_CTA_DEFAULTS, AVATAR_UPLOAD_DEFAULTS, AboutViewComponent, AccordionComponent, AccountViewComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimatedTerminalComponent, ApiKeyCreateModalComponent, ApiKeyService, ApiKeysModalComponent, ApiKeysViewComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleCardComponent, ArticleComponent, ArticleStripComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthCtaComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CORNER_KEYS, CTA_CARD_DEFAULTS, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentService, ContentTransformer, CookieBannerComponent, CookieSettingsComponent, CountdownComponent, CreateOrgModalComponent, CtaCardComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_BUTTON_PRESETS, DEFAULT_CANCEL_BUTTON, DEFAULT_CHECK_INTERVAL_MS, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_DEBUG_CONSOLE_CONFIG, DEFAULT_DONATION_CONFIG, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_LOGIN_LOGO, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_POST_UPDATE_GRACE_MS, DEFAULT_PRESETS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_SPLASH_SCREEN_CONFIG, DataTableComponent, DateInputComponent, DatePickerComponent, DateRangeInputComponent, DebugConsoleComponent, DeleteAccountModalComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EditOrgModalComponent, EmptyStateComponent, EntityCardComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FUN_MODAL_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FieldListComponent, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FontSizeOption, FontSizeSelectorComponent, FontSizeService, FooterComponent, FooterLinksComponent, FormComponent, FormFieldComponent, FormSkeletonComponent, FunHeaderComponent, FunModalComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HapticsService, HasPermissionDirective, HeaderComponent, HintComponent, HorizontalScrollComponent, HrefComponent, HtmlViewerModalComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, INVITATION_CARD_DEFAULTS, IONIC_COLORS$5 as IONIC_COLORS, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, InvitationCardComponent, InviteMemberModalComponent, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGGED_IN_HINT_COOKIE, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LanguageSelectorV2Component, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadMoreComponent, LoadingDirective, LocalStorageService, LocaleService, LoginAttemptModalComponent, LoginComponent, MEDIA_OBJECT_DEFAULTS, MEMBER_CARD_DEFAULTS, METRIC_CARD_DEFAULTS, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MediaObjectComponent, MemberCardComponent, MemberDetailModalComponent, MemberImportModalComponent, MenuComponent, MessagingService, MetaService, MetricCardComponent, MfaModalComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationPreferencesViewComponent, NotificationsService, NotificationsViewComponent, NumberFromToComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OptionCardsComponent, OrgInfoSheetComponent, OrgService, OrgSwitchService, OrganizationViewComponent, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, POST_UPDATE_TS_KEY, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PermissionCatalogService, PermissionSelectorComponent, PermissionsModalComponent, PermissionsViewComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PreferencesViewComponent, PresetService, PriceTagComponent, ProcessLinksPipe, ProfileSkeletonComponent, ProfileViewComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QrScannerComponent, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, ReactionBarComponent, ReactionsService, RefresherComponent, RequestFirestoreService, RequestFormBuilderService, RequestFormComponent, RequestModalComponent, RequestService, RightsFooterComponent, RotatingTextComponent, SEARCH_HEADER_DEFAULTS, SETTINGS_SECTIONS_CATALOG, SHAPE_KEYS, SHARE_PROFILE_MODAL_DEFAULTS, SKELETON_LAYOUT_DEFAULT_ROWS, SKELETON_PRESETS, SOLID_KEYS, STATS_BAR_DEFAULTS, STROKE_KEYS, SearchHeaderComponent, SearchSelectorComponent, SearchbarComponent, SectionHeaderComponent, SecurityViewComponent, SegmentControlComponent, SelectSearchComponent, SessionListModalComponent, SessionService, SettingsHubComponent, ShareButtonsComponent, ShareProfileModalComponent, SimpleComponent, SkeletonComponent, SkeletonLayoutComponent, SkeletonService, SplashComponent, SplashScreenService, StatsBarComponent, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, SwitchOrgModalComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TicketCardComponent, TicketCardImageService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TransferOwnershipModalComponent, TranslatePipe, TypedCollection, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_CONTENT_CONFIG, VALTECH_DEBUG_CONSOLE, VALTECH_DEFAULT_CONTENT, VALTECH_DONATION_CONFIG, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_NETWORK_ERROR_KEY, VALTECH_REACTIONS_CONFIG, VALTECH_SETTINGS_MENU_LINKS, VALTECH_SITE_PATHS, VALTECH_SOCIAL_LINKS, VALTECH_SPLASH_SCREEN, VALTECH_WEB_BASE_URLS, VALTECH_WHATSAPP_CONFIG, VERSION, ValtechErrorService, VerifyViewComponent, WhatsappFabComponent, WhatsappService, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, authPasswordValidator, beautifyLegalArticle, blogPost, buildCompanyFooterProps, buildFooterLinks, buildLegalLinkResolver, buildPath, buildSettingsCards, button, canSubmitRequestType, collections, connectPageRefresh, createErrorStateProps, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createPageState, createPermissionLabeler, createRefreshableStream, createTitleProps, docs, errorLoggingInterceptor, extractPathParams, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, groupPermissionsByScope, guestGuard, hasEmulators, iconButton, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isIonicColor, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, provideSplashScreen, provideValtechAboutRoutes, provideValtechAccountRoutes, provideValtechAds, provideValtechApiKeysRoutes, provideValtechAppConfig, provideValtechAppVersion, provideValtechAppVersionHttp, provideValtechAuth, provideValtechAuthInterceptor, provideValtechContent, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechNotificationPreferencesRoutes, provideValtechNotificationsRoutes, provideValtechOrganizationRoutes, provideValtechPermissionsRoutes, provideValtechPreferencesRoutes, provideValtechPresets, provideValtechProfileRoutes, provideValtechReactions, provideValtechSecurityRoutes, provideValtechSettingsRoutes, provideValtechSite, provideValtechSkeleton, provideValtechWhatsapp, query, rbacGuard, renderPatternSvgInner, replaceSpecialChars, requestSubmitMode, resolveColor, resolveInputDefaultValue, resolveIonicColor, resolveWebBaseUrl, roleGuard, selectableRequestTypes, storagePaths, superAdminGuard, toArticle };
71261
71686
  //# sourceMappingURL=valtech-components.mjs.map