@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.
Files changed (29) hide show
  1. package/build/lowcode/assets-daily.json +11 -11
  2. package/build/lowcode/assets-dev.json +2 -2
  3. package/build/lowcode/assets-prod.json +11 -11
  4. package/build/lowcode/meta.js +1 -1
  5. package/build/lowcode/render/default/view.js +2 -2
  6. package/build/lowcode/view.js +2 -2
  7. package/es/components/venueBooking/components/Checkout/index.js +1 -1
  8. package/es/components/venueBooking/components/Content/index.js +1 -1
  9. package/es/components/venueBooking/components/Header/index.js +5 -5
  10. package/es/components/venueBooking/components/VenueSelection/components/CourtFilter.js +1 -1
  11. package/es/components/venueBooking/components/VenueSelection/components/DateNavigator.js +3 -3
  12. package/es/components/venueBooking/components/VenueSelection/components/DayTabs.js +2 -2
  13. package/es/components/venueBooking/components/VenueSelection/components/MonthPicker.js +4 -4
  14. package/es/components/venueBooking/components/VenueSelection/components/TimeGrid.js +14 -14
  15. package/es/components/venueBooking/components/VenueSelection/index.js +2 -2
  16. package/es/components/venueBooking/context.js +6 -7
  17. package/es/components/venueBooking/hooks.js +22 -16
  18. package/lib/components/venueBooking/components/Checkout/index.js +1 -1
  19. package/lib/components/venueBooking/components/Content/index.js +1 -1
  20. package/lib/components/venueBooking/components/Header/index.js +5 -5
  21. package/lib/components/venueBooking/components/VenueSelection/components/CourtFilter.js +1 -1
  22. package/lib/components/venueBooking/components/VenueSelection/components/DateNavigator.js +3 -3
  23. package/lib/components/venueBooking/components/VenueSelection/components/DayTabs.js +2 -2
  24. package/lib/components/venueBooking/components/VenueSelection/components/MonthPicker.js +4 -4
  25. package/lib/components/venueBooking/components/VenueSelection/components/TimeGrid.js +14 -14
  26. package/lib/components/venueBooking/components/VenueSelection/index.js +2 -2
  27. package/lib/components/venueBooking/context.js +6 -7
  28. package/lib/components/venueBooking/hooks.js +22 -16
  29. 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 shadow-[0_10px_40px_rgba(20,20,20,0.06)] ring-1 ring-black/6 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 ring-1 ring-black/6 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 ring-1 ring-black/6" }, /* @__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 shadow-[0_10px_40px_rgba(20,20,20,0.06)] ring-1 ring-black/6 md:p-6" }, /* @__PURE__ */ React.createElement("div", { className: "mt-5 rounded-[22px] bg-[#faf7f4] p-4 ring-1 ring-black/6" }, /* @__PURE__ */ React.createElement("div", { className: "text-lg font-bold text-zinc-900" }, locales.getText("pisell2.venue.checkout.notice") || "备注"), /* @__PURE__ */ React.createElement("textarea", {
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 shadow-[0_10px_40px_rgba(20,20,20,0.06)] ring-1 ring-black/6",
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 ring-1 ring-black/6 shadow-[0_10px_30px_rgba(20,20,20,0.04)]"
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/6 md:hidden" }, backSteps.map((item, idx) => /* @__PURE__ */ React.createElement("button", {
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 ring-1 ring-black/10 transition hover:bg-zinc-100"
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 ring-1 ring-black/8"}`,
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 ring-1 ring-black/10 transition hover:bg-zinc-100"
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 ring-1 ring-black/8"}`,
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] ring-1 ring-black/8 md:h-12 md:w-12",
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 ring-1 ring-black/8 xl:min-w-[200px] xl:flex-none",
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] ring-1 ring-black/8 md:h-12 md:w-12",
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 ring-1 ring-black/5 md:min-h-[60px] md:rounded-[16px] md:px-3 md: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 ring-1 ring-zinc-200" : active ? "text-white shadow-sm" : "bg-white text-zinc-800 ring-1 ring-black/8 hover:bg-zinc-50";
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/6 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] ring-1 ring-black/8 hover:bg-zinc-50",
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] ring-1 ring-black/8 hover:bg-zinc-50",
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 ring-1 ring-zinc-200" : selected ? "text-white shadow-sm" : isToday ? "" : "bg-[#fafafa] text-zinc-700 ring-1 ring-black/6";
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/6",
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/6 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",
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/6",
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/6 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", {
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/6 bg-zinc-50/60",
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/6 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) => {
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/6",
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/6 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, {
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/6",
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/6 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", {
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 shadow-[0_10px_40px_rgba(20,20,20,0.06)] ring-1 ring-black/6 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, {
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 shadow-[0_10px_40px_rgba(20,20,20,0.06)] ring-1 ring-black/6"
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
- if (venueBookingModule && typeof venueBookingModule.getSummary === "function") try {
205
- yield venueBookingModule.getSummary();
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] getSummary failed during refreshViewModel", error);
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
- * 从 OS 模块快照构建 ViewModel(购物车部分)
193
+ * 等待 OS 金额汇总后,从模块快照构建 ViewModel(购物车部分)
194
194
  * 购物车数据使用 toShoppingCartProducts 转换为 ShoppingCart 组件所需格式
195
195
  */
196
- function createVenueBookingViewModel(module) {
197
- const orderProducts = callModuleGetter(module, "getOrderProducts", []);
198
- const summaryByGetter = callModuleGetter(module, "getSummary", null);
199
- const tempOrder = callModuleGetter(module, "getTempOrder", null);
200
- const amountSymbol = (tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.currency_symbol) || "$";
201
- const cartItems = toShoppingCartProducts({
202
- orderProducts: Array.isArray(orderProducts) ? orderProducts : [],
203
- amountSymbol
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
- const summary = (summaryByGetter && typeof summaryByGetter === "object" ? summaryByGetter : null) || (tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.summary) || {};
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 shadow-[0_10px_40px_rgba(20,20,20,0.06)] ring-1 ring-black/6 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 ring-1 ring-black/6 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 ring-1 ring-black/6" }, /* @__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 shadow-[0_10px_40px_rgba(20,20,20,0.06)] ring-1 ring-black/6 md:p-6" }, /* @__PURE__ */ react.default.createElement("div", { className: "mt-5 rounded-[22px] bg-[#faf7f4] p-4 ring-1 ring-black/6" }, /* @__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", {
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 shadow-[0_10px_40px_rgba(20,20,20,0.06)] ring-1 ring-black/6",
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 ring-1 ring-black/6 shadow-[0_10px_30px_rgba(20,20,20,0.04)]"
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/6 md:hidden" }, backSteps.map((item, idx) => /* @__PURE__ */ react.default.createElement("button", {
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 ring-1 ring-black/10 transition hover:bg-zinc-100"
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 ring-1 ring-black/8"}`,
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 ring-1 ring-black/10 transition hover:bg-zinc-100"
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 ring-1 ring-black/8"}`,
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] ring-1 ring-black/8 md:h-12 md:w-12",
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 ring-1 ring-black/8 xl:min-w-[200px] xl:flex-none",
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] ring-1 ring-black/8 md:h-12 md:w-12",
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 ring-1 ring-black/5 md:min-h-[60px] md:rounded-[16px] md:px-3 md: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 ring-1 ring-zinc-200" : active ? "text-white shadow-sm" : "bg-white text-zinc-800 ring-1 ring-black/8 hover:bg-zinc-50";
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/6 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] ring-1 ring-black/8 hover:bg-zinc-50",
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] ring-1 ring-black/8 hover:bg-zinc-50",
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 ring-1 ring-zinc-200" : selected ? "text-white shadow-sm" : isToday ? "" : "bg-[#fafafa] text-zinc-700 ring-1 ring-black/6";
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)"