valtech-components 2.0.442 → 2.0.444
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/auth.service.mjs +4 -5
- package/esm2022/lib/services/firebase/firestore-collection.mjs +1 -1
- package/esm2022/lib/services/link-processor.service.mjs +54 -54
- package/fesm2022/valtech-components.mjs +56 -57
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/article/article.component.d.ts +2 -2
- package/lib/services/auth/auth.service.d.ts +2 -3
- package/package.json +1 -1
|
@@ -1582,32 +1582,32 @@ class LinkProcessorService {
|
|
|
1582
1582
|
let processedText = text;
|
|
1583
1583
|
// 1. Procesar enlaces estilo Markdown [texto](url) primero
|
|
1584
1584
|
if (processMarkdownLinks) {
|
|
1585
|
-
// Usar exec en bucle (compatible con ES2018)
|
|
1586
|
-
const markdownMatches = [];
|
|
1587
|
-
this.markdownLinkRegex.lastIndex = 0;
|
|
1588
|
-
let mdMatch;
|
|
1589
|
-
while ((mdMatch = this.markdownLinkRegex.exec(processedText)) !== null) {
|
|
1590
|
-
|
|
1591
|
-
}
|
|
1585
|
+
// // Usar exec en bucle (compatible con ES2018)
|
|
1586
|
+
// const markdownMatches: RegExpExecArray[] = [];
|
|
1587
|
+
// this.markdownLinkRegex.lastIndex = 0;
|
|
1588
|
+
// let mdMatch: RegExpExecArray | null;
|
|
1589
|
+
// while ((mdMatch = this.markdownLinkRegex.exec(processedText)) !== null) {
|
|
1590
|
+
// markdownMatches.push(mdMatch);
|
|
1591
|
+
// }
|
|
1592
1592
|
// Procesar de atrás hacia adelante para mantener las posiciones
|
|
1593
|
-
for (let i = markdownMatches.length - 1; i >= 0; i--) {
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
}
|
|
1593
|
+
// for (let i = markdownMatches.length - 1; i >= 0; i--) {
|
|
1594
|
+
// const match = markdownMatches[i];
|
|
1595
|
+
// const [fullMatch, linkText, url] = match;
|
|
1596
|
+
// const startIndex = match.index!;
|
|
1597
|
+
// const endIndex = startIndex + fullMatch.length;
|
|
1598
|
+
// hasLinks = true;
|
|
1599
|
+
// const isExternal = /^https?:\/\//.test(url);
|
|
1600
|
+
// const target = (isExternal ? openExternalInNewTab : openInternalInNewTab)
|
|
1601
|
+
// ? isExternal
|
|
1602
|
+
// ? ' target="_blank" rel="noopener noreferrer"'
|
|
1603
|
+
// : ' target="_blank"'
|
|
1604
|
+
// : '';
|
|
1605
|
+
// const typeClass = isExternal ? externalLinkClass : internalLinkClass;
|
|
1606
|
+
// const classes = `${linkClass} ${typeClass}`.trim();
|
|
1607
|
+
// const linkHtml = `<a href="${url}"${target} class="${classes}">${linkText}</a>`;
|
|
1608
|
+
// processedText =
|
|
1609
|
+
// processedText.substring(0, startIndex) + linkHtml + processedText.substring(endIndex);
|
|
1610
|
+
// }
|
|
1611
1611
|
}
|
|
1612
1612
|
// 2. Procesar URLs externas directas
|
|
1613
1613
|
// Usar exec en bucle (compatible con ES2018)
|
|
@@ -1645,35 +1645,35 @@ class LinkProcessorService {
|
|
|
1645
1645
|
processedText.substring(0, startIndex) + replacement + processedText.substring(endIndex);
|
|
1646
1646
|
}
|
|
1647
1647
|
// 3. Procesar rutas internas
|
|
1648
|
-
// Usar exec en bucle (compatible con ES2018)
|
|
1649
|
-
const internalMatches = [];
|
|
1650
|
-
this.internalRouteRegex.lastIndex = 0;
|
|
1651
|
-
let internalMatch;
|
|
1652
|
-
while ((internalMatch = this.internalRouteRegex.exec(processedText)) !== null) {
|
|
1653
|
-
|
|
1654
|
-
}
|
|
1648
|
+
// // Usar exec en bucle (compatible con ES2018)
|
|
1649
|
+
// const internalMatches: RegExpExecArray[] = [];
|
|
1650
|
+
// this.internalRouteRegex.lastIndex = 0;
|
|
1651
|
+
// let internalMatch: RegExpExecArray | null;
|
|
1652
|
+
// while ((internalMatch = this.internalRouteRegex.exec(processedText)) !== null) {
|
|
1653
|
+
// internalMatches.push(internalMatch);
|
|
1654
|
+
// }
|
|
1655
1655
|
// Procesar de atrás hacia adelante para mantener las posiciones
|
|
1656
|
-
for (let i = internalMatches.length - 1; i >= 0; i--) {
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
}
|
|
1656
|
+
// for (let i = internalMatches.length - 1; i >= 0; i--) {
|
|
1657
|
+
// const match = internalMatches[i];
|
|
1658
|
+
// const [fullMatch, prefix, route] = match;
|
|
1659
|
+
// const startIndex = match.index!;
|
|
1660
|
+
// const endIndex = startIndex + fullMatch.length;
|
|
1661
|
+
// // Verificar que no esté ya dentro de un enlace HTML existente
|
|
1662
|
+
// const textBefore = processedText.substring(0, startIndex);
|
|
1663
|
+
// const lastOpenTag = textBefore.lastIndexOf('<a ');
|
|
1664
|
+
// const lastCloseTag = textBefore.lastIndexOf('</a>');
|
|
1665
|
+
// // Si hay un tag <a abierto sin cerrar, no procesamos
|
|
1666
|
+
// if (lastOpenTag > lastCloseTag) {
|
|
1667
|
+
// continue;
|
|
1668
|
+
// }
|
|
1669
|
+
// hasLinks = true;
|
|
1670
|
+
// const target = openInternalInNewTab ? ' target="_blank"' : '';
|
|
1671
|
+
// const classes = `${linkClass} ${internalLinkClass}`.trim();
|
|
1672
|
+
// const linkHtml = `<a href="${route}"${target} class="${classes}">${route}</a>`;
|
|
1673
|
+
// const replacement = `${prefix}${linkHtml}`;
|
|
1674
|
+
// processedText =
|
|
1675
|
+
// processedText.substring(0, startIndex) + replacement + processedText.substring(endIndex);
|
|
1676
|
+
// }
|
|
1677
1677
|
// Si hay enlaces, sanitizar el HTML
|
|
1678
1678
|
if (hasLinks) {
|
|
1679
1679
|
return this.sanitizer.bypassSecurityTrustHtml(processedText);
|
|
@@ -24482,11 +24482,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
24482
24482
|
* ```
|
|
24483
24483
|
*/
|
|
24484
24484
|
class AuthService {
|
|
24485
|
-
constructor(config, http, router,
|
|
24485
|
+
constructor(config, http, router, stateService, tokenService, storageService, syncService, firebaseService) {
|
|
24486
24486
|
this.config = config;
|
|
24487
24487
|
this.http = http;
|
|
24488
24488
|
this.router = router;
|
|
24489
|
-
this.injector = injector;
|
|
24490
24489
|
this.stateService = stateService;
|
|
24491
24490
|
this.tokenService = tokenService;
|
|
24492
24491
|
this.storageService = storageService;
|
|
@@ -24891,7 +24890,7 @@ class AuthService {
|
|
|
24891
24890
|
console.warn('[ValtechAuth] Firebase signout failed:', error);
|
|
24892
24891
|
}
|
|
24893
24892
|
}
|
|
24894
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthService, deps: [{ token: VALTECH_AUTH_CONFIG }, { token: i1$5.HttpClient }, { token: i1$4.Router }, { token:
|
|
24893
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthService, deps: [{ token: VALTECH_AUTH_CONFIG }, { token: i1$5.HttpClient }, { token: i1$4.Router }, { token: AuthStateService }, { token: TokenService }, { token: AuthStorageService }, { token: AuthSyncService }, { token: FirebaseService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
24895
24894
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthService, providedIn: 'root' }); }
|
|
24896
24895
|
}
|
|
24897
24896
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthService, decorators: [{
|
|
@@ -24900,7 +24899,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
24900
24899
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
24901
24900
|
type: Inject,
|
|
24902
24901
|
args: [VALTECH_AUTH_CONFIG]
|
|
24903
|
-
}] }, { type: i1$5.HttpClient }, { type: i1$4.Router }, { type:
|
|
24902
|
+
}] }, { type: i1$5.HttpClient }, { type: i1$4.Router }, { type: AuthStateService }, { type: TokenService }, { type: AuthStorageService }, { type: AuthSyncService }, { type: FirebaseService }] });
|
|
24904
24903
|
|
|
24905
24904
|
// Control de estado de refresco (singleton a nivel de módulo)
|
|
24906
24905
|
let isRefreshing = false;
|