@dododog/ui 0.9.1 → 0.10.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.
@@ -0,0 +1,211 @@
1
+ 'use strict';
2
+
3
+ var chunkADIDI7AJ_js = require('./chunk-ADIDI7AJ.js');
4
+ var React = require('react');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ function _interopNamespace(e) {
8
+ if (e && e.__esModule) return e;
9
+ var n = Object.create(null);
10
+ if (e) {
11
+ Object.keys(e).forEach(function (k) {
12
+ if (k !== 'default') {
13
+ var d = Object.getOwnPropertyDescriptor(e, k);
14
+ Object.defineProperty(n, k, d.get ? d : {
15
+ enumerable: true,
16
+ get: function () { return e[k]; }
17
+ });
18
+ }
19
+ });
20
+ }
21
+ n.default = e;
22
+ return Object.freeze(n);
23
+ }
24
+
25
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
26
+
27
+ var DEFAULT_STEPS = [
28
+ { id: "analyse", label: "Analyse de votre recherche" },
29
+ { id: "destination", label: "Exploration de la destination" },
30
+ { id: "selection", label: "S\xE9lection des h\xE9bergements dog-friendly" },
31
+ { id: "finalisation", label: "Finalisation des r\xE9sultats" }
32
+ ];
33
+ var DEFAULT_TITLE = "Pr\xE9paration des r\xE9sultats de votre recherche";
34
+ function DogIcon({ className }) {
35
+ return /* @__PURE__ */ jsxRuntime.jsxs(
36
+ "svg",
37
+ {
38
+ xmlns: "http://www.w3.org/2000/svg",
39
+ viewBox: "0 0 24 24",
40
+ fill: "none",
41
+ stroke: "currentColor",
42
+ strokeWidth: "2",
43
+ strokeLinecap: "round",
44
+ strokeLinejoin: "round",
45
+ className,
46
+ "aria-hidden": "true",
47
+ children: [
48
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M11.25 16.25h1.5L12 17z" }),
49
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 14v.5" }),
50
+ /* @__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.444a11.702 11.702 0 0 0-.493-3.309" }),
51
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 14v.5" }),
52
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8.5 8.5c-.384 1.05-1.083 2.028-2.344 2.5-1.931.722-3.576-.297-3.656-1-.113-.994 1.177-6.53 4-7 1.923-.321 3.651.845 3.651 2.235A7.497 7.497 0 0 1 14 5.277c0-1.39 1.844-2.598 3.767-2.277 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" })
53
+ ]
54
+ }
55
+ );
56
+ }
57
+ function CheckIcon({ className }) {
58
+ return /* @__PURE__ */ jsxRuntime.jsx(
59
+ "svg",
60
+ {
61
+ xmlns: "http://www.w3.org/2000/svg",
62
+ viewBox: "0 0 24 24",
63
+ fill: "none",
64
+ stroke: "currentColor",
65
+ strokeWidth: "3",
66
+ strokeLinecap: "round",
67
+ strokeLinejoin: "round",
68
+ className,
69
+ "aria-hidden": "true",
70
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 6 9 17l-5-5" })
71
+ }
72
+ );
73
+ }
74
+ var SearchLoadingChecklist = React__namespace.forwardRef(
75
+ ({
76
+ active = true,
77
+ title = DEFAULT_TITLE,
78
+ steps = DEFAULT_STEPS,
79
+ stepDurationMs = 750,
80
+ variant = "fixed",
81
+ className,
82
+ ...props
83
+ }, ref) => {
84
+ const [completedThrough, setCompletedThrough] = React__namespace.useState(0);
85
+ const lastStepIndex = Math.max(0, steps.length - 1);
86
+ React__namespace.useEffect(() => {
87
+ if (!active) {
88
+ setCompletedThrough(0);
89
+ return;
90
+ }
91
+ if (completedThrough >= lastStepIndex) {
92
+ return;
93
+ }
94
+ const timer = setTimeout(() => {
95
+ setCompletedThrough(
96
+ (current) => Math.min(current + 1, lastStepIndex)
97
+ );
98
+ }, stepDurationMs);
99
+ return () => {
100
+ clearTimeout(timer);
101
+ };
102
+ }, [active, completedThrough, lastStepIndex, stepDurationMs]);
103
+ if (!active) return null;
104
+ return /* @__PURE__ */ jsxRuntime.jsx(
105
+ "div",
106
+ {
107
+ ref,
108
+ role: "status",
109
+ "aria-live": "polite",
110
+ "aria-busy": "true",
111
+ className: chunkADIDI7AJ_js.cn(
112
+ variant === "fixed" ? "fixed" : "absolute",
113
+ "inset-0 z-50 flex items-center justify-center bg-white/80 backdrop-blur-sm px-4",
114
+ className
115
+ ),
116
+ ...props,
117
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full max-w-md rounded-2xl border border-sand-dark bg-white p-6 shadow-xl sm:p-8", children: [
118
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative flex h-16 w-16 items-center justify-center", children: [
119
+ /* @__PURE__ */ jsxRuntime.jsx(
120
+ "span",
121
+ {
122
+ className: "absolute inset-0 animate-spin rounded-full border-2 border-secondary/20 border-t-secondary",
123
+ "aria-hidden": "true"
124
+ }
125
+ ),
126
+ /* @__PURE__ */ jsxRuntime.jsx(DogIcon, { className: "h-8 w-8 animate-pulse text-secondary" })
127
+ ] }) }),
128
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "mt-5 text-center text-lg font-semibold text-text-primary", children: title }),
129
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "mt-6 space-y-3", children: steps.map((step, index) => {
130
+ const isCompleted = index < completedThrough;
131
+ const isCurrent = index === completedThrough;
132
+ return /* @__PURE__ */ jsxRuntime.jsxs(
133
+ "li",
134
+ {
135
+ className: "flex items-center gap-3",
136
+ "aria-current": isCurrent ? "step" : void 0,
137
+ children: [
138
+ /* @__PURE__ */ jsxRuntime.jsx(
139
+ "span",
140
+ {
141
+ className: chunkADIDI7AJ_js.cn(
142
+ "flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full border transition-colors duration-300",
143
+ isCompleted && "border-secondary bg-secondary text-white",
144
+ isCurrent && "border-secondary bg-secondary/10 text-secondary",
145
+ !isCompleted && !isCurrent && "border-gray-300 bg-white text-gray-300"
146
+ ),
147
+ children: isCompleted ? /* @__PURE__ */ jsxRuntime.jsx(CheckIcon, { className: "h-3.5 w-3.5" }) : isCurrent ? /* @__PURE__ */ jsxRuntime.jsxs(
148
+ "svg",
149
+ {
150
+ className: "h-3.5 w-3.5 animate-spin",
151
+ xmlns: "http://www.w3.org/2000/svg",
152
+ fill: "none",
153
+ viewBox: "0 0 24 24",
154
+ "aria-hidden": "true",
155
+ children: [
156
+ /* @__PURE__ */ jsxRuntime.jsx(
157
+ "circle",
158
+ {
159
+ className: "opacity-25",
160
+ cx: "12",
161
+ cy: "12",
162
+ r: "10",
163
+ stroke: "currentColor",
164
+ strokeWidth: "4"
165
+ }
166
+ ),
167
+ /* @__PURE__ */ jsxRuntime.jsx(
168
+ "path",
169
+ {
170
+ className: "opacity-75",
171
+ fill: "currentColor",
172
+ d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"
173
+ }
174
+ )
175
+ ]
176
+ }
177
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
178
+ "span",
179
+ {
180
+ className: "h-1.5 w-1.5 rounded-full bg-current",
181
+ "aria-hidden": "true"
182
+ }
183
+ )
184
+ }
185
+ ),
186
+ /* @__PURE__ */ jsxRuntime.jsx(
187
+ "span",
188
+ {
189
+ className: chunkADIDI7AJ_js.cn(
190
+ "text-sm transition-colors duration-300",
191
+ isCompleted && "font-medium text-text-primary",
192
+ isCurrent && "font-medium text-text-primary",
193
+ !isCompleted && !isCurrent && "text-text-secondary"
194
+ ),
195
+ children: step.label
196
+ }
197
+ )
198
+ ]
199
+ },
200
+ step.id
201
+ );
202
+ }) }),
203
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-6 text-center text-xs text-text-secondary", children: "Cela peut prendre quelques instants, nous v\xE9rifions les meilleures disponibilit\xE9s pour vous et votre chien." })
204
+ ] })
205
+ }
206
+ );
207
+ }
208
+ );
209
+ SearchLoadingChecklist.displayName = "SearchLoadingChecklist";
210
+
211
+ exports.SearchLoadingChecklist = SearchLoadingChecklist;
@@ -57,6 +57,12 @@ function GalleryIcon({ className }) {
57
57
  /* @__PURE__ */ jsx("path", { d: "m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21" })
58
58
  ] });
