@pisell/materials 6.11.36 → 6.11.38

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 (200) 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/index.js +1 -1
  5. package/build/lowcode/meta.js +1 -1
  6. package/build/lowcode/preview.js +8 -8
  7. package/build/lowcode/render/default/view.css +1 -1
  8. package/build/lowcode/render/default/view.js +26 -56
  9. package/build/lowcode/view.css +1 -1
  10. package/build/lowcode/view.js +26 -56
  11. package/es/components/PisellLayouts/index.d.ts +1 -1
  12. package/es/components/colorPicker/index.d.ts +0 -1
  13. package/es/components/dataSourceComponents/dataSourceForm/utils.d.ts +1 -1
  14. package/es/components/dataSourceComponents/dataSourceTable/hooks/useTableProps.d.ts +2 -2
  15. package/es/components/dataSourceComponents/fields/RecordListWrapper/index.d.ts +1 -1
  16. package/es/components/dataSourceComponents/fields/Select/index.d.ts +1 -1
  17. package/es/components/dataSourceComponents/fields/Tabs/index.d.ts +1 -1
  18. package/es/components/dataSourceComponents/fields/Upload/utils.d.ts +1 -1
  19. package/es/components/dataSourceComponents/fields/index.d.ts +6 -6
  20. package/es/components/filter/components/items/index.d.ts +0 -1
  21. package/es/components/filter/components/items/text/Editor/index.d.ts +0 -1
  22. package/es/components/filter/components/items/text/Preview/index.d.ts +0 -1
  23. package/es/components/filter/components/items/text/index.d.ts +0 -1
  24. package/es/components/pisellFloorMapLayout/PisellFloorMapLayout.d.ts +2 -1
  25. package/es/components/pisellFloorMapLayout/PisellFloorMapLayout.js +47 -3
  26. package/es/components/pisellFloorMapLayout/types.d.ts +7 -7
  27. package/es/components/pisellFloorMapLayout/types.js +2 -2
  28. package/es/components/pisellRecordBoard/index.d.ts +1 -1
  29. package/es/components/pisellRecordBoard/shellFrame/Calendar/BookingCalendar.d.ts +5 -0
  30. package/es/components/pisellRecordBoard/shellFrame/Calendar/BookingCalendar.js +1039 -0
  31. package/es/components/pisellRecordBoard/shellFrame/Calendar/BookingCalendar.less +323 -0
  32. package/es/components/pisellRecordBoard/shellFrame/Calendar/PisellRecordBoardCalendarView.d.ts +5 -1
  33. package/es/components/pisellRecordBoard/shellFrame/Calendar/PisellRecordBoardCalendarView.js +10 -10
  34. package/es/components/pisellRecordBoard/shellFrame/Calendar/bookingCalendarViewShared.d.ts +23 -0
  35. package/es/components/pisellRecordBoard/shellFrame/Calendar/bookingCalendarViewShared.js +287 -0
  36. package/es/components/pisellRecordBoard/shellFrame/Calendar/calendarI18n.d.ts +4 -0
  37. package/es/components/pisellRecordBoard/shellFrame/Calendar/calendarI18n.js +28 -0
  38. package/es/components/pisellRecordBoard/shellFrame/Calendar/calendarPersistGuard.d.ts +1 -1
  39. package/es/components/pisellRecordBoard/shellFrame/Calendar/const/bookingCalendarConstants.d.ts +36 -0
  40. package/es/components/pisellRecordBoard/shellFrame/Calendar/const/bookingCalendarConstants.js +38 -0
  41. package/es/components/pisellRecordBoard/shellFrame/Calendar/index.d.ts +3 -0
  42. package/es/components/pisellRecordBoard/shellFrame/Calendar/index.js +3 -0
  43. package/es/components/pisellRecordBoard/shellFrame/Calendar/modal/MoveConfirmModal.d.ts +17 -0
  44. package/es/components/pisellRecordBoard/shellFrame/Calendar/modal/MoveConfirmModal.js +197 -0
  45. package/es/components/pisellRecordBoard/shellFrame/Calendar/modal/OverflowListModal.d.ts +17 -0
  46. package/es/components/pisellRecordBoard/shellFrame/Calendar/modal/OverflowListModal.js +65 -0
  47. package/es/components/pisellRecordBoard/shellFrame/Calendar/modal/OverflowPopover.d.ts +9 -0
  48. package/es/components/pisellRecordBoard/shellFrame/Calendar/modal/OverflowPopover.js +52 -0
  49. package/es/components/pisellRecordBoard/shellFrame/Calendar/utils/BookingCalendarStyle.d.ts +10 -0
  50. package/es/components/pisellRecordBoard/shellFrame/Calendar/utils/BookingCalendarStyle.js +58 -0
  51. package/es/components/pisellRecordBoard/shellFrame/Calendar/utils/bookingCalendarDateUtils.d.ts +232 -0
  52. package/es/components/pisellRecordBoard/shellFrame/Calendar/utils/bookingCalendarDateUtils.js +735 -0
  53. package/es/components/pisellRecordBoard/shellFrame/Calendar/view/BookingCalendarDaySelectionBar.d.ts +13 -0
  54. package/es/components/pisellRecordBoard/shellFrame/Calendar/view/BookingCalendarDaySelectionBar.js +37 -0
  55. package/es/components/pisellRecordBoard/shellFrame/Calendar/view/BookingCalendarDayView.d.ts +56 -0
  56. package/es/components/pisellRecordBoard/shellFrame/Calendar/view/BookingCalendarDayView.js +682 -0
  57. package/es/components/pisellRecordBoard/shellFrame/Calendar/view/BookingCalendarMonthView.d.ts +18 -0
  58. package/es/components/pisellRecordBoard/shellFrame/Calendar/view/BookingCalendarMonthView.js +155 -0
  59. package/es/components/pisellRecordBoard/shellFrame/Calendar/view/BookingCalendarWeekView.d.ts +27 -0
  60. package/es/components/pisellRecordBoard/shellFrame/Calendar/view/BookingCalendarWeekView.js +259 -0
  61. package/es/components/pisellRecordBoard/shellFrame/Calendar/view/bookingCalendarDayViewContext.d.ts +12 -0
  62. package/es/components/pisellRecordBoard/shellFrame/Calendar/view/bookingCalendarDayViewContext.js +19 -0
  63. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/NoteTicker.d.ts +2 -1
  64. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/NoteTicker.js +44 -14
  65. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/PisellRecordBoardResourceWallView.d.ts +4 -2
  66. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/PisellRecordBoardResourceWallView.js +117 -125
  67. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallControlPanel.d.ts +3 -5
  68. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallControlPanel.js +71 -352
  69. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallControlPanelColorTab.d.ts +17 -0
  70. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallControlPanelColorTab.js +143 -0
  71. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallControlPanelLayoutTab.d.ts +28 -0
  72. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallControlPanelLayoutTab.js +128 -0
  73. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallViewport.less +8 -0
  74. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallViewportToolbar.d.ts +18 -0
  75. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallViewportToolbar.js +115 -0
  76. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/VenueWallCard.d.ts +6 -4
  77. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/VenueWallCard.js +63 -120
  78. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/resourceWallConstants.d.ts +2 -0
  79. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/resourceWallConstants.js +2 -0
  80. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallCardPresentation.d.ts +42 -0
  81. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallCardPresentation.js +114 -0
  82. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallUtils.d.ts +26 -0
  83. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallUtils.js +54 -1
  84. package/es/components/pisellRecordBoard/shellFrame/ToolBar/index.js +67 -12
  85. package/es/components/pisellRecordBoard/shellFrame/index.js +34 -7
  86. package/es/components/pisellRecordBoard/types.d.ts +97 -4
  87. package/es/components/pisellRecordBoard/types.js +18 -2
  88. package/es/components/pisellReservationScheduleBand/PisellReservationScheduleBand.less +34 -2
  89. package/es/components/pisellShellFrame/PisellShellFrame.less +5 -2
  90. package/es/components/table/Table/SelectField/index.d.ts +0 -1
  91. package/es/components/table/Table/tableConfig/summary/index.d.ts +0 -1
  92. package/es/hooks/useResponsive.d.ts +1 -1
  93. package/es/index.d.ts +1 -1
  94. package/es/locales/en-US.d.ts +74 -0
  95. package/es/locales/en-US.js +76 -1
  96. package/es/locales/ja.d.ts +74 -0
  97. package/es/locales/ja.js +75 -0
  98. package/es/locales/pt.d.ts +74 -0
  99. package/es/locales/pt.js +75 -0
  100. package/es/locales/zh-CN.d.ts +74 -0
  101. package/es/locales/zh-CN.js +76 -1
  102. package/es/locales/zh-TW.d.ts +74 -0
  103. package/es/locales/zh-TW.js +76 -1
  104. package/es/pisell-materials.tw.css +1 -1
  105. package/lib/components/PisellLayouts/index.d.ts +1 -1
  106. package/lib/components/colorPicker/index.d.ts +0 -1
  107. package/lib/components/dataSourceComponents/dataSourceForm/utils.d.ts +1 -1
  108. package/lib/components/dataSourceComponents/dataSourceTable/hooks/useTableProps.d.ts +2 -2
  109. package/lib/components/dataSourceComponents/fields/RecordListWrapper/index.d.ts +1 -1
  110. package/lib/components/dataSourceComponents/fields/Select/index.d.ts +1 -1
  111. package/lib/components/dataSourceComponents/fields/Tabs/index.d.ts +1 -1
  112. package/lib/components/dataSourceComponents/fields/Upload/utils.d.ts +1 -1
  113. package/lib/components/dataSourceComponents/fields/index.d.ts +6 -6
  114. package/lib/components/filter/components/items/index.d.ts +0 -1
  115. package/lib/components/filter/components/items/text/Editor/index.d.ts +0 -1
  116. package/lib/components/filter/components/items/text/Preview/index.d.ts +0 -1
  117. package/lib/components/filter/components/items/text/index.d.ts +0 -1
  118. package/lib/components/pisellFloorMapLayout/PisellFloorMapLayout.d.ts +2 -1
  119. package/lib/components/pisellFloorMapLayout/PisellFloorMapLayout.js +1 -1
  120. package/lib/components/pisellFloorMapLayout/types.d.ts +7 -7
  121. package/lib/components/pisellRecordBoard/index.d.ts +1 -1
  122. package/lib/components/pisellRecordBoard/shellFrame/Calendar/BookingCalendar.d.ts +5 -0
  123. package/lib/components/pisellRecordBoard/shellFrame/Calendar/BookingCalendar.js +892 -0
  124. package/lib/components/pisellRecordBoard/shellFrame/Calendar/BookingCalendar.less +323 -0
  125. package/lib/components/pisellRecordBoard/shellFrame/Calendar/PisellRecordBoardCalendarView.d.ts +5 -1
  126. package/lib/components/pisellRecordBoard/shellFrame/Calendar/PisellRecordBoardCalendarView.js +7 -6
  127. package/lib/components/pisellRecordBoard/shellFrame/Calendar/bookingCalendarViewShared.d.ts +23 -0
  128. package/lib/components/pisellRecordBoard/shellFrame/Calendar/bookingCalendarViewShared.js +268 -0
  129. package/lib/components/pisellRecordBoard/shellFrame/Calendar/calendarI18n.d.ts +4 -0
  130. package/lib/components/pisellRecordBoard/shellFrame/Calendar/calendarI18n.js +53 -0
  131. package/lib/components/pisellRecordBoard/shellFrame/Calendar/calendarPersistGuard.d.ts +1 -1
  132. package/lib/components/pisellRecordBoard/shellFrame/Calendar/const/bookingCalendarConstants.d.ts +36 -0
  133. package/lib/components/pisellRecordBoard/shellFrame/Calendar/const/bookingCalendarConstants.js +98 -0
  134. package/lib/components/pisellRecordBoard/shellFrame/Calendar/index.d.ts +3 -0
  135. package/lib/components/pisellRecordBoard/shellFrame/Calendar/modal/MoveConfirmModal.d.ts +17 -0
  136. package/lib/components/pisellRecordBoard/shellFrame/Calendar/modal/MoveConfirmModal.js +306 -0
  137. package/lib/components/pisellRecordBoard/shellFrame/Calendar/modal/OverflowListModal.d.ts +17 -0
  138. package/lib/components/pisellRecordBoard/shellFrame/Calendar/modal/OverflowListModal.js +111 -0
  139. package/lib/components/pisellRecordBoard/shellFrame/Calendar/modal/OverflowPopover.d.ts +9 -0
  140. package/lib/components/pisellRecordBoard/shellFrame/Calendar/modal/OverflowPopover.js +96 -0
  141. package/lib/components/pisellRecordBoard/shellFrame/Calendar/utils/BookingCalendarStyle.d.ts +10 -0
  142. package/lib/components/pisellRecordBoard/shellFrame/Calendar/utils/BookingCalendarStyle.js +92 -0
  143. package/lib/components/pisellRecordBoard/shellFrame/Calendar/utils/bookingCalendarDateUtils.d.ts +232 -0
  144. package/lib/components/pisellRecordBoard/shellFrame/Calendar/utils/bookingCalendarDateUtils.js +666 -0
  145. package/lib/components/pisellRecordBoard/shellFrame/Calendar/view/BookingCalendarDaySelectionBar.d.ts +13 -0
  146. package/lib/components/pisellRecordBoard/shellFrame/Calendar/view/BookingCalendarDaySelectionBar.js +90 -0
  147. package/lib/components/pisellRecordBoard/shellFrame/Calendar/view/BookingCalendarDayView.d.ts +56 -0
  148. package/lib/components/pisellRecordBoard/shellFrame/Calendar/view/BookingCalendarDayView.js +812 -0
  149. package/lib/components/pisellRecordBoard/shellFrame/Calendar/view/BookingCalendarMonthView.d.ts +18 -0
  150. package/lib/components/pisellRecordBoard/shellFrame/Calendar/view/BookingCalendarMonthView.js +219 -0
  151. package/lib/components/pisellRecordBoard/shellFrame/Calendar/view/BookingCalendarWeekView.d.ts +27 -0
  152. package/lib/components/pisellRecordBoard/shellFrame/Calendar/view/BookingCalendarWeekView.js +352 -0
  153. package/lib/components/pisellRecordBoard/shellFrame/Calendar/view/bookingCalendarDayViewContext.d.ts +12 -0
  154. package/lib/components/pisellRecordBoard/shellFrame/Calendar/view/bookingCalendarDayViewContext.js +57 -0
  155. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/NoteTicker.d.ts +2 -1
  156. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/NoteTicker.js +44 -9
  157. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/PisellRecordBoardResourceWallView.d.ts +4 -2
  158. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/PisellRecordBoardResourceWallView.js +60 -142
  159. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallControlPanel.d.ts +3 -5
  160. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallControlPanel.js +40 -269
  161. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallControlPanelColorTab.d.ts +17 -0
  162. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallControlPanelColorTab.js +163 -0
  163. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallControlPanelLayoutTab.d.ts +28 -0
  164. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallControlPanelLayoutTab.js +136 -0
  165. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallViewport.less +8 -0
  166. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallViewportToolbar.d.ts +18 -0
  167. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/ResourceWallViewportToolbar.js +175 -0
  168. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/VenueWallCard.d.ts +6 -4
  169. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/VenueWallCard.js +61 -88
  170. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/resourceWallConstants.d.ts +2 -0
  171. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/resourceWallConstants.js +29 -0
  172. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallCardPresentation.d.ts +42 -0
  173. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallCardPresentation.js +139 -0
  174. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallUtils.d.ts +26 -0
  175. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallUtils.js +31 -3
  176. package/lib/components/pisellRecordBoard/shellFrame/ToolBar/index.js +50 -5
  177. package/lib/components/pisellRecordBoard/shellFrame/index.js +29 -13
  178. package/lib/components/pisellRecordBoard/types.d.ts +97 -4
  179. package/lib/components/pisellReservationScheduleBand/PisellReservationScheduleBand.less +34 -2
  180. package/lib/components/pisellShellFrame/PisellShellFrame.less +5 -2
  181. package/lib/components/table/Table/SelectField/index.d.ts +0 -1
  182. package/lib/components/table/Table/tableConfig/summary/index.d.ts +0 -1
  183. package/lib/hooks/useResponsive.d.ts +1 -1
  184. package/lib/index.d.ts +1 -1
  185. package/lib/locales/en-US.d.ts +74 -0
  186. package/lib/locales/en-US.js +76 -1
  187. package/lib/locales/ja.d.ts +74 -0
  188. package/lib/locales/ja.js +75 -0
  189. package/lib/locales/pt.d.ts +74 -0
  190. package/lib/locales/pt.js +75 -0
  191. package/lib/locales/zh-CN.d.ts +74 -0
  192. package/lib/locales/zh-CN.js +76 -1
  193. package/lib/locales/zh-TW.d.ts +74 -0
  194. package/lib/locales/zh-TW.js +76 -1
  195. package/lib/pisell-materials.tw.css +1 -1
  196. package/package.json +3 -4
  197. package/es/components/pisellRecordBoard/shellFrame/Calendar/BookingCalendarDemo.d.ts +0 -3
  198. package/es/components/pisellRecordBoard/shellFrame/Calendar/BookingCalendarDemo.js +0 -6233
  199. package/lib/components/pisellRecordBoard/shellFrame/Calendar/BookingCalendarDemo.d.ts +0 -3
  200. package/lib/components/pisellRecordBoard/shellFrame/Calendar/BookingCalendarDemo.js +0 -7079
