@shopito/design-system-fe 0.1.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 (99) hide show
  1. package/README.md +99 -0
  2. package/dist/BannerCarousel/BannerCarousel.d.ts +31 -0
  3. package/dist/BannerCarousel/BannerCarousel.d.ts.map +1 -0
  4. package/dist/BannerCarousel/index.d.ts +3 -0
  5. package/dist/BannerCarousel/index.d.ts.map +1 -0
  6. package/dist/CallToAction/CallToAction.d.ts +34 -0
  7. package/dist/CallToAction/CallToAction.d.ts.map +1 -0
  8. package/dist/CallToAction/index.d.ts +3 -0
  9. package/dist/CallToAction/index.d.ts.map +1 -0
  10. package/dist/CategoryTree/CategoryTree.d.ts +19 -0
  11. package/dist/CategoryTree/CategoryTree.d.ts.map +1 -0
  12. package/dist/CategoryTree/index.d.ts +3 -0
  13. package/dist/CategoryTree/index.d.ts.map +1 -0
  14. package/dist/Footer/Footer.d.ts +34 -0
  15. package/dist/Footer/Footer.d.ts.map +1 -0
  16. package/dist/Footer/index.d.ts +3 -0
  17. package/dist/Footer/index.d.ts.map +1 -0
  18. package/dist/Header/Header.d.ts +37 -0
  19. package/dist/Header/Header.d.ts.map +1 -0
  20. package/dist/Header/index.d.ts +3 -0
  21. package/dist/Header/index.d.ts.map +1 -0
  22. package/dist/MegaMenu/MegaMenu.d.ts +34 -0
  23. package/dist/MegaMenu/MegaMenu.d.ts.map +1 -0
  24. package/dist/MegaMenu/index.d.ts +3 -0
  25. package/dist/MegaMenu/index.d.ts.map +1 -0
  26. package/dist/ProductCard/ProductCard.d.ts +36 -0
  27. package/dist/ProductCard/ProductCard.d.ts.map +1 -0
  28. package/dist/ProductCard/index.d.ts +3 -0
  29. package/dist/ProductCard/index.d.ts.map +1 -0
  30. package/dist/ProductGrid/ProductGrid.d.ts +39 -0
  31. package/dist/ProductGrid/ProductGrid.d.ts.map +1 -0
  32. package/dist/ProductGrid/index.d.ts +3 -0
  33. package/dist/ProductGrid/index.d.ts.map +1 -0
  34. package/dist/common/Alert/Alert.d.ts +11 -0
  35. package/dist/common/Alert/Alert.d.ts.map +1 -0
  36. package/dist/common/Alert/index.d.ts +2 -0
  37. package/dist/common/Alert/index.d.ts.map +1 -0
  38. package/dist/common/Avatar/Avatar.d.ts +16 -0
  39. package/dist/common/Avatar/Avatar.d.ts.map +1 -0
  40. package/dist/common/Avatar/index.d.ts +2 -0
  41. package/dist/common/Avatar/index.d.ts.map +1 -0
  42. package/dist/common/Badge/Badge.d.ts +12 -0
  43. package/dist/common/Badge/Badge.d.ts.map +1 -0
  44. package/dist/common/Badge/index.d.ts +2 -0
  45. package/dist/common/Badge/index.d.ts.map +1 -0
  46. package/dist/common/Button/Button.d.ts +12 -0
  47. package/dist/common/Button/Button.d.ts.map +1 -0
  48. package/dist/common/Button/index.d.ts +2 -0
  49. package/dist/common/Button/index.d.ts.map +1 -0
  50. package/dist/common/Card/Card.d.ts +21 -0
  51. package/dist/common/Card/Card.d.ts.map +1 -0
  52. package/dist/common/Card/index.d.ts +2 -0
  53. package/dist/common/Card/index.d.ts.map +1 -0
  54. package/dist/common/Checkbox/Checkbox.d.ts +9 -0
  55. package/dist/common/Checkbox/Checkbox.d.ts.map +1 -0
  56. package/dist/common/Checkbox/index.d.ts +2 -0
  57. package/dist/common/Checkbox/index.d.ts.map +1 -0
  58. package/dist/common/Input/Input.d.ts +11 -0
  59. package/dist/common/Input/Input.d.ts.map +1 -0
  60. package/dist/common/Input/index.d.ts +2 -0
  61. package/dist/common/Input/index.d.ts.map +1 -0
  62. package/dist/common/Modal/Modal.d.ts +14 -0
  63. package/dist/common/Modal/Modal.d.ts.map +1 -0
  64. package/dist/common/Modal/index.d.ts +2 -0
  65. package/dist/common/Modal/index.d.ts.map +1 -0
  66. package/dist/common/Pagination/Pagination.d.ts +8 -0
  67. package/dist/common/Pagination/Pagination.d.ts.map +1 -0
  68. package/dist/common/Pagination/index.d.ts +2 -0
  69. package/dist/common/Pagination/index.d.ts.map +1 -0
  70. package/dist/common/Select/Select.d.ts +16 -0
  71. package/dist/common/Select/Select.d.ts.map +1 -0
  72. package/dist/common/Select/index.d.ts +2 -0
  73. package/dist/common/Select/index.d.ts.map +1 -0
  74. package/dist/common/Spinner/Spinner.d.ts +11 -0
  75. package/dist/common/Spinner/Spinner.d.ts.map +1 -0
  76. package/dist/common/Spinner/index.d.ts +2 -0
  77. package/dist/common/Spinner/index.d.ts.map +1 -0
  78. package/dist/common/Tabs/Tabs.d.ts +24 -0
  79. package/dist/common/Tabs/Tabs.d.ts.map +1 -0
  80. package/dist/common/Tabs/index.d.ts +2 -0
  81. package/dist/common/Tabs/index.d.ts.map +1 -0
  82. package/dist/common/Toggle/Toggle.d.ts +10 -0
  83. package/dist/common/Toggle/Toggle.d.ts.map +1 -0
  84. package/dist/common/Toggle/index.d.ts +2 -0
  85. package/dist/common/Toggle/index.d.ts.map +1 -0
  86. package/dist/common/Typography/Typography.d.ts +20 -0
  87. package/dist/common/Typography/Typography.d.ts.map +1 -0
  88. package/dist/common/Typography/index.d.ts +2 -0
  89. package/dist/common/Typography/index.d.ts.map +1 -0
  90. package/dist/index.cjs +2 -0
  91. package/dist/index.cjs.map +1 -0
  92. package/dist/index.d.ts +44 -0
  93. package/dist/index.d.ts.map +1 -0
  94. package/dist/index.js +2089 -0
  95. package/dist/index.js.map +1 -0
  96. package/dist/style.cjs +0 -0
  97. package/dist/style.css +3 -0
  98. package/dist/style.js +0 -0
  99. package/package.json +78 -0
