@dododog/ui 0.2.1 → 0.3.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 (41) hide show
  1. package/dist/{chunk-OK3E73OK.js → chunk-2XH74PQR.js} +14 -0
  2. package/dist/chunk-36JNXXGH.js +360 -0
  3. package/dist/{chunk-KVVXKSMQ.mjs → chunk-7JYJ7ICL.mjs} +14 -0
  4. package/dist/{chunk-NWLJ7VQF.js → chunk-AIA3NHCK.js} +1 -2
  5. package/dist/{chunk-YSJAEDMG.js → chunk-E24VNM6S.js} +8 -5
  6. package/dist/{chunk-RQGC6RPI.mjs → chunk-FL3GD5FJ.mjs} +1 -2
  7. package/dist/{chunk-TNGW36OC.mjs → chunk-LRNSVRUN.mjs} +2 -0
  8. package/dist/{chunk-76DZXGKJ.mjs → chunk-N6THLJIG.mjs} +8 -5
  9. package/dist/chunk-PBDPZTHK.mjs +53 -0
  10. package/dist/chunk-S732LTPT.js +75 -0
  11. package/dist/{chunk-3BPC4LNH.js → chunk-T4AT3YCT.js} +2 -0
  12. package/dist/chunk-XH2MVC4W.mjs +337 -0
  13. package/dist/components/Counter/index.js +2 -2
  14. package/dist/components/Counter/index.mjs +1 -1
  15. package/dist/components/DateRangePicker/index.js +3 -3
  16. package/dist/components/DateRangePicker/index.mjs +1 -1
  17. package/dist/components/DetailList/index.d.mts +8 -2
  18. package/dist/components/DetailList/index.d.ts +8 -2
  19. package/dist/components/DetailList/index.js +2 -2
  20. package/dist/components/DetailList/index.mjs +1 -1
  21. package/dist/components/FloatingDock/index.d.mts +44 -0
  22. package/dist/components/FloatingDock/index.d.ts +44 -0
  23. package/dist/components/FloatingDock/index.js +11 -0
  24. package/dist/components/FloatingDock/index.mjs +2 -0
  25. package/dist/components/RoomTypeCard/index.d.mts +92 -0
  26. package/dist/components/RoomTypeCard/index.d.ts +92 -0
  27. package/dist/components/RoomTypeCard/index.js +16 -0
  28. package/dist/components/RoomTypeCard/index.mjs +3 -0
  29. package/dist/index.d.mts +124 -4
  30. package/dist/index.d.ts +124 -4
  31. package/dist/index.js +505 -70
  32. package/dist/index.mjs +419 -16
  33. package/dist/tailwind-preset.d.mts +11 -0
  34. package/dist/tailwind-preset.d.ts +11 -0
  35. package/dist/tailwind-preset.js +7 -7
  36. package/dist/tailwind-preset.mjs +1 -1
  37. package/dist/tokens/index.d.mts +11 -0
  38. package/dist/tokens/index.d.ts +11 -0
  39. package/dist/tokens/index.js +8 -8
  40. package/dist/tokens/index.mjs +1 -1
  41. package/package.json +11 -1
package/dist/index.js CHANGED
@@ -1,22 +1,25 @@
1
1
  'use strict';
2
2
 
3
+ var chunkDTIYZ3TQ_js = require('./chunk-DTIYZ3TQ.js');
4
+ var chunkE6ZNND75_js = require('./chunk-E6ZNND75.js');
3
5
  var chunkN3JU7JS7_js = require('./chunk-N3JU7JS7.js');
6
+ var chunkTT7L3ZU7_js = require('./chunk-TT7L3ZU7.js');
7
+ var chunkDFXXGKMI_js = require('./chunk-DFXXGKMI.js');
4
8
  var chunk3VU6TPAT_js = require('./chunk-3VU6TPAT.js');
5
9
  var chunkI4S3R6C6_js = require('./chunk-I4S3R6C6.js');
6
10
  var chunk762LQMWP_js = require('./chunk-762LQMWP.js');
7
11
  var chunk7IJOHVNJ_js = require('./chunk-7IJOHVNJ.js');
8
12
  var chunkL7OYR6U3_js = require('./chunk-L7OYR6U3.js');
9
13
  var chunkVTELEOT7_js = require('./chunk-VTELEOT7.js');
10
- var chunkDTIYZ3TQ_js = require('./chunk-DTIYZ3TQ.js');
11
- var chunkE6ZNND75_js = require('./chunk-E6ZNND75.js');
14
+ var chunkTZHT7NZU_js = require('./chunk-TZHT7NZU.js');
15
+ var chunk36JNXXGH_js = require('./chunk-36JNXXGH.js');
12
16
  var chunkHS3MAW3G_js = require('./chunk-HS3MAW3G.js');
13
17
  var chunkQWDKSY6Y_js = require('./chunk-QWDKSY6Y.js');
14
18
  var chunk3R7PT3JG_js = require('./chunk-3R7PT3JG.js');
15
19
  var chunkDS4LM7OS_js = require('./chunk-DS4LM7OS.js');
16
20
  var chunkNCU5PY34_js = require('./chunk-NCU5PY34.js');
17
21
  var chunkXHRDPJTF_js = require('./chunk-XHRDPJTF.js');
