@ctonti/ask-golf-veneto 1.0.0

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