@dododog/ui 0.9.2 → 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;
@@ -128,13 +128,13 @@ function RateRow({
128
128
  /* @__PURE__ */ jsx("span", { children: rate.dogFeeLabel })
129
129
  ] }),
130
130
  hasDetails && /* @__PURE__ */ jsxs(Fragment, { children: [
131
- /* @__PURE__ */ jsxs(
131
+ /* @__PURE__ */ jsx("div", { className: "mt-1.5", children: /* @__PURE__ */ jsxs(
132
132
  "button",
133
133
  {
134
134
  type: "button",
135
135
  onClick: () => setShowDetails((v) => !v),
136
136
  "aria-expanded": showDetails,
137
- className: "mt-1.5 inline-flex items-center gap-1 text-[12px] font-medium text-secondary",
137
+ className: "inline-flex items-center gap-1 text-[12px] font-medium text-secondary",
138
138
  children: [
139
139
  /* @__PURE__ */ jsx(
140
140
  ChevronDownIcon,
@@ -148,7 +148,7 @@ function RateRow({
148
148
  showDetails ? "Masquer le d\xE9tail" : "Voir le d\xE9tail"
149
149
  ]
150
150
  }
151
- ),
151
+ ) }),
152
152
  showDetails && /* @__PURE__ */ jsxs("div", { className: "mt-2 rounded-lg bg-sand-light px-3 py-2.5", children: [
153
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
154
  /* @__PURE__ */ jsx("dt", { className: "font-medium text-text-secondary", children: d.label }),
@@ -150,13 +150,13 @@ function RateRow({
150
150
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: rate.dogFeeLabel })
151
151
  ] }),
152
152
  hasDetails && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
153
- /* @__PURE__ */ jsxRuntime.jsxs(
153
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1.5", children: /* @__PURE__ */ jsxRuntime.jsxs(
154
154
  "button",
155
155
  {
156
156
  type: "button",
157
157
  onClick: () => setShowDetails((v) => !v),
158
158
  "aria-expanded": showDetails,
159
- className: "mt-1.5 inline-flex items-center gap-1 text-[12px] font-medium text-secondary",
159
+ className: "inline-flex items-center gap-1 text-[12px] font-medium text-secondary",
160
160
  children: [
161
161
  /* @__PURE__ */ jsxRuntime.jsx(
162
162
  ChevronDownIcon,
@@ -170,7 +170,7 @@ function RateRow({
170
170
  showDetails ? "Masquer le d\xE9tail" : "Voir le d\xE9tail"
171
171
  ]
172
172
  }
173
- ),
173
+ ) }),
174
174
  showDetails && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 rounded-lg bg-sand-light px-3 py-2.5", children: [
175
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
176
  /* @__PURE__ */ jsxRuntime.jsx("dt", { className: "font-medium text-text-secondary", children: d.label }),
@@ -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 };
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkSATQIPV5_js = require('../../chunk-SATQIPV5.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 chunkSATQIPV5_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 chunkSATQIPV5_js.RoomTypeCardSkeleton; }
15
+ get: function () { return chunkKFQILIZO_js.RoomTypeCardSkeleton; }
16
16
  });
@@ -1,3 +1,3 @@
1
- export { RoomTypeCard, RoomTypeCardSkeleton } from '../../chunk-ZEHZPS2P.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,6 +60,7 @@ 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';
package/dist/index.d.ts CHANGED
@@ -60,6 +60,7 @@ 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';
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');
5
6
  var chunkDTIYZ3TQ_js = require('./chunk-DTIYZ3TQ.js');
6
7
  var chunkE6ZNND75_js = require('./chunk-E6ZNND75.js');
7
8
  var chunkN3JU7JS7_js = require('./chunk-N3JU7JS7.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 chunkSATQIPV5_js = require('./chunk-SATQIPV5.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');
@@ -53,8 +54,8 @@ 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');
57
+ var chunkEY4ZIR3P_js = require('./chunk-EY4ZIR3P.js');
56
58
  var chunkZ5S7LHMY_js = require('./chunk-Z5S7LHMY.js');
57
- var chunkNHB2TI2B_js = require('./chunk-NHB2TI2B.js');
58
59
  var chunk6EG6EAHW_js = require('./chunk-6EG6EAHW.js');
59
60
  var chunkPND5YKFN_js = require('./chunk-PND5YKFN.js');
60
61
  var chunkH3JNRTAI_js = require('./chunk-H3JNRTAI.js');
@@ -62,9 +63,9 @@ var chunkYZTVHCLK_js = require('./chunk-YZTVHCLK.js');
62
63
  var chunkZAUYE2EI_js = require('./chunk-ZAUYE2EI.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
66
  var chunkWBRVUWGC_js = require('./chunk-WBRVUWGC.js');
67
- var chunkEY4ZIR3P_js = require('./chunk-EY4ZIR3P.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; }
@@ -513,6 +522,14 @@ Object.defineProperty(exports, "VerticalMarquee", {
513
522
  enumerable: true,
514
523
  get: function () { return chunkN3JU7JS7_js.VerticalMarquee; }
515
524
  });
525
+ Object.defineProperty(exports, "SignInCallout", {
526
+ enumerable: true,
527
+ get: function () { return chunkWXSBKARZ_js.SignInCallout; }
528
+ });
529
+ Object.defineProperty(exports, "signInCalloutVariants", {
530
+ enumerable: true,
531
+ get: function () { return chunkWXSBKARZ_js.signInCalloutVariants; }
532
+ });
516
533
  Object.defineProperty(exports, "Spinner", {
517
534
  enumerable: true,
518
535
  get: function () { return chunkXHRDPJTF_js.Spinner; }
@@ -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 chunkSATQIPV5_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 chunkSATQIPV5_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; }
@@ -773,6 +778,10 @@ Object.defineProperty(exports, "DropdownMenu", {
773
778
  enumerable: true,
774
779
  get: function () { return chunkT5FLQQP6_js.DropdownMenu; }
775
780
  });
781
+ Object.defineProperty(exports, "Avatar", {
782
+ enumerable: true,
783
+ get: function () { return chunkEY4ZIR3P_js.Avatar; }
784
+ });
776
785
  Object.defineProperty(exports, "Badge", {
777
786
  enumerable: true,
778
787
  get: function () { return chunkZ5S7LHMY_js.Badge; }
@@ -781,14 +790,6 @@ Object.defineProperty(exports, "badgeVariants", {
781
790
  enumerable: true,
782
791
  get: function () { return chunkZ5S7LHMY_js.badgeVariants; }
783
792
  });
784
- Object.defineProperty(exports, "Autocomplete", {
785
- enumerable: true,
786
- get: function () { return chunkNHB2TI2B_js.Autocomplete; }
787
- });
788
- Object.defineProperty(exports, "autocompleteInputVariants", {
789
- enumerable: true,
790
- get: function () { return chunkNHB2TI2B_js.autocompleteInputVariants; }
791
- });
792
793
  Object.defineProperty(exports, "Banner", {
793
794
  enumerable: true,
794
795
  get: function () { return chunk6EG6EAHW_js.Banner; }
@@ -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, "Alert", {
865
+ Object.defineProperty(exports, "Autocomplete", {
861
866
  enumerable: true,
862
- get: function () { return chunkWBRVUWGC_js.Alert; }
867
+ get: function () { return chunkNHB2TI2B_js.Autocomplete; }
863
868
  });
864
- Object.defineProperty(exports, "Avatar", {
869
+ Object.defineProperty(exports, "autocompleteInputVariants", {
865
870
  enumerable: true,
866
- get: function () { return chunkEY4ZIR3P_js.Avatar; }
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';
3
4
  export { Toggle } from './chunk-2AB5ZHY5.mjs';
4
5
  export { Tooltip } from './chunk-2MJTZ6RR.mjs';
5
6
  export { VerticalMarquee } from './chunk-JP5ZR2HI.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-ZEHZPS2P.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';
@@ -51,8 +52,8 @@ 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';
55
+ export { Avatar } from './chunk-2POGTS27.mjs';
54
56
  export { Badge, badgeVariants } from './chunk-XZU2SISM.mjs';
55
- export { Autocomplete, autocompleteInputVariants } from './chunk-B47HQHX3.mjs';
56
57
  export { Banner, bannerVariants } from './chunk-LFIZX2S6.mjs';
57
58
  export { BottomNavBar } from './chunk-UQRQZLMQ.mjs';
58
59
  export { Breadcrumb, breadcrumbVariants } from './chunk-UKCH6RYL.mjs';
@@ -60,9 +61,9 @@ export { Button, buttonVariants } from './chunk-4U5MNA3B.mjs';
60
61
  export { Card, CardContent, CardDescription, CardImage, CardTitle, cardImageVariants, cardVariants } from './chunk-V5J2XLPD.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
64
  export { Alert } from './chunk-BQWVWK74.mjs';
65
- export { Avatar } from './chunk-2POGTS27.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.2",
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
+ }