@withpotter/pages-bookings 0.13.0-next.101

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 (270) hide show
  1. package/dist/dashboard/(bookings)/attendees/page.js +8 -0
  2. package/dist/dashboard/(bookings)/attendees/page.js.map +1 -0
  3. package/dist/dashboard/(bookings)/availability/_components/availability-screen.js +714 -0
  4. package/dist/dashboard/(bookings)/availability/_components/availability-screen.js.map +1 -0
  5. package/dist/dashboard/(bookings)/availability/_components/month-availability.js +130 -0
  6. package/dist/dashboard/(bookings)/availability/_components/month-availability.js.map +1 -0
  7. package/dist/dashboard/(bookings)/availability/page.js +10 -0
  8. package/dist/dashboard/(bookings)/availability/page.js.map +1 -0
  9. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/assign-resource-modal.js +133 -0
  10. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/assign-resource-modal.js.map +1 -0
  11. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-constants.js +26 -0
  12. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-constants.js.map +1 -0
  13. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-desktop-layout.js +194 -0
  14. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-desktop-layout.js.map +1 -0
  15. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-layout-props.js +1 -0
  16. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-layout-props.js.map +1 -0
  17. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-lede.js +189 -0
  18. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-lede.js.map +1 -0
  19. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-meta.js +38 -0
  20. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-meta.js.map +1 -0
  21. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-mobile-layout.js +315 -0
  22. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-mobile-layout.js.map +1 -0
  23. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-mobile-screen.js +94 -0
  24. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-mobile-screen.js.map +1 -0
  25. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-money.js +54 -0
  26. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-money.js.map +1 -0
  27. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-split.js +71 -0
  28. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/booking-split.js.map +1 -0
  29. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/cancel-booking-modal.js +102 -0
  30. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/cancel-booking-modal.js.map +1 -0
  31. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/cancellation-notice.js +33 -0
  32. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/cancellation-notice.js.map +1 -0
  33. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/customer-info-card.js +65 -0
  34. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/customer-info-card.js.map +1 -0
  35. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/index.js +23 -0
  36. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/index.js.map +1 -0
  37. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/intake-answers-card.js +19 -0
  38. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/intake-answers-card.js.map +1 -0
  39. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/refund-booking-modal.js +156 -0
  40. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/refund-booking-modal.js.map +1 -0
  41. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/reschedule-booking-modal.js +120 -0
  42. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/reschedule-booking-modal.js.map +1 -0
  43. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/security-deposit-card.js +63 -0
  44. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/security-deposit-card.js.map +1 -0
  45. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/settle-deposit-modal.js +141 -0
  46. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/settle-deposit-modal.js.map +1 -0
  47. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/ticket-row-actions.js +49 -0
  48. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/ticket-row-actions.js.map +1 -0
  49. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/waiting-queue-notice.js +42 -0
  50. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components/waiting-queue-notice.js.map +1 -0
  51. package/dist/dashboard/(bookings)/bookings/[bookingId]/_components.js +1 -0
  52. package/dist/dashboard/(bookings)/bookings/[bookingId]/_hooks/index.js +19 -0
  53. package/dist/dashboard/(bookings)/bookings/[bookingId]/_hooks/index.js.map +1 -0
  54. package/dist/dashboard/(bookings)/bookings/[bookingId]/_hooks/use-booking-detail-data.js +352 -0
  55. package/dist/dashboard/(bookings)/bookings/[bookingId]/_hooks/use-booking-detail-data.js.map +1 -0
  56. package/dist/dashboard/(bookings)/bookings/[bookingId]/_hooks.js +1 -0
  57. package/dist/dashboard/(bookings)/bookings/[bookingId]/layout.js +33 -0
  58. package/dist/dashboard/(bookings)/bookings/[bookingId]/layout.js.map +1 -0
  59. package/dist/dashboard/(bookings)/bookings/[bookingId]/page.js +356 -0
  60. package/dist/dashboard/(bookings)/bookings/[bookingId]/page.js.map +1 -0
  61. package/dist/dashboard/(bookings)/bookings/_components/appointment-calendar-layout.js +34 -0
  62. package/dist/dashboard/(bookings)/bookings/_components/appointment-calendar-layout.js.map +1 -0
  63. package/dist/dashboard/(bookings)/bookings/_components/booking-constants.js +92 -0
  64. package/dist/dashboard/(bookings)/bookings/_components/booking-constants.js.map +1 -0
  65. package/dist/dashboard/(bookings)/bookings/_components/booking-tab-hints.js +32 -0
  66. package/dist/dashboard/(bookings)/bookings/_components/booking-tab-hints.js.map +1 -0
  67. package/dist/dashboard/(bookings)/bookings/_components/bookings-filter-bar.js +131 -0
  68. package/dist/dashboard/(bookings)/bookings/_components/bookings-filter-bar.js.map +1 -0
  69. package/dist/dashboard/(bookings)/bookings/_components/bookings-mobile-controls.js +119 -0
  70. package/dist/dashboard/(bookings)/bookings/_components/bookings-mobile-controls.js.map +1 -0
  71. package/dist/dashboard/(bookings)/bookings/_components/bookings-screen.js +414 -0
  72. package/dist/dashboard/(bookings)/bookings/_components/bookings-screen.js.map +1 -0
  73. package/dist/dashboard/(bookings)/bookings/_components/bookings-table.js +192 -0
  74. package/dist/dashboard/(bookings)/bookings/_components/bookings-table.js.map +1 -0
  75. package/dist/dashboard/(bookings)/bookings/_components/cannot-take-bookings.js +34 -0
  76. package/dist/dashboard/(bookings)/bookings/_components/cannot-take-bookings.js.map +1 -0
  77. package/dist/dashboard/(bookings)/bookings/_components/demo-data.js +176 -0
  78. package/dist/dashboard/(bookings)/bookings/_components/demo-data.js.map +1 -0
  79. package/dist/dashboard/(bookings)/bookings/_components/index.js +9 -0
  80. package/dist/dashboard/(bookings)/bookings/_components/index.js.map +1 -0
  81. package/dist/dashboard/(bookings)/bookings/_components/today/booking-card.js +126 -0
  82. package/dist/dashboard/(bookings)/bookings/_components/today/booking-card.js.map +1 -0
  83. package/dist/dashboard/(bookings)/bookings/_components/today/demo-data.js +142 -0
  84. package/dist/dashboard/(bookings)/bookings/_components/today/demo-data.js.map +1 -0
  85. package/dist/dashboard/(bookings)/bookings/_components/today/handover.js +128 -0
  86. package/dist/dashboard/(bookings)/bookings/_components/today/handover.js.map +1 -0
  87. package/dist/dashboard/(bookings)/bookings/_components/today/index.js +17 -0
  88. package/dist/dashboard/(bookings)/bookings/_components/today/index.js.map +1 -0
  89. package/dist/dashboard/(bookings)/bookings/_components/today/past-band.js +69 -0
  90. package/dist/dashboard/(bookings)/bookings/_components/today/past-band.js.map +1 -0
  91. package/dist/dashboard/(bookings)/bookings/_components/today/resource-board.js +111 -0
  92. package/dist/dashboard/(bookings)/bookings/_components/today/resource-board.js.map +1 -0
  93. package/dist/dashboard/(bookings)/bookings/_components/today/today-band.js +61 -0
  94. package/dist/dashboard/(bookings)/bookings/_components/today/today-band.js.map +1 -0
  95. package/dist/dashboard/(bookings)/bookings/_components/today/upcoming-band.js +113 -0
  96. package/dist/dashboard/(bookings)/bookings/_components/today/upcoming-band.js.map +1 -0
  97. package/dist/dashboard/(bookings)/bookings/_components/today/waiting-queue.js +62 -0
  98. package/dist/dashboard/(bookings)/bookings/_components/today/waiting-queue.js.map +1 -0
  99. package/dist/dashboard/(bookings)/bookings/_components/today-board.js +192 -0
  100. package/dist/dashboard/(bookings)/bookings/_components/today-board.js.map +1 -0
  101. package/dist/dashboard/(bookings)/bookings/_components/today.js +1 -0
  102. package/dist/dashboard/(bookings)/bookings/_components.js +1 -0
  103. package/dist/dashboard/(bookings)/bookings/_hooks/index.js +5 -0
  104. package/dist/dashboard/(bookings)/bookings/_hooks/index.js.map +1 -0
  105. package/dist/dashboard/(bookings)/bookings/_hooks/use-bookings-data.js +331 -0
  106. package/dist/dashboard/(bookings)/bookings/_hooks/use-bookings-data.js.map +1 -0
  107. package/dist/dashboard/(bookings)/bookings/_hooks/use-today-data.js +309 -0
  108. package/dist/dashboard/(bookings)/bookings/_hooks/use-today-data.js.map +1 -0
  109. package/dist/dashboard/(bookings)/bookings/_hooks.js +1 -0
  110. package/dist/dashboard/(bookings)/bookings/_lib/booking-link.js +13 -0
  111. package/dist/dashboard/(bookings)/bookings/_lib/booking-link.js.map +1 -0
  112. package/dist/dashboard/(bookings)/bookings/attendees/_components/attendee-cards.js +60 -0
  113. package/dist/dashboard/(bookings)/bookings/attendees/_components/attendee-cards.js.map +1 -0
  114. package/dist/dashboard/(bookings)/bookings/attendees/_components/qr-scanner-modal.js +225 -0
  115. package/dist/dashboard/(bookings)/bookings/attendees/_components/qr-scanner-modal.js.map +1 -0
  116. package/dist/dashboard/(bookings)/bookings/attendees/demo-data.js +195 -0
  117. package/dist/dashboard/(bookings)/bookings/attendees/demo-data.js.map +1 -0
  118. package/dist/dashboard/(bookings)/bookings/attendees/page.js +341 -0
  119. package/dist/dashboard/(bookings)/bookings/attendees/page.js.map +1 -0
  120. package/dist/dashboard/(bookings)/bookings/new/page.js +129 -0
  121. package/dist/dashboard/(bookings)/bookings/new/page.js.map +1 -0
  122. package/dist/dashboard/(bookings)/bookings/page.js +10 -0
  123. package/dist/dashboard/(bookings)/bookings/page.js.map +1 -0
  124. package/dist/dashboard/(bookings)/bookings/sessions/new/_components/save-buttons.js +36 -0
  125. package/dist/dashboard/(bookings)/bookings/sessions/new/_components/save-buttons.js.map +1 -0
  126. package/dist/dashboard/(bookings)/bookings/sessions/new/_components/session-creator.js +386 -0
  127. package/dist/dashboard/(bookings)/bookings/sessions/new/_components/session-creator.js.map +1 -0
  128. package/dist/dashboard/(bookings)/bookings/sessions/new/_lib/session-payload.js +62 -0
  129. package/dist/dashboard/(bookings)/bookings/sessions/new/_lib/session-payload.js.map +1 -0
  130. package/dist/dashboard/(bookings)/bookings/sessions/new/page.js +10 -0
  131. package/dist/dashboard/(bookings)/bookings/sessions/new/page.js.map +1 -0
  132. package/dist/dashboard/(bookings)/calendar/_components/calendar-nav.js +84 -0
  133. package/dist/dashboard/(bookings)/calendar/_components/calendar-nav.js.map +1 -0
  134. package/dist/dashboard/(bookings)/calendar/_components/calendar-range.js +84 -0
  135. package/dist/dashboard/(bookings)/calendar/_components/calendar-range.js.map +1 -0
  136. package/dist/dashboard/(bookings)/calendar/_components/day-board-view.js +279 -0
  137. package/dist/dashboard/(bookings)/calendar/_components/day-board-view.js.map +1 -0
  138. package/dist/dashboard/(bookings)/calendar/_components/event-detail-modal.js +113 -0
  139. package/dist/dashboard/(bookings)/calendar/_components/event-detail-modal.js.map +1 -0
  140. package/dist/dashboard/(bookings)/calendar/_components/format.js +22 -0
  141. package/dist/dashboard/(bookings)/calendar/_components/format.js.map +1 -0
  142. package/dist/dashboard/(bookings)/calendar/_components/month-grid.js +109 -0
  143. package/dist/dashboard/(bookings)/calendar/_components/month-grid.js.map +1 -0
  144. package/dist/dashboard/(bookings)/calendar/_components/resource-day-grid.js +325 -0
  145. package/dist/dashboard/(bookings)/calendar/_components/resource-day-grid.js.map +1 -0
  146. package/dist/dashboard/(bookings)/calendar/_components/slot-action-sheet.js +209 -0
  147. package/dist/dashboard/(bookings)/calendar/_components/slot-action-sheet.js.map +1 -0
  148. package/dist/dashboard/(bookings)/calendar/_components/use-block-drag.js +77 -0
  149. package/dist/dashboard/(bookings)/calendar/_components/use-block-drag.js.map +1 -0
  150. package/dist/dashboard/(bookings)/calendar/_components/use-calendar-nav.js +69 -0
  151. package/dist/dashboard/(bookings)/calendar/_components/use-calendar-nav.js.map +1 -0
  152. package/dist/dashboard/(bookings)/calendar/_components/week-grid.js +202 -0
  153. package/dist/dashboard/(bookings)/calendar/_components/week-grid.js.map +1 -0
  154. package/dist/dashboard/(bookings)/calendar/_components/year-grid.js +111 -0
  155. package/dist/dashboard/(bookings)/calendar/_components/year-grid.js.map +1 -0
  156. package/dist/dashboard/(bookings)/calendar/page.js +8 -0
  157. package/dist/dashboard/(bookings)/calendar/page.js.map +1 -0
  158. package/dist/dashboard/(bookings)/calendar-sync/_components/channel-feed-modal.js +126 -0
  159. package/dist/dashboard/(bookings)/calendar-sync/_components/channel-feed-modal.js.map +1 -0
  160. package/dist/dashboard/(bookings)/calendar-sync/_components/channel-feeds-section.js +99 -0
  161. package/dist/dashboard/(bookings)/calendar-sync/_components/channel-feeds-section.js.map +1 -0
  162. package/dist/dashboard/(bookings)/calendar-sync/demo-data.js +64 -0
  163. package/dist/dashboard/(bookings)/calendar-sync/demo-data.js.map +1 -0
  164. package/dist/dashboard/(bookings)/calendar-sync/page.js +15 -0
  165. package/dist/dashboard/(bookings)/calendar-sync/page.js.map +1 -0
  166. package/dist/dashboard/(bookings)/check-in/page.js +252 -0
  167. package/dist/dashboard/(bookings)/check-in/page.js.map +1 -0
  168. package/dist/dashboard/(bookings)/events/[eventId]/_components/event-attendees.js +108 -0
  169. package/dist/dashboard/(bookings)/events/[eventId]/_components/event-attendees.js.map +1 -0
  170. package/dist/dashboard/(bookings)/events/[eventId]/_components/event-share.js +73 -0
  171. package/dist/dashboard/(bookings)/events/[eventId]/_components/event-share.js.map +1 -0
  172. package/dist/dashboard/(bookings)/events/[eventId]/layout.js +10 -0
  173. package/dist/dashboard/(bookings)/events/[eventId]/layout.js.map +1 -0
  174. package/dist/dashboard/(bookings)/events/[eventId]/page.js +247 -0
  175. package/dist/dashboard/(bookings)/events/[eventId]/page.js.map +1 -0
  176. package/dist/dashboard/(bookings)/events/_components/event-grid.js +44 -0
  177. package/dist/dashboard/(bookings)/events/_components/event-grid.js.map +1 -0
  178. package/dist/dashboard/(bookings)/events/_components/event-poster.js +17 -0
  179. package/dist/dashboard/(bookings)/events/_components/event-poster.js.map +1 -0
  180. package/dist/dashboard/(bookings)/events/_hooks/use-events-data.js +55 -0
  181. package/dist/dashboard/(bookings)/events/_hooks/use-events-data.js.map +1 -0
  182. package/dist/dashboard/(bookings)/events/_lib/event-facts.js +68 -0
  183. package/dist/dashboard/(bookings)/events/_lib/event-facts.js.map +1 -0
  184. package/dist/dashboard/(bookings)/events/new/_components/event-composer.js +295 -0
  185. package/dist/dashboard/(bookings)/events/new/_components/event-composer.js.map +1 -0
  186. package/dist/dashboard/(bookings)/events/new/_components/event-poster.js +65 -0
  187. package/dist/dashboard/(bookings)/events/new/_components/event-poster.js.map +1 -0
  188. package/dist/dashboard/(bookings)/events/new/_components/ticket-tiers.js +75 -0
  189. package/dist/dashboard/(bookings)/events/new/_components/ticket-tiers.js.map +1 -0
  190. package/dist/dashboard/(bookings)/events/new/page.js +10 -0
  191. package/dist/dashboard/(bookings)/events/new/page.js.map +1 -0
  192. package/dist/dashboard/(bookings)/events/page.js +214 -0
  193. package/dist/dashboard/(bookings)/events/page.js.map +1 -0
  194. package/dist/dashboard/(bookings)/resources/[resourceId]/layout.js +36 -0
  195. package/dist/dashboard/(bookings)/resources/[resourceId]/layout.js.map +1 -0
  196. package/dist/dashboard/(bookings)/resources/[resourceId]/page.js +351 -0
  197. package/dist/dashboard/(bookings)/resources/[resourceId]/page.js.map +1 -0
  198. package/dist/dashboard/(bookings)/resources/_components/block-time-modal.js +130 -0
  199. package/dist/dashboard/(bookings)/resources/_components/block-time-modal.js.map +1 -0
  200. package/dist/dashboard/(bookings)/resources/_components/category-card.js +74 -0
  201. package/dist/dashboard/(bookings)/resources/_components/category-card.js.map +1 -0
  202. package/dist/dashboard/(bookings)/resources/_components/category-form-dialog.js +197 -0
  203. package/dist/dashboard/(bookings)/resources/_components/category-form-dialog.js.map +1 -0
  204. package/dist/dashboard/(bookings)/resources/_components/day-editor.js +194 -0
  205. package/dist/dashboard/(bookings)/resources/_components/day-editor.js.map +1 -0
  206. package/dist/dashboard/(bookings)/resources/_components/group-dialog.js +170 -0
  207. package/dist/dashboard/(bookings)/resources/_components/group-dialog.js.map +1 -0
  208. package/dist/dashboard/(bookings)/resources/_components/group-header.js +90 -0
  209. package/dist/dashboard/(bookings)/resources/_components/group-header.js.map +1 -0
  210. package/dist/dashboard/(bookings)/resources/_components/index.js +22 -0
  211. package/dist/dashboard/(bookings)/resources/_components/index.js.map +1 -0
  212. package/dist/dashboard/(bookings)/resources/_components/mobile-category-form-sheet.js +256 -0
  213. package/dist/dashboard/(bookings)/resources/_components/mobile-category-form-sheet.js.map +1 -0
  214. package/dist/dashboard/(bookings)/resources/_components/resource-form.js +420 -0
  215. package/dist/dashboard/(bookings)/resources/_components/resource-form.js.map +1 -0
  216. package/dist/dashboard/(bookings)/resources/_components/resource-picker.js +144 -0
  217. package/dist/dashboard/(bookings)/resources/_components/resource-picker.js.map +1 -0
  218. package/dist/dashboard/(bookings)/resources/_components/resource-type-picker-empty.js +109 -0
  219. package/dist/dashboard/(bookings)/resources/_components/resource-type-picker-empty.js.map +1 -0
  220. package/dist/dashboard/(bookings)/resources/_components/roster-empty.js +103 -0
  221. package/dist/dashboard/(bookings)/resources/_components/roster-empty.js.map +1 -0
  222. package/dist/dashboard/(bookings)/resources/_components/roster-grid.js +160 -0
  223. package/dist/dashboard/(bookings)/resources/_components/roster-grid.js.map +1 -0
  224. package/dist/dashboard/(bookings)/resources/_components/schedule-editor.js +244 -0
  225. package/dist/dashboard/(bookings)/resources/_components/schedule-editor.js.map +1 -0
  226. package/dist/dashboard/(bookings)/resources/_components/schedule-timezone-field.js +25 -0
  227. package/dist/dashboard/(bookings)/resources/_components/schedule-timezone-field.js.map +1 -0
  228. package/dist/dashboard/(bookings)/resources/_components/solo-schedule-view.js +146 -0
  229. package/dist/dashboard/(bookings)/resources/_components/solo-schedule-view.js.map +1 -0
  230. package/dist/dashboard/(bookings)/resources/_components/team-onboarding-dialog.js +161 -0
  231. package/dist/dashboard/(bookings)/resources/_components/team-onboarding-dialog.js.map +1 -0
  232. package/dist/dashboard/(bookings)/resources/_components/week-grid.js +175 -0
  233. package/dist/dashboard/(bookings)/resources/_components/week-grid.js.map +1 -0
  234. package/dist/dashboard/(bookings)/resources/_components.js +1 -0
  235. package/dist/dashboard/(bookings)/resources/_hooks/index.js +8 -0
  236. package/dist/dashboard/(bookings)/resources/_hooks/index.js.map +1 -0
  237. package/dist/dashboard/(bookings)/resources/_hooks/use-resource-categories-data.js +86 -0
  238. package/dist/dashboard/(bookings)/resources/_hooks/use-resource-categories-data.js.map +1 -0
  239. package/dist/dashboard/(bookings)/resources/_hooks/use-roster-page.js +138 -0
  240. package/dist/dashboard/(bookings)/resources/_hooks/use-roster-page.js.map +1 -0
  241. package/dist/dashboard/(bookings)/resources/_hooks/use-roster.js +182 -0
  242. package/dist/dashboard/(bookings)/resources/_hooks/use-roster.js.map +1 -0
  243. package/dist/dashboard/(bookings)/resources/_hooks.js +1 -0
  244. package/dist/dashboard/(bookings)/resources/_lib/presets.js +147 -0
  245. package/dist/dashboard/(bookings)/resources/_lib/presets.js.map +1 -0
  246. package/dist/dashboard/(bookings)/resources/_lib/schedule-timezone.js +17 -0
  247. package/dist/dashboard/(bookings)/resources/_lib/schedule-timezone.js.map +1 -0
  248. package/dist/dashboard/(bookings)/resources/_lib/shapes.js +105 -0
  249. package/dist/dashboard/(bookings)/resources/_lib/shapes.js.map +1 -0
  250. package/dist/dashboard/(bookings)/resources/_lib/week.js +122 -0
  251. package/dist/dashboard/(bookings)/resources/_lib/week.js.map +1 -0
  252. package/dist/dashboard/(bookings)/resources/page.js +391 -0
  253. package/dist/dashboard/(bookings)/resources/page.js.map +1 -0
  254. package/dist/dashboard/(bookings)/schedule/page.js +8 -0
  255. package/dist/dashboard/(bookings)/schedule/page.js.map +1 -0
  256. package/dist/dashboard/(bookings)/today/page.js +14 -0
  257. package/dist/dashboard/(bookings)/today/page.js.map +1 -0
  258. package/dist/dashboard/(bookings)/waitlist/_components/demo-data.js +99 -0
  259. package/dist/dashboard/(bookings)/waitlist/_components/demo-data.js.map +1 -0
  260. package/dist/dashboard/(bookings)/waitlist/_components/offer-spot-modal.js +71 -0
  261. package/dist/dashboard/(bookings)/waitlist/_components/offer-spot-modal.js.map +1 -0
  262. package/dist/dashboard/(bookings)/waitlist/_components/waitlist-entry-editor.js +150 -0
  263. package/dist/dashboard/(bookings)/waitlist/_components/waitlist-entry-editor.js.map +1 -0
  264. package/dist/dashboard/(bookings)/waitlist/new/page.js +59 -0
  265. package/dist/dashboard/(bookings)/waitlist/new/page.js.map +1 -0
  266. package/dist/dashboard/(bookings)/waitlist/page.js +317 -0
  267. package/dist/dashboard/(bookings)/waitlist/page.js.map +1 -0
  268. package/dist/index.js +1 -0
  269. package/dist/index.js.map +1 -0
  270. package/package.json +60 -0
