@pisell/materials 6.11.27 → 6.11.29

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 (271) 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 +16 -16
  9. package/build/lowcode/view.css +1 -1
  10. package/build/lowcode/view.js +16 -16
  11. package/es/components/Pagination/index.d.ts +1 -0
  12. package/es/components/PisellBasicGrid/PisellBasicGrid.d.ts +1 -0
  13. package/es/components/PisellCards/components/MultilevelCard/hooks/useMultilevelCardExpand.d.ts +1 -0
  14. package/es/components/PisellCards/components/PisellImageCard/PisellImageCard.d.ts +1 -0
  15. package/es/components/PisellCards/components/PisellImageCard/hooks/useImageLoad.d.ts +1 -0
  16. package/es/components/PisellCards/components/TabCard/TabCard.d.ts +1 -0
  17. package/es/components/PisellCards/components/TextCard/TextCard.d.ts +1 -0
  18. package/es/components/appVersionControl/index.d.ts +0 -1
  19. package/es/components/config-provider/index.d.ts +1 -0
  20. package/es/components/dataSourceComponents/dataSourceForm/formItem.d.ts +1 -0
  21. package/es/components/dataSourceComponents/dataSourceShow/dataSourceImage/index.d.ts +1 -0
  22. package/es/components/dataSourceComponents/dataSourceShow/dataSourceQRCode/index.d.ts +1 -0
  23. package/es/components/dataSourceComponents/dataSourceTable/filter/index.d.ts +1 -0
  24. package/es/components/dataSourceComponents/dataSourceTable/filter/utils.d.ts +1 -0
  25. package/es/components/dataSourceComponents/dataSourceTable/hooks/useDataSourceKey.d.ts +1 -0
  26. package/es/components/dataSourceComponents/dataSourceTable/hooks/useDrawerState.d.ts +0 -1
  27. package/es/components/dataSourceComponents/dataSourceTable/hooks/useTableQuery.d.ts +1 -0
  28. package/es/components/dataSourceComponents/dataSourceWrapper/index.d.ts +1 -0
  29. package/es/components/dataSourceComponents/fields/Input.Json/ReadPretty.d.ts +1 -0
  30. package/es/components/dataSourceComponents/fields/Input.Password/ReadPretty.d.ts +1 -0
  31. package/es/components/dataSourceComponents/fields/Select/index.d.ts +1 -0
  32. package/es/components/dataSourceComponents/fields/Upload/ReadPretty.d.ts +1 -0
  33. package/es/components/dataSourceComponents/fields/index.d.ts +8 -7
  34. package/es/components/date-picker/datePickerCpt.d.ts +1 -0
  35. package/es/components/date-picker/index.d.ts +1 -0
  36. package/es/components/filter/index.d.ts +1 -0
  37. package/es/components/list/index.d.ts +1 -0
  38. package/es/components/lowCodePage/index.d.ts +1 -0
  39. package/es/components/page/index.d.ts +0 -1
  40. package/es/components/pisellDataSourceContainer/PisellDataSourceContainer.d.ts +1 -0
  41. package/es/components/pisellDataSourceContainer/hooks/useDataSourceKey.d.ts +1 -0
  42. package/es/components/pisellFilter/index.d.ts +0 -1
  43. package/es/components/pisellGridPro/GridView/index.d.ts +1 -0
  44. package/es/components/pisellGridPro/components/DataCard/index.d.ts +1 -0
  45. package/es/components/pisellInput/index.d.ts +0 -1
  46. package/es/components/pisellLoading/index.d.ts +1 -0
  47. package/es/components/pisellModal/components/IpadModal/index.d.ts +1 -0
  48. package/es/components/pisellModal/components/MobileModal/index.d.ts +1 -0
  49. package/es/components/pisellModal/components/index.d.ts +1 -0
  50. package/es/components/pisellRecordBoard/PisellRecordBoard.js +8 -5
  51. package/es/components/pisellRecordBoard/index.d.ts +7 -2
  52. package/es/components/pisellRecordBoard/index.js +4 -2
  53. package/es/components/pisellRecordBoard/shellFrame/Calendar/BookingCalendarDemo.js +323 -312
  54. package/es/components/pisellRecordBoard/shellFrame/Calendar/calendarPersistGuard.d.ts +18 -0
  55. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/NoteTicker.d.ts +13 -0
  56. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/NoteTicker.js +37 -0
  57. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/PisellRecordBoardResourceWallView.d.ts +9 -0
  58. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/PisellRecordBoardResourceWallView.js +157 -0
  59. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/RecordBoardResourceWall.d.ts +8 -0
  60. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/RecordBoardResourceWall.js +9 -0
  61. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/VenueWallCard.d.ts +14 -0
  62. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/VenueWallCard.js +513 -0
  63. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/VenueWallMarquee.less +52 -0
  64. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallUtils.d.ts +14 -0
  65. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallUtils.js +82 -0
  66. package/es/components/pisellRecordBoard/shellFrame/ShellBodyMetaContext.d.ts +5 -2
  67. package/es/components/pisellRecordBoard/shellFrame/ToolBar/index.js +58 -19
  68. package/es/components/pisellRecordBoard/shellFrame/ToolBar/recordBoardToolbar.less +5 -3
  69. package/es/components/pisellRecordBoard/shellFrame/index.d.ts +4 -3
  70. package/es/components/pisellRecordBoard/shellFrame/index.js +49 -11
  71. package/es/components/pisellRecordBoard/types.d.ts +78 -2
  72. package/es/components/pisellRecordBoard/utils/partitionShellFrameChildren.d.ts +5 -2
  73. package/es/components/pisellRecordBoard/utils/partitionShellFrameChildren.js +18 -0
  74. package/es/components/pisellReservationSchedule/locales.d.ts +43 -0
  75. package/es/components/pisellReservationSchedule/types.d.ts +52 -0
  76. package/es/components/pisellReservationScheduleBand/types.d.ts +61 -0
  77. package/es/components/pisellSort/index.d.ts +1 -0
  78. package/es/components/pisellTimeNavigator/utils/index.d.ts +41 -0
  79. package/es/components/productCard/cartSkuCard/components/MultiDay/index.d.ts +0 -1
  80. package/es/components/productCard/cartSkuCard/components/resources/index.d.ts +0 -1
  81. package/es/components/productCard/cartSkuCard/components/timeRange/index.d.ts +0 -1
  82. package/es/components/productCard/components/AmountFooter/index.d.ts +1 -0
  83. package/es/components/productCard/components/MultiDay/index.d.ts +1 -0
  84. package/es/components/productCard/components/Note/index.d.ts +1 -0
  85. package/es/components/productCard/components/Packages/components/collapsibleList/utils.d.ts +1 -0
  86. package/es/components/productCard/components/Packages/components/options/index.d.ts +1 -0
  87. package/es/components/productCard/components/Packages/index.d.ts +1 -0
  88. package/es/components/productCard/components/Time/components/SelectResource/index.d.ts +1 -0
  89. package/es/components/productCard/components/Time/index.d.ts +1 -0
  90. package/es/components/qrcode/index.d.ts +1 -0
  91. package/es/components/select-time/index.d.ts +0 -1
  92. package/es/components/table/Actions/component/ColumnsSetting/index.d.ts +1 -0
  93. package/es/components/table/Actions/component/ExportImport/index.d.ts +1 -0
  94. package/es/components/table/Actions/component/GallerySetting/index.d.ts +1 -0
  95. package/es/components/table/Actions/component/Group/index.d.ts +1 -0
  96. package/es/components/table/Actions/index.d.ts +1 -0
  97. package/es/components/table/BasicTable/index.d.ts +1 -0
  98. package/es/components/table/Gallery/components/GalleryItem/components/Cover/index.d.ts +1 -0
  99. package/es/components/table/Gallery/components/GalleryItem/components/RenderFields/index.d.ts +1 -0
  100. package/es/components/table/Gallery/components/GalleryItem/components/Title/index.d.ts +1 -0
  101. package/es/components/table/Table/SelectField/index.d.ts +1 -0
  102. package/es/components/table/Table/fields/date/Show/index.d.ts +1 -0
  103. package/es/components/table/Table/fields/date/index.d.ts +1 -0
  104. package/es/components/table/Table/fields/image/Show/index.d.ts +1 -0
  105. package/es/components/table/Table/fields/index.d.ts +1 -0
  106. package/es/components/table/Table/fields/link/Show/index.d.ts +1 -0
  107. package/es/components/table/Table/fields/number/Show/index.d.ts +1 -0
  108. package/es/components/table/Table/fields/number/index.d.ts +1 -0
  109. package/es/components/table/Table/fields/numberRange/Show/index.d.ts +1 -0
  110. package/es/components/table/Table/fields/numberRange/index.d.ts +1 -0
  111. package/es/components/table/Table/fields/oldRangePicker/Show/index.d.ts +1 -0
  112. package/es/components/table/Table/fields/oldRangePicker/index.d.ts +1 -0
  113. package/es/components/table/Table/fields/pSwitch/Show/index.d.ts +1 -0
  114. package/es/components/table/Table/fields/rangePicker/Show/index.d.ts +1 -0
  115. package/es/components/table/Table/fields/rangePicker/index.d.ts +1 -0
  116. package/es/components/table/Table/fields/search/Show/index.d.ts +1 -0
  117. package/es/components/table/Table/fields/search/index.d.ts +1 -0
  118. package/es/components/table/Table/fields/select/Show/index.d.ts +1 -0
  119. package/es/components/table/Table/fields/select/index.d.ts +1 -0
  120. package/es/components/table/Table/fields/text/Show/index.d.ts +1 -0
  121. package/es/components/table/Table/fields/text/index.d.ts +1 -0
  122. package/es/components/table/Table/fields/treeSelect/Show/index.d.ts +1 -0
  123. package/es/components/table/Table/fields/treeSelect/index.d.ts +1 -0
  124. package/es/components/table/Table/tableConfig/SortRow/index.d.ts +1 -0
  125. package/es/components/table/Table/utils.d.ts +1 -1
  126. package/es/components/table/View/index.d.ts +1 -0
  127. package/es/components/virtual-keyboard/Amount/index.d.ts +1 -0
  128. package/es/index.d.ts +2 -1
  129. package/es/index.js +1 -0
  130. package/es/locales/en-US.d.ts +389 -0
  131. package/es/locales/en-US.js +1 -0
  132. package/es/locales/ja.d.ts +358 -0
  133. package/es/locales/ja.js +1 -0
  134. package/es/locales/pt.d.ts +358 -0
  135. package/es/locales/pt.js +1 -0
  136. package/es/locales/zh-CN.d.ts +384 -0
  137. package/es/locales/zh-CN.js +1 -0
  138. package/es/locales/zh-TW.d.ts +384 -0
  139. package/es/locales/zh-TW.js +1 -0
  140. package/es/pisell-materials.tw.css +1 -1
  141. package/lib/components/Pagination/index.d.ts +1 -0
  142. package/lib/components/PisellBasicGrid/PisellBasicGrid.d.ts +1 -0
  143. package/lib/components/PisellCards/components/MultilevelCard/hooks/useMultilevelCardExpand.d.ts +1 -0
  144. package/lib/components/PisellCards/components/PisellImageCard/PisellImageCard.d.ts +1 -0
  145. package/lib/components/PisellCards/components/PisellImageCard/hooks/useImageLoad.d.ts +1 -0
  146. package/lib/components/PisellCards/components/TabCard/TabCard.d.ts +1 -0
  147. package/lib/components/PisellCards/components/TextCard/TextCard.d.ts +1 -0
  148. package/lib/components/appVersionControl/index.d.ts +0 -1
  149. package/lib/components/config-provider/index.d.ts +1 -0
  150. package/lib/components/dataSourceComponents/dataSourceForm/formItem.d.ts +1 -0
  151. package/lib/components/dataSourceComponents/dataSourceShow/dataSourceImage/index.d.ts +1 -0
  152. package/lib/components/dataSourceComponents/dataSourceShow/dataSourceQRCode/index.d.ts +1 -0
  153. package/lib/components/dataSourceComponents/dataSourceTable/filter/index.d.ts +1 -0
  154. package/lib/components/dataSourceComponents/dataSourceTable/filter/utils.d.ts +1 -0
  155. package/lib/components/dataSourceComponents/dataSourceTable/hooks/useDataSourceKey.d.ts +1 -0
  156. package/lib/components/dataSourceComponents/dataSourceTable/hooks/useDrawerState.d.ts +0 -1
  157. package/lib/components/dataSourceComponents/dataSourceTable/hooks/useTableQuery.d.ts +1 -0
  158. package/lib/components/dataSourceComponents/dataSourceWrapper/index.d.ts +1 -0
  159. package/lib/components/dataSourceComponents/fields/Input.Json/ReadPretty.d.ts +1 -0
  160. package/lib/components/dataSourceComponents/fields/Input.Password/ReadPretty.d.ts +1 -0
  161. package/lib/components/dataSourceComponents/fields/Select/index.d.ts +1 -0
  162. package/lib/components/dataSourceComponents/fields/Upload/ReadPretty.d.ts +1 -0
  163. package/lib/components/dataSourceComponents/fields/index.d.ts +8 -7
  164. package/lib/components/date-picker/datePickerCpt.d.ts +1 -0
  165. package/lib/components/date-picker/index.d.ts +1 -0
  166. package/lib/components/filter/index.d.ts +1 -0
  167. package/lib/components/list/index.d.ts +1 -0
  168. package/lib/components/lowCodePage/index.d.ts +1 -0
  169. package/lib/components/page/index.d.ts +0 -1
  170. package/lib/components/pisellDataSourceContainer/PisellDataSourceContainer.d.ts +1 -0
  171. package/lib/components/pisellDataSourceContainer/hooks/useDataSourceKey.d.ts +1 -0
  172. package/lib/components/pisellFilter/index.d.ts +0 -1
  173. package/lib/components/pisellGridPro/GridView/index.d.ts +1 -0
  174. package/lib/components/pisellGridPro/components/DataCard/index.d.ts +1 -0
  175. package/lib/components/pisellInput/index.d.ts +0 -1
  176. package/lib/components/pisellLoading/index.d.ts +1 -0
  177. package/lib/components/pisellModal/components/IpadModal/index.d.ts +1 -0
  178. package/lib/components/pisellModal/components/MobileModal/index.d.ts +1 -0
  179. package/lib/components/pisellModal/components/index.d.ts +1 -0
  180. package/lib/components/pisellRecordBoard/PisellRecordBoard.js +8 -3
  181. package/lib/components/pisellRecordBoard/index.d.ts +7 -2
  182. package/lib/components/pisellRecordBoard/index.js +4 -0
  183. package/lib/components/pisellRecordBoard/shellFrame/Calendar/BookingCalendarDemo.js +142 -215
  184. package/lib/components/pisellRecordBoard/shellFrame/Calendar/calendarPersistGuard.d.ts +18 -0
  185. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/NoteTicker.d.ts +13 -0
  186. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/NoteTicker.js +60 -0
  187. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/PisellRecordBoardResourceWallView.d.ts +9 -0
  188. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/PisellRecordBoardResourceWallView.js +163 -0
  189. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/RecordBoardResourceWall.d.ts +8 -0
  190. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/RecordBoardResourceWall.js +27 -0
  191. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/VenueWallCard.d.ts +14 -0
  192. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/VenueWallCard.js +636 -0
  193. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/VenueWallMarquee.less +52 -0
  194. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallUtils.d.ts +14 -0
  195. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallUtils.js +110 -0
  196. package/lib/components/pisellRecordBoard/shellFrame/ShellBodyMetaContext.d.ts +5 -2
  197. package/lib/components/pisellRecordBoard/shellFrame/ToolBar/index.js +45 -14
  198. package/lib/components/pisellRecordBoard/shellFrame/ToolBar/recordBoardToolbar.less +5 -3
  199. package/lib/components/pisellRecordBoard/shellFrame/index.d.ts +4 -3
  200. package/lib/components/pisellRecordBoard/shellFrame/index.js +57 -7
  201. package/lib/components/pisellRecordBoard/types.d.ts +78 -2
  202. package/lib/components/pisellRecordBoard/utils/partitionShellFrameChildren.d.ts +5 -2
  203. package/lib/components/pisellRecordBoard/utils/partitionShellFrameChildren.js +18 -0
  204. package/lib/components/pisellReservationSchedule/locales.d.ts +43 -0
  205. package/lib/components/pisellReservationSchedule/types.d.ts +52 -0
  206. package/lib/components/pisellReservationScheduleBand/types.d.ts +61 -0
  207. package/lib/components/pisellSort/index.d.ts +1 -0
  208. package/lib/components/pisellTimeNavigator/utils/index.d.ts +41 -0
  209. package/lib/components/productCard/cartSkuCard/components/MultiDay/index.d.ts +0 -1
  210. package/lib/components/productCard/cartSkuCard/components/resources/index.d.ts +0 -1
  211. package/lib/components/productCard/cartSkuCard/components/timeRange/index.d.ts +0 -1
  212. package/lib/components/productCard/components/AmountFooter/index.d.ts +1 -0
  213. package/lib/components/productCard/components/MultiDay/index.d.ts +1 -0
  214. package/lib/components/productCard/components/Note/index.d.ts +1 -0
  215. package/lib/components/productCard/components/Packages/components/collapsibleList/utils.d.ts +1 -0
  216. package/lib/components/productCard/components/Packages/components/options/index.d.ts +1 -0
  217. package/lib/components/productCard/components/Packages/index.d.ts +1 -0
  218. package/lib/components/productCard/components/Time/components/SelectResource/index.d.ts +1 -0
  219. package/lib/components/productCard/components/Time/index.d.ts +1 -0
  220. package/lib/components/qrcode/index.d.ts +1 -0
  221. package/lib/components/select-time/index.d.ts +0 -1
  222. package/lib/components/table/Actions/component/ColumnsSetting/index.d.ts +1 -0
  223. package/lib/components/table/Actions/component/ExportImport/index.d.ts +1 -0
  224. package/lib/components/table/Actions/component/GallerySetting/index.d.ts +1 -0
  225. package/lib/components/table/Actions/component/Group/index.d.ts +1 -0
  226. package/lib/components/table/Actions/index.d.ts +1 -0
  227. package/lib/components/table/BasicTable/index.d.ts +1 -0
  228. package/lib/components/table/Gallery/components/GalleryItem/components/Cover/index.d.ts +1 -0
  229. package/lib/components/table/Gallery/components/GalleryItem/components/RenderFields/index.d.ts +1 -0
  230. package/lib/components/table/Gallery/components/GalleryItem/components/Title/index.d.ts +1 -0
  231. package/lib/components/table/Table/SelectField/index.d.ts +1 -0
  232. package/lib/components/table/Table/fields/date/Show/index.d.ts +1 -0
  233. package/lib/components/table/Table/fields/date/index.d.ts +1 -0
  234. package/lib/components/table/Table/fields/image/Show/index.d.ts +1 -0
  235. package/lib/components/table/Table/fields/index.d.ts +1 -0
  236. package/lib/components/table/Table/fields/link/Show/index.d.ts +1 -0
  237. package/lib/components/table/Table/fields/number/Show/index.d.ts +1 -0
  238. package/lib/components/table/Table/fields/number/index.d.ts +1 -0
  239. package/lib/components/table/Table/fields/numberRange/Show/index.d.ts +1 -0
  240. package/lib/components/table/Table/fields/numberRange/index.d.ts +1 -0
  241. package/lib/components/table/Table/fields/oldRangePicker/Show/index.d.ts +1 -0
  242. package/lib/components/table/Table/fields/oldRangePicker/index.d.ts +1 -0
  243. package/lib/components/table/Table/fields/pSwitch/Show/index.d.ts +1 -0
  244. package/lib/components/table/Table/fields/rangePicker/Show/index.d.ts +1 -0
  245. package/lib/components/table/Table/fields/rangePicker/index.d.ts +1 -0
  246. package/lib/components/table/Table/fields/search/Show/index.d.ts +1 -0
  247. package/lib/components/table/Table/fields/search/index.d.ts +1 -0
  248. package/lib/components/table/Table/fields/select/Show/index.d.ts +1 -0
  249. package/lib/components/table/Table/fields/select/index.d.ts +1 -0
  250. package/lib/components/table/Table/fields/text/Show/index.d.ts +1 -0
  251. package/lib/components/table/Table/fields/text/index.d.ts +1 -0
  252. package/lib/components/table/Table/fields/treeSelect/Show/index.d.ts +1 -0
  253. package/lib/components/table/Table/fields/treeSelect/index.d.ts +1 -0
  254. package/lib/components/table/Table/tableConfig/SortRow/index.d.ts +1 -0
  255. package/lib/components/table/Table/utils.d.ts +1 -1
  256. package/lib/components/table/View/index.d.ts +1 -0
  257. package/lib/components/virtual-keyboard/Amount/index.d.ts +1 -0
  258. package/lib/index.d.ts +2 -1
  259. package/lib/index.js +5 -0
  260. package/lib/locales/en-US.d.ts +389 -0
  261. package/lib/locales/en-US.js +1 -0
  262. package/lib/locales/ja.d.ts +358 -0
  263. package/lib/locales/ja.js +1 -0
  264. package/lib/locales/pt.d.ts +358 -0
  265. package/lib/locales/pt.js +1 -0
  266. package/lib/locales/zh-CN.d.ts +384 -0
  267. package/lib/locales/zh-CN.js +1 -0
  268. package/lib/locales/zh-TW.d.ts +384 -0
  269. package/lib/locales/zh-TW.js +1 -0
  270. package/lib/pisell-materials.tw.css +1 -1
  271. package/package.json +1 -1