59
59
  }
60
+ function CardIcon({ className }) {
61
+ return /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className, "aria-hidden": "true", children: [
62
+ /* @__PURE__ */ jsx("rect", { width: "20", height: "14", x: "2", y: "5", rx: "2" }),
63
+ /* @__PURE__ */ jsx("path", { d: "M2 10h20" })
64
+ ] });
65
+ }
60
66
  function formatPrice(price) {
61
67
  return new Intl.NumberFormat("fr-FR", {
62
68
  style: "currency",
@@ -94,6 +100,8 @@ function RateRow({
94
100
  withTopBorder
95
101
  }) {
96
102
  const showReserveCta = selected && !!onReserve;
103
+ const [showDetails, setShowDetails] = React.useState(false);
104
+ const hasDetails = (rate.details?.length ?? 0) > 0 || (rate.amenities?.length ?? 0) > 0;
97
105
  return /* @__PURE__ */ jsxs(
98
106
  "div",
99
107
  {
@@ -104,10 +112,66 @@ function RateRow({
104
112
  children: [
105
113
  /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
106
114
  rate.mealLabel && /* @__PURE__ */ jsx("div", { className: "text-[13px] font-medium text-primary", children: rate.mealLabel }),
107
- /* @__PURE__ */ jsx("div", { className: "mt-0.5", children: /* @__PURE__ */ jsx(CancellationChip, { cancellation: rate.cancellation }) }),
115
+ (rate.bedding || rate.paymentLabel) && /* @__PURE__ */ jsxs("div", { className: "mt-1 flex flex-wrap items-center gap-x-3 gap-y-1", children: [
116
+ rate.bedding && /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5 text-xs text-text-secondary", children: [
117
+ /* @__PURE__ */ jsx(BedIcon, { className: "w-3.5 h-3.5 flex-shrink-0" }),
118
+ rate.bedding
119
+ ] }),
120
+ rate.paymentLabel && /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 rounded-full bg-amber-50 px-2 py-0.5 text-[11px] font-medium text-amber-700", children: [
121
+ /* @__PURE__ */ jsx(CardIcon, { className: "w-3 h-3 flex-shrink-0" }),
122
+ rate.paymentLabel
123
+ ] })
124
+ ] }),
125
+ /* @__PURE__ */ jsx("div", { className: "mt-1", children: /* @__PURE__ */ jsx(CancellationChip, { cancellation: rate.cancellation }) }),
108
126
  rate.dogFeeLabel && /* @__PURE__ */ jsxs("div", { className: "mt-1 inline-flex items-start gap-1.5 text-xs font-medium text-secondary", children: [
109
127
  /* @__PURE__ */ jsx(DogIcon, { className: "w-3.5 h-3.5 mt-[1px] flex-shrink-0" }),
110
128
  /* @__PURE__ */ jsx("span", { children: rate.dogFeeLabel })
129
+ ] }),
130
+ hasDetails && /* @__PURE__ */ jsxs(Fragment, { children: [
131
+ /* @__PURE__ */ jsx("div", { className: "mt-1.5", children: /* @__PURE__ */ jsxs(
132
+ "button",
133
+ {
134
+ type: "button",
135
+ onClick: () => setShowDetails((v) => !v),
136
+ "aria-expanded": showDetails,
137
+ className: "inline-flex items-center gap-1 text-[12px] font-medium text-secondary",
138
+ children: [
139
+ /* @__PURE__ */ jsx(
140
+ ChevronDownIcon,
141
+ {
142
+ className: cn(
143
+ "w-3.5 h-3.5 transition-transform",
144
+ showDetails && "rotate-180"
145
+ )
146
+ }
147
+ ),
148
+ showDetails ? "Masquer le d\xE9tail" : "Voir le d\xE9tail"
149
+ ]
150
+ }
151
+ ) }),
152
+ showDetails && /* @__PURE__ */ jsxs("div", { className: "mt-2 rounded-lg bg-sand-light px-3 py-2.5", children: [
153
+ rate.details && rate.details.length > 0 && /* @__PURE__ */ jsx("dl", { className: "space-y-1.5", children: rate.details.map((d, i) => /* @__PURE__ */ jsxs("div", { className: "text-xs leading-snug", children: [
154
+ /* @__PURE__ */ jsx("dt", { className: "font-medium text-text-secondary", children: d.label }),
155
+ /* @__PURE__ */ jsx("dd", { className: "text-text-muted", children: d.value })
156
+ ] }, i)) }),
157
+ rate.amenities && rate.amenities.length > 0 && /* @__PURE__ */ jsx(
158
+ "div",
159
+ {
160
+ className: cn(
161
+ "flex flex-wrap gap-1.5",
162
+ rate.details && rate.details.length > 0 && "mt-2.5"
163
+ ),
164
+ children: rate.amenities.map((a, i) => /* @__PURE__ */ jsx(
165
+ "span",
166
+ {
167
+ className: "rounded-full bg-white px-2 py-1 text-[11px] text-text-muted",
168
+ children: a
169
+ },
170
+ i
171
+ ))
172
+ }
173
+ )
174
+ ] })
111
175
  ] })
112
176
  ] }),
113
177
  /* @__PURE__ */ jsxs("div", { className: "mt-2.5 flex items-end justify-between gap-3", children: [
@@ -79,6 +79,12 @@ function GalleryIcon({ className }) {
79
79
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21" })
80
80
  ] });
81
81
  }
82
+ function CardIcon({ className }) {
83
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className, "aria-hidden": "true", children: [
84
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "20", height: "14", x: "2", y: "5", rx: "2" }),
85
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 10h20" })
86
+ ] });
87
+ }
82
88
  function formatPrice(price) {
83
89
  return new Intl.NumberFormat("fr-FR", {
84
90
  style: "currency",
@@ -116,6 +122,8 @@ function RateRow({
116
122
  withTopBorder
117
123
  }) {
118
124
  const showReserveCta = selected && !!onReserve;
125
+ const [showDetails, setShowDetails] = React__namespace.useState(false);
126
+ const hasDetails = (rate.details?.length ?? 0) > 0 || (rate.amenities?.length ?? 0) > 0;
119
127
  return /* @__PURE__ */ jsxRuntime.jsxs(
120
128
  "div",
121
129
  {
@@ -126,10 +134,66 @@ function RateRow({
126
134
  children: [
127
135
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
128
136
  rate.mealLabel && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[13px] font-medium text-primary", children: rate.mealLabel }),
129
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(CancellationChip, { cancellation: rate.cancellation }) }),
137
+ (rate.bedding || rate.paymentLabel) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1 flex flex-wrap items-center gap-x-3 gap-y-1", children: [
138
+ rate.bedding && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1.5 text-xs text-text-secondary", children: [
139
+ /* @__PURE__ */ jsxRuntime.jsx(BedIcon, { className: "w-3.5 h-3.5 flex-shrink-0" }),
140
+ rate.bedding
141
+ ] }),
142
+ rate.paymentLabel && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1 rounded-full bg-amber-50 px-2 py-0.5 text-[11px] font-medium text-amber-700", children: [
143
+ /* @__PURE__ */ jsxRuntime.jsx(CardIcon, { className: "w-3 h-3 flex-shrink-0" }),
144
+ rate.paymentLabel
145
+ ] })
146
+ ] }),
147
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1", children: /* @__PURE__ */ jsxRuntime.jsx(CancellationChip, { cancellation: rate.cancellation }) }),
130
148
  rate.dogFeeLabel && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1 inline-flex items-start gap-1.5 text-xs font-medium text-secondary", children: [
131
149
  /* @__PURE__ */ jsxRuntime.jsx(DogIcon, { className: "w-3.5 h-3.5 mt-[1px] flex-shrink-0" }),
