valtech-components 2.0.305 → 2.0.307

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.
@@ -1921,17 +1921,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1921
1921
  * val-image
1922
1922
  *
1923
1923
  * Displays an image with various display options (bordered, shaded, dark, etc).
1924
+ * Now includes a container wrapper for better flexbox support and alignment options.
1924
1925
  *
1925
1926
  * @example
1926
- * <val-image [props]="{ src: 'url', alt: 'desc', width: 100, height: 100, bordered: true }"></val-image>
1927
- *
1928
- * @input props: ImageMetadata - Configuration for the image (src, alt, size, mode, etc.)
1927
+ * <val-image [props]="{
1928
+ * src: 'url',
1929
+ * alt: 'desc',
1930
+ * width: 100,
1931
+ * height: 100,
1932
+ * bordered: true,
1933
+ * alignment: 'center',
1934
+ * caption: 'Image description'
1935
+ * }"></val-image>
1936
+ *
1937
+ * @input props: ImageMetadata - Configuration for the image (src, alt, size, mode, alignment, caption, etc.)
1929
1938
  */
1930
1939
  class ImageComponent {
1931
1940
  constructor() {
1932
1941
  this.available = true;
1933
1942
  }
1934
- ngOnInit() { }
1943
+ ngOnInit() {
1944
+ // Set default values
1945
+ if (!this.props.alignment) {
1946
+ this.props.alignment = 'center';
1947
+ }
1948
+ if (!this.props.captionSize) {
1949
+ this.props.captionSize = 'medium';
1950
+ }
1951
+ if (!this.props.mode) {
1952
+ this.props.mode = 'box';
1953
+ }
1954
+ }
1935
1955
  changeToVisible() {
1936
1956
  setInterval(() => {
1937
1957
  this.available = true;
@@ -1939,70 +1959,120 @@ class ImageComponent {
1939
1959
  }
1940
1960
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1941
1961
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ImageComponent, isStandalone: true, selector: "val-image", inputs: { props: "props" }, ngImport: i0, template: `
1942
- @if (props.src.includes('--')) {
1943
- <img
1944
- [ngClass]="['image', props.mode, props.size]"
1945
- [ngStyle]="{
1946
- content: 'var(' + props.src + ')',
1947
- }"
1948
- [class.bordered]="props.bordered"
1949
- [class.shaded]="props.shaded"
1950
- [class.dark]="props.dark"
1951
- [class.limited]="props.limited"
1952
- [alt]="props.alt"
1953
- [style.width.px]="props.width"
1954
- [style.max-width.px]="props.width"
1955
- [style.height.px]="props.height"
1956
- />
1957
- } @else {
1958
- <img
1959
- [ngClass]="['image', props.mode, props.size]"
1960
- [class.bordered]="props.bordered"
1961
- [class.shaded]="props.shaded"
1962
- [class.dark]="props.dark"
1963
- [class.limited]="props.limited"
1964
- [src]="props.src"
1965
- [alt]="props.alt"
1966
- [style.width.rem]="props.width"
1967
- [style.max-width.rem]="props.width"
1968
- [style.height.px]="props.height"
1969
- />
1970
- }
1971
- `, 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{width:30%}.small.limited{max-width:6.25rem}.medium{width:50%}.medium.limited{max-width:15rem}.large{width:70%}.large.limited{max-width:28.125rem}.xlarge{width:100%}.xlarge.limited{max-width:43.75rem}.image{opacity:1;height:auto;display:block}.visible{animation:appereance ease-in 1s forwards}@keyframes appereance{0%{opacity:0;height:0}to{opacity:1;height:auto}}.rounded{border-radius:.5rem}.circular{border-radius:50%}.bordered{border:.0625rem solid var(--ion-color-medium)}.shaded{box-shadow:.1875rem .625rem .5rem #1219541a}@media (prefers-color-scheme: dark){.dark{filter:invert(1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
1962
+ <figure
1963
+ class="val-image-container"
1964
+ [class]="props.containerClass"
1965
+ [ngClass]="{
1966
+ 'val-image-container--left': props.alignment === 'left',
1967
+ 'val-image-container--center': props.alignment === 'center' || !props.alignment,
1968
+ 'val-image-container--right': props.alignment === 'right',
1969
+ }"
1970
+ >
1971
+ <div class="val-image-wrapper" [ngClass]="[props.size]">
1972
+ @if (props.src.includes('--')) {
1973
+ <img
1974
+ class="val-image"
1975
+ [ngClass]="[props.mode]"
1976
+ [ngStyle]="{
1977
+ content: 'var(' + props.src + ')',
1978
+ }"
1979
+ [class.bordered]="props.bordered"
1980
+ [class.shaded]="props.shaded"
1981
+ [class.dark]="props.dark"
1982
+ [class.limited]="props.limited"
1983
+ [alt]="props.alt"
1984
+ [style.width.px]="props.width"
1985
+ [style.height.px]="props.height"
1986
+ />
1987
+ } @else {
1988
+ <img
1989
+ class="val-image"
1990
+ [ngClass]="[props.mode]"
1991
+ [class.bordered]="props.bordered"
1992
+ [class.shaded]="props.shaded"
1993
+ [class.dark]="props.dark"
1994
+ [class.limited]="props.limited"
1995
+ [src]="props.src"
1996
+ [alt]="props.alt"
1997
+ [style.width.px]="props.width"
1998
+ [style.height.px]="props.height"
1999
+ />
2000
+ }
2001
+ </div>
2002
+
2003
+ @if (props.caption) {
2004
+ <figcaption
2005
+ class="val-image-caption"
2006
+ [ngClass]="{
2007
+ 'val-image-caption--small': props.captionSize === 'small',
2008
+ 'val-image-caption--medium': props.captionSize === 'medium' || !props.captionSize,
2009
+ 'val-image-caption--large': props.captionSize === 'large',
2010
+ }"
2011
+ >
2012
+ {{ props.caption }}
2013
+ </figcaption>
2014
+ }
2015
+ </figure>
2016
+ `, 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)}.val-image-container{margin:0;padding:0;display:inline-block;max-width:100%}.val-image-container--left{margin-right:auto;text-align:left}.val-image-container--center{margin-left:auto;margin-right:auto;text-align:center}.val-image-container--right{margin-left:auto;text-align:right}.val-image-wrapper{display:inline-block;position:relative}.val-image-wrapper.small{width:30%;min-width:5rem;max-width:9.375rem}.val-image-wrapper.medium{width:50%;min-width:7.5rem;max-width:18.75rem}.val-image-wrapper.large{width:70%;min-width:12.5rem;max-width:31.25rem}.val-image-wrapper.xlarge{width:100%;min-width:15.625rem;max-width:none}.val-image{width:100%;height:auto;display:block;opacity:1;max-width:100%}.val-image.rounded{border-radius:.5rem}.val-image.circular{border-radius:50%;aspect-ratio:1;object-fit:cover}.val-image.box{border-radius:0}.val-image.bordered{border:.0625rem solid var(--ion-color-medium)}.val-image.shaded{box-shadow:.1875rem .625rem .5rem #1219541a}@media (prefers-color-scheme: dark){.val-image.dark{filter:invert(1)}}.val-image.limited{max-width:100%}.val-image-caption{margin-top:.5rem;color:var(--ion-color-medium-shade, #666);font-style:italic;line-height:1.4}.val-image-caption--small{font-size:.75rem}.val-image-caption--medium{font-size:.875rem}.val-image-caption--large{font-size:1rem}.val-image.visible{animation:appearance ease-in 1s forwards}@keyframes appearance{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@media (max-width: 768px){.val-image-wrapper.small{width:40%;max-width:7.5rem}.val-image-wrapper.medium{width:60%;max-width:15.625rem}.val-image-wrapper.large{width:80%;max-width:25rem}.val-image-wrapper.xlarge{width:100%}}.val-image-container{flex-shrink:0;align-self:flex-start}.flexbox-container .val-image-container--left{align-self:flex-start}.flexbox-container .val-image-container--center{align-self:center}.flexbox-container .val-image-container--right{align-self:flex-end}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
1972
2017
  }
1973
2018
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImageComponent, decorators: [{
1974
2019
  type: Component,
1975
2020
  args: [{ selector: 'val-image', standalone: true, imports: [CommonModule], template: `
1976
- @if (props.src.includes('--')) {
1977
- <img
1978
- [ngClass]="['image', props.mode, props.size]"
1979
- [ngStyle]="{
1980
- content: 'var(' + props.src + ')',
1981
- }"
1982
- [class.bordered]="props.bordered"
1983
- [class.shaded]="props.shaded"
1984
- [class.dark]="props.dark"
1985
- [class.limited]="props.limited"
1986
- [alt]="props.alt"
1987
- [style.width.px]="props.width"
1988
- [style.max-width.px]="props.width"
1989
- [style.height.px]="props.height"
1990
- />
1991
- } @else {
1992
- <img
1993
- [ngClass]="['image', props.mode, props.size]"
1994
- [class.bordered]="props.bordered"
1995
- [class.shaded]="props.shaded"
1996
- [class.dark]="props.dark"
1997
- [class.limited]="props.limited"
1998
- [src]="props.src"
1999
- [alt]="props.alt"
2000
- [style.width.rem]="props.width"
2001
- [style.max-width.rem]="props.width"
2002
- [style.height.px]="props.height"
2003
- />
2004
- }
2005
- `, 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{width:30%}.small.limited{max-width:6.25rem}.medium{width:50%}.medium.limited{max-width:15rem}.large{width:70%}.large.limited{max-width:28.125rem}.xlarge{width:100%}.xlarge.limited{max-width:43.75rem}.image{opacity:1;height:auto;display:block}.visible{animation:appereance ease-in 1s forwards}@keyframes appereance{0%{opacity:0;height:0}to{opacity:1;height:auto}}.rounded{border-radius:.5rem}.circular{border-radius:50%}.bordered{border:.0625rem solid var(--ion-color-medium)}.shaded{box-shadow:.1875rem .625rem .5rem #1219541a}@media (prefers-color-scheme: dark){.dark{filter:invert(1)}}\n"] }]
2021
+ <figure
2022
+ class="val-image-container"
2023
+ [class]="props.containerClass"
2024
+ [ngClass]="{
2025
+ 'val-image-container--left': props.alignment === 'left',
2026
+ 'val-image-container--center': props.alignment === 'center' || !props.alignment,
2027
+ 'val-image-container--right': props.alignment === 'right',
2028
+ }"
2029
+ >
2030
+ <div class="val-image-wrapper" [ngClass]="[props.size]">
2031
+ @if (props.src.includes('--')) {
2032
+ <img
2033
+ class="val-image"
2034
+ [ngClass]="[props.mode]"
2035
+ [ngStyle]="{
2036
+ content: 'var(' + props.src + ')',
2037
+ }"
2038
+ [class.bordered]="props.bordered"
2039
+ [class.shaded]="props.shaded"
2040
+ [class.dark]="props.dark"
2041
+ [class.limited]="props.limited"
2042
+ [alt]="props.alt"
2043
+ [style.width.px]="props.width"
2044
+ [style.height.px]="props.height"
2045
+ />
2046
+ } @else {
2047
+ <img
2048
+ class="val-image"
2049
+ [ngClass]="[props.mode]"
2050
+ [class.bordered]="props.bordered"
2051
+ [class.shaded]="props.shaded"
2052
+ [class.dark]="props.dark"
2053
+ [class.limited]="props.limited"
2054
+ [src]="props.src"
2055
+ [alt]="props.alt"
2056
+ [style.width.px]="props.width"
2057
+ [style.height.px]="props.height"
2058
+ />
2059
+ }
2060
+ </div>
2061
+
2062
+ @if (props.caption) {
2063
+ <figcaption
2064
+ class="val-image-caption"
2065
+ [ngClass]="{
2066
+ 'val-image-caption--small': props.captionSize === 'small',
2067
+ 'val-image-caption--medium': props.captionSize === 'medium' || !props.captionSize,
2068
+ 'val-image-caption--large': props.captionSize === 'large',
2069
+ }"
2070
+ >
2071
+ {{ props.caption }}
2072
+ </figcaption>
2073
+ }
2074
+ </figure>
2075
+ `, 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)}.val-image-container{margin:0;padding:0;display:inline-block;max-width:100%}.val-image-container--left{margin-right:auto;text-align:left}.val-image-container--center{margin-left:auto;margin-right:auto;text-align:center}.val-image-container--right{margin-left:auto;text-align:right}.val-image-wrapper{display:inline-block;position:relative}.val-image-wrapper.small{width:30%;min-width:5rem;max-width:9.375rem}.val-image-wrapper.medium{width:50%;min-width:7.5rem;max-width:18.75rem}.val-image-wrapper.large{width:70%;min-width:12.5rem;max-width:31.25rem}.val-image-wrapper.xlarge{width:100%;min-width:15.625rem;max-width:none}.val-image{width:100%;height:auto;display:block;opacity:1;max-width:100%}.val-image.rounded{border-radius:.5rem}.val-image.circular{border-radius:50%;aspect-ratio:1;object-fit:cover}.val-image.box{border-radius:0}.val-image.bordered{border:.0625rem solid var(--ion-color-medium)}.val-image.shaded{box-shadow:.1875rem .625rem .5rem #1219541a}@media (prefers-color-scheme: dark){.val-image.dark{filter:invert(1)}}.val-image.limited{max-width:100%}.val-image-caption{margin-top:.5rem;color:var(--ion-color-medium-shade, #666);font-style:italic;line-height:1.4}.val-image-caption--small{font-size:.75rem}.val-image-caption--medium{font-size:.875rem}.val-image-caption--large{font-size:1rem}.val-image.visible{animation:appearance ease-in 1s forwards}@keyframes appearance{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@media (max-width: 768px){.val-image-wrapper.small{width:40%;max-width:7.5rem}.val-image-wrapper.medium{width:60%;max-width:15.625rem}.val-image-wrapper.large{width:80%;max-width:25rem}.val-image-wrapper.xlarge{width:100%}}.val-image-container{flex-shrink:0;align-self:flex-start}.flexbox-container .val-image-container--left{align-self:flex-start}.flexbox-container .val-image-container--center{align-self:center}.flexbox-container .val-image-container--right{align-self:flex-end}\n"] }]
2006
2076
  }], ctorParameters: () => [], propDecorators: { props: [{
2007
2077
  type: Input
2008
2078
  }] } });