package/dist/index.js ADDED
@@ -0,0 +1,2089 @@
1
+ import { createContext as e, forwardRef as t, useCallback as n, useContext as r, useEffect as i, useRef as a, useState as o } from "react";
2
+ import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
3
+ import { createPortal as u } from "react-dom";
4
+ //#region src/components/common/Button/Button.tsx
5
+ var d = {
6
+ primary: "bg-primary-600 text-white hover:bg-primary-700 active:bg-primary-800 focus-visible:ring-primary-500",
7
+ secondary: "bg-gray-100 text-gray-900 hover:bg-gray-200 active:bg-gray-300 focus-visible:ring-gray-400",
8
+ outline: "border border-gray-300 bg-white text-gray-700 hover:bg-gray-50 active:bg-gray-100 focus-visible:ring-gray-400",
9
+ ghost: "bg-transparent text-gray-700 hover:bg-gray-100 active:bg-gray-200 focus-visible:ring-gray-400",
10
+ danger: "bg-danger-600 text-white hover:bg-danger-700 active:bg-danger-800 focus-visible:ring-danger-500"
11
+ }, f = {
12
+ xs: "h-7 px-2.5 text-xs gap-1",
13
+ sm: "h-8 px-3 text-sm gap-1.5",
14
+ md: "h-10 px-4 text-sm gap-2",
15
+ lg: "h-11 px-5 text-base gap-2"
16
+ }, p = t(({ variant: e = "primary", size: t = "md", loading: n = !1, fullWidth: r = !1, disabled: i, children: a, className: o = "", ...s }, u) => /* @__PURE__ */ l("button", {
17
+ ref: u,
18
+ disabled: i || n,
19
+ className: [
20
+ "inline-flex items-center justify-center rounded-md font-medium transition-colors",
21
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
22
+ "disabled:pointer-events-none disabled:opacity-50",
23
+ d[e],
24
+ f[t],
25
+ r ? "w-full" : "",
26
+ o
27
+ ].filter(Boolean).join(" "),
28
+ ...s,
29
+ children: [n && /* @__PURE__ */ l("svg", {
30
+ className: "animate-spin h-4 w-4 shrink-0",
31
+ xmlns: "http://www.w3.org/2000/svg",
32
+ fill: "none",
33
+ viewBox: "0 0 24 24",
34
+ children: [/* @__PURE__ */ c("circle", {
35
+ className: "opacity-25",
36
+ cx: "12",
37
+ cy: "12",
38
+ r: "10",
39
+ stroke: "currentColor",
40
+ strokeWidth: "4"
41
+ }), /* @__PURE__ */ c("path", {
42
+ className: "opacity-75",
43
+ fill: "currentColor",
44
+ d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"
45
+ })]
46
+ }), a]
47
+ }));
48
+ p.displayName = "Button";
49
+ //#endregion
50
+ //#region src/components/common/Input/Input.tsx
51
+ var m = t(({ label: e, error: t, hint: n, leftIcon: r, rightIcon: i, fullWidth: a = !1, className: o = "", id: s, ...u }, d) => {
52
+ let f = s ?? e?.toLowerCase().replace(/\s+/g, "-");
53
+ return /* @__PURE__ */ l("div", {
54
+ className: a ? "w-full" : "inline-block",
55
+ children: [
56
+ e && /* @__PURE__ */ c("label", {
57
+ htmlFor: f,
58
+ className: "block text-sm font-medium text-gray-700 mb-1",
59
+ children: e
60
+ }),
61
+ /* @__PURE__ */ l("div", {
62
+ className: "relative",
63
+ children: [
64
+ r && /* @__PURE__ */ c("span", {
65
+ className: "absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 pointer-events-none",
66
+ children: r
67
+ }),
68
+ /* @__PURE__ */ c("input", {
69
+ ref: d,
70
+ id: f,
71
+ className: [
72
+ "h-10 rounded-md border bg-white px-3 text-sm text-gray-900 placeholder:text-gray-400",
73
+ "transition-colors outline-none",
74
+ "focus:border-primary-500 focus:ring-2 focus:ring-primary-500/20",
75
+ "disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500",
76
+ t ? "border-danger-500 focus:border-danger-500 focus:ring-danger-500/20" : "border-gray-300",
77
+ r ? "pl-9" : "",
78
+ i ? "pr-9" : "",
79
+ a ? "w-full" : "",
80
+ o
81
+ ].filter(Boolean).join(" "),
82
+ ...u
83
+ }),
84
+ i && /* @__PURE__ */ c("span", {
85
+ className: "absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 pointer-events-none",
86
+ children: i
87
+ })
88
+ ]
89
+ }),
90
+ (t || n) && /* @__PURE__ */ c("p", {
91
+ className: `mt-1 text-xs ${t ? "text-danger-600" : "text-gray-500"}`,
92
+ children: t ?? n
93
+ })
94
+ ]
95
+ });
96
+ });
97
+ m.displayName = "Input";
98
+ //#endregion
99
+ //#region src/components/common/Select/Select.tsx
100
+ var h = t(({ label: e, error: t, hint: n, options: r, placeholder: i, fullWidth: a = !1, className: o = "", id: s, ...u }, d) => {
101
+ let f = s ?? e?.toLowerCase().replace(/\s+/g, "-");
102
+ return /* @__PURE__ */ l("div", {
103
+ className: a ? "w-full" : "inline-block",
104
+ children: [
105
+ e && /* @__PURE__ */ c("label", {
106
+ htmlFor: f,
107
+ className: "block text-sm font-medium text-gray-700 mb-1",
108
+ children: e
109
+ }),
110
+ /* @__PURE__ */ l("div", {
111
+ className: "relative",
112
+ children: [/* @__PURE__ */ l("select", {
113
+ ref: d,
114
+ id: f,
115
+ className: [
116
+ "h-10 rounded-md border bg-white px-3 pr-8 text-sm text-gray-900",
117
+ "appearance-none transition-colors outline-none",
118
+ "focus:border-primary-500 focus:ring-2 focus:ring-primary-500/20",
119
+ "disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500",
120
+ t ? "border-danger-500 focus:border-danger-500 focus:ring-danger-500/20" : "border-gray-300",
121
+ a ? "w-full" : "",
122
+ o
123
+ ].filter(Boolean).join(" "),
124
+ ...u,
125
+ children: [i && /* @__PURE__ */ c("option", {
126
+ value: "",
127
+ disabled: !0,
128
+ children: i
129
+ }), r.map((e) => /* @__PURE__ */ c("option", {
130
+ value: e.value,
131
+ disabled: e.disabled,
132
+ children: e.label
133
+ }, e.value))]
134
+ }), /* @__PURE__ */ c("span", {
135
+ className: "pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-gray-400",
136
+ children: /* @__PURE__ */ c("svg", {
137
+ xmlns: "http://www.w3.org/2000/svg",
138
+ fill: "none",
139
+ viewBox: "0 0 24 24",
140
+ strokeWidth: 2,
141
+ stroke: "currentColor",
142
+ className: "w-4 h-4",
143
+ children: /* @__PURE__ */ c("path", {
144
+ strokeLinecap: "round",
145
+ strokeLinejoin: "round",
146
+ d: "M19.5 8.25l-7.5 7.5-7.5-7.5"
147
+ })
148
+ })
149
+ })]
150
+ }),
151
+ (t || n) && /* @__PURE__ */ c("p", {
152
+ className: `mt-1 text-xs ${t ? "text-danger-600" : "text-gray-500"}`,
153
+ children: t ?? n
154
+ })
155
+ ]
156
+ });
157
+ });
158
+ h.displayName = "Select";
159
+ //#endregion
160
+ //#region src/components/common/Typography/Typography.tsx
161
+ var g = {
162
+ 1: "text-4xl font-bold tracking-tight",
163
+ 2: "text-3xl font-bold tracking-tight",
164
+ 3: "text-2xl font-semibold",
165
+ 4: "text-xl font-semibold",
166
+ 5: "text-lg font-medium",
167
+ 6: "text-base font-medium"
168
+ }, _ = {
169
+ body: "text-base",
170
+ "body-sm": "text-sm",
171
+ caption: "text-xs",
172
+ overline: "text-xs font-semibold uppercase tracking-wider",
173
+ code: "font-mono text-sm bg-gray-100 px-1.5 py-0.5 rounded"
174
+ }, v = {
175
+ default: "text-gray-900",
176
+ muted: "text-gray-500",
177
+ primary: "text-primary-600",
178
+ success: "text-success-600",
179
+ warning: "text-warning-600",
180
+ danger: "text-danger-600",
181
+ inherit: ""
182
+ };
183
+ function y({ as: e, level: t = 1, color: n = "default", className: r = "", children: i, ...a }) {
184
+ return /* @__PURE__ */ c(e ?? `h${t}`, {
185
+ className: [
186
+ g[t],
187
+ v[n],
188
+ r
189
+ ].filter(Boolean).join(" "),
190
+ ...a,
191
+ children: i
192
+ });
193
+ }
194
+ function b({ variant: e = "body", color: t = "default", as: n = "p", className: r = "", children: i, ...a }) {
195
+ return /* @__PURE__ */ c(n, {
196
+ className: [
197
+ _[e],
198
+ v[t],
199
+ r
200
+ ].filter(Boolean).join(" "),
201
+ ...a,
202
+ children: i
203
+ });
204
+ }
205
+ //#endregion
206
+ //#region src/components/common/Badge/Badge.tsx
207
+ var x = {
208
+ default: "bg-gray-100 text-gray-700",
209
+ primary: "bg-primary-100 text-primary-700",
210
+ success: "bg-success-50 text-success-700",
211
+ warning: "bg-warning-50 text-warning-700",
212
+ danger: "bg-danger-50 text-danger-700",
213
+ outline: "border border-gray-300 text-gray-700 bg-transparent"
214
+ }, S = {
215
+ default: "bg-gray-500",
216
+ primary: "bg-primary-500",
217
+ success: "bg-success-500",
218
+ warning: "bg-warning-500",
219
+ danger: "bg-danger-500",
220
+ outline: "bg-gray-400"
221
+ }, C = {
222
+ sm: "px-2 py-0.5 text-xs",
223
+ md: "px-2.5 py-1 text-xs"
224
+ };
225
+ function w({ variant: e = "default", size: t = "md", dot: n = !1, className: r = "", children: i, ...a }) {
226
+ return /* @__PURE__ */ l("span", {
227
+ className: [
228
+ "inline-flex items-center gap-1.5 rounded-full font-medium",
229
+ x[e],
230
+ C[t],
231
+ r
232
+ ].filter(Boolean).join(" "),
233
+ ...a,
234
+ children: [n && /* @__PURE__ */ c("span", { className: `inline-block w-1.5 h-1.5 rounded-full ${S[e]}` }), i]
235
+ });
236
+ }
237
+ //#endregion
238
+ //#region src/components/common/Card/Card.tsx
239
+ var T = {
240
+ none: "",
241
+ sm: "p-4",
242
+ md: "p-6",
243
+ lg: "p-8"
244
+ };
245
+ function E({ children: e, padding: t = "md", shadow: n = !0, border: r = !0, className: i = "", ...a }) {
246
+ return /* @__PURE__ */ c("div", {
247
+ className: [
248
+ "bg-white rounded-xl overflow-hidden",
249
+ r ? "border border-gray-200" : "",
250
+ n ? "shadow-sm" : "",
251
+ T[t],
252
+ i
253
+ ].filter(Boolean).join(" "),
254
+ ...a,
255
+ children: e
256
+ });
257
+ }
258
+ function D({ children: e, className: t = "", ...n }) {
259
+ return /* @__PURE__ */ c("div", {
260
+ className: ["px-6 py-4 border-b border-gray-100", t].filter(Boolean).join(" "),
261
+ ...n,
262
+ children: e
263
+ });
264
+ }
265
+ function O({ children: e, className: t = "", ...n }) {
266
+ return /* @__PURE__ */ c("div", {
267
+ className: ["p-6", t].filter(Boolean).join(" "),
268
+ ...n,
269
+ children: e
270
+ });
271
+ }
272
+ function ee({ children: e, className: t = "", ...n }) {
273
+ return /* @__PURE__ */ c("div", {
274
+ className: ["px-6 py-4 border-t border-gray-100 bg-gray-50", t].filter(Boolean).join(" "),
275
+ ...n,
276
+ children: e
277
+ });
278
+ }
279
+ //#endregion
280
+ //#region src/components/common/Spinner/Spinner.tsx
281
+ var te = {
282
+ xs: "w-3 h-3 border-[1.5px]",
283
+ sm: "w-4 h-4 border-2",
284
+ md: "w-6 h-6 border-2",
285
+ lg: "w-8 h-8 border-[3px]",
286
+ xl: "w-12 h-12 border-4"
287
+ }, ne = {
288
+ primary: "border-primary-200 border-t-primary-600",
289
+ white: "border-white/30 border-t-white",
290
+ gray: "border-gray-200 border-t-gray-600"
291
+ };
292
+ function re({ size: e = "md", color: t = "primary", label: n = "Loading…", className: r = "", ...i }) {
293
+ return /* @__PURE__ */ l("span", {
294
+ role: "status",
295
+ "aria-label": n,
296
+ className: ["inline-block", r].filter(Boolean).join(" "),
297
+ ...i,
298
+ children: [/* @__PURE__ */ c("span", { className: [
299
+ "block rounded-full animate-spin",
300
+ te[e],
301
+ ne[t]
302
+ ].join(" ") }), /* @__PURE__ */ c("span", {
303
+ className: "sr-only",
304
+ children: n
305
+ })]
306
+ });
307
+ }
308
+ //#endregion
309
+ //#region src/components/common/Alert/Alert.tsx
310
+ var k = {
311
+ info: {
312
+ container: "bg-primary-50 border-primary-200 text-primary-800",
313
+ icon: "text-primary-500",
314
+ iconPath: /* @__PURE__ */ c("path", {
315
+ strokeLinecap: "round",
316
+ strokeLinejoin: "round",
317
+ d: "M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z"
318
+ })
319
+ },
320
+ success: {
321
+ container: "bg-success-50 border-success-200 text-success-800",
322
+ icon: "text-success-500",
323
+ iconPath: /* @__PURE__ */ c("path", {
324
+ strokeLinecap: "round",
325
+ strokeLinejoin: "round",
326
+ d: "M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
327
+ })
328
+ },
329
+ warning: {
330
+ container: "bg-warning-50 border-warning-200 text-warning-800",
331
+ icon: "text-warning-500",
332
+ iconPath: /* @__PURE__ */ c("path", {
333
+ strokeLinecap: "round",
334
+ strokeLinejoin: "round",
335
+ d: "M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"
336
+ })
337
+ },
338
+ danger: {
339
+ container: "bg-danger-50 border-danger-200 text-danger-800",
340
+ icon: "text-danger-500",
341
+ iconPath: /* @__PURE__ */ c("path", {
342
+ strokeLinecap: "round",
343
+ strokeLinejoin: "round",
344
+ d: "M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z"
345
+ })
346
+ }
347
+ };
348
+ function A({ variant: e = "info", title: t, children: n, onClose: r, className: i = "", ...a }) {
349
+ let o = k[e];
350
+ return /* @__PURE__ */ l("div", {
351
+ role: "alert",
352
+ className: [
353
+ "flex gap-3 rounded-lg border p-4",
354
+ o.container,
355
+ i
356
+ ].filter(Boolean).join(" "),
357
+ ...a,
358
+ children: [
359
+ /* @__PURE__ */ c("svg", {
360
+ xmlns: "http://www.w3.org/2000/svg",
361
+ fill: "none",
362
+ viewBox: "0 0 24 24",
363
+ strokeWidth: 1.5,
364
+ stroke: "currentColor",
365
+ className: `w-5 h-5 shrink-0 mt-0.5 ${o.icon}`,
366
+ children: o.iconPath
367
+ }),
368
+ /* @__PURE__ */ l("div", {
369
+ className: "flex-1 min-w-0",
370
+ children: [t && /* @__PURE__ */ c("p", {
371
+ className: "font-semibold text-sm mb-0.5",
372
+ children: t
373
+ }), /* @__PURE__ */ c("div", {
374
+ className: "text-sm",
375
+ children: n
376
+ })]
377
+ }),
378
+ r && /* @__PURE__ */ c("button", {
379
+ onClick: r,
380
+ className: "shrink-0 opacity-60 hover:opacity-100 transition-opacity",
381
+ "aria-label": "Close",
382
+ children: /* @__PURE__ */ c("svg", {
383
+ xmlns: "http://www.w3.org/2000/svg",
384
+ fill: "none",
385
+ viewBox: "0 0 24 24",
386
+ strokeWidth: 1.5,
387
+ stroke: "currentColor",
388
+ className: "w-4 h-4",
389
+ children: /* @__PURE__ */ c("path", {
390
+ strokeLinecap: "round",
391
+ strokeLinejoin: "round",
392
+ d: "M6 18L18 6M6 6l12 12"
393
+ })
394
+ })
395
+ })
396
+ ]
397
+ });
398
+ }
399
+ //#endregion
400
+ //#region src/components/common/Modal/Modal.tsx
401
+ var j = {
402
+ sm: "max-w-sm",
403
+ md: "max-w-md",
404
+ lg: "max-w-lg",
405
+ xl: "max-w-xl",
406
+ full: "max-w-full mx-4"
407
+ };
408
+ function M({ open: e, onClose: t, title: n, children: r, footer: o, size: s = "md", closeOnBackdrop: d = !0 }) {
409
+ let f = a(null);
410
+ return i(() => {
411
+ if (!e) return;
412
+ let t = document.body.style.overflow;
413
+ return document.body.style.overflow = "hidden", () => {
414
+ document.body.style.overflow = t;
415
+ };
416
+ }, [e]), i(() => {
417
+ if (!e) return;
418
+ let n = (e) => {
419
+ e.key === "Escape" && t();
420
+ };
421
+ return document.addEventListener("keydown", n), () => document.removeEventListener("keydown", n);
422
+ }, [e, t]), e ? u(/* @__PURE__ */ c("div", {
423
+ ref: f,
424
+ className: "fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",
425
+ onClick: (e) => {
426
+ d && e.target === f.current && t();
427
+ },
428
+ children: /* @__PURE__ */ l("div", {
429
+ role: "dialog",
430
+ "aria-modal": "true",
431
+ "aria-labelledby": n ? "modal-title" : void 0,
432
+ className: ["relative w-full bg-white rounded-xl shadow-xl flex flex-col max-h-[90vh]", j[s]].join(" "),
433
+ children: [
434
+ n && /* @__PURE__ */ l("div", {
435
+ className: "flex items-center justify-between px-6 py-4 border-b border-gray-100 shrink-0",
436
+ children: [/* @__PURE__ */ c("h2", {
437
+ id: "modal-title",
438
+ className: "text-lg font-semibold text-gray-900",
439
+ children: n
440
+ }), /* @__PURE__ */ c("button", {
441
+ onClick: t,
442
+ className: "text-gray-400 hover:text-gray-600 transition-colors",
443
+ "aria-label": "Close modal",
444
+ children: /* @__PURE__ */ c("svg", {
445
+ xmlns: "http://www.w3.org/2000/svg",
446
+ fill: "none",
447
+ viewBox: "0 0 24 24",
448
+ strokeWidth: 1.5,
449
+ stroke: "currentColor",
450
+ className: "w-5 h-5",
451
+ children: /* @__PURE__ */ c("path", {
452
+ strokeLinecap: "round",
453
+ strokeLinejoin: "round",
454
+ d: "M6 18L18 6M6 6l12 12"
455
+ })
456
+ })
457
+ })]
458
+ }),
459
+ /* @__PURE__ */ c("div", {
460
+ className: "flex-1 overflow-y-auto px-6 py-4",
461
+ children: r
462
+ }),
463
+ o && /* @__PURE__ */ c("div", {
464
+ className: "px-6 py-4 border-t border-gray-100 shrink-0 bg-gray-50 rounded-b-xl",
465
+ children: o
466
+ })
467
+ ]
468
+ })
469
+ }), document.body) : null;
470
+ }
471
+ //#endregion
472
+ //#region src/components/common/Checkbox/Checkbox.tsx
473
+ var N = t(({ label: e, description: t, error: n, indeterminate: r, className: i = "", id: a, ...o }, s) => {
474
+ let u = a ?? e?.toLowerCase().replace(/\s+/g, "-");
475
+ return /* @__PURE__ */ l("div", {
476
+ className: ["flex gap-3", i].filter(Boolean).join(" "),
477
+ children: [/* @__PURE__ */ c("div", {
478
+ className: "flex items-center h-5",
479
+ children: /* @__PURE__ */ c("input", {
480
+ ref: (e) => {
481
+ e && (e.indeterminate = r ?? !1), typeof s == "function" ? s(e) : s && (s.current = e);
482
+ },
483
+ id: u,
484
+ type: "checkbox",
485
+ className: [
486
+ "w-4 h-4 rounded border-gray-300 text-primary-600",
487
+ "focus:ring-2 focus:ring-primary-500 focus:ring-offset-1",
488
+ "disabled:cursor-not-allowed disabled:opacity-50",
489
+ n ? "border-danger-500" : ""
490
+ ].filter(Boolean).join(" "),
491
+ ...o
492
+ })
493
+ }), (e || t) && /* @__PURE__ */ l("div", { children: [
494
+ e && /* @__PURE__ */ c("label", {
495
+ htmlFor: u,
496
+ className: "text-sm font-medium text-gray-900 cursor-pointer",
497
+ children: e
498
+ }),
499
+ t && /* @__PURE__ */ c("p", {
500
+ className: "text-xs text-gray-500 mt-0.5",
501
+ children: t
502
+ }),
503
+ n && /* @__PURE__ */ c("p", {
504
+ className: "text-xs text-danger-600 mt-0.5",
505
+ children: n
506
+ })
507
+ ] })]
508
+ });
509
+ });
510
+ N.displayName = "Checkbox";
511
+ //#endregion
512
+ //#region src/components/common/Toggle/Toggle.tsx
513
+ var ie = {
514
+ sm: {
515
+ wrapper: "w-8 h-4",
516
+ thumb: "w-3 h-3 top-0.5 left-0.5",
517
+ checkedTranslate: "peer-checked:translate-x-4"
518
+ },
519
+ md: {
520
+ wrapper: "w-11 h-6",
521
+ thumb: "w-5 h-5 top-0.5 left-0.5",
522
+ checkedTranslate: "peer-checked:translate-x-5"
523
+ },
524
+ lg: {
525
+ wrapper: "w-14 h-7",
526
+ thumb: "w-6 h-6 top-0.5 left-0.5",
527
+ checkedTranslate: "peer-checked:translate-x-7"
528
+ }
529
+ }, P = t(({ label: e, description: t, size: n = "md", className: r = "", id: i, ...a }, o) => {
530
+ let s = i ?? e?.toLowerCase().replace(/\s+/g, "-"), { wrapper: u, thumb: d, checkedTranslate: f } = ie[n];
531
+ return /* @__PURE__ */ l("label", {
532
+ htmlFor: s,
533
+ className: [
534
+ "inline-flex items-start gap-3 cursor-pointer select-none",
535
+ a.disabled ? "cursor-not-allowed opacity-50" : "",
536
+ r
537
+ ].filter(Boolean).join(" "),
538
+ children: [/* @__PURE__ */ l("div", {
539
+ className: `relative shrink-0 mt-0.5 ${u}`,
540
+ children: [
541
+ /* @__PURE__ */ c("input", {
542
+ ref: o,
543
+ id: s,
544
+ type: "checkbox",
545
+ role: "switch",
546
+ className: "sr-only peer",
547
+ ...a
548
+ }),
549
+ /* @__PURE__ */ c("div", { className: "absolute inset-0 rounded-full bg-gray-200 peer-checked:bg-primary-600 transition-colors duration-200 peer-focus-visible:ring-2 peer-focus-visible:ring-primary-500 peer-focus-visible:ring-offset-2" }),
550
+ /* @__PURE__ */ c("div", { className: `absolute ${d} rounded-full bg-white shadow-sm transition-transform duration-200 ${f}` })
551
+ ]
552
+ }), (e || t) && /* @__PURE__ */ l("div", { children: [e && /* @__PURE__ */ c("span", {
553
+ className: "text-sm font-medium text-gray-900 block",
554
+ children: e
555
+ }), t && /* @__PURE__ */ c("span", {
556
+ className: "text-xs text-gray-500 mt-0.5 block",
557
+ children: t
558
+ })] })]
559
+ });
560
+ });
561
+ P.displayName = "Toggle";
562
+ //#endregion
563
+ //#region src/components/common/Avatar/Avatar.tsx
564
+ var ae = {
565
+ xs: "w-6 h-6 text-xs",
566
+ sm: "w-8 h-8 text-sm",
567
+ md: "w-10 h-10 text-sm",
568
+ lg: "w-12 h-12 text-base",
569
+ xl: "w-16 h-16 text-lg"
570
+ };
571
+ function oe(e) {
572
+ return e.split(" ").slice(0, 2).map((e) => e[0]).join("").toUpperCase();
573
+ }
574
+ var F = [
575
+ "bg-red-500",
576
+ "bg-orange-500",
577
+ "bg-amber-500",
578
+ "bg-emerald-500",
579
+ "bg-teal-500",
580
+ "bg-cyan-500",
581
+ "bg-blue-500",
582
+ "bg-violet-500",
583
+ "bg-pink-500"
584
+ ];
585
+ function se(e) {
586
+ let t = 0;
587
+ for (let n = 0; n < e.length; n++) t += e.charCodeAt(n);
588
+ return F[t % F.length];
589
+ }
590
+ function ce({ src: e, alt: t, name: n, size: r = "md", className: i = "", ...a }) {
591
+ let o = [
592
+ "inline-flex items-center justify-center rounded-full overflow-hidden shrink-0 font-medium text-white",
593
+ ae[r],
594
+ i
595
+ ].filter(Boolean).join(" ");
596
+ return e ? /* @__PURE__ */ c("span", {
597
+ className: o,
598
+ ...a,
599
+ children: /* @__PURE__ */ c("img", {
600
+ src: e,
601
+ alt: t ?? n ?? "",
602
+ className: "w-full h-full object-cover"
603
+ })
604
+ }) : n ? /* @__PURE__ */ c("span", {
605
+ className: `${o} ${se(n)}`,
606
+ "aria-label": n,
607
+ ...a,
608
+ children: oe(n)
609
+ }) : /* @__PURE__ */ c("span", {
610
+ className: `${o} bg-gray-200 text-gray-500`,
611
+ ...a,
612
+ children: /* @__PURE__ */ c("svg", {
613
+ xmlns: "http://www.w3.org/2000/svg",
614
+ fill: "currentColor",
615
+ viewBox: "0 0 24 24",
616
+ className: "w-3/5 h-3/5",
617
+ children: /* @__PURE__ */ c("path", {
618
+ fillRule: "evenodd",
619
+ d: "M7.5 6a4.5 4.5 0 119 0 4.5 4.5 0 01-9 0zM3.751 20.105a8.25 8.25 0 0116.498 0 .75.75 0 01-.437.695A18.683 18.683 0 0112 22.5c-2.786 0-5.433-.608-7.812-1.7a.75.75 0 01-.437-.695z",
620
+ clipRule: "evenodd"
621
+ })
622
+ })
623
+ });
624
+ }
625
+ //#endregion
626
+ //#region src/components/common/Tabs/Tabs.tsx
627
+ var I = e(null);
628
+ function L() {
629
+ let e = r(I);
630
+ if (!e) throw Error("Tabs subcomponents must be used inside <Tabs>");
631
+ return e;
632
+ }
633
+ function R({ defaultTab: e, variant: t = "underline", className: n = "", children: r, ...i }) {
634
+ let [a, s] = o(e);
635
+ return /* @__PURE__ */ c(I.Provider, {
636
+ value: {
637
+ activeTab: a,
638
+ setActiveTab: s,
639
+ variant: t
640
+ },
641
+ children: /* @__PURE__ */ c("div", {
642
+ className: n,
643
+ ...i,
644
+ children: r
645
+ })
646
+ });
647
+ }
648
+ function z({ children: e, className: t = "", ...n }) {
649
+ let { variant: r } = L();
650
+ return /* @__PURE__ */ c("div", {
651
+ role: "tablist",
652
+ className: [{
653
+ underline: "flex border-b border-gray-200 gap-1",
654
+ pills: "flex gap-1 bg-gray-100 p-1 rounded-lg",
655
+ bordered: "flex gap-0 border border-gray-200 rounded-lg overflow-hidden"
656
+ }[r], t].filter(Boolean).join(" "),
657
+ ...n,
658
+ children: e
659
+ });
660
+ }
661
+ function B({ id: e, children: t, className: n = "", ...r }) {
662
+ let { activeTab: i, setActiveTab: a, variant: o } = L(), s = i === e, l = {
663
+ underline: {
664
+ active: "text-primary-600 border-b-2 border-primary-600 -mb-px",
665
+ inactive: "text-gray-500 hover:text-gray-700 border-b-2 border-transparent -mb-px"
666
+ },
667
+ pills: {
668
+ active: "bg-white text-gray-900 shadow-sm rounded-md",
669
+ inactive: "text-gray-600 hover:text-gray-900 rounded-md"
670
+ },
671
+ bordered: {
672
+ active: "bg-primary-50 text-primary-700 border-r border-gray-200 last:border-r-0",
673
+ inactive: "text-gray-600 hover:bg-gray-50 border-r border-gray-200 last:border-r-0"
674
+ }
675
+ };
676
+ return /* @__PURE__ */ c("button", {
677
+ role: "tab",
678
+ "aria-selected": s,
679
+ "aria-controls": `tabpanel-${e}`,
680
+ id: `tab-${e}`,
681
+ onClick: () => a(e),
682
+ className: [
683
+ "inline-flex items-center px-4 py-2 text-sm font-medium transition-colors outline-none focus-visible:ring-2 focus-visible:ring-primary-500 whitespace-nowrap",
684
+ s ? l[o].active : l[o].inactive,
685
+ n
686
+ ].filter(Boolean).join(" "),
687
+ ...r,
688
+ children: t
689
+ });
690
+ }
691
+ function V({ id: e, children: t, className: n = "", ...r }) {
692
+ let { activeTab: i } = L();
693
+ return i === e ? /* @__PURE__ */ c("div", {
694
+ role: "tabpanel",
695
+ id: `tabpanel-${e}`,
696
+ "aria-labelledby": `tab-${e}`,
697
+ className: ["pt-4", n].filter(Boolean).join(" "),
698
+ ...r,
699
+ children: t
700
+ }) : null;
701
+ }
702
+ //#endregion
703
+ //#region src/components/common/Pagination/Pagination.tsx
704
+ function H(e, t) {
705
+ return Array.from({ length: t - e + 1 }, (t, n) => e + n);
706
+ }
707
+ function U(e, t, n) {
708
+ if (t <= n * 2 + 5) return H(1, t);
709
+ let r = Math.max(e - n, 1), i = Math.min(e + n, t), a = r > 2, o = i < t - 1;
710
+ return !a && o ? [
711
+ ...H(1, 3 + n * 2),
712
+ "…",
713
+ t
714
+ ] : a && !o ? [
715
+ 1,
716
+ "…",
717
+ ...H(t - (2 + n * 2), t)
718
+ ] : [
719
+ 1,
720
+ "…",
721
+ ...H(r, i),
722
+ "…",
723
+ t
724
+ ];
725
+ }
726
+ function W({ active: e, disabled: t, children: n, ...r }) {
727
+ return /* @__PURE__ */ c("button", {
728
+ disabled: t,
729
+ className: [
730
+ "inline-flex items-center justify-center w-9 h-9 rounded-md text-sm font-medium transition-colors",
731
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500",
732
+ "disabled:pointer-events-none disabled:opacity-40",
733
+ e ? "bg-primary-600 text-white" : "bg-white border border-gray-300 text-gray-700 hover:bg-gray-50"
734
+ ].join(" "),
735
+ ...r,
736
+ children: n
737
+ });
738
+ }
739
+ function G({ page: e, totalPages: t, onPageChange: n, siblingsCount: r = 1 }) {
740
+ let i = U(e, t, r);
741
+ return /* @__PURE__ */ l("nav", {
742
+ "aria-label": "Pagination",
743
+ className: "flex items-center gap-1",
744
+ children: [
745
+ /* @__PURE__ */ c(W, {
746
+ disabled: e <= 1,
747
+ onClick: () => n(e - 1),
748
+ "aria-label": "Previous page",
749
+ children: /* @__PURE__ */ c("svg", {
750
+ xmlns: "http://www.w3.org/2000/svg",
751
+ fill: "none",
752
+ viewBox: "0 0 24 24",
753
+ strokeWidth: 2,
754
+ stroke: "currentColor",
755
+ className: "w-4 h-4",
756
+ children: /* @__PURE__ */ c("path", {
757
+ strokeLinecap: "round",
758
+ strokeLinejoin: "round",
759
+ d: "M15.75 19.5L8.25 12l7.5-7.5"
760
+ })
761
+ })
762
+ }),
763
+ i.map((t, r) => t === "…" ? /* @__PURE__ */ c("span", {
764
+ className: "w-9 h-9 flex items-center justify-center text-gray-400 text-sm",
765
+ children: "…"
766
+ }, `dots-${r}`) : /* @__PURE__ */ c(W, {
767
+ active: t === e,
768
+ onClick: () => n(t),
769
+ "aria-label": `Page ${t}`,
770
+ "aria-current": t === e ? "page" : void 0,
771
+ children: t
772
+ }, t)),
773
+ /* @__PURE__ */ c(W, {
774
+ disabled: e >= t,
775
+ onClick: () => n(e + 1),
776
+ "aria-label": "Next page",
777
+ children: /* @__PURE__ */ c("svg", {
778
+ xmlns: "http://www.w3.org/2000/svg",
779
+ fill: "none",
780
+ viewBox: "0 0 24 24",
781
+ strokeWidth: 2,
782
+ stroke: "currentColor",
783
+ className: "w-4 h-4",
784
+ children: /* @__PURE__ */ c("path", {
785
+ strokeLinecap: "round",
786
+ strokeLinejoin: "round",
787
+ d: "M8.25 4.5l7.5 7.5-7.5 7.5"
788
+ })
789
+ })
790
+ })
791
+ ]
792
+ });
793
+ }
794
+ //#endregion
795
+ //#region src/components/Header/Header.tsx
796
+ function K({ trigger: e, items: t, onSelect: n, getKey: r, renderItem: i }) {
797
+ let [s, u] = o(!1), d = a(null), f = () => u(!1);
798
+ return /* @__PURE__ */ l("div", {
799
+ ref: d,
800
+ className: "relative",
801
+ onBlur: (e) => {
802
+ d.current?.contains(e.relatedTarget) || f();
803
+ },
804
+ onKeyDown: (e) => {
805
+ e.key === "Escape" && f();
806
+ },
807
+ children: [/* @__PURE__ */ c("div", {
808
+ role: "button",
809
+ tabIndex: 0,
810
+ onClick: () => u((e) => !e),
811
+ onKeyDown: (e) => e.key === "Enter" && u((e) => !e),
812
+ className: "cursor-pointer",
813
+ children: e
814
+ }), s && /* @__PURE__ */ c("ul", {
815
+ role: "menu",
816
+ className: "absolute right-0 top-full mt-1 z-50 min-w-28 bg-white rounded-lg shadow-lg border border-gray-100 py-1 text-sm",
817
+ children: t.map((e) => /* @__PURE__ */ c("li", {
818
+ role: "none",
819
+ children: /* @__PURE__ */ c("button", {
820
+ role: "menuitem",
821
+ className: "w-full px-3 py-1.5 text-left hover:bg-gray-50 text-gray-700 whitespace-nowrap",
822
+ onClick: () => {
823
+ n(e), f();
824
+ },
825
+ children: i ? i(e) : e.label
826
+ })
827
+ }, r(e)))
828
+ })]
829
+ });
830
+ }
831
+ function le() {
832
+ return /* @__PURE__ */ c("svg", {
833
+ xmlns: "http://www.w3.org/2000/svg",
834
+ fill: "none",
835
+ viewBox: "0 0 24 24",
836
+ strokeWidth: 1.5,
837
+ stroke: "currentColor",
838
+ className: "w-4 h-4",
839
+ children: /* @__PURE__ */ c("path", {
840
+ strokeLinecap: "round",
841
+ strokeLinejoin: "round",
842
+ d: "M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 15.803a7.5 7.5 0 0010.607 10.607z"
843
+ })
844
+ });
845
+ }
846
+ function ue({ logo: e, searchPlaceholder: t = "Hledat produkty…", onSearch: n, cartItemCount: r = 0, onCartClick: i, isLoggedIn: a = !1, customerName: u, onCustomerClick: d, currencies: f = [], selectedCurrency: p, onCurrencyChange: h, locales: g = [], selectedLocale: _, onLocaleChange: v, rightSlot: y }) {
847
+ let [b, x] = o(""), S = f.find((e) => e.code === p), C = g.find((e) => e.code === _);
848
+ return /* @__PURE__ */ c("header", {
849
+ className: "bg-white border-b border-gray-200 sticky top-0 z-40",
850
+ children: /* @__PURE__ */ l("div", {
851
+ className: "max-w-7xl mx-auto px-4 h-16 flex items-center gap-4",
852
+ children: [
853
+ /* @__PURE__ */ c("div", {
854
+ className: "shrink-0",
855
+ children: e ?? /* @__PURE__ */ c("span", {
856
+ className: "text-xl font-bold text-primary-600 tracking-tight",
857
+ children: "shopito"
858
+ })
859
+ }),
860
+ /* @__PURE__ */ c("div", {
861
+ className: "flex-1 max-w-xl",
862
+ children: /* @__PURE__ */ c(m, {
863
+ fullWidth: !0,
864
+ placeholder: t,
865
+ value: b,
866
+ onChange: (e) => x(e.target.value),
867
+ onKeyDown: (e) => {
868
+ e.key === "Enter" && n?.(b);
869
+ },
870
+ leftIcon: /* @__PURE__ */ c(le, {}),
871
+ rightIcon: b ? /* @__PURE__ */ c("button", {
872
+ onClick: () => {
873
+ x(""), n?.("");
874
+ },
875
+ className: "hover:text-gray-600 transition-colors",
876
+ "aria-label": "Clear search",
877
+ children: /* @__PURE__ */ c("svg", {
878
+ xmlns: "http://www.w3.org/2000/svg",
879
+ fill: "none",
880
+ viewBox: "0 0 24 24",
881
+ strokeWidth: 2,
882
+ stroke: "currentColor",
883
+ className: "w-3.5 h-3.5",
884
+ children: /* @__PURE__ */ c("path", {
885
+ strokeLinecap: "round",
886
+ strokeLinejoin: "round",
887
+ d: "M6 18L18 6M6 6l12 12"
888
+ })
889
+ })
890
+ }) : void 0
891
+ })
892
+ }),
893
+ /* @__PURE__ */ l("div", {
894
+ className: "flex items-center gap-1 shrink-0 ml-auto",
895
+ children: [
896
+ f.length > 0 && /* @__PURE__ */ c(K, {
897
+ trigger: /* @__PURE__ */ l("button", {
898
+ className: "flex items-center gap-1 px-2 py-1.5 rounded-md text-sm text-gray-600 hover:bg-gray-50 transition-colors font-medium",
899
+ children: [
900
+ /* @__PURE__ */ c("span", { children: S?.symbol ?? p }),
901
+ /* @__PURE__ */ c("span", {
902
+ className: "text-xs text-gray-400",
903
+ children: S?.code ?? p
904
+ }),
905
+ /* @__PURE__ */ c(q, { className: "w-3 h-3 text-gray-400" })
906
+ ]
907
+ }),
908
+ items: f,
909
+ getKey: (e) => e.code,
910
+ onSelect: (e) => h?.(e.code),
911
+ renderItem: (e) => /* @__PURE__ */ l("span", {
912
+ className: "flex items-center gap-2",
913
+ children: [/* @__PURE__ */ c("span", {
914
+ className: "w-6 text-center font-medium text-gray-500",
915
+ children: e.symbol
916
+ }), /* @__PURE__ */ c("span", { children: e.label })]
917
+ })
918
+ }),
919
+ g.length > 0 && /* @__PURE__ */ c(K, {
920
+ trigger: /* @__PURE__ */ l("button", {
921
+ className: "flex items-center gap-1 px-2 py-1.5 rounded-md text-sm text-gray-600 hover:bg-gray-50 transition-colors",
922
+ children: [
923
+ C?.flag && /* @__PURE__ */ c("span", {
924
+ className: "text-base leading-none",
925
+ children: C.flag
926
+ }),
927
+ /* @__PURE__ */ c("span", {
928
+ className: "font-medium uppercase",
929
+ children: C?.code ?? _
930
+ }),
931
+ /* @__PURE__ */ c(q, { className: "w-3 h-3 text-gray-400" })
932
+ ]
933
+ }),
934
+ items: g,
935
+ getKey: (e) => e.code,
936
+ onSelect: (e) => v?.(e.code),
937
+ renderItem: (e) => /* @__PURE__ */ l("span", {
938
+ className: "flex items-center gap-2",
939
+ children: [e.flag && /* @__PURE__ */ c("span", {
940
+ className: "text-base",
941
+ children: e.flag
942
+ }), /* @__PURE__ */ c("span", { children: e.label })]
943
+ })
944
+ }),
945
+ (f.length > 0 || g.length > 0) && /* @__PURE__ */ c("div", { className: "w-px h-5 bg-gray-200 mx-1" }),
946
+ /* @__PURE__ */ c("button", {
947
+ onClick: d,
948
+ className: "flex items-center gap-1.5 px-2.5 py-1.5 rounded-md text-sm text-gray-600 hover:bg-gray-50 transition-colors",
949
+ "aria-label": a ? "My account" : "Sign in",
950
+ children: a ? /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c("div", {
951
+ className: "w-6 h-6 rounded-full bg-primary-600 text-white flex items-center justify-center text-xs font-bold",
952
+ children: (u ?? "U")[0].toUpperCase()
953
+ }), u && /* @__PURE__ */ c("span", {
954
+ className: "hidden sm:block font-medium max-w-32 truncate",
955
+ children: u
956
+ })] }) : /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c(de, { className: "w-5 h-5" }), /* @__PURE__ */ c("span", {
957
+ className: "hidden sm:block font-medium",
958
+ children: "Přihlásit se"
959
+ })] })
960
+ }),
961
+ /* @__PURE__ */ l("button", {
962
+ onClick: i,
963
+ className: "relative flex items-center gap-1.5 px-2.5 py-1.5 rounded-md text-sm text-gray-600 hover:bg-gray-50 transition-colors",
964
+ "aria-label": `Cart, ${r} items`,
965
+ children: [
966
+ /* @__PURE__ */ c(fe, { className: "w-5 h-5" }),
967
+ /* @__PURE__ */ c("span", {
968
+ className: "hidden sm:block font-medium",
969
+ children: "Košík"
970
+ }),
971
+ r > 0 && /* @__PURE__ */ c("span", {
972
+ className: "absolute -top-0.5 -right-0.5 min-w-4.5 h-4.5 flex items-center justify-center rounded-full bg-primary-600 text-white text-[10px] font-bold leading-none px-1",
973
+ children: r > 99 ? "99+" : r
974
+ })
975
+ ]
976
+ }),
977
+ y
978
+ ]
979
+ })
980
+ ]
981
+ })
982
+ });
983
+ }
984
+ function q({ className: e }) {
985
+ return /* @__PURE__ */ c("svg", {
986
+ xmlns: "http://www.w3.org/2000/svg",
987
+ fill: "none",
988
+ viewBox: "0 0 24 24",
989
+ strokeWidth: 2,
990
+ stroke: "currentColor",
991
+ className: e,
992
+ children: /* @__PURE__ */ c("path", {
993
+ strokeLinecap: "round",
994
+ strokeLinejoin: "round",
995
+ d: "M19.5 8.25l-7.5 7.5-7.5-7.5"
996
+ })
997
+ });
998
+ }
999
+ function de({ className: e }) {
1000
+ return /* @__PURE__ */ c("svg", {
1001
+ xmlns: "http://www.w3.org/2000/svg",
1002
+ fill: "none",
1003
+ viewBox: "0 0 24 24",
1004
+ strokeWidth: 1.5,
1005
+ stroke: "currentColor",
1006
+ className: e,
1007
+ children: /* @__PURE__ */ c("path", {
1008
+ strokeLinecap: "round",
1009
+ strokeLinejoin: "round",
1010
+ d: "M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z"
1011
+ })
1012
+ });
1013
+ }
1014
+ function fe({ className: e }) {
1015
+ return /* @__PURE__ */ c("svg", {
1016
+ xmlns: "http://www.w3.org/2000/svg",
1017
+ fill: "none",
1018
+ viewBox: "0 0 24 24",
1019
+ strokeWidth: 1.5,
1020
+ stroke: "currentColor",
1021
+ className: e,
1022
+ children: /* @__PURE__ */ c("path", {
1023
+ strokeLinecap: "round",
1024
+ strokeLinejoin: "round",
1025
+ d: "M2.25 3h1.386c.51 0 .955.343 1.087.835l.383 1.437M7.5 14.25a3 3 0 00-3 3h15.75m-12.75-3h11.218c1.121-2.3 2.1-4.684 2.924-7.138a60.114 60.114 0 00-16.536-1.84M7.5 14.25L5.106 5.272M6 20.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm12.75 0a.75.75 0 11-1.5 0 .75.75 0 011.5 0z"
1026
+ })
1027
+ });
1028
+ }
1029
+ //#endregion
1030
+ //#region src/components/CategoryTree/CategoryTree.tsx
1031
+ function J({ node: e, activeId: t, onSelect: n, showCounts: r, depth: i, defaultExpandAll: a }) {
1032
+ let s = e.children && e.children.length > 0, [u, d] = o(a || Y(e, t)), f = e.id === t;
1033
+ return /* @__PURE__ */ l("li", { children: [/* @__PURE__ */ l("div", {
1034
+ className: [
1035
+ "group flex items-center gap-1.5 rounded-lg px-2 py-1.5 cursor-pointer select-none",
1036
+ "transition-colors text-sm",
1037
+ f ? "bg-primary-50 text-primary-700 font-medium" : "text-gray-700 hover:bg-gray-50 hover:text-gray-900",
1038
+ i > 0 ? `ml-${Math.min(i * 4, 8)}` : ""
1039
+ ].filter(Boolean).join(" "),
1040
+ style: i > 0 ? { marginLeft: i * 16 } : void 0,
1041
+ onClick: () => {
1042
+ n(e), s && d((e) => !e);
1043
+ },
1044
+ role: "button",
1045
+ tabIndex: 0,
1046
+ onKeyDown: (t) => {
1047
+ (t.key === "Enter" || t.key === " ") && (t.preventDefault(), n(e), s && d((e) => !e));
1048
+ },
1049
+ "aria-expanded": s ? u : void 0,
1050
+ children: [
1051
+ s ? /* @__PURE__ */ c("span", {
1052
+ className: `shrink-0 text-gray-400 transition-transform duration-150 ${u ? "rotate-90" : ""}`,
1053
+ children: /* @__PURE__ */ c("svg", {
1054
+ xmlns: "http://www.w3.org/2000/svg",
1055
+ fill: "none",
1056
+ viewBox: "0 0 24 24",
1057
+ strokeWidth: 2,
1058
+ stroke: "currentColor",
1059
+ className: "w-3.5 h-3.5",
1060
+ children: /* @__PURE__ */ c("path", {
1061
+ strokeLinecap: "round",
1062
+ strokeLinejoin: "round",
1063
+ d: "M8.25 4.5l7.5 7.5-7.5 7.5"
1064
+ })
1065
+ })
1066
+ }) : /* @__PURE__ */ c("span", { className: "w-3.5 shrink-0" }),
1067
+ e.icon && /* @__PURE__ */ c("span", {
1068
+ className: "text-base leading-none",
1069
+ children: e.icon
1070
+ }),
1071
+ /* @__PURE__ */ c("span", {
1072
+ className: "flex-1 truncate",
1073
+ children: e.label
1074
+ }),
1075
+ r && e.count !== void 0 && /* @__PURE__ */ c("span", {
1076
+ className: `text-xs rounded-full px-1.5 py-0.5 font-medium ${f ? "bg-primary-100 text-primary-600" : "bg-gray-100 text-gray-500"}`,
1077
+ children: e.count
1078
+ })
1079
+ ]
1080
+ }), s && u && /* @__PURE__ */ c("ul", {
1081
+ role: "group",
1082
+ children: e.children.map((e) => /* @__PURE__ */ c(J, {
1083
+ node: e,
1084
+ activeId: t,
1085
+ onSelect: n,
1086
+ showCounts: r,
1087
+ depth: i + 1,
1088
+ defaultExpandAll: a
1089
+ }, e.id))
1090
+ })] });
1091
+ }
1092
+ function Y(e, t) {
1093
+ return !t || !e.children ? !1 : e.children.some((e) => e.id === t || Y(e, t));
1094
+ }
1095
+ function pe({ categories: e, activeId: t, onSelect: n, showCounts: r = !0, defaultExpandAll: i = !1, className: a = "", ...o }) {
1096
+ let s = (e) => n?.(e);
1097
+ return /* @__PURE__ */ c("nav", {
1098
+ "aria-label": "Category navigation",
1099
+ className: ["w-full", a].filter(Boolean).join(" "),
1100
+ ...o,
1101
+ children: /* @__PURE__ */ c("ul", {
1102
+ role: "tree",
1103
+ className: "space-y-0.5",
1104
+ children: e.map((e) => /* @__PURE__ */ c(J, {
1105
+ node: e,
1106
+ activeId: t,
1107
+ onSelect: s,
1108
+ showCounts: r,
1109
+ depth: 0,
1110
+ defaultExpandAll: i
1111
+ }, e.id))
1112
+ })
1113
+ });
1114
+ }
1115
+ //#endregion
1116
+ //#region src/components/MegaMenu/MegaMenu.tsx
1117
+ function me({ item: e, onNavigate: t, onClose: n }) {
1118
+ return e.columns?.length ? /* @__PURE__ */ c("div", {
1119
+ className: "absolute left-0 right-0 top-full z-50 bg-white border-b border-gray-200 shadow-lg",
1120
+ children: /* @__PURE__ */ l("div", {
1121
+ className: "max-w-7xl mx-auto px-4 py-6 flex gap-8",
1122
+ children: [/* @__PURE__ */ c("div", {
1123
+ className: "flex-1 grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6",
1124
+ children: e.columns.map((e, r) => /* @__PURE__ */ l("div", { children: [e.heading && /* @__PURE__ */ c("p", {
1125
+ className: "text-xs font-semibold uppercase tracking-wider text-gray-400 mb-2",
1126
+ children: e.heading
1127
+ }), /* @__PURE__ */ c("ul", {
1128
+ className: "space-y-1",
1129
+ children: e.items.map((e) => /* @__PURE__ */ c("li", { children: /* @__PURE__ */ l("button", {
1130
+ className: "flex items-center gap-1.5 text-sm text-gray-700 hover:text-primary-600 transition-colors py-0.5",
1131
+ onClick: () => {
1132
+ t(e), n();
1133
+ },
1134
+ children: [e.label, e.badge && /* @__PURE__ */ c("span", {
1135
+ className: "text-[10px] font-semibold px-1.5 py-0.5 rounded-full bg-danger-50 text-danger-600 leading-none",
1136
+ children: e.badge
1137
+ })]
1138
+ }) }, e.id))
1139
+ })] }, r))
1140
+ }), e.featured && /* @__PURE__ */ c("div", {
1141
+ className: "w-52 shrink-0",
1142
+ children: /* @__PURE__ */ l("button", {
1143
+ className: "group block w-full rounded-xl overflow-hidden border border-gray-100 text-left hover:shadow-md transition-shadow",
1144
+ onClick: () => {
1145
+ t(e), n();
1146
+ },
1147
+ children: [e.featured.image ? /* @__PURE__ */ c("img", {
1148
+ src: e.featured.image,
1149
+ alt: e.featured.title,
1150
+ className: "w-full h-28 object-cover"
1151
+ }) : /* @__PURE__ */ c("div", {
1152
+ className: "w-full h-28 bg-linear-to-br from-primary-100 to-primary-200 flex items-center justify-center text-4xl",
1153
+ children: e.icon ?? "🛍️"
1154
+ }), /* @__PURE__ */ l("div", {
1155
+ className: "p-3",
1156
+ children: [
1157
+ e.featured.eyebrow && /* @__PURE__ */ c("p", {
1158
+ className: "text-[10px] font-semibold uppercase tracking-wider text-primary-500 mb-0.5",
1159
+ children: e.featured.eyebrow
1160
+ }),
1161
+ /* @__PURE__ */ c("p", {
1162
+ className: "text-sm font-semibold text-gray-900 group-hover:text-primary-600 transition-colors",
1163
+ children: e.featured.title
1164
+ }),
1165
+ e.featured.description && /* @__PURE__ */ c("p", {
1166
+ className: "text-xs text-gray-500 mt-0.5 line-clamp-2",
1167
+ children: e.featured.description
1168
+ }),
1169
+ e.featured.cta && /* @__PURE__ */ l("span", {
1170
+ className: "inline-block mt-2 text-xs font-medium text-primary-600",
1171
+ children: [e.featured.cta, " →"]
1172
+ })
1173
+ ]
1174
+ })]
1175
+ })
1176
+ })]
1177
+ })
1178
+ }) : null;
1179
+ }
1180
+ function he({ items: e, activeId: t, onNavigate: n }) {
1181
+ let [r, i] = o(null), s = a(null), u = (e) => {
1182
+ s.current && clearTimeout(s.current), i(e);
1183
+ }, d = () => {
1184
+ s.current = setTimeout(() => i(null), 120);
1185
+ }, f = () => {
1186
+ s.current && clearTimeout(s.current);
1187
+ }, p = e.find((e) => e.id === r);
1188
+ return /* @__PURE__ */ l("nav", {
1189
+ "aria-label": "Main navigation",
1190
+ className: "relative bg-white border-b border-gray-100",
1191
+ onMouseLeave: d,
1192
+ children: [/* @__PURE__ */ c("div", {
1193
+ className: "max-w-7xl mx-auto px-4",
1194
+ children: /* @__PURE__ */ c("ul", {
1195
+ className: "flex items-center gap-0",
1196
+ role: "menubar",
1197
+ children: e.map((e) => {
1198
+ let a = !!e.columns?.length, o = r === e.id, s = t === e.id;
1199
+ return /* @__PURE__ */ c("li", {
1200
+ role: "none",
1201
+ children: /* @__PURE__ */ l("button", {
1202
+ role: "menuitem",
1203
+ "aria-haspopup": a ? "true" : void 0,
1204
+ "aria-expanded": a ? o : void 0,
1205
+ className: [
1206
+ "flex items-center gap-1.5 px-4 py-3.5 text-sm font-medium transition-colors relative",
1207
+ "outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary-500",
1208
+ s || o ? "text-primary-600" : "text-gray-700 hover:text-gray-900",
1209
+ o ? "after:absolute after:bottom-0 after:left-0 after:right-0 after:h-0.5 after:bg-primary-600" : ""
1210
+ ].filter(Boolean).join(" "),
1211
+ onMouseEnter: () => a ? u(e.id) : i(null),
1212
+ onFocus: () => a && u(e.id),
1213
+ onClick: () => {
1214
+ a || (n?.(e), i(null));
1215
+ },
1216
+ children: [
1217
+ e.icon && /* @__PURE__ */ c("span", {
1218
+ className: "text-base leading-none",
1219
+ children: e.icon
1220
+ }),
1221
+ e.label,
1222
+ a && /* @__PURE__ */ c("svg", {
1223
+ xmlns: "http://www.w3.org/2000/svg",
1224
+ fill: "none",
1225
+ viewBox: "0 0 24 24",
1226
+ strokeWidth: 2,
1227
+ stroke: "currentColor",
1228
+ className: `w-3.5 h-3.5 transition-transform duration-150 ${o ? "rotate-180" : ""}`,
1229
+ children: /* @__PURE__ */ c("path", {
1230
+ strokeLinecap: "round",
1231
+ strokeLinejoin: "round",
1232
+ d: "M19.5 8.25l-7.5 7.5-7.5-7.5"
1233
+ })
1234
+ })
1235
+ ]
1236
+ })
1237
+ }, e.id);
1238
+ })
1239
+ })
1240
+ }), p?.columns?.length && /* @__PURE__ */ c("div", {
1241
+ onMouseEnter: f,
1242
+ onMouseLeave: d,
1243
+ children: /* @__PURE__ */ c(me, {
1244
+ item: p,
1245
+ onNavigate: (e) => n?.(e),
1246
+ onClose: () => i(null)
1247
+ })
1248
+ })]
1249
+ });
1250
+ }
1251
+ //#endregion
1252
+ //#region src/components/BannerCarousel/BannerCarousel.tsx
1253
+ function ge({ banners: e, autoPlay: t = !0, autoPlayInterval: r = 5e3, arrows: u = !0, dots: d = !0, className: f = "", aspectRatio: p = "3 / 1" }) {
1254
+ let [m, h] = o(0), [g, _] = o(!1), v = a(null), y = a(null), b = e.length, x = n((e) => {
1255
+ h((e % b + b) % b);
1256
+ }, [b]), S = () => x(m - 1), C = n(() => x(m + 1), [m, x]);
1257
+ i(() => {
1258
+ if (!(!t || g || b <= 1)) return v.current = setInterval(C, r), () => {
1259
+ v.current && clearInterval(v.current);
1260
+ };
1261
+ }, [
1262
+ t,
1263
+ g,
1264
+ r,
1265
+ C,
1266
+ b
1267
+ ]);
1268
+ let w = a(null), T = (e) => {
1269
+ w.current = e.touches[0].clientX;
1270
+ }, E = (e) => {
1271
+ if (w.current === null) return;
1272
+ let t = e.changedTouches[0].clientX - w.current;
1273
+ Math.abs(t) > 50 && (t < 0 ? C() : S()), w.current = null;
1274
+ };
1275
+ if (b === 0) return null;
1276
+ let D = e[m], O = D.textColor === "light" || !D.textColor;
1277
+ return /* @__PURE__ */ l("div", {
1278
+ className: ["relative overflow-hidden rounded-xl", f].filter(Boolean).join(" "),
1279
+ style: { aspectRatio: p },
1280
+ onMouseEnter: () => _(!0),
1281
+ onMouseLeave: () => _(!1),
1282
+ onTouchStart: T,
1283
+ onTouchEnd: E,
1284
+ children: [
1285
+ /* @__PURE__ */ c("div", {
1286
+ ref: y,
1287
+ className: "relative w-full h-full",
1288
+ children: e.map((e, t) => /* @__PURE__ */ l("div", {
1289
+ "aria-hidden": t !== m,
1290
+ className: ["absolute inset-0 transition-opacity duration-700", t === m ? "opacity-100 z-10" : "opacity-0 z-0"].join(" "),
1291
+ style: { background: e.backgroundImage ? `url(${e.backgroundImage}) center/cover no-repeat` : e.backgroundColor ?? "linear-gradient(135deg, #1d4ed8 0%, #7c3aed 100%)" },
1292
+ children: [e.backgroundImage && /* @__PURE__ */ c("div", { className: "absolute inset-0 bg-gradient-to-r from-black/50 via-black/20 to-transparent" }), /* @__PURE__ */ l("div", {
1293
+ className: "relative z-10 h-full flex items-center px-8 md:px-12 gap-8",
1294
+ children: [/* @__PURE__ */ l("div", {
1295
+ className: "flex-1 max-w-lg",
1296
+ children: [
1297
+ e.eyebrow && /* @__PURE__ */ c("p", {
1298
+ className: `text-xs font-semibold uppercase tracking-widest mb-2 ${O ? "text-white/70" : "text-gray-500"}`,
1299
+ children: e.eyebrow
1300
+ }),
1301
+ /* @__PURE__ */ c("h2", {
1302
+ className: `text-2xl md:text-3xl lg:text-4xl font-bold leading-tight ${O ? "text-white" : "text-gray-900"}`,
1303
+ children: e.title
1304
+ }),
1305
+ e.subtitle && /* @__PURE__ */ c("p", {
1306
+ className: `mt-2 text-sm md:text-base ${O ? "text-white/80" : "text-gray-600"}`,
1307
+ children: e.subtitle
1308
+ }),
1309
+ e.ctaLabel && /* @__PURE__ */ l("button", {
1310
+ onClick: e.onCtaClick,
1311
+ className: ["mt-5 inline-flex items-center gap-2 px-5 py-2.5 rounded-lg text-sm font-semibold transition-all", O ? "bg-white text-gray-900 hover:bg-gray-100" : "bg-primary-600 text-white hover:bg-primary-700"].join(" "),
1312
+ children: [e.ctaLabel, /* @__PURE__ */ c("svg", {
1313
+ xmlns: "http://www.w3.org/2000/svg",
1314
+ fill: "none",
1315
+ viewBox: "0 0 24 24",
1316
+ strokeWidth: 2,
1317
+ stroke: "currentColor",
1318
+ className: "w-4 h-4",
1319
+ children: /* @__PURE__ */ c("path", {
1320
+ strokeLinecap: "round",
1321
+ strokeLinejoin: "round",
1322
+ d: "M8.25 4.5l7.5 7.5-7.5 7.5"
1323
+ })
1324
+ })]
1325
+ })
1326
+ ]
1327
+ }), e.sideImage && /* @__PURE__ */ c("div", {
1328
+ className: "hidden md:block flex-1 h-full flex items-end justify-end overflow-hidden",
1329
+ children: /* @__PURE__ */ c("img", {
1330
+ src: e.sideImage,
1331
+ alt: "",
1332
+ className: "h-full w-auto object-contain object-bottom drop-shadow-2xl"
1333
+ })
1334
+ })]
1335
+ })]
1336
+ }, e.id))
1337
+ }),
1338
+ u && b > 1 && /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c("button", {
1339
+ onClick: S,
1340
+ className: "absolute left-3 top-1/2 -translate-y-1/2 z-20 w-9 h-9 flex items-center justify-center rounded-full bg-black/30 text-white hover:bg-black/50 transition-colors backdrop-blur-sm",
1341
+ "aria-label": "Previous banner",
1342
+ children: /* @__PURE__ */ c("svg", {
1343
+ xmlns: "http://www.w3.org/2000/svg",
1344
+ fill: "none",
1345
+ viewBox: "0 0 24 24",
1346
+ strokeWidth: 2,
1347
+ stroke: "currentColor",
1348
+ className: "w-5 h-5",
1349
+ children: /* @__PURE__ */ c("path", {
1350
+ strokeLinecap: "round",
1351
+ strokeLinejoin: "round",
1352
+ d: "M15.75 19.5L8.25 12l7.5-7.5"
1353
+ })
1354
+ })
1355
+ }), /* @__PURE__ */ c("button", {
1356
+ onClick: C,
1357
+ className: "absolute right-3 top-1/2 -translate-y-1/2 z-20 w-9 h-9 flex items-center justify-center rounded-full bg-black/30 text-white hover:bg-black/50 transition-colors backdrop-blur-sm",
1358
+ "aria-label": "Next banner",
1359
+ children: /* @__PURE__ */ c("svg", {
1360
+ xmlns: "http://www.w3.org/2000/svg",
1361
+ fill: "none",
1362
+ viewBox: "0 0 24 24",
1363
+ strokeWidth: 2,
1364
+ stroke: "currentColor",
1365
+ className: "w-5 h-5",
1366
+ children: /* @__PURE__ */ c("path", {
1367
+ strokeLinecap: "round",
1368
+ strokeLinejoin: "round",
1369
+ d: "M8.25 4.5l7.5 7.5-7.5 7.5"
1370
+ })
1371
+ })
1372
+ })] }),
1373
+ d && b > 1 && /* @__PURE__ */ c("div", {
1374
+ className: "absolute bottom-3 left-1/2 -translate-x-1/2 z-20 flex gap-1.5",
1375
+ children: e.map((e, t) => /* @__PURE__ */ c("button", {
1376
+ onClick: () => x(t),
1377
+ "aria-label": `Go to slide ${t + 1}`,
1378
+ className: ["rounded-full transition-all duration-300", t === m ? "w-5 h-2 bg-white" : "w-2 h-2 bg-white/50 hover:bg-white/80"].join(" ")
1379
+ }, t))
1380
+ }),
1381
+ t && b > 1 && /* @__PURE__ */ c("div", {
1382
+ className: "absolute bottom-0 left-0 right-0 h-0.5 bg-white/20 z-20",
1383
+ children: /* @__PURE__ */ c("div", {
1384
+ className: `h-full bg-white/60 ${g ? "" : "animate-progress"}`,
1385
+ style: { animation: g ? "none" : `progress ${r}ms linear` }
1386
+ }, `${m}-${g}`)
1387
+ })
1388
+ ]
1389
+ });
1390
+ }
1391
+ //#endregion
1392
+ //#region src/components/ProductCard/ProductCard.tsx
1393
+ function _e({ filled: e }) {
1394
+ return /* @__PURE__ */ c("svg", {
1395
+ xmlns: "http://www.w3.org/2000/svg",
1396
+ viewBox: "0 0 24 24",
1397
+ className: `w-3.5 h-3.5 ${e ? "fill-amber-400 stroke-amber-400" : "fill-gray-200 stroke-gray-300"}`,
1398
+ strokeWidth: 1,
1399
+ children: /* @__PURE__ */ c("path", {
1400
+ strokeLinecap: "round",
1401
+ strokeLinejoin: "round",
1402
+ d: "M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z"
1403
+ })
1404
+ });
1405
+ }
1406
+ function ve({ value: e, count: t }) {
1407
+ return /* @__PURE__ */ l("div", {
1408
+ className: "flex items-center gap-1",
1409
+ children: [/* @__PURE__ */ c("div", {
1410
+ className: "flex gap-0.5",
1411
+ children: [
1412
+ 1,
1413
+ 2,
1414
+ 3,
1415
+ 4,
1416
+ 5
1417
+ ].map((t) => /* @__PURE__ */ c(_e, { filled: t <= Math.round(e) }, t))
1418
+ }), t !== void 0 && /* @__PURE__ */ l("span", {
1419
+ className: "text-xs text-gray-400",
1420
+ children: [
1421
+ "(",
1422
+ t,
1423
+ ")"
1424
+ ]
1425
+ })]
1426
+ });
1427
+ }
1428
+ function ye(e) {
1429
+ let t = e.toLowerCase();
1430
+ return t === "sale" || t === "akce" ? "danger" : t === "new" || t === "nové" ? "primary" : t === "hot" ? "warning" : "default";
1431
+ }
1432
+ function X(e, t = "Kč") {
1433
+ return `${e.toLocaleString("cs-CZ")} ${t}`;
1434
+ }
1435
+ function be(e, t) {
1436
+ return Math.round((1 - t / e) * 100);
1437
+ }
1438
+ function Z({ product: e, onAddToCart: t, onWishlistToggle: n, isWishlisted: r = !1, onProductClick: i, size: a = "default", className: s = "" }) {
1439
+ let [u, d] = o(!1), [f, m] = o(!1), h = e.originalPrice !== void 0 && e.originalPrice > e.price;
1440
+ return /* @__PURE__ */ l("article", {
1441
+ className: [
1442
+ "group relative flex flex-col bg-white rounded-xl border border-gray-200",
1443
+ "hover:shadow-md transition-shadow duration-200 overflow-hidden cursor-pointer",
1444
+ s
1445
+ ].filter(Boolean).join(" "),
1446
+ onClick: () => i?.(e),
1447
+ onMouseEnter: () => d(!0),
1448
+ onMouseLeave: () => d(!1),
1449
+ children: [/* @__PURE__ */ l("div", {
1450
+ className: `relative overflow-hidden bg-gray-50 ${a === "compact" ? "aspect-square" : "aspect-4/3"}`,
1451
+ children: [
1452
+ e.image ? /* @__PURE__ */ c("img", {
1453
+ src: u && e.imageHover ? e.imageHover : e.image,
1454
+ alt: e.name,
1455
+ className: "w-full h-full object-contain p-4 transition-transform duration-300 group-hover:scale-105"
1456
+ }) : /* @__PURE__ */ c("div", {
1457
+ className: "w-full h-full flex items-center justify-center text-5xl bg-linear-to-br from-gray-100 to-gray-200",
1458
+ children: "🛍️"
1459
+ }),
1460
+ e.badge && /* @__PURE__ */ c("div", {
1461
+ className: "absolute top-2 left-2",
1462
+ children: /* @__PURE__ */ c(w, {
1463
+ variant: ye(e.badge),
1464
+ size: "sm",
1465
+ children: e.badge === "sale" && h ? `-${be(e.originalPrice, e.price)}%` : e.badge
1466
+ })
1467
+ }),
1468
+ e.inStock === !1 && /* @__PURE__ */ c("div", {
1469
+ className: "absolute inset-0 bg-white/70 flex items-center justify-center",
1470
+ children: /* @__PURE__ */ c("span", {
1471
+ className: "text-sm font-semibold text-gray-500 bg-white/90 px-3 py-1 rounded-full border border-gray-200",
1472
+ children: "Vyprodáno"
1473
+ })
1474
+ }),
1475
+ /* @__PURE__ */ c("button", {
1476
+ onClick: (t) => {
1477
+ t.stopPropagation(), n?.(e);
1478
+ },
1479
+ "aria-label": r ? "Remove from wishlist" : "Add to wishlist",
1480
+ className: [
1481
+ "absolute top-2 right-2 w-8 h-8 flex items-center justify-center rounded-full bg-white shadow-sm border border-gray-100",
1482
+ "transition-all duration-200",
1483
+ "opacity-0 group-hover:opacity-100 focus:opacity-100",
1484
+ r ? "text-danger-500" : "text-gray-400 hover:text-danger-400"
1485
+ ].join(" "),
1486
+ children: /* @__PURE__ */ c("svg", {
1487
+ xmlns: "http://www.w3.org/2000/svg",
1488
+ viewBox: "0 0 24 24",
1489
+ strokeWidth: 1.5,
1490
+ stroke: "currentColor",
1491
+ className: `w-4 h-4 ${r ? "fill-current" : "fill-none"}`,
1492
+ children: /* @__PURE__ */ c("path", {
1493
+ strokeLinecap: "round",
1494
+ strokeLinejoin: "round",
1495
+ d: "M21 8.25c0-2.485-2.099-4.5-4.688-4.5-1.935 0-3.597 1.126-4.312 2.733-.715-1.607-2.377-2.733-4.313-2.733C5.1 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12z"
1496
+ })
1497
+ })
1498
+ }),
1499
+ /* @__PURE__ */ c("div", {
1500
+ className: ["absolute bottom-0 left-0 right-0 p-2 transition-transform duration-200", u ? "translate-y-0" : "translate-y-full"].join(" "),
1501
+ children: /* @__PURE__ */ c(p, {
1502
+ variant: "primary",
1503
+ size: "sm",
1504
+ fullWidth: !0,
1505
+ loading: !1,
1506
+ disabled: e.inStock === !1,
1507
+ onClick: (n) => {
1508
+ n.stopPropagation(), t?.(e), m(!0), setTimeout(() => m(!1), 1500);
1509
+ },
1510
+ className: "shadow-lg",
1511
+ children: f ? /* @__PURE__ */ l("span", {
1512
+ className: "flex items-center gap-1.5",
1513
+ children: [/* @__PURE__ */ c("svg", {
1514
+ xmlns: "http://www.w3.org/2000/svg",
1515
+ fill: "none",
1516
+ viewBox: "0 0 24 24",
1517
+ strokeWidth: 2,
1518
+ stroke: "currentColor",
1519
+ className: "w-4 h-4",
1520
+ children: /* @__PURE__ */ c("path", {
1521
+ strokeLinecap: "round",
1522
+ strokeLinejoin: "round",
1523
+ d: "M4.5 12.75l6 6 9-13.5"
1524
+ })
1525
+ }), "Přidáno"]
1526
+ }) : "Přidat do košíku"
1527
+ })
1528
+ })
1529
+ ]
1530
+ }), /* @__PURE__ */ l("div", {
1531
+ className: `flex flex-col gap-1.5 ${a === "compact" ? "p-3" : "p-4"}`,
1532
+ children: [
1533
+ e.variants && e.variants.length > 0 && /* @__PURE__ */ l("div", {
1534
+ className: "flex gap-1",
1535
+ children: [e.variants.slice(0, 5).map((e) => /* @__PURE__ */ c("span", {
1536
+ title: e.label,
1537
+ className: "w-4 h-4 rounded-full border border-gray-300 shrink-0",
1538
+ style: { backgroundColor: e.color ?? "#ccc" }
1539
+ }, e.id)), e.variants.length > 5 && /* @__PURE__ */ l("span", {
1540
+ className: "text-xs text-gray-400",
1541
+ children: ["+", e.variants.length - 5]
1542
+ })]
1543
+ }),
1544
+ /* @__PURE__ */ c("h3", {
1545
+ className: `font-medium text-gray-900 leading-snug line-clamp-2 group-hover:text-primary-600 transition-colors ${a === "compact" ? "text-xs" : "text-sm"}`,
1546
+ children: e.name
1547
+ }),
1548
+ e.rating !== void 0 && /* @__PURE__ */ c(ve, {
1549
+ value: e.rating,
1550
+ count: e.reviewCount
1551
+ }),
1552
+ /* @__PURE__ */ l("div", {
1553
+ className: "flex items-baseline gap-2 mt-auto pt-1",
1554
+ children: [/* @__PURE__ */ c("span", {
1555
+ className: `font-bold text-gray-900 ${a === "compact" ? "text-base" : "text-lg"}`,
1556
+ children: X(e.price, e.currency)
1557
+ }), h && /* @__PURE__ */ c("span", {
1558
+ className: "text-sm text-gray-400 line-through",
1559
+ children: X(e.originalPrice, e.currency)
1560
+ })]
1561
+ })
1562
+ ]
1563
+ })]
1564
+ });
1565
+ }
1566
+ //#endregion
1567
+ //#region src/components/ProductGrid/ProductGrid.tsx
1568
+ var Q = {
1569
+ 2: "grid-cols-2",
1570
+ 3: "grid-cols-2 md:grid-cols-3",
1571
+ 4: "grid-cols-2 sm:grid-cols-3 lg:grid-cols-4",
1572
+ 5: "grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5"
1573
+ }, xe = [
1574
+ {
1575
+ value: "newest",
1576
+ label: "Nejnovější"
1577
+ },
1578
+ {
1579
+ value: "price-asc",
1580
+ label: "Cena: od nejnižší"
1581
+ },
1582
+ {
1583
+ value: "price-desc",
1584
+ label: "Cena: od nejvyšší"
1585
+ },
1586
+ {
1587
+ value: "rating",
1588
+ label: "Hodnocení"
1589
+ },
1590
+ {
1591
+ value: "bestseller",
1592
+ label: "Bestsellery"
1593
+ }
1594
+ ];
1595
+ function Se() {
1596
+ return /* @__PURE__ */ l("div", {
1597
+ className: "rounded-xl border border-gray-100 overflow-hidden animate-pulse",
1598
+ children: [/* @__PURE__ */ c("div", { className: "aspect-4/3 bg-gray-200" }), /* @__PURE__ */ l("div", {
1599
+ className: "p-4 space-y-2",
1600
+ children: [
1601
+ /* @__PURE__ */ c("div", { className: "h-3 bg-gray-200 rounded w-3/4" }),
1602
+ /* @__PURE__ */ c("div", { className: "h-3 bg-gray-200 rounded w-1/2" }),
1603
+ /* @__PURE__ */ c("div", { className: "h-5 bg-gray-200 rounded w-1/3 mt-2" })
1604
+ ]
1605
+ })]
1606
+ });
1607
+ }
1608
+ function Ce({ products: e, totalCount: t, page: n = 1, onPageChange: r, perPage: i = 20, columns: a = 4, sortOptions: o = xe, selectedSort: s, onSortChange: u, activeFilters: d = [], onRemoveFilter: f, onClearFilters: p, loading: m = !1, emptyState: g, onAddToCart: _, onWishlistToggle: v, onProductClick: y, wishlisted: b = [], className: x = "" }) {
1609
+ let S = t ? Math.ceil(t / i) : void 0, C = a >= 5 ? "compact" : "default";
1610
+ return /* @__PURE__ */ l("div", {
1611
+ className: ["w-full", x].filter(Boolean).join(" "),
1612
+ children: [
1613
+ /* @__PURE__ */ l("div", {
1614
+ className: "flex flex-wrap items-center justify-between gap-3 mb-4",
1615
+ children: [/* @__PURE__ */ l("div", {
1616
+ className: "flex flex-wrap items-center gap-2",
1617
+ children: [
1618
+ t !== void 0 && /* @__PURE__ */ l("span", {
1619
+ className: "text-sm text-gray-500",
1620
+ children: [/* @__PURE__ */ c("span", {
1621
+ className: "font-semibold text-gray-900",
1622
+ children: t
1623
+ }), " produktů"]
1624
+ }),
1625
+ d.map((e) => /* @__PURE__ */ l("span", {
1626
+ className: "inline-flex items-center gap-1 text-xs bg-primary-50 text-primary-700 border border-primary-200 rounded-full px-2.5 py-1",
1627
+ children: [e, /* @__PURE__ */ c("button", {
1628
+ onClick: () => f?.(e),
1629
+ "aria-label": `Remove filter ${e}`,
1630
+ className: "hover:text-primary-900 transition-colors",
1631
+ children: /* @__PURE__ */ c("svg", {
1632
+ xmlns: "http://www.w3.org/2000/svg",
1633
+ fill: "none",
1634
+ viewBox: "0 0 24 24",
1635
+ strokeWidth: 2,
1636
+ stroke: "currentColor",
1637
+ className: "w-3 h-3",
1638
+ children: /* @__PURE__ */ c("path", {
1639
+ strokeLinecap: "round",
1640
+ strokeLinejoin: "round",
1641
+ d: "M6 18L18 6M6 6l12 12"
1642
+ })
1643
+ })
1644
+ })]
1645
+ }, e)),
1646
+ d.length > 1 && /* @__PURE__ */ c("button", {
1647
+ onClick: p,
1648
+ className: "text-xs text-gray-400 hover:text-gray-600 underline underline-offset-2 transition-colors",
1649
+ children: "Zrušit vše"
1650
+ })
1651
+ ]
1652
+ }), /* @__PURE__ */ c(h, {
1653
+ options: o,
1654
+ value: s ?? "",
1655
+ onChange: (e) => u?.(e.target.value),
1656
+ "aria-label": "Sort products",
1657
+ className: "text-sm"
1658
+ })]
1659
+ }),
1660
+ m ? /* @__PURE__ */ c("div", {
1661
+ className: `grid gap-4 ${Q[a]}`,
1662
+ children: Array.from({ length: i > 12 ? 12 : i }).map((e, t) => /* @__PURE__ */ c(Se, {}, t))
1663
+ }) : e.length === 0 ? /* @__PURE__ */ c("div", {
1664
+ className: "py-16 text-center",
1665
+ children: g ?? /* @__PURE__ */ l("div", {
1666
+ className: "space-y-2",
1667
+ children: [
1668
+ /* @__PURE__ */ c("p", {
1669
+ className: "text-4xl",
1670
+ children: "🔍"
1671
+ }),
1672
+ /* @__PURE__ */ c("p", {
1673
+ className: "font-semibold text-gray-900",
1674
+ children: "Žádné produkty nenalezeny"
1675
+ }),
1676
+ /* @__PURE__ */ c("p", {
1677
+ className: "text-sm text-gray-500",
1678
+ children: "Zkuste upravit filtry nebo hledat jinak."
1679
+ }),
1680
+ d.length > 0 && /* @__PURE__ */ c("button", {
1681
+ onClick: p,
1682
+ className: "mt-3 text-sm text-primary-600 hover:underline",
1683
+ children: "Zrušit všechny filtry"
1684
+ })
1685
+ ]
1686
+ })
1687
+ }) : /* @__PURE__ */ c("div", {
1688
+ className: `grid gap-4 ${Q[a]}`,
1689
+ children: e.map((e) => /* @__PURE__ */ c(Z, {
1690
+ product: e,
1691
+ size: C,
1692
+ onAddToCart: _,
1693
+ onWishlistToggle: v,
1694
+ onProductClick: y,
1695
+ isWishlisted: b.includes(e.id)
1696
+ }, e.id))
1697
+ }),
1698
+ S && S > 1 && r && /* @__PURE__ */ c("div", {
1699
+ className: "flex justify-center mt-8",
1700
+ children: /* @__PURE__ */ c(G, {
1701
+ page: n,
1702
+ totalPages: S,
1703
+ onPageChange: r
1704
+ })
1705
+ })
1706
+ ]
1707
+ });
1708
+ }
1709
+ //#endregion
1710
+ //#region src/components/CallToAction/CallToAction.tsx
1711
+ var we = {
1712
+ default: "bg-gray-50 border border-gray-200",
1713
+ primary: "bg-primary-600",
1714
+ dark: "bg-gray-900",
1715
+ gradient: "bg-linear-to-br from-primary-600 via-primary-700 to-violet-700",
1716
+ outline: "bg-white border-2 border-primary-600",
1717
+ image: "relative overflow-hidden"
1718
+ }, Te = {
1719
+ default: {
1720
+ eyebrow: "text-primary-600",
1721
+ title: "text-gray-900",
1722
+ description: "text-gray-600"
1723
+ },
1724
+ primary: {
1725
+ eyebrow: "text-primary-100",
1726
+ title: "text-white",
1727
+ description: "text-primary-100"
1728
+ },
1729
+ dark: {
1730
+ eyebrow: "text-primary-400",
1731
+ title: "text-white",
1732
+ description: "text-gray-400"
1733
+ },
1734
+ gradient: {
1735
+ eyebrow: "text-primary-200",
1736
+ title: "text-white",
1737
+ description: "text-primary-100"
1738
+ },
1739
+ outline: {
1740
+ eyebrow: "text-primary-600",
1741
+ title: "text-gray-900",
1742
+ description: "text-gray-600"
1743
+ },
1744
+ image: {
1745
+ eyebrow: "text-white/70",
1746
+ title: "text-white",
1747
+ description: "text-white/80"
1748
+ }
1749
+ }, Ee = {
1750
+ sm: {
1751
+ wrapper: "px-6 py-6 rounded-xl",
1752
+ title: "text-xl font-bold",
1753
+ description: "text-sm",
1754
+ eyebrow: "text-xs"
1755
+ },
1756
+ md: {
1757
+ wrapper: "px-8 py-10 rounded-2xl",
1758
+ title: "text-2xl font-bold",
1759
+ description: "text-base",
1760
+ eyebrow: "text-xs"
1761
+ },
1762
+ lg: {
1763
+ wrapper: "px-10 py-14 rounded-2xl",
1764
+ title: "text-3xl font-bold",
1765
+ description: "text-lg",
1766
+ eyebrow: "text-sm"
1767
+ },
1768
+ xl: {
1769
+ wrapper: "px-12 py-20 rounded-3xl",
1770
+ title: "text-4xl font-extrabold leading-tight",
1771
+ description: "text-xl",
1772
+ eyebrow: "text-sm"
1773
+ }
1774
+ }, De = {
1775
+ left: {
1776
+ wrapper: "items-start text-left",
1777
+ actions: "justify-start"
1778
+ },
1779
+ center: {
1780
+ wrapper: "items-center text-center",
1781
+ actions: "justify-center"
1782
+ },
1783
+ right: {
1784
+ wrapper: "items-end text-right",
1785
+ actions: "justify-end"
1786
+ }
1787
+ };
1788
+ function Oe({ eyebrow: e, title: t, description: n, actions: r = [], align: i = "center", layout: a = "stacked", size: o = "md", variant: s = "default", background: u, backgroundImage: d, media: f, className: m = "", style: h }) {
1789
+ let g = Te[s], _ = Ee[o], v = De[i], y = a === "inline", b = {
1790
+ ...u ? { background: u } : {},
1791
+ ...d ? {
1792
+ backgroundImage: `url(${d})`,
1793
+ backgroundSize: "cover",
1794
+ backgroundPosition: "center"
1795
+ } : {},
1796
+ ...h
1797
+ };
1798
+ return /* @__PURE__ */ l("div", {
1799
+ className: [
1800
+ "w-full",
1801
+ we[s],
1802
+ _.wrapper,
1803
+ m
1804
+ ].filter(Boolean).join(" "),
1805
+ style: Object.keys(b).length ? b : void 0,
1806
+ children: [(s === "image" || d) && /* @__PURE__ */ c("div", { className: "absolute inset-0 bg-black/50" }), /* @__PURE__ */ l("div", {
1807
+ className: `relative ${y ? "flex flex-wrap items-center justify-between gap-6" : `flex flex-col gap-4 ${v.wrapper}`}`,
1808
+ children: [
1809
+ /* @__PURE__ */ l("div", {
1810
+ className: `flex flex-col gap-2 ${y ? "flex-1 min-w-0" : v.wrapper}`,
1811
+ children: [
1812
+ e && /* @__PURE__ */ c("p", {
1813
+ className: `font-semibold uppercase tracking-widest ${_.eyebrow} ${g.eyebrow}`,
1814
+ children: e
1815
+ }),
1816
+ /* @__PURE__ */ c("h2", {
1817
+ className: `${_.title} ${g.title}`,
1818
+ children: t
1819
+ }),
1820
+ n && /* @__PURE__ */ c("p", {
1821
+ className: `max-w-2xl ${_.description} ${g.description}`,
1822
+ children: n
1823
+ })
1824
+ ]
1825
+ }),
1826
+ f && !y && /* @__PURE__ */ c("div", {
1827
+ className: "mt-2",
1828
+ children: f
1829
+ }),
1830
+ r.length > 0 && /* @__PURE__ */ c("div", {
1831
+ className: `flex flex-wrap gap-3 ${y ? "shrink-0" : v.actions}`,
1832
+ children: r.map((e, t) => {
1833
+ let n = /* @__PURE__ */ c(p, {
1834
+ variant: e.variant ?? (t === 0 ? ke(s) : "outline"),
1835
+ size: e.size ?? (o === "sm" ? "sm" : o === "xl" ? "lg" : "md"),
1836
+ onClick: e.onClick,
1837
+ children: e.label
1838
+ }, t);
1839
+ return e.href ? /* @__PURE__ */ c("a", {
1840
+ href: e.href,
1841
+ className: "contents",
1842
+ children: n
1843
+ }, t) : n;
1844
+ })
1845
+ })
1846
+ ]
1847
+ })]
1848
+ });
1849
+ }
1850
+ function ke(e) {
1851
+ return e === "default" || e === "outline" ? "primary" : "secondary";
1852
+ }
1853
+ //#endregion
1854
+ //#region src/components/Footer/Footer.tsx
1855
+ function Ae() {
1856
+ return /* @__PURE__ */ c("svg", {
1857
+ xmlns: "http://www.w3.org/2000/svg",
1858
+ fill: "none",
1859
+ viewBox: "0 0 24 24",
1860
+ strokeWidth: 1.5,
1861
+ stroke: "currentColor",
1862
+ className: "w-4 h-4 shrink-0",
1863
+ children: /* @__PURE__ */ c("path", {
1864
+ strokeLinecap: "round",
1865
+ strokeLinejoin: "round",
1866
+ d: "M2.25 6.75c0 8.284 6.716 15 15 15h2.25a2.25 2.25 0 002.25-2.25v-1.372c0-.516-.351-.966-.852-1.091l-4.423-1.106c-.44-.11-.902.055-1.173.417l-.97 1.293c-.282.376-.769.542-1.21.38a12.035 12.035 0 01-7.143-7.143c-.162-.441.004-.928.38-1.21l1.293-.97c.363-.271.527-.734.417-1.173L6.963 3.102a1.125 1.125 0 00-1.091-.852H4.5A2.25 2.25 0 002.25 4.5v2.25z"
1867
+ })
1868
+ });
1869
+ }
1870
+ function je() {
1871
+ return /* @__PURE__ */ c("svg", {
1872
+ xmlns: "http://www.w3.org/2000/svg",
1873
+ fill: "none",
1874
+ viewBox: "0 0 24 24",
1875
+ strokeWidth: 1.5,
1876
+ stroke: "currentColor",
1877
+ className: "w-4 h-4 shrink-0",
1878
+ children: /* @__PURE__ */ c("path", {
1879
+ strokeLinecap: "round",
1880
+ strokeLinejoin: "round",
1881
+ d: "M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75"
1882
+ })
1883
+ });
1884
+ }
1885
+ function Me() {
1886
+ return /* @__PURE__ */ l("svg", {
1887
+ xmlns: "http://www.w3.org/2000/svg",
1888
+ fill: "none",
1889
+ viewBox: "0 0 24 24",
1890
+ strokeWidth: 1.5,
1891
+ stroke: "currentColor",
1892
+ className: "w-4 h-4 shrink-0",
1893
+ children: [/* @__PURE__ */ c("path", {
1894
+ strokeLinecap: "round",
1895
+ strokeLinejoin: "round",
1896
+ d: "M15 10.5a3 3 0 11-6 0 3 3 0 016 0z"
1897
+ }), /* @__PURE__ */ c("path", {
1898
+ strokeLinecap: "round",
1899
+ strokeLinejoin: "round",
1900
+ d: "M19.5 10.5c0 7.142-7.5 11.25-7.5 11.25S4.5 17.642 4.5 10.5a7.5 7.5 0 1115 0z"
1901
+ })]
1902
+ });
1903
+ }
1904
+ function Ne() {
1905
+ return /* @__PURE__ */ c("svg", {
1906
+ xmlns: "http://www.w3.org/2000/svg",
1907
+ fill: "none",
1908
+ viewBox: "0 0 24 24",
1909
+ strokeWidth: 1.5,
1910
+ stroke: "currentColor",
1911
+ className: "w-4 h-4 shrink-0",
1912
+ children: /* @__PURE__ */ c("path", {
1913
+ strokeLinecap: "round",
1914
+ strokeLinejoin: "round",
1915
+ d: "M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z"
1916
+ })
1917
+ });
1918
+ }
1919
+ function Pe() {
1920
+ return /* @__PURE__ */ c("svg", {
1921
+ xmlns: "http://www.w3.org/2000/svg",
1922
+ viewBox: "0 0 24 24",
1923
+ fill: "currentColor",
1924
+ className: "w-4 h-4",
1925
+ children: /* @__PURE__ */ c("path", { d: "M24 12.073C24 5.405 18.627 0 12 0S0 5.405 0 12.073C0 18.1 4.388 23.094 10.125 24v-8.437H7.078v-3.49h3.047V9.41c0-3.025 1.792-4.697 4.533-4.697 1.312 0 2.686.236 2.686.236v2.97h-1.513c-1.491 0-1.956.93-1.956 1.886v2.267h3.328l-.532 3.49h-2.796V24C19.612 23.094 24 18.1 24 12.073z" })
1926
+ });
1927
+ }
1928
+ function $() {
1929
+ return /* @__PURE__ */ c("svg", {
1930
+ xmlns: "http://www.w3.org/2000/svg",
1931
+ viewBox: "0 0 24 24",
1932
+ fill: "currentColor",
1933
+ className: "w-4 h-4",
1934
+ children: /* @__PURE__ */ c("path", { d: "M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838a6.162 6.162 0 100 12.324 6.162 6.162 0 000-12.324zM12 16a4 4 0 110-8 4 4 0 010 8zm6.406-11.845a1.44 1.44 0 100 2.881 1.44 1.44 0 000-2.881z" })
1935
+ });
1936
+ }
1937
+ function Fe() {
1938
+ return /* @__PURE__ */ c("svg", {
1939
+ xmlns: "http://www.w3.org/2000/svg",
1940
+ viewBox: "0 0 24 24",
1941
+ fill: "currentColor",
1942
+ className: "w-4 h-4",
1943
+ children: /* @__PURE__ */ c("path", { d: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" })
1944
+ });
1945
+ }
1946
+ function Ie() {
1947
+ return /* @__PURE__ */ c("svg", {
1948
+ xmlns: "http://www.w3.org/2000/svg",
1949
+ viewBox: "0 0 24 24",
1950
+ fill: "currentColor",
1951
+ className: "w-4 h-4",
1952
+ children: /* @__PURE__ */ c("path", { d: "M23.498 6.186a3.016 3.016 0 00-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 00.502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 002.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 002.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z" })
1953
+ });
1954
+ }
1955
+ function Le() {
1956
+ return /* @__PURE__ */ c("svg", {
1957
+ xmlns: "http://www.w3.org/2000/svg",
1958
+ viewBox: "0 0 24 24",
1959
+ fill: "currentColor",
1960
+ className: "w-4 h-4",
1961
+ children: /* @__PURE__ */ c("path", { d: "M19.59 6.69a4.83 4.83 0 01-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 01-2.88 2.5 2.89 2.89 0 01-2.89-2.89 2.89 2.89 0 012.89-2.89c.28 0 .54.04.79.1V9.01a6.33 6.33 0 00-.79-.05 6.34 6.34 0 00-6.34 6.34 6.34 6.34 0 006.34 6.34 6.34 6.34 0 006.33-6.34V8.69a8.18 8.18 0 004.78 1.52V6.76a4.85 4.85 0 01-1.01-.07z" })
1962
+ });
1963
+ }
1964
+ var Re = {
1965
+ facebook: Pe,
1966
+ instagram: $,
1967
+ twitter: Fe,
1968
+ youtube: Ie,
1969
+ tiktok: Le
1970
+ }, ze = {
1971
+ phone: Ae,
1972
+ email: je,
1973
+ address: Me,
1974
+ hours: Ne
1975
+ };
1976
+ function Be(e) {
1977
+ if (!e) return null;
1978
+ if (typeof e == "string") {
1979
+ let t = ze[e];
1980
+ return t ? /* @__PURE__ */ c(t, {}) : null;
1981
+ }
1982
+ return e;
1983
+ }
1984
+ function Ve(e) {
1985
+ if (typeof e == "string") {
1986
+ let t = Re[e];
1987
+ return t ? /* @__PURE__ */ c(t, {}) : null;
1988
+ }
1989
+ return e;
1990
+ }
1991
+ function He({ logo: e, tagline: t, contactHeading: n = "Kontakty", contacts: r = [], linkGroups: i = [], socialLinks: a = [], copyright: o, bottomLinks: s = [], className: u = "" }) {
1992
+ let d = (/* @__PURE__ */ new Date()).getFullYear();
1993
+ return /* @__PURE__ */ l("footer", {
1994
+ className: ["bg-gray-900 text-gray-300", u].filter(Boolean).join(" "),
1995
+ children: [/* @__PURE__ */ l("div", {
1996
+ className: "max-w-7xl mx-auto px-4 py-12 grid grid-cols-1 md:grid-cols-2 gap-10 lg:gap-16",
1997
+ children: [/* @__PURE__ */ l("div", {
1998
+ className: "flex flex-col gap-6",
1999
+ children: [
2000
+ /* @__PURE__ */ l("div", { children: [e ? /* @__PURE__ */ c("div", {
2001
+ className: "mb-3",
2002
+ children: e
2003
+ }) : /* @__PURE__ */ c("span", {
2004
+ className: "text-xl font-bold text-white tracking-tight mb-3 block",
2005
+ children: "shopito"
2006
+ }), t && /* @__PURE__ */ c("p", {
2007
+ className: "text-sm text-gray-400 max-w-xs",
2008
+ children: t
2009
+ })] }),
2010
+ r.length > 0 && /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h3", {
2011
+ className: "text-xs font-semibold uppercase tracking-widest text-gray-500 mb-3",
2012
+ children: n
2013
+ }), /* @__PURE__ */ c("ul", {
2014
+ className: "space-y-3",
2015
+ children: r.map((e, t) => {
2016
+ let n = Be(e.icon), r = /* @__PURE__ */ l("div", {
2017
+ className: "flex items-start gap-2.5",
2018
+ children: [n && /* @__PURE__ */ c("span", {
2019
+ className: "mt-0.5 text-primary-400",
2020
+ children: n
2021
+ }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
2022
+ className: "text-xs text-gray-500 leading-none mb-0.5",
2023
+ children: e.label
2024
+ }), /* @__PURE__ */ c("p", {
2025
+ className: `text-sm text-gray-200 ${e.href ? "hover:text-white transition-colors" : ""}`,
2026
+ children: e.value
2027
+ })] })]
2028
+ });
2029
+ return /* @__PURE__ */ c("li", { children: e.href ? /* @__PURE__ */ c("a", {
2030
+ href: e.href,
2031
+ children: r
2032
+ }) : r }, t);
2033
+ })
2034
+ })] }),
2035
+ a.length > 0 && /* @__PURE__ */ c("div", {
2036
+ className: "flex gap-2 flex-wrap",
2037
+ children: a.map((e, t) => /* @__PURE__ */ c("a", {
2038
+ href: e.href,
2039
+ "aria-label": e.label,
2040
+ className: "w-8 h-8 flex items-center justify-center rounded-lg bg-gray-800 text-gray-400 hover:bg-primary-600 hover:text-white transition-colors",
2041
+ children: Ve(e.icon)
2042
+ }, t))
2043
+ })
2044
+ ]
2045
+ }), i.length > 0 && /* @__PURE__ */ c("div", {
2046
+ className: `grid gap-8 ${i.length === 1 ? "grid-cols-1" : i.length === 2 ? "grid-cols-2" : "grid-cols-2 sm:grid-cols-3"}`,
2047
+ children: i.map((e, t) => /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h3", {
2048
+ className: "text-xs font-semibold uppercase tracking-widest text-gray-500 mb-3",
2049
+ children: e.heading
2050
+ }), /* @__PURE__ */ c("ul", {
2051
+ className: "space-y-2",
2052
+ children: e.links.map((e, t) => /* @__PURE__ */ c("li", { children: e.href ? /* @__PURE__ */ c("a", {
2053
+ href: e.href,
2054
+ className: "text-sm text-gray-400 hover:text-white transition-colors",
2055
+ children: e.label
2056
+ }) : /* @__PURE__ */ c("button", {
2057
+ onClick: e.onClick,
2058
+ className: "text-sm text-gray-400 hover:text-white transition-colors text-left",
2059
+ children: e.label
2060
+ }) }, t))
2061
+ })] }, t))
2062
+ })]
2063
+ }), /* @__PURE__ */ c("div", {
2064
+ className: "border-t border-gray-800",
2065
+ children: /* @__PURE__ */ l("div", {
2066
+ className: "max-w-7xl mx-auto px-4 py-4 flex flex-wrap items-center justify-between gap-3",
2067
+ children: [/* @__PURE__ */ c("p", {
2068
+ className: "text-xs text-gray-500",
2069
+ children: o ?? `© ${d} Shopito. Všechna práva vyhrazena.`
2070
+ }), s.length > 0 && /* @__PURE__ */ c("nav", {
2071
+ className: "flex flex-wrap gap-4",
2072
+ children: s.map((e, t) => e.href ? /* @__PURE__ */ c("a", {
2073
+ href: e.href,
2074
+ className: "text-xs text-gray-500 hover:text-gray-300 transition-colors",
2075
+ children: e.label
2076
+ }, t) : /* @__PURE__ */ c("button", {
2077
+ onClick: e.onClick,
2078
+ className: "text-xs text-gray-500 hover:text-gray-300 transition-colors",
2079
+ children: e.label
2080
+ }, t))
2081
+ })]
2082
+ })
2083
+ })]
2084
+ });
2085
+ }
2086
+ //#endregion
2087
+ export { A as Alert, ce as Avatar, w as Badge, ge as BannerCarousel, p as Button, Oe as CallToAction, E as Card, O as CardBody, ee as CardFooter, D as CardHeader, pe as CategoryTree, N as Checkbox, He as Footer, ue as Header, y as Heading, m as Input, he as MegaMenu, M as Modal, G as Pagination, Z as ProductCard, Ce as ProductGrid, h as Select, re as Spinner, B as Tab, z as TabList, V as TabPanel, R as Tabs, b as Text, P as Toggle };
2088
+
2089
+ //# sourceMappingURL=index.js.map