18
- var chunkTT7L3ZU7_js = require('./chunk-TT7L3ZU7.js');
19
- var chunkDFXXGKMI_js = require('./chunk-DFXXGKMI.js');
22
+ var chunkHN6B4TAW_js = require('./chunk-HN6B4TAW.js');
20
23
  var chunkKZSGVMUG_js = require('./chunk-KZSGVMUG.js');
21
24
  var chunkNBDPT3XQ_js = require('./chunk-NBDPT3XQ.js');
22
25
  var chunkSCGN5H6D_js = require('./chunk-SCGN5H6D.js');
@@ -24,7 +27,7 @@ var chunk6ASRTUXO_js = require('./chunk-6ASRTUXO.js');
24
27
  var chunkPG4I4NWO_js = require('./chunk-PG4I4NWO.js');
25
28
  var chunkPRDIS2VR_js = require('./chunk-PRDIS2VR.js');
26
29
  var chunkGXKON34B_js = require('./chunk-GXKON34B.js');
27
- var chunkTZHT7NZU_js = require('./chunk-TZHT7NZU.js');
30
+ var chunkODUY7NXD_js = require('./chunk-ODUY7NXD.js');
28
31
  var chunkYN4HPIRC_js = require('./chunk-YN4HPIRC.js');
29
32
  var chunkMKOKWME3_js = require('./chunk-MKOKWME3.js');
30
33
  var chunkDLOHAW74_js = require('./chunk-DLOHAW74.js');
@@ -32,43 +35,478 @@ var chunk77WKG2D7_js = require('./chunk-77WKG2D7.js');
32
35
  var chunkU3XWNFHH_js = require('./chunk-U3XWNFHH.js');
33
36
  var chunkW7DZZS6L_js = require('./chunk-W7DZZS6L.js');
34
37
  var chunkTE4WHZ4Q_js = require('./chunk-TE4WHZ4Q.js');
35
- var chunkHN6B4TAW_js = require('./chunk-HN6B4TAW.js');
36
38
  var chunkIEHX4DU6_js = require('./chunk-IEHX4DU6.js');
37
39
  var chunkS5TLUDNM_js = require('./chunk-S5TLUDNM.js');
38
40
  var chunk7W3TFPIF_js = require('./chunk-7W3TFPIF.js');
39
41
  var chunkN2Q4Z2FU_js = require('./chunk-N2Q4Z2FU.js');
42
+ var chunkS732LTPT_js = require('./chunk-S732LTPT.js');
40
43
  var chunkC4RZBOKH_js = require('./chunk-C4RZBOKH.js');
41
44
  var chunkKOO5ZXLD_js = require('./chunk-KOO5ZXLD.js');
42
45
  var chunkIRKM5UF4_js = require('./chunk-IRKM5UF4.js');
43
- var chunkODUY7NXD_js = require('./chunk-ODUY7NXD.js');
44
- var chunkIJIUUBFT_js = require('./chunk-IJIUUBFT.js');
45
- var chunk3BPC4LNH_js = require('./chunk-3BPC4LNH.js');
46
- var chunkNWLJ7VQF_js = require('./chunk-NWLJ7VQF.js');
47
- var chunkYSJAEDMG_js = require('./chunk-YSJAEDMG.js');
48
- var chunkVWFY24XF_js = require('./chunk-VWFY24XF.js');
46
+ var chunkP7GAKOCX_js = require('./chunk-P7GAKOCX.js');
47
+ var chunkT4AT3YCT_js = require('./chunk-T4AT3YCT.js');
48
+ var chunkAIA3NHCK_js = require('./chunk-AIA3NHCK.js');
49
+ var chunkE24VNM6S_js = require('./chunk-E24VNM6S.js');
49
50
  var chunkXXC2YD3D_js = require('./chunk-XXC2YD3D.js');
50
- var chunkTDGU5Y2P_js = require('./chunk-TDGU5Y2P.js');
51
+ var chunkVWFY24XF_js = require('./chunk-VWFY24XF.js');
51
52
  var chunkT5FLQQP6_js = require('./chunk-T5FLQQP6.js');
53
+ var chunkTDGU5Y2P_js = require('./chunk-TDGU5Y2P.js');
52
54
  var chunkZ5S7LHMY_js = require('./chunk-Z5S7LHMY.js');
53
55
  var chunkPND5YKFN_js = require('./chunk-PND5YKFN.js');
54
56
  var chunk6EG6EAHW_js = require('./chunk-6EG6EAHW.js');
55
57
  var chunkH3JNRTAI_js = require('./chunk-H3JNRTAI.js');
56
- var chunkZAUYE2EI_js = require('./chunk-ZAUYE2EI.js');
57
58
  var chunkYZTVHCLK_js = require('./chunk-YZTVHCLK.js');
58
59
  var chunkMY6BYO5F_js = require('./chunk-MY6BYO5F.js');
59
- var chunkP7GAKOCX_js = require('./chunk-P7GAKOCX.js');
60
+ var chunkZAUYE2EI_js = require('./chunk-ZAUYE2EI.js');
61
+ var chunkIJIUUBFT_js = require('./chunk-IJIUUBFT.js');
60
62
  var chunkMCF3EQTV_js = require('./chunk-MCF3EQTV.js');
