@lluc_llull/ui-lib 0.34.3 → 0.36.0
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/fesm2022/lluc_llull-ui-lib-content-asymmetric-media.mjs +10 -3
- package/fesm2022/lluc_llull-ui-lib-content-asymmetric-media.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-category-progress.mjs +18 -5
- package/fesm2022/lluc_llull-ui-lib-content-category-progress.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-columns-media-stacked.mjs +10 -3
- package/fesm2022/lluc_llull-ui-lib-content-columns-media-stacked.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-contact-minimal.mjs +18 -5
- package/fesm2022/lluc_llull-ui-lib-content-contact-minimal.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-hero-section.mjs +6 -13
- package/fesm2022/lluc_llull-ui-lib-content-hero-section.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-media-intro.mjs +10 -3
- package/fesm2022/lluc_llull-ui-lib-content-media-intro.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-media-split.mjs +34 -21
- package/fesm2022/lluc_llull-ui-lib-content-media-split.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-mosaic-grid.mjs +10 -3
- package/fesm2022/lluc_llull-ui-lib-content-mosaic-grid.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-section-intro.mjs +8 -1
- package/fesm2022/lluc_llull-ui-lib-content-section-intro.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-split-previewer.mjs +20 -7
- package/fesm2022/lluc_llull-ui-lib-content-split-previewer.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-split-showcase.mjs +12 -5
- package/fesm2022/lluc_llull-ui-lib-content-split-showcase.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-stacked-rows.mjs +18 -5
- package/fesm2022/lluc_llull-ui-lib-content-stacked-rows.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content.mjs +172 -74
- package/fesm2022/lluc_llull-ui-lib-content.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-directives.mjs +230 -11
- package/fesm2022/lluc_llull-ui-lib-directives.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-feedback-404.mjs +10 -4
- package/fesm2022/lluc_llull-ui-lib-feedback-404.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-feedback.mjs +10 -4
- package/fesm2022/lluc_llull-ui-lib-feedback.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-footers-columns-footer.mjs +39 -15
- package/fesm2022/lluc_llull-ui-lib-footers-columns-footer.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-footers-legal-footer.mjs +2 -2
- package/fesm2022/lluc_llull-ui-lib-footers-legal-footer.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-footers-social-footer.mjs +2 -2
- package/fesm2022/lluc_llull-ui-lib-footers-social-footer.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-footers-visual-footer.mjs +2 -2
- package/fesm2022/lluc_llull-ui-lib-footers-visual-footer.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-footers.mjs +44 -21
- package/fesm2022/lluc_llull-ui-lib-footers.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-forms-contact-form.mjs +254 -0
- package/fesm2022/lluc_llull-ui-lib-forms-contact-form.mjs.map +1 -0
- package/fesm2022/lluc_llull-ui-lib-forms.mjs +443 -0
- package/fesm2022/lluc_llull-ui-lib-forms.mjs.map +1 -0
- package/fesm2022/lluc_llull-ui-lib-headers-header-clear.mjs +4 -4
- package/fesm2022/lluc_llull-ui-lib-headers-header-clear.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-headers-header-mobile.mjs +2 -2
- package/fesm2022/lluc_llull-ui-lib-headers-header-mobile.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-headers.mjs +6 -6
- package/fesm2022/lluc_llull-ui-lib-headers.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-mapper.mjs +6 -1
- package/fesm2022/lluc_llull-ui-lib-mapper.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-modals.mjs +4 -4
- package/fesm2022/lluc_llull-ui-lib-modals.mjs.map +1 -1
- package/package.json +10 -1
- package/src/lib/styles/main.css +71 -1
- package/styles/main.css +71 -1
- package/types/lluc_llull-ui-lib-content-category-progress.d.ts +10 -0
- package/types/lluc_llull-ui-lib-content-contact-minimal.d.ts +10 -0
- package/types/lluc_llull-ui-lib-content-split-previewer.d.ts +10 -0
- package/types/lluc_llull-ui-lib-content.d.ts +30 -0
- package/types/lluc_llull-ui-lib-directives.d.ts +51 -2
- package/types/lluc_llull-ui-lib-feedback-404.d.ts +10 -0
- package/types/lluc_llull-ui-lib-feedback.d.ts +10 -0
- package/types/lluc_llull-ui-lib-footers-columns-footer.d.ts +1 -0
- package/types/lluc_llull-ui-lib-footers.d.ts +1 -0
- package/types/lluc_llull-ui-lib-forms-contact-form.d.ts +86 -0
- package/types/lluc_llull-ui-lib-forms.d.ts +220 -0
- package/types/lluc_llull-ui-lib-mapper.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lluc_llull-ui-lib-content.mjs","names":[],"sources":["../../../projects/ui-lib/content/category-progress/category-progress.component.ts","../../../projects/ui-lib/content/category-progress/category-progress.component.html","../../../projects/ui-lib/content/hero-section/hero-section.component.ts","../../../projects/ui-lib/content/hero-section/hero-section.component.html","../../../projects/ui-lib/content/section-intro/section-intro.component.ts","../../../projects/ui-lib/content/section-intro/section-intro.component.html","../../../projects/ui-lib/content/split-previewer/split-previewer.component.ts","../../../projects/ui-lib/content/split-previewer/split-previewer.component.html","../../../projects/ui-lib/content/contact-minimal/contact-minimal.component.ts","../../../projects/ui-lib/content/contact-minimal/contact-minimal.component.html","../../../projects/ui-lib/content/media-split/media-split.component.ts","../../../projects/ui-lib/content/media-split/media-split.component.html","../../../projects/ui-lib/content/stacked-rows/stacked-rows.component.ts","../../../projects/ui-lib/content/stacked-rows/stacked-rows.component.html","../../../projects/ui-lib/content/mosaic-parallax/mosaic-parallax.component.ts","../../../projects/ui-lib/content/mosaic-parallax/mosaic-parallax.component.html","../../../projects/ui-lib/content/content-document/content-document.component.ts","../../../projects/ui-lib/content/content-document/content-document.component.html","../../../projects/ui-lib/content/split-showcase/split-showcase.component.ts","../../../projects/ui-lib/content/split-showcase/split-showcase.component.html","../../../projects/ui-lib/content/asymmetric-media/asymmetric-media.component.ts","../../../projects/ui-lib/content/asymmetric-media/asymmetric-media.component.html","../../../projects/ui-lib/content/media-intro/media-intro.component.ts","../../../projects/ui-lib/content/media-intro/media-intro.component.html","../../../projects/ui-lib/content/columns-media-stacked/columns-media-stacked.component.ts","../../../projects/ui-lib/content/columns-media-stacked/columns-media-stacked.component.html","../../../projects/ui-lib/content/mosaic-grid/mosaic-grid.component.ts","../../../projects/ui-lib/content/mosaic-grid/mosaic-grid.component.html"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { HighlightDirective, ScrollRevealDirective } from '@lluc_llull/ui-lib/directives';\n\n@Component({\n selector: 'lib-category-progress',\n standalone: true,\n imports: [CommonModule, HighlightDirective, ScrollRevealDirective],\n templateUrl: './category-progress.component.html',\n styleUrl: './category-progress.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class CategoryProgressComponent {\n @Input() pretitle?: string;\n @Input() title?: string;\n @Input() categories?: ProgressCategoryI[];\n}\n\nexport interface ProgressItemI {\n label: string;\n value: number;\n}\n\nexport interface ProgressCategoryI {\n title: string;\n items: ProgressItemI[];\n}\n","<div class=\"category-progress col-span-full md:col-span-12 md:col-start-1\" scrollReveal>\n @if (pretitle) {\n <h3 class=\"pretitle\">{{ pretitle }}</h3>\n }\n @if (title) {\n <h2 class=\"title\">{{ title }}</h2>\n }\n <div class=\"progress-grid\">\n @for (category of categories; track $index) {\n <div class=\"category\">\n <h3 class=\"subtitle\" [highlight]=\"'#FFFFFF'\">{{ category.title }}</h3>\n\n @for (item of category.items; track $index) {\n <div class=\"item\">\n <div class=\"item-info\">\n <span class=\"label\">{{ item.label }}</span>\n <span class=\"value\">{{ item.value }}%</span>\n </div>\n\n <div class=\"bar\">\n <div class=\"fill\" [style.width.%]=\"item.value\"></div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n</div>\n","import { CommonModule, DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { LinkTypeDirective, ScrollRevealDirective } from '@lluc_llull/ui-lib/directives';\nimport { UiLibButtonI, UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiIconComponent, UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-hero-section',\n standalone: true,\n imports: [CommonModule, LinkTypeDirective, UiIconComponent, UiImageComponent, ScrollRevealDirective],\n templateUrl: './hero-section.component.html',\n styleUrl: './hero-section.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class HeroSectionComponent implements OnInit, OnDestroy {\n @Input() variant: 'text' | 'image' = 'text';\n @Input() pretitle?: string;\n @Input() title?: string;\n @Input() subtitle?: string;\n @Input() text?: string;\n @Input() buttons?: UiLibButtonI[];\n @Input() highlight?: string;\n @Input() image?: UiLibImageI;\n\n constructor(@Inject(DOCUMENT) private document: Document) {}\n\n ngOnInit(): void {\n if (this.variant === 'image') {\n this.document.body.classList.add('has-hero-image');\n }\n }\n\n ngOnDestroy(): void {\n this.document.body.classList.remove('has-hero-image');\n }\n}\n","<div\n class=\"hero-section col-span-full\"\n [class.hero-section--text]=\"variant === 'text'\"\n [class.hero-section--image]=\"variant === 'image'\"\n scrollReveal\n>\n @if (variant === 'image' && image) {\n <div class=\"hero-section__bg\">\n @if (image.publicId) {\n <ui-image \n [publicId]=\"image.publicId\" \n [eager]=\"true\"\n class=\"hero-img\"\n ></ui-image>\n } @else {\n <img\n [src]=\"image.url\"\n [alt]=\"image.alt\"\n class=\"hero-img\"\n loading=\"eager\"\n fetchpriority=\"high\"\n decoding=\"async\"\n />\n }\n </div>\n }\n\n <div class=\"hero-section__content col-span-full\">\n @if (pretitle) {\n <h2 class=\"pretitle\">{{ pretitle }}</h2>\n }\n @if (title) {\n <h1 class=\"title\">\n @if (highlight && title.includes(highlight)) {\n {{ title.replace(highlight, '') }}\n <span class=\"highlight-text\">\n {{ highlight }}\n <div class=\"wave-wrapper\">\n <div class=\"wave\"></div>\n </div>\n </span>\n } @else {\n {{ title }}\n }\n </h1>\n }\n @if (subtitle) {\n <h2 class=\"subtitle\">{{ subtitle }}</h2>\n }\n @if (text) {\n <p class=\"text\">{{ text }}</p>\n }\n @if (buttons && buttons.length > 0) {\n <div class=\"btn-group--center\">\n @for (button of buttons; track $index) {\n <a class=\"btn btn-link\" [href]=\"button.url\" [linkType]=\"button.linkType\">\n <ui-icon [name]=\"button.icon!\" [size]=\"17\" [color]=\"'var(--color-primary)'\"></ui-icon>\n {{ button.label }}\n </a>\n }\n </div>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { LinkTypeDirective, ScrollRevealDirective } from '@lluc_llull/ui-lib/directives';\nimport { UiLibButtonI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiIconComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-section-intro',\n standalone: true,\n imports: [CommonModule, LinkTypeDirective, UiIconComponent, ScrollRevealDirective],\n templateUrl: './section-intro.component.html',\n styleUrl: './section-intro.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class SectionIntroComponent {\n @Input() pretitle?: string;\n @Input() title?: string;\n @Input() subtitle?: string;\n @Input() text?: string;\n @Input() button?: UiLibButtonI;\n}\n","<div class=\"section-intro col-span-full md:col-span-12 md:col-start-1\" scrollReveal>\n @if (pretitle) {\n <h2 class=\"pretitle\">{{ pretitle }}</h2>\n }\n @if (title) {\n <h1 class=\"title\">{{ title }}</h1>\n }\n @if (subtitle) {\n <h2 class=\"subtitle\">{{ subtitle }}</h2>\n }\n @if (text) {\n <p class=\"text\">{{ text }}</p>\n }\n @if (button) {\n <div class=\"btn-group\">\n <a [href]=\"button.url\" [linkType]=\"button.linkType\" class=\"btn btn-link\">\n <ui-icon [name]=\"button.icon!\" [size]=\"17\" [color]=\"'var(--color-primary)'\"></ui-icon>\n {{ button.label }}\n </a>\n </div>\n }\n</div>\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, Input, OnInit, PLATFORM_ID, signal } from '@angular/core';\nimport {\n HighlightDirective,\n LinkTypeDirective,\n ScrollRevealDirective,\n} from '@lluc_llull/ui-lib/directives';\nimport { UiLibButtonI, UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-split-previewer',\n imports: [CommonModule, LinkTypeDirective, HighlightDirective, ScrollRevealDirective, UiImageComponent],\n templateUrl: './split-previewer.component.html',\n styleUrl: './split-previewer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class SplitPreviewerComponent implements OnInit {\n @Input() title?: string;\n @Input() items?: SplitPreviewerItemI[];\n @Input() imageDefault?: UiLibImageI;\n @Input() direction: 'left' | 'right' = 'right';\n\n activeImage = signal<UiLibImageI | undefined>(undefined);\n\n get count(): number {\n return this.items?.length || 0;\n }\n\n constructor(@Inject(PLATFORM_ID) private readonly platformId: Object) {}\n\n ngOnInit() {\n if (!this.items) return;\n if (!isPlatformBrowser(this.platformId)) return;\n if ('requestIdleCallback' in window) {\n (window as any).requestIdleCallback(() => {\n this.items?.forEach((item) => {\n if (item.image?.url) {\n const img = new Image();\n img.src = item.image.url;\n }\n });\n });\n }\n }\n}\n\nexport interface SplitPreviewerItemI {\n title?: string;\n type?: string;\n description?: string;\n tags?: string[];\n link?: UiLibButtonI;\n image?: UiLibImageI;\n}\n","<div\n class=\"split-previewer col-span-full md:col-span-12 md:col-start-1\"\n [class]=\"'split-previewer--' + direction\"\n scrollReveal\n>\n <div class=\"split-previewer__text-column\">\n <div class=\"split-previewer__header\">\n @if (title) {\n <h1 class=\"title\">{{ title }}</h1>\n }\n @if (count) {\n <span class=\"count\">{{ count }}</span>\n }\n </div>\n\n <div class=\"split-previewer__items\" (mouseleave)=\"activeImage.set(undefined)\">\n @for (item of items; track item.title) {\n <a\n [href]=\"item.link?.url\"\n [linkType]=\"item.link?.linkType\"\n (mouseenter)=\"activeImage.set(item.image)\"\n class=\"split-previewer__item-link\"\n >\n <div class=\"split-previewer__item\">\n <h2 class=\"split-previewer__item-title\" [highlight]=\"'#FFFFFF'\">{{ item.title }}</h2>\n <p class=\"split-previewer__item-text\">{{ item.description }}</p>\n @if (item.tags?.length) {\n <div class=\"split-previewer__item-tags\">\n @for (tag of item.tags; track tag) {\n <span class=\"split-previewer__item-tag\">{{ tag }}</span>\n }\n </div>\n }\n </div>\n </a>\n }\n </div>\n </div>\n\n <div class=\"split-previewer__media\">\n <div class=\"split-previewer__media-inner\">\n @if ((activeImage() || imageDefault)?.publicId) {\n <ui-image \n [publicId]=\"(activeImage() || imageDefault)!.publicId!\" \n [eager]=\"true\"\n class=\"preview-img\"\n ></ui-image>\n } @else {\n <img\n [src]=\"(activeImage() || imageDefault)?.url\"\n [alt]=\"(activeImage() || imageDefault)?.alt\"\n class=\"preview-img\"\n loading=\"eager\"\n fetchpriority=\"high\"\n decoding=\"async\"\n />\n }\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport {\n HighlightDirective,\n LinkTypeDirective,\n ScrollRevealDirective,\n} from '@lluc_llull/ui-lib/directives';\nimport { UiLibButtonI, UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-contact-minimal',\n imports: [CommonModule, HighlightDirective, LinkTypeDirective, ScrollRevealDirective, UiImageComponent],\n templateUrl: './contact-minimal.component.html',\n styleUrl: './contact-minimal.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class ContactMinimalComponent {\n @Input() contactsTitle?: string;\n @Input() socialsTitle?: string;\n @Input() contacts?: UiLibButtonI[];\n @Input() socials?: UiLibButtonI[];\n @Input() img?: UiLibImageI;\n}\n","<div class=\"contact-minimal main-grid col-span-full md:col-span-12 md:col-start-1\" scrollReveal>\n <div class=\"contact-minimal__content col-span-full md:col-span-12 md:col-start-1\">\n <div class=\"contact-minimal__content--left col-span-6 col-start-1\">\n @if (contactsTitle) {\n <h2 class=\"subtitle\" [highlight]=\"'#FFFFFF'\">{{ contactsTitle }}</h2>\n }\n @if (contacts && contacts.length > 0) {\n <div class=\"btn-group\">\n @for (contact of contacts; track $index) {\n <a [href]=\"contact?.url\" [linkType]=\"contact?.linkType\" class=\"btn btn-link\">\n {{ contact?.label }}\n </a>\n }\n </div>\n }\n </div>\n <div class=\"contact-minimal__content--right col-span-6 col-start-7\">\n @if (socialsTitle) {\n <h2 class=\"subtitle\" [highlight]=\"'#FFFFFF'\">{{ socialsTitle }}</h2>\n }\n @if (socials && socials.length > 0) {\n <div class=\"btn-group\">\n @for (social of socials; track $index) {\n <a [href]=\"social?.url\" [linkType]=\"social?.linkType\" class=\"btn btn-link\">\n {{ social?.label }}\n </a>\n }\n </div>\n }\n </div>\n </div>\n @if (img) {\n <div class=\"contact-minimal__content--media col-span-full md:col-span-12 md:col-start-1\">\n @if (img.publicId) {\n <ui-image [publicId]=\"img.publicId\"></ui-image>\n } @else {\n <img\n [src]=\"img.url\"\n [alt]=\"img.alt\"\n loading=\"eager\"\n fetchpriority=\"high\"\n [attr.width]=\"img.width || 800\"\n [attr.height]=\"img.height || 600\"\n />\n }\n </div>\n }\n</div>\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n Inject,\n Input,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\nimport { UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-media-split',\n standalone: true,\n imports: [CommonModule, UiImageComponent],\n templateUrl: './media-split.component.html',\n styleUrl: './media-split.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class MediaSplitComponent {\n @Input() title?: string;\n @Input() text?: string;\n @Input() images?: UiLibImageI[];\n\n activeImageIndex = signal(0);\n imageLoaded = signal(false);\n\n constructor(@Inject(PLATFORM_ID) private readonly platformId: Object) {\n effect(() => {\n this.activeImageIndex();\n\n if (!isPlatformBrowser(this.platformId)) return;\n\n this.imageLoaded.set(false);\n\n requestAnimationFrame(() => {\n this.imageLoaded.set(true);\n });\n });\n }\n\n currentImage = computed(() => {\n const imgs = this.images ?? [];\n return imgs[this.activeImageIndex()] ?? null;\n });\n\n updateActiveImage(index: number) {\n this.activeImageIndex.set(index);\n }\n\n resetImage() {\n this.activeImageIndex.set(0);\n }\n\n ngOnInit() {\n if (!isPlatformBrowser(this.platformId)) return;\n\n if ('requestIdleCallback' in window) {\n (window as any).requestIdleCallback(() => {\n this.preloadImages();\n });\n } else {\n setTimeout(() => this.preloadImages(), 2000);\n }\n }\n\n private preloadImages() {\n this.images?.slice(1).forEach((img) => {\n const i = new Image();\n i.src = img.url;\n });\n }\n}\n","<div class=\"media-split main-grid col-span-full md:col-span-12 md:col-start-1\" scrollReveal>\n <div class=\"media-split__visual col-span-full md:col-span-7 md:col-start-1\">\n @if (title) {\n <h1 class=\"title\">{{ title }}</h1>\n }\n\n @if (images?.length) {\n <div class=\"image-stack\" (mouseleave)=\"resetImage()\">\n @if (currentImage().publicId) {\n <ui-image\n [publicId]=\"currentImage().publicId!\"\n [eager]=\"true\"\n class=\"img-responsive active-image\"\n [class.loaded]=\"imageLoaded()\"\n ></ui-image>\n } @else {\n <img\n [src]=\"currentImage().url\"\n [alt]=\"currentImage().alt\"\n class=\"img-responsive active-image\"\n [class.loaded]=\"imageLoaded()\"\n loading=\"eager\"\n fetchpriority=\"high\"\n />\n }\n\n <div class=\"hover-grid\">\n @for (image of images; track $index) {\n <div class=\"hover-zone\" (mouseenter)=\"updateActiveImage($index)\"></div>\n }\n </div>\n </div>\n }\n </div>\n\n <div class=\"media-split__info col-span-full md:col-span-5 md:col-start-8\">\n @if (text) {\n <p class=\"text\" [innerHTML]=\"text\"></p>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-stacked-rows',\n imports: [CommonModule],\n templateUrl: './stacked-rows.component.html',\n styleUrl: './stacked-rows.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class StackedRowsComponent {\n @Input() title?: string;\n @Input() text?: string;\n @Input() items?: StackedRowItemI[];\n}\n\nexport interface StackedRowItemI {\n title: string;\n text: string;\n}\n","<div class=\"stacked-rows main-grid col-span-full md:col-span-12 md:col-start-1\" scrollReveal>\n <!-- INTRO -->\n <div class=\"stacked-rows__intro main-grid col-span-full\">\n @if (title) {\n <h1 class=\"subtitle col-span-full md:col-span-3 md:col-start-1\">\n {{ title }}\n </h1>\n }\n\n @if (text) {\n <p class=\"text col-span-full md:col-span-9 md:col-start-4\">\n {{ text }}\n </p>\n }\n </div>\n\n <!-- ITEMS -->\n @if (items) {\n <div class=\"stacked-rows__items col-span-full\">\n @for (item of items; track $index) {\n <div class=\"stacked-rows__items--item main-grid\">\n <h2 class=\"stacked-rows__items--item_title col-span-full md:col-span-3 md:col-start-1\">\n {{ item.title }}\n </h2>\n\n <p class=\"stacked-rows__items--item_text col-span-full md:col-span-7 md:col-start-6\">\n {{ item.text }}\n </p>\n </div>\n }\n </div>\n }\n</div>\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n PLATFORM_ID,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'app-mosaic-parallax',\n standalone: true,\n imports: [UiImageComponent],\n templateUrl: './mosaic-parallax.component.html',\n styleUrls: ['./mosaic-parallax.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class MosaicParallaxComponent implements AfterViewInit, OnDestroy {\n @Input() title?: string;\n @Input() text?: string;\n @Input() images?: UiLibImageI[];\n\n @ViewChild('mosaicSection') mosaicSection!: ElementRef<HTMLElement>;\n\n isVisible = signal(false);\n private observer?: IntersectionObserver;\n private isBrowser: boolean;\n\n constructor(@Inject(PLATFORM_ID) platformId: object) {\n this.isBrowser = isPlatformBrowser(platformId);\n }\n\n ngAfterViewInit() {\n if (!this.isBrowser) return;\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting && !this.isVisible()) {\n this.isVisible.set(true);\n this.observer?.disconnect();\n }\n },\n { threshold: 0.1 },\n );\n\n this.observer.observe(this.mosaicSection.nativeElement);\n }\n\n ngOnDestroy() {\n this.observer?.disconnect();\n }\n}\n","<div class=\"mosaic-parallax main-grid col-span-full\" #mosaicSection>\n\n @if (title) {\n <h2 class=\"subtitle md:col-span-3 md:col-start-1\">{{ title }}</h2>\n }\n\n @if (text) {\n <p class=\"text col-span-full md:col-span-5 md:col-start-1\">\n {{ text }}\n </p>\n }\n\n @if (images && images.length > 0) {\n <div class=\"mosaic-parallax__track col-span-full md:col-span-10 md:col-start-2\">\n @for (item of images; track $index) {\n <article\n class=\"mosaic-item\"\n [class.mosaic-item--visible]=\"isVisible()\"\n [style.--item-index]=\"images.length - 1 - $index\"\n [style.--anim-delay]=\"(images.length - 1 - $index) * 250 + 'ms'\"\n >\n <div class=\"mosaic-item__media\">\n @if (item.publicId) {\n <ui-image [publicId]=\"item.publicId\"></ui-image>\n } @else {\n <img [src]=\"item.url\" [alt]=\"item.alt\" loading=\"lazy\" />\n }\n </div>\n @if (item.texts; as texts) {\n <div class=\"mosaic-item__content\">\n <p class=\"mosaic-item__description\">{{ texts.text }}</p>\n <div class=\"mosaic-item__meta\">\n <span class=\"mosaic-item__date\">{{ texts.title }}</span>\n <span class=\"mosaic-item__index\">\n {{ ($index + 1).toString().padStart(2, '0') }}\n </span>\n </div>\n </div>\n }\n </article>\n }\n </div>\n }\n\n</div>","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-content-document',\n imports: [CommonModule],\n templateUrl: './content-document.component.html',\n styleUrl: './content-document.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class ContentDocumentComponent {\n @Input() title?: string;\n @Input() items?: ContentDocumentItemI[];\n}\n\nexport interface ContentDocumentItemI {\n title: string;\n text: string;\n}\n","<div class=\"content-document main-grid col-span-full sm:col-span-12 sm:col-start-1\" scrollReveal>\n @if (title) {\n <div class=\"content-document__title main-grid col-span-full\">\n <h1 class=\"title col-span-full\">{{ title }}</h1>\n </div>\n }\n @if (items) {\n <div class=\"content-document__items col-span-full\">\n @for (item of items; track $index) {\n <div class=\"content-document__items--item main-grid\">\n <h2 class=\"content-document__items--item_title col-span-full sm:col-span-12 sm:col-start-1\">\n {{ item.title }}\n </h2>\n <p class=\"content-document__items--item_text col-span-full sm:col-span-4 sm:col-start-5\" [innerHTML]=\"item.text\"></p>\n </div>\n }\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { LinkTypeDirective, ScrollRevealDirective } from '@lluc_llull/ui-lib/directives';\nimport { UiLibButtonI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiIconComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-split-showcase',\n imports: [CommonModule, ScrollRevealDirective, LinkTypeDirective, UiIconComponent],\n templateUrl: './split-showcase.component.html',\n styleUrl: './split-showcase.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class SplitShowcaseComponent {\n @Input() title?: string;\n @Input() subtitle?: string;\n @Input() description?: string;\n @Input() metas?: SplitShowcaseMetaItemI[];\n @Input() buttons?: UiLibButtonI[];\n}\n\nexport interface SplitShowcaseMetaItemI {\n label: string;\n value: string;\n}","<div\n class=\"split-showcase main-grid col-span-full md:col-span-12 md:col-start-1\"\n scrollReveal\n>\n <div class=\"split-showcase__metas col-span-full md:col-span-5 md:col-start-1\">\n <h2 class=\"split-showcase__metas--title\">{{ title }}</h2>\n @if (buttons && buttons.length > 0) {\n <div class=\"btn-group\">\n @for (button of buttons; track $index) {\n <a class=\"btn btn-link\" [href]=\"button.url\" [linkType]=\"button.linkType\">\n <ui-icon [name]=\"button.icon!\" [size]=\"17\" [color]=\"'var(--color-primary)'\"></ui-icon>\n {{ button.label }}\n </a>\n }\n </div>\n }\n <div class=\"split-showcase__metas--items\">\n @for (meta of metas; track meta.label) {\n <div class=\"split-showcase__metas--item\">\n <span class=\"split-showcase__metas--item-label\">{{ meta.label }}: </span>\n <span class=\"split-showcase__metas--item-value\">{{ meta.value }}</span> \n </div>\n }\n </div>\n </div>\n\n <div class=\"split-showcase__content col-span-full md:col-span-5 md:col-start-8\">\n <h3 class=\"split-showcase__content--subtitle\">{{ subtitle }}</h3>\n <p class=\"split-showcase__content--description\">{{ description }}</p>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ScrollRevealDirective } from '@lluc_llull/ui-lib/directives';\nimport { UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-asymmetric-media',\n imports: [CommonModule, UiImageComponent, ScrollRevealDirective],\n templateUrl: './asymmetric-media.component.html',\n styleUrl: './asymmetric-media.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class AsymmetricMediaComponent {\n @Input() media?: UiLibImageI[];\n @Input() direction: 'left' | 'right' = 'right';\n}\n","<div \n class=\"asymmetric-media main-grid col-span-full md:col-span-12 md:col-start-1\" \n scrollReveal\n>\n @if(media && media.length > 0) {\n <div class=\"asymmetric-media__items main-grid col-span-full md:col-span-12 md:col-start-1\">\n @if(direction === 'left') {\n <div class=\"asymmetric-media__items--small col-span-full md:col-span-4 md:col-start-1\">\n @if (media[0]!.publicId) {\n <ui-image [publicId]=\"media[0]!.publicId!\" [eager]=\"true\" class=\"asymmetric-media-img\"></ui-image>\n } @else {\n <img [src]=\"media[0]!.url\" [alt]=\"media[0]!.alt\" class=\"asymmetric-media-img\" loading=\"eager\" />\n }\n </div>\n <div class=\"asymmetric-media__items--big col-span-full md:col-span-8 md:col-start-5\">\n @if (media[1]!.publicId) {\n <ui-image [publicId]=\"media[1]!.publicId!\" [eager]=\"true\" class=\"asymmetric-media-img\"></ui-image>\n } @else {\n <img [src]=\"media[1]!.url\" [alt]=\"media[1]!.alt\" class=\"asymmetric-media-img\" loading=\"eager\" />\n }\n </div>\n }\n @if(direction === 'right') {\n <div class=\"asymmetric-media__items--small col-span-full md:col-span-8 md:col-start-1\">\n @if (media[0]!.publicId) {\n <ui-image [publicId]=\"media[0]!.publicId!\" [eager]=\"true\" class=\"asymmetric-media-img\"></ui-image>\n } @else {\n <img [src]=\"media[0]!.url\" [alt]=\"media[0]!.alt\" class=\"asymmetric-media-img\" loading=\"eager\" />\n }\n </div>\n <div class=\"asymmetric-media__items--big col-span-full md:col-span-4 md:col-start-9\">\n @if (media[1]!.publicId) {\n <ui-image [publicId]=\"media[1]!.publicId!\" [eager]=\"true\" class=\"asymmetric-media-img\"></ui-image>\n } @else {\n <img [src]=\"media[1]!.url\" [alt]=\"media[1]!.alt\" class=\"asymmetric-media-img\" loading=\"eager\" />\n }\n </div>\n }\n </div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { ScrollRevealDirective } from '@lluc_llull/ui-lib/directives';\nimport { UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({ \n selector: 'lib-media-intro',\n imports: [CommonModule, ScrollRevealDirective, UiImageComponent],\n templateUrl: './media-intro.component.html',\n styleUrl: './media-intro.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class MediaIntroComponent {\n @Input() highlightedText?: string;\n @Input() secondaryText?: string;\n @Input() direction: 'left' | 'right' = 'right';\n @Input() media?: UiLibImageI;\n}\n","<div class=\"media-intro main-grid col-span-full md:col-span-12 md:col-start-1\" scrollReveal>\n <div class=\"media-intro__content main-grid col-span-full md:col-span-12 md:col-start-1\">\n @if(highlightedText) {\n <div class=\"media-intro__content--left main-grid col-span-full\">\n <h2 class=\"media-intro__content--main-text col-span-full md:col-span-6\" \n [class.md:col-start-1]=\"direction === 'left'\"\n [class.md:col-start-7]=\"direction === 'right'\"\n [innerHTML]=\"highlightedText\">\n </h2>\n </div>\n }\n @if(secondaryText) {\n <div class=\"media-intro__content--right main-grid col-span-full\">\n <p class=\"media-intro__content--secondary-text col-span-full md:col-span-6\"\n [class.md:col-start-7]=\"direction === 'left'\"\n [class.md:col-start-1]=\"direction === 'right'\"\n [innerHTML]=\"secondaryText\"\n ></p>\n </div>\n }\n </div>\n @if(media) {\n <div class=\"media-intro__media col-span-full md:col-span-12 md:col-start-1\">\n @if (media.publicId) {\n <ui-image [publicId]=\"media.publicId\" [eager]=\"true\" class=\"media-intro-img\"></ui-image>\n } @else {\n <img [src]=\"media.url\" [alt]=\"media.alt\" class=\"media-intro-img\" loading=\"eager\" />\n }\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ScrollRevealDirective } from '@lluc_llull/ui-lib/directives';\nimport { UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-columns-media-stacked',\n imports: [CommonModule, ScrollRevealDirective, UiImageComponent],\n templateUrl: './columns-media-stacked.component.html',\n styleUrl: './columns-media-stacked.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class ColumnsMediaStackedComponent {\n @Input() leftColumn?: string;\n @Input() rightColumn?: string;\n @Input() direction: 'left' | 'right' = 'right';\n @Input() image?: UiLibImageI;\n}\n","<div class=\"columns-media-stacked main-grid col-span-full\" scrollReveal>\n <div class=\"columns-media-stacked__content main-grid col-span-full\">\n @if(leftColumn) {\n <p \n class=\"columns-media-stacked__content-column col-span-full md:col-span-4\"\n [class.md:col-start-1]=\"direction === 'left'\"\n [class.md:col-start-5]=\"direction === 'right'\"\n [innerHTML]=\"leftColumn\"\n > \n </p>\n }\n @if(rightColumn) {\n <p \n class=\"columns-media-stacked__content-column col-span-full md:col-span-4\"\n [class.md:col-start-5]=\"direction === 'left'\"\n [class.md:col-start-9]=\"direction === 'right'\"\n [innerHTML]=\"rightColumn\"\n > \n </p>\n }\n </div>\n @if(image) {\n <div \n class=\"columns-media-stacked__image col-span-full md:col-span-10\"\n [class.md:col-start-1]=\"direction === 'left'\"\n [class.md:col-start-3]=\"direction === 'right'\"\n >\n @if (image.publicId) {\n <ui-image [publicId]=\"image.publicId\" [eager]=\"true\" class=\"media-intro-img\"></ui-image>\n } @else {\n <img [src]=\"image.url\" [alt]=\"image.alt\" class=\"media-intro-img\" loading=\"eager\" />\n }\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\nimport { ScrollRevealDirective } from '@lluc_llull/ui-lib/directives';\nimport { UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-mosaic-grid',\n imports: [CommonModule, UiImageComponent, ScrollRevealDirective],\n templateUrl: './mosaic-grid.component.html',\n styleUrl: './mosaic-grid.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class MosaicGridComponent implements OnInit{\n @Input() text?: string;\n @Input() images?: UiLibImageI[];\n\n imageGroups: { row1: UiLibImageI[], row2: UiLibImageI[] }[] = [];\n\n ngOnInit(): void {\n console.log('MosaicGridComponent initialized with images:', this.images);\n if (!this.images?.length) {\n this.imageGroups = [];\n return;\n }\n const groups = [];\n for (let i = 0; i < this.images.length; i += 5) {\n groups.push({\n row1: this.images.slice(i, i + 3),\n row2: this.images.slice(i + 3, i + 5)\n });\n }\n this.imageGroups = groups;\n }\n}","<div class=\"mosaic-grid main-grid\" scrollReveal>\n @if (text) {\n <p\n class=\"mosaic-grid__text col-span-full md:col-span-6 md:col-start-7\"\n [innerHTML]=\"text\"\n ></p>\n }\n\n @for (group of imageGroups; track $index) {\n\n <!-- row 1: 3 imágenes -->\n <div class=\"mosaic-grid__images main-grid col-span-full\">\n @for (img of group.row1; track $index) {\n @if (img.publicId) {\n <ui-image [publicId]=\"img.publicId\" [eager]=\"true\" class=\"mosaic-grid__images col-span-full md:col-span-4 md:col-start-{{ $index * 4 + 1 }}\" [class.image-half-height]=\"$index === 2\"></ui-image>\n } @else {\n <img [src]=\"img.url\" [alt]=\"img.alt\" loading=\"eager\" class=\"mosaic-grid__images col-span-full md:col-span-4 md:col-start-{{ $index * 4 + 1 }}\" [class.image-half-height]=\"$index === 2\" />\n }\n }\n </div>\n\n <!-- row 2: 1 pequeña + 1 grande -->\n @if (group.row2.length) {\n <div class=\"mosaic-grid__images main-grid col-span-full\">\n @if (group.row2[0]!.publicId) {\n <ui-image [publicId]=\"group.row2[0]!.publicId\" [eager]=\"true\" class=\"mosaic-grid__images col-span-full md:col-span-4 md:col-start-1 image-half-height\"></ui-image>\n } @else {\n <img [src]=\"group.row2[0]!.url\" [alt]=\"group.row2[0]!.alt\" loading=\"eager\" class=\"mosaic-grid__images col-span-full md:col-span-4 md:col-start-1 image-half-height\" />\n }\n\n @if (group.row2[1]) {\n @if (group.row2[1]!.publicId) {\n <ui-image [publicId]=\"group.row2[1]!.publicId\" [eager]=\"true\" class=\"mosaic-grid__images col-span-full md:col-span-8 md:col-start-5\"></ui-image>\n } @else {\n <img [src]=\"group.row2[1]!.url\" [alt]=\"group.row2[1]!.alt\" loading=\"eager\" class=\"mosaic-grid__images col-span-full md:col-span-8 md:col-start-5\" />\n }\n }\n </div>\n }\n\n }\n</div>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lluc_llull-ui-lib-content.mjs","names":[],"sources":["../../../projects/ui-lib/content/category-progress/category-progress.component.ts","../../../projects/ui-lib/content/category-progress/category-progress.component.html","../../../projects/ui-lib/content/hero-section/hero-section.component.ts","../../../projects/ui-lib/content/hero-section/hero-section.component.html","../../../projects/ui-lib/content/section-intro/section-intro.component.ts","../../../projects/ui-lib/content/section-intro/section-intro.component.html","../../../projects/ui-lib/content/split-previewer/split-previewer.component.ts","../../../projects/ui-lib/content/split-previewer/split-previewer.component.html","../../../projects/ui-lib/content/contact-minimal/contact-minimal.component.ts","../../../projects/ui-lib/content/contact-minimal/contact-minimal.component.html","../../../projects/ui-lib/content/media-split/media-split.component.ts","../../../projects/ui-lib/content/media-split/media-split.component.html","../../../projects/ui-lib/content/stacked-rows/stacked-rows.component.ts","../../../projects/ui-lib/content/stacked-rows/stacked-rows.component.html","../../../projects/ui-lib/content/mosaic-parallax/mosaic-parallax.component.ts","../../../projects/ui-lib/content/mosaic-parallax/mosaic-parallax.component.html","../../../projects/ui-lib/content/content-document/content-document.component.ts","../../../projects/ui-lib/content/content-document/content-document.component.html","../../../projects/ui-lib/content/split-showcase/split-showcase.component.ts","../../../projects/ui-lib/content/split-showcase/split-showcase.component.html","../../../projects/ui-lib/content/asymmetric-media/asymmetric-media.component.ts","../../../projects/ui-lib/content/asymmetric-media/asymmetric-media.component.html","../../../projects/ui-lib/content/media-intro/media-intro.component.ts","../../../projects/ui-lib/content/media-intro/media-intro.component.html","../../../projects/ui-lib/content/columns-media-stacked/columns-media-stacked.component.ts","../../../projects/ui-lib/content/columns-media-stacked/columns-media-stacked.component.html","../../../projects/ui-lib/content/mosaic-grid/mosaic-grid.component.ts","../../../projects/ui-lib/content/mosaic-grid/mosaic-grid.component.html"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { HighlightDirective, ScrollRevealDirective } from '@lluc_llull/ui-lib/directives';\n\n@Component({\n selector: 'lib-category-progress',\n standalone: true,\n imports: [CommonModule, HighlightDirective, ScrollRevealDirective],\n templateUrl: './category-progress.component.html',\n styleUrl: './category-progress.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class CategoryProgressComponent {\n @Input() pretitle?: string;\n @Input() title?: string;\n @Input() categories?: ProgressCategoryI[];\n @Input() highlightColor = 'var(--content-highlight)';\n @Input() highlightThickness = 30;\n}\n\nexport interface ProgressItemI {\n label: string;\n value: number;\n}\n\nexport interface ProgressCategoryI {\n title: string;\n items: ProgressItemI[];\n}\n","<div class=\"category-progress col-span-full md:col-span-12 md:col-start-1\" scrollReveal>\n @if (pretitle) {\n <h3 class=\"pretitle\">{{ pretitle }}</h3>\n }\n @if (title) {\n <h2 class=\"title\">{{ title }}</h2>\n }\n <div class=\"progress-grid\">\n @for (category of categories; track $index) {\n <div class=\"category\">\n <h3 class=\"subtitle\" [highlight]=\"highlightColor\" [highlightThickness]=\"highlightThickness\">{{ category.title }}</h3>\n\n @for (item of category.items; track $index) {\n <div class=\"item\">\n <div class=\"item-info\">\n <span class=\"label\">{{ item.label }}</span>\n <span class=\"value\">{{ item.value }}%</span>\n </div>\n\n <div class=\"bar\">\n <div class=\"fill\" [style.width.%]=\"item.value\"></div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n</div>\n","import { CommonModule, DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { LinkTypeDirective } from '@lluc_llull/ui-lib/directives';\nimport { UiLibButtonI, UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiIconComponent, UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-hero-section',\n standalone: true,\n imports: [CommonModule, LinkTypeDirective, UiIconComponent, UiImageComponent],\n templateUrl: './hero-section.component.html',\n styleUrl: './hero-section.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class HeroSectionComponent implements OnInit, OnDestroy {\n @Input() variant: 'text' | 'image' = 'text';\n @Input() pretitle?: string;\n @Input() title?: string;\n @Input() subtitle?: string;\n @Input() text?: string;\n @Input() buttons?: UiLibButtonI[];\n @Input() highlight?: string;\n @Input() image?: UiLibImageI;\n\n constructor(@Inject(DOCUMENT) private document: Document) {}\n\n ngOnInit(): void {\n if (this.variant === 'image') {\n this.document.body.classList.add('has-hero-image');\n }\n }\n\n ngOnDestroy(): void {\n this.document.body.classList.remove('has-hero-image');\n }\n}\n","<div\n class=\"hero-section col-span-full\"\n [class.hero-section--text]=\"variant === 'text'\"\n [class.hero-section--image]=\"variant === 'image'\"\n>\n @if (variant === 'image' && image) {\n <div class=\"hero-section__bg\">\n @if (image.publicId) {\n <ui-image \n [publicId]=\"image.publicId\" \n [eager]=\"true\"\n class=\"hero-img\"\n ></ui-image>\n } @else {\n <img\n [src]=\"image.url\"\n [alt]=\"image.alt\"\n class=\"hero-img\"\n loading=\"eager\"\n fetchpriority=\"high\"\n decoding=\"async\"\n />\n }\n </div>\n }\n\n <div class=\"hero-section__content col-span-full\">\n @if (pretitle) {\n <h2 class=\"pretitle\">{{ pretitle }}</h2>\n }\n @if (title) {\n <h1 class=\"title\">\n @if (highlight && title.includes(highlight)) {\n {{ title.replace(highlight, '') }}\n <span class=\"highlight-text\">\n {{ highlight }}\n <div class=\"wave-wrapper\">\n <div class=\"wave\"></div>\n </div>\n </span>\n } @else {\n {{ title }}\n }\n </h1>\n }\n @if (subtitle) {\n <h2 class=\"subtitle\">{{ subtitle }}</h2>\n }\n @if (text) {\n <p class=\"text\">{{ text }}</p>\n }\n @if (buttons && buttons.length > 0) {\n <div class=\"btn-group--center\">\n @for (button of buttons; track $index) {\n <a class=\"btn btn-link\" [href]=\"button.url\" [linkType]=\"button.linkType\">\n <ui-icon [name]=\"button.icon!\" [size]=\"17\" [color]=\"'var(--color-primary)'\"></ui-icon>\n {{ button.label }}\n </a>\n }\n </div>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { LinkTypeDirective, ScrollRevealDirective } from '@lluc_llull/ui-lib/directives';\nimport { UiLibButtonI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiIconComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-section-intro',\n standalone: true,\n imports: [CommonModule, LinkTypeDirective, UiIconComponent, ScrollRevealDirective],\n templateUrl: './section-intro.component.html',\n styleUrl: './section-intro.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class SectionIntroComponent {\n @Input() pretitle?: string;\n @Input() title?: string;\n @Input() subtitle?: string;\n @Input() text?: string;\n @Input() button?: UiLibButtonI;\n}\n","<div class=\"section-intro col-span-full md:col-span-12 md:col-start-1\" scrollReveal>\n @if (pretitle) {\n <h2 class=\"pretitle\">{{ pretitle }}</h2>\n }\n @if (title) {\n <h1 class=\"title\">{{ title }}</h1>\n }\n @if (subtitle) {\n <h2 class=\"subtitle\">{{ subtitle }}</h2>\n }\n @if (text) {\n <p class=\"text\">{{ text }}</p>\n }\n @if (button) {\n <div class=\"btn-group\">\n <a [href]=\"button.url\" [linkType]=\"button.linkType\" class=\"btn btn-link\">\n <ui-icon [name]=\"button.icon!\" [size]=\"17\" [color]=\"'var(--color-primary)'\"></ui-icon>\n {{ button.label }}\n </a>\n </div>\n }\n</div>\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, Input, OnInit, PLATFORM_ID, signal } from '@angular/core';\nimport {\n HighlightDirective,\n LinkTypeDirective,\n ScrollRevealDirective,\n} from '@lluc_llull/ui-lib/directives';\nimport { UiLibButtonI, UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-split-previewer',\n imports: [CommonModule, LinkTypeDirective, HighlightDirective, ScrollRevealDirective, UiImageComponent],\n templateUrl: './split-previewer.component.html',\n styleUrl: './split-previewer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class SplitPreviewerComponent implements OnInit {\n @Input() title?: string;\n @Input() items?: SplitPreviewerItemI[];\n @Input() imageDefault?: UiLibImageI;\n @Input() direction: 'left' | 'right' = 'right';\n @Input() highlightColor = 'var(--content-highlight)';\n @Input() highlightThickness = 30;\n\n activeImage = signal<UiLibImageI | undefined>(undefined);\n\n get count(): number {\n return this.items?.length || 0;\n }\n\n constructor(@Inject(PLATFORM_ID) private readonly platformId: Object) {}\n\n ngOnInit() {\n if (!this.items) return;\n if (!isPlatformBrowser(this.platformId)) return;\n if ('requestIdleCallback' in window) {\n (window as any).requestIdleCallback(() => {\n this.items?.forEach((item) => {\n if (item.image?.url) {\n const img = new Image();\n img.src = item.image.url;\n }\n });\n });\n }\n }\n}\n\nexport interface SplitPreviewerItemI {\n title?: string;\n type?: string;\n description?: string;\n tags?: string[];\n link?: UiLibButtonI;\n image?: UiLibImageI;\n}\n","<div\n class=\"split-previewer col-span-full md:col-span-12 md:col-start-1\"\n [class]=\"'split-previewer--' + direction\"\n>\n <div class=\"split-previewer__text-column\">\n <div class=\"split-previewer__header\" scrollReveal from=\"left\" duration=\"1.2s\">\n @if (title) {\n <h1 class=\"title\">{{ title }}</h1>\n }\n @if (count) {\n <span class=\"count\">{{ count }}</span>\n }\n </div>\n\n <div class=\"split-previewer__items\" (mouseleave)=\"activeImage.set(undefined)\">\n @for (item of items; track item.title) {\n <a\n [href]=\"item.link?.url\"\n [linkType]=\"item.link?.linkType\"\n (mouseenter)=\"activeImage.set(item.image)\"\n class=\"split-previewer__item-link\"\n scrollReveal\n from=\"left\"\n duration=\"1.2s\"\n [delay]=\"($index + 1) * 180\"\n >\n <div class=\"split-previewer__item\">\n <h2 class=\"split-previewer__item-title\" [highlight]=\"highlightColor\" [highlightThickness]=\"highlightThickness\">{{ item.title }}</h2>\n <p class=\"split-previewer__item-text\">{{ item.description }}</p>\n @if (item.tags?.length) {\n <div class=\"split-previewer__item-tags\">\n <div class=\"split-previewer__item-tags-inner\">\n @for (tag of item.tags; track tag) {\n <span class=\"split-previewer__item-tag\">{{ tag }}</span>\n }\n </div>\n </div>\n }\n </div>\n </a>\n }\n </div>\n </div>\n\n <div class=\"split-previewer__media\">\n <div class=\"split-previewer__media-inner\">\n @if ((activeImage() || imageDefault)?.publicId) {\n <ui-image \n [publicId]=\"(activeImage() || imageDefault)!.publicId!\" \n [eager]=\"true\"\n class=\"preview-img\"\n ></ui-image>\n } @else {\n <img\n [src]=\"(activeImage() || imageDefault)?.url\"\n [alt]=\"(activeImage() || imageDefault)?.alt\"\n class=\"preview-img\"\n loading=\"eager\"\n fetchpriority=\"high\"\n decoding=\"async\"\n />\n }\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport {\n HighlightDirective,\n LinkTypeDirective,\n ScrollRevealDirective,\n} from '@lluc_llull/ui-lib/directives';\nimport { UiLibButtonI, UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-contact-minimal',\n imports: [CommonModule, HighlightDirective, LinkTypeDirective, ScrollRevealDirective, UiImageComponent],\n templateUrl: './contact-minimal.component.html',\n styleUrl: './contact-minimal.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class ContactMinimalComponent {\n @Input() contactsTitle?: string;\n @Input() socialsTitle?: string;\n @Input() contacts?: UiLibButtonI[];\n @Input() socials?: UiLibButtonI[];\n @Input() img?: UiLibImageI;\n @Input() highlightColor = 'var(--content-highlight)';\n @Input() highlightThickness = 30;\n}\n","<div class=\"contact-minimal main-grid col-span-full md:col-span-12 md:col-start-1\" scrollReveal>\n <div class=\"contact-minimal__content col-span-full md:col-span-12 md:col-start-1\">\n <div class=\"contact-minimal__content--left col-span-6 col-start-1\">\n @if (contactsTitle) {\n <h2 class=\"subtitle\" [highlight]=\"highlightColor\" [highlightThickness]=\"highlightThickness\">{{ contactsTitle }}</h2>\n }\n @if (contacts && contacts.length > 0) {\n <div class=\"btn-group\">\n @for (contact of contacts; track $index) {\n <a [href]=\"contact?.url\" [linkType]=\"contact?.linkType\" class=\"btn btn-link\">\n {{ contact?.label }}\n </a>\n }\n </div>\n }\n </div>\n <div class=\"contact-minimal__content--right col-span-6 col-start-7\">\n @if (socialsTitle) {\n <h2 class=\"subtitle\" [highlight]=\"highlightColor\" [highlightThickness]=\"highlightThickness\">{{ socialsTitle }}</h2>\n }\n @if (socials && socials.length > 0) {\n <div class=\"btn-group\">\n @for (social of socials; track $index) {\n <a [href]=\"social?.url\" [linkType]=\"social?.linkType\" class=\"btn btn-link\">\n {{ social?.label }}\n </a>\n }\n </div>\n }\n </div>\n </div>\n @if (img) {\n <div class=\"contact-minimal__content--media col-span-full md:col-span-12 md:col-start-1\">\n @if (img.publicId) {\n <ui-image [publicId]=\"img.publicId\"></ui-image>\n } @else {\n <img\n [src]=\"img.url\"\n [alt]=\"img.alt\"\n loading=\"eager\"\n fetchpriority=\"high\"\n [attr.width]=\"img.width || 800\"\n [attr.height]=\"img.height || 600\"\n />\n }\n </div>\n }\n</div>\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n Inject,\n Input,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\nimport { ScrollTextRevealDirective } from '@lluc_llull/ui-lib/directives';\nimport { UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-media-split',\n standalone: true,\n imports: [CommonModule, UiImageComponent, ScrollTextRevealDirective],\n templateUrl: './media-split.component.html',\n styleUrl: './media-split.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class MediaSplitComponent {\n @Input() title?: string;\n @Input() text?: string;\n @Input() images?: UiLibImageI[];\n\n activeImageIndex = signal(0);\n imageLoaded = signal(false);\n\n constructor(@Inject(PLATFORM_ID) private readonly platformId: Object) {\n effect(() => {\n this.activeImageIndex();\n\n if (!isPlatformBrowser(this.platformId)) return;\n\n this.imageLoaded.set(false);\n\n requestAnimationFrame(() => {\n this.imageLoaded.set(true);\n });\n });\n }\n\n currentImage = computed(() => {\n const imgs = this.images ?? [];\n return imgs[this.activeImageIndex()] ?? null;\n });\n\n updateActiveImage(index: number) {\n this.activeImageIndex.set(index);\n }\n\n resetImage() {\n this.activeImageIndex.set(0);\n }\n\n ngOnInit() {\n if (!isPlatformBrowser(this.platformId)) return;\n\n if ('requestIdleCallback' in window) {\n (window as any).requestIdleCallback(() => {\n this.preloadImages();\n });\n } else {\n setTimeout(() => this.preloadImages(), 2000);\n }\n }\n\n private preloadImages() {\n this.images?.slice(1).forEach((img) => {\n const i = new Image();\n i.src = img.url;\n });\n }\n}\n","<div class=\"media-split main-grid col-span-full md:col-span-12 md:col-start-1\" scrollReveal>\n <div class=\"media-split__visual col-span-full md:col-span-7 md:col-start-1\">\n @if (title) {\n <h1 class=\"title\">{{ title }}</h1>\n }\n\n @if (images?.length) {\n <div class=\"image-stack\" (mouseleave)=\"resetImage()\">\n @if (currentImage().publicId) {\n <ui-image\n [publicId]=\"currentImage().publicId!\"\n [eager]=\"true\"\n class=\"img-responsive active-image\"\n [class.loaded]=\"imageLoaded()\"\n ></ui-image>\n } @else {\n <img\n [src]=\"currentImage().url\"\n [alt]=\"currentImage().alt\"\n class=\"img-responsive active-image\"\n [class.loaded]=\"imageLoaded()\"\n loading=\"eager\"\n fetchpriority=\"high\"\n />\n }\n\n <div class=\"hover-grid\">\n @for (image of images; track $index) {\n <div class=\"hover-zone\" (mouseenter)=\"updateActiveImage($index)\"></div>\n }\n </div>\n </div>\n }\n </div>\n\n <div class=\"media-split__info col-span-full md:col-span-5 md:col-start-8\">\n @if (text) {\n <p class=\"text\" scrollTextReveal [innerHTML]=\"text\"></p>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ScrollRevealDirective } from '@lluc_llull/ui-lib/directives';\n\n@Component({\n selector: 'lib-stacked-rows',\n imports: [CommonModule, ScrollRevealDirective],\n templateUrl: './stacked-rows.component.html',\n styleUrl: './stacked-rows.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class StackedRowsComponent {\n @Input() title?: string;\n @Input() text?: string;\n @Input() items?: StackedRowItemI[];\n}\n\nexport interface StackedRowItemI {\n title: string;\n text: string;\n}\n","<div class=\"stacked-rows main-grid col-span-full md:col-span-12 md:col-start-1\">\n <!-- INTRO -->\n <div class=\"stacked-rows__intro main-grid col-span-full\" scrollReveal from=\"bottom\">\n @if (title) {\n <h1 class=\"subtitle col-span-full md:col-span-3 md:col-start-1\">\n {{ title }}\n </h1>\n }\n\n @if (text) {\n <p class=\"text col-span-full md:col-span-9 md:col-start-4\">\n {{ text }}\n </p>\n }\n </div>\n\n <!-- ITEMS -->\n @if (items) {\n <div class=\"stacked-rows__items col-span-full\">\n @for (item of items; track $index) {\n <div class=\"stacked-rows__items--item main-grid\" scrollReveal from=\"bottom\">\n <h2 class=\"stacked-rows__items--item_title col-span-full md:col-span-3 md:col-start-1\">\n {{ item.title }}\n </h2>\n\n <p class=\"stacked-rows__items--item_text col-span-full md:col-span-7 md:col-start-6\">\n {{ item.text }}\n </p>\n </div>\n }\n </div>\n }\n</div>\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n PLATFORM_ID,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'app-mosaic-parallax',\n standalone: true,\n imports: [UiImageComponent],\n templateUrl: './mosaic-parallax.component.html',\n styleUrls: ['./mosaic-parallax.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class MosaicParallaxComponent implements AfterViewInit, OnDestroy {\n @Input() title?: string;\n @Input() text?: string;\n @Input() images?: UiLibImageI[];\n\n @ViewChild('mosaicSection') mosaicSection!: ElementRef<HTMLElement>;\n\n isVisible = signal(false);\n private observer?: IntersectionObserver;\n private isBrowser: boolean;\n\n constructor(@Inject(PLATFORM_ID) platformId: object) {\n this.isBrowser = isPlatformBrowser(platformId);\n }\n\n ngAfterViewInit() {\n if (!this.isBrowser) return;\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting && !this.isVisible()) {\n this.isVisible.set(true);\n this.observer?.disconnect();\n }\n },\n { threshold: 0.1 },\n );\n\n this.observer.observe(this.mosaicSection.nativeElement);\n }\n\n ngOnDestroy() {\n this.observer?.disconnect();\n }\n}\n","<div class=\"mosaic-parallax main-grid col-span-full\" #mosaicSection>\n\n @if (title) {\n <h2 class=\"subtitle md:col-span-3 md:col-start-1\">{{ title }}</h2>\n }\n\n @if (text) {\n <p class=\"text col-span-full md:col-span-5 md:col-start-1\">\n {{ text }}\n </p>\n }\n\n @if (images && images.length > 0) {\n <div class=\"mosaic-parallax__track col-span-full md:col-span-10 md:col-start-2\">\n @for (item of images; track $index) {\n <article\n class=\"mosaic-item\"\n [class.mosaic-item--visible]=\"isVisible()\"\n [style.--item-index]=\"images.length - 1 - $index\"\n [style.--anim-delay]=\"(images.length - 1 - $index) * 250 + 'ms'\"\n >\n <div class=\"mosaic-item__media\">\n @if (item.publicId) {\n <ui-image [publicId]=\"item.publicId\"></ui-image>\n } @else {\n <img [src]=\"item.url\" [alt]=\"item.alt\" loading=\"lazy\" />\n }\n </div>\n @if (item.texts; as texts) {\n <div class=\"mosaic-item__content\">\n <p class=\"mosaic-item__description\">{{ texts.text }}</p>\n <div class=\"mosaic-item__meta\">\n <span class=\"mosaic-item__date\">{{ texts.title }}</span>\n <span class=\"mosaic-item__index\">\n {{ ($index + 1).toString().padStart(2, '0') }}\n </span>\n </div>\n </div>\n }\n </article>\n }\n </div>\n }\n\n</div>","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-content-document',\n imports: [CommonModule],\n templateUrl: './content-document.component.html',\n styleUrl: './content-document.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class ContentDocumentComponent {\n @Input() title?: string;\n @Input() items?: ContentDocumentItemI[];\n}\n\nexport interface ContentDocumentItemI {\n title: string;\n text: string;\n}\n","<div class=\"content-document main-grid col-span-full sm:col-span-12 sm:col-start-1\" scrollReveal>\n @if (title) {\n <div class=\"content-document__title main-grid col-span-full\">\n <h1 class=\"title col-span-full\">{{ title }}</h1>\n </div>\n }\n @if (items) {\n <div class=\"content-document__items col-span-full\">\n @for (item of items; track $index) {\n <div class=\"content-document__items--item main-grid\">\n <h2 class=\"content-document__items--item_title col-span-full sm:col-span-12 sm:col-start-1\">\n {{ item.title }}\n </h2>\n <p class=\"content-document__items--item_text col-span-full sm:col-span-4 sm:col-start-5\" [innerHTML]=\"item.text\"></p>\n </div>\n }\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { LinkTypeDirective, ScrollRevealDirective } from '@lluc_llull/ui-lib/directives';\nimport { UiLibButtonI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiIconComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-split-showcase',\n imports: [CommonModule, ScrollRevealDirective, LinkTypeDirective, UiIconComponent],\n templateUrl: './split-showcase.component.html',\n styleUrl: './split-showcase.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class SplitShowcaseComponent {\n @Input() title?: string;\n @Input() subtitle?: string;\n @Input() description?: string;\n @Input() metas?: SplitShowcaseMetaItemI[];\n @Input() buttons?: UiLibButtonI[];\n}\n\nexport interface SplitShowcaseMetaItemI {\n label: string;\n value: string;\n}","<div class=\"split-showcase main-grid col-span-full md:col-span-12 md:col-start-1\">\n <div class=\"split-showcase__metas col-span-full md:col-span-5 md:col-start-1\">\n <h2\n class=\"split-showcase__metas--title\"\n scrollReveal\n from=\"left\"\n distance=\"48px\"\n duration=\"0.7s\"\n [delay]=\"0\"\n >{{ title }}</h2>\n @if (buttons && buttons.length > 0) {\n <div class=\"btn-group\" scrollReveal from=\"left\" distance=\"48px\" duration=\"0.7s\" [delay]=\"200\">\n @for (button of buttons; track $index) {\n <a class=\"btn btn-link\" [href]=\"button.url\" [linkType]=\"button.linkType\">\n <ui-icon [name]=\"button.icon!\" [size]=\"17\" [color]=\"'var(--color-primary)'\"></ui-icon>\n {{ button.label }}\n </a>\n }\n </div>\n }\n <div class=\"split-showcase__metas--items\">\n @for (meta of metas; track meta.label) {\n <div\n class=\"split-showcase__metas--item\"\n scrollReveal\n from=\"left\"\n distance=\"48px\"\n duration=\"0.7s\"\n [delay]=\"200 + $index * 110\"\n >\n <span class=\"split-showcase__metas--item-label\">{{ meta.label }}: </span>\n <span class=\"split-showcase__metas--item-value\">{{ meta.value }}</span> \n </div>\n }\n </div>\n </div>\n\n <div class=\"split-showcase__content col-span-full md:col-span-5 md:col-start-8\">\n <h3\n class=\"split-showcase__content--subtitle\"\n scrollReveal\n from=\"right\"\n distance=\"48px\"\n duration=\"0.7s\"\n [delay]=\"0\"\n >{{ subtitle }}</h3>\n <p\n class=\"split-showcase__content--description\"\n scrollReveal\n from=\"right\"\n distance=\"48px\"\n duration=\"0.7s\"\n [delay]=\"200\"\n >{{ description }}</p>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ScrollRevealDirective } from '@lluc_llull/ui-lib/directives';\nimport { UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-asymmetric-media',\n imports: [CommonModule, UiImageComponent, ScrollRevealDirective],\n templateUrl: './asymmetric-media.component.html',\n styleUrl: './asymmetric-media.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class AsymmetricMediaComponent {\n @Input() media?: UiLibImageI[];\n @Input() direction: 'left' | 'right' = 'right';\n}\n","<div class=\"asymmetric-media main-grid col-span-full md:col-span-12 md:col-start-1\">\n @if(media && media.length > 0) {\n <div class=\"asymmetric-media__items main-grid col-span-full md:col-span-12 md:col-start-1\">\n @if(direction === 'left') {\n <div\n class=\"asymmetric-media__items--small col-span-full md:col-span-4 md:col-start-1\"\n scrollReveal\n from=\"bottom\"\n distance=\"64px\"\n duration=\"0.8s\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -25% 0px\"\n >\n @if (media[0]!.publicId) {\n <ui-image [publicId]=\"media[0]!.publicId!\" [eager]=\"true\" class=\"asymmetric-media-img\"></ui-image>\n } @else {\n <img [src]=\"media[0]!.url\" [alt]=\"media[0]!.alt\" class=\"asymmetric-media-img\" loading=\"eager\" />\n }\n </div>\n <div\n class=\"asymmetric-media__items--big col-span-full md:col-span-8 md:col-start-5\"\n scrollReveal\n from=\"top\"\n distance=\"64px\"\n duration=\"0.8s\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -25% 0px\"\n >\n @if (media[1]!.publicId) {\n <ui-image [publicId]=\"media[1]!.publicId!\" [eager]=\"true\" class=\"asymmetric-media-img\"></ui-image>\n } @else {\n <img [src]=\"media[1]!.url\" [alt]=\"media[1]!.alt\" class=\"asymmetric-media-img\" loading=\"eager\" />\n }\n </div>\n }\n @if(direction === 'right') {\n <div\n class=\"asymmetric-media__items--small col-span-full md:col-span-8 md:col-start-1\"\n scrollReveal\n from=\"bottom\"\n distance=\"64px\"\n duration=\"0.8s\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -25% 0px\"\n >\n @if (media[0]!.publicId) {\n <ui-image [publicId]=\"media[0]!.publicId!\" [eager]=\"true\" class=\"asymmetric-media-img\"></ui-image>\n } @else {\n <img [src]=\"media[0]!.url\" [alt]=\"media[0]!.alt\" class=\"asymmetric-media-img\" loading=\"eager\" />\n }\n </div>\n <div\n class=\"asymmetric-media__items--big col-span-full md:col-span-4 md:col-start-9\"\n scrollReveal\n from=\"top\"\n distance=\"64px\"\n duration=\"0.8s\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -25% 0px\"\n >\n @if (media[1]!.publicId) {\n <ui-image [publicId]=\"media[1]!.publicId!\" [eager]=\"true\" class=\"asymmetric-media-img\"></ui-image>\n } @else {\n <img [src]=\"media[1]!.url\" [alt]=\"media[1]!.alt\" class=\"asymmetric-media-img\" loading=\"eager\" />\n }\n </div>\n }\n </div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { ScrollRevealDirective } from '@lluc_llull/ui-lib/directives';\nimport { UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({ \n selector: 'lib-media-intro',\n imports: [CommonModule, ScrollRevealDirective, UiImageComponent],\n templateUrl: './media-intro.component.html',\n styleUrl: './media-intro.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class MediaIntroComponent {\n @Input() highlightedText?: string;\n @Input() secondaryText?: string;\n @Input() direction: 'left' | 'right' = 'right';\n @Input() media?: UiLibImageI;\n}\n","<div class=\"media-intro main-grid col-span-full md:col-span-12 md:col-start-1\">\n <div class=\"media-intro__content main-grid col-span-full md:col-span-12 md:col-start-1\">\n @if(highlightedText) {\n <div class=\"media-intro__content--left main-grid col-span-full\">\n <h2 class=\"media-intro__content--main-text col-span-full md:col-span-6\" \n [class.md:col-start-1]=\"direction === 'left'\"\n [class.md:col-start-7]=\"direction === 'right'\"\n [innerHTML]=\"highlightedText\"\n scrollReveal\n [from]=\"direction === 'left' ? 'left' : 'right'\"\n distance=\"48px\"\n duration=\"0.7s\"\n [delay]=\"0\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -20% 0px\">\n </h2>\n </div>\n }\n @if(secondaryText) {\n <div class=\"media-intro__content--right main-grid col-span-full\">\n <p class=\"media-intro__content--secondary-text col-span-full md:col-span-6\"\n [class.md:col-start-7]=\"direction === 'left'\"\n [class.md:col-start-1]=\"direction === 'right'\"\n [innerHTML]=\"secondaryText\"\n scrollReveal\n [from]=\"direction === 'left' ? 'right' : 'left'\"\n distance=\"48px\"\n duration=\"0.7s\"\n [delay]=\"120\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -20% 0px\"\n ></p>\n </div>\n }\n </div>\n @if(media) {\n <div\n class=\"media-intro__media col-span-full md:col-span-12 md:col-start-1\"\n scrollReveal\n from=\"bottom\"\n distance=\"64px\"\n duration=\"0.8s\"\n [delay]=\"180\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -20% 0px\"\n >\n @if (media.publicId) {\n <ui-image [publicId]=\"media.publicId\" [eager]=\"true\" class=\"media-intro-img\"></ui-image>\n } @else {\n <img [src]=\"media.url\" [alt]=\"media.alt\" class=\"media-intro-img\" loading=\"eager\" />\n }\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ScrollRevealDirective } from '@lluc_llull/ui-lib/directives';\nimport { UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-columns-media-stacked',\n imports: [CommonModule, ScrollRevealDirective, UiImageComponent],\n templateUrl: './columns-media-stacked.component.html',\n styleUrl: './columns-media-stacked.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class ColumnsMediaStackedComponent {\n @Input() leftColumn?: string;\n @Input() rightColumn?: string;\n @Input() direction: 'left' | 'right' = 'right';\n @Input() image?: UiLibImageI;\n}\n","<div class=\"columns-media-stacked main-grid col-span-full\">\n <div class=\"columns-media-stacked__content main-grid col-span-full\">\n @if(leftColumn) {\n <p \n class=\"columns-media-stacked__content-column col-span-full md:col-span-4\"\n [class.md:col-start-1]=\"direction === 'left'\"\n [class.md:col-start-5]=\"direction === 'right'\"\n [innerHTML]=\"leftColumn\"\n scrollReveal\n from=\"left\"\n distance=\"48px\"\n duration=\"0.7s\"\n [delay]=\"0\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -20% 0px\"\n > \n </p>\n }\n @if(rightColumn) {\n <p \n class=\"columns-media-stacked__content-column col-span-full md:col-span-4\"\n [class.md:col-start-5]=\"direction === 'left'\"\n [class.md:col-start-9]=\"direction === 'right'\"\n [innerHTML]=\"rightColumn\"\n scrollReveal\n from=\"right\"\n distance=\"48px\"\n duration=\"0.7s\"\n [delay]=\"120\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -20% 0px\"\n > \n </p>\n }\n </div>\n @if(image) {\n <div \n class=\"columns-media-stacked__image col-span-full md:col-span-10\"\n [class.md:col-start-1]=\"direction === 'left'\"\n [class.md:col-start-3]=\"direction === 'right'\"\n scrollReveal\n from=\"bottom\"\n distance=\"64px\"\n duration=\"0.8s\"\n [delay]=\"180\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -20% 0px\"\n >\n @if (image.publicId) {\n <ui-image [publicId]=\"image.publicId\" [eager]=\"true\" class=\"media-intro-img\"></ui-image>\n } @else {\n <img [src]=\"image.url\" [alt]=\"image.alt\" class=\"media-intro-img\" loading=\"eager\" />\n }\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\nimport { ScrollRevealDirective } from '@lluc_llull/ui-lib/directives';\nimport { UiLibImageI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiImageComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-mosaic-grid',\n imports: [CommonModule, UiImageComponent, ScrollRevealDirective],\n templateUrl: './mosaic-grid.component.html',\n styleUrl: './mosaic-grid.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: contents',\n },\n})\nexport class MosaicGridComponent implements OnInit{\n @Input() text?: string;\n @Input() images?: UiLibImageI[];\n\n imageGroups: { row1: UiLibImageI[], row2: UiLibImageI[] }[] = [];\n\n ngOnInit(): void {\n console.log('MosaicGridComponent initialized with images:', this.images);\n if (!this.images?.length) {\n this.imageGroups = [];\n return;\n }\n const groups = [];\n for (let i = 0; i < this.images.length; i += 5) {\n groups.push({\n row1: this.images.slice(i, i + 3),\n row2: this.images.slice(i + 3, i + 5)\n });\n }\n this.imageGroups = groups;\n }\n}","<div class=\"mosaic-grid main-grid\">\n @if (text) {\n <p\n class=\"mosaic-grid__text col-span-full md:col-span-6 md:col-start-7\"\n [innerHTML]=\"text\"\n scrollReveal\n from=\"right\"\n distance=\"48px\"\n duration=\"0.7s\"\n [delay]=\"0\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -20% 0px\"\n ></p>\n }\n\n @for (group of imageGroups; track $index) {\n\n <!-- row 1: 3 imágenes -->\n <div class=\"mosaic-grid__images main-grid col-span-full\">\n @for (img of group.row1; track $index) {\n @if (img.publicId) {\n <ui-image [publicId]=\"img.publicId\" [eager]=\"true\" class=\"mosaic-grid__images col-span-full md:col-span-4 md:col-start-{{ $index * 4 + 1 }}\" [class.image-half-height]=\"$index === 2\"\n scrollReveal\n from=\"bottom\"\n distance=\"40px\"\n duration=\"0.6s\"\n [delay]=\"$index * 90\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -15% 0px\"\n ></ui-image>\n } @else {\n <img [src]=\"img.url\" [alt]=\"img.alt\" loading=\"eager\" class=\"mosaic-grid__images col-span-full md:col-span-4 md:col-start-{{ $index * 4 + 1 }}\" [class.image-half-height]=\"$index === 2\"\n scrollReveal\n from=\"bottom\"\n distance=\"40px\"\n duration=\"0.6s\"\n [delay]=\"$index * 90\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -15% 0px\"\n />\n }\n }\n </div>\n\n <!-- row 2: 1 pequeña + 1 grande -->\n @if (group.row2.length) {\n <div class=\"mosaic-grid__images main-grid col-span-full\">\n @if (group.row2[0]!.publicId) {\n <ui-image [publicId]=\"group.row2[0]!.publicId\" [eager]=\"true\" class=\"mosaic-grid__images col-span-full md:col-span-4 md:col-start-1 image-half-height\"\n scrollReveal\n from=\"bottom\"\n distance=\"40px\"\n duration=\"0.6s\"\n [delay]=\"0\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -15% 0px\"\n ></ui-image>\n } @else {\n <img [src]=\"group.row2[0]!.url\" [alt]=\"group.row2[0]!.alt\" loading=\"eager\" class=\"mosaic-grid__images col-span-full md:col-span-4 md:col-start-1 image-half-height\"\n scrollReveal\n from=\"bottom\"\n distance=\"40px\"\n duration=\"0.6s\"\n [delay]=\"0\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -15% 0px\"\n />\n }\n\n @if (group.row2[1]) {\n @if (group.row2[1]!.publicId) {\n <ui-image [publicId]=\"group.row2[1]!.publicId\" [eager]=\"true\" class=\"mosaic-grid__images col-span-full md:col-span-8 md:col-start-5\"\n scrollReveal\n from=\"bottom\"\n distance=\"40px\"\n duration=\"0.6s\"\n [delay]=\"120\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -15% 0px\"\n ></ui-image>\n } @else {\n <img [src]=\"group.row2[1]!.url\" [alt]=\"group.row2[1]!.alt\" loading=\"eager\" class=\"mosaic-grid__images col-span-full md:col-span-8 md:col-start-5\"\n scrollReveal\n from=\"bottom\"\n distance=\"40px\"\n duration=\"0.6s\"\n [delay]=\"120\"\n [threshold]=\"0\"\n rootMargin=\"0px 0px -15% 0px\"\n />\n }\n }\n </div>\n }\n\n }\n</div>\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isPlatformBrowser } from "@angular/common";
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
import { Directive, EventEmitter, HostBinding, HostListener, Inject, Input, Output, PLATFORM_ID } from "@angular/core";
|
|
3
|
+
import { Directive, ElementRef, EventEmitter, HostBinding, HostListener, Inject, Input, Output, PLATFORM_ID, inject } from "@angular/core";
|
|
4
4
|
import { LinkType } from "@lluc_llull/ui-lib/enums";
|
|
5
5
|
import * as i1 from "@angular/router";
|
|
6
6
|
var LinkTypeDirective = class LinkTypeDirective {
|
|
@@ -246,6 +246,10 @@ var ScrollRevealDirective = class ScrollRevealDirective {
|
|
|
246
246
|
platformId;
|
|
247
247
|
distance = "30px";
|
|
248
248
|
duration = "0.8s";
|
|
249
|
+
from = "top";
|
|
250
|
+
delay = 0;
|
|
251
|
+
threshold = .1;
|
|
252
|
+
rootMargin = "0px";
|
|
249
253
|
constructor(el, renderer, platformId) {
|
|
250
254
|
this.el = el;
|
|
251
255
|
this.renderer = renderer;
|
|
@@ -255,7 +259,9 @@ var ScrollRevealDirective = class ScrollRevealDirective {
|
|
|
255
259
|
this.setupInitialStyles();
|
|
256
260
|
const isBrowser = isPlatformBrowser(this.platformId);
|
|
257
261
|
const hasIntersectionObserver = typeof globalThis !== "undefined" && "IntersectionObserver" in globalThis;
|
|
258
|
-
|
|
262
|
+
const prefersReducedMotion = isBrowser && typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
263
|
+
if (!isBrowser || !hasIntersectionObserver || prefersReducedMotion) {
|
|
264
|
+
if (prefersReducedMotion) this.renderer.setStyle(this.el.nativeElement, "transition", "none");
|
|
259
265
|
this.reveal();
|
|
260
266
|
return;
|
|
261
267
|
}
|
|
@@ -266,17 +272,26 @@ var ScrollRevealDirective = class ScrollRevealDirective {
|
|
|
266
272
|
observer.unobserve(this.el.nativeElement);
|
|
267
273
|
}
|
|
268
274
|
});
|
|
269
|
-
}, {
|
|
275
|
+
}, {
|
|
276
|
+
threshold: this.threshold,
|
|
277
|
+
rootMargin: this.rootMargin
|
|
278
|
+
});
|
|
270
279
|
observer.observe(this.el.nativeElement);
|
|
271
280
|
}
|
|
281
|
+
get isHorizontal() {
|
|
282
|
+
return this.from === "left" || this.from === "right";
|
|
283
|
+
}
|
|
272
284
|
setupInitialStyles() {
|
|
285
|
+
const axis = this.isHorizontal ? "X" : "Y";
|
|
286
|
+
const offset = this.from === "bottom" || this.from === "right" ? this.distance : `-${this.distance}`;
|
|
273
287
|
this.renderer.setStyle(this.el.nativeElement, "opacity", "0");
|
|
274
|
-
this.renderer.setStyle(this.el.nativeElement, "transform", `
|
|
275
|
-
this.renderer.setStyle(this.el.nativeElement, "transition", `
|
|
288
|
+
this.renderer.setStyle(this.el.nativeElement, "transform", `translate${axis}(${offset})`);
|
|
289
|
+
this.renderer.setStyle(this.el.nativeElement, "transition", `opacity ${this.duration} ease-out ${this.delay}ms, transform ${this.duration} ease-out ${this.delay}ms`);
|
|
276
290
|
}
|
|
277
291
|
reveal() {
|
|
292
|
+
const axis = this.isHorizontal ? "X" : "Y";
|
|
278
293
|
this.renderer.setStyle(this.el.nativeElement, "opacity", "1");
|
|
279
|
-
this.renderer.setStyle(this.el.nativeElement, "transform",
|
|
294
|
+
this.renderer.setStyle(this.el.nativeElement, "transform", `translate${axis}(0)`);
|
|
280
295
|
}
|
|
281
296
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
282
297
|
minVersion: "12.0.0",
|
|
@@ -298,7 +313,11 @@ var ScrollRevealDirective = class ScrollRevealDirective {
|
|
|
298
313
|
selector: "[scrollReveal]",
|
|
299
314
|
inputs: {
|
|
300
315
|
distance: "distance",
|
|
301
|
-
duration: "duration"
|
|
316
|
+
duration: "duration",
|
|
317
|
+
from: "from",
|
|
318
|
+
delay: "delay",
|
|
319
|
+
threshold: "threshold",
|
|
320
|
+
rootMargin: "rootMargin"
|
|
302
321
|
},
|
|
303
322
|
ngImport: i0
|
|
304
323
|
});
|
|
@@ -328,14 +347,195 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
328
347
|
],
|
|
329
348
|
propDecorators: {
|
|
330
349
|
distance: [{ type: Input }],
|
|
331
|
-
duration: [{ type: Input }]
|
|
350
|
+
duration: [{ type: Input }],
|
|
351
|
+
from: [{ type: Input }],
|
|
352
|
+
delay: [{ type: Input }],
|
|
353
|
+
threshold: [{ type: Input }],
|
|
354
|
+
rootMargin: [{ type: Input }]
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
const CHAR_CLASS = "text-reveal-char";
|
|
358
|
+
const PRIMARY_COLOR = "var(--text-primary)";
|
|
359
|
+
const SECONDARY_COLOR = "var(--text-primary-60)";
|
|
360
|
+
var ScrollTextRevealDirective = class ScrollTextRevealDirective {
|
|
361
|
+
el;
|
|
362
|
+
platformId;
|
|
363
|
+
chars = [];
|
|
364
|
+
revealedCount = 0;
|
|
365
|
+
frame = null;
|
|
366
|
+
observer = null;
|
|
367
|
+
startScrollY = null;
|
|
368
|
+
constructor(el, platformId) {
|
|
369
|
+
this.el = el;
|
|
370
|
+
this.platformId = platformId;
|
|
371
|
+
}
|
|
372
|
+
ngOnInit() {
|
|
373
|
+
if (!isPlatformBrowser(this.platformId)) return;
|
|
374
|
+
const host = this.el.nativeElement;
|
|
375
|
+
if (window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches ?? false) {
|
|
376
|
+
host.style.color = PRIMARY_COLOR;
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
this.observer = new MutationObserver(() => {
|
|
380
|
+
this.observer?.disconnect();
|
|
381
|
+
this.splitText();
|
|
382
|
+
this.updateProgress();
|
|
383
|
+
this.observer?.observe(host, { childList: true });
|
|
384
|
+
});
|
|
385
|
+
this.observer.observe(host, { childList: true });
|
|
386
|
+
window.addEventListener("scroll", this.onScroll, { passive: true });
|
|
387
|
+
window.addEventListener("resize", this.onScroll, { passive: true });
|
|
388
|
+
requestAnimationFrame(() => {
|
|
389
|
+
this.splitText();
|
|
390
|
+
this.updateProgress();
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
ngOnDestroy() {
|
|
394
|
+
if (!isPlatformBrowser(this.platformId)) return;
|
|
395
|
+
window.removeEventListener("scroll", this.onScroll);
|
|
396
|
+
window.removeEventListener("resize", this.onScroll);
|
|
397
|
+
this.observer?.disconnect();
|
|
398
|
+
if (this.frame !== null) {
|
|
399
|
+
cancelAnimationFrame(this.frame);
|
|
400
|
+
this.frame = null;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
updateProgress() {
|
|
404
|
+
const total = this.chars.length;
|
|
405
|
+
if (!total) return;
|
|
406
|
+
const rect = this.el.nativeElement.getBoundingClientRect();
|
|
407
|
+
const viewportHeight = window.innerHeight || 1;
|
|
408
|
+
if (this.startScrollY === null) {
|
|
409
|
+
if (rect.bottom <= 0 || rect.top >= viewportHeight) return;
|
|
410
|
+
this.startScrollY = window.scrollY;
|
|
411
|
+
}
|
|
412
|
+
const distance = Math.max(rect.height * 1.5, viewportHeight * .5) || 1;
|
|
413
|
+
const progress = (window.scrollY - this.startScrollY) / distance;
|
|
414
|
+
this.setRevealedCount(Math.round(Math.min(1, Math.max(0, progress)) * total));
|
|
415
|
+
}
|
|
416
|
+
onScroll = () => {
|
|
417
|
+
if (this.frame !== null) return;
|
|
418
|
+
this.frame = requestAnimationFrame(() => {
|
|
419
|
+
this.frame = null;
|
|
420
|
+
this.updateProgress();
|
|
421
|
+
});
|
|
422
|
+
};
|
|
423
|
+
setRevealedCount(target) {
|
|
424
|
+
if (target === this.revealedCount) return;
|
|
425
|
+
if (target > this.revealedCount) for (let i = this.revealedCount; i < target; i++) this.chars[i].style.color = PRIMARY_COLOR;
|
|
426
|
+
else for (let i = this.revealedCount - 1; i >= target; i--) this.chars[i].style.color = SECONDARY_COLOR;
|
|
427
|
+
this.revealedCount = target;
|
|
428
|
+
}
|
|
429
|
+
splitText() {
|
|
430
|
+
const host = this.el.nativeElement;
|
|
431
|
+
if (!host.querySelector(`.${CHAR_CLASS}`)) {
|
|
432
|
+
const walker = document.createTreeWalker(host, NodeFilter.SHOW_TEXT);
|
|
433
|
+
const textNodes = [];
|
|
434
|
+
while (walker.nextNode()) {
|
|
435
|
+
const node = walker.currentNode;
|
|
436
|
+
if (node.textContent?.trim()) textNodes.push(node);
|
|
437
|
+
}
|
|
438
|
+
for (const node of textNodes) {
|
|
439
|
+
const fragment = document.createDocumentFragment();
|
|
440
|
+
for (const char of node.textContent ?? "") {
|
|
441
|
+
if (/\s/.test(char)) {
|
|
442
|
+
fragment.appendChild(document.createTextNode(char));
|
|
443
|
+
continue;
|
|
444
|
+
}
|
|
445
|
+
const span = document.createElement("span");
|
|
446
|
+
span.className = CHAR_CLASS;
|
|
447
|
+
span.style.color = SECONDARY_COLOR;
|
|
448
|
+
span.style.transition = "color 0.18s ease";
|
|
449
|
+
span.textContent = char;
|
|
450
|
+
fragment.appendChild(span);
|
|
451
|
+
}
|
|
452
|
+
node.replaceWith(fragment);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
this.chars = Array.from(host.querySelectorAll(`.${CHAR_CLASS}`));
|
|
456
|
+
this.revealedCount = 0;
|
|
332
457
|
}
|
|
458
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
459
|
+
minVersion: "12.0.0",
|
|
460
|
+
version: "22.2.4",
|
|
461
|
+
ngImport: i0,
|
|
462
|
+
type: ScrollTextRevealDirective,
|
|
463
|
+
deps: [{ token: i0.ElementRef }, { token: PLATFORM_ID }],
|
|
464
|
+
target: i0.ɵɵFactoryTarget.Directive
|
|
465
|
+
});
|
|
466
|
+
static ɵdir = i0.ɵɵngDeclareDirective({
|
|
467
|
+
minVersion: "14.0.0",
|
|
468
|
+
version: "22.2.4",
|
|
469
|
+
type: ScrollTextRevealDirective,
|
|
470
|
+
isStandalone: true,
|
|
471
|
+
selector: "[scrollTextReveal]",
|
|
472
|
+
ngImport: i0
|
|
473
|
+
});
|
|
474
|
+
};
|
|
475
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
476
|
+
minVersion: "12.0.0",
|
|
477
|
+
version: "22.2.4",
|
|
478
|
+
ngImport: i0,
|
|
479
|
+
type: ScrollTextRevealDirective,
|
|
480
|
+
decorators: [{
|
|
481
|
+
type: Directive,
|
|
482
|
+
args: [{
|
|
483
|
+
selector: "[scrollTextReveal]",
|
|
484
|
+
standalone: true
|
|
485
|
+
}]
|
|
486
|
+
}],
|
|
487
|
+
ctorParameters: () => [{ type: i0.ElementRef }, {
|
|
488
|
+
type: Object,
|
|
489
|
+
decorators: [{
|
|
490
|
+
type: Inject,
|
|
491
|
+
args: [PLATFORM_ID]
|
|
492
|
+
}]
|
|
493
|
+
}]
|
|
333
494
|
});
|
|
334
495
|
var HeaderScrollDirective = class HeaderScrollDirective {
|
|
335
496
|
scrollThreshold = 60;
|
|
336
497
|
isScrolled = false;
|
|
498
|
+
isOverLight = false;
|
|
499
|
+
isOverDark = false;
|
|
500
|
+
elementRef = inject(ElementRef);
|
|
501
|
+
isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
|
|
502
|
+
ngAfterViewInit() {
|
|
503
|
+
this.updateHeaderState();
|
|
504
|
+
}
|
|
337
505
|
onScroll() {
|
|
506
|
+
this.updateHeaderState();
|
|
507
|
+
}
|
|
508
|
+
onResize() {
|
|
509
|
+
this.updateHeaderState();
|
|
510
|
+
}
|
|
511
|
+
updateHeaderState() {
|
|
512
|
+
if (!this.isBrowser) return;
|
|
338
513
|
this.isScrolled = window.scrollY > this.scrollThreshold;
|
|
514
|
+
this.updateBackgroundTone();
|
|
515
|
+
}
|
|
516
|
+
updateBackgroundTone() {
|
|
517
|
+
const header = this.elementRef.nativeElement;
|
|
518
|
+
const { bottom, height, left, right, top } = header.getBoundingClientRect();
|
|
519
|
+
if (height === 0 || typeof document.elementsFromPoint !== "function") return;
|
|
520
|
+
const pointX = (left + right) / 2;
|
|
521
|
+
const pointY = Math.max(top + 1, bottom - 1);
|
|
522
|
+
const backgroundColor = document.elementsFromPoint(pointX, pointY).filter((element) => !header.contains(element)).map((element) => getComputedStyle(element).backgroundColor).find((color) => this.getOpaqueRgb(color));
|
|
523
|
+
const rgb = backgroundColor && this.getOpaqueRgb(backgroundColor);
|
|
524
|
+
if (!rgb) return;
|
|
525
|
+
this.isOverLight = this.isLightColor(rgb);
|
|
526
|
+
this.isOverDark = !this.isOverLight;
|
|
527
|
+
}
|
|
528
|
+
getOpaqueRgb(color) {
|
|
529
|
+
const channels = color.match(/[\d.]+/g)?.map(Number);
|
|
530
|
+
if (!channels || channels.length < 3 || channels[3] !== void 0 && channels[3] === 0) return;
|
|
531
|
+
return [
|
|
532
|
+
channels[0],
|
|
533
|
+
channels[1],
|
|
534
|
+
channels[2]
|
|
535
|
+
];
|
|
536
|
+
}
|
|
537
|
+
isLightColor([red, green, blue]) {
|
|
538
|
+
return Math.sqrt(.299 * red ** 2 + .587 * green ** 2 + .114 * blue ** 2) >= 128;
|
|
339
539
|
}
|
|
340
540
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
341
541
|
minVersion: "12.0.0",
|
|
@@ -353,8 +553,15 @@ var HeaderScrollDirective = class HeaderScrollDirective {
|
|
|
353
553
|
selector: "[headerScroll]",
|
|
354
554
|
inputs: { scrollThreshold: "scrollThreshold" },
|
|
355
555
|
host: {
|
|
356
|
-
listeners: {
|
|
357
|
-
|
|
556
|
+
listeners: {
|
|
557
|
+
"window:scroll": "onScroll()",
|
|
558
|
+
"window:resize": "onResize()"
|
|
559
|
+
},
|
|
560
|
+
properties: {
|
|
561
|
+
"class.is-scrolled": "this.isScrolled",
|
|
562
|
+
"class.is-over-light": "this.isOverLight",
|
|
563
|
+
"class.is-over-dark": "this.isOverDark"
|
|
564
|
+
}
|
|
358
565
|
},
|
|
359
566
|
ngImport: i0
|
|
360
567
|
});
|
|
@@ -377,12 +584,24 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
377
584
|
type: HostBinding,
|
|
378
585
|
args: ["class.is-scrolled"]
|
|
379
586
|
}],
|
|
587
|
+
isOverLight: [{
|
|
588
|
+
type: HostBinding,
|
|
589
|
+
args: ["class.is-over-light"]
|
|
590
|
+
}],
|
|
591
|
+
isOverDark: [{
|
|
592
|
+
type: HostBinding,
|
|
593
|
+
args: ["class.is-over-dark"]
|
|
594
|
+
}],
|
|
380
595
|
onScroll: [{
|
|
381
596
|
type: HostListener,
|
|
382
597
|
args: ["window:scroll", []]
|
|
598
|
+
}],
|
|
599
|
+
onResize: [{
|
|
600
|
+
type: HostListener,
|
|
601
|
+
args: ["window:resize", []]
|
|
383
602
|
}]
|
|
384
603
|
}
|
|
385
604
|
});
|
|
386
|
-
export { HeaderScrollDirective, HighlightDirective, LinkType, LinkTypeDirective, ScrollRevealDirective };
|
|
605
|
+
export { HeaderScrollDirective, HighlightDirective, LinkType, LinkTypeDirective, ScrollRevealDirective, ScrollTextRevealDirective };
|
|
387
606
|
|
|
388
607
|
//# sourceMappingURL=lluc_llull-ui-lib-directives.mjs.map
|