132
150
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: rate.dogFeeLabel })
151
+ ] }),
152
+ hasDetails && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
153
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1.5", children: /* @__PURE__ */ jsxRuntime.jsxs(
154
+ "button",
155
+ {
156
+ type: "button",
157
+ onClick: () => setShowDetails((v) => !v),
158
+ "aria-expanded": showDetails,
159
+ className: "inline-flex items-center gap-1 text-[12px] font-medium text-secondary",
160
+ children: [
161
+ /* @__PURE__ */ jsxRuntime.jsx(
162
+ ChevronDownIcon,
163
+ {
164
+ className: chunkADIDI7AJ_js.cn(
165
+ "w-3.5 h-3.5 transition-transform",
166
+ showDetails && "rotate-180"
167
+ )
168
+ }
169
+ ),
170
+ showDetails ? "Masquer le d\xE9tail" : "Voir le d\xE9tail"
171
+ ]
172
+ }
173
+ ) }),
174
+ showDetails && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 rounded-lg bg-sand-light px-3 py-2.5", children: [
175
+ rate.details && rate.details.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("dl", { className: "space-y-1.5", children: rate.details.map((d, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs leading-snug", children: [
176
+ /* @__PURE__ */ jsxRuntime.jsx("dt", { className: "font-medium text-text-secondary", children: d.label }),
177
+ /* @__PURE__ */ jsxRuntime.jsx("dd", { className: "text-text-muted", children: d.value })
178
+ ] }, i)) }),
179
+ rate.amenities && rate.amenities.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
180
+ "div",
181
+ {
182
+ className: chunkADIDI7AJ_js.cn(
183
+ "flex flex-wrap gap-1.5",
184
+ rate.details && rate.details.length > 0 && "mt-2.5"
185
+ ),
186
+ children: rate.amenities.map((a, i) => /* @__PURE__ */ jsxRuntime.jsx(
187
+ "span",
188
+ {
189
+ className: "rounded-full bg-white px-2 py-1 text-[11px] text-text-muted",
190
+ children: a
191
+ },
192
+ i
193
+ ))
194
+ }
195
+ )
196
+ ] })
133
197
  ] })
134
198
  ] }),
135
199
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2.5 flex items-end justify-between gap-3", children: [
@@ -0,0 +1,189 @@
1
+ import { cn } from './chunk-IMKLN273.mjs';
2
+ import * as React from 'react';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+
5
+ var DEFAULT_STEPS = [
6
+ { id: "analyse", label: "Analyse de votre recherche" },
7
+ { id: "destination", label: "Exploration de la destination" },
8
+ { id: "selection", label: "S\xE9lection des h\xE9bergements dog-friendly" },
9
+ { id: "finalisation", label: "Finalisation des r\xE9sultats" }
10
+ ];
11
+ var DEFAULT_TITLE = "Pr\xE9paration des r\xE9sultats de votre recherche";
12
+ function DogIcon({ className }) {
13
+ return /* @__PURE__ */ jsxs(
14
+ "svg",
15
+ {
16
+ xmlns: "http://www.w3.org/2000/svg",
17
+ viewBox: "0 0 24 24",
18
+ fill: "none",
19
+ stroke: "currentColor",
20
+ strokeWidth: "2",
21
+ strokeLinecap: "round",
22
+ strokeLinejoin: "round",
23
+ className,
24
+ "aria-hidden": "true",
25
+ children: [
26
+ /* @__PURE__ */ jsx("path", { d: "M11.25 16.25h1.5L12 17z" }),
27
+ /* @__PURE__ */ jsx("path", { d: "M16 14v.5" }),
28
+ /* @__PURE__ */ 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.444a11.702 11.702 0 0 0-.493-3.309" }),
29
+ /* @__PURE__ */ jsx("path", { d: "M8 14v.5" }),
30
+ /* @__PURE__ */ jsx("path", { d: "M8.5 8.5c-.384 1.05-1.083 2.028-2.344 2.5-1.931.722-3.576-.297-3.656-1-.113-.994 1.177-6.53 4-7 1.923-.321 3.651.845 3.651 2.235A7.497 7.497 0 0 1 14 5.277c0-1.39 1.844-2.598 3.767-2.277 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" })
31
+ ]
32
+ }
33
+ );
34
+ }
35
+ function CheckIcon({ className }) {
36
+ return /* @__PURE__ */ jsx(
37
+ "svg",
38
+ {
39
+ xmlns: "http://www.w3.org/2000/svg",
40
+ viewBox: "0 0 24 24",
41
+ fill: "none",
42
+ stroke: "currentColor",
43
+ strokeWidth: "3",
44
+ strokeLinecap: "round",
45
+ strokeLinejoin: "round",
46
+ className,
47
+ "aria-hidden": "true",
48
+ children: /* @__PURE__ */ jsx("path", { d: "M20 6 9 17l-5-5" })
49
+ }
50
+ );
51
+ }
52
+ var SearchLoadingChecklist = React.forwardRef(
53
+ ({
54
+ active = true,
55
+ title = DEFAULT_TITLE,
56
+ steps = DEFAULT_STEPS,
57
+ stepDurationMs = 750,
58
+ variant = "fixed",
59
+ className,
60
+ ...props
61
+ }, ref) => {
62
+ const [completedThrough, setCompletedThrough] = React.useState(0);
63
+ const lastStepIndex = Math.max(0, steps.length - 1);
64
+ React.useEffect(() => {
65
+ if (!active) {
66
+ setCompletedThrough(0);
67
+ return;
68
+ }
69
+ if (completedThrough >= lastStepIndex) {
70
+ return;
71
+ }
72
+ const timer = setTimeout(() => {
73
+ setCompletedThrough(
74
+ (current) => Math.min(current + 1, lastStepIndex)
75
+ );
76
+ }, stepDurationMs);
77
+ return () => {
78
+ clearTimeout(timer);
79
+ };
80
+ }, [active, completedThrough, lastStepIndex, stepDurationMs]);
81
+ if (!active) return null;
82
+ return /* @__PURE__ */ jsx(
83
+ "div",
84
+ {
85
+ ref,
86
+ role: "status",
87
+ "aria-live": "polite",
88
+ "aria-busy": "true",
89
+ className: cn(
90
+ variant === "fixed" ? "fixed" : "absolute",
91
+ "inset-0 z-50 flex items-center justify-center bg-white/80 backdrop-blur-sm px-4",
92
+ className
93
+ ),
94
+ ...props,
95
+ children: /* @__PURE__ */ jsxs("div", { className: "w-full max-w-md rounded-2xl border border-sand-dark bg-white p-6 shadow-xl sm:p-8", children: [
96
+ /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsxs("span", { className: "relative flex h-16 w-16 items-center justify-center", children: [
97
+ /* @__PURE__ */ jsx(
98
+ "span",
99
+ {
100
+ className: "absolute inset-0 animate-spin rounded-full border-2 border-secondary/20 border-t-secondary",
101
+ "aria-hidden": "true"
102
+ }
103
+ ),
104
+ /* @__PURE__ */ jsx(DogIcon, { className: "h-8 w-8 animate-pulse text-secondary" })
105
+ ] }) }),
106
+ /* @__PURE__ */ jsx("h2", { className: "mt-5 text-center text-lg font-semibold text-text-primary", children: title }),
107
+ /* @__PURE__ */ jsx("ul", { className: "mt-6 space-y-3", children: steps.map((step, index) => {
108
+ const isCompleted = index < completedThrough;
109
+ const isCurrent = index === completedThrough;
110
+ return /* @__PURE__ */ jsxs(
111
+ "li",
112
+ {
113
+ className: "flex items-center gap-3",
114
+ "aria-current": isCurrent ? "step" : void 0,
115
+ children: [
116
+ /* @__PURE__ */ jsx(
117
+ "span",
118
+ {
119
+ className: cn(
120
+ "flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full border transition-colors duration-300",
121
+ isCompleted && "border-secondary bg-secondary text-white",
122
+ isCurrent && "border-secondary bg-secondary/10 text-secondary",
123
+ !isCompleted && !isCurrent && "border-gray-300 bg-white text-gray-300"
124
+ ),
125
+ children: isCompleted ? /* @__PURE__ */ jsx(CheckIcon, { className: "h-3.5 w-3.5" }) : isCurrent ? /* @__PURE__ */ jsxs(
126
+ "svg",
127
+ {
128
+ className: "h-3.5 w-3.5 animate-spin",
129
+ xmlns: "http://www.w3.org/2000/svg",
130
+ fill: "none",
131
+ viewBox: "0 0 24 24",
132
+ "aria-hidden": "true",
133
+ children: [
134
+ /* @__PURE__ */ jsx(
135
+ "circle",
136
+ {
137
+ className: "opacity-25",
138
+ cx: "12",
139
+ cy: "12",
140
+ r: "10",
141
+ stroke: "currentColor",
142
+ strokeWidth: "4"
143
+ }
144
+ ),
145
+ /* @__PURE__ */ jsx(
146
+ "path",
147
+ {
148
+ className: "opacity-75",
149
+ fill: "currentColor",
150
+ d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"
151
+ }
152
+ )
153
+ ]
154
+ }
155
+ ) : /* @__PURE__ */ jsx(
156
+ "span",
157
+ {
158
+ className: "h-1.5 w-1.5 rounded-full bg-current",
159
+ "aria-hidden": "true"
160
+ }
161
+ )
162
+ }
163
+ ),
164
+ /* @__PURE__ */ jsx(
165
+ "span",
166
+ {
167
+ className: cn(
168
+ "text-sm transition-colors duration-300",
169
+ isCompleted && "font-medium text-text-primary",
170
+ isCurrent && "font-medium text-text-primary",
171
+ !isCompleted && !isCurrent && "text-text-secondary"
172
+ ),
173
+ children: step.label
174
+ }
175
+ )
176
+ ]
177
+ },
178
+ step.id
179
+ );
180
+ }) }),
181
+ /* @__PURE__ */ jsx("p", { className: "mt-6 text-center text-xs text-text-secondary", children: "Cela peut prendre quelques instants, nous v\xE9rifions les meilleures disponibilit\xE9s pour vous et votre chien." })
182
+ ] })
183
+ }
184
+ );
185
+ }
186
+ );
187
+ SearchLoadingChecklist.displayName = "SearchLoadingChecklist";
188
+
189
+ export { SearchLoadingChecklist };
@@ -6,6 +6,11 @@ interface RoomRateCancellation {
6
6
  /** Texte explicite, ex: "Annulation gratuite avant le 10 août" ou "Non remboursable" */
7
7
  label: string;
8
8
  }