61
63
  var chunkWBRVUWGC_js = require('./chunk-WBRVUWGC.js');
62
- var chunkNHB2TI2B_js = require('./chunk-NHB2TI2B.js');
63
64
  var chunkEY4ZIR3P_js = require('./chunk-EY4ZIR3P.js');
65
+ var chunkNHB2TI2B_js = require('./chunk-NHB2TI2B.js');
64
66
  var chunkADIDI7AJ_js = require('./chunk-ADIDI7AJ.js');
67
+ var React = require('react');
68
+ var classVarianceAuthority = require('class-variance-authority');
69
+ var jsxRuntime = require('react/jsx-runtime');
65
70
 
71
+ function _interopNamespace(e) {
72
+ if (e && e.__esModule) return e;
73
+ var n = Object.create(null);
74
+ if (e) {
75
+ Object.keys(e).forEach(function (k) {
76
+ if (k !== 'default') {
77
+ var d = Object.getOwnPropertyDescriptor(e, k);
78
+ Object.defineProperty(n, k, d.get ? d : {
79
+ enumerable: true,
80
+ get: function () { return e[k]; }
81
+ });
82
+ }
83
+ });
84
+ }
85
+ n.default = e;
86
+ return Object.freeze(n);
87
+ }
66
88
 
89
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
67
90
 
