@lluc_llull/ui-lib 0.33.10 → 0.34.1

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.
Files changed (262) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/lluc_llull-ui-lib-content-asymmetric-media.mjs +85 -28
  3. package/fesm2022/lluc_llull-ui-lib-content-asymmetric-media.mjs.map +1 -1
  4. package/fesm2022/lluc_llull-ui-lib-content-category-progress.mjs +81 -30
  5. package/fesm2022/lluc_llull-ui-lib-content-category-progress.mjs.map +1 -1
  6. package/fesm2022/lluc_llull-ui-lib-content-columns-media-stacked.mjs +90 -34
  7. package/fesm2022/lluc_llull-ui-lib-content-columns-media-stacked.mjs.map +1 -1
  8. package/fesm2022/lluc_llull-ui-lib-content-contact-minimal.mjs +109 -37
  9. package/fesm2022/lluc_llull-ui-lib-content-contact-minimal.mjs.map +1 -1
  10. package/fesm2022/lluc_llull-ui-lib-content-content-document.mjs +58 -26
  11. package/fesm2022/lluc_llull-ui-lib-content-content-document.mjs.map +1 -1
  12. package/fesm2022/lluc_llull-ui-lib-content-hero-section.mjs +139 -110
  13. package/fesm2022/lluc_llull-ui-lib-content-hero-section.mjs.map +1 -1
  14. package/fesm2022/lluc_llull-ui-lib-content-media-intro.mjs +91 -34
  15. package/fesm2022/lluc_llull-ui-lib-content-media-intro.mjs.map +1 -1
  16. package/fesm2022/lluc_llull-ui-lib-content-media-split.mjs +118 -76
  17. package/fesm2022/lluc_llull-ui-lib-content-media-split.mjs.map +1 -1
  18. package/fesm2022/lluc_llull-ui-lib-content-mosaic-grid.mjs +99 -44
  19. package/fesm2022/lluc_llull-ui-lib-content-mosaic-grid.mjs.map +1 -1
  20. package/fesm2022/lluc_llull-ui-lib-content-mosaic-parallax.mjs +109 -57
  21. package/fesm2022/lluc_llull-ui-lib-content-mosaic-parallax.mjs.map +1 -1
  22. package/fesm2022/lluc_llull-ui-lib-content-section-intro.mjs +100 -37
  23. package/fesm2022/lluc_llull-ui-lib-content-section-intro.mjs.map +1 -1
  24. package/fesm2022/lluc_llull-ui-lib-content-split-previewer.mjs +133 -61
  25. package/fesm2022/lluc_llull-ui-lib-content-split-previewer.mjs.map +1 -1
  26. package/fesm2022/lluc_llull-ui-lib-content-split-showcase.mjs +99 -37
  27. package/fesm2022/lluc_llull-ui-lib-content-split-showcase.mjs.map +1 -1
  28. package/fesm2022/lluc_llull-ui-lib-content-stacked-rows.mjs +61 -29
  29. package/fesm2022/lluc_llull-ui-lib-content-stacked-rows.mjs.map +1 -1
  30. package/fesm2022/lluc_llull-ui-lib-content.mjs +1286 -502
  31. package/fesm2022/lluc_llull-ui-lib-content.mjs.map +1 -1
  32. package/fesm2022/lluc_llull-ui-lib-directives.mjs +383 -262
  33. package/fesm2022/lluc_llull-ui-lib-directives.mjs.map +1 -1
  34. package/fesm2022/lluc_llull-ui-lib-effects.mjs +187 -150
  35. package/fesm2022/lluc_llull-ui-lib-effects.mjs.map +1 -1
  36. package/fesm2022/lluc_llull-ui-lib-enums.mjs +8 -12
  37. package/fesm2022/lluc_llull-ui-lib-enums.mjs.map +1 -1
  38. package/fesm2022/lluc_llull-ui-lib-feedback-404.mjs +97 -34
  39. package/fesm2022/lluc_llull-ui-lib-feedback-404.mjs.map +1 -1
  40. package/fesm2022/lluc_llull-ui-lib-feedback.mjs +97 -34
  41. package/fesm2022/lluc_llull-ui-lib-feedback.mjs.map +1 -1
  42. package/fesm2022/lluc_llull-ui-lib-footers-columns-footer.mjs +65 -27
  43. package/fesm2022/lluc_llull-ui-lib-footers-columns-footer.mjs.map +1 -1
  44. package/fesm2022/lluc_llull-ui-lib-footers-legal-footer.mjs +74 -37
  45. package/fesm2022/lluc_llull-ui-lib-footers-legal-footer.mjs.map +1 -1
  46. package/fesm2022/lluc_llull-ui-lib-footers-links-footer.mjs +59 -24
  47. package/fesm2022/lluc_llull-ui-lib-footers-links-footer.mjs.map +1 -1
  48. package/fesm2022/lluc_llull-ui-lib-footers-social-footer.mjs +95 -32
  49. package/fesm2022/lluc_llull-ui-lib-footers-social-footer.mjs.map +1 -1
  50. package/fesm2022/lluc_llull-ui-lib-footers-visual-footer.mjs +84 -45
  51. package/fesm2022/lluc_llull-ui-lib-footers-visual-footer.mjs.map +1 -1
  52. package/fesm2022/lluc_llull-ui-lib-footers.mjs +354 -125
  53. package/fesm2022/lluc_llull-ui-lib-footers.mjs.map +1 -1
  54. package/fesm2022/lluc_llull-ui-lib-headers-header-clear.mjs +153 -78
  55. package/fesm2022/lluc_llull-ui-lib-headers-header-clear.mjs.map +1 -1
  56. package/fesm2022/lluc_llull-ui-lib-headers-header-mobile.mjs +153 -78
  57. package/fesm2022/lluc_llull-ui-lib-headers-header-mobile.mjs.map +1 -1
  58. package/fesm2022/lluc_llull-ui-lib-headers.mjs +296 -142
  59. package/fesm2022/lluc_llull-ui-lib-headers.mjs.map +1 -1
  60. package/fesm2022/lluc_llull-ui-lib-interfaces.mjs +0 -4
  61. package/fesm2022/lluc_llull-ui-lib-mapper.mjs +242 -264
  62. package/fesm2022/lluc_llull-ui-lib-mapper.mjs.map +1 -1
  63. package/fesm2022/lluc_llull-ui-lib-modals.mjs +163 -65
  64. package/fesm2022/lluc_llull-ui-lib-modals.mjs.map +1 -1
  65. package/fesm2022/lluc_llull-ui-lib-screen-sizer.mjs +106 -97
  66. package/fesm2022/lluc_llull-ui-lib-screen-sizer.mjs.map +1 -1
  67. package/fesm2022/lluc_llull-ui-lib-shared.mjs +303 -148
  68. package/fesm2022/lluc_llull-ui-lib-shared.mjs.map +1 -1
  69. package/fesm2022/lluc_llull-ui-lib-sliders.mjs +72 -52
  70. package/fesm2022/lluc_llull-ui-lib-sliders.mjs.map +1 -1
  71. package/fesm2022/lluc_llull-ui-lib-theme.mjs +78 -80
  72. package/fesm2022/lluc_llull-ui-lib-theme.mjs.map +1 -1
  73. package/fesm2022/lluc_llull-ui-lib-utils.mjs +42 -64
  74. package/fesm2022/lluc_llull-ui-lib-utils.mjs.map +1 -1
  75. package/fesm2022/lluc_llull-ui-lib.mjs +42 -27
  76. package/fesm2022/lluc_llull-ui-lib.mjs.map +1 -1
  77. package/package.json +86 -85
  78. package/types/lluc_llull-ui-lib-content-asymmetric-media.d.ts +21 -0
  79. package/types/lluc_llull-ui-lib-content-category-progress.d.ts +34 -0
  80. package/types/lluc_llull-ui-lib-content-columns-media-stacked.d.ts +33 -0
  81. package/types/lluc_llull-ui-lib-content-contact-minimal.d.ts +39 -0
  82. package/types/lluc_llull-ui-lib-content-content-document.d.ts +24 -0
  83. package/types/lluc_llull-ui-lib-content-hero-section.d.ts +62 -0
  84. package/types/lluc_llull-ui-lib-content-media-intro.d.ts +33 -0
  85. package/types/lluc_llull-ui-lib-content-media-split.d.ts +36 -0
  86. package/types/lluc_llull-ui-lib-content-mosaic-grid.d.ts +27 -0
  87. package/types/lluc_llull-ui-lib-content-mosaic-parallax.d.ts +35 -0
  88. package/types/lluc_llull-ui-lib-content-section-intro.d.ts +33 -0
  89. package/types/lluc_llull-ui-lib-content-split-previewer.d.ts +47 -0
  90. package/types/lluc_llull-ui-lib-content-split-showcase.d.ts +43 -0
  91. package/types/lluc_llull-ui-lib-content-stacked-rows.d.ts +30 -0
  92. package/types/lluc_llull-ui-lib-content.d.ts +471 -0
  93. package/types/lluc_llull-ui-lib-directives.d.ts +93 -0
  94. package/types/lluc_llull-ui-lib-effects.d.ts +50 -0
  95. package/types/lluc_llull-ui-lib-enums.d.ts +7 -0
  96. package/types/lluc_llull-ui-lib-feedback-404.d.ts +33 -0
  97. package/types/lluc_llull-ui-lib-feedback.d.ts +33 -0
  98. package/types/lluc_llull-ui-lib-footers-columns-footer.d.ts +30 -0
  99. package/types/lluc_llull-ui-lib-footers-legal-footer.d.ts +40 -0
  100. package/types/lluc_llull-ui-lib-footers-links-footer.d.ts +15 -0
  101. package/types/lluc_llull-ui-lib-footers-social-footer.d.ts +27 -0
  102. package/types/lluc_llull-ui-lib-footers-visual-footer.d.ts +57 -0
  103. package/types/lluc_llull-ui-lib-footers.d.ts +161 -0
  104. package/types/lluc_llull-ui-lib-headers-header-clear.d.ts +68 -0
  105. package/types/lluc_llull-ui-lib-headers-header-mobile.d.ts +68 -0
  106. package/types/lluc_llull-ui-lib-headers.d.ts +132 -0
  107. package/types/lluc_llull-ui-lib-interfaces.d.ts +92 -0
  108. package/types/lluc_llull-ui-lib-mapper.d.ts +40 -0
  109. package/types/lluc_llull-ui-lib-modals.d.ts +47 -0
  110. package/types/lluc_llull-ui-lib-screen-sizer.d.ts +34 -0
  111. package/types/lluc_llull-ui-lib-shared.d.ts +99 -0
  112. package/types/lluc_llull-ui-lib-sliders.d.ts +17 -0
  113. package/types/lluc_llull-ui-lib-theme.d.ts +16 -0
  114. package/{utils/utils.d.ts → types/lluc_llull-ui-lib-utils.d.ts} +2 -2
  115. package/types/lluc_llull-ui-lib.d.ts +5 -0
  116. package/content/asymmetric-media/asymmetric-media.component.d.ts +0 -8
  117. package/content/asymmetric-media/asymmetric-media.interface.d.ts +0 -5
  118. package/content/asymmetric-media/index.d.ts +0 -2
  119. package/content/category-progress/category-progress.component.d.ts +0 -16
  120. package/content/category-progress/category-progress.interface.d.ts +0 -6
  121. package/content/category-progress/index.d.ts +0 -2
  122. package/content/columns-media-stacked/columns-media-stacked.component.d.ts +0 -10
  123. package/content/columns-media-stacked/columns-media-stacked.interface.d.ts +0 -7
  124. package/content/columns-media-stacked/index.d.ts +0 -2
  125. package/content/contact-minimal/contact-minimal.component.d.ts +0 -11
  126. package/content/contact-minimal/contact-minimal.interface.d.ts +0 -8
  127. package/content/contact-minimal/index.d.ts +0 -2
  128. package/content/content-document/content-document.component.d.ts +0 -11
  129. package/content/content-document/content-document.interface.d.ts +0 -5
  130. package/content/content-document/index.d.ts +0 -2
  131. package/content/hero-section/hero-section.component.d.ts +0 -19
  132. package/content/hero-section/hero-section.interface.d.ts +0 -11
  133. package/content/hero-section/hero-section.stories.d.ts +0 -7
  134. package/content/hero-section/index.d.ts +0 -3
  135. package/content/index.d.ts +0 -14
  136. package/content/media-intro/index.d.ts +0 -2
  137. package/content/media-intro/media-intro.component.d.ts +0 -10
  138. package/content/media-intro/media-intro.interface.d.ts +0 -7
  139. package/content/media-split/index.d.ts +0 -2
  140. package/content/media-split/media-split.component.d.ts +0 -18
  141. package/content/media-split/media-split.interface.d.ts +0 -6
  142. package/content/mosaic-grid/index.d.ts +0 -2
  143. package/content/mosaic-grid/mosaic-grid.component.d.ts +0 -14
  144. package/content/mosaic-grid/mosaic-grid.interface.d.ts +0 -5
  145. package/content/mosaic-parallax/index.d.ts +0 -2
  146. package/content/mosaic-parallax/mosaic-parallax.component.d.ts +0 -17
  147. package/content/mosaic-parallax/mosaic-parallax.interface.d.ts +0 -6
  148. package/content/section-intro/index.d.ts +0 -2
  149. package/content/section-intro/section-intro.component.d.ts +0 -11
  150. package/content/section-intro/section-intro.interface.d.ts +0 -2
  151. package/content/split-previewer/index.d.ts +0 -2
  152. package/content/split-previewer/split-previewer.component.d.ts +0 -24
  153. package/content/split-previewer/split-previewer.interface.d.ts +0 -8
  154. package/content/split-showcase/index.d.ts +0 -2
  155. package/content/split-showcase/split-showcase.component.d.ts +0 -15
  156. package/content/split-showcase/split-showcase.interface.d.ts +0 -9
  157. package/content/stacked-rows/index.d.ts +0 -2
  158. package/content/stacked-rows/stacked-rows.component.d.ts +0 -12
  159. package/content/stacked-rows/stacked-rows.interface.d.ts +0 -6
  160. package/directives/header-scroll.directive.d.ts +0 -8
  161. package/directives/highlight.directive.d.ts +0 -14
  162. package/directives/index.d.ts +0 -4
  163. package/directives/link-type.directive.d.ts +0 -26
  164. package/directives/scroll-reveal.directive.d.ts +0 -15
  165. package/effects/dynamic-background/dynamic-background.component.d.ts +0 -27
  166. package/effects/dynamic-background/effects/dynamic-effect.interface.d.ts +0 -6
  167. package/effects/dynamic-background/effects/effect-registry.d.ts +0 -3
  168. package/effects/dynamic-background/effects/sphere-deform/sphere-deform.effect.d.ts +0 -13
  169. package/effects/dynamic-background/index.d.ts +0 -1
  170. package/effects/index.d.ts +0 -1
  171. package/enums/index.d.ts +0 -1
  172. package/enums/link-type.enum.d.ts +0 -7
  173. package/feedback/404/404.component.d.ts +0 -10
  174. package/feedback/404/404.inteface.d.ts +0 -7
  175. package/feedback/404/index.d.ts +0 -2
  176. package/feedback/index.d.ts +0 -1
  177. package/fesm2022/lluc_llull-ui-lib-interfaces.mjs.map +0 -1
  178. package/footers/columns-footer/columns-footer.component.d.ts +0 -17
  179. package/footers/columns-footer/columns-footer.interface.d.ts +0 -5
  180. package/footers/columns-footer/index.d.ts +0 -2
  181. package/footers/index.d.ts +0 -5
  182. package/footers/legal-footer/index.d.ts +0 -2
  183. package/footers/legal-footer/legal-footer.component.d.ts +0 -12
  184. package/footers/legal-footer/legal-footer.interface.d.ts +0 -9
  185. package/footers/links-footer/index.d.ts +0 -2
  186. package/footers/links-footer/links-footer.component.d.ts +0 -7
  187. package/footers/links-footer/links-footer.interface.d.ts +0 -4
  188. package/footers/social-footer/index.d.ts +0 -2
  189. package/footers/social-footer/social-footer.component.d.ts +0 -9
  190. package/footers/social-footer/social-footer.interface.d.ts +0 -6
  191. package/footers/visual-footer/index.d.ts +0 -2
  192. package/footers/visual-footer/visual-footer.component.d.ts +0 -14
  193. package/footers/visual-footer/visual-footer.interface.d.ts +0 -11
  194. package/headers/header-clear/header-clear.component.d.ts +0 -28
  195. package/headers/header-clear/header-clear.interface.d.ts +0 -9
  196. package/headers/header-clear/index.d.ts +0 -2
  197. package/headers/header-mobile/header-mobile.component.d.ts +0 -28
  198. package/headers/header-mobile/header-mobile.interface.d.ts +0 -9
  199. package/headers/header-mobile/index.d.ts +0 -2
  200. package/headers/index.d.ts +0 -2
  201. package/index.d.ts +0 -5
  202. package/interfaces/index.d.ts +0 -8
  203. package/interfaces/page-config.interface.d.ts +0 -22
  204. package/interfaces/site-config.interface.d.ts +0 -21
  205. package/interfaces/ui-lib-address.interface.d.ts +0 -7
  206. package/interfaces/ui-lib-button.interface.d.ts +0 -7
  207. package/interfaces/ui-lib-image.interface.d.ts +0 -10
  208. package/interfaces/ui-lib-lang-item.interface.d.ts +0 -5
  209. package/interfaces/ui-lib-nav-items.interface.d.ts +0 -17
  210. package/interfaces/ui-lib-texts.interface.d.ts +0 -6
  211. package/lib/ui-lib.component.d.ts +0 -5
  212. package/mapper/cdn.token.d.ts +0 -2
  213. package/mapper/cloudinary.token.d.ts +0 -2
  214. package/mapper/component-mappers/404.mapper.d.ts +0 -2
  215. package/mapper/component-mappers/asymmetric-media.mapper.d.ts +0 -2
  216. package/mapper/component-mappers/category-progress.mapper.d.ts +0 -2
  217. package/mapper/component-mappers/columns-footer.mapper.d.ts +0 -2
  218. package/mapper/component-mappers/columns-media-stacked.mapper.d.ts +0 -2
  219. package/mapper/component-mappers/contact-minimal.mapper.d.ts +0 -2
  220. package/mapper/component-mappers/content-document.mapper.d.ts +0 -2
  221. package/mapper/component-mappers/header-clear.mapper.d.ts +0 -2
  222. package/mapper/component-mappers/hero-section.mapper.d.ts +0 -2
  223. package/mapper/component-mappers/index.d.ts +0 -24
  224. package/mapper/component-mappers/lang-modal.mapper.d.ts +0 -2
  225. package/mapper/component-mappers/legal-footer.mapper.d.ts +0 -2
  226. package/mapper/component-mappers/links-footer.mapper.d.ts +0 -2
  227. package/mapper/component-mappers/media-intro.mapper.d.ts +0 -2
  228. package/mapper/component-mappers/media-split.mapper.d.ts +0 -2
  229. package/mapper/component-mappers/mosaic-grid.mapper.d.ts +0 -2
  230. package/mapper/component-mappers/mosaic-parallax.mapper.d.ts +0 -2
  231. package/mapper/component-mappers/nav-modal.mapper.d.ts +0 -3
  232. package/mapper/component-mappers/section-intro.mapper.d.ts +0 -2
  233. package/mapper/component-mappers/social-footer.mapper.d.ts +0 -2
  234. package/mapper/component-mappers/split-previewer.mapper.d.ts +0 -2
  235. package/mapper/component-mappers/split-showcase.mapper.d.ts +0 -2
  236. package/mapper/component-mappers/stacked-rows.mapper.d.ts +0 -2
  237. package/mapper/component-mappers/types.d.ts +0 -1
  238. package/mapper/component-mappers/visual-footer.mapper.d.ts +0 -2
  239. package/mapper/index.d.ts +0 -4
  240. package/mapper/mapper.service.d.ts +0 -10
  241. package/modals/index.d.ts +0 -2
  242. package/modals/lang-modal/index.d.ts +0 -2
  243. package/modals/lang-modal/lang-modal.component.d.ts +0 -18
  244. package/modals/lang-modal/lang-modal.interface.d.ts +0 -2
  245. package/modals/nav-modal/index.d.ts +0 -2
  246. package/modals/nav-modal/nav-modal.component.d.ts +0 -11
  247. package/modals/nav-modal/nav-modal.interface.d.ts +0 -5
  248. package/public-api.d.ts +0 -1
  249. package/screen-sizer/index.d.ts +0 -1
  250. package/screen-sizer/screen-sizer.service.d.ts +0 -34
  251. package/shared/index.d.ts +0 -2
  252. package/shared/ui-icon/index.d.ts +0 -3
  253. package/shared/ui-icon/ui-icon.component.d.ts +0 -15
  254. package/shared/ui-icon/ui-icon.interface.d.ts +0 -5
  255. package/shared/ui-icon/ui-icon.mock.d.ts +0 -8
  256. package/shared/ui-image/index.d.ts +0 -1
  257. package/shared/ui-image/ui-image.component.d.ts +0 -21
  258. package/sliders/index.d.ts +0 -1
  259. package/sliders/swiper.directive.d.ts +0 -12
  260. package/theme/index.d.ts +0 -1
  261. package/theme/theme.service.d.ts +0 -16
  262. 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 { isPlatformBrowser, CommonModule } from '@angular/common';
