valtech-components 4.0.134 → 4.0.135

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -56,7 +56,7 @@ import { BrowserMultiFormatReader } from '@zxing/browser';
56
56
  * Current version of valtech-components.
57
57
  * This is automatically updated during the publish process.
58
58
  */
59
- const VERSION = '4.0.134';
59
+ const VERSION = '4.0.135';
60
60
 
61
61
  // Control de estado de refresco (singleton a nivel de módulo)
62
62
  let isRefreshing = false;
@@ -35362,6 +35362,395 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
35362
35362
  type: Output
35363
35363
  }] } });
35364
35364
 
35365
+ class RequestService {
35366
+ constructor(config, http) {
35367
+ this.config = config;
35368
+ this.http = http;
35369
+ }
35370
+ get baseUrl() {
35371
+ return `${this.config.apiUrl}/v2/requests`;
35372
+ }
35373
+ get typesUrl() {
35374
+ return `${this.config.apiUrl}/v2/request-types`;
35375
+ }
35376
+ // ── Requests ──
35377
+ createRequest(payload) {
35378
+ return this.http.post(this.baseUrl, payload);
35379
+ }
35380
+ createAnonymousRequest(payload) {
35381
+ return this.http.post(`${this.baseUrl}/anonymous`, payload);
35382
+ }
35383
+ listRequests(params) {
35384
+ const qs = this.buildQueryString(params);
35385
+ return this.http.get(`${this.baseUrl}${qs}`);
35386
+ }
35387
+ listMyRequests(params) {
35388
+ const qs = this.buildQueryString(params);
35389
+ return this.http.get(`${this.baseUrl}/my${qs}`);
35390
+ }
35391
+ getRequest(id) {
35392
+ return this.http
35393
+ .get(`${this.baseUrl}/${id}`)
35394
+ .pipe(map$1(r => r.request));
35395
+ }
35396
+ updateRequest(id, payload) {
35397
+ return this.http
35398
+ .put(`${this.baseUrl}/${id}`, payload)
35399
+ .pipe(map$1(r => r.request));
35400
+ }
35401
+ transition(id, payload) {
35402
+ return this.http.post(`${this.baseUrl}/${id}/transition`, payload);
35403
+ }
35404
+ // ── Comments ──
35405
+ addComment(requestId, payload) {
35406
+ return this.http
35407
+ .post(`${this.baseUrl}/${requestId}/comments`, payload)
35408
+ .pipe(map$1(r => r.comment));
35409
+ }
35410
+ listComments(requestId) {
35411
+ return this.http.get(`${this.baseUrl}/${requestId}/comments`);
35412
+ }
35413
+ // ── Request Types ──
35414
+ listRequestTypes() {
35415
+ return this.http.get(this.typesUrl);
35416
+ }
35417
+ getRequestType(typeId) {
35418
+ return this.http.get(`${this.typesUrl}/${typeId}`);
35419
+ }
35420
+ createRequestType(payload) {
35421
+ return this.http
35422
+ .post(this.typesUrl, payload)
35423
+ .pipe(map$1(r => r.typeConfig));
35424
+ }
35425
+ updateRequestType(typeId, payload) {
35426
+ return this.http
35427
+ .put(`${this.typesUrl}/${typeId}`, payload)
35428
+ .pipe(map$1(r => r.typeConfig));
35429
+ }
35430
+ deleteRequestType(typeId) {
35431
+ return this.http.delete(`${this.typesUrl}/${typeId}`);
35432
+ }
35433
+ // ── Helpers ──
35434
+ buildQueryString(params) {
35435
+ if (!params)
35436
+ return '';
35437
+ const qs = new URLSearchParams();
35438
+ if (params.type)
35439
+ qs.set('type', params.type);
35440
+ if (params.status)
35441
+ qs.set('status', params.status);
35442
+ if (params.limit != null)
35443
+ qs.set('limit', String(params.limit));
35444
+ if (params.nextToken)
35445
+ qs.set('nextToken', params.nextToken);
35446
+ const str = qs.toString();
35447
+ return str ? `?${str}` : '';
35448
+ }
35449
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestService, deps: [{ token: VALTECH_AUTH_CONFIG }, { token: i1$3.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
35450
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestService, providedIn: 'root' }); }
35451
+ }
35452
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestService, decorators: [{
35453
+ type: Injectable,
35454
+ args: [{ providedIn: 'root' }]
35455
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
35456
+ type: Inject,
35457
+ args: [VALTECH_AUTH_CONFIG]
35458
+ }] }, { type: i1$3.HttpClient }] });
35459
+
35460
+ const REQUEST_FORM_I18N = {
35461
+ es: {
35462
+ title: 'Título',
35463
+ titlePlaceholder: 'Describe brevemente tu solicitud',
35464
+ titleValidation: 'El título debe tener al menos 3 caracteres',
35465
+ description: 'Descripción',
35466
+ descriptionPlaceholder: 'Añade más detalles aquí',
35467
+ descriptionValidation: 'La descripción es demasiado larga',
35468
+ submit: 'Enviar',
35469
+ success: 'Solicitud enviada exitosamente',
35470
+ error: 'Error al enviar la solicitud',
35471
+ },
35472
+ en: {
35473
+ title: 'Title',
35474
+ titlePlaceholder: 'Briefly describe your request',
35475
+ titleValidation: 'Title must be at least 3 characters',
35476
+ description: 'Description',
35477
+ descriptionPlaceholder: 'Add more details here',
35478
+ descriptionValidation: 'Description is too long',
35479
+ submit: 'Submit',
35480
+ success: 'Request submitted successfully',
35481
+ error: 'Error submitting the request',
35482
+ },
35483
+ };
35484
+ class RequestFormComponent {
35485
+ constructor() {
35486
+ this.props = { type: '' };
35487
+ this.onSubmit = new EventEmitter();
35488
+ this.onCancel = new EventEmitter();
35489
+ this.i18n = inject(I18nService);
35490
+ this.requestService = inject(RequestService);
35491
+ this.feedbackService = inject(FeedbackService);
35492
+ this.isSubmitting = signal(false);
35493
+ this.isSuccess = signal(false);
35494
+ this.error = signal(null);
35495
+ this.currentAttachments = [];
35496
+ addIcons({ checkmarkCircleOutline, closeCircleOutline });
35497
+ if (!this.i18n.hasNamespace('RequestForm')) {
35498
+ this.i18n.registerDefaults('RequestForm', REQUEST_FORM_I18N);
35499
+ }
35500
+ }
35501
+ ngOnInit() {
35502
+ this.formProps = this.buildFormProps();
35503
+ }
35504
+ buildFormProps() {
35505
+ return {
35506
+ name: '',
35507
+ sections: [
35508
+ {
35509
+ name: '',
35510
+ order: 0,
35511
+ fields: [
35512
+ {
35513
+ token: 'request-title',
35514
+ name: 'title',
35515
+ label: this.props.titleLabel ?? this.t('title'),
35516
+ hint: '',
35517
+ placeholder: this.props.titlePlaceholder ?? this.t('titlePlaceholder'),
35518
+ type: InputType.TEXT,
35519
+ order: 1,
35520
+ validators: [Validators.required, Validators.minLength(3), Validators.maxLength(300)],
35521
+ errors: {
35522
+ required: this.t('titleValidation'),
35523
+ minlength: this.t('titleValidation'),
35524
+ maxlength: this.t('titleValidation'),
35525
+ },
35526
+ state: ComponentStates.ENABLED,
35527
+ },
35528
+ {
35529
+ token: 'request-description',
35530
+ name: 'description',
35531
+ label: this.props.descriptionLabel ?? this.t('description'),
35532
+ hint: '',
35533
+ placeholder: this.props.descriptionPlaceholder ?? this.t('descriptionPlaceholder'),
35534
+ type: InputType.TEXTAREA,
35535
+ order: 2,
35536
+ validators: [Validators.maxLength(5000)],
35537
+ errors: { maxlength: this.t('descriptionValidation') },
35538
+ state: ComponentStates.ENABLED,
35539
+ },
35540
+ ],
35541
+ },
35542
+ ],
35543
+ actions: {
35544
+ type: 'submit',
35545
+ color: 'dark',
35546
+ fill: 'solid',
35547
+ shape: 'round',
35548
+ expand: 'block',
35549
+ text: this.props.submitButtonText ?? this.t('submit'),
35550
+ state: ComponentStates.ENABLED,
35551
+ },
35552
+ state: ComponentStates.ENABLED,
35553
+ };
35554
+ }
35555
+ async handleFormSubmit(submitted) {
35556
+ if (this.isSubmitting())
35557
+ return;
35558
+ if (this.currentAttachments.some(a => a.status === 'uploading'))
35559
+ return;
35560
+ this.isSubmitting.set(true);
35561
+ this.error.set(null);
35562
+ this.isSuccess.set(false);
35563
+ this.formProps.state = ComponentStates.WORKING;
35564
+ this.formProps.actions.state = ComponentStates.WORKING;
35565
+ try {
35566
+ const title = submitted.fields['title'].trim();
35567
+ const description = submitted.fields['description']?.trim() ?? '';
35568
+ const attachmentUrls = this.currentAttachments.filter(a => a.status === 'ready').map(a => a.url);
35569
+ const result = await firstValueFrom(this.requestService.createRequest({
35570
+ type: this.props.type,
35571
+ title,
35572
+ fields: {
35573
+ ...(description ? { description } : {}),
35574
+ ...(attachmentUrls.length ? { attachmentUrls } : {}),
35575
+ },
35576
+ }));
35577
+ this.isSuccess.set(true);
35578
+ this.onSubmit.emit({
35579
+ requestId: result.requestId,
35580
+ request: result.request,
35581
+ type: this.props.type,
35582
+ title,
35583
+ attachmentUrls,
35584
+ });
35585
+ }
35586
+ catch (err) {
35587
+ this.error.set(err.error?.message || err.message || this.t('error'));
35588
+ }
35589
+ finally {
35590
+ this.isSubmitting.set(false);
35591
+ this.formProps.state = ComponentStates.ENABLED;
35592
+ this.formProps.actions.state = ComponentStates.ENABLED;
35593
+ }
35594
+ }
35595
+ onAttachmentsChange(items) {
35596
+ this.currentAttachments = items;
35597
+ }
35598
+ onCancelClick() {
35599
+ this.onCancel.emit();
35600
+ }
35601
+ t(key) {
35602
+ return this.i18n.t(key, 'RequestForm');
35603
+ }
35604
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35605
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RequestFormComponent, isStandalone: true, selector: "val-request-form", inputs: { props: "props" }, outputs: { onSubmit: "onSubmit", onCancel: "onCancel" }, ngImport: i0, template: `
35606
+ <div class="request-form-wrapper" [class.compact]="props.compact" [ngClass]="props.cssClass">
35607
+ <val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
35608
+ @if (props.showAttachments !== false) {
35609
+ <val-attachment-uploader [props]="{ maxFiles: 5 }" (attachmentsChange)="onAttachmentsChange($event)" />
35610
+ }
35611
+
35612
+ @if (error()) {
35613
+ <div class="request-alert error">
35614
+ <ion-icon name="close-circle-outline" aria-hidden="true" />
35615
+ <span>{{ error() }}</span>
35616
+ </div>
35617
+ }
35618
+
35619
+ @if (isSuccess()) {
35620
+ <div class="request-alert success">
35621
+ <ion-icon name="checkmark-circle-outline" aria-hidden="true" />
35622
+ <span>{{ props.successMessage || t('success') }}</span>
35623
+ </div>
35624
+ }
35625
+ </val-form>
35626
+
35627
+ @if (props.cancelButtonText) {
35628
+ <ion-button fill="outline" color="medium" expand="block" class="cancel-button" (click)="onCancelClick()">
35629
+ {{ props.cancelButtonText }}
35630
+ </ion-button>
35631
+ }
35632
+ </div>
35633
+ `, isInline: true, styles: [".request-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.request-alert{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-top:8px;&.error{background-color:var(--ion-color-danger-tint);color:var(--ion-color-danger-shade)}&.success{background-color:var(--ion-color-success-tint);color:var(--ion-color-success-shade)}ion-icon{font-size:1.25rem}}.cancel-button{margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type: AttachmentUploaderComponent, selector: "val-attachment-uploader", inputs: ["props"], outputs: ["attachmentsChange"] }, { 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"] }] }); }
35634
+ }
35635
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestFormComponent, decorators: [{
35636
+ type: Component,
35637
+ args: [{ selector: 'val-request-form', standalone: true, imports: [CommonModule, FormComponent, AttachmentUploaderComponent, IonButton, IonIcon], template: `
35638
+ <div class="request-form-wrapper" [class.compact]="props.compact" [ngClass]="props.cssClass">
35639
+ <val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
35640
+ @if (props.showAttachments !== false) {
35641
+ <val-attachment-uploader [props]="{ maxFiles: 5 }" (attachmentsChange)="onAttachmentsChange($event)" />
35642
+ }
35643
+
35644
+ @if (error()) {
35645
+ <div class="request-alert error">
35646
+ <ion-icon name="close-circle-outline" aria-hidden="true" />
35647
+ <span>{{ error() }}</span>
35648
+ </div>
35649
+ }
35650
+
35651
+ @if (isSuccess()) {
35652
+ <div class="request-alert success">
35653
+ <ion-icon name="checkmark-circle-outline" aria-hidden="true" />
35654
+ <span>{{ props.successMessage || t('success') }}</span>
35655
+ </div>
35656
+ }
35657
+ </val-form>
35658
+
35659
+ @if (props.cancelButtonText) {
35660
+ <ion-button fill="outline" color="medium" expand="block" class="cancel-button" (click)="onCancelClick()">
35661
+ {{ props.cancelButtonText }}
35662
+ </ion-button>
35663
+ }
35664
+ </div>
35665
+ `, styles: [".request-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.request-alert{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-top:8px;&.error{background-color:var(--ion-color-danger-tint);color:var(--ion-color-danger-shade)}&.success{background-color:var(--ion-color-success-tint);color:var(--ion-color-success-shade)}ion-icon{font-size:1.25rem}}.cancel-button{margin-top:8px}\n"] }]
35666
+ }], ctorParameters: () => [], propDecorators: { props: [{
35667
+ type: Input
35668
+ }], onSubmit: [{
35669
+ type: Output
35670
+ }], onCancel: [{
35671
+ type: Output
35672
+ }] } });
35673
+
35674
+ /**
35675
+ * `val-request-modal`
35676
+ *
35677
+ * Modal canónico para crear una solicitud (ticket de soporte, etc.): envuelve
35678
+ * `val-request-form` en el shell de modal de la lib (Regla #5 — header con botón
35679
+ * "Cerrar", sin `ion-title`). Antes cada app duplicaba este `ion-modal` +
35680
+ * `ion-header` + `val-request-form` a mano (ej. `support-ticket-modal` de web).
35681
+ *
35682
+ * Patrón declarativo `[isOpen]` + `(dismissed)` — el padre controla la
35683
+ * visibilidad. El tipo de solicitud y demás opciones se pasan por `formProps`
35684
+ * (default `{ type: 'support_ticket' }`).
35685
+ *
35686
+ * @example
35687
+ * ```html
35688
+ * <val-request-modal
35689
+ * [isOpen]="ticketOpen()"
35690
+ * [formProps]="{ type: 'support_ticket' }"
35691
+ * (submitted)="onTicketCreated($event)"
35692
+ * (dismissed)="ticketOpen.set(false)" />
35693
+ * ```
35694
+ */
35695
+ class RequestModalComponent {
35696
+ constructor() {
35697
+ /** Controla la visibilidad del modal (el padre la maneja). */
35698
+ this.isOpen = false;
35699
+ /** Config del `val-request-form` (tipo de solicitud, labels, etc.). */
35700
+ this.formProps = { type: 'support_ticket' };
35701
+ /** Override del texto del botón cerrar (default: i18n `_global.close`). */
35702
+ this.closeLabel = '';
35703
+ /** Se emite al cerrar el modal (X o backdrop). */
35704
+ this.dismissed = new EventEmitter();
35705
+ /** Se emite cuando el formulario se envía con éxito. */
35706
+ this.submitted = new EventEmitter();
35707
+ }
35708
+ close() {
35709
+ this.isOpen = false;
35710
+ this.dismissed.emit();
35711
+ }
35712
+ onFormSubmit(event) {
35713
+ this.submitted.emit(event);
35714
+ }
35715
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35716
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: RequestModalComponent, isStandalone: true, selector: "val-request-modal", inputs: { isOpen: "isOpen", formProps: "formProps", closeLabel: "closeLabel" }, outputs: { dismissed: "dismissed", submitted: "submitted" }, ngImport: i0, template: `
35717
+ <ion-modal [isOpen]="isOpen" (didDismiss)="close()">
35718
+ <ng-template>
35719
+ <val-modal-shell [closeLabel]="closeLabel" (close)="close()">
35720
+ <val-request-form [props]="formProps" (onSubmit)="onFormSubmit($event)" />
35721
+ </val-modal-shell>
35722
+ </ng-template>
35723
+ </ion-modal>
35724
+ `, isInline: true, dependencies: [{ kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: ModalShellComponent, selector: "val-modal-shell", inputs: ["title", "subtitle", "closeLabel", "showClose"], outputs: ["close"] }, { kind: "component", type: RequestFormComponent, selector: "val-request-form", inputs: ["props"], outputs: ["onSubmit", "onCancel"] }] }); }
35725
+ }
35726
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestModalComponent, decorators: [{
35727
+ type: Component,
35728
+ args: [{
35729
+ selector: 'val-request-modal',
35730
+ standalone: true,
35731
+ imports: [IonModal, ModalShellComponent, RequestFormComponent],
35732
+ template: `
35733
+ <ion-modal [isOpen]="isOpen" (didDismiss)="close()">
35734
+ <ng-template>
35735
+ <val-modal-shell [closeLabel]="closeLabel" (close)="close()">
35736
+ <val-request-form [props]="formProps" (onSubmit)="onFormSubmit($event)" />
35737
+ </val-modal-shell>
35738
+ </ng-template>
35739
+ </ion-modal>
35740
+ `,
35741
+ }]
35742
+ }], propDecorators: { isOpen: [{
35743
+ type: Input
35744
+ }], formProps: [{
35745
+ type: Input
35746
+ }], closeLabel: [{
35747
+ type: Input
35748
+ }], dismissed: [{
35749
+ type: Output
35750
+ }], submitted: [{
35751
+ type: Output
35752
+ }] } });
35753
+
35365
35754
  /**
35366
35755
  * `val-cookie-banner` — bottom/top fixed banner asking the user to choose
35367
35756
  * a cookie consent option. Presentational only: emits events on each
@@ -65437,315 +65826,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
65437
65826
  type: Output
65438
65827
  }] } });
65439
65828
 
65440
- class RequestService {
65441
- constructor(config, http) {
65442
- this.config = config;
65443
- this.http = http;
65444
- }
65445
- get baseUrl() {
65446
- return `${this.config.apiUrl}/v2/requests`;
65447
- }
65448
- get typesUrl() {
65449
- return `${this.config.apiUrl}/v2/request-types`;
65450
- }
65451
- // ── Requests ──
65452
- createRequest(payload) {
65453
- return this.http.post(this.baseUrl, payload);
65454
- }
65455
- createAnonymousRequest(payload) {
65456
- return this.http.post(`${this.baseUrl}/anonymous`, payload);
65457
- }
65458
- listRequests(params) {
65459
- const qs = this.buildQueryString(params);
65460
- return this.http.get(`${this.baseUrl}${qs}`);
65461
- }
65462
- listMyRequests(params) {
65463
- const qs = this.buildQueryString(params);
65464
- return this.http.get(`${this.baseUrl}/my${qs}`);
65465
- }
65466
- getRequest(id) {
65467
- return this.http
65468
- .get(`${this.baseUrl}/${id}`)
65469
- .pipe(map$1(r => r.request));
65470
- }
65471
- updateRequest(id, payload) {
65472
- return this.http
65473
- .put(`${this.baseUrl}/${id}`, payload)
65474
- .pipe(map$1(r => r.request));
65475
- }
65476
- transition(id, payload) {
65477
- return this.http.post(`${this.baseUrl}/${id}/transition`, payload);
65478
- }
65479
- // ── Comments ──
65480
- addComment(requestId, payload) {
65481
- return this.http
65482
- .post(`${this.baseUrl}/${requestId}/comments`, payload)
65483
- .pipe(map$1(r => r.comment));
65484
- }
65485
- listComments(requestId) {
65486
- return this.http.get(`${this.baseUrl}/${requestId}/comments`);
65487
- }
65488
- // ── Request Types ──
65489
- listRequestTypes() {
65490
- return this.http.get(this.typesUrl);
65491
- }
65492
- getRequestType(typeId) {
65493
- return this.http.get(`${this.typesUrl}/${typeId}`);
65494
- }
65495
- createRequestType(payload) {
65496
- return this.http
65497
- .post(this.typesUrl, payload)
65498
- .pipe(map$1(r => r.typeConfig));
65499
- }
65500
- updateRequestType(typeId, payload) {
65501
- return this.http
65502
- .put(`${this.typesUrl}/${typeId}`, payload)
65503
- .pipe(map$1(r => r.typeConfig));
65504
- }
65505
- deleteRequestType(typeId) {
65506
- return this.http.delete(`${this.typesUrl}/${typeId}`);
65507
- }
65508
- // ── Helpers ──
65509
- buildQueryString(params) {
65510
- if (!params)
65511
- return '';
65512
- const qs = new URLSearchParams();
65513
- if (params.type)
65514
- qs.set('type', params.type);
65515
- if (params.status)
65516
- qs.set('status', params.status);
65517
- if (params.limit != null)
65518
- qs.set('limit', String(params.limit));
65519
- if (params.nextToken)
65520
- qs.set('nextToken', params.nextToken);
65521
- const str = qs.toString();
65522
- return str ? `?${str}` : '';
65523
- }
65524
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestService, deps: [{ token: VALTECH_AUTH_CONFIG }, { token: i1$3.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
65525
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestService, providedIn: 'root' }); }
65526
- }
65527
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestService, decorators: [{
65528
- type: Injectable,
65529
- args: [{ providedIn: 'root' }]
65530
- }], ctorParameters: () => [{ type: undefined, decorators: [{
65531
- type: Inject,
65532
- args: [VALTECH_AUTH_CONFIG]
65533
- }] }, { type: i1$3.HttpClient }] });
65534
-
65535
- const REQUEST_FORM_I18N = {
65536
- es: {
65537
- title: 'Título',
65538
- titlePlaceholder: 'Describe brevemente tu solicitud',
65539
- titleValidation: 'El título debe tener al menos 3 caracteres',
65540
- description: 'Descripción',
65541
- descriptionPlaceholder: 'Añade más detalles aquí',
65542
- descriptionValidation: 'La descripción es demasiado larga',
65543
- submit: 'Enviar',
65544
- success: 'Solicitud enviada exitosamente',
65545
- error: 'Error al enviar la solicitud',
65546
- },
65547
- en: {
65548
- title: 'Title',
65549
- titlePlaceholder: 'Briefly describe your request',
65550
- titleValidation: 'Title must be at least 3 characters',
65551
- description: 'Description',
65552
- descriptionPlaceholder: 'Add more details here',
65553
- descriptionValidation: 'Description is too long',
65554
- submit: 'Submit',
65555
- success: 'Request submitted successfully',
65556
- error: 'Error submitting the request',
65557
- },
65558
- };
65559
- class RequestFormComponent {
65560
- constructor() {
65561
- this.props = { type: '' };
65562
- this.onSubmit = new EventEmitter();
65563
- this.onCancel = new EventEmitter();
65564
- this.i18n = inject(I18nService);
65565
- this.requestService = inject(RequestService);
65566
- this.feedbackService = inject(FeedbackService);
65567
- this.isSubmitting = signal(false);
65568
- this.isSuccess = signal(false);
65569
- this.error = signal(null);
65570
- this.currentAttachments = [];
65571
- addIcons({ checkmarkCircleOutline, closeCircleOutline });
65572
- if (!this.i18n.hasNamespace('RequestForm')) {
65573
- this.i18n.registerDefaults('RequestForm', REQUEST_FORM_I18N);
65574
- }
65575
- }
65576
- ngOnInit() {
65577
- this.formProps = this.buildFormProps();
65578
- }
65579
- buildFormProps() {
65580
- return {
65581
- name: '',
65582
- sections: [
65583
- {
65584
- name: '',
65585
- order: 0,
65586
- fields: [
65587
- {
65588
- token: 'request-title',
65589
- name: 'title',
65590
- label: this.props.titleLabel ?? this.t('title'),
65591
- hint: '',
65592
- placeholder: this.props.titlePlaceholder ?? this.t('titlePlaceholder'),
65593
- type: InputType.TEXT,
65594
- order: 1,
65595
- validators: [Validators.required, Validators.minLength(3), Validators.maxLength(300)],
65596
- errors: {
65597
- required: this.t('titleValidation'),
65598
- minlength: this.t('titleValidation'),
65599
- maxlength: this.t('titleValidation'),
65600
- },
65601
- state: ComponentStates.ENABLED,
65602
- },
65603
- {
65604
- token: 'request-description',
65605
- name: 'description',
65606
- label: this.props.descriptionLabel ?? this.t('description'),
65607
- hint: '',
65608
- placeholder: this.props.descriptionPlaceholder ?? this.t('descriptionPlaceholder'),
65609
- type: InputType.TEXTAREA,
65610
- order: 2,
65611
- validators: [Validators.maxLength(5000)],
65612
- errors: { maxlength: this.t('descriptionValidation') },
65613
- state: ComponentStates.ENABLED,
65614
- },
65615
- ],
65616
- },
65617
- ],
65618
- actions: {
65619
- type: 'submit',
65620
- color: 'dark',
65621
- fill: 'solid',
65622
- shape: 'round',
65623
- expand: 'block',
65624
- text: this.props.submitButtonText ?? this.t('submit'),
65625
- state: ComponentStates.ENABLED,
65626
- },
65627
- state: ComponentStates.ENABLED,
65628
- };
65629
- }
65630
- async handleFormSubmit(submitted) {
65631
- if (this.isSubmitting())
65632
- return;
65633
- if (this.currentAttachments.some(a => a.status === 'uploading'))
65634
- return;
65635
- this.isSubmitting.set(true);
65636
- this.error.set(null);
65637
- this.isSuccess.set(false);
65638
- this.formProps.state = ComponentStates.WORKING;
65639
- this.formProps.actions.state = ComponentStates.WORKING;
65640
- try {
65641
- const title = submitted.fields['title'].trim();
65642
- const description = submitted.fields['description']?.trim() ?? '';
65643
- const attachmentUrls = this.currentAttachments.filter(a => a.status === 'ready').map(a => a.url);
65644
- const result = await firstValueFrom(this.requestService.createRequest({
65645
- type: this.props.type,
65646
- title,
65647
- fields: {
65648
- ...(description ? { description } : {}),
65649
- ...(attachmentUrls.length ? { attachmentUrls } : {}),
65650
- },
65651
- }));
65652
- this.isSuccess.set(true);
65653
- this.onSubmit.emit({
65654
- requestId: result.requestId,
65655
- request: result.request,
65656
- type: this.props.type,
65657
- title,
65658
- attachmentUrls,
65659
- });
65660
- }
65661
- catch (err) {
65662
- this.error.set(err.error?.message || err.message || this.t('error'));
65663
- }
65664
- finally {
65665
- this.isSubmitting.set(false);
65666
- this.formProps.state = ComponentStates.ENABLED;
65667
- this.formProps.actions.state = ComponentStates.ENABLED;
65668
- }
65669
- }
65670
- onAttachmentsChange(items) {
65671
- this.currentAttachments = items;
65672
- }
65673
- onCancelClick() {
65674
- this.onCancel.emit();
65675
- }
65676
- t(key) {
65677
- return this.i18n.t(key, 'RequestForm');
65678
- }
65679
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
65680
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RequestFormComponent, isStandalone: true, selector: "val-request-form", inputs: { props: "props" }, outputs: { onSubmit: "onSubmit", onCancel: "onCancel" }, ngImport: i0, template: `
65681
- <div class="request-form-wrapper" [class.compact]="props.compact" [ngClass]="props.cssClass">
65682
- <val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
65683
- @if (props.showAttachments !== false) {
65684
- <val-attachment-uploader [props]="{ maxFiles: 5 }" (attachmentsChange)="onAttachmentsChange($event)" />
65685
- }
65686
-
65687
- @if (error()) {
65688
- <div class="request-alert error">
65689
- <ion-icon name="close-circle-outline" aria-hidden="true" />
65690
- <span>{{ error() }}</span>
65691
- </div>
65692
- }
65693
-
65694
- @if (isSuccess()) {
65695
- <div class="request-alert success">
65696
- <ion-icon name="checkmark-circle-outline" aria-hidden="true" />
65697
- <span>{{ props.successMessage || t('success') }}</span>
65698
- </div>
65699
- }
65700
- </val-form>
65701
-
65702
- @if (props.cancelButtonText) {
65703
- <ion-button fill="outline" color="medium" expand="block" class="cancel-button" (click)="onCancelClick()">
65704
- {{ props.cancelButtonText }}
65705
- </ion-button>
65706
- }
65707
- </div>
65708
- `, isInline: true, styles: [".request-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.request-alert{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-top:8px;&.error{background-color:var(--ion-color-danger-tint);color:var(--ion-color-danger-shade)}&.success{background-color:var(--ion-color-success-tint);color:var(--ion-color-success-shade)}ion-icon{font-size:1.25rem}}.cancel-button{margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type: AttachmentUploaderComponent, selector: "val-attachment-uploader", inputs: ["props"], outputs: ["attachmentsChange"] }, { 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"] }] }); }
65709
- }
65710
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestFormComponent, decorators: [{
65711
- type: Component,
65712
- args: [{ selector: 'val-request-form', standalone: true, imports: [CommonModule, FormComponent, AttachmentUploaderComponent, IonButton, IonIcon], template: `
65713
- <div class="request-form-wrapper" [class.compact]="props.compact" [ngClass]="props.cssClass">
65714
- <val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
65715
- @if (props.showAttachments !== false) {
65716
- <val-attachment-uploader [props]="{ maxFiles: 5 }" (attachmentsChange)="onAttachmentsChange($event)" />
65717
- }
65718
-
65719
- @if (error()) {
65720
- <div class="request-alert error">
65721
- <ion-icon name="close-circle-outline" aria-hidden="true" />
65722
- <span>{{ error() }}</span>
65723
- </div>
65724
- }
65725
-
65726
- @if (isSuccess()) {
65727
- <div class="request-alert success">
65728
- <ion-icon name="checkmark-circle-outline" aria-hidden="true" />
65729
- <span>{{ props.successMessage || t('success') }}</span>
65730
- </div>
65731
- }
65732
- </val-form>
65733
-
65734
- @if (props.cancelButtonText) {
65735
- <ion-button fill="outline" color="medium" expand="block" class="cancel-button" (click)="onCancelClick()">
65736
- {{ props.cancelButtonText }}
65737
- </ion-button>
65738
- }
65739
- </div>
65740
- `, styles: [".request-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.request-alert{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-top:8px;&.error{background-color:var(--ion-color-danger-tint);color:var(--ion-color-danger-shade)}&.success{background-color:var(--ion-color-success-tint);color:var(--ion-color-success-shade)}ion-icon{font-size:1.25rem}}.cancel-button{margin-top:8px}\n"] }]
65741
- }], ctorParameters: () => [], propDecorators: { props: [{
65742
- type: Input
65743
- }], onSubmit: [{
65744
- type: Output
65745
- }], onCancel: [{
65746
- type: Output
65747
- }] } });
65748
-
65749
65829
  const DEFAULT_SPLASH_SCREEN_CONFIG = {
65750
65830
  fadeOutDuration: 300,
65751
65831
  };
@@ -69961,5 +70041,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
69961
70041
  * Generated bundle index. Do not edit.
69962
70042
  */