@@ -5633,6 +5703,624 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
5633
5703
  type: Input
5634
5704
  }] } });
5635
5705
 
5706
+ /**
5707
+ * val-article
5708
+ *
5709
+ * Componente para crear artículos, blogs y documentación de forma declarativa.
5710
+ * Permite combinar múltiples elementos (títulos, texto, imágenes, código, etc.)
5711
+ * con espaciado automático y soporte multi-idioma.
5712
+ *
5713
+ * @example Uso básico:
5714
+ * ```html
5715
+ * <val-article [props]="articleConfig"></val-article>
5716
+ * ```
5717
+ *
5718
+ * @example Con ArticleBuilder:
5719
+ * ```typescript
5720
+ * articleConfig = new ArticleBuilder()
5721
+ * .title(titleProps)
5722
+ * .paragraph(textProps)
5723
+ * .code('console.log("Hello World")', 'javascript')
5724
+ * .build();
5725
+ * ```
5726
+ *
5727
+ * @input props: ArticleMetadata - Configuración completa del artículo
5728
+ */
5729
+ class ArticleComponent {
5730
+ constructor() { }
5731
+ ngOnInit() {
5732
+ // Validación básica
5733
+ if (!this.props || !this.props.elements) {
5734
+ console.warn('val-article: props.elements is required');
5735
+ }
5736
+ }
5737
+ /**
5738
+ * Función de trackBy para optimizar el rendering de elementos
5739
+ */
5740
+ trackByFn(index, element) {
5741
+ return element.id || index;
5742
+ }
5743
+ /**
5744
+ * Obtiene las clases CSS para el espaciado del elemento
5745
+ */
5746
+ getElementSpacingClass(element) {
5747
+ const spacing = element.spacing || this.props.defaultSpacing;
5748
+ const classes = [];
5749
+ if (spacing?.top) {
5750
+ classes.push(`val-article__spacing-top--${spacing.top}`);
5751
+ }
5752
+ if (spacing?.bottom) {
5753
+ classes.push(`val-article__spacing-bottom--${spacing.bottom}`);
5754
+ }
5755
+ if (spacing?.horizontal) {
5756
+ classes.push(`val-article__spacing-horizontal--${spacing.horizontal}`);
5757
+ }
5758
+ return classes.join(' ');
5759
+ }
5760
+ // === FUNCIONES DE TIPO PARA TYPESCRIPT ===
5761
+ getTitleElement(element) {
5762
+ return element;
5763
+ }
5764
+ getSubtitleElement(element) {
5765
+ return element;
5766
+ }
5767
+ getTextElement(element) {
5768
+ return element;
5769
+ }
5770
+ getQuoteElement(element) {
5771
+ return element;
5772
+ }
5773
+ getHighlightElement(element) {
5774
+ return element;
5775
+ }
5776
+ getCodeElement(element) {
5777
+ return element;
5778
+ }
5779
+ getListElement(element) {
5780
+ return element;
5781
+ }
5782
+ getButtonElement(element) {
5783
+ return element;
5784
+ }
5785
+ getSeparatorElement(element) {
5786
+ return element;
5787
+ }
5788
+ getImageElement(element) {
5789
+ return element;
5790
+ }
5791
+ getVideoElement(element) {
5792
+ return element;
5793
+ }
5794
+ getCustomElement(element) {
5795
+ return element;
5796
+ }
5797
+ // === FUNCIONES AUXILIARES PARA PROPS ===
5798
+ getQuoteTextProps(element) {
5799
+ const quoteElement = this.getQuoteElement(element);
5800
+ const { author, source, ...textProps } = quoteElement.props;
5801
+ return textProps;
5802
+ }
5803
+ getHighlightTextProps(element) {
5804
+ const highlightElement = this.getHighlightElement(element);
5805
+ const { backgroundColor, rounded, ...textProps } = highlightElement.props;
5806
+ return textProps;
5807
+ }
5808
+ getHighlightColor(element) {
5809
+ const highlightElement = this.getHighlightElement(element);
5810
+ return highlightElement.props.backgroundColor || 'var(--ion-color-light)';
5811
+ }
5812
+ getButtonProps(element) {
5813
+ const buttonElement = this.getButtonElement(element);
5814
+ const { alignment, ...buttonProps } = buttonElement.props;
5815
+ return buttonProps;
5816
+ }
5817
+ getImageMetadata(element) {
5818
+ const imageElement = this.getImageElement(element);
5819
+ const props = imageElement.props;
5820
+ return {
5821
+ src: props.src,
5822
+ alt: props.alt,
5823
+ mode: props.rounded ? 'rounded' : 'box',
5824
+ size: 'medium',
5825
+ shaded: false,
5826
+ bordered: false,
5827
+ alignment: props.alignment || 'center',
5828
+ caption: props.caption,
5829
+ captionSize: 'medium',
5830
+ width: props.maxWidth ? parseInt(props.maxWidth.replace('px', '')) : undefined,
5831
+ };
5832
+ }
5833
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ArticleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5834
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ArticleComponent, isStandalone: true, selector: "val-article", inputs: { props: "props" }, ngImport: i0, template: `
5835
+ <article
5836
+ class="val-article"
5837
+ [class]="props.cssClass"
5838
+ [ngClass]="{
5839
+ 'val-article--centered': props.centered,
5840
+ 'val-article--light': props.theme === 'light',
5841
+ 'val-article--dark': props.theme === 'dark',
5842
+ }"
5843
+ [style.max-width]="props.maxWidth"
5844
+ >
5845
+ <div
5846
+ *ngFor="let element of props.elements; trackBy: trackByFn"
5847
+ class="val-article__element"
5848
+ [class]="element.cssClass"
5849
+ [ngClass]="getElementSpacingClass(element)"
5850
+ [style.display]="element.visible === false ? 'none' : 'block'"
5851
+ >
5852
+ <!-- Título -->
5853
+ <ng-container *ngIf="element.type === 'title'">
5854
+ <val-title [props]="getTitleElement(element).props"></val-title>
5855
+ </ng-container>
5856
+
5857
+ <!-- Subtítulo -->
5858
+ <ng-container *ngIf="element.type === 'subtitle'">
5859
+ <val-title [props]="getSubtitleElement(element).props"></val-title>
5860
+ </ng-container>
5861
+
5862
+ <!-- Texto/Párrafo -->
5863
+ <ng-container *ngIf="element.type === 'text' || element.type === 'paragraph'">
5864
+ <val-text [props]="getTextElement(element).props"></val-text>
5865
+ </ng-container>
5866
+
5867
+ <!-- Cita -->
5868
+ <ng-container *ngIf="element.type === 'quote'">
5869
+ <div class="val-article__quote">
5870
+ <div class="val-article__quote-content">
5871
+ <val-text [props]="getQuoteTextProps(element)"></val-text>
5872
+ </div>
5873
+ <div *ngIf="getQuoteElement(element).props.author" class="val-article__quote-author">
5874
+ — {{ getQuoteElement(element).props.author }}
5875
+ <span *ngIf="getQuoteElement(element).props.source" class="val-article__quote-source">
5876
+ , {{ getQuoteElement(element).props.source }}
5877
+ </span>
5878
+ </div>
5879
+ </div>
5880
+ </ng-container>
5881
+
5882
+ <!-- Texto destacado -->
5883
+ <ng-container *ngIf="element.type === 'highlight'">
5884
+ <div
5885
+ class="val-article__highlight"
5886
+ [ngClass]="{
5887
+ 'val-article__highlight--rounded': getHighlightElement(element).props.rounded,
5888
+ }"
5889
+ [style.background-color]="getHighlightColor(element)"
5890
+ >
5891
+ <val-text [props]="getHighlightTextProps(element)"></val-text>
5892
+ </div>
5893
+ </ng-container>
5894
+
5895
+ <!-- Código -->
5896
+ <ng-container *ngIf="element.type === 'code'">
5897
+ <div class="val-article__code">
5898
+ <div *ngIf="getCodeElement(element).props.language" class="val-article__code-language">
5899
+ {{ getCodeElement(element).props.language }}
5900
+ </div>
5901
+ <pre
5902
+ class="val-article__code-content"
5903
+ [ngClass]="{
5904
+ 'val-article__code-content--dark': getCodeElement(element).props.theme === 'dark',
5905
+ }"
5906
+ ><code>{{ getCodeElement(element).props.code }}</code></pre>
5907
+ </div>
5908
+ </ng-container>
5909
+
5910
+ <!-- Lista -->
5911
+ <ng-container *ngIf="element.type === 'list'">
5912
+ <ul *ngIf="getListElement(element).props.listType !== 'ordered'" class="val-article__list">
5913
+ <li *ngFor="let item of getListElement(element).props.items" class="val-article__list-item">
5914
+ <span *ngIf="getListElement(element).props.listType === 'checklist'" class="val-article__list-check"
5915
+ >✓</span
5916
+ >
5917
+ {{ item.text }}
5918
+ </li>
5919
+ </ul>
5920
+ <ol
5921
+ *ngIf="getListElement(element).props.listType === 'ordered'"
5922
+ class="val-article__list val-article__list--ordered"
5923
+ >
5924
+ <li *ngFor="let item of getListElement(element).props.items" class="val-article__list-item">
5925
+ {{ item.text }}
5926
+ </li>
5927
+ </ol>
5928
+ </ng-container>
5929
+
5930
+ <!-- Botón -->
5931
+ <ng-container *ngIf="element.type === 'button'">
5932
+ <div
5933
+ class="val-article__button-container"
5934
+ [ngClass]="{
5935
+ 'val-article__button-container--left': getButtonElement(element).props.alignment === 'left',
5936
+ 'val-article__button-container--center': getButtonElement(element).props.alignment === 'center',
5937
+ 'val-article__button-container--right': getButtonElement(element).props.alignment === 'right',
5938
+ }"
5939
+ >
5940
+ <val-button [props]="getButtonProps(element)"></val-button>
5941
+ </div>
5942
+ </ng-container>
5943
+
5944
+ <!-- Separador -->
5945
+ <ng-container *ngIf="element.type === 'separator'">
5946
+ <div class="val-article__separator">
5947
+ <hr
5948
+ *ngIf="getSeparatorElement(element).props.style === 'line'"
5949
+ class="val-article__separator-line"
5950
+ [ngClass]="{
5951
+ 'val-article__separator-line--thin': getSeparatorElement(element).props.thickness === 'thin',
5952
+ 'val-article__separator-line--thick': getSeparatorElement(element).props.thickness === 'thick',
5953
+ }"
5954
+ />
5955
+ <div *ngIf="getSeparatorElement(element).props.style === 'dots'" class="val-article__separator-dots">
5956
+ • • •
5957
+ </div>
5958
+ <div
5959
+ *ngIf="getSeparatorElement(element).props.style === 'space'"
5960
+ class="val-article__separator-space"
5961
+ ></div>
5962
+ </div>
5963
+ </ng-container>
5964
+
5965
+ <!-- Imagen -->
5966
+ <ng-container *ngIf="element.type === 'image'">
5967
+ <val-image [props]="getImageMetadata(element)"></val-image>
5968
+ </ng-container>
5969
+
5970
+ <!-- Video -->
5971
+ <ng-container *ngIf="element.type === 'video'">
5972
+ <div class="val-article__video">
5973
+ <video
5974
+ [src]="getVideoElement(element).props.src"
5975
+ [poster]="getVideoElement(element).props.poster"
5976
+ [controls]="getVideoElement(element).props.controls !== false"
5977
+ [autoplay]="getVideoElement(element).props.autoplay"
5978
+ [muted]="getVideoElement(element).props.muted"
5979
+ [style.max-width]="getVideoElement(element).props.maxWidth"
5980
+ class="val-article__video-content"
5981
+ >
5982
+ Tu navegador no soporta el elemento video.
5983
+ </video>
5984
+ <div *ngIf="getVideoElement(element).props.title" class="val-article__video-title">
5985
+ {{ getVideoElement(element).props.title }}
5986
+ </div>
5987
+ </div>
5988
+ </ng-container>
5989
+
5990
+ <!-- Contenido personalizado -->
5991
+ <ng-container *ngIf="element.type === 'custom'">
5992
+ <div class="val-article__custom" [innerHTML]="getCustomElement(element).props.htmlContent"></div>
5993
+ </ng-container>
5994
+ </div>
5995
+ </article>
5996
+ `, isInline: true, styles: [".val-article{width:100%;margin:0 auto;line-height:1.6;color:var(--ion-color-dark, #1f2937);display:block;position:static}.val-article--centered{margin:0 auto}.val-article--light{background-color:var(--ion-color-light, #ffffff);color:var(--ion-color-dark, #1f2937)}.val-article--dark{background-color:var(--ion-color-dark, #1f2937);color:var(--ion-color-light, #ffffff)}.val-article__element{position:relative}.val-article__element:last-child{margin-bottom:0!important}.val-article__spacing-top--none{margin-top:0!important}.val-article__spacing-top--small{margin-top:.5rem!important}.val-article__spacing-top--medium{margin-top:1rem!important}.val-article__spacing-top--large{margin-top:1.5rem!important}.val-article__spacing-top--xlarge{margin-top:2.5rem!important}.val-article__spacing-bottom--none{margin-bottom:0!important}.val-article__spacing-bottom--small{margin-bottom:.5rem!important}.val-article__spacing-bottom--medium{margin-bottom:1rem!important}.val-article__spacing-bottom--large{margin-bottom:1.5rem!important}.val-article__spacing-bottom--xlarge{margin-bottom:2.5rem!important}.val-article__spacing-horizontal--none{margin-left:0!important;margin-right:0!important}.val-article__spacing-horizontal--small{margin-left:.5rem!important;margin-right:.5rem!important}.val-article__spacing-horizontal--medium{margin-left:1rem!important;margin-right:1rem!important}.val-article__spacing-horizontal--large{margin-left:1.5rem!important;margin-right:1.5rem!important}.val-article__spacing-horizontal--xlarge{margin-left:2.5rem!important;margin-right:2.5rem!important}.val-article__quote{border-left:4px solid #0969da;padding:1rem;margin:1rem 0;background-color:var(--ion-color-light-shade, #f8f9fa);border-radius:0 8px 8px 0;font-style:italic}.val-article__quote-content{margin-bottom:.5rem;font-size:1.1em}.val-article__quote-author{font-size:.9em;color:var(--ion-color-medium, #6c757d);font-style:normal;font-weight:500;text-align:right}.val-article__quote-source{font-weight:400;opacity:.8}.val-article__highlight{padding:1rem;margin:.5rem 0;background-color:var(--ion-color-warning-tint, #fff3cd);border:1px solid var(--ion-color-warning, #ffc107);border-radius:4px}.val-article__highlight--rounded{border-radius:12px}.val-article__code{margin:1rem 0;border-radius:8px;overflow:hidden;border:1px solid #e1e5e9}.val-article__code-language{background-color:var(--ion-color-medium-tint, #f8f9fa);padding:.5rem 1rem;font-size:.875em;font-weight:500;color:var(--ion-color-dark, #495057);border-bottom:1px solid #e1e5e9;text-transform:uppercase;letter-spacing:.5px}.val-article__code-content{background-color:#f6f8fa;color:#24292e;padding:1rem;margin:0;overflow-x:auto;font-family:SFMono-Regular,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.875em;line-height:1.5}.val-article__code-content code{background:none;padding:0;font-size:inherit;color:inherit}.val-article__code-content--dark{background-color:#161b22;color:#f0f6fc}.val-article__list{margin:1rem 0;padding-left:1.5rem}.val-article__list--ordered{list-style-type:decimal}.val-article__list-item{margin-bottom:.5rem;line-height:1.6;position:relative}.val-article__list-item:last-child{margin-bottom:0}.val-article__list-check{color:var(--ion-color-success, #28a745);font-weight:700;margin-right:.5rem;position:absolute;left:-1.5rem}.val-article .val-article__list:has(.val-article__list-check){list-style:none;padding-left:1rem}.val-article__button-container{margin:1rem 0}.val-article__button-container--left{text-align:left}.val-article__button-container--center{text-align:center}.val-article__button-container--right{text-align:right}.val-article__separator{margin:1.5rem 0;text-align:center}.val-article__separator-line{border:none;height:1px;background-color:#d0d7de;margin:0}.val-article__separator-line--thin{height:1px}.val-article__separator-line--thick{height:3px}.val-article__separator-dots{color:#d0d7de;font-size:1.5em;letter-spacing:.5em;-webkit-user-select:none;user-select:none}.val-article__separator-space{height:1.5rem}.val-article__image{margin:1.5rem 0;text-align:center}.val-article__image--left{text-align:left}.val-article__image--center{text-align:center}.val-article__image--right{text-align:right}.val-article__image-content{max-width:100%;height:auto;border-radius:4px;box-shadow:0 2px 8px #0000001a;transition:transform .2s ease}.val-article__image-content:hover{transform:scale(1.02)}.val-article__image-content--rounded{border-radius:12px}.val-article__image-caption{margin-top:.5rem;font-size:.875em;color:var(--ion-color-medium, #6c757d);font-style:italic;text-align:center}.val-article__video{margin:1.5rem 0;text-align:center}.val-article__video-content{max-width:100%;height:auto;border-radius:8px;box-shadow:0 4px 12px #00000026}.val-article__video-title{margin-top:.5rem;font-size:.9em;color:var(--ion-color-medium, #6c757d);font-weight:500}.val-article__custom{margin:1rem 0}.val-article__custom *{max-width:100%}@media (max-width: 768px){.val-article__code-content{font-size:.8em;padding:.5rem}.val-article__image-content:hover{transform:none}.val-article__quote{padding:.5rem;margin:.5rem 0}.val-article__highlight{padding:.5rem}}@media (prefers-color-scheme: dark){.val-article--auto{background-color:var(--ion-color-dark, #1f2937);color:var(--ion-color-light, #ffffff)}.val-article--auto .val-article__quote{background-color:#ffffff0d}.val-article--auto .val-article__highlight{background-color:#ffc1071a;border-color:var(--ion-color-warning-shade, #e0a800)}.val-article--auto .val-article__code-content{background-color:#161b22;color:#f0f6fc}}.val-article__element{animation:fadeInUp .3s ease-out}@keyframes fadeInUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@media (prefers-contrast: high){.val-article__separator-line{background-color:currentColor;opacity:.5}.val-article__quote{border-left-width:6px}}@media (prefers-reduced-motion: reduce){.val-article .val-article__element{animation:none}.val-article__image-content{transition:none}.val-article__image-content:hover{transform:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: ImageComponent, selector: "val-image", inputs: ["props"] }] }); }
5997
+ }
5998
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ArticleComponent, decorators: [{
5999
+ type: Component,
6000
+ args: [{ selector: 'val-article', standalone: true, imports: [CommonModule, TitleComponent, TextComponent, ButtonComponent, ImageComponent], template: `
6001
+ <article
6002
+ class="val-article"
6003
+ [class]="props.cssClass"
6004
+ [ngClass]="{
6005
+ 'val-article--centered': props.centered,
6006
+ 'val-article--light': props.theme === 'light',
6007
+ 'val-article--dark': props.theme === 'dark',
6008
+ }"
6009
+ [style.max-width]="props.maxWidth"
6010
+ >
6011
+ <div
6012
+ *ngFor="let element of props.elements; trackBy: trackByFn"
6013
+ class="val-article__element"
6014
+ [class]="element.cssClass"
6015
+ [ngClass]="getElementSpacingClass(element)"
6016
+ [style.display]="element.visible === false ? 'none' : 'block'"
6017
+ >
6018
+ <!-- Título -->
6019
+ <ng-container *ngIf="element.type === 'title'">
6020
+ <val-title [props]="getTitleElement(element).props"></val-title>
6021
+ </ng-container>
6022
+
6023
+ <!-- Subtítulo -->
6024
+ <ng-container *ngIf="element.type === 'subtitle'">
6025
+ <val-title [props]="getSubtitleElement(element).props"></val-title>
6026
+ </ng-container>
6027
+
6028
+ <!-- Texto/Párrafo -->
6029
+ <ng-container *ngIf="element.type === 'text' || element.type === 'paragraph'">
6030
+ <val-text [props]="getTextElement(element).props"></val-text>
6031
+ </ng-container>
6032
+
6033
+ <!-- Cita -->
6034
+ <ng-container *ngIf="element.type === 'quote'">
6035
+ <div class="val-article__quote">
6036
+ <div class="val-article__quote-content">
6037
+ <val-text [props]="getQuoteTextProps(element)"></val-text>
6038
+ </div>
6039
+ <div *ngIf="getQuoteElement(element).props.author" class="val-article__quote-author">
6040
+ — {{ getQuoteElement(element).props.author }}
6041
+ <span *ngIf="getQuoteElement(element).props.source" class="val-article__quote-source">
6042
+ , {{ getQuoteElement(element).props.source }}
6043
+ </span>
6044
+ </div>
6045
+ </div>
6046
+ </ng-container>
6047
+
6048
+ <!-- Texto destacado -->
6049
+ <ng-container *ngIf="element.type === 'highlight'">
6050
+ <div
6051
+ class="val-article__highlight"
6052
+ [ngClass]="{
6053
+ 'val-article__highlight--rounded': getHighlightElement(element).props.rounded,
6054
+ }"
6055
+ [style.background-color]="getHighlightColor(element)"
6056
+ >
6057
+ <val-text [props]="getHighlightTextProps(element)"></val-text>
6058
+ </div>
6059
+ </ng-container>
6060
+
6061
+ <!-- Código -->
6062
+ <ng-container *ngIf="element.type === 'code'">
6063
+ <div class="val-article__code">
6064
+ <div *ngIf="getCodeElement(element).props.language" class="val-article__code-language">
6065
+ {{ getCodeElement(element).props.language }}
6066
+ </div>
6067
+ <pre
6068
+ class="val-article__code-content"
6069
+ [ngClass]="{
6070
+ 'val-article__code-content--dark': getCodeElement(element).props.theme === 'dark',
6071
+ }"
6072
+ ><code>{{ getCodeElement(element).props.code }}</code></pre>
6073
+ </div>
6074
+ </ng-container>
6075
+
6076
+ <!-- Lista -->
6077
+ <ng-container *ngIf="element.type === 'list'">
6078
+ <ul *ngIf="getListElement(element).props.listType !== 'ordered'" class="val-article__list">
6079
+ <li *ngFor="let item of getListElement(element).props.items" class="val-article__list-item">
6080
+ <span *ngIf="getListElement(element).props.listType === 'checklist'" class="val-article__list-check"
6081
+ >✓</span
6082
+ >
6083
+ {{ item.text }}
6084
+ </li>
6085
+ </ul>
6086
+ <ol
6087
+ *ngIf="getListElement(element).props.listType === 'ordered'"
6088
+ class="val-article__list val-article__list--ordered"
6089
+ >
6090
+ <li *ngFor="let item of getListElement(element).props.items" class="val-article__list-item">
6091
+ {{ item.text }}
6092
+ </li>
6093
+ </ol>
6094
+ </ng-container>
6095
+
6096
+ <!-- Botón -->
6097
+ <ng-container *ngIf="element.type === 'button'">
6098
+ <div
6099
+ class="val-article__button-container"
6100
+ [ngClass]="{
6101
+ 'val-article__button-container--left': getButtonElement(element).props.alignment === 'left',
6102
+ 'val-article__button-container--center': getButtonElement(element).props.alignment === 'center',
6103
+ 'val-article__button-container--right': getButtonElement(element).props.alignment === 'right',
6104
+ }"
6105
+ >
6106
+ <val-button [props]="getButtonProps(element)"></val-button>
6107
+ </div>
6108
+ </ng-container>
6109
+
6110
+ <!-- Separador -->
6111
+ <ng-container *ngIf="element.type === 'separator'">
6112
+ <div class="val-article__separator">
6113
+ <hr
6114
+ *ngIf="getSeparatorElement(element).props.style === 'line'"
6115
+ class="val-article__separator-line"
6116
+ [ngClass]="{
6117
+ 'val-article__separator-line--thin': getSeparatorElement(element).props.thickness === 'thin',
6118
+ 'val-article__separator-line--thick': getSeparatorElement(element).props.thickness === 'thick',
6119
+ }"
6120
+ />
6121
+ <div *ngIf="getSeparatorElement(element).props.style === 'dots'" class="val-article__separator-dots">
6122
+ • • •
6123
+ </div>
6124
+ <div
6125
+ *ngIf="getSeparatorElement(element).props.style === 'space'"
6126
+ class="val-article__separator-space"
6127
+ ></div>
6128
+ </div>
6129
+ </ng-container>
6130
+
6131
+ <!-- Imagen -->
6132
+ <ng-container *ngIf="element.type === 'image'">
6133
+ <val-image [props]="getImageMetadata(element)"></val-image>
6134
+ </ng-container>
6135
+
6136
+ <!-- Video -->
6137
+ <ng-container *ngIf="element.type === 'video'">
6138
+ <div class="val-article__video">
6139
+ <video
6140
+ [src]="getVideoElement(element).props.src"
6141
+ [poster]="getVideoElement(element).props.poster"
6142
+ [controls]="getVideoElement(element).props.controls !== false"
6143
+ [autoplay]="getVideoElement(element).props.autoplay"
6144
+ [muted]="getVideoElement(element).props.muted"
6145
+ [style.max-width]="getVideoElement(element).props.maxWidth"
6146
+ class="val-article__video-content"
6147
+ >
6148
+ Tu navegador no soporta el elemento video.
6149
+ </video>
6150
+ <div *ngIf="getVideoElement(element).props.title" class="val-article__video-title">
6151
+ {{ getVideoElement(element).props.title }}
6152
+ </div>
6153
+ </div>
6154
+ </ng-container>
6155
+
6156
+ <!-- Contenido personalizado -->
6157
+ <ng-container *ngIf="element.type === 'custom'">
6158
+ <div class="val-article__custom" [innerHTML]="getCustomElement(element).props.htmlContent"></div>
6159
+ </ng-container>
6160
+ </div>
6161
+ </article>
6162
+ `, styles: [".val-article{width:100%;margin:0 auto;line-height:1.6;color:var(--ion-color-dark, #1f2937);display:block;position:static}.val-article--centered{margin:0 auto}.val-article--light{background-color:var(--ion-color-light, #ffffff);color:var(--ion-color-dark, #1f2937)}.val-article--dark{background-color:var(--ion-color-dark, #1f2937);color:var(--ion-color-light, #ffffff)}.val-article__element{position:relative}.val-article__element:last-child{margin-bottom:0!important}.val-article__spacing-top--none{margin-top:0!important}.val-article__spacing-top--small{margin-top:.5rem!important}.val-article__spacing-top--medium{margin-top:1rem!important}.val-article__spacing-top--large{margin-top:1.5rem!important}.val-article__spacing-top--xlarge{margin-top:2.5rem!important}.val-article__spacing-bottom--none{margin-bottom:0!important}.val-article__spacing-bottom--small{margin-bottom:.5rem!important}.val-article__spacing-bottom--medium{margin-bottom:1rem!important}.val-article__spacing-bottom--large{margin-bottom:1.5rem!important}.val-article__spacing-bottom--xlarge{margin-bottom:2.5rem!important}.val-article__spacing-horizontal--none{margin-left:0!important;margin-right:0!important}.val-article__spacing-horizontal--small{margin-left:.5rem!important;margin-right:.5rem!important}.val-article__spacing-horizontal--medium{margin-left:1rem!important;margin-right:1rem!important}.val-article__spacing-horizontal--large{margin-left:1.5rem!important;margin-right:1.5rem!important}.val-article__spacing-horizontal--xlarge{margin-left:2.5rem!important;margin-right:2.5rem!important}.val-article__quote{border-left:4px solid #0969da;padding:1rem;margin:1rem 0;background-color:var(--ion-color-light-shade, #f8f9fa);border-radius:0 8px 8px 0;font-style:italic}.val-article__quote-content{margin-bottom:.5rem;font-size:1.1em}.val-article__quote-author{font-size:.9em;color:var(--ion-color-medium, #6c757d);font-style:normal;font-weight:500;text-align:right}.val-article__quote-source{font-weight:400;opacity:.8}.val-article__highlight{padding:1rem;margin:.5rem 0;background-color:var(--ion-color-warning-tint, #fff3cd);border:1px solid var(--ion-color-warning, #ffc107);border-radius:4px}.val-article__highlight--rounded{border-radius:12px}.val-article__code{margin:1rem 0;border-radius:8px;overflow:hidden;border:1px solid #e1e5e9}.val-article__code-language{background-color:var(--ion-color-medium-tint, #f8f9fa);padding:.5rem 1rem;font-size:.875em;font-weight:500;color:var(--ion-color-dark, #495057);border-bottom:1px solid #e1e5e9;text-transform:uppercase;letter-spacing:.5px}.val-article__code-content{background-color:#f6f8fa;color:#24292e;padding:1rem;margin:0;overflow-x:auto;font-family:SFMono-Regular,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.875em;line-height:1.5}.val-article__code-content code{background:none;padding:0;font-size:inherit;color:inherit}.val-article__code-content--dark{background-color:#161b22;color:#f0f6fc}.val-article__list{margin:1rem 0;padding-left:1.5rem}.val-article__list--ordered{list-style-type:decimal}.val-article__list-item{margin-bottom:.5rem;line-height:1.6;position:relative}.val-article__list-item:last-child{margin-bottom:0}.val-article__list-check{color:var(--ion-color-success, #28a745);font-weight:700;margin-right:.5rem;position:absolute;left:-1.5rem}.val-article .val-article__list:has(.val-article__list-check){list-style:none;padding-left:1rem}.val-article__button-container{margin:1rem 0}.val-article__button-container--left{text-align:left}.val-article__button-container--center{text-align:center}.val-article__button-container--right{text-align:right}.val-article__separator{margin:1.5rem 0;text-align:center}.val-article__separator-line{border:none;height:1px;background-color:#d0d7de;margin:0}.val-article__separator-line--thin{height:1px}.val-article__separator-line--thick{height:3px}.val-article__separator-dots{color:#d0d7de;font-size:1.5em;letter-spacing:.5em;-webkit-user-select:none;user-select:none}.val-article__separator-space{height:1.5rem}.val-article__image{margin:1.5rem 0;text-align:center}.val-article__image--left{text-align:left}.val-article__image--center{text-align:center}.val-article__image--right{text-align:right}.val-article__image-content{max-width:100%;height:auto;border-radius:4px;box-shadow:0 2px 8px #0000001a;transition:transform .2s ease}.val-article__image-content:hover{transform:scale(1.02)}.val-article__image-content--rounded{border-radius:12px}.val-article__image-caption{margin-top:.5rem;font-size:.875em;color:var(--ion-color-medium, #6c757d);font-style:italic;text-align:center}.val-article__video{margin:1.5rem 0;text-align:center}.val-article__video-content{max-width:100%;height:auto;border-radius:8px;box-shadow:0 4px 12px #00000026}.val-article__video-title{margin-top:.5rem;font-size:.9em;color:var(--ion-color-medium, #6c757d);font-weight:500}.val-article__custom{margin:1rem 0}.val-article__custom *{max-width:100%}@media (max-width: 768px){.val-article__code-content{font-size:.8em;padding:.5rem}.val-article__image-content:hover{transform:none}.val-article__quote{padding:.5rem;margin:.5rem 0}.val-article__highlight{padding:.5rem}}@media (prefers-color-scheme: dark){.val-article--auto{background-color:var(--ion-color-dark, #1f2937);color:var(--ion-color-light, #ffffff)}.val-article--auto .val-article__quote{background-color:#ffffff0d}.val-article--auto .val-article__highlight{background-color:#ffc1071a;border-color:var(--ion-color-warning-shade, #e0a800)}.val-article--auto .val-article__code-content{background-color:#161b22;color:#f0f6fc}}.val-article__element{animation:fadeInUp .3s ease-out}@keyframes fadeInUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@media (prefers-contrast: high){.val-article__separator-line{background-color:currentColor;opacity:.5}.val-article__quote{border-left-width:6px}}@media (prefers-reduced-motion: reduce){.val-article .val-article__element{animation:none}.val-article__image-content{transition:none}.val-article__image-content:hover{transform:none}}\n"] }]
6163
+ }], ctorParameters: () => [], propDecorators: { props: [{
6164
+ type: Input
6165
+ }] } });
6166
+
6167
+ /**
6168
+ * Configuración de espaciado predefinida
6169
+ */
6170
+ const ARTICLE_SPACING = {
6171
+ NONE: { top: 'none', bottom: 'none' },
6172
+ SMALL: { top: 'small', bottom: 'small' },
6173
+ MEDIUM: { top: 'medium', bottom: 'medium' },
6174
+ LARGE: { top: 'large', bottom: 'large' },
6175
+ XLARGE: { top: 'xlarge', bottom: 'xlarge' },
6176
+ // Espaciados específicos para elementos
6177
+ TITLE: { top: 'large', bottom: 'medium' },
6178
+ SUBTITLE: { top: 'medium', bottom: 'small' },
6179
+ PARAGRAPH: { top: 'small', bottom: 'medium' },
6180
+ QUOTE: { top: 'medium', bottom: 'medium' },
6181
+ CODE: { top: 'medium', bottom: 'medium' },
6182
+ LIST: { top: 'small', bottom: 'medium' },
6183
+ BUTTON: { top: 'medium', bottom: 'medium' },
6184
+ IMAGE: { top: 'large', bottom: 'large' },
6185
+ SEPARATOR: { top: 'large', bottom: 'large' },
6186
+ };
6187
+ /**
6188
+ * Función helper para crear elementos de artículo de forma fácil
6189
+ */
6190
+ class ArticleBuilder {
6191
+ constructor() {
6192
+ this.elements = [];
6193
+ }
6194
+ /**
6195
+ * Añade un título al artículo
6196
+ */
6197
+ title(props, options) {
6198
+ this.elements.push({
6199
+ type: 'title',
6200
+ props,
6201
+ spacing: ARTICLE_SPACING.TITLE,
6202
+ ...options,
6203
+ });
6204
+ return this;
6205
+ }
6206
+ /**
6207
+ * Añade un subtítulo al artículo
6208
+ */
6209
+ subtitle(props, options) {
6210
+ this.elements.push({
6211
+ type: 'subtitle',
6212
+ props,
6213
+ spacing: ARTICLE_SPACING.SUBTITLE,
6214
+ ...options,
6215
+ });
6216
+ return this;
6217
+ }
6218
+ /**
6219
+ * Añade un párrafo al artículo
6220
+ */
6221
+ paragraph(props, options) {
6222
+ this.elements.push({
6223
+ type: 'paragraph',
6224
+ props,
6225
+ spacing: ARTICLE_SPACING.PARAGRAPH,
6226
+ ...options,
6227
+ });
6228
+ return this;
6229
+ }
6230
+ /**
6231
+ * Añade una cita al artículo
6232
+ */
6233
+ quote(props, options) {
6234
+ this.elements.push({
6235
+ type: 'quote',
6236
+ props,
6237
+ spacing: ARTICLE_SPACING.QUOTE,
6238
+ ...options,
6239
+ });
6240
+ return this;
6241
+ }
6242
+ /**
6243
+ * Añade código al artículo
6244
+ */
6245
+ code(code, language, options) {
6246
+ this.elements.push({
6247
+ type: 'code',
6248
+ props: { code, language },
6249
+ spacing: ARTICLE_SPACING.CODE,
6250
+ ...options,
6251
+ });
6252
+ return this;
6253
+ }
6254
+ /**
6255
+ * Añade una lista al artículo
6256
+ */
6257
+ list(items, listType, options) {
6258
+ this.elements.push({
6259
+ type: 'list',
6260
+ props: { items, listType },
6261
+ spacing: ARTICLE_SPACING.LIST,
6262
+ ...options,
6263
+ });
6264
+ return this;
6265
+ }
6266
+ /**
6267
+ * Añade un botón al artículo
6268
+ */
6269
+ button(props, alignment, options) {
6270
+ this.elements.push({
6271
+ type: 'button',
6272
+ props: { ...props, alignment },
6273
+ spacing: ARTICLE_SPACING.BUTTON,
6274
+ ...options,
6275
+ });
6276
+ return this;
6277
+ }
6278
+ /**
6279
+ * Añade un separador al artículo
6280
+ */
6281
+ separator(style, options) {
6282
+ this.elements.push({
6283
+ type: 'separator',
6284
+ props: { style },
6285
+ spacing: ARTICLE_SPACING.SEPARATOR,
6286
+ ...options,
6287
+ });
6288
+ return this;
6289
+ }
6290
+ /**
6291
+ * Añade una imagen al artículo
6292
+ */
6293
+ image(src, alt, caption, options) {
6294
+ this.elements.push({
6295
+ type: 'image',
6296
+ props: { src, alt, caption },
6297
+ spacing: ARTICLE_SPACING.IMAGE,
6298
+ ...options,
6299
+ });
6300
+ return this;
6301
+ }
6302
+ /**
6303
+ * Construye el artículo final
6304
+ */
6305
+ build(config) {
6306
+ return {
6307
+ elements: this.elements,
6308
+ defaultSpacing: ARTICLE_SPACING.MEDIUM,
6309
+ maxWidth: '800px',
6310
+ centered: true,
6311
+ theme: 'auto',
6312
+ ...config,
6313
+ };
6314
+ }
6315
+ /**
6316
+ * Resetea el builder para crear un nuevo artículo
6317
+ */
6318
+ clear() {
6319
+ this.elements = [];
6320
+ return this;
6321
+ }
6322
+ }
6323
+
5636
6324
  /**
5637
6325
  * val-banner
5638
6326
  *
@@ -7454,5 +8142,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
7454
8142
  * Generated bundle index. Do not edit.
7455
8143
  */
7456
8144
 
7457
- export { ActionType, AlertBoxComponent, AvatarComponent, BannerComponent, BaseDefault, BoxComponent, ButtonComponent, ButtonGroupComponent, CardComponent, CardSection, CardType, CheckInputComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CommentInputComponent, ComponentContentHelper, ComponentStates, ContentLoaderComponent, 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, createReactiveProps, createTextProps, createTitleProps, fromContent, fromContentWithInterpolation, fromMultipleContent, globalContentData, goToTop, interpolateContent, isAtEnd, maxLength, replaceSpecialChars, resolveColor, resolveInputDefaultValue, shouldUseReactiveContent };
8145
+ 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, 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, createReactiveProps, createTextProps, createTitleProps, fromContent, fromContentWithInterpolation, fromMultipleContent, globalContentData, goToTop, interpolateContent, isAtEnd, maxLength, replaceSpecialChars, resolveColor, resolveInputDefaultValue, shouldUseReactiveContent };
7458
8146
  //# sourceMappingURL=valtech-components.mjs.map