libreria-astro-lefebvre 0.0.35 → 0.0.37
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 +7 -4
- package/src/carbins/Formulario_2025_Teruel.ts +127 -0
- package/src/components/Astro/Contenido_2025_Alcorcon.astro +48 -48
- package/src/components/Astro/Contenido_2025_Granada.astro +239 -239
- package/src/components/Astro/Contenido_2025_Montevideo.astro +41 -35
- package/src/components/Astro/Formulario_2025_Teruel.astro +125 -0
- package/src/components/Astro/Repetidor_2025_Cabra.astro +152 -152
- package/src/components/Astro/Repetidor_2025_Dubai.astro +29 -29
- package/src/components/Astro/Repetidor_2025_Menorca.astro +44 -43
- package/src/components/Astro/Repetidor_2025_Michigan.astro +61 -45
- package/src/components/Astro/Repetidor_2025_Orcasitas.astro +59 -2
- package/src/components/Astro/Titulo_2025_Algeciras.astro +58 -57
- package/src/generated/componentRegistry.ts +2 -0
- package/src/index.ts +3 -1
- package/src/limbo/LimboProvider.astro +71 -0
- package/src/limbo/index.ts +16 -0
- package/src/limbo/init.ts +174 -0
|
@@ -1,35 +1,41 @@
|
|
|
1
|
-
---
|
|
2
|
-
|
|
3
|
-
import Titulo_2025_Santorini from './Titulo_2025_Santorini.astro';
|
|
4
|
-
|
|
5
|
-
const {
|
|
6
|
-
link='#',
|
|
7
|
-
image='',
|
|
8
|
-
altImage='',
|
|
9
|
-
title='',
|
|
10
|
-
tag='',
|
|
11
|
-
description=''
|
|
12
|
-
} = Astro.props;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
<a href={link} class="w-full flex flex-col cursor-pointer px-4 md:px-0">
|
|
18
|
-
<article class="w-full h-full flex flex-col rounded-lg border border-gray-200 items-center shadow-
|
|
19
|
-
<div class="bg-white mt-[1px] rounded-tl-[7px] rounded-tr-[7px] h-full">
|
|
20
|
-
<div class="w-full">
|
|
21
|
-
<img class="cursor-pointer rounded-tr-lg rounded-tl-lg mx-auto h-full" src={image} alt={altImage} />
|
|
22
|
-
</div>
|
|
23
|
-
<div class="p-6 flex-grow flex flex-col">
|
|
24
|
-
{tag && tag !== '' && <Titulo_2025_Santorini description={tag} />}
|
|
25
|
-
<div class="mt-2 flex items-center gap-2 flex-grow">
|
|
26
|
-
<div class="flex flex-col text-[#262626] h-full">
|
|
27
|
-
<h3 class="text-lg font-semibold leading-tight mb-[8px]">{title}</h3>
|
|
28
|
-
<p class="text-base text-[#363942] font-normal leading-tight mb-[8px]">{description}</p>
|
|
29
|
-
</div>
|
|
30
|
-
</div>
|
|
31
|
-
</div>
|
|
32
|
-
</div>
|
|
33
|
-
<div class="bg-red-100 h-[12px]"></div>
|
|
34
|
-
</article>
|
|
35
|
-
</a>
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
import Titulo_2025_Santorini from './Titulo_2025_Santorini.astro';
|
|
4
|
+
|
|
5
|
+
const {
|
|
6
|
+
link='#',
|
|
7
|
+
image='',
|
|
8
|
+
altImage='',
|
|
9
|
+
title='',
|
|
10
|
+
tag='',
|
|
11
|
+
description=''
|
|
12
|
+
} = Astro.props;
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
<a href={link} class="w-full flex flex-col cursor-pointer px-4 md:px-0">
|
|
18
|
+
<article class="w-full h-full flex flex-col rounded-lg border border-gray-200 items-center shadow-article hover:bg-gradient-to-r from-[#001978] via-[#2134F1] to-[#F81BBD] transition-all duration-300 p-[1px]">
|
|
19
|
+
<div class="bg-white mt-[1px] rounded-tl-[7px] rounded-tr-[7px] h-full">
|
|
20
|
+
<div class="w-full">
|
|
21
|
+
<img class="cursor-pointer rounded-tr-lg rounded-tl-lg mx-auto h-full" src={image} alt={altImage} />
|
|
22
|
+
</div>
|
|
23
|
+
<div class="p-6 flex-grow flex flex-col">
|
|
24
|
+
{tag && tag !== '' && <Titulo_2025_Santorini description={tag} />}
|
|
25
|
+
<div class="mt-2 flex items-center gap-2 flex-grow">
|
|
26
|
+
<div class="flex flex-col text-[#262626] h-full">
|
|
27
|
+
<h3 class="text-lg font-semibold leading-tight mb-[8px]">{title}</h3>
|
|
28
|
+
<p class="text-base text-[#363942] font-normal leading-tight mb-[8px]">{description}</p>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
<div class="bg-red-100 h-[12px]"></div>
|
|
34
|
+
</article>
|
|
35
|
+
</a>
|
|
36
|
+
|
|
37
|
+
<style>
|
|
38
|
+
.shadow-article {
|
|
39
|
+
box-shadow: 0 2px 4px -2px rgba(0, 0, 0, 0.08), 0 4px 8px -2px rgba(0, 0, 0, 0.04);
|
|
40
|
+
}
|
|
41
|
+
</style>
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
const {
|
|
4
|
+
bottomBorder = false,
|
|
5
|
+
orientation = 'left',
|
|
6
|
+
title = '',
|
|
7
|
+
description = '',
|
|
8
|
+
imageSrc = '',
|
|
9
|
+
|
|
10
|
+
showBtn = false,
|
|
11
|
+
linkBtn = '#',
|
|
12
|
+
txtBtn = 'Saber más',
|
|
13
|
+
|
|
14
|
+
showBtnModal = true,
|
|
15
|
+
txtBtnModal = 'Saber más',
|
|
16
|
+
imageModal = '',
|
|
17
|
+
altModal = '',
|
|
18
|
+
titleModal = '',
|
|
19
|
+
subtitleModal = '',
|
|
20
|
+
descriptionModal = '',
|
|
21
|
+
lf2FormTitle = '',
|
|
22
|
+
|
|
23
|
+
} = Astro.props;
|
|
24
|
+
|
|
25
|
+
const randomId = Math.floor(Math.random() * 1000);
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
<article id={`article-${randomId}`} class="w-full flex flex-col pb-4 mb-4 items-center justify-center border-0 md:border-b-1 border-b-[#B6B7BB]" style={bottomBorder ? '' : 'border-bottom: none;'} >
|
|
31
|
+
<div class={`flex-col flex md:${orientation === 'left' ? 'flex-row' : 'flex-row-reverse'} items-center gap-4 mb-8 md:mb-0`}>
|
|
32
|
+
<div class="w-full md:w-1/2 p-4 flex flex-col flex-wrap ">
|
|
33
|
+
<h2 class="text-[28px] md:text-[32px] leading-[36px] md:leading-[40px] mb-[24px] text-[#363942] font-poppins font-semibold">{title}</h2>
|
|
34
|
+
<div
|
|
35
|
+
class="text-[#363942] font-inter font-normal text-base leading-[28px] flex flex-col gap-4 md-0 md:mb-8"
|
|
36
|
+
set:html={description}
|
|
37
|
+
/>
|
|
38
|
+
{showBtn && linkBtn && (
|
|
39
|
+
<a href={linkBtn} target="_self" class="inline-block w-fit h-[44px] md:h-[48px] text-[#2134F1] font-inter font-semibold bg-[#ffffff] px-[14px] md:px-[20px] py-[10px] md:py-[12px] border border-[#2134F1] rounded-lg shadow-md hover:bg-[#DDE0EC] transition-all duration-300 hover:text-[#2134F1] hover:border-[#2134F1] text-sm md:text-base">{txtBtn}</a>
|
|
40
|
+
)}
|
|
41
|
+
{showBtnModal && (
|
|
42
|
+
<button id={`js-open-teruel-popup-${randomId}`} class={`popup-modal-trigger-${randomId} inline-block w-fit h-[44px] md:h-[48px] text-[#2134F1] font-inter font-semibold bg-[#ffffff] px-[14px] md:px-[20px] py-[10px] md:py-[12px] mt-[16px] md:mt-0 border border-[#2134F1] rounded-lg shadow-md hover:bg-[#DDE0EC] transition-all duration-300 hover:text-[#2134F1] hover:border-[#2134F1] text-sm md:text-base cursor-pointer`}>{txtBtnModal}</button>
|
|
43
|
+
)}
|
|
44
|
+
</div>
|
|
45
|
+
<div class={`w-full md:w-1/2 p-4 flex items-center ${orientation === 'left' ? 'justify-end' : 'justify-start'}`}>
|
|
46
|
+
<img src={imageSrc} alt={title} class="w-full md:w-1/2 rounded-2xl" />
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
</article>
|
|
51
|
+
|
|
52
|
+
<div id={`teruel-popup-modal-${randomId}`} class="fixed w-full h-full pt-[48px] top-0 left-0 z-9999 hidden bg-gray-100/90">
|
|
53
|
+
<div class="flex flex-col justify-center items-center w-full md:w-4/5 max-w-[1000px] h-auto m-auto p-4 rounded-2xl bg-white shadow-lg border border-[#B6B7BB]">
|
|
54
|
+
<div class="w-full flex justify-end">
|
|
55
|
+
<button id={`js-close-teruel-popup-${randomId}`} class="js-close-popup w-auto transition-transform hover:scale-125 cursor-pointer">X</button>
|
|
56
|
+
</div>
|
|
57
|
+
<div class="w-full h-full flex flex-col md:flex-row items-start justify-center">
|
|
58
|
+
<div class="w-full md:w-1/2 flex justify-center items-center p-0 md:p-4 mt-[32px] md:mt-0">
|
|
59
|
+
<img src={imageModal} alt={altModal} class="w-fit" />
|
|
60
|
+
</div>
|
|
61
|
+
<div class="w-full md:w-1/2">
|
|
62
|
+
<h2 class="font-poppins text-[#262626] text-[28px] md:text-[32px] font-normal text-left leading-[40px] my-[32px] md:mb-[32px]">{titleModal}</h2>
|
|
63
|
+
<h3 class="font-poppins text-[#262626] text-[20px] md:text-[24px] font-semibold text-left leading-[32px] mb-[8px]">{subtitleModal}</h3>
|
|
64
|
+
<div class="font-inter text-base font-normal leading-[24px]" set:html={descriptionModal} />
|
|
65
|
+
<div id={`lf2-form-container-${randomId}`} class="w-full">
|
|
66
|
+
<!--FORMULARIO -->
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
<script is:inline define:vars={{ randomId, lf2FormTitle }}>
|
|
75
|
+
|
|
76
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
77
|
+
|
|
78
|
+
let configLf2 = {
|
|
79
|
+
fake: true,
|
|
80
|
+
formulario: lf2FormTitle,
|
|
81
|
+
bootstrap: true,
|
|
82
|
+
target: '#'+ `lf2-form-container-${randomId}`
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
try {
|
|
86
|
+
apiManager.pintarFormularioAutogestionado(configLf2);
|
|
87
|
+
} catch (error) {
|
|
88
|
+
var apiManager = new LeadformApiManagerClass();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
const teruelModalButton = document.getElementById(`js-open-teruel-popup-${randomId}`);
|
|
93
|
+
|
|
94
|
+
teruelModalButton.addEventListener('click', (e) => {
|
|
95
|
+
e.preventDefault();
|
|
96
|
+
|
|
97
|
+
const modalPopup = document.getElementById(`teruel-popup-modal-${randomId}`);
|
|
98
|
+
const articleElement = document.getElementById(`article-${randomId}`);
|
|
99
|
+
const parentElement = articleElement ? articleElement.parentElement : null;
|
|
100
|
+
|
|
101
|
+
if (modalPopup && parentElement && parentElement.parentNode) {
|
|
102
|
+
parentElement.parentNode.insertBefore(modalPopup, parentElement.nextSibling);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (modalPopup) {
|
|
106
|
+
apiManager.pintarFormularioAutogestionado(configLf2);
|
|
107
|
+
modalPopup.classList.remove('hidden');
|
|
108
|
+
if (parentElement) {
|
|
109
|
+
parentElement.classList.add('blur-sm');
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const closeBtn = modalPopup.querySelector(`#js-close-teruel-popup-${randomId}`);
|
|
113
|
+
if (closeBtn) {
|
|
114
|
+
closeBtn.onclick = () => {
|
|
115
|
+
modalPopup.classList.add('hidden');
|
|
116
|
+
if (parentElement) {
|
|
117
|
+
parentElement.classList.remove('blur-sm');
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
</script>
|
|
@@ -1,153 +1,153 @@
|
|
|
1
|
-
---
|
|
2
|
-
|
|
3
|
-
import Repetidor_2025_Menorca from './Repetidor_2025_Menorca.astro';
|
|
4
|
-
import Titulo_2025_Algeciras from './Titulo_2025_Algeciras.astro';
|
|
5
|
-
|
|
6
|
-
const {
|
|
7
|
-
items = [],
|
|
8
|
-
} = Astro.props;
|
|
9
|
-
|
|
10
|
-
const identifier = 'js-megablock'+ Math.random().toString(36).substring(2, 15);
|
|
11
|
-
|
|
12
|
-
const structuredData = `<script type="application/ld+json">
|
|
13
|
-
{
|
|
14
|
-
"@context": "https://schema.org",
|
|
15
|
-
"@type": "WebPage",
|
|
16
|
-
"name": "Interactive Content Tabs",
|
|
17
|
-
"description": "Interactive tabbed content component with multiple sections",
|
|
18
|
-
"mainEntity": {
|
|
19
|
-
"@type": "ItemList",
|
|
20
|
-
"numberOfItems": ${items.length},
|
|
21
|
-
"itemListElement": [
|
|
22
|
-
${items.map((item, index) => `{
|
|
23
|
-
"@type": "ListItem",
|
|
24
|
-
"position": ${index + 1},
|
|
25
|
-
"name": "${item.name}",
|
|
26
|
-
"description": "Interactive content section",
|
|
27
|
-
${item.image ? `"image": "${item.image}",` : ''}
|
|
28
|
-
${item.buttonUrl ? `"url": "${item.buttonUrl}"` : ''}
|
|
29
|
-
}`).join(',\n ')}
|
|
30
|
-
]
|
|
31
|
-
},
|
|
32
|
-
"interactionStatistic": {
|
|
33
|
-
"@type": "InteractionCounter",
|
|
34
|
-
"interactionType": "https://schema.org/ClickAction",
|
|
35
|
-
"userInteractionCount": "${items.length}"
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
</script>`;
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
<section class="w-full flex items-center justify-center">
|
|
44
|
-
<article class="w-full flex flex-col items-center justify-center">
|
|
45
|
-
<div class="w-full flex justify-center items-center relative text-[56px] text-center font inter leading-[64px] mt-[40px]">
|
|
46
|
-
<!-- <div class="flex bg-transparent md:bg-gray-50 md:border md:border-[#B6B7BB] rounded-lg"> -->
|
|
47
|
-
<div class="flex gap-1 md:gap-8 items-center">
|
|
48
|
-
{items.map((item, index) => (
|
|
49
|
-
<p class="text-base">
|
|
50
|
-
{/* <a href={`#accordion${index + 1}`} class="btn py-[20px] px-[16px]">{item}</a> */}
|
|
51
|
-
<button data-linkedto={`${identifier}${index + 1}`}
|
|
52
|
-
class={`
|
|
53
|
-
btn py-[14px] px-[20px] font-inter
|
|
54
|
-
cursor-pointer border border-
|
|
55
|
-
hover:border hover:border-[#5F6168]
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
bg-
|
|
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
|
-
</div>
|
|
90
|
-
<div class="w-full md:w-1/2 p-0 md:pr-2">
|
|
91
|
-
<img src={item.image} alt="Imagen" class="w-full min-h-auto lg:min-h-full object-cover rounded-xl" />
|
|
92
|
-
</div>
|
|
93
|
-
</div>
|
|
94
|
-
|
|
95
|
-
</div>
|
|
96
|
-
))}
|
|
97
|
-
</div>
|
|
98
|
-
</article>
|
|
99
|
-
</section>
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
<style>
|
|
104
|
-
.bg-F2F3F8 {
|
|
105
|
-
background-color: #F2F3F8;
|
|
106
|
-
}
|
|
107
|
-
.active{
|
|
108
|
-
background-color: #ffffff;
|
|
109
|
-
border: 1px solid #5F6168;
|
|
110
|
-
color: black;
|
|
111
|
-
max-width: none;
|
|
112
|
-
max-height: none;
|
|
113
|
-
font-size: 16px;
|
|
114
|
-
|
|
115
|
-
&:hover{
|
|
116
|
-
background-color: #ffffff;
|
|
117
|
-
border: 1px solid #5F6168;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
</style>
|
|
121
|
-
|
|
122
|
-
<script is:inline define:vars={{ identifier }}>
|
|
123
|
-
|
|
124
|
-
document.querySelectorAll(`.${identifier}button`).forEach(btn => {
|
|
125
|
-
|
|
126
|
-
btn.addEventListener('click', (e) => {
|
|
127
|
-
const linkedId = btn.getAttribute('data-linkedto');
|
|
128
|
-
const targetItem = document.getElementById(linkedId);
|
|
129
|
-
if (targetItem) {
|
|
130
|
-
|
|
131
|
-
const collapseCount = document.querySelectorAll(`.${identifier}item.collapse`).length;
|
|
132
|
-
const hiddenCount = document.querySelectorAll(`.${identifier}item.hidden`).length;
|
|
133
|
-
const desiredClass = collapseCount > hiddenCount ? 'collapse' : 'hidden';
|
|
134
|
-
|
|
135
|
-
document.querySelectorAll(`.${identifier}item`).forEach(item => {
|
|
136
|
-
if (item === targetItem) return;
|
|
137
|
-
if (item.classList.contains(desiredClass)) return;
|
|
138
|
-
item.classList.add(desiredClass);
|
|
139
|
-
});
|
|
140
|
-
targetItem.classList.toggle(desiredClass);
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
document.querySelectorAll(`.${identifier}button`).forEach(item => {
|
|
144
|
-
if (item === btn) return;
|
|
145
|
-
item.classList.remove('active');
|
|
146
|
-
});
|
|
147
|
-
btn.classList.toggle('active');
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
</script>
|
|
152
|
-
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
import Repetidor_2025_Menorca from './Repetidor_2025_Menorca.astro';
|
|
4
|
+
import Titulo_2025_Algeciras from './Titulo_2025_Algeciras.astro';
|
|
5
|
+
|
|
6
|
+
const {
|
|
7
|
+
items = [],
|
|
8
|
+
} = Astro.props;
|
|
9
|
+
|
|
10
|
+
const identifier = 'js-megablock'+ Math.random().toString(36).substring(2, 15);
|
|
11
|
+
|
|
12
|
+
const structuredData = `<script type="application/ld+json">
|
|
13
|
+
{
|
|
14
|
+
"@context": "https://schema.org",
|
|
15
|
+
"@type": "WebPage",
|
|
16
|
+
"name": "Interactive Content Tabs",
|
|
17
|
+
"description": "Interactive tabbed content component with multiple sections",
|
|
18
|
+
"mainEntity": {
|
|
19
|
+
"@type": "ItemList",
|
|
20
|
+
"numberOfItems": ${items.length},
|
|
21
|
+
"itemListElement": [
|
|
22
|
+
${items.map((item, index) => `{
|
|
23
|
+
"@type": "ListItem",
|
|
24
|
+
"position": ${index + 1},
|
|
25
|
+
"name": "${item.name}",
|
|
26
|
+
"description": "Interactive content section",
|
|
27
|
+
${item.image ? `"image": "${item.image}",` : ''}
|
|
28
|
+
${item.buttonUrl ? `"url": "${item.buttonUrl}"` : ''}
|
|
29
|
+
}`).join(',\n ')}
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
"interactionStatistic": {
|
|
33
|
+
"@type": "InteractionCounter",
|
|
34
|
+
"interactionType": "https://schema.org/ClickAction",
|
|
35
|
+
"userInteractionCount": "${items.length}"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
</script>`;
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
<section class="w-full flex items-center justify-center">
|
|
44
|
+
<article class="w-full flex flex-col items-center justify-center">
|
|
45
|
+
<div class="w-full flex justify-center items-center relative text-[56px] text-center font inter leading-[64px] mt-[40px]">
|
|
46
|
+
<!-- <div class="flex bg-transparent md:bg-gray-50 md:border md:border-[#B6B7BB] rounded-lg"> -->
|
|
47
|
+
<div class="flex gap-1 md:gap-8 items-center">
|
|
48
|
+
{items.map((item, index) => (
|
|
49
|
+
<p class="text-base">
|
|
50
|
+
{/* <a href={`#accordion${index + 1}`} class="btn py-[20px] px-[16px]">{item}</a> */}
|
|
51
|
+
<button data-linkedto={`${identifier}${index + 1}`}
|
|
52
|
+
class={`
|
|
53
|
+
btn py-[14px] px-[20px] font-inter
|
|
54
|
+
cursor-pointer border border-[#b6b7bb]
|
|
55
|
+
hover:border hover:border-[#5F6168] hover:!bg-[#ffffff] rounded-lg ${identifier}button
|
|
56
|
+
${item.default ? 'active' : ''}
|
|
57
|
+
bg-F2F3F8 text-gray-100 max-w-[40px] max-h-[20px] text-[0px] md:w-[150px]
|
|
58
|
+
md:bg-gray-50 md:text-black md:max-w-none md:max-h-none md:text-[16px]
|
|
59
|
+
`}
|
|
60
|
+
>{item.name}</button>
|
|
61
|
+
</p>
|
|
62
|
+
))}
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
<div class="lg:max-w-7xl md:w-full px-6 md:w-4/5 md:px-[0] col my-[40px]">
|
|
66
|
+
{items.map((item, index) => (
|
|
67
|
+
<div id={`${identifier}${index + 1}`} class={`${item.default ? '' : 'hidden'} collapse-arrow ${identifier}item`}>
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
<div class="w-full flex-col flex md:flex-row gap-[16px] md:gap-[48px]">
|
|
71
|
+
<div class="w-full md:w-1/2">
|
|
72
|
+
<Titulo_2025_Algeciras
|
|
73
|
+
title={item.name}
|
|
74
|
+
tipo="h1-40-left"
|
|
75
|
+
flexJustify="justify-start"
|
|
76
|
+
/>
|
|
77
|
+
<Repetidor_2025_Menorca
|
|
78
|
+
flexOrientationIcoText = "flex-row"
|
|
79
|
+
flexOrientationBlockIcoText = "flex-col"
|
|
80
|
+
positionFlex = 'items-start'
|
|
81
|
+
positionBtnFlex = 'justify-start'
|
|
82
|
+
items = {item.items}
|
|
83
|
+
headingType = 'h4'
|
|
84
|
+
showBtn = {true}
|
|
85
|
+
btnLabel = "Ver experiencias de uso"
|
|
86
|
+
buttonUrl={item.buttonUrl}
|
|
87
|
+
widthArticle = "w-4/5"
|
|
88
|
+
/>
|
|
89
|
+
</div>
|
|
90
|
+
<div class="w-full md:w-1/2 p-0 md:pr-2">
|
|
91
|
+
<img src={item.image} alt="Imagen" class="w-full min-h-auto lg:min-h-full object-cover rounded-xl" />
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
|
|
95
|
+
</div>
|
|
96
|
+
))}
|
|
97
|
+
</div>
|
|
98
|
+
</article>
|
|
99
|
+
</section>
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
<style>
|
|
104
|
+
.bg-F2F3F8 {
|
|
105
|
+
background-color: #F2F3F8;
|
|
106
|
+
}
|
|
107
|
+
.active{
|
|
108
|
+
background-color: #ffffff;
|
|
109
|
+
border: 1px solid #5F6168;
|
|
110
|
+
color: black;
|
|
111
|
+
max-width: none;
|
|
112
|
+
max-height: none;
|
|
113
|
+
font-size: 16px;
|
|
114
|
+
|
|
115
|
+
&:hover{
|
|
116
|
+
background-color: #ffffff;
|
|
117
|
+
border: 1px solid #5F6168;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
</style>
|
|
121
|
+
|
|
122
|
+
<script is:inline define:vars={{ identifier }}>
|
|
123
|
+
|
|
124
|
+
document.querySelectorAll(`.${identifier}button`).forEach(btn => {
|
|
125
|
+
|
|
126
|
+
btn.addEventListener('click', (e) => {
|
|
127
|
+
const linkedId = btn.getAttribute('data-linkedto');
|
|
128
|
+
const targetItem = document.getElementById(linkedId);
|
|
129
|
+
if (targetItem) {
|
|
130
|
+
|
|
131
|
+
const collapseCount = document.querySelectorAll(`.${identifier}item.collapse`).length;
|
|
132
|
+
const hiddenCount = document.querySelectorAll(`.${identifier}item.hidden`).length;
|
|
133
|
+
const desiredClass = collapseCount > hiddenCount ? 'collapse' : 'hidden';
|
|
134
|
+
|
|
135
|
+
document.querySelectorAll(`.${identifier}item`).forEach(item => {
|
|
136
|
+
if (item === targetItem) return;
|
|
137
|
+
if (item.classList.contains(desiredClass)) return;
|
|
138
|
+
item.classList.add(desiredClass);
|
|
139
|
+
});
|
|
140
|
+
targetItem.classList.toggle(desiredClass);
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
document.querySelectorAll(`.${identifier}button`).forEach(item => {
|
|
144
|
+
if (item === btn) return;
|
|
145
|
+
item.classList.remove('active');
|
|
146
|
+
});
|
|
147
|
+
btn.classList.toggle('active');
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
</script>
|
|
152
|
+
|
|
153
153
|
<Fragment set:html={structuredData} />
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
---
|
|
2
|
-
const {
|
|
3
|
-
title,
|
|
4
|
-
description,
|
|
5
|
-
buttonText,
|
|
6
|
-
buttonUrl,
|
|
7
|
-
showBtn,
|
|
8
|
-
items
|
|
9
|
-
} = Astro.props;
|
|
10
|
-
|
|
11
|
-
import Repetidor_2025_Orcasitas from './Repetidor_2025_Orcasitas.astro';
|
|
12
|
-
---
|
|
13
|
-
<article class="w-full flex flex-col text-center items-center justify-center p-12 pb-4 bg-[#ffffff] rounded-2xl">
|
|
14
|
-
<h2 class="text-[2.25em] md:text-[2.5em] font-poppins leading-[44px] md:leading-[48px] mb-[23px] text-[#262626] font-normal not-italic">{title}</h2>
|
|
15
|
-
<div class="max-w-[900px] text-[#363942] font-inter font-normal text-base not-italic leading-[24px] flex flex-col gap-4 mb-8">
|
|
16
|
-
<p set:html={description}></p>
|
|
17
|
-
</div>
|
|
18
|
-
<div class="max-w-7xl flex-wrap md:flex-nowrap w-full flex items-center ">
|
|
19
|
-
<Repetidor_2025_Orcasitas items={items} />
|
|
20
|
-
</div>
|
|
21
|
-
<div class="w-full flex justify-center">
|
|
22
|
-
{showBtn ? (
|
|
23
|
-
<div class="flex justify-center">
|
|
24
|
-
<a href={buttonUrl} class="px-5 py-3 font-inter font-semibold text-base border-1 border-[#2134F1] text-[#2134F1] hover:text-[#262626] hover:border-[#262626] transition-all duration-300 rounded-lg cursor-pointer shadow-sm">{buttonText}</a>
|
|
25
|
-
</div>
|
|
26
|
-
) : (
|
|
27
|
-
<div class="flex justify-center"></div>
|
|
28
|
-
)}
|
|
29
|
-
</div>
|
|
1
|
+
---
|
|
2
|
+
const {
|
|
3
|
+
title,
|
|
4
|
+
description,
|
|
5
|
+
buttonText,
|
|
6
|
+
buttonUrl,
|
|
7
|
+
showBtn,
|
|
8
|
+
items
|
|
9
|
+
} = Astro.props;
|
|
10
|
+
|
|
11
|
+
import Repetidor_2025_Orcasitas from './Repetidor_2025_Orcasitas.astro';
|
|
12
|
+
---
|
|
13
|
+
<article class="w-full flex flex-col text-center items-center justify-center p-12 pb-4 bg-[#ffffff] rounded-2xl">
|
|
14
|
+
<h2 class="text-[2.25em] md:text-[2.5em] font-poppins leading-[44px] md:leading-[48px] mb-[23px] text-[#262626] font-normal not-italic">{title}</h2>
|
|
15
|
+
<div class="max-w-[900px] text-[#363942] font-inter font-normal text-base not-italic leading-[24px] flex flex-col gap-4 mb-8">
|
|
16
|
+
<p class="font-poppins text-[18px] md:text-[20px] leading-[28px]" set:html={description}></p>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="max-w-7xl flex-wrap md:flex-nowrap w-full flex items-center ">
|
|
19
|
+
<Repetidor_2025_Orcasitas items={items} />
|
|
20
|
+
</div>
|
|
21
|
+
<div class="w-full flex justify-center">
|
|
22
|
+
{showBtn ? (
|
|
23
|
+
<div class="flex justify-center">
|
|
24
|
+
<a href={buttonUrl} class="px-5 py-3 font-inter font-semibold text-base border-1 border-[#2134F1] text-[#2134F1] hover:text-[#262626] hover:border-[#262626] transition-all duration-300 rounded-lg cursor-pointer shadow-sm">{buttonText}</a>
|
|
25
|
+
</div>
|
|
26
|
+
) : (
|
|
27
|
+
<div class="flex justify-center"></div>
|
|
28
|
+
)}
|
|
29
|
+
</div>
|
|
30
30
|
</article>
|