@@ -0,0 +1,139 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallCardPresentation.ts
20
+ var venueWallCardPresentation_exports = {};
21
+ __export(venueWallCardPresentation_exports, {
22
+ buildVenueWallCardPresentation: () => buildVenueWallCardPresentation
23
+ });
24
+ module.exports = __toCommonJS(venueWallCardPresentation_exports);
25
+ var import_locales = require("../../../../locales");
26
+ var import_venueWallUtils = require("./venueWallUtils");
27
+ function buildVenueWallCardPresentation(args) {
28
+ const {
29
+ card,
30
+ toneMap,
31
+ liveRemainingMin,
32
+ liveStartsInMin,
33
+ liveLateMin,
34
+ boardingSoonBeforeMin,
35
+ idleMain,
36
+ idleSub,
37
+ occupiedCardColor,
38
+ availableCardColor
39
+ } = args;
40
+ const statusKey = (0, import_venueWallUtils.deriveVenueWallStatus)({
41
+ ...card,
42
+ remainingMin: liveRemainingMin
43
+ });
44
+ const tone = toneMap[statusKey] ?? toneMap.inUse;
45
+ const isOccupied = ["inUse", "endingSoon", "expired"].includes(statusKey);
46
+ let heroText = isOccupied ? (0, import_venueWallUtils.formatVenueWallCountdown)(liveRemainingMin) : (0, import_locales.getText)("pisell-resource-wall-card-hero-available");
47
+ let heroColor = isOccupied ? statusKey === "inUse" ? "#ffffff" : tone.color : toneMap.available.color;
48
+ let noteText = isOccupied ? tone.note : toneMap.available.note;
49
+ let noteTextColor = isOccupied ? "#ffffff" : idleMain;
50
+ let noteBg = isOccupied ? tone.noteBg : (0, import_venueWallUtils.alphaColor)(availableCardColor, 0.2);
51
+ const subColor = isOccupied ? "rgba(255,255,255,0.80)" : idleSub;
52
+ const mainColor = isOccupied ? "#ffffff" : idleMain;
53
+ let currentLabel = (0, import_locales.getText)("pisell-resource-wall-card-label-current");
54
+ let currentTime = card.currentTime ?? "";
55
+ let currentName = isOccupied ? card.currentBooking ?? "" : "";
56
+ let currentNameColor = mainColor;
57
+ let nextNameColor = mainColor;
58
+ let progress = isOccupied ? (0, import_venueWallUtils.clamp)(liveRemainingMin / 60 * 100, 0, 100) : 0;
59
+ let progressColor = heroColor;
60
+ let rightTag = tone.label;
61
+ let rightTagColor = isOccupied ? "#ffffff" : tone.color;
62
+ let rightTagBg = isOccupied ? statusKey === "inUse" ? "rgba(255,255,255,0.14)" : tone.color : (0, import_venueWallUtils.alphaColor)(tone.color, 0.12);
63
+ let rightTagBorder = isOccupied ? "rgba(255,255,255,0.18)" : (0, import_venueWallUtils.alphaColor)(tone.color, 0.35);
64
+ if (statusKey === "boardingSoon") {
65
+ heroText = (0, import_locales.getText)("pisell-resource-wall-card-starts-in").replace(
66
+ "{n}",
67
+ String(liveStartsInMin)
68
+ );
69
+ heroColor = toneMap.boardingSoon.color;
70
+ noteText = toneMap.boardingSoon.note;
71
+ noteTextColor = toneMap.boardingSoon.color;
72
+ noteBg = (0, import_venueWallUtils.alphaColor)(toneMap.boardingSoon.color, 0.18);
73
+ currentLabel = (0, import_locales.getText)("pisell-resource-wall-card-label-next");
74
+ currentName = card.currentBooking ?? "";
75
+ currentNameColor = toneMap.boardingSoon.color;
76
+ nextNameColor = toneMap.boardingSoon.color;
77
+ progress = (0, import_venueWallUtils.clamp)(
78
+ (boardingSoonBeforeMin - liveStartsInMin) / boardingSoonBeforeMin * 100,
79
+ 0,
80
+ 100
81
+ );
82
+ progressColor = toneMap.boardingSoon.color;
83
+ rightTag = toneMap.boardingSoon.label;
84
+ rightTagColor = toneMap.boardingSoon.color;
85
+ rightTagBg = (0, import_venueWallUtils.alphaColor)(toneMap.boardingSoon.color, 0.12);
86
+ rightTagBorder = (0, import_venueWallUtils.alphaColor)(toneMap.boardingSoon.color, 0.35);
87
+ }
88
+ if (statusKey === "late") {
89
+ heroText = (0, import_locales.getText)("pisell-resource-wall-card-late").replace(
90
+ "{n}",
91
+ String(liveLateMin)
92
+ );
93
+ heroColor = "rgb(239, 68, 68)";
94
+ noteText = toneMap.late.note;
95
+ noteTextColor = toneMap.available.color;
96
+ noteBg = toneMap.available.noteBg;
97
+ currentLabel = (0, import_locales.getText)("pisell-resource-wall-card-label-next");
98
+ currentName = card.currentBooking ?? "";
99
+ currentNameColor = toneMap.available.color;
100
+ nextNameColor = toneMap.available.color;
101
+ progress = 100;
102
+ progressColor = toneMap.available.color;
103
+ rightTag = toneMap.late.label;
104
+ rightTagColor = toneMap.available.color;
105
+ rightTagBg = (0, import_venueWallUtils.alphaColor)(toneMap.available.color, 0.12);
106
+ rightTagBorder = (0, import_venueWallUtils.alphaColor)(toneMap.available.color, 0.35);
107
+ }
108
+ if (statusKey === "expired") {
109
+ heroText = liveRemainingMin < 0 ? (0, import_venueWallUtils.formatVenueWallCountdown)(liveRemainingMin) : liveRemainingMin === 0 ? (0, import_locales.getText)("pisell-resource-wall-countdown-zero-overtime") : (0, import_venueWallUtils.formatVenueWallCountdown)(liveRemainingMin);
110
+ }
111
+ const surfaceAccentColor = statusKey === "late" ? availableCardColor : statusKey === "boardingSoon" ? toneMap.boardingSoon.color : availableCardColor;
112
+ return {
113
+ statusKey,
114
+ isOccupied,
115
+ heroText,
116
+ heroColor,
117
+ noteText,
118
+ noteTextColor,
119
+ noteBg,
120
+ subColor,
121
+ mainColor,
122
+ currentLabel,
123
+ currentTime,
124
+ currentName,
125
+ currentNameColor,
126
+ nextNameColor,
127
+ progress,
128
+ progressColor,
129
+ rightTag,
130
+ rightTagColor,
131
+ rightTagBg,
132
+ rightTagBorder,
133
+ surfaceAccentColor
134
+ };
135
+ }
136
+ // Annotate the CommonJS export names for ESM import in node:
137
+ 0 && (module.exports = {
138
+ buildVenueWallCardPresentation
139
+ });
@@ -1,3 +1,6 @@
1
+ /**
2
+ * 资源墙(Venue Wall)共用工具:六态键、默认色板、倒计时文案、卡片状态推导、配色合并与 diff。
3
+ */
1
4
  import type { RecordBoardResourceWallCardModel } from '../../types';
