valtech-components 2.0.322 → 2.0.324
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 +71 -3
- package/esm2022/lib/components/atoms/text/types.mjs +1 -1
- package/esm2022/lib/services/content-loader.service.mjs +89 -28
- package/esm2022/public-api.mjs +1 -4
- package/fesm2022/valtech-components.mjs +157 -31
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/text/text.component.d.ts +27 -1
- package/lib/components/atoms/text/types.d.ts +1 -0
- package/lib/components/organisms/article/article.component.d.ts +2 -0
- package/lib/services/content-loader.service.d.ts +26 -9
- package/package.json +1 -1
|
@@ -2549,6 +2549,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2549
2549
|
* }"></val-text>
|
|
2550
2550
|
* ```
|
|
2551
2551
|
*
|
|
2552
|
+
* @example With partial bold support:
|
|
2553
|
+
* ```html
|
|
2554
|
+
* <val-text [props]="{
|
|
2555
|
+
* content: 'Hola <b>Victor</b>, cómo estás? También puedes usar <strong>strong</strong>',
|
|
2556
|
+
* allowPartialBold: true,
|
|
2557
|
+
* color: 'dark',
|
|
2558
|
+
* size: 'medium',
|
|
2559
|
+
* bold: false
|
|
2560
|
+
* }"></val-text>
|
|
2561
|
+
* ```
|
|
2562
|
+
*
|
|
2563
|
+
* @example Reactive content with partial bold:
|
|
2564
|
+
* ```html
|
|
2565
|
+
* <val-text [props]="{
|
|
2566
|
+
* contentKey: 'welcomeWithName',
|
|
2567
|
+
* contentClass: 'UserComponent',
|
|
2568
|
+
* contentInterpolation: { name: '<b>Juan</b>' },
|
|
2569
|
+
* allowPartialBold: true,
|
|
2570
|
+
* color: 'primary',
|
|
2571
|
+
* size: 'large',
|
|
2572
|
+
* bold: false
|
|
2573
|
+
* }"></val-text>
|
|
2574
|
+
* ```
|
|
2575
|
+
*
|
|
2552
2576
|
* @example Using ContentService helper:
|
|
2553
2577
|
* ```typescript
|
|
2554
2578
|
* // In component
|
|
@@ -2614,6 +2638,22 @@ class TextComponent {
|
|
|
2614
2638
|
this.displayContent$ = of(this.props.contentFallback || '');
|
|
2615
2639
|
}
|
|
2616
2640
|
}
|
|
2641
|
+
/**
|
|
2642
|
+
* Process partial bold tags in the content.
|
|
2643
|
+
* Converts <b> and <strong> tags to properly styled bold spans.
|
|
2644
|
+
*
|
|
2645
|
+
* @param content - The content string to process
|
|
2646
|
+
* @returns Processed content with bold styling
|
|
2647
|
+
*/
|
|
2648
|
+
processPartialBold(content) {
|
|
2649
|
+
if (!content)
|
|
2650
|
+
return '';
|
|
2651
|
+
// Process <b> tags
|
|
2652
|
+
let processedContent = content.replace(/<b>(.*?)<\/b>/gi, '<span class="partial-bold">$1</span>');
|
|
2653
|
+
// Process <strong> tags
|
|
2654
|
+
processedContent = processedContent.replace(/<strong>(.*?)<\/strong>/gi, '<span class="partial-bold">$1</span>');
|
|
2655
|
+
return processedContent;
|
|
2656
|
+
}
|
|
2617
2657
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextComponent, deps: [{ token: ContentService }, { token: LinkProcessorService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2618
2658
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TextComponent, isStandalone: true, selector: "val-text", inputs: { props: "props" }, ngImport: i0, template: `
|
|
2619
2659
|
<ion-text [color]="props.color">
|
|
@@ -2623,11 +2663,16 @@ class TextComponent {
|
|
|
2623
2663
|
[class.bold]="props.bold"
|
|
2624
2664
|
[innerHTML]="displayContent$ | async | processLinks: props.linkConfig"
|
|
2625
2665
|
></p>
|
|
2666
|
+
} @else if (
|
|
2667
|
+
(props.allowPartialBold && (displayContent$ | async)?.includes('<b>')) ||
|
|
2668
|
+
(displayContent$ | async)?.includes('<strong>')
|
|
2669
|
+
) {
|
|
2670
|
+
<p [class]="props.size" [class.bold]="props.bold" [innerHTML]="processPartialBold(displayContent$ | async)"></p>
|
|
2626
2671
|
} @else {
|
|
2627
2672
|
<p [class]="props.size" [class.bold]="props.bold">{{ displayContent$ | async }}</p>
|
|
2628
2673
|
}
|
|
2629
2674
|
</ion-text>
|
|
2630
|
-
`, 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;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@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 }); }
|
|
2675
|
+
`, 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;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@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}}:host ::ng-deep .partial-bold{font-weight:700}\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 }); }
|
|
2631
2676
|
}
|
|
2632
2677
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextComponent, decorators: [{
|
|
2633
2678
|
type: Component,
|
|
@@ -2639,11 +2684,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2639
2684
|
[class.bold]="props.bold"
|
|
2640
2685
|
[innerHTML]="displayContent$ | async | processLinks: props.linkConfig"
|
|
2641
2686
|
></p>
|
|
2687
|
+
} @else if (
|
|
2688
|
+
(props.allowPartialBold && (displayContent$ | async)?.includes('<b>')) ||
|
|
2689
|
+
(displayContent$ | async)?.includes('<strong>')
|
|
2690
|
+
) {
|
|
2691
|
+
<p [class]="props.size" [class.bold]="props.bold" [innerHTML]="processPartialBold(displayContent$ | async)"></p>
|
|
2642
2692
|
} @else {
|
|
2643
2693
|
<p [class]="props.size" [class.bold]="props.bold">{{ displayContent$ | async }}</p>
|
|
2644
2694
|
}
|
|
2645
2695
|
</ion-text>
|
|
2646
|
-
`, 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;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@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"] }]
|
|
2696
|
+
`, 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;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@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}}:host ::ng-deep .partial-bold{font-weight:700}\n"] }]
|
|
2647
2697
|
}], ctorParameters: () => [{ type: ContentService }, { type: LinkProcessorService }], propDecorators: { props: [{
|
|
2648
2698
|
type: Input
|
|
2649
2699
|
}] } });
|
|
@@ -2669,6 +2719,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2669
2719
|
* })
|
|
2670
2720
|
* };
|
|
2671
2721
|
* ```
|
|
2722
|
+
*
|
|
2723
|
+
* @example With partial bold support:
|
|
2724
|
+
* ```typescript
|
|
2725
|
+
* // In component
|
|
2726
|
+
* greetingProps: TextMetadata = {
|
|
2727
|
+
* ...createTextProps({
|
|
2728
|
+
* contentKey: 'greeting',
|
|
2729
|
+
* contentClass: 'UserComponent',
|
|
2730
|
+
* contentInterpolation: { name: '<b>Juan</b>' }
|
|
2731
|
+
* }, {
|
|
2732
|
+
* color: 'primary',
|
|
2733
|
+
* size: 'medium',
|
|
2734
|
+
* bold: false,
|
|
2735
|
+
* allowPartialBold: true
|
|
2736
|
+
* })
|
|
2737
|
+
* };
|
|
2738
|
+
* ```
|
|
2672
2739
|
*/
|
|
2673
2740
|
function createTextProps(contentConfig, styleConfig = {}) {
|
|
2674
2741
|
return {
|
|
@@ -2679,6 +2746,7 @@ function createTextProps(contentConfig, styleConfig = {}) {
|
|
|
2679
2746
|
color: styleConfig.color || 'dark',
|
|
2680
2747
|
size: styleConfig.size || 'medium',
|
|
2681
2748
|
bold: styleConfig.bold || false,
|
|
2749
|
+
allowPartialBold: styleConfig.allowPartialBold || false,
|
|
2682
2750
|
};
|
|
2683
2751
|
}
|
|
2684
2752
|
|
|
@@ -8044,8 +8112,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
8044
8112
|
/**
|
|
8045
8113
|
* ContentLoader Service - Dynamic content loading system.
|
|
8046
8114
|
*
|
|
8047
|
-
*
|
|
8048
|
-
*
|
|
8115
|
+
* REFACTORED: Now uses ValtechConfigService properly instead of hacking LangService.
|
|
8116
|
+
* This provides a clean, maintainable way to register content dynamically.
|
|
8049
8117
|
*
|
|
8050
8118
|
* @example Basic usage:
|
|
8051
8119
|
* ```typescript
|
|
@@ -8055,30 +8123,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
8055
8123
|
* en: { title: 'My User Page', welcome: 'Welcome {{name}}' }
|
|
8056
8124
|
* };
|
|
8057
8125
|
*
|
|
8058
|
-
* // In component
|
|
8126
|
+
* // In component
|
|
8059
8127
|
* import { UserPageContent } from './user-page.content';
|
|
8060
|
-
*
|
|
8128
|
+
* registerContent('UserPage', UserPageContent);
|
|
8061
8129
|
* ```
|
|
8062
8130
|
*/
|
|
8063
8131
|
class ContentLoaderService {
|
|
8064
|
-
constructor(
|
|
8065
|
-
this.
|
|
8132
|
+
constructor() {
|
|
8133
|
+
this.valtechConfig = inject(ValtechConfigService);
|
|
8066
8134
|
this.registeredContent = new Map();
|
|
8067
8135
|
}
|
|
8068
8136
|
/**
|
|
8069
8137
|
* Register content for a specific component/page class.
|
|
8138
|
+
* ✅ CLEAN: Uses proper ValtechConfigService API instead of hacking LangService
|
|
8070
8139
|
*/
|
|
8071
8140
|
registerContent(className, content) {
|
|
8141
|
+
// Store locally for tracking
|
|
8072
8142
|
this.registeredContent.set(className, content);
|
|
8073
|
-
|
|
8143
|
+
// Update the configuration properly
|
|
8144
|
+
this.addContentToProvider(className, content);
|
|
8145
|
+
console.log(`✅ ContentLoader: Registered content for "${className}"`);
|
|
8074
8146
|
}
|
|
8075
8147
|
/**
|
|
8076
8148
|
* Register multiple content modules at once.
|
|
8077
8149
|
*/
|
|
8078
8150
|
loadContent(contentModules) {
|
|
8151
|
+
console.log(`🔄 ContentLoader: Loading ${contentModules.length} content modules...`);
|
|
8079
8152
|
contentModules.forEach(module => {
|
|
8080
8153
|
this.registerContent(module.className, module.content);
|
|
8081
8154
|
});
|
|
8155
|
+
console.log('✅ ContentLoader: All content modules loaded successfully');
|
|
8082
8156
|
}
|
|
8083
8157
|
/**
|
|
8084
8158
|
* Check if content is registered for a class.
|
|
@@ -8104,6 +8178,13 @@ class ContentLoaderService {
|
|
|
8104
8178
|
unregisterContent(className) {
|
|
8105
8179
|
const existed = this.registeredContent.has(className);
|
|
8106
8180
|
this.registeredContent.delete(className);
|
|
8181
|
+
// Also remove from the provider
|
|
8182
|
+
if (existed && this.valtechConfig.content) {
|
|
8183
|
+
const updatedContent = { ...this.valtechConfig.content };
|
|
8184
|
+
delete updatedContent[className];
|
|
8185
|
+
this.valtechConfig.content = updatedContent;
|
|
8186
|
+
console.log(`🗑️ ContentLoader: Unregistered content for "${className}"`);
|
|
8187
|
+
}
|
|
8107
8188
|
return existed;
|
|
8108
8189
|
}
|
|
8109
8190
|
/**
|
|
@@ -8111,26 +8192,39 @@ class ContentLoaderService {
|
|
|
8111
8192
|
*/
|
|
8112
8193
|
clearAllContent() {
|
|
8113
8194
|
this.registeredContent.clear();
|
|
8195
|
+
console.log('🧹 ContentLoader: Cleared all registered content');
|
|
8196
|
+
}
|
|
8197
|
+
/**
|
|
8198
|
+
* Get current content provider state.
|
|
8199
|
+
* Useful for debugging.
|
|
8200
|
+
*/
|
|
8201
|
+
getContentProvider() {
|
|
8202
|
+
return this.valtechConfig.content;
|
|
8114
8203
|
}
|
|
8115
8204
|
/**
|
|
8116
|
-
* Add content to
|
|
8205
|
+
* ✅ CLEAN: Add content to provider using proper API
|
|
8117
8206
|
* @private
|
|
8118
8207
|
*/
|
|
8119
|
-
|
|
8120
|
-
|
|
8121
|
-
|
|
8208
|
+
addContentToProvider(className, content) {
|
|
8209
|
+
try {
|
|
8210
|
+
// Get current content provider
|
|
8211
|
+
const currentContent = this.valtechConfig.content || {};
|
|
8212
|
+
// Create TextContent instance
|
|
8122
8213
|
const textContent = new TextContent(content);
|
|
8123
|
-
|
|
8124
|
-
|
|
8125
|
-
|
|
8126
|
-
|
|
8127
|
-
|
|
8214
|
+
// Update the content provider properly
|
|
8215
|
+
const updatedContent = {
|
|
8216
|
+
...currentContent,
|
|
8217
|
+
[className]: textContent
|
|
8218
|
+
};
|
|
8219
|
+
// Set the updated content - this is the clean way
|
|
8220
|
+
this.valtechConfig.content = updatedContent;
|
|
8221
|
+
console.log(`📝 ContentLoader: Added "${className}" to content provider`);
|
|
8128
8222
|
}
|
|
8129
|
-
|
|
8130
|
-
console.error(
|
|
8223
|
+
catch (error) {
|
|
8224
|
+
console.error(`❌ ContentLoader: Error adding content for "${className}":`, error);
|
|
8131
8225
|
}
|
|
8132
8226
|
}
|
|
8133
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ContentLoaderService, deps: [
|
|
8227
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ContentLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
8134
8228
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ContentLoaderService, providedIn: 'root' }); }
|
|
8135
8229
|
}
|
|
8136
8230
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ContentLoaderService, decorators: [{
|
|
@@ -8138,27 +8232,62 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
8138
8232
|
args: [{
|
|
8139
8233
|
providedIn: 'root',
|
|
8140
8234
|
}]
|
|
8141
|
-
}]
|
|
8235
|
+
}] });
|
|
8142
8236
|
/**
|
|
8143
8237
|
* Helper function to create a content module.
|
|
8144
8238
|
*/
|
|
8145
8239
|
function createContentModule(className, content) {
|
|
8146
8240
|
return { className, content };
|
|
8147
8241
|
}
|
|
8242
|
+
/**
|
|
8243
|
+
* ✅ CLEAN: Global registry using proper array instead of globalThis hack
|
|
8244
|
+
*/
|
|
8245
|
+
const globalContentRegistry = [];
|
|
8148
8246
|
/**
|
|
8149
8247
|
* Simple function to register content directly.
|
|
8248
|
+
* ✅ IMPROVED: Cleaner global registry management
|
|
8150
8249
|
*/
|
|
8151
8250
|
function registerContent(className, content) {
|
|
8152
|
-
|
|
8153
|
-
|
|
8251
|
+
// Add to global registry
|
|
8252
|
+
globalContentRegistry.push({ className, content });
|
|
8253
|
+
console.log(`📝 registerContent: Queued "${className}" for registration`);
|
|
8154
8254
|
}
|
|
8155
8255
|
/**
|
|
8156
8256
|
* Load all content from the global registry.
|
|
8257
|
+
* ✅ IMPROVED: Better error handling and logging
|
|
8157
8258
|
*/
|
|
8158
8259
|
function loadRegisteredContent(contentLoader) {
|
|
8159
|
-
|
|
8160
|
-
|
|
8161
|
-
|
|
8260
|
+
if (globalContentRegistry.length === 0) {
|
|
8261
|
+
console.log('ℹ️ ContentLoader: No content registered to load');
|
|
8262
|
+
return;
|
|
8263
|
+
}
|
|
8264
|
+
console.log(`🚀 ContentLoader: Loading ${globalContentRegistry.length} registered content modules...`);
|
|
8265
|
+
try {
|
|
8266
|
+
// Load all content
|
|
8267
|
+
contentLoader.loadContent([...globalContentRegistry]);
|
|
8268
|
+
// Clear the registry after loading
|
|
8269
|
+
globalContentRegistry.length = 0;
|
|
8270
|
+
console.log('🎉 ContentLoader: All registered content loaded and registry cleared');
|
|
8271
|
+
}
|
|
8272
|
+
catch (error) {
|
|
8273
|
+
console.error('❌ ContentLoader: Error loading registered content:', error);
|
|
8274
|
+
}
|
|
8275
|
+
}
|
|
8276
|
+
/**
|
|
8277
|
+
* ✅ NEW: Debugging helper
|
|
8278
|
+
* Get current global registry state
|
|
8279
|
+
*/
|
|
8280
|
+
function getRegisteredContentQueue() {
|
|
8281
|
+
return [...globalContentRegistry];
|
|
8282
|
+
}
|
|
8283
|
+
/**
|
|
8284
|
+
* ✅ NEW: Debugging helper
|
|
8285
|
+
* Clear the global registry without loading
|
|
8286
|
+
*/
|
|
8287
|
+
function clearRegisteredContentQueue() {
|
|
8288
|
+
const count = globalContentRegistry.length;
|
|
8289
|
+
globalContentRegistry.length = 0;
|
|
8290
|
+
console.log(`🧹 ContentLoader: Cleared ${count} items from registration queue`);
|
|
8162
8291
|
}
|
|
8163
8292
|
|
|
8164
8293
|
const text = {
|
|
@@ -8327,9 +8456,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
8327
8456
|
}]
|
|
8328
8457
|
}], ctorParameters: () => [{ type: i2.ToastController }] });
|
|
8329
8458
|
|
|
8330
|
-
/*
|
|
8331
|
-
* Public API Surface of valtech-components
|
|
8332
|
-
*/
|
|
8333
8459
|
/*
|
|
8334
8460
|
* Public API Surface of valtech-components
|
|
8335
8461
|
*/
|
|
@@ -8338,5 +8464,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
8338
8464
|
* Generated bundle index. Do not edit.
|
|
8339
8465
|
*/
|
|
8340
8466
|
|
|
8341
|
-
export { ARTICLE_SPACING, ActionType, AlertBoxComponent, ArticleBuilder, ArticleComponent, AvatarComponent, BannerComponent, BaseDefault, BoxComponent, ButtonComponent, ButtonGroupComponent, CardComponent, CardSection, CardType, CheckInputComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CommentInputComponent, ComponentContentHelper, ComponentStates, ContentLoaderComponent, ContentLoaderService, ContentService, DateInputComponent, DisplayComponent, DividerComponent, DownloadService, EmailInputComponent, ExpandableTextComponent, FileInputComponent, FooterComponent, FormComponent, FormFooterComponent, GlobalContent, HeaderComponent, HintComponent, HourInputComponent, HrefComponent, Icon, IconComponent, IconService, ImageComponent, InAppBrowserService, InputType, ItemListComponent, LANGUAGES, LangService, LanguageSelectorComponent, LayeredCardComponent, LayoutComponent, LinkComponent, LinkProcessorService, LinksCakeComponent, ListContentHelper, LocalStorageService, MOTION, NavigationService, NoContentComponent, NotesBoxComponent, NumberInputComponent, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PasswordInputComponent, PinInputComponent, PopoverSelectorComponent, 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, createButtonProps, createComponentContentHelper, createContentHelper, createContentModule, createDisplayProps, createReactiveProps, createTextProps, createTitleProps, fromContent, fromContentWithInterpolation, fromMultipleContent, globalContentData, goToTop, interpolateContent, isAtEnd, loadRegisteredContent, maxLength, registerContent, replaceSpecialChars, resolveColor, resolveInputDefaultValue, shouldUseReactiveContent };
|
|
8467
|
+
export { ARTICLE_SPACING, ActionType, AlertBoxComponent, ArticleBuilder, ArticleComponent, AvatarComponent, BannerComponent, BaseDefault, BoxComponent, ButtonComponent, ButtonGroupComponent, CardComponent, CardSection, CardType, CheckInputComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CommentInputComponent, ComponentContentHelper, ComponentStates, ContentLoaderComponent, ContentLoaderService, ContentService, DateInputComponent, DisplayComponent, DividerComponent, DownloadService, EmailInputComponent, ExpandableTextComponent, FileInputComponent, FooterComponent, FormComponent, FormFooterComponent, GlobalContent, HeaderComponent, HintComponent, HourInputComponent, HrefComponent, Icon, IconComponent, IconService, ImageComponent, InAppBrowserService, InputType, ItemListComponent, LANGUAGES, LangService, LanguageSelectorComponent, LayeredCardComponent, LayoutComponent, LinkComponent, LinkProcessorService, LinksCakeComponent, ListContentHelper, LocalStorageService, MOTION, NavigationService, NoContentComponent, NotesBoxComponent, NumberInputComponent, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PasswordInputComponent, PinInputComponent, PopoverSelectorComponent, 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, clearRegisteredContentQueue, content, createButtonProps, createComponentContentHelper, createContentHelper, createContentModule, createDisplayProps, createReactiveProps, createTextProps, createTitleProps, fromContent, fromContentWithInterpolation, fromMultipleContent, getRegisteredContentQueue, globalContentData, goToTop, interpolateContent, isAtEnd, loadRegisteredContent, maxLength, registerContent, replaceSpecialChars, resolveColor, resolveInputDefaultValue, shouldUseReactiveContent };
|
|
8342
8468
|
//# sourceMappingURL=valtech-components.mjs.map
|