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