@ctonti/ask-golf-veneto 1.0.4 → 1.0.5

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.
@@ -0,0 +1,1385 @@
1
+ import { t as catalog } from "./catalog-BlF_Hq2u.mjs";
2
+ import React from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { cn } from "@websolutespa/ask-ui";
5
+ import { defineRegistry } from "@json-render/react";
6
+ import { toast } from "sonner";
7
+ import { renderToStaticMarkup } from "react-dom/server";
8
+ import { Button } from "@websolutespa/ask-ui/components/button";
9
+ import { Skeleton } from "@websolutespa/ask-ui/components/skeleton";
10
+ import { Bed, Bus, Car, Check, Circle, Compass, Flag, Footprints, Gauge, Heart, Landmark, Lightbulb, Mail, MapPin, Mountain, Navigation, Palette, Phone, Plane, Quote, Ruler, Ship, Sparkles, Target, Train, TreePine, Users, UtensilsCrossed, Wine } from "lucide-react";
11
+ //#region src/blocks/root.tsx
12
+ const Root = ({ children }) => {
13
+ return /* @__PURE__ */ jsx("div", {
14
+ "data-type": "root",
15
+ className: cn("flex flex-col py-8 gap-8 @md:gap-16 bg-background text-foreground"),
16
+ children
17
+ });
18
+ };
19
+ //#endregion
20
+ //#region src/blocks/link.tsx
21
+ const Link = ({ props }) => {
22
+ return /* @__PURE__ */ jsx(Button, {
23
+ "data-type": "link",
24
+ asChild: true,
25
+ variant: props.variant === "outline" ? "outline" : props.variant === "secondary" ? "secondary" : props.variant === "danger" ? "destructive" : "default",
26
+ children: /* @__PURE__ */ jsx("a", {
27
+ href: props.href,
28
+ target: "_blank",
29
+ rel: "noopener noreferrer",
30
+ children: props.label
31
+ })
32
+ });
33
+ };
34
+ //#endregion
35
+ //#region src/blocks/hero-viaggio.tsx
36
+ const HeroViaggio = ({ props }) => {
37
+ return /* @__PURE__ */ jsxs("div", {
38
+ "data-type": "hero-viaggio",
39
+ className: cn("relative flex flex-col items-center justify-center py-24 @md:py-32 px-8 bg-[#213f31] text-white overflow-hidden rounded-2xl shadow-2xl border border-white/10"),
40
+ children: [props.imageSrc ? /* @__PURE__ */ jsxs("div", {
41
+ className: "absolute inset-0 z-0",
42
+ children: [/* @__PURE__ */ jsx("img", {
43
+ src: props.imageSrc,
44
+ alt: "",
45
+ className: "w-full h-full object-cover"
46
+ }), /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-b from-[#213f31]/90 via-[#213f31]/70 to-[#213f31]/90 mix-blend-multiply" })]
47
+ }) : /* @__PURE__ */ jsx("div", {
48
+ className: "absolute inset-0 z-0 bg-gradient-to-br from-[#213f31] to-[#12241b]",
49
+ children: /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-[url('https://www.transparenttextures.com/patterns/cubes.png')] opacity-20 mix-blend-overlay" })
50
+ }), /* @__PURE__ */ jsxs("div", {
51
+ className: "relative z-10 flex flex-col items-center text-center max-w-4xl mx-auto space-y-8",
52
+ children: [
53
+ /* @__PURE__ */ jsx("div", { className: "w-16 h-px bg-[#e8d9c0]/50 mb-4" }),
54
+ /* @__PURE__ */ jsx("h1", {
55
+ className: "font-heading text-[40px] @md:text-[64px] @lg:text-[80px] italic leading-[1.1] drop-shadow-lg text-[#faf8f3]",
56
+ children: props.title
57
+ }),
58
+ props.tagline && /* @__PURE__ */ jsx("p", {
59
+ className: "font-sans font-light uppercase tracking-[0.2em] text-[#e8d9c0] text-sm @md:text-base max-w-2xl drop-shadow",
60
+ children: props.tagline
61
+ }),
62
+ /* @__PURE__ */ jsx("div", { className: "w-16 h-px bg-[#e8d9c0]/50 mt-4" }),
63
+ props.stats && props.stats.length > 0 && /* @__PURE__ */ jsx("div", {
64
+ className: "flex flex-wrap items-center justify-center gap-6 pt-8",
65
+ children: props.stats.map((stat, i) => /* @__PURE__ */ jsxs("div", {
66
+ className: "flex flex-col items-center bg-white/5 backdrop-blur-md border border-white/10 rounded-xl px-6 py-4 min-w-[120px]",
67
+ children: [/* @__PURE__ */ jsx("span", {
68
+ className: "font-heading italic text-3xl @md:text-4xl text-[#e8d9c0] mb-1",
69
+ children: stat.value
70
+ }), /* @__PURE__ */ jsx("span", {
71
+ className: "font-sans text-[10px] uppercase tracking-widest text-white/70 font-semibold",
72
+ children: stat.label
73
+ })]
74
+ }, i))
75
+ })
76
+ ]
77
+ })]
78
+ });
79
+ };
80
+ //#endregion
81
+ //#region src/blocks/hero-viaggio-skeleton.tsx
82
+ const HeroViaggioSkeleton = (_props) => {
83
+ return /* @__PURE__ */ jsx("div", {
84
+ "data-type": "hero-viaggio-skeleton",
85
+ className: "flex flex-col items-center justify-center py-16 @md:py-24 px-6 bg-primary/10 rounded-xl overflow-hidden",
86
+ children: /* @__PURE__ */ jsxs("div", {
87
+ className: "flex flex-col items-center w-full max-w-4xl space-y-6",
88
+ children: [
89
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-[40px] @md:h-[64px] @lg:h-[80px] w-3/4 max-w-2xl bg-primary/20 rounded-lg" }),
90
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-[24px] @md:h-[28px] w-2/3 max-w-xl bg-primary/20 rounded-lg" }),
91
+ /* @__PURE__ */ jsxs("div", {
92
+ className: "flex gap-3 pt-6",
93
+ children: [
94
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-24 bg-primary/20 rounded-full" }),
95
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-32 bg-primary/20 rounded-full" }),
96
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-28 bg-primary/20 rounded-full" })
97
+ ]
98
+ })
99
+ ]
100
+ })
101
+ });
102
+ };
103
+ //#endregion
104
+ //#region src/blocks/concept-card.tsx
105
+ const ICON_MAP = {
106
+ golf: Circle,
107
+ wine: Wine,
108
+ art: Palette,
109
+ nature: TreePine,
110
+ family: Users,
111
+ outdoor: Mountain,
112
+ food: UtensilsCrossed,
113
+ wellness: Heart,
114
+ culture: Landmark
115
+ };
116
+ const ConceptCard = ({ props }) => {
117
+ return /* @__PURE__ */ jsxs("div", {
118
+ "data-type": "concept-card",
119
+ className: cn("bg-[#faf8f3] rounded-2xl border border-[#e8d9c0] shadow-lg overflow-hidden flex flex-col p-8 @md:p-10 space-y-8 @md:space-y-0 @md:flex-row @md:gap-12 relative"),
120
+ children: [
121
+ /* @__PURE__ */ jsx("div", { className: "absolute top-0 right-0 w-32 h-32 bg-[#e8d9c0]/20 rounded-bl-full -z-0" }),
122
+ /* @__PURE__ */ jsxs("div", {
123
+ className: "flex-1 relative z-10 flex flex-col justify-center space-y-6 @md:border-r border-[#e8d9c0] @md:pr-10",
124
+ children: [
125
+ /* @__PURE__ */ jsxs("div", {
126
+ className: "flex items-center gap-2 mb-2",
127
+ children: [/* @__PURE__ */ jsx("span", { className: "w-8 h-px bg-[#478264]" }), /* @__PURE__ */ jsx("span", {
128
+ className: "text-[10px] uppercase tracking-widest font-bold text-[#478264]",
129
+ children: "Il Concept"
130
+ })]
131
+ }),
132
+ /* @__PURE__ */ jsxs("div", {
133
+ className: "relative",
134
+ children: [/* @__PURE__ */ jsx(Quote, { className: "w-8 h-8 text-[#e8d9c0] absolute -top-4 -left-2 -z-10 opacity-50" }), /* @__PURE__ */ jsxs("h3", {
135
+ className: "font-heading italic text-[#213f31] text-2xl @md:text-3xl leading-snug",
136
+ children: [
137
+ "“",
138
+ props.concept,
139
+ "”"
140
+ ]
141
+ })]
142
+ }),
143
+ props.themes && props.themes.length > 0 && /* @__PURE__ */ jsx("div", {
144
+ className: "flex flex-wrap gap-2 pt-2",
145
+ children: props.themes.map((theme, i) => {
146
+ return /* @__PURE__ */ jsxs("div", {
147
+ className: "flex items-center gap-1.5 bg-white border border-[#e8d9c0] text-[#213f31] text-[10px] uppercase tracking-widest font-bold px-3 py-1.5 rounded-sm shadow-sm",
148
+ children: [/* @__PURE__ */ jsx(ICON_MAP[theme.icon.toLowerCase()] || Circle, { className: "w-3.5 h-3.5 text-[#478264]" }), /* @__PURE__ */ jsx("span", { children: theme.label })]
149
+ }, i);
150
+ })
151
+ })
152
+ ]
153
+ }),
154
+ /* @__PURE__ */ jsxs("div", {
155
+ className: "flex-1 relative z-10 flex flex-col justify-center",
156
+ children: [/* @__PURE__ */ jsx("span", {
157
+ className: "text-[10px] uppercase tracking-widest font-bold text-[#213f31]/40 mb-3",
158
+ children: "La Visione"
159
+ }), /* @__PURE__ */ jsx("p", {
160
+ className: "text-[#213f31]/80 font-sans leading-relaxed text-sm @md:text-base",
161
+ children: props.debrief
162
+ })]
163
+ })
164
+ ]
165
+ });
166
+ };
167
+ //#endregion
168
+ //#region src/blocks/concept-card-skeleton.tsx
169
+ const ConceptCardSkeleton = (_props) => {
170
+ return /* @__PURE__ */ jsxs("div", {
171
+ "data-type": "concept-card-skeleton",
172
+ className: "bg-card rounded-xl border border-border shadow-sm p-6 @md:p-8 flex flex-col @md:flex-row gap-6 @md:gap-12",
173
+ children: [/* @__PURE__ */ jsxs("div", {
174
+ className: "flex-1 border-l-4 border-muted pl-6 space-y-2",
175
+ children: [
176
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-full" }),
177
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-[90%]" }),
178
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-[80%]" })
179
+ ]
180
+ }), /* @__PURE__ */ jsxs("div", {
181
+ className: "flex-1 space-y-6",
182
+ children: [/* @__PURE__ */ jsxs("div", {
183
+ className: "space-y-2",
184
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-full" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-[70%]" })]
185
+ }), /* @__PURE__ */ jsxs("div", {
186
+ className: "flex gap-2",
187
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-7 w-20 rounded-full" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-7 w-24 rounded-full" })]
188
+ })]
189
+ })]
190
+ });
191
+ };
192
+ //#endregion
193
+ //#region src/blocks/day-plan.tsx
194
+ const LOGISTICS_ICON_MAP = {
195
+ car: Car,
196
+ train: Train,
197
+ ship: Ship,
198
+ default: Navigation
199
+ };
200
+ const DayPlan = ({ props }) => {
201
+ return /* @__PURE__ */ jsxs("div", {
202
+ "data-type": "day-plan",
203
+ className: cn("flex flex-col w-full shadow-xl rounded-2xl overflow-hidden border border-[#e8d9c0]/50 bg-[#faf8f3]"),
204
+ children: [/* @__PURE__ */ jsxs("div", {
205
+ className: "relative overflow-hidden bg-[#213f31] px-8 py-10 flex flex-col gap-4",
206
+ children: [
207
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 opacity-10 bg-[url('https://www.transparenttextures.com/patterns/cubes.png')] mix-blend-overlay" }),
208
+ props.imageSrc && /* @__PURE__ */ jsxs("div", {
209
+ className: "absolute inset-0 z-0",
210
+ children: [/* @__PURE__ */ jsx("img", {
211
+ src: props.imageSrc,
212
+ alt: "",
213
+ className: "w-full h-full object-cover opacity-40 mix-blend-luminosity"
214
+ }), /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-[#213f31] to-transparent" })]
215
+ }),
216
+ /* @__PURE__ */ jsxs("div", {
217
+ className: "flex items-center justify-between z-10",
218
+ children: [/* @__PURE__ */ jsxs("span", {
219
+ className: "font-sans uppercase tracking-[0.25em] text-[#e8d9c0] text-[10px] font-bold bg-[#e8d9c0]/10 px-3 py-1 rounded-sm backdrop-blur-sm border border-[#e8d9c0]/20",
220
+ children: ["Giorno ", props.dayNumber]
221
+ }), props.location && /* @__PURE__ */ jsxs("div", {
222
+ className: "flex items-center gap-1.5 text-[#e8d9c0] text-xs font-medium uppercase tracking-widest bg-black/20 px-3 py-1 rounded-sm backdrop-blur-sm",
223
+ children: [/* @__PURE__ */ jsx(MapPin, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ jsx("span", { children: props.location })]
224
+ })]
225
+ }),
226
+ /* @__PURE__ */ jsx("h2", {
227
+ className: "font-heading text-white text-4xl @md:text-5xl z-10 leading-tight italic mt-2 drop-shadow-md",
228
+ children: props.title
229
+ })
230
+ ]
231
+ }), /* @__PURE__ */ jsxs("div", {
232
+ className: "bg-[#faf8f3] px-6 @md:px-8 py-4",
233
+ children: [
234
+ props.golf && /* @__PURE__ */ jsxs("div", {
235
+ className: "py-8 border-b border-[#e8d9c0]/60 last:border-0 relative",
236
+ children: [
237
+ /* @__PURE__ */ jsx("div", { className: "absolute left-0 top-8 w-1 h-12 bg-[#478264] rounded-r-md -ml-6 @md:-ml-8" }),
238
+ /* @__PURE__ */ jsxs("div", {
239
+ className: "flex items-center gap-2 mb-4",
240
+ children: [/* @__PURE__ */ jsx(Flag, { className: "w-5 h-5 text-[#478264]" }), /* @__PURE__ */ jsx("h3", {
241
+ className: "font-sans font-bold uppercase text-xs tracking-[0.2em] text-[#478264]",
242
+ children: "Golf Experience"
243
+ })]
244
+ }),
245
+ /* @__PURE__ */ jsxs("div", {
246
+ className: "space-y-4 pl-2 @md:pl-4",
247
+ children: [
248
+ /* @__PURE__ */ jsx("p", {
249
+ className: "font-heading text-3xl text-[#213f31]",
250
+ children: props.golf.clubName
251
+ }),
252
+ /* @__PURE__ */ jsxs("div", {
253
+ className: "flex gap-2",
254
+ children: [/* @__PURE__ */ jsxs("span", {
255
+ className: "text-xs font-semibold uppercase tracking-wider bg-white px-3 py-1.5 rounded-md text-[#213f31] border border-[#e8d9c0] shadow-sm",
256
+ children: [props.golf.holes, " Buche"]
257
+ }), /* @__PURE__ */ jsxs("span", {
258
+ className: "text-xs font-semibold uppercase tracking-wider bg-white px-3 py-1.5 rounded-md text-[#213f31] border border-[#e8d9c0] shadow-sm",
259
+ children: ["Par ", props.golf.par]
260
+ })]
261
+ }),
262
+ /* @__PURE__ */ jsx("p", {
263
+ className: "text-base text-[#213f31]/80 leading-relaxed font-sans",
264
+ children: props.golf.description
265
+ }),
266
+ props.golf.highlight && /* @__PURE__ */ jsx("div", {
267
+ className: "bg-white p-4 rounded-xl border border-[#e8d9c0] shadow-sm mt-4 inline-block",
268
+ children: /* @__PURE__ */ jsxs("p", {
269
+ className: "text-base italic text-[#478264] font-heading text-xl",
270
+ children: [
271
+ "\"",
272
+ props.golf.highlight,
273
+ "\""
274
+ ]
275
+ })
276
+ })
277
+ ]
278
+ })
279
+ ]
280
+ }),
281
+ props.explore && props.explore.length > 0 && /* @__PURE__ */ jsxs("div", {
282
+ className: "py-8 border-b border-[#e8d9c0]/60 last:border-0 relative",
283
+ children: [/* @__PURE__ */ jsxs("div", {
284
+ className: "flex items-center gap-2 mb-5",
285
+ children: [/* @__PURE__ */ jsx(Compass, { className: "w-5 h-5 text-[#213f31]/50" }), /* @__PURE__ */ jsx("h3", {
286
+ className: "font-sans font-bold uppercase text-xs tracking-[0.2em] text-[#213f31]/50",
287
+ children: "Esplora"
288
+ })]
289
+ }), /* @__PURE__ */ jsx("div", {
290
+ className: "grid grid-cols-1 @md:grid-cols-2 gap-5 pl-0 @md:pl-4",
291
+ children: props.explore.map((attr, i) => /* @__PURE__ */ jsxs("div", {
292
+ className: "bg-white p-5 rounded-xl border border-[#e8d9c0] shadow-sm flex flex-col gap-3 transition-shadow hover:shadow-md",
293
+ children: [/* @__PURE__ */ jsxs("div", {
294
+ className: "flex items-start justify-between gap-3",
295
+ children: [/* @__PURE__ */ jsx("span", {
296
+ className: "font-heading text-2xl text-[#213f31] leading-tight",
297
+ children: attr.name
298
+ }), attr.type && /* @__PURE__ */ jsx("span", {
299
+ className: "text-[9px] uppercase tracking-widest font-bold bg-[#faf8f3] text-[#213f31] border border-[#e8d9c0] px-2 py-1 rounded-full whitespace-nowrap",
300
+ children: attr.type
301
+ })]
302
+ }), attr.description && /* @__PURE__ */ jsx("p", {
303
+ className: "text-sm text-[#213f31]/70 leading-relaxed",
304
+ children: attr.description
305
+ })]
306
+ }, i))
307
+ })]
308
+ }),
309
+ props.dine && /* @__PURE__ */ jsxs("div", {
310
+ className: "py-8 border-b border-[#e8d9c0]/60 last:border-0",
311
+ children: [/* @__PURE__ */ jsxs("div", {
312
+ className: "flex items-center gap-2 mb-5",
313
+ children: [/* @__PURE__ */ jsx(UtensilsCrossed, { className: "w-5 h-5 text-[#213f31]/50" }), /* @__PURE__ */ jsx("h3", {
314
+ className: "font-sans font-bold uppercase text-xs tracking-[0.2em] text-[#213f31]/50",
315
+ children: "Gusto"
316
+ })]
317
+ }), /* @__PURE__ */ jsxs("div", {
318
+ className: "bg-white p-6 rounded-xl border border-[#e8d9c0] shadow-sm pl-6 relative overflow-hidden",
319
+ children: [
320
+ /* @__PURE__ */ jsx("div", { className: "absolute top-0 right-0 w-24 h-24 bg-[#478264]/5 rounded-bl-full -z-10" }),
321
+ /* @__PURE__ */ jsxs("p", {
322
+ className: "font-heading text-3xl text-[#213f31] flex flex-col @md:flex-row @md:items-baseline gap-2 mb-3",
323
+ children: [props.dine.name, props.dine.cuisine && /* @__PURE__ */ jsxs("span", {
324
+ className: "font-sans font-medium uppercase tracking-[0.15em] text-[#478264] text-xs",
325
+ children: ["· ", props.dine.cuisine]
326
+ })]
327
+ }),
328
+ /* @__PURE__ */ jsx("p", {
329
+ className: "text-base text-[#213f31]/80 leading-relaxed mb-4",
330
+ children: props.dine.description
331
+ }),
332
+ props.dine.dish && /* @__PURE__ */ jsxs("div", {
333
+ className: "flex items-start gap-3 bg-[#faf8f3] p-4 rounded-xl border border-[#e8d9c0]/50",
334
+ children: [/* @__PURE__ */ jsx("span", {
335
+ className: "text-[#478264] text-lg mt-0.5",
336
+ children: "★"
337
+ }), /* @__PURE__ */ jsxs("p", {
338
+ className: "text-sm text-[#213f31] leading-relaxed",
339
+ children: [
340
+ /* @__PURE__ */ jsx("span", {
341
+ className: "font-bold text-[10px] uppercase tracking-widest text-[#213f31]/50 block mb-1",
342
+ children: "Piatto firma"
343
+ }),
344
+ " ",
345
+ props.dine.dish
346
+ ]
347
+ })]
348
+ })
349
+ ]
350
+ })]
351
+ }),
352
+ props.wine && /* @__PURE__ */ jsxs("div", {
353
+ className: "py-8 border-b border-[#e8d9c0]/60 last:border-0",
354
+ children: [/* @__PURE__ */ jsxs("div", {
355
+ className: "flex items-center gap-2 mb-5",
356
+ children: [/* @__PURE__ */ jsx(Wine, { className: "w-5 h-5 text-[#8b3a3a]" }), /* @__PURE__ */ jsx("h3", {
357
+ className: "font-sans font-bold uppercase text-xs tracking-[0.2em] text-[#8b3a3a]",
358
+ children: "Degustazione"
359
+ })]
360
+ }), /* @__PURE__ */ jsxs("div", {
361
+ className: "bg-gradient-to-br from-[#fffdfa] to-[#fff5f5] p-6 rounded-xl border border-[#8b3a3a]/15 shadow-sm pl-6 relative",
362
+ children: [
363
+ /* @__PURE__ */ jsx("div", {
364
+ className: "absolute right-4 top-4 opacity-5",
365
+ children: /* @__PURE__ */ jsx(Wine, { className: "w-24 h-24 text-[#8b3a3a]" })
366
+ }),
367
+ /* @__PURE__ */ jsx("p", {
368
+ className: "font-heading text-3xl text-[#213f31] mb-3 relative z-10",
369
+ children: props.wine.name
370
+ }),
371
+ /* @__PURE__ */ jsx("p", {
372
+ className: "text-base text-[#213f31]/80 leading-relaxed mb-5 relative z-10 max-w-2xl",
373
+ children: props.wine.description
374
+ }),
375
+ props.wine.wines && props.wine.wines.length > 0 && /* @__PURE__ */ jsx("div", {
376
+ className: "flex flex-wrap gap-2 relative z-10",
377
+ children: props.wine.wines.map((wine, i) => /* @__PURE__ */ jsx("span", {
378
+ className: "text-xs font-semibold uppercase tracking-wider bg-white border border-[#8b3a3a]/20 text-[#8b3a3a] px-3.5 py-1.5 rounded-full shadow-sm",
379
+ children: wine
380
+ }, i))
381
+ })
382
+ ]
383
+ })]
384
+ }),
385
+ props.stay && /* @__PURE__ */ jsxs("div", {
386
+ className: "py-8 border-b border-[#e8d9c0]/60 last:border-0",
387
+ children: [/* @__PURE__ */ jsxs("div", {
388
+ className: "flex items-center gap-2 mb-5",
389
+ children: [/* @__PURE__ */ jsx(Bed, { className: "w-5 h-5 text-[#b8955e]" }), /* @__PURE__ */ jsx("h3", {
390
+ className: "font-sans font-bold uppercase text-xs tracking-[0.2em] text-[#b8955e]",
391
+ children: "Soggiorno"
392
+ })]
393
+ }), /* @__PURE__ */ jsxs("div", {
394
+ className: "bg-gradient-to-br from-[#fdfbf7] to-[#f4ebd9]/80 p-6 rounded-xl border border-[#b8955e]/30 shadow-sm pl-6",
395
+ children: [/* @__PURE__ */ jsxs("div", {
396
+ className: "flex flex-col @md:flex-row @md:items-center justify-between mb-3 gap-3",
397
+ children: [/* @__PURE__ */ jsx("p", {
398
+ className: "font-heading text-3xl text-[#213f31]",
399
+ children: props.stay.name
400
+ }), props.stay.type && /* @__PURE__ */ jsx("span", {
401
+ className: "text-[10px] uppercase tracking-widest font-bold bg-[#b8955e] text-white px-3 py-1.5 rounded-sm self-start @md:self-auto shadow-sm",
402
+ children: props.stay.type
403
+ })]
404
+ }), /* @__PURE__ */ jsx("p", {
405
+ className: "text-base text-[#213f31]/80 leading-relaxed max-w-2xl",
406
+ children: props.stay.description
407
+ })]
408
+ })]
409
+ }),
410
+ props.logistics && /* @__PURE__ */ jsxs("div", {
411
+ className: "py-8 border-b border-[#e8d9c0]/60 last:border-0",
412
+ children: [
413
+ /* @__PURE__ */ jsxs("div", {
414
+ className: "flex items-center gap-2 mb-5",
415
+ children: [/* @__PURE__ */ jsx(Navigation, { className: "w-5 h-5 text-[#213f31]/40" }), /* @__PURE__ */ jsx("h3", {
416
+ className: "font-sans font-bold uppercase text-xs tracking-[0.2em] text-[#213f31]/40",
417
+ children: "Spostamenti"
418
+ })]
419
+ }),
420
+ /* @__PURE__ */ jsxs("div", {
421
+ className: "flex flex-col @md:flex-row @md:items-center justify-between bg-white p-5 rounded-xl border border-[#e8d9c0] pl-6 gap-5 shadow-sm",
422
+ children: [/* @__PURE__ */ jsxs("div", {
423
+ className: "flex flex-wrap items-center gap-3 text-[#213f31] font-heading text-2xl",
424
+ children: [
425
+ /* @__PURE__ */ jsx("span", { children: props.logistics.from }),
426
+ /* @__PURE__ */ jsx("span", {
427
+ className: "text-[#e8d9c0] mx-2",
428
+ children: "⟶"
429
+ }),
430
+ /* @__PURE__ */ jsx("span", { children: props.logistics.to })
431
+ ]
432
+ }), /* @__PURE__ */ jsx("div", {
433
+ className: "flex items-center gap-4 shrink-0",
434
+ children: /* @__PURE__ */ jsxs("div", {
435
+ className: "flex items-center gap-2 bg-[#faf8f3] px-4 py-2 rounded-full border border-[#e8d9c0]",
436
+ children: [/* @__PURE__ */ jsx(props.logistics.transport && LOGISTICS_ICON_MAP[props.logistics.transport] ? LOGISTICS_ICON_MAP[props.logistics.transport] : LOGISTICS_ICON_MAP.default, { className: "w-4 h-4 text-[#213f31]/70" }), /* @__PURE__ */ jsx("span", {
437
+ className: "text-sm font-semibold uppercase tracking-wider text-[#213f31]/80",
438
+ children: props.logistics.time
439
+ })]
440
+ })
441
+ })]
442
+ }),
443
+ props.logistics.note && /* @__PURE__ */ jsx("p", {
444
+ className: "text-sm text-[#213f31]/60 italic mt-3 pl-2 @md:pl-4",
445
+ children: props.logistics.note
446
+ })
447
+ ]
448
+ }),
449
+ props.curiosity && /* @__PURE__ */ jsx("div", {
450
+ className: "py-8 last:border-0",
451
+ children: /* @__PURE__ */ jsxs("div", {
452
+ className: "bg-gradient-to-r from-[#f4ebd9]/40 to-transparent rounded-2xl p-6 flex gap-5 items-start border border-[#e8d9c0]/60 relative overflow-hidden",
453
+ children: [
454
+ /* @__PURE__ */ jsx("div", { className: "absolute left-0 top-0 bottom-0 w-1.5 bg-[#b8955e]" }),
455
+ /* @__PURE__ */ jsx("div", {
456
+ className: "bg-white p-2.5 rounded-full shadow-sm shrink-0 border border-[#e8d9c0]",
457
+ children: /* @__PURE__ */ jsx(Lightbulb, { className: "w-5 h-5 text-[#b8955e]" })
458
+ }),
459
+ /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("span", {
460
+ className: "text-[10px] uppercase tracking-widest font-bold text-[#b8955e] block mb-2",
461
+ children: "Lo sapevi che?"
462
+ }), /* @__PURE__ */ jsx("p", {
463
+ className: "text-base font-sans text-[#213f31]/90 leading-relaxed italic",
464
+ children: props.curiosity
465
+ })] })
466
+ ]
467
+ })
468
+ })
469
+ ]
470
+ })]
471
+ });
472
+ };
473
+ //#endregion
474
+ //#region src/blocks/day-plan-skeleton.tsx
475
+ const DayPlanSkeleton = (_props) => {
476
+ return /* @__PURE__ */ jsxs("div", {
477
+ "data-type": "day-plan-skeleton",
478
+ className: "flex flex-col w-full shadow-sm rounded-xl overflow-hidden border border-border",
479
+ children: [/* @__PURE__ */ jsxs("div", {
480
+ className: "bg-primary/10 px-6 py-5 space-y-3",
481
+ children: [/* @__PURE__ */ jsxs("div", {
482
+ className: "flex justify-between",
483
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-20 bg-primary/20" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24 bg-primary/20" })]
484
+ }), /* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-2/3 bg-primary/20" })]
485
+ }), /* @__PURE__ */ jsx("div", {
486
+ className: "bg-card px-6 py-2",
487
+ children: [
488
+ 1,
489
+ 2,
490
+ 3
491
+ ].map((i) => /* @__PURE__ */ jsxs("div", {
492
+ className: "py-5 border-b border-border/50 last:border-0 space-y-3",
493
+ children: [
494
+ /* @__PURE__ */ jsxs("div", {
495
+ className: "flex items-center gap-2",
496
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "w-4 h-4 rounded-full" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-16" })]
497
+ }),
498
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-1/3" }),
499
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-full" }),
500
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-[90%]" })
501
+ ]
502
+ }, i))
503
+ })]
504
+ });
505
+ };
506
+ //#endregion
507
+ //#region src/blocks/golf-club-spotlight.tsx
508
+ const GolfClubSpotlight = ({ props }) => {
509
+ return /* @__PURE__ */ jsxs("div", {
510
+ "data-type": "golf-club-spotlight",
511
+ className: cn("bg-white rounded-2xl border border-[#e8d9c0] shadow-lg relative overflow-hidden flex flex-col @md:flex-row"),
512
+ children: [
513
+ /* @__PURE__ */ jsx("div", {
514
+ className: "absolute top-0 right-0 bg-[#478264] text-white text-[9px] font-bold uppercase tracking-[0.2em] px-4 py-2 rounded-bl-xl z-20 shadow-md",
515
+ children: "Network Golf in Veneto"
516
+ }),
517
+ /* @__PURE__ */ jsxs("div", {
518
+ className: "w-full @md:w-5/12 min-h-[300px] relative",
519
+ children: [
520
+ props.imageSrc ? /* @__PURE__ */ jsx("img", {
521
+ src: props.imageSrc,
522
+ alt: props.name,
523
+ className: "w-full h-full object-cover"
524
+ }) : /* @__PURE__ */ jsx("div", {
525
+ className: "w-full h-full bg-gradient-to-br from-[#213f31] to-[#12241b] flex items-center justify-center p-8",
526
+ children: /* @__PURE__ */ jsx(Flag, { className: "w-20 h-20 text-white/10" })
527
+ }),
528
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent" }),
529
+ /* @__PURE__ */ jsxs("div", {
530
+ className: "absolute bottom-4 left-4 right-4 z-10 block @md:hidden text-white",
531
+ children: [/* @__PURE__ */ jsx("h2", {
532
+ className: "font-heading text-3xl mb-1",
533
+ children: props.name
534
+ }), /* @__PURE__ */ jsx("p", {
535
+ className: "font-sans text-sm font-light italic text-white/80",
536
+ children: props.tagline
537
+ })]
538
+ })
539
+ ]
540
+ }),
541
+ /* @__PURE__ */ jsxs("div", {
542
+ className: "w-full @md:w-7/12 p-6 @md:p-8 flex flex-col",
543
+ children: [
544
+ /* @__PURE__ */ jsxs("div", {
545
+ className: "hidden @md:block mb-6",
546
+ children: [/* @__PURE__ */ jsx("h2", {
547
+ className: "font-heading text-4xl text-[#213f31] mb-2 pr-12 leading-tight",
548
+ children: props.name
549
+ }), /* @__PURE__ */ jsx("p", {
550
+ className: "font-heading italic text-[#478264] text-xl",
551
+ children: props.tagline
552
+ })]
553
+ }),
554
+ props.stats && /* @__PURE__ */ jsxs("div", {
555
+ className: "grid grid-cols-2 @lg:grid-cols-3 gap-3 mb-8",
556
+ children: [
557
+ props.stats.holes && /* @__PURE__ */ jsxs("div", {
558
+ className: "flex items-center gap-3 bg-[#faf8f3] p-3 rounded-xl border border-[#e8d9c0]/50",
559
+ children: [/* @__PURE__ */ jsx("div", {
560
+ className: "bg-white p-1.5 rounded-full shadow-sm border border-[#e8d9c0]",
561
+ children: /* @__PURE__ */ jsx(Circle, { className: "w-4 h-4 text-[#478264]" })
562
+ }), /* @__PURE__ */ jsxs("div", {
563
+ className: "flex flex-col",
564
+ children: [/* @__PURE__ */ jsx("span", {
565
+ className: "text-[9px] uppercase tracking-widest text-[#213f31]/50 font-bold",
566
+ children: "Buche"
567
+ }), /* @__PURE__ */ jsx("span", {
568
+ className: "text-sm font-bold text-[#213f31]",
569
+ children: props.stats.holes
570
+ })]
571
+ })]
572
+ }),
573
+ props.stats.par && /* @__PURE__ */ jsxs("div", {
574
+ className: "flex items-center gap-3 bg-[#faf8f3] p-3 rounded-xl border border-[#e8d9c0]/50",
575
+ children: [/* @__PURE__ */ jsx("div", {
576
+ className: "bg-white p-1.5 rounded-full shadow-sm border border-[#e8d9c0]",
577
+ children: /* @__PURE__ */ jsx(Target, { className: "w-4 h-4 text-[#478264]" })
578
+ }), /* @__PURE__ */ jsxs("div", {
579
+ className: "flex flex-col",
580
+ children: [/* @__PURE__ */ jsx("span", {
581
+ className: "text-[9px] uppercase tracking-widest text-[#213f31]/50 font-bold",
582
+ children: "Par"
583
+ }), /* @__PURE__ */ jsx("span", {
584
+ className: "text-sm font-bold text-[#213f31]",
585
+ children: props.stats.par
586
+ })]
587
+ })]
588
+ }),
589
+ props.stats.distance && /* @__PURE__ */ jsxs("div", {
590
+ className: "flex items-center gap-3 bg-[#faf8f3] p-3 rounded-xl border border-[#e8d9c0]/50",
591
+ children: [/* @__PURE__ */ jsx("div", {
592
+ className: "bg-white p-1.5 rounded-full shadow-sm border border-[#e8d9c0]",
593
+ children: /* @__PURE__ */ jsx(Ruler, { className: "w-4 h-4 text-[#478264]" })
594
+ }), /* @__PURE__ */ jsxs("div", {
595
+ className: "flex flex-col",
596
+ children: [/* @__PURE__ */ jsx("span", {
597
+ className: "text-[9px] uppercase tracking-widest text-[#213f31]/50 font-bold",
598
+ children: "Lunghezza"
599
+ }), /* @__PURE__ */ jsx("span", {
600
+ className: "text-sm font-bold text-[#213f31]",
601
+ children: props.stats.distance
602
+ })]
603
+ })]
604
+ }),
605
+ props.stats.courses && /* @__PURE__ */ jsxs("div", {
606
+ className: "flex items-center gap-3 bg-[#faf8f3] p-3 rounded-xl border border-[#e8d9c0]/50",
607
+ children: [/* @__PURE__ */ jsx("div", {
608
+ className: "bg-white p-1.5 rounded-full shadow-sm border border-[#e8d9c0]",
609
+ children: /* @__PURE__ */ jsx(MapPin, { className: "w-4 h-4 text-[#478264]" })
610
+ }), /* @__PURE__ */ jsxs("div", {
611
+ className: "flex flex-col",
612
+ children: [/* @__PURE__ */ jsx("span", {
613
+ className: "text-[9px] uppercase tracking-widest text-[#213f31]/50 font-bold",
614
+ children: "Percorsi"
615
+ }), /* @__PURE__ */ jsx("span", {
616
+ className: "text-sm font-bold text-[#213f31]",
617
+ children: props.stats.courses
618
+ })]
619
+ })]
620
+ }),
621
+ props.stats.difficulty && /* @__PURE__ */ jsxs("div", {
622
+ className: "flex items-center gap-3 bg-[#faf8f3] p-3 rounded-xl border border-[#e8d9c0]/50",
623
+ children: [/* @__PURE__ */ jsx("div", {
624
+ className: "bg-white p-1.5 rounded-full shadow-sm border border-[#e8d9c0]",
625
+ children: /* @__PURE__ */ jsx(Gauge, { className: "w-4 h-4 text-[#478264]" })
626
+ }), /* @__PURE__ */ jsxs("div", {
627
+ className: "flex flex-col",
628
+ children: [/* @__PURE__ */ jsx("span", {
629
+ className: "text-[9px] uppercase tracking-widest text-[#213f31]/50 font-bold",
630
+ children: "Difficoltà"
631
+ }), /* @__PURE__ */ jsx("span", {
632
+ className: "text-sm font-bold text-[#213f31]",
633
+ children: props.stats.difficulty
634
+ })]
635
+ })]
636
+ }),
637
+ props.stats.terrain && /* @__PURE__ */ jsxs("div", {
638
+ className: "flex items-center gap-3 bg-[#faf8f3] p-3 rounded-xl border border-[#e8d9c0]/50",
639
+ children: [/* @__PURE__ */ jsx("div", {
640
+ className: "bg-white p-1.5 rounded-full shadow-sm border border-[#e8d9c0]",
641
+ children: /* @__PURE__ */ jsx(Mountain, { className: "w-4 h-4 text-[#478264]" })
642
+ }), /* @__PURE__ */ jsxs("div", {
643
+ className: "flex flex-col",
644
+ children: [/* @__PURE__ */ jsx("span", {
645
+ className: "text-[9px] uppercase tracking-widest text-[#213f31]/50 font-bold",
646
+ children: "Terreno"
647
+ }), /* @__PURE__ */ jsx("span", {
648
+ className: "text-sm font-bold text-[#213f31]",
649
+ children: props.stats.terrain
650
+ })]
651
+ })]
652
+ })
653
+ ]
654
+ }),
655
+ /* @__PURE__ */ jsx("p", {
656
+ className: "text-sm text-[#213f31]/80 leading-relaxed mb-6 font-sans",
657
+ children: props.description
658
+ }),
659
+ props.attractions && props.attractions.length > 0 && /* @__PURE__ */ jsxs("div", {
660
+ className: "mb-6 bg-[#faf8f3] p-4 rounded-xl border border-[#e8d9c0]/50",
661
+ children: [/* @__PURE__ */ jsx("h4", {
662
+ className: "text-[10px] font-bold uppercase tracking-widest text-[#213f31]/60 mb-3",
663
+ children: "Nei dintorni"
664
+ }), /* @__PURE__ */ jsx("ul", {
665
+ className: "text-sm space-y-2 grid grid-cols-1 @lg:grid-cols-2 gap-x-4",
666
+ children: props.attractions.map((attr, i) => /* @__PURE__ */ jsxs("li", {
667
+ className: "flex items-center gap-2 text-[#213f31]/90",
668
+ children: [/* @__PURE__ */ jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-[#e8d9c0]" }), attr]
669
+ }, i))
670
+ })]
671
+ }),
672
+ /* @__PURE__ */ jsxs("div", {
673
+ className: "mt-auto pt-5 border-t border-[#e8d9c0] flex flex-wrap gap-5 text-xs text-[#213f31]/60 font-medium",
674
+ children: [
675
+ props.address && /* @__PURE__ */ jsxs("div", {
676
+ className: "flex items-center gap-2",
677
+ children: [/* @__PURE__ */ jsx(MapPin, { className: "w-4 h-4 text-[#478264]" }), /* @__PURE__ */ jsx("span", { children: props.address })]
678
+ }),
679
+ props.phone && /* @__PURE__ */ jsxs("div", {
680
+ className: "flex items-center gap-2",
681
+ children: [/* @__PURE__ */ jsx(Phone, { className: "w-4 h-4 text-[#478264]" }), /* @__PURE__ */ jsx("span", { children: props.phone })]
682
+ }),
683
+ props.email && /* @__PURE__ */ jsxs("div", {
684
+ className: "flex items-center gap-2",
685
+ children: [/* @__PURE__ */ jsx(Mail, { className: "w-4 h-4 text-[#478264]" }), /* @__PURE__ */ jsx("span", { children: props.email })]
686
+ })
687
+ ]
688
+ })
689
+ ]
690
+ })
691
+ ]
692
+ });
693
+ };
694
+ //#endregion
695
+ //#region src/blocks/golf-club-spotlight-skeleton.tsx
696
+ const GolfClubSpotlightSkeleton = (_props) => {
697
+ return /* @__PURE__ */ jsxs("div", {
698
+ "data-type": "golf-club-spotlight-skeleton",
699
+ className: "bg-card rounded-xl border border-border shadow-sm flex flex-col @md:flex-row overflow-hidden",
700
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "w-full @md:w-2/5 min-h-[250px] rounded-none" }), /* @__PURE__ */ jsxs("div", {
701
+ className: "w-full @md:w-3/5 p-6 @md:p-8 space-y-6",
702
+ children: [
703
+ /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-3/4 mb-2" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-1/2" })] }),
704
+ /* @__PURE__ */ jsx("div", {
705
+ className: "grid grid-cols-2 @lg:grid-cols-3 gap-3",
706
+ children: [
707
+ 1,
708
+ 2,
709
+ 3,
710
+ 4,
711
+ 5,
712
+ 6
713
+ ].map((i) => /* @__PURE__ */ jsx(Skeleton, { className: "h-12 w-full rounded-lg" }, i))
714
+ }),
715
+ /* @__PURE__ */ jsxs("div", {
716
+ className: "space-y-2",
717
+ children: [
718
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-full" }),
719
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-[90%]" }),
720
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-[80%]" })
721
+ ]
722
+ }),
723
+ /* @__PURE__ */ jsxs("div", {
724
+ className: "pt-4 border-t border-border flex gap-4",
725
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24" })]
726
+ })
727
+ ]
728
+ })]
729
+ });
730
+ };
731
+ //#endregion
732
+ //#region src/blocks/experience-grid.tsx
733
+ const ExperienceGrid = ({ props, children }) => {
734
+ return /* @__PURE__ */ jsxs("div", {
735
+ "data-type": "experience-grid",
736
+ className: cn("space-y-6 @md:space-y-8 py-4"),
737
+ children: [props.title && /* @__PURE__ */ jsxs("div", {
738
+ className: "flex flex-col items-center mb-8",
739
+ children: [/* @__PURE__ */ jsx("span", { className: "w-8 h-px bg-[#478264] mb-4" }), /* @__PURE__ */ jsx("h2", {
740
+ className: "font-heading text-3xl @md:text-4xl text-[#213f31] text-center italic",
741
+ children: props.title
742
+ })]
743
+ }), props.experiences && /* @__PURE__ */ jsx("div", {
744
+ className: "grid grid-cols-1 @md:grid-cols-2 @lg:grid-cols-3 gap-6",
745
+ children: props.experiences.map((exp, i) => {
746
+ return /* @__PURE__ */ jsxs("div", {
747
+ className: "bg-white rounded-xl border border-[#e8d9c0]/50 p-6 shadow-sm hover:shadow-xl transition-all duration-300 flex flex-col h-full relative group",
748
+ children: [
749
+ /* @__PURE__ */ jsx("div", { className: "absolute top-0 left-0 w-full h-1 bg-[#478264] rounded-t-xl opacity-0 group-hover:opacity-100 transition-opacity" }),
750
+ /* @__PURE__ */ jsx("div", {
751
+ className: "mb-4",
752
+ children: /* @__PURE__ */ jsx("span", {
753
+ className: "text-[10px] uppercase font-bold tracking-[0.2em] px-3 py-1.5 rounded-sm bg-[#faf8f3] text-[#213f31]/60 border border-[#e8d9c0]",
754
+ children: exp.category
755
+ })
756
+ }),
757
+ /* @__PURE__ */ jsx("h3", {
758
+ className: "font-heading text-2xl text-[#213f31] mb-2 leading-tight group-hover:text-[#478264] transition-colors",
759
+ children: exp.name
760
+ }),
761
+ exp.location && /* @__PURE__ */ jsxs("div", {
762
+ className: "flex items-center gap-1.5 text-xs text-[#213f31]/50 uppercase tracking-widest font-semibold mb-4",
763
+ children: [/* @__PURE__ */ jsx(MapPin, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ jsx("span", { children: exp.location })]
764
+ }),
765
+ /* @__PURE__ */ jsx("p", {
766
+ className: "text-sm text-[#213f31]/80 leading-relaxed mb-6 flex-grow font-sans",
767
+ children: exp.description
768
+ }),
769
+ exp.highlight && /* @__PURE__ */ jsx("div", {
770
+ className: "mt-auto pt-4 border-t border-[#e8d9c0]/50",
771
+ children: /* @__PURE__ */ jsxs("p", {
772
+ className: "text-sm italic text-[#b8955e] font-serif leading-relaxed",
773
+ children: [
774
+ "\"",
775
+ exp.highlight,
776
+ "\""
777
+ ]
778
+ })
779
+ })
780
+ ]
781
+ }, i);
782
+ })
783
+ })]
784
+ });
785
+ };
786
+ //#endregion
787
+ //#region src/blocks/experience-grid-skeleton.tsx
788
+ const ExperienceGridSkeleton = (_props) => {
789
+ return /* @__PURE__ */ jsxs("div", {
790
+ "data-type": "experience-grid-skeleton",
791
+ className: "space-y-6",
792
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-48" }), /* @__PURE__ */ jsx("div", {
793
+ className: "grid grid-cols-1 @md:grid-cols-2 @lg:grid-cols-3 gap-4",
794
+ children: [
795
+ 1,
796
+ 2,
797
+ 3
798
+ ].map((i) => /* @__PURE__ */ jsxs("div", {
799
+ className: "bg-card rounded-xl border border-border p-5 h-48 flex flex-col gap-3",
800
+ children: [
801
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-20 rounded-md" }),
802
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-3/4" }),
803
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-1/3" }),
804
+ /* @__PURE__ */ jsxs("div", {
805
+ className: "space-y-2 flex-grow",
806
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-full" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-[80%]" })]
807
+ })
808
+ ]
809
+ }, i))
810
+ })]
811
+ });
812
+ };
813
+ //#endregion
814
+ //#region src/blocks/route-strip.tsx
815
+ const TRANSPORT_ICONS = {
816
+ car: Car,
817
+ train: Train,
818
+ bus: Bus,
819
+ boat: Ship,
820
+ walk: Footprints,
821
+ flight: Plane
822
+ };
823
+ const RouteStrip = ({ props }) => {
824
+ if (!props.legs || props.legs.length === 0) return null;
825
+ return /* @__PURE__ */ jsxs("div", {
826
+ "data-type": "route-strip",
827
+ className: cn("bg-[#faf8f3] border border-[#e8d9c0] rounded-2xl p-6 @md:p-10 shadow-sm relative overflow-hidden"),
828
+ children: [
829
+ /* @__PURE__ */ jsx("div", { className: "absolute top-0 right-0 w-32 h-32 bg-[#e8d9c0]/10 rounded-bl-full -z-0" }),
830
+ /* @__PURE__ */ jsx("h3", {
831
+ className: "font-heading text-2xl text-[#213f31] mb-8 text-center italic",
832
+ children: "Il tuo itinerario"
833
+ }),
834
+ /* @__PURE__ */ jsxs("div", {
835
+ className: "hidden @md:flex items-center justify-between relative w-full px-8 pb-4 z-10",
836
+ children: [/* @__PURE__ */ jsx("div", { className: "absolute top-8 left-16 right-16 h-[1px] border-b border-dashed border-[#e8d9c0] -translate-y-1/2 z-0" }), props.legs.map((leg, i) => {
837
+ return /* @__PURE__ */ jsxs("div", {
838
+ className: "relative z-10 flex flex-col items-center group w-40",
839
+ children: [/* @__PURE__ */ jsxs("div", {
840
+ className: "flex items-center justify-center w-16 h-16 rounded-full bg-white border border-[#e8d9c0] shadow-md group-hover:border-[#b8955e] group-hover:shadow-lg transition-all mb-4 relative",
841
+ children: [/* @__PURE__ */ jsx(TRANSPORT_ICONS[leg.transport?.toLowerCase()] || Car, { className: "w-6 h-6 text-[#213f31]" }), /* @__PURE__ */ jsx("div", { className: "absolute -bottom-2 w-2 h-2 rounded-full bg-[#b8955e]" })]
842
+ }), /* @__PURE__ */ jsxs("div", {
843
+ className: "flex flex-col items-center text-center",
844
+ children: [
845
+ /* @__PURE__ */ jsx("span", {
846
+ className: "text-sm font-heading text-[#213f31] mb-1 text-xl leading-tight",
847
+ children: leg.from
848
+ }),
849
+ /* @__PURE__ */ jsxs("span", {
850
+ className: "text-[10px] uppercase tracking-widest text-[#213f31]/40 font-bold mb-2",
851
+ children: ["verso ", leg.to]
852
+ }),
853
+ /* @__PURE__ */ jsxs("div", {
854
+ className: "flex gap-2 bg-white px-3 py-1.5 rounded-sm border border-[#e8d9c0] shadow-sm",
855
+ children: [
856
+ leg.time && /* @__PURE__ */ jsx("span", {
857
+ className: "text-[#b8955e] text-[10px] font-bold uppercase tracking-wider",
858
+ children: leg.time
859
+ }),
860
+ leg.time && leg.distance && /* @__PURE__ */ jsx("span", {
861
+ className: "text-[#e8d9c0]",
862
+ children: "|"
863
+ }),
864
+ leg.distance && /* @__PURE__ */ jsx("span", {
865
+ className: "text-[#b8955e] text-[10px] font-bold uppercase tracking-wider",
866
+ children: leg.distance
867
+ })
868
+ ]
869
+ })
870
+ ]
871
+ })]
872
+ }, i);
873
+ })]
874
+ }),
875
+ /* @__PURE__ */ jsxs("div", {
876
+ className: "flex @md:hidden flex-col gap-8 relative pl-6 py-4 z-10",
877
+ children: [/* @__PURE__ */ jsx("div", { className: "absolute top-8 bottom-8 left-[39px] w-[1px] border-l border-dashed border-[#e8d9c0] z-0" }), props.legs.map((leg, i) => {
878
+ return /* @__PURE__ */ jsxs("div", {
879
+ className: "relative z-10 flex items-start gap-6",
880
+ children: [/* @__PURE__ */ jsxs("div", {
881
+ className: "flex items-center justify-center w-12 h-12 rounded-full bg-white border border-[#e8d9c0] shadow-sm shrink-0 relative mt-1",
882
+ children: [/* @__PURE__ */ jsx(TRANSPORT_ICONS[leg.transport?.toLowerCase()] || Car, { className: "w-5 h-5 text-[#213f31]" }), /* @__PURE__ */ jsx("div", { className: "absolute -right-1 top-1/2 -translate-y-1/2 w-2 h-2 rounded-full bg-[#b8955e]" })]
883
+ }), /* @__PURE__ */ jsxs("div", {
884
+ className: "flex flex-col bg-white p-4 rounded-xl border border-[#e8d9c0] shadow-sm w-full",
885
+ children: [/* @__PURE__ */ jsxs("div", {
886
+ className: "flex items-center gap-2 mb-2 flex-wrap",
887
+ children: [
888
+ /* @__PURE__ */ jsx("span", {
889
+ className: "text-xl font-heading text-[#213f31]",
890
+ children: leg.from
891
+ }),
892
+ /* @__PURE__ */ jsx("span", {
893
+ className: "text-[#e8d9c0] mx-1",
894
+ children: "⟶"
895
+ }),
896
+ /* @__PURE__ */ jsx("span", {
897
+ className: "text-xl font-heading text-[#213f31]/80",
898
+ children: leg.to
899
+ })
900
+ ]
901
+ }), /* @__PURE__ */ jsxs("div", {
902
+ className: "flex gap-3",
903
+ children: [leg.time && /* @__PURE__ */ jsx("span", {
904
+ className: "bg-[#faf8f3] border border-[#e8d9c0]/50 text-[#b8955e] text-[9px] uppercase tracking-widest font-bold px-2 py-1 rounded-sm",
905
+ children: leg.time
906
+ }), leg.distance && /* @__PURE__ */ jsx("span", {
907
+ className: "bg-[#faf8f3] border border-[#e8d9c0]/50 text-[#b8955e] text-[9px] uppercase tracking-widest font-bold px-2 py-1 rounded-sm",
908
+ children: leg.distance
909
+ })]
910
+ })]
911
+ })]
912
+ }, i);
913
+ })]
914
+ })
915
+ ]
916
+ });
917
+ };
918
+ //#endregion
919
+ //#region src/blocks/route-strip-skeleton.tsx
920
+ const RouteStripSkeleton = (_props) => {
921
+ return /* @__PURE__ */ jsxs("div", {
922
+ "data-type": "route-strip-skeleton",
923
+ className: "bg-muted rounded-xl p-6",
924
+ children: [/* @__PURE__ */ jsxs("div", {
925
+ className: "hidden @md:flex justify-between items-center relative w-full pt-4 pb-2 px-4",
926
+ children: [/* @__PURE__ */ jsx("div", { className: "absolute top-1/2 left-8 right-8 h-[2px] bg-border/40 -translate-y-1/2" }), [
927
+ 1,
928
+ 2,
929
+ 3
930
+ ].map((i) => /* @__PURE__ */ jsxs("div", {
931
+ className: "z-10 flex flex-col items-center bg-muted px-4 gap-3",
932
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "w-10 h-10 rounded-full" }), /* @__PURE__ */ jsxs("div", {
933
+ className: "flex flex-col items-center gap-1",
934
+ children: [
935
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-16" }),
936
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-2 w-12" }),
937
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-20 rounded" })
938
+ ]
939
+ })]
940
+ }, i))]
941
+ }), /* @__PURE__ */ jsxs("div", {
942
+ className: "flex @md:hidden flex-col gap-6 relative pl-4 py-2",
943
+ children: [/* @__PURE__ */ jsx("div", { className: "absolute top-4 bottom-4 left-[27px] w-[2px] bg-border/40" }), [
944
+ 1,
945
+ 2,
946
+ 3
947
+ ].map((i) => /* @__PURE__ */ jsxs("div", {
948
+ className: "z-10 flex items-start gap-4",
949
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "w-8 h-8 rounded-full shrink-0" }), /* @__PURE__ */ jsxs("div", {
950
+ className: "flex flex-col gap-2 pt-1 w-full max-w-[200px]",
951
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-full" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-24 rounded" })]
952
+ })]
953
+ }, i))]
954
+ })]
955
+ });
956
+ };
957
+ //#endregion
958
+ //#region src/blocks/taste-card.tsx
959
+ const BADGE_ICONS = {
960
+ wine: Wine,
961
+ food: UtensilsCrossed,
962
+ experience: Sparkles
963
+ };
964
+ const TasteCard = ({ props }) => {
965
+ const Icon = BADGE_ICONS[props.type?.toLowerCase()] || Sparkles;
966
+ return /* @__PURE__ */ jsxs("div", {
967
+ "data-type": "taste-card",
968
+ className: cn("bg-[#faf8f3] rounded-2xl border border-[#e8d9c0] shadow-lg overflow-hidden flex flex-col @md:flex-row group"),
969
+ children: [/* @__PURE__ */ jsxs("div", {
970
+ className: "w-full @md:w-[45%] min-h-[250px] relative overflow-hidden",
971
+ children: [
972
+ props.imageSrc ? /* @__PURE__ */ jsx("img", {
973
+ src: props.imageSrc,
974
+ alt: props.name,
975
+ className: "w-full h-full object-cover transition-transform duration-700 group-hover:scale-105"
976
+ }) : /* @__PURE__ */ jsx("div", {
977
+ className: "w-full h-full bg-[#f4ebd9] flex items-center justify-center p-8",
978
+ children: /* @__PURE__ */ jsx(Icon, { className: "w-16 h-16 text-[#b8955e]/20" })
979
+ }),
980
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/50 via-transparent to-transparent" }),
981
+ /* @__PURE__ */ jsxs("div", {
982
+ className: "absolute top-4 left-4 bg-white/95 backdrop-blur px-3 py-1.5 rounded-sm shadow-md flex items-center gap-2 z-10 border border-[#e8d9c0]/50",
983
+ children: [/* @__PURE__ */ jsx(Icon, { className: "w-4 h-4 text-[#8b3a3a]" }), /* @__PURE__ */ jsx("span", {
984
+ className: "text-[10px] font-bold uppercase tracking-widest text-[#213f31]",
985
+ children: props.type
986
+ })]
987
+ })
988
+ ]
989
+ }), /* @__PURE__ */ jsxs("div", {
990
+ className: "w-full @md:w-[55%] p-6 @md:p-8 flex flex-col bg-white",
991
+ children: [
992
+ /* @__PURE__ */ jsx("h3", {
993
+ className: "font-heading text-3xl text-[#213f31] mb-2 leading-tight",
994
+ children: props.name
995
+ }),
996
+ props.location && /* @__PURE__ */ jsxs("div", {
997
+ className: "flex items-center gap-1.5 text-[10px] uppercase tracking-[0.2em] font-bold text-[#b8955e] mb-5",
998
+ children: [/* @__PURE__ */ jsx(MapPin, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ jsx("span", { children: props.location })]
999
+ }),
1000
+ /* @__PURE__ */ jsx("p", {
1001
+ className: "text-base text-[#213f31]/80 leading-relaxed mb-6 font-sans",
1002
+ children: props.description
1003
+ }),
1004
+ props.highlights && props.highlights.length > 0 && /* @__PURE__ */ jsx("div", {
1005
+ className: "flex flex-wrap gap-2 mb-6",
1006
+ children: props.highlights.map((item, i) => /* @__PURE__ */ jsx("span", {
1007
+ className: "bg-[#faf8f3] border border-[#e8d9c0] text-[#213f31]/70 text-[10px] uppercase tracking-widest font-bold px-3 py-1.5 rounded-sm shadow-sm",
1008
+ children: item
1009
+ }, i))
1010
+ }),
1011
+ props.recommendation && /* @__PURE__ */ jsxs("div", {
1012
+ className: "mt-auto bg-gradient-to-r from-[#fdfbf7] to-white border border-[#e8d9c0]/50 border-l-2 border-l-[#8b3a3a] rounded-r-lg p-4 shadow-sm relative overflow-hidden",
1013
+ children: [/* @__PURE__ */ jsx("div", {
1014
+ className: "absolute right-0 top-0 bottom-0 opacity-5",
1015
+ children: /* @__PURE__ */ jsx(UtensilsCrossed, { className: "w-16 h-16" })
1016
+ }), /* @__PURE__ */ jsxs("p", {
1017
+ className: "text-sm italic text-[#213f31]/90 leading-relaxed relative z-10",
1018
+ children: [/* @__PURE__ */ jsx("span", {
1019
+ className: "font-sans font-bold uppercase tracking-widest text-[9px] text-[#8b3a3a] not-italic block mb-1",
1020
+ children: "Da non perdere"
1021
+ }), props.recommendation]
1022
+ })]
1023
+ })
1024
+ ]
1025
+ })]
1026
+ });
1027
+ };
1028
+ //#endregion
1029
+ //#region src/blocks/taste-card-skeleton.tsx
1030
+ const TasteCardSkeleton = (_props) => {
1031
+ return /* @__PURE__ */ jsxs("div", {
1032
+ "data-type": "taste-card-skeleton",
1033
+ className: "bg-card rounded-xl border border-border shadow-sm flex flex-col @md:flex-row overflow-hidden",
1034
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "w-full @md:w-[40%] min-h-[200px] rounded-none" }), /* @__PURE__ */ jsxs("div", {
1035
+ className: "w-full @md:w-[60%] p-5 @md:p-6 flex flex-col gap-4",
1036
+ children: [
1037
+ /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-3/4 mb-2" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-1/3" })] }),
1038
+ /* @__PURE__ */ jsxs("div", {
1039
+ className: "space-y-2",
1040
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-full" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-[90%]" })]
1041
+ }),
1042
+ /* @__PURE__ */ jsxs("div", {
1043
+ className: "flex gap-2",
1044
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-20 rounded-full" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-24 rounded-full" })]
1045
+ }),
1046
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-10 w-full mt-auto rounded-lg" })
1047
+ ]
1048
+ })]
1049
+ });
1050
+ };
1051
+ //#endregion
1052
+ //#region src/blocks/stay-card.tsx
1053
+ const StayCard = ({ props }) => {
1054
+ return /* @__PURE__ */ jsxs("div", {
1055
+ "data-type": "stay-card",
1056
+ className: cn("bg-white rounded-2xl border border-[#e8d9c0] shadow-lg overflow-hidden flex flex-col relative group"),
1057
+ children: [
1058
+ props.priceRange && /* @__PURE__ */ jsx("div", {
1059
+ className: "absolute top-4 right-4 bg-[#213f31]/90 backdrop-blur px-3 py-1.5 rounded-sm shadow-md z-10 text-[10px] uppercase tracking-[0.2em] font-bold text-[#e8d9c0] border border-[#e8d9c0]/20",
1060
+ children: props.priceRange
1061
+ }),
1062
+ /* @__PURE__ */ jsxs("div", {
1063
+ className: "w-full aspect-[4/3] relative overflow-hidden",
1064
+ children: [props.imageSrc ? /* @__PURE__ */ jsx("img", {
1065
+ src: props.imageSrc,
1066
+ alt: props.name,
1067
+ className: "w-full h-full object-cover transition-transform duration-700 group-hover:scale-105"
1068
+ }) : /* @__PURE__ */ jsx("div", {
1069
+ className: "w-full h-full bg-[#faf8f3] flex items-center justify-center border-b border-[#e8d9c0]",
1070
+ children: /* @__PURE__ */ jsx(Bed, { className: "w-12 h-12 text-[#b8955e]/20" })
1071
+ }), /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/60 to-transparent" })]
1072
+ }),
1073
+ /* @__PURE__ */ jsxs("div", {
1074
+ className: "p-6 @md:p-8 flex flex-col flex-grow relative bg-white",
1075
+ children: [
1076
+ /* @__PURE__ */ jsxs("div", {
1077
+ className: "absolute -top-6 left-6 right-6 flex items-center justify-between",
1078
+ children: [/* @__PURE__ */ jsx("span", {
1079
+ className: "text-[10px] font-bold uppercase tracking-widest text-white bg-[#b8955e] px-3 py-1.5 rounded-sm shadow-md",
1080
+ children: props.type
1081
+ }), props.stars && /* @__PURE__ */ jsx("div", {
1082
+ className: "flex gap-0.5 text-[#e8d9c0] text-sm tracking-tighter bg-[#213f31] px-2 py-1 rounded-sm shadow-md",
1083
+ children: "★".repeat(props.stars)
1084
+ })]
1085
+ }),
1086
+ /* @__PURE__ */ jsxs("div", {
1087
+ className: "mt-2",
1088
+ children: [/* @__PURE__ */ jsx("h3", {
1089
+ className: "font-heading text-3xl text-[#213f31] leading-tight mb-2",
1090
+ children: props.name
1091
+ }), props.location && /* @__PURE__ */ jsxs("div", {
1092
+ className: "flex items-center gap-1.5 text-[10px] uppercase tracking-widest font-bold text-[#213f31]/50 mb-5",
1093
+ children: [/* @__PURE__ */ jsx(MapPin, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ jsx("span", { children: props.location })]
1094
+ })]
1095
+ }),
1096
+ props.features && props.features.length > 0 && /* @__PURE__ */ jsx("div", {
1097
+ className: "flex flex-col gap-2 mb-6",
1098
+ children: props.features.map((feature, i) => /* @__PURE__ */ jsxs("div", {
1099
+ className: "flex items-start gap-3 text-sm text-[#213f31]/80 font-sans",
1100
+ children: [/* @__PURE__ */ jsx("div", {
1101
+ className: "mt-0.5 bg-[#b8955e]/10 p-0.5 rounded-full shrink-0",
1102
+ children: /* @__PURE__ */ jsx(Check, { className: "w-3 h-3 text-[#b8955e]" })
1103
+ }), /* @__PURE__ */ jsx("span", { children: feature })]
1104
+ }, i))
1105
+ }),
1106
+ props.whyPerfect && /* @__PURE__ */ jsx("div", {
1107
+ className: "mt-auto bg-[#faf8f3] border border-[#e8d9c0] rounded-xl p-5 shadow-sm",
1108
+ children: /* @__PURE__ */ jsxs("p", {
1109
+ className: "text-sm italic text-[#213f31]/80 leading-relaxed",
1110
+ children: [/* @__PURE__ */ jsx("span", {
1111
+ className: "font-sans font-bold not-italic block text-[9px] uppercase tracking-[0.2em] text-[#b8955e] mb-1.5",
1112
+ children: "L'opinione dell'esperto"
1113
+ }), props.whyPerfect]
1114
+ })
1115
+ })
1116
+ ]
1117
+ })
1118
+ ]
1119
+ });
1120
+ };
1121
+ //#endregion
1122
+ //#region src/blocks/stay-card-skeleton.tsx
1123
+ const StayCardSkeleton = (_props) => {
1124
+ return /* @__PURE__ */ jsxs("div", {
1125
+ "data-type": "stay-card-skeleton",
1126
+ className: "bg-card rounded-xl border border-border shadow-sm flex flex-col overflow-hidden",
1127
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "w-full aspect-video rounded-none" }), /* @__PURE__ */ jsxs("div", {
1128
+ className: "p-5 flex flex-col gap-4",
1129
+ children: [
1130
+ /* @__PURE__ */ jsxs("div", {
1131
+ className: "flex gap-2",
1132
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-16 rounded" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-12 rounded" })]
1133
+ }),
1134
+ /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-3/4 mb-2" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-1/3" })] }),
1135
+ /* @__PURE__ */ jsxs("div", {
1136
+ className: "flex flex-wrap gap-2",
1137
+ children: [
1138
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-20 rounded" }),
1139
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-24 rounded" }),
1140
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-16 rounded" })
1141
+ ]
1142
+ }),
1143
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-20 w-full mt-2 rounded-lg" })
1144
+ ]
1145
+ })]
1146
+ });
1147
+ };
1148
+ //#endregion
1149
+ //#region src/blocks/trip-summary.tsx
1150
+ const TripSummary = ({ props }) => {
1151
+ return /* @__PURE__ */ jsxs("div", {
1152
+ "data-type": "trip-summary",
1153
+ className: cn("bg-[#213f31] text-[#faf8f3] rounded-2xl px-6 py-16 @md:px-12 relative overflow-hidden shadow-2xl"),
1154
+ children: [
1155
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 z-0 bg-[url('https://www.transparenttextures.com/patterns/cubes.png')] opacity-10 mix-blend-overlay" }),
1156
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/40 to-transparent z-0" }),
1157
+ /* @__PURE__ */ jsxs("div", {
1158
+ className: "relative z-10 flex flex-col items-center max-w-4xl mx-auto space-y-12",
1159
+ children: [
1160
+ /* @__PURE__ */ jsxs("div", {
1161
+ className: "text-center space-y-4",
1162
+ children: [/* @__PURE__ */ jsx("span", {
1163
+ className: "text-[10px] uppercase tracking-[0.3em] font-bold text-[#e8d9c0]",
1164
+ children: "Il Tuo Viaggio in Sintesi"
1165
+ }), /* @__PURE__ */ jsx("h2", {
1166
+ className: "font-heading italic text-4xl @md:text-5xl text-center leading-tight",
1167
+ children: props.title
1168
+ })]
1169
+ }),
1170
+ props.stats && props.stats.length > 0 && /* @__PURE__ */ jsx("div", {
1171
+ className: "flex flex-wrap justify-center gap-10 @md:gap-20 w-full py-8 border-y border-white/10",
1172
+ children: props.stats.map((stat, i) => /* @__PURE__ */ jsxs("div", {
1173
+ className: "flex flex-col items-center",
1174
+ children: [/* @__PURE__ */ jsx("span", {
1175
+ className: "font-heading text-5xl @md:text-6xl italic text-[#e8d9c0] mb-2 drop-shadow-md",
1176
+ children: stat.value
1177
+ }), /* @__PURE__ */ jsx("span", {
1178
+ className: "text-[10px] uppercase tracking-[0.2em] font-bold text-white/70",
1179
+ children: stat.label
1180
+ })]
1181
+ }, i))
1182
+ }),
1183
+ props.highlights && props.highlights.length > 0 && /* @__PURE__ */ jsxs("div", {
1184
+ className: "w-full max-w-3xl",
1185
+ children: [/* @__PURE__ */ jsx("h3", {
1186
+ className: "text-center font-sans text-xs uppercase tracking-[0.2em] font-bold text-[#e8d9c0] mb-8",
1187
+ children: "Highlights dell'Esperienza"
1188
+ }), /* @__PURE__ */ jsx("ul", {
1189
+ className: "grid grid-cols-1 @md:grid-cols-2 gap-y-6 gap-x-12",
1190
+ children: props.highlights.map((hl, i) => /* @__PURE__ */ jsxs("li", {
1191
+ className: "flex items-start gap-4",
1192
+ children: [/* @__PURE__ */ jsx("div", {
1193
+ className: "mt-1 bg-[#478264] rounded-full p-1 shrink-0 shadow-md border border-[#478264]/20",
1194
+ children: /* @__PURE__ */ jsx(Check, { className: "w-3 h-3 text-white" })
1195
+ }), /* @__PURE__ */ jsx("span", {
1196
+ className: "text-sm font-medium leading-relaxed text-white/90",
1197
+ children: hl
1198
+ })]
1199
+ }, i))
1200
+ })]
1201
+ }),
1202
+ props.closingMessage && /* @__PURE__ */ jsx("div", {
1203
+ className: "pt-8 w-full max-w-2xl text-center",
1204
+ children: /* @__PURE__ */ jsxs("p", {
1205
+ className: "font-heading italic text-2xl @md:text-3xl text-[#e8d9c0] leading-snug",
1206
+ children: [
1207
+ "“",
1208
+ props.closingMessage,
1209
+ "”"
1210
+ ]
1211
+ })
1212
+ }),
1213
+ props.ctaText && /* @__PURE__ */ jsx("div", {
1214
+ className: "mt-8",
1215
+ children: /* @__PURE__ */ jsx(Button, {
1216
+ className: "bg-[#e8d9c0] hover:bg-white text-[#213f31] rounded-full px-10 py-7 text-xs font-bold uppercase tracking-[0.2em] shadow-xl transition-all hover:scale-105 border-0",
1217
+ children: props.ctaText
1218
+ })
1219
+ })
1220
+ ]
1221
+ })
1222
+ ]
1223
+ });
1224
+ };
1225
+ //#endregion
1226
+ //#region src/blocks/trip-summary-skeleton.tsx
1227
+ const TripSummarySkeleton = (_props) => {
1228
+ return /* @__PURE__ */ jsx("div", {
1229
+ "data-type": "trip-summary-skeleton",
1230
+ className: "bg-primary/90 rounded-xl px-6 py-12 @md:px-12",
1231
+ children: /* @__PURE__ */ jsxs("div", {
1232
+ className: "flex flex-col items-center max-w-4xl mx-auto space-y-10",
1233
+ children: [
1234
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-10 w-2/3 max-w-md bg-primary-foreground/20" }),
1235
+ /* @__PURE__ */ jsx("div", {
1236
+ className: "flex flex-wrap justify-center gap-8 @md:gap-16 w-full",
1237
+ children: [
1238
+ 1,
1239
+ 2,
1240
+ 3
1241
+ ].map((i) => /* @__PURE__ */ jsxs("div", {
1242
+ className: "flex flex-col items-center gap-2",
1243
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-12 w-16 bg-primary-foreground/20" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-20 bg-primary-foreground/20" })]
1244
+ }, i))
1245
+ }),
1246
+ /* @__PURE__ */ jsx("div", {
1247
+ className: "bg-primary-foreground/10 rounded-2xl p-6 @md:p-8 w-full max-w-2xl",
1248
+ children: /* @__PURE__ */ jsx("div", {
1249
+ className: "grid grid-cols-1 @md:grid-cols-2 gap-4",
1250
+ children: [
1251
+ 1,
1252
+ 2,
1253
+ 3,
1254
+ 4
1255
+ ].map((i) => /* @__PURE__ */ jsxs("div", {
1256
+ className: "flex gap-3",
1257
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "w-5 h-5 rounded-full bg-primary-foreground/30 shrink-0" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-full bg-primary-foreground/20" })]
1258
+ }, i))
1259
+ })
1260
+ }),
1261
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-3/4 max-w-lg bg-primary-foreground/20" }),
1262
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-12 w-48 rounded-full bg-primary-foreground/20 mt-4" })
1263
+ ]
1264
+ })
1265
+ });
1266
+ };
1267
+ //#endregion
1268
+ //#region src/blocks/insider-tip.tsx
1269
+ const InsiderTip = ({ props }) => {
1270
+ return /* @__PURE__ */ jsxs("div", {
1271
+ "data-type": "insider-tip",
1272
+ className: cn("bg-gradient-to-r from-[#f4ebd9] to-white border border-[#e8d9c0] rounded-xl px-6 py-5 @md:px-8 @md:py-6 flex gap-5 shadow-sm relative overflow-hidden"),
1273
+ children: [
1274
+ /* @__PURE__ */ jsx("div", { className: "absolute left-0 top-0 bottom-0 w-1.5 bg-[#b8955e]" }),
1275
+ /* @__PURE__ */ jsx("div", {
1276
+ className: "bg-white p-3 rounded-full shadow-sm shrink-0 h-fit border border-[#e8d9c0]/50",
1277
+ children: /* @__PURE__ */ jsx(Lightbulb, { className: "w-6 h-6 text-[#b8955e]" })
1278
+ }),
1279
+ /* @__PURE__ */ jsxs("div", {
1280
+ className: "flex flex-col space-y-2",
1281
+ children: [
1282
+ /* @__PURE__ */ jsx("div", {
1283
+ className: "flex items-center gap-2",
1284
+ children: /* @__PURE__ */ jsx("span", {
1285
+ className: "text-[9px] uppercase tracking-widest font-bold text-[#b8955e] bg-[#b8955e]/10 px-2 py-1 rounded-sm",
1286
+ children: "Il consiglio del concierge"
1287
+ })
1288
+ }),
1289
+ props.title && /* @__PURE__ */ jsx("h4", {
1290
+ className: "font-heading text-xl text-[#213f31] leading-tight",
1291
+ children: props.title
1292
+ }),
1293
+ /* @__PURE__ */ jsx("p", {
1294
+ className: "font-sans text-sm text-[#213f31]/80 leading-relaxed",
1295
+ children: props.text
1296
+ }),
1297
+ props.source && /* @__PURE__ */ jsx("span", {
1298
+ className: "text-[10px] uppercase tracking-widest font-bold text-[#213f31]/40 mt-3 block",
1299
+ children: props.source
1300
+ })
1301
+ ]
1302
+ })
1303
+ ]
1304
+ });
1305
+ };
1306
+ //#endregion
1307
+ //#region src/blocks/insider-tip-skeleton.tsx
1308
+ const InsiderTipSkeleton = (_props) => {
1309
+ return /* @__PURE__ */ jsxs("div", {
1310
+ "data-type": "insider-tip-skeleton",
1311
+ className: "bg-muted/30 border-l-4 border-muted rounded-r-xl px-6 py-5 flex gap-4",
1312
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "w-6 h-6 rounded-full shrink-0" }), /* @__PURE__ */ jsxs("div", {
1313
+ className: "flex flex-col w-full gap-2 pt-1",
1314
+ children: [
1315
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-1/3" }),
1316
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-full" }),
1317
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-[80%]" }),
1318
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-1/4 mt-2" })
1319
+ ]
1320
+ })]
1321
+ });
1322
+ };
1323
+ //#endregion
1324
+ //#region src/registry.ts
1325
+ const { registry, handlers, executeAction } = defineRegistry(catalog, {
1326
+ components: {
1327
+ Root,
1328
+ Link,
1329
+ HeroViaggio,
1330
+ HeroViaggioSkeleton,
1331
+ ConceptCard,
1332
+ ConceptCardSkeleton,
1333
+ DayPlan,
1334
+ DayPlanSkeleton,
1335
+ GolfClubSpotlight,
1336
+ GolfClubSpotlightSkeleton,
1337
+ ExperienceGrid,
1338
+ ExperienceGridSkeleton,
1339
+ RouteStrip,
1340
+ RouteStripSkeleton,
1341
+ TasteCard,
1342
+ TasteCardSkeleton,
1343
+ StayCard,
1344
+ StayCardSkeleton,
1345
+ TripSummary,
1346
+ TripSummarySkeleton,
1347
+ InsiderTip,
1348
+ InsiderTipSkeleton
1349
+ },
1350
+ actions: {
1351
+ setState: async () => {},
1352
+ pushState: async () => {},
1353
+ removeState: async () => {},
1354
+ linkClick: async (params) => {
1355
+ const href = params?.href || "#";
1356
+ toast.info(`Navigating to: ${href}`);
1357
+ }
1358
+ }
1359
+ });
1360
+ /**
1361
+ * Render a single component to static HTML for layout builder previews.
1362
+ */
1363
+ function renderPreview(componentName, props) {
1364
+ const Component = registry[componentName];
1365
+ if (!Component) return null;
1366
+ const elementProps = {
1367
+ props,
1368
+ emit: () => {},
1369
+ on: () => ({
1370
+ shouldPreventDefault: false,
1371
+ emit: () => {},
1372
+ bound: false
1373
+ }),
1374
+ element: {
1375
+ type: componentName,
1376
+ props
1377
+ },
1378
+ loading: false
1379
+ };
1380
+ return renderToStaticMarkup(React.createElement(Component, elementProps));
1381
+ }
1382
+ //#endregion
1383
+ export { renderPreview as i, handlers as n, registry as r, executeAction as t };
1384
+
1385
+ //# sourceMappingURL=registry-YcWNxjzA.mjs.map