@lluc_llull/ui-lib 0.33.10 → 0.34.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/README.md +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-asymmetric-media.mjs +85 -28
- package/fesm2022/lluc_llull-ui-lib-content-asymmetric-media.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-category-progress.mjs +81 -30
- package/fesm2022/lluc_llull-ui-lib-content-category-progress.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-columns-media-stacked.mjs +90 -34
- package/fesm2022/lluc_llull-ui-lib-content-columns-media-stacked.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-contact-minimal.mjs +109 -37
- package/fesm2022/lluc_llull-ui-lib-content-contact-minimal.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-content-document.mjs +58 -26
- package/fesm2022/lluc_llull-ui-lib-content-content-document.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-hero-section.mjs +139 -110
- package/fesm2022/lluc_llull-ui-lib-content-hero-section.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-media-intro.mjs +91 -34
- package/fesm2022/lluc_llull-ui-lib-content-media-intro.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-media-split.mjs +118 -76
- package/fesm2022/lluc_llull-ui-lib-content-media-split.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-mosaic-grid.mjs +99 -44
- package/fesm2022/lluc_llull-ui-lib-content-mosaic-grid.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-mosaic-parallax.mjs +109 -57
- package/fesm2022/lluc_llull-ui-lib-content-mosaic-parallax.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-section-intro.mjs +100 -37
- package/fesm2022/lluc_llull-ui-lib-content-section-intro.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-split-previewer.mjs +133 -61
- package/fesm2022/lluc_llull-ui-lib-content-split-previewer.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-split-showcase.mjs +99 -37
- package/fesm2022/lluc_llull-ui-lib-content-split-showcase.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content-stacked-rows.mjs +61 -29
- package/fesm2022/lluc_llull-ui-lib-content-stacked-rows.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-content.mjs +1286 -502
- package/fesm2022/lluc_llull-ui-lib-content.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-directives.mjs +383 -262
- package/fesm2022/lluc_llull-ui-lib-directives.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-effects.mjs +187 -150
- package/fesm2022/lluc_llull-ui-lib-effects.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-enums.mjs +8 -12
- package/fesm2022/lluc_llull-ui-lib-enums.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-feedback-404.mjs +97 -34
- package/fesm2022/lluc_llull-ui-lib-feedback-404.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-feedback.mjs +97 -34
- package/fesm2022/lluc_llull-ui-lib-feedback.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-footers-columns-footer.mjs +65 -27
- package/fesm2022/lluc_llull-ui-lib-footers-columns-footer.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-footers-legal-footer.mjs +74 -37
- package/fesm2022/lluc_llull-ui-lib-footers-legal-footer.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-footers-links-footer.mjs +59 -24
- package/fesm2022/lluc_llull-ui-lib-footers-links-footer.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-footers-social-footer.mjs +95 -32
- package/fesm2022/lluc_llull-ui-lib-footers-social-footer.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-footers-visual-footer.mjs +84 -45
- package/fesm2022/lluc_llull-ui-lib-footers-visual-footer.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-footers.mjs +354 -125
- package/fesm2022/lluc_llull-ui-lib-footers.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-headers-header-clear.mjs +153 -78
- package/fesm2022/lluc_llull-ui-lib-headers-header-clear.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-headers-header-mobile.mjs +153 -78
- package/fesm2022/lluc_llull-ui-lib-headers-header-mobile.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-headers.mjs +296 -142
- package/fesm2022/lluc_llull-ui-lib-headers.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-interfaces.mjs +0 -4
- package/fesm2022/lluc_llull-ui-lib-mapper.mjs +242 -264
- package/fesm2022/lluc_llull-ui-lib-mapper.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-modals.mjs +163 -65
- package/fesm2022/lluc_llull-ui-lib-modals.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-screen-sizer.mjs +106 -97
- package/fesm2022/lluc_llull-ui-lib-screen-sizer.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-shared.mjs +279 -148
- package/fesm2022/lluc_llull-ui-lib-shared.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-sliders.mjs +72 -52
- package/fesm2022/lluc_llull-ui-lib-sliders.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-theme.mjs +78 -80
- package/fesm2022/lluc_llull-ui-lib-theme.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-utils.mjs +42 -64
- package/fesm2022/lluc_llull-ui-lib-utils.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib.mjs +42 -27
- package/fesm2022/lluc_llull-ui-lib.mjs.map +1 -1
- package/package.json +86 -85
- package/types/lluc_llull-ui-lib-content-asymmetric-media.d.ts +21 -0
- package/types/lluc_llull-ui-lib-content-category-progress.d.ts +34 -0
- package/types/lluc_llull-ui-lib-content-columns-media-stacked.d.ts +33 -0
- package/types/lluc_llull-ui-lib-content-contact-minimal.d.ts +39 -0
- package/types/lluc_llull-ui-lib-content-content-document.d.ts +24 -0
- package/types/lluc_llull-ui-lib-content-hero-section.d.ts +62 -0
- package/types/lluc_llull-ui-lib-content-media-intro.d.ts +33 -0
- package/types/lluc_llull-ui-lib-content-media-split.d.ts +36 -0
- package/types/lluc_llull-ui-lib-content-mosaic-grid.d.ts +27 -0
- package/types/lluc_llull-ui-lib-content-mosaic-parallax.d.ts +35 -0
- package/types/lluc_llull-ui-lib-content-section-intro.d.ts +33 -0
- package/types/lluc_llull-ui-lib-content-split-previewer.d.ts +47 -0
- package/types/lluc_llull-ui-lib-content-split-showcase.d.ts +43 -0
- package/types/lluc_llull-ui-lib-content-stacked-rows.d.ts +30 -0
- package/types/lluc_llull-ui-lib-content.d.ts +471 -0
- package/types/lluc_llull-ui-lib-directives.d.ts +93 -0
- package/types/lluc_llull-ui-lib-effects.d.ts +50 -0
- package/types/lluc_llull-ui-lib-enums.d.ts +7 -0
- package/types/lluc_llull-ui-lib-feedback-404.d.ts +33 -0
- package/types/lluc_llull-ui-lib-feedback.d.ts +33 -0
- package/types/lluc_llull-ui-lib-footers-columns-footer.d.ts +30 -0
- package/types/lluc_llull-ui-lib-footers-legal-footer.d.ts +40 -0
- package/types/lluc_llull-ui-lib-footers-links-footer.d.ts +15 -0
- package/types/lluc_llull-ui-lib-footers-social-footer.d.ts +27 -0
- package/types/lluc_llull-ui-lib-footers-visual-footer.d.ts +57 -0
- package/types/lluc_llull-ui-lib-footers.d.ts +161 -0
- package/types/lluc_llull-ui-lib-headers-header-clear.d.ts +68 -0
- package/types/lluc_llull-ui-lib-headers-header-mobile.d.ts +68 -0
- package/types/lluc_llull-ui-lib-headers.d.ts +132 -0
- package/types/lluc_llull-ui-lib-interfaces.d.ts +92 -0
- package/types/lluc_llull-ui-lib-mapper.d.ts +40 -0
- package/types/lluc_llull-ui-lib-modals.d.ts +47 -0
- package/types/lluc_llull-ui-lib-screen-sizer.d.ts +34 -0
- package/types/lluc_llull-ui-lib-shared.d.ts +99 -0
- package/types/lluc_llull-ui-lib-sliders.d.ts +17 -0
- package/types/lluc_llull-ui-lib-theme.d.ts +16 -0
- package/{utils/utils.d.ts → types/lluc_llull-ui-lib-utils.d.ts} +2 -2
- package/types/lluc_llull-ui-lib.d.ts +5 -0
- package/content/asymmetric-media/asymmetric-media.component.d.ts +0 -8
- package/content/asymmetric-media/asymmetric-media.interface.d.ts +0 -5
- package/content/asymmetric-media/index.d.ts +0 -2
- package/content/category-progress/category-progress.component.d.ts +0 -16
- package/content/category-progress/category-progress.interface.d.ts +0 -6
- package/content/category-progress/index.d.ts +0 -2
- package/content/columns-media-stacked/columns-media-stacked.component.d.ts +0 -10
- package/content/columns-media-stacked/columns-media-stacked.interface.d.ts +0 -7
- package/content/columns-media-stacked/index.d.ts +0 -2
- package/content/contact-minimal/contact-minimal.component.d.ts +0 -11
- package/content/contact-minimal/contact-minimal.interface.d.ts +0 -8
- package/content/contact-minimal/index.d.ts +0 -2
- package/content/content-document/content-document.component.d.ts +0 -11
- package/content/content-document/content-document.interface.d.ts +0 -5
- package/content/content-document/index.d.ts +0 -2
- package/content/hero-section/hero-section.component.d.ts +0 -19
- package/content/hero-section/hero-section.interface.d.ts +0 -11
- package/content/hero-section/hero-section.stories.d.ts +0 -7
- package/content/hero-section/index.d.ts +0 -3
- package/content/index.d.ts +0 -14
- package/content/media-intro/index.d.ts +0 -2
- package/content/media-intro/media-intro.component.d.ts +0 -10
- package/content/media-intro/media-intro.interface.d.ts +0 -7
- package/content/media-split/index.d.ts +0 -2
- package/content/media-split/media-split.component.d.ts +0 -18
- package/content/media-split/media-split.interface.d.ts +0 -6
- package/content/mosaic-grid/index.d.ts +0 -2
- package/content/mosaic-grid/mosaic-grid.component.d.ts +0 -14
- package/content/mosaic-grid/mosaic-grid.interface.d.ts +0 -5
- package/content/mosaic-parallax/index.d.ts +0 -2
- package/content/mosaic-parallax/mosaic-parallax.component.d.ts +0 -17
- package/content/mosaic-parallax/mosaic-parallax.interface.d.ts +0 -6
- package/content/section-intro/index.d.ts +0 -2
- package/content/section-intro/section-intro.component.d.ts +0 -11
- package/content/section-intro/section-intro.interface.d.ts +0 -2
- package/content/split-previewer/index.d.ts +0 -2
- package/content/split-previewer/split-previewer.component.d.ts +0 -24
- package/content/split-previewer/split-previewer.interface.d.ts +0 -8
- package/content/split-showcase/index.d.ts +0 -2
- package/content/split-showcase/split-showcase.component.d.ts +0 -15
- package/content/split-showcase/split-showcase.interface.d.ts +0 -9
- package/content/stacked-rows/index.d.ts +0 -2
- package/content/stacked-rows/stacked-rows.component.d.ts +0 -12
- package/content/stacked-rows/stacked-rows.interface.d.ts +0 -6
- package/directives/header-scroll.directive.d.ts +0 -8
- package/directives/highlight.directive.d.ts +0 -14
- package/directives/index.d.ts +0 -4
- package/directives/link-type.directive.d.ts +0 -26
- package/directives/scroll-reveal.directive.d.ts +0 -15
- package/effects/dynamic-background/dynamic-background.component.d.ts +0 -27
- package/effects/dynamic-background/effects/dynamic-effect.interface.d.ts +0 -6
- package/effects/dynamic-background/effects/effect-registry.d.ts +0 -3
- package/effects/dynamic-background/effects/sphere-deform/sphere-deform.effect.d.ts +0 -13
- package/effects/dynamic-background/index.d.ts +0 -1
- package/effects/index.d.ts +0 -1
- package/enums/index.d.ts +0 -1
- package/enums/link-type.enum.d.ts +0 -7
- package/feedback/404/404.component.d.ts +0 -10
- package/feedback/404/404.inteface.d.ts +0 -7
- package/feedback/404/index.d.ts +0 -2
- package/feedback/index.d.ts +0 -1
- package/fesm2022/lluc_llull-ui-lib-interfaces.mjs.map +0 -1
- package/footers/columns-footer/columns-footer.component.d.ts +0 -17
- package/footers/columns-footer/columns-footer.interface.d.ts +0 -5
- package/footers/columns-footer/index.d.ts +0 -2
- package/footers/index.d.ts +0 -5
- package/footers/legal-footer/index.d.ts +0 -2
- package/footers/legal-footer/legal-footer.component.d.ts +0 -12
- package/footers/legal-footer/legal-footer.interface.d.ts +0 -9
- package/footers/links-footer/index.d.ts +0 -2
- package/footers/links-footer/links-footer.component.d.ts +0 -7
- package/footers/links-footer/links-footer.interface.d.ts +0 -4
- package/footers/social-footer/index.d.ts +0 -2
- package/footers/social-footer/social-footer.component.d.ts +0 -9
- package/footers/social-footer/social-footer.interface.d.ts +0 -6
- package/footers/visual-footer/index.d.ts +0 -2
- package/footers/visual-footer/visual-footer.component.d.ts +0 -14
- package/footers/visual-footer/visual-footer.interface.d.ts +0 -11
- package/headers/header-clear/header-clear.component.d.ts +0 -28
- package/headers/header-clear/header-clear.interface.d.ts +0 -9
- package/headers/header-clear/index.d.ts +0 -2
- package/headers/header-mobile/header-mobile.component.d.ts +0 -28
- package/headers/header-mobile/header-mobile.interface.d.ts +0 -9
- package/headers/header-mobile/index.d.ts +0 -2
- package/headers/index.d.ts +0 -2
- package/index.d.ts +0 -5
- package/interfaces/index.d.ts +0 -8
- package/interfaces/page-config.interface.d.ts +0 -22
- package/interfaces/site-config.interface.d.ts +0 -21
- package/interfaces/ui-lib-address.interface.d.ts +0 -7
- package/interfaces/ui-lib-button.interface.d.ts +0 -7
- package/interfaces/ui-lib-image.interface.d.ts +0 -10
- package/interfaces/ui-lib-lang-item.interface.d.ts +0 -5
- package/interfaces/ui-lib-nav-items.interface.d.ts +0 -17
- package/interfaces/ui-lib-texts.interface.d.ts +0 -6
- package/lib/ui-lib.component.d.ts +0 -5
- package/mapper/cdn.token.d.ts +0 -2
- package/mapper/cloudinary.token.d.ts +0 -2
- package/mapper/component-mappers/404.mapper.d.ts +0 -2
- package/mapper/component-mappers/asymmetric-media.mapper.d.ts +0 -2
- package/mapper/component-mappers/category-progress.mapper.d.ts +0 -2
- package/mapper/component-mappers/columns-footer.mapper.d.ts +0 -2
- package/mapper/component-mappers/columns-media-stacked.mapper.d.ts +0 -2
- package/mapper/component-mappers/contact-minimal.mapper.d.ts +0 -2
- package/mapper/component-mappers/content-document.mapper.d.ts +0 -2
- package/mapper/component-mappers/header-clear.mapper.d.ts +0 -2
- package/mapper/component-mappers/hero-section.mapper.d.ts +0 -2
- package/mapper/component-mappers/index.d.ts +0 -24
- package/mapper/component-mappers/lang-modal.mapper.d.ts +0 -2
- package/mapper/component-mappers/legal-footer.mapper.d.ts +0 -2
- package/mapper/component-mappers/links-footer.mapper.d.ts +0 -2
- package/mapper/component-mappers/media-intro.mapper.d.ts +0 -2
- package/mapper/component-mappers/media-split.mapper.d.ts +0 -2
- package/mapper/component-mappers/mosaic-grid.mapper.d.ts +0 -2
- package/mapper/component-mappers/mosaic-parallax.mapper.d.ts +0 -2
- package/mapper/component-mappers/nav-modal.mapper.d.ts +0 -3
- package/mapper/component-mappers/section-intro.mapper.d.ts +0 -2
- package/mapper/component-mappers/social-footer.mapper.d.ts +0 -2
- package/mapper/component-mappers/split-previewer.mapper.d.ts +0 -2
- package/mapper/component-mappers/split-showcase.mapper.d.ts +0 -2
- package/mapper/component-mappers/stacked-rows.mapper.d.ts +0 -2
- package/mapper/component-mappers/types.d.ts +0 -1
- package/mapper/component-mappers/visual-footer.mapper.d.ts +0 -2
- package/mapper/index.d.ts +0 -4
- package/mapper/mapper.service.d.ts +0 -10
- package/modals/index.d.ts +0 -2
- package/modals/lang-modal/index.d.ts +0 -2
- package/modals/lang-modal/lang-modal.component.d.ts +0 -18
- package/modals/lang-modal/lang-modal.interface.d.ts +0 -2
- package/modals/nav-modal/index.d.ts +0 -2
- package/modals/nav-modal/nav-modal.component.d.ts +0 -11
- package/modals/nav-modal/nav-modal.interface.d.ts +0 -5
- package/public-api.d.ts +0 -1
- package/screen-sizer/index.d.ts +0 -1
- package/screen-sizer/screen-sizer.service.d.ts +0 -34
- package/shared/index.d.ts +0 -2
- package/shared/ui-icon/index.d.ts +0 -3
- package/shared/ui-icon/ui-icon.component.d.ts +0 -15
- package/shared/ui-icon/ui-icon.interface.d.ts +0 -5
- package/shared/ui-icon/ui-icon.mock.d.ts +0 -8
- package/shared/ui-image/index.d.ts +0 -1
- package/shared/ui-image/ui-image.component.d.ts +0 -21
- package/sliders/index.d.ts +0 -1
- package/sliders/swiper.directive.d.ts +0 -12
- package/theme/index.d.ts +0 -1
- package/theme/theme.service.d.ts +0 -16
- package/utils/index.d.ts +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lluc_llull-ui-lib-directives.mjs","sources":["../../../projects/ui-lib/directives/link-type.directive.ts","../../../projects/ui-lib/directives/highlight.directive.ts","../../../projects/ui-lib/directives/scroll-reveal.directive.ts","../../../projects/ui-lib/directives/header-scroll.directive.ts","../../../projects/ui-lib/directives/lluc_llull-ui-lib-directives.ts"],"sourcesContent":["import { isPlatformBrowser } from '@angular/common';\nimport {\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Inject,\n Input,\n Output,\n PLATFORM_ID,\n} from '@angular/core';\nimport { Router } from '@angular/router';\nimport { LinkType } from '@lluc_llull/ui-lib/enums';\n\n@Directive({\n selector: '[linkType]',\n standalone: true,\n})\nexport class LinkTypeDirective {\n private _linkType?: LinkType;\n private _href?: string;\n\n @Input() \n set linkType(value: LinkType | undefined) {\n this._linkType = value;\n this.updateElementAttributes();\n }\n get linkType(): LinkType | undefined { return this._linkType; }\n\n @Input() \n set href(value: string | undefined) {\n this._href = value;\n this.updateElementAttributes();\n }\n get href(): string { return this._href ?? ''; }\n\n @Output() anchorClicked = new EventEmitter<void>();\n\n constructor(\n private readonly router: Router,\n private readonly elRef: ElementRef<HTMLAnchorElement>,\n @Inject(PLATFORM_ID) private platformId: Object,\n ) {}\n\n get isBrowser(): boolean {\n return isPlatformBrowser(this.platformId);\n }\n\n @HostListener('click', ['$event'])\n onClick(event: Event): void {\n if (!this.linkType || !this.href) return;\n\n switch (this.linkType) {\n case 'internal':\n event.preventDefault();\n const targetUrl = this.elRef.nativeElement.getAttribute('href') ?? this.href;\n this.router.navigateByUrl(targetUrl);\n this.anchorClicked.emit();\n break;\n\n case 'anchor':\n event.preventDefault();\n this.scrollToAnchor(this.href);\n break;\n\n case 'nolink':\n event.preventDefault();\n break;\n\n case 'external':\n case 'pdf':\n default:\n break;\n }\n }\n\n private updateElementAttributes(): void {\n const element = this.elRef.nativeElement;\n if (!this.href) {\n element.removeAttribute('href');\n return;\n }\n\n const resolvedHref = this.resolveHref();\n element.setAttribute('href', resolvedHref);\n\n if (this.linkType === 'external' || this.linkType === 'pdf') {\n element.setAttribute('target', '_blank');\n element.setAttribute('rel', 'noopener noreferrer nofollow');\n } else {\n element.removeAttribute('target');\n element.removeAttribute('rel');\n }\n }\n\n private resolveHref(): string {\n if (this.href.startsWith('/') || this.href.startsWith('http') || this.href.startsWith('#')) {\n return this.href;\n }\n\n if (this.linkType === 'internal') {\n const lang = this.getCurrentLang();\n return `/${lang}/${this.href}`;\n }\n\n return this.href;\n }\n\n private getCurrentLang(): string {\n const url = this.router.url || '';\n const firstSegment = url.split('?')[0].split('#')[0].split('/')[1];\n return firstSegment || 'es';\n }\n\n private scrollToAnchor(id: string): void {\n if (!this.isBrowser) return;\n\n const cleanId = id.replace(/^#/, '');\n const el = document.getElementById(cleanId);\n if (!el) return;\n\n const yOffset = -160;\n const y = el.getBoundingClientRect().top + window.scrollY + yOffset;\n\n window.scrollTo({\n top: y,\n behavior: 'smooth',\n });\n\n this.anchorClicked.emit();\n }\n}\nexport { LinkType };","import { Directive, HostBinding, Input } from '@angular/core';\n\n@Directive({\n selector: '[highlight]',\n standalone: true,\n})\nexport class HighlightDirective {\n @Input('highlight') highlightColor: string = '#FFFFFF';\n @Input() highlightThickness: number = 20;\n\n @HostBinding('style.background-image')\n get background() {\n const start = 65;\n const end = start + this.highlightThickness;\n\n return `linear-gradient(to bottom, \n transparent ${start}%, \n ${this.highlightColor} ${start}%, \n ${this.highlightColor} ${end}%, \n transparent ${end}%)`;\n }\n\n @HostBinding('style.background-size') size = '100% 100%';\n @HostBinding('style.display') display = 'inline';\n\n // desplazamiento\n @HostBinding('style.padding') padding = '0 10px';\n @HostBinding('style.margin') margin = '0 -10px'; // Compensa el padding para no mover el texto\n @HostBinding('style.box-decoration-break') break = 'clone';\n @HostBinding('style.-webkit-box-decoration-break') wBreak = 'clone';\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Directive, ElementRef, Inject, Input, OnInit, PLATFORM_ID, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[scrollReveal]',\n standalone: true,\n})\nexport class ScrollRevealDirective implements OnInit {\n @Input() distance = '30px';\n @Input() duration = '0.8s';\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2,\n @Inject(PLATFORM_ID) private platformId: Object,\n ) {}\n\n ngOnInit() {\n this.setupInitialStyles();\n\n const isBrowser = isPlatformBrowser(this.platformId);\n const hasIntersectionObserver =\n typeof globalThis !== 'undefined' && 'IntersectionObserver' in globalThis;\n\n if (!isBrowser || !hasIntersectionObserver) {\n this.reveal();\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n this.reveal();\n observer.unobserve(this.el.nativeElement);\n }\n });\n },\n { threshold: 0.1 },\n ); // Se dispara cuando el 10% del componente es visible\n\n observer.observe(this.el.nativeElement);\n }\n\n private setupInitialStyles() {\n this.renderer.setStyle(this.el.nativeElement, 'opacity', '0');\n this.renderer.setStyle(this.el.nativeElement, 'transform', `translateY(-${this.distance})`);\n this.renderer.setStyle(\n this.el.nativeElement,\n 'transition',\n `all ${this.duration} ease-out`,\n );\n }\n\n private reveal() {\n this.renderer.setStyle(this.el.nativeElement, 'opacity', '1');\n this.renderer.setStyle(this.el.nativeElement, 'transform', 'translateY(0)');\n }\n}\n","import { Directive, HostListener, HostBinding, Input } from '@angular/core';\n\n@Directive({\n selector: '[headerScroll]',\n standalone: true,\n})\nexport class HeaderScrollDirective {\n @Input() scrollThreshold = 60;\n\n @HostBinding('class.is-scrolled') isScrolled = false;\n\n @HostListener('window:scroll', [])\n onScroll(): void {\n this.isScrolled = window.scrollY > this.scrollThreshold;\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lluc_llull-ui-lib-directives.mjs","names":[],"sources":["../../../projects/ui-lib/directives/link-type.directive.ts","../../../projects/ui-lib/directives/highlight.directive.ts","../../../projects/ui-lib/directives/scroll-reveal.directive.ts","../../../projects/ui-lib/directives/header-scroll.directive.ts"],"sourcesContent":["import { isPlatformBrowser } from '@angular/common';\nimport {\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Inject,\n Input,\n Output,\n PLATFORM_ID,\n} from '@angular/core';\nimport { Router } from '@angular/router';\nimport { LinkType } from '@lluc_llull/ui-lib/enums';\n\n@Directive({\n selector: '[linkType]',\n standalone: true,\n})\nexport class LinkTypeDirective {\n private _linkType?: LinkType;\n private _href?: string;\n\n @Input() \n set linkType(value: LinkType | undefined) {\n this._linkType = value;\n this.updateElementAttributes();\n }\n get linkType(): LinkType | undefined { return this._linkType; }\n\n @Input() \n set href(value: string | undefined) {\n this._href = value;\n this.updateElementAttributes();\n }\n get href(): string { return this._href ?? ''; }\n\n @Output() anchorClicked = new EventEmitter<void>();\n\n constructor(\n private readonly router: Router,\n private readonly elRef: ElementRef<HTMLAnchorElement>,\n @Inject(PLATFORM_ID) private platformId: Object,\n ) {}\n\n get isBrowser(): boolean {\n return isPlatformBrowser(this.platformId);\n }\n\n @HostListener('click', ['$event'])\n onClick(event: Event): void {\n if (!this.linkType || !this.href) return;\n\n switch (this.linkType) {\n case 'internal':\n event.preventDefault();\n const targetUrl = this.elRef.nativeElement.getAttribute('href') ?? this.href;\n this.router.navigateByUrl(targetUrl);\n this.anchorClicked.emit();\n break;\n\n case 'anchor':\n event.preventDefault();\n this.scrollToAnchor(this.href);\n break;\n\n case 'nolink':\n event.preventDefault();\n break;\n\n case 'external':\n case 'pdf':\n default:\n break;\n }\n }\n\n private updateElementAttributes(): void {\n const element = this.elRef.nativeElement;\n if (!this.href) {\n element.removeAttribute('href');\n return;\n }\n\n const resolvedHref = this.resolveHref();\n element.setAttribute('href', resolvedHref);\n\n if (this.linkType === 'external' || this.linkType === 'pdf') {\n element.setAttribute('target', '_blank');\n element.setAttribute('rel', 'noopener noreferrer nofollow');\n } else {\n element.removeAttribute('target');\n element.removeAttribute('rel');\n }\n }\n\n private resolveHref(): string {\n if (this.href.startsWith('/') || this.href.startsWith('http') || this.href.startsWith('#')) {\n return this.href;\n }\n\n if (this.linkType === 'internal') {\n const lang = this.getCurrentLang();\n return `/${lang}/${this.href}`;\n }\n\n return this.href;\n }\n\n private getCurrentLang(): string {\n const url = this.router.url || '';\n const firstSegment = url.split('?')[0].split('#')[0].split('/')[1];\n return firstSegment || 'es';\n }\n\n private scrollToAnchor(id: string): void {\n if (!this.isBrowser) return;\n\n const cleanId = id.replace(/^#/, '');\n const el = document.getElementById(cleanId);\n if (!el) return;\n\n const yOffset = -160;\n const y = el.getBoundingClientRect().top + window.scrollY + yOffset;\n\n window.scrollTo({\n top: y,\n behavior: 'smooth',\n });\n\n this.anchorClicked.emit();\n }\n}\nexport { LinkType };","import { Directive, HostBinding, Input } from '@angular/core';\n\n@Directive({\n selector: '[highlight]',\n standalone: true,\n})\nexport class HighlightDirective {\n @Input('highlight') highlightColor: string = '#FFFFFF';\n @Input() highlightThickness: number = 20;\n\n @HostBinding('style.background-image')\n get background() {\n const start = 65;\n const end = start + this.highlightThickness;\n\n return `linear-gradient(to bottom, \n transparent ${start}%, \n ${this.highlightColor} ${start}%, \n ${this.highlightColor} ${end}%, \n transparent ${end}%)`;\n }\n\n @HostBinding('style.background-size') size = '100% 100%';\n @HostBinding('style.display') display = 'inline';\n\n // desplazamiento\n @HostBinding('style.padding') padding = '0 10px';\n @HostBinding('style.margin') margin = '0 -10px'; // Compensa el padding para no mover el texto\n @HostBinding('style.box-decoration-break') break = 'clone';\n @HostBinding('style.-webkit-box-decoration-break') wBreak = 'clone';\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Directive, ElementRef, Inject, Input, OnInit, PLATFORM_ID, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[scrollReveal]',\n standalone: true,\n})\nexport class ScrollRevealDirective implements OnInit {\n @Input() distance = '30px';\n @Input() duration = '0.8s';\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2,\n @Inject(PLATFORM_ID) private platformId: Object,\n ) {}\n\n ngOnInit() {\n this.setupInitialStyles();\n\n const isBrowser = isPlatformBrowser(this.platformId);\n const hasIntersectionObserver =\n typeof globalThis !== 'undefined' && 'IntersectionObserver' in globalThis;\n\n if (!isBrowser || !hasIntersectionObserver) {\n this.reveal();\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n this.reveal();\n observer.unobserve(this.el.nativeElement);\n }\n });\n },\n { threshold: 0.1 },\n ); // Se dispara cuando el 10% del componente es visible\n\n observer.observe(this.el.nativeElement);\n }\n\n private setupInitialStyles() {\n this.renderer.setStyle(this.el.nativeElement, 'opacity', '0');\n this.renderer.setStyle(this.el.nativeElement, 'transform', `translateY(-${this.distance})`);\n this.renderer.setStyle(\n this.el.nativeElement,\n 'transition',\n `all ${this.duration} ease-out`,\n );\n }\n\n private reveal() {\n this.renderer.setStyle(this.el.nativeElement, 'opacity', '1');\n this.renderer.setStyle(this.el.nativeElement, 'transform', 'translateY(0)');\n }\n}\n","import { Directive, HostListener, HostBinding, Input } from '@angular/core';\n\n@Directive({\n selector: '[headerScroll]',\n standalone: true,\n})\nexport class HeaderScrollDirective {\n @Input() scrollThreshold = 60;\n\n @HostBinding('class.is-scrolled') isScrolled = false;\n\n @HostListener('window:scroll', [])\n onScroll(): void {\n this.isScrolled = window.scrollY > this.scrollThreshold;\n }\n}"],"mappings":"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"}
|
|
@@ -1,152 +1,189 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import * as i0 from
|
|
3
|
-
import {
|
|
4
|
-
import * as THREE from
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const EFFECT_REGISTRY = {
|
|
47
|
-
'sphere-deform': SphereDeformEffect,
|
|
48
|
-
// 'ring-transform': RingTransformEffect,
|
|
49
|
-
// 'particles': ParticlesEffect,
|
|
1
|
+
import { CommonModule, isPlatformBrowser } from "@angular/common";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import { ChangeDetectionStrategy, Component, Inject, Input, PLATFORM_ID, ViewChild } from "@angular/core";
|
|
4
|
+
import * as THREE from "three";
|
|
5
|
+
var SphereDeformEffect = class {
|
|
6
|
+
size;
|
|
7
|
+
rotationSpeed;
|
|
8
|
+
color;
|
|
9
|
+
mesh;
|
|
10
|
+
time = 0;
|
|
11
|
+
constructor(size, rotationSpeed, color) {
|
|
12
|
+
this.size = size;
|
|
13
|
+
this.rotationSpeed = rotationSpeed;
|
|
14
|
+
this.color = color;
|
|
15
|
+
}
|
|
16
|
+
init(scene, _options) {
|
|
17
|
+
const geometry = new THREE.SphereGeometry(this.size, 128, 128);
|
|
18
|
+
const material = this.color ? new THREE.MeshStandardMaterial({
|
|
19
|
+
color: this.color,
|
|
20
|
+
flatShading: true
|
|
21
|
+
}) : new THREE.MeshNormalMaterial({ flatShading: true });
|
|
22
|
+
this.mesh = new THREE.Mesh(geometry, material);
|
|
23
|
+
scene.add(this.mesh);
|
|
24
|
+
}
|
|
25
|
+
animate() {
|
|
26
|
+
this.time += .02;
|
|
27
|
+
const positionAttr = this.mesh.geometry.attributes["position"];
|
|
28
|
+
const vertex = new THREE.Vector3();
|
|
29
|
+
for (let i = 0; i < positionAttr.count; i++) {
|
|
30
|
+
vertex.fromBufferAttribute(positionAttr, i);
|
|
31
|
+
const offset = Math.sin(vertex.x * 3 + this.time) * .2 + Math.cos(vertex.y * 5 + this.time * .7) * .2;
|
|
32
|
+
vertex.normalize().multiplyScalar(this.size + offset);
|
|
33
|
+
positionAttr.setXYZ(i, vertex.x, vertex.y, vertex.z);
|
|
34
|
+
}
|
|
35
|
+
positionAttr.needsUpdate = true;
|
|
36
|
+
this.mesh.geometry.computeVertexNormals();
|
|
37
|
+
this.mesh.rotation.y += this.rotationSpeed;
|
|
38
|
+
}
|
|
39
|
+
dispose() {
|
|
40
|
+
this.mesh?.geometry.dispose();
|
|
41
|
+
this.mesh?.material?.dispose();
|
|
42
|
+
}
|
|
50
43
|
};
|
|
51
|
-
|
|
52
|
-
class DynamicBackgroundComponent {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
44
|
+
const EFFECT_REGISTRY = { "sphere-deform": SphereDeformEffect };
|
|
45
|
+
var DynamicBackgroundComponent = class DynamicBackgroundComponent {
|
|
46
|
+
platformId;
|
|
47
|
+
canvasRef;
|
|
48
|
+
effect = "sphere-deform";
|
|
49
|
+
rotationSpeed = .01;
|
|
50
|
+
size = 2;
|
|
51
|
+
backgroundColor = "#000000";
|
|
52
|
+
elementColor;
|
|
53
|
+
scene;
|
|
54
|
+
camera;
|
|
55
|
+
renderer;
|
|
56
|
+
animationId;
|
|
57
|
+
currentEffect;
|
|
58
|
+
constructor(platformId) {
|
|
59
|
+
this.platformId = platformId;
|
|
60
|
+
}
|
|
61
|
+
get isBrowser() {
|
|
62
|
+
return isPlatformBrowser(this.platformId);
|
|
63
|
+
}
|
|
64
|
+
ngOnInit() {
|
|
65
|
+
if (this.isBrowser) {
|
|
66
|
+
this.initScene();
|
|
67
|
+
this.loadEffect();
|
|
68
|
+
this.animate();
|
|
69
|
+
window.addEventListener("resize", this.onResize);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
ngOnDestroy() {
|
|
73
|
+
if (this.isBrowser) {
|
|
74
|
+
cancelAnimationFrame(this.animationId);
|
|
75
|
+
this.renderer?.dispose();
|
|
76
|
+
this.currentEffect?.dispose();
|
|
77
|
+
window.removeEventListener("resize", this.onResize);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
initScene() {
|
|
81
|
+
const width = window.innerWidth;
|
|
82
|
+
const height = window.innerHeight;
|
|
83
|
+
this.scene = new THREE.Scene();
|
|
84
|
+
this.scene.background = new THREE.Color(this.backgroundColor);
|
|
85
|
+
this.camera = new THREE.PerspectiveCamera(75, width / height, .1, 1e3);
|
|
86
|
+
this.camera.position.z = 5;
|
|
87
|
+
this.renderer = new THREE.WebGLRenderer({
|
|
88
|
+
canvas: this.canvasRef.nativeElement,
|
|
89
|
+
antialias: true
|
|
90
|
+
});
|
|
91
|
+
this.renderer.setSize(width, height);
|
|
92
|
+
const light = new THREE.DirectionalLight(16777215, 1);
|
|
93
|
+
light.position.set(5, 5, 5).normalize();
|
|
94
|
+
this.scene.add(light);
|
|
95
|
+
}
|
|
96
|
+
loadEffect() {
|
|
97
|
+
const EffectClass = EFFECT_REGISTRY[this.effect];
|
|
98
|
+
if (!EffectClass) throw new Error(`Efecto "${this.effect}" no está registrado en EFFECT_REGISTRY`);
|
|
99
|
+
this.currentEffect = new EffectClass(this.size, this.rotationSpeed, this.elementColor);
|
|
100
|
+
this.currentEffect.init(this.scene, {});
|
|
101
|
+
}
|
|
102
|
+
animate = () => {
|
|
103
|
+
this.animationId = requestAnimationFrame(this.animate);
|
|
104
|
+
this.currentEffect.animate();
|
|
105
|
+
this.renderer.render(this.scene, this.camera);
|
|
106
|
+
};
|
|
107
|
+
onResize = () => {
|
|
108
|
+
const width = window.innerWidth;
|
|
109
|
+
const height = window.innerHeight;
|
|
110
|
+
this.camera.aspect = width / height;
|
|
111
|
+
this.camera.updateProjectionMatrix();
|
|
112
|
+
this.renderer.setSize(width, height);
|
|
113
|
+
};
|
|
114
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
115
|
+
minVersion: "12.0.0",
|
|
116
|
+
version: "22.2.4",
|
|
117
|
+
ngImport: i0,
|
|
118
|
+
type: DynamicBackgroundComponent,
|
|
119
|
+
deps: [{ token: PLATFORM_ID }],
|
|
120
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
121
|
+
});
|
|
122
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
123
|
+
minVersion: "14.0.0",
|
|
124
|
+
version: "22.2.4",
|
|
125
|
+
type: DynamicBackgroundComponent,
|
|
126
|
+
isStandalone: true,
|
|
127
|
+
selector: "lib-dynamic-background",
|
|
128
|
+
inputs: {
|
|
129
|
+
effect: "effect",
|
|
130
|
+
rotationSpeed: "rotationSpeed",
|
|
131
|
+
size: "size",
|
|
132
|
+
backgroundColor: "backgroundColor",
|
|
133
|
+
elementColor: "elementColor"
|
|
134
|
+
},
|
|
135
|
+
viewQueries: [{
|
|
136
|
+
propertyName: "canvasRef",
|
|
137
|
+
first: true,
|
|
138
|
+
predicate: ["bgCanvas"],
|
|
139
|
+
descendants: true,
|
|
140
|
+
static: true
|
|
141
|
+
}],
|
|
142
|
+
ngImport: i0,
|
|
143
|
+
template: "<canvas #bgCanvas class=\"dynamic-bg-canvas\"></canvas>\n",
|
|
144
|
+
styles: [".dynamic-bg-canvas{position:absolute;top:0;left:0;width:100%;height:100%;display:block}\n"],
|
|
145
|
+
dependencies: [{
|
|
146
|
+
kind: "ngmodule",
|
|
147
|
+
type: CommonModule
|
|
148
|
+
}],
|
|
149
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
150
|
+
});
|
|
151
|
+
};
|
|
152
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
153
|
+
minVersion: "12.0.0",
|
|
154
|
+
version: "22.2.4",
|
|
155
|
+
ngImport: i0,
|
|
156
|
+
type: DynamicBackgroundComponent,
|
|
157
|
+
decorators: [{
|
|
158
|
+
type: Component,
|
|
159
|
+
args: [{
|
|
160
|
+
selector: "lib-dynamic-background",
|
|
161
|
+
standalone: true,
|
|
162
|
+
imports: [CommonModule],
|
|
163
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
164
|
+
template: "<canvas #bgCanvas class=\"dynamic-bg-canvas\"></canvas>\n",
|
|
165
|
+
styles: [".dynamic-bg-canvas{position:absolute;top:0;left:0;width:100%;height:100%;display:block}\n"]
|
|
166
|
+
}]
|
|
167
|
+
}],
|
|
168
|
+
ctorParameters: () => [{
|
|
169
|
+
type: Object,
|
|
170
|
+
decorators: [{
|
|
171
|
+
type: Inject,
|
|
172
|
+
args: [PLATFORM_ID]
|
|
173
|
+
}]
|
|
174
|
+
}],
|
|
175
|
+
propDecorators: {
|
|
176
|
+
canvasRef: [{
|
|
177
|
+
type: ViewChild,
|
|
178
|
+
args: ["bgCanvas", { static: true }]
|
|
179
|
+
}],
|
|
180
|
+
effect: [{ type: Input }],
|
|
181
|
+
rotationSpeed: [{ type: Input }],
|
|
182
|
+
size: [{ type: Input }],
|
|
183
|
+
backgroundColor: [{ type: Input }],
|
|
184
|
+
elementColor: [{ type: Input }]
|
|
185
|
+
}
|
|
186
|
+
});
|
|
151
187
|
export { DynamicBackgroundComponent };
|
|
152
|
-
|
|
188
|
+
|
|
189
|
+
//# sourceMappingURL=lluc_llull-ui-lib-effects.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lluc_llull-ui-lib-effects.mjs","sources":["../../../projects/ui-lib/effects/dynamic-background/effects/sphere-deform/sphere-deform.effect.ts","../../../projects/ui-lib/effects/dynamic-background/effects/effect-registry.ts","../../../projects/ui-lib/effects/dynamic-background/dynamic-background.component.ts","../../../projects/ui-lib/effects/dynamic-background/dynamic-background.component.html","../../../projects/ui-lib/effects/lluc_llull-ui-lib-effects.ts"],"sourcesContent":["import * as THREE from 'three';\nimport { DynamicEffect } from '../dynamic-effect.interface';\n\nexport class SphereDeformEffect implements DynamicEffect {\n private mesh!: THREE.Mesh;\n private time = 0;\n\n constructor(\n private size: number,\n private rotationSpeed: number,\n private color?: string,\n ) {}\n\n init(scene: THREE.Scene, _options: any): void {\n const geometry = new THREE.SphereGeometry(this.size, 128, 128);\n\n const material = this.color\n ? new THREE.MeshStandardMaterial({ color: this.color, flatShading: true })\n : new THREE.MeshNormalMaterial({ flatShading: true });\n\n this.mesh = new THREE.Mesh(geometry, material);\n scene.add(this.mesh);\n }\n\n animate(): void {\n this.time += 0.02;\n const positionAttr = this.mesh.geometry.attributes['position'] as THREE.BufferAttribute;\n const vertex = new THREE.Vector3();\n\n for (let i = 0; i < positionAttr.count; i++) {\n vertex.fromBufferAttribute(positionAttr, i);\n\n const offset =\n Math.sin(vertex.x * 3 + this.time) * 0.2 +\n Math.cos(vertex.y * 5 + this.time * 0.7) * 0.2;\n\n vertex.normalize().multiplyScalar(this.size + offset);\n\n positionAttr.setXYZ(i, vertex.x, vertex.y, vertex.z);\n }\n\n positionAttr.needsUpdate = true;\n this.mesh.geometry.computeVertexNormals();\n\n this.mesh.rotation.y += this.rotationSpeed;\n }\n\n dispose(): void {\n this.mesh?.geometry.dispose();\n (this.mesh?.material as THREE.Material)?.dispose();\n }\n}\n","import { DynamicEffect } from './dynamic-effect.interface';\nimport { SphereDeformEffect } from './sphere-deform/sphere-deform.effect';\n// import { RingTransformEffect } from './ring-transform/ring-transform.effect';\n// import { ParticlesEffect } from './particles/particles.effect';\n\nexport type EffectKey = 'sphere-deform' | 'ring-transform' | 'particles';\n\nexport const EFFECT_REGISTRY: Partial<Record<EffectKey, new (...args: any[]) => DynamicEffect>> = {\n 'sphere-deform': SphereDeformEffect,\n // 'ring-transform': RingTransformEffect,\n // 'particles': ParticlesEffect,\n};\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n ViewChild,\n} from '@angular/core';\nimport * as THREE from 'three';\nimport { DynamicEffect } from './effects/dynamic-effect.interface';\nimport { EFFECT_REGISTRY, EffectKey } from './effects/effect-registry';\n\n@Component({\n selector: 'lib-dynamic-background',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './dynamic-background.component.html',\n styleUrl: './dynamic-background.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicBackgroundComponent implements OnInit, OnDestroy {\n @ViewChild('bgCanvas', { static: true }) canvasRef!: ElementRef<HTMLCanvasElement>;\n\n @Input() effect: EffectKey = 'sphere-deform';\n @Input() rotationSpeed = 0.01;\n @Input() size = 2;\n @Input() backgroundColor = '#000000';\n @Input() elementColor?: string;\n\n private scene!: THREE.Scene;\n private camera!: THREE.PerspectiveCamera;\n private renderer!: THREE.WebGLRenderer;\n private animationId!: number;\n\n private currentEffect!: DynamicEffect;\n\n constructor(@Inject(PLATFORM_ID) private readonly platformId: Object) {}\n\n get isBrowser(): boolean {\n return isPlatformBrowser(this.platformId);\n }\n\n ngOnInit(): void {\n if (this.isBrowser) {\n this.initScene();\n this.loadEffect();\n this.animate();\n window.addEventListener('resize', this.onResize);\n }\n }\n\n ngOnDestroy(): void {\n if (this.isBrowser) {\n cancelAnimationFrame(this.animationId);\n this.renderer?.dispose();\n this.currentEffect?.dispose();\n window.removeEventListener('resize', this.onResize);\n }\n }\n\n private initScene(): void {\n const width = window.innerWidth;\n const height = window.innerHeight;\n\n this.scene = new THREE.Scene();\n this.scene.background = new THREE.Color(this.backgroundColor);\n\n this.camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000);\n this.camera.position.z = 5;\n\n this.renderer = new THREE.WebGLRenderer({\n canvas: this.canvasRef.nativeElement,\n antialias: true,\n });\n this.renderer.setSize(width, height);\n\n const light = new THREE.DirectionalLight(0xffffff, 1);\n light.position.set(5, 5, 5).normalize();\n this.scene.add(light);\n }\n\n private loadEffect(): void {\n const EffectClass = EFFECT_REGISTRY[this.effect];\n if (!EffectClass) {\n throw new Error(`Efecto \"${this.effect}\" no está registrado en EFFECT_REGISTRY`);\n }\n this.currentEffect = new EffectClass(this.size, this.rotationSpeed, this.elementColor);\n this.currentEffect.init(this.scene, {});\n }\n\n private animate = (): void => {\n this.animationId = requestAnimationFrame(this.animate);\n this.currentEffect.animate();\n this.renderer.render(this.scene, this.camera);\n };\n\n private onResize = (): void => {\n const width = window.innerWidth;\n const height = window.innerHeight;\n this.camera.aspect = width / height;\n this.camera.updateProjectionMatrix();\n this.renderer.setSize(width, height);\n };\n}\n","<canvas #bgCanvas class=\"dynamic-bg-canvas\"></canvas>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lluc_llull-ui-lib-effects.mjs","names":[],"sources":["../../../projects/ui-lib/effects/dynamic-background/effects/sphere-deform/sphere-deform.effect.ts","../../../projects/ui-lib/effects/dynamic-background/effects/effect-registry.ts","../../../projects/ui-lib/effects/dynamic-background/dynamic-background.component.ts","../../../projects/ui-lib/effects/dynamic-background/dynamic-background.component.html"],"sourcesContent":["import * as THREE from 'three';\nimport { DynamicEffect } from '../dynamic-effect.interface';\n\nexport class SphereDeformEffect implements DynamicEffect {\n private mesh!: THREE.Mesh;\n private time = 0;\n\n constructor(\n private size: number,\n private rotationSpeed: number,\n private color?: string,\n ) {}\n\n init(scene: THREE.Scene, _options: any): void {\n const geometry = new THREE.SphereGeometry(this.size, 128, 128);\n\n const material = this.color\n ? new THREE.MeshStandardMaterial({ color: this.color, flatShading: true })\n : new THREE.MeshNormalMaterial({ flatShading: true });\n\n this.mesh = new THREE.Mesh(geometry, material);\n scene.add(this.mesh);\n }\n\n animate(): void {\n this.time += 0.02;\n const positionAttr = this.mesh.geometry.attributes['position'] as THREE.BufferAttribute;\n const vertex = new THREE.Vector3();\n\n for (let i = 0; i < positionAttr.count; i++) {\n vertex.fromBufferAttribute(positionAttr, i);\n\n const offset =\n Math.sin(vertex.x * 3 + this.time) * 0.2 +\n Math.cos(vertex.y * 5 + this.time * 0.7) * 0.2;\n\n vertex.normalize().multiplyScalar(this.size + offset);\n\n positionAttr.setXYZ(i, vertex.x, vertex.y, vertex.z);\n }\n\n positionAttr.needsUpdate = true;\n this.mesh.geometry.computeVertexNormals();\n\n this.mesh.rotation.y += this.rotationSpeed;\n }\n\n dispose(): void {\n this.mesh?.geometry.dispose();\n (this.mesh?.material as THREE.Material)?.dispose();\n }\n}\n","import { DynamicEffect } from './dynamic-effect.interface';\nimport { SphereDeformEffect } from './sphere-deform/sphere-deform.effect';\n// import { RingTransformEffect } from './ring-transform/ring-transform.effect';\n// import { ParticlesEffect } from './particles/particles.effect';\n\nexport type EffectKey = 'sphere-deform' | 'ring-transform' | 'particles';\n\nexport const EFFECT_REGISTRY: Partial<Record<EffectKey, new (...args: any[]) => DynamicEffect>> = {\n 'sphere-deform': SphereDeformEffect,\n // 'ring-transform': RingTransformEffect,\n // 'particles': ParticlesEffect,\n};\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n ViewChild,\n} from '@angular/core';\nimport * as THREE from 'three';\nimport { DynamicEffect } from './effects/dynamic-effect.interface';\nimport { EFFECT_REGISTRY, EffectKey } from './effects/effect-registry';\n\n@Component({\n selector: 'lib-dynamic-background',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './dynamic-background.component.html',\n styleUrl: './dynamic-background.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicBackgroundComponent implements OnInit, OnDestroy {\n @ViewChild('bgCanvas', { static: true }) canvasRef!: ElementRef<HTMLCanvasElement>;\n\n @Input() effect: EffectKey = 'sphere-deform';\n @Input() rotationSpeed = 0.01;\n @Input() size = 2;\n @Input() backgroundColor = '#000000';\n @Input() elementColor?: string;\n\n private scene!: THREE.Scene;\n private camera!: THREE.PerspectiveCamera;\n private renderer!: THREE.WebGLRenderer;\n private animationId!: number;\n\n private currentEffect!: DynamicEffect;\n\n constructor(@Inject(PLATFORM_ID) private readonly platformId: Object) {}\n\n get isBrowser(): boolean {\n return isPlatformBrowser(this.platformId);\n }\n\n ngOnInit(): void {\n if (this.isBrowser) {\n this.initScene();\n this.loadEffect();\n this.animate();\n window.addEventListener('resize', this.onResize);\n }\n }\n\n ngOnDestroy(): void {\n if (this.isBrowser) {\n cancelAnimationFrame(this.animationId);\n this.renderer?.dispose();\n this.currentEffect?.dispose();\n window.removeEventListener('resize', this.onResize);\n }\n }\n\n private initScene(): void {\n const width = window.innerWidth;\n const height = window.innerHeight;\n\n this.scene = new THREE.Scene();\n this.scene.background = new THREE.Color(this.backgroundColor);\n\n this.camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000);\n this.camera.position.z = 5;\n\n this.renderer = new THREE.WebGLRenderer({\n canvas: this.canvasRef.nativeElement,\n antialias: true,\n });\n this.renderer.setSize(width, height);\n\n const light = new THREE.DirectionalLight(0xffffff, 1);\n light.position.set(5, 5, 5).normalize();\n this.scene.add(light);\n }\n\n private loadEffect(): void {\n const EffectClass = EFFECT_REGISTRY[this.effect];\n if (!EffectClass) {\n throw new Error(`Efecto \"${this.effect}\" no está registrado en EFFECT_REGISTRY`);\n }\n this.currentEffect = new EffectClass(this.size, this.rotationSpeed, this.elementColor);\n this.currentEffect.init(this.scene, {});\n }\n\n private animate = (): void => {\n this.animationId = requestAnimationFrame(this.animate);\n this.currentEffect.animate();\n this.renderer.render(this.scene, this.camera);\n };\n\n private onResize = (): void => {\n const width = window.innerWidth;\n const height = window.innerHeight;\n this.camera.aspect = width / height;\n this.camera.updateProjectionMatrix();\n this.renderer.setSize(width, height);\n };\n}\n","<canvas #bgCanvas class=\"dynamic-bg-canvas\"></canvas>\n"],"mappings":"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"}
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
var LinkType;
|
|
2
|
-
(function
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
(function(LinkType) {
|
|
3
|
+
LinkType["Internal"] = "internal";
|
|
4
|
+
LinkType["External"] = "external";
|
|
5
|
+
LinkType["Anchor"] = "anchor";
|
|
6
|
+
LinkType["Pdf"] = "pdf";
|
|
7
|
+
LinkType["NoLink"] = "nolink";
|
|
8
8
|
})(LinkType || (LinkType = {}));
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Generated bundle index. Do not edit.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
9
|
export { LinkType };
|
|
15
|
-
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=lluc_llull-ui-lib-enums.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lluc_llull-ui-lib-enums.mjs","sources":["../../../projects/ui-lib/enums/link-type.enum.ts"
|
|
1
|
+
{"version":3,"file":"lluc_llull-ui-lib-enums.mjs","names":[],"sources":["../../../projects/ui-lib/enums/link-type.enum.ts"],"sourcesContent":["export enum LinkType {\n Internal = 'internal',\n External = 'external',\n Anchor = 'anchor',\n Pdf = 'pdf',\n NoLink = 'nolink',\n}\n"],"mappings":"AAAA,IAAY;CAAZ,SAAY,UAAQ;CAChB,SAAA,cAAA;CACA,SAAA,cAAA;CACA,SAAA,YAAA;CACA,SAAA,SAAA;CACA,SAAA,YAAA;AACJ,EAAA,CANY,aAAA,WAAQ,CAAA,EAAA"}
|