2
- import * as i0 from '@angular/core';
3
- import { PLATFORM_ID, Input, ViewChild, Inject, ChangeDetectionStrategy, Component } from '@angular/core';
4
- import * as THREE from 'three';
5
-
6
- class SphereDeformEffect {
7
- size;
8
- rotationSpeed;
9
- color;
10
- mesh;
11
- time = 0;
12
- constructor(size, rotationSpeed, color) {
13
- this.size = size;
14
- this.rotationSpeed = rotationSpeed;
15
- this.color = color;
16
- }
17
- init(scene, _options) {
18
- const geometry = new THREE.SphereGeometry(this.size, 128, 128);
19
- const material = this.color
20
- ? new THREE.MeshStandardMaterial({ color: this.color, 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 += 0.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) * 0.2 +
32
- Math.cos(vertex.y * 5 + this.time * 0.7) * 0.2;
33
- vertex.normalize().multiplyScalar(this.size + offset);
34
- positionAttr.setXYZ(i, vertex.x, vertex.y, vertex.z);
35
- }
36
- positionAttr.needsUpdate = true;
37
- this.mesh.geometry.computeVertexNormals();
38
- this.mesh.rotation.y += this.rotationSpeed;
39
- }
40
- dispose() {
41
- this.mesh?.geometry.dispose();
42
- this.mesh?.material?.dispose();
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
- platformId;
54
- canvasRef;
55
- effect = 'sphere-deform';
56
- rotationSpeed = 0.01;
57
- size = 2;
58
- backgroundColor = '#000000';
59
- elementColor;
60
- scene;
61
- camera;
62
- renderer;
63
- animationId;
64
- currentEffect;
65
- constructor(platformId) {
66
- this.platformId = platformId;
67
- }
68
- get isBrowser() {
69
- return isPlatformBrowser(this.platformId);
70
- }
71
- ngOnInit() {
72
- if (this.isBrowser) {
73
- this.initScene();
74
- this.loadEffect();
75
- this.animate();
76
- window.addEventListener('resize', this.onResize);
77
- }
78
- }
79
- ngOnDestroy() {
80
- if (this.isBrowser) {
81
- cancelAnimationFrame(this.animationId);
82
- this.renderer?.dispose();
83
- this.currentEffect?.dispose();
84
- window.removeEventListener('resize', this.onResize);
85
- }
86
- }
87
- initScene() {
88
- const width = window.innerWidth;
89
- const height = window.innerHeight;
90
- this.scene = new THREE.Scene();
91
- this.scene.background = new THREE.Color(this.backgroundColor);
92
- this.camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000);
93
- this.camera.position.z = 5;
94
- this.renderer = new THREE.WebGLRenderer({
95
- canvas: this.canvasRef.nativeElement,
96
- antialias: true,
97
- });
98
- this.renderer.setSize(width, height);
99
- const light = new THREE.DirectionalLight(0xffffff, 1);
100
- light.position.set(5, 5, 5).normalize();
101
- this.scene.add(light);
102
- }
103
- loadEffect() {
104
- const EffectClass = EFFECT_REGISTRY[this.effect];
105
- if (!EffectClass) {
106
- throw new Error(`Efecto "${this.effect}" no está registrado en EFFECT_REGISTRY`);
107
- }
108
- this.currentEffect = new EffectClass(this.size, this.rotationSpeed, this.elementColor);
109
- this.currentEffect.init(this.scene, {});
110
- }
111
- animate = () => {
112
- this.animationId = requestAnimationFrame(this.animate);
113
- this.currentEffect.animate();
114
- this.renderer.render(this.scene, this.camera);
115
- };
116
- onResize = () => {
117
- const width = window.innerWidth;
118
- const height = window.innerHeight;
119
- this.camera.aspect = width / height;
120
- this.camera.updateProjectionMatrix();
121
- this.renderer.setSize(width, height);
122
- };
123
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: DynamicBackgroundComponent, deps: [{ token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
124
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: DynamicBackgroundComponent, isStandalone: true, selector: "lib-dynamic-background", inputs: { effect: "effect", rotationSpeed: "rotationSpeed", size: "size", backgroundColor: "backgroundColor", elementColor: "elementColor" }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["bgCanvas"], descendants: true, static: true }], ngImport: i0, template: "<canvas #bgCanvas class=\"dynamic-bg-canvas\"></canvas>\n", styles: [".dynamic-bg-canvas{position:absolute;top:0;left:0;width:100%;height:100%;display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
125
- }
126
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: DynamicBackgroundComponent, decorators: [{
127
- type: Component,
128
- args: [{ selector: 'lib-dynamic-background', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<canvas #bgCanvas class=\"dynamic-bg-canvas\"></canvas>\n", styles: [".dynamic-bg-canvas{position:absolute;top:0;left:0;width:100%;height:100%;display:block}\n"] }]
129
- }], ctorParameters: () => [{ type: Object, decorators: [{
130
- type: Inject,
131
- args: [PLATFORM_ID]
132
- }] }], propDecorators: { canvasRef: [{
133
- type: ViewChild,
134
- args: ['bgCanvas', { static: true }]
135
- }], effect: [{
136
- type: Input
137
- }], rotationSpeed: [{
138
- type: Input
139
- }], size: [{
140
- type: Input
141
- }], backgroundColor: [{
142
- type: Input
143
- }], elementColor: [{
144
- type: Input
145
- }] } });
146
-
147
- /**
148
- * Generated bundle index. Do not edit.
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
- //# sourceMappingURL=lluc_llull-ui-lib-effects.mjs.map
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 (LinkType) {
3
- LinkType["Internal"] = "internal";
4
- LinkType["External"] = "external";
5
- LinkType["Anchor"] = "anchor";
6
- LinkType["Pdf"] = "pdf";
7
- LinkType["NoLink"] = "nolink";
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
- //# sourceMappingURL=lluc_llull-ui-lib-enums.mjs.map
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","../../../projects/ui-lib/enums/lluc_llull-ui-lib-enums.ts"],"sourcesContent":["export enum LinkType {\n Internal = 'internal',\n External = 'external',\n Anchor = 'anchor',\n Pdf = 'pdf',\n NoLink = 'nolink',\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"IAAY;AAAZ,CAAA,UAAY,QAAQ,EAAA;AAChB,IAAA,QAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,QAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,QAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,QAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,QAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACrB,CAAC,EANW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;;ACApB;;AAEG;;;;"}
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"}