@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,63 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { ShieldCheck } from "lucide-react";
4
+ import { Button } from "@withpotter/ui-kit/button";
5
+ import { EmptyNote } from "@withpotter/ui-kit";
6
+ const COPY = {
7
+ due: {
8
+ label: "Due",
9
+ note: "Charged with the booking. It becomes held once the money lands."
10
+ },
11
+ held: {
12
+ label: "Held",
13
+ note: "The guest's money, held by you until checkout."
14
+ },
15
+ released: {
16
+ label: "Released",
17
+ note: "Returned to the guest."
18
+ },
19
+ forfeited: {
20
+ label: "Kept",
21
+ note: "Kept against damage."
22
+ }
23
+ };
24
+ const TONE = {
25
+ due: "bg-[var(--warning-bg)] text-[var(--warning)]",
26
+ held: "bg-[var(--accent-secondary)] text-[var(--text-primary)]",
27
+ released: "bg-[var(--success-bg)] text-[var(--success)]",
28
+ forfeited: "bg-[var(--error-bg)] text-[var(--error)]"
29
+ };
30
+ function SecurityDepositCard({
31
+ amount,
32
+ status,
33
+ formatCurrency,
34
+ onSettle
35
+ }) {
36
+ const copy = COPY[status];
37
+ const settled = status === "released" || status === "forfeited";
38
+ return /* @__PURE__ */ jsxs("div", { className: "p-4", children: [
39
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3", children: [
40
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
41
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
42
+ /* @__PURE__ */ jsx(ShieldCheck, { className: "text-[var(--text-tertiary)]" }),
43
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-[var(--text-secondary)]", children: "Security deposit" })
44
+ ] }),
45
+ /* @__PURE__ */ jsx("p", { className: "mt-2 text-lg font-semibold text-[var(--text-primary)]", children: formatCurrency(amount) }),
46
+ /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-[var(--text-tertiary)]", children: copy.note })
47
+ ] }),
48
+ /* @__PURE__ */ jsx(
49
+ "span",
50
+ {
51
+ className: `shrink-0 rounded-full px-2 py-0.5 text-xs font-medium ${TONE[status]}`,
52
+ children: copy.label
53
+ }
54
+ )
55
+ ] }),
56
+ status === "held" && onSettle && /* @__PURE__ */ jsx(Button, { variant: "secondary", className: "mt-3 w-full", onClick: onSettle, children: "Settle deposit" }),
57
+ settled && /* @__PURE__ */ jsx(EmptyNote, { className: "mt-3", children: "Nothing further to do." })
58
+ ] });
59
+ }
60
+ export {
61
+ SecurityDepositCard
62
+ };
63
+ //# sourceMappingURL=security-deposit-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/dashboard/%28bookings%29/bookings/%5BbookingId%5D/_components/security-deposit-card.tsx"],"sourcesContent":["'use client';\n\nimport { ShieldCheck } from 'lucide-react';\nimport type { DepositStatus } from '@withpotter/lib/api/types';\nimport { Button } from '@withpotter/ui-kit/button';\nimport { EmptyNote } from '@withpotter/ui-kit';\n\ninterface SecurityDepositCardProps {\n amount: number;\n status: DepositStatus;\n formatCurrency: (n: number) => string;\n /** Opens the settle dialog. Absent while the deposit is still uncollected,\n * since there is nothing yet to give back. */\n onSettle?: () => void;\n}\n\nconst COPY: Record<DepositStatus, { label: string; note: string }> = {\n due: {\n label: 'Due',\n note: 'Charged with the booking. It becomes held once the money lands.',\n },\n held: {\n label: 'Held',\n note: \"The guest's money, held by you until checkout.\",\n },\n released: {\n label: 'Released',\n note: 'Returned to the guest.',\n },\n forfeited: {\n label: 'Kept',\n note: 'Kept against damage.',\n },\n};\n\nconst TONE: Record<DepositStatus, string> = {\n due: 'bg-[var(--warning-bg)] text-[var(--warning)]',\n held: 'bg-[var(--accent-secondary)] text-[var(--text-primary)]',\n released: 'bg-[var(--success-bg)] text-[var(--success)]',\n forfeited: 'bg-[var(--error-bg)] text-[var(--error)]',\n};\n\n/**\n * The refundable deposit, kept visibly apart from what the booking earned.\n *\n * Rolled in with the total it would read as takings, and the one question that\n * matters at checkout — how much of this is still the guest's — would have no\n * answer on the screen. Applies to anything let out: a short-let, a vacation\n * rental, a hall.\n */\nexport function SecurityDepositCard({\n amount,\n status,\n formatCurrency,\n onSettle,\n}: SecurityDepositCardProps) {\n const copy = COPY[status];\n const settled = status === 'released' || status === 'forfeited';\n\n return (\n <div className=\"p-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <ShieldCheck className=\"text-[var(--text-tertiary)]\" />\n <span className=\"text-sm text-[var(--text-secondary)]\">\n Security deposit\n </span>\n </div>\n <p className=\"mt-2 text-lg font-semibold text-[var(--text-primary)]\">\n {formatCurrency(amount)}\n </p>\n <p className=\"mt-1 text-xs text-[var(--text-tertiary)]\">\n {copy.note}\n </p>\n </div>\n <span\n className={`shrink-0 rounded-full px-2 py-0.5 text-xs font-medium ${TONE[status]}`}\n >\n {copy.label}\n </span>\n </div>\n\n {status === 'held' && onSettle && (\n <Button variant=\"secondary\" className=\"mt-3 w-full\" onClick={onSettle}>\n Settle deposit\n </Button>\n )}\n\n {settled && (\n <EmptyNote className=\"mt-3\">Nothing further to do.</EmptyNote>\n )}\n </div>\n );\n}\n"],"mappings":";AA+DU,SACE,KADF;AA7DV,SAAS,mBAAmB;AAE5B,SAAS,cAAc;AACvB,SAAS,iBAAiB;AAW1B,MAAM,OAA+D;AAAA,EACnE,KAAK;AAAA,IACH,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,WAAW;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;AAEA,MAAM,OAAsC;AAAA,EAC1C,KAAK;AAAA,EACL,MAAM;AAAA,EACN,UAAU;AAAA,EACV,WAAW;AACb;AAUO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA6B;AAC3B,QAAM,OAAO,KAAK,MAAM;AACxB,QAAM,UAAU,WAAW,cAAc,WAAW;AAEpD,SACE,qBAAC,SAAI,WAAU,OACb;AAAA,yBAAC,SAAI,WAAU,0CACb;AAAA,2BAAC,SAAI,WAAU,WACb;AAAA,6BAAC,SAAI,WAAU,2BACb;AAAA,8BAAC,eAAY,WAAU,+BAA8B;AAAA,UACrD,oBAAC,UAAK,WAAU,wCAAuC,8BAEvD;AAAA,WACF;AAAA,QACA,oBAAC,OAAE,WAAU,yDACV,yBAAe,MAAM,GACxB;AAAA,QACA,oBAAC,OAAE,WAAU,4CACV,eAAK,MACR;AAAA,SACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,yDAAyD,KAAK,MAAM,CAAC;AAAA,UAE/E,eAAK;AAAA;AAAA,MACR;AAAA,OACF;AAAA,IAEC,WAAW,UAAU,YACpB,oBAAC,UAAO,SAAQ,aAAY,WAAU,eAAc,SAAS,UAAU,4BAEvE;AAAA,IAGD,WACC,oBAAC,aAAU,WAAU,QAAO,oCAAsB;AAAA,KAEtD;AAEJ;","names":[]}
@@ -0,0 +1,141 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { RefreshCw, ShieldCheck } from "lucide-react";
5
+ import {
6
+ Dialog,
7
+ DialogContent,
8
+ DialogHeader,
9
+ DialogTitle,
10
+ DialogDescription,
11
+ DialogFooter
12
+ } from "@withpotter/ui-kit/dialog";
13
+ import { Button } from "@withpotter/ui-kit/button";
14
+ import { Input, ErrorBanner } from "@withpotter/ui-kit";
15
+ function SettleDepositModal({
16
+ bookingNumber,
17
+ deposit,
18
+ formatCurrency,
19
+ settling,
20
+ error,
21
+ onSettle,
22
+ onClose
23
+ }) {
24
+ const [action, setAction] = useState("release");
25
+ const [amount, setAmount] = useState(String(deposit));
26
+ const [reason, setReason] = useState("");
27
+ const numericAmount = Number(amount);
28
+ const releasing = action === "release";
29
+ const kept = releasing ? Math.max(0, deposit - numericAmount) : deposit;
30
+ const canSubmit = !settling && (releasing ? numericAmount > 0 && numericAmount <= deposit : reason.trim().length > 0);
31
+ return /* @__PURE__ */ jsx(
32
+ Dialog,
33
+ {
34
+ open: true,
35
+ onOpenChange: (o) => {
36
+ if (!o) onClose();
37
+ },
38
+ children: /* @__PURE__ */ jsxs(DialogContent, { className: "max-w-md", children: [
39
+ /* @__PURE__ */ jsxs(DialogHeader, { children: [
40
+ /* @__PURE__ */ jsxs(DialogTitle, { className: "flex items-center gap-2", children: [
41
+ /* @__PURE__ */ jsx(ShieldCheck, { className: "size-5 text-[var(--text-tertiary)]" }),
42
+ "Settle deposit"
43
+ ] }),
44
+ /* @__PURE__ */ jsxs(DialogDescription, { children: [
45
+ formatCurrency(deposit),
46
+ " held on #",
47
+ bookingNumber,
48
+ "."
49
+ ] })
50
+ ] }),
51
+ /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
52
+ error && /* @__PURE__ */ jsx(ErrorBanner, { children: error }),
53
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-2", children: [
54
+ ["release", "Give it back"],
55
+ ["forfeit", "Keep it"]
56
+ ].map(([value, label]) => /* @__PURE__ */ jsx(
57
+ "button",
58
+ {
59
+ type: "button",
60
+ onClick: () => {
61
+ setAction(value);
62
+ if (value === "release") setAmount(String(deposit));
63
+ },
64
+ className: `rounded-lg border px-3 py-2 text-sm font-medium transition-colors ${action === value ? "border-brand-500/40 bg-[var(--accent-secondary)] text-[var(--text-primary)]" : "border-[var(--border-default)] bg-[var(--bg-base)] text-[var(--text-secondary)] hover:bg-[var(--interactive-hover)]"}`,
65
+ children: label
66
+ },
67
+ value
68
+ )) }),
69
+ releasing && /* @__PURE__ */ jsxs("div", { children: [
70
+ /* @__PURE__ */ jsx("label", { className: "mb-1 block text-xs font-medium text-[var(--text-tertiary)]", children: "Amount to return" }),
71
+ /* @__PURE__ */ jsx(
72
+ Input,
73
+ {
74
+ type: "number",
75
+ inputMode: "decimal",
76
+ min: 0,
77
+ max: deposit,
78
+ value: amount,
79
+ onChange: (e) => setAmount(e.target.value)
80
+ }
81
+ ),
82
+ numericAmount > deposit && /* @__PURE__ */ jsxs("p", { className: "mt-1 text-xs text-[var(--error)]", children: [
83
+ "Can\u2019t exceed the ",
84
+ formatCurrency(deposit),
85
+ " collected."
86
+ ] }),
87
+ kept > 0 && numericAmount <= deposit && /* @__PURE__ */ jsxs("p", { className: "mt-1 text-xs text-[var(--text-tertiary)]", children: [
88
+ "You keep ",
89
+ formatCurrency(kept),
90
+ "."
91
+ ] })
92
+ ] }),
93
+ /* @__PURE__ */ jsxs("div", { children: [
94
+ /* @__PURE__ */ jsx("label", { className: "mb-1 block text-xs font-medium text-[var(--text-tertiary)]", children: releasing && kept === 0 ? "Note (optional)" : "Reason" }),
95
+ /* @__PURE__ */ jsx(
96
+ Input,
97
+ {
98
+ value: reason,
99
+ onChange: (e) => setReason(e.target.value),
100
+ placeholder: "e.g. replaced the broken kettle"
101
+ }
102
+ ),
103
+ !releasing && reason.trim().length === 0 && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-[var(--text-tertiary)]", children: "Keeping a deposit needs a reason on the record." })
104
+ ] })
105
+ ] }),
106
+ /* @__PURE__ */ jsxs(DialogFooter, { children: [
107
+ /* @__PURE__ */ jsx(
108
+ "button",
109
+ {
110
+ type: "button",
111
+ onClick: onClose,
112
+ className: "px-4 py-2 text-sm font-medium text-[var(--text-secondary)] hover:text-[var(--text-primary)]",
113
+ children: "Cancel"
114
+ }
115
+ ),
116
+ /* @__PURE__ */ jsx(
117
+ Button,
118
+ {
119
+ variant: "ghost",
120
+ className: "text-[var(--bg-base)] hover:opacity-90",
121
+ onClick: () => onSettle({
122
+ action,
123
+ amount: releasing ? numericAmount : void 0,
124
+ reason: reason.trim() || void 0
125
+ }),
126
+ disabled: !canSubmit,
127
+ children: settling ? /* @__PURE__ */ jsxs(Fragment, { children: [
128
+ /* @__PURE__ */ jsx(RefreshCw, { className: "size-4 animate-spin" }),
129
+ "Settling..."
130
+ ] }) : releasing ? "Return deposit" : "Keep deposit"
131
+ }
132
+ )
133
+ ] })
134
+ ] })
135
+ }
136
+ );
137
+ }
138
+ export {
139
+ SettleDepositModal
140
+ };
141
+ //# sourceMappingURL=settle-deposit-modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/dashboard/%28bookings%29/bookings/%5BbookingId%5D/_components/settle-deposit-modal.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { RefreshCw, ShieldCheck } from 'lucide-react';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n} from '@withpotter/ui-kit/dialog';\nimport { Button } from '@withpotter/ui-kit/button';\nimport { Input, ErrorBanner } from '@withpotter/ui-kit';\n\ninterface SettleDepositModalProps {\n bookingNumber: string;\n /** The deposit that was collected. The most anyone can give back or keep. */\n deposit: number;\n formatCurrency: (n: number) => string;\n settling: boolean;\n error?: string | null;\n onSettle: (data: {\n action: 'release' | 'forfeit';\n amount?: number;\n reason?: string;\n }) => void;\n onClose: () => void;\n}\n\n/**\n * Checkout, as one decision rather than two.\n *\n * Giving the whole deposit back and keeping all of it are the ends of the same\n * dial, and the useful case sits between them: the guest broke one thing, so\n * some is kept and the rest goes home. Releasing part of the deposit does both\n * in one action, which is how an owner actually thinks about it.\n */\nexport function SettleDepositModal({\n bookingNumber,\n deposit,\n formatCurrency,\n settling,\n error,\n onSettle,\n onClose,\n}: SettleDepositModalProps) {\n const [action, setAction] = useState<'release' | 'forfeit'>('release');\n const [amount, setAmount] = useState(String(deposit));\n const [reason, setReason] = useState('');\n\n const numericAmount = Number(amount);\n const releasing = action === 'release';\n const kept = releasing ? Math.max(0, deposit - numericAmount) : deposit;\n\n const canSubmit =\n !settling &&\n (releasing\n ? numericAmount > 0 && numericAmount <= deposit\n : reason.trim().length > 0);\n\n return (\n <Dialog\n open\n onOpenChange={(o) => {\n if (!o) onClose();\n }}\n >\n <DialogContent className=\"max-w-md\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <ShieldCheck className=\"size-5 text-[var(--text-tertiary)]\" />\n Settle deposit\n </DialogTitle>\n <DialogDescription>\n {formatCurrency(deposit)} held on #{bookingNumber}.\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n {error && <ErrorBanner>{error}</ErrorBanner>}\n\n <div className=\"grid grid-cols-2 gap-2\">\n {(\n [\n ['release', 'Give it back'],\n ['forfeit', 'Keep it'],\n ] as const\n ).map(([value, label]) => (\n <button\n key={value}\n type=\"button\"\n onClick={() => {\n setAction(value);\n if (value === 'release') setAmount(String(deposit));\n }}\n className={`rounded-lg border px-3 py-2 text-sm font-medium transition-colors ${\n action === value\n ? 'border-brand-500/40 bg-[var(--accent-secondary)] text-[var(--text-primary)]'\n : 'border-[var(--border-default)] bg-[var(--bg-base)] text-[var(--text-secondary)] hover:bg-[var(--interactive-hover)]'\n }`}\n >\n {label}\n </button>\n ))}\n </div>\n\n {releasing && (\n <div>\n <label className=\"mb-1 block text-xs font-medium text-[var(--text-tertiary)]\">\n Amount to return\n </label>\n <Input\n type=\"number\"\n inputMode=\"decimal\"\n min={0}\n max={deposit}\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n />\n {numericAmount > deposit && (\n <p className=\"mt-1 text-xs text-[var(--error)]\">\n Can’t exceed the {formatCurrency(deposit)} collected.\n </p>\n )}\n {kept > 0 && numericAmount <= deposit && (\n <p className=\"mt-1 text-xs text-[var(--text-tertiary)]\">\n You keep {formatCurrency(kept)}.\n </p>\n )}\n </div>\n )}\n\n <div>\n <label className=\"mb-1 block text-xs font-medium text-[var(--text-tertiary)]\">\n {releasing && kept === 0 ? 'Note (optional)' : 'Reason'}\n </label>\n <Input\n value={reason}\n onChange={(e) => setReason(e.target.value)}\n placeholder=\"e.g. replaced the broken kettle\"\n />\n {!releasing && reason.trim().length === 0 && (\n <p className=\"mt-1 text-xs text-[var(--text-tertiary)]\">\n Keeping a deposit needs a reason on the record.\n </p>\n )}\n </div>\n </div>\n\n <DialogFooter>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"px-4 py-2 text-sm font-medium text-[var(--text-secondary)] hover:text-[var(--text-primary)]\"\n >\n Cancel\n </button>\n <Button\n variant=\"ghost\"\n className=\"text-[var(--bg-base)] hover:opacity-90\"\n onClick={() =>\n onSettle({\n action,\n amount: releasing ? numericAmount : undefined,\n reason: reason.trim() || undefined,\n })\n }\n disabled={!canSubmit}\n >\n {settling ? (\n <>\n <RefreshCw className=\"size-4 animate-spin\" />\n Settling...\n </>\n ) : releasing ? (\n 'Return deposit'\n ) : (\n 'Keep deposit'\n )}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,49 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import Link from "next/link";
3
+ import { bookingsApi } from "@withpotter/lib/api/bookings";
4
+ import { buildCustomerTicketPath } from "@withpotter/lib/ticket-access";
5
+ function TicketRowActions({
6
+ tenantSlug,
7
+ bookingId,
8
+ ticketId,
9
+ ticketCode,
10
+ className = ""
11
+ }) {
12
+ if (!tenantSlug || !ticketId && !ticketCode) return null;
13
+ return /* @__PURE__ */ jsxs(
14
+ "div",
15
+ {
16
+ className: `flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-[var(--text-secondary)] ${className}`.trim(),
17
+ children: [
18
+ ticketCode && /* @__PURE__ */ jsx(
19
+ Link,
20
+ {
21
+ href: buildCustomerTicketPath(tenantSlug, ticketCode),
22
+ target: "_blank",
23
+ rel: "noreferrer",
24
+ className: "font-medium transition-colors hover:text-[var(--text-primary)]",
25
+ children: "Open ticket"
26
+ }
27
+ ),
28
+ ticketId && /* @__PURE__ */ jsx(
29
+ "a",
30
+ {
31
+ href: bookingsApi.getSingleTicketPdfUrl(
32
+ tenantSlug,
33
+ bookingId,
34
+ ticketId
35
+ ),
36
+ target: "_blank",
37
+ rel: "noreferrer",
38
+ className: "font-medium transition-colors hover:text-[var(--text-primary)]",
39
+ children: "PDF"
40
+ }
41
+ )
42
+ ]
43
+ }
44
+ );
45
+ }
46
+ export {
47
+ TicketRowActions
48
+ };
49
+ //# sourceMappingURL=ticket-row-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/dashboard/%28bookings%29/bookings/%5BbookingId%5D/_components/ticket-row-actions.tsx"],"sourcesContent":["import Link from 'next/link';\nimport { bookingsApi } from '@withpotter/lib/api/bookings';\nimport { buildCustomerTicketPath } from '@withpotter/lib/ticket-access';\n\nexport function TicketRowActions({\n tenantSlug,\n bookingId,\n ticketId,\n ticketCode,\n className = '',\n}: {\n tenantSlug?: string;\n bookingId: string;\n ticketId?: string;\n ticketCode?: string | null;\n className?: string;\n}) {\n if (!tenantSlug || (!ticketId && !ticketCode)) return null;\n\n return (\n <div\n className={`flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-[var(--text-secondary)] ${className}`.trim()}\n >\n {ticketCode && (\n <Link\n href={buildCustomerTicketPath(tenantSlug, ticketCode)}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"font-medium transition-colors hover:text-[var(--text-primary)]\"\n >\n Open ticket\n </Link>\n )}\n {ticketId && (\n <a\n href={bookingsApi.getSingleTicketPdfUrl(\n tenantSlug,\n bookingId,\n ticketId,\n )}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"font-medium transition-colors hover:text-[var(--text-primary)]\"\n >\n PDF\n </a>\n )}\n </div>\n );\n}\n"],"mappings":"AAoBI,SAII,KAJJ;AApBJ,OAAO,UAAU;AACjB,SAAS,mBAAmB;AAC5B,SAAS,+BAA+B;AAEjC,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AACd,GAMG;AACD,MAAI,CAAC,cAAe,CAAC,YAAY,CAAC,WAAa,QAAO;AAEtD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,oFAAoF,SAAS,GAAG,KAAK;AAAA,MAE/G;AAAA,sBACC;AAAA,UAAC;AAAA;AAAA,YACC,MAAM,wBAAwB,YAAY,UAAU;AAAA,YACpD,QAAO;AAAA,YACP,KAAI;AAAA,YACJ,WAAU;AAAA,YACX;AAAA;AAAA,QAED;AAAA,QAED,YACC;AAAA,UAAC;AAAA;AAAA,YACC,MAAM,YAAY;AAAA,cAChB;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,QAAO;AAAA,YACP,KAAI;AAAA,YACJ,WAAU;AAAA,YACX;AAAA;AAAA,QAED;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
@@ -0,0 +1,42 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { motion, AnimatePresence, useReducedMotion } from "motion/react";
4
+ import { Users } from "lucide-react";
5
+ import { useApiQuery } from "@withpotter/hooks/use-api-query";
6
+ import { waitlistApi } from "@withpotter/lib/api/waitlist";
7
+ import { springs } from "@withpotter/lib/motion";
8
+ function WaitingQueueNotice({
9
+ date,
10
+ resourceId
11
+ }) {
12
+ const reduce = useReducedMotion();
13
+ const { data } = useApiQuery(
14
+ ["waitlist-queue", date, resourceId],
15
+ (slug) => waitlistApi.queue(slug, date, resourceId),
16
+ { enabled: Boolean(date) }
17
+ );
18
+ const queue = Array.isArray(data) ? data : data?.data ?? [];
19
+ const waiting = queue.filter((e) => e.status === "waiting");
20
+ const next = waiting[0];
21
+ return /* @__PURE__ */ jsx(AnimatePresence, { children: waiting.length > 0 && /* @__PURE__ */ jsxs(
22
+ motion.div,
23
+ {
24
+ initial: reduce ? false : { opacity: 0, y: -6 },
25
+ animate: { opacity: 1, y: 0 },
26
+ exit: reduce ? void 0 : { opacity: 0, y: -6 },
27
+ transition: springs.gentle,
28
+ className: "flex items-start gap-3 rounded-lg border border-[var(--info)]/20 bg-[var(--info-bg)] p-3",
29
+ children: [
30
+ /* @__PURE__ */ jsx(Users, { className: "mt-0.5 h-[15px] w-[15px] flex-shrink-0 text-[var(--info)]" }),
31
+ /* @__PURE__ */ jsxs("div", { className: "text-sm leading-relaxed text-[var(--info)]", children: [
32
+ /* @__PURE__ */ jsx("p", { className: "font-medium", children: waiting.length === 1 ? "1 person is waiting for this day" : `${waiting.length} people are waiting for this day` }),
33
+ /* @__PURE__ */ jsx("p", { className: "mt-0.5 opacity-90", children: next?.customerName || next?.customerEmail ? `${next.customerName || next.customerEmail} is next in line and will be offered this slot automatically, with two hours to respond.` : "The next person in line will be offered this slot automatically, with two hours to respond." })
34
+ ] })
35
+ ]
36
+ }
37
+ ) });
38
+ }
39
+ export {
40
+ WaitingQueueNotice
41
+ };
42
+ //# sourceMappingURL=waiting-queue-notice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/dashboard/%28bookings%29/bookings/%5BbookingId%5D/_components/waiting-queue-notice.tsx"],"sourcesContent":["'use client';\n\nimport { motion, AnimatePresence, useReducedMotion } from 'motion/react';\nimport { Users } from 'lucide-react';\nimport { useApiQuery } from '@withpotter/hooks/use-api-query';\nimport type { WaitlistItem } from '@withpotter/lib/api/types';\nimport { waitlistApi } from '@withpotter/lib/api/waitlist';\nimport { springs } from '@withpotter/lib/motion';\n\n/**\n * \"Cancelling this frees the slot for Chidi, who is next in line.\"\n *\n * potter-api already closes this loop on its own: `booking.cancelled` fires,\n * waitlist-cancellation.listener finds the next person waiting for that date\n * and resource, and offers them the slot with a two-hour window. All of that\n * was invisible. Staff pressed cancel and saw nothing, so the one mechanism\n * that turns a cancellation back into revenue may as well not have existed.\n *\n * Shown before the cancel is confirmed, because it changes how the decision\n * feels: giving a slot away is easier when you can see who catches it.\n */\nexport function WaitingQueueNotice({\n date,\n resourceId,\n}: {\n /** yyyy-mm-dd of the booking being cancelled. */\n date?: string;\n resourceId?: string;\n}) {\n const reduce = useReducedMotion();\n\n const { data } = useApiQuery(\n ['waitlist-queue', date, resourceId],\n (slug) => waitlistApi.queue(slug, date!, resourceId),\n { enabled: Boolean(date) },\n );\n\n // The controller returns either a bare array or a { data } envelope\n // depending on the usecase; accept both rather than guess.\n const queue: WaitlistItem[] = Array.isArray(data) ? data : (data?.data ?? []);\n const waiting = queue.filter((e) => e.status === 'waiting');\n const next = waiting[0];\n\n return (\n <AnimatePresence>\n {waiting.length > 0 && (\n <motion.div\n initial={reduce ? false : { opacity: 0, y: -6 }}\n animate={{ opacity: 1, y: 0 }}\n exit={reduce ? undefined : { opacity: 0, y: -6 }}\n transition={springs.gentle}\n className=\"flex items-start gap-3 rounded-lg border border-[var(--info)]/20 bg-[var(--info-bg)] p-3\"\n >\n <Users className=\"mt-0.5 h-[15px] w-[15px] flex-shrink-0 text-[var(--info)]\" />\n <div className=\"text-sm leading-relaxed text-[var(--info)]\">\n <p className=\"font-medium\">\n {waiting.length === 1\n ? '1 person is waiting for this day'\n : `${waiting.length} people are waiting for this day`}\n </p>\n <p className=\"mt-0.5 opacity-90\">\n {next?.customerName || next?.customerEmail\n ? `${next.customerName || next.customerEmail} is next in line and will be offered this slot automatically, with two hours to respond.`\n : 'The next person in line will be offered this slot automatically, with two hours to respond.'}\n </p>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n );\n}\n"],"mappings":";AAqDU,cACA,YADA;AAnDV,SAAS,QAAQ,iBAAiB,wBAAwB;AAC1D,SAAS,aAAa;AACtB,SAAS,mBAAmB;AAE5B,SAAS,mBAAmB;AAC5B,SAAS,eAAe;AAcjB,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AACF,GAIG;AACD,QAAM,SAAS,iBAAiB;AAEhC,QAAM,EAAE,KAAK,IAAI;AAAA,IACf,CAAC,kBAAkB,MAAM,UAAU;AAAA,IACnC,CAAC,SAAS,YAAY,MAAM,MAAM,MAAO,UAAU;AAAA,IACnD,EAAE,SAAS,QAAQ,IAAI,EAAE;AAAA,EAC3B;AAIA,QAAM,QAAwB,MAAM,QAAQ,IAAI,IAAI,OAAQ,MAAM,QAAQ,CAAC;AAC3E,QAAM,UAAU,MAAM,OAAO,CAAC,MAAM,EAAE,WAAW,SAAS;AAC1D,QAAM,OAAO,QAAQ,CAAC;AAEtB,SACE,oBAAC,mBACE,kBAAQ,SAAS,KAChB;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACC,SAAS,SAAS,QAAQ,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,MAC9C,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,MAC5B,MAAM,SAAS,SAAY,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,MAC/C,YAAY,QAAQ;AAAA,MACpB,WAAU;AAAA,MAEV;AAAA,4BAAC,SAAM,WAAU,6DAA4D;AAAA,QAC7E,qBAAC,SAAI,WAAU,8CACb;AAAA,8BAAC,OAAE,WAAU,eACV,kBAAQ,WAAW,IAChB,qCACA,GAAG,QAAQ,MAAM,oCACvB;AAAA,UACA,oBAAC,OAAE,WAAU,qBACV,gBAAM,gBAAgB,MAAM,gBACzB,GAAG,KAAK,gBAAgB,KAAK,aAAa,6FAC1C,+FACN;AAAA,WACF;AAAA;AAAA;AAAA,EACF,GAEJ;AAEJ;","names":[]}
@@ -0,0 +1 @@
1
+ export * from './_components/index.js';
@@ -0,0 +1,19 @@
1
+ import {
2
+ useBookingDetailData,
3
+ BOOKING_STATUS_CONFIG,
4
+ useBookingStatusConfig,
5
+ STATUS_TRANSITIONS,
6
+ formatFullDate,
7
+ formatTime,
8
+ formatDateTime
9
+ } from "./use-booking-detail-data";
10
+ export {
11
+ BOOKING_STATUS_CONFIG,
12
+ STATUS_TRANSITIONS,
13
+ formatDateTime,
14
+ formatFullDate,
15
+ formatTime,
16
+ useBookingDetailData,
17
+ useBookingStatusConfig
18
+ };
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/dashboard/%28bookings%29/bookings/%5BbookingId%5D/_hooks/index.ts"],"sourcesContent":["export {\n useBookingDetailData,\n BOOKING_STATUS_CONFIG,\n useBookingStatusConfig,\n STATUS_TRANSITIONS,\n formatFullDate,\n formatTime,\n formatDateTime,\n type BookingStatus,\n} from './use-booking-detail-data';\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;","names":[]}