@dododog/ui 0.8.0 → 0.9.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-S26SN3WK.js → chunk-3JM2X4I2.js} +44 -40
- package/dist/{chunk-QTW2FJUJ.mjs → chunk-BFGRWOQM.mjs} +44 -40
- package/dist/chunk-P2SGBTKS.mjs +138 -0
- package/dist/chunk-ZCQJN4IT.js +160 -0
- package/dist/components/FloatingDock/index.js +2 -2
- package/dist/components/FloatingDock/index.mjs +1 -1
- package/dist/components/RoomTypeCard/index.js +3 -3
- package/dist/components/RoomTypeCard/index.mjs +1 -1
- package/dist/index.js +38 -38
- package/dist/index.mjs +9 -9
- package/package.json +11 -11
- package/dist/chunk-PBDPZTHK.mjs +0 -53
- package/dist/chunk-S732LTPT.js +0 -75
- package/dist/components/Accordion/index.d.mts +0 -24
- package/dist/components/Accordion/index.d.ts +0 -24
- package/dist/components/Alert/index.d.mts +0 -40
- package/dist/components/Alert/index.d.ts +0 -40
- package/dist/components/AnchorTabs/index.d.mts +0 -59
- package/dist/components/AnchorTabs/index.d.ts +0 -59
- package/dist/components/Autocomplete/index.d.mts +0 -27
- package/dist/components/Autocomplete/index.d.ts +0 -27
- package/dist/components/Avatar/index.d.mts +0 -13
- package/dist/components/Avatar/index.d.ts +0 -13
- package/dist/components/Badge/index.d.mts +0 -13
- package/dist/components/Badge/index.d.ts +0 -13
- package/dist/components/Banner/index.d.mts +0 -19
- package/dist/components/Banner/index.d.ts +0 -19
- package/dist/components/BottomNavBar/index.d.mts +0 -17
- package/dist/components/BottomNavBar/index.d.ts +0 -17
- package/dist/components/Breadcrumb/index.d.mts +0 -23
- package/dist/components/Breadcrumb/index.d.ts +0 -23
- package/dist/components/Button/index.d.mts +0 -17
- package/dist/components/Button/index.d.ts +0 -17
- package/dist/components/Card/index.d.mts +0 -30
- package/dist/components/Card/index.d.ts +0 -30
- package/dist/components/CardList/index.d.mts +0 -30
- package/dist/components/CardList/index.d.ts +0 -30
- package/dist/components/Carousel/index.d.mts +0 -15
- package/dist/components/Carousel/index.d.ts +0 -15
- package/dist/components/Checkbox/index.d.mts +0 -16
- package/dist/components/Checkbox/index.d.ts +0 -16
- package/dist/components/Counter/index.d.mts +0 -14
- package/dist/components/Counter/index.d.ts +0 -14
- package/dist/components/DateRangePicker/index.d.mts +0 -26
- package/dist/components/DateRangePicker/index.d.ts +0 -26
- package/dist/components/DetailList/index.d.mts +0 -23
- package/dist/components/DetailList/index.d.ts +0 -23
- package/dist/components/Divider/index.d.mts +0 -10
- package/dist/components/Divider/index.d.ts +0 -10
- package/dist/components/Drawer/index.d.mts +0 -13
- package/dist/components/Drawer/index.d.ts +0 -13
- package/dist/components/DropdownMenu/index.d.mts +0 -19
- package/dist/components/DropdownMenu/index.d.ts +0 -19
- package/dist/components/DualRangeSlider/index.d.mts +0 -26
- package/dist/components/DualRangeSlider/index.d.ts +0 -26
- package/dist/components/EmptyState/index.d.mts +0 -12
- package/dist/components/EmptyState/index.d.ts +0 -12
- package/dist/components/ErrorBoundary/index.d.mts +0 -21
- package/dist/components/ErrorBoundary/index.d.ts +0 -21
- package/dist/components/FilterAccordion/index.d.mts +0 -16
- package/dist/components/FilterAccordion/index.d.ts +0 -16
- package/dist/components/FilterPill/index.d.mts +0 -19
- package/dist/components/FilterPill/index.d.ts +0 -19
- package/dist/components/FloatingDock/index.d.mts +0 -44
- package/dist/components/FloatingDock/index.d.ts +0 -44
- package/dist/components/Footer/index.d.mts +0 -46
- package/dist/components/Footer/index.d.ts +0 -46
- package/dist/components/GuestPicker/index.d.mts +0 -31
- package/dist/components/GuestPicker/index.d.ts +0 -31
- package/dist/components/Header/index.d.mts +0 -37
- package/dist/components/Header/index.d.ts +0 -37
- package/dist/components/HotelCard/index.d.mts +0 -45
- package/dist/components/HotelCard/index.d.ts +0 -45
- package/dist/components/IconBadge/index.d.mts +0 -14
- package/dist/components/IconBadge/index.d.ts +0 -14
- package/dist/components/ImageGallery/index.d.mts +0 -16
- package/dist/components/ImageGallery/index.d.ts +0 -16
- package/dist/components/ImageWithFallback/index.d.mts +0 -17
- package/dist/components/ImageWithFallback/index.d.ts +0 -17
- package/dist/components/Input/index.d.mts +0 -18
- package/dist/components/Input/index.d.ts +0 -18
- package/dist/components/Lightbox/index.d.mts +0 -15
- package/dist/components/Lightbox/index.d.ts +0 -15
- package/dist/components/LinkCard/index.d.mts +0 -12
- package/dist/components/LinkCard/index.d.ts +0 -12
- package/dist/components/LoadingOverlay/index.d.mts +0 -12
- package/dist/components/LoadingOverlay/index.d.ts +0 -12
- package/dist/components/MegaMenu/index.d.mts +0 -52
- package/dist/components/MegaMenu/index.d.ts +0 -52
- package/dist/components/MobileMenu/index.d.mts +0 -35
- package/dist/components/MobileMenu/index.d.ts +0 -35
- package/dist/components/Modal/index.d.mts +0 -12
- package/dist/components/Modal/index.d.ts +0 -12
- package/dist/components/Pagination/index.d.mts +0 -13
- package/dist/components/Pagination/index.d.ts +0 -13
- package/dist/components/PriceDisplay/index.d.mts +0 -14
- package/dist/components/PriceDisplay/index.d.ts +0 -14
- package/dist/components/ProgressBar/index.d.mts +0 -19
- package/dist/components/ProgressBar/index.d.ts +0 -19
- package/dist/components/PromoBanner/index.d.mts +0 -39
- package/dist/components/PromoBanner/index.d.ts +0 -39
- package/dist/components/RadioGroup/index.d.mts +0 -21
- package/dist/components/RadioGroup/index.d.ts +0 -21
- package/dist/components/Rating/index.d.mts +0 -12
- package/dist/components/Rating/index.d.ts +0 -12
- package/dist/components/RoomTypeCard/index.d.mts +0 -102
- package/dist/components/RoomTypeCard/index.d.ts +0 -102
- package/dist/components/SearchBar/index.d.mts +0 -20
- package/dist/components/SearchBar/index.d.ts +0 -20
- package/dist/components/SegmentedControl/index.d.mts +0 -15
- package/dist/components/SegmentedControl/index.d.ts +0 -15
- package/dist/components/Select/index.d.mts +0 -26
- package/dist/components/Select/index.d.ts +0 -26
- package/dist/components/Sidebar/index.d.mts +0 -19
- package/dist/components/Sidebar/index.d.ts +0 -19
- package/dist/components/SignInCallout/index.d.mts +0 -26
- package/dist/components/SignInCallout/index.d.ts +0 -26
- package/dist/components/Skeleton/index.d.mts +0 -31
- package/dist/components/Skeleton/index.d.ts +0 -31
- package/dist/components/Spinner/index.d.mts +0 -13
- package/dist/components/Spinner/index.d.ts +0 -13
- package/dist/components/StatCard/index.d.mts +0 -15
- package/dist/components/StatCard/index.d.ts +0 -15
- package/dist/components/StatusBadge/index.d.mts +0 -16
- package/dist/components/StatusBadge/index.d.ts +0 -16
- package/dist/components/Stepper/index.d.mts +0 -16
- package/dist/components/Stepper/index.d.ts +0 -16
- package/dist/components/Switch/index.d.mts +0 -22
- package/dist/components/Switch/index.d.ts +0 -22
- package/dist/components/Tabs/index.d.mts +0 -18
- package/dist/components/Tabs/index.d.ts +0 -18
- package/dist/components/Tag/index.d.mts +0 -15
- package/dist/components/Tag/index.d.ts +0 -15
- package/dist/components/Textarea/index.d.mts +0 -16
- package/dist/components/Textarea/index.d.ts +0 -16
- package/dist/components/Toast/index.d.mts +0 -16
- package/dist/components/Toast/index.d.ts +0 -16
- package/dist/components/Toggle/index.d.mts +0 -13
- package/dist/components/Toggle/index.d.ts +0 -13
- package/dist/components/Tooltip/index.d.mts +0 -11
- package/dist/components/Tooltip/index.d.ts +0 -11
- package/dist/components/VerticalMarquee/index.d.mts +0 -16
- package/dist/components/VerticalMarquee/index.d.ts +0 -16
- package/dist/index.d.mts +0 -189
- package/dist/index.d.ts +0 -189
- package/dist/tailwind-preset.d.mts +0 -170
- package/dist/tailwind-preset.d.ts +0 -170
- package/dist/tokens/index.d.mts +0 -219
- package/dist/tokens/index.d.ts +0 -219
- package/dist/typography-BUlhEnfy.d.mts +0 -16
- package/dist/typography-BUlhEnfy.d.ts +0 -16
- package/dist/utils/index.d.mts +0 -5
- package/dist/utils/index.d.ts +0 -5
|
@@ -89,20 +89,20 @@ function formatPrice(price) {
|
|
|
89
89
|
}
|
|
90
90
|
function CancellationChip({ cancellation }) {
|
|
91
91
|
if (cancellation.kind === "free") {
|
|
92
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-
|
|
93
|
-
/* @__PURE__ */ jsxRuntime.jsx(CheckIcon, { className: "w-3.5 h-3.5 flex-shrink-0" }),
|
|
94
|
-
cancellation.label
|
|
92
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-start gap-1.5 text-xs font-medium text-emerald-700", children: [
|
|
93
|
+
/* @__PURE__ */ jsxRuntime.jsx(CheckIcon, { className: "w-3.5 h-3.5 mt-[3px] flex-shrink-0" }),
|
|
94
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: cancellation.label })
|
|
95
95
|
] });
|
|
96
96
|
}
|
|
97
97
|
if (cancellation.kind === "partial") {
|
|
98
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-
|
|
99
|
-
/* @__PURE__ */ jsxRuntime.jsx(CheckIcon, { className: "w-3.5 h-3.5 flex-shrink-0" }),
|
|
100
|
-
cancellation.label
|
|
98
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-start gap-1.5 text-xs font-medium text-amber-700", children: [
|
|
99
|
+
/* @__PURE__ */ jsxRuntime.jsx(CheckIcon, { className: "w-3.5 h-3.5 mt-[3px] flex-shrink-0" }),
|
|
100
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: cancellation.label })
|
|
101
101
|
] });
|
|
102
102
|
}
|
|
103
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-
|
|
104
|
-
/* @__PURE__ */ jsxRuntime.jsx(NoRefundIcon, { className: "w-3.5 h-3.5 flex-shrink-0" }),
|
|
105
|
-
cancellation.label
|
|
103
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-start gap-1.5 text-xs text-text-muted", children: [
|
|
104
|
+
/* @__PURE__ */ jsxRuntime.jsx(NoRefundIcon, { className: "w-3.5 h-3.5 mt-[3px] flex-shrink-0" }),
|
|
105
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: cancellation.label })
|
|
106
106
|
] });
|
|
107
107
|
}
|
|
108
108
|
function RateRow({
|
|
@@ -120,44 +120,48 @@ function RateRow({
|
|
|
120
120
|
"div",
|
|
121
121
|
{
|
|
122
122
|
className: chunkADIDI7AJ_js.cn(
|
|
123
|
-
"
|
|
123
|
+
"py-3",
|
|
124
124
|
withTopBorder && "border-t border-dashed border-sand-dark"
|
|
125
125
|
),
|
|
126
126
|
children: [
|
|
127
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "
|
|
127
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
|
|
128
128
|
rate.mealLabel && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[13px] font-medium text-primary", children: rate.mealLabel }),
|
|
129
129
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(CancellationChip, { cancellation: rate.cancellation }) }),
|
|
130
|
-
rate.dogFeeLabel && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1 inline-flex items-
|
|
131
|
-
/* @__PURE__ */ jsxRuntime.jsx(DogIcon, { className: "w-3.5 h-3.5 flex-shrink-0" }),
|
|
132
|
-
rate.dogFeeLabel
|
|
130
|
+
rate.dogFeeLabel && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1 inline-flex items-start gap-1.5 text-xs font-medium text-secondary", children: [
|
|
131
|
+
/* @__PURE__ */ jsxRuntime.jsx(DogIcon, { className: "w-3.5 h-3.5 mt-[1px] flex-shrink-0" }),
|
|
132
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: rate.dogFeeLabel })
|
|
133
133
|
] })
|
|
134
134
|
] }),
|
|
135
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
135
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2.5 flex items-end justify-between gap-3", children: [
|
|
136
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
|
|
137
|
+
rate.originalTotal && rate.originalTotal > rate.totalPrice && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[11px] text-text-muted line-through leading-none", children: formatPrice(rate.originalTotal) }),
|
|
138
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-heading text-lg font-bold text-primary leading-tight", children: formatPrice(rate.totalPrice) }),
|
|
139
|
+
rate.totalLabel && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 text-[11px] leading-snug text-text-muted", children: rate.totalLabel })
|
|
140
|
+
] }),
|
|
141
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 flex-col items-end", children: [
|
|
142
|
+
showReserveCta ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
143
|
+
"button",
|
|
144
|
+
{
|
|
145
|
+
type: "button",
|
|
146
|
+
onClick: () => onReserve?.(rate.id),
|
|
147
|
+
className: "text-[13px] font-semibold px-5 py-1.5 rounded-full bg-secondary text-white transition-colors hover:bg-secondary-dark focus-visible:ring-2 focus-visible:ring-secondary focus-visible:ring-offset-1",
|
|
148
|
+
children: reserveLabel
|
|
149
|
+
}
|
|
150
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
151
|
+
"button",
|
|
152
|
+
{
|
|
153
|
+
type: "button",
|
|
154
|
+
onClick: () => onSelect?.(rate.id),
|
|
155
|
+
"aria-pressed": selected,
|
|
156
|
+
className: chunkADIDI7AJ_js.cn(
|
|
157
|
+
"text-[13px] font-medium px-4 py-1.5 rounded-full transition-colors",
|
|
158
|
+
selected ? "bg-secondary text-white" : "border border-secondary text-secondary hover:bg-secondary hover:text-white"
|
|
159
|
+
),
|
|
160
|
+
children: selected ? "S\xE9lectionn\xE9" : selectLabel
|
|
161
|
+
}
|
|
162
|
+
),
|
|
163
|
+
showReserveCta && ctaNote && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 max-w-[10rem] text-right text-[11px] leading-tight text-text-muted", children: ctaNote })
|
|
164
|
+
] })
|
|
161
165
|
] })
|
|
162
166
|
]
|
|
163
167
|
}
|
|
@@ -67,20 +67,20 @@ function formatPrice(price) {
|
|
|
67
67
|
}
|
|
68
68
|
function CancellationChip({ cancellation }) {
|
|
69
69
|
if (cancellation.kind === "free") {
|
|
70
|
-
return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-
|
|
71
|
-
/* @__PURE__ */ jsx(CheckIcon, { className: "w-3.5 h-3.5 flex-shrink-0" }),
|
|
72
|
-
cancellation.label
|
|
70
|
+
return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-start gap-1.5 text-xs font-medium text-emerald-700", children: [
|
|
71
|
+
/* @__PURE__ */ jsx(CheckIcon, { className: "w-3.5 h-3.5 mt-[3px] flex-shrink-0" }),
|
|
72
|
+
/* @__PURE__ */ jsx("span", { children: cancellation.label })
|
|
73
73
|
] });
|
|
74
74
|
}
|
|
75
75
|
if (cancellation.kind === "partial") {
|
|
76
|
-
return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-
|
|
77
|
-
/* @__PURE__ */ jsx(CheckIcon, { className: "w-3.5 h-3.5 flex-shrink-0" }),
|
|
78
|
-
cancellation.label
|
|
76
|
+
return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-start gap-1.5 text-xs font-medium text-amber-700", children: [
|
|
77
|
+
/* @__PURE__ */ jsx(CheckIcon, { className: "w-3.5 h-3.5 mt-[3px] flex-shrink-0" }),
|
|
78
|
+
/* @__PURE__ */ jsx("span", { children: cancellation.label })
|
|
79
79
|
] });
|
|
80
80
|
}
|
|
81
|
-
return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-
|
|
82
|
-
/* @__PURE__ */ jsx(NoRefundIcon, { className: "w-3.5 h-3.5 flex-shrink-0" }),
|
|
83
|
-
cancellation.label
|
|
81
|
+
return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-start gap-1.5 text-xs text-text-muted", children: [
|
|
82
|
+
/* @__PURE__ */ jsx(NoRefundIcon, { className: "w-3.5 h-3.5 mt-[3px] flex-shrink-0" }),
|
|
83
|
+
/* @__PURE__ */ jsx("span", { children: cancellation.label })
|
|
84
84
|
] });
|
|
85
85
|
}
|
|
86
86
|
function RateRow({
|
|
@@ -98,44 +98,48 @@ function RateRow({
|
|
|
98
98
|
"div",
|
|
99
99
|
{
|
|
100
100
|
className: cn(
|
|
101
|
-
"
|
|
101
|
+
"py-3",
|
|
102
102
|
withTopBorder && "border-t border-dashed border-sand-dark"
|
|
103
103
|
),
|
|
104
104
|
children: [
|
|
105
|
-
/* @__PURE__ */ jsxs("div", { className: "
|
|
105
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
106
106
|
rate.mealLabel && /* @__PURE__ */ jsx("div", { className: "text-[13px] font-medium text-primary", children: rate.mealLabel }),
|
|
107
107
|
/* @__PURE__ */ jsx("div", { className: "mt-0.5", children: /* @__PURE__ */ jsx(CancellationChip, { cancellation: rate.cancellation }) }),
|
|
108
|
-
rate.dogFeeLabel && /* @__PURE__ */ jsxs("div", { className: "mt-1 inline-flex items-
|
|
109
|
-
/* @__PURE__ */ jsx(DogIcon, { className: "w-3.5 h-3.5 flex-shrink-0" }),
|
|
110
|
-
rate.dogFeeLabel
|
|
108
|
+
rate.dogFeeLabel && /* @__PURE__ */ jsxs("div", { className: "mt-1 inline-flex items-start gap-1.5 text-xs font-medium text-secondary", children: [
|
|
109
|
+
/* @__PURE__ */ jsx(DogIcon, { className: "w-3.5 h-3.5 mt-[1px] flex-shrink-0" }),
|
|
110
|
+
/* @__PURE__ */ jsx("span", { children: rate.dogFeeLabel })
|
|
111
111
|
] })
|
|
112
112
|
] }),
|
|
113
|
-
/* @__PURE__ */ jsxs("div", { className: "
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
113
|
+
/* @__PURE__ */ jsxs("div", { className: "mt-2.5 flex items-end justify-between gap-3", children: [
|
|
114
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
115
|
+
rate.originalTotal && rate.originalTotal > rate.totalPrice && /* @__PURE__ */ jsx("div", { className: "text-[11px] text-text-muted line-through leading-none", children: formatPrice(rate.originalTotal) }),
|
|
116
|
+
/* @__PURE__ */ jsx("div", { className: "font-heading text-lg font-bold text-primary leading-tight", children: formatPrice(rate.totalPrice) }),
|
|
117
|
+
rate.totalLabel && /* @__PURE__ */ jsx("div", { className: "mt-0.5 text-[11px] leading-snug text-text-muted", children: rate.totalLabel })
|
|
118
|
+
] }),
|
|
119
|
+
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 flex-col items-end", children: [
|
|
120
|
+
showReserveCta ? /* @__PURE__ */ jsx(
|
|
121
|
+
"button",
|
|
122
|
+
{
|
|
123
|
+
type: "button",
|
|
124
|
+
onClick: () => onReserve?.(rate.id),
|
|
125
|
+
className: "text-[13px] font-semibold px-5 py-1.5 rounded-full bg-secondary text-white transition-colors hover:bg-secondary-dark focus-visible:ring-2 focus-visible:ring-secondary focus-visible:ring-offset-1",
|
|
126
|
+
children: reserveLabel
|
|
127
|
+
}
|
|
128
|
+
) : /* @__PURE__ */ jsx(
|
|
129
|
+
"button",
|
|
130
|
+
{
|
|
131
|
+
type: "button",
|
|
132
|
+
onClick: () => onSelect?.(rate.id),
|
|
133
|
+
"aria-pressed": selected,
|
|
134
|
+
className: cn(
|
|
135
|
+
"text-[13px] font-medium px-4 py-1.5 rounded-full transition-colors",
|
|
136
|
+
selected ? "bg-secondary text-white" : "border border-secondary text-secondary hover:bg-secondary hover:text-white"
|
|
137
|
+
),
|
|
138
|
+
children: selected ? "S\xE9lectionn\xE9" : selectLabel
|
|
139
|
+
}
|
|
140
|
+
),
|
|
141
|
+
showReserveCta && ctaNote && /* @__PURE__ */ jsx("div", { className: "mt-1 max-w-[10rem] text-right text-[11px] leading-tight text-text-muted", children: ctaNote })
|
|
142
|
+
] })
|
|
139
143
|
] })
|
|
140
144
|
]
|
|
141
145
|
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { cn } from './chunk-IMKLN273.mjs';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var FloatingDock = React.forwardRef(
|
|
6
|
+
({ items, className, ariaLabel = "Navigation rapide", onNavigate }, ref) => {
|
|
7
|
+
const [openKey, setOpenKey] = React.useState(null);
|
|
8
|
+
const navRef = React.useRef(null);
|
|
9
|
+
const setNavRef = React.useCallback(
|
|
10
|
+
(node) => {
|
|
11
|
+
navRef.current = node;
|
|
12
|
+
if (typeof ref === "function") ref(node);
|
|
13
|
+
else if (ref) ref.current = node;
|
|
14
|
+
},
|
|
15
|
+
[ref]
|
|
16
|
+
);
|
|
17
|
+
React.useEffect(() => {
|
|
18
|
+
if (!openKey) return;
|
|
19
|
+
const onPointerDown = (e) => {
|
|
20
|
+
if (navRef.current && !navRef.current.contains(e.target)) {
|
|
21
|
+
setOpenKey(null);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const onKeyDown = (e) => {
|
|
25
|
+
if (e.key === "Escape") setOpenKey(null);
|
|
26
|
+
};
|
|
27
|
+
document.addEventListener("pointerdown", onPointerDown);
|
|
28
|
+
document.addEventListener("keydown", onKeyDown);
|
|
29
|
+
return () => {
|
|
30
|
+
document.removeEventListener("pointerdown", onPointerDown);
|
|
31
|
+
document.removeEventListener("keydown", onKeyDown);
|
|
32
|
+
};
|
|
33
|
+
}, [openKey]);
|
|
34
|
+
return /* @__PURE__ */ jsx(
|
|
35
|
+
"nav",
|
|
36
|
+
{
|
|
37
|
+
ref: setNavRef,
|
|
38
|
+
"aria-label": ariaLabel,
|
|
39
|
+
className: cn(
|
|
40
|
+
"inline-flex items-center gap-1 rounded-full border border-black/5 bg-white/95 px-2 py-2 shadow-[0_8px_30px_rgba(0,0,0,0.12)] backdrop-blur",
|
|
41
|
+
className
|
|
42
|
+
),
|
|
43
|
+
children: items.map((item) => {
|
|
44
|
+
const subItems = item.menuItems ?? [];
|
|
45
|
+
const hasMenu = subItems.length > 0;
|
|
46
|
+
const isOpen = openKey === item.key;
|
|
47
|
+
const content = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
48
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0", "aria-hidden": "true", children: item.icon }),
|
|
49
|
+
/* @__PURE__ */ jsx(
|
|
50
|
+
"span",
|
|
51
|
+
{
|
|
52
|
+
className: cn(
|
|
53
|
+
"overflow-hidden whitespace-nowrap text-sm font-medium transition-all duration-300",
|
|
54
|
+
item.isActive ? "ml-2 max-w-[8rem] opacity-100" : "ml-0 max-w-0 opacity-0"
|
|
55
|
+
),
|
|
56
|
+
children: item.label
|
|
57
|
+
}
|
|
58
|
+
)
|
|
59
|
+
] });
|
|
60
|
+
const triggerClass = cn(
|
|
61
|
+
"flex min-h-[44px] items-center justify-center rounded-full outline-none transition-colors focus-visible:ring-2 focus-visible:ring-secondary focus-visible:ring-offset-2",
|
|
62
|
+
item.isActive ? "bg-secondary px-4 text-white" : "w-11 text-primary/70 hover:bg-secondary/5 hover:text-secondary"
|
|
63
|
+
);
|
|
64
|
+
if (hasMenu) {
|
|
65
|
+
return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
66
|
+
isOpen && /* @__PURE__ */ jsx(
|
|
67
|
+
"div",
|
|
68
|
+
{
|
|
69
|
+
role: "menu",
|
|
70
|
+
"aria-label": item.label,
|
|
71
|
+
className: "absolute bottom-full left-1/2 z-10 mb-3 w-56 -translate-x-1/2 overflow-hidden rounded-2xl border border-black/5 bg-white shadow-[0_8px_30px_rgba(0,0,0,0.18)]",
|
|
72
|
+
children: subItems.map((sub) => /* @__PURE__ */ jsxs(
|
|
73
|
+
"a",
|
|
74
|
+
{
|
|
75
|
+
href: sub.href,
|
|
76
|
+
role: "menuitem",
|
|
77
|
+
"aria-current": sub.isActive ? "page" : void 0,
|
|
78
|
+
onClick: (event) => {
|
|
79
|
+
if (onNavigate) {
|
|
80
|
+
event.preventDefault();
|
|
81
|
+
onNavigate(sub);
|
|
82
|
+
}
|
|
83
|
+
setOpenKey(null);
|
|
84
|
+
},
|
|
85
|
+
className: cn(
|
|
86
|
+
"flex items-center gap-3 px-4 py-3 text-sm outline-none transition-colors focus-visible:bg-secondary/10",
|
|
87
|
+
sub.isActive ? "bg-secondary/10 font-semibold text-secondary" : "text-primary/80 hover:bg-secondary/5 hover:text-secondary"
|
|
88
|
+
),
|
|
89
|
+
children: [
|
|
90
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0", "aria-hidden": "true", children: sub.icon }),
|
|
91
|
+
/* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: sub.label })
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
sub.key
|
|
95
|
+
))
|
|
96
|
+
}
|
|
97
|
+
),
|
|
98
|
+
/* @__PURE__ */ jsx(
|
|
99
|
+
"button",
|
|
100
|
+
{
|
|
101
|
+
type: "button",
|
|
102
|
+
"aria-label": item.label,
|
|
103
|
+
"aria-haspopup": "menu",
|
|
104
|
+
"aria-expanded": isOpen,
|
|
105
|
+
title: item.label,
|
|
106
|
+
onClick: () => {
|
|
107
|
+
setOpenKey(isOpen ? null : item.key);
|
|
108
|
+
},
|
|
109
|
+
className: triggerClass,
|
|
110
|
+
children: content
|
|
111
|
+
}
|
|
112
|
+
)
|
|
113
|
+
] }, item.key);
|
|
114
|
+
}
|
|
115
|
+
return /* @__PURE__ */ jsx(
|
|
116
|
+
"a",
|
|
117
|
+
{
|
|
118
|
+
href: item.href,
|
|
119
|
+
"aria-label": item.label,
|
|
120
|
+
"aria-current": item.isActive ? "page" : void 0,
|
|
121
|
+
title: item.label,
|
|
122
|
+
onClick: onNavigate ? (event) => {
|
|
123
|
+
event.preventDefault();
|
|
124
|
+
onNavigate(item);
|
|
125
|
+
} : void 0,
|
|
126
|
+
className: triggerClass,
|
|
127
|
+
children: content
|
|
128
|
+
},
|
|
129
|
+
item.key
|
|
130
|
+
);
|
|
131
|
+
})
|
|
132
|
+
}
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
FloatingDock.displayName = "FloatingDock";
|
|
137
|
+
|
|
138
|
+
export { FloatingDock };
|
|
@@ -0,0 +1,160 @@
|
|
|
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 FloatingDock = React__namespace.forwardRef(
|
|
28
|
+
({ items, className, ariaLabel = "Navigation rapide", onNavigate }, ref) => {
|
|
29
|
+
const [openKey, setOpenKey] = React__namespace.useState(null);
|
|
30
|
+
const navRef = React__namespace.useRef(null);
|
|
31
|
+
const setNavRef = React__namespace.useCallback(
|
|
32
|
+
(node) => {
|
|
33
|
+
navRef.current = node;
|
|
34
|
+
if (typeof ref === "function") ref(node);
|
|
35
|
+
else if (ref) ref.current = node;
|
|
36
|
+
},
|
|
37
|
+
[ref]
|
|
38
|
+
);
|
|
39
|
+
React__namespace.useEffect(() => {
|
|
40
|
+
if (!openKey) return;
|
|
41
|
+
const onPointerDown = (e) => {
|
|
42
|
+
if (navRef.current && !navRef.current.contains(e.target)) {
|
|
43
|
+
setOpenKey(null);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const onKeyDown = (e) => {
|
|
47
|
+
if (e.key === "Escape") setOpenKey(null);
|
|
48
|
+
};
|
|
49
|
+
document.addEventListener("pointerdown", onPointerDown);
|
|
50
|
+
document.addEventListener("keydown", onKeyDown);
|
|
51
|
+
return () => {
|
|
52
|
+
document.removeEventListener("pointerdown", onPointerDown);
|
|
53
|
+
document.removeEventListener("keydown", onKeyDown);
|
|
54
|
+
};
|
|
55
|
+
}, [openKey]);
|
|
56
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
57
|
+
"nav",
|
|
58
|
+
{
|
|
59
|
+
ref: setNavRef,
|
|
60
|
+
"aria-label": ariaLabel,
|
|
61
|
+
className: chunkADIDI7AJ_js.cn(
|
|
62
|
+
"inline-flex items-center gap-1 rounded-full border border-black/5 bg-white/95 px-2 py-2 shadow-[0_8px_30px_rgba(0,0,0,0.12)] backdrop-blur",
|
|
63
|
+
className
|
|
64
|
+
),
|
|
65
|
+
children: items.map((item) => {
|
|
66
|
+
const subItems = item.menuItems ?? [];
|
|
67
|
+
const hasMenu = subItems.length > 0;
|
|
68
|
+
const isOpen = openKey === item.key;
|
|
69
|
+
const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
70
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", "aria-hidden": "true", children: item.icon }),
|
|
71
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
72
|
+
"span",
|
|
73
|
+
{
|
|
74
|
+
className: chunkADIDI7AJ_js.cn(
|
|
75
|
+
"overflow-hidden whitespace-nowrap text-sm font-medium transition-all duration-300",
|
|
76
|
+
item.isActive ? "ml-2 max-w-[8rem] opacity-100" : "ml-0 max-w-0 opacity-0"
|
|
77
|
+
),
|
|
78
|
+
children: item.label
|
|
79
|
+
}
|
|
80
|
+
)
|
|
81
|
+
] });
|
|
82
|
+
const triggerClass = chunkADIDI7AJ_js.cn(
|
|
83
|
+
"flex min-h-[44px] items-center justify-center rounded-full outline-none transition-colors focus-visible:ring-2 focus-visible:ring-secondary focus-visible:ring-offset-2",
|
|
84
|
+
item.isActive ? "bg-secondary px-4 text-white" : "w-11 text-primary/70 hover:bg-secondary/5 hover:text-secondary"
|
|
85
|
+
);
|
|
86
|
+
if (hasMenu) {
|
|
87
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
88
|
+
isOpen && /* @__PURE__ */ jsxRuntime.jsx(
|
|
89
|
+
"div",
|
|
90
|
+
{
|
|
91
|
+
role: "menu",
|
|
92
|
+
"aria-label": item.label,
|
|
93
|
+
className: "absolute bottom-full left-1/2 z-10 mb-3 w-56 -translate-x-1/2 overflow-hidden rounded-2xl border border-black/5 bg-white shadow-[0_8px_30px_rgba(0,0,0,0.18)]",
|
|
94
|
+
children: subItems.map((sub) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
95
|
+
"a",
|
|
96
|
+
{
|
|
97
|
+
href: sub.href,
|
|
98
|
+
role: "menuitem",
|
|
99
|
+
"aria-current": sub.isActive ? "page" : void 0,
|
|
100
|
+
onClick: (event) => {
|
|
101
|
+
if (onNavigate) {
|
|
102
|
+
event.preventDefault();
|
|
103
|
+
onNavigate(sub);
|
|
104
|
+
}
|
|
105
|
+
setOpenKey(null);
|
|
106
|
+
},
|
|
107
|
+
className: chunkADIDI7AJ_js.cn(
|
|
108
|
+
"flex items-center gap-3 px-4 py-3 text-sm outline-none transition-colors focus-visible:bg-secondary/10",
|
|
109
|
+
sub.isActive ? "bg-secondary/10 font-semibold text-secondary" : "text-primary/80 hover:bg-secondary/5 hover:text-secondary"
|
|
110
|
+
),
|
|
111
|
+
children: [
|
|
112
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", "aria-hidden": "true", children: sub.icon }),
|
|
113
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "whitespace-nowrap", children: sub.label })
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
sub.key
|
|
117
|
+
))
|
|
118
|
+
}
|
|
119
|
+
),
|
|
120
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
121
|
+
"button",
|
|
122
|
+
{
|
|
123
|
+
type: "button",
|
|
124
|
+
"aria-label": item.label,
|
|
125
|
+
"aria-haspopup": "menu",
|
|
126
|
+
"aria-expanded": isOpen,
|
|
127
|
+
title: item.label,
|
|
128
|
+
onClick: () => {
|
|
129
|
+
setOpenKey(isOpen ? null : item.key);
|
|
130
|
+
},
|
|
131
|
+
className: triggerClass,
|
|
132
|
+
children: content
|
|
133
|
+
}
|
|
134
|
+
)
|
|
135
|
+
] }, item.key);
|
|
136
|
+
}
|
|
137
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
138
|
+
"a",
|
|
139
|
+
{
|
|
140
|
+
href: item.href,
|
|
141
|
+
"aria-label": item.label,
|
|
142
|
+
"aria-current": item.isActive ? "page" : void 0,
|
|
143
|
+
title: item.label,
|
|
144
|
+
onClick: onNavigate ? (event) => {
|
|
145
|
+
event.preventDefault();
|
|
146
|
+
onNavigate(item);
|
|
147
|
+
} : void 0,
|
|
148
|
+
className: triggerClass,
|
|
149
|
+
children: content
|
|
150
|
+
},
|
|
151
|
+
item.key
|
|
152
|
+
);
|
|
153
|
+
})
|
|
154
|
+
}
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
);
|
|
158
|
+
FloatingDock.displayName = "FloatingDock";
|
|
159
|
+
|
|
160
|
+
exports.FloatingDock = FloatingDock;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkZCQJN4IT_js = require('../../chunk-ZCQJN4IT.js');
|
|
4
4
|
require('../../chunk-ADIDI7AJ.js');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "FloatingDock", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunkZCQJN4IT_js.FloatingDock; }
|
|
11
11
|
});
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { FloatingDock } from '../../chunk-
|
|
1
|
+
export { FloatingDock } from '../../chunk-P2SGBTKS.mjs';
|
|
2
2
|
import '../../chunk-IMKLN273.mjs';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk3JM2X4I2_js = require('../../chunk-3JM2X4I2.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
|
|
11
|
+
get: function () { return chunk3JM2X4I2_js.RoomTypeCard; }
|
|
12
12
|
});
|
|
13
13
|
Object.defineProperty(exports, "RoomTypeCardSkeleton", {
|
|
14
14
|
enumerable: true,
|
|
15
|
-
get: function () { return
|
|
15
|
+
get: function () { return chunk3JM2X4I2_js.RoomTypeCardSkeleton; }
|
|
16
16
|
});
|