2
5
  export declare type VenueWallStatusKey = 'inUse' | 'endingSoon' | 'expired' | 'available' | 'boardingSoon' | 'late';
3
6
  /** 单态展示配置(与 {@link VENUE_WALL_STATUS_COLOR_MAP} 值同形) */
@@ -21,11 +24,34 @@ export declare type VenueWallAppearanceTheme = {
21
24
  dark?: VenueWallAppearanceSlot;
22
25
  };
23
26
  export declare const VENUE_WALL_STATUS_KEYS: VenueWallStatusKey[];
27
+ /**
28
+ * 六态默认色与占位英文;`getVenueWallStatusToneMap` 会将 label/note 换为 i18n,此处仅作 merge 基底。
29
+ */
24
30
  export declare const VENUE_WALL_STATUS_COLOR_MAP: Record<VenueWallStatusKey, VenueWallStatusTone>;
31
+ /** 将 `#RGB` / `#RRGGBB` 转为 `rgba(...)`,供渐变与半透明底 */
25
32
  export declare function alphaColor(hex: string, alpha: number): string;
33
+ /** 将数值限制在 [min, max](布局行列、主文案比例等) */
26
34
  export declare const clamp: (value: number, min: number, max: number) => number;
27
35
  /** 由卡片字段推导状态键(与演示页 test.tsx 规则一致) */
