valtech-components 4.0.954 → 4.0.956
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.
- package/esm2022/lib/components/molecules/select-search/select-search-picker-modal.component.mjs +145 -0
- package/esm2022/lib/components/molecules/select-search/select-search.component.mjs +41 -156
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/valtech-components.mjs +271 -249
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
- package/lib/components/atoms/text/text.component.d.ts +1 -1
- package/lib/components/atoms/user-avatar/user-avatar.component.d.ts +1 -1
- package/lib/components/molecules/features-list/features-list.component.d.ts +1 -1
- package/lib/components/molecules/phone-display/phone-display.component.d.ts +1 -1
- package/lib/components/molecules/select-search/select-search-picker-modal.component.d.ts +44 -0
- package/lib/components/molecules/select-search/select-search.component.d.ts +9 -20
- package/lib/components/organisms/article/article.component.d.ts +3 -3
- package/lib/components/organisms/landing-steps/landing-steps.component.d.ts +1 -1
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -7,7 +7,7 @@ import { provideHttpClient, withInterceptors, HttpContextToken, HttpClient, 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, collectionGroup, collectionData, docData, 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$4 from '@angular/common';
|
|
10
|
-
import { isPlatformBrowser, CommonModule, NgStyle, NgFor,
|
|
10
|
+
import { isPlatformBrowser, CommonModule, NgStyle, NgFor, NgClass, DOCUMENT, TitleCasePipe, NgTemplateOutlet } from '@angular/common';
|
|
11
11
|
import { provideAnalytics, getAnalytics, Analytics, logEvent, setUserId, setUserProperties } from '@angular/fire/analytics';
|
|
12
12
|
import { provideFirebaseApp, initializeApp } from '@angular/fire/app';
|
|
13
13
|
import * as i1 from '@angular/fire/auth';
|
|
@@ -67,7 +67,7 @@ import fixWebmDuration from 'fix-webm-duration';
|
|
|
67
67
|
* Current version of valtech-components.
|
|
68
68
|
* This is automatically updated during the publish process.
|
|
69
69
|
*/
|
|
70
|
-
const VERSION = '4.0.
|
|
70
|
+
const VERSION = '4.0.956';
|
|
71
71
|
|
|
72
72
|
function evaluateValtechAccess(rule, context, features = {}, visitedFeatures = new Set()) {
|
|
73
73
|
if (rule == null)
|
|
@@ -22517,6 +22517,100 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
22517
22517
|
type: Input
|
|
22518
22518
|
}] } });
|
|
22519
22519
|
|
|
22520
|
+
/**
|
|
22521
|
+
* Layout canonico para modales con body scrolleable y footer de acciones fijo.
|
|
22522
|
+
*
|
|
22523
|
+
* Usalo dentro de componentes abiertos via `ModalService.open(...)` cuando el
|
|
22524
|
+
* contenido pueda crecer y el CTA deba quedar siempre visible. El header/body
|
|
22525
|
+
* delegan en `val-modal-shell`; el footer queda fuera del `ion-content`, como
|
|
22526
|
+
* sibling, para evitar problemas de scroll.
|
|
22527
|
+
*/
|
|
22528
|
+
class ModalLayoutComponent {
|
|
22529
|
+
constructor() {
|
|
22530
|
+
this.title = input('');
|
|
22531
|
+
this.subtitle = input('');
|
|
22532
|
+
this.closeLabel = input('');
|
|
22533
|
+
this.showClose = input(true);
|
|
22534
|
+
this.actions = input([]);
|
|
22535
|
+
/**
|
|
22536
|
+
* Alineación del footer. **No pasarlo**: el default `auto` ya da el
|
|
22537
|
+
* comportamiento correcto (CTA full-width en mobile, a la derecha en desktop).
|
|
22538
|
+
* Ver ModalActionAlignment antes de elegir otro valor.
|
|
22539
|
+
*/
|
|
22540
|
+
this.actionsAlign = input('auto');
|
|
22541
|
+
this.footer = input(undefined);
|
|
22542
|
+
this.footerClass = input('');
|
|
22543
|
+
this.close = output();
|
|
22544
|
+
this.actionClick = output();
|
|
22545
|
+
this.showFooter = computed(() => this.footer() ?? this.actions().length > 0);
|
|
22546
|
+
}
|
|
22547
|
+
handleAction(action, index) {
|
|
22548
|
+
this.actionClick.emit({ action, index });
|
|
22549
|
+
}
|
|
22550
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ModalLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22551
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ModalLayoutComponent, isStandalone: true, selector: "val-modal-layout", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, closeLabel: { classPropertyName: "closeLabel", publicName: "closeLabel", isSignal: true, isRequired: false, transformFunction: null }, showClose: { classPropertyName: "showClose", publicName: "showClose", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, actionsAlign: { classPropertyName: "actionsAlign", publicName: "actionsAlign", isSignal: true, isRequired: false, transformFunction: null }, footer: { classPropertyName: "footer", publicName: "footer", isSignal: true, isRequired: false, transformFunction: null }, footerClass: { classPropertyName: "footerClass", publicName: "footerClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { close: "close", actionClick: "actionClick" }, ngImport: i0, template: `
|
|
22552
|
+
<val-modal-shell
|
|
22553
|
+
[title]="title()"
|
|
22554
|
+
[subtitle]="subtitle()"
|
|
22555
|
+
[closeLabel]="closeLabel()"
|
|
22556
|
+
[showClose]="showClose()"
|
|
22557
|
+
(close)="close.emit()"
|
|
22558
|
+
>
|
|
22559
|
+
<ng-content />
|
|
22560
|
+
</val-modal-shell>
|
|
22561
|
+
|
|
22562
|
+
@if (showFooter()) {
|
|
22563
|
+
<ion-footer class="val-modal-layout__footer" [ngClass]="footerClass()">
|
|
22564
|
+
<div
|
|
22565
|
+
class="val-modal-layout__actions"
|
|
22566
|
+
[ngClass]="'val-modal-layout__actions--' + actionsAlign()"
|
|
22567
|
+
>
|
|
22568
|
+
@for (action of actions(); track action.token || action.text || $index) {
|
|
22569
|
+
<val-button
|
|
22570
|
+
class="val-modal-layout__button"
|
|
22571
|
+
[props]="action"
|
|
22572
|
+
(onClick)="handleAction(action, $index)"
|
|
22573
|
+
/>
|
|
22574
|
+
}
|
|
22575
|
+
<ng-content select="[modal-actions]" />
|
|
22576
|
+
</div>
|
|
22577
|
+
</ion-footer>
|
|
22578
|
+
}
|
|
22579
|
+
`, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0}.val-modal-layout__footer{flex-shrink:0;background:var( --ion-card-background, var(--ion-background-color, #fff) );border-top:1px solid var(--ion-border-color, #e7e4ea)}.val-modal-layout__actions{display:flex;align-items:center;gap:var(--val-modal-footer-gap, 8px);padding:var(--val-modal-footer-padding, 12px 16px);padding-bottom:calc(var(--val-modal-footer-padding-bottom, 12px) + var(--ion-safe-area-bottom, env(safe-area-inset-bottom, 0px)))}.val-modal-layout__actions--start{justify-content:flex-start}.val-modal-layout__actions--center{justify-content:center}.val-modal-layout__actions--end{justify-content:flex-end}.val-modal-layout__actions--space-between{justify-content:space-between}.val-modal-layout__actions--auto,.val-modal-layout__actions--stretch{justify-content:flex-end}.val-modal-layout__actions--auto .val-modal-layout__button,.val-modal-layout__actions--stretch .val-modal-layout__button{flex:1 1 auto;min-width:0;display:block}.val-modal-layout__actions--auto .val-modal-layout__button ::ng-deep ion-button,.val-modal-layout__actions--stretch .val-modal-layout__button ::ng-deep ion-button{width:100%}@media (min-width: 481px){.val-modal-layout__actions--auto .val-modal-layout__button,.val-modal-layout__actions--stretch .val-modal-layout__button{flex:0 0 auto;display:inline-block}.val-modal-layout__actions--auto .val-modal-layout__button ::ng-deep ion-button,.val-modal-layout__actions--stretch .val-modal-layout__button ::ng-deep ion-button{width:auto}}@media (max-width: 480px){.val-modal-layout__actions{padding-left:var(--val-modal-footer-padding-inline-mobile, 16px);padding-right:var(--val-modal-footer-padding-inline-mobile, 16px)}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: ModalShellComponent, selector: "val-modal-shell", inputs: ["title", "subtitle", "closeLabel", "showClose"], outputs: ["close"] }] }); }
|
|
22580
|
+
}
|
|
22581
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ModalLayoutComponent, decorators: [{
|
|
22582
|
+
type: Component,
|
|
22583
|
+
args: [{ selector: 'val-modal-layout', standalone: true, imports: [NgClass, IonFooter, ButtonComponent, ModalShellComponent], template: `
|
|
22584
|
+
<val-modal-shell
|
|
22585
|
+
[title]="title()"
|
|
22586
|
+
[subtitle]="subtitle()"
|
|
22587
|
+
[closeLabel]="closeLabel()"
|
|
22588
|
+
[showClose]="showClose()"
|
|
22589
|
+
(close)="close.emit()"
|
|
22590
|
+
>
|
|
22591
|
+
<ng-content />
|
|
22592
|
+
</val-modal-shell>
|
|
22593
|
+
|
|
22594
|
+
@if (showFooter()) {
|
|
22595
|
+
<ion-footer class="val-modal-layout__footer" [ngClass]="footerClass()">
|
|
22596
|
+
<div
|
|
22597
|
+
class="val-modal-layout__actions"
|
|
22598
|
+
[ngClass]="'val-modal-layout__actions--' + actionsAlign()"
|
|
22599
|
+
>
|
|
22600
|
+
@for (action of actions(); track action.token || action.text || $index) {
|
|
22601
|
+
<val-button
|
|
22602
|
+
class="val-modal-layout__button"
|
|
22603
|
+
[props]="action"
|
|
22604
|
+
(onClick)="handleAction(action, $index)"
|
|
22605
|
+
/>
|
|
22606
|
+
}
|
|
22607
|
+
<ng-content select="[modal-actions]" />
|
|
22608
|
+
</div>
|
|
22609
|
+
</ion-footer>
|
|
22610
|
+
}
|
|
22611
|
+
`, styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0}.val-modal-layout__footer{flex-shrink:0;background:var( --ion-card-background, var(--ion-background-color, #fff) );border-top:1px solid var(--ion-border-color, #e7e4ea)}.val-modal-layout__actions{display:flex;align-items:center;gap:var(--val-modal-footer-gap, 8px);padding:var(--val-modal-footer-padding, 12px 16px);padding-bottom:calc(var(--val-modal-footer-padding-bottom, 12px) + var(--ion-safe-area-bottom, env(safe-area-inset-bottom, 0px)))}.val-modal-layout__actions--start{justify-content:flex-start}.val-modal-layout__actions--center{justify-content:center}.val-modal-layout__actions--end{justify-content:flex-end}.val-modal-layout__actions--space-between{justify-content:space-between}.val-modal-layout__actions--auto,.val-modal-layout__actions--stretch{justify-content:flex-end}.val-modal-layout__actions--auto .val-modal-layout__button,.val-modal-layout__actions--stretch .val-modal-layout__button{flex:1 1 auto;min-width:0;display:block}.val-modal-layout__actions--auto .val-modal-layout__button ::ng-deep ion-button,.val-modal-layout__actions--stretch .val-modal-layout__button ::ng-deep ion-button{width:100%}@media (min-width: 481px){.val-modal-layout__actions--auto .val-modal-layout__button,.val-modal-layout__actions--stretch .val-modal-layout__button{flex:0 0 auto;display:inline-block}.val-modal-layout__actions--auto .val-modal-layout__button ::ng-deep ion-button,.val-modal-layout__actions--stretch .val-modal-layout__button ::ng-deep ion-button{width:auto}}@media (max-width: 480px){.val-modal-layout__actions{padding-left:var(--val-modal-footer-padding-inline-mobile, 16px);padding-right:var(--val-modal-footer-padding-inline-mobile, 16px)}}\n"] }]
|
|
22612
|
+
}] });
|
|
22613
|
+
|
|
22520
22614
|
/**
|
|
22521
22615
|
* Removes diacritical marks (accents) from a string using Unicode normalization.
|
|
22522
22616
|
* Useful for text search and comparison.
|
|
@@ -22529,6 +22623,143 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
22529
22623
|
*/
|
|
22530
22624
|
const replaceSpecialChars = (text) => text.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
|
22531
22625
|
|
|
22626
|
+
/**
|
|
22627
|
+
* Picker de `val-select-search` / `val-multi-select-search` — full-screen en
|
|
22628
|
+
* mobile, card flotante en desktop (`ModalService.openAdaptive`, Regla #5).
|
|
22629
|
+
* Reemplaza el `ion-modal` con breakpoints que ambos componentes tenían
|
|
22630
|
+
* embebido: mismo bottom-sheet en cualquier tamaño de pantalla, sin el
|
|
22631
|
+
* tratamiento "card centrada" que el resto de los modales del factory ya usa.
|
|
22632
|
+
*
|
|
22633
|
+
* Selección simple: cierra al tocar un ítem (`dismiss({values:[v]}, 'selected')`).
|
|
22634
|
+
* Selección múltiple: acumula localmente, footer con "Aplicar" (Regla #5,
|
|
22635
|
+
* val-modal-layout con `actions`).
|
|
22636
|
+
*/
|
|
22637
|
+
class SelectSearchPickerModalComponent {
|
|
22638
|
+
constructor() {
|
|
22639
|
+
this.i18n = inject(I18nService);
|
|
22640
|
+
this.query = signal('');
|
|
22641
|
+
this.selected = signal([]);
|
|
22642
|
+
this.filteredItems = computed(() => {
|
|
22643
|
+
const opts = this.props.options ?? [];
|
|
22644
|
+
const q = replaceSpecialChars(this.query().trim().toLowerCase());
|
|
22645
|
+
if (!q)
|
|
22646
|
+
return opts;
|
|
22647
|
+
return opts.filter(o => {
|
|
22648
|
+
const label = replaceSpecialChars(String(o[this.props.labelProperty] ?? '').toLowerCase());
|
|
22649
|
+
const value = replaceSpecialChars(String(o[this.props.valueProperty] ?? '').toLowerCase());
|
|
22650
|
+
return label.includes(q) || value.includes(q);
|
|
22651
|
+
});
|
|
22652
|
+
});
|
|
22653
|
+
this.footerActions = computed(() => this.props?.multiple
|
|
22654
|
+
? [
|
|
22655
|
+
{
|
|
22656
|
+
text: this.i18n.t('apply'),
|
|
22657
|
+
color: 'primary',
|
|
22658
|
+
shape: 'round',
|
|
22659
|
+
type: 'button',
|
|
22660
|
+
state: 'ENABLED',
|
|
22661
|
+
},
|
|
22662
|
+
]
|
|
22663
|
+
: []);
|
|
22664
|
+
}
|
|
22665
|
+
// NG0600: escribir `selected` desde un `computed`/desde el template (como
|
|
22666
|
+
// hacía `ensureSeeded()` antes) dispara "signal write during template
|
|
22667
|
+
// evaluation" — Ionic ya asignó `componentProps` sobre la instancia antes
|
|
22668
|
+
// de `ngOnInit`, así que sembrar acá es seguro y evita el write lazy.
|
|
22669
|
+
ngOnInit() {
|
|
22670
|
+
if (this.props?.selectedValues?.length) {
|
|
22671
|
+
this.selected.set([...this.props.selectedValues]);
|
|
22672
|
+
}
|
|
22673
|
+
}
|
|
22674
|
+
isSelected(item) {
|
|
22675
|
+
return this.selected().includes(item[this.props.valueProperty]);
|
|
22676
|
+
}
|
|
22677
|
+
toggle(item) {
|
|
22678
|
+
const value = item[this.props.valueProperty];
|
|
22679
|
+
if (!this.props.multiple) {
|
|
22680
|
+
this._modalRef?.dismiss({ values: [value] }, 'selected');
|
|
22681
|
+
return;
|
|
22682
|
+
}
|
|
22683
|
+
const current = this.selected();
|
|
22684
|
+
const idx = current.indexOf(value);
|
|
22685
|
+
this.selected.set(idx === -1 ? [...current, value] : current.filter(v => v !== value));
|
|
22686
|
+
}
|
|
22687
|
+
apply() {
|
|
22688
|
+
this._modalRef?.dismiss({ values: this.selected() }, 'selected');
|
|
22689
|
+
}
|
|
22690
|
+
cancel() {
|
|
22691
|
+
this._modalRef?.dismiss(undefined, 'cancel');
|
|
22692
|
+
}
|
|
22693
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectSearchPickerModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22694
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SelectSearchPickerModalComponent, isStandalone: true, selector: "val-select-search-picker-modal", ngImport: i0, template: `
|
|
22695
|
+
<val-modal-layout
|
|
22696
|
+
[title]="props.title"
|
|
22697
|
+
[closeLabel]="i18n.t('close')"
|
|
22698
|
+
[actions]="footerActions()"
|
|
22699
|
+
actionsAlign="stretch"
|
|
22700
|
+
(close)="cancel()"
|
|
22701
|
+
(actionClick)="apply()"
|
|
22702
|
+
>
|
|
22703
|
+
<div class="ssp-search">
|
|
22704
|
+
<val-searchbar
|
|
22705
|
+
[props]="{ placeholder: props.placeholder || i18n.t('selectOption'), debounce: 200 }"
|
|
22706
|
+
(filterEvent)="query.set($event)"
|
|
22707
|
+
/>
|
|
22708
|
+
</div>
|
|
22709
|
+
|
|
22710
|
+
@if (filteredItems().length === 0) {
|
|
22711
|
+
<p class="ssp-empty">{{ i18n.t('noResults') }}</p>
|
|
22712
|
+
} @else {
|
|
22713
|
+
<ion-list class="ssp-list" lines="none">
|
|
22714
|
+
@for (item of filteredItems(); track item[props.valueProperty]) {
|
|
22715
|
+
<ion-item class="ssp-item" button detail="false" (click)="toggle(item)">
|
|
22716
|
+
<ion-label>{{ item[props.labelProperty] }}</ion-label>
|
|
22717
|
+
@if (isSelected(item)) {
|
|
22718
|
+
<ion-icon name="checkmark-outline" slot="end" color="primary" aria-hidden="true" />
|
|
22719
|
+
}
|
|
22720
|
+
</ion-item>
|
|
22721
|
+
}
|
|
22722
|
+
</ion-list>
|
|
22723
|
+
}
|
|
22724
|
+
</val-modal-layout>
|
|
22725
|
+
`, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0}.ssp-search{margin:0 0 12px}.ssp-list{background:transparent;display:flex;flex-direction:column;gap:6px}.ssp-item{--background: var(--ion-card-background, var(--ion-background-color, #fff));--padding-start: 12px;--padding-end: 12px;--inner-padding-end: 0;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:10px;cursor:pointer}.ssp-empty{text-align:center;color:var(--ion-color-medium, #92949c);font-size:.875rem;margin:24px 0}\n"], dependencies: [{ kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: ModalLayoutComponent, selector: "val-modal-layout", inputs: ["title", "subtitle", "closeLabel", "showClose", "actions", "actionsAlign", "footer", "footerClass"], outputs: ["close", "actionClick"] }, { kind: "component", type: SearchbarComponent, selector: "val-searchbar", inputs: ["preset", "props"], outputs: ["filterEvent", "focusEvent", "blurEvent"] }] }); }
|
|
22726
|
+
}
|
|
22727
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectSearchPickerModalComponent, decorators: [{
|
|
22728
|
+
type: Component,
|
|
22729
|
+
args: [{ selector: 'val-select-search-picker-modal', standalone: true, imports: [IonIcon, IonItem, IonLabel, IonList, ButtonComponent, ModalLayoutComponent, SearchbarComponent], template: `
|
|
22730
|
+
<val-modal-layout
|
|
22731
|
+
[title]="props.title"
|
|
22732
|
+
[closeLabel]="i18n.t('close')"
|
|
22733
|
+
[actions]="footerActions()"
|
|
22734
|
+
actionsAlign="stretch"
|
|
22735
|
+
(close)="cancel()"
|
|
22736
|
+
(actionClick)="apply()"
|
|
22737
|
+
>
|
|
22738
|
+
<div class="ssp-search">
|
|
22739
|
+
<val-searchbar
|
|
22740
|
+
[props]="{ placeholder: props.placeholder || i18n.t('selectOption'), debounce: 200 }"
|
|
22741
|
+
(filterEvent)="query.set($event)"
|
|
22742
|
+
/>
|
|
22743
|
+
</div>
|
|
22744
|
+
|
|
22745
|
+
@if (filteredItems().length === 0) {
|
|
22746
|
+
<p class="ssp-empty">{{ i18n.t('noResults') }}</p>
|
|
22747
|
+
} @else {
|
|
22748
|
+
<ion-list class="ssp-list" lines="none">
|
|
22749
|
+
@for (item of filteredItems(); track item[props.valueProperty]) {
|
|
22750
|
+
<ion-item class="ssp-item" button detail="false" (click)="toggle(item)">
|
|
22751
|
+
<ion-label>{{ item[props.labelProperty] }}</ion-label>
|
|
22752
|
+
@if (isSelected(item)) {
|
|
22753
|
+
<ion-icon name="checkmark-outline" slot="end" color="primary" aria-hidden="true" />
|
|
22754
|
+
}
|
|
22755
|
+
</ion-item>
|
|
22756
|
+
}
|
|
22757
|
+
</ion-list>
|
|
22758
|
+
}
|
|
22759
|
+
</val-modal-layout>
|
|
22760
|
+
`, styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0}.ssp-search{margin:0 0 12px}.ssp-list{background:transparent;display:flex;flex-direction:column;gap:6px}.ssp-item{--background: var(--ion-card-background, var(--ion-background-color, #fff));--padding-start: 12px;--padding-end: 12px;--inner-padding-end: 0;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:10px;cursor:pointer}.ssp-empty{text-align:center;color:var(--ion-color-medium, #92949c);font-size:.875rem;margin:24px 0}\n"] }]
|
|
22761
|
+
}] });
|
|
22762
|
+
|
|
22532
22763
|
/**
|
|
22533
22764
|
* val-select-search
|
|
22534
22765
|
*
|
|
@@ -22549,6 +22780,7 @@ class SelectSearchComponent {
|
|
|
22549
22780
|
this.icon = inject(IconService);
|
|
22550
22781
|
this.changeDetector = inject(ChangeDetectorRef);
|
|
22551
22782
|
this.i18n = inject(I18nService);
|
|
22783
|
+
this.modals = inject(ModalService);
|
|
22552
22784
|
this.searchTerm = '';
|
|
22553
22785
|
this.filteredItems = [];
|
|
22554
22786
|
this.selectedItems = [];
|
|
@@ -22714,90 +22946,43 @@ class SelectSearchComponent {
|
|
|
22714
22946
|
applyDefaultValue() {
|
|
22715
22947
|
applyDefaultValueToControl(this.props);
|
|
22716
22948
|
}
|
|
22717
|
-
onFilter(event) {
|
|
22718
|
-
// If no search term, show all options
|
|
22719
|
-
if (!event || event.trim() === '') {
|
|
22720
|
-
this.filteredItems = this.props?.options ? [...this.props.options] : [];
|
|
22721
|
-
this.changeDetector.detectChanges();
|
|
22722
|
-
return;
|
|
22723
|
-
}
|
|
22724
|
-
// If no options, nothing to filter
|
|
22725
|
-
if (!this.props?.options || this.props.options.length === 0) {
|
|
22726
|
-
this.filteredItems = [];
|
|
22727
|
-
this.changeDetector.detectChanges();
|
|
22728
|
-
return;
|
|
22729
|
-
}
|
|
22730
|
-
// PERF: Avoid repeated replaceSpecialChars and toLowerCase for each option
|
|
22731
|
-
const search = replaceSpecialChars(event.toLowerCase());
|
|
22732
|
-
this.filteredItems = this.props.options.filter(element => {
|
|
22733
|
-
// Only use labelProperty and valueProperty for filtering (faster)
|
|
22734
|
-
const label = element[this.labelProperty]
|
|
22735
|
-
? replaceSpecialChars(String(element[this.labelProperty]).toLowerCase())
|
|
22736
|
-
: '';
|
|
22737
|
-
const value = element[this.valueProperty]
|
|
22738
|
-
? replaceSpecialChars(String(element[this.valueProperty]).toLowerCase())
|
|
22739
|
-
: '';
|
|
22740
|
-
return label.includes(search) || value.includes(search);
|
|
22741
|
-
});
|
|
22742
|
-
this.changeDetector.detectChanges();
|
|
22743
|
-
}
|
|
22744
|
-
onFocus() {
|
|
22745
|
-
console.log('onFocus');
|
|
22746
|
-
}
|
|
22747
|
-
onBlur() {
|
|
22748
|
-
console.log('onBlur');
|
|
22749
|
-
}
|
|
22750
|
-
openModal() {
|
|
22751
|
-
if (this.modal) {
|
|
22752
|
-
this.modal.present();
|
|
22753
|
-
}
|
|
22754
|
-
}
|
|
22755
|
-
preventDefaultBehavior(event) {
|
|
22756
|
-
event.preventDefault();
|
|
22757
|
-
event.stopPropagation();
|
|
22758
|
-
this.openModal();
|
|
22759
|
-
}
|
|
22760
22949
|
/**
|
|
22761
|
-
*
|
|
22762
|
-
*
|
|
22950
|
+
* Abre el picker vía `ModalService.openAdaptive` (Regla #5: full-screen en
|
|
22951
|
+
* mobile, card flotante en desktop) en vez del `ion-modal` con breakpoints
|
|
22952
|
+
* que este componente tenía embebido antes — mismo bottom-sheet en
|
|
22953
|
+
* cualquier tamaño de pantalla, sin el tratamiento de card centrada que ya
|
|
22954
|
+
* usa el resto de los modales del factory. El filtrado, la selección y el
|
|
22955
|
+
* footer "Aplicar" (modo `multiple`) viven en `SelectSearchPickerModalComponent`.
|
|
22763
22956
|
*/
|
|
22764
|
-
|
|
22765
|
-
|
|
22766
|
-
|
|
22767
|
-
|
|
22768
|
-
|
|
22769
|
-
|
|
22770
|
-
|
|
22771
|
-
|
|
22772
|
-
|
|
22773
|
-
|
|
22774
|
-
|
|
22775
|
-
|
|
22776
|
-
|
|
22777
|
-
|
|
22778
|
-
|
|
22779
|
-
|
|
22780
|
-
|
|
22781
|
-
|
|
22782
|
-
|
|
22783
|
-
|
|
22784
|
-
|
|
22785
|
-
|
|
22786
|
-
this.selectedItems.push(item);
|
|
22787
|
-
}
|
|
22788
|
-
else {
|
|
22789
|
-
this.selectedItems.splice(index, 1);
|
|
22790
|
-
}
|
|
22791
|
-
}
|
|
22792
|
-
else {
|
|
22793
|
-
this.selectedItems = [item];
|
|
22794
|
-
this.closeModal();
|
|
22795
|
-
}
|
|
22957
|
+
async openPicker() {
|
|
22958
|
+
const { data, role } = await this.modals.openAdaptive({
|
|
22959
|
+
component: SelectSearchPickerModalComponent,
|
|
22960
|
+
componentProps: {
|
|
22961
|
+
props: {
|
|
22962
|
+
title: this.getLabel(),
|
|
22963
|
+
options: this.props?.options ?? [],
|
|
22964
|
+
valueProperty: this.valueProperty,
|
|
22965
|
+
labelProperty: this.labelProperty,
|
|
22966
|
+
multiple: this.multiple,
|
|
22967
|
+
selectedValues: this.selectedItems.map(item => item[this.valueProperty]),
|
|
22968
|
+
placeholder: this.getPlaceholder(),
|
|
22969
|
+
},
|
|
22970
|
+
},
|
|
22971
|
+
});
|
|
22972
|
+
if (role !== 'selected' || !data)
|
|
22973
|
+
return;
|
|
22974
|
+
const values = data.values ?? [];
|
|
22975
|
+
const options = this.props?.options ?? [];
|
|
22976
|
+
this.selectedItems = values
|
|
22977
|
+
.map(v => options.find(o => o[this.valueProperty] === v))
|
|
22978
|
+
.filter((o) => !!o);
|
|
22796
22979
|
this.updateDisplayValue();
|
|
22797
22980
|
this.applyChanges();
|
|
22798
22981
|
}
|
|
22799
|
-
|
|
22800
|
-
|
|
22982
|
+
preventDefaultBehavior(event) {
|
|
22983
|
+
event.preventDefault();
|
|
22984
|
+
event.stopPropagation();
|
|
22985
|
+
void this.openPicker();
|
|
22801
22986
|
}
|
|
22802
22987
|
updateDisplayValue() {
|
|
22803
22988
|
if (this.props?.mode === 'legacy' && this.selectedItems.length === 0 && this.props?.control?.value) {
|
|
@@ -22849,7 +23034,7 @@ class SelectSearchComponent {
|
|
|
22849
23034
|
this.changeDetector.detectChanges();
|
|
22850
23035
|
}
|
|
22851
23036
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22852
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SelectSearchComponent, isStandalone: true, selector: "val-select-search", inputs: { label: "label", labelProperty: "labelProperty", valueProperty: "valueProperty", multiple: "multiple", placeholder: "placeholder", props: "props" },
|
|
23037
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SelectSearchComponent, isStandalone: true, selector: "val-select-search", inputs: { label: "label", labelProperty: "labelProperty", valueProperty: "valueProperty", multiple: "multiple", placeholder: "placeholder", props: "props" }, usesOnChanges: true, ngImport: i0, template: `
|
|
22853
23038
|
<label *ngIf="displayLabel" class="vss-label">{{ displayLabel }}</label>
|
|
22854
23039
|
|
|
22855
23040
|
<ion-input
|
|
@@ -22861,44 +23046,11 @@ class SelectSearchComponent {
|
|
|
22861
23046
|
/>
|
|
22862
23047
|
|
|
22863
23048
|
<ion-input style="position: absolute;" [formControl]="props.control" type="hidden"></ion-input>
|
|
22864
|
-
|
|
22865
|
-
<ion-modal #modal [initialBreakpoint]="1" [breakpoints]="[0, 0.5, 0.75, 1]" (didDismiss)="resetState()">
|
|
22866
|
-
<ng-template>
|
|
22867
|
-
<ion-header>
|
|
22868
|
-
<ion-toolbar>
|
|
22869
|
-
<ion-title>{{ getLabel() }}</ion-title>
|
|
22870
|
-
<ion-buttons slot="end">
|
|
22871
|
-
<ion-button (click)="cancelModal()">{{ getCloseText() }}</ion-button>
|
|
22872
|
-
</ion-buttons>
|
|
22873
|
-
</ion-toolbar>
|
|
22874
|
-
<ion-toolbar>
|
|
22875
|
-
<val-searchbar (filterEvent)="onFilter($event)" (focusEvent)="onFocus()" (blurEvent)="onBlur()" />
|
|
22876
|
-
</ion-toolbar>
|
|
22877
|
-
</ion-header>
|
|
22878
|
-
<ion-content>
|
|
22879
|
-
<ion-list>
|
|
22880
|
-
<ion-item *ngFor="let item of filteredItems" button (click)="selectItem(item)" detail="false">
|
|
22881
|
-
<ion-label>{{ item[labelProperty] }}</ion-label>
|
|
22882
|
-
<ion-icon
|
|
22883
|
-
*ngIf="isItemSelected(item)"
|
|
22884
|
-
name="checkmark-outline"
|
|
22885
|
-
slot="end"
|
|
22886
|
-
color="primary"
|
|
22887
|
-
aria-hidden="true"
|
|
22888
|
-
></ion-icon>
|
|
22889
|
-
</ion-item>
|
|
22890
|
-
<ion-item *ngIf="filteredItems.length === 0" lines="none">
|
|
22891
|
-
<ion-label color="dark">{{ getNoResultsText() }}</ion-label>
|
|
22892
|
-
</ion-item>
|
|
22893
|
-
</ion-list>
|
|
22894
|
-
</ion-content>
|
|
22895
|
-
</ng-template>
|
|
22896
|
-
</ion-modal>
|
|
22897
|
-
`, isInline: true, styles: [":host{display:block}.vss-label{display:block;margin-bottom:4px;font-size:.8125rem;color:var(--ion-color-dark, #43464d)}ion-header{padding:8px 8px 0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.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: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearInputIcon", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonModal, selector: "ion-modal" }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-input-otp[type=text],ion-textarea,ion-searchbar" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: SearchbarComponent, selector: "val-searchbar", inputs: ["preset", "props"], outputs: ["filterEvent", "focusEvent", "blurEvent"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$8.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] }); }
|
|
23049
|
+
`, isInline: true, styles: [":host{display:block}.vss-label{display:block;margin-bottom:4px;font-size:.8125rem;color:var(--ion-color-dark, #43464d)}ion-header{padding:8px 8px 0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearInputIcon", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "spellcheck", "step", "type", "value"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-input-otp[type=text],ion-textarea,ion-searchbar" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$8.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] }); }
|
|
22898
23050
|
}
|
|
22899
23051
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectSearchComponent, decorators: [{
|
|
22900
23052
|
type: Component,
|
|
22901
|
-
args: [{ selector: 'val-select-search', standalone: true, imports: [CommonModule, IonicModule, FormsModule,
|
|
23053
|
+
args: [{ selector: 'val-select-search', standalone: true, imports: [CommonModule, IonicModule, FormsModule, ReactiveFormsModule], template: `
|
|
22902
23054
|
<label *ngIf="displayLabel" class="vss-label">{{ displayLabel }}</label>
|
|
22903
23055
|
|
|
22904
23056
|
<ion-input
|
|
@@ -22910,44 +23062,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
22910
23062
|
/>
|
|
22911
23063
|
|
|
22912
23064
|
<ion-input style="position: absolute;" [formControl]="props.control" type="hidden"></ion-input>
|
|
22913
|
-
|
|
22914
|
-
<ion-modal #modal [initialBreakpoint]="1" [breakpoints]="[0, 0.5, 0.75, 1]" (didDismiss)="resetState()">
|
|
22915
|
-
<ng-template>
|
|
22916
|
-
<ion-header>
|
|
22917
|
-
<ion-toolbar>
|
|
22918
|
-
<ion-title>{{ getLabel() }}</ion-title>
|
|
22919
|
-
<ion-buttons slot="end">
|
|
22920
|
-
<ion-button (click)="cancelModal()">{{ getCloseText() }}</ion-button>
|
|
22921
|
-
</ion-buttons>
|
|
22922
|
-
</ion-toolbar>
|
|
22923
|
-
<ion-toolbar>
|
|
22924
|
-
<val-searchbar (filterEvent)="onFilter($event)" (focusEvent)="onFocus()" (blurEvent)="onBlur()" />
|
|
22925
|
-
</ion-toolbar>
|
|
22926
|
-
</ion-header>
|
|
22927
|
-
<ion-content>
|
|
22928
|
-
<ion-list>
|
|
22929
|
-
<ion-item *ngFor="let item of filteredItems" button (click)="selectItem(item)" detail="false">
|
|
22930
|
-
<ion-label>{{ item[labelProperty] }}</ion-label>
|
|
22931
|
-
<ion-icon
|
|
22932
|
-
*ngIf="isItemSelected(item)"
|
|
22933
|
-
name="checkmark-outline"
|
|
22934
|
-
slot="end"
|
|
22935
|
-
color="primary"
|
|
22936
|
-
aria-hidden="true"
|
|
22937
|
-
></ion-icon>
|
|
22938
|
-
</ion-item>
|
|
22939
|
-
<ion-item *ngIf="filteredItems.length === 0" lines="none">
|
|
22940
|
-
<ion-label color="dark">{{ getNoResultsText() }}</ion-label>
|
|
22941
|
-
</ion-item>
|
|
22942
|
-
</ion-list>
|
|
22943
|
-
</ion-content>
|
|
22944
|
-
</ng-template>
|
|
22945
|
-
</ion-modal>
|
|
22946
23065
|
`, styles: [":host{display:block}.vss-label{display:block;margin-bottom:4px;font-size:.8125rem;color:var(--ion-color-dark, #43464d)}ion-header{padding:8px 8px 0}\n"] }]
|
|
22947
|
-
}], propDecorators: {
|
|
22948
|
-
type: ViewChild,
|
|
22949
|
-
args: ['modal']
|
|
22950
|
-
}], label: [{
|
|
23066
|
+
}], propDecorators: { label: [{
|
|
22951
23067
|
type: Input
|
|
22952
23068
|
}], labelProperty: [{
|
|
22953
23069
|
type: Input
|
|
@@ -38468,100 +38584,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
38468
38584
|
type: Output
|
|
38469
38585
|
}] } });
|
|
38470
38586
|
|
|
38471
|
-
/**
|
|
38472
|
-
* Layout canonico para modales con body scrolleable y footer de acciones fijo.
|
|
38473
|
-
*
|
|
38474
|
-
* Usalo dentro de componentes abiertos via `ModalService.open(...)` cuando el
|
|
38475
|
-
* contenido pueda crecer y el CTA deba quedar siempre visible. El header/body
|
|
38476
|
-
* delegan en `val-modal-shell`; el footer queda fuera del `ion-content`, como
|
|
38477
|
-
* sibling, para evitar problemas de scroll.
|
|
38478
|
-
*/
|
|
38479
|
-
class ModalLayoutComponent {
|
|
38480
|
-
constructor() {
|
|
38481
|
-
this.title = input('');
|
|
38482
|
-
this.subtitle = input('');
|
|
38483
|
-
this.closeLabel = input('');
|
|
38484
|
-
this.showClose = input(true);
|
|
38485
|
-
this.actions = input([]);
|
|
38486
|
-
/**
|
|
38487
|
-
* Alineación del footer. **No pasarlo**: el default `auto` ya da el
|
|
38488
|
-
* comportamiento correcto (CTA full-width en mobile, a la derecha en desktop).
|
|
38489
|
-
* Ver ModalActionAlignment antes de elegir otro valor.
|
|
38490
|
-
*/
|
|
38491
|
-
this.actionsAlign = input('auto');
|
|
38492
|
-
this.footer = input(undefined);
|
|
38493
|
-
this.footerClass = input('');
|
|
38494
|
-
this.close = output();
|
|
38495
|
-
this.actionClick = output();
|
|
38496
|
-
this.showFooter = computed(() => this.footer() ?? this.actions().length > 0);
|
|
38497
|
-
}
|
|
38498
|
-
handleAction(action, index) {
|
|
38499
|
-
this.actionClick.emit({ action, index });
|
|
38500
|
-
}
|
|
38501
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ModalLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
38502
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ModalLayoutComponent, isStandalone: true, selector: "val-modal-layout", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, closeLabel: { classPropertyName: "closeLabel", publicName: "closeLabel", isSignal: true, isRequired: false, transformFunction: null }, showClose: { classPropertyName: "showClose", publicName: "showClose", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, actionsAlign: { classPropertyName: "actionsAlign", publicName: "actionsAlign", isSignal: true, isRequired: false, transformFunction: null }, footer: { classPropertyName: "footer", publicName: "footer", isSignal: true, isRequired: false, transformFunction: null }, footerClass: { classPropertyName: "footerClass", publicName: "footerClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { close: "close", actionClick: "actionClick" }, ngImport: i0, template: `
|
|
38503
|
-
<val-modal-shell
|
|
38504
|
-
[title]="title()"
|
|
38505
|
-
[subtitle]="subtitle()"
|
|
38506
|
-
[closeLabel]="closeLabel()"
|
|
38507
|
-
[showClose]="showClose()"
|
|
38508
|
-
(close)="close.emit()"
|
|
38509
|
-
>
|
|
38510
|
-
<ng-content />
|
|
38511
|
-
</val-modal-shell>
|
|
38512
|
-
|
|
38513
|
-
@if (showFooter()) {
|
|
38514
|
-
<ion-footer class="val-modal-layout__footer" [ngClass]="footerClass()">
|
|
38515
|
-
<div
|
|
38516
|
-
class="val-modal-layout__actions"
|
|
38517
|
-
[ngClass]="'val-modal-layout__actions--' + actionsAlign()"
|
|
38518
|
-
>
|
|
38519
|
-
@for (action of actions(); track action.token || action.text || $index) {
|
|
38520
|
-
<val-button
|
|
38521
|
-
class="val-modal-layout__button"
|
|
38522
|
-
[props]="action"
|
|
38523
|
-
(onClick)="handleAction(action, $index)"
|
|
38524
|
-
/>
|
|
38525
|
-
}
|
|
38526
|
-
<ng-content select="[modal-actions]" />
|
|
38527
|
-
</div>
|
|
38528
|
-
</ion-footer>
|
|
38529
|
-
}
|
|
38530
|
-
`, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0}.val-modal-layout__footer{flex-shrink:0;background:var( --ion-card-background, var(--ion-background-color, #fff) );border-top:1px solid var(--ion-border-color, #e7e4ea)}.val-modal-layout__actions{display:flex;align-items:center;gap:var(--val-modal-footer-gap, 8px);padding:var(--val-modal-footer-padding, 12px 16px);padding-bottom:calc(var(--val-modal-footer-padding-bottom, 12px) + var(--ion-safe-area-bottom, env(safe-area-inset-bottom, 0px)))}.val-modal-layout__actions--start{justify-content:flex-start}.val-modal-layout__actions--center{justify-content:center}.val-modal-layout__actions--end{justify-content:flex-end}.val-modal-layout__actions--space-between{justify-content:space-between}.val-modal-layout__actions--auto,.val-modal-layout__actions--stretch{justify-content:flex-end}.val-modal-layout__actions--auto .val-modal-layout__button,.val-modal-layout__actions--stretch .val-modal-layout__button{flex:1 1 auto;min-width:0;display:block}.val-modal-layout__actions--auto .val-modal-layout__button ::ng-deep ion-button,.val-modal-layout__actions--stretch .val-modal-layout__button ::ng-deep ion-button{width:100%}@media (min-width: 481px){.val-modal-layout__actions--auto .val-modal-layout__button,.val-modal-layout__actions--stretch .val-modal-layout__button{flex:0 0 auto;display:inline-block}.val-modal-layout__actions--auto .val-modal-layout__button ::ng-deep ion-button,.val-modal-layout__actions--stretch .val-modal-layout__button ::ng-deep ion-button{width:auto}}@media (max-width: 480px){.val-modal-layout__actions{padding-left:var(--val-modal-footer-padding-inline-mobile, 16px);padding-right:var(--val-modal-footer-padding-inline-mobile, 16px)}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: ModalShellComponent, selector: "val-modal-shell", inputs: ["title", "subtitle", "closeLabel", "showClose"], outputs: ["close"] }] }); }
|
|
38531
|
-
}
|
|
38532
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ModalLayoutComponent, decorators: [{
|
|
38533
|
-
type: Component,
|
|
38534
|
-
args: [{ selector: 'val-modal-layout', standalone: true, imports: [NgClass, IonFooter, ButtonComponent, ModalShellComponent], template: `
|
|
38535
|
-
<val-modal-shell
|
|
38536
|
-
[title]="title()"
|
|
38537
|
-
[subtitle]="subtitle()"
|
|
38538
|
-
[closeLabel]="closeLabel()"
|
|
38539
|
-
[showClose]="showClose()"
|
|
38540
|
-
(close)="close.emit()"
|
|
38541
|
-
>
|
|
38542
|
-
<ng-content />
|
|
38543
|
-
</val-modal-shell>
|
|
38544
|
-
|
|
38545
|
-
@if (showFooter()) {
|
|
38546
|
-
<ion-footer class="val-modal-layout__footer" [ngClass]="footerClass()">
|
|
38547
|
-
<div
|
|
38548
|
-
class="val-modal-layout__actions"
|
|
38549
|
-
[ngClass]="'val-modal-layout__actions--' + actionsAlign()"
|
|
38550
|
-
>
|
|
38551
|
-
@for (action of actions(); track action.token || action.text || $index) {
|
|
38552
|
-
<val-button
|
|
38553
|
-
class="val-modal-layout__button"
|
|
38554
|
-
[props]="action"
|
|
38555
|
-
(onClick)="handleAction(action, $index)"
|
|
38556
|
-
/>
|
|
38557
|
-
}
|
|
38558
|
-
<ng-content select="[modal-actions]" />
|
|
38559
|
-
</div>
|
|
38560
|
-
</ion-footer>
|
|
38561
|
-
}
|
|
38562
|
-
`, styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0}.val-modal-layout__footer{flex-shrink:0;background:var( --ion-card-background, var(--ion-background-color, #fff) );border-top:1px solid var(--ion-border-color, #e7e4ea)}.val-modal-layout__actions{display:flex;align-items:center;gap:var(--val-modal-footer-gap, 8px);padding:var(--val-modal-footer-padding, 12px 16px);padding-bottom:calc(var(--val-modal-footer-padding-bottom, 12px) + var(--ion-safe-area-bottom, env(safe-area-inset-bottom, 0px)))}.val-modal-layout__actions--start{justify-content:flex-start}.val-modal-layout__actions--center{justify-content:center}.val-modal-layout__actions--end{justify-content:flex-end}.val-modal-layout__actions--space-between{justify-content:space-between}.val-modal-layout__actions--auto,.val-modal-layout__actions--stretch{justify-content:flex-end}.val-modal-layout__actions--auto .val-modal-layout__button,.val-modal-layout__actions--stretch .val-modal-layout__button{flex:1 1 auto;min-width:0;display:block}.val-modal-layout__actions--auto .val-modal-layout__button ::ng-deep ion-button,.val-modal-layout__actions--stretch .val-modal-layout__button ::ng-deep ion-button{width:100%}@media (min-width: 481px){.val-modal-layout__actions--auto .val-modal-layout__button,.val-modal-layout__actions--stretch .val-modal-layout__button{flex:0 0 auto;display:inline-block}.val-modal-layout__actions--auto .val-modal-layout__button ::ng-deep ion-button,.val-modal-layout__actions--stretch .val-modal-layout__button ::ng-deep ion-button{width:auto}}@media (max-width: 480px){.val-modal-layout__actions{padding-left:var(--val-modal-footer-padding-inline-mobile, 16px);padding-right:var(--val-modal-footer-padding-inline-mobile, 16px)}}\n"] }]
|
|
38563
|
-
}] });
|
|
38564
|
-
|
|
38565
38587
|
/**
|
|
38566
38588
|
* Configuración de espaciado predefinida
|
|
38567
38589
|
*/
|
|
@@ -89621,5 +89643,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
89621
89643
|
* Generated bundle index. Do not edit.
|
|
89622
89644
|
*/
|
|
89623
89645
|
|
|
89624
|
-
export { ACCESS_REQUEST_TYPE, ACCESS_REQUEST_VIEW_I18N, 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, AccessControlService, AccessRequestViewComponent, AccordionComponent, AccountViewComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimalCardComponent, AnimatedTerminalComponent, ApiKeyCreateModalComponent, ApiKeyService, ApiKeysModalComponent, ApiKeysViewComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleCardComponent, ArticleComponent, ArticleStripComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthCtaComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BackButtonComponent, BannerComponent, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, BubbleBlitzGameComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CORNER_KEYS, CTA_CARD_DEFAULTS, CURRENCY_INFO, CanAccessDirective, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, ChatComposerComponent, ChatInputComponent, ChatWindowComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, ChipSelectComponent, ClientTelemetryService, CodeDisplayComponent, CodeValidatorComponent, CollectionsService, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ConfirmationDialogV2Component, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentReactionModalComponent, ContentService, ContentTransformer, ConversationListItemComponent, ConversationService, CookieBannerComponent, CookieSettingsComponent, CountdownComponent, CreateOrgModalComponent, CtaCardComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_BUTTON_PRESETS, DEFAULT_CANCEL_BUTTON, DEFAULT_CANONICAL_FIELD_ALIASES, 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, DangerSectionComponent, DataTableComponent, DatasetPaginationService, 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, EXPECTED_NOT_FOUND, EditOrgModalComponent, EmptyStateComponent, EntityCardComponent, EntityFeedService, EntradaSerializada, ExpandableTextComponent, ExternalBrowserService, FEATURES_LIST_DEFAULTS, FUN_MODAL_DEFAULTS, FabComponent, FaqComponent, FeatureControlService, FeatureGuardDirective, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FieldListComponent, FieldOptionsEditorComponent, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FolderTabsComponent, FontSizeOption, FontSizeSelectorComponent, FontSizeService, FooterComponent, FooterLinksComponent, FormComponent, FormFieldComponent, FormSchemaBuilderService, FormSkeletonComponent, FunHeaderComponent, FunModalComponent, GAME_AVATAR_CATALOG_SIZE_PER_STYLE, GameAvatarComponent, GameProfileService, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, GroupMembersComponent, GroupPickerComponent, GroupsService, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandleService, HandoffService, HapticsService, HasPermissionDirective, HeaderActionsService, HeaderComponent, HintComponent, HorizontalScrollComponent, HrefComponent, HtmlViewerModalComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, INVITATION_CARD_DEFAULTS, IONIC_COLORS$5 as IONIC_COLORS, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, InvitationCardComponent, InviteMemberModalComponent, ItemListComponent, KNOWN_ROUTES, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGGED_IN_HINT_COOKIE, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LanguageSelectorV2Component, LayeredCardComponent, LegalContentService, LegalLinkService, LightRippleDirective, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LiveReadFallbackService, LoadMoreComponent, LoadingDirective, LocalStorageService, LocaleService, LoginAttemptModalComponent, LoginComponent, MEDIA_OBJECT_DEFAULTS, MEMBER_CARD_DEFAULTS, METADATA_LIST_DEFAULTS, META_SCHEMA_VERSION, METRIC_CARD_DEFAULTS, MINI_GAMES_I18N, MINI_GAME_PLAYER_AVATARS, MINI_GAME_PLAYER_COLORS, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MediaObjectComponent, MediaViewerModalComponent, MemberCardComponent, MemberDetailModalComponent, MemberImportModalComponent, MemoryGameComponent, MenuComponent, MessageBubbleComponent, MessagingService, MetaService, MetadataListComponent, MeteringService, MetricCardComponent, MfaModalComponent, MiniGameCalloutComponent, MiniGamePlayerProfileService, MiniGameScorePopComponent, MiniGamesMenuComponent, ModalLayoutComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NoticeComponent, NotificationActionService, NotificationPreferencesViewComponent, NotificationsService, NotificationsViewComponent, NumberFromToComponent, NumberPickerComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OperationReferenceComponent, OptionCardsComponent, OptionSheetComponent, OptionSheetService, OrgInfoSheetComponent, OrgService, OrgSwitchService, OrganizationViewComponent, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PERSONA_CONFIG, PLATFORM_CONFIGS, POST_UPDATE_TS_KEY, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PdfService, PermissionCatalogService, PermissionSelectorComponent, PermissionsModalComponent, PermissionsViewComponent, PersonaService, PhoneDisplayComponent, PhoneFormatService, PhoneInputComponent, PickerV2Component, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PreferencesViewComponent, PresetService, PriceTagComponent, PricingTableComponent, ProcessLinksPipe, ProfileCardComponent, ProfileContentComponent, ProfileModalComponent, ProfileSkeletonComponent, ProfileViewComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrBrandValidationError, QrCodeComponent, QrGeneratorService, QrScannerComponent, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, RbacService, ReactionBarComponent, ReactionsService, RefresherComponent, RequestFirestoreService, RequestFormBuilderService, RequestFormComponent, RequestModalComponent, RequestReviewPanelComponent, RequestService, RetroAudioService, RightsFooterComponent, RoleManagerComponent, 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, SessionTransitionOverlayComponent, SettingsHubComponent, ShareButtonsComponent, ShareProfileModalComponent, SimonGameComponent, SimpleComponent, SkeletonComponent, SkeletonLayoutComponent, SkeletonService, SplashComponent, SplashScreenService, StatsBarComponent, StatsCardComponent, StepperComponent, StorageService, SupportTicketCtaComponent, SwipeCarouselComponent, SwitchOrgModalComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeSelectorComponent, ThemeService, ThreadPanelComponent, TicketCardComponent, TicketCardImageService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TransferOwnershipModalComponent, TranslatePipe, TypedCollection, TypingIndicatorComponent, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UsageMetersComponent, UsageService, UserAvatarComponent, UsernameInputComponent, VALTECH_ACCESS_FEATURES, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_CHAT_CONFIG, VALTECH_COLLECTIONS_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_CONTENT_CONFIG, VALTECH_COPYRIGHT_TEMPLATE, VALTECH_DEBUG_CONSOLE, VALTECH_DEFAULT_CONTENT, VALTECH_DIAGRAMS, VALTECH_DONATION_CONFIG, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_LEGAL_ENTITY, VALTECH_MENU_I18N, 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, VAL_REGISTERED_ICONS, VERSION, ValCommentThreadComponent, ValQuotaWarningComponent, ValtechErrorService, VerifyViewComponent, WhatsappFabComponent, WhatsappService, WizardComponent, WizardFooterComponent, WorkflowService, accessGuard, accessGuardFromRoute, applyDefaultValueToControl, authGuard, authInterceptor, authPasswordValidator, beautifyLegalArticle, blogPost, buildCompanyFooterProps, buildFooterLinks, buildLegalLinkResolver, buildPath, buildPlatformMenu, buildSettingsCards, buildSideNavItemsFromBottomNav, button, canSubmitRequestType, classifyChip, collections, connectPageRefresh, createErrorStateProps, createFirebaseConfig, createGameAvatarCatalog, createGameAvatarProps, createGlowCardProps, createInitialDatasetState, createInitialPaginationState, createNumberFromToField, createPageState, createPermissionLabeler, createRefreshableStream, createTitleProps, datasetPageFromLegacyCursor, defaultQrBrand, docs, errorLoggingInterceptor, evaluateValtechAccess, extractPathParams, firmaDeSesionDeCustomToken, formatClockTime, formatDateSeparator, formatRelativeTime, gameAvatarCatalogEntryToMetadata, gameAvatarDataUri, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, groupPermissionsByScope, guestGuard, hasEmulators, iconButton, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isIonicColor, isKnownRoute, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, providePersona, provideSplashScreen, provideValtechAboutRoutes, provideValtechAccessFeatures, provideValtechAccountRoutes, provideValtechAds, provideValtechApiKeysRoutes, provideValtechAppConfig, provideValtechAppVersion, provideValtechAppVersionHttp, provideValtechAuth, provideValtechAuthInterceptor, provideValtechChat, provideValtechCollections, provideValtechContent, provideValtechDebugConsole, provideValtechDiagrams, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechNotificationClickActions, provideValtechNotificationPreferencesRoutes, provideValtechNotificationsRoutes, provideValtechOrganizationRoutes, provideValtechPermissionsRoutes, provideValtechPreferencesRoutes, provideValtechPresets, provideValtechProfileRoutes, provideValtechReactions, provideValtechSecurityRoutes, provideValtechSettingsRoutes, provideValtechSite, provideValtechSkeleton, provideValtechWhatsapp, qrContrastRatio, qrErrorCorrectionFor, query, rbacGuard, renderGameAvatarSvg, renderPatternSvgInner, replaceSpecialChars, requestSubmitMode, resolveColor, resolveCopyrightTemplate, resolveInputDefaultValue, resolveIonicColor, resolveWebBaseUrl, roleGuard, roleOf, selectableRequestTypes, storagePaths, suggestEmailFix, superAdminGuard, supportedGameAvatarStyles, toArticle, validateQrBrand, validateRoutes };
|
|
89646
|
+
export { ACCESS_REQUEST_TYPE, ACCESS_REQUEST_VIEW_I18N, 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, AccessControlService, AccessRequestViewComponent, AccordionComponent, AccountViewComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimalCardComponent, AnimatedTerminalComponent, ApiKeyCreateModalComponent, ApiKeyService, ApiKeysModalComponent, ApiKeysViewComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleCardComponent, ArticleComponent, ArticleStripComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthCtaComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BackButtonComponent, BannerComponent, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, BubbleBlitzGameComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CORNER_KEYS, CTA_CARD_DEFAULTS, CURRENCY_INFO, CanAccessDirective, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, ChatComposerComponent, ChatInputComponent, ChatWindowComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, ChipSelectComponent, ClientTelemetryService, CodeDisplayComponent, CodeValidatorComponent, CollectionsService, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ConfirmationDialogV2Component, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentReactionModalComponent, ContentService, ContentTransformer, ConversationListItemComponent, ConversationService, CookieBannerComponent, CookieSettingsComponent, CountdownComponent, CreateOrgModalComponent, CtaCardComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_BUTTON_PRESETS, DEFAULT_CANCEL_BUTTON, DEFAULT_CANONICAL_FIELD_ALIASES, 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, DangerSectionComponent, DataTableComponent, DatasetPaginationService, 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, EXPECTED_NOT_FOUND, EditOrgModalComponent, EmptyStateComponent, EntityCardComponent, EntityFeedService, EntradaSerializada, ExpandableTextComponent, ExternalBrowserService, FEATURES_LIST_DEFAULTS, FUN_MODAL_DEFAULTS, FabComponent, FaqComponent, FeatureControlService, FeatureGuardDirective, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FieldListComponent, FieldOptionsEditorComponent, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FolderTabsComponent, FontSizeOption, FontSizeSelectorComponent, FontSizeService, FooterComponent, FooterLinksComponent, FormComponent, FormFieldComponent, FormSchemaBuilderService, FormSkeletonComponent, FunHeaderComponent, FunModalComponent, GAME_AVATAR_CATALOG_SIZE_PER_STYLE, GameAvatarComponent, GameProfileService, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, GroupMembersComponent, GroupPickerComponent, GroupsService, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandleService, HandoffService, HapticsService, HasPermissionDirective, HeaderActionsService, HeaderComponent, HintComponent, HorizontalScrollComponent, HrefComponent, HtmlViewerModalComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, INVITATION_CARD_DEFAULTS, IONIC_COLORS$5 as IONIC_COLORS, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, InvitationCardComponent, InviteMemberModalComponent, ItemListComponent, KNOWN_ROUTES, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGGED_IN_HINT_COOKIE, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LanguageSelectorV2Component, LayeredCardComponent, LegalContentService, LegalLinkService, LightRippleDirective, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LiveReadFallbackService, LoadMoreComponent, LoadingDirective, LocalStorageService, LocaleService, LoginAttemptModalComponent, LoginComponent, MEDIA_OBJECT_DEFAULTS, MEMBER_CARD_DEFAULTS, METADATA_LIST_DEFAULTS, META_SCHEMA_VERSION, METRIC_CARD_DEFAULTS, MINI_GAMES_I18N, MINI_GAME_PLAYER_AVATARS, MINI_GAME_PLAYER_COLORS, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MediaObjectComponent, MediaViewerModalComponent, MemberCardComponent, MemberDetailModalComponent, MemberImportModalComponent, MemoryGameComponent, MenuComponent, MessageBubbleComponent, MessagingService, MetaService, MetadataListComponent, MeteringService, MetricCardComponent, MfaModalComponent, MiniGameCalloutComponent, MiniGamePlayerProfileService, MiniGameScorePopComponent, MiniGamesMenuComponent, ModalLayoutComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NoticeComponent, NotificationActionService, NotificationPreferencesViewComponent, NotificationsService, NotificationsViewComponent, NumberFromToComponent, NumberPickerComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OperationReferenceComponent, OptionCardsComponent, OptionSheetComponent, OptionSheetService, OrgInfoSheetComponent, OrgService, OrgSwitchService, OrganizationViewComponent, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PERSONA_CONFIG, PLATFORM_CONFIGS, POST_UPDATE_TS_KEY, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PdfService, PermissionCatalogService, PermissionSelectorComponent, PermissionsModalComponent, PermissionsViewComponent, PersonaService, PhoneDisplayComponent, PhoneFormatService, PhoneInputComponent, PickerV2Component, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PreferencesViewComponent, PresetService, PriceTagComponent, PricingTableComponent, ProcessLinksPipe, ProfileCardComponent, ProfileContentComponent, ProfileModalComponent, ProfileSkeletonComponent, ProfileViewComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrBrandValidationError, QrCodeComponent, QrGeneratorService, QrScannerComponent, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, RbacService, ReactionBarComponent, ReactionsService, RefresherComponent, RequestFirestoreService, RequestFormBuilderService, RequestFormComponent, RequestModalComponent, RequestReviewPanelComponent, RequestService, RetroAudioService, RightsFooterComponent, RoleManagerComponent, 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, SelectSearchPickerModalComponent, SessionListModalComponent, SessionService, SessionTransitionOverlayComponent, SettingsHubComponent, ShareButtonsComponent, ShareProfileModalComponent, SimonGameComponent, SimpleComponent, SkeletonComponent, SkeletonLayoutComponent, SkeletonService, SplashComponent, SplashScreenService, StatsBarComponent, StatsCardComponent, StepperComponent, StorageService, SupportTicketCtaComponent, SwipeCarouselComponent, SwitchOrgModalComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeSelectorComponent, ThemeService, ThreadPanelComponent, TicketCardComponent, TicketCardImageService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TransferOwnershipModalComponent, TranslatePipe, TypedCollection, TypingIndicatorComponent, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UsageMetersComponent, UsageService, UserAvatarComponent, UsernameInputComponent, VALTECH_ACCESS_FEATURES, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_CHAT_CONFIG, VALTECH_COLLECTIONS_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_CONTENT_CONFIG, VALTECH_COPYRIGHT_TEMPLATE, VALTECH_DEBUG_CONSOLE, VALTECH_DEFAULT_CONTENT, VALTECH_DIAGRAMS, VALTECH_DONATION_CONFIG, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_LEGAL_ENTITY, VALTECH_MENU_I18N, 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, VAL_REGISTERED_ICONS, VERSION, ValCommentThreadComponent, ValQuotaWarningComponent, ValtechErrorService, VerifyViewComponent, WhatsappFabComponent, WhatsappService, WizardComponent, WizardFooterComponent, WorkflowService, accessGuard, accessGuardFromRoute, applyDefaultValueToControl, authGuard, authInterceptor, authPasswordValidator, beautifyLegalArticle, blogPost, buildCompanyFooterProps, buildFooterLinks, buildLegalLinkResolver, buildPath, buildPlatformMenu, buildSettingsCards, buildSideNavItemsFromBottomNav, button, canSubmitRequestType, classifyChip, collections, connectPageRefresh, createErrorStateProps, createFirebaseConfig, createGameAvatarCatalog, createGameAvatarProps, createGlowCardProps, createInitialDatasetState, createInitialPaginationState, createNumberFromToField, createPageState, createPermissionLabeler, createRefreshableStream, createTitleProps, datasetPageFromLegacyCursor, defaultQrBrand, docs, errorLoggingInterceptor, evaluateValtechAccess, extractPathParams, firmaDeSesionDeCustomToken, formatClockTime, formatDateSeparator, formatRelativeTime, gameAvatarCatalogEntryToMetadata, gameAvatarDataUri, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, groupPermissionsByScope, guestGuard, hasEmulators, iconButton, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isIonicColor, isKnownRoute, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, providePersona, provideSplashScreen, provideValtechAboutRoutes, provideValtechAccessFeatures, provideValtechAccountRoutes, provideValtechAds, provideValtechApiKeysRoutes, provideValtechAppConfig, provideValtechAppVersion, provideValtechAppVersionHttp, provideValtechAuth, provideValtechAuthInterceptor, provideValtechChat, provideValtechCollections, provideValtechContent, provideValtechDebugConsole, provideValtechDiagrams, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechNotificationClickActions, provideValtechNotificationPreferencesRoutes, provideValtechNotificationsRoutes, provideValtechOrganizationRoutes, provideValtechPermissionsRoutes, provideValtechPreferencesRoutes, provideValtechPresets, provideValtechProfileRoutes, provideValtechReactions, provideValtechSecurityRoutes, provideValtechSettingsRoutes, provideValtechSite, provideValtechSkeleton, provideValtechWhatsapp, qrContrastRatio, qrErrorCorrectionFor, query, rbacGuard, renderGameAvatarSvg, renderPatternSvgInner, replaceSpecialChars, requestSubmitMode, resolveColor, resolveCopyrightTemplate, resolveInputDefaultValue, resolveIonicColor, resolveWebBaseUrl, roleGuard, roleOf, selectableRequestTypes, storagePaths, suggestEmailFix, superAdminGuard, supportedGameAvatarStyles, toArticle, validateQrBrand, validateRoutes };
|
|
89625
89647
|
//# sourceMappingURL=valtech-components.mjs.map
|