@@ -0,0 +1,113 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import Link from "next/link";
4
+ import { Video } from "lucide-react";
5
+ import { useApiQuery } from "@withpotter/hooks/use-api-query";
6
+ import { useLocationScope } from "@withpotter/lib/location-scope-context";
7
+ import { bookingsApi } from "@withpotter/lib/api/bookings";
8
+ import { StatusBadge } from "@withpotter/components/shared/status-badge";
9
+ import { InlineListSkeleton } from "@withpotter/ui-kit/page-skeletons";
10
+ import { joinLabelOf, meetingLinkOf } from "@withpotter/lib/booking-meeting-link";
11
+ const HORIZON = 8;
12
+ function dayKey(iso) {
13
+ const d = new Date(iso);
14
+ const month = String(d.getMonth() + 1).padStart(2, "0");
15
+ const day = String(d.getDate()).padStart(2, "0");
16
+ return `${d.getFullYear()}-${month}-${day}`;
17
+ }
18
+ function tomorrow() {
19
+ const d = /* @__PURE__ */ new Date();
20
+ d.setDate(d.getDate() + 1);
21
+ return dayKey(d.toISOString());
22
+ }
23
+ function dayLabel(key) {
24
+ const date = /* @__PURE__ */ new Date(`${key}T00:00:00`);
25
+ const soon = /* @__PURE__ */ new Date();
26
+ soon.setDate(soon.getDate() + 1);
27
+ if (dayKey(soon.toISOString()) === key) return "Tomorrow";
28
+ return date.toLocaleDateString("en-GB", {
29
+ weekday: "long",
30
+ day: "numeric",
31
+ month: "short"
32
+ });
33
+ }
34
+ function timeLabel(booking) {
35
+ if (!booking.startTime) return "No time set";
36
+ const [h, m] = booking.startTime.split(":");
37
+ const hour = parseInt(h, 10);
38
+ return `${hour % 12 || 12}:${m} ${hour >= 12 ? "pm" : "am"}`;
39
+ }
40
+ function UpcomingBand({ types }) {
41
+ const { locationFilter } = useLocationScope();
42
+ const { data, isLoading } = useApiQuery(
43
+ ["bookings-upcoming", locationFilter, types?.join("+") ?? "all"],
44
+ (slug) => bookingsApi.list(slug, {
45
+ // From tomorrow: today is the board above, and showing it twice on one
46
+ // screen is the screen disagreeing with itself about what "now" is.
47
+ dateFrom: tomorrow(),
48
+ type: types ? [...types] : void 0,
49
+ status: ["pending", "confirmed"],
50
+ // Soonest first. The default is newest-first, which on a list of the
51
+ // future puts the furthest-away appointment at the top.
52
+ sortOrder: "ASC",
53
+ limit: HORIZON,
54
+ locationIds: locationFilter
55
+ })
56
+ );
57
+ const bookings = data?.data ?? [];
58
+ if (isLoading) return /* @__PURE__ */ jsx(InlineListSkeleton, {});
59
+ if (bookings.length === 0) return null;
60
+ const days = /* @__PURE__ */ new Map();
61
+ for (const booking of bookings) {
62
+ const key = dayKey(booking.date);
63
+ days.set(key, [...days.get(key) ?? [], booking]);
64
+ }
65
+ return /* @__PURE__ */ jsxs("section", { className: "space-y-3", children: [
66
+ /* @__PURE__ */ jsx("h2", { className: "text-sm font-semibold text-[var(--text-primary)]", children: "Coming up" }),
67
+ /* @__PURE__ */ jsx("div", { className: "surface divide-y divide-[var(--border-subtle)]", children: [...days.entries()].map(([key, rows]) => /* @__PURE__ */ jsxs("div", { className: "p-3", children: [
68
+ /* @__PURE__ */ jsx("p", { className: "mb-2 text-xs font-medium text-[var(--text-tertiary)]", children: dayLabel(key) }),
69
+ /* @__PURE__ */ jsx("div", { className: "space-y-1", children: rows.map((booking) => {
70
+ const meetingLink = meetingLinkOf(booking);
71
+ return /* @__PURE__ */ jsxs(
72
+ "div",
73
+ {
74
+ className: "flex items-center gap-3 rounded-lg px-2 py-2 transition-colors hover:bg-[var(--interactive-hover)]",
75
+ children: [
76
+ /* @__PURE__ */ jsx("span", { className: "w-20 shrink-0 text-sm tabular-nums text-[var(--text-secondary)]", children: timeLabel(booking) }),
77
+ /* @__PURE__ */ jsxs(
78
+ Link,
79
+ {
80
+ href: `/dashboard/bookings/${booking.id}`,
81
+ className: "min-w-0 flex-1",
82
+ children: [
83
+ /* @__PURE__ */ jsx("span", { className: "block truncate text-sm font-medium text-[var(--text-primary)]", children: booking.customerName || "Guest" }),
84
+ booking.content?.title && /* @__PURE__ */ jsx("span", { className: "block truncate text-xs text-[var(--text-tertiary)]", children: booking.content.title })
85
+ ]
86
+ }
87
+ ),
88
+ meetingLink && /* @__PURE__ */ jsxs(
89
+ "a",
90
+ {
91
+ href: meetingLink,
92
+ target: "_blank",
93
+ rel: "noreferrer",
94
+ className: "inline-flex shrink-0 items-center gap-1 text-xs font-medium text-[var(--text-link)] underline-offset-2 hover:underline",
95
+ children: [
96
+ /* @__PURE__ */ jsx(Video, {}),
97
+ joinLabelOf(meetingLink)
98
+ ]
99
+ }
100
+ ),
101
+ /* @__PURE__ */ jsx(StatusBadge, { neutral: true, status: booking.status })
102
+ ]
103
+ },
104
+ booking.id
105
+ );
106
+ }) })
107
+ ] }, key)) })
108
+ ] });
109
+ }
110
+ export {
111
+ UpcomingBand
112
+ };
113
+ //# sourceMappingURL=upcoming-band.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/dashboard/%28bookings%29/bookings/_components/today/upcoming-band.tsx"],"sourcesContent":["'use client';\n\nimport Link from 'next/link';\nimport { Video } from 'lucide-react';\nimport { useApiQuery } from '@withpotter/hooks/use-api-query';\nimport { useLocationScope } from '@withpotter/lib/location-scope-context';\nimport { bookingsApi } from '@withpotter/lib/api/bookings';\nimport type { BookingItem } from '@withpotter/lib/api/types';\nimport { StatusBadge } from '@withpotter/components/shared/status-badge';\nimport { InlineListSkeleton } from '@withpotter/ui-kit/page-skeletons';\nimport { joinLabelOf, meetingLinkOf } from '@withpotter/lib/booking-meeting-link';\n\n/**\n * WHAT IS COMING, under what is happening.\n *\n * John, 2026-09-10: *\"the appointments page needs to show upcoming\n * appointments and the ones today, so that today page is just weird we need an\n * overview page that shows things we need to see not just today\"*.\n *\n * The board above answers \"what is happening now\" and answered nothing else,\n * so the first question anybody asks after it — what is coming — cost a trip to\n * the list and a filter. A desk needs both in one look: the day you are working\n * and the days you are about to.\n *\n * DELIBERATELY NOT A SECOND BOARD. Today gets resource lanes because you act on\n * it — check in, take payment, mark a no-show. Tomorrow is a read: you want to\n * know it is there and roughly how full, and the acts belong on the day it\n * becomes. So this is a list grouped by day, and every row is a door.\n */\n\nconst HORIZON = 8;\n\nfunction dayKey(iso: string): string {\n const d = new Date(iso);\n const month = String(d.getMonth() + 1).padStart(2, '0');\n const day = String(d.getDate()).padStart(2, '0');\n return `${d.getFullYear()}-${month}-${day}`;\n}\n\n/** Tomorrow, in the merchant's own timezone — see `use-bookings-data`. */\nfunction tomorrow(): string {\n const d = new Date();\n d.setDate(d.getDate() + 1);\n return dayKey(d.toISOString());\n}\n\nfunction dayLabel(key: string): string {\n const date = new Date(`${key}T00:00:00`);\n const soon = new Date();\n soon.setDate(soon.getDate() + 1);\n if (dayKey(soon.toISOString()) === key) return 'Tomorrow';\n return date.toLocaleDateString('en-GB', {\n weekday: 'long',\n day: 'numeric',\n month: 'short',\n });\n}\n\nfunction timeLabel(booking: BookingItem): string {\n if (!booking.startTime) return 'No time set';\n const [h, m] = booking.startTime.split(':');\n const hour = parseInt(h, 10);\n return `${hour % 12 || 12}:${m} ${hour >= 12 ? 'pm' : 'am'}`;\n}\n\nexport function UpcomingBand({ types }: { types?: readonly string[] }) {\n const { locationFilter } = useLocationScope();\n\n const { data, isLoading } = useApiQuery(\n ['bookings-upcoming', locationFilter, types?.join('+') ?? 'all'],\n (slug) =>\n bookingsApi.list(slug, {\n // From tomorrow: today is the board above, and showing it twice on one\n // screen is the screen disagreeing with itself about what \"now\" is.\n dateFrom: tomorrow(),\n type: types ? [...types] : undefined,\n status: ['pending', 'confirmed'],\n // Soonest first. The default is newest-first, which on a list of the\n // future puts the furthest-away appointment at the top.\n sortOrder: 'ASC',\n limit: HORIZON,\n locationIds: locationFilter,\n }),\n );\n\n const bookings = data?.data ?? [];\n\n // Nothing ahead is not a state worth a panel. The board above already says\n // what today holds, and an empty \"Coming up\" under a full day reads as a\n // failure rather than as a quiet week.\n if (isLoading) return <InlineListSkeleton />;\n if (bookings.length === 0) return null;\n\n const days = new Map<string, BookingItem[]>();\n for (const booking of bookings) {\n const key = dayKey(booking.date);\n days.set(key, [...(days.get(key) ?? []), booking]);\n }\n\n return (\n <section className=\"space-y-3\">\n <h2 className=\"text-sm font-semibold text-[var(--text-primary)]\">\n Coming up\n </h2>\n <div className=\"surface divide-y divide-[var(--border-subtle)]\">\n {[...days.entries()].map(([key, rows]) => (\n <div key={key} className=\"p-3\">\n <p className=\"mb-2 text-xs font-medium text-[var(--text-tertiary)]\">\n {dayLabel(key)}\n </p>\n <div className=\"space-y-1\">\n {rows.map((booking) => {\n const meetingLink = meetingLinkOf(booking);\n return (\n <div\n key={booking.id}\n className=\"flex items-center gap-3 rounded-lg px-2 py-2 transition-colors hover:bg-[var(--interactive-hover)]\"\n >\n <span className=\"w-20 shrink-0 text-sm tabular-nums text-[var(--text-secondary)]\">\n {timeLabel(booking)}\n </span>\n <Link\n href={`/dashboard/bookings/${booking.id}`}\n className=\"min-w-0 flex-1\"\n >\n <span className=\"block truncate text-sm font-medium text-[var(--text-primary)]\">\n {booking.customerName || 'Guest'}\n </span>\n {booking.content?.title && (\n <span className=\"block truncate text-xs text-[var(--text-tertiary)]\">\n {booking.content.title}\n </span>\n )}\n </Link>\n {/* The room, on the row, for the same reason it is on the\n list: at the hour it starts this is the act. */}\n {meetingLink && (\n <a\n href={meetingLink}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-flex shrink-0 items-center gap-1 text-xs font-medium text-[var(--text-link)] underline-offset-2 hover:underline\"\n >\n <Video />\n {joinLabelOf(meetingLink)}\n </a>\n )}\n <StatusBadge neutral status={booking.status} />\n </div>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n </section>\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,62 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import Link from "next/link";
4
+ import { ArrowRight, Users } from "lucide-react";
5
+ import { Button } from "@withpotter/ui-kit/button";
6
+ import { Card } from "@withpotter/ui-kit";
7
+ function WaitingQueue({
8
+ entries,
9
+ onOffer
10
+ }) {
11
+ if (entries.length === 0) return null;
12
+ return /* @__PURE__ */ jsxs(Card, { padding: "none", className: "overflow-hidden", children: [
13
+ /* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between gap-3 border-b border-[var(--border-subtle)] px-4 py-3", children: [
14
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
15
+ /* @__PURE__ */ jsx(Users, { className: "text-[var(--text-tertiary)]" }),
16
+ /* @__PURE__ */ jsx("h2", { className: "text-sm font-semibold text-[var(--text-primary)]", children: "Waiting for today" }),
17
+ /* @__PURE__ */ jsx("span", { className: "text-2xs tabular-nums text-[var(--text-tertiary)]", children: entries.length })
18
+ ] }),
19
+ /* @__PURE__ */ jsxs(
20
+ Link,
21
+ {
22
+ href: "/dashboard/waitlist",
23
+ className: "flex items-center gap-1 text-xs font-medium text-[var(--text-secondary)] transition-colors hover:text-[var(--text-primary)]",
24
+ children: [
25
+ "Full waitlist",
26
+ /* @__PURE__ */ jsx(ArrowRight, {})
27
+ ]
28
+ }
29
+ )
30
+ ] }),
31
+ /* @__PURE__ */ jsx("ul", { className: "divide-y divide-[var(--border-subtle)]", children: entries.map((entry) => /* @__PURE__ */ jsxs(
32
+ "li",
33
+ {
34
+ className: "flex items-center justify-between gap-3 px-4 py-3",
35
+ children: [
36
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
37
+ /* @__PURE__ */ jsx("p", { className: "truncate text-sm font-medium text-[var(--text-primary)]", children: entry.customerName || entry.customerEmail || "Guest" }),
38
+ entry.requestedStartTime ? /* @__PURE__ */ jsxs("p", { className: "text-xs text-[var(--text-tertiary)]", children: [
39
+ "Wants ",
40
+ entry.requestedStartTime,
41
+ entry.requestedEndTime ? ` \u2013 ${entry.requestedEndTime}` : null
42
+ ] }) : null
43
+ ] }),
44
+ /* @__PURE__ */ jsx(
45
+ Button,
46
+ {
47
+ variant: "secondary",
48
+ className: "shrink-0",
49
+ onClick: () => onOffer(entry),
50
+ children: "Offer a spot"
51
+ }
52
+ )
53
+ ]
54
+ },
55
+ entry.id
56
+ )) })
57
+ ] });
58
+ }
59
+ export {
60
+ WaitingQueue
61
+ };
62
+ //# sourceMappingURL=waiting-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/dashboard/%28bookings%29/bookings/_components/today/waiting-queue.tsx"],"sourcesContent":["'use client';\n\nimport Link from 'next/link';\nimport { ArrowRight, Users } from 'lucide-react';\nimport type { WaitlistItem } from '@withpotter/lib/api/types';\nimport { Button } from '@withpotter/ui-kit/button';\nimport { Card } from '@withpotter/ui-kit';\n\n/**\n * Who is waiting for today, next to the board that shows what is free.\n *\n * The queue had its own top-level page and nothing linked to it — not the day\n * board, not a booking, not a cancellation. So the two halves of the same\n * decision lived on separate screens: this one says a court just came free,\n * that one says four people want it, and staff had to remember the second\n * existed. A no-show on the board is the exact moment this list is worth\n * reading, which is why it sits under the board rather than a click away.\n */\nexport function WaitingQueue({\n entries,\n onOffer,\n}: {\n entries: WaitlistItem[];\n onOffer: (entry: WaitlistItem) => void;\n}) {\n if (entries.length === 0) return null;\n\n return (\n <Card padding=\"none\" className=\"overflow-hidden\">\n <header className=\"flex items-center justify-between gap-3 border-b border-[var(--border-subtle)] px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n <Users className=\"text-[var(--text-tertiary)]\" />\n <h2 className=\"text-sm font-semibold text-[var(--text-primary)]\">\n Waiting for today\n </h2>\n <span className=\"text-2xs tabular-nums text-[var(--text-tertiary)]\">\n {entries.length}\n </span>\n </div>\n <Link\n href=\"/dashboard/waitlist\"\n className=\"flex items-center gap-1 text-xs font-medium text-[var(--text-secondary)] transition-colors hover:text-[var(--text-primary)]\"\n >\n Full waitlist\n <ArrowRight />\n </Link>\n </header>\n\n <ul className=\"divide-y divide-[var(--border-subtle)]\">\n {entries.map((entry) => (\n <li\n key={entry.id}\n className=\"flex items-center justify-between gap-3 px-4 py-3\"\n >\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-[var(--text-primary)]\">\n {entry.customerName || entry.customerEmail || 'Guest'}\n </p>\n {entry.requestedStartTime ? (\n <p className=\"text-xs text-[var(--text-tertiary)]\">\n Wants {entry.requestedStartTime}\n {entry.requestedEndTime\n ? ` – ${entry.requestedEndTime}`\n : null}\n </p>\n ) : null}\n </div>\n <Button\n variant=\"secondary\"\n className=\"shrink-0\"\n onClick={() => onOffer(entry)}\n >\n Offer a spot\n </Button>\n </li>\n ))}\n </ul>\n </Card>\n );\n}\n"],"mappings":";AA8BQ,SACE,KADF;AA5BR,OAAO,UAAU;AACjB,SAAS,YAAY,aAAa;AAElC,SAAS,cAAc;AACvB,SAAS,YAAY;AAYd,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAGG;AACD,MAAI,QAAQ,WAAW,EAAG,QAAO;AAEjC,SACE,qBAAC,QAAK,SAAQ,QAAO,WAAU,mBAC7B;AAAA,yBAAC,YAAO,WAAU,4FAChB;AAAA,2BAAC,SAAI,WAAU,2BACb;AAAA,4BAAC,SAAM,WAAU,+BAA8B;AAAA,QAC/C,oBAAC,QAAG,WAAU,oDAAmD,+BAEjE;AAAA,QACA,oBAAC,UAAK,WAAU,qDACb,kBAAQ,QACX;AAAA,SACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACX;AAAA;AAAA,YAEC,oBAAC,cAAW;AAAA;AAAA;AAAA,MACd;AAAA,OACF;AAAA,IAEA,oBAAC,QAAG,WAAU,0CACX,kBAAQ,IAAI,CAAC,UACZ;AAAA,MAAC;AAAA;AAAA,QAEC,WAAU;AAAA,QAEV;AAAA,+BAAC,SAAI,WAAU,WACb;AAAA,gCAAC,OAAE,WAAU,2DACV,gBAAM,gBAAgB,MAAM,iBAAiB,SAChD;AAAA,YACC,MAAM,qBACL,qBAAC,OAAE,WAAU,uCAAsC;AAAA;AAAA,cAC1C,MAAM;AAAA,cACZ,MAAM,mBACH,WAAM,MAAM,gBAAgB,KAC5B;AAAA,eACN,IACE;AAAA,aACN;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,WAAU;AAAA,cACV,SAAS,MAAM,QAAQ,KAAK;AAAA,cAC7B;AAAA;AAAA,UAED;AAAA;AAAA;AAAA,MAtBK,MAAM;AAAA,IAuBb,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,192 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { useIntentConfig } from "@withpotter/lib/intents/use-intent-config";
5
+ import { useResourceLabel } from "@withpotter/lib/intents/use-resource-label";
6
+ import { useFormatCurrency } from "@withpotter/hooks/use-format-currency";
7
+ import { useConfirm } from "@withpotter/ui-kit/confirm-dialog";
8
+ import { useErrorToast } from "@withpotter/ui-kit/use-toast";
9
+ import { InlineListSkeleton } from "@withpotter/ui-kit/page-skeletons";
10
+ import { StateView } from "@withpotter/ui-kit/state-view";
11
+ import { DetailColumns } from "@withpotter/ui-kit/detail-columns";
12
+ import { bookingsApi } from "@withpotter/lib/api/bookings";
13
+ import { waitlistApi } from "@withpotter/lib/api/waitlist";
14
+ import { RecordPaymentModal } from "@withpotter/components/features/record-payment-modal";
15
+ import { bookingTotal, useTodayData } from "../_hooks/use-today-data";
16
+ import { OfferSpotModal } from "@withpotter/pages-bookings/dashboard/(bookings)/waitlist/_components/offer-spot-modal";
17
+ import {
18
+ Handover,
19
+ TodayBand,
20
+ ResourceBoard,
21
+ UpcomingBand,
22
+ PastBand,
23
+ WaitingQueue
24
+ } from "./today";
25
+ function TodayBoard({ types }) {
26
+ const {
27
+ tenantSlug,
28
+ today,
29
+ bookings,
30
+ loading,
31
+ lanes,
32
+ waiting,
33
+ summary,
34
+ staySummary,
35
+ hasStays,
36
+ refetch,
37
+ refetchQueue
38
+ } = useTodayData({ types });
39
+ const formatCurrency = useFormatCurrency();
40
+ const confirm = useConfirm();
41
+ const resource = useResourceLabel();
42
+ const intentConfig = useIntentConfig();
43
+ const setUpHref = intentConfig?.primary?.emptyStates?.items?.actionHref ?? "/dashboard/resources";
44
+ const resourceLabel = resource.singular;
45
+ const hasAppointments = bookings.length > 0 || waiting.length > 0;
46
+ const [pendingId, setPendingId] = useState(null);
47
+ const [pendingAction, setPendingAction] = useState(null);
48
+ const [payBooking, setPayBooking] = useState(null);
49
+ const [recording, setRecording] = useState(false);
50
+ const [error, setError] = useState(null);
51
+ const [offerTarget, setOfferTarget] = useState(null);
52
+ const [offering, setOffering] = useState(false);
53
+ const [offerError, setOfferError] = useState(null);
54
+ useErrorToast(error, () => setError(null));
55
+ const act = async (id, action, fn) => {
56
+ if (!tenantSlug) return;
57
+ setPendingId(id);
58
+ setPendingAction(action);
59
+ setError(null);
60
+ try {
61
+ await fn();
62
+ await refetch();
63
+ } catch (e) {
64
+ setError(
65
+ e?.message || "That action failed. Please try again."
66
+ );
67
+ } finally {
68
+ setPendingId(null);
69
+ setPendingAction(null);
70
+ }
71
+ };
72
+ const handleCheckIn = (b) => act(b.id, "checkin", () => bookingsApi.checkIn(tenantSlug, b.id));
73
+ const handleNoShow = async (b) => {
74
+ const ok = await confirm({
75
+ title: "Mark as no-show?",
76
+ description: `${b.customerName?.trim() || "This booking"} didn't turn up. This frees the ${resourceLabel.toLowerCase()} and records the no-show.`,
77
+ confirmLabel: "Mark no-show",
78
+ tone: "danger"
79
+ });
80
+ if (!ok) return;
81
+ await act(b.id, "noshow", () => bookingsApi.noShow(tenantSlug, b.id));
82
+ };
83
+ const handleRecordPayment = async (data) => {
84
+ if (!tenantSlug || !payBooking) return;
85
+ setRecording(true);
86
+ setError(null);
87
+ try {
88
+ await bookingsApi.recordPayment(tenantSlug, payBooking.id, data);
89
+ await refetch();
90
+ setPayBooking(null);
91
+ } catch (e) {
92
+ setError(e?.message || "Could not record the payment.");
93
+ } finally {
94
+ setRecording(false);
95
+ }
96
+ };
97
+ const handleOffer = async (data) => {
98
+ if (!tenantSlug || !offerTarget) return;
99
+ setOffering(true);
100
+ setOfferError(null);
101
+ try {
102
+ await waitlistApi.offer(tenantSlug, offerTarget.id, data);
103
+ await refetchQueue();
104
+ setOfferTarget(null);
105
+ } catch (e) {
106
+ setOfferError(e?.message || "Could not send the offer.");
107
+ } finally {
108
+ setOffering(false);
109
+ }
110
+ };
111
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
112
+ /* @__PURE__ */ jsx(
113
+ TodayBand,
114
+ {
115
+ onNow: summary.onNow,
116
+ dueNext: summary.dueNext,
117
+ awaitingPayment: summary.awaitingPayment,
118
+ toCheckIn: summary.toCheckIn,
119
+ stays: hasStays ? staySummary : void 0
120
+ }
121
+ ),
122
+ /* @__PURE__ */ jsx(Handover, {}),
123
+ /* @__PURE__ */ jsx(
124
+ DetailColumns,
125
+ {
126
+ className: "lg:[&>div:first-child:has(+div:empty)]:col-span-3",
127
+ aside: /* @__PURE__ */ jsxs(Fragment, { children: [
128
+ /* @__PURE__ */ jsx(UpcomingBand, { types }),
129
+ /* @__PURE__ */ jsx(PastBand, { types }),
130
+ /* @__PURE__ */ jsx(WaitingQueue, { entries: waiting, onOffer: setOfferTarget })
131
+ ] }),
132
+ children: loading && lanes.length === 0 ? /* @__PURE__ */ jsx(InlineListSkeleton, {}) : lanes.length === 0 ? (
133
+ // Only when there is genuinely nothing to show: no bookings today AND
134
+ // nowhere to put them. A business with bookings and no resources gets
135
+ // time columns instead, which is why this no longer swallows the day.
136
+ /* @__PURE__ */ jsx(
137
+ StateView,
138
+ {
139
+ compact: true,
140
+ title: "Nothing booked today",
141
+ description: `Today\u2019s bookings show here as a live desk board. Set up your ${resource.plural.toLowerCase()} to see them side by side.`,
142
+ action: {
143
+ label: `Set up ${resource.plural.toLowerCase()}`,
144
+ href: setUpHref
145
+ }
146
+ }
147
+ )
148
+ ) : /* @__PURE__ */ jsx(
149
+ ResourceBoard,
150
+ {
151
+ lanes,
152
+ formatCurrency,
153
+ pendingId,
154
+ pendingAction,
155
+ onCheckIn: handleCheckIn,
156
+ onRecordPayment: setPayBooking,
157
+ onNoShow: handleNoShow
158
+ }
159
+ )
160
+ }
161
+ ),
162
+ hasAppointments ? /* @__PURE__ */ jsx(Handover, { place: "foot" }) : null,
163
+ offerTarget ? /* @__PURE__ */ jsx(
164
+ OfferSpotModal,
165
+ {
166
+ customerName: offerTarget.customerName || offerTarget.customerEmail || "Guest",
167
+ initialDate: today,
168
+ initialStartTime: offerTarget.requestedStartTime,
169
+ initialEndTime: offerTarget.requestedEndTime,
170
+ offering,
171
+ error: offerError,
172
+ onOffer: handleOffer,
173
+ onClose: () => setOfferTarget(null)
174
+ }
175
+ ) : null,
176
+ payBooking ? /* @__PURE__ */ jsx(
177
+ RecordPaymentModal,
178
+ {
179
+ subject: payBooking.customerName?.trim() || `#${payBooking.bookingNumber}`,
180
+ balanceDue: bookingTotal(payBooking),
181
+ formatCurrency,
182
+ recording,
183
+ onRecord: handleRecordPayment,
184
+ onClose: () => setPayBooking(null)
185
+ }
186
+ ) : null
187
+ ] });
188
+ }
189
+ export {
190
+ TodayBoard
191
+ };
192
+ //# sourceMappingURL=today-board.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/dashboard/%28bookings%29/bookings/_components/today-board.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { useIntentConfig } from '@withpotter/lib/intents/use-intent-config';\nimport { useResourceLabel } from '@withpotter/lib/intents/use-resource-label';\nimport { useFormatCurrency } from '@withpotter/hooks/use-format-currency';\nimport { useConfirm } from '@withpotter/ui-kit/confirm-dialog';\nimport { useErrorToast } from '@withpotter/ui-kit/use-toast';\nimport { InlineListSkeleton } from '@withpotter/ui-kit/page-skeletons';\nimport { StateView } from '@withpotter/ui-kit/state-view';\nimport { DetailColumns } from '@withpotter/ui-kit/detail-columns';\nimport { bookingsApi } from '@withpotter/lib/api/bookings';\nimport type { BookingItem, WaitlistItem } from '@withpotter/lib/api/types';\nimport { waitlistApi } from '@withpotter/lib/api/waitlist';\nimport { RecordPaymentModal } from '@withpotter/components/features/record-payment-modal';\nimport { bookingTotal, useTodayData } from '../_hooks/use-today-data';\nimport { OfferSpotModal } from '@withpotter/pages-bookings/dashboard/(bookings)/waitlist/_components/offer-spot-modal';\nimport {\n Handover,\n TodayBand,\n ResourceBoard,\n UpcomingBand,\n PastBand,\n WaitingQueue,\n} from './today';\n\ntype Pending = 'checkin' | 'payment' | 'noshow' | null;\n\n/**\n * The desk's day: who is on now, who is due, who has not paid, who to check in.\n *\n * A view of Appointments rather than a screen of its own. The two were drawing\n * the same picture — resources across, today down — and only this one could act\n * on it: the calendar view creates in a gap and opens a detail, and cannot\n * check anybody in. Merging them keeps one board and one create door instead\n * of two of each.\n */\nexport function TodayBoard({ types }: { types?: readonly string[] }) {\n const {\n tenantSlug,\n today,\n bookings,\n loading,\n lanes,\n waiting,\n summary,\n staySummary,\n hasStays,\n refetch,\n refetchQueue,\n } = useTodayData({ types });\n const formatCurrency = useFormatCurrency();\n const confirm = useConfirm();\n // The tenant's own noun for a bookable resource, from the one place that\n // resolves it: merchant override → archetype config → \"Resource\".\n const resource = useResourceLabel();\n const intentConfig = useIntentConfig();\n /**\n * Where \"set these up\" should actually send someone.\n *\n * This pointed at /dashboard/resources for every archetype. That route\n * manages BookableResources — courts, tables, chairs — and it is not in the\n * sidebar at all for archetypes whose bookable thing is a catalogue item, so\n * a property operator landed on a page about a different concept with\n * nothing in the nav lit up to say where they were. They already had their\n * properties; they were in the catalogue.\n */\n const setUpHref =\n intentConfig?.primary?.emptyStates?.items?.actionHref ??\n '/dashboard/resources';\n const resourceLabel = resource.singular;\n const hasAppointments = bookings.length > 0 || waiting.length > 0;\n\n const [pendingId, setPendingId] = useState<string | null>(null);\n const [pendingAction, setPendingAction] = useState<Pending>(null);\n const [payBooking, setPayBooking] = useState<BookingItem | null>(null);\n const [recording, setRecording] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [offerTarget, setOfferTarget] = useState<WaitlistItem | null>(null);\n const [offering, setOffering] = useState(false);\n const [offerError, setOfferError] = useState<string | null>(null);\n\n /**\n * Failures follow the click, they do not wait at the top of the page.\n *\n * Four actions on four different cards funnelled into one error line above\n * the board, so a check-in that failed on the last lane reported itself a\n * screen away from where it was pressed. The toast persists until dismissed\n * (duration 0) rather than fading, because a failed no-show is not a thing to\n * miss.\n */\n useErrorToast(error, () => setError(null));\n\n const act = async (\n id: string,\n action: Pending,\n fn: () => Promise<unknown>,\n ) => {\n if (!tenantSlug) return;\n setPendingId(id);\n setPendingAction(action);\n setError(null);\n try {\n await fn();\n await refetch();\n } catch (e) {\n setError(\n (e as Error)?.message || 'That action failed. Please try again.',\n );\n } finally {\n setPendingId(null);\n setPendingAction(null);\n }\n };\n\n const handleCheckIn = (b: BookingItem) =>\n act(b.id, 'checkin', () => bookingsApi.checkIn(tenantSlug!, b.id));\n\n const handleNoShow = async (b: BookingItem) => {\n const ok = await confirm({\n title: 'Mark as no-show?',\n description: `${b.customerName?.trim() || 'This booking'} didn't turn up. This frees the ${resourceLabel.toLowerCase()} and records the no-show.`,\n confirmLabel: 'Mark no-show',\n tone: 'danger',\n });\n if (!ok) return;\n await act(b.id, 'noshow', () => bookingsApi.noShow(tenantSlug!, b.id));\n };\n\n const handleRecordPayment = async (data: {\n amount: number;\n channel: 'bank_transfer' | 'cash' | 'card';\n note?: string;\n }) => {\n if (!tenantSlug || !payBooking) return;\n setRecording(true);\n setError(null);\n try {\n await bookingsApi.recordPayment(tenantSlug, payBooking.id, data);\n await refetch();\n setPayBooking(null);\n } catch (e) {\n setError((e as Error)?.message || 'Could not record the payment.');\n } finally {\n setRecording(false);\n }\n };\n\n const handleOffer = async (data: {\n date: string;\n startTime: string;\n endTime: string;\n expiresInHours?: number;\n }) => {\n if (!tenantSlug || !offerTarget) return;\n setOffering(true);\n setOfferError(null);\n try {\n await waitlistApi.offer(tenantSlug, offerTarget.id, data);\n await refetchQueue();\n setOfferTarget(null);\n } catch (e) {\n setOfferError((e as Error)?.message || 'Could not send the offer.');\n } finally {\n setOffering(false);\n }\n };\n\n return (\n <>\n {/*\n * THE DAY ROW carries only what is true right now.\n *\n * It used to be the date alone, with four `0` tiles under it and an empty\n * handover card between — three stacked blocks whose entire content, on a\n * quiet morning, was that nothing was happening. It carried a Walk-in\n * button too, which opened the header's own create screen with a checkbox\n * preselected: a second door to the first door, one line under it.\n */}\n <TodayBand\n onNow={summary.onNow}\n dueNext={summary.dueNext}\n awaitingPayment={summary.awaitingPayment}\n toCheckIn={summary.toCheckIn}\n stays={hasStays ? staySummary : undefined}\n />\n\n {/* Above the day's board on purpose: a handover read after you have\n already started is a handover you did not get. Nothing renders here\n when there is nothing to read — the door to WRITING one is at the\n foot of the day, where the shift ends. */}\n <Handover />\n\n {/* The board is the day, so it takes the wide column; what comes\n before and after it, and who is waiting, stack in the rail beside\n it. Below `lg` the two collapse back into one column in the same\n order.\n\n The rail is three bands that each fetch their own rows and render\n nothing when they have none, so on a quiet week it is an empty\n column: the board stopped two thirds of the way across and the rest\n of the page was blank. When the rail is empty the board takes all\n three columns, like every other list page. Said in CSS because only\n the bands know whether they have anything. */}\n <DetailColumns\n className=\"lg:[&>div:first-child:has(+div:empty)]:col-span-3\"\n aside={\n <>\n {/* What is coming, under what is happening — the other half of the\n overview. Below the queue for today because a spot to fill now\n outranks a booking three days out. */}\n <UpcomingBand types={types} />\n <PastBand types={types} />\n\n <WaitingQueue entries={waiting} onOffer={setOfferTarget} />\n </>\n }\n >\n {loading && lanes.length === 0 ? (\n <InlineListSkeleton />\n ) : lanes.length === 0 ? (\n // Only when there is genuinely nothing to show: no bookings today AND\n // nowhere to put them. A business with bookings and no resources gets\n // time columns instead, which is why this no longer swallows the day.\n <StateView\n compact\n title=\"Nothing booked today\"\n description={`Today’s bookings show here as a live desk board. Set up your ${resource.plural.toLowerCase()} to see them side by side.`}\n action={{\n label: `Set up ${resource.plural.toLowerCase()}`,\n href: setUpHref,\n }}\n />\n ) : (\n <ResourceBoard\n lanes={lanes}\n formatCurrency={formatCurrency}\n pendingId={pendingId}\n pendingAction={pendingAction}\n onCheckIn={handleCheckIn}\n onRecordPayment={setPayBooking}\n onNoShow={handleNoShow}\n />\n )}\n </DetailColumns>\n\n {hasAppointments ? <Handover place=\"foot\" /> : null}\n\n {offerTarget ? (\n <OfferSpotModal\n customerName={\n offerTarget.customerName || offerTarget.customerEmail || 'Guest'\n }\n initialDate={today}\n initialStartTime={offerTarget.requestedStartTime}\n initialEndTime={offerTarget.requestedEndTime}\n offering={offering}\n error={offerError}\n onOffer={handleOffer}\n onClose={() => setOfferTarget(null)}\n />\n ) : null}\n\n {payBooking ? (\n <RecordPaymentModal\n subject={\n payBooking.customerName?.trim() || `#${payBooking.bookingNumber}`\n }\n balanceDue={bookingTotal(payBooking)}\n formatCurrency={formatCurrency}\n recording={recording}\n onRecord={handleRecordPayment}\n onClose={() => setPayBooking(null)}\n />\n ) : null}\n </>\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1 @@
1
+ export * from './today/index.js';
@@ -0,0 +1 @@
1
+ export * from './_components/index.js';
@@ -0,0 +1,5 @@
1
+ import { useBookingsData } from "./use-bookings-data";
2
+ export {
3
+ useBookingsData
4
+ };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/dashboard/%28bookings%29/bookings/_hooks/index.ts"],"sourcesContent":["export { useBookingsData } from './use-bookings-data';\n"],"mappings":"AAAA,SAAS,uBAAuB;","names":[]}