@dododog/ui 0.10.1 → 0.12.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.
- package/dist/chunk-AGNY5DBW.mjs +116 -0
- package/dist/chunk-BXFU7V2X.js +156 -0
- package/dist/chunk-CRQ4XOCC.mjs +107 -0
- package/dist/chunk-CWXP2ZI2.js +79 -0
- package/dist/chunk-DFC6XK57.js +55 -0
- package/dist/chunk-DM76AK4A.mjs +67 -0
- package/dist/chunk-DUT3ABEI.mjs +108 -0
- package/dist/chunk-G3LZ32WA.js +129 -0
- package/dist/chunk-HB2XJOBZ.js +141 -0
- package/dist/chunk-IKQYFSBW.mjs +33 -0
- package/dist/chunk-JSRYMZCT.js +99 -0
- package/dist/chunk-LO2XNMZO.mjs +134 -0
- package/dist/chunk-NKD7FXZR.mjs +77 -0
- package/dist/chunk-OGB5LIXN.js +89 -0
- package/dist/chunk-OZULAGYL.mjs +1 -0
- package/dist/chunk-SEHALSKW.js +130 -0
- package/dist/chunk-VNURXHKK.js +2 -0
- package/dist/chunk-ZEPXWD6U.mjs +57 -0
- package/dist/components/ActiveStayCard/index.d.mts +36 -0
- package/dist/components/ActiveStayCard/index.d.ts +36 -0
- package/dist/components/ActiveStayCard/index.js +12 -0
- package/dist/components/ActiveStayCard/index.mjs +3 -0
- package/dist/components/DogAvatar/index.d.mts +37 -0
- package/dist/components/DogAvatar/index.d.ts +37 -0
- package/dist/components/DogAvatar/index.js +24 -0
- package/dist/components/DogAvatar/index.mjs +3 -0
- package/dist/components/ImpactCard/index.d.mts +12 -0
- package/dist/components/ImpactCard/index.d.ts +12 -0
- package/dist/components/ImpactCard/index.js +11 -0
- package/dist/components/ImpactCard/index.mjs +2 -0
- package/dist/components/SearchWidget/index.d.mts +20 -0
- package/dist/components/SearchWidget/index.d.ts +20 -0
- package/dist/components/SearchWidget/index.js +11 -0
- package/dist/components/SearchWidget/index.mjs +2 -0
- package/dist/components/SectionHeader/index.d.mts +30 -0
- package/dist/components/SectionHeader/index.d.ts +30 -0
- package/dist/components/SectionHeader/index.js +11 -0
- package/dist/components/SectionHeader/index.mjs +2 -0
- package/dist/components/StatTile/index.d.mts +28 -0
- package/dist/components/StatTile/index.d.ts +28 -0
- package/dist/components/StatTile/index.js +11 -0
- package/dist/components/StatTile/index.mjs +2 -0
- package/dist/components/StayListRow/index.d.mts +31 -0
- package/dist/components/StayListRow/index.d.ts +31 -0
- package/dist/components/StayListRow/index.js +12 -0
- package/dist/components/StayListRow/index.mjs +3 -0
- package/dist/components/TripHeroCard/index.d.mts +38 -0
- package/dist/components/TripHeroCard/index.d.ts +38 -0
- package/dist/components/TripHeroCard/index.js +11 -0
- package/dist/components/TripHeroCard/index.mjs +2 -0
- package/dist/index.d.mts +9 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +206 -153
- package/dist/index.mjs +40 -31
- package/package.json +41 -1
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { DogAvatarStack } from './chunk-AGNY5DBW.mjs';
|
|
2
|
+
import { cn } from './chunk-IMKLN273.mjs';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
function MapPinIcon({ size = 14 }) {
|
|
7
|
+
return /* @__PURE__ */ jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
8
|
+
/* @__PURE__ */ jsx("path", { d: "M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z" }),
|
|
9
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "10", r: "3" })
|
|
10
|
+
] });
|
|
11
|
+
}
|
|
12
|
+
function ChevronRightIcon() {
|
|
13
|
+
return /* @__PURE__ */ jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: "M9 18l6-6-6-6" }) });
|
|
14
|
+
}
|
|
15
|
+
var DEFAULT_GRADIENT = "linear-gradient(135deg,#f5a083,#f27c54)";
|
|
16
|
+
var StayListRow = React.forwardRef(
|
|
17
|
+
({
|
|
18
|
+
hotelName,
|
|
19
|
+
location,
|
|
20
|
+
priceLabel,
|
|
21
|
+
nightsLabel,
|
|
22
|
+
thumbnailUrl,
|
|
23
|
+
thumbnailGradient = DEFAULT_GRADIENT,
|
|
24
|
+
badge,
|
|
25
|
+
badgeTone = "free",
|
|
26
|
+
dogs = [],
|
|
27
|
+
href,
|
|
28
|
+
className,
|
|
29
|
+
renderImage,
|
|
30
|
+
renderLink
|
|
31
|
+
}, ref) => {
|
|
32
|
+
const rowClass = cn(
|
|
33
|
+
"group flex items-center gap-3 px-4 py-3.5 transition-colors hover:bg-sand-light md:gap-4 md:px-[18px] md:py-[15px]",
|
|
34
|
+
href && "cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-inset focus-visible:ring-offset-0",
|
|
35
|
+
className
|
|
36
|
+
);
|
|
37
|
+
const body = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
38
|
+
/* @__PURE__ */ jsxs(
|
|
39
|
+
"div",
|
|
40
|
+
{
|
|
41
|
+
className: "relative h-[54px] w-[54px] shrink-0 overflow-hidden rounded-[13px] md:h-16 md:w-16 md:rounded-[14px]",
|
|
42
|
+
style: thumbnailUrl ? void 0 : { background: thumbnailGradient },
|
|
43
|
+
children: [
|
|
44
|
+
thumbnailUrl && (renderImage ? renderImage({ src: thumbnailUrl, alt: hotelName, className: "h-full w-full object-cover" }) : /* @__PURE__ */ jsx("img", { src: thumbnailUrl, alt: hotelName, className: "h-full w-full object-cover" })),
|
|
45
|
+
badge && /* @__PURE__ */ jsx(
|
|
46
|
+
"span",
|
|
47
|
+
{
|
|
48
|
+
className: cn(
|
|
49
|
+
"absolute bottom-1 left-1 rounded-full bg-white/90 px-1.5 py-0.5 text-[9px] font-bold",
|
|
50
|
+
badgeTone === "free" ? "text-accent-dark" : "text-secondary-dark"
|
|
51
|
+
),
|
|
52
|
+
children: badge
|
|
53
|
+
}
|
|
54
|
+
)
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
),
|
|
58
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
59
|
+
/* @__PURE__ */ jsx("div", { className: "truncate text-sm font-bold text-primary md:text-[15px]", children: hotelName }),
|
|
60
|
+
location && /* @__PURE__ */ jsxs("div", { className: "mt-0.5 inline-flex items-center gap-1.5 text-[12.5px] text-text-secondary md:text-[13px]", children: [
|
|
61
|
+
/* @__PURE__ */ jsx(MapPinIcon, {}),
|
|
62
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: location })
|
|
63
|
+
] })
|
|
64
|
+
] }),
|
|
65
|
+
dogs.length > 0 && /* @__PURE__ */ jsx("div", { className: "hidden md:block", children: /* @__PURE__ */ jsx(DogAvatarStack, { dogs, size: 26 }) }),
|
|
66
|
+
priceLabel && /* @__PURE__ */ jsxs("div", { className: "shrink-0 text-right md:w-[78px]", children: [
|
|
67
|
+
/* @__PURE__ */ jsx("div", { className: "font-heading text-[15px] font-bold text-primary md:text-base", children: priceLabel }),
|
|
68
|
+
nightsLabel && /* @__PURE__ */ jsx("div", { className: "text-[11px] text-text-secondary", children: nightsLabel })
|
|
69
|
+
] }),
|
|
70
|
+
href && /* @__PURE__ */ jsx("span", { className: "hidden text-sand-dark transition-colors group-hover:text-text-secondary md:block", children: /* @__PURE__ */ jsx(ChevronRightIcon, {}) })
|
|
71
|
+
] });
|
|
72
|
+
return /* @__PURE__ */ jsx("div", { ref, children: href ? renderLink ? renderLink({ href, className: rowClass, "aria-label": hotelName, children: body }) : /* @__PURE__ */ jsx("a", { href, className: rowClass, "aria-label": hotelName, children: body }) : /* @__PURE__ */ jsx("div", { className: rowClass, children: body }) });
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
StayListRow.displayName = "StayListRow";
|
|
76
|
+
|
|
77
|
+
export { StayListRow };
|
|
@@ -0,0 +1,89 @@
|
|
|
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
|
+
function ChevronRightIcon({ className }) {
|
|
28
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
29
|
+
"svg",
|
|
30
|
+
{
|
|
31
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
32
|
+
width: "16",
|
|
33
|
+
height: "16",
|
|
34
|
+
viewBox: "0 0 24 24",
|
|
35
|
+
fill: "none",
|
|
36
|
+
stroke: "currentColor",
|
|
37
|
+
strokeWidth: "2",
|
|
38
|
+
strokeLinecap: "round",
|
|
39
|
+
strokeLinejoin: "round",
|
|
40
|
+
className,
|
|
41
|
+
"aria-hidden": "true",
|
|
42
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m9 18 6-6-6-6" })
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
var SectionHeader = React__namespace.forwardRef(
|
|
47
|
+
({
|
|
48
|
+
title,
|
|
49
|
+
subtitle,
|
|
50
|
+
icon,
|
|
51
|
+
actionLabel,
|
|
52
|
+
actionHref,
|
|
53
|
+
renderLink,
|
|
54
|
+
as: Heading = "h2",
|
|
55
|
+
className,
|
|
56
|
+
...props
|
|
57
|
+
}, ref) => {
|
|
58
|
+
const linkClassName = "inline-flex items-center gap-1 rounded text-sm font-medium text-secondary transition-colors hover:text-secondary/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2";
|
|
59
|
+
const linkChildren = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
60
|
+
actionLabel,
|
|
61
|
+
/* @__PURE__ */ jsxRuntime.jsx(ChevronRightIcon, { className: "h-4 w-4" })
|
|
62
|
+
] });
|
|
63
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
64
|
+
"div",
|
|
65
|
+
{
|
|
66
|
+
ref,
|
|
67
|
+
className: chunkADIDI7AJ_js.cn("flex items-end justify-between gap-3", className),
|
|
68
|
+
...props,
|
|
69
|
+
children: [
|
|
70
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-start gap-2", children: [
|
|
71
|
+
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mt-0.5 shrink-0 text-secondary", children: icon }),
|
|
72
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
|
|
73
|
+
/* @__PURE__ */ jsxRuntime.jsx(Heading, { className: "font-heading text-xl font-semibold text-primary", children: title }),
|
|
74
|
+
subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-sm text-text-secondary", children: subtitle })
|
|
75
|
+
] })
|
|
76
|
+
] }),
|
|
77
|
+
actionLabel && actionHref && (renderLink ? renderLink({
|
|
78
|
+
href: actionHref,
|
|
79
|
+
className: linkClassName,
|
|
80
|
+
children: linkChildren
|
|
81
|
+
}) : /* @__PURE__ */ jsxRuntime.jsx("a", { href: actionHref, className: linkClassName, children: linkChildren }))
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
SectionHeader.displayName = "SectionHeader";
|
|
88
|
+
|
|
89
|
+
exports.SectionHeader = SectionHeader;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,130 @@
|
|
|
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
|
+
function PinIcon() {
|
|
28
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "17", height: "17", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
29
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z" }),
|
|
30
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "10", r: "3" })
|
|
31
|
+
] });
|
|
32
|
+
}
|
|
33
|
+
function CalendarIcon() {
|
|
34
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
35
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 2v4" }),
|
|
36
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 2v4" }),
|
|
37
|
+
/* @__PURE__ */ jsxRuntime.jsx("rect", { width: "18", height: "18", x: "3", y: "4", rx: "2" }),
|
|
38
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 10h18" })
|
|
39
|
+
] });
|
|
40
|
+
}
|
|
41
|
+
function DogIcon() {
|
|
42
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "17", height: "17", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
43
|
+
/* @__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" }),
|
|
44
|
+
/* @__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" }),
|
|
45
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 14v.5" }),
|
|
46
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 14v.5" }),
|
|
47
|
+
/* @__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.309" })
|
|
48
|
+
] });
|
|
49
|
+
}
|
|
50
|
+
function ChevronDownIcon() {
|
|
51
|
+
return /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m6 9 6 6 6-6" }) });
|
|
52
|
+
}
|
|
53
|
+
function SearchIcon() {
|
|
54
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", "aria-hidden": "true", children: [
|
|
55
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "7" }),
|
|
56
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "m21 21-4.3-4.3" })
|
|
57
|
+
] });
|
|
58
|
+
}
|
|
59
|
+
var fieldClass = "flex items-center gap-2.5 rounded-[14px] border border-sand-dark/70 bg-sand-light px-3.5 py-3";
|
|
60
|
+
var fieldLabelClass = "text-[10px] font-semibold uppercase tracking-[0.04em] text-text-secondary";
|
|
61
|
+
var fieldValueClass = "text-sm font-medium text-primary";
|
|
62
|
+
var SearchWidget = React__namespace.forwardRef(
|
|
63
|
+
({
|
|
64
|
+
title = "Trouver un s\xE9jour",
|
|
65
|
+
destination = "O\xF9 partez-vous ?",
|
|
66
|
+
arrivalLabel = "Ajouter",
|
|
67
|
+
departureLabel = "Ajouter",
|
|
68
|
+
travelersLabel = "2 adultes \xB7 2 chiens",
|
|
69
|
+
actionLabel = "Rechercher",
|
|
70
|
+
href = "/search",
|
|
71
|
+
renderLink,
|
|
72
|
+
className,
|
|
73
|
+
...props
|
|
74
|
+
}, ref) => {
|
|
75
|
+
const btnClass = "flex min-h-[44px] w-full items-center justify-center gap-2 rounded-full bg-secondary px-4 py-3 text-sm font-semibold text-white shadow-[0_8px_18px_-8px_rgba(242,124,84,0.7)] transition-colors hover:bg-secondary-dark focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2";
|
|
76
|
+
const btnChildren = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
77
|
+
/* @__PURE__ */ jsxRuntime.jsx(SearchIcon, {}),
|
|
78
|
+
actionLabel
|
|
79
|
+
] });
|
|
80
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
81
|
+
"div",
|
|
82
|
+
{
|
|
83
|
+
ref,
|
|
84
|
+
className: chunkADIDI7AJ_js.cn(
|
|
85
|
+
"rounded-[22px] border border-sand-dark bg-white p-[18px] shadow-[0_8px_22px_-14px_rgba(29,34,48,0.22)] md:p-5",
|
|
86
|
+
className
|
|
87
|
+
),
|
|
88
|
+
...props,
|
|
89
|
+
children: [
|
|
90
|
+
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "mb-3.5 font-heading text-base font-bold text-primary", children: title }),
|
|
91
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkADIDI7AJ_js.cn(fieldClass, "mb-2.5"), children: [
|
|
92
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-secondary", children: /* @__PURE__ */ jsxRuntime.jsx(PinIcon, {}) }),
|
|
93
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
|
|
94
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: fieldLabelClass, children: "Destination" }),
|
|
95
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: fieldValueClass, children: destination })
|
|
96
|
+
] })
|
|
97
|
+
] }),
|
|
98
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2.5 flex gap-2.5", children: [
|
|
99
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkADIDI7AJ_js.cn(fieldClass, "flex-1"), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
|
|
100
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: fieldLabelClass, children: "Arriv\xE9e" }),
|
|
101
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-0.5 flex items-center gap-1.5 text-text-secondary", children: [
|
|
102
|
+
/* @__PURE__ */ jsxRuntime.jsx(CalendarIcon, {}),
|
|
103
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[13px] font-medium text-primary", children: arrivalLabel })
|
|
104
|
+
] })
|
|
105
|
+
] }) }),
|
|
106
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkADIDI7AJ_js.cn(fieldClass, "flex-1"), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
|
|
107
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: fieldLabelClass, children: "D\xE9part" }),
|
|
108
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-0.5 flex items-center gap-1.5 text-text-secondary", children: [
|
|
109
|
+
/* @__PURE__ */ jsxRuntime.jsx(CalendarIcon, {}),
|
|
110
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[13px] font-medium text-primary", children: departureLabel })
|
|
111
|
+
] })
|
|
112
|
+
] }) })
|
|
113
|
+
] }),
|
|
114
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkADIDI7AJ_js.cn(fieldClass, "mb-3.5"), children: [
|
|
115
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-accent", children: /* @__PURE__ */ jsxRuntime.jsx(DogIcon, {}) }),
|
|
116
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
|
|
117
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: fieldLabelClass, children: "Voyageurs" }),
|
|
118
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: fieldValueClass, children: travelersLabel })
|
|
119
|
+
] }),
|
|
120
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-secondary", children: /* @__PURE__ */ jsxRuntime.jsx(ChevronDownIcon, {}) })
|
|
121
|
+
] }),
|
|
122
|
+
renderLink ? renderLink({ href, className: btnClass, children: btnChildren }) : /* @__PURE__ */ jsxRuntime.jsx("a", { href, className: btnClass, children: btnChildren })
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
SearchWidget.displayName = "SearchWidget";
|
|
129
|
+
|
|
130
|
+
exports.SearchWidget = SearchWidget;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { cn } from './chunk-IMKLN273.mjs';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
function ChevronRightIcon({ className }) {
|
|
6
|
+
return /* @__PURE__ */ jsx(
|
|
7
|
+
"svg",
|
|
8
|
+
{
|
|
9
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
10
|
+
width: "16",
|
|
11
|
+
height: "16",
|
|
12
|
+
viewBox: "0 0 24 24",
|
|
13
|
+
fill: "none",
|
|
14
|
+
stroke: "currentColor",
|
|
15
|
+
strokeWidth: "2",
|
|
16
|
+
strokeLinecap: "round",
|
|
17
|
+
strokeLinejoin: "round",
|
|
18
|
+
className,
|
|
19
|
+
"aria-hidden": "true",
|
|
20
|
+
children: /* @__PURE__ */ jsx("path", { d: "m9 18 6-6-6-6" })
|
|
21
|
+
}
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
var StatTile = React.forwardRef(
|
|
25
|
+
({ label, value, icon, href, hint, renderLink, className, ...props }, ref) => {
|
|
26
|
+
const body = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
27
|
+
/* @__PURE__ */ jsx("span", { className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-sand text-secondary", children: icon }),
|
|
28
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
29
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-baseline gap-1.5", children: /* @__PURE__ */ jsx("span", { className: "font-heading text-2xl font-bold leading-none text-primary tabular-nums", children: value }) }),
|
|
30
|
+
/* @__PURE__ */ jsx("p", { className: "mt-1 truncate text-sm font-medium text-text-secondary", children: label }),
|
|
31
|
+
hint && /* @__PURE__ */ jsx("p", { className: "truncate text-xs text-text-muted", children: hint })
|
|
32
|
+
] }),
|
|
33
|
+
href && /* @__PURE__ */ jsx(ChevronRightIcon, { className: "h-4 w-4 shrink-0 self-center text-text-muted" })
|
|
34
|
+
] });
|
|
35
|
+
const baseClassName = cn(
|
|
36
|
+
"flex items-center gap-3 rounded-2xl border border-sand-dark bg-white p-4",
|
|
37
|
+
className
|
|
38
|
+
);
|
|
39
|
+
if (href) {
|
|
40
|
+
const linkClassName = cn(
|
|
41
|
+
baseClassName,
|
|
42
|
+
"min-h-[44px] transition-shadow hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2"
|
|
43
|
+
);
|
|
44
|
+
const ariaLabel = `${label} : ${typeof value === "string" || typeof value === "number" ? value : ""}`.trim();
|
|
45
|
+
return /* @__PURE__ */ jsx("div", { ref, ...props, children: renderLink ? renderLink({
|
|
46
|
+
href,
|
|
47
|
+
className: linkClassName,
|
|
48
|
+
"aria-label": ariaLabel,
|
|
49
|
+
children: body
|
|
50
|
+
}) : /* @__PURE__ */ jsx("a", { href, className: linkClassName, "aria-label": ariaLabel, children: body }) });
|
|
51
|
+
}
|
|
52
|
+
return /* @__PURE__ */ jsx("div", { ref, className: baseClassName, ...props, children: body });
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
StatTile.displayName = "StatTile";
|
|
56
|
+
|
|
57
|
+
export { StatTile };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { DogAvatarStackDog } from '../DogAvatar/index.mjs';
|
|
3
|
+
|
|
4
|
+
interface ActiveStayCardProps extends Omit<React.HTMLAttributes<HTMLElement>, "children"> {
|
|
5
|
+
statusLabel?: string;
|
|
6
|
+
/** Badge politique chien (ex. "Chien gratuit · max 3"). */
|
|
7
|
+
petBadge?: string | null;
|
|
8
|
+
hotelName: string;
|
|
9
|
+
location?: string | null;
|
|
10
|
+
priceLabel?: string | null;
|
|
11
|
+
/** Note sous le prix (ex. "taxes et frais inclus", "3 nuits"). */
|
|
12
|
+
priceNote?: string | null;
|
|
13
|
+
checkinLabel: string;
|
|
14
|
+
checkoutLabel: string;
|
|
15
|
+
/** Libellé compact mobile (ex. "1 jour · 11/05"). */
|
|
16
|
+
countdownLabel?: string | null;
|
|
17
|
+
dogs?: DogAvatarStackDog[];
|
|
18
|
+
imageUrl?: string | null;
|
|
19
|
+
primaryActionLabel?: string;
|
|
20
|
+
primaryActionHref?: string;
|
|
21
|
+
/** Actions secondaires (desktop) : ex. « Contacter l'hôte ». */
|
|
22
|
+
secondaryActions?: React.ReactNode;
|
|
23
|
+
renderImage?: (props: {
|
|
24
|
+
src: string;
|
|
25
|
+
alt: string;
|
|
26
|
+
className: string;
|
|
27
|
+
}) => React.ReactNode;
|
|
28
|
+
renderLink?: (props: {
|
|
29
|
+
href: string;
|
|
30
|
+
className: string;
|
|
31
|
+
children: React.ReactNode;
|
|
32
|
+
}) => React.ReactNode;
|
|
33
|
+
}
|
|
34
|
+
declare const ActiveStayCard: React.ForwardRefExoticComponent<ActiveStayCardProps & React.RefAttributes<HTMLElement>>;
|
|
35
|
+
|
|
36
|
+
export { ActiveStayCard, type ActiveStayCardProps };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { DogAvatarStackDog } from '../DogAvatar/index.js';
|
|
3
|
+
|
|
4
|
+
interface ActiveStayCardProps extends Omit<React.HTMLAttributes<HTMLElement>, "children"> {
|
|
5
|
+
statusLabel?: string;
|
|
6
|
+
/** Badge politique chien (ex. "Chien gratuit · max 3"). */
|
|
7
|
+
petBadge?: string | null;
|
|
8
|
+
hotelName: string;
|
|
9
|
+
location?: string | null;
|
|
10
|
+
priceLabel?: string | null;
|
|
11
|
+
/** Note sous le prix (ex. "taxes et frais inclus", "3 nuits"). */
|
|
12
|
+
priceNote?: string | null;
|
|
13
|
+
checkinLabel: string;
|
|
14
|
+
checkoutLabel: string;
|
|
15
|
+
/** Libellé compact mobile (ex. "1 jour · 11/05"). */
|
|
16
|
+
countdownLabel?: string | null;
|
|
17
|
+
dogs?: DogAvatarStackDog[];
|
|
18
|
+
imageUrl?: string | null;
|
|
19
|
+
primaryActionLabel?: string;
|
|
20
|
+
primaryActionHref?: string;
|
|
21
|
+
/** Actions secondaires (desktop) : ex. « Contacter l'hôte ». */
|
|
22
|
+
secondaryActions?: React.ReactNode;
|
|
23
|
+
renderImage?: (props: {
|
|
24
|
+
src: string;
|
|
25
|
+
alt: string;
|
|
26
|
+
className: string;
|
|
27
|
+
}) => React.ReactNode;
|
|
28
|
+
renderLink?: (props: {
|
|
29
|
+
href: string;
|
|
30
|
+
className: string;
|
|
31
|
+
children: React.ReactNode;
|
|
32
|
+
}) => React.ReactNode;
|
|
33
|
+
}
|
|
34
|
+
declare const ActiveStayCard: React.ForwardRefExoticComponent<ActiveStayCardProps & React.RefAttributes<HTMLElement>>;
|
|
35
|
+
|
|
36
|
+
export { ActiveStayCard, type ActiveStayCardProps };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkG3LZ32WA_js = require('../../chunk-G3LZ32WA.js');
|
|
4
|
+
require('../../chunk-HB2XJOBZ.js');
|
|
5
|
+
require('../../chunk-ADIDI7AJ.js');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
Object.defineProperty(exports, "ActiveStayCard", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () { return chunkG3LZ32WA_js.ActiveStayCard; }
|
|
12
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
/** Palette déterministe des avatars chiens (décoratif). */
|
|
4
|
+
declare const DOG_AVATAR_COLORS: readonly ["#f27c54", "#00bfb3", "#e0a458", "#c96f4a", "#7ba05b"];
|
|
5
|
+
/** Couleur déterministe à partir du nom (repli quand `color` n'est pas fourni). */
|
|
6
|
+
declare function dogAvatarColor(name: string): string;
|
|
7
|
+
interface DogAvatarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "color"> {
|
|
8
|
+
/** Nom du chien (accessibilité + couleur de repli). */
|
|
9
|
+
name: string;
|
|
10
|
+
/** Couleur du cercle ; sinon dérivée du nom. */
|
|
11
|
+
color?: string;
|
|
12
|
+
/** Diamètre en px (défaut 46). */
|
|
13
|
+
size?: number;
|
|
14
|
+
/** Couleur de l'anneau (bordure), ex. pour les piles superposées. */
|
|
15
|
+
ringColor?: string;
|
|
16
|
+
}
|
|
17
|
+
/** Avatar chien : glyphe blanc sur cercle coloré. */
|
|
18
|
+
declare const DogAvatar: React.ForwardRefExoticComponent<DogAvatarProps & React.RefAttributes<HTMLDivElement>>;
|
|
19
|
+
interface DogAvatarStackDog {
|
|
20
|
+
name: string;
|
|
21
|
+
color?: string;
|
|
22
|
+
}
|
|
23
|
+
interface DogAvatarStackProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
24
|
+
dogs: DogAvatarStackDog[];
|
|
25
|
+
/** Diamètre de chaque avatar (défaut 26). */
|
|
26
|
+
size?: number;
|
|
27
|
+
/** Nombre max affiché avant « +N » (défaut 4). */
|
|
28
|
+
max?: number;
|
|
29
|
+
/** Chevauchement en px (défaut 8). */
|
|
30
|
+
overlap?: number;
|
|
31
|
+
/** Couleur de l'anneau autour de chaque avatar (défaut blanc). */
|
|
32
|
+
ringColor?: string;
|
|
33
|
+
}
|
|
34
|
+
/** Pile d'avatars chiens superposés, avec pastille « +N » si dépassement. */
|
|
35
|
+
declare const DogAvatarStack: React.ForwardRefExoticComponent<DogAvatarStackProps & React.RefAttributes<HTMLDivElement>>;
|
|
36
|
+
|
|
37
|
+
export { DOG_AVATAR_COLORS, DogAvatar, type DogAvatarProps, DogAvatarStack, type DogAvatarStackDog, type DogAvatarStackProps, dogAvatarColor };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
/** Palette déterministe des avatars chiens (décoratif). */
|
|
4
|
+
declare const DOG_AVATAR_COLORS: readonly ["#f27c54", "#00bfb3", "#e0a458", "#c96f4a", "#7ba05b"];
|
|
5
|
+
/** Couleur déterministe à partir du nom (repli quand `color` n'est pas fourni). */
|
|
6
|
+
declare function dogAvatarColor(name: string): string;
|
|
7
|
+
interface DogAvatarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "color"> {
|
|
8
|
+
/** Nom du chien (accessibilité + couleur de repli). */
|
|
9
|
+
name: string;
|
|
10
|
+
/** Couleur du cercle ; sinon dérivée du nom. */
|
|
11
|
+
color?: string;
|
|
12
|
+
/** Diamètre en px (défaut 46). */
|
|
13
|
+
size?: number;
|
|
14
|
+
/** Couleur de l'anneau (bordure), ex. pour les piles superposées. */
|
|
15
|
+
ringColor?: string;
|
|
16
|
+
}
|
|
17
|
+
/** Avatar chien : glyphe blanc sur cercle coloré. */
|
|
18
|
+
declare const DogAvatar: React.ForwardRefExoticComponent<DogAvatarProps & React.RefAttributes<HTMLDivElement>>;
|
|
19
|
+
interface DogAvatarStackDog {
|
|
20
|
+
name: string;
|
|
21
|
+
color?: string;
|
|
22
|
+
}
|
|
23
|
+
interface DogAvatarStackProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
24
|
+
dogs: DogAvatarStackDog[];
|
|
25
|
+
/** Diamètre de chaque avatar (défaut 26). */
|
|
26
|
+
size?: number;
|
|
27
|
+
/** Nombre max affiché avant « +N » (défaut 4). */
|
|
28
|
+
max?: number;
|
|
29
|
+
/** Chevauchement en px (défaut 8). */
|
|
30
|
+
overlap?: number;
|
|
31
|
+
/** Couleur de l'anneau autour de chaque avatar (défaut blanc). */
|
|
32
|
+
ringColor?: string;
|
|
33
|
+
}
|
|
34
|
+
/** Pile d'avatars chiens superposés, avec pastille « +N » si dépassement. */
|
|
35
|
+
declare const DogAvatarStack: React.ForwardRefExoticComponent<DogAvatarStackProps & React.RefAttributes<HTMLDivElement>>;
|
|
36
|
+
|
|
37
|
+
export { DOG_AVATAR_COLORS, DogAvatar, type DogAvatarProps, DogAvatarStack, type DogAvatarStackDog, type DogAvatarStackProps, dogAvatarColor };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('../../chunk-VNURXHKK.js');
|
|
4
|
+
var chunkHB2XJOBZ_js = require('../../chunk-HB2XJOBZ.js');
|
|
5
|
+
require('../../chunk-ADIDI7AJ.js');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
Object.defineProperty(exports, "DOG_AVATAR_COLORS", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () { return chunkHB2XJOBZ_js.DOG_AVATAR_COLORS; }
|
|
12
|
+
});
|
|
13
|
+
Object.defineProperty(exports, "DogAvatar", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return chunkHB2XJOBZ_js.DogAvatar; }
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(exports, "DogAvatarStack", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () { return chunkHB2XJOBZ_js.DogAvatarStack; }
|
|
20
|
+
});
|
|
21
|
+
Object.defineProperty(exports, "dogAvatarColor", {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () { return chunkHB2XJOBZ_js.dogAvatarColor; }
|
|
24
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
interface ImpactCardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
badgeLabel?: string;
|
|
5
|
+
/** Valeur mise en avant (ex. "24 € reversés"). */
|
|
6
|
+
amountLabel: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
}
|
|
9
|
+
/** Carte « impact » sombre : engagement solidaire lié aux réservations. */
|
|
10
|
+
declare const ImpactCard: React.ForwardRefExoticComponent<ImpactCardProps & React.RefAttributes<HTMLDivElement>>;
|
|
11
|
+
|
|
12
|
+
export { ImpactCard, type ImpactCardProps };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
interface ImpactCardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
badgeLabel?: string;
|
|
5
|
+
/** Valeur mise en avant (ex. "24 € reversés"). */
|
|
6
|
+
amountLabel: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
}
|
|
9
|
+
/** Carte « impact » sombre : engagement solidaire lié aux réservations. */
|
|
10
|
+
declare const ImpactCard: React.ForwardRefExoticComponent<ImpactCardProps & React.RefAttributes<HTMLDivElement>>;
|
|
11
|
+
|
|
12
|
+
export { ImpactCard, type ImpactCardProps };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
interface SearchWidgetProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
title?: string;
|
|
5
|
+
destination?: string;
|
|
6
|
+
arrivalLabel?: string;
|
|
7
|
+
departureLabel?: string;
|
|
8
|
+
travelersLabel?: string;
|
|
9
|
+
actionLabel?: string;
|
|
10
|
+
href?: string;
|
|
11
|
+
renderLink?: (props: {
|
|
12
|
+
href: string;
|
|
13
|
+
className: string;
|
|
14
|
+
children: React.ReactNode;
|
|
15
|
+
}) => React.ReactNode;
|
|
16
|
+
}
|
|
17
|
+
/** Carte de recherche compacte du dashboard (renvoie vers la recherche). */
|
|
18
|
+
declare const SearchWidget: React.ForwardRefExoticComponent<SearchWidgetProps & React.RefAttributes<HTMLDivElement>>;
|
|
19
|
+
|
|
20
|
+
export { SearchWidget, type SearchWidgetProps };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
interface SearchWidgetProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
title?: string;
|
|
5
|
+
destination?: string;
|
|
6
|
+
arrivalLabel?: string;
|
|
7
|
+
departureLabel?: string;
|
|
8
|
+
travelersLabel?: string;
|
|
9
|
+
actionLabel?: string;
|
|
10
|
+
href?: string;
|
|
11
|
+
renderLink?: (props: {
|
|
12
|
+
href: string;
|
|
13
|
+
className: string;
|
|
14
|
+
children: React.ReactNode;
|
|
15
|
+
}) => React.ReactNode;
|
|
16
|
+
}
|
|
17
|
+
/** Carte de recherche compacte du dashboard (renvoie vers la recherche). */
|
|
18
|
+
declare const SearchWidget: React.ForwardRefExoticComponent<SearchWidgetProps & React.RefAttributes<HTMLDivElement>>;
|
|
19
|
+
|
|
20
|
+
export { SearchWidget, type SearchWidgetProps };
|