@@ -35,10 +35,12 @@ module.exports = __toCommonJS(BookingCalendarDemo_exports);
35
35
  var import_react = __toESM(require("react"));
36
36
  var import_antd = require("antd");
37
37
  var import_react_window = require("react-window");
38
+ var import_dayjs = __toESM(require("dayjs"));
38
39
  var import_utils = require("../../../pisellTimeNavigator/utils");
39
40
  var import_pisellDateTimeDisplay = require("../../../pisellDateTimeDisplay");
40
41
  var import_calendarPersistGuard = require("./calendarPersistGuard");
41
42
  var import_lucide_react = require("lucide-react");
43
+ var { RangePicker } = import_antd.DatePicker;
42
44
  function omitMotionOnlyProps(props) {
43
45
  const {
44
46
  initial: _i,
@@ -77,7 +79,6 @@ var DEFAULT_COURTS = [
77
79
  { id: "normal6", name: "Standard Court 6", type: "Standard" }
78
80
  ];
79
81
  var weekdayNames = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
80
- var weekdaysMap = [1, 2, 3, 4, 5, 6, 0];
81
82
  var timeSliceMinutes = 60;
82
83
  var DEFAULT_CALENDAR_TIMELINE = { start: "02:00", end: "02:00" };
83
84
  var frozenColWidth = 132;
@@ -528,6 +529,15 @@ function courtDaySummary(courtId, dateKey, bookings, hourSlots, slotStepHours) {
528
529
  function sameSlot(a, b) {
529
530
  return a.courtId === b.courtId && a.date === b.date && a.hour === b.hour;
530
531
  }
532
+ function dayAndHourToDayjs(dateStr, hourFloat) {
533
+ const h = Math.floor(hourFloat);
534
+ const m = Math.round((hourFloat - h) * 60);
535
+ const mm = Math.min(59, Math.max(0, m));
536
+ return (0, import_dayjs.default)(
537
+ `${dateStr} ${String(h).padStart(2, "0")}:${String(mm).padStart(2, "0")}`,
538
+ "YYYY-MM-DD HH:mm"
539
+ );
540
+ }
531
541
  function statusTagMeta(tag) {
532
542
  switch (tag) {
533
543
  case "cancel":
@@ -1819,7 +1829,7 @@ function BookingCard({
1819
1829
  );
1820
1830
  }
1821
1831
  function BookingCalendarDemo(props = {}) {
1822
- var _a, _b, _c, _d, _e, _f, _g;
1832
+ var _a, _b, _c, _d, _e;
1823
1833
  const allowPersist = (0, import_calendarPersistGuard.useCalendarPersist)();
1824
1834
  const courts = (0, import_react.useMemo)(() => {
1825
1835
  const r = props.resources;
@@ -1895,12 +1905,11 @@ function BookingCalendarDemo(props = {}) {
1895
1905
  const [selectedBlockSlots, setSelectedBlockSlots] = (0, import_react.useState)([]);
1896
1906
  const [focusedCourtId, setFocusedCourtId] = (0, import_react.useState)(null);
1897
1907
  const [showBlockPanel, setShowBlockPanel] = (0, import_react.useState)(false);
1898
- const [blockNote, setBlockNote] = (0, import_react.useState)("");
1899
- const [blockBy, setBlockBy] = (0, import_react.useState)("Allen");
1900
- const [blockMode, setBlockMode] = (0, import_react.useState)("single");
1901
- const [blockRangeStart, setBlockRangeStart] = (0, import_react.useState)("2026-03-31");
1902
- const [blockRangeEnd, setBlockRangeEnd] = (0, import_react.useState)("2026-04-30");
1903
- const [blockWeekdays, setBlockWeekdays] = (0, import_react.useState)([3]);
1908
+ const [blockFormName, setBlockFormName] = (0, import_react.useState)("屏蔽时间");
1909
+ const [blockModalNote, setBlockModalNote] = (0, import_react.useState)("");
1910
+ const [blockResourceId, setBlockResourceId] = (0, import_react.useState)("");
1911
+ const [blockTimeRange, setBlockTimeRange] = (0, import_react.useState)(null);
1912
+ const [blockSaving, setBlockSaving] = (0, import_react.useState)(false);
1904
1913
  const [transitioningToDay, setTransitioningToDay] = (0, import_react.useState)(null);
1905
1914
  const [navDirection, setNavDirection] = (0, import_react.useState)(0);
1906
1915
  const [detailItem, setDetailItem] = (0, import_react.useState)(null);
@@ -2014,8 +2023,6 @@ function BookingCalendarDemo(props = {}) {
2014
2023
  const detailPrefRef = (0, import_react.useRef)(null);
2015
2024
  const summaryChangeMenuRef = (0, import_react.useRef)(null);
2016
2025
  const noteEditorRef = (0, import_react.useRef)(null);
2017
- const blockStartInputRef = (0, import_react.useRef)(null);
2018
- const blockEndInputRef = (0, import_react.useRef)(null);
2019
2026
  const visibleCourts = (0, import_react.useMemo)(() => courts, [courts]);
2020
2027
  const visibleCourtRows = (0, import_react.useMemo)(
2021
2028
  () => buildGroupedCourtRows(visibleCourts, collapsedGroups),
@@ -2447,11 +2454,6 @@ function BookingCalendarDemo(props = {}) {
2447
2454
  }, 180);
2448
2455
  return () => clearTimeout(timer);
2449
2456
  }, [view, focusedCourtId, anchorDate]);
2450
- (0, import_react.useEffect)(() => {
2451
- if (!showBlockPanel) return;
2452
- setBlockRangeStart(dayKey);
2453
- setBlockRangeEnd(dayKey);
2454
- }, [showBlockPanel, dayKey]);
2455
2457
  (0, import_react.useEffect)(() => {
2456
2458
  if (!showBlockPanel) return;
2457
2459
  if (!isFreeSelectionContiguousSameResource(
@@ -2461,6 +2463,19 @@ function BookingCalendarDemo(props = {}) {
2461
2463
  setShowBlockPanel(false);
2462
2464
  }
2463
2465
  }, [showBlockPanel, selectedFreeSlots, slotStepHours]);
2466
+ (0, import_react.useEffect)(() => {
2467
+ if (!showBlockPanel || selectedFreeSlots.length === 0) return;
2468
+ const groups = groupSelectedSlots(selectedFreeSlots, slotStepHours);
2469
+ const g = groups[0];
2470
+ if (!g) return;
2471
+ setBlockResourceId(String(g.courtId));
2472
+ setBlockTimeRange([
2473
+ dayAndHourToDayjs(g.date, g.startHour),
2474
+ dayAndHourToDayjs(g.date, g.endHour)
2475
+ ]);
2476
+ setBlockFormName("屏蔽时间");
2477
+ setBlockModalNote("");
2478
+ }, [showBlockPanel, selectedFreeSlots, slotStepHours]);
2464
2479
  (0, import_react.useEffect)(() => {
2465
2480
  if (!transitioningToDay) return;
2466
2481
  const timer = setTimeout(() => setTransitioningToDay(null), 280);
@@ -2577,77 +2592,76 @@ function BookingCalendarDemo(props = {}) {
2577
2592
  );
2578
2593
  setSelectedBlockSlots([]);
2579
2594
  }
2580
- function toggleBlockWeekday(day) {
2581
- setBlockWeekdays(
2582
- (prev) => prev.includes(day) ? prev.filter((d) => d !== day) : [...prev, day]
2583
- );
2584
- }
2585
- function createBlockFromSelection() {
2586
- if (selectedFreeSlots.length === 0) return;
2587
- const baseGroups = groupSelectedSlots(selectedFreeSlots, slotStepHours);
2588
- const nextBlocks = [];
2589
- if (blockMode === "single") {
2590
- baseGroups.forEach((slot, idx) => {
2591
- nextBlocks.push({
2592
- id: `block-single-${slot.courtId}-${slot.date}-${slot.startHour}-${idx}`,
2593
- courtId: slot.courtId,
2594
- date: slot.date,
2595
- startHour: slot.startHour,
2596
- endHour: slot.endHour,
2597
- name: blockNote || "Block",
2598
- note: blockNote || "",
2599
- blockBy,
2600
- blockedAt: dayKey,
2601
- kind: "block"
2602
- });
2603
- });
2604
- } else {
2605
- const start = parseDate(blockRangeStart);
2606
- const end = parseDate(blockRangeEnd);
2607
- const baseByKey = /* @__PURE__ */ new Map();
2608
- baseGroups.forEach(
2609
- (slot) => baseByKey.set(
2610
- `${slot.courtId}-${slot.startHour}-${slot.endHour}`,
2611
- slot
2612
- )
2613
- );
2614
- for (let d = new Date(start); d <= end; d = addDays(d, 1)) {
2615
- if (!blockWeekdays.includes(d.getDay())) continue;
2616
- const dateKey = fmtDate(d);
2617
- baseByKey.forEach((slot) => {
2618
- nextBlocks.push({
2619
- id: `block-repeat-${slot.courtId}-${dateKey}-${slot.startHour}-${slot.endHour}`,
2620
- courtId: slot.courtId,
2621
- date: dateKey,
2622
- startHour: slot.startHour,
2623
- endHour: slot.endHour,
2624
- name: blockNote || "Block",
2625
- note: blockNote || "",
2626
- blockBy,
2627
- blockedAt: dayKey,
2628
- kind: "block"
2629
- });
2630
- });
2595
+ async function saveBlockedTime() {
2596
+ if (!(blockTimeRange == null ? void 0 : blockTimeRange[0]) || !(blockTimeRange == null ? void 0 : blockTimeRange[1])) {
2597
+ import_antd.message.warning("请选择屏蔽时段");
2598
+ return;
2599
+ }
2600
+ const [start, end] = blockTimeRange;
2601
+ if (!end.isAfter(start)) {
2602
+ import_antd.message.warning("结束时间须晚于开始时间");
2603
+ return;
2604
+ }
2605
+ const rid = Number(blockResourceId);
2606
+ if (!Number.isFinite(rid) || rid <= 0) {
2607
+ import_antd.message.warning("请选择资源");
2608
+ return;
2609
+ }
2610
+ const channels = props.blockedTimeSalesChannels ?? ["online_store"];
2611
+ const payload = {
2612
+ name: (blockFormName || "").trim() || "屏蔽时间",
2613
+ note: (blockModalNote || "").trim(),
2614
+ resource_ids: [rid],
2615
+ blocked_sales_channels: channels,
2616
+ start_time: start.format("YYYY-MM-DD HH:mm"),
2617
+ end_time: end.format("YYYY-MM-DD HH:mm")
2618
+ };
2619
+ if (props.onBlockedTimeSave) {
2620
+ setBlockSaving(true);
2621
+ try {
2622
+ const ok = await props.onBlockedTimeSave(payload);
2623
+ if (ok === false) return;
2624
+ setShowBlockPanel(false);
2625
+ setSelectedFreeSlots([]);
2626
+ setBlockModalNote("");
2627
+ } finally {
2628
+ setBlockSaving(false);
2631
2629
  }
2630
+ return;
2632
2631
  }
2633
- const conflicts = nextBlocks.flatMap(
2634
- (blk) => overlappingBookings(
2635
- bookings,
2636
- blk.courtId,
2637
- blk.date,
2638
- blk.startHour,
2639
- blk.endHour
2640
- )
2632
+ const courtId = String(blockResourceId);
2633
+ const date = start.format("YYYY-MM-DD");
2634
+ const endDate = end.format("YYYY-MM-DD");
2635
+ const startHour = start.hour() + start.minute() / 60;
2636
+ const endHour = end.hour() + end.minute() / 60;
2637
+ const nextBlock = {
2638
+ id: `block-local-${courtId}-${date}-${startHour}-${Date.now()}`,
2639
+ courtId,
2640
+ date,
2641
+ endDate: endDate !== date ? endDate : void 0,
2642
+ startHour,
2643
+ endHour,
2644
+ name: payload.name,
2645
+ note: payload.note,
2646
+ blockedAt: date,
2647
+ kind: "block"
2648
+ };
2649
+ const conflicts = overlappingBookings(
2650
+ bookings,
2651
+ courtId,
2652
+ date,
2653
+ startHour,
2654
+ endDate === date ? endHour : 24
2641
2655
  );
2642
2656
  if (conflicts.length > 0) {
2643
- setBlockConflict({ nextBlocks, conflicts });
2657
+ setBlockConflict({ nextBlocks: [nextBlock], conflicts });
2644
2658
  return;
2645
2659
  }
2646
2660
  if (!allowPersist("createBlock")) return;
2647
- setBookings((prev) => [...nextBlocks, ...prev]);
2661
+ setBookings((prev) => [nextBlock, ...prev]);
2648
2662
  setSelectedFreeSlots([]);
2649
2663
  setShowBlockPanel(false);
2650
- setBlockNote("");
2664
+ setBlockModalNote("");
2651
2665
  }
2652
2666
  function confirmBlockWithUnsetCourts() {
2653
2667
  if (!blockConflict) return;
@@ -3935,192 +3949,105 @@ function BookingCalendarDemo(props = {}) {
3935
3949
  exit: { scale: 0.96, y: 10 },
3936
3950
  className: `w-full max-w-[720px] max-h-[92vh] overflow-y-auto rounded-t-3xl md:rounded-3xl border p-4 md:p-6 shadow-2xl ${isLight ? "theme-panel theme-border soft-shadow" : "border-zinc-700 bg-[#121217]"}`
3937
3951
  },
3938
- /* @__PURE__ */ import_react.default.createElement("div", { className: "mb-4 flex items-center justify-between" }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("div", { className: "text-xl font-semibold" }, "Block settings"), /* @__PURE__ */ import_react.default.createElement(
3939
- "div",
3940
- {
3941
- className: `mt-1 text-sm ${isLight ? "theme-text-muted" : "text-zinc-400"}`
3942
- },
3943
- "Selected time range:",
3944
- " ",
3945
- selectedFreeSlots.length > 0 ? `${formatHourLabel((_d = groupSelectedSlots(selectedFreeSlots, slotStepHours)[0]) == null ? void 0 : _d.startHour)} - ${formatHourLabel((_e = groupSelectedSlots(selectedFreeSlots, slotStepHours)[0]) == null ? void 0 : _e.endHour)}` : "-"
3946
- )), /* @__PURE__ */ import_react.default.createElement(
3952
+ /* @__PURE__ */ import_react.default.createElement("div", { className: "mb-4 flex items-center justify-between gap-3" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "text-xl font-semibold" }, "新建屏蔽时间"), /* @__PURE__ */ import_react.default.createElement(
3947
3953
  "button",
3948
3954
  {
3955
+ type: "button",
3956
+ "aria-label": "关闭",
3949
3957
  onClick: () => setShowBlockPanel(false),
3950
- className: `rounded-xl px-3 py-2 ${isLight ? "btn-neutral" : "border border-zinc-700 text-zinc-300 hover:bg-zinc-800"}`
3958
+ className: `rounded-xl p-2 ${isLight ? "btn-neutral" : "border border-zinc-700 text-zinc-300 hover:bg-zinc-800"}`
3951
3959
  },
3952
- "Close"
3953
- )),
3954
- /* @__PURE__ */ import_react.default.createElement("div", { className: "mb-5 grid gap-3 md:gap-4 md:grid-cols-2" }, /* @__PURE__ */ import_react.default.createElement(
3955
- "button",
3956
- {
3957
- onClick: () => setBlockMode("single"),
3958
- className: `rounded-2xl border p-4 text-left ${blockMode === "single" ? isLight ? "theme-brand-surface border-[var(--brand-light)]" : "border-violet-500 bg-violet-500/10" : isLight ? "theme-panel-alt theme-border" : "border-zinc-700 bg-[#171820]"}`
3959
- },
3960
- /* @__PURE__ */ import_react.default.createElement("div", { className: "font-semibold" }, "Only selected date"),
3961
- /* @__PURE__ */ import_react.default.createElement(
3962
- "div",
3963
- {
3964
- className: `mt-1 text-sm ${isLight ? "theme-text-muted" : "text-zinc-400"}`
3965
- },
3966
- "Create a block only for the currently selected date and time range."
3967
- )
3968
- ), /* @__PURE__ */ import_react.default.createElement(
3969
- "button",
3970
- {
3971
- onClick: () => setBlockMode("repeat"),
3972
- className: `rounded-2xl border p-4 text-left ${blockMode === "repeat" ? isLight ? "theme-brand-surface border-[var(--brand-light)]" : "border-violet-500 bg-violet-500/10" : isLight ? "theme-panel-alt theme-border" : "border-zinc-700 bg-[#171820]"}`
3973
- },
3974
- /* @__PURE__ */ import_react.default.createElement("div", { className: "font-semibold" }, "Every matching date"),
3975
- /* @__PURE__ */ import_react.default.createElement(
3976
- "div",
3977
- {
3978
- className: `mt-1 text-sm ${isLight ? "theme-text-muted" : "text-zinc-400"}`
3979
- },
3980
- "Create repeating blocks by date range and weekday rules."
3981
- )
3960
+ /* @__PURE__ */ import_react.default.createElement(import_lucide_react.X, { size: 20 })
3982
3961
  )),
3983
3962
  /* @__PURE__ */ import_react.default.createElement(
3984
3963
  "div",
3985
3964
  {
3986
3965
  className: `space-y-4 rounded-2xl border p-4 ${isLight ? "theme-panel-alt theme-border" : "border-zinc-700 bg-[#171820]"}`
3987
3966
  },
3988
- /* @__PURE__ */ import_react.default.createElement("div", { className: "grid gap-3 md:grid-cols-2" }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(
3967
+ /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(
3989
3968
  "label",
3990
3969
  {
3991
3970
  className: `mb-2 block text-sm ${isLight ? "theme-text-muted" : "text-zinc-400"}`
3992
3971
  },
3993
- "Block note"
3972
+ "标题"
3994
3973
  ), /* @__PURE__ */ import_react.default.createElement(
3995
3974
  "input",
3996
3975
  {
3997
- value: blockNote,
3998
- onChange: (e) => setBlockNote(e.target.value),
3999
- placeholder: "For example: Team event",
3976
+ value: blockFormName,
3977
+ onChange: (e) => setBlockFormName(e.target.value),
3978
+ placeholder: "屏蔽时间",
4000
3979
  className: `w-full rounded-xl px-3 py-2 outline-none ${isLight ? "theme-input theme-text" : "border border-zinc-700 bg-[#111218] text-white"}`
4001
3980
  }
4002
- )), /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(
3981
+ )),
3982
+ /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(
4003
3983
  "label",
4004
3984
  {
4005
3985
  className: `mb-2 block text-sm ${isLight ? "theme-text-muted" : "text-zinc-400"}`
4006
3986
  },
4007
- "Blocked by"
3987
+ "备注"
4008
3988
  ), /* @__PURE__ */ import_react.default.createElement(
4009
3989
  "input",
4010
3990
  {
4011
- value: blockBy,
4012
- onChange: (e) => setBlockBy(e.target.value),
4013
- placeholder: "For example: Allen",
4014
- className: "w-full rounded-xl border border-zinc-700 bg-[#111218] px-3 py-2 text-white outline-none"
3991
+ value: blockModalNote,
3992
+ onChange: (e) => setBlockModalNote(e.target.value),
3993
+ placeholder: "选填",
3994
+ className: `w-full rounded-xl px-3 py-2 outline-none ${isLight ? "theme-input theme-text" : "border border-zinc-700 bg-[#111218] text-white"}`
4015
3995
  }
4016
- ))),
4017
- blockMode === "repeat" && /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("div", { className: "grid gap-3 md:gap-4 md:grid-cols-2" }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(
3996
+ )),
3997
+ /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(
4018
3998
  "label",
4019
3999
  {
4020
4000
  className: `mb-2 block text-sm ${isLight ? "theme-text-muted" : "text-zinc-400"}`
4021
4001
  },
4022
- "Date range - start"
4002
+ "资源"
4023
4003
  ), /* @__PURE__ */ import_react.default.createElement(
4024
- "div",
4004
+ "select",
4025
4005
  {
4026
- className: `flex items-center gap-2 rounded-xl border px-3 py-2 ${isLight ? "theme-input" : "border-zinc-700 bg-[#111218]"}`
4006
+ value: blockResourceId,
4007
+ onChange: (e) => setBlockResourceId(e.target.value),
4008
+ className: `w-full rounded-xl px-3 py-2 outline-none ${isLight ? "theme-input theme-text" : "border border-zinc-700 bg-[#111218] text-white"}`
4027
4009
  },
4028
- /* @__PURE__ */ import_react.default.createElement(
4029
- "input",
4030
- {
4031
- ref: blockStartInputRef,
4032
- type: "date",
4033
- value: blockRangeStart,
4034
- onChange: (e) => setBlockRangeStart(e.target.value),
4035
- className: "w-full bg-transparent outline-none"
4036
- }
4037
- ),
4038
- /* @__PURE__ */ import_react.default.createElement(
4039
- "button",
4040
- {
4041
- type: "button",
4042
- onClick: () => {
4043
- var _a2;
4044
- return (_a2 = blockStartInputRef.current) == null ? void 0 : _a2.focus();
4045
- },
4046
- className: "rounded-lg p-1 hover:bg-zinc-800"
4047
- },
4048
- /* @__PURE__ */ import_react.default.createElement(
4049
- import_lucide_react.CalendarDays,
4050
- {
4051
- size: 18,
4052
- className: "text-zinc-400"
4053
- }
4054
- )
4055
- )
4056
- )), /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(
4010
+ /* @__PURE__ */ import_react.default.createElement("option", { value: "" }, "无资源"),
4011
+ visibleCourts.map((c) => /* @__PURE__ */ import_react.default.createElement("option", { key: c.id, value: String(c.id) }, c.name))
4012
+ )),
4013
+ /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(
4057
4014
  "label",
4058
4015
  {
4059
4016
  className: `mb-2 block text-sm ${isLight ? "theme-text-muted" : "text-zinc-400"}`
4060
4017
  },
4061
- "Date range - end"
4062
- ), /* @__PURE__ */ import_react.default.createElement("div", { className: "flex items-center gap-2 rounded-xl border border-zinc-700 bg-[#111218] px-3 py-2" }, /* @__PURE__ */ import_react.default.createElement(
4063
- "input",
4064
- {
4065
- ref: blockEndInputRef,
4066
- type: "date",
4067
- value: blockRangeEnd,
4068
- onChange: (e) => setBlockRangeEnd(e.target.value),
4069
- className: "w-full bg-transparent outline-none"
4070
- }
4018
+ "屏蔽时段"
4071
4019
  ), /* @__PURE__ */ import_react.default.createElement(
4072
- "button",
4020
+ RangePicker,
4073
4021
  {
4074
- type: "button",
4075
- onClick: () => {
4076
- var _a2;
4077
- return (_a2 = blockEndInputRef.current) == null ? void 0 : _a2.focus();
4022
+ style: { width: "100%" },
4023
+ showTime: {
4024
+ format: "HH:mm",
4025
+ minuteStep: resolvedSlotMinutes >= 60 ? 60 : Math.max(1, resolvedSlotMinutes)
4078
4026
  },
4079
- className: "rounded-lg p-1 hover:bg-zinc-800"
4080
- },
4081
- /* @__PURE__ */ import_react.default.createElement(
4082
- import_lucide_react.CalendarDays,
4083
- {
4084
- size: 18,
4085
- className: "text-zinc-400"
4086
- }
4087
- )
4088
- )))), /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(
4089
- "label",
4090
- {
4091
- className: `mb-2 block text-sm ${isLight ? "theme-text-muted" : "text-zinc-400"}`
4092
- },
4093
- "Weekdays in range"
4094
- ), /* @__PURE__ */ import_react.default.createElement("div", { className: "grid grid-cols-2 gap-2 sm:flex sm:flex-wrap" }, weekdayNames.map((name, idx) => /* @__PURE__ */ import_react.default.createElement(
4095
- "button",
4096
- {
4097
- key: name,
4098
- onClick: () => toggleBlockWeekday(weekdaysMap[idx]),
4099
- className: `rounded-xl px-4 py-2 text-sm ${blockWeekdays.includes(weekdaysMap[idx]) ? "btn-pill-active" : isLight ? "btn-pill-neutral" : "bg-zinc-800 text-zinc-300"}`
4100
- },
4101
- name
4102
- )))), /* @__PURE__ */ import_react.default.createElement(
4103
- "div",
4104
- {
4105
- className: `rounded-xl px-3 py-3 text-sm ${isLight ? "theme-panel theme-border theme-text-muted" : "bg-zinc-900/80 text-zinc-300"}`
4106
- },
4107
- "Example: choose 1 Sep to 1 Oct, then select every Wednesday. The chosen time range will be blocked on all matching Wednesdays."
4027
+ format: "YYYY-MM-DD HH:mm",
4028
+ value: blockTimeRange,
4029
+ onChange: (v) => setBlockTimeRange(v)
4030
+ }
4108
4031
  ))
4109
4032
  ),
4110
4033
  /* @__PURE__ */ import_react.default.createElement("div", { className: "mt-6 flex flex-col-reverse sm:flex-row items-stretch sm:items-center justify-end gap-3" }, /* @__PURE__ */ import_react.default.createElement(
4111
4034
  "button",
4112
4035
  {
4036
+ type: "button",
4037
+ disabled: blockSaving,
4113
4038
  onClick: () => setShowBlockPanel(false),
4114
4039
  className: `rounded-xl px-4 py-2 ${isLight ? "btn-neutral" : "border border-zinc-700 text-zinc-300 hover:bg-zinc-800"}`
4115
4040
  },
4116
- "Cancel"
4041
+ "取消"
4117
4042
  ), /* @__PURE__ */ import_react.default.createElement(
4118
4043
  "button",
4119
4044
  {
4120
- onClick: createBlockFromSelection,
4121
- className: `rounded-xl px-5 py-3 text-sm font-semibold ${isLight ? "btn-brand" : "bg-zinc-500/90 text-white hover:bg-zinc-400"}`
4045
+ type: "button",
4046
+ disabled: blockSaving,
4047
+ onClick: () => void saveBlockedTime(),
4048
+ className: `rounded-xl px-5 py-3 text-sm font-semibold disabled:opacity-50 ${isLight ? "btn-brand" : "bg-violet-600 text-white hover:bg-violet-500"}`
4122
4049
  },
4123
- "Confirm block"
4050
+ blockSaving ? "保存中…" : "保存"
4124
4051
  ))
4125
4052
  )
4126
4053
  )),
@@ -4589,7 +4516,7 @@ function BookingCalendarDemo(props = {}) {
4589
4516
  ref: detailPanelRef
4590
4517
  },
4591
4518
  (() => {
4592
- var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u;
4519
+ var _a2, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u;
4593
4520
  const detail = getBookingDetailData(detailItem, courts);
4594
4521
  const detailWithNoteOverrides = {
4595
4522
  ...detail,
@@ -4614,9 +4541,9 @@ function BookingCalendarDemo(props = {}) {
4614
4541
  const customerCard = selectedCustomer || {
4615
4542
  name: ((_d2 = detail.customer) == null ? void 0 : _d2.name) || detail.headerSummary.customerName,
4616
4543
  phone: (((_e2 = detail.customer) == null ? void 0 : _e2.phone) || "").split(" ").slice(-1)[0] || "0412888999",
4617
- email: ((_f2 = detail.customer) == null ? void 0 : _f2.email) || "tina.wu@pisell.com",
4544
+ email: ((_f = detail.customer) == null ? void 0 : _f.email) || "tina.wu@pisell.com",
4618
4545
  membership: "Gold",
4619
- registeredAt: (((_h = (_g2 = detail.history) == null ? void 0 : _g2[0]) == null ? void 0 : _h.time) || "2026-03-18").slice(0, 10).split("-").join("/")
4546
+ registeredAt: (((_h = (_g = detail.history) == null ? void 0 : _g[0]) == null ? void 0 : _h.time) || "2026-03-18").slice(0, 10).split("-").join("/")
4620
4547
  };
4621
4548
  const tabs = [
4622
4549
  "summary",
@@ -6621,7 +6548,7 @@ function BookingCalendarDemo(props = {}) {
6621
6548
  checkinModal.name,
6622
6549
  " ·",
6623
6550
  " ",
6624
- ((_f = courts.find((c) => c.id === checkinModal.courtId)) == null ? void 0 : _f.name) || "Unassigned"
6551
+ ((_d = courts.find((c) => c.id === checkinModal.courtId)) == null ? void 0 : _d.name) || "Unassigned"
6625
6552
  )), /* @__PURE__ */ import_react.default.createElement(
6626
6553
  "button",
6627
6554
  {
@@ -6823,7 +6750,7 @@ function BookingCalendarDemo(props = {}) {
6823
6750
  mergeOrderModal.item.name,
6824
6751
  " ·",
6825
6752
  " ",
6826
- ((_g = courts.find((c) => c.id === mergeOrderModal.item.courtId)) == null ? void 0 : _g.name) || "Unassigned"
6753
+ ((_e = courts.find((c) => c.id === mergeOrderModal.item.courtId)) == null ? void 0 : _e.name) || "Unassigned"
6827
6754
  )
6828
6755
  ),
6829
6756
  /* @__PURE__ */ import_react.default.createElement("div", { className: "mt-4" }, /* @__PURE__ */ import_react.default.createElement(
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ /** 日历内会改本地预约数据的动作类型,供业务层拦截(如平面图未支持写接口时 toast) */
3
+ export declare type CalendarPersistKind = 'moveBooking' | 'applyConflictMove' | 'createBooking' | 'removeBlocks' | 'createBlock' | 'confirmBlockWithConflicts' | 'checkin' | 'checkinReschedule' | 'mergeOrder' | 'other';
4
+ export interface CalendarPersistContextValue {
5
+ /**
6
+ * 返回 false 时日历组件应取消本次本地数据变更(由调用方决定是否已 toast)。
7
+ * 未提供时默认允许所有本地变更(Story / 独立演示)。
8
+ */
9
+ beforePersist?: (kind: CalendarPersistKind) => boolean;
10
+ }
11
+ export declare const CalendarPersistProvider: React.FC<{
12
+ children: React.ReactNode;
13
+ value?: CalendarPersistContextValue;
14
+ }>;
15
+ /**
16
+ * 在日历 Demo 内判断某类写操作是否允许执行本地 state 更新。
17
+ */
18
+ export declare function useCalendarPersist(): (kind: CalendarPersistKind) => boolean;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import './VenueWallMarquee.less';
3
+ export interface NoteTickerProps {
4
+ text: string;
5
+ color: string;
6
+ /** 跑完一整段所需秒数 */
7
+ duration?: number;
8
+ shouldMarquee: boolean;
9
+ }
10
+ /**
11
+ * 底部说明条:短文案静态省略,长文案无缝跑马灯(样式见 VenueWallMarquee.less)。
12
+ */
13
+ export declare const NoteTicker: React.NamedExoticComponent<NoteTickerProps>;
@@ -0,0 +1,60 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/components/pisellRecordBoard/shellFrame/ResourceWall/NoteTicker.tsx
30
+ var NoteTicker_exports = {};
31
+ __export(NoteTicker_exports, {
32
+ NoteTicker: () => NoteTicker
33
+ });
34
+ module.exports = __toCommonJS(NoteTicker_exports);
35
+ var import_react = __toESM(require("react"));
36
+ var import_VenueWallMarquee = require("./VenueWallMarquee.less");
37
+ var NoteTicker = import_react.default.memo(function NoteTicker2({
38
+ text,
39
+ color,
40
+ duration = 24,
41
+ shouldMarquee
42
+ }) {
43
+ if (!shouldMarquee) {
44
+ return /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-resource-wall-note-marquee-static", style: { color } }, text);
45
+ }
46
+ return /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-resource-wall-note-marquee-wrap" }, /* @__PURE__ */ import_react.default.createElement(
47
+ "div",
48
+ {
49
+ className: "pisell-resource-wall-note-marquee-track",
50
+ style: { animationDuration: `${duration}s`, color }
51
+ },
52
+ /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-resource-wall-note-marquee-copy" }, text),
53
+ /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-resource-wall-note-marquee-copy", "aria-hidden": "true" }, text),
54
+ /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-resource-wall-note-marquee-copy", "aria-hidden": "true" }, text)
55
+ ));
56
+ });
57
+ // Annotate the CommonJS export names for ESM import in node:
58
+ 0 && (module.exports = {
59
+ NoteTicker
60
+ });
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { RecordBoardResourceWallProps } from '../../types';
3
+ /** 与 {@link RecordBoardResourceWallProps.filterFieldKey} 默认一致 */
4
+ export declare const DEFAULT_RESOURCE_WALL_FILTER_FIELD_KEY = "resource_wall_resource_ids";
5
+ /**
6
+ * 大屏资源墙主视口:卡片数据来自 props;可见资源 id 来自
7
+ * `searchParams.filter.values[filterFieldKey]` 与 `cards[].resourceId` 交集。
8
+ */
9
+ export declare const PisellRecordBoardResourceWallView: React.FC<RecordBoardResourceWallProps>;