9
+ /** Ligne d'information affichée dans le panneau déplié « Voir le détail ». */
10
+ interface RoomRateDetail {
11
+ label: string;
12
+ value: string;
13
+ }
9
14
  interface RoomRate {
10
15
  id: string;
11
16
  /** ex: "Sans petit-déjeuner", "Petit-déjeuner inclus" */
@@ -21,6 +26,25 @@ interface RoomRate {
21
26
  totalLabel?: string;
22
27
  /** Frais chien explicite, ex: "Chien inclus : +16 €" */
23
28
  dogFeeLabel?: string;
29
+ /**
30
+ * Literie de CETTE formule, ex: "1 grand lit double", "2 lits simples".
31
+ * Principal différenciateur entre deux formules d'un même type de chambre —
32
+ * affiché en clair sur la ligne compacte.
33
+ */
34
+ bedding?: string;
35
+ /**
36
+ * Mode de paiement, ex: "À régler sur place". Affiché en petit encart
37
+ * quand il distingue la formule (souvent ce qui explique un écart de prix).
38
+ */
39
+ paymentLabel?: string;
40
+ /** Équipements propres à la formule, affichés dans le panneau déplié. */
41
+ amenities?: string[];
42
+ /**
43
+ * Détails additionnels (annulation précise, salle de bain, paiement…) révélés
44
+ * au clic sur « Voir le détail ». Quand non vide, le bouton apparaît et borne
45
+ * la hauteur de la carte tant que le voyageur ne déplie pas.
46
+ */
47
+ details?: RoomRateDetail[];
24
48
  }
25
49
  interface RoomTypeData {
26
50
  name: string;
@@ -99,4 +123,4 @@ interface RoomTypeCardSkeletonProps extends React.HTMLAttributes<HTMLDivElement>
99
123
  */
100
124
  declare const RoomTypeCardSkeleton: React.ForwardRefExoticComponent<RoomTypeCardSkeletonProps & React.RefAttributes<HTMLDivElement>>;
101
125
 
102
- export { type RoomRate, type RoomRateCancellation, type RoomRateCancellationKind, RoomTypeCard, type RoomTypeCardProps, RoomTypeCardSkeleton, type RoomTypeCardSkeletonProps, type RoomTypeData };
126
+ export { type RoomRate, type RoomRateCancellation, type RoomRateCancellationKind, type RoomRateDetail, RoomTypeCard, type RoomTypeCardProps, RoomTypeCardSkeleton, type RoomTypeCardSkeletonProps, type RoomTypeData };
@@ -6,6 +6,11 @@ interface RoomRateCancellation {
6
6
  /** Texte explicite, ex: "Annulation gratuite avant le 10 août" ou "Non remboursable" */
7
7
  label: string;
8
8
  }
9
+ /** Ligne d'information affichée dans le panneau déplié « Voir le détail ». */
10
+ interface RoomRateDetail {
11
+ label: string;
12
+ value: string;
13
+ }
9
14
  interface RoomRate {
10
15
  id: string;
11
16
  /** ex: "Sans petit-déjeuner", "Petit-déjeuner inclus" */
@@ -21,6 +26,25 @@ interface RoomRate {
21
26
  totalLabel?: string;
22
27
  /** Frais chien explicite, ex: "Chien inclus : +16 €" */
23
28
  dogFeeLabel?: string;
29
+ /**
30
+ * Literie de CETTE formule, ex: "1 grand lit double", "2 lits simples".
31
+ * Principal différenciateur entre deux formules d'un même type de chambre —
32
+ * affiché en clair sur la ligne compacte.
33
+ */
34
+ bedding?: string;
35
+ /**
36
+ * Mode de paiement, ex: "À régler sur place". Affiché en petit encart
37
+ * quand il distingue la formule (souvent ce qui explique un écart de prix).
38
+ */
39
+ paymentLabel?: string;
40
+ /** Équipements propres à la formule, affichés dans le panneau déplié. */
41
+ amenities?: string[];
42
+ /**
43
+ * Détails additionnels (annulation précise, salle de bain, paiement…) révélés
44
+ * au clic sur « Voir le détail ». Quand non vide, le bouton apparaît et borne
45
+ * la hauteur de la carte tant que le voyageur ne déplie pas.
46
+ */
47
+ details?: RoomRateDetail[];
24
48
  }
25
49
  interface RoomTypeData {
26
50
  name: string;
@@ -99,4 +123,4 @@ interface RoomTypeCardSkeletonProps extends React.HTMLAttributes<HTMLDivElement>
99
123
  */
100
124
  declare const RoomTypeCardSkeleton: React.ForwardRefExoticComponent<RoomTypeCardSkeletonProps & React.RefAttributes<HTMLDivElement>>;
101
125
 
102
- export { type RoomRate, type RoomRateCancellation, type RoomRateCancellationKind, RoomTypeCard, type RoomTypeCardProps, RoomTypeCardSkeleton, type RoomTypeCardSkeletonProps, type RoomTypeData };
126
+ export { type RoomRate, type RoomRateCancellation, type RoomRateCancellationKind, type RoomRateDetail, RoomTypeCard, type RoomTypeCardProps, RoomTypeCardSkeleton, type RoomTypeCardSkeletonProps, type RoomTypeData };
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk3JM2X4I2_js = require('../../chunk-3JM2X4I2.js');
3
+ var chunkKFQILIZO_js = require('../../chunk-KFQILIZO.js');
4
4
  require('../../chunk-NCU5PY34.js');
5
5
  require('../../chunk-ADIDI7AJ.js');
6
6
 
@@ -8,9 +8,9 @@ require('../../chunk-ADIDI7AJ.js');
8
8
 
9
9
  Object.defineProperty(exports, "RoomTypeCard", {
10
10
  enumerable: true,
11
- get: function () { return chunk3JM2X4I2_js.RoomTypeCard; }
11
+ get: function () { return chunkKFQILIZO_js.RoomTypeCard; }
12
12
  });
13
13
  Object.defineProperty(exports, "RoomTypeCardSkeleton", {
14
14
  enumerable: true,
15
- get: function () { return chunk3JM2X4I2_js.RoomTypeCardSkeleton; }
15
+ get: function () { return chunkKFQILIZO_js.RoomTypeCardSkeleton; }
16
16
  });
@@ -1,3 +1,3 @@
1
- export { RoomTypeCard, RoomTypeCardSkeleton } from '../../chunk-BFGRWOQM.mjs';
1
+ export { RoomTypeCard, RoomTypeCardSkeleton } from '../../chunk-IGBEBAPY.mjs';
2
2
  import '../../chunk-PAHSQMXV.mjs';
3
3
  import '../../chunk-IMKLN273.mjs';
@@ -0,0 +1,37 @@
1
+ import * as React from 'react';
2
+
3
+ interface SearchLoadingStep {
4
+ /** Identifiant stable de l'étape */
5
+ id: string;
6
+ /** Libellé affiché à l'utilisateur */
7
+ label: string;
8
+ }
9
+ interface SearchLoadingChecklistProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
10
+ /**
11
+ * Indique si la recherche réelle est en cours. Quand `false`, l'overlay
12
+ * disparaît immédiatement, même si toutes les étapes ne sont pas cochées.
13
+ * Défaut : `true`.
14
+ */
15
+ active?: boolean;
16
+ /** Titre rassurant affiché au-dessus de la check-list. */
17
+ title?: string;
18
+ /**
19
+ * Étapes affichées. Par défaut, les 4 étapes standard de la recherche
20
+ * dog-friendly.
21
+ */
22
+ steps?: SearchLoadingStep[];
23
+ /**
24
+ * Durée cosmétique (ms) de chaque étape avant de se cocher. Purement
25
+ * visuel : n'a aucun effet sur la fin réelle du chargement. Défaut : 750.
26
+ */
27
+ stepDurationMs?: number;
28
+ /**
29
+ * Mise en page de l'overlay :
30
+ * - `fixed` : plein écran (position fixe) — défaut.
31
+ * - `absolute` : rempli le conteneur positionné parent.
32
+ */
33
+ variant?: "fixed" | "absolute";
34
+ }
35
+ declare const SearchLoadingChecklist: React.ForwardRefExoticComponent<SearchLoadingChecklistProps & React.RefAttributes<HTMLDivElement>>;
36
+
37
+ export { SearchLoadingChecklist, type SearchLoadingChecklistProps, type SearchLoadingStep };
@@ -0,0 +1,37 @@
1
+ import * as React from 'react';
2
+
3
+ interface SearchLoadingStep {
4
+ /** Identifiant stable de l'étape */
5
+ id: string;
6
+ /** Libellé affiché à l'utilisateur */
7
+ label: string;
8
+ }
9
+ interface SearchLoadingChecklistProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
10
+ /**
11
+ * Indique si la recherche réelle est en cours. Quand `false`, l'overlay
12
+ * disparaît immédiatement, même si toutes les étapes ne sont pas cochées.
13
+ * Défaut : `true`.
14
+ */
15
+ active?: boolean;
16
+ /** Titre rassurant affiché au-dessus de la check-list. */
17
+ title?: string;
18
+ /**
19
+ * Étapes affichées. Par défaut, les 4 étapes standard de la recherche
20
+ * dog-friendly.
21
+ */
22
+ steps?: SearchLoadingStep[];
23
+ /**
24
+ * Durée cosmétique (ms) de chaque étape avant de se cocher. Purement
25
+ * visuel : n'a aucun effet sur la fin réelle du chargement. Défaut : 750.
26
+ */
27
+ stepDurationMs?: number;
28
+ /**
29
+ * Mise en page de l'overlay :
30
+ * - `fixed` : plein écran (position fixe) — défaut.
31
+ * - `absolute` : rempli le conteneur positionné parent.
32
+ */
33
+ variant?: "fixed" | "absolute";
34
+ }
35
+ declare const SearchLoadingChecklist: React.ForwardRefExoticComponent<SearchLoadingChecklistProps & React.RefAttributes<HTMLDivElement>>;
36
+
37
+ export { SearchLoadingChecklist, type SearchLoadingChecklistProps, type SearchLoadingStep };
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ var chunk6KW7ZSKR_js = require('../../chunk-6KW7ZSKR.js');
4
+ require('../../chunk-ADIDI7AJ.js');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "SearchLoadingChecklist", {
9
+ enumerable: true,
10
+ get: function () { return chunk6KW7ZSKR_js.SearchLoadingChecklist; }
11
+ });
@@ -0,0 +1,2 @@
1
+ export { SearchLoadingChecklist } from '../../chunk-SRYZ4N7T.mjs';
2
+ import '../../chunk-IMKLN273.mjs';
package/dist/index.d.mts CHANGED
@@ -60,11 +60,12 @@ export { IconBadge, IconBadgeProps, iconBadgeVariants } from './components/IconB
60
60
  export { PriceDisplay, PriceDisplayProps } from './components/PriceDisplay/index.mjs';
61
61
  export { DetailItem, DetailList, DetailListProps } from './components/DetailList/index.mjs';
62
62
  export { LoadingOverlay, LoadingOverlayProps } from './components/LoadingOverlay/index.mjs';
63
+ export { SearchLoadingChecklist, SearchLoadingChecklistProps, SearchLoadingStep } from './components/SearchLoadingChecklist/index.mjs';
63
64
  export { Switch, SwitchProps, switchThumbVariants, switchTrackVariants } from './components/Switch/index.mjs';
64
65
  export { DualRangeSlider, DualRangeSliderProps } from './components/DualRangeSlider/index.mjs';
65
66
  export { CardList, CardListProps } from './components/CardList/index.mjs';
66
67
  export { FilterAccordion, FilterAccordionItemData, FilterAccordionProps } from './components/FilterAccordion/index.mjs';
67
- export { RoomRate, RoomRateCancellation, RoomRateCancellationKind, RoomTypeCard, RoomTypeCardProps, RoomTypeCardSkeleton, RoomTypeCardSkeletonProps, RoomTypeData } from './components/RoomTypeCard/index.mjs';
68
+ export { RoomRate, RoomRateCancellation, RoomRateCancellationKind, RoomRateDetail, RoomTypeCard, RoomTypeCardProps, RoomTypeCardSkeleton, RoomTypeCardSkeletonProps, RoomTypeData } from './components/RoomTypeCard/index.mjs';
68
69
  import * as react_jsx_runtime from 'react/jsx-runtime';
69
70
  export { SignInCallout, SignInCalloutProps, signInCalloutVariants } from './components/SignInCallout/index.mjs';
70
71
  export { cn } from './utils/index.mjs';
package/dist/index.d.ts CHANGED
@@ -60,11 +60,12 @@ export { IconBadge, IconBadgeProps, iconBadgeVariants } from './components/IconB
60
60
  export { PriceDisplay, PriceDisplayProps } from './components/PriceDisplay/index.js';
61
61
  export { DetailItem, DetailList, DetailListProps } from './components/DetailList/index.js';
62
62
  export { LoadingOverlay, LoadingOverlayProps } from './components/LoadingOverlay/index.js';
63
+ export { SearchLoadingChecklist, SearchLoadingChecklistProps, SearchLoadingStep } from './components/SearchLoadingChecklist/index.js';
63
64
  export { Switch, SwitchProps, switchThumbVariants, switchTrackVariants } from './components/Switch/index.js';
64
65
  export { DualRangeSlider, DualRangeSliderProps } from './components/DualRangeSlider/index.js';
65
66
  export { CardList, CardListProps } from './components/CardList/index.js';
66
67
  export { FilterAccordion, FilterAccordionItemData, FilterAccordionProps } from './components/FilterAccordion/index.js';
67
- export { RoomRate, RoomRateCancellation, RoomRateCancellationKind, RoomTypeCard, RoomTypeCardProps, RoomTypeCardSkeleton, RoomTypeCardSkeletonProps, RoomTypeData } from './components/RoomTypeCard/index.js';
68
+ export { RoomRate, RoomRateCancellation, RoomRateCancellationKind, RoomRateDetail, RoomTypeCard, RoomTypeCardProps, RoomTypeCardSkeleton, RoomTypeCardSkeletonProps, RoomTypeData } from './components/RoomTypeCard/index.js';
68
69
  import * as react_jsx_runtime from 'react/jsx-runtime';
69
70
  export { SignInCallout, SignInCalloutProps, signInCalloutVariants } from './components/SignInCallout/index.js';
70
71
  export { cn } from './utils/index.js';
package/dist/index.js CHANGED
@@ -1,26 +1,27 @@
1
1
  'use strict';
2
2
 
3
+ var chunk7IJOHVNJ_js = require('./chunk-7IJOHVNJ.js');
3
4
  var chunkL7OYR6U3_js = require('./chunk-L7OYR6U3.js');
4
5
  var chunkVTELEOT7_js = require('./chunk-VTELEOT7.js');
6
+ var chunkDTIYZ3TQ_js = require('./chunk-DTIYZ3TQ.js');
5
7
  var chunkE6ZNND75_js = require('./chunk-E6ZNND75.js');
6
8
  var chunkN3JU7JS7_js = require('./chunk-N3JU7JS7.js');
7
- var chunkDTIYZ3TQ_js = require('./chunk-DTIYZ3TQ.js');
9
+ var chunkWXSBKARZ_js = require('./chunk-WXSBKARZ.js');
8
10
  var chunkXHRDPJTF_js = require('./chunk-XHRDPJTF.js');
9
11
  var chunkTT7L3ZU7_js = require('./chunk-TT7L3ZU7.js');
10
12
  var chunkDFXXGKMI_js = require('./chunk-DFXXGKMI.js');
11
13
  var chunk3VU6TPAT_js = require('./chunk-3VU6TPAT.js');
12
14
  var chunkI4S3R6C6_js = require('./chunk-I4S3R6C6.js');
13
15
  var chunk762LQMWP_js = require('./chunk-762LQMWP.js');
14
- var chunk7IJOHVNJ_js = require('./chunk-7IJOHVNJ.js');
15
16
  var chunkGXKON34B_js = require('./chunk-GXKON34B.js');
16
17
  var chunkTZHT7NZU_js = require('./chunk-TZHT7NZU.js');
17
- var chunk3JM2X4I2_js = require('./chunk-3JM2X4I2.js');
18
+ var chunkKFQILIZO_js = require('./chunk-KFQILIZO.js');
18
19
  var chunkNCU5PY34_js = require('./chunk-NCU5PY34.js');
19
20
  var chunkHS3MAW3G_js = require('./chunk-HS3MAW3G.js');
21
+ var chunk6KW7ZSKR_js = require('./chunk-6KW7ZSKR.js');
20
22
  var chunkQWDKSY6Y_js = require('./chunk-QWDKSY6Y.js');
21
23
  var chunk3R7PT3JG_js = require('./chunk-3R7PT3JG.js');
22
24
  var chunkDS4LM7OS_js = require('./chunk-DS4LM7OS.js');
23
- var chunkWXSBKARZ_js = require('./chunk-WXSBKARZ.js');
24
25
  var chunkTE4WHZ4Q_js = require('./chunk-TE4WHZ4Q.js');
25
26
  var chunkHN6B4TAW_js = require('./chunk-HN6B4TAW.js');
26
27
  var chunkKZSGVMUG_js = require('./chunk-KZSGVMUG.js');
@@ -37,8 +38,8 @@ var chunkDLOHAW74_js = require('./chunk-DLOHAW74.js');
37
38
  var chunk77WKG2D7_js = require('./chunk-77WKG2D7.js');
38
39
  var chunkU3XWNFHH_js = require('./chunk-U3XWNFHH.js');
39
40
  var chunkW7DZZS6L_js = require('./chunk-W7DZZS6L.js');
40
- var chunkIEHX4DU6_js = require('./chunk-IEHX4DU6.js');
41
41
  var chunkTDGU5Y2P_js = require('./chunk-TDGU5Y2P.js');
42
+ var chunkIEHX4DU6_js = require('./chunk-IEHX4DU6.js');
42
43
  var chunkS5TLUDNM_js = require('./chunk-S5TLUDNM.js');
43
44
  var chunk7W3TFPIF_js = require('./chunk-7W3TFPIF.js');
44
45
  var chunkTJDHGNMR_js = require('./chunk-TJDHGNMR.js');
@@ -53,18 +54,18 @@ var chunkE24VNM6S_js = require('./chunk-E24VNM6S.js');
53
54
  var chunkXXC2YD3D_js = require('./chunk-XXC2YD3D.js');
54
55
  var chunkVWFY24XF_js = require('./chunk-VWFY24XF.js');
55
56
  var chunkT5FLQQP6_js = require('./chunk-T5FLQQP6.js');
56
- var chunkNHB2TI2B_js = require('./chunk-NHB2TI2B.js');
57
+ var chunkEY4ZIR3P_js = require('./chunk-EY4ZIR3P.js');
58
+ var chunkZ5S7LHMY_js = require('./chunk-Z5S7LHMY.js');
57
59
  var chunk6EG6EAHW_js = require('./chunk-6EG6EAHW.js');
58
60
  var chunkPND5YKFN_js = require('./chunk-PND5YKFN.js');
59
- var chunkZ5S7LHMY_js = require('./chunk-Z5S7LHMY.js');
61
+ var chunkH3JNRTAI_js = require('./chunk-H3JNRTAI.js');
60
62
  var chunkYZTVHCLK_js = require('./chunk-YZTVHCLK.js');
61
63
  var chunkZAUYE2EI_js = require('./chunk-ZAUYE2EI.js');
62
- var chunkH3JNRTAI_js = require('./chunk-H3JNRTAI.js');
63
64
  var chunkMY6BYO5F_js = require('./chunk-MY6BYO5F.js');
64
65
  var chunkMCF3EQTV_js = require('./chunk-MCF3EQTV.js');
65
- var chunkWXEZA6NE_js = require('./chunk-WXEZA6NE.js');
66
- var chunkEY4ZIR3P_js = require('./chunk-EY4ZIR3P.js');
67
66
  var chunkWBRVUWGC_js = require('./chunk-WBRVUWGC.js');
67
+ var chunkWXEZA6NE_js = require('./chunk-WXEZA6NE.js');
68
+ var chunkNHB2TI2B_js = require('./chunk-NHB2TI2B.js');
68
69
  var chunkADIDI7AJ_js = require('./chunk-ADIDI7AJ.js');
69
70
  var React = require('react');
70
71
  var classVarianceAuthority = require('class-variance-authority');
@@ -485,6 +486,14 @@ function MobileBookingBar({
485
486
  );
486
487
  }
487
488
 
489
+ Object.defineProperty(exports, "Tag", {
490
+ enumerable: true,
491
+ get: function () { return chunk7IJOHVNJ_js.Tag; }
492
+ });
493
+ Object.defineProperty(exports, "tagVariants", {
494
+ enumerable: true,
495
+ get: function () { return chunk7IJOHVNJ_js.tagVariants; }
496
+ });
488
497
  Object.defineProperty(exports, "Textarea", {
489
498
  enumerable: true,
490
499
  get: function () { return chunkL7OYR6U3_js.Textarea; }
@@ -501,6 +510,10 @@ Object.defineProperty(exports, "toastVariants", {
501
510
  enumerable: true,
502
511
  get: function () { return chunkVTELEOT7_js.toastVariants; }
503
512
  });
513
+ Object.defineProperty(exports, "Toggle", {
514
+ enumerable: true,
515
+ get: function () { return chunkDTIYZ3TQ_js.Toggle; }
516
+ });
504
517
  Object.defineProperty(exports, "Tooltip", {
505
518
  enumerable: true,
506
519
  get: function () { return chunkE6ZNND75_js.Tooltip; }
@@ -509,9 +522,13 @@ Object.defineProperty(exports, "VerticalMarquee", {
509
522
  enumerable: true,
510
523
  get: function () { return chunkN3JU7JS7_js.VerticalMarquee; }
511
524
  });
512
- Object.defineProperty(exports, "Toggle", {
525
+ Object.defineProperty(exports, "SignInCallout", {
513
526
  enumerable: true,
514
- get: function () { return chunkDTIYZ3TQ_js.Toggle; }
527
+ get: function () { return chunkWXSBKARZ_js.SignInCallout; }
528
+ });
529
+ Object.defineProperty(exports, "signInCalloutVariants", {
530
+ enumerable: true,
531
+ get: function () { return chunkWXSBKARZ_js.signInCalloutVariants; }
515
532
  });
516
533
  Object.defineProperty(exports, "Spinner", {
517
534
  enumerable: true,
@@ -553,14 +570,6 @@ Object.defineProperty(exports, "Tabs", {
553
570
  enumerable: true,
554
571
  get: function () { return chunk762LQMWP_js.Tabs; }
555
572
  });
556
- Object.defineProperty(exports, "Tag", {
557
- enumerable: true,
558
- get: function () { return chunk7IJOHVNJ_js.Tag; }
559
- });
560
- Object.defineProperty(exports, "tagVariants", {
561
- enumerable: true,
562
- get: function () { return chunk7IJOHVNJ_js.tagVariants; }
563
- });
564
573
  Object.defineProperty(exports, "RadioGroup", {
565
574
  enumerable: true,
566
575
  get: function () { return chunkGXKON34B_js.RadioGroup; }
@@ -571,11 +580,11 @@ Object.defineProperty(exports, "Rating", {
571
580
  });
572
581
  Object.defineProperty(exports, "RoomTypeCard", {
573
582
  enumerable: true,
574
- get: function () { return chunk3JM2X4I2_js.RoomTypeCard; }
583
+ get: function () { return chunkKFQILIZO_js.RoomTypeCard; }
575
584
  });
576
585
  Object.defineProperty(exports, "RoomTypeCardSkeleton", {
577
586
  enumerable: true,
578
- get: function () { return chunk3JM2X4I2_js.RoomTypeCardSkeleton; }
587
+ get: function () { return chunkKFQILIZO_js.RoomTypeCardSkeleton; }
579
588
  });
580
589
  Object.defineProperty(exports, "Skeleton", {
581
590
  enumerable: true,
@@ -597,6 +606,10 @@ Object.defineProperty(exports, "SearchBar", {
597
606
  enumerable: true,
598
607
  get: function () { return chunkHS3MAW3G_js.SearchBar; }
599
608
  });
609
+ Object.defineProperty(exports, "SearchLoadingChecklist", {
610
+ enumerable: true,
611
+ get: function () { return chunk6KW7ZSKR_js.SearchLoadingChecklist; }
612
+ });
600
613
  Object.defineProperty(exports, "SegmentedControl", {
601
614
  enumerable: true,
602
615
  get: function () { return chunkQWDKSY6Y_js.SegmentedControl; }
@@ -613,14 +626,6 @@ Object.defineProperty(exports, "Sidebar", {
613
626
  enumerable: true,
614
627
  get: function () { return chunkDS4LM7OS_js.Sidebar; }
615
628
  });
616
- Object.defineProperty(exports, "SignInCallout", {
617
- enumerable: true,
618
- get: function () { return chunkWXSBKARZ_js.SignInCallout; }
619
- });
620
- Object.defineProperty(exports, "signInCalloutVariants", {
621
- enumerable: true,
622
- get: function () { return chunkWXSBKARZ_js.signInCalloutVariants; }
623
- });
624
629
  Object.defineProperty(exports, "LoadingOverlay", {
625
630
  enumerable: true,
626
631
  get: function () { return chunkTE4WHZ4Q_js.LoadingOverlay; }
@@ -705,14 +710,14 @@ Object.defineProperty(exports, "LinkCard", {
705
710
  enumerable: true,
706
711
  get: function () { return chunkW7DZZS6L_js.LinkCard; }
707
712
  });
708
- Object.defineProperty(exports, "EmptyState", {
709
- enumerable: true,
710
- get: function () { return chunkIEHX4DU6_js.EmptyState; }
711
- });
712
713
  Object.defineProperty(exports, "DualRangeSlider", {
713
714
  enumerable: true,
714
715
  get: function () { return chunkTDGU5Y2P_js.DualRangeSlider; }
715
716
  });
717
+ Object.defineProperty(exports, "EmptyState", {
718
+ enumerable: true,
719
+ get: function () { return chunkIEHX4DU6_js.EmptyState; }
720
+ });
716
721
  Object.defineProperty(exports, "ErrorBoundary", {
717
722
  enumerable: true,
718
723
  get: function () { return chunkS5TLUDNM_js.ErrorBoundary; }
@@ -773,13 +778,17 @@ Object.defineProperty(exports, "DropdownMenu", {
773
778
  enumerable: true,
774
779
  get: function () { return chunkT5FLQQP6_js.DropdownMenu; }
775
780
  });
776
- Object.defineProperty(exports, "Autocomplete", {
781
+ Object.defineProperty(exports, "Avatar", {
777
782
  enumerable: true,
778
- get: function () { return chunkNHB2TI2B_js.Autocomplete; }
783
+ get: function () { return chunkEY4ZIR3P_js.Avatar; }
779
784
  });
780
- Object.defineProperty(exports, "autocompleteInputVariants", {
785
+ Object.defineProperty(exports, "Badge", {
781
786
  enumerable: true,
782
- get: function () { return chunkNHB2TI2B_js.autocompleteInputVariants; }
787
+ get: function () { return chunkZ5S7LHMY_js.Badge; }
788
+ });
789
+ Object.defineProperty(exports, "badgeVariants", {
790
+ enumerable: true,
791
+ get: function () { return chunkZ5S7LHMY_js.badgeVariants; }
783
792
  });
784
793
  Object.defineProperty(exports, "Banner", {
785
794
  enumerable: true,
@@ -793,13 +802,13 @@ Object.defineProperty(exports, "BottomNavBar", {
793
802
  enumerable: true,
794
803
  get: function () { return chunkPND5YKFN_js.BottomNavBar; }
795
804
  });
796
- Object.defineProperty(exports, "Badge", {
805
+ Object.defineProperty(exports, "Breadcrumb", {
797
806
  enumerable: true,
798
- get: function () { return chunkZ5S7LHMY_js.Badge; }
807
+ get: function () { return chunkH3JNRTAI_js.Breadcrumb; }
799
808
  });
800
- Object.defineProperty(exports, "badgeVariants", {
809
+ Object.defineProperty(exports, "breadcrumbVariants", {
801
810
  enumerable: true,
802
- get: function () { return chunkZ5S7LHMY_js.badgeVariants; }
811
+ get: function () { return chunkH3JNRTAI_js.breadcrumbVariants; }
803
812
  });
804
813
  Object.defineProperty(exports, "Button", {
805
814
  enumerable: true,
@@ -837,14 +846,6 @@ Object.defineProperty(exports, "cardVariants", {
837
846
  enumerable: true,
838
847
  get: function () { return chunkZAUYE2EI_js.cardVariants; }
839
848
  });
840
- Object.defineProperty(exports, "Breadcrumb", {
841
- enumerable: true,
842
- get: function () { return chunkH3JNRTAI_js.Breadcrumb; }
843
- });
844
- Object.defineProperty(exports, "breadcrumbVariants", {
845
- enumerable: true,
846
- get: function () { return chunkH3JNRTAI_js.breadcrumbVariants; }
847
- });
848
849
  Object.defineProperty(exports, "CardList", {
849
850
  enumerable: true,
850
851
  get: function () { return chunkMY6BYO5F_js.CardList; }
@@ -853,17 +854,21 @@ Object.defineProperty(exports, "Accordion", {
853
854
  enumerable: true,
854
855
  get: function () { return chunkMCF3EQTV_js.Accordion; }
855
856
  });
857
+ Object.defineProperty(exports, "Alert", {
858
+ enumerable: true,
859
+ get: function () { return chunkWBRVUWGC_js.Alert; }
860
+ });
856
861
  Object.defineProperty(exports, "AnchorTabs", {
857
862
  enumerable: true,
858
863
  get: function () { return chunkWXEZA6NE_js.AnchorTabs; }
859
864
  });
860
- Object.defineProperty(exports, "Avatar", {
865
+ Object.defineProperty(exports, "Autocomplete", {
861
866
  enumerable: true,
862
- get: function () { return chunkEY4ZIR3P_js.Avatar; }
867
+ get: function () { return chunkNHB2TI2B_js.Autocomplete; }
863
868
  });
864
- Object.defineProperty(exports, "Alert", {
869
+ Object.defineProperty(exports, "autocompleteInputVariants", {
865
870
  enumerable: true,
866
- get: function () { return chunkWBRVUWGC_js.Alert; }
871
+ get: function () { return chunkNHB2TI2B_js.autocompleteInputVariants; }
867
872
  });
868
873
  Object.defineProperty(exports, "cn", {
869
874
  enumerable: true,
package/dist/index.mjs CHANGED
@@ -1,24 +1,25 @@
1
+ export { Tag, tagVariants } from './chunk-WOG6V7OW.mjs';
1
2
  export { Textarea, textareaVariants } from './chunk-ZZ4EWC53.mjs';
2
3
  export { Toast, toastVariants } from './chunk-YVTUUNAX.mjs';
4
+ export { Toggle } from './chunk-2AB5ZHY5.mjs';
3
5
  export { Tooltip } from './chunk-2MJTZ6RR.mjs';
4
6
  export { VerticalMarquee } from './chunk-JP5ZR2HI.mjs';
5
- export { Toggle } from './chunk-2AB5ZHY5.mjs';
7
+ export { SignInCallout, signInCalloutVariants } from './chunk-Z3KRMKHP.mjs';
6
8
  export { Spinner, spinnerVariants } from './chunk-NCSFXSOZ.mjs';
7
9
  export { StatCard } from './chunk-O2W7NR33.mjs';
8
10
  export { StatusBadge, statusBadgeVariants } from './chunk-FZ7UNXSC.mjs';
9
11
  export { Stepper } from './chunk-2ASKBL63.mjs';
10
12
  export { Switch, switchThumbVariants, switchTrackVariants } from './chunk-DMCMWOBJ.mjs';
11
13
  export { Tabs } from './chunk-VOZPGXQD.mjs';
12
- export { Tag, tagVariants } from './chunk-WOG6V7OW.mjs';
13
14
  export { RadioGroup } from './chunk-F2BUMJYW.mjs';
14
15
  export { Rating } from './chunk-SGDC4IVX.mjs';
15
- export { RoomTypeCard, RoomTypeCardSkeleton } from './chunk-BFGRWOQM.mjs';
16
+ export { RoomTypeCard, RoomTypeCardSkeleton } from './chunk-IGBEBAPY.mjs';
16
17
  export { Skeleton, SkeletonCircle, SkeletonImage, SkeletonText } from './chunk-PAHSQMXV.mjs';
17
18
  export { SearchBar } from './chunk-KQK7LFWM.mjs';
19
+ export { SearchLoadingChecklist } from './chunk-SRYZ4N7T.mjs';
18
20
  export { SegmentedControl } from './chunk-36Y7UU32.mjs';
19
21
  export { Select, selectVariants } from './chunk-333YD5QI.mjs';
20
22
  export { Sidebar } from './chunk-MPL35D5G.mjs';
21
- export { SignInCallout, signInCalloutVariants } from './chunk-Z3KRMKHP.mjs';
22
23
  export { LoadingOverlay } from './chunk-WVEJS2J2.mjs';
23
24
  export { MegaMenu } from './chunk-EUEM2D5M.mjs';
24
25
  export { MobileMenu } from './chunk-R4DC7XPP.mjs';
@@ -35,8 +36,8 @@ export { ImageWithFallback } from './chunk-BUXVK2HE.mjs';
35
36
  export { Input, inputVariants } from './chunk-GRG4USTC.mjs';
36
37
  export { Lightbox } from './chunk-GBWVIY3C.mjs';
37
38
  export { LinkCard } from './chunk-UYDZKAGZ.mjs';
38
- export { EmptyState } from './chunk-OCUHCDAQ.mjs';
39
39
  export { DualRangeSlider } from './chunk-ERL3WXNY.mjs';
40
+ export { EmptyState } from './chunk-OCUHCDAQ.mjs';
40
41
  export { ErrorBoundary } from './chunk-5257MWFI.mjs';
41
42
  export { FilterAccordion } from './chunk-VQVRKRSM.mjs';
42
43
  export { FilterPill } from './chunk-YKBASX5A.mjs';
@@ -51,18 +52,18 @@ export { DetailList } from './chunk-N6THLJIG.mjs';
51
52
  export { Divider } from './chunk-E4B6LXK7.mjs';
52
53
  export { Drawer } from './chunk-ZLF7IL3Y.mjs';
53
54
  export { DropdownMenu } from './chunk-Q7BKR6O7.mjs';
54
- export { Autocomplete, autocompleteInputVariants } from './chunk-B47HQHX3.mjs';
55
+ export { Avatar } from './chunk-2POGTS27.mjs';
56
+ export { Badge, badgeVariants } from './chunk-XZU2SISM.mjs';
55
57
  export { Banner, bannerVariants } from './chunk-LFIZX2S6.mjs';
56
58
  export { BottomNavBar } from './chunk-UQRQZLMQ.mjs';
57
- export { Badge, badgeVariants } from './chunk-XZU2SISM.mjs';
59
+ export { Breadcrumb, breadcrumbVariants } from './chunk-UKCH6RYL.mjs';
58
60
  export { Button, buttonVariants } from './chunk-4U5MNA3B.mjs';
59
61
  export { Card, CardContent, CardDescription, CardImage, CardTitle, cardImageVariants, cardVariants } from './chunk-V5J2XLPD.mjs';
60
- export { Breadcrumb, breadcrumbVariants } from './chunk-UKCH6RYL.mjs';
61
62
  export { CardList } from './chunk-RJWHPHHX.mjs';
62
63
  export { Accordion } from './chunk-NZ7GF6RF.mjs';
63
- export { AnchorTabs } from './chunk-M2H6QUAL.mjs';
64
- export { Avatar } from './chunk-2POGTS27.mjs';
65
64
  export { Alert } from './chunk-BQWVWK74.mjs';
65
+ export { AnchorTabs } from './chunk-M2H6QUAL.mjs';
66
+ export { Autocomplete, autocompleteInputVariants } from './chunk-B47HQHX3.mjs';
66
67
  import { cn } from './chunk-IMKLN273.mjs';
67
68
  export { cn } from './chunk-IMKLN273.mjs';
68
69
  import * as React from 'react';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dododog/ui",
3
- "version": "0.9.1",
3
+ "version": "0.10.0",
4
4
  "description": "React UI component library for DodoDog — pet-friendly travel platform",
5
5
  "sideEffects": false,
6
6
  "license": "MIT",
@@ -263,6 +263,11 @@
263
263
  "import": "./dist/components/SearchBar/index.mjs",
264
264
  "require": "./dist/components/SearchBar/index.js"
265
265
  },
266
+ "./search-loading-checklist": {
267
+ "types": "./dist/components/SearchLoadingChecklist/index.d.ts",
268
+ "import": "./dist/components/SearchLoadingChecklist/index.mjs",
269
+ "require": "./dist/components/SearchLoadingChecklist/index.js"
270
+ },
266
271
  "./segmented-control": {
267
272
  "types": "./dist/components/SegmentedControl/index.d.ts",
268
273
  "import": "./dist/components/SegmentedControl/index.mjs",
@@ -367,25 +372,19 @@
367
372
  "main": "./dist/index.js",
368
373
  "module": "./dist/index.mjs",
369
374
  "types": "./dist/index.d.ts",
370
- "scripts": {
371
- "build": "NODE_OPTIONS='--max-old-space-size=8192' tsup",
372
- "dev": "tsup --watch",
373
- "lint": "eslint . --max-warnings 0",
374
- "clean": "rm -rf .turbo node_modules dist"
375
- },
376
375
  "peerDependencies": {
377
376
  "react": ">=18",
378
377
  "tailwindcss": ">=3"
379
378
  },
380
379
  "devDependencies": {
381
- "@dododog/eslint-config": "workspace:*",
382
- "@dododog/typescript-config": "workspace:*",
383
380
  "@types/react": "^18.2.61",
384
381
  "@types/react-dom": "^18.2.19",
385
382
  "eslint": "^8.57.0",
386
383
  "react": "^18.2.0",
387
384
  "tsup": "^8.0.2",
388
- "typescript": "5.5.4"
385
+ "typescript": "5.5.4",
386
+ "@dododog/eslint-config": "0.0.0",
387
+ "@dododog/typescript-config": "0.0.0"
389
388
  },
390
389
  "publishConfig": {
391
390
  "access": "public"
@@ -395,5 +394,11 @@
395
394
  "class-variance-authority": "^0.7.1",
396
395
  "clsx": "^2.1.1",
397
396
  "tailwind-merge": "^2.6.1"
397
+ },
398
+ "scripts": {
399
+ "build": "NODE_OPTIONS='--max-old-space-size=8192' tsup",
400
+ "dev": "tsup --watch",
401
+ "lint": "eslint . --max-warnings 0",
402
+ "clean": "rm -rf .turbo node_modules dist"
398
403
  }
399
- }
404
+ }