28
36
  export declare function deriveVenueWallStatus(card: RecordBoardResourceWallCardModel): VenueWallStatusKey;
37
+ /**
38
+ * ToolBar Sort 写入的 `searchParams.sort`(如 `status:asc:string`)拆出字段名与升降序。
39
+ */
40
+ export declare function parseRecordBoardToolbarSortParam(sort: unknown): {
41
+ field: string;
42
+ dir: 'asc' | 'desc';
43
+ } | null;
44
+ /** 当 Sort 字段名匹配这些 key(忽略大小写)时,资源墙按占用态重排卡片 */
45
+ export declare const DEFAULT_RESOURCE_WALL_STATUS_SORT_FIELD_KEYS: readonly ["status"];
46
+ export declare function matchesResourceWallStatusSortField(sortField: string, keys: readonly string[]): boolean;
47
+ /**
48
+ * 用于资源墙排序:占用/将结/已结束为 1,其余为 0(与 {@link deriveVenueWallStatus} 一致)。
49
+ * asc → 空闲侧在前;desc → 占用侧在前。
50
+ */
51
+ export declare function venueWallOccupiedSortRank(card: RecordBoardResourceWallCardModel): 0 | 1;
52
+ /**
53
+ * 将「剩余/超支分钟数」格式化为跑码条/主副标题用短文案(走 i18n 模板,负值表示 overtime)。
54
+ */
29
55
  export declare function formatVenueWallCountdown(min: number): string;
