@pisell/private-materials 6.12.256 → 6.12.258
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/build/lowcode/assets-daily.json +11 -11
- package/build/lowcode/assets-dev.json +2 -2
- package/build/lowcode/assets-prod.json +11 -11
- package/build/lowcode/meta.js +1 -1
- package/build/lowcode/render/default/view.js +2 -2
- package/build/lowcode/view.js +2 -2
- package/es/components/venueBooking/components/Checkout/index.js +1 -1
- package/es/components/venueBooking/components/Content/index.js +1 -1
- package/es/components/venueBooking/components/Header/index.js +5 -5
- package/es/components/venueBooking/components/VenueSelection/components/CourtFilter.js +1 -1
- package/es/components/venueBooking/components/VenueSelection/components/DateNavigator.js +3 -3
- package/es/components/venueBooking/components/VenueSelection/components/DayTabs.js +2 -2
- package/es/components/venueBooking/components/VenueSelection/components/MonthPicker.js +4 -4
- package/es/components/venueBooking/components/VenueSelection/components/TimeGrid.js +14 -14
- package/es/components/venueBooking/components/VenueSelection/index.js +2 -2
- package/es/components/venueBooking/context.js +6 -7
- package/es/components/venueBooking/hooks.js +22 -16
- package/lib/components/venueBooking/components/Checkout/index.js +1 -1
- package/lib/components/venueBooking/components/Content/index.js +1 -1
- package/lib/components/venueBooking/components/Header/index.js +5 -5
- package/lib/components/venueBooking/components/VenueSelection/components/CourtFilter.js +1 -1
- package/lib/components/venueBooking/components/VenueSelection/components/DateNavigator.js +3 -3
- package/lib/components/venueBooking/components/VenueSelection/components/DayTabs.js +2 -2
- package/lib/components/venueBooking/components/VenueSelection/components/MonthPicker.js +4 -4
- package/lib/components/venueBooking/components/VenueSelection/components/TimeGrid.js +14 -14
- package/lib/components/venueBooking/components/VenueSelection/index.js +2 -2
- package/lib/components/venueBooking/context.js +6 -7
- package/lib/components/venueBooking/hooks.js +22 -16
- package/package.json +3 -3
|
@@ -85,7 +85,7 @@ function Checkout() {
|
|
|
85
85
|
setNoteValue(nextNote);
|
|
86
86
|
lastNoteRef.current = nextNote;
|
|
87
87
|
}, [viewModel.note]);
|
|
88
|
-
return /* @__PURE__ */ React.createElement("div", { className: "space-y-3 md:space-y-5" }, /* @__PURE__ */ React.createElement("div", { className: "grid gap-3 md:gap-4" }, /* @__PURE__ */ React.createElement("div", { className: "rounded-[22px] bg-white p-4
|
|
88
|
+
return /* @__PURE__ */ React.createElement("div", { className: "space-y-3 md:space-y-5" }, /* @__PURE__ */ React.createElement("div", { className: "grid gap-3 md:gap-4" }, /* @__PURE__ */ React.createElement("div", { className: "rounded-[22px] bg-white p-4 md:rounded-[28px] md:p-6" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center justify-between gap-3" }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("div", { className: "mt-3 text-[22px] font-extrabold text-zinc-900" }, locales.getText("pisell2.venue.checkout.court.summary") || "场地预订摘要"))), /* @__PURE__ */ React.createElement("div", { className: "mt-5 grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React.createElement("div", { className: "rounded-[22px] bg-[#faf7f4] p-4 md:col-span-2" }, /* @__PURE__ */ React.createElement("div", { className: "text-sm font-semibold text-[#a69183]" }, locales.getText("pisell2.venue.checkout.selected.courts") || "已选场地"), /* @__PURE__ */ React.createElement("div", { className: "mt-3 space-y-2 text-[15px] font-semibold text-zinc-900" }, mergedCourtSessionLines.length ? mergedCourtSessionLines.map((line, idx) => /* @__PURE__ */ React.createElement("div", { key: `venue-session-line-${idx}` }, line)) : /* @__PURE__ */ React.createElement("div", null, locales.getText("pisell2.venue.checkout.sessions.empty") || "-"))), addonCartItems.length > 0 ? /* @__PURE__ */ React.createElement("div", { className: "rounded-[22px] bg-[#faf7f4] p-4" }, /* @__PURE__ */ React.createElement("div", { className: "text-sm font-semibold text-[#a69183]" }, locales.getText("pisell2.venue.checkout.addons") || "附加项"), /* @__PURE__ */ React.createElement("div", { className: "mt-3 text-[15px] font-semibold text-zinc-900" }, addonCartItems.map((item, idx) => /* @__PURE__ */ React.createElement("div", { key: `addon-${item.id || idx}` }, item.title || item.name || "-")))) : null)), /* @__PURE__ */ React.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React.createElement("div", { className: "rounded-[28px] bg-white p-5 md:p-6" }, /* @__PURE__ */ React.createElement("div", { className: "mt-5 rounded-[22px] bg-[#faf7f4] p-4" }, /* @__PURE__ */ React.createElement("div", { className: "text-lg font-bold text-zinc-900" }, locales.getText("pisell2.venue.checkout.notice") || "备注"), /* @__PURE__ */ React.createElement("textarea", {
|
|
89
89
|
className: "mt-4 min-h-[120px] w-full rounded-[20px] border border-black/10 bg-white px-4 py-4 text-sm outline-none placeholder:text-zinc-400",
|
|
90
90
|
value: noteValue,
|
|
91
91
|
onChange: (e) => setNoteValue(e.target.value),
|
|
@@ -115,7 +115,7 @@ function Content() {
|
|
|
115
115
|
ref: stepHeaderRef,
|
|
116
116
|
className: "sticky top-0 z-40"
|
|
117
117
|
}, /* @__PURE__ */ React.createElement(Header, null)), /* @__PURE__ */ React.createElement("div", { className: "grid max-w-full gap-2 md:gap-4 lg:grid-cols-[minmax(0,1fr)_390px] xl:grid-cols-[minmax(0,1fr)_420px]" }, /* @__PURE__ */ React.createElement("section", { className: "min-w-0 space-y-3 overscroll-none md:space-y-5" }, stepRegistry[currentStep]), /* @__PURE__ */ React.createElement("aside", {
|
|
118
|
-
className: "hidden lg:block sticky self-start z-10 rounded-[28px] bg-white
|
|
118
|
+
className: "hidden lg:block sticky self-start z-10 rounded-[28px] bg-white",
|
|
119
119
|
style: { top: "calc(var(--vb-grid-sticky-top, 0px) + 1.5rem)" }
|
|
120
120
|
}, /* @__PURE__ */ React.createElement(Cart, {
|
|
121
121
|
embedded: true,
|
|
@@ -94,7 +94,7 @@ function Header() {
|
|
|
94
94
|
});
|
|
95
95
|
return /* @__PURE__ */ React.createElement("div", {
|
|
96
96
|
ref: cardRef,
|
|
97
|
-
className: "relative bg-white p-3 md:rounded-[24px] md:p-4
|
|
97
|
+
className: "relative bg-white p-3 md:rounded-[24px] md:p-4"
|
|
98
98
|
}, /* @__PURE__ */ React.createElement(Modal, {
|
|
99
99
|
open: confirmOpen,
|
|
100
100
|
onCancel: () => setConfirmOpen(false),
|
|
@@ -138,7 +138,7 @@ function Header() {
|
|
|
138
138
|
}, /* @__PURE__ */ React.createElement("p", { className: "text-sm text-zinc-500" }, String(locales.getText("pisell2.venue.leave.desc") || "Your selections will be lost if you leave now."))), popupOpen && backSteps.length > 0 ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", {
|
|
139
139
|
className: "fixed inset-0 z-40 md:hidden",
|
|
140
140
|
onClick: () => setPopupOpen(false)
|
|
141
|
-
}), /* @__PURE__ */ React.createElement("div", { className: "absolute left-4 right-4 top-full z-50 mt-2 overflow-hidden rounded-2xl bg-white shadow-[0_8px_30px_rgba(20,20,20,0.12)] ring-1 ring-black/
|
|
141
|
+
}), /* @__PURE__ */ React.createElement("div", { className: "absolute left-4 right-4 top-full z-50 mt-2 overflow-hidden rounded-2xl bg-white shadow-[0_8px_30px_rgba(20,20,20,0.12)] ring-1 ring-black/[0.06] md:hidden" }, backSteps.map((item, idx) => /* @__PURE__ */ React.createElement("button", {
|
|
142
142
|
key: item.key,
|
|
143
143
|
type: "button",
|
|
144
144
|
onClick: () => {
|
|
@@ -150,7 +150,7 @@ function Header() {
|
|
|
150
150
|
type: "button",
|
|
151
151
|
"aria-label": "Back",
|
|
152
152
|
onClick: handleBack,
|
|
153
|
-
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-zinc-50 text-zinc-700
|
|
153
|
+
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-zinc-50 text-zinc-700 transition hover:bg-zinc-100"
|
|
154
154
|
}, /* @__PURE__ */ React.createElement("svg", {
|
|
155
155
|
viewBox: "0 0 24 24",
|
|
156
156
|
className: "h-5 w-5",
|
|
@@ -191,7 +191,7 @@ function Header() {
|
|
|
191
191
|
className: `flex items-center gap-3 rounded-full px-3 py-2 transition ${status === "done" ? "bg-zinc-50" : status !== "active" ? "bg-zinc-50/80" : ""} ${clickable ? "cursor-pointer hover:bg-zinc-100" : "cursor-default"}`,
|
|
192
192
|
style: status === "active" ? { backgroundColor: "var(--vb-primary-light)" } : void 0
|
|
193
193
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
194
|
-
className: `flex h-8 w-8 items-center justify-center rounded-full text-sm font-bold ${status === "done" ? "bg-[#111] text-white" : status === "active" ? "text-white" : "bg-white text-zinc-400
|
|
194
|
+
className: `flex h-8 w-8 items-center justify-center rounded-full text-sm font-bold ${status === "done" ? "bg-[#111] text-white" : status === "active" ? "text-white" : "bg-white text-zinc-400"}`,
|
|
195
195
|
style: status === "active" ? { backgroundColor: "var(--vb-primary)" } : void 0
|
|
196
196
|
}, status === "done" ? /* @__PURE__ */ React.createElement(Iconfont, {
|
|
197
197
|
type: "pisell2-check",
|
|
@@ -204,7 +204,7 @@ function Header() {
|
|
|
204
204
|
type: "button",
|
|
205
205
|
"aria-label": "Close",
|
|
206
206
|
onClick: setConfirmOpen.bind(null, true),
|
|
207
|
-
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-zinc-50 text-zinc-700
|
|
207
|
+
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-zinc-50 text-zinc-700 transition hover:bg-zinc-100"
|
|
208
208
|
}, /* @__PURE__ */ React.createElement("svg", {
|
|
209
209
|
viewBox: "0 0 24 24",
|
|
210
210
|
className: "h-5 w-5",
|
|
@@ -24,7 +24,7 @@ function CourtFilter() {
|
|
|
24
24
|
return /* @__PURE__ */ React.createElement("div", { className: "mt-4 grid gap-3 md:mt-5 xl:grid-cols-[1fr_auto] xl:items-center" }, courtTypes.length > 1 ? /* @__PURE__ */ React.createElement("div", { className: "flex flex-wrap gap-2" }, filterOptions.map((opt) => /* @__PURE__ */ React.createElement("button", {
|
|
25
25
|
key: opt.value,
|
|
26
26
|
onClick: () => setFilter(opt.value),
|
|
27
|
-
className: `rounded-full px-4 py-2 text-sm font-semibold transition ${filter === opt.value ? "text-white" : "bg-[#fafafa] text-zinc-700
|
|
27
|
+
className: `rounded-full px-4 py-2 text-sm font-semibold transition ${filter === opt.value ? "text-white" : "bg-[#fafafa] text-zinc-700"}`,
|
|
28
28
|
style: filter === opt.value ? { backgroundColor: "var(--vb-primary)" } : void 0
|
|
29
29
|
}, opt.label))) : null);
|
|
30
30
|
}
|
|
@@ -27,16 +27,16 @@ function DateNavigator({ onPrevWeek, onNextWeek }) {
|
|
|
27
27
|
return _goToday.apply(this, arguments);
|
|
28
28
|
}
|
|
29
29
|
return /* @__PURE__ */ React.createElement("div", { className: "relative flex w-full items-center gap-2 xl:w-auto" }, /* @__PURE__ */ React.createElement("button", {
|
|
30
|
-
className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-2xl bg-[#fafafa]
|
|
30
|
+
className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-2xl bg-[#fafafa] md:h-12 md:w-12",
|
|
31
31
|
onClick: onPrevWeek
|
|
32
32
|
}, /* @__PURE__ */ React.createElement(Iconfont, {
|
|
33
33
|
type: "pisell2-chevron-left",
|
|
34
34
|
style: { fontSize: 18 }
|
|
35
35
|
})), /* @__PURE__ */ React.createElement("button", {
|
|
36
|
-
className: "min-w-0 flex-1 rounded-2xl bg-[#fafafa] px-4 py-3 text-sm font-bold text-zinc-900
|
|
36
|
+
className: "min-w-0 flex-1 rounded-2xl bg-[#fafafa] px-4 py-3 text-sm font-bold text-zinc-900 xl:min-w-[200px] xl:flex-none",
|
|
37
37
|
onClick: () => setMonthPickerOpen(!monthPickerOpen)
|
|
38
38
|
}, getMonthLabel(anchorDate)), /* @__PURE__ */ React.createElement("button", {
|
|
39
|
-
className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-2xl bg-[#fafafa]
|
|
39
|
+
className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-2xl bg-[#fafafa] md:h-12 md:w-12",
|
|
40
40
|
onClick: onNextWeek
|
|
41
41
|
}, /* @__PURE__ */ React.createElement(Iconfont, {
|
|
42
42
|
type: "pisell2-chevron-right",
|
|
@@ -34,7 +34,7 @@ function DayTabs({ onPrevWeek, onNextWeek }) {
|
|
|
34
34
|
"aria-live": "polite"
|
|
35
35
|
}, Array.from({ length: 7 }).map((_, idx) => /* @__PURE__ */ React.createElement("div", {
|
|
36
36
|
key: `day-skeleton-${idx}`,
|
|
37
|
-
className: "relative min-h-[56px] overflow-hidden rounded-[12px] bg-zinc-100 px-2 py-2
|
|
37
|
+
className: "relative min-h-[56px] overflow-hidden rounded-[12px] bg-zinc-100 px-2 py-2 md:min-h-[60px] md:rounded-[16px] md:px-3 md:py-2"
|
|
38
38
|
}, /* @__PURE__ */ React.createElement("div", { className: "h-2 w-8 rounded bg-zinc-200/90 md:h-2.5 md:w-10" }), /* @__PURE__ */ React.createElement("div", { className: "mt-2 flex items-end justify-between gap-1" }, /* @__PURE__ */ React.createElement("div", { className: "h-3 w-5 rounded bg-zinc-200/90 md:h-4 md:w-6" }), /* @__PURE__ */ React.createElement("div", { className: "h-2 w-8 rounded bg-zinc-200/90 md:h-2.5 md:w-10" })), /* @__PURE__ */ React.createElement("span", {
|
|
39
39
|
className: "vb-skeleton-shimmer",
|
|
40
40
|
"aria-hidden": "true"
|
|
@@ -86,7 +86,7 @@ function DayTabs({ onPrevWeek, onNextWeek }) {
|
|
|
86
86
|
const active = key === currentKey;
|
|
87
87
|
const meta = getDateMetaFromSummary(date, viewModel.dateSummary, symbol);
|
|
88
88
|
const showSelectedBadge = selectedDateKeySet.has(key) && !active;
|
|
89
|
-
const cardClass = meta.soldOut ? "bg-zinc-50 text-zinc-400
|
|
89
|
+
const cardClass = meta.soldOut ? "bg-zinc-50 text-zinc-400" : active ? "text-white shadow-sm" : "bg-white text-zinc-800 hover:bg-zinc-50";
|
|
90
90
|
const cardStyle = !meta.soldOut && active ? { backgroundColor: "var(--vb-primary)" } : void 0;
|
|
91
91
|
const tagClass = active ? "bg-white/15 text-white ring-white/20" : meta.topTag === "Promo" ? "bg-emerald-50 text-emerald-700 ring-emerald-200" : "bg-zinc-100 text-zinc-600 ring-zinc-200";
|
|
92
92
|
return /* @__PURE__ */ React.createElement("button", {
|
|
@@ -39,14 +39,14 @@ function MonthPicker() {
|
|
|
39
39
|
});
|
|
40
40
|
return _handleSelect.apply(this, arguments);
|
|
41
41
|
}
|
|
42
|
-
return /* @__PURE__ */ React.createElement("div", { className: "absolute right-0 top-[calc(100%+12px)] z-30 w-[320px] rounded-[24px] border border-black/
|
|
43
|
-
className: "flex h-10 w-10 items-center justify-center rounded-2xl bg-[#fafafa]
|
|
42
|
+
return /* @__PURE__ */ React.createElement("div", { className: "absolute right-0 top-[calc(100%+12px)] z-30 w-[320px] rounded-[24px] border border-black/[0.06] bg-white p-4 shadow-[0_20px_60px_rgba(20,20,20,0.14)]" }, /* @__PURE__ */ React.createElement("div", { className: "mb-4 flex items-center justify-between" }, /* @__PURE__ */ React.createElement("button", {
|
|
43
|
+
className: "flex h-10 w-10 items-center justify-center rounded-2xl bg-[#fafafa] hover:bg-zinc-50",
|
|
44
44
|
onClick: () => setMonthCursor(monthCursor.subtract(1, "month"))
|
|
45
45
|
}, /* @__PURE__ */ React.createElement(Iconfont, {
|
|
46
46
|
type: "pisell2-chevron-left",
|
|
47
47
|
style: { fontSize: 16 }
|
|
48
48
|
})), /* @__PURE__ */ React.createElement("div", { className: "text-sm font-bold text-zinc-900" }, getMonthLabel(monthCursor)), /* @__PURE__ */ React.createElement("button", {
|
|
49
|
-
className: "flex h-10 w-10 items-center justify-center rounded-2xl bg-[#fafafa]
|
|
49
|
+
className: "flex h-10 w-10 items-center justify-center rounded-2xl bg-[#fafafa] hover:bg-zinc-50",
|
|
50
50
|
onClick: () => setMonthCursor(monthCursor.add(1, "month"))
|
|
51
51
|
}, /* @__PURE__ */ React.createElement(Iconfont, {
|
|
52
52
|
type: "pisell2-chevron-right",
|
|
@@ -71,7 +71,7 @@ function MonthPicker() {
|
|
|
71
71
|
const isPastDate = day.isBefore(todayStart, "day");
|
|
72
72
|
const isDisabledBySummary = !(!knownDateRange ? true : day.isBefore(knownDateRange.minDate, "day") || day.isAfter(knownDateRange.maxDate, "day")) && meta.soldOut;
|
|
73
73
|
const isDisabled = isPastDate || isDisabledBySummary;
|
|
74
|
-
const cellClass = isDisabled ? "bg-zinc-50 text-zinc-400
|
|
74
|
+
const cellClass = isDisabled ? "bg-zinc-50 text-zinc-400" : selected ? "text-white shadow-sm" : isToday ? "" : "bg-[#fafafa] text-zinc-700";
|
|
75
75
|
const cellStyle = selected && !meta.soldOut ? { backgroundColor: "var(--vb-primary)" } : isToday && !meta.soldOut ? {
|
|
76
76
|
backgroundColor: "var(--vb-primary-light)",
|
|
77
77
|
color: "var(--vb-primary)"
|
|
@@ -180,16 +180,16 @@ function TimeGrid() {
|
|
|
180
180
|
}
|
|
181
181
|
if (isGridLoading || !grid || !timeLabels.length) return /* @__PURE__ */ React.createElement(TimeGridSkeleton, null);
|
|
182
182
|
return /* @__PURE__ */ React.createElement("div", { className: "relative" }, /* @__PURE__ */ React.createElement("div", {
|
|
183
|
-
className: "sticky z-30 overflow-hidden bg-[#fff7f7]",
|
|
183
|
+
className: "sticky z-30 overflow-hidden rounded-t-[28px] bg-[#fff7f7]",
|
|
184
184
|
style: { top: "var(--vb-grid-sticky-top, 0px)" }
|
|
185
185
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
186
186
|
ref: headerInnerRef,
|
|
187
|
-
className: "grid border-b border-black/
|
|
187
|
+
className: "grid border-b border-black/[0.06]",
|
|
188
188
|
style: _objectSpread2(_objectSpread2({}, tableGridStyle), {}, { willChange: "transform" }),
|
|
189
189
|
key: `${grid.date}-header`
|
|
190
190
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
191
191
|
ref: headerFixedColRef,
|
|
192
|
-
className: "relative z-20 row-span-2 flex items-center gap-2 border-r border-black/
|
|
192
|
+
className: "relative z-20 row-span-2 flex items-center gap-2 border-r border-black/[0.06] bg-[#fff7f7] px-2 py-4 font-bold text-zinc-900 shadow-[10px_0_16px_-14px_rgba(0,0,0,0.2)] md:px-4",
|
|
193
193
|
style: { willChange: "transform" }
|
|
194
194
|
}, /* @__PURE__ */ React.createElement(Iconfont, {
|
|
195
195
|
type: "pisell2-clock",
|
|
@@ -225,7 +225,7 @@ function TimeGrid() {
|
|
|
225
225
|
}))), /* @__PURE__ */ React.createElement("div", {
|
|
226
226
|
ref: scrollTableRef,
|
|
227
227
|
onScroll: syncHeader,
|
|
228
|
-
className: "max-w-full overflow-x-auto cursor-grab select-none touch-pan-y active:cursor-grabbing",
|
|
228
|
+
className: "max-w-full overflow-x-auto rounded-b-[28px] cursor-grab select-none touch-pan-y active:cursor-grabbing",
|
|
229
229
|
style: _objectSpread2({ WebkitOverflowScrolling: "touch" }, scrollerOverscrollStyle)
|
|
230
230
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
231
231
|
className: "w-full",
|
|
@@ -235,9 +235,9 @@ function TimeGrid() {
|
|
|
235
235
|
const isMultiProduct = !!resource.hasMultipleProducts && Array.isArray(resource.products);
|
|
236
236
|
const expanded = !!expandedResources[String(resource.resourceId)];
|
|
237
237
|
return /* @__PURE__ */ React.createElement(React.Fragment, { key: `${resource.resourceId}-${grid.date}` }, /* @__PURE__ */ React.createElement("div", {
|
|
238
|
-
className: "grid border-b border-black/
|
|
238
|
+
className: "grid border-b border-black/[0.06]",
|
|
239
239
|
style: tableGridStyle
|
|
240
|
-
}, /* @__PURE__ */ React.createElement("div", { className: `sticky left-0 z-10 border-r border-black/
|
|
240
|
+
}, /* @__PURE__ */ React.createElement("div", { className: `sticky left-0 z-10 border-r border-black/[0.06] px-2 py-2 shadow-[10px_0_16px_-14px_rgba(0,0,0,0.2)] md:px-4 ${courtMeta.soldOut ? "bg-zinc-50" : "bg-white"}` }, /* @__PURE__ */ React.createElement("div", { className: "flex items-start justify-between gap-2" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-1.5" }, isMultiProduct ? /* @__PURE__ */ React.createElement("button", {
|
|
241
241
|
type: "button",
|
|
242
242
|
"data-cart-button": "true",
|
|
243
243
|
onClick: (e) => {
|
|
@@ -301,9 +301,9 @@ function TimeGrid() {
|
|
|
301
301
|
}), showPlusLabel ? /* @__PURE__ */ React.createElement("span", { className: `text-[13px] font-semibold leading-4 ${priceClass} md:text-sm` }, "+") : null), tag ? /* @__PURE__ */ React.createElement("div", { className: `inline-flex rounded-full px-1.5 py-0 text-[8px] font-semibold leading-4 ring-1 md:text-[9px] ${tag.className}` }, tagText) : null));
|
|
302
302
|
})), isMultiProduct && expanded && resource.products.map((subRow) => /* @__PURE__ */ React.createElement("div", {
|
|
303
303
|
key: `${resource.resourceId}-sub-${subRow.productId}`,
|
|
304
|
-
className: "grid border-b border-black/
|
|
304
|
+
className: "grid border-b border-black/[0.06] bg-zinc-50/60",
|
|
305
305
|
style: tableGridStyle
|
|
306
|
-
}, /* @__PURE__ */ React.createElement("div", { className: "sticky left-0 z-10 border-r border-black/
|
|
306
|
+
}, /* @__PURE__ */ React.createElement("div", { className: "sticky left-0 z-10 border-r border-black/[0.06] bg-zinc-50/60 px-2 py-2 pl-8 shadow-[10px_0_16px_-14px_rgba(0,0,0,0.2)] md:px-4 md:pl-10" }, /* @__PURE__ */ React.createElement("div", { className: "text-[12px] font-semibold leading-5 text-zinc-700 md:text-[13px]" }, subRow.productTitle)), subRow.slots.map((slot, slotIndex) => {
|
|
307
307
|
const isAvailable = slot.status === "available";
|
|
308
308
|
const isUnavailable = slot.status === "occupied" || slot.status === "past" || slot.status === "unavailable";
|
|
309
309
|
const timeLabel = timeLabels[slotIndex] || "";
|
|
@@ -353,12 +353,12 @@ function TimeGridSkeleton() {
|
|
|
353
353
|
"aria-busy": "true",
|
|
354
354
|
"aria-live": "polite"
|
|
355
355
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
356
|
-
className: "sticky z-30 overflow-hidden bg-[#fff7f7]",
|
|
356
|
+
className: "sticky z-30 overflow-hidden rounded-t-[28px] bg-[#fff7f7]",
|
|
357
357
|
style: { top: "var(--vb-grid-sticky-top, 0px)" }
|
|
358
358
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
359
|
-
className: "grid border-b border-black/
|
|
359
|
+
className: "grid border-b border-black/[0.06]",
|
|
360
360
|
style: { gridTemplateColumns: `120px repeat(${SKELETON_COLS}, minmax(90px, 1fr))` }
|
|
361
|
-
}, /* @__PURE__ */ React.createElement("div", { className: "relative z-20 flex items-center gap-2 border-r border-black/
|
|
361
|
+
}, /* @__PURE__ */ React.createElement("div", { className: "relative z-20 flex items-center gap-2 border-r border-black/[0.06] bg-[#fff7f7] px-2 py-4 font-bold text-zinc-900 shadow-[10px_0_16px_-14px_rgba(0,0,0,0.2)] md:px-4" }, /* @__PURE__ */ React.createElement(Iconfont, {
|
|
362
362
|
type: "pisell2-clock",
|
|
363
363
|
style: {
|
|
364
364
|
fontSize: 16,
|
|
@@ -371,11 +371,11 @@ function TimeGridSkeleton() {
|
|
|
371
371
|
}, /* @__PURE__ */ React.createElement("div", { className: "h-3 w-10 rounded bg-zinc-200/80" }), /* @__PURE__ */ React.createElement("span", {
|
|
372
372
|
className: "vb-skeleton-shimmer",
|
|
373
373
|
"aria-hidden": "true"
|
|
374
|
-
}))))), /* @__PURE__ */ React.createElement("div", { className: "w-full" }, Array.from({ length: SKELETON_ROWS }).map((_, rowIdx) => /* @__PURE__ */ React.createElement("div", {
|
|
374
|
+
}))))), /* @__PURE__ */ React.createElement("div", { className: "w-full max-w-full overflow-hidden rounded-b-[28px]" }, Array.from({ length: SKELETON_ROWS }).map((_, rowIdx) => /* @__PURE__ */ React.createElement("div", {
|
|
375
375
|
key: `sk-row-${rowIdx}`,
|
|
376
|
-
className: "grid border-b border-black/
|
|
376
|
+
className: "grid border-b border-black/[0.06]",
|
|
377
377
|
style: { gridTemplateColumns: `120px repeat(${SKELETON_COLS}, minmax(90px, 1fr))` }
|
|
378
|
-
}, /* @__PURE__ */ React.createElement("div", { className: "sticky left-0 z-10 border-r border-black/
|
|
378
|
+
}, /* @__PURE__ */ React.createElement("div", { className: "sticky left-0 z-10 border-r border-black/[0.06] bg-white px-2 py-4 shadow-[10px_0_16px_-14px_rgba(0,0,0,0.2)] md:px-4" }, /* @__PURE__ */ React.createElement("div", { className: "relative overflow-hidden" }, /* @__PURE__ */ React.createElement("div", { className: "h-4 w-20 rounded bg-zinc-200/80 md:w-24" }), /* @__PURE__ */ React.createElement("div", { className: "mt-2 h-2.5 w-14 rounded bg-zinc-200/60 md:w-16" }), /* @__PURE__ */ React.createElement("span", {
|
|
379
379
|
className: "vb-skeleton-shimmer",
|
|
380
380
|
"aria-hidden": "true"
|
|
381
381
|
}))), Array.from({ length: SKELETON_COLS }).map((_, colIdx) => /* @__PURE__ */ React.createElement("div", {
|
|
@@ -37,7 +37,7 @@ function VenueSelection() {
|
|
|
37
37
|
function goNextWeek() {
|
|
38
38
|
navigateWeek(7);
|
|
39
39
|
}
|
|
40
|
-
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: "rounded-b-[24px] bg-white p-3
|
|
40
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: "rounded-b-[24px] bg-white p-3 md:rounded-[28px] md:p-6" }, /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-2 xl:flex-row xl:items-center xl:justify-between" }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("h2", { className: "text-2xl font-extrabold leading-tight text-zinc-900 md:text-[30px]" }, locales.getText("pisell2.venue.step1.title") || "选择场地"), /* @__PURE__ */ React.createElement("p", { className: "mt-1 text-xs leading-5 text-zinc-500 md:mt-2 md:text-sm md:leading-6" }, locales.getText("pisell2.venue.step1.subtitle") || "仅显示可用时段和价格。")), /* @__PURE__ */ React.createElement(DateNavigator, {
|
|
41
41
|
onPrevWeek: goPrevWeek,
|
|
42
42
|
onNextWeek: goNextWeek
|
|
43
43
|
})), /* @__PURE__ */ React.createElement("div", { className: "mt-3 md:mt-5" }, /* @__PURE__ */ React.createElement(DayTabs, {
|
|
@@ -45,7 +45,7 @@ function VenueSelection() {
|
|
|
45
45
|
onNextWeek: goNextWeek
|
|
46
46
|
})), /* @__PURE__ */ React.createElement(CourtFilter, null)), /* @__PURE__ */ React.createElement("div", {
|
|
47
47
|
ref: tableSectionRef,
|
|
48
|
-
className: "w-full max-w-full isolate rounded-[28px] bg-white
|
|
48
|
+
className: "w-full max-w-full isolate rounded-[28px] bg-white"
|
|
49
49
|
}, /* @__PURE__ */ React.createElement(TimeGrid, null)));
|
|
50
50
|
}
|
|
51
51
|
//#endregion
|
|
@@ -201,14 +201,13 @@ function VenueBookingProvider({ entryContext, children }) {
|
|
|
201
201
|
*/
|
|
202
202
|
const refreshViewModel = useCallback(function() {
|
|
203
203
|
var _ref = _asyncToGenerator(function* (extraFields) {
|
|
204
|
-
|
|
205
|
-
yield venueBookingModule
|
|
204
|
+
try {
|
|
205
|
+
const moduleData = yield createVenueBookingViewModel(venueBookingModule);
|
|
206
|
+
setViewModel((prev) => _objectSpread2(_objectSpread2(_objectSpread2({}, prev), moduleData), extraFields || {}));
|
|
207
|
+
if (venueBookingModule && typeof venueBookingModule.getDiscountList === "function") setDiscountList(venueBookingModule.getDiscountList() || []);
|
|
206
208
|
} catch (error) {
|
|
207
|
-
console.warn("[venueBooking]
|
|
209
|
+
console.warn("[venueBooking] refreshViewModel failed", error);
|
|
208
210
|
}
|
|
209
|
-
const moduleData = createVenueBookingViewModel(venueBookingModule);
|
|
210
|
-
setViewModel((prev) => _objectSpread2(_objectSpread2(_objectSpread2({}, prev), moduleData), extraFields || {}));
|
|
211
|
-
if (venueBookingModule && typeof venueBookingModule.getDiscountList === "function") setDiscountList(venueBookingModule.getDiscountList() || []);
|
|
212
211
|
});
|
|
213
212
|
return function(_x) {
|
|
214
213
|
return _ref.apply(this, arguments);
|
|
@@ -620,7 +619,7 @@ function VenueBookingProvider({ entryContext, children }) {
|
|
|
620
619
|
yield loadVenueProducts(venueBookingModule, VENUE_PRODUCT_IDS);
|
|
621
620
|
const venueProducts = typeof (venueBookingModule === null || venueBookingModule === void 0 ? void 0 : venueBookingModule.getVenueProducts) === "function" ? venueBookingModule.getVenueProducts() : [];
|
|
622
621
|
yield goToNearestAvailableDateRef.current(anchorDateRef.current);
|
|
623
|
-
const moduleData = createVenueBookingViewModel(venueBookingModule);
|
|
622
|
+
const moduleData = yield createVenueBookingViewModel(venueBookingModule);
|
|
624
623
|
if (!unmounted) {
|
|
625
624
|
setViewModel((prev) => _objectSpread2(_objectSpread2({}, prev), {}, {
|
|
626
625
|
cartItems: Array.isArray(moduleData.cartItems) ? moduleData.cartItems : [],
|
|
@@ -190,25 +190,31 @@ function getSelectedDateKeySet(module) {
|
|
|
190
190
|
return selectedDateKeySet;
|
|
191
191
|
}
|
|
192
192
|
/**
|
|
193
|
-
*
|
|
193
|
+
* 等待 OS 金额汇总后,从模块快照构建 ViewModel(购物车部分)
|
|
194
194
|
* 购物车数据使用 toShoppingCartProducts 转换为 ShoppingCart 组件所需格式
|
|
195
195
|
*/
|
|
196
|
-
function createVenueBookingViewModel(
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
196
|
+
function createVenueBookingViewModel(_x10) {
|
|
197
|
+
return _createVenueBookingViewModel.apply(this, arguments);
|
|
198
|
+
}
|
|
199
|
+
function _createVenueBookingViewModel() {
|
|
200
|
+
_createVenueBookingViewModel = _asyncToGenerator(function* (module) {
|
|
201
|
+
const summaryByGetter = typeof (module === null || module === void 0 ? void 0 : module.getSummary) === "function" ? yield module.getSummary() : null;
|
|
202
|
+
const orderProducts = callModuleGetter(module, "getOrderProducts", []);
|
|
203
|
+
const tempOrder = callModuleGetter(module, "getTempOrder", null);
|
|
204
|
+
const amountSymbol = (tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.currency_symbol) || "$";
|
|
205
|
+
const cartItems = toShoppingCartProducts({
|
|
206
|
+
orderProducts: Array.isArray(orderProducts) ? orderProducts : [],
|
|
207
|
+
amountSymbol
|
|
208
|
+
});
|
|
209
|
+
const summary = (summaryByGetter && typeof summaryByGetter === "object" ? summaryByGetter : null) || (tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.summary) || {};
|
|
210
|
+
return {
|
|
211
|
+
cartItems: Array.isArray(cartItems) ? cartItems : [],
|
|
212
|
+
summary: summary && typeof summary === "object" ? summary : {},
|
|
213
|
+
note: String((tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.note) || ""),
|
|
214
|
+
contactsInfo: Array.isArray(tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.contacts_info) ? tempOrder.contacts_info : []
|
|
215
|
+
};
|
|
204
216
|
});
|
|
205
|
-
|
|
206
|
-
return {
|
|
207
|
-
cartItems: Array.isArray(cartItems) ? cartItems : [],
|
|
208
|
-
summary: summary && typeof summary === "object" ? summary : {},
|
|
209
|
-
note: String((tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.note) || ""),
|
|
210
|
-
contactsInfo: Array.isArray(tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.contacts_info) ? tempOrder.contacts_info : []
|
|
211
|
-
};
|
|
217
|
+
return _createVenueBookingViewModel.apply(this, arguments);
|
|
212
218
|
}
|
|
213
219
|
/** 登录状态 hook(检查 token + 弹出登录弹窗) */
|
|
214
220
|
function useVenueBookingLogin() {
|
|
@@ -88,7 +88,7 @@ function Checkout() {
|
|
|
88
88
|
setNoteValue(nextNote);
|
|
89
89
|
lastNoteRef.current = nextNote;
|
|
90
90
|
}, [viewModel.note]);
|
|
91
|
-
return /* @__PURE__ */ react.default.createElement("div", { className: "space-y-3 md:space-y-5" }, /* @__PURE__ */ react.default.createElement("div", { className: "grid gap-3 md:gap-4" }, /* @__PURE__ */ react.default.createElement("div", { className: "rounded-[22px] bg-white p-4
|
|
91
|
+
return /* @__PURE__ */ react.default.createElement("div", { className: "space-y-3 md:space-y-5" }, /* @__PURE__ */ react.default.createElement("div", { className: "grid gap-3 md:gap-4" }, /* @__PURE__ */ react.default.createElement("div", { className: "rounded-[22px] bg-white p-4 md:rounded-[28px] md:p-6" }, /* @__PURE__ */ react.default.createElement("div", { className: "flex items-center justify-between gap-3" }, /* @__PURE__ */ react.default.createElement("div", null, /* @__PURE__ */ react.default.createElement("div", { className: "mt-3 text-[22px] font-extrabold text-zinc-900" }, _pisell_utils.locales.getText("pisell2.venue.checkout.court.summary") || "场地预订摘要"))), /* @__PURE__ */ react.default.createElement("div", { className: "mt-5 grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ react.default.createElement("div", { className: "rounded-[22px] bg-[#faf7f4] p-4 md:col-span-2" }, /* @__PURE__ */ react.default.createElement("div", { className: "text-sm font-semibold text-[#a69183]" }, _pisell_utils.locales.getText("pisell2.venue.checkout.selected.courts") || "已选场地"), /* @__PURE__ */ react.default.createElement("div", { className: "mt-3 space-y-2 text-[15px] font-semibold text-zinc-900" }, mergedCourtSessionLines.length ? mergedCourtSessionLines.map((line, idx) => /* @__PURE__ */ react.default.createElement("div", { key: `venue-session-line-${idx}` }, line)) : /* @__PURE__ */ react.default.createElement("div", null, _pisell_utils.locales.getText("pisell2.venue.checkout.sessions.empty") || "-"))), addonCartItems.length > 0 ? /* @__PURE__ */ react.default.createElement("div", { className: "rounded-[22px] bg-[#faf7f4] p-4" }, /* @__PURE__ */ react.default.createElement("div", { className: "text-sm font-semibold text-[#a69183]" }, _pisell_utils.locales.getText("pisell2.venue.checkout.addons") || "附加项"), /* @__PURE__ */ react.default.createElement("div", { className: "mt-3 text-[15px] font-semibold text-zinc-900" }, addonCartItems.map((item, idx) => /* @__PURE__ */ react.default.createElement("div", { key: `addon-${item.id || idx}` }, item.title || item.name || "-")))) : null)), /* @__PURE__ */ react.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ react.default.createElement("div", { className: "rounded-[28px] bg-white p-5 md:p-6" }, /* @__PURE__ */ react.default.createElement("div", { className: "mt-5 rounded-[22px] bg-[#faf7f4] p-4" }, /* @__PURE__ */ react.default.createElement("div", { className: "text-lg font-bold text-zinc-900" }, _pisell_utils.locales.getText("pisell2.venue.checkout.notice") || "备注"), /* @__PURE__ */ react.default.createElement("textarea", {
|
|
92
92
|
className: "mt-4 min-h-[120px] w-full rounded-[20px] border border-black/10 bg-white px-4 py-4 text-sm outline-none placeholder:text-zinc-400",
|
|
93
93
|
value: noteValue,
|
|
94
94
|
onChange: (e) => setNoteValue(e.target.value),
|
|
@@ -117,7 +117,7 @@ function Content() {
|
|
|
117
117
|
ref: stepHeaderRef,
|
|
118
118
|
className: "sticky top-0 z-40"
|
|
119
119
|
}, /* @__PURE__ */ react.default.createElement(require_index.default, null)), /* @__PURE__ */ react.default.createElement("div", { className: "grid max-w-full gap-2 md:gap-4 lg:grid-cols-[minmax(0,1fr)_390px] xl:grid-cols-[minmax(0,1fr)_420px]" }, /* @__PURE__ */ react.default.createElement("section", { className: "min-w-0 space-y-3 overscroll-none md:space-y-5" }, stepRegistry[currentStep]), /* @__PURE__ */ react.default.createElement("aside", {
|
|
120
|
-
className: "hidden lg:block sticky self-start z-10 rounded-[28px] bg-white
|
|
120
|
+
className: "hidden lg:block sticky self-start z-10 rounded-[28px] bg-white",
|
|
121
121
|
style: { top: "calc(var(--vb-grid-sticky-top, 0px) + 1.5rem)" }
|
|
122
122
|
}, /* @__PURE__ */ react.default.createElement(require_index$1.default, {
|
|
123
123
|
embedded: true,
|
|
@@ -96,7 +96,7 @@ function Header() {
|
|
|
96
96
|
});
|
|
97
97
|
return /* @__PURE__ */ react.default.createElement("div", {
|
|
98
98
|
ref: cardRef,
|
|
99
|
-
className: "relative bg-white p-3 md:rounded-[24px] md:p-4
|
|
99
|
+
className: "relative bg-white p-3 md:rounded-[24px] md:p-4"
|
|
100
100
|
}, /* @__PURE__ */ react.default.createElement(antd.Modal, {
|
|
101
101
|
open: confirmOpen,
|
|
102
102
|
onCancel: () => setConfirmOpen(false),
|
|
@@ -140,7 +140,7 @@ function Header() {
|
|
|
140
140
|
}, /* @__PURE__ */ react.default.createElement("p", { className: "text-sm text-zinc-500" }, String(_pisell_utils.locales.getText("pisell2.venue.leave.desc") || "Your selections will be lost if you leave now."))), popupOpen && backSteps.length > 0 ? /* @__PURE__ */ react.default.createElement(react.default.Fragment, null, /* @__PURE__ */ react.default.createElement("div", {
|
|
141
141
|
className: "fixed inset-0 z-40 md:hidden",
|
|
142
142
|
onClick: () => setPopupOpen(false)
|
|
143
|
-
}), /* @__PURE__ */ react.default.createElement("div", { className: "absolute left-4 right-4 top-full z-50 mt-2 overflow-hidden rounded-2xl bg-white shadow-[0_8px_30px_rgba(20,20,20,0.12)] ring-1 ring-black/
|
|
143
|
+
}), /* @__PURE__ */ react.default.createElement("div", { className: "absolute left-4 right-4 top-full z-50 mt-2 overflow-hidden rounded-2xl bg-white shadow-[0_8px_30px_rgba(20,20,20,0.12)] ring-1 ring-black/[0.06] md:hidden" }, backSteps.map((item, idx) => /* @__PURE__ */ react.default.createElement("button", {
|
|
144
144
|
key: item.key,
|
|
145
145
|
type: "button",
|
|
146
146
|
onClick: () => {
|
|
@@ -152,7 +152,7 @@ function Header() {
|
|
|
152
152
|
type: "button",
|
|
153
153
|
"aria-label": "Back",
|
|
154
154
|
onClick: handleBack,
|
|
155
|
-
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-zinc-50 text-zinc-700
|
|
155
|
+
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-zinc-50 text-zinc-700 transition hover:bg-zinc-100"
|
|
156
156
|
}, /* @__PURE__ */ react.default.createElement("svg", {
|
|
157
157
|
viewBox: "0 0 24 24",
|
|
158
158
|
className: "h-5 w-5",
|
|
@@ -193,7 +193,7 @@ function Header() {
|
|
|
193
193
|
className: `flex items-center gap-3 rounded-full px-3 py-2 transition ${status === "done" ? "bg-zinc-50" : status !== "active" ? "bg-zinc-50/80" : ""} ${clickable ? "cursor-pointer hover:bg-zinc-100" : "cursor-default"}`,
|
|
194
194
|
style: status === "active" ? { backgroundColor: "var(--vb-primary-light)" } : void 0
|
|
195
195
|
}, /* @__PURE__ */ react.default.createElement("div", {
|
|
196
|
-
className: `flex h-8 w-8 items-center justify-center rounded-full text-sm font-bold ${status === "done" ? "bg-[#111] text-white" : status === "active" ? "text-white" : "bg-white text-zinc-400
|
|
196
|
+
className: `flex h-8 w-8 items-center justify-center rounded-full text-sm font-bold ${status === "done" ? "bg-[#111] text-white" : status === "active" ? "text-white" : "bg-white text-zinc-400"}`,
|
|
197
197
|
style: status === "active" ? { backgroundColor: "var(--vb-primary)" } : void 0
|
|
198
198
|
}, status === "done" ? /* @__PURE__ */ react.default.createElement(_pisell_materials.Iconfont, {
|
|
199
199
|
type: "pisell2-check",
|
|
@@ -206,7 +206,7 @@ function Header() {
|
|
|
206
206
|
type: "button",
|
|
207
207
|
"aria-label": "Close",
|
|
208
208
|
onClick: setConfirmOpen.bind(null, true),
|
|
209
|
-
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-zinc-50 text-zinc-700
|
|
209
|
+
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-zinc-50 text-zinc-700 transition hover:bg-zinc-100"
|
|
210
210
|
}, /* @__PURE__ */ react.default.createElement("svg", {
|
|
211
211
|
viewBox: "0 0 24 24",
|
|
212
212
|
className: "h-5 w-5",
|
|
@@ -26,7 +26,7 @@ function CourtFilter() {
|
|
|
26
26
|
return /* @__PURE__ */ react.default.createElement("div", { className: "mt-4 grid gap-3 md:mt-5 xl:grid-cols-[1fr_auto] xl:items-center" }, courtTypes.length > 1 ? /* @__PURE__ */ react.default.createElement("div", { className: "flex flex-wrap gap-2" }, filterOptions.map((opt) => /* @__PURE__ */ react.default.createElement("button", {
|
|
27
27
|
key: opt.value,
|
|
28
28
|
onClick: () => setFilter(opt.value),
|
|
29
|
-
className: `rounded-full px-4 py-2 text-sm font-semibold transition ${filter === opt.value ? "text-white" : "bg-[#fafafa] text-zinc-700
|
|
29
|
+
className: `rounded-full px-4 py-2 text-sm font-semibold transition ${filter === opt.value ? "text-white" : "bg-[#fafafa] text-zinc-700"}`,
|
|
30
30
|
style: filter === opt.value ? { backgroundColor: "var(--vb-primary)" } : void 0
|
|
31
31
|
}, opt.label))) : null);
|
|
32
32
|
}
|
|
@@ -30,16 +30,16 @@ function DateNavigator({ onPrevWeek, onNextWeek }) {
|
|
|
30
30
|
return _goToday.apply(this, arguments);
|
|
31
31
|
}
|
|
32
32
|
return /* @__PURE__ */ react.default.createElement("div", { className: "relative flex w-full items-center gap-2 xl:w-auto" }, /* @__PURE__ */ react.default.createElement("button", {
|
|
33
|
-
className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-2xl bg-[#fafafa]
|
|
33
|
+
className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-2xl bg-[#fafafa] md:h-12 md:w-12",
|
|
34
34
|
onClick: onPrevWeek
|
|
35
35
|
}, /* @__PURE__ */ react.default.createElement(_pisell_materials.Iconfont, {
|
|
36
36
|
type: "pisell2-chevron-left",
|
|
37
37
|
style: { fontSize: 18 }
|
|
38
38
|
})), /* @__PURE__ */ react.default.createElement("button", {
|
|
39
|
-
className: "min-w-0 flex-1 rounded-2xl bg-[#fafafa] px-4 py-3 text-sm font-bold text-zinc-900
|
|
39
|
+
className: "min-w-0 flex-1 rounded-2xl bg-[#fafafa] px-4 py-3 text-sm font-bold text-zinc-900 xl:min-w-[200px] xl:flex-none",
|
|
40
40
|
onClick: () => setMonthPickerOpen(!monthPickerOpen)
|
|
41
41
|
}, require_utils.getMonthLabel(anchorDate)), /* @__PURE__ */ react.default.createElement("button", {
|
|
42
|
-
className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-2xl bg-[#fafafa]
|
|
42
|
+
className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-2xl bg-[#fafafa] md:h-12 md:w-12",
|
|
43
43
|
onClick: onNextWeek
|
|
44
44
|
}, /* @__PURE__ */ react.default.createElement(_pisell_materials.Iconfont, {
|
|
45
45
|
type: "pisell2-chevron-right",
|
|
@@ -36,7 +36,7 @@ function DayTabs({ onPrevWeek, onNextWeek }) {
|
|
|
36
36
|
"aria-live": "polite"
|
|
37
37
|
}, Array.from({ length: 7 }).map((_, idx) => /* @__PURE__ */ react.default.createElement("div", {
|
|
38
38
|
key: `day-skeleton-${idx}`,
|
|
39
|
-
className: "relative min-h-[56px] overflow-hidden rounded-[12px] bg-zinc-100 px-2 py-2
|
|
39
|
+
className: "relative min-h-[56px] overflow-hidden rounded-[12px] bg-zinc-100 px-2 py-2 md:min-h-[60px] md:rounded-[16px] md:px-3 md:py-2"
|
|
40
40
|
}, /* @__PURE__ */ react.default.createElement("div", { className: "h-2 w-8 rounded bg-zinc-200/90 md:h-2.5 md:w-10" }), /* @__PURE__ */ react.default.createElement("div", { className: "mt-2 flex items-end justify-between gap-1" }, /* @__PURE__ */ react.default.createElement("div", { className: "h-3 w-5 rounded bg-zinc-200/90 md:h-4 md:w-6" }), /* @__PURE__ */ react.default.createElement("div", { className: "h-2 w-8 rounded bg-zinc-200/90 md:h-2.5 md:w-10" })), /* @__PURE__ */ react.default.createElement("span", {
|
|
41
41
|
className: "vb-skeleton-shimmer",
|
|
42
42
|
"aria-hidden": "true"
|
|
@@ -88,7 +88,7 @@ function DayTabs({ onPrevWeek, onNextWeek }) {
|
|
|
88
88
|
const active = key === currentKey;
|
|
89
89
|
const meta = require_utils.getDateMetaFromSummary(date, viewModel.dateSummary, symbol);
|
|
90
90
|
const showSelectedBadge = selectedDateKeySet.has(key) && !active;
|
|
91
|
-
const cardClass = meta.soldOut ? "bg-zinc-50 text-zinc-400
|
|
91
|
+
const cardClass = meta.soldOut ? "bg-zinc-50 text-zinc-400" : active ? "text-white shadow-sm" : "bg-white text-zinc-800 hover:bg-zinc-50";
|
|
92
92
|
const cardStyle = !meta.soldOut && active ? { backgroundColor: "var(--vb-primary)" } : void 0;
|
|
93
93
|
const tagClass = active ? "bg-white/15 text-white ring-white/20" : meta.topTag === "Promo" ? "bg-emerald-50 text-emerald-700 ring-emerald-200" : "bg-zinc-100 text-zinc-600 ring-zinc-200";
|
|
94
94
|
return /* @__PURE__ */ react.default.createElement("button", {
|
|
@@ -42,14 +42,14 @@ function MonthPicker() {
|
|
|
42
42
|
});
|
|
43
43
|
return _handleSelect.apply(this, arguments);
|
|
44
44
|
}
|
|
45
|
-
return /* @__PURE__ */ react.default.createElement("div", { className: "absolute right-0 top-[calc(100%+12px)] z-30 w-[320px] rounded-[24px] border border-black/
|
|
46
|
-
className: "flex h-10 w-10 items-center justify-center rounded-2xl bg-[#fafafa]
|
|
45
|
+
return /* @__PURE__ */ react.default.createElement("div", { className: "absolute right-0 top-[calc(100%+12px)] z-30 w-[320px] rounded-[24px] border border-black/[0.06] bg-white p-4 shadow-[0_20px_60px_rgba(20,20,20,0.14)]" }, /* @__PURE__ */ react.default.createElement("div", { className: "mb-4 flex items-center justify-between" }, /* @__PURE__ */ react.default.createElement("button", {
|
|
46
|
+
className: "flex h-10 w-10 items-center justify-center rounded-2xl bg-[#fafafa] hover:bg-zinc-50",
|
|
47
47
|
onClick: () => setMonthCursor(monthCursor.subtract(1, "month"))
|
|
48
48
|
}, /* @__PURE__ */ react.default.createElement(_pisell_materials.Iconfont, {
|
|
49
49
|
type: "pisell2-chevron-left",
|
|
50
50
|
style: { fontSize: 16 }
|
|
51
51
|
})), /* @__PURE__ */ react.default.createElement("div", { className: "text-sm font-bold text-zinc-900" }, require_utils.getMonthLabel(monthCursor)), /* @__PURE__ */ react.default.createElement("button", {
|
|
52
|
-
className: "flex h-10 w-10 items-center justify-center rounded-2xl bg-[#fafafa]
|
|
52
|
+
className: "flex h-10 w-10 items-center justify-center rounded-2xl bg-[#fafafa] hover:bg-zinc-50",
|
|
53
53
|
onClick: () => setMonthCursor(monthCursor.add(1, "month"))
|
|
54
54
|
}, /* @__PURE__ */ react.default.createElement(_pisell_materials.Iconfont, {
|
|
55
55
|
type: "pisell2-chevron-right",
|
|
@@ -74,7 +74,7 @@ function MonthPicker() {
|
|
|
74
74
|
const isPastDate = day.isBefore(todayStart, "day");
|
|
75
75
|
const isDisabledBySummary = !(!knownDateRange ? true : day.isBefore(knownDateRange.minDate, "day") || day.isAfter(knownDateRange.maxDate, "day")) && meta.soldOut;
|
|
76
76
|
const isDisabled = isPastDate || isDisabledBySummary;
|
|
77
|
-
const cellClass = isDisabled ? "bg-zinc-50 text-zinc-400
|
|
77
|
+
const cellClass = isDisabled ? "bg-zinc-50 text-zinc-400" : selected ? "text-white shadow-sm" : isToday ? "" : "bg-[#fafafa] text-zinc-700";
|
|
78
78
|
const cellStyle = selected && !meta.soldOut ? { backgroundColor: "var(--vb-primary)" } : isToday && !meta.soldOut ? {
|
|
79
79
|
backgroundColor: "var(--vb-primary-light)",
|
|
80
80
|
color: "var(--vb-primary)"
|