valtech-components 2.0.941 → 2.0.943
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/organisms/attachment-uploader/attachment-uploader.component.mjs +6 -3
- package/esm2022/lib/components/organisms/attachment-uploader/types.mjs +1 -1
- package/esm2022/lib/components/organisms/form/form.component.mjs +51 -6
- package/esm2022/lib/components/types.mjs +2 -1
- package/esm2022/lib/config/index.mjs +2 -1
- package/esm2022/lib/config/site-links.config.mjs +65 -0
- package/esm2022/lib/services/legal-link/legal-link.service.mjs +25 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +145 -9
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/attachment-uploader/types.d.ts +2 -0
- package/lib/components/organisms/form/form.component.d.ts +10 -0
- package/lib/components/types.d.ts +4 -1
- package/lib/config/index.d.ts +1 -0
- package/lib/config/site-links.config.d.ts +59 -0
- package/lib/services/legal-link/legal-link.service.d.ts +21 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard cross-app site links (env-aware)
|
|
3
|
+
*
|
|
4
|
+
* En el factory MyValtech cada producto satélite (showcase, sigify, …) enlaza a
|
|
5
|
+
* `web` —la landing de marca— para soporte, contacto y contenido legal. `web`
|
|
6
|
+
* es el dueño canónico de esas rutas. Este módulo centraliza:
|
|
7
|
+
*
|
|
8
|
+
* 1. El mapa ambiente → base URL de `web` (`VALTECH_WEB_BASE_URLS`).
|
|
9
|
+
* 2. El catálogo de paths estándar que viven en `web` (`VALTECH_SITE_PATHS`).
|
|
10
|
+
*
|
|
11
|
+
* El ambiente se decide en BUILD TIME (campo `valtechEnv` en el `environment*.ts`
|
|
12
|
+
* de cada app), igual que `apiUrl`. Es el mecanismo más confiable: detectar por
|
|
13
|
+
* hostname en runtime se rompe con dominios custom / `web.app` / variantes de
|
|
14
|
+
* localhost.
|
|
15
|
+
*
|
|
16
|
+
* La resolución real (join baseUrl + path, abrir en tab nueva, `?lang=`) la hace
|
|
17
|
+
* `LegalLinkService`; este módulo solo le entrega el `baseUrl` correcto por env.
|
|
18
|
+
*
|
|
19
|
+
* @see provideValtechSite — wiring de una sola línea para apps satélite.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Base URL de `web` (landing de marca) por ambiente.
|
|
23
|
+
*
|
|
24
|
+
* - `local` → `ng serve` de `web` (puerto 8100).
|
|
25
|
+
* - `dev` → proyecto Firebase `myvaltech-dev`.
|
|
26
|
+
* - `prod` → dominio custom de producción.
|
|
27
|
+
*
|
|
28
|
+
* Sin trailing slash (lo asume `LegalLinkService`).
|
|
29
|
+
*/
|
|
30
|
+
export const VALTECH_WEB_BASE_URLS = {
|
|
31
|
+
local: 'http://localhost:8100',
|
|
32
|
+
dev: 'https://myvaltech-dev.web.app',
|
|
33
|
+
prod: 'https://myvaltech.com',
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Resuelve la base URL de `web` para un ambiente.
|
|
37
|
+
*
|
|
38
|
+
* Fallback a `prod` cuando el env es desconocido o falta: ante la duda, apuntar
|
|
39
|
+
* a producción es lo seguro (nunca enlaza a un host local/dev inexistente).
|
|
40
|
+
*/
|
|
41
|
+
export function resolveWebBaseUrl(env) {
|
|
42
|
+
if (env && env in VALTECH_WEB_BASE_URLS) {
|
|
43
|
+
return VALTECH_WEB_BASE_URLS[env];
|
|
44
|
+
}
|
|
45
|
+
return VALTECH_WEB_BASE_URLS.prod;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Catálogo de paths estándar que viven en `web`. Las apps resuelven estos
|
|
49
|
+
* contra la base URL del ambiente vía `LegalLinkService.resolve(path)`.
|
|
50
|
+
*
|
|
51
|
+
* Mantener alineado con las rutas reales de `web/src/app/app.routes.ts` y con
|
|
52
|
+
* `VALTECH_COMPANY_LINKS` (footer).
|
|
53
|
+
*/
|
|
54
|
+
export const VALTECH_SITE_PATHS = {
|
|
55
|
+
home: '/',
|
|
56
|
+
support: '/contact',
|
|
57
|
+
contact: '/contact',
|
|
58
|
+
faq: '/faq',
|
|
59
|
+
about: '/legal/about',
|
|
60
|
+
terms: '/legal/terms',
|
|
61
|
+
privacy: '/legal/privacy',
|
|
62
|
+
cookies: '/legal/cookies',
|
|
63
|
+
legalNotice: '/legal/legal-notice',
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l0ZS1saW5rcy5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbmZpZy9zaXRlLWxpbmtzLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUtIOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQStCO0lBQy9ELEtBQUssRUFBRSx1QkFBdUI7SUFDOUIsR0FBRyxFQUFFLCtCQUErQjtJQUNwQyxJQUFJLEVBQUUsdUJBQXVCO0NBQzlCLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxHQUFnQztJQUNoRSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUN4QyxPQUFPLHFCQUFxQixDQUFDLEdBQWlCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7QUFDcEMsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDLElBQUksRUFBRSxHQUFHO0lBQ1QsT0FBTyxFQUFFLFVBQVU7SUFDbkIsT0FBTyxFQUFFLFVBQVU7SUFDbkIsR0FBRyxFQUFFLE1BQU07SUFDWCxLQUFLLEVBQUUsY0FBYztJQUNyQixLQUFLLEVBQUUsY0FBYztJQUNyQixPQUFPLEVBQUUsZ0JBQWdCO0lBQ3pCLE9BQU8sRUFBRSxnQkFBZ0I7SUFDekIsV0FBVyxFQUFFLHFCQUFxQjtDQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTdGFuZGFyZCBjcm9zcy1hcHAgc2l0ZSBsaW5rcyAoZW52LWF3YXJlKVxuICpcbiAqIEVuIGVsIGZhY3RvcnkgTXlWYWx0ZWNoIGNhZGEgcHJvZHVjdG8gc2F0w6lsaXRlIChzaG93Y2FzZSwgc2lnaWZ5LCDigKYpIGVubGF6YSBhXG4gKiBgd2ViYCDigJRsYSBsYW5kaW5nIGRlIG1hcmNh4oCUIHBhcmEgc29wb3J0ZSwgY29udGFjdG8geSBjb250ZW5pZG8gbGVnYWwuIGB3ZWJgXG4gKiBlcyBlbCBkdWXDsW8gY2Fuw7NuaWNvIGRlIGVzYXMgcnV0YXMuIEVzdGUgbcOzZHVsbyBjZW50cmFsaXphOlxuICpcbiAqICAxLiBFbCBtYXBhIGFtYmllbnRlIOKGkiBiYXNlIFVSTCBkZSBgd2ViYCAoYFZBTFRFQ0hfV0VCX0JBU0VfVVJMU2ApLlxuICogIDIuIEVsIGNhdMOhbG9nbyBkZSBwYXRocyBlc3TDoW5kYXIgcXVlIHZpdmVuIGVuIGB3ZWJgIChgVkFMVEVDSF9TSVRFX1BBVEhTYCkuXG4gKlxuICogRWwgYW1iaWVudGUgc2UgZGVjaWRlIGVuIEJVSUxEIFRJTUUgKGNhbXBvIGB2YWx0ZWNoRW52YCBlbiBlbCBgZW52aXJvbm1lbnQqLnRzYFxuICogZGUgY2FkYSBhcHApLCBpZ3VhbCBxdWUgYGFwaVVybGAuIEVzIGVsIG1lY2FuaXNtbyBtw6FzIGNvbmZpYWJsZTogZGV0ZWN0YXIgcG9yXG4gKiBob3N0bmFtZSBlbiBydW50aW1lIHNlIHJvbXBlIGNvbiBkb21pbmlvcyBjdXN0b20gLyBgd2ViLmFwcGAgLyB2YXJpYW50ZXMgZGVcbiAqIGxvY2FsaG9zdC5cbiAqXG4gKiBMYSByZXNvbHVjacOzbiByZWFsIChqb2luIGJhc2VVcmwgKyBwYXRoLCBhYnJpciBlbiB0YWIgbnVldmEsIGA/bGFuZz1gKSBsYSBoYWNlXG4gKiBgTGVnYWxMaW5rU2VydmljZWA7IGVzdGUgbcOzZHVsbyBzb2xvIGxlIGVudHJlZ2EgZWwgYGJhc2VVcmxgIGNvcnJlY3RvIHBvciBlbnYuXG4gKlxuICogQHNlZSBwcm92aWRlVmFsdGVjaFNpdGUg4oCUIHdpcmluZyBkZSB1bmEgc29sYSBsw61uZWEgcGFyYSBhcHBzIHNhdMOpbGl0ZS5cbiAqL1xuXG4vKiogQW1iaWVudGVzIGRlbCBmYWN0b3J5LiBDb2luY2lkZSBjb24gbG9zIGBlbnZpcm9ubWVudCoudHNgIGRlIGNhZGEgYXBwLiAqL1xuZXhwb3J0IHR5cGUgVmFsdGVjaEVudiA9ICdsb2NhbCcgfCAnZGV2JyB8ICdwcm9kJztcblxuLyoqXG4gKiBCYXNlIFVSTCBkZSBgd2ViYCAobGFuZGluZyBkZSBtYXJjYSkgcG9yIGFtYmllbnRlLlxuICpcbiAqIC0gYGxvY2FsYCDihpIgYG5nIHNlcnZlYCBkZSBgd2ViYCAocHVlcnRvIDgxMDApLlxuICogLSBgZGV2YCAgIOKGkiBwcm95ZWN0byBGaXJlYmFzZSBgbXl2YWx0ZWNoLWRldmAuXG4gKiAtIGBwcm9kYCAg4oaSIGRvbWluaW8gY3VzdG9tIGRlIHByb2R1Y2Npw7NuLlxuICpcbiAqIFNpbiB0cmFpbGluZyBzbGFzaCAobG8gYXN1bWUgYExlZ2FsTGlua1NlcnZpY2VgKS5cbiAqL1xuZXhwb3J0IGNvbnN0IFZBTFRFQ0hfV0VCX0JBU0VfVVJMUzogUmVjb3JkPFZhbHRlY2hFbnYsIHN0cmluZz4gPSB7XG4gIGxvY2FsOiAnaHR0cDovL2xvY2FsaG9zdDo4MTAwJyxcbiAgZGV2OiAnaHR0cHM6Ly9teXZhbHRlY2gtZGV2LndlYi5hcHAnLFxuICBwcm9kOiAnaHR0cHM6Ly9teXZhbHRlY2guY29tJyxcbn07XG5cbi8qKlxuICogUmVzdWVsdmUgbGEgYmFzZSBVUkwgZGUgYHdlYmAgcGFyYSB1biBhbWJpZW50ZS5cbiAqXG4gKiBGYWxsYmFjayBhIGBwcm9kYCBjdWFuZG8gZWwgZW52IGVzIGRlc2Nvbm9jaWRvIG8gZmFsdGE6IGFudGUgbGEgZHVkYSwgYXB1bnRhclxuICogYSBwcm9kdWNjacOzbiBlcyBsbyBzZWd1cm8gKG51bmNhIGVubGF6YSBhIHVuIGhvc3QgbG9jYWwvZGV2IGluZXhpc3RlbnRlKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXZWJCYXNlVXJsKGVudj86IFZhbHRlY2hFbnYgfCBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHtcbiAgaWYgKGVudiAmJiBlbnYgaW4gVkFMVEVDSF9XRUJfQkFTRV9VUkxTKSB7XG4gICAgcmV0dXJuIFZBTFRFQ0hfV0VCX0JBU0VfVVJMU1tlbnYgYXMgVmFsdGVjaEVudl07XG4gIH1cbiAgcmV0dXJuIFZBTFRFQ0hfV0VCX0JBU0VfVVJMUy5wcm9kO1xufVxuXG4vKipcbiAqIENhdMOhbG9nbyBkZSBwYXRocyBlc3TDoW5kYXIgcXVlIHZpdmVuIGVuIGB3ZWJgLiBMYXMgYXBwcyByZXN1ZWx2ZW4gZXN0b3NcbiAqIGNvbnRyYSBsYSBiYXNlIFVSTCBkZWwgYW1iaWVudGUgdsOtYSBgTGVnYWxMaW5rU2VydmljZS5yZXNvbHZlKHBhdGgpYC5cbiAqXG4gKiBNYW50ZW5lciBhbGluZWFkbyBjb24gbGFzIHJ1dGFzIHJlYWxlcyBkZSBgd2ViL3NyYy9hcHAvYXBwLnJvdXRlcy50c2AgeSBjb25cbiAqIGBWQUxURUNIX0NPTVBBTllfTElOS1NgIChmb290ZXIpLlxuICovXG5leHBvcnQgY29uc3QgVkFMVEVDSF9TSVRFX1BBVEhTID0ge1xuICBob21lOiAnLycsXG4gIHN1cHBvcnQ6ICcvY29udGFjdCcsXG4gIGNvbnRhY3Q6ICcvY29udGFjdCcsXG4gIGZhcTogJy9mYXEnLFxuICBhYm91dDogJy9sZWdhbC9hYm91dCcsXG4gIHRlcm1zOiAnL2xlZ2FsL3Rlcm1zJyxcbiAgcHJpdmFjeTogJy9sZWdhbC9wcml2YWN5JyxcbiAgY29va2llczogJy9sZWdhbC9jb29raWVzJyxcbiAgbGVnYWxOb3RpY2U6ICcvbGVnYWwvbGVnYWwtbm90aWNlJyxcbn0gYXMgY29uc3Q7XG5cbi8qKiBDbGF2ZSBkZSB1biBsaW5rIGVzdMOhbmRhciBkZWwgc2l0aW8gKGAnaG9tZScgfCAnc3VwcG9ydCcgfCDigKZgKS4gKi9cbmV4cG9ydCB0eXBlIFZhbHRlY2hTaXRlUGF0aEtleSA9IGtleW9mIHR5cGVvZiBWQUxURUNIX1NJVEVfUEFUSFM7XG4iXX0=
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { InjectionToken, Injectable, inject } from '@angular/core';
|
|
2
|
+
import { resolveWebBaseUrl } from '../../config/site-links.config';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
export const VALTECH_LEGAL_CONFIG = new InjectionToken('VALTECH_LEGAL_CONFIG');
|
|
4
5
|
/**
|
|
@@ -82,4 +83,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
82
83
|
export function provideValtechLegal(config) {
|
|
83
84
|
return { provide: VALTECH_LEGAL_CONFIG, useValue: config };
|
|
84
85
|
}
|
|
85
|
-
|
|
86
|
+
/**
|
|
87
|
+
* Wiring de una sola línea para que una app satélite apunte sus links de sitio
|
|
88
|
+
* (legal, soporte, contacto, …) a `web` —la landing de marca— en el ambiente
|
|
89
|
+
* correcto. Resuelve el `baseUrl` desde `VALTECH_WEB_BASE_URLS` según el `env`
|
|
90
|
+
* baked en build-time (`environment.valtechEnv`) y delega en `provideValtechLegal`.
|
|
91
|
+
*
|
|
92
|
+
* Ambiente desconocido/ausente → fallback a `prod` (ver `resolveWebBaseUrl`).
|
|
93
|
+
* El main site (`web`) NO llama esto — sus links quedan relativos.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* // main.ts de showcase / sigify / …
|
|
97
|
+
* import { environment } from './environments/environment';
|
|
98
|
+
* provideValtechSite(environment.valtechEnv), // 'local' | 'dev' | 'prod'
|
|
99
|
+
*
|
|
100
|
+
* @see resolveWebBaseUrl
|
|
101
|
+
* @see VALTECH_SITE_PATHS — catálogo de paths estándar que viven en `web`.
|
|
102
|
+
*/
|
|
103
|
+
export function provideValtechSite(env, options) {
|
|
104
|
+
return provideValtechLegal({
|
|
105
|
+
baseUrl: resolveWebBaseUrl(env),
|
|
106
|
+
openInNewTab: options?.openInNewTab ?? true,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnYWwtbGluay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9sZWdhbC1saW5rL2xlZ2FsLWxpbmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBWSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFjLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBcUIvRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGNBQWMsQ0FBcUIsc0JBQXNCLENBQUMsQ0FBQztBQUVuRzs7Ozs7OztHQU9HO0FBRUgsTUFBTSxPQUFPLGdCQUFnQjtJQUQ3QjtRQUVtQixXQUFNLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0tBaURsRjtJQS9DQyx5REFBeUQ7SUFDekQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUN6RCxDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FrQkc7SUFDSCxPQUFPLENBQUMsSUFBWSxFQUFFLE9BQTZCO1FBQ2pELElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdkIsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN2QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUMvRCxJQUFJLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNwQixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMxQyxPQUFPLEdBQUcsR0FBRyxHQUFHLEdBQUcsUUFBUSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsa0VBQWtFO0lBQ2xFLFVBQVUsQ0FBQyxJQUFZO1FBQ3JCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDO0lBQy9CLENBQUM7K0dBakRVLGdCQUFnQjttSEFBaEIsZ0JBQWdCLGNBREgsTUFBTTs7NEZBQ25CLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7O0FBcURsQzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE1BQTBCO0lBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzdELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsR0FBZ0MsRUFDaEMsT0FBb0M7SUFFcEMsT0FBTyxtQkFBbUIsQ0FBQztRQUN6QixPQUFPLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxDQUFDO1FBQy9CLFlBQVksRUFBRSxPQUFPLEVBQUUsWUFBWSxJQUFJLElBQUk7S0FDNUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBJbmplY3RhYmxlLCBQcm92aWRlciwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWx0ZWNoRW52LCByZXNvbHZlV2ViQmFzZVVybCB9IGZyb20gJy4uLy4uL2NvbmZpZy9zaXRlLWxpbmtzLmNvbmZpZyc7XG5cbi8qKlxuICogQ29uZmlnIGZvciBjcm9zcy1hcHAgbGVnYWwvc2l0ZSBsaW5rIHJlc29sdXRpb24uXG4gKlxuICogVXNlZCBieSBzYXRlbGxpdGUgYXBwcyAoc2hvd2Nhc2UsIHNpZ2lmeSwgYWRtaW4tcG9ydGFsLCDigKYpIHRvIHBvaW50IHRoZWlyIGxlZ2FsXG4gKiBhbmQgc2l0ZSBsaW5rcyAodGVybXMsIHByaXZhY3ksIGFib3V0LCBjb250YWN0LCDigKYpIHRvIHRoZSBtYWluIG1hcmtldGluZyBzaXRlLFxuICogd2hpY2ggb3ducyB0aGUgY2Fub25pY2FsIGxlZ2FsIGNvbnRlbnQuIFRoZSBtYWluIHNpdGUgaXRzZWxmIGRvZXMgTk9UIGNhbGxcbiAqIGBwcm92aWRlVmFsdGVjaExlZ2FsYCDigJQgaXRzIGxpbmtzIHN0YXkgcmVsYXRpdmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsdGVjaExlZ2FsQ29uZmlnIHtcbiAgLyoqXG4gICAqIEFic29sdXRlIGJhc2UgVVJMIG9mIHRoZSBtYWluIHNpdGUgKG5vIHRyYWlsaW5nIHNsYXNoKS5cbiAgICogQGV4YW1wbGUgJ2h0dHBzOi8vbXl2YWx0ZWNoLmNvbSdcbiAgICovXG4gIGJhc2VVcmw/OiBzdHJpbmc7XG5cbiAgLyoqIE9wZW4gcmVzb2x2ZWQgZXh0ZXJuYWwgbGlua3MgaW4gYSBuZXcgdGFiLiBEZWZhdWx0cyB0byBgdHJ1ZWAgd2hlbiBgYmFzZVVybGAgaXMgc2V0LiAqL1xuICBvcGVuSW5OZXdUYWI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgVkFMVEVDSF9MRUdBTF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48VmFsdGVjaExlZ2FsQ29uZmlnPignVkFMVEVDSF9MRUdBTF9DT05GSUcnKTtcblxuLyoqXG4gKiBSZXNvbHZlcyBsZWdhbC9zaXRlIHBhdGhzIGFnYWluc3QgYSBjb25maWd1cmFibGUgbWFpbi1zaXRlIGJhc2UgVVJMLlxuICpcbiAqIC0gKipNYWluIHNpdGUgbW9kZSoqOiBubyBgcHJvdmlkZVZhbHRlY2hMZWdhbGAgY2FsbGVkIOKGkiBgcmVzb2x2ZSgnL2xlZ2FsL3Rlcm1zJylgIHJldHVybnMgYC9sZWdhbC90ZXJtc2AgKHJlbGF0aXZlKS5cbiAqIC0gKipTYXRlbGxpdGUgbW9kZSoqOiBgcHJvdmlkZVZhbHRlY2hMZWdhbCh7IGJhc2VVcmw6ICdodHRwczovL215dmFsdGVjaC5jb20nIH0pYCDihpIgYHJlc29sdmUoJy9sZWdhbC90ZXJtcycpYCByZXR1cm5zIGAnaHR0cHM6Ly9teXZhbHRlY2guY29tL2xlZ2FsL3Rlcm1zJ2AgYW5kIGBpc0V4dGVybmFsKCcvbGVnYWwvdGVybXMnKWAgcmV0dXJucyBgdHJ1ZWAuXG4gKlxuICogQWJzb2x1dGUgVVJMcyBwYXNzZWQgaW4gYXJlIHJldHVybmVkIHVuY2hhbmdlZCAobm8gZG91YmxlLXByZWZpeCkuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTGVnYWxMaW5rU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KFZBTFRFQ0hfTEVHQUxfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pID8/IHt9O1xuXG4gIC8qKiBFZmZlY3RpdmUgYmFzZSBVUkwgKG51bGwgaWYgcnVubmluZyBhcyBtYWluIHNpdGUpLiAqL1xuICBnZXQgYmFzZVVybCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuYmFzZVVybD8ucmVwbGFjZSgvXFwvJC8sICcnKSA/PyBudWxsO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgcmVzb2x2ZWQgZXh0ZXJuYWwgbGlua3Mgc2hvdWxkIG9wZW4gaW4gYSBuZXcgdGFiLiAqL1xuICBnZXQgb3BlbkluTmV3VGFiKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5vcGVuSW5OZXdUYWIgPz8gQm9vbGVhbih0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBVUkwgdG8gdXNlIGZvciBhIGdpdmVuIGludGVybmFsIHBhdGguIEFic29sdXRlIFVSTHMgcGFzcyB0aHJvdWdoLlxuICAgKlxuICAgKiBXaGVuIGBsb2NhbGVgIGlzIHByb3ZpZGVkIEFORCB0aGUgcmVzb2x2ZWQgVVJMIHdvdWxkIGJlIGNyb3NzLW9yaWdpbiwgYXBwZW5kc1xuICAgKiBgP2xhbmc9e2xvY2FsZX1gIHNvIHRoZSBtYWluIHNpdGUgY2FuIHJlbmRlciB0aGUgbGVnYWwgZG9jIGluIHRoZSB1c2VyJ3NcbiAgICogYWN0aXZlIGxhbmd1YWdlIChpbnN0ZWFkIG9mIGl0cyBkZWZhdWx0KS4gTG9jYWxlIGlzIG9taXR0ZWQgZm9yIHNhbWUtb3JpZ2luXG4gICAqIHJlc29sdmVzIHNpbmNlIHRoZSBtYWluIHNpdGUgcmVhZHMgbG9jYWxlIGZyb20gaXRzIG93biBgTG9jYWxlU2VydmljZWAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHJlc29sdmUoJy9sZWdhbC90ZXJtcycpXG4gICAqICAgLy8gbWFpbiBzaXRlOiAgJy9sZWdhbC90ZXJtcydcbiAgICogICAvLyBzYXRlbGxpdGU6ICAnaHR0cHM6Ly9teXZhbHRlY2guY29tL2xlZ2FsL3Rlcm1zJ1xuICAgKlxuICAgKiByZXNvbHZlKCcvbGVnYWwvdGVybXMnLCB7IGxvY2FsZTogJ3B0JyB9KVxuICAgKiAgIC8vIG1haW4gc2l0ZTogICcvbGVnYWwvdGVybXMnICAobG9jYWxlIHN0YXlzIGltcGxpY2l0KVxuICAgKiAgIC8vIHNhdGVsbGl0ZTogICdodHRwczovL215dmFsdGVjaC5jb20vbGVnYWwvdGVybXM/bGFuZz1wdCdcbiAgICpcbiAgICogcmVzb2x2ZSgnaHR0cHM6Ly94LmNvbS95JykgLy8gdW5jaGFuZ2VkXG4gICAqL1xuICByZXNvbHZlKHBhdGg6IHN0cmluZywgb3B0aW9ucz86IHsgbG9jYWxlPzogc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGlmICghcGF0aCkgcmV0dXJuIHBhdGg7XG4gICAgaWYgKC9eaHR0cHM/OlxcL1xcLy9pLnRlc3QocGF0aCkpIHJldHVybiBwYXRoO1xuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmJhc2VVcmw7XG4gICAgaWYgKCFiYXNlKSByZXR1cm4gcGF0aDtcbiAgICBjb25zdCB1cmwgPSBgJHtiYXNlfSR7cGF0aC5zdGFydHNXaXRoKCcvJykgPyAnJyA6ICcvJ30ke3BhdGh9YDtcbiAgICBpZiAob3B0aW9ucz8ubG9jYWxlKSB7XG4gICAgICBjb25zdCBzZXAgPSB1cmwuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/JztcbiAgICAgIHJldHVybiBgJHt1cmx9JHtzZXB9bGFuZz0ke2VuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLmxvY2FsZSl9YDtcbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIC8qKiBgdHJ1ZWAgaWYgdGhlIHBhdGggd291bGQgYmUgcmVzb2x2ZWQgdG8gYSBjcm9zcy1vcmlnaW4gVVJMLiAqL1xuICBpc0V4dGVybmFsKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICgvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KHBhdGgpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5iYXNlVXJsICE9PSBudWxsO1xuICB9XG59XG5cbi8qKlxuICogV2lyZXMgYExlZ2FsTGlua1NlcnZpY2VgIGZvciBzYXRlbGxpdGUgYXBwcy4gT21pdCBpbiB0aGUgbWFpbiBzaXRlICh0aGUgb25lXG4gKiB0aGF0IGhvc3RzIHRoZSBjYW5vbmljYWwgL2xlZ2FsLyogcm91dGVzKSBzbyBsaW5rcyBzdGF5IHJlbGF0aXZlLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBtYWluLnRzIG9mIHNob3djYXNlIC8gc2lnaWZ5IC8gZXRjLlxuICogcHJvdmlkZVZhbHRlY2hMZWdhbCh7XG4gKiAgIGJhc2VVcmw6ICdodHRwczovL215dmFsdGVjaC5jb20nLFxuICogICBvcGVuSW5OZXdUYWI6IHRydWUsXG4gKiB9KSxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVWYWx0ZWNoTGVnYWwoY29uZmlnOiBWYWx0ZWNoTGVnYWxDb25maWcpOiBQcm92aWRlciB7XG4gIHJldHVybiB7IHByb3ZpZGU6IFZBTFRFQ0hfTEVHQUxfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH07XG59XG5cbi8qKlxuICogV2lyaW5nIGRlIHVuYSBzb2xhIGzDrW5lYSBwYXJhIHF1ZSB1bmEgYXBwIHNhdMOpbGl0ZSBhcHVudGUgc3VzIGxpbmtzIGRlIHNpdGlvXG4gKiAobGVnYWwsIHNvcG9ydGUsIGNvbnRhY3RvLCDigKYpIGEgYHdlYmAg4oCUbGEgbGFuZGluZyBkZSBtYXJjYeKAlCBlbiBlbCBhbWJpZW50ZVxuICogY29ycmVjdG8uIFJlc3VlbHZlIGVsIGBiYXNlVXJsYCBkZXNkZSBgVkFMVEVDSF9XRUJfQkFTRV9VUkxTYCBzZWfDum4gZWwgYGVudmBcbiAqIGJha2VkIGVuIGJ1aWxkLXRpbWUgKGBlbnZpcm9ubWVudC52YWx0ZWNoRW52YCkgeSBkZWxlZ2EgZW4gYHByb3ZpZGVWYWx0ZWNoTGVnYWxgLlxuICpcbiAqIEFtYmllbnRlIGRlc2Nvbm9jaWRvL2F1c2VudGUg4oaSIGZhbGxiYWNrIGEgYHByb2RgICh2ZXIgYHJlc29sdmVXZWJCYXNlVXJsYCkuXG4gKiBFbCBtYWluIHNpdGUgKGB3ZWJgKSBOTyBsbGFtYSBlc3RvIOKAlCBzdXMgbGlua3MgcXVlZGFuIHJlbGF0aXZvcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gbWFpbi50cyBkZSBzaG93Y2FzZSAvIHNpZ2lmeSAvIOKAplxuICogaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG4gKiBwcm92aWRlVmFsdGVjaFNpdGUoZW52aXJvbm1lbnQudmFsdGVjaEVudiksICAvLyAnbG9jYWwnIHwgJ2RldicgfCAncHJvZCdcbiAqXG4gKiBAc2VlIHJlc29sdmVXZWJCYXNlVXJsXG4gKiBAc2VlIFZBTFRFQ0hfU0lURV9QQVRIUyDigJQgY2F0w6Fsb2dvIGRlIHBhdGhzIGVzdMOhbmRhciBxdWUgdml2ZW4gZW4gYHdlYmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVmFsdGVjaFNpdGUoXG4gIGVudj86IFZhbHRlY2hFbnYgfCBzdHJpbmcgfCBudWxsLFxuICBvcHRpb25zPzogeyBvcGVuSW5OZXdUYWI/OiBib29sZWFuIH1cbik6IFByb3ZpZGVyIHtcbiAgcmV0dXJuIHByb3ZpZGVWYWx0ZWNoTGVnYWwoe1xuICAgIGJhc2VVcmw6IHJlc29sdmVXZWJCYXNlVXJsKGVudiksXG4gICAgb3BlbkluTmV3VGFiOiBvcHRpb25zPy5vcGVuSW5OZXdUYWIgPz8gdHJ1ZSxcbiAgfSk7XG59XG4iXX0=
|
package/esm2022/lib/version.mjs
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Current version of valtech-components.
|
|
3
3
|
* This is automatically updated during the publish process.
|
|
4
4
|
*/
|
|
5
|
-
export const VERSION = '2.0.
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
export const VERSION = '2.0.943';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzIuMC45NDMnO1xuIl19
|
|
@@ -54,7 +54,7 @@ import 'prismjs/components/prism-json';
|
|
|
54
54
|
* Current version of valtech-components.
|
|
55
55
|
* This is automatically updated during the publish process.
|
|
56
56
|
*/
|
|
57
|
-
const VERSION = '2.0.
|
|
57
|
+
const VERSION = '2.0.943';
|
|
58
58
|
|
|
59
59
|
// Control de estado de refresco (singleton a nivel de módulo)
|
|
60
60
|
let isRefreshing = false;
|
|
@@ -10006,6 +10006,7 @@ var InputType;
|
|
|
10006
10006
|
InputType[InputType["CURRENCY"] = 21] = "CURRENCY";
|
|
10007
10007
|
InputType[InputType["CHECKBOX_RADIO"] = 22] = "CHECKBOX_RADIO";
|
|
10008
10008
|
InputType[InputType["HANDLE"] = 23] = "HANDLE";
|
|
10009
|
+
InputType[InputType["ATTACHMENT"] = 24] = "ATTACHMENT";
|
|
10009
10010
|
})(InputType || (InputType = {}));
|
|
10010
10011
|
/**
|
|
10011
10012
|
* Possible action types for a toolbar.
|
|
@@ -28986,7 +28987,7 @@ class AttachmentUploaderComponent {
|
|
|
28986
28987
|
this.props = input({});
|
|
28987
28988
|
this.attachmentsChange = output();
|
|
28988
28989
|
this.i18n = inject(I18nService);
|
|
28989
|
-
this.feedbackService = inject(FeedbackService);
|
|
28990
|
+
this.feedbackService = inject(FeedbackService, { optional: true });
|
|
28990
28991
|
this.attachments = signal([]);
|
|
28991
28992
|
this.maxFiles = computed(() => this.props().maxFiles ?? 5);
|
|
28992
28993
|
this.accept = computed(() => this.props().accept ?? 'image/jpeg,image/png,image/webp,application/pdf');
|
|
@@ -29034,7 +29035,10 @@ class AttachmentUploaderComponent {
|
|
|
29034
29035
|
try {
|
|
29035
29036
|
const shouldCompress = this.props().compressImages !== false && file.type.startsWith('image/');
|
|
29036
29037
|
const fileToUpload = shouldCompress ? await this.compressImage(file) : file;
|
|
29037
|
-
const
|
|
29038
|
+
const uploadFn = this.props().uploadFn ?? this.feedbackService?.uploadAttachment.bind(this.feedbackService);
|
|
29039
|
+
if (!uploadFn)
|
|
29040
|
+
throw new Error('No upload function configured');
|
|
29041
|
+
const url = await uploadFn(fileToUpload);
|
|
29038
29042
|
this.attachments.update(list => list.map(a => (a.id === id ? { ...a, status: 'ready', url } : a)));
|
|
29039
29043
|
}
|
|
29040
29044
|
catch {
|
|
@@ -29963,6 +29967,7 @@ class FormComponent {
|
|
|
29963
29967
|
this.onInvalid = new EventEmitter();
|
|
29964
29968
|
this.onSelectChange = new EventEmitter();
|
|
29965
29969
|
this.types = InputType;
|
|
29970
|
+
this.states = ComponentStates;
|
|
29966
29971
|
this.subscriptions = [];
|
|
29967
29972
|
this.actionsCache = [];
|
|
29968
29973
|
// Memo de getFieldProp/getUsernameProp por referencia de field — evita
|
|
@@ -29973,6 +29978,9 @@ class FormComponent {
|
|
|
29973
29978
|
this.usernamePropMemo = new WeakMap();
|
|
29974
29979
|
this.textareaPropMemo = new WeakMap();
|
|
29975
29980
|
this.selectPropMemo = new WeakMap();
|
|
29981
|
+
this.previousUploadingCount = 0;
|
|
29982
|
+
// Campos ATTACHMENT con uploads en curso — bloquea submit + pone botón en WORKING
|
|
29983
|
+
this.uploadingFields = new Set();
|
|
29976
29984
|
}
|
|
29977
29985
|
ngOnInit() {
|
|
29978
29986
|
const formControls = {};
|
|
@@ -29989,6 +29997,9 @@ class FormComponent {
|
|
|
29989
29997
|
formControls[`${field.name}_from`] = [initialValue, field.validators || []];
|
|
29990
29998
|
formControls[`${field.name}_to`] = [initialValue, field.validators || []];
|
|
29991
29999
|
}
|
|
30000
|
+
else if (field.type === this.types.ATTACHMENT) {
|
|
30001
|
+
formControls[field.name] = [[], field.validators || []];
|
|
30002
|
+
}
|
|
29992
30003
|
else {
|
|
29993
30004
|
formControls[field.name] = [initialValue, field.validators || []];
|
|
29994
30005
|
}
|
|
@@ -30019,8 +30030,12 @@ class FormComponent {
|
|
|
30019
30030
|
}
|
|
30020
30031
|
ngDoCheck() {
|
|
30021
30032
|
// Detectar cambios en el estado del formulario (mutación sin cambiar referencia)
|
|
30022
|
-
|
|
30033
|
+
const uploadingCount = this.uploadingFields.size;
|
|
30034
|
+
if (this.form &&
|
|
30035
|
+
this.props &&
|
|
30036
|
+
(this.props.state !== this.previousState || uploadingCount !== this.previousUploadingCount)) {
|
|
30023
30037
|
this.previousState = this.props.state;
|
|
30038
|
+
this.previousUploadingCount = uploadingCount;
|
|
30024
30039
|
this.updateActionsCache();
|
|
30025
30040
|
}
|
|
30026
30041
|
}
|
|
@@ -30030,6 +30045,8 @@ class FormComponent {
|
|
|
30030
30045
|
syncFieldControlStates() {
|
|
30031
30046
|
this.props.sections.forEach(section => {
|
|
30032
30047
|
section.fields.forEach(field => {
|
|
30048
|
+
if (field.type === this.types.ATTACHMENT)
|
|
30049
|
+
return;
|
|
30033
30050
|
if (field.type === this.types.NUMBER_FROM_TO) {
|
|
30034
30051
|
const fromControl = this.getControl(`${field.name}_from`);
|
|
30035
30052
|
const toControl = this.getControl(`${field.name}_to`);
|
|
@@ -30059,7 +30076,7 @@ class FormComponent {
|
|
|
30059
30076
|
*/
|
|
30060
30077
|
updateActionsCache() {
|
|
30061
30078
|
let actionState = this.props.actions.state;
|
|
30062
|
-
if (this.props.state === ComponentStates.WORKING) {
|
|
30079
|
+
if (this.props.state === ComponentStates.WORKING || this.uploadingFields.size > 0) {
|
|
30063
30080
|
actionState = ComponentStates.WORKING;
|
|
30064
30081
|
}
|
|
30065
30082
|
else if (this.props.state === ComponentStates.DISABLED) {
|
|
@@ -30082,8 +30099,20 @@ class FormComponent {
|
|
|
30082
30099
|
this.subscriptions.push(subscription);
|
|
30083
30100
|
}
|
|
30084
30101
|
async submitHandler(token) {
|
|
30102
|
+
if (this.uploadingFields.size > 0)
|
|
30103
|
+
return;
|
|
30085
30104
|
this.onSubmit.emit({ fields: this.form.getRawValue(), token });
|
|
30086
30105
|
}
|
|
30106
|
+
onAttachmentChange(fieldName, items) {
|
|
30107
|
+
const readyUrls = items.filter(a => a.status === 'ready' && a.url).map(a => a.url);
|
|
30108
|
+
this.form.get(fieldName)?.setValue(readyUrls, { emitEvent: false });
|
|
30109
|
+
if (items.some(a => a.status === 'uploading')) {
|
|
30110
|
+
this.uploadingFields.add(fieldName);
|
|
30111
|
+
}
|
|
30112
|
+
else {
|
|
30113
|
+
this.uploadingFields.delete(fieldName);
|
|
30114
|
+
}
|
|
30115
|
+
}
|
|
30087
30116
|
getControl(field) {
|
|
30088
30117
|
return this.Form.get(field);
|
|
30089
30118
|
}
|
|
@@ -30211,7 +30240,7 @@ class FormComponent {
|
|
|
30211
30240
|
<val-title [props]="{ content: s.name, size: 'large', color: '', bold: false }"></val-title>
|
|
30212
30241
|
@for (f of s.fields; track f.name) {
|
|
30213
30242
|
<div class="input" [attr.data-testid]="f.token">
|
|
30214
|
-
@if (f.type !== types.PHONE && f.type !== types.HANDLE) {
|
|
30243
|
+
@if (f.type !== types.PHONE && f.type !== types.HANDLE && f.type !== types.ATTACHMENT) {
|
|
30215
30244
|
<val-title [props]="{ content: f.label, size: 'small', color: 'dark', bold: false }"></val-title>
|
|
30216
30245
|
}
|
|
30217
30246
|
@if (f.description) {
|
|
@@ -30278,6 +30307,15 @@ class FormComponent {
|
|
|
30278
30307
|
@case (types.CHECKBOX_RADIO) {
|
|
30279
30308
|
<val-checkbox-radio-input [props]="getFieldProp(f)"></val-checkbox-radio-input>
|
|
30280
30309
|
}
|
|
30310
|
+
@case (types.ATTACHMENT) {
|
|
30311
|
+
<val-attachment-uploader
|
|
30312
|
+
[props]="{
|
|
30313
|
+
uploadFn: f.uploadFn,
|
|
30314
|
+
disabled: f.state === states.DISABLED || f.state === states.WORKING,
|
|
30315
|
+
}"
|
|
30316
|
+
(attachmentsChange)="onAttachmentChange(f.name, $event)"
|
|
30317
|
+
></val-attachment-uploader>
|
|
30318
|
+
}
|
|
30281
30319
|
}
|
|
30282
30320
|
<val-hint [props]="getFieldProp(f)"></val-hint>
|
|
30283
30321
|
</div>
|
|
@@ -30292,7 +30330,7 @@ class FormComponent {
|
|
|
30292
30330
|
></val-button-group>
|
|
30293
30331
|
</form>
|
|
30294
30332
|
</div>
|
|
30295
|
-
`, isInline: true, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-padding: 16px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.field-description{display:block;font-size:.75rem;color:var(--ion-color-dark);margin-bottom:.25rem;line-height:1.4}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextInputComponent, selector: "val-text-input", inputs: ["preset", "props"] }, { kind: "component", type: TextareaInputComponent, selector: "val-textarea-input", inputs: ["preset", "props"] }, { kind: "component", type: CheckInputComponent, selector: "val-check-input", inputs: ["preset", "props"] }, { kind: "component", type: ButtonGroupComponent, selector: "val-button-group", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: DividerComponent, selector: "val-divider", inputs: ["props"] }, { kind: "component", type: HintComponent, selector: "val-hint", inputs: ["props"] }, { kind: "component", type: CommentInputComponent, selector: "val-comment-input", inputs: ["props"] }, { kind: "component", type: DateInputComponent, selector: "val-date-input", inputs: ["preset", "props"] }, { kind: "component", type: FileInputComponent, selector: "val-file-input", inputs: ["props"] }, { kind: "component", type: HourInputComponent, selector: "val-hour-input", inputs: ["props"] }, { kind: "component", type: EmailInputComponent, selector: "val-email-input", inputs: ["preset", "props"] }, { kind: "component", type: NumberInputComponent, selector: "val-number-input", inputs: ["props"] }, { kind: "component", type: NumberFromToComponent, selector: "val-number-from-to", inputs: ["props"] }, { kind: "component", type: RadioInputComponent, selector: "val-radio-input", inputs: ["props"] }, { kind: "component", type: PasswordInputComponent, selector: "val-password-input", inputs: ["preset", "props"] }, { kind: "component", type: PinInputComponent, selector: "val-pin-input", inputs: ["props"] }, { kind: "component", type: SelectSearchComponent, selector: "val-select-search", inputs: ["label", "labelProperty", "valueProperty", "multiple", "placeholder", "props"] }, { kind: "component", type: MultiSelectSearchComponent, selector: "val-multi-select-search", inputs: ["label", "labelProperty", "valueProperty", "placeholder", "props"] }, { kind: "component", type: SearchSelectorComponent, selector: "val-select-input", inputs: ["preset", "props"] }, { kind: "component", type: PhoneInputComponent, selector: "val-phone-input", inputs: ["preset", "props"], outputs: ["phoneChange"] }, { kind: "component", type: ToggleInputComponent, selector: "val-toggle-input", inputs: ["preset", "props"] }, { kind: "component", type: CheckboxRadioInputComponent, selector: "val-checkbox-radio-input", inputs: ["props"] }, { kind: "component", type: UsernameInputComponent, selector: "val-username-input", inputs: ["props"] }] }); }
|
|
30333
|
+
`, isInline: true, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-padding: 16px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.field-description{display:block;font-size:.75rem;color:var(--ion-color-dark);margin-bottom:.25rem;line-height:1.4}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextInputComponent, selector: "val-text-input", inputs: ["preset", "props"] }, { kind: "component", type: TextareaInputComponent, selector: "val-textarea-input", inputs: ["preset", "props"] }, { kind: "component", type: CheckInputComponent, selector: "val-check-input", inputs: ["preset", "props"] }, { kind: "component", type: ButtonGroupComponent, selector: "val-button-group", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: DividerComponent, selector: "val-divider", inputs: ["props"] }, { kind: "component", type: HintComponent, selector: "val-hint", inputs: ["props"] }, { kind: "component", type: CommentInputComponent, selector: "val-comment-input", inputs: ["props"] }, { kind: "component", type: DateInputComponent, selector: "val-date-input", inputs: ["preset", "props"] }, { kind: "component", type: FileInputComponent, selector: "val-file-input", inputs: ["props"] }, { kind: "component", type: HourInputComponent, selector: "val-hour-input", inputs: ["props"] }, { kind: "component", type: EmailInputComponent, selector: "val-email-input", inputs: ["preset", "props"] }, { kind: "component", type: NumberInputComponent, selector: "val-number-input", inputs: ["props"] }, { kind: "component", type: NumberFromToComponent, selector: "val-number-from-to", inputs: ["props"] }, { kind: "component", type: RadioInputComponent, selector: "val-radio-input", inputs: ["props"] }, { kind: "component", type: PasswordInputComponent, selector: "val-password-input", inputs: ["preset", "props"] }, { kind: "component", type: PinInputComponent, selector: "val-pin-input", inputs: ["props"] }, { kind: "component", type: SelectSearchComponent, selector: "val-select-search", inputs: ["label", "labelProperty", "valueProperty", "multiple", "placeholder", "props"] }, { kind: "component", type: MultiSelectSearchComponent, selector: "val-multi-select-search", inputs: ["label", "labelProperty", "valueProperty", "placeholder", "props"] }, { kind: "component", type: SearchSelectorComponent, selector: "val-select-input", inputs: ["preset", "props"] }, { kind: "component", type: PhoneInputComponent, selector: "val-phone-input", inputs: ["preset", "props"], outputs: ["phoneChange"] }, { kind: "component", type: ToggleInputComponent, selector: "val-toggle-input", inputs: ["preset", "props"] }, { kind: "component", type: CheckboxRadioInputComponent, selector: "val-checkbox-radio-input", inputs: ["props"] }, { kind: "component", type: UsernameInputComponent, selector: "val-username-input", inputs: ["props"] }, { kind: "component", type: AttachmentUploaderComponent, selector: "val-attachment-uploader", inputs: ["props"], outputs: ["attachmentsChange"] }] }); }
|
|
30296
30334
|
}
|
|
30297
30335
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormComponent, decorators: [{
|
|
30298
30336
|
type: Component,
|
|
@@ -30324,6 +30362,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
30324
30362
|
ToggleInputComponent,
|
|
30325
30363
|
CheckboxRadioInputComponent,
|
|
30326
30364
|
UsernameInputComponent,
|
|
30365
|
+
AttachmentUploaderComponent,
|
|
30327
30366
|
], template: `
|
|
30328
30367
|
<div class="container">
|
|
30329
30368
|
<form [formGroup]="form">
|
|
@@ -30341,7 +30380,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
30341
30380
|
<val-title [props]="{ content: s.name, size: 'large', color: '', bold: false }"></val-title>
|
|
30342
30381
|
@for (f of s.fields; track f.name) {
|
|
30343
30382
|
<div class="input" [attr.data-testid]="f.token">
|
|
30344
|
-
@if (f.type !== types.PHONE && f.type !== types.HANDLE) {
|
|
30383
|
+
@if (f.type !== types.PHONE && f.type !== types.HANDLE && f.type !== types.ATTACHMENT) {
|
|
30345
30384
|
<val-title [props]="{ content: f.label, size: 'small', color: 'dark', bold: false }"></val-title>
|
|
30346
30385
|
}
|
|
30347
30386
|
@if (f.description) {
|
|
@@ -30408,6 +30447,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
30408
30447
|
@case (types.CHECKBOX_RADIO) {
|
|
30409
30448
|
<val-checkbox-radio-input [props]="getFieldProp(f)"></val-checkbox-radio-input>
|
|
30410
30449
|
}
|
|
30450
|
+
@case (types.ATTACHMENT) {
|
|
30451
|
+
<val-attachment-uploader
|
|
30452
|
+
[props]="{
|
|
30453
|
+
uploadFn: f.uploadFn,
|
|
30454
|
+
disabled: f.state === states.DISABLED || f.state === states.WORKING,
|
|
30455
|
+
}"
|
|
30456
|
+
(attachmentsChange)="onAttachmentChange(f.name, $event)"
|
|
30457
|
+
></val-attachment-uploader>
|
|
30458
|
+
}
|
|
30411
30459
|
}
|
|
30412
30460
|
<val-hint [props]="getFieldProp(f)"></val-hint>
|
|
30413
30461
|
</div>
|
|
@@ -42647,6 +42695,71 @@ function provideLegalContent(config) {
|
|
|
42647
42695
|
return { provide: LEGAL_CONTENT_CONFIG, useValue: config };
|
|
42648
42696
|
}
|
|
42649
42697
|
|
|
42698
|
+
/**
|
|
42699
|
+
* Standard cross-app site links (env-aware)
|
|
42700
|
+
*
|
|
42701
|
+
* En el factory MyValtech cada producto satélite (showcase, sigify, …) enlaza a
|
|
42702
|
+
* `web` —la landing de marca— para soporte, contacto y contenido legal. `web`
|
|
42703
|
+
* es el dueño canónico de esas rutas. Este módulo centraliza:
|
|
42704
|
+
*
|
|
42705
|
+
* 1. El mapa ambiente → base URL de `web` (`VALTECH_WEB_BASE_URLS`).
|
|
42706
|
+
* 2. El catálogo de paths estándar que viven en `web` (`VALTECH_SITE_PATHS`).
|
|
42707
|
+
*
|
|
42708
|
+
* El ambiente se decide en BUILD TIME (campo `valtechEnv` en el `environment*.ts`
|
|
42709
|
+
* de cada app), igual que `apiUrl`. Es el mecanismo más confiable: detectar por
|
|
42710
|
+
* hostname en runtime se rompe con dominios custom / `web.app` / variantes de
|
|
42711
|
+
* localhost.
|
|
42712
|
+
*
|
|
42713
|
+
* La resolución real (join baseUrl + path, abrir en tab nueva, `?lang=`) la hace
|
|
42714
|
+
* `LegalLinkService`; este módulo solo le entrega el `baseUrl` correcto por env.
|
|
42715
|
+
*
|
|
42716
|
+
* @see provideValtechSite — wiring de una sola línea para apps satélite.
|
|
42717
|
+
*/
|
|
42718
|
+
/**
|
|
42719
|
+
* Base URL de `web` (landing de marca) por ambiente.
|
|
42720
|
+
*
|
|
42721
|
+
* - `local` → `ng serve` de `web` (puerto 8100).
|
|
42722
|
+
* - `dev` → proyecto Firebase `myvaltech-dev`.
|
|
42723
|
+
* - `prod` → dominio custom de producción.
|
|
42724
|
+
*
|
|
42725
|
+
* Sin trailing slash (lo asume `LegalLinkService`).
|
|
42726
|
+
*/
|
|
42727
|
+
const VALTECH_WEB_BASE_URLS = {
|
|
42728
|
+
local: 'http://localhost:8100',
|
|
42729
|
+
dev: 'https://myvaltech-dev.web.app',
|
|
42730
|
+
prod: 'https://myvaltech.com',
|
|
42731
|
+
};
|
|
42732
|
+
/**
|
|
42733
|
+
* Resuelve la base URL de `web` para un ambiente.
|
|
42734
|
+
*
|
|
42735
|
+
* Fallback a `prod` cuando el env es desconocido o falta: ante la duda, apuntar
|
|
42736
|
+
* a producción es lo seguro (nunca enlaza a un host local/dev inexistente).
|
|
42737
|
+
*/
|
|
42738
|
+
function resolveWebBaseUrl(env) {
|
|
42739
|
+
if (env && env in VALTECH_WEB_BASE_URLS) {
|
|
42740
|
+
return VALTECH_WEB_BASE_URLS[env];
|
|
42741
|
+
}
|
|
42742
|
+
return VALTECH_WEB_BASE_URLS.prod;
|
|
42743
|
+
}
|
|
42744
|
+
/**
|
|
42745
|
+
* Catálogo de paths estándar que viven en `web`. Las apps resuelven estos
|
|
42746
|
+
* contra la base URL del ambiente vía `LegalLinkService.resolve(path)`.
|
|
42747
|
+
*
|
|
42748
|
+
* Mantener alineado con las rutas reales de `web/src/app/app.routes.ts` y con
|
|
42749
|
+
* `VALTECH_COMPANY_LINKS` (footer).
|
|
42750
|
+
*/
|
|
42751
|
+
const VALTECH_SITE_PATHS = {
|
|
42752
|
+
home: '/',
|
|
42753
|
+
support: '/contact',
|
|
42754
|
+
contact: '/contact',
|
|
42755
|
+
faq: '/faq',
|
|
42756
|
+
about: '/legal/about',
|
|
42757
|
+
terms: '/legal/terms',
|
|
42758
|
+
privacy: '/legal/privacy',
|
|
42759
|
+
cookies: '/legal/cookies',
|
|
42760
|
+
legalNotice: '/legal/legal-notice',
|
|
42761
|
+
};
|
|
42762
|
+
|
|
42650
42763
|
const VALTECH_LEGAL_CONFIG = new InjectionToken('VALTECH_LEGAL_CONFIG');
|
|
42651
42764
|
/**
|
|
42652
42765
|
* Resolves legal/site paths against a configurable main-site base URL.
|
|
@@ -42729,6 +42842,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42729
42842
|
function provideValtechLegal(config) {
|
|
42730
42843
|
return { provide: VALTECH_LEGAL_CONFIG, useValue: config };
|
|
42731
42844
|
}
|
|
42845
|
+
/**
|
|
42846
|
+
* Wiring de una sola línea para que una app satélite apunte sus links de sitio
|
|
42847
|
+
* (legal, soporte, contacto, …) a `web` —la landing de marca— en el ambiente
|
|
42848
|
+
* correcto. Resuelve el `baseUrl` desde `VALTECH_WEB_BASE_URLS` según el `env`
|
|
42849
|
+
* baked en build-time (`environment.valtechEnv`) y delega en `provideValtechLegal`.
|
|
42850
|
+
*
|
|
42851
|
+
* Ambiente desconocido/ausente → fallback a `prod` (ver `resolveWebBaseUrl`).
|
|
42852
|
+
* El main site (`web`) NO llama esto — sus links quedan relativos.
|
|
42853
|
+
*
|
|
42854
|
+
* @example
|
|
42855
|
+
* // main.ts de showcase / sigify / …
|
|
42856
|
+
* import { environment } from './environments/environment';
|
|
42857
|
+
* provideValtechSite(environment.valtechEnv), // 'local' | 'dev' | 'prod'
|
|
42858
|
+
*
|
|
42859
|
+
* @see resolveWebBaseUrl
|
|
42860
|
+
* @see VALTECH_SITE_PATHS — catálogo de paths estándar que viven en `web`.
|
|
42861
|
+
*/
|
|
42862
|
+
function provideValtechSite(env, options) {
|
|
42863
|
+
return provideValtechLegal({
|
|
42864
|
+
baseUrl: resolveWebBaseUrl(env),
|
|
42865
|
+
openInNewTab: options?.openInNewTab ?? true,
|
|
42866
|
+
});
|
|
42867
|
+
}
|
|
42732
42868
|
|
|
42733
42869
|
class OrgService {
|
|
42734
42870
|
constructor(config, http) {
|
|
@@ -50242,5 +50378,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
50242
50378
|
* Generated bundle index. Do not edit.
|
|
50243
50379
|
*/
|
|
50244
50380
|
|
|
50245
|
-
export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, ARTICLE_SPACING, AVATAR_UPLOAD_DEFAULTS, AccordionComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimatedTerminalComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BaseDefault, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CORNER_KEYS, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentTransformer, CookieBannerComponent, CountdownComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_CANCEL_BUTTON, DEFAULT_CHECK_INTERVAL_MS, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_DEBUG_CONSOLE_CONFIG, DEFAULT_DONATION_CONFIG, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_SPLASH_SCREEN_CONFIG, DataTableComponent, DateInputComponent, DateRangeInputComponent, DebugConsoleComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EmailInputComponent, EmptyStateComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FooterComponent, FooterLinksComponent, FormComponent, FormFooterComponent, FormSkeletonComponent, FunHeaderComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HasPermissionDirective, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, INVITATION_CARD_DEFAULTS, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, InvitationCardComponent, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginComponent, MEMBER_CARD_DEFAULTS, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MemberCardComponent, MenuComponent, MessagingService, MetaService, MfaModalComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationsService, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OrgService, OrgSwitchService, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PresetService, PriceTagComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProfileSkeletonComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RequestFormBuilderService, RequestService, RightsFooterComponent, RotatingTextComponent, SHAPE_KEYS, SKELETON_LAYOUT_DEFAULT_ROWS, SKELETON_PRESETS, SOLID_KEYS, STROKE_KEYS, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SegmentControlComponent, SelectSearchComponent, SessionService, ShareButtonsComponent, SimpleComponent, SkeletonComponent, SkeletonLayoutComponent, SkeletonService, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, SplashScreenService, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TranslatePipe, TypedCollection, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_DEBUG_CONSOLE, VALTECH_DEFAULT_CONTENT, VALTECH_DONATION_CONFIG, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_NETWORK_ERROR_KEY, VALTECH_SOCIAL_LINKS, VALTECH_SPLASH_SCREEN, VERSION, ValtechErrorService, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, authPasswordValidator, blogPost, buildFooterLinks, buildPath, collections, connectPageRefresh, createErrorStateProps, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createRefreshableStream, createTitleProps, docs, errorLoggingInterceptor, extractPathParams, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, guestGuard, hasEmulators, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, provideSplashScreen, provideValtechAds, provideValtechAppConfig, provideValtechAppVersion, provideValtechAuth, provideValtechAuthInterceptor, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechPresets, provideValtechSkeleton, query, renderPatternSvgInner, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard, toArticle };
|
|
50381
|
+
export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, ARTICLE_SPACING, AVATAR_UPLOAD_DEFAULTS, AccordionComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimatedTerminalComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BaseDefault, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CORNER_KEYS, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentTransformer, CookieBannerComponent, CountdownComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_CANCEL_BUTTON, DEFAULT_CHECK_INTERVAL_MS, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_DEBUG_CONSOLE_CONFIG, DEFAULT_DONATION_CONFIG, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_SPLASH_SCREEN_CONFIG, DataTableComponent, DateInputComponent, DateRangeInputComponent, DebugConsoleComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EmailInputComponent, EmptyStateComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FooterComponent, FooterLinksComponent, FormComponent, FormFooterComponent, FormSkeletonComponent, FunHeaderComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HasPermissionDirective, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, INVITATION_CARD_DEFAULTS, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, InvitationCardComponent, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginComponent, MEMBER_CARD_DEFAULTS, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MemberCardComponent, MenuComponent, MessagingService, MetaService, MfaModalComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationsService, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OrgService, OrgSwitchService, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PresetService, PriceTagComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProfileSkeletonComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RequestFormBuilderService, RequestService, RightsFooterComponent, RotatingTextComponent, SHAPE_KEYS, SKELETON_LAYOUT_DEFAULT_ROWS, SKELETON_PRESETS, SOLID_KEYS, STROKE_KEYS, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SegmentControlComponent, SelectSearchComponent, SessionService, ShareButtonsComponent, SimpleComponent, SkeletonComponent, SkeletonLayoutComponent, SkeletonService, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, SplashScreenService, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TranslatePipe, TypedCollection, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_DEBUG_CONSOLE, VALTECH_DEFAULT_CONTENT, VALTECH_DONATION_CONFIG, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_NETWORK_ERROR_KEY, VALTECH_SITE_PATHS, VALTECH_SOCIAL_LINKS, VALTECH_SPLASH_SCREEN, VALTECH_WEB_BASE_URLS, VERSION, ValtechErrorService, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, authPasswordValidator, blogPost, buildFooterLinks, buildPath, collections, connectPageRefresh, createErrorStateProps, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createRefreshableStream, createTitleProps, docs, errorLoggingInterceptor, extractPathParams, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, guestGuard, hasEmulators, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, provideSplashScreen, provideValtechAds, provideValtechAppConfig, provideValtechAppVersion, provideValtechAuth, provideValtechAuthInterceptor, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechPresets, provideValtechSite, provideValtechSkeleton, query, renderPatternSvgInner, replaceSpecialChars, resolveColor, resolveInputDefaultValue, resolveWebBaseUrl, roleGuard, storagePaths, superAdminGuard, toArticle };
|
|
50246
50382
|
//# sourceMappingURL=valtech-components.mjs.map
|