30
56
  /**
31
57
  * 合并默认六态配色与业务覆盖,供 {@link VenueWallCard} 与 Control Panel 表单初值共用。
@@ -19,6 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  // src/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallUtils.ts
20
20
  var venueWallUtils_exports = {};
21
21
  __export(venueWallUtils_exports, {
22
+ DEFAULT_RESOURCE_WALL_STATUS_SORT_FIELD_KEYS: () => DEFAULT_RESOURCE_WALL_STATUS_SORT_FIELD_KEYS,
22
23
  VENUE_WALL_STATUS_COLOR_MAP: () => VENUE_WALL_STATUS_COLOR_MAP,
23
24
  VENUE_WALL_STATUS_KEYS: () => VENUE_WALL_STATUS_KEYS,
24
25
  alphaColor: () => alphaColor,
@@ -26,7 +27,10 @@ __export(venueWallUtils_exports, {
26
27
  deriveVenueWallStatus: () => deriveVenueWallStatus,
27
28
  diffVenueWallStatusToneOverrides: () => diffVenueWallStatusToneOverrides,
28
29
  formatVenueWallCountdown: () => formatVenueWallCountdown,
29
- getVenueWallStatusToneMap: () => getVenueWallStatusToneMap
30
+ getVenueWallStatusToneMap: () => getVenueWallStatusToneMap,
31
+ matchesResourceWallStatusSortField: () => matchesResourceWallStatusSortField,
32
+ parseRecordBoardToolbarSortParam: () => parseRecordBoardToolbarSortParam,
33
+ venueWallOccupiedSortRank: () => venueWallOccupiedSortRank
30
34
  });
31
35
  module.exports = __toCommonJS(venueWallUtils_exports);
32
36
  var import_locales = require("../../../../locales");
@@ -107,12 +111,32 @@ function deriveVenueWallStatus(card) {
107
111
  if (rm != null && rm <= 10) return "endingSoon";
108
112
  return "inUse";
109
113
  }
114
+ function parseRecordBoardToolbarSortParam(sort) {
115
+ if (sort == null || typeof sort !== "string") return null;
116
+ const idx = sort.indexOf(":");
117
+ if (idx <= 0) return null;
118
+ const field = sort.slice(0, idx);
119
+ const rest = sort.slice(idx + 1);
120
+ const dirSep = rest.indexOf(":");
121
+ const dirRaw = dirSep >= 0 ? rest.slice(0, dirSep) : rest;
122
+ if (dirRaw !== "asc" && dirRaw !== "desc") return null;
123
+ return { field, dir: dirRaw };
124
+ }
125
+ var DEFAULT_RESOURCE_WALL_STATUS_SORT_FIELD_KEYS = ["status"];
126
+ function matchesResourceWallStatusSortField(sortField, keys) {
127
+ const n = sortField.trim().toLowerCase();
128
+ return keys.some((k) => k.trim().toLowerCase() === n);
129
+ }
130
+ function venueWallOccupiedSortRank(card) {
131
+ const k = deriveVenueWallStatus(card);
132
+ return k === "inUse" || k === "endingSoon" || k === "expired" ? 1 : 0;
133
+ }
110
134
  function formatDurationHM(minAbs) {
111
135
  const safe = Number.isFinite(minAbs) ? Math.max(0, Math.floor(minAbs)) : 0;
112
136
  if (safe < 60) return `${safe}m`;
113
137
  const h = Math.floor(safe / 60);
114
138
  const m = safe % 60;
115
- return `${h}h${String(m).padStart(2, "0")}m`;
139
+ return `${h}h ${String(m).padStart(2, "0")}m`;
116
140
  }
117
141
  function formatVenueWallCountdown(min) {
118
142
  if (min < 0) {
@@ -160,6 +184,7 @@ function diffVenueWallStatusToneOverrides(draft) {
160
184
  }
161
185
  // Annotate the CommonJS export names for ESM import in node:
162
186
  0 && (module.exports = {
187
+ DEFAULT_RESOURCE_WALL_STATUS_SORT_FIELD_KEYS,
163
188
  VENUE_WALL_STATUS_COLOR_MAP,
164
189
  VENUE_WALL_STATUS_KEYS,
165
190
  alphaColor,
@@ -167,5 +192,8 @@ function diffVenueWallStatusToneOverrides(draft) {
167
192
  deriveVenueWallStatus,
168
193
  diffVenueWallStatusToneOverrides,
169
194
  formatVenueWallCountdown,
170
- getVenueWallStatusToneMap
195
+ getVenueWallStatusToneMap,
196
+ matchesResourceWallStatusSortField,
197
+ parseRecordBoardToolbarSortParam,
198
+ venueWallOccupiedSortRank
171
199
  });
@@ -48,6 +48,7 @@ var import_useRecordBoardContext = require("../../hooks/useRecordBoardContext");
48
48
  var import_utils = require("@pisell/utils");
49
49
  var import_locales = require("../../../../locales");
50
50
  var import_recordBoardColumns = require("../../utils/recordBoardColumns");
51
+ var import_venueWallUtils = require("../ResourceWall/venueWallUtils");
51
52
  var import_ToolBarFilter = require("./ToolBarFilter.less");
52
53
  var import_recordBoardToolbar = require("./recordBoardToolbar.less");
53
54
  function getSortButtonText() {
@@ -55,6 +56,25 @@ function getSortButtonText() {
55
56
  const u = import_utils.locales.getText(key);
56
57
  return u && u !== key ? u : (0, import_locales.getText)(key) || (0, import_locales.getText)("sort-button-text");
57
58
  }
59
+ function buildResourceWallStatusSortFallbackItem(sortConfig) {
60
+ const extras = typeof sortConfig === "object" && sortConfig !== null && Array.isArray(sortConfig.resourceWallSortFieldKeys) ? sortConfig.resourceWallSortFieldKeys.map((x) => String(x).trim()).filter(Boolean) : [];
61
+ const primaryKey = extras.length > 0 ? extras[0] : import_venueWallUtils.DEFAULT_RESOURCE_WALL_STATUS_SORT_FIELD_KEYS[0];
62
+ return {
63
+ name: primaryKey,
64
+ label: (0, import_locales.getText)("pisell2.recordBoard.toolbar.sortStatus"),
65
+ isCustom: true,
66
+ getSortItems: () => [
67
+ {
68
+ key: `${primaryKey}:asc:option`,
69
+ label: (0, import_locales.getText)("pisell2.recordBoard.toolbar.sortStatusFreeFirst")
70
+ },
71
+ {
72
+ key: `${primaryKey}:desc:option`,
73
+ label: (0, import_locales.getText)("pisell2.recordBoard.toolbar.sortStatusOccupiedFirst")
74
+ }
75
+ ]
76
+ };
77
+ }
58
78
  function getViewGridLabel() {
59
79
  const key = "pisell2.recordBoard.toolbar.viewGrid";
60
80
  const u = import_utils.locales.getText(key);
@@ -210,13 +230,36 @@ var RecordBoardToolBar = (props) => {
210
230
  [onSearch, searchParams]
211
231
  );
212
232
  const sortList = (0, import_react.useMemo)(() => {
213
- const fromConfig = typeof sortConfig === "object" && sortConfig !== null && Array.isArray(sortConfig.list) ? sortConfig.list : null;
214
- return fromConfig ?? derivedSortFromColumnsList;
215
- }, [sortConfig, derivedSortFromColumnsList]);
233
+ const configuredList = typeof sortConfig === "object" && sortConfig !== null && Array.isArray(sortConfig.list) ? sortConfig.list : null;
234
+ const base = configuredList != null && configuredList.length > 0 ? configuredList : derivedSortFromColumnsList;
235
+ if (bodyView !== "resourceWall") {
236
+ return base;
237
+ }
238
+ const extraWallKeys = typeof sortConfig === "object" && sortConfig !== null && Array.isArray(sortConfig.resourceWallSortFieldKeys) ? sortConfig.resourceWallSortFieldKeys.map(
239
+ String
240
+ ) : [];
241
+ const allowedKeys = [
242
+ ...import_venueWallUtils.DEFAULT_RESOURCE_WALL_STATUS_SORT_FIELD_KEYS.map(String),
243
+ ...extraWallKeys
244
+ ];
245
+ const filtered = base.filter(
246
+ (item) => item.name != null && (0, import_venueWallUtils.matchesResourceWallStatusSortField)(String(item.name), allowedKeys)
247
+ );
248
+ if (filtered.length > 0) return filtered;
249
+ return [buildResourceWallStatusSortFallbackItem(sortConfig)];
250
+ }, [sortConfig, derivedSortFromColumnsList, bodyView]);
251
+ const sortSpreadRest = typeof sortConfig === "object" && sortConfig !== null ? (() => {
252
+ const {
253
+ resourceWallSortFieldKeys: _w,
254
+ list: _omitList,
255
+ ...rest
256
+ } = sortConfig;
257
+ return rest;
258
+ })() : {};
216
259
  const sortNode = hideSort ? null : /* @__PURE__ */ import_react.default.createElement(
217
260
  import_sort.default,
218
261
  {
219
- ...typeof sortConfig === "object" && sortConfig !== null ? sortConfig : {},
262
+ ...sortSpreadRest,
220
263
  list: sortList,
221
264
  value: sortValue,
222
265
  onChange: handleSortChange,
@@ -271,7 +314,9 @@ var RecordBoardToolBar = (props) => {
271
314
  let outOther = otherFilter;
272
315
  if (bodyView === "resourceWall") {
273
316
  outQuick = [];
274
- outOther = quickFilterList.length > 0 ? quickFilterList.map((item) => ({ ...item })) : [];
317
+ outOther = quickFilterList.filter(
318
+ (item) => (item.key ?? item.name ?? "") === resourceWallFilterFieldKey
319
+ ).map((item) => ({ ...item }));
275
320
  }
276
321
  return {
277
322
  ...base,
@@ -62,6 +62,18 @@ var import_RecordBoardResourceWall = __toESM(require("./ResourceWall/RecordBoard
62
62
  var import_PisellRecordBoardResourceWallView = require("./ResourceWall/PisellRecordBoardResourceWallView");
63
63
  var import_ShellBodyMetaContext = require("./ShellBodyMetaContext");
64
64
  var import_ShellBodyMetaContext2 = require("./ShellBodyMetaContext");
65
+ function mergeRecordBoardSlotProps(root, child) {
66
+ if (!child || Object.keys(child).length === 0) {
67
+ return root;
68
+ }
69
+ const base = { ...root ?? {} };
70
+ for (const [key, val] of Object.entries(child)) {
71
+ if (val !== void 0) {
72
+ base[key] = val;
73
+ }
74
+ }
75
+ return base;
76
+ }
65
77
  var FILL_HEIGHT_SCROLL_STYLE = {
66
78
  flex: 1,
67
79
  minHeight: 0,
@@ -122,28 +134,28 @@ var RecordBoardShellFrame = ({ children, className, style }) => {
122
134
  } = (0, import_react.useMemo)(() => (0, import_partitionShellFrameChildren.partitionShellFrameChildren)(children), [children]);
123
135
  const effectiveFloorMapProps = (0, import_react.useMemo)(() => {
124
136
  if (hasFloorMapChild) {
125
- return {
126
- ...ctx.floorMapProps ?? {},
127
- ...floorMapPropsFromChild ?? {}
128
- };
137
+ return mergeRecordBoardSlotProps(
138
+ ctx.floorMapProps,
139
+ floorMapPropsFromChild
140
+ );
129
141
  }
130
142
  return ctx.floorMapProps;
131
143
  }, [hasFloorMapChild, floorMapPropsFromChild, ctx.floorMapProps]);
132
144
  const effectiveCalendarProps = (0, import_react.useMemo)(() => {
133
145
  if (hasCalendarChild) {
134
- return {
135
- ...ctx.calendarProps ?? {},
136
- ...calendarPropsFromChild ?? {}
137
- };
146
+ return mergeRecordBoardSlotProps(
147
+ ctx.calendarProps,
148
+ calendarPropsFromChild
149
+ );
138
150
  }
139
151
  return ctx.calendarProps;
140
152
  }, [hasCalendarChild, calendarPropsFromChild, ctx.calendarProps]);
141
153
  const effectiveResourceWallProps = (0, import_react.useMemo)(() => {
142
154
  if (hasResourceWallChild) {
143
- return {
144
- ...ctx.resourceWallProps ?? {},
145
- ...resourceWallPropsFromChild ?? {}
146
- };
155
+ return mergeRecordBoardSlotProps(
156
+ ctx.resourceWallProps,
157
+ resourceWallPropsFromChild
158
+ );
147
159
  }
148
160
  return ctx.resourceWallProps;
149
161
  }, [hasResourceWallChild, resourceWallPropsFromChild, ctx.resourceWallProps]);
@@ -300,7 +312,11 @@ var RecordBoardShellFrame = ({ children, className, style }) => {
300
312
  import_pisellShellFrame.PisellShellFrame,
301
313
  {
302
314
  className: (0, import_classnames.default)(className, {
303
- "pisell-shell-frame--floor-map-view": !showGrid
315
+ /** 非表格主区:工具栏与内容区无缝(与 PisellShellFrame.less body-subview 配对) */
316
+ "pisell-shell-frame--body-subview": !showGrid,
317
+ "pisell-shell-frame--floor-map-view": showFloorMap,
318
+ "pisell-shell-frame--calendar-view": showCalendar,
319
+ "pisell-shell-frame--resource-wall-view": showResourceWall
304
320
  }),
305
321
  style: shellStyle,
306
322
  config: {
@@ -226,6 +226,33 @@ export interface RecordBoardCalendarBookingRenderArgs {
226
226
  onDragStart: (item: RecordBoardCalendarBookingLike) => void;
227
227
  onJumpNext: () => void;
228
228
  }
229
+ /**
230
+ * 月 / 周格内单条预约插槽参数。
231
+ * 未使用 {@link RecordBoardCalendarProps.renderMonthWeekBooking} 时,月 / 周格仅默认 booking(紫)/ block(红),不展示状态徽标与按状态的底色。
232
+ */
233
+ export interface RecordBoardCalendarGridBookingRenderArgs {
234
+ item: RecordBoardCalendarBookingLike;
235
+ dateKey: string;
236
+ view: 'month' | 'week';
237
+ isLight: boolean;
238
+ /**
239
+ * 日历建议的外层样式(圆角、内边距、默认 booking/block 底色),可与自定义 `className` 拼接。
240
+ * 宿主若完全自定义外观,可忽略本字段。
241
+ */
242
+ layoutClassName: string;
243
+ onOpenDetail: (item: RecordBoardCalendarBookingLike) => void;
244
+ /** 开始拖拽(月视图内置会处理 `draggable`;周格当前未挂 draggable,可自行在插槽内处理) */
245
+ onDragStart?: (item: RecordBoardCalendarBookingLike) => void;
246
+ draggable: boolean;
247
+ }
248
+ /** 拖拽改期的投放目标(与日历内部确认态 moveDraft 字段一致)。 */
249
+ export interface RecordBoardBookingMoveDraft {
250
+ targetCourtId: string;
251
+ /** `YYYY-MM-DD` */
252
+ targetDate: string;
253
+ /** 与日历 `hourSlots` 一致的浮点起点小时(可含半格如 9.5) */
254
+ targetHour: number;
255
+ }
229
256
  /**
230
257
  * 对接 `POST /shop/schedule/blocked-time` 的请求体(与后台字段一致)。
231
258
  */
@@ -239,9 +266,40 @@ export interface RecordBoardCalendarBlockedTimePayload {
239
266
  /** `YYYY-MM-DD HH:mm` */
240
267
  end_time: string;
241
268
  }
269
+ /** 日视图连续空闲槽合并后的一段(与内置锁台面版预填一致) */
270
+ export interface RecordBoardBlockedTimeMergedRange {
271
+ courtId: string;
272
+ /** `YYYY-MM-DD` */
273
+ date: string;
274
+ /** 与时间轴一致的浮点小时 */
275
+ startHour: number;
276
+ endHour: number;
277
+ }
278
+ /** 日视图多选的空闲格 */
279
+ export interface RecordBoardCalendarSelectedFreeSlot {
280
+ courtId: string;
281
+ date: string;
282
+ hour: number;
283
+ court?: string;
284
+ }
285
+ /** 宿主弹出锁台/屏蔽表单时由日历传入的上下文(替代内置锁台面版) */
286
+ export interface RecordBoardBlockedTimePanelPayload {
287
+ /** 槽位步长(小时),与日历内部 `slotStepHours` 一致 */
288
+ slotStepHours: number;
289
+ /** 与 {@link RecordBoardCalendarProps.slotStepMinutes} 一致 */
290
+ slotStepMinutes: number;
291
+ /** 日视图锚定日 `YYYY-MM-DD` */
292
+ dayKey: string;
293
+ selectedFreeSlots: RecordBoardCalendarSelectedFreeSlot[];
294
+ mergedRange: RecordBoardBlockedTimeMergedRange;
295
+ }
242
296
  /** 日历视图槽位 props:由 Shell 合并根级与子槽后传入 PisellRecordBoardCalendarView */
243
297
  export interface RecordBoardCalendarProps {
244
298
  persistGuard?: CalendarPersistContextValue;
299
+ /**
300
+ * 日历画布外观:亮色切换 `theme-root.theme-light`;未传或 `dark` 为深色(默认)。
301
+ */
302
+ appearance?: 'light' | 'dark';
245
303
  className?: string;
246
304
  style?: CSSProperties;
247
305
  /** 受控:画布等资源行;不传则使用内置演示数据 */
@@ -253,8 +311,18 @@ export interface RecordBoardCalendarProps {
253
311
  * 点击预约条。返回 true 表示已消费(不再打开内置详情抽屉)。
254
312
  */
255
313
  onBookingClick?: (item: RecordBoardCalendarBookingLike) => boolean | void;
314
+ /**
315
+ * 拖拽预约条松手且投放合法后,由宿主接管确认与持久化(例如业务侧 booking 改约弹窗)。
316
+ * **传入后**日历不再弹出内置 MoveConfirmModal,也不会写入本地 bookings。
317
+ * 返回 `true` 表示宿主已视为完成(一般由弹窗 resolve);`false`/`undefined`/reject 表示未生效。
318
+ */
319
+ onBookingMoveRequest?: (payload: {
320
+ item: RecordBoardCalendarBookingLike;
321
+ draft: RecordBoardBookingMoveDraft;
322
+ }) => Promise<boolean | void>;
256
323
  /**
257
324
  * 锚点日 / 视图变化(月、周、日),用于父级扩展 booking 请求时间窗。
325
+ * 宿主导出时建议对拉数做 **debounce**(如 200–300ms),与切 `bodyView`、切日等快速操作对齐,避免重复请求。
258
326
  */
259
327
  onViewportChange?: (payload: {
260
328
  view: string;
@@ -282,8 +350,14 @@ export interface RecordBoardCalendarProps {
282
350
  /**
283
351
  * 保存「屏蔽时间」时提交(如 `/shop/schedule/blocked-time`)。
284
352
  * 返回 `false` 表示未成功(弹窗保持);`true` 或 `undefined` 视为成功并关闭弹窗、清空选中。
353
+ * 若同时传 {@link onBlockedTimePanelRequest},内置锁台面版不再展示,本回调仅在内置路径生效。
285
354
  */
286
355
  onBlockedTimeSave?: (payload: RecordBoardCalendarBlockedTimePayload) => Promise<boolean | void>;
356
+ /**
357
+ * 日视图选中连续空闲槽并点「屏蔽」时,由宿主弹出锁台表单(替代内置锁台面版)。
358
+ * **传入后**不再渲染内置屏蔽弹层;未传时仍使用内置表单 + {@link onBlockedTimeSave}。
359
+ */
360
+ onBlockedTimePanelRequest?: (payload: RecordBoardBlockedTimePanelPayload) => Promise<boolean | void>;
287
361
  /** 与接口 `blocked_sales_channels` 一致;默认 `['online_store']` */
288
362
  blockedTimeSalesChannels?: string[];
289
363
  /**
@@ -296,8 +370,14 @@ export interface RecordBoardCalendarProps {
296
370
  * 若同时传 {@link renderTimelineHeader},则仅渲染插槽,**忽略**本字段。
297
371
  */
298
372
  timelineHeaderGroups?: RecordBoardCalendarTimelineHeaderGroup[];
299
- /** 自定义日视图时间轴上的预约条内容(周/月格内仍用内置紧凑摘要) */
373
+ /**
374
+ * 自定义日视图时间轴上的预约条内容(仅日视图 overlay 生效;月 / 周见 {@link renderMonthWeekBooking})。
375
+ */
300
376
  renderBooking?: (args: RecordBoardCalendarBookingRenderArgs) => ReactNode;
377
+ /**
378
+ * 自定义月 / 周格内单条预约。未传时仅默认 booking / block 样式与名称、时间,不展示迟到/取消等状态徽标与状态变色。
379
+ */
380
+ renderMonthWeekBooking?: (args: RecordBoardCalendarGridBookingRenderArgs) => ReactNode;
301
381
  /** 自定义周/日视图左侧资源列单元 */
302
382
  renderResourceCell?: (args: RecordBoardCalendarResourceRenderArgs) => ReactNode;
303
383
  }
@@ -353,8 +433,11 @@ export interface RecordBoardResourceWallLayoutPersist {
353
433
  export declare const DEFAULT_RESOURCE_WALL_LAYOUT_PERSIST: RecordBoardResourceWallLayoutPersist;
354
434
  /**
355
435
  * 大屏资源墙视图 props;与 Shell 内 `PisellRecordBoard.ResourceWall` 合并(子优先)。
356
- * 展示顺序由 `searchParams.filter.values[filterFieldKey]`(默认 `resource_wall_resource_ids`)非空 `string[]` 决定;
357
- * **未写该键、值非数组、或 `[]`**:不展示卡片。每个 id 优先用 `cards` 中同 `resourceId` 的项,否则用占位卡(仅 id)。
436
+ * 展示顺序默认由 `searchParams.filter.values[filterFieldKey]`(默认 `resource_wall_resource_ids`)非空 `string[]` 决定;
437
+ * **未写该键、值非数组、或 `[]`**:不展示卡片。**仅渲染 `cards` 中能按 `resourceId` 命中的项**;
438
+ * 命中不到的 id(例如磁盘残留的旧店铺 / 已删资源)直接剔除、不再回退成「数字占位卡」,磁盘清洗由宿主负责。
439
+ * 当 `searchParams.sort` 的字段名与 {@link RecordBoardResourceWallProps.statusSortFieldKeys} 匹配(默认 `status`)时,
440
+ * 在筛选顺序基础上按卡占用态重排:升序空闲在前,降序占用(inUse/将结/已结束)在前。
358
441
  */
359
442
  export interface RecordBoardResourceWallProps {
360
443
  className?: string;
@@ -367,6 +450,12 @@ export interface RecordBoardResourceWallProps {
367
450
  * @default 'resource_wall_resource_ids'
368
451
  */
369
452
  filterFieldKey?: string;
453
+ /**
454
+ * 与 ToolBar `searchParams.sort` 首段字段名比对(忽略大小写);命中时资源墙按卡状态重排。
455
+ * 列 key 不是 `status` 时传入实际字段名,例如 `['courtStatus']`。
456
+ * @default ['status']
457
+ */
458
+ statusSortFieldKeys?: string[];
370
459
  /** 六态文案/配色覆盖(与默认 map 浅合并);通常由宿主从 localStorage 水合 */
371
460
  statusToneOverrides?: VenueWallStatusToneOverrides;
372
461
  /** 覆盖变更时回调,宿主可写入 localStorage */
@@ -507,7 +596,11 @@ export interface RecordBoardToolBarProps {
507
596
  search?: boolean | RecordBoardSearchProps;
508
597
  /** 在 ToolBar 右侧渲染筛选:默认 PisellFilter;对象透传 PisellFilter props;false 不渲染。值存于 searchParams.filter */
509
598
  filter?: boolean | RecordBoardFilterProps;
510
- /** 在 ToolBar 内、筛选左侧渲染排序:默认 Sort;对象可传 list、placement 等;false 不渲染。值存于 searchParams.sort */
599
+ /**
600
+ * 在 ToolBar 内、筛选左侧渲染排序:默认 Sort;对象可传 list、placement 等;false 不渲染。值存于 searchParams.sort。
601
+ * 资源墙视图:排序**菜单内**仅保留「状态」相关项(其余排序仅在表格等视图出现);若无状态列派生项,会注入「空闲优先 / 占用优先」子项。
602
+ * 可传 `resourceWallSortFieldKeys: string[]` 与非 `status` 列 key 对齐。表格/平面图/日历仍使用完整排序列表。
603
+ */
511
604
  sort?: boolean | Record<string, any>;
512
605
  /**
513
606
  * 在 ToolBar 左侧展示内联快速筛选(替代 Filter 弹层内的 quickFilter)。
@@ -45,18 +45,39 @@
45
45
  border-radius: 0;
46
46
  background: #141824;
47
47
  border: 1px solid rgba(255, 255, 255, 0.06);
48
+ /**
49
+ * 布局:auto | minmax(0,1fr) | auto
50
+ * - 左:标题 + 视图切换等内容宽占位
51
+ * - 右:「+ New」等固定贴行末
52
+ * - 中间:仅占左、右之间的剩余宽度;选日期 / 跟随时间文案在该「中间区域」内居中(见 .pisell-reservation-schedule-band-schedule)
53
+ */
54
+ /** 左/右栏 min-width:max-content 后整行可能超出视口,允许横向滚动而非压扁左侧 */
55
+ overflow-x: auto;
56
+ overflow-y: visible;
48
57
  }
49
58
 
50
59
  .pisell-reservation-schedule-band-slot-start {
51
60
  justify-self: start;
52
- min-width: 0;
61
+ /** 勿用 min-width:0:会把「标题 + Segmented」挤折行;max-content 保证左侧优先单行横排 */
62
+ min-width: max-content;
53
63
  display: flex;
54
64
  align-items: center;
65
+ flex-direction: row;
66
+ flex-wrap: nowrap;
67
+ /** 中间栏内容偶发溢出绘制时压在左侧 Tab 上,保证左侧在上层 */
68
+ position: relative;
69
+ z-index: 1;
70
+ /** 业务侧(如预约)在插槽里再包一层 merge 时,保证子级也按内容宽参与列宽计算,避免整条 min-width:0 收缩链 */
71
+ > * {
72
+ min-width: max-content;
73
+ flex-shrink: 0;
74
+ }
55
75
  }
56
76
 
57
77
  .pisell-reservation-schedule-band-slot-end {
58
78
  justify-self: end;
59
- min-width: 0;
79
+ /** 右侧按钮区同样保留完整占位,避免被 1fr 中间列挤压 */
80
+ min-width: max-content;
60
81
  display: flex;
61
82
  align-items: center;
62
83
  }
@@ -68,7 +89,18 @@
68
89
  flex-direction: row;
69
90
  flex-wrap: nowrap;
70
91
  align-items: center;
92
+ /**
93
+ * 仅在 Grid 的中间列(左、右扣掉之后的剩余宽度)内居中选日区;
94
+ * 不与「整行居中」混淆,也不会贴死到 + New。
95
+ */
71
96
  justify-content: center;
97
+ @supports (justify-content: safe center) {
98
+ justify-content: safe center;
99
+ }
100
+ /** 中间块总宽超过中间列时在本格内滚动,避免向左绘制盖住左侧 Segmented */
101
+ overflow-x: auto;
102
+ overflow-y: visible;
103
+ box-sizing: border-box;
72
104
  /** 日期与右侧「当前时间」等插槽留出间距,避免贴太紧 */
73
105
  gap: 14px;
74
106
  }
@@ -36,8 +36,11 @@
36
36
  margin-bottom: 8px;
37
37
  }
38
38
 
39
- /** RecordBoard 平面图模式:与日程带衔接,去掉工具栏与内容区间距 */
40
-
39
+ /**
40
+ * RecordBoard 非表格主区(平面图 / 日历 / 资源墙):与顶栏日程带衔接,去掉工具栏与内容区间距。
41
+ * `--floor-map-view` 仍可在仅平面图场景单独挂类;规则与 body-subview 一致。
42
+ */
43
+ &--body-subview &-toolbar,
41
44
  &--floor-map-view &-toolbar {
42
45
  margin-bottom: 0;
43
46
  }
@@ -1,3 +1,2 @@
1
- /// <reference types="react" />
2
1
  declare const SelectField: () => JSX.Element;
3
2
  export default SelectField;
@@ -1,3 +1,2 @@
1
- /// <reference types="react" />
2
1
  declare const summary: (props: any) => JSX.Element;
3
2
  export default summary;
@@ -1,4 +1,4 @@
1
1
  declare type ResponsiveConfig = Record<string, number>;
2
2
  export declare function configResponsive(config: ResponsiveConfig): void;
3
- export default function useResponsive(): "pc" | "ipad" | "phone";
3
+ export default function useResponsive(): "pc" | "phone" | "ipad";
4
4
  export {};