91
+ var searchFieldVariants = classVarianceAuthority.cva(
92
+ "w-full border bg-white transition-all text-primary placeholder:text-text-muted",
93
+ {
94
+ variants: {
95
+ size: {
96
+ md: "pl-11 pr-11 py-3 text-sm rounded-xl",
97
+ lg: "pl-12 pr-12 py-4 text-base rounded-2xl",
98
+ xl: "pl-14 pr-14 py-5 text-lg rounded-2xl"
99
+ },
100
+ variant: {
101
+ default: "border-gray-200 focus:border-secondary focus:outline-none focus:ring-2 focus:ring-secondary/30",
102
+ hero: "border-white/20 bg-white/10 text-white placeholder:text-white/50 focus:bg-white/20 focus:outline-none focus:ring-2 focus:ring-white/30 focus:border-white/40 backdrop-blur-sm"
103
+ }
104
+ },
105
+ defaultVariants: {
106
+ size: "lg",
107
+ variant: "default"
108
+ }
109
+ }
110
+ );
111
+ var iconSizeMap = {
112
+ md: 18,
113
+ lg: 20,
114
+ xl: 22
115
+ };
116
+ var iconPositionMap = {
117
+ md: "left-3.5",
118
+ lg: "left-4",
119
+ xl: "left-4.5"
120
+ };
121
+ var clearPositionMap = {
122
+ md: "right-3",
123
+ lg: "right-3.5",
124
+ xl: "right-4"
125
+ };
126
+ var SearchIcon = ({ size = 20 }) => /* @__PURE__ */ jsxRuntime.jsxs(
127
+ "svg",
128
+ {
129
+ xmlns: "http://www.w3.org/2000/svg",
130
+ width: size,
131
+ height: size,
132
+ viewBox: "0 0 24 24",
133
+ fill: "none",
134
+ stroke: "currentColor",
135
+ strokeWidth: "2",
136
+ strokeLinecap: "round",
137
+ strokeLinejoin: "round",
138
+ "aria-hidden": "true",
139
+ children: [
140
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "8" }),
141
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m21 21-4.3-4.3" })
142
+ ]
143
+ }
144
+ );
145
+ var ClearIcon = () => /* @__PURE__ */ jsxRuntime.jsxs(
146
+ "svg",
147
+ {
148
+ xmlns: "http://www.w3.org/2000/svg",
149
+ width: "16",
150
+ height: "16",
151
+ viewBox: "0 0 24 24",
152
+ fill: "none",
153
+ stroke: "currentColor",
154
+ strokeWidth: "2",
155
+ strokeLinecap: "round",
156
+ strokeLinejoin: "round",
157
+ "aria-hidden": "true",
158
+ children: [
159
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 6 6 18" }),
160
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m6 6 12 12" })
161
+ ]
162
+ }
163
+ );
164
+ var SearchField = React__namespace.forwardRef(
165
+ ({
166
+ className,
167
+ containerClassName,
168
+ size,
169
+ variant,
170
+ value,
171
+ onClear,
172
+ resultCount,
173
+ resultLabel,
174
+ ...props
175
+ }, ref) => {
176
+ const hasValue = typeof value === "string" && value.length > 0;
177
+ const resolvedSize = size ?? "lg";
178
+ const iconSize = iconSizeMap[resolvedSize] ?? 20;
179
+ const iconPosition = iconPositionMap[resolvedSize] ?? "left-4";
180
+ const clearPosition = clearPositionMap[resolvedSize] ?? "right-3.5";
181
+ const isHero = variant === "hero";
182
+ const iconColor = isHero ? "text-white/60" : "text-text-muted";
183
+ const clearColor = isHero ? "text-white/60 hover:text-white" : "text-text-muted hover:text-primary";
184
+ const countColor = isHero ? "text-white/50" : "text-text-muted";
185
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkADIDI7AJ_js.cn("w-full", containerClassName), children: [
186
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
187
+ /* @__PURE__ */ jsxRuntime.jsx(
188
+ "div",
189
+ {
190
+ className: chunkADIDI7AJ_js.cn(
191
+ "absolute top-1/2 -translate-y-1/2 pointer-events-none",
192
+ iconPosition,
193
+ iconColor
194
+ ),
195
+ children: /* @__PURE__ */ jsxRuntime.jsx(SearchIcon, { size: iconSize })
196
+ }
197
+ ),
198
+ /* @__PURE__ */ jsxRuntime.jsx(
199
+ "input",
200
+ {
201
+ ref,
202
+ type: "text",
203
+ role: "searchbox",
204
+ className: chunkADIDI7AJ_js.cn(
205
+ searchFieldVariants({ size, variant }),
206
+ className
207
+ ),
208
+ value,
209
+ ...props
210
+ }
211
+ ),
212
+ hasValue && onClear && /* @__PURE__ */ jsxRuntime.jsx(
213
+ "button",
214
+ {
215
+ type: "button",
216
+ onClick: onClear,
217
+ className: chunkADIDI7AJ_js.cn(
218
+ "absolute top-1/2 -translate-y-1/2 p-1.5 rounded-lg transition-colors",
219
+ clearPosition,
220
+ clearColor
221
+ ),
222
+ "aria-label": "Effacer la recherche",
223
+ children: /* @__PURE__ */ jsxRuntime.jsx(ClearIcon, {})
224
+ }
225
+ )
226
+ ] }),
227
+ hasValue && resultCount != null && resultLabel && /* @__PURE__ */ jsxRuntime.jsxs(
228
+ "p",
229
+ {
230
+ className: chunkADIDI7AJ_js.cn("mt-2 text-sm", countColor),
231
+ "aria-live": "polite",
232
+ "aria-atomic": "true",
233
+ children: [
234
+ resultCount,
235
+ " ",
236
+ resultLabel
237
+ ]
238
+ }
239
+ )
240
+ ] });
241
+ }
242
+ );
243
+ SearchField.displayName = "SearchField";
244
+ function PawIcon({ className }) {
245
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className, "aria-hidden": "true", children: [
246
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 5.172C10 3.782 8.423 2.679 6.5 3c-2.823.47-4.113 6.006-4 7 .08.703 1.725 1.722 3.656 1 1.261-.472 1.96-1.45 2.344-2.5" }),
247
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14.267 5.172c0-1.39 1.577-2.493 3.5-2.172 2.823.47 4.113 6.006 4 7-.08.703-1.725 1.722-3.656 1-1.261-.472-1.855-1.45-2.239-2.5" }),
248
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 14v.5" }),
249
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 14v.5" }),
250
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M11.25 16.25h1.5L12 17l-.75-.75Z" }),
251
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4.42 11.247A13.152 13.152 0 0 0 4 14.556C4 18.728 7.582 21 12 21s8-2.272 8-6.444c0-1.061-.162-2.2-.493-3.309m-9.243-6.082A8.801 8.801 0 0 1 12 5c.78 0 1.5.108 2.161.306" })
252
+ ] });
253
+ }
254
+ function CheckIcon({ className }) {
255
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "17", height: "17", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", className, "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 6 9 17l-5-5" }) });
256
+ }
257
+ var MD_COLS = {
258
+ 1: "md:grid-cols-1",
259
+ 2: "md:grid-cols-2",
260
+ 3: "md:grid-cols-3",
261
+ 4: "md:grid-cols-4"
262
+ };
263
+ function DogFriendlyPanel({
264
+ title = "Voyager avec votre chien",
265
+ confirmed = false,
266
+ confirmedLabel = "Confirm\xE9 par l'\xE9tablissement",
267
+ unconfirmedLabel = "Informations \xE0 confirmer",
268
+ stats,
269
+ perks,
270
+ className,
271
+ ...props
272
+ }) {
273
+ const mdCols = MD_COLS[Math.min(stats.length, 4)] ?? "md:grid-cols-4";
274
+ return /* @__PURE__ */ jsxRuntime.jsxs(
275
+ "section",
276
+ {
277
+ className: chunkADIDI7AJ_js.cn(
278
+ "rounded-2xl border border-secondary/25 bg-gradient-to-b from-secondary/[0.06] to-transparent p-4 md:p-6",
279
+ className
280
+ ),
281
+ ...props,
282
+ children: [
283
+ /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "mb-4 flex items-center gap-3", children: [
284
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-secondary text-white", children: /* @__PURE__ */ jsxRuntime.jsx(PawIcon, { className: "h-6 w-6" }) }),
285
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
286
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-heading text-lg font-bold leading-tight text-primary", children: title }),
287
+ /* @__PURE__ */ jsxRuntime.jsxs(
288
+ "p",
289
+ {
290
+ className: chunkADIDI7AJ_js.cn(
291
+ "mt-0.5 inline-flex items-center gap-1 text-xs font-medium",
292
+ confirmed ? "text-accent-dark" : "text-text-muted"
293
+ ),
294
+ children: [
295
+ confirmed ? /* @__PURE__ */ jsxRuntime.jsx(CheckIcon, { className: "h-3.5 w-3.5" }) : null,
296
+ confirmed ? confirmedLabel : unconfirmedLabel
297
+ ]
298
+ }
299
+ )
300
+ ] })
301
+ ] }),
302
+ stats.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkADIDI7AJ_js.cn("mb-3 grid grid-cols-2 gap-2.5", mdCols), children: stats.map((stat) => /* @__PURE__ */ jsxRuntime.jsxs(
303
+ "div",
304
+ {
305
+ className: "rounded-xl border border-secondary/15 bg-white px-3 py-2.5",
306
+ children: [
307
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-0.5 text-[11px] uppercase tracking-wide text-text-muted", children: stat.label }),
308
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm font-semibold text-primary", children: stat.value }),
309
+ stat.note ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-text-secondary", children: stat.note }) : null
310
+ ]
311
+ },
312
+ stat.label
313
+ )) }) : null,
314
+ perks && perks.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col gap-2 md:grid md:grid-cols-3 md:gap-x-7 md:gap-y-2.5", children: perks.map((perk) => /* @__PURE__ */ jsxRuntime.jsxs(
315
+ "li",
316
+ {
317
+ className: "flex items-center gap-2.5 text-sm text-primary",
318
+ children: [
319
+ /* @__PURE__ */ jsxRuntime.jsx(CheckIcon, { className: "h-[17px] w-[17px] shrink-0 text-accent" }),
320
+ perk
321
+ ]
322
+ },
323
+ perk
324
+ )) }) : null
325
+ ]
326
+ }
327
+ );
328
+ }
329
+ function CheckIcon2({ className }) {
330
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", className, "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 6 9 17l-5-5" }) });
331
+ }
332
+ function formatScore(score) {
333
+ return score.toFixed(1).replace(".", ",");
334
+ }
335
+ function scoreBadgeClass(score) {
336
+ return score >= 8 ? "bg-primary" : "bg-rating-mid";
337
+ }
338
+ function ReviewSummary({
339
+ score,
340
+ scoreLabel,
341
+ count,
342
+ title = "Avis des voyageurs",
343
+ countLabel = "avis v\xE9rifi\xE9s",
344
+ sources,
345
+ subScores,
346
+ reviews,
347
+ onSeeAll,
348
+ seeAllLabel,
349
+ emptyLabel = "Peu d'avis v\xE9rifi\xE9s pour le moment",
350
+ className,
351
+ ...props
352
+ }) {
353
+ const hasReviews = Boolean(reviews && reviews.length > 0);
354
+ const isEmpty = score == null && !hasReviews;
355
+ return /* @__PURE__ */ jsxRuntime.jsxs(
356
+ "section",
357
+ {
358
+ className: chunkADIDI7AJ_js.cn(
359
+ "border-y border-sand-dark bg-surface-2 px-4 py-6 md:px-6 md:py-8",
360
+ className
361
+ ),
362
+ ...props,
363
+ children: [
364
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "mb-3 font-heading text-2xl font-bold tracking-tight text-primary", children: title }),
365
+ isEmpty ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-text-secondary", children: emptyLabel }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
366
+ score != null ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-1 flex items-baseline gap-2", children: [
367
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-heading text-4xl font-bold leading-none text-primary", children: formatScore(score) }),
368
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-lg font-medium text-text-muted", children: "/ 10" })
369
+ ] }) : null,
370
+ scoreLabel ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-heading text-lg font-bold text-primary", children: scoreLabel }) : null,
371
+ count != null ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4 mt-1 text-sm text-text-secondary", children: [
372
+ count.toLocaleString("fr-FR"),
373
+ " ",
374
+ countLabel,
375
+ sources && sources.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-text-muted", children: [
376
+ " \xB7 ",
377
+ sources.join(" \xB7 ")
378
+ ] }) : null
379
+ ] }) : null,
380
+ subScores && subScores.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-5 flex border-y border-sand-dark", children: subScores.map((sub) => /* @__PURE__ */ jsxRuntime.jsxs(
381
+ "div",
382
+ {
383
+ className: "flex-1 border-l border-sand-dark px-1 py-3 text-center first:border-l-0",
384
+ children: [
385
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-heading text-lg font-bold text-primary", children: formatScore(sub.value) }),
386
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 text-xs text-text-secondary", children: sub.label })
387
+ ]
388
+ },
389
+ sub.label
390
+ )) }) : null,
391
+ hasReviews ? /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "-mx-4 flex gap-3 overflow-x-auto px-4 pb-1 [scrollbar-width:none] md:mx-0 md:px-0 [&::-webkit-scrollbar]:hidden", children: reviews.map((review, index) => /* @__PURE__ */ jsxRuntime.jsxs(
392
+ "li",
393
+ {
394
+ className: "flex w-[280px] shrink-0 flex-col rounded-2xl border border-sand-dark bg-white p-4",
395
+ children: [
396
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2 inline-flex items-center gap-2", children: [
397
+ /* @__PURE__ */ jsxRuntime.jsx(
398
+ "span",
399
+ {
400
+ className: chunkADIDI7AJ_js.cn(
401
+ "rounded-lg px-2 py-1 text-xs font-bold text-white",
402
+ scoreBadgeClass(review.score)
403
+ ),
404
+ children: formatScore(review.score)
405
+ }
406
+ ),
407
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-primary", children: review.scoreLabel })
408
+ ] }),
409
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "m-0 text-sm leading-relaxed text-primary", children: review.text }),
410
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-3.5", children: [
411
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm font-semibold text-primary", children: review.author }),
412
+ review.meta ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-text-muted", children: review.meta }) : null,
413
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1.5 flex flex-wrap items-center gap-x-2.5 gap-y-1", children: [
414
+ review.verified ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1 text-xs text-accent-dark", children: [
415
+ /* @__PURE__ */ jsxRuntime.jsx(CheckIcon2, { className: "h-3 w-3" }),
416
+ "Avis v\xE9rifi\xE9"
417
+ ] }) : null,
418
+ review.translatedFrom ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs italic text-text-muted", children: [
419
+ "Traduit de ",
420
+ review.translatedFrom
421
+ ] }) : null
422
+ ] })
423
+ ] })
424
+ ]
425
+ },
426
+ `${review.author}-${index}`
427
+ )) }) : null,
428
+ onSeeAll ? /* @__PURE__ */ jsxRuntime.jsx(
429
+ "button",
430
+ {
431
+ type: "button",
432
+ onClick: onSeeAll,
433
+ className: "mt-4 w-full rounded-full border-[1.5px] border-primary bg-transparent px-4 py-3 text-sm font-semibold text-primary transition-colors hover:bg-primary hover:text-white",
434
+ children: seeAllLabel ?? (count != null ? `Afficher les ${count.toLocaleString("fr-FR")} avis` : "Afficher tous les avis")
435
+ }
436
+ ) : null
437
+ ] })
438
+ ]
439
+ }
440
+ );
441
+ }
442
+ function MobileBookingBar({
443
+ price,
444
+ meta,
445
+ reassurance,
446
+ ctaLabel = "R\xE9server",
447
+ onReserve,
448
+ disabled = false,
449
+ className,
450
+ ...props
451
+ }) {
452
+ return /* @__PURE__ */ jsxRuntime.jsxs(
453
+ "div",
454
+ {
455
+ className: chunkADIDI7AJ_js.cn(
456
+ "sticky bottom-0 z-50 flex items-center justify-between gap-3 border-t border-sand-dark bg-white/95 px-4 pt-3 shadow-[0_-4px_20px_rgba(29,34,48,0.08)] backdrop-blur pb-[calc(env(safe-area-inset-bottom)+0.75rem)]",
457
+ className
458
+ ),
459
+ ...props,
460
+ children: [
461
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
462
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-baseline gap-1.5", children: [
463
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-heading text-xl font-bold text-primary", children: price }),
464
+ meta ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-xs text-text-muted", children: meta }) : null
465
+ ] }),
466
+ reassurance ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[11px] text-text-muted", children: reassurance }) : null
467
+ ] }),
468
+ /* @__PURE__ */ jsxRuntime.jsx(
469
+ "button",
470
+ {
471
+ type: "button",
472
+ onClick: onReserve,
473
+ disabled,
474
+ className: chunkADIDI7AJ_js.cn(
475
+ "shrink-0 rounded-full px-6 py-3 text-[15px] font-semibold text-white transition-colors",
476
+ disabled ? "cursor-not-allowed bg-text-muted" : "bg-secondary shadow-[0_4px_12px_rgba(242,124,84,0.35)] hover:bg-secondary-dark"
477
+ ),
478
+ children: ctaLabel
479
+ }
480
+ )
481
+ ]
482
+ }
483
+ );
484
+ }
485
+
486
+ Object.defineProperty(exports, "Toggle", {
487
+ enumerable: true,
488
+ get: function () { return chunkDTIYZ3TQ_js.Toggle; }
489
+ });
490
+ Object.defineProperty(exports, "Tooltip", {
491
+ enumerable: true,
492
+ get: function () { return chunkE6ZNND75_js.Tooltip; }
493
+ });
68
494
  Object.defineProperty(exports, "VerticalMarquee", {
69
495
  enumerable: true,
70
496
  get: function () { return chunkN3JU7JS7_js.VerticalMarquee; }
71
497
  });
