valtech-components 2.0.726 → 2.0.728
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/services/auth/index.mjs +3 -1
- package/esm2022/lib/services/auth/notification-action.service.mjs +113 -0
- package/esm2022/lib/services/auth/types.mjs +1 -1
- package/esm2022/lib/services/firebase/notifications.service.mjs +4 -3
- package/esm2022/lib/services/markdown-article/legal-content.service.mjs +56 -0
- package/esm2022/lib/services/markdown-article/markdown-article-parser.service.mjs +289 -0
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +5 -1
- package/fesm2022/valtech-components.mjs +448 -6
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/services/auth/index.d.ts +2 -0
- package/lib/services/auth/notification-action.service.d.ts +34 -0
- package/lib/services/auth/types.d.ts +12 -0
- package/lib/services/firebase/notifications.service.d.ts +9 -1
- package/lib/services/markdown-article/legal-content.service.d.ts +31 -0
- package/lib/services/markdown-article/markdown-article-parser.service.d.ts +31 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -14,7 +14,7 @@ import { Meta, Title } from '@angular/platform-browser';
|
|
|
14
14
|
import QRCodeStyling from 'qr-code-styling';
|
|
15
15
|
import * as i1$3 from '@angular/forms';
|
|
16
16
|
import { ReactiveFormsModule, FormsModule, FormControl, Validators, FormBuilder } from '@angular/forms';
|
|
17
|
-
import { BehaviorSubject, map, Subject, debounceTime, distinctUntilChanged, switchMap, of, catchError, takeUntil, isObservable, firstValueFrom, EMPTY, from, Observable, throwError, filter as filter$1 } from 'rxjs';
|
|
17
|
+
import { BehaviorSubject, map, Subject, debounceTime, distinctUntilChanged, switchMap, of, catchError, takeUntil, isObservable, firstValueFrom, EMPTY, from, Observable, throwError, filter as filter$1, shareReplay } from 'rxjs';
|
|
18
18
|
import * as i1$4 from 'ng-otp-input';
|
|
19
19
|
import { NgOtpInputComponent, NgOtpInputModule } from 'ng-otp-input';
|
|
20
20
|
import * as i2 from '@ionic/angular';
|
|
@@ -41,7 +41,7 @@ import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
|
|
|
41
41
|
import { filter, switchMap as switchMap$1, catchError as catchError$1, tap, map as map$1, finalize, take, debounceTime as debounceTime$1, takeUntil as takeUntil$1 } from 'rxjs/operators';
|
|
42
42
|
import { ImageCropperComponent } from 'ngx-image-cropper';
|
|
43
43
|
import * as i1$8 from '@angular/common/http';
|
|
44
|
-
import { provideHttpClient, withInterceptors, HttpClient } from '@angular/common/http';
|
|
44
|
+
import { provideHttpClient, withInterceptors, HttpErrorResponse, HttpClient } from '@angular/common/http';
|
|
45
45
|
import { Capacitor } from '@capacitor/core';
|
|
46
46
|
import 'prismjs/components/prism-scss';
|
|
47
47
|
import 'prismjs/components/prism-json';
|
|
@@ -50,7 +50,7 @@ import 'prismjs/components/prism-json';
|
|
|
50
50
|
* Current version of valtech-components.
|
|
51
51
|
* This is automatically updated during the publish process.
|
|
52
52
|
*/
|
|
53
|
-
const VERSION = '2.0.
|
|
53
|
+
const VERSION = '2.0.728';
|
|
54
54
|
|
|
55
55
|
/**
|
|
56
56
|
* Servicio para gestionar presets de componentes.
|
|
@@ -28279,11 +28279,12 @@ class NotificationsService {
|
|
|
28279
28279
|
return;
|
|
28280
28280
|
}
|
|
28281
28281
|
this.currentUserId = userId;
|
|
28282
|
-
// Path
|
|
28283
|
-
//
|
|
28282
|
+
// Path global cross-app: /users/{uid}/notifications (sin prefijo apps/{appId}/).
|
|
28283
|
+
// skipAppPrefix bypassa FirestoreService.prefixCollectionPath para fan-out compartido.
|
|
28284
28284
|
const basePath = `users/${userId}/notifications`;
|
|
28285
28285
|
this.collection = this.collectionFactory.create(basePath, {
|
|
28286
28286
|
timestamps: true,
|
|
28287
|
+
skipAppPrefix: true,
|
|
28287
28288
|
});
|
|
28288
28289
|
this.collectionReady$.next(this.collection);
|
|
28289
28290
|
console.log('[Notifications] Initialized with path:', basePath);
|
|
@@ -31120,6 +31121,109 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
31120
31121
|
args: [{ providedIn: 'root' }]
|
|
31121
31122
|
}], ctorParameters: () => [{ type: AuthService }] });
|
|
31122
31123
|
|
|
31124
|
+
/**
|
|
31125
|
+
* NotificationActionService — orquesta el "click en notificación" cross-app cross-org.
|
|
31126
|
+
*
|
|
31127
|
+
* Flujo:
|
|
31128
|
+
* 1. markAsRead (best-effort, no bloquea)
|
|
31129
|
+
* 2. Si appId destino !== appId actual → handoff token + redirect a app destino
|
|
31130
|
+
* 3. Si orgId destino !== activeOrg → switchTo(orgId) (sin reload, navega después)
|
|
31131
|
+
* 4. router.navigateByUrl(actionRoute)
|
|
31132
|
+
*
|
|
31133
|
+
* Requiere:
|
|
31134
|
+
* - ValtechAuthConfig.appId (identifica la app actual)
|
|
31135
|
+
* - ValtechAuthConfig.appUrls (mapa baseUrl para handoff cross-app)
|
|
31136
|
+
*/
|
|
31137
|
+
class NotificationActionService {
|
|
31138
|
+
constructor(config, auth, orgSwitch, handoff, notifications, router) {
|
|
31139
|
+
this.config = config;
|
|
31140
|
+
this.auth = auth;
|
|
31141
|
+
this.orgSwitch = orgSwitch;
|
|
31142
|
+
this.handoff = handoff;
|
|
31143
|
+
this.notifications = notifications;
|
|
31144
|
+
this.router = router;
|
|
31145
|
+
}
|
|
31146
|
+
/**
|
|
31147
|
+
* Abre la notificación: marca como leída, switch-org si toca, navegación local o
|
|
31148
|
+
* redirect cross-app vía handoff.
|
|
31149
|
+
*
|
|
31150
|
+
* No lanza errores hacia la UI — devuelve un resultado descriptivo. Errores
|
|
31151
|
+
* técnicos quedan en console.warn.
|
|
31152
|
+
*/
|
|
31153
|
+
async open(notif) {
|
|
31154
|
+
// 1) Mark as read (best-effort, no bloquea el flujo principal)
|
|
31155
|
+
if (notif.id && !notif.isRead) {
|
|
31156
|
+
this.notifications.markAsRead(notif.id).catch(err => {
|
|
31157
|
+
console.warn('[NotificationAction] markAsRead failed', err);
|
|
31158
|
+
});
|
|
31159
|
+
}
|
|
31160
|
+
const route = notif.actionRoute;
|
|
31161
|
+
if (!route) {
|
|
31162
|
+
return 'no-action-route';
|
|
31163
|
+
}
|
|
31164
|
+
const currentApp = this.config.appId;
|
|
31165
|
+
const targetApp = notif.appId;
|
|
31166
|
+
// 2) Cross-app: handoff + full redirect
|
|
31167
|
+
if (targetApp && currentApp && targetApp !== currentApp) {
|
|
31168
|
+
const baseUrl = this.config.appUrls?.[targetApp];
|
|
31169
|
+
if (!baseUrl) {
|
|
31170
|
+
console.warn(`[NotificationAction] Missing appUrls['${targetApp}'] — configure ValtechAuthConfig.appUrls`);
|
|
31171
|
+
return 'cross-app-unconfigured';
|
|
31172
|
+
}
|
|
31173
|
+
try {
|
|
31174
|
+
const resp = await firstValueFrom(this.handoff.createHandoff({ targetAppId: targetApp, route }));
|
|
31175
|
+
const url = this.buildHandoffUrl(baseUrl, resp.token, route);
|
|
31176
|
+
if (typeof window !== 'undefined') {
|
|
31177
|
+
window.location.href = url;
|
|
31178
|
+
}
|
|
31179
|
+
return 'redirected-cross-app';
|
|
31180
|
+
}
|
|
31181
|
+
catch (err) {
|
|
31182
|
+
const msg = err instanceof HttpErrorResponse ? err.message : String(err);
|
|
31183
|
+
console.warn('[NotificationAction] createHandoff failed:', msg);
|
|
31184
|
+
return 'handoff-failed';
|
|
31185
|
+
}
|
|
31186
|
+
}
|
|
31187
|
+
// 3) Same app — switch-org si toca (sin reload — la navegación posterior monta page fresh)
|
|
31188
|
+
let switched = false;
|
|
31189
|
+
if (notif.orgId) {
|
|
31190
|
+
const active = this.activeOrg();
|
|
31191
|
+
if (active && active !== notif.orgId) {
|
|
31192
|
+
await this.orgSwitch.switchTo(notif.orgId);
|
|
31193
|
+
switched = true;
|
|
31194
|
+
}
|
|
31195
|
+
}
|
|
31196
|
+
// 4) Navigate local
|
|
31197
|
+
await this.router.navigateByUrl(route);
|
|
31198
|
+
return switched ? 'navigated-after-switch-org' : 'navigated';
|
|
31199
|
+
}
|
|
31200
|
+
activeOrg() {
|
|
31201
|
+
const user = this.auth.user();
|
|
31202
|
+
return (user?.activeOrgId ??
|
|
31203
|
+
user?.activeOrg ??
|
|
31204
|
+
'');
|
|
31205
|
+
}
|
|
31206
|
+
/**
|
|
31207
|
+
* Construye URL absoluta para handoff cross-app preservando pathname y otros
|
|
31208
|
+
* params existentes de la baseUrl.
|
|
31209
|
+
*/
|
|
31210
|
+
buildHandoffUrl(baseUrl, token, route) {
|
|
31211
|
+
const url = new URL(baseUrl);
|
|
31212
|
+
url.searchParams.set('handoff', token);
|
|
31213
|
+
url.searchParams.set('route', route);
|
|
31214
|
+
return url.toString();
|
|
31215
|
+
}
|
|
31216
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NotificationActionService, deps: [{ token: VALTECH_AUTH_CONFIG }, { token: AuthService }, { token: OrgSwitchService }, { token: HandoffService }, { token: NotificationsService }, { token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
31217
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NotificationActionService, providedIn: 'root' }); }
|
|
31218
|
+
}
|
|
31219
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NotificationActionService, decorators: [{
|
|
31220
|
+
type: Injectable,
|
|
31221
|
+
args: [{ providedIn: 'root' }]
|
|
31222
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
31223
|
+
type: Inject,
|
|
31224
|
+
args: [VALTECH_AUTH_CONFIG]
|
|
31225
|
+
}] }, { type: AuthService }, { type: OrgSwitchService }, { type: HandoffService }, { type: NotificationsService }, { type: i1$1.Router }] });
|
|
31226
|
+
|
|
31123
31227
|
/**
|
|
31124
31228
|
* Valtech Auth Service
|
|
31125
31229
|
*
|
|
@@ -34818,6 +34922,344 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
34818
34922
|
}]
|
|
34819
34923
|
}] });
|
|
34820
34924
|
|
|
34925
|
+
const BOX_DRAWING = /[┌┐└┘├┤┬┴┼─│╔╗╚╝═║]/;
|
|
34926
|
+
const CALLOUT_RE = /^>\s*\[!(NOTE|TIP|INFO|WARNING|CAUTION|IMPORTANT)\]\s*(.*)$/i;
|
|
34927
|
+
const FENCE_RE = /^```([\w-]*)\s*$/;
|
|
34928
|
+
const HEADING_RE = /^(#{1,6})\s+(.+)$/;
|
|
34929
|
+
const SEPARATOR_RE = /^\s*(?:-{3,}|\*{3,}|_{3,})\s*$/;
|
|
34930
|
+
const UNORDERED_RE = /^\s*[-*+]\s+(.+)$/;
|
|
34931
|
+
const CHECKLIST_RE = /^\s*[-*+]\s+\[([ xX])\]\s+(.+)$/;
|
|
34932
|
+
const ORDERED_RE = /^\s*\d+\.\s+(.+)$/;
|
|
34933
|
+
const TABLE_DIVIDER_RE = /^\s*\|?[\s:|-]+\|?\s*$/;
|
|
34934
|
+
const TABLE_ROW_RE = /^\s*\|(.+)\|\s*$/;
|
|
34935
|
+
/**
|
|
34936
|
+
* Converts Markdown documents into ArticleMetadata for the val-article organism.
|
|
34937
|
+
*
|
|
34938
|
+
* Supported syntax:
|
|
34939
|
+
* - Headings (#, ##, ### …) → title / subtitle
|
|
34940
|
+
* - Paragraphs → paragraph (with `processLinks` + `allowPartialBold`)
|
|
34941
|
+
* - Lists (-, *, 1.) → unordered / ordered list (- [ ] / - [x] for checklist)
|
|
34942
|
+
* - Blockquotes (>) → quote, with GitHub callouts `> [!NOTE|TIP|INFO|WARNING|CAUTION|IMPORTANT]` mapped to notes
|
|
34943
|
+
* - Code fences (```lang) → code
|
|
34944
|
+
* - Box-drawing ASCII art (┌┐└┘│─) auto-wrapped as code
|
|
34945
|
+
* - Tables → flattened into paragraphs with bold keys
|
|
34946
|
+
* - Horizontal rules (---, ***, ___) → separator
|
|
34947
|
+
*/
|
|
34948
|
+
class MarkdownArticleParserService {
|
|
34949
|
+
parse(markdown, config) {
|
|
34950
|
+
const lines = this.normalize(markdown).split('\n');
|
|
34951
|
+
const elements = [];
|
|
34952
|
+
let i = 0;
|
|
34953
|
+
while (i < lines.length) {
|
|
34954
|
+
const line = lines[i];
|
|
34955
|
+
if (line.trim() === '') {
|
|
34956
|
+
i++;
|
|
34957
|
+
continue;
|
|
34958
|
+
}
|
|
34959
|
+
// Fenced code block
|
|
34960
|
+
const fence = line.match(FENCE_RE);
|
|
34961
|
+
if (fence) {
|
|
34962
|
+
const lang = fence[1] || undefined;
|
|
34963
|
+
const body = [];
|
|
34964
|
+
i++;
|
|
34965
|
+
while (i < lines.length && !FENCE_RE.test(lines[i])) {
|
|
34966
|
+
body.push(lines[i]);
|
|
34967
|
+
i++;
|
|
34968
|
+
}
|
|
34969
|
+
i++; // skip closing fence
|
|
34970
|
+
elements.push({
|
|
34971
|
+
type: 'code',
|
|
34972
|
+
props: { code: body.join('\n'), language: lang, theme: 'dark' },
|
|
34973
|
+
});
|
|
34974
|
+
continue;
|
|
34975
|
+
}
|
|
34976
|
+
// ASCII box-drawing art → treat as code block
|
|
34977
|
+
if (BOX_DRAWING.test(line)) {
|
|
34978
|
+
const body = [];
|
|
34979
|
+
while (i < lines.length && (lines[i].trim() === '' || BOX_DRAWING.test(lines[i]))) {
|
|
34980
|
+
body.push(lines[i]);
|
|
34981
|
+
i++;
|
|
34982
|
+
}
|
|
34983
|
+
// Trim trailing blank lines from the block
|
|
34984
|
+
while (body.length && body[body.length - 1].trim() === '')
|
|
34985
|
+
body.pop();
|
|
34986
|
+
elements.push({
|
|
34987
|
+
type: 'code',
|
|
34988
|
+
props: { code: body.join('\n'), language: 'text', theme: 'dark' },
|
|
34989
|
+
});
|
|
34990
|
+
continue;
|
|
34991
|
+
}
|
|
34992
|
+
// Separator
|
|
34993
|
+
if (SEPARATOR_RE.test(line)) {
|
|
34994
|
+
elements.push({ type: 'separator', props: { style: 'line' } });
|
|
34995
|
+
i++;
|
|
34996
|
+
continue;
|
|
34997
|
+
}
|
|
34998
|
+
// Heading
|
|
34999
|
+
const heading = line.match(HEADING_RE);
|
|
35000
|
+
if (heading) {
|
|
35001
|
+
elements.push(this.makeHeading(heading[1].length, heading[2].trim()));
|
|
35002
|
+
i++;
|
|
35003
|
+
continue;
|
|
35004
|
+
}
|
|
35005
|
+
// Callout / blockquote (consume contiguous `>` lines)
|
|
35006
|
+
if (line.startsWith('>')) {
|
|
35007
|
+
const block = [];
|
|
35008
|
+
while (i < lines.length && lines[i].startsWith('>')) {
|
|
35009
|
+
block.push(lines[i]);
|
|
35010
|
+
i++;
|
|
35011
|
+
}
|
|
35012
|
+
elements.push(this.makeQuoteOrCallout(block));
|
|
35013
|
+
continue;
|
|
35014
|
+
}
|
|
35015
|
+
// Table (consume contiguous `|` lines)
|
|
35016
|
+
if (TABLE_ROW_RE.test(line)) {
|
|
35017
|
+
const rows = [];
|
|
35018
|
+
while (i < lines.length && TABLE_ROW_RE.test(lines[i])) {
|
|
35019
|
+
rows.push(lines[i]);
|
|
35020
|
+
i++;
|
|
35021
|
+
}
|
|
35022
|
+
elements.push(...this.makeTable(rows));
|
|
35023
|
+
continue;
|
|
35024
|
+
}
|
|
35025
|
+
// List (checklist / unordered / ordered) — consume contiguous lines
|
|
35026
|
+
if (CHECKLIST_RE.test(line) || UNORDERED_RE.test(line) || ORDERED_RE.test(line)) {
|
|
35027
|
+
const listType = CHECKLIST_RE.test(line)
|
|
35028
|
+
? 'checklist'
|
|
35029
|
+
: ORDERED_RE.test(line)
|
|
35030
|
+
? 'ordered'
|
|
35031
|
+
: 'unordered';
|
|
35032
|
+
const items = [];
|
|
35033
|
+
while (i < lines.length && lines[i].trim() !== '') {
|
|
35034
|
+
const cur = lines[i];
|
|
35035
|
+
const check = cur.match(CHECKLIST_RE);
|
|
35036
|
+
const unord = cur.match(UNORDERED_RE);
|
|
35037
|
+
const ord = cur.match(ORDERED_RE);
|
|
35038
|
+
if (check)
|
|
35039
|
+
items.push({ text: check[2].trim() });
|
|
35040
|
+
else if (ord && listType === 'ordered')
|
|
35041
|
+
items.push({ text: ord[1].trim() });
|
|
35042
|
+
else if (unord && listType !== 'ordered')
|
|
35043
|
+
items.push({ text: unord[1].trim() });
|
|
35044
|
+
else
|
|
35045
|
+
break;
|
|
35046
|
+
i++;
|
|
35047
|
+
}
|
|
35048
|
+
elements.push({ type: 'list', props: { items, listType } });
|
|
35049
|
+
continue;
|
|
35050
|
+
}
|
|
35051
|
+
// Paragraph — consume contiguous non-empty lines that aren't a special block
|
|
35052
|
+
const paragraph = [];
|
|
35053
|
+
while (i < lines.length && lines[i].trim() !== '' && !this.startsNewBlock(lines[i])) {
|
|
35054
|
+
paragraph.push(lines[i]);
|
|
35055
|
+
i++;
|
|
35056
|
+
}
|
|
35057
|
+
const text = paragraph.join(' ').trim();
|
|
35058
|
+
if (text) {
|
|
35059
|
+
elements.push({
|
|
35060
|
+
type: 'paragraph',
|
|
35061
|
+
props: {
|
|
35062
|
+
content: text,
|
|
35063
|
+
size: 'medium',
|
|
35064
|
+
color: 'dark',
|
|
35065
|
+
bold: false,
|
|
35066
|
+
processLinks: true,
|
|
35067
|
+
allowPartialBold: true,
|
|
35068
|
+
},
|
|
35069
|
+
});
|
|
35070
|
+
}
|
|
35071
|
+
}
|
|
35072
|
+
return {
|
|
35073
|
+
elements,
|
|
35074
|
+
maxWidth: '900px',
|
|
35075
|
+
centered: true,
|
|
35076
|
+
theme: 'auto',
|
|
35077
|
+
...config,
|
|
35078
|
+
};
|
|
35079
|
+
}
|
|
35080
|
+
normalize(md) {
|
|
35081
|
+
return md.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
35082
|
+
}
|
|
35083
|
+
startsNewBlock(line) {
|
|
35084
|
+
return (HEADING_RE.test(line) ||
|
|
35085
|
+
FENCE_RE.test(line) ||
|
|
35086
|
+
SEPARATOR_RE.test(line) ||
|
|
35087
|
+
TABLE_ROW_RE.test(line) ||
|
|
35088
|
+
UNORDERED_RE.test(line) ||
|
|
35089
|
+
ORDERED_RE.test(line) ||
|
|
35090
|
+
CHECKLIST_RE.test(line) ||
|
|
35091
|
+
line.startsWith('>') ||
|
|
35092
|
+
BOX_DRAWING.test(line));
|
|
35093
|
+
}
|
|
35094
|
+
makeHeading(level, content) {
|
|
35095
|
+
if (level === 1) {
|
|
35096
|
+
return {
|
|
35097
|
+
type: 'title',
|
|
35098
|
+
props: { content, size: 'xlarge', color: 'dark', bold: true },
|
|
35099
|
+
};
|
|
35100
|
+
}
|
|
35101
|
+
const size = level === 2 ? 'large' : level === 3 ? 'medium' : 'small';
|
|
35102
|
+
return {
|
|
35103
|
+
type: 'subtitle',
|
|
35104
|
+
props: { content, size, color: 'dark', bold: true },
|
|
35105
|
+
};
|
|
35106
|
+
}
|
|
35107
|
+
makeQuoteOrCallout(block) {
|
|
35108
|
+
const first = block[0];
|
|
35109
|
+
const callout = first.match(CALLOUT_RE);
|
|
35110
|
+
const lines = block.map(l => l.replace(/^>\s?/, ''));
|
|
35111
|
+
if (callout) {
|
|
35112
|
+
const type = callout[1].toUpperCase();
|
|
35113
|
+
const firstLineRest = callout[2] || '';
|
|
35114
|
+
const rest = lines.slice(1).join(' ').trim();
|
|
35115
|
+
const text = [firstLineRest, rest].filter(Boolean).join(' ').trim();
|
|
35116
|
+
return this.makeNote(type, text);
|
|
35117
|
+
}
|
|
35118
|
+
const text = lines.join(' ').trim();
|
|
35119
|
+
return {
|
|
35120
|
+
type: 'quote',
|
|
35121
|
+
props: {
|
|
35122
|
+
content: text,
|
|
35123
|
+
size: 'medium',
|
|
35124
|
+
color: 'medium',
|
|
35125
|
+
bold: false,
|
|
35126
|
+
showQuoteMark: true,
|
|
35127
|
+
alignment: 'left',
|
|
35128
|
+
},
|
|
35129
|
+
};
|
|
35130
|
+
}
|
|
35131
|
+
makeNote(kind, text) {
|
|
35132
|
+
const map = {
|
|
35133
|
+
NOTE: { color: 'primary', prefix: 'Nota' },
|
|
35134
|
+
TIP: { color: 'success', prefix: 'Tip' },
|
|
35135
|
+
INFO: { color: 'tertiary', prefix: 'Info' },
|
|
35136
|
+
IMPORTANT: { color: 'warning', prefix: 'Importante' },
|
|
35137
|
+
WARNING: { color: 'warning', prefix: 'Atención' },
|
|
35138
|
+
CAUTION: { color: 'danger', prefix: 'Precaución' },
|
|
35139
|
+
};
|
|
35140
|
+
const cfg = map[kind];
|
|
35141
|
+
return {
|
|
35142
|
+
type: 'note',
|
|
35143
|
+
props: {
|
|
35144
|
+
text,
|
|
35145
|
+
prefix: `${cfg.prefix}:`,
|
|
35146
|
+
color: cfg.color,
|
|
35147
|
+
textColor: 'dark',
|
|
35148
|
+
size: 'medium',
|
|
35149
|
+
rounded: true,
|
|
35150
|
+
},
|
|
35151
|
+
};
|
|
35152
|
+
}
|
|
35153
|
+
/**
|
|
35154
|
+
* Tables are flattened into a header subtitle (if present) followed by one paragraph per
|
|
35155
|
+
* data row using `**col[0]:** col[1] · **col[2]:** col[3] …` format. val-article has no
|
|
35156
|
+
* native table element so this preserves the information without breaking the layout.
|
|
35157
|
+
*/
|
|
35158
|
+
makeTable(rows) {
|
|
35159
|
+
const parsed = rows
|
|
35160
|
+
.filter(r => !TABLE_DIVIDER_RE.test(r))
|
|
35161
|
+
.map(r => r
|
|
35162
|
+
.trim()
|
|
35163
|
+
.replace(/^\|/, '')
|
|
35164
|
+
.replace(/\|$/, '')
|
|
35165
|
+
.split('|')
|
|
35166
|
+
.map(c => c.trim()));
|
|
35167
|
+
if (parsed.length === 0)
|
|
35168
|
+
return [];
|
|
35169
|
+
const header = parsed[0];
|
|
35170
|
+
const dataRows = parsed.slice(1);
|
|
35171
|
+
if (dataRows.length === 0) {
|
|
35172
|
+
return [
|
|
35173
|
+
{
|
|
35174
|
+
type: 'paragraph',
|
|
35175
|
+
props: {
|
|
35176
|
+
content: header.join(' · '),
|
|
35177
|
+
size: 'medium',
|
|
35178
|
+
color: 'dark',
|
|
35179
|
+
bold: false,
|
|
35180
|
+
processLinks: true,
|
|
35181
|
+
allowPartialBold: true,
|
|
35182
|
+
},
|
|
35183
|
+
},
|
|
35184
|
+
];
|
|
35185
|
+
}
|
|
35186
|
+
return dataRows.map(row => {
|
|
35187
|
+
const pairs = row.map((cell, idx) => {
|
|
35188
|
+
const key = header[idx] ?? '';
|
|
35189
|
+
return key ? `**${key}:** ${cell}` : cell;
|
|
35190
|
+
});
|
|
35191
|
+
return {
|
|
35192
|
+
type: 'paragraph',
|
|
35193
|
+
props: {
|
|
35194
|
+
content: pairs.join(' · '),
|
|
35195
|
+
size: 'medium',
|
|
35196
|
+
color: 'dark',
|
|
35197
|
+
bold: false,
|
|
35198
|
+
processLinks: true,
|
|
35199
|
+
allowPartialBold: true,
|
|
35200
|
+
},
|
|
35201
|
+
};
|
|
35202
|
+
});
|
|
35203
|
+
}
|
|
35204
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MarkdownArticleParserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
35205
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MarkdownArticleParserService, providedIn: 'root' }); }
|
|
35206
|
+
}
|
|
35207
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MarkdownArticleParserService, decorators: [{
|
|
35208
|
+
type: Injectable,
|
|
35209
|
+
args: [{ providedIn: 'root' }]
|
|
35210
|
+
}] });
|
|
35211
|
+
|
|
35212
|
+
/**
|
|
35213
|
+
* Loads Markdown legal documents from `/assets/legal/{locale}/{slug}.md` and parses them
|
|
35214
|
+
* into ArticleMetadata ready for `<val-article>`. Caches parsed results by `locale:slug`
|
|
35215
|
+
* so multiple views consuming the same doc share one HTTP request.
|
|
35216
|
+
*/
|
|
35217
|
+
class LegalContentService {
|
|
35218
|
+
constructor() {
|
|
35219
|
+
this.http = inject(HttpClient);
|
|
35220
|
+
this.parser = inject(MarkdownArticleParserService);
|
|
35221
|
+
this.DEFAULT_BASE = '/assets/legal';
|
|
35222
|
+
this.cache = new Map();
|
|
35223
|
+
}
|
|
35224
|
+
load(slug, options = {}) {
|
|
35225
|
+
const locale = (options.locale ?? 'es').toLowerCase();
|
|
35226
|
+
const base = options.basePath ?? this.DEFAULT_BASE;
|
|
35227
|
+
const fallback = options.fallbackLocale === undefined ? 'es' : options.fallbackLocale;
|
|
35228
|
+
const key = `${base}|${locale}|${slug}`;
|
|
35229
|
+
const cached = this.cache.get(key);
|
|
35230
|
+
if (cached)
|
|
35231
|
+
return cached;
|
|
35232
|
+
const primary = this.fetchAndParse(`${base}/${locale}/${slug}.md`);
|
|
35233
|
+
const stream = fallback && fallback !== locale
|
|
35234
|
+
? primary.pipe(catchError(() => this.fetchAndParse(`${base}/${fallback}/${slug}.md`)))
|
|
35235
|
+
: primary;
|
|
35236
|
+
const shared = stream.pipe(shareReplay({ bufferSize: 1, refCount: false }));
|
|
35237
|
+
this.cache.set(key, shared);
|
|
35238
|
+
return shared;
|
|
35239
|
+
}
|
|
35240
|
+
/** Returns the raw Markdown string without parsing. Useful for debugging. */
|
|
35241
|
+
raw(slug, options = {}) {
|
|
35242
|
+
const locale = (options.locale ?? 'es').toLowerCase();
|
|
35243
|
+
const base = options.basePath ?? this.DEFAULT_BASE;
|
|
35244
|
+
return this.http.get(`${base}/${locale}/${slug}.md`, { responseType: 'text' });
|
|
35245
|
+
}
|
|
35246
|
+
/** Clears the in-memory cache. Call when the user changes locale at runtime. */
|
|
35247
|
+
invalidate() {
|
|
35248
|
+
this.cache.clear();
|
|
35249
|
+
}
|
|
35250
|
+
fetchAndParse(url) {
|
|
35251
|
+
return this.http.get(url, { responseType: 'text' }).pipe(switchMap(md => md && md.trim().length > 0
|
|
35252
|
+
? of(this.parser.parse(md))
|
|
35253
|
+
: throwError(() => new Error(`Empty legal doc: ${url}`))), map(parsed => parsed));
|
|
35254
|
+
}
|
|
35255
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LegalContentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
35256
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LegalContentService, providedIn: 'root' }); }
|
|
35257
|
+
}
|
|
35258
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LegalContentService, decorators: [{
|
|
35259
|
+
type: Injectable,
|
|
35260
|
+
args: [{ providedIn: 'root' }]
|
|
35261
|
+
}] });
|
|
35262
|
+
|
|
34821
35263
|
/**
|
|
34822
35264
|
* Cross-Platform Version Helpers
|
|
34823
35265
|
*
|
|
@@ -41965,5 +42407,5 @@ function buildFooterLinks(links, t) {
|
|
|
41965
42407
|
* Generated bundle index. Do not edit.
|
|
41966
42408
|
*/
|
|
41967
42409
|
|
|
41968
|
-
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, AppConfigService, ArticleBuilder, ArticleComponent, AuthBackgroundComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BaseDefault, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentTransformer, CountdownComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_CANCEL_BUTTON, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, 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, DataTableComponent, DateInputComponent, DateRangeInputComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DownloadService, EmailInputComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FabComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FooterComponent, FooterLinksComponent, FormComponent, FormFooterComponent, FormSkeletonComponent, FunHeaderComponent, GlowCardComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LOGIN_DEFAULTS, LanguageSelectorComponent, LayeredCardComponent, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginComponent, MODAL_SIZES, MOTION, MaintenancePageComponent, MenuComponent, MessagingService, MetaService, ModalService, MultiSelectSearchComponent, NavigationService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationsService, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OrgSwitchService, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PLATFORM_CONFIGS, PageContentComponent, PageTemplateComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, 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, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RightsFooterComponent, RotatingTextComponent, SKELETON_PRESETS, 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, SkeletonService, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TranslatePipe, TypedCollection, UpdateBannerComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_DEFAULT_CONTENT, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_SOCIAL_LINKS, VERSION, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, blogPost, buildFooterLinks, buildPath, collections, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createTitleProps, docs, extractPathParams, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, guestGuard, hasEmulators, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, news, permissionGuard, permissionGuardFromRoute, provideValtechAds, provideValtechAppConfig, provideValtechAuth, provideValtechAuthInterceptor, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechPresets, provideValtechSkeleton, query, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard, toArticle };
|
|
42410
|
+
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, AppConfigService, ArticleBuilder, ArticleComponent, AuthBackgroundComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BaseDefault, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentTransformer, CountdownComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_CANCEL_BUTTON, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, 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, DataTableComponent, DateInputComponent, DateRangeInputComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DownloadService, EmailInputComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FabComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FooterComponent, FooterLinksComponent, FormComponent, FormFooterComponent, FormSkeletonComponent, FunHeaderComponent, GlowCardComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LOGIN_DEFAULTS, LanguageSelectorComponent, LayeredCardComponent, LegalContentService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginComponent, MODAL_SIZES, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MenuComponent, MessagingService, MetaService, ModalService, MultiSelectSearchComponent, NavigationService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationsService, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OrgSwitchService, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PLATFORM_CONFIGS, PageContentComponent, PageTemplateComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, 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, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RightsFooterComponent, RotatingTextComponent, SKELETON_PRESETS, 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, SkeletonService, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TranslatePipe, TypedCollection, UpdateBannerComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_DEFAULT_CONTENT, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_SOCIAL_LINKS, VERSION, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, blogPost, buildFooterLinks, buildPath, collections, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createTitleProps, docs, extractPathParams, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, guestGuard, hasEmulators, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, news, permissionGuard, permissionGuardFromRoute, provideValtechAds, provideValtechAppConfig, provideValtechAuth, provideValtechAuthInterceptor, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechPresets, provideValtechSkeleton, query, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard, toArticle };
|
|
41969
42411
|
//# sourceMappingURL=valtech-components.mjs.map
|