libreria-astro-lefebvre 0.0.194 → 0.1.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "libreria-astro-lefebvre",
3
- "version": "0.0.194",
3
+ "version": "0.1.2",
4
4
  "description": "Librería de componentes Astro, React y Vue para Lefebvre",
5
5
  "author": "Equipo web desarrollo Lefebvre",
6
6
  "type": "module",
@@ -0,0 +1,31 @@
1
+ import type { ComponentMetadata } from '../interfaces/types';
2
+
3
+ export const metadata: ComponentMetadata = {
4
+ component_name: 'Formulario_2026_Carabanchel',
5
+ category: 'Formulario',
6
+ name: 'Formulario básico de LF2',
7
+ description: 'Inserta un formulario de LF2',
8
+ framework: 'Astro',
9
+ priority: 1,
10
+ tags: ['formulario', 'lf2', 'basico'],
11
+ fields: [
12
+ {
13
+ name: 'lf2FormTitle',
14
+ type: 'text',
15
+ help: 'Título del formulario de LF2',
16
+ label: 'Título del formulario LF2',
17
+ mandatory: true,
18
+ example_value: 'Prueba GenIA-L gratis'
19
+ },
20
+ {
21
+ name: 'cargarDependencias',
22
+ type: 'boolean',
23
+ help: 'Mete la dependencia JS de LF2 en mitad del DOM',
24
+ label: 'Cargar dependencias JS',
25
+ mandatory: false,
26
+ options: ['false', 'true'],
27
+ options_labels: ['Falso', 'Verdadero'],
28
+ example_value: false
29
+ }
30
+ ]
31
+ };
@@ -0,0 +1,47 @@
1
+ import type { ComponentMetadata } from '../interfaces/types';
2
+
3
+ export const metadata: ComponentMetadata = {
4
+ component_name: 'Imagen_2026_Algar',
5
+ category: 'Contenido de Imagen',
6
+ name: 'Imagen básica con borde redondeado opcional y enlace opcional 2026',
7
+ description: 'Componente básico que renderiza una única imagen de Limbo a ancho completo del contenedor padre. Sin padding ni margen lateral propio. Opciones: activar/desactivar borde redondeado (rounded-2xl) y envolver la imagen en un <a> clicable si se rellena el campo "Enlace".',
8
+ framework: 'Astro',
9
+ priority: 1,
10
+ tags: ['basico', 'imagen'],
11
+ fields: [
12
+ {
13
+ name: 'image',
14
+ type: 'image',
15
+ help: 'Imagen a renderizar. Selecciónala con el gestor Limbo. Se muestra a ancho completo del contenedor padre, manteniendo proporción (h-auto).',
16
+ label: 'Imagen',
17
+ mandatory: true,
18
+ example_value: 'https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png'
19
+ },
20
+ {
21
+ name: 'rounded',
22
+ type: 'boolean',
23
+ help: 'Si está activado, aplica esquinas redondeadas (rounded-2xl) a la imagen.',
24
+ label: 'Borde redondeado',
25
+ mandatory: false,
26
+ options: ['false', 'true'],
27
+ options_labels: ['No', 'Sí'],
28
+ example_value: false
29
+ },
30
+ {
31
+ name: 'link',
32
+ type: 'text',
33
+ help: 'URL opcional. Si se rellena, la imagen queda envuelta en un <a href> y se hace clicable. Si se deja vacío, la imagen se renderiza sin enlace.',
34
+ label: 'Enlace (opcional)',
35
+ mandatory: false,
36
+ example_value: ''
37
+ },
38
+ {
39
+ name: 'altImage',
40
+ type: 'text',
41
+ help: 'Texto alternativo de la imagen (atributo alt). Importante para accesibilidad y SEO. Si la imagen es decorativa, déjalo vacío.',
42
+ label: 'Texto alternativo (alt)',
43
+ mandatory: false,
44
+ example_value: 'Imagen descriptiva'
45
+ }
46
+ ]
47
+ };
@@ -0,0 +1,81 @@
1
+ import type { ComponentMetadata } from '../interfaces/types';
2
+
3
+ export const metadata: ComponentMetadata = {
4
+ component_name: 'Texto_2026_Castellon',
5
+ category: 'Contenido de Texto',
6
+ name: 'Texto básico con pretítulo, título configurable, descripción y botón opcional 2026',
7
+ description: 'Bloque de texto sencillo y responsive sin padding ni margen lateral propio (el contenedor padre controla el ancho útil). Contiene: pretítulo opcional (span pequeño, no es heading), título principal con etiqueta HTML elegible (h1, h1-40, h2-h6) y alineación configurable (izquierda/centro/derecha), descripción opcional a ancho completo (admite HTML), y botón CTA opcional con texto y URL. Pensado como componente "básico" de texto.',
8
+ framework: 'Astro',
9
+ priority: 1,
10
+ tags: ['basico', 'texto', 'titulo', 'cta'],
11
+ fields: [
12
+ {
13
+ name: 'pretitle',
14
+ type: 'text',
15
+ help: 'Pretítulo opcional que aparece encima del título. NO es un heading (se renderiza como <span>). Admite HTML. Solo se muestra si tiene valor. Hereda la alineación del título.',
16
+ label: 'Pretítulo',
17
+ mandatory: false,
18
+ example_value: 'Novedad 2026'
19
+ },
20
+ {
21
+ name: 'title',
22
+ type: 'text',
23
+ help: 'Título principal. Admite HTML. La etiqueta HTML (h1-h6) se elige en el campo "Etiqueta del título". El estilo visual es el mismo para cualquier etiqueta; solo cambia la semántica/SEO.',
24
+ label: 'Texto del título',
25
+ mandatory: true,
26
+ example_value: 'Inteligencia artificial al servicio del Derecho'
27
+ },
28
+ {
29
+ name: 'titleTag',
30
+ type: 'select',
31
+ help: 'Etiqueta HTML y estilo visual del título. Variantes: "h1" 36-56px con padding lateral; "h1-40" 40px con mb-8; "h2" 36-40px; "h3" 2xl semibold; "h4" 20px semibold; "h5" y "h6" sin estilos complejos. La alineación horizontal se controla con el campo "Alineación".',
32
+ label: 'Etiqueta del título',
33
+ options: ['h1', 'h1-40', 'h2', 'h3', 'h4', 'h5', 'h6'],
34
+ options_labels: ['H1 (36-56px)', 'H1 40px', 'H2 (36-40px)', 'H3 (2xl semibold)', 'H4 (20px semibold)', 'H5', 'H6'],
35
+ example_value: 'h2'
36
+ },
37
+ {
38
+ name: 'titleAlign',
39
+ type: 'select',
40
+ help: 'Alineación horizontal del pretítulo, del título y del botón. La descripción siempre se renderiza a ancho completo, sin alineación configurable.',
41
+ label: 'Alineación del título',
42
+ options: ['left', 'center', 'right'],
43
+ options_labels: ['Izquierda', 'Centro', 'Derecha'],
44
+ example_value: 'left'
45
+ },
46
+ {
47
+ name: 'description',
48
+ type: 'textArea',
49
+ help: 'Descripción a ancho completo del contenedor padre. Admite HTML (editor enriquecido). Solo se muestra si tiene valor.',
50
+ label: 'Descripción',
51
+ mandatory: false,
52
+ example_value: '<p>Descubre cómo la IA jurídica transforma el trabajo diario de los despachos de abogados.</p>'
53
+ },
54
+ {
55
+ name: 'showBtn',
56
+ type: 'boolean',
57
+ help: 'Si está activado, muestra el botón CTA al final del bloque. Su posición horizontal sigue la alineación del título.',
58
+ label: 'Mostrar botón',
59
+ mandatory: false,
60
+ options: ['false', 'true'],
61
+ options_labels: ['No', 'Sí'],
62
+ example_value: false
63
+ },
64
+ {
65
+ name: 'btnLabel',
66
+ type: 'text',
67
+ help: 'Texto visible del botón. Solo se renderiza si "Mostrar botón" está activado.',
68
+ label: 'Texto del botón',
69
+ mandatory: false,
70
+ example_value: 'Más información'
71
+ },
72
+ {
73
+ name: 'btnSrc',
74
+ type: 'text',
75
+ help: 'URL de destino del botón (atributo href del <a>). Solo se usa si "Mostrar botón" está activado.',
76
+ label: 'Enlace del botón',
77
+ mandatory: false,
78
+ example_value: 'https://www.lefebvre.es'
79
+ }
80
+ ]
81
+ };
@@ -55,7 +55,7 @@ const categories = [
55
55
 
56
56
  ---
57
57
 
58
- <footer>
58
+ <footer class="w-full">
59
59
  <div class="bg-white text-[#363942] py-10 border-t border-gray-300">
60
60
  <div class="max-w-7xl flex-wrap md:flex-nowrap w-full px-4 md:px-0 flex items-start mx-auto">
61
61
  {categories.map(category => (
@@ -0,0 +1,37 @@
1
+ ---
2
+ import { resolveLf2ResourceUrl } from '../../lib/functions.js';
3
+
4
+ const {
5
+ lf2FormTitle = "Formulario de contacto",
6
+ cargarDependencias = false,
7
+ isProd = true,
8
+ } = Astro.props;
9
+
10
+ const idTargetLf2 = 'lf2-form-' + Math.random().toString(36).substring(2, 15);
11
+ const LF2_RESOURCE_URL = resolveLf2ResourceUrl(isProd);
12
+ ---
13
+ <div id={idTargetLf2} class="w-full flex flex-col mx-auto gap-3"></div>
14
+ {cargarDependencias && (
15
+ <script src={LF2_RESOURCE_URL} is:inline></script>
16
+ )}
17
+
18
+ <script is:client define:vars={{ idTargetLf2 , lf2FormTitle}}>
19
+ document.addEventListener('DOMContentLoaded', () => {
20
+
21
+ let defaultParameters = {};
22
+
23
+ let configLf2 = {
24
+ fake: true,
25
+ formulario: lf2FormTitle,
26
+ bootstrap: true,
27
+ target: '#'+idTargetLf2,
28
+ defaultparameters: defaultParameters,
29
+ };
30
+ try {
31
+ apiManager.pintarFormularioAutogestionado(configLf2);
32
+ } catch (error) {
33
+ var apiManager = new LeadformApiManagerClass();
34
+ apiManager.pintarFormularioAutogestionado(configLf2);
35
+ }
36
+ });
37
+ </script>
@@ -0,0 +1,18 @@
1
+ ---
2
+ import LimboImage from '../LimboImage.astro';
3
+
4
+ const {
5
+ image,
6
+ link = '',
7
+ altImage = '',
8
+ } = Astro.props;
9
+
10
+ ---
11
+
12
+ {link && link !== '' ? (
13
+ <a href={link} class="flex w-full">
14
+ <LimboImage src={image} alt={altImage} class="flex w-full h-auto rounded-2xl" />
15
+ </a>
16
+ ) : (
17
+ <LimboImage src={image} alt={altImage} class="flex w-full h-auto rounded-2xl" />
18
+ )}
@@ -0,0 +1,33 @@
1
+ ---
2
+ const {
3
+ pretitle = '',
4
+ title = '',
5
+ titleTag = 'h2',
6
+ titleAlign = 'left',
7
+ description = '',
8
+ showBtn = true,
9
+ btnLabel = '',
10
+ btnSrc = '#',
11
+ } = Astro.props;
12
+
13
+ const alignClass = titleAlign === 'center' ? 'text-center' : titleAlign === 'right' ? 'text-right' : 'text-left';
14
+ const btnSelf = titleAlign === 'center' ? 'self-center' : titleAlign === 'right' ? 'self-end' : 'self-start';
15
+ ---
16
+
17
+ <section class="w-full flex flex-col gap-4">
18
+ {pretitle && <span class={`block w-full font-inter text-[#363942] text-sm md:text-base font-normal ${alignClass}`} set:html={pretitle}></span>}
19
+
20
+ {title && titleTag === 'h1' && <h1 class={`font-poppins text-[#262626] text-[36px] md:text-[56px] font-normal ${alignClass} leading-[44px] md:leading-[64px] px-6 md:my-12`} set:html={title}></h1>}
21
+ {title && titleTag === 'h1-40' && <h1 class={`font-poppins text-[#262626] text-[40px] font-normal ${alignClass} leading-[48px] mb-8`} set:html={title}></h1>}
22
+ {title && titleTag === 'h2' && <h2 class={`font-poppins text-[#262626] text-[36px] md:text-[40px] font-normal ${alignClass} leading-[48px] my-8 md:mb-8`} set:html={title}></h2>}
23
+ {title && titleTag === 'h3' && <h3 class={`font-poppins text-[#262626] text-2xl font-semibold ${alignClass} mb-2`} set:html={title}></h3>}
24
+ {title && titleTag === 'h4' && <h4 class={`font-poppins text-[#262626] ${alignClass} text-[20px] font-semibold leading-7 mb-4`} set:html={title}></h4>}
25
+ {title && titleTag === 'h5' && <h5 class={`font-poppins text-[#262626] ${alignClass}`} set:html={title}></h5>}
26
+ {title && titleTag === 'h6' && <h6 class={`font-poppins text-[#262626] ${alignClass}`} set:html={title}></h6>}
27
+
28
+ {description && <div class="w-full font-inter text-[#363942] text-base font-normal leading-7" set:html={description}></div>}
29
+
30
+ {showBtn && btnLabel && (
31
+ <a href={btnSrc} class={`${btnSelf} text-white font-inter font-normal bg-[#2134F1] px-5 py-3 border border-[#2134F1] rounded-xl hover:bg-white hover:text-[#2134F1] transition-all duration-300`}>{btnLabel}</a>
32
+ )}
33
+ </section>
@@ -39,6 +39,7 @@ import * as Footer_2025_Napoles from '../carbins/Footer_2025_Napoles.ts';
39
39
  import * as Formulario_2025_Nara from '../carbins/Formulario_2025_Nara.ts';
40
40
  import * as Formulario_2025_Seul from '../carbins/Formulario_2025_Seul.ts';
41
41
  import * as Formulario_2025_Teruel from '../carbins/Formulario_2025_Teruel.ts';
42
+ import * as Formulario_2026_Carabanchel from '../carbins/Formulario_2026_Carabanchel.ts';
42
43
  import * as Formulario_2026_Wichita from '../carbins/Formulario_2026_Wichita.ts';
43
44
  import * as GeometricShapeCard from '../carbins/GeometricShapeCard.ts';
44
45
  import * as HeaderCorporativo from '../carbins/HeaderCorporativo.ts';
@@ -47,6 +48,7 @@ import * as Hero_2026_Benidorm from '../carbins/Hero_2026_Benidorm.ts';
47
48
  import * as ImageTextSimple from '../carbins/ImageTextSimple.ts';
48
49
  import * as Imagen_2025_Bogota from '../carbins/Imagen_2025_Bogota.ts';
49
50
  import * as Imagen_2025_Fukushima from '../carbins/Imagen_2025_Fukushima.ts';
51
+ import * as Imagen_2026_Algar from '../carbins/Imagen_2026_Algar.ts';
50
52
  import * as Indice_2025_Taiwan from '../carbins/Indice_2025_Taiwan.ts';
51
53
  import * as Modal_2025_Sagunto from '../carbins/Modal_2025_Sagunto.ts';
52
54
  import * as Paginacion_2025_Paris from '../carbins/Paginacion_2025_Paris.ts';
@@ -71,6 +73,7 @@ import * as TextImageCard from '../carbins/TextImageCard.ts';
71
73
  import * as TextImageHeader from '../carbins/TextImageHeader.ts';
72
74
  import * as Texto_2025_Kyoto from '../carbins/Texto_2025_Kyoto.ts';
73
75
  import * as Texto_2026_Alicante from '../carbins/Texto_2026_Alicante.ts';
76
+ import * as Texto_2026_Castellon from '../carbins/Texto_2026_Castellon.ts';
74
77
  import * as Tiempo_2025_Londres from '../carbins/Tiempo_2025_Londres.ts';
75
78
  import * as Titulo_2025_Algeciras from '../carbins/Titulo_2025_Algeciras.ts';
76
79
  import * as Titulo_2025_Santorini from '../carbins/Titulo_2025_Santorini.ts';
@@ -121,6 +124,7 @@ export const components = [
121
124
  {component: Formulario_2025_Nara},
122
125
  {component: Formulario_2025_Seul},
123
126
  {component: Formulario_2025_Teruel},
127
+ {component: Formulario_2026_Carabanchel},
124
128
  {component: Formulario_2026_Wichita},
125
129
  {component: GeometricShapeCard},
126
130
  {component: HeaderCorporativo},
@@ -129,6 +133,7 @@ export const components = [
129
133
  {component: ImageTextSimple},
130
134
  {component: Imagen_2025_Bogota},
131
135
  {component: Imagen_2025_Fukushima},
136
+ {component: Imagen_2026_Algar},
132
137
  {component: Indice_2025_Taiwan},
133
138
  {component: Modal_2025_Sagunto},
134
139
  {component: Paginacion_2025_Paris},
@@ -153,6 +158,7 @@ export const components = [
153
158
  {component: TextImageHeader},
154
159
  {component: Texto_2025_Kyoto},
155
160
  {component: Texto_2026_Alicante},
161
+ {component: Texto_2026_Castellon},
156
162
  {component: Tiempo_2025_Londres},
157
163
  {component: Titulo_2025_Algeciras},
158
164
  {component: Titulo_2025_Santorini},
package/src/index.ts CHANGED
@@ -45,6 +45,7 @@ import Footer_2025_Napoles from './components/Astro/Footer_2025_Napoles.astro';
45
45
  import Formulario_2025_Nara from './components/Astro/Formulario_2025_Nara.astro';
46
46
  import Formulario_2025_Seul from './components/Astro/Formulario_2025_Seul.astro';
47
47
  import Formulario_2025_Teruel from './components/Astro/Formulario_2025_Teruel.astro';
48
+ import Formulario_2026_Carabanchel from './components/Astro/Formulario_2026_Carabanchel.astro';
48
49
  import Formulario_2026_Wichita from './components/Astro/Formulario_2026_Wichita.astro';
49
50
  import GeometricShape from './components/Astro/GeometricShape.astro';
50
51
  import GeometricShapeCard from './components/Astro/GeometricShapeCard.astro';
@@ -54,6 +55,7 @@ import Hero_2026_Benidorm from './components/Astro/Hero_2026_Benidorm.astro';
54
55
  import ImageTextSimple from './components/Astro/ImageTextSimple.astro';
55
56
  import Imagen_2025_Bogota from './components/Astro/Imagen_2025_Bogota.astro';
56
57
  import Imagen_2025_Fukushima from './components/Astro/Imagen_2025_Fukushima.astro';
58
+ import Imagen_2026_Algar from './components/Astro/Imagen_2026_Algar.astro';
57
59
  import Indice_2025_Taiwan from './components/Astro/Indice_2025_Taiwan.astro';
58
60
  import Modal_2025_Sagunto from './components/Astro/Modal_2025_Sagunto.astro';
59
61
  import Paginacion_2025_Paris from './components/Astro/Paginacion_2025_Paris.astro';
@@ -78,6 +80,7 @@ import TextImageCard from './components/Astro/TextImageCard.astro';
78
80
  import TextImageHeader from './components/Astro/TextImageHeader.astro';
79
81
  import Texto_2025_Kyoto from './components/Astro/Texto_2025_Kyoto.astro';
80
82
  import Texto_2026_Alicante from './components/Astro/Texto_2026_Alicante.astro';
83
+ import Texto_2026_Castellon from './components/Astro/Texto_2026_Castellon.astro';
81
84
  import Tiempo_2025_Londres from './components/Astro/Tiempo_2025_Londres.astro';
82
85
  import Titulo_2025_Algeciras from './components/Astro/Titulo_2025_Algeciras.astro';
83
86
  import Titulo_2025_Santorini from './components/Astro/Titulo_2025_Santorini.astro';
@@ -90,7 +93,7 @@ import ReactButton from './components/React/ReactButton.jsx';
90
93
  // Exporta todos los componentes uno a uno para que puedan ser usados directamente.
91
94
 
92
95
 
93
- export { VueButton, Author_2025_Algarve, Button, CTA_2025_Formentera, Cabecera_2025_Barcelona, Cabecera_2025_Madrid, Cabecera_2026_Bilbao, Cabecera_2026_Madrid, Card_2025_Malta, Contenido_2025_Alcorcon, Contenido_2025_Cordoba, Contenido_2025_Granada, Contenido_2025_Malaga, Contenido_2025_Montevideo, Contenido_2026_Cabra, Contenido_2026_Denia, Contenido_2026_Dubai, Contenido_2026_Estocolmo, Contenido_2026_Jaen, Contenido_2026_Leon, Contenido_2026_Mallorca, Contenido_2026_Marruecos, Contenido_2026_Menorca, Contenido_2026_Michigan, Contenido_2026_Mostoles, Contenido_2026_Orcasitas, Contenido_2026_Oslo, Contenido_2026_Quito, Contenido_2026_Seattle, Contenido_2026_Sevilla, Contenido_2026_Tokyo, Contenido_2026_Ubeda, Contenido_2026_Yakarta, CorpFooter, CorpHero, CorpNavigation, Enlace_2025_Venecia, FAQ_2025_Hiroshima, Footer_2025_Napoles, Formulario_2025_Nara, Formulario_2025_Seul, Formulario_2025_Teruel, Formulario_2026_Wichita, GeometricShape, GeometricShapeCard, HeaderCorporativo, Hero_2025_Benidorm, Hero_2026_Benidorm, ImageTextSimple, Imagen_2025_Bogota, Imagen_2025_Fukushima, Indice_2025_Taiwan, Modal_2025_Sagunto, Paginacion_2025_Paris, RRSS_2025_Pisa, SEO_Head_Section, SEO_Schema_Page, Separador_2025_Reinosa, Separador_2025_Toledo, Share_2025_Florencia, SpectrumSeparator, Sumario_2025_Beijing, Tabla_2025_Fuenlabrada, Tabla_2026_Cadiz, Tag_2025_Bolonia, TestHijo, TestPadre, Test_2026_Gaza, TextBox, TextImageBackground, TextImageBlock, TextImageCard, TextImageHeader, Texto_2025_Kyoto, Texto_2026_Alicante, Tiempo_2025_Londres, Titulo_2025_Algeciras, Titulo_2025_Santorini, VideoAutoplay, Video_2025_Polop, Video_2025_Valencia, Video_2026_Andujar, ReactButton };
96
+ export { VueButton, Author_2025_Algarve, Button, CTA_2025_Formentera, Cabecera_2025_Barcelona, Cabecera_2025_Madrid, Cabecera_2026_Bilbao, Cabecera_2026_Madrid, Card_2025_Malta, Contenido_2025_Alcorcon, Contenido_2025_Cordoba, Contenido_2025_Granada, Contenido_2025_Malaga, Contenido_2025_Montevideo, Contenido_2026_Cabra, Contenido_2026_Denia, Contenido_2026_Dubai, Contenido_2026_Estocolmo, Contenido_2026_Jaen, Contenido_2026_Leon, Contenido_2026_Mallorca, Contenido_2026_Marruecos, Contenido_2026_Menorca, Contenido_2026_Michigan, Contenido_2026_Mostoles, Contenido_2026_Orcasitas, Contenido_2026_Oslo, Contenido_2026_Quito, Contenido_2026_Seattle, Contenido_2026_Sevilla, Contenido_2026_Tokyo, Contenido_2026_Ubeda, Contenido_2026_Yakarta, CorpFooter, CorpHero, CorpNavigation, Enlace_2025_Venecia, FAQ_2025_Hiroshima, Footer_2025_Napoles, Formulario_2025_Nara, Formulario_2025_Seul, Formulario_2025_Teruel, Formulario_2026_Carabanchel, Formulario_2026_Wichita, GeometricShape, GeometricShapeCard, HeaderCorporativo, Hero_2025_Benidorm, Hero_2026_Benidorm, ImageTextSimple, Imagen_2025_Bogota, Imagen_2025_Fukushima, Imagen_2026_Algar, Indice_2025_Taiwan, Modal_2025_Sagunto, Paginacion_2025_Paris, RRSS_2025_Pisa, SEO_Head_Section, SEO_Schema_Page, Separador_2025_Reinosa, Separador_2025_Toledo, Share_2025_Florencia, SpectrumSeparator, Sumario_2025_Beijing, Tabla_2025_Fuenlabrada, Tabla_2026_Cadiz, Tag_2025_Bolonia, TestHijo, TestPadre, Test_2026_Gaza, TextBox, TextImageBackground, TextImageBlock, TextImageCard, TextImageHeader, Texto_2025_Kyoto, Texto_2026_Alicante, Texto_2026_Castellon, Tiempo_2025_Londres, Titulo_2025_Algeciras, Titulo_2025_Santorini, VideoAutoplay, Video_2025_Polop, Video_2025_Valencia, Video_2026_Andujar, ReactButton };
94
97
 
95
98
 
96
99
  // Exporta la función listComponents para que sea usado en el Pagebuilder en Vue.
@@ -147,6 +150,7 @@ export const components = {
147
150
  Formulario_2025_Nara: Formulario_2025_Nara,
148
151
  Formulario_2025_Seul: Formulario_2025_Seul,
149
152
  Formulario_2025_Teruel: Formulario_2025_Teruel,
153
+ Formulario_2026_Carabanchel: Formulario_2026_Carabanchel,
150
154
  Formulario_2026_Wichita: Formulario_2026_Wichita,
151
155
  GeometricShape: GeometricShape,
152
156
  GeometricShapeCard: GeometricShapeCard,
@@ -156,6 +160,7 @@ export const components = {
156
160
  ImageTextSimple: ImageTextSimple,
157
161
  Imagen_2025_Bogota: Imagen_2025_Bogota,
158
162
  Imagen_2025_Fukushima: Imagen_2025_Fukushima,
163
+ Imagen_2026_Algar: Imagen_2026_Algar,
159
164
  Indice_2025_Taiwan: Indice_2025_Taiwan,
160
165
  Modal_2025_Sagunto: Modal_2025_Sagunto,
161
166
  Paginacion_2025_Paris: Paginacion_2025_Paris,
@@ -180,6 +185,7 @@ export const components = {
180
185
  TextImageHeader: TextImageHeader,
181
186
  Texto_2025_Kyoto: Texto_2025_Kyoto,
182
187
  Texto_2026_Alicante: Texto_2026_Alicante,
188
+ Texto_2026_Castellon: Texto_2026_Castellon,
183
189
  Tiempo_2025_Londres: Tiempo_2025_Londres,
184
190
  Titulo_2025_Algeciras: Titulo_2025_Algeciras,
185
191
  Titulo_2025_Santorini: Titulo_2025_Santorini,
@@ -16,6 +16,14 @@ export const LIMBO_BASE_URL = {
16
16
  PROD: 'https://limbo.lefebvre.es'
17
17
  };
18
18
 
19
+ /**
20
+ * URLs base de LF2 según entorno
21
+ */
22
+ export function resolveLf2ResourceUrl(isProd = false) {
23
+ return isProd ? 'https://lf2.lefebvre.es/js/leadform-api.js' : 'https://led-dev-leadformv2-dev08.eu.els.local/js/leadform-api.js';
24
+ }
25
+
26
+
19
27
  /**
20
28
  * Convierte URLs relativas de Limbo a absolutas
21
29
  */