valtech-components 4.0.938 → 4.0.940
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/group-picker/group-picker.component.mjs +97 -0
- package/esm2022/lib/components/organisms/group-members/group-members.component.mjs +178 -0
- package/esm2022/lib/directives/feature-guard.directive.mjs +48 -0
- package/esm2022/lib/services/feature-control.service.mjs +117 -0
- package/esm2022/lib/services/groups/groups.service.mjs +92 -0
- package/esm2022/lib/services/groups/types.mjs +2 -0
- package/esm2022/lib/services/qr-generator/qrbrand.mjs +89 -0
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +9 -1
- package/fesm2022/valtech-components.mjs +598 -2
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/molecules/group-picker/group-picker.component.d.ts +28 -0
- package/lib/components/organisms/group-members/group-members.component.d.ts +43 -0
- package/lib/directives/feature-guard.directive.d.ts +21 -0
- package/lib/services/feature-control.service.d.ts +50 -0
- package/lib/services/groups/groups.service.d.ts +39 -0
- package/lib/services/groups/types.d.ts +69 -0
- package/lib/services/qr-generator/qrbrand.d.ts +50 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +7 -0
|
@@ -66,7 +66,7 @@ import fixWebmDuration from 'fix-webm-duration';
|
|
|
66
66
|
* Current version of valtech-components.
|
|
67
67
|
* This is automatically updated during the publish process.
|
|
68
68
|
*/
|
|
69
|
-
const VERSION = '4.0.
|
|
69
|
+
const VERSION = '4.0.940';
|
|
70
70
|
|
|
71
71
|
function evaluateValtechAccess(rule, context, features = {}, visitedFeatures = new Set()) {
|
|
72
72
|
if (rule == null)
|
|
@@ -11586,6 +11586,163 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
11586
11586
|
args: ['pointerdown', ['$event']]
|
|
11587
11587
|
}] } });
|
|
11588
11588
|
|
|
11589
|
+
class FeatureControlService {
|
|
11590
|
+
constructor(http, analytics) {
|
|
11591
|
+
this.http = http;
|
|
11592
|
+
this.analytics = analytics;
|
|
11593
|
+
this.features = signal(new Map());
|
|
11594
|
+
this.isLoaded = signal(false);
|
|
11595
|
+
this.previousState = new Map();
|
|
11596
|
+
}
|
|
11597
|
+
logFeatureEvent(key, enabled, previousEnabled) {
|
|
11598
|
+
if (!this.analytics)
|
|
11599
|
+
return;
|
|
11600
|
+
try {
|
|
11601
|
+
if (previousEnabled === null) {
|
|
11602
|
+
// Carga inicial
|
|
11603
|
+
this.analytics.logEvent('feature_loaded', {
|
|
11604
|
+
feature_key: key,
|
|
11605
|
+
feature_enabled: enabled,
|
|
11606
|
+
});
|
|
11607
|
+
}
|
|
11608
|
+
else if (previousEnabled !== enabled) {
|
|
11609
|
+
// Transición de estado
|
|
11610
|
+
this.analytics.logEvent('feature_changed', {
|
|
11611
|
+
feature_key: key,
|
|
11612
|
+
previous_state: previousEnabled ? 'enabled' : 'disabled',
|
|
11613
|
+
current_state: enabled ? 'enabled' : 'disabled',
|
|
11614
|
+
});
|
|
11615
|
+
}
|
|
11616
|
+
}
|
|
11617
|
+
catch (err) {
|
|
11618
|
+
console.warn(`Failed to log feature event for ${key}:`, err);
|
|
11619
|
+
}
|
|
11620
|
+
}
|
|
11621
|
+
/**
|
|
11622
|
+
* Load user features from backend.
|
|
11623
|
+
* Call this during app initialization (AppComponent ctor or effect).
|
|
11624
|
+
* Logs feature state changes to Firebase Analytics.
|
|
11625
|
+
*/
|
|
11626
|
+
async loadUserFeatures() {
|
|
11627
|
+
try {
|
|
11628
|
+
const response = await firstValueFrom(this.http.get('/v2/user/features'));
|
|
11629
|
+
const map = new Map();
|
|
11630
|
+
response.forEach(f => {
|
|
11631
|
+
const previousEnabled = this.previousState.get(f.key) ?? null;
|
|
11632
|
+
this.logFeatureEvent(f.key, f.enabled, previousEnabled);
|
|
11633
|
+
this.previousState.set(f.key, f.enabled);
|
|
11634
|
+
map.set(f.key, f.enabled);
|
|
11635
|
+
});
|
|
11636
|
+
this.features.set(map);
|
|
11637
|
+
this.isLoaded.set(true);
|
|
11638
|
+
}
|
|
11639
|
+
catch (error) {
|
|
11640
|
+
console.error('Failed to load feature control:', error);
|
|
11641
|
+
// Fallback: assume all features enabled on error (optimistic)
|
|
11642
|
+
this.isLoaded.set(true);
|
|
11643
|
+
}
|
|
11644
|
+
}
|
|
11645
|
+
/**
|
|
11646
|
+
* Check if a feature is enabled for the current user.
|
|
11647
|
+
* Returns true if feature is not found (optimistic default).
|
|
11648
|
+
* If rollout percentage is set, uses consistent hashing for canary rollouts.
|
|
11649
|
+
*/
|
|
11650
|
+
isEnabled(featureKey) {
|
|
11651
|
+
const featuresMap = this.features();
|
|
11652
|
+
const feature = featuresMap.get(featureKey);
|
|
11653
|
+
// Not in map: default to enabled (optimistic)
|
|
11654
|
+
if (feature === undefined)
|
|
11655
|
+
return true;
|
|
11656
|
+
// Not enabled: return false
|
|
11657
|
+
if (!feature)
|
|
11658
|
+
return false;
|
|
11659
|
+
// TODO: Implement rollout percentage check with hash
|
|
11660
|
+
// For now, if enabled and no rollout, it's enabled for everyone
|
|
11661
|
+
return true;
|
|
11662
|
+
}
|
|
11663
|
+
/**
|
|
11664
|
+
* Get a computed signal for a feature.
|
|
11665
|
+
* Use in templates: *ngIf="featureEnabled('oauth_facebook')()"
|
|
11666
|
+
* Or in component: featureEnabled('payment_settings').
|
|
11667
|
+
*/
|
|
11668
|
+
featureEnabled(featureKey) {
|
|
11669
|
+
return () => this.isEnabled(featureKey);
|
|
11670
|
+
}
|
|
11671
|
+
/**
|
|
11672
|
+
* Get all features for debugging (admin only).
|
|
11673
|
+
*/
|
|
11674
|
+
getAllFeatures() {
|
|
11675
|
+
return this.features();
|
|
11676
|
+
}
|
|
11677
|
+
/**
|
|
11678
|
+
* Check if features have been loaded.
|
|
11679
|
+
*/
|
|
11680
|
+
isReady() {
|
|
11681
|
+
return this.isLoaded();
|
|
11682
|
+
}
|
|
11683
|
+
/**
|
|
11684
|
+
* Watch for feature changes (for testing/demo purposes).
|
|
11685
|
+
*/
|
|
11686
|
+
watchFeatures() {
|
|
11687
|
+
return this.features;
|
|
11688
|
+
}
|
|
11689
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeatureControlService, deps: [{ token: i1$3.HttpClient }, { token: AnalyticsService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
11690
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeatureControlService, providedIn: 'root' }); }
|
|
11691
|
+
}
|
|
11692
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeatureControlService, decorators: [{
|
|
11693
|
+
type: Injectable,
|
|
11694
|
+
args: [{
|
|
11695
|
+
providedIn: 'root',
|
|
11696
|
+
}]
|
|
11697
|
+
}], ctorParameters: () => [{ type: i1$3.HttpClient }, { type: AnalyticsService, decorators: [{
|
|
11698
|
+
type: Optional
|
|
11699
|
+
}] }] });
|
|
11700
|
+
|
|
11701
|
+
/**
|
|
11702
|
+
* Structural directive to hide elements when a feature is disabled.
|
|
11703
|
+
*
|
|
11704
|
+
* Usage: <button *valFeatureGuard="'oauth_facebook'">Sign in with Facebook</button>
|
|
11705
|
+
* If oauth_facebook is disabled, the button is not rendered.
|
|
11706
|
+
*/
|
|
11707
|
+
class FeatureGuardDirective {
|
|
11708
|
+
set valFeatureGuard(featureKey) {
|
|
11709
|
+
this.featureKey = featureKey;
|
|
11710
|
+
this.updateVisibility();
|
|
11711
|
+
}
|
|
11712
|
+
constructor(templateRef, viewContainer, featureControl) {
|
|
11713
|
+
this.templateRef = templateRef;
|
|
11714
|
+
this.viewContainer = viewContainer;
|
|
11715
|
+
this.featureControl = featureControl;
|
|
11716
|
+
this.featureKey = '';
|
|
11717
|
+
}
|
|
11718
|
+
ngOnInit() {
|
|
11719
|
+
this.updateVisibility();
|
|
11720
|
+
}
|
|
11721
|
+
updateVisibility() {
|
|
11722
|
+
if (!this.featureKey) {
|
|
11723
|
+
return;
|
|
11724
|
+
}
|
|
11725
|
+
const isEnabled = this.featureControl.isEnabled(this.featureKey);
|
|
11726
|
+
if (isEnabled) {
|
|
11727
|
+
this.viewContainer.createEmbeddedView(this.templateRef);
|
|
11728
|
+
}
|
|
11729
|
+
else {
|
|
11730
|
+
this.viewContainer.clear();
|
|
11731
|
+
}
|
|
11732
|
+
}
|
|
11733
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeatureGuardDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: FeatureControlService }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
11734
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: FeatureGuardDirective, isStandalone: true, selector: "[valFeatureGuard]", inputs: { valFeatureGuard: "valFeatureGuard" }, ngImport: i0 }); }
|
|
11735
|
+
}
|
|
11736
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeatureGuardDirective, decorators: [{
|
|
11737
|
+
type: Directive,
|
|
11738
|
+
args: [{
|
|
11739
|
+
selector: '[valFeatureGuard]',
|
|
11740
|
+
standalone: true,
|
|
11741
|
+
}]
|
|
11742
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: FeatureControlService }], propDecorators: { valFeatureGuard: [{
|
|
11743
|
+
type: Input
|
|
11744
|
+
}] } });
|
|
11745
|
+
|
|
11589
11746
|
/**
|
|
11590
11747
|
* Presets de botón por defecto provistos por la librería.
|
|
11591
11748
|
*
|
|
@@ -74293,6 +74450,95 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
74293
74450
|
// ValtechConfig and LangProvider have been removed in v3.0.0
|
|
74294
74451
|
// Use LocaleService for language management instead
|
|
74295
74452
|
|
|
74453
|
+
/**
|
|
74454
|
+
* Contrato de marca de un QR, compartido entre backend y frontend (ADR-078).
|
|
74455
|
+
*
|
|
74456
|
+
* Espejo TypeScript de `backend/go/services/pkg/qrbrand/qrbrand.go`. Los tests
|
|
74457
|
+
* de contraste de este archivo usan LOS MISMOS casos que el lado Go
|
|
74458
|
+
* (`qrbrand_test.go`) — si un lado cambia el número esperado sin el otro,
|
|
74459
|
+
* dejan de coincidir.
|
|
74460
|
+
*
|
|
74461
|
+
* No dibuja nada: valida que una combinación de colores sea escaneable y
|
|
74462
|
+
* decide cuánta corrección de errores necesita un QR que lleva logo encima.
|
|
74463
|
+
* El renderizado real sigue siendo QrGeneratorService (cliente) y qrpng.go
|
|
74464
|
+
* (backend, correo) — cada uno dibuja a su manera; lo que comparten es esta
|
|
74465
|
+
* validación.
|
|
74466
|
+
*/
|
|
74467
|
+
/** Sin marca configurada: tinta sobre blanco. Nunca se persiste. */
|
|
74468
|
+
function defaultQrBrand(orgId, appId) {
|
|
74469
|
+
return { orgId, appId, ink: '#111111', bg: '#FFFFFF', dotStyle: 'square' };
|
|
74470
|
+
}
|
|
74471
|
+
const HEX_RE = /^#([0-9a-fA-F]{6})$/;
|
|
74472
|
+
/** El mínimo WCAG para texto normal (AA) — ver qrbrand.go para el porqué de reusarlo acá. */
|
|
74473
|
+
const MIN_CONTRAST_RATIO = 4.5;
|
|
74474
|
+
class QrBrandValidationError extends Error {
|
|
74475
|
+
constructor(field, message) {
|
|
74476
|
+
super(`${field}: ${message}`);
|
|
74477
|
+
this.field = field;
|
|
74478
|
+
this.name = 'QrBrandValidationError';
|
|
74479
|
+
}
|
|
74480
|
+
}
|
|
74481
|
+
function hexToRgb(hex) {
|
|
74482
|
+
const m = HEX_RE.exec(hex);
|
|
74483
|
+
if (!m)
|
|
74484
|
+
return [0, 0, 0];
|
|
74485
|
+
const v = parseInt(m[1], 16);
|
|
74486
|
+
return [((v >> 16) & 0xff) / 255, ((v >> 8) & 0xff) / 255, (v & 0xff) / 255];
|
|
74487
|
+
}
|
|
74488
|
+
function srgbToLinear(c) {
|
|
74489
|
+
return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
|
|
74490
|
+
}
|
|
74491
|
+
function relativeLuminance(hex) {
|
|
74492
|
+
const [r, g, b] = hexToRgb(hex);
|
|
74493
|
+
const [rl, gl, bl] = [srgbToLinear(r), srgbToLinear(g), srgbToLinear(b)];
|
|
74494
|
+
return 0.2126 * rl + 0.7152 * gl + 0.0722 * bl;
|
|
74495
|
+
}
|
|
74496
|
+
/** Contraste WCAG entre dos colores hex (#RRGGBB). Fórmula estándar (L1+0.05)/(L2+0.05). */
|
|
74497
|
+
function qrContrastRatio(hexA, hexB) {
|
|
74498
|
+
let la = relativeLuminance(hexA);
|
|
74499
|
+
let lb = relativeLuminance(hexB);
|
|
74500
|
+
if (la < lb)
|
|
74501
|
+
[la, lb] = [lb, la];
|
|
74502
|
+
return (la + 0.05) / (lb + 0.05);
|
|
74503
|
+
}
|
|
74504
|
+
/**
|
|
74505
|
+
* Rechaza una combinación de colores que un lector real no va a poder leer.
|
|
74506
|
+
* Escaneabilidad sobre estética: esta función no negocia (ADR-078 regla 1).
|
|
74507
|
+
* Lanza QrBrandValidationError; no retorna un booleano — el caller casi
|
|
74508
|
+
* siempre necesita el mensaje para mostrarlo en el formulario.
|
|
74509
|
+
*/
|
|
74510
|
+
function validateQrBrand(b) {
|
|
74511
|
+
if (!HEX_RE.test(b.ink)) {
|
|
74512
|
+
throw new QrBrandValidationError('ink', 'debe ser un color hex de 6 dígitos, ej. #111111');
|
|
74513
|
+
}
|
|
74514
|
+
if (!HEX_RE.test(b.bg)) {
|
|
74515
|
+
throw new QrBrandValidationError('bg', 'debe ser un color hex de 6 dígitos, ej. #FFFFFF');
|
|
74516
|
+
}
|
|
74517
|
+
if (b.dotStyle && !['square', 'rounded', 'dots'].includes(b.dotStyle)) {
|
|
74518
|
+
throw new QrBrandValidationError('dotStyle', 'debe ser square, rounded o dots');
|
|
74519
|
+
}
|
|
74520
|
+
const ratio = qrContrastRatio(b.ink, b.bg);
|
|
74521
|
+
if (ratio < MIN_CONTRAST_RATIO) {
|
|
74522
|
+
throw new QrBrandValidationError('ink/bg', `contraste ${ratio.toFixed(2)}:1 por debajo del mínimo ${MIN_CONTRAST_RATIO.toFixed(1)}:1 — un lector real no va a poder escanearlo`);
|
|
74523
|
+
}
|
|
74524
|
+
if (b.logo && (b.logo.clearArea ?? 0) > 0.3) {
|
|
74525
|
+
throw new QrBrandValidationError('logo.clearArea', 'un logo que tapa más del 30% del QR deja de ser legible aunque suba la corrección de errores');
|
|
74526
|
+
}
|
|
74527
|
+
}
|
|
74528
|
+
/**
|
|
74529
|
+
* El logo obliga a subir la corrección de errores, no se le pregunta al
|
|
74530
|
+
* usuario (ADR-078 regla 2). Sin logo, M alcanza. Con logo, sube a Q; con
|
|
74531
|
+
* logo grande (>15% del área), sube al máximo H.
|
|
74532
|
+
*/
|
|
74533
|
+
function qrErrorCorrectionFor(b) {
|
|
74534
|
+
const clearArea = b.logo?.clearArea ?? 0;
|
|
74535
|
+
if (!b.logo || clearArea <= 0)
|
|
74536
|
+
return 'M';
|
|
74537
|
+
if (clearArea > 0.15)
|
|
74538
|
+
return 'H';
|
|
74539
|
+
return 'Q';
|
|
74540
|
+
}
|
|
74541
|
+
|
|
74296
74542
|
const CANVAS_WIDTH = 720;
|
|
74297
74543
|
const CANVAS_HEIGHT = 1280;
|
|
74298
74544
|
const SAFE_X = 64;
|
|
@@ -74969,6 +75215,356 @@ function beautifyLegalArticle(article) {
|
|
|
74969
75215
|
};
|
|
74970
75216
|
}
|
|
74971
75217
|
|
|
75218
|
+
/**
|
|
75219
|
+
* Cliente de `/v2/groups/*` (ADR-083). Servicio de PLATAFORMA: no sabe qué es
|
|
75220
|
+
* un blueprint ni un refugio, solo agrupa recursos y personas. Cada app lo
|
|
75221
|
+
* consume igual — es lo que evita reescribir esta capa por producto.
|
|
75222
|
+
*/
|
|
75223
|
+
class GroupsService {
|
|
75224
|
+
constructor(config, http) {
|
|
75225
|
+
this.config = config;
|
|
75226
|
+
this.http = http;
|
|
75227
|
+
}
|
|
75228
|
+
get baseUrl() {
|
|
75229
|
+
return `${this.config.apiUrl}/v2/groups`;
|
|
75230
|
+
}
|
|
75231
|
+
/** Grupos activos de la organización (filtrados por app en el backend). */
|
|
75232
|
+
listGroups() {
|
|
75233
|
+
return this.http
|
|
75234
|
+
.get(this.baseUrl)
|
|
75235
|
+
.pipe(map$1((r) => r.groups ?? []));
|
|
75236
|
+
}
|
|
75237
|
+
/** Incluye archivados: para la pantalla de administración. */
|
|
75238
|
+
listAllGroups() {
|
|
75239
|
+
return this.http
|
|
75240
|
+
.get(`${this.baseUrl}/all`)
|
|
75241
|
+
.pipe(map$1((r) => r.groups ?? []));
|
|
75242
|
+
}
|
|
75243
|
+
getGroup(id) {
|
|
75244
|
+
return this.http
|
|
75245
|
+
.get(`${this.baseUrl}/${id}`)
|
|
75246
|
+
.pipe(map$1((r) => r.group));
|
|
75247
|
+
}
|
|
75248
|
+
createGroup(req) {
|
|
75249
|
+
return this.http
|
|
75250
|
+
.post(this.baseUrl, req)
|
|
75251
|
+
.pipe(map$1((r) => r.group));
|
|
75252
|
+
}
|
|
75253
|
+
updateGroup(id, req) {
|
|
75254
|
+
return this.http
|
|
75255
|
+
.put(`${this.baseUrl}/${id}`, req)
|
|
75256
|
+
.pipe(map$1((r) => r.group));
|
|
75257
|
+
}
|
|
75258
|
+
/**
|
|
75259
|
+
* No hay `deleteGroup`: el ADR-083 decidió que un servicio de plataforma no
|
|
75260
|
+
* puede saber si un vertical todavía apunta al grupo, y como "sin grupo"
|
|
75261
|
+
* significa visible para toda la organización, borrarlo publicaría sus
|
|
75262
|
+
* recursos a la planta entera. `archiveGroup`/`restoreGroup` cubren la
|
|
75263
|
+
* necesidad real sin ese riesgo.
|
|
75264
|
+
*/
|
|
75265
|
+
archiveGroup(id) {
|
|
75266
|
+
return this.http
|
|
75267
|
+
.post(`${this.baseUrl}/${id}/archive`, {})
|
|
75268
|
+
.pipe(map$1((r) => r.group));
|
|
75269
|
+
}
|
|
75270
|
+
restoreGroup(id) {
|
|
75271
|
+
return this.http
|
|
75272
|
+
.post(`${this.baseUrl}/${id}/restore`, {})
|
|
75273
|
+
.pipe(map$1((r) => r.group));
|
|
75274
|
+
}
|
|
75275
|
+
listMembers(groupId) {
|
|
75276
|
+
return this.http
|
|
75277
|
+
.get(`${this.baseUrl}/${groupId}/members`)
|
|
75278
|
+
.pipe(map$1((r) => r.members ?? []));
|
|
75279
|
+
}
|
|
75280
|
+
addMember(groupId, req) {
|
|
75281
|
+
return this.http
|
|
75282
|
+
.post(`${this.baseUrl}/${groupId}/members`, req)
|
|
75283
|
+
.pipe(map$1((r) => r.members ?? []));
|
|
75284
|
+
}
|
|
75285
|
+
removeMember(groupId, userId) {
|
|
75286
|
+
return this.http
|
|
75287
|
+
.delete(`${this.baseUrl}/${groupId}/members/${userId}`)
|
|
75288
|
+
.pipe(map$1((r) => r.members ?? []));
|
|
75289
|
+
}
|
|
75290
|
+
/** Los grupos del usuario actual. Referencial: el filtrado real corre en el backend. */
|
|
75291
|
+
myGroups() {
|
|
75292
|
+
return this.http.get(`${this.baseUrl}/mine`);
|
|
75293
|
+
}
|
|
75294
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GroupsService, deps: [{ token: VALTECH_AUTH_CONFIG }, { token: i1$3.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
75295
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GroupsService, providedIn: 'root' }); }
|
|
75296
|
+
}
|
|
75297
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GroupsService, decorators: [{
|
|
75298
|
+
type: Injectable,
|
|
75299
|
+
args: [{ providedIn: 'root' }]
|
|
75300
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
75301
|
+
type: Inject,
|
|
75302
|
+
args: [VALTECH_AUTH_CONFIG]
|
|
75303
|
+
}] }, { type: i1$3.HttpClient }] });
|
|
75304
|
+
|
|
75305
|
+
/**
|
|
75306
|
+
* val-group-picker — elegir el grupo dueño de un recurso (ADR-083).
|
|
75307
|
+
*
|
|
75308
|
+
* Se auto-carga: pide sus propios grupos a `GroupsService` en vez de esperar
|
|
75309
|
+
* que el consumer se los pase. Es la razón por la que existe como componente y
|
|
75310
|
+
* no como un `<select>` armado a mano en cada app — "una línea, una etiqueta
|
|
75311
|
+
* i18n" (ver ADR-083 §"Qué se construye una sola vez").
|
|
75312
|
+
*
|
|
75313
|
+
* Sin texto hardcodeado: los labels llegan por `@Input` (lib i18n-agnostic).
|
|
75314
|
+
* Cada app pone su palabra ("Equipo", "Sucursal", "Refugio").
|
|
75315
|
+
*/
|
|
75316
|
+
class GroupPickerComponent {
|
|
75317
|
+
constructor() {
|
|
75318
|
+
this.label = '';
|
|
75319
|
+
this.placeholder = '';
|
|
75320
|
+
this.noGroupLabel = '';
|
|
75321
|
+
this.value = null;
|
|
75322
|
+
this.disabled = false;
|
|
75323
|
+
this.valueChange = new EventEmitter();
|
|
75324
|
+
this.groupsSvc = inject(GroupsService);
|
|
75325
|
+
this.groups = [];
|
|
75326
|
+
}
|
|
75327
|
+
ngOnInit() {
|
|
75328
|
+
this.groupsSvc.listGroups().subscribe({
|
|
75329
|
+
next: (g) => (this.groups = g),
|
|
75330
|
+
// Best-effort: si la lectura falla, el picker queda con la opción "sin
|
|
75331
|
+
// grupo" únicamente. No es un error bloqueante — crear el recurso sin
|
|
75332
|
+
// asignar sigue siendo válido.
|
|
75333
|
+
error: () => (this.groups = []),
|
|
75334
|
+
});
|
|
75335
|
+
}
|
|
75336
|
+
onChange(v) {
|
|
75337
|
+
this.value = v || null;
|
|
75338
|
+
this.valueChange.emit(this.value);
|
|
75339
|
+
}
|
|
75340
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GroupPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
75341
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GroupPickerComponent, isStandalone: true, selector: "val-group-picker", inputs: { label: "label", placeholder: "placeholder", noGroupLabel: "noGroupLabel", value: "value", disabled: "disabled" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: `
|
|
75342
|
+
<ion-select
|
|
75343
|
+
[label]="label"
|
|
75344
|
+
[placeholder]="placeholder"
|
|
75345
|
+
[value]="value ?? ''"
|
|
75346
|
+
[disabled]="disabled"
|
|
75347
|
+
interface="popover"
|
|
75348
|
+
(ionChange)="onChange($event.detail.value)"
|
|
75349
|
+
>
|
|
75350
|
+
<!-- Opción vacía SIEMPRE disponible: un recurso sin grupo es visible para
|
|
75351
|
+
toda la organización (ADR-083, decisión 3), no un estado inválido. -->
|
|
75352
|
+
<ion-select-option value="">{{ noGroupLabel }}</ion-select-option>
|
|
75353
|
+
@for (g of groups; track g.id) {
|
|
75354
|
+
<ion-select-option [value]="g.id">{{ g.name }}</ion-select-option>
|
|
75355
|
+
}
|
|
75356
|
+
</ion-select>
|
|
75357
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }] }); }
|
|
75358
|
+
}
|
|
75359
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GroupPickerComponent, decorators: [{
|
|
75360
|
+
type: Component,
|
|
75361
|
+
args: [{
|
|
75362
|
+
selector: 'val-group-picker',
|
|
75363
|
+
standalone: true,
|
|
75364
|
+
imports: [CommonModule, IonSelect, IonSelectOption],
|
|
75365
|
+
template: `
|
|
75366
|
+
<ion-select
|
|
75367
|
+
[label]="label"
|
|
75368
|
+
[placeholder]="placeholder"
|
|
75369
|
+
[value]="value ?? ''"
|
|
75370
|
+
[disabled]="disabled"
|
|
75371
|
+
interface="popover"
|
|
75372
|
+
(ionChange)="onChange($event.detail.value)"
|
|
75373
|
+
>
|
|
75374
|
+
<!-- Opción vacía SIEMPRE disponible: un recurso sin grupo es visible para
|
|
75375
|
+
toda la organización (ADR-083, decisión 3), no un estado inválido. -->
|
|
75376
|
+
<ion-select-option value="">{{ noGroupLabel }}</ion-select-option>
|
|
75377
|
+
@for (g of groups; track g.id) {
|
|
75378
|
+
<ion-select-option [value]="g.id">{{ g.name }}</ion-select-option>
|
|
75379
|
+
}
|
|
75380
|
+
</ion-select>
|
|
75381
|
+
`,
|
|
75382
|
+
}]
|
|
75383
|
+
}], propDecorators: { label: [{
|
|
75384
|
+
type: Input
|
|
75385
|
+
}], placeholder: [{
|
|
75386
|
+
type: Input
|
|
75387
|
+
}], noGroupLabel: [{
|
|
75388
|
+
type: Input
|
|
75389
|
+
}], value: [{
|
|
75390
|
+
type: Input
|
|
75391
|
+
}], disabled: [{
|
|
75392
|
+
type: Input
|
|
75393
|
+
}], valueChange: [{
|
|
75394
|
+
type: Output
|
|
75395
|
+
}] } });
|
|
75396
|
+
|
|
75397
|
+
/**
|
|
75398
|
+
* val-group-members — administrar la membresía de UN grupo (ADR-083).
|
|
75399
|
+
*
|
|
75400
|
+
* Deliberadamente NO trae su propio selector de personas: la fuente de
|
|
75401
|
+
* "quiénes son los miembros elegibles de la organización" varía por app (org
|
|
75402
|
+
* members, invitados, etc.), así que se recibe por `@Input candidates` en vez
|
|
75403
|
+
* de que este organismo importe un servicio de organización que no le
|
|
75404
|
+
* corresponde. Sin candidatos, igual funciona: solo lista y quita.
|
|
75405
|
+
*
|
|
75406
|
+
* Sin texto hardcodeado (lib i18n-agnostic): los labels llegan por `@Input`.
|
|
75407
|
+
*/
|
|
75408
|
+
class GroupMembersComponent {
|
|
75409
|
+
constructor() {
|
|
75410
|
+
/** Personas elegibles para agregar. Vacío = el organismo solo lista/quita. */
|
|
75411
|
+
this.candidates = [];
|
|
75412
|
+
this.addPlaceholder = '';
|
|
75413
|
+
this.emptyLabel = '';
|
|
75414
|
+
this.removeLabel = '';
|
|
75415
|
+
this.membersChange = new EventEmitter();
|
|
75416
|
+
this.groupsSvc = inject(GroupsService);
|
|
75417
|
+
this.members = [];
|
|
75418
|
+
this.busy = false;
|
|
75419
|
+
}
|
|
75420
|
+
get removeButtonProps() {
|
|
75421
|
+
return {
|
|
75422
|
+
text: this.removeLabel,
|
|
75423
|
+
color: 'dark',
|
|
75424
|
+
fill: 'clear',
|
|
75425
|
+
size: 'small',
|
|
75426
|
+
shape: 'round',
|
|
75427
|
+
type: 'button',
|
|
75428
|
+
state: this.busy ? ComponentStates.DISABLED : ComponentStates.ENABLED,
|
|
75429
|
+
};
|
|
75430
|
+
}
|
|
75431
|
+
ngOnChanges(changes) {
|
|
75432
|
+
if (changes['groupId'] && this.groupId) {
|
|
75433
|
+
this.reload();
|
|
75434
|
+
}
|
|
75435
|
+
}
|
|
75436
|
+
reload() {
|
|
75437
|
+
this.groupsSvc.listMembers(this.groupId).subscribe({
|
|
75438
|
+
next: (m) => (this.members = m),
|
|
75439
|
+
error: () => (this.members = []),
|
|
75440
|
+
});
|
|
75441
|
+
}
|
|
75442
|
+
/** Candidatos que todavía no están en el grupo — evita ofrecer un alta duplicada. */
|
|
75443
|
+
eligible() {
|
|
75444
|
+
const current = new Set(this.members.map((m) => m.userId));
|
|
75445
|
+
return this.candidates.filter((c) => !current.has(c.userId));
|
|
75446
|
+
}
|
|
75447
|
+
nameFor(userId) {
|
|
75448
|
+
const c = this.candidates.find((x) => x.userId === userId);
|
|
75449
|
+
return c?.name || c?.email || userId;
|
|
75450
|
+
}
|
|
75451
|
+
add(userId) {
|
|
75452
|
+
if (!userId || this.busy)
|
|
75453
|
+
return;
|
|
75454
|
+
this.busy = true;
|
|
75455
|
+
this.groupsSvc.addMember(this.groupId, { userId }).subscribe({
|
|
75456
|
+
next: (members) => {
|
|
75457
|
+
this.members = members;
|
|
75458
|
+
this.busy = false;
|
|
75459
|
+
this.membersChange.emit(members);
|
|
75460
|
+
},
|
|
75461
|
+
error: () => (this.busy = false),
|
|
75462
|
+
});
|
|
75463
|
+
}
|
|
75464
|
+
remove(userId) {
|
|
75465
|
+
if (this.busy)
|
|
75466
|
+
return;
|
|
75467
|
+
this.busy = true;
|
|
75468
|
+
this.groupsSvc.removeMember(this.groupId, userId).subscribe({
|
|
75469
|
+
next: (members) => {
|
|
75470
|
+
this.members = members;
|
|
75471
|
+
this.busy = false;
|
|
75472
|
+
this.membersChange.emit(members);
|
|
75473
|
+
},
|
|
75474
|
+
error: () => (this.busy = false),
|
|
75475
|
+
});
|
|
75476
|
+
}
|
|
75477
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GroupMembersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
75478
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GroupMembersComponent, isStandalone: true, selector: "val-group-members", inputs: { groupId: "groupId", candidates: "candidates", addPlaceholder: "addPlaceholder", emptyLabel: "emptyLabel", removeLabel: "removeLabel" }, outputs: { membersChange: "membersChange" }, usesOnChanges: true, ngImport: i0, template: `
|
|
75479
|
+
<div class="group-members">
|
|
75480
|
+
@if (candidates.length > 0) {
|
|
75481
|
+
<div class="group-members__add">
|
|
75482
|
+
<ion-select
|
|
75483
|
+
[placeholder]="addPlaceholder"
|
|
75484
|
+
interface="popover"
|
|
75485
|
+
[disabled]="busy"
|
|
75486
|
+
(ionChange)="add($event.detail.value)"
|
|
75487
|
+
>
|
|
75488
|
+
@for (c of eligible(); track c.userId) {
|
|
75489
|
+
<ion-select-option [value]="c.userId">
|
|
75490
|
+
{{ c.name || c.email || c.userId }}
|
|
75491
|
+
</ion-select-option>
|
|
75492
|
+
}
|
|
75493
|
+
</ion-select>
|
|
75494
|
+
</div>
|
|
75495
|
+
}
|
|
75496
|
+
|
|
75497
|
+
@if (members.length === 0) {
|
|
75498
|
+
<p class="group-members__empty">{{ emptyLabel }}</p>
|
|
75499
|
+
} @else {
|
|
75500
|
+
<ul class="group-members__list">
|
|
75501
|
+
@for (m of members; track m.userId) {
|
|
75502
|
+
<li class="group-members__row">
|
|
75503
|
+
<span class="group-members__name">{{ nameFor(m.userId) }}</span>
|
|
75504
|
+
<val-button
|
|
75505
|
+
[props]="removeButtonProps"
|
|
75506
|
+
(onClick)="remove(m.userId)"
|
|
75507
|
+
/>
|
|
75508
|
+
</li>
|
|
75509
|
+
}
|
|
75510
|
+
</ul>
|
|
75511
|
+
}
|
|
75512
|
+
</div>
|
|
75513
|
+
`, isInline: true, styles: [".group-members{display:flex;flex-direction:column;gap:12px}.group-members__empty{font-size:.875rem;color:var(--ion-color-medium, #92949c);margin:0}.group-members__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.group-members__row{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-radius:10px;background:var(--ion-color-light, #f4f5f8)}.group-members__name{font-size:.9375rem;color:var(--ion-text-color, #000)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }] }); }
|
|
75514
|
+
}
|
|
75515
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GroupMembersComponent, decorators: [{
|
|
75516
|
+
type: Component,
|
|
75517
|
+
args: [{ selector: 'val-group-members', standalone: true, imports: [CommonModule, IonIcon, IonSelect, IonSelectOption, ButtonComponent], template: `
|
|
75518
|
+
<div class="group-members">
|
|
75519
|
+
@if (candidates.length > 0) {
|
|
75520
|
+
<div class="group-members__add">
|
|
75521
|
+
<ion-select
|
|
75522
|
+
[placeholder]="addPlaceholder"
|
|
75523
|
+
interface="popover"
|
|
75524
|
+
[disabled]="busy"
|
|
75525
|
+
(ionChange)="add($event.detail.value)"
|
|
75526
|
+
>
|
|
75527
|
+
@for (c of eligible(); track c.userId) {
|
|
75528
|
+
<ion-select-option [value]="c.userId">
|
|
75529
|
+
{{ c.name || c.email || c.userId }}
|
|
75530
|
+
</ion-select-option>
|
|
75531
|
+
}
|
|
75532
|
+
</ion-select>
|
|
75533
|
+
</div>
|
|
75534
|
+
}
|
|
75535
|
+
|
|
75536
|
+
@if (members.length === 0) {
|
|
75537
|
+
<p class="group-members__empty">{{ emptyLabel }}</p>
|
|
75538
|
+
} @else {
|
|
75539
|
+
<ul class="group-members__list">
|
|
75540
|
+
@for (m of members; track m.userId) {
|
|
75541
|
+
<li class="group-members__row">
|
|
75542
|
+
<span class="group-members__name">{{ nameFor(m.userId) }}</span>
|
|
75543
|
+
<val-button
|
|
75544
|
+
[props]="removeButtonProps"
|
|
75545
|
+
(onClick)="remove(m.userId)"
|
|
75546
|
+
/>
|
|
75547
|
+
</li>
|
|
75548
|
+
}
|
|
75549
|
+
</ul>
|
|
75550
|
+
}
|
|
75551
|
+
</div>
|
|
75552
|
+
`, styles: [".group-members{display:flex;flex-direction:column;gap:12px}.group-members__empty{font-size:.875rem;color:var(--ion-color-medium, #92949c);margin:0}.group-members__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.group-members__row{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-radius:10px;background:var(--ion-color-light, #f4f5f8)}.group-members__name{font-size:.9375rem;color:var(--ion-text-color, #000)}\n"] }]
|
|
75553
|
+
}], propDecorators: { groupId: [{
|
|
75554
|
+
type: Input,
|
|
75555
|
+
args: [{ required: true }]
|
|
75556
|
+
}], candidates: [{
|
|
75557
|
+
type: Input
|
|
75558
|
+
}], addPlaceholder: [{
|
|
75559
|
+
type: Input
|
|
75560
|
+
}], emptyLabel: [{
|
|
75561
|
+
type: Input
|
|
75562
|
+
}], removeLabel: [{
|
|
75563
|
+
type: Input
|
|
75564
|
+
}], membersChange: [{
|
|
75565
|
+
type: Output
|
|
75566
|
+
}] } });
|
|
75567
|
+
|
|
74972
75568
|
const PERSONA_CONFIG = new InjectionToken('PERSONA_CONFIG');
|
|
74973
75569
|
/**
|
|
74974
75570
|
* Servicio genérico de persona activa (ADR-056/061-063: extraído de Chesed
|
|
@@ -88572,5 +89168,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
88572
89168
|
* Generated bundle index. Do not edit.
|
|
88573
89169
|
*/
|
|
88574
89170
|
|
|
88575
|
-
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, 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, 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, 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, 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, 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, query, rbacGuard, renderGameAvatarSvg, renderPatternSvgInner, replaceSpecialChars, requestSubmitMode, resolveColor, resolveCopyrightTemplate, resolveInputDefaultValue, resolveIonicColor, resolveWebBaseUrl, roleGuard, roleOf, selectableRequestTypes, storagePaths, suggestEmailFix, superAdminGuard, supportedGameAvatarStyles, toArticle, validateRoutes };
|
|
89171
|
+
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, 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 };
|
|
88576
89172
|
//# sourceMappingURL=valtech-components.mjs.map
|