valtech-components 2.0.289 → 2.0.291
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/atoms/text/text.component.mjs +3 -3
- package/esm2022/lib/examples/comprehensive-link-test.component.mjs +208 -0
- package/esm2022/lib/examples/link-processing-example.component.mjs +47 -3
- package/esm2022/lib/services/link-processor.service.mjs +85 -36
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/valtech-components.mjs +338 -40
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/examples/comprehensive-link-test.component.d.ts +23 -0
- package/lib/examples/link-processing-example.component.d.ts +2 -0
- package/lib/services/link-processor.service.d.ts +6 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/src/lib/components/styles/overrides.scss +34 -0
|
@@ -1024,13 +1024,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1024
1024
|
class LinkProcessorService {
|
|
1025
1025
|
constructor(sanitizer) {
|
|
1026
1026
|
this.sanitizer = sanitizer;
|
|
1027
|
-
// Regex para detectar URLs completas (http/https) -
|
|
1028
|
-
this.urlRegex = /(https?:\/\/[^\s
|
|
1029
|
-
// Regex para detectar rutas internas
|
|
1030
|
-
this.internalRouteRegex = /(\s|^)(\/[^\s
|
|
1027
|
+
// Regex para detectar URLs completas (http/https) - captura toda la URL y luego limpiamos puntuación
|
|
1028
|
+
this.urlRegex = /(https?:\/\/[^\s]+)/g;
|
|
1029
|
+
// Regex para detectar rutas internas - captura toda la ruta y luego limpiamos puntuación
|
|
1030
|
+
this.internalRouteRegex = /(\s|^)(\/[^\s]*)/g;
|
|
1031
1031
|
// Regex para detectar enlaces estilo Markdown [texto](url)
|
|
1032
1032
|
this.markdownLinkRegex = /\[([^\]]+)\]\(([^)]+)\)/g;
|
|
1033
1033
|
}
|
|
1034
|
+
/**
|
|
1035
|
+
* Limpia la puntuación del final de una URL.
|
|
1036
|
+
* Mantiene caracteres válidos de URL pero remueve signos de puntuación comunes al final.
|
|
1037
|
+
* Preserva parámetros de consulta, fragmentos y caracteres válidos en URLs.
|
|
1038
|
+
*/
|
|
1039
|
+
cleanUrlPunctuation(url) {
|
|
1040
|
+
// Caracteres que consideramos puntuación al final de oración, pero NO parte de URLs
|
|
1041
|
+
// No incluimos & o = que son parte de query params, ni # que es parte de fragmentos
|
|
1042
|
+
const trailingPunctuation = /[.,;!?)]+$/;
|
|
1043
|
+
// Casos especiales: si la URL termina con paréntesis pero no tiene paréntesis de apertura
|
|
1044
|
+
// probablemente el paréntesis no es parte de la URL
|
|
1045
|
+
const hasOpeningParen = url.includes('(');
|
|
1046
|
+
const endsWithClosingParen = url.endsWith(')');
|
|
1047
|
+
if (endsWithClosingParen && !hasOpeningParen) {
|
|
1048
|
+
// Remover el paréntesis de cierre si no hay uno de apertura
|
|
1049
|
+
url = url.replace(/\)$/, '');
|
|
1050
|
+
}
|
|
1051
|
+
return url.replace(trailingPunctuation, '');
|
|
1052
|
+
}
|
|
1034
1053
|
/**
|
|
1035
1054
|
* Procesa texto para convertir enlaces en elementos <a> clickeables.
|
|
1036
1055
|
* Detecta automáticamente URLs externas, rutas internas y enlaces estilo Markdown.
|
|
@@ -1059,10 +1078,15 @@ class LinkProcessorService {
|
|
|
1059
1078
|
let hasLinks = false;
|
|
1060
1079
|
let processedText = text;
|
|
1061
1080
|
// 1. Procesar enlaces estilo Markdown [texto](url) primero
|
|
1062
|
-
if (processMarkdownLinks
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1081
|
+
if (processMarkdownLinks) {
|
|
1082
|
+
const markdownMatches = Array.from(processedText.matchAll(this.markdownLinkRegex));
|
|
1083
|
+
// Procesar de atrás hacia adelante para mantener las posiciones
|
|
1084
|
+
for (let i = markdownMatches.length - 1; i >= 0; i--) {
|
|
1085
|
+
const match = markdownMatches[i];
|
|
1086
|
+
const [fullMatch, linkText, url] = match;
|
|
1087
|
+
const startIndex = match.index;
|
|
1088
|
+
const endIndex = startIndex + fullMatch.length;
|
|
1089
|
+
hasLinks = true;
|
|
1066
1090
|
const isExternal = /^https?:\/\//.test(url);
|
|
1067
1091
|
const target = (isExternal ? openExternalInNewTab : openInternalInNewTab)
|
|
1068
1092
|
? isExternal
|
|
@@ -1071,38 +1095,63 @@ class LinkProcessorService {
|
|
|
1071
1095
|
: '';
|
|
1072
1096
|
const typeClass = isExternal ? externalLinkClass : internalLinkClass;
|
|
1073
1097
|
const classes = `${linkClass} ${typeClass}`.trim();
|
|
1074
|
-
|
|
1075
|
-
|
|
1098
|
+
const linkHtml = `<a href="${url}"${target} class="${classes}">${linkText}</a>`;
|
|
1099
|
+
processedText =
|
|
1100
|
+
processedText.substring(0, startIndex) + linkHtml + processedText.substring(endIndex);
|
|
1101
|
+
}
|
|
1076
1102
|
}
|
|
1077
1103
|
// 2. Procesar URLs externas directas
|
|
1078
|
-
|
|
1104
|
+
const urlMatches = Array.from(processedText.matchAll(this.urlRegex));
|
|
1105
|
+
// Procesar de atrás hacia adelante para mantener las posiciones
|
|
1106
|
+
for (let i = urlMatches.length - 1; i >= 0; i--) {
|
|
1107
|
+
const match = urlMatches[i];
|
|
1108
|
+
const [fullMatch, url] = match;
|
|
1109
|
+
const startIndex = match.index;
|
|
1110
|
+
const endIndex = startIndex + fullMatch.length;
|
|
1111
|
+
// Verificar que no esté ya dentro de un enlace HTML existente
|
|
1112
|
+
const textBefore = processedText.substring(0, startIndex);
|
|
1113
|
+
const lastOpenTag = textBefore.lastIndexOf('<a ');
|
|
1114
|
+
const lastCloseTag = textBefore.lastIndexOf('</a>');
|
|
1115
|
+
// Si hay un tag <a abierto sin cerrar, no procesamos
|
|
1116
|
+
if (lastOpenTag > lastCloseTag) {
|
|
1117
|
+
continue;
|
|
1118
|
+
}
|
|
1119
|
+
// Limpiar puntuación del final de la URL
|
|
1120
|
+
const cleanUrl = this.cleanUrlPunctuation(url);
|
|
1121
|
+
const punctuationRemoved = url !== cleanUrl;
|
|
1122
|
+
const punctuation = punctuationRemoved ? url.substring(cleanUrl.length) : '';
|
|
1079
1123
|
hasLinks = true;
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
const target = openExternalInNewTab ? ' target="_blank" rel="noopener noreferrer"' : '';
|
|
1088
|
-
const classes = `${linkClass} ${externalLinkClass}`.trim();
|
|
1089
|
-
return `<a href="${url}"${target} class="${classes}">${url}</a>`;
|
|
1090
|
-
});
|
|
1124
|
+
const target = openExternalInNewTab ? ' target="_blank" rel="noopener noreferrer"' : '';
|
|
1125
|
+
const classes = `${linkClass} ${externalLinkClass}`.trim();
|
|
1126
|
+
const linkHtml = `<a href="${cleanUrl}"${target} class="${classes}">${cleanUrl}</a>`;
|
|
1127
|
+
// Reemplazar el URL original con el enlace + puntuación si existía
|
|
1128
|
+
const replacement = punctuationRemoved ? linkHtml + punctuation : linkHtml;
|
|
1129
|
+
processedText =
|
|
1130
|
+
processedText.substring(0, startIndex) + replacement + processedText.substring(endIndex);
|
|
1091
1131
|
}
|
|
1092
|
-
// 3. Procesar rutas internas
|
|
1093
|
-
|
|
1132
|
+
// 3. Procesar rutas internas
|
|
1133
|
+
const internalMatches = Array.from(processedText.matchAll(this.internalRouteRegex));
|
|
1134
|
+
// Procesar de atrás hacia adelante para mantener las posiciones
|
|
1135
|
+
for (let i = internalMatches.length - 1; i >= 0; i--) {
|
|
1136
|
+
const match = internalMatches[i];
|
|
1137
|
+
const [fullMatch, prefix, route] = match;
|
|
1138
|
+
const startIndex = match.index;
|
|
1139
|
+
const endIndex = startIndex + fullMatch.length;
|
|
1140
|
+
// Verificar que no esté ya dentro de un enlace HTML existente
|
|
1141
|
+
const textBefore = processedText.substring(0, startIndex);
|
|
1142
|
+
const lastOpenTag = textBefore.lastIndexOf('<a ');
|
|
1143
|
+
const lastCloseTag = textBefore.lastIndexOf('</a>');
|
|
1144
|
+
// Si hay un tag <a abierto sin cerrar, no procesamos
|
|
1145
|
+
if (lastOpenTag > lastCloseTag) {
|
|
1146
|
+
continue;
|
|
1147
|
+
}
|
|
1094
1148
|
hasLinks = true;
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
}
|
|
1102
|
-
const target = openInternalInNewTab ? ' target="_blank"' : '';
|
|
1103
|
-
const classes = `${linkClass} ${internalLinkClass}`.trim();
|
|
1104
|
-
return `${prefix}<a href="${route}"${target} class="${classes}">${route}</a>`;
|
|
1105
|
-
});
|
|
1149
|
+
const target = openInternalInNewTab ? ' target="_blank"' : '';
|
|
1150
|
+
const classes = `${linkClass} ${internalLinkClass}`.trim();
|
|
1151
|
+
const linkHtml = `<a href="${route}"${target} class="${classes}">${route}</a>`;
|
|
1152
|
+
const replacement = `${prefix}${linkHtml}`;
|
|
1153
|
+
processedText =
|
|
1154
|
+
processedText.substring(0, startIndex) + replacement + processedText.substring(endIndex);
|
|
1106
1155
|
}
|
|
1107
1156
|
// Si hay enlaces, sanitizar el HTML
|
|
1108
1157
|
if (hasLinks) {
|
|
@@ -2098,7 +2147,7 @@ class TextComponent {
|
|
|
2098
2147
|
<p [class]="props.size" [class.bold]="props.bold">{{ displayContent$ | async }}</p>
|
|
2099
2148
|
}
|
|
2100
2149
|
</ion-text>
|
|
2101
|
-
`, isInline: true, styles: ["
|
|
2150
|
+
`, isInline: true, styles: [":root{--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}@media (prefers-color-scheme: dark){:root{--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)}.small{font-size:.75rem;line-height:1.25rem;font-weight:400}.small.bold{font-size:.75rem;line-height:1.25rem;font-weight:700}.medium{font-size:.875rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.medium{font-size:1rem;line-height:1.5rem}}.medium.bold{font-size:.875rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.medium.bold{font-size:1rem;line-height:1.5rem}}.large{font-size:1rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.large{font-size:1.125rem;line-height:1.5rem}}.large.bold{font-size:1rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.large.bold{font-size:1.125rem;line-height:1.5rem}}.xlarge{font-size:1.125rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.xlarge{font-size:1.5rem;line-height:2rem}}.xlarge.bold{font-size:1.125rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.xlarge.bold{font-size:1.5rem;line-height:2rem}}\n"], dependencies: [{ kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: ProcessLinksPipe, name: "processLinks" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2102
2151
|
}
|
|
2103
2152
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextComponent, decorators: [{
|
|
2104
2153
|
type: Component,
|
|
@@ -2114,7 +2163,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2114
2163
|
<p [class]="props.size" [class.bold]="props.bold">{{ displayContent$ | async }}</p>
|
|
2115
2164
|
}
|
|
2116
2165
|
</ion-text>
|
|
2117
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["
|
|
2166
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":root{--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}@media (prefers-color-scheme: dark){:root{--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)}.small{font-size:.75rem;line-height:1.25rem;font-weight:400}.small.bold{font-size:.75rem;line-height:1.25rem;font-weight:700}.medium{font-size:.875rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.medium{font-size:1rem;line-height:1.5rem}}.medium.bold{font-size:.875rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.medium.bold{font-size:1rem;line-height:1.5rem}}.large{font-size:1rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.large{font-size:1.125rem;line-height:1.5rem}}.large.bold{font-size:1rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.large.bold{font-size:1.125rem;line-height:1.5rem}}.xlarge{font-size:1.125rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.xlarge{font-size:1.5rem;line-height:2rem}}.xlarge.bold{font-size:1.125rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.xlarge.bold{font-size:1.5rem;line-height:2rem}}\n"] }]
|
|
2118
2167
|
}], ctorParameters: () => [{ type: ContentService }, { type: LinkProcessorService }], propDecorators: { props: [{
|
|
2119
2168
|
type: Input
|
|
2120
2169
|
}] } });
|
|
@@ -6264,6 +6313,211 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
6264
6313
|
type: Output
|
|
6265
6314
|
}] } });
|
|
6266
6315
|
|
|
6316
|
+
/**
|
|
6317
|
+
* ComprehensiveLinkTestComponent - Componente de prueba exhaustiva para el procesamiento de enlaces.
|
|
6318
|
+
*
|
|
6319
|
+
* Este componente demuestra todos los casos edge y escenarios complejos de procesamiento de enlaces,
|
|
6320
|
+
* incluyendo puntuación, URLs complejas, y mezclas de formatos.
|
|
6321
|
+
*
|
|
6322
|
+
* @example Uso en template:
|
|
6323
|
+
* ```html
|
|
6324
|
+
* <val-comprehensive-link-test></val-comprehensive-link-test>
|
|
6325
|
+
* ```
|
|
6326
|
+
*/
|
|
6327
|
+
class ComprehensiveLinkTestComponent {
|
|
6328
|
+
constructor() {
|
|
6329
|
+
this.punctuationProps = {
|
|
6330
|
+
content: 'Diferentes puntuaciones: https://angular.io, también https://github.com! ¿Conoces https://typescript.org? Final: https://rxjs.dev. Entre paréntesis (https://zone.js) y con comillas "https://ionic.io".',
|
|
6331
|
+
size: 'medium',
|
|
6332
|
+
color: 'dark',
|
|
6333
|
+
bold: false,
|
|
6334
|
+
processLinks: true,
|
|
6335
|
+
linkConfig: {
|
|
6336
|
+
openExternalInNewTab: true,
|
|
6337
|
+
linkClass: 'test-punctuation',
|
|
6338
|
+
externalLinkClass: 'test-external',
|
|
6339
|
+
},
|
|
6340
|
+
};
|
|
6341
|
+
this.complexUrlProps = {
|
|
6342
|
+
content: 'URLs complejas: https://api.github.com/repos/angular/angular/issues?state=open&sort=updated&per_page=50, búsqueda https://google.com/search?q=angular+ionic+components#results, y documentación https://angular.io/guide/getting-started#development-environment.',
|
|
6343
|
+
size: 'medium',
|
|
6344
|
+
color: 'dark',
|
|
6345
|
+
bold: false,
|
|
6346
|
+
processLinks: true,
|
|
6347
|
+
linkConfig: {
|
|
6348
|
+
openExternalInNewTab: true,
|
|
6349
|
+
linkClass: 'test-complex',
|
|
6350
|
+
externalLinkClass: 'test-external',
|
|
6351
|
+
},
|
|
6352
|
+
};
|
|
6353
|
+
this.parenthesesProps = {
|
|
6354
|
+
content: 'Paréntesis de contexto (ver https://docs.angular.io) vs URLs con paréntesis https://example.com/api/method(param) en el contenido. También funciona (https://ionic.io/docs).',
|
|
6355
|
+
size: 'medium',
|
|
6356
|
+
color: 'dark',
|
|
6357
|
+
bold: false,
|
|
6358
|
+
processLinks: true,
|
|
6359
|
+
linkConfig: {
|
|
6360
|
+
openExternalInNewTab: true,
|
|
6361
|
+
linkClass: 'test-parentheses',
|
|
6362
|
+
externalLinkClass: 'test-external',
|
|
6363
|
+
},
|
|
6364
|
+
};
|
|
6365
|
+
this.mixedFormatsProps = {
|
|
6366
|
+
content: 'Formatos mezclados: [Documentación oficial](https://angular.io/docs), enlace directo https://github.com/angular/angular, ruta interna /dashboard/settings, [guía de inicio](/getting-started), y API https://api.example.com/v1/users?active=true.',
|
|
6367
|
+
size: 'medium',
|
|
6368
|
+
color: 'dark',
|
|
6369
|
+
bold: false,
|
|
6370
|
+
processLinks: true,
|
|
6371
|
+
linkConfig: {
|
|
6372
|
+
openExternalInNewTab: true,
|
|
6373
|
+
openInternalInNewTab: false,
|
|
6374
|
+
processMarkdownLinks: true,
|
|
6375
|
+
linkClass: 'test-mixed',
|
|
6376
|
+
externalLinkClass: 'test-external',
|
|
6377
|
+
internalLinkClass: 'test-internal',
|
|
6378
|
+
},
|
|
6379
|
+
};
|
|
6380
|
+
this.edgeCasesProps = {
|
|
6381
|
+
content: 'Casos extremos: "https://quoted-url.com", múltiple puntuación https://example.com?!!, URL al final de oración https://final-url.org. También consecutivos: https://first.com y https://second.com.',
|
|
6382
|
+
size: 'medium',
|
|
6383
|
+
color: 'dark',
|
|
6384
|
+
bold: false,
|
|
6385
|
+
processLinks: true,
|
|
6386
|
+
linkConfig: {
|
|
6387
|
+
openExternalInNewTab: true,
|
|
6388
|
+
linkClass: 'test-edge',
|
|
6389
|
+
externalLinkClass: 'test-external',
|
|
6390
|
+
},
|
|
6391
|
+
};
|
|
6392
|
+
this.devUrlsProps = {
|
|
6393
|
+
content: 'URLs de desarrollo: http://localhost:4200/dashboard, servidor local https://127.0.0.1:8080/api/status, desarrollo http://dev.example.com:3000/debug?verbose=true, y túnel https://abc123.ngrok.io/webhook.',
|
|
6394
|
+
size: 'medium',
|
|
6395
|
+
color: 'dark',
|
|
6396
|
+
bold: false,
|
|
6397
|
+
processLinks: true,
|
|
6398
|
+
linkConfig: {
|
|
6399
|
+
openExternalInNewTab: false, // Para desarrollo, puede ser útil no abrir en nueva pestaña
|
|
6400
|
+
linkClass: 'test-dev',
|
|
6401
|
+
externalLinkClass: 'test-dev-external',
|
|
6402
|
+
},
|
|
6403
|
+
};
|
|
6404
|
+
}
|
|
6405
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ComprehensiveLinkTestComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6406
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ComprehensiveLinkTestComponent, isStandalone: true, selector: "val-comprehensive-link-test", ngImport: i0, template: `
|
|
6407
|
+
<div class="comprehensive-test">
|
|
6408
|
+
<h2>Prueba Exhaustiva de Procesamiento de Enlaces</h2>
|
|
6409
|
+
|
|
6410
|
+
<div class="test-section">
|
|
6411
|
+
<h3>✅ Puntuación Final - SOLUCIONADO</h3>
|
|
6412
|
+
<val-text [props]="punctuationProps"></val-text>
|
|
6413
|
+
<p class="note">
|
|
6414
|
+
<strong>Esperado:</strong> Los enlaces no incluyen puntuación final (.,;!?), pero la puntuación se preserva
|
|
6415
|
+
como texto después del enlace.
|
|
6416
|
+
</p>
|
|
6417
|
+
</div>
|
|
6418
|
+
|
|
6419
|
+
<div class="test-section">
|
|
6420
|
+
<h3>✅ URLs Complejas con Parámetros - SOLUCIONADO</h3>
|
|
6421
|
+
<val-text [props]="complexUrlProps"></val-text>
|
|
6422
|
+
<p class="note">
|
|
6423
|
+
<strong>Esperado:</strong> URLs con query params, fragmentos y rutas complejas se preservan completamente.
|
|
6424
|
+
</p>
|
|
6425
|
+
</div>
|
|
6426
|
+
|
|
6427
|
+
<div class="test-section">
|
|
6428
|
+
<h3>✅ Paréntesis Inteligentes - SOLUCIONADO</h3>
|
|
6429
|
+
<val-text [props]="parenthesesProps"></val-text>
|
|
6430
|
+
<p class="note">
|
|
6431
|
+
<strong>Esperado:</strong> Paréntesis de contexto (texto) vs paréntesis de URL se manejan correctamente.
|
|
6432
|
+
</p>
|
|
6433
|
+
</div>
|
|
6434
|
+
|
|
6435
|
+
<div class="test-section">
|
|
6436
|
+
<h3>✅ Mezcla de Formatos - SOLUCIONADO</h3>
|
|
6437
|
+
<val-text [props]="mixedFormatsProps"></val-text>
|
|
6438
|
+
<p class="note">
|
|
6439
|
+
<strong>Esperado:</strong> Enlaces Markdown, URLs directas y rutas internas coexisten sin conflictos.
|
|
6440
|
+
</p>
|
|
6441
|
+
</div>
|
|
6442
|
+
|
|
6443
|
+
<div class="test-section">
|
|
6444
|
+
<h3>✅ Casos Extremos - SOLUCIONADO</h3>
|
|
6445
|
+
<val-text [props]="edgeCasesProps"></val-text>
|
|
6446
|
+
<p class="note">
|
|
6447
|
+
<strong>Esperado:</strong> Comillas, múltiple puntuación, y URLs al final de oraciones se procesan
|
|
6448
|
+
correctamente.
|
|
6449
|
+
</p>
|
|
6450
|
+
</div>
|
|
6451
|
+
|
|
6452
|
+
<div class="test-section">
|
|
6453
|
+
<h3>✅ URLs de Desarrollo - SOLUCIONADO</h3>
|
|
6454
|
+
<val-text [props]="devUrlsProps"></val-text>
|
|
6455
|
+
<p class="note">
|
|
6456
|
+
<strong>Esperado:</strong> URLs de localhost, puertos, y rutas de desarrollo se detectan correctamente.
|
|
6457
|
+
</p>
|
|
6458
|
+
</div>
|
|
6459
|
+
</div>
|
|
6460
|
+
`, isInline: true, styles: [".comprehensive-test{padding:20px;max-width:1000px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.test-section{margin-bottom:32px;padding:20px;border:2px solid var(--ion-color-success, #2dd36f);border-radius:12px;background:var(--ion-color-success-tint, #42d77d) 10}h2{color:var(--ion-color-primary, #3880ff);margin-bottom:24px;text-align:center}h3{color:var(--ion-color-success, #2dd36f);margin-bottom:16px;font-size:18px;display:flex;align-items:center;gap:8px}.note{margin-top:12px;padding:12px;background:var(--ion-color-light, #f4f5f8);border-radius:8px;font-size:14px;color:var(--ion-color-medium, #92949c);border-left:4px solid var(--ion-color-primary, #3880ff)}.note strong{color:var(--ion-color-dark, #222428)}\n"], dependencies: [{ kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }] }); }
|
|
6461
|
+
}
|
|
6462
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ComprehensiveLinkTestComponent, decorators: [{
|
|
6463
|
+
type: Component,
|
|
6464
|
+
args: [{ selector: 'val-comprehensive-link-test', standalone: true, imports: [TextComponent], template: `
|
|
6465
|
+
<div class="comprehensive-test">
|
|
6466
|
+
<h2>Prueba Exhaustiva de Procesamiento de Enlaces</h2>
|
|
6467
|
+
|
|
6468
|
+
<div class="test-section">
|
|
6469
|
+
<h3>✅ Puntuación Final - SOLUCIONADO</h3>
|
|
6470
|
+
<val-text [props]="punctuationProps"></val-text>
|
|
6471
|
+
<p class="note">
|
|
6472
|
+
<strong>Esperado:</strong> Los enlaces no incluyen puntuación final (.,;!?), pero la puntuación se preserva
|
|
6473
|
+
como texto después del enlace.
|
|
6474
|
+
</p>
|
|
6475
|
+
</div>
|
|
6476
|
+
|
|
6477
|
+
<div class="test-section">
|
|
6478
|
+
<h3>✅ URLs Complejas con Parámetros - SOLUCIONADO</h3>
|
|
6479
|
+
<val-text [props]="complexUrlProps"></val-text>
|
|
6480
|
+
<p class="note">
|
|
6481
|
+
<strong>Esperado:</strong> URLs con query params, fragmentos y rutas complejas se preservan completamente.
|
|
6482
|
+
</p>
|
|
6483
|
+
</div>
|
|
6484
|
+
|
|
6485
|
+
<div class="test-section">
|
|
6486
|
+
<h3>✅ Paréntesis Inteligentes - SOLUCIONADO</h3>
|
|
6487
|
+
<val-text [props]="parenthesesProps"></val-text>
|
|
6488
|
+
<p class="note">
|
|
6489
|
+
<strong>Esperado:</strong> Paréntesis de contexto (texto) vs paréntesis de URL se manejan correctamente.
|
|
6490
|
+
</p>
|
|
6491
|
+
</div>
|
|
6492
|
+
|
|
6493
|
+
<div class="test-section">
|
|
6494
|
+
<h3>✅ Mezcla de Formatos - SOLUCIONADO</h3>
|
|
6495
|
+
<val-text [props]="mixedFormatsProps"></val-text>
|
|
6496
|
+
<p class="note">
|
|
6497
|
+
<strong>Esperado:</strong> Enlaces Markdown, URLs directas y rutas internas coexisten sin conflictos.
|
|
6498
|
+
</p>
|
|
6499
|
+
</div>
|
|
6500
|
+
|
|
6501
|
+
<div class="test-section">
|
|
6502
|
+
<h3>✅ Casos Extremos - SOLUCIONADO</h3>
|
|
6503
|
+
<val-text [props]="edgeCasesProps"></val-text>
|
|
6504
|
+
<p class="note">
|
|
6505
|
+
<strong>Esperado:</strong> Comillas, múltiple puntuación, y URLs al final de oraciones se procesan
|
|
6506
|
+
correctamente.
|
|
6507
|
+
</p>
|
|
6508
|
+
</div>
|
|
6509
|
+
|
|
6510
|
+
<div class="test-section">
|
|
6511
|
+
<h3>✅ URLs de Desarrollo - SOLUCIONADO</h3>
|
|
6512
|
+
<val-text [props]="devUrlsProps"></val-text>
|
|
6513
|
+
<p class="note">
|
|
6514
|
+
<strong>Esperado:</strong> URLs de localhost, puertos, y rutas de desarrollo se detectan correctamente.
|
|
6515
|
+
</p>
|
|
6516
|
+
</div>
|
|
6517
|
+
</div>
|
|
6518
|
+
`, styles: [".comprehensive-test{padding:20px;max-width:1000px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.test-section{margin-bottom:32px;padding:20px;border:2px solid var(--ion-color-success, #2dd36f);border-radius:12px;background:var(--ion-color-success-tint, #42d77d) 10}h2{color:var(--ion-color-primary, #3880ff);margin-bottom:24px;text-align:center}h3{color:var(--ion-color-success, #2dd36f);margin-bottom:16px;font-size:18px;display:flex;align-items:center;gap:8px}.note{margin-top:12px;padding:12px;background:var(--ion-color-light, #f4f5f8);border-radius:8px;font-size:14px;color:var(--ion-color-medium, #92949c);border-left:4px solid var(--ion-color-primary, #3880ff)}.note strong{color:var(--ion-color-dark, #222428)}\n"] }]
|
|
6519
|
+
}] });
|
|
6520
|
+
|
|
6267
6521
|
class CustomContentDemoComponent {
|
|
6268
6522
|
constructor() {
|
|
6269
6523
|
this.content = inject(ContentService);
|
|
@@ -6647,6 +6901,30 @@ class LinkProcessingExampleComponent {
|
|
|
6647
6901
|
internalLinkClass: 'mixed-internal',
|
|
6648
6902
|
},
|
|
6649
6903
|
};
|
|
6904
|
+
this.punctuationTestProps = {
|
|
6905
|
+
content: 'URLs con puntuación final: https://ionicframework.com/docs, también https://angular.io! Pregunta sobre https://github.com/angular? Y punto final: https://typescript.org. Paréntesis (https://rxjs.dev) y comillas "https://zone.js". ¡Todos funcionan!',
|
|
6906
|
+
size: 'medium',
|
|
6907
|
+
color: 'dark',
|
|
6908
|
+
bold: false,
|
|
6909
|
+
processLinks: true,
|
|
6910
|
+
linkConfig: {
|
|
6911
|
+
openExternalInNewTab: true,
|
|
6912
|
+
linkClass: 'punctuation-test',
|
|
6913
|
+
externalLinkClass: 'external-punct',
|
|
6914
|
+
},
|
|
6915
|
+
};
|
|
6916
|
+
this.complexUrlsProps = {
|
|
6917
|
+
content: 'URLs complejas: https://example.com/path?param=value&other=123#section, búsqueda en https://google.com/search?q=angular+components, y API https://api.github.com/repos/owner/repo/issues?state=open. Todos con parámetros y fragmentos.',
|
|
6918
|
+
size: 'medium',
|
|
6919
|
+
color: 'dark',
|
|
6920
|
+
bold: false,
|
|
6921
|
+
processLinks: true,
|
|
6922
|
+
linkConfig: {
|
|
6923
|
+
openExternalInNewTab: true,
|
|
6924
|
+
linkClass: 'complex-url',
|
|
6925
|
+
externalLinkClass: 'complex-external',
|
|
6926
|
+
},
|
|
6927
|
+
};
|
|
6650
6928
|
}
|
|
6651
6929
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LinkProcessingExampleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6652
6930
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LinkProcessingExampleComponent, isStandalone: true, selector: "val-link-processing-example", ngImport: i0, template: `
|
|
@@ -6687,8 +6965,18 @@ class LinkProcessingExampleComponent {
|
|
|
6687
6965
|
<h3>Mezcla de enlaces directos y Markdown:</h3>
|
|
6688
6966
|
<val-text [props]="mixedFormatsProps"></val-text>
|
|
6689
6967
|
</div>
|
|
6968
|
+
|
|
6969
|
+
<div class="example-section">
|
|
6970
|
+
<h3>Corrección de puntuación en URLs:</h3>
|
|
6971
|
+
<val-text [props]="punctuationTestProps"></val-text>
|
|
6972
|
+
</div>
|
|
6973
|
+
|
|
6974
|
+
<div class="example-section">
|
|
6975
|
+
<h3>URLs complejas con parámetros y fragmentos:</h3>
|
|
6976
|
+
<val-text [props]="complexUrlsProps"></val-text>
|
|
6977
|
+
</div>
|
|
6690
6978
|
</div>
|
|
6691
|
-
`, isInline: true, styles: [".
|
|
6979
|
+
`, isInline: true, styles: [".example-section{margin-bottom:24px;padding:16px;border:1px solid var(--ion-color-light, #f4f5f8);border-radius:8px;background:var(--ion-color-light-tint, #f5f6f9)}h2{color:var(--ion-color-primary, #3880ff);margin-bottom:20px}h3{color:var(--ion-color-dark, #222428);margin-bottom:10px;font-size:16px}\n"], dependencies: [{ kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }] }); }
|
|
6692
6980
|
}
|
|
6693
6981
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LinkProcessingExampleComponent, decorators: [{
|
|
6694
6982
|
type: Component,
|
|
@@ -6730,8 +7018,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
6730
7018
|
<h3>Mezcla de enlaces directos y Markdown:</h3>
|
|
6731
7019
|
<val-text [props]="mixedFormatsProps"></val-text>
|
|
6732
7020
|
</div>
|
|
7021
|
+
|
|
7022
|
+
<div class="example-section">
|
|
7023
|
+
<h3>Corrección de puntuación en URLs:</h3>
|
|
7024
|
+
<val-text [props]="punctuationTestProps"></val-text>
|
|
7025
|
+
</div>
|
|
7026
|
+
|
|
7027
|
+
<div class="example-section">
|
|
7028
|
+
<h3>URLs complejas con parámetros y fragmentos:</h3>
|
|
7029
|
+
<val-text [props]="complexUrlsProps"></val-text>
|
|
7030
|
+
</div>
|
|
6733
7031
|
</div>
|
|
6734
|
-
`, styles: [".
|
|
7032
|
+
`, styles: [".example-section{margin-bottom:24px;padding:16px;border:1px solid var(--ion-color-light, #f4f5f8);border-radius:8px;background:var(--ion-color-light-tint, #f5f6f9)}h2{color:var(--ion-color-primary, #3880ff);margin-bottom:20px}h3{color:var(--ion-color-dark, #222428);margin-bottom:10px;font-size:16px}\n"] }]
|
|
6735
7033
|
}] });
|
|
6736
7034
|
|
|
6737
7035
|
const text = {
|
|
@@ -6882,5 +7180,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
6882
7180
|
* Generated bundle index. Do not edit.
|
|
6883
7181
|
*/
|
|
6884
7182
|
|
|
6885
|
-
export { ActionType, AlertBoxComponent, AvatarComponent, BannerComponent, BaseDefault, BoxComponent, ButtonComponent, ButtonGroupComponent, CardComponent, CardSection, CardType, CheckInputComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CommentInputComponent, ComponentStates, ContentLoaderComponent, ContentService, CustomContentDemoComponent, DateInputComponent, DisplayComponent, DividerComponent, DownloadService, EmailInputComponent, ExpandableTextComponent, FileInputComponent, FooterComponent, FormComponent, FormFooterComponent, GlobalContent, HeaderComponent, HintComponent, HourInputComponent, HrefComponent, Icon, IconComponent, IconService, ImageComponent, InAppBrowserService, InputType, ItemListComponent, LangOption, LangService, LayeredCardComponent, LayoutComponent, LinkComponent, LinkProcessingExampleComponent, LinkProcessorService, LinksCakeComponent, LocalStorageService, MOTION, NavigationService, NoContentComponent, NotesBoxComponent, NumberInputComponent, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PasswordInputComponent, PinInputComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProgressBarComponent, ProgressStatusComponent, PrompterComponent, RadioInputComponent, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SelectSearchComponent, SimpleComponent, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, TextComponent, TextContent, TextInputComponent, ThemeOption, ThemeService, TitleBlockComponent, TitleComponent, ToastService, ToolbarActionType, ToolbarComponent, ValtechConfigService, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, content, createContentHelper, createTextProps, fromContent, fromContentWithInterpolation, fromMultipleContent, globalContentData, goToTop, interpolateContent, isAtEnd, maxLength, replaceSpecialChars, resolveColor, resolveInputDefaultValue };
|
|
7183
|
+
export { ActionType, AlertBoxComponent, AvatarComponent, BannerComponent, BaseDefault, BoxComponent, ButtonComponent, ButtonGroupComponent, CardComponent, CardSection, CardType, CheckInputComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CommentInputComponent, ComponentStates, ComprehensiveLinkTestComponent, ContentLoaderComponent, ContentService, CustomContentDemoComponent, DateInputComponent, DisplayComponent, DividerComponent, DownloadService, EmailInputComponent, ExpandableTextComponent, FileInputComponent, FooterComponent, FormComponent, FormFooterComponent, GlobalContent, HeaderComponent, HintComponent, HourInputComponent, HrefComponent, Icon, IconComponent, IconService, ImageComponent, InAppBrowserService, InputType, ItemListComponent, LangOption, LangService, LayeredCardComponent, LayoutComponent, LinkComponent, LinkProcessingExampleComponent, LinkProcessorService, LinksCakeComponent, LocalStorageService, MOTION, NavigationService, NoContentComponent, NotesBoxComponent, NumberInputComponent, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PasswordInputComponent, PinInputComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProgressBarComponent, ProgressStatusComponent, PrompterComponent, RadioInputComponent, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SelectSearchComponent, SimpleComponent, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, TextComponent, TextContent, TextInputComponent, ThemeOption, ThemeService, TitleBlockComponent, TitleComponent, ToastService, ToolbarActionType, ToolbarComponent, ValtechConfigService, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, content, createContentHelper, createTextProps, fromContent, fromContentWithInterpolation, fromMultipleContent, globalContentData, goToTop, interpolateContent, isAtEnd, maxLength, replaceSpecialChars, resolveColor, resolveInputDefaultValue };
|
|
6886
7184
|
//# sourceMappingURL=valtech-components.mjs.map
|