69963
70043
 
69964
- export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, APP_VERSION_PLATFORM_PLUGIN, APP_VERSION_REMOTE_PLUGIN, ARTICLE_CARD_DEFAULTS, ARTICLE_SPACING, ARTICLE_STRIP_DEFAULTS, AUTH_CTA_DEFAULTS, AVATAR_UPLOAD_DEFAULTS, AboutViewComponent, AccordionComponent, AccountViewComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimatedTerminalComponent, ApiKeyCreateModalComponent, ApiKeyService, ApiKeysModalComponent, ApiKeysViewComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleCardComponent, ArticleComponent, ArticleStripComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthCtaComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CORNER_KEYS, CTA_CARD_DEFAULTS, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentService, ContentTransformer, CookieBannerComponent, CountdownComponent, CreateOrgModalComponent, CtaCardComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_BUTTON_PRESETS, DEFAULT_CANCEL_BUTTON, DEFAULT_CHECK_INTERVAL_MS, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_DEBUG_CONSOLE_CONFIG, DEFAULT_DONATION_CONFIG, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_LOGIN_LOGO, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_PRESETS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_SPLASH_SCREEN_CONFIG, DataTableComponent, DateInputComponent, DatePickerComponent, DateRangeInputComponent, DebugConsoleComponent, DeleteAccountModalComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EditOrgModalComponent, EmptyStateComponent, 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, HasPermissionDirective, HeaderComponent, HintComponent, HorizontalScrollComponent, HrefComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, INVITATION_CARD_DEFAULTS, IONIC_COLORS$5 as IONIC_COLORS, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, InvitationCardComponent, InviteMemberModalComponent, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGGED_IN_HINT_COOKIE, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LanguageSelectorV2Component, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginAttemptModalComponent, LoginComponent, MEDIA_OBJECT_DEFAULTS, MEMBER_CARD_DEFAULTS, METRIC_CARD_DEFAULTS, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MediaObjectComponent, MemberCardComponent, MemberDetailModalComponent, MemberImportModalComponent, MenuComponent, MessagingService, MetaService, MetricCardComponent, MfaModalComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationPreferencesViewComponent, NotificationsService, NotificationsViewComponent, NumberFromToComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OptionCardsComponent, OrgInfoSheetComponent, OrgService, OrgSwitchService, OrganizationViewComponent, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PermissionCatalogService, PermissionSelectorComponent, PermissionsModalComponent, PermissionsViewComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PreferencesViewComponent, PresetService, PriceTagComponent, ProcessLinksPipe, ProfileSkeletonComponent, ProfileViewComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QrScannerComponent, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RequestFirestoreService, RequestFormBuilderService, RequestFormComponent, 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, guestGuard, hasEmulators, iconButton, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isIonicColor, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, provideSplashScreen, provideValtechAboutRoutes, provideValtechAccountRoutes, provideValtechAds, provideValtechApiKeysRoutes, provideValtechAppConfig, provideValtechAppVersion, provideValtechAppVersionHttp, provideValtechAuth, provideValtechAuthInterceptor, provideValtechContent, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechNotificationPreferencesRoutes, provideValtechNotificationsRoutes, provideValtechOrganizationRoutes, provideValtechPermissionsRoutes, provideValtechPreferencesRoutes, provideValtechPresets, provideValtechProfileRoutes, provideValtechSecurityRoutes, provideValtechSettingsRoutes, provideValtechSite, provideValtechSkeleton, provideValtechWhatsapp, query, renderPatternSvgInner, replaceSpecialChars, requestSubmitMode, resolveColor, resolveInputDefaultValue, resolveIonicColor, resolveWebBaseUrl, roleGuard, selectableRequestTypes, storagePaths, superAdminGuard, toArticle };
70044
+ export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, APP_VERSION_PLATFORM_PLUGIN, APP_VERSION_REMOTE_PLUGIN, ARTICLE_CARD_DEFAULTS, ARTICLE_SPACING, ARTICLE_STRIP_DEFAULTS, AUTH_CTA_DEFAULTS, AVATAR_UPLOAD_DEFAULTS, AboutViewComponent, AccordionComponent, AccountViewComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimatedTerminalComponent, ApiKeyCreateModalComponent, ApiKeyService, ApiKeysModalComponent, ApiKeysViewComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleCardComponent, ArticleComponent, ArticleStripComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthCtaComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CORNER_KEYS, CTA_CARD_DEFAULTS, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentService, ContentTransformer, CookieBannerComponent, CountdownComponent, CreateOrgModalComponent, CtaCardComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_BUTTON_PRESETS, DEFAULT_CANCEL_BUTTON, DEFAULT_CHECK_INTERVAL_MS, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_DEBUG_CONSOLE_CONFIG, DEFAULT_DONATION_CONFIG, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_LOGIN_LOGO, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_PRESETS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_SPLASH_SCREEN_CONFIG, DataTableComponent, DateInputComponent, DatePickerComponent, DateRangeInputComponent, DebugConsoleComponent, DeleteAccountModalComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EditOrgModalComponent, EmptyStateComponent, 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, HasPermissionDirective, HeaderComponent, HintComponent, HorizontalScrollComponent, HrefComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, INVITATION_CARD_DEFAULTS, IONIC_COLORS$5 as IONIC_COLORS, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, InvitationCardComponent, InviteMemberModalComponent, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGGED_IN_HINT_COOKIE, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LanguageSelectorV2Component, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginAttemptModalComponent, LoginComponent, MEDIA_OBJECT_DEFAULTS, MEMBER_CARD_DEFAULTS, METRIC_CARD_DEFAULTS, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MediaObjectComponent, MemberCardComponent, MemberDetailModalComponent, MemberImportModalComponent, MenuComponent, MessagingService, MetaService, MetricCardComponent, MfaModalComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationPreferencesViewComponent, NotificationsService, NotificationsViewComponent, NumberFromToComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OptionCardsComponent, OrgInfoSheetComponent, OrgService, OrgSwitchService, OrganizationViewComponent, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PermissionCatalogService, PermissionSelectorComponent, PermissionsModalComponent, PermissionsViewComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PreferencesViewComponent, PresetService, PriceTagComponent, ProcessLinksPipe, ProfileSkeletonComponent, ProfileViewComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QrScannerComponent, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RequestFirestoreService, RequestFormBuilderService, 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, guestGuard, hasEmulators, iconButton, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isIonicColor, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, provideSplashScreen, provideValtechAboutRoutes, provideValtechAccountRoutes, provideValtechAds, provideValtechApiKeysRoutes, provideValtechAppConfig, provideValtechAppVersion, provideValtechAppVersionHttp, provideValtechAuth, provideValtechAuthInterceptor, provideValtechContent, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechNotificationPreferencesRoutes, provideValtechNotificationsRoutes, provideValtechOrganizationRoutes, provideValtechPermissionsRoutes, provideValtechPreferencesRoutes, provideValtechPresets, provideValtechProfileRoutes, provideValtechSecurityRoutes, provideValtechSettingsRoutes, provideValtechSite, provideValtechSkeleton, provideValtechWhatsapp, query, renderPatternSvgInner, replaceSpecialChars, requestSubmitMode, resolveColor, resolveInputDefaultValue, resolveIonicColor, resolveWebBaseUrl, roleGuard, selectableRequestTypes, storagePaths, superAdminGuard, toArticle };
69965
70045
  //# sourceMappingURL=valtech-components.mjs.map