498
+ Object.defineProperty(exports, "StatCard", {
499
+ enumerable: true,
500
+ get: function () { return chunkTT7L3ZU7_js.StatCard; }
501
+ });
502
+ Object.defineProperty(exports, "StatusBadge", {
503
+ enumerable: true,
504
+ get: function () { return chunkDFXXGKMI_js.StatusBadge; }
505
+ });
506
+ Object.defineProperty(exports, "statusBadgeVariants", {
507
+ enumerable: true,
508
+ get: function () { return chunkDFXXGKMI_js.statusBadgeVariants; }
509
+ });
72
510
  Object.defineProperty(exports, "Stepper", {
73
511
  enumerable: true,
74
512
  get: function () { return chunk3VU6TPAT_js.Stepper; }
@@ -113,13 +551,17 @@ Object.defineProperty(exports, "toastVariants", {
113
551
  enumerable: true,
114
552
  get: function () { return chunkVTELEOT7_js.toastVariants; }
115
553
  });
116
- Object.defineProperty(exports, "Toggle", {
554
+ Object.defineProperty(exports, "Rating", {
117
555
  enumerable: true,
118
- get: function () { return chunkDTIYZ3TQ_js.Toggle; }
556
+ get: function () { return chunkTZHT7NZU_js.Rating; }
119
557
  });
120
- Object.defineProperty(exports, "Tooltip", {
558
+ Object.defineProperty(exports, "RoomTypeCard", {
121
559
  enumerable: true,
122
- get: function () { return chunkE6ZNND75_js.Tooltip; }
560
+ get: function () { return chunk36JNXXGH_js.RoomTypeCard; }
561
+ });
562
+ Object.defineProperty(exports, "RoomTypeCardSkeleton", {
563
+ enumerable: true,
564
+ get: function () { return chunk36JNXXGH_js.RoomTypeCardSkeleton; }
123
565
  });
124
566
  Object.defineProperty(exports, "SearchBar", {
125
567
  enumerable: true,
@@ -165,17 +607,9 @@ Object.defineProperty(exports, "spinnerVariants", {
165
607
  enumerable: true,
166
608
  get: function () { return chunkXHRDPJTF_js.spinnerVariants; }
167
609
  });
168
- Object.defineProperty(exports, "StatCard", {
169
- enumerable: true,
170
- get: function () { return chunkTT7L3ZU7_js.StatCard; }
171
- });
172
- Object.defineProperty(exports, "StatusBadge", {
173
- enumerable: true,
174
- get: function () { return chunkDFXXGKMI_js.StatusBadge; }
175
- });
176
- Object.defineProperty(exports, "statusBadgeVariants", {
610
+ Object.defineProperty(exports, "MegaMenu", {
177
611
  enumerable: true,
178
- get: function () { return chunkDFXXGKMI_js.statusBadgeVariants; }
612
+ get: function () { return chunkHN6B4TAW_js.MegaMenu; }
179
613
  });
180
614
  Object.defineProperty(exports, "MobileMenu", {
181
615
  enumerable: true,
@@ -217,9 +651,9 @@ Object.defineProperty(exports, "RadioGroup", {
217
651
  enumerable: true,
218
652
  get: function () { return chunkGXKON34B_js.RadioGroup; }
219
653
  });
220
- Object.defineProperty(exports, "Rating", {
654
+ Object.defineProperty(exports, "HotelCard", {
221
655
  enumerable: true,
222
- get: function () { return chunkTZHT7NZU_js.Rating; }
656
+ get: function () { return chunkODUY7NXD_js.HotelCard; }
223
657
  });
224
658
  Object.defineProperty(exports, "IconBadge", {
225
659
  enumerable: true,
@@ -257,10 +691,6 @@ Object.defineProperty(exports, "LoadingOverlay", {
257
691
  enumerable: true,
258
692
  get: function () { return chunkTE4WHZ4Q_js.LoadingOverlay; }
259
693
  });
260
- Object.defineProperty(exports, "MegaMenu", {
261
- enumerable: true,
262
- get: function () { return chunkHN6B4TAW_js.MegaMenu; }
263
- });
264
694
  Object.defineProperty(exports, "EmptyState", {
265
695
  enumerable: true,
266
696
  get: function () { return chunkIEHX4DU6_js.EmptyState; }
@@ -277,6 +707,10 @@ Object.defineProperty(exports, "FilterPill", {
277
707
  enumerable: true,
278
708
  get: function () { return chunkN2Q4Z2FU_js.FilterPill; }
279
709
  });
710
+ Object.defineProperty(exports, "FloatingDock", {
711
+ enumerable: true,
712
+ get: function () { return chunkS732LTPT_js.FloatingDock; }
713
+ });
280
714
  Object.defineProperty(exports, "Footer", {
281
715
  enumerable: true,
282
716
  get: function () { return chunkC4RZBOKH_js.Footer; }
@@ -289,46 +723,42 @@ Object.defineProperty(exports, "Header", {
289
723
  enumerable: true,
290
724
  get: function () { return chunkIRKM5UF4_js.Header; }
291
725
  });
292
- Object.defineProperty(exports, "HotelCard", {
293
- enumerable: true,
294
- get: function () { return chunkODUY7NXD_js.HotelCard; }
295
- });
296
- Object.defineProperty(exports, "Checkbox", {
726
+ Object.defineProperty(exports, "Carousel", {
297
727
  enumerable: true,
298
- get: function () { return chunkIJIUUBFT_js.Checkbox; }
728
+ get: function () { return chunkP7GAKOCX_js.Carousel; }
299
729
  });
300
730
  Object.defineProperty(exports, "Counter", {
301
731
  enumerable: true,
302
- get: function () { return chunk3BPC4LNH_js.Counter; }
732
+ get: function () { return chunkT4AT3YCT_js.Counter; }
303
733
  });
304
734
  Object.defineProperty(exports, "DatePickerInput", {
305
735
  enumerable: true,
306
- get: function () { return chunkNWLJ7VQF_js.DatePickerInput; }
736
+ get: function () { return chunkAIA3NHCK_js.DatePickerInput; }
307
737
  });
308
738
  Object.defineProperty(exports, "DateRangePicker", {
309
739
  enumerable: true,
310
- get: function () { return chunkNWLJ7VQF_js.DateRangePicker; }
740
+ get: function () { return chunkAIA3NHCK_js.DateRangePicker; }
311
741
  });
312
742
  Object.defineProperty(exports, "DetailList", {
313
743
  enumerable: true,
314
- get: function () { return chunkYSJAEDMG_js.DetailList; }
315
- });
316
- Object.defineProperty(exports, "Drawer", {
317
- enumerable: true,
318
- get: function () { return chunkVWFY24XF_js.Drawer; }
744
+ get: function () { return chunkE24VNM6S_js.DetailList; }
319
745
  });
320
746
  Object.defineProperty(exports, "Divider", {
321
747
  enumerable: true,
322
748
  get: function () { return chunkXXC2YD3D_js.Divider; }
323
749
  });
324
- Object.defineProperty(exports, "DualRangeSlider", {
750
+ Object.defineProperty(exports, "Drawer", {
325
751
  enumerable: true,
326
- get: function () { return chunkTDGU5Y2P_js.DualRangeSlider; }
752
+ get: function () { return chunkVWFY24XF_js.Drawer; }
327
753
  });
328
754
  Object.defineProperty(exports, "DropdownMenu", {
329
755
  enumerable: true,
330
756
  get: function () { return chunkT5FLQQP6_js.DropdownMenu; }
331
757
  });
758
+ Object.defineProperty(exports, "DualRangeSlider", {
759
+ enumerable: true,
760
+ get: function () { return chunkTDGU5Y2P_js.DualRangeSlider; }
761
+ });
332
762
  Object.defineProperty(exports, "Badge", {
333
763
  enumerable: true,
334
764
  get: function () { return chunkZ5S7LHMY_js.Badge; }
@@ -357,6 +787,18 @@ Object.defineProperty(exports, "breadcrumbVariants", {
357
787
  enumerable: true,
358
788
  get: function () { return chunkH3JNRTAI_js.breadcrumbVariants; }
359
789
  });
790
+ Object.defineProperty(exports, "Button", {
791
+ enumerable: true,
792
+ get: function () { return chunkYZTVHCLK_js.Button; }
793
+ });
794
+ Object.defineProperty(exports, "buttonVariants", {
795
+ enumerable: true,
796
+ get: function () { return chunkYZTVHCLK_js.buttonVariants; }
797
+ });
798
+ Object.defineProperty(exports, "CardList", {
799
+ enumerable: true,
800
+ get: function () { return chunkMY6BYO5F_js.CardList; }
801
+ });
360
802
  Object.defineProperty(exports, "Card", {
361
803
  enumerable: true,
362
804
  get: function () { return chunkZAUYE2EI_js.Card; }
@@ -385,21 +827,9 @@ Object.defineProperty(exports, "cardVariants", {
385
827
  enumerable: true,
386
828
  get: function () { return chunkZAUYE2EI_js.cardVariants; }
387
829
  });
388
- Object.defineProperty(exports, "Button", {
389
- enumerable: true,
390
- get: function () { return chunkYZTVHCLK_js.Button; }
391
- });
392
- Object.defineProperty(exports, "buttonVariants", {
393
- enumerable: true,
394
- get: function () { return chunkYZTVHCLK_js.buttonVariants; }
395
- });
396
- Object.defineProperty(exports, "CardList", {
397
- enumerable: true,
398
- get: function () { return chunkMY6BYO5F_js.CardList; }
399
- });
400
- Object.defineProperty(exports, "Carousel", {
830
+ Object.defineProperty(exports, "Checkbox", {
401
831
  enumerable: true,
402
- get: function () { return chunkP7GAKOCX_js.Carousel; }
832
+ get: function () { return chunkIJIUUBFT_js.Checkbox; }
403
833
  });
404
834
  Object.defineProperty(exports, "Accordion", {
405
835
  enumerable: true,
@@ -409,6 +839,10 @@ Object.defineProperty(exports, "Alert", {
409
839
  enumerable: true,
410
840
  get: function () { return chunkWBRVUWGC_js.Alert; }
411
841
  });
842
+ Object.defineProperty(exports, "Avatar", {
843
+ enumerable: true,
844
+ get: function () { return chunkEY4ZIR3P_js.Avatar; }
845
+ });
412
846
  Object.defineProperty(exports, "Autocomplete", {
413
847
  enumerable: true,
414
848
  get: function () { return chunkNHB2TI2B_js.Autocomplete; }
@@ -417,11 +851,12 @@ Object.defineProperty(exports, "autocompleteInputVariants", {
417
851
  enumerable: true,
418
852
  get: function () { return chunkNHB2TI2B_js.autocompleteInputVariants; }
419
853
  });
420
- Object.defineProperty(exports, "Avatar", {
421
- enumerable: true,
422
- get: function () { return chunkEY4ZIR3P_js.Avatar; }
423
- });
424
854
  Object.defineProperty(exports, "cn", {
425
855
  enumerable: true,
426
856
  get: function () { return chunkADIDI7AJ_js.cn; }
427
857
  });
858
+ exports.DogFriendlyPanel = DogFriendlyPanel;
859
+ exports.MobileBookingBar = MobileBookingBar;
860
+ exports.ReviewSummary = ReviewSummary;
861
+ exports.SearchField = SearchField;
862
+ exports.searchFieldVariants = searchFieldVariants;