@voyant-travel/operations-react 0.0.0

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 (544) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +11 -0
  3. package/dist/admin.d.ts +59 -0
  4. package/dist/admin.d.ts.map +1 -0
  5. package/dist/admin.js +165 -0
  6. package/dist/availability/admin/availability-index-host.d.ts +12 -0
  7. package/dist/availability/admin/availability-index-host.d.ts.map +1 -0
  8. package/dist/availability/admin/availability-index-host.js +125 -0
  9. package/dist/availability/admin/availability-page-data.d.ts +9 -0
  10. package/dist/availability/admin/availability-page-data.d.ts.map +1 -0
  11. package/dist/availability/admin/availability-page-data.js +25 -0
  12. package/dist/availability/admin/index.d.ts +70 -0
  13. package/dist/availability/admin/index.d.ts.map +1 -0
  14. package/dist/availability/admin/index.js +140 -0
  15. package/dist/availability/admin/option-resource-template-seat-map.d.ts +10 -0
  16. package/dist/availability/admin/option-resource-template-seat-map.d.ts.map +1 -0
  17. package/dist/availability/admin/option-resource-template-seat-map.js +36 -0
  18. package/dist/availability/admin/option-resource-templates-panel.d.ts +22 -0
  19. package/dist/availability/admin/option-resource-templates-panel.d.ts.map +1 -0
  20. package/dist/availability/admin/option-resource-templates-panel.js +221 -0
  21. package/dist/availability/admin/pages/availability-rule-detail-page.d.ts +9 -0
  22. package/dist/availability/admin/pages/availability-rule-detail-page.d.ts.map +1 -0
  23. package/dist/availability/admin/pages/availability-rule-detail-page.js +11 -0
  24. package/dist/availability/admin/pages/availability-slot-detail-page.d.ts +9 -0
  25. package/dist/availability/admin/pages/availability-slot-detail-page.d.ts.map +1 -0
  26. package/dist/availability/admin/pages/availability-slot-detail-page.js +11 -0
  27. package/dist/availability/admin/pages/availability-start-time-detail-page.d.ts +9 -0
  28. package/dist/availability/admin/pages/availability-start-time-detail-page.d.ts.map +1 -0
  29. package/dist/availability/admin/pages/availability-start-time-detail-page.js +11 -0
  30. package/dist/availability/admin/rule-detail-host.d.ts +14 -0
  31. package/dist/availability/admin/rule-detail-host.d.ts.map +1 -0
  32. package/dist/availability/admin/rule-detail-host.js +27 -0
  33. package/dist/availability/admin/slot-detail-host.d.ts +29 -0
  34. package/dist/availability/admin/slot-detail-host.d.ts.map +1 -0
  35. package/dist/availability/admin/slot-detail-host.js +110 -0
  36. package/dist/availability/admin/start-time-detail-host.d.ts +15 -0
  37. package/dist/availability/admin/start-time-detail-host.d.ts.map +1 -0
  38. package/dist/availability/admin/start-time-detail-host.js +37 -0
  39. package/dist/availability/allocation/components/seat-map-builder.d.ts +25 -0
  40. package/dist/availability/allocation/components/seat-map-builder.d.ts.map +1 -0
  41. package/dist/availability/allocation/components/seat-map-builder.js +133 -0
  42. package/dist/availability/allocation/components/slot-allocation-add-resource-dialog.d.ts +29 -0
  43. package/dist/availability/allocation/components/slot-allocation-add-resource-dialog.d.ts.map +1 -0
  44. package/dist/availability/allocation/components/slot-allocation-add-resource-dialog.js +19 -0
  45. package/dist/availability/allocation/components/slot-allocation-model.d.ts +111 -0
  46. package/dist/availability/allocation/components/slot-allocation-model.d.ts.map +1 -0
  47. package/dist/availability/allocation/components/slot-allocation-model.js +237 -0
  48. package/dist/availability/allocation/components/slot-allocation-page-panels.d.ts +17 -0
  49. package/dist/availability/allocation/components/slot-allocation-page-panels.d.ts.map +1 -0
  50. package/dist/availability/allocation/components/slot-allocation-page-panels.js +27 -0
  51. package/dist/availability/allocation/components/slot-allocation-page.d.ts +51 -0
  52. package/dist/availability/allocation/components/slot-allocation-page.d.ts.map +1 -0
  53. package/dist/availability/allocation/components/slot-allocation-page.js +217 -0
  54. package/dist/availability/allocation/components/slot-allocation-resource-view-rows.d.ts +28 -0
  55. package/dist/availability/allocation/components/slot-allocation-resource-view-rows.d.ts.map +1 -0
  56. package/dist/availability/allocation/components/slot-allocation-resource-view-rows.js +90 -0
  57. package/dist/availability/allocation/components/slot-allocation-resource-view.d.ts +34 -0
  58. package/dist/availability/allocation/components/slot-allocation-resource-view.d.ts.map +1 -0
  59. package/dist/availability/allocation/components/slot-allocation-resource-view.js +35 -0
  60. package/dist/availability/allocation/components/slot-allocation-seat-view.d.ts +17 -0
  61. package/dist/availability/allocation/components/slot-allocation-seat-view.d.ts.map +1 -0
  62. package/dist/availability/allocation/components/slot-allocation-seat-view.js +97 -0
  63. package/dist/availability/allocation/components/slot-allocation-shared.d.ts +54 -0
  64. package/dist/availability/allocation/components/slot-allocation-shared.d.ts.map +1 -0
  65. package/dist/availability/allocation/components/slot-allocation-shared.js +106 -0
  66. package/dist/availability/allocation/i18n/index.d.ts +2 -0
  67. package/dist/availability/allocation/i18n/index.d.ts.map +1 -0
  68. package/dist/availability/allocation/i18n/index.js +1 -0
  69. package/dist/availability/allocation/i18n/provider.d.ts +692 -0
  70. package/dist/availability/allocation/i18n/provider.d.ts.map +1 -0
  71. package/dist/availability/allocation/i18n/provider.js +320 -0
  72. package/dist/availability/allocation/index.d.ts +4 -0
  73. package/dist/availability/allocation/index.d.ts.map +1 -0
  74. package/dist/availability/allocation/index.js +3 -0
  75. package/dist/availability/client.d.ts +14 -0
  76. package/dist/availability/client.d.ts.map +1 -0
  77. package/dist/availability/client.js +59 -0
  78. package/dist/availability/components/availability-columns.d.ts +42 -0
  79. package/dist/availability/components/availability-columns.d.ts.map +1 -0
  80. package/dist/availability/components/availability-columns.js +182 -0
  81. package/dist/availability/components/availability-dialogs/closeout-dialog.d.ts +13 -0
  82. package/dist/availability/components/availability-dialogs/closeout-dialog.d.ts.map +1 -0
  83. package/dist/availability/components/availability-dialogs/closeout-dialog.js +60 -0
  84. package/dist/availability/components/availability-dialogs/pickup-point-dialog.d.ts +12 -0
  85. package/dist/availability/components/availability-dialogs/pickup-point-dialog.d.ts.map +1 -0
  86. package/dist/availability/components/availability-dialogs/pickup-point-dialog.js +58 -0
  87. package/dist/availability/components/availability-dialogs/rule-dialog.d.ts +12 -0
  88. package/dist/availability/components/availability-dialogs/rule-dialog.d.ts.map +1 -0
  89. package/dist/availability/components/availability-dialogs/rule-dialog.js +76 -0
  90. package/dist/availability/components/availability-dialogs/shared.d.ts +213 -0
  91. package/dist/availability/components/availability-dialogs/shared.d.ts.map +1 -0
  92. package/dist/availability/components/availability-dialogs/shared.js +16 -0
  93. package/dist/availability/components/availability-dialogs/slot-dialog.d.ts +14 -0
  94. package/dist/availability/components/availability-dialogs/slot-dialog.d.ts.map +1 -0
  95. package/dist/availability/components/availability-dialogs/slot-dialog.js +138 -0
  96. package/dist/availability/components/availability-dialogs/start-time-dialog.d.ts +12 -0
  97. package/dist/availability/components/availability-dialogs/start-time-dialog.d.ts.map +1 -0
  98. package/dist/availability/components/availability-dialogs/start-time-dialog.js +62 -0
  99. package/dist/availability/components/availability-dialogs.d.ts +7 -0
  100. package/dist/availability/components/availability-dialogs.d.ts.map +1 -0
  101. package/dist/availability/components/availability-dialogs.js +6 -0
  102. package/dist/availability/components/availability-overview.d.ts +54 -0
  103. package/dist/availability/components/availability-overview.d.ts.map +1 -0
  104. package/dist/availability/components/availability-overview.js +50 -0
  105. package/dist/availability/components/availability-page.d.ts +32 -0
  106. package/dist/availability/components/availability-page.d.ts.map +1 -0
  107. package/dist/availability/components/availability-page.js +128 -0
  108. package/dist/availability/components/availability-rule-detail-page.d.ts +251 -0
  109. package/dist/availability/components/availability-rule-detail-page.d.ts.map +1 -0
  110. package/dist/availability/components/availability-rule-detail-page.js +74 -0
  111. package/dist/availability/components/availability-section-header.d.ts +8 -0
  112. package/dist/availability/components/availability-section-header.d.ts.map +1 -0
  113. package/dist/availability/components/availability-section-header.js +7 -0
  114. package/dist/availability/components/availability-skeletons.d.ts +6 -0
  115. package/dist/availability/components/availability-skeletons.d.ts.map +1 -0
  116. package/dist/availability/components/availability-skeletons.js +34 -0
  117. package/dist/availability/components/availability-slot-detail-activity.d.ts +30 -0
  118. package/dist/availability/components/availability-slot-detail-activity.d.ts.map +1 -0
  119. package/dist/availability/components/availability-slot-detail-activity.js +82 -0
  120. package/dist/availability/components/availability-slot-detail-financials.d.ts +27 -0
  121. package/dist/availability/components/availability-slot-detail-financials.d.ts.map +1 -0
  122. package/dist/availability/components/availability-slot-detail-financials.js +92 -0
  123. package/dist/availability/components/availability-slot-detail-meta.d.ts +38 -0
  124. package/dist/availability/components/availability-slot-detail-meta.d.ts.map +1 -0
  125. package/dist/availability/components/availability-slot-detail-meta.js +68 -0
  126. package/dist/availability/components/availability-slot-detail-page.d.ts +963 -0
  127. package/dist/availability/components/availability-slot-detail-page.d.ts.map +1 -0
  128. package/dist/availability/components/availability-slot-detail-page.js +159 -0
  129. package/dist/availability/components/availability-start-time-detail-page.d.ts +246 -0
  130. package/dist/availability/components/availability-start-time-detail-page.d.ts.map +1 -0
  131. package/dist/availability/components/availability-start-time-detail-page.js +83 -0
  132. package/dist/availability/components/availability-tabs/other-tabs.d.ts +58 -0
  133. package/dist/availability/components/availability-tabs/other-tabs.d.ts.map +1 -0
  134. package/dist/availability/components/availability-tabs/other-tabs.js +127 -0
  135. package/dist/availability/components/availability-tabs/shared.d.ts +80 -0
  136. package/dist/availability/components/availability-tabs/shared.d.ts.map +1 -0
  137. package/dist/availability/components/availability-tabs/shared.js +6 -0
  138. package/dist/availability/components/availability-tabs/slots-tab.d.ts +23 -0
  139. package/dist/availability/components/availability-tabs/slots-tab.d.ts.map +1 -0
  140. package/dist/availability/components/availability-tabs/slots-tab.js +69 -0
  141. package/dist/availability/components/availability-tabs.d.ts +4 -0
  142. package/dist/availability/components/availability-tabs.d.ts.map +1 -0
  143. package/dist/availability/components/availability-tabs.js +3 -0
  144. package/dist/availability/components/slot-status-tone.d.ts +15 -0
  145. package/dist/availability/components/slot-status-tone.d.ts.map +1 -0
  146. package/dist/availability/components/slot-status-tone.js +18 -0
  147. package/dist/availability/constants.d.ts +26 -0
  148. package/dist/availability/constants.d.ts.map +1 -0
  149. package/dist/availability/constants.js +23 -0
  150. package/dist/availability/form-resolver.d.ts +4 -0
  151. package/dist/availability/form-resolver.d.ts.map +1 -0
  152. package/dist/availability/form-resolver.js +40 -0
  153. package/dist/availability/hooks/index.d.ts +25 -0
  154. package/dist/availability/hooks/index.d.ts.map +1 -0
  155. package/dist/availability/hooks/index.js +15 -0
  156. package/dist/availability/hooks/use-availability-batch-mutations.d.ts +193 -0
  157. package/dist/availability/hooks/use-availability-batch-mutations.d.ts.map +1 -0
  158. package/dist/availability/hooks/use-availability-batch-mutations.js +53 -0
  159. package/dist/availability/hooks/use-availability-closeout-mutation.d.ts +34 -0
  160. package/dist/availability/hooks/use-availability-closeout-mutation.d.ts.map +1 -0
  161. package/dist/availability/hooks/use-availability-closeout-mutation.js +38 -0
  162. package/dist/availability/hooks/use-availability-overview.d.ts +46 -0
  163. package/dist/availability/hooks/use-availability-overview.d.ts.map +1 -0
  164. package/dist/availability/hooks/use-availability-overview.js +9 -0
  165. package/dist/availability/hooks/use-availability-pickup-point-mutation.d.ts +35 -0
  166. package/dist/availability/hooks/use-availability-pickup-point-mutation.d.ts.map +1 -0
  167. package/dist/availability/hooks/use-availability-pickup-point-mutation.js +38 -0
  168. package/dist/availability/hooks/use-availability-rule-mutation.d.ts +52 -0
  169. package/dist/availability/hooks/use-availability-rule-mutation.d.ts.map +1 -0
  170. package/dist/availability/hooks/use-availability-rule-mutation.js +41 -0
  171. package/dist/availability/hooks/use-availability-slot-mutation.d.ts +77 -0
  172. package/dist/availability/hooks/use-availability-slot-mutation.d.ts.map +1 -0
  173. package/dist/availability/hooks/use-availability-slot-mutation.js +41 -0
  174. package/dist/availability/hooks/use-availability-start-time-mutation.d.ts +43 -0
  175. package/dist/availability/hooks/use-availability-start-time-mutation.d.ts.map +1 -0
  176. package/dist/availability/hooks/use-availability-start-time-mutation.js +41 -0
  177. package/dist/availability/hooks/use-closeouts.d.ts +19 -0
  178. package/dist/availability/hooks/use-closeouts.d.ts.map +1 -0
  179. package/dist/availability/hooks/use-closeouts.js +9 -0
  180. package/dist/availability/hooks/use-pickup-points.d.ts +19 -0
  181. package/dist/availability/hooks/use-pickup-points.d.ts.map +1 -0
  182. package/dist/availability/hooks/use-pickup-points.js +9 -0
  183. package/dist/availability/hooks/use-products.d.ts +20 -0
  184. package/dist/availability/hooks/use-products.d.ts.map +1 -0
  185. package/dist/availability/hooks/use-products.js +9 -0
  186. package/dist/availability/hooks/use-rules.d.ts +25 -0
  187. package/dist/availability/hooks/use-rules.d.ts.map +1 -0
  188. package/dist/availability/hooks/use-rules.js +9 -0
  189. package/dist/availability/hooks/use-slot-allocation.d.ts +306 -0
  190. package/dist/availability/hooks/use-slot-allocation.d.ts.map +1 -0
  191. package/dist/availability/hooks/use-slot-allocation.js +211 -0
  192. package/dist/availability/hooks/use-slot-unit-availability.d.ts +25 -0
  193. package/dist/availability/hooks/use-slot-unit-availability.d.ts.map +1 -0
  194. package/dist/availability/hooks/use-slot-unit-availability.js +21 -0
  195. package/dist/availability/hooks/use-slots.d.ts +32 -0
  196. package/dist/availability/hooks/use-slots.d.ts.map +1 -0
  197. package/dist/availability/hooks/use-slots.js +9 -0
  198. package/dist/availability/hooks/use-start-times.d.ts +22 -0
  199. package/dist/availability/hooks/use-start-times.d.ts.map +1 -0
  200. package/dist/availability/hooks/use-start-times.js +9 -0
  201. package/dist/availability/i18n/index.d.ts +2 -0
  202. package/dist/availability/i18n/index.d.ts.map +1 -0
  203. package/dist/availability/i18n/index.js +1 -0
  204. package/dist/availability/i18n/provider.d.ts +2003 -0
  205. package/dist/availability/i18n/provider.d.ts.map +1 -0
  206. package/dist/availability/i18n/provider.js +102 -0
  207. package/dist/availability/index.d.ts +10 -0
  208. package/dist/availability/index.d.ts.map +1 -0
  209. package/dist/availability/index.js +9 -0
  210. package/dist/availability/provider.d.ts +2 -0
  211. package/dist/availability/provider.d.ts.map +1 -0
  212. package/dist/availability/provider.js +1 -0
  213. package/dist/availability/query-keys.d.ts +69 -0
  214. package/dist/availability/query-keys.d.ts.map +1 -0
  215. package/dist/availability/query-keys.js +29 -0
  216. package/dist/availability/query-options.d.ts +1549 -0
  217. package/dist/availability/query-options.d.ts.map +1 -0
  218. package/dist/availability/query-options.js +258 -0
  219. package/dist/availability/schemas.d.ts +974 -0
  220. package/dist/availability/schemas.d.ts.map +1 -0
  221. package/dist/availability/schemas.js +329 -0
  222. package/dist/availability/ui.d.ts +14 -0
  223. package/dist/availability/ui.d.ts.map +1 -0
  224. package/dist/availability/ui.js +13 -0
  225. package/dist/availability/utils.d.ts +10 -0
  226. package/dist/availability/utils.d.ts.map +1 -0
  227. package/dist/availability/utils.js +32 -0
  228. package/dist/ground/client.d.ts +14 -0
  229. package/dist/ground/client.d.ts.map +1 -0
  230. package/dist/ground/client.js +58 -0
  231. package/dist/ground/hooks/index.d.ts +7 -0
  232. package/dist/ground/hooks/index.d.ts.map +1 -0
  233. package/dist/ground/hooks/index.js +6 -0
  234. package/dist/ground/hooks/use-ground-driver-mutation.d.ts +48 -0
  235. package/dist/ground/hooks/use-ground-driver-mutation.d.ts.map +1 -0
  236. package/dist/ground/hooks/use-ground-driver-mutation.js +40 -0
  237. package/dist/ground/hooks/use-ground-drivers.d.ts +23 -0
  238. package/dist/ground/hooks/use-ground-drivers.d.ts.map +1 -0
  239. package/dist/ground/hooks/use-ground-drivers.js +12 -0
  240. package/dist/ground/hooks/use-ground-operator-mutation.d.ts +42 -0
  241. package/dist/ground/hooks/use-ground-operator-mutation.d.ts.map +1 -0
  242. package/dist/ground/hooks/use-ground-operator-mutation.js +40 -0
  243. package/dist/ground/hooks/use-ground-operators.d.ts +21 -0
  244. package/dist/ground/hooks/use-ground-operators.d.ts.map +1 -0
  245. package/dist/ground/hooks/use-ground-operators.js +12 -0
  246. package/dist/ground/hooks/use-ground-vehicle-mutation.d.ts +60 -0
  247. package/dist/ground/hooks/use-ground-vehicle-mutation.d.ts.map +1 -0
  248. package/dist/ground/hooks/use-ground-vehicle-mutation.js +40 -0
  249. package/dist/ground/hooks/use-ground-vehicles.d.ts +27 -0
  250. package/dist/ground/hooks/use-ground-vehicles.d.ts.map +1 -0
  251. package/dist/ground/hooks/use-ground-vehicles.js +12 -0
  252. package/dist/ground/index.d.ts +7 -0
  253. package/dist/ground/index.d.ts.map +1 -0
  254. package/dist/ground/index.js +6 -0
  255. package/dist/ground/provider.d.ts +2 -0
  256. package/dist/ground/provider.d.ts.map +1 -0
  257. package/dist/ground/provider.js +1 -0
  258. package/dist/ground/query-keys.d.ts +35 -0
  259. package/dist/ground/query-keys.d.ts.map +1 -0
  260. package/dist/ground/query-keys.js +12 -0
  261. package/dist/ground/query-options.d.ts +417 -0
  262. package/dist/ground/query-options.d.ts.map +1 -0
  263. package/dist/ground/query-options.js +63 -0
  264. package/dist/ground/schemas.d.ts +212 -0
  265. package/dist/ground/schemas.d.ts.map +1 -0
  266. package/dist/ground/schemas.js +45 -0
  267. package/dist/index.d.ts +5 -0
  268. package/dist/index.d.ts.map +1 -0
  269. package/dist/index.js +4 -0
  270. package/dist/places/client.d.ts +14 -0
  271. package/dist/places/client.d.ts.map +1 -0
  272. package/dist/places/client.js +58 -0
  273. package/dist/places/components/facility-badge.d.ts +13 -0
  274. package/dist/places/components/facility-badge.d.ts.map +1 -0
  275. package/dist/places/components/facility-badge.js +22 -0
  276. package/dist/places/components/facility-combobox.d.ts +16 -0
  277. package/dist/places/components/facility-combobox.d.ts.map +1 -0
  278. package/dist/places/components/facility-combobox.js +61 -0
  279. package/dist/places/components/place-badge.d.ts +2 -0
  280. package/dist/places/components/place-badge.d.ts.map +1 -0
  281. package/dist/places/components/place-badge.js +1 -0
  282. package/dist/places/components/place-combobox.d.ts +2 -0
  283. package/dist/places/components/place-combobox.d.ts.map +1 -0
  284. package/dist/places/components/place-combobox.js +1 -0
  285. package/dist/places/hooks/index.d.ts +23 -0
  286. package/dist/places/hooks/index.d.ts.map +1 -0
  287. package/dist/places/hooks/index.js +22 -0
  288. package/dist/places/hooks/use-facilities.d.ts +31 -0
  289. package/dist/places/hooks/use-facilities.d.ts.map +1 -0
  290. package/dist/places/hooks/use-facilities.js +12 -0
  291. package/dist/places/hooks/use-facility-feature-mutation.d.ts +37 -0
  292. package/dist/places/hooks/use-facility-feature-mutation.d.ts.map +1 -0
  293. package/dist/places/hooks/use-facility-feature-mutation.js +38 -0
  294. package/dist/places/hooks/use-facility-features.d.ts +21 -0
  295. package/dist/places/hooks/use-facility-features.d.ts.map +1 -0
  296. package/dist/places/hooks/use-facility-features.js +12 -0
  297. package/dist/places/hooks/use-facility-mutation.d.ts +74 -0
  298. package/dist/places/hooks/use-facility-mutation.d.ts.map +1 -0
  299. package/dist/places/hooks/use-facility-mutation.js +45 -0
  300. package/dist/places/hooks/use-facility-operation-schedule-mutation.d.ts +37 -0
  301. package/dist/places/hooks/use-facility-operation-schedule-mutation.d.ts.map +1 -0
  302. package/dist/places/hooks/use-facility-operation-schedule-mutation.js +44 -0
  303. package/dist/places/hooks/use-facility-operation-schedules.d.ts +21 -0
  304. package/dist/places/hooks/use-facility-operation-schedules.d.ts.map +1 -0
  305. package/dist/places/hooks/use-facility-operation-schedules.js +12 -0
  306. package/dist/places/hooks/use-facility.d.ts +25 -0
  307. package/dist/places/hooks/use-facility.d.ts.map +1 -0
  308. package/dist/places/hooks/use-facility.js +12 -0
  309. package/dist/places/hooks/use-properties.d.ts +23 -0
  310. package/dist/places/hooks/use-properties.d.ts.map +1 -0
  311. package/dist/places/hooks/use-properties.js +12 -0
  312. package/dist/places/hooks/use-property-group-member-mutation.d.ts +41 -0
  313. package/dist/places/hooks/use-property-group-member-mutation.d.ts.map +1 -0
  314. package/dist/places/hooks/use-property-group-member-mutation.js +38 -0
  315. package/dist/places/hooks/use-property-group-members.d.ts +20 -0
  316. package/dist/places/hooks/use-property-group-members.d.ts.map +1 -0
  317. package/dist/places/hooks/use-property-group-members.js +12 -0
  318. package/dist/places/hooks/use-property-group-mutation.d.ts +50 -0
  319. package/dist/places/hooks/use-property-group-mutation.d.ts.map +1 -0
  320. package/dist/places/hooks/use-property-group-mutation.js +39 -0
  321. package/dist/places/hooks/use-property-group.d.ts +17 -0
  322. package/dist/places/hooks/use-property-group.d.ts.map +1 -0
  323. package/dist/places/hooks/use-property-group.js +12 -0
  324. package/dist/places/hooks/use-property-groups.d.ts +23 -0
  325. package/dist/places/hooks/use-property-groups.d.ts.map +1 -0
  326. package/dist/places/hooks/use-property-groups.js +12 -0
  327. package/dist/places/hooks/use-property-mutation.d.ts +50 -0
  328. package/dist/places/hooks/use-property-mutation.d.ts.map +1 -0
  329. package/dist/places/hooks/use-property-mutation.js +40 -0
  330. package/dist/places/hooks/use-property.d.ts +17 -0
  331. package/dist/places/hooks/use-property.d.ts.map +1 -0
  332. package/dist/places/hooks/use-property.js +12 -0
  333. package/dist/places/i18n/en.d.ts +14 -0
  334. package/dist/places/i18n/en.d.ts.map +1 -0
  335. package/dist/places/i18n/en.js +13 -0
  336. package/dist/places/i18n/index.d.ts +5 -0
  337. package/dist/places/i18n/index.d.ts.map +1 -0
  338. package/dist/places/i18n/index.js +3 -0
  339. package/dist/places/i18n/messages.d.ts +15 -0
  340. package/dist/places/i18n/messages.d.ts.map +1 -0
  341. package/dist/places/i18n/messages.js +1 -0
  342. package/dist/places/i18n/provider.d.ts +50 -0
  343. package/dist/places/i18n/provider.d.ts.map +1 -0
  344. package/dist/places/i18n/provider.js +44 -0
  345. package/dist/places/i18n/ro.d.ts +14 -0
  346. package/dist/places/i18n/ro.d.ts.map +1 -0
  347. package/dist/places/i18n/ro.js +13 -0
  348. package/dist/places/index.d.ts +7 -0
  349. package/dist/places/index.d.ts.map +1 -0
  350. package/dist/places/index.js +6 -0
  351. package/dist/places/provider.d.ts +2 -0
  352. package/dist/places/provider.d.ts.map +1 -0
  353. package/dist/places/provider.js +1 -0
  354. package/dist/places/query-keys.d.ts +92 -0
  355. package/dist/places/query-keys.d.ts.map +1 -0
  356. package/dist/places/query-keys.js +22 -0
  357. package/dist/places/query-options.d.ts +814 -0
  358. package/dist/places/query-options.d.ts.map +1 -0
  359. package/dist/places/query-options.js +132 -0
  360. package/dist/places/schemas.d.ts +464 -0
  361. package/dist/places/schemas.d.ts.map +1 -0
  362. package/dist/places/schemas.js +84 -0
  363. package/dist/places/ui.d.ts +4 -0
  364. package/dist/places/ui.d.ts.map +1 -0
  365. package/dist/places/ui.js +3 -0
  366. package/dist/resources/admin/detail-hosts.d.ts +30 -0
  367. package/dist/resources/admin/detail-hosts.d.ts.map +1 -0
  368. package/dist/resources/admin/detail-hosts.js +50 -0
  369. package/dist/resources/admin/index.d.ts +89 -0
  370. package/dist/resources/admin/index.d.ts.map +1 -0
  371. package/dist/resources/admin/index.js +148 -0
  372. package/dist/resources/admin/pages/resource-allocation-detail-page.d.ts +9 -0
  373. package/dist/resources/admin/pages/resource-allocation-detail-page.d.ts.map +1 -0
  374. package/dist/resources/admin/pages/resource-allocation-detail-page.js +11 -0
  375. package/dist/resources/admin/pages/resource-assignment-detail-page.d.ts +9 -0
  376. package/dist/resources/admin/pages/resource-assignment-detail-page.d.ts.map +1 -0
  377. package/dist/resources/admin/pages/resource-assignment-detail-page.js +11 -0
  378. package/dist/resources/admin/pages/resource-detail-page.d.ts +9 -0
  379. package/dist/resources/admin/pages/resource-detail-page.d.ts.map +1 -0
  380. package/dist/resources/admin/pages/resource-detail-page.js +11 -0
  381. package/dist/resources/admin/pages/resource-pool-detail-page.d.ts +9 -0
  382. package/dist/resources/admin/pages/resource-pool-detail-page.d.ts.map +1 -0
  383. package/dist/resources/admin/pages/resource-pool-detail-page.js +11 -0
  384. package/dist/resources/admin/resources-admin-api.d.ts +22 -0
  385. package/dist/resources/admin/resources-admin-api.d.ts.map +1 -0
  386. package/dist/resources/admin/resources-admin-api.js +28 -0
  387. package/dist/resources/admin/resources-dialog-allocation.d.ts +12 -0
  388. package/dist/resources/admin/resources-dialog-allocation.d.ts.map +1 -0
  389. package/dist/resources/admin/resources-dialog-allocation.js +77 -0
  390. package/dist/resources/admin/resources-dialogs-core.d.ts +16 -0
  391. package/dist/resources/admin/resources-dialogs-core.d.ts.map +1 -0
  392. package/dist/resources/admin/resources-dialogs-core.js +133 -0
  393. package/dist/resources/admin/resources-dialogs-ops.d.ts +19 -0
  394. package/dist/resources/admin/resources-dialogs-ops.d.ts.map +1 -0
  395. package/dist/resources/admin/resources-dialogs-ops.js +137 -0
  396. package/dist/resources/admin/resources-dialogs.d.ts +28 -0
  397. package/dist/resources/admin/resources-dialogs.d.ts.map +1 -0
  398. package/dist/resources/admin/resources-dialogs.js +23 -0
  399. package/dist/resources/admin/resources-host.d.ts +11 -0
  400. package/dist/resources/admin/resources-host.d.ts.map +1 -0
  401. package/dist/resources/admin/resources-host.js +159 -0
  402. package/dist/resources/admin/resources-page-data.d.ts +61 -0
  403. package/dist/resources/admin/resources-page-data.d.ts.map +1 -0
  404. package/dist/resources/admin/resources-page-data.js +39 -0
  405. package/dist/resources/admin/resources-page-skeleton.d.ts +5 -0
  406. package/dist/resources/admin/resources-page-skeleton.d.ts.map +1 -0
  407. package/dist/resources/admin/resources-page-skeleton.js +22 -0
  408. package/dist/resources/client.d.ts +14 -0
  409. package/dist/resources/client.d.ts.map +1 -0
  410. package/dist/resources/client.js +59 -0
  411. package/dist/resources/components/resource-allocation-detail-page.d.ts +16 -0
  412. package/dist/resources/components/resource-allocation-detail-page.d.ts.map +1 -0
  413. package/dist/resources/components/resource-allocation-detail-page.js +48 -0
  414. package/dist/resources/components/resource-assignment-detail-page.d.ts +16 -0
  415. package/dist/resources/components/resource-assignment-detail-page.d.ts.map +1 -0
  416. package/dist/resources/components/resource-assignment-detail-page.js +50 -0
  417. package/dist/resources/components/resource-detail-data.d.ts +34 -0
  418. package/dist/resources/components/resource-detail-data.d.ts.map +1 -0
  419. package/dist/resources/components/resource-detail-data.js +90 -0
  420. package/dist/resources/components/resource-detail-page.d.ts +24 -0
  421. package/dist/resources/components/resource-detail-page.d.ts.map +1 -0
  422. package/dist/resources/components/resource-detail-page.js +80 -0
  423. package/dist/resources/components/resource-detail-shared.d.ts +37 -0
  424. package/dist/resources/components/resource-detail-shared.d.ts.map +1 -0
  425. package/dist/resources/components/resource-detail-shared.js +51 -0
  426. package/dist/resources/components/resource-detail-skeletons.d.ts +14 -0
  427. package/dist/resources/components/resource-detail-skeletons.d.ts.map +1 -0
  428. package/dist/resources/components/resource-detail-skeletons.js +24 -0
  429. package/dist/resources/components/resource-pool-detail-page.d.ts +22 -0
  430. package/dist/resources/components/resource-pool-detail-page.d.ts.map +1 -0
  431. package/dist/resources/components/resource-pool-detail-page.js +68 -0
  432. package/dist/resources/components/resources-overview.d.ts +28 -0
  433. package/dist/resources/components/resources-overview.d.ts.map +1 -0
  434. package/dist/resources/components/resources-overview.js +32 -0
  435. package/dist/resources/components/resources-page-filters.d.ts +22 -0
  436. package/dist/resources/components/resources-page-filters.d.ts.map +1 -0
  437. package/dist/resources/components/resources-page-filters.js +40 -0
  438. package/dist/resources/components/resources-page.d.ts +77 -0
  439. package/dist/resources/components/resources-page.d.ts.map +1 -0
  440. package/dist/resources/components/resources-page.js +140 -0
  441. package/dist/resources/components/resources-section-header.d.ts +7 -0
  442. package/dist/resources/components/resources-section-header.d.ts.map +1 -0
  443. package/dist/resources/components/resources-section-header.js +6 -0
  444. package/dist/resources/components/resources-tabs-primary.d.ts +58 -0
  445. package/dist/resources/components/resources-tabs-primary.d.ts.map +1 -0
  446. package/dist/resources/components/resources-tabs-primary.js +201 -0
  447. package/dist/resources/components/resources-tabs-secondary.d.ts +46 -0
  448. package/dist/resources/components/resources-tabs-secondary.d.ts.map +1 -0
  449. package/dist/resources/components/resources-tabs-secondary.js +143 -0
  450. package/dist/resources/constants.d.ts +44 -0
  451. package/dist/resources/constants.d.ts.map +1 -0
  452. package/dist/resources/constants.js +20 -0
  453. package/dist/resources/hooks/index.d.ts +31 -0
  454. package/dist/resources/hooks/index.d.ts.map +1 -0
  455. package/dist/resources/hooks/index.js +15 -0
  456. package/dist/resources/hooks/use-allocation.d.ts +16 -0
  457. package/dist/resources/hooks/use-allocation.d.ts.map +1 -0
  458. package/dist/resources/hooks/use-allocation.js +12 -0
  459. package/dist/resources/hooks/use-allocations.d.ts +20 -0
  460. package/dist/resources/hooks/use-allocations.d.ts.map +1 -0
  461. package/dist/resources/hooks/use-allocations.js +12 -0
  462. package/dist/resources/hooks/use-assignment.d.ts +17 -0
  463. package/dist/resources/hooks/use-assignment.d.ts.map +1 -0
  464. package/dist/resources/hooks/use-assignment.js +12 -0
  465. package/dist/resources/hooks/use-assignments.d.ts +21 -0
  466. package/dist/resources/hooks/use-assignments.d.ts.map +1 -0
  467. package/dist/resources/hooks/use-assignments.js +12 -0
  468. package/dist/resources/hooks/use-bookings.d.ts +14 -0
  469. package/dist/resources/hooks/use-bookings.d.ts.map +1 -0
  470. package/dist/resources/hooks/use-bookings.js +12 -0
  471. package/dist/resources/hooks/use-closeouts.d.ts +19 -0
  472. package/dist/resources/hooks/use-closeouts.d.ts.map +1 -0
  473. package/dist/resources/hooks/use-closeouts.js +12 -0
  474. package/dist/resources/hooks/use-pool.d.ts +15 -0
  475. package/dist/resources/hooks/use-pool.d.ts.map +1 -0
  476. package/dist/resources/hooks/use-pool.js +12 -0
  477. package/dist/resources/hooks/use-pools.d.ts +19 -0
  478. package/dist/resources/hooks/use-pools.d.ts.map +1 -0
  479. package/dist/resources/hooks/use-pools.js +12 -0
  480. package/dist/resources/hooks/use-products.d.ts +14 -0
  481. package/dist/resources/hooks/use-products.d.ts.map +1 -0
  482. package/dist/resources/hooks/use-products.js +12 -0
  483. package/dist/resources/hooks/use-resource.d.ts +16 -0
  484. package/dist/resources/hooks/use-resource.d.ts.map +1 -0
  485. package/dist/resources/hooks/use-resource.js +12 -0
  486. package/dist/resources/hooks/use-resources.d.ts +20 -0
  487. package/dist/resources/hooks/use-resources.d.ts.map +1 -0
  488. package/dist/resources/hooks/use-resources.js +12 -0
  489. package/dist/resources/hooks/use-rules.d.ts +15 -0
  490. package/dist/resources/hooks/use-rules.d.ts.map +1 -0
  491. package/dist/resources/hooks/use-rules.js +12 -0
  492. package/dist/resources/hooks/use-slots.d.ts +16 -0
  493. package/dist/resources/hooks/use-slots.d.ts.map +1 -0
  494. package/dist/resources/hooks/use-slots.js +12 -0
  495. package/dist/resources/hooks/use-start-times.d.ts +16 -0
  496. package/dist/resources/hooks/use-start-times.d.ts.map +1 -0
  497. package/dist/resources/hooks/use-start-times.js +12 -0
  498. package/dist/resources/hooks/use-suppliers.d.ts +14 -0
  499. package/dist/resources/hooks/use-suppliers.d.ts.map +1 -0
  500. package/dist/resources/hooks/use-suppliers.js +12 -0
  501. package/dist/resources/i18n/en.d.ts +3 -0
  502. package/dist/resources/i18n/en.d.ts.map +1 -0
  503. package/dist/resources/i18n/en.js +363 -0
  504. package/dist/resources/i18n/index.d.ts +5 -0
  505. package/dist/resources/i18n/index.d.ts.map +1 -0
  506. package/dist/resources/i18n/index.js +3 -0
  507. package/dist/resources/i18n/messages.d.ts +298 -0
  508. package/dist/resources/i18n/messages.d.ts.map +1 -0
  509. package/dist/resources/i18n/messages.js +1 -0
  510. package/dist/resources/i18n/provider.d.ts +26 -0
  511. package/dist/resources/i18n/provider.d.ts.map +1 -0
  512. package/dist/resources/i18n/provider.js +44 -0
  513. package/dist/resources/i18n/ro.d.ts +3 -0
  514. package/dist/resources/i18n/ro.d.ts.map +1 -0
  515. package/dist/resources/i18n/ro.js +363 -0
  516. package/dist/resources/i18n/utils.d.ts +18 -0
  517. package/dist/resources/i18n/utils.d.ts.map +1 -0
  518. package/dist/resources/i18n/utils.js +30 -0
  519. package/dist/resources/index.d.ts +9 -0
  520. package/dist/resources/index.d.ts.map +1 -0
  521. package/dist/resources/index.js +8 -0
  522. package/dist/resources/provider.d.ts +2 -0
  523. package/dist/resources/provider.d.ts.map +1 -0
  524. package/dist/resources/provider.js +1 -0
  525. package/dist/resources/query-keys.d.ts +73 -0
  526. package/dist/resources/query-keys.d.ts.map +1 -0
  527. package/dist/resources/query-keys.js +29 -0
  528. package/dist/resources/query-options.d.ts +801 -0
  529. package/dist/resources/query-options.d.ts.map +1 -0
  530. package/dist/resources/query-options.js +237 -0
  531. package/dist/resources/schemas.d.ts +452 -0
  532. package/dist/resources/schemas.d.ts.map +1 -0
  533. package/dist/resources/schemas.js +126 -0
  534. package/dist/resources/ui.d.ts +13 -0
  535. package/dist/resources/ui.d.ts.map +1 -0
  536. package/dist/resources/ui.js +12 -0
  537. package/dist/resources/utils.d.ts +14 -0
  538. package/dist/resources/utils.d.ts.map +1 -0
  539. package/dist/resources/utils.js +33 -0
  540. package/package.json +325 -0
  541. package/src/availability/styles.css +12 -0
  542. package/src/places/styles.css +11 -0
  543. package/src/resources/styles.css +11 -0
  544. package/src/styles.css +3 -0
@@ -0,0 +1,12 @@
1
+ import type { AvailabilityStartTimeRow, ProductOption } from "../../index.js";
2
+ import { type AvailabilityDialogMessages, type AvailabilityStartTimeSubmitPayload, type SubmitContext } from "./shared.js";
3
+ export declare function AvailabilityStartTimeDialog(props: {
4
+ messages: AvailabilityDialogMessages;
5
+ open: boolean;
6
+ onOpenChange: (open: boolean) => void;
7
+ startTime?: AvailabilityStartTimeRow;
8
+ products: ProductOption[];
9
+ onSubmit: (payload: AvailabilityStartTimeSubmitPayload, context: SubmitContext) => Promise<void>;
10
+ onSuccess: () => void;
11
+ }): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=start-time-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-time-dialog.d.ts","sourceRoot":"","sources":["../../../../src/availability/components/availability-dialogs/start-time-dialog.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE7E,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,kCAAkC,EAGvC,KAAK,aAAa,EAEnB,MAAM,aAAa,CAAA;AAiBpB,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,EAAE,0BAA0B,CAAA;IACpC,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,SAAS,CAAC,EAAE,wBAAwB,CAAA;IACpC,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,QAAQ,EAAE,CAAC,OAAO,EAAE,kCAAkC,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAChG,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB,2CAwGA"}
@@ -0,0 +1,62 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle, Input, Label, } from "@voyant-travel/ui/components";
4
+ import { useEffect } from "react";
5
+ import { useForm } from "react-hook-form";
6
+ import { z } from "zod/v4";
7
+ import { zodResolver } from "../../form-resolver.js";
8
+ import { nullableNumber, nullableString } from "../../index.js";
9
+ import { DialogActions, ProductSelect, SwitchField, } from "./shared.js";
10
+ function getStartTimeFormSchema(messages) {
11
+ return z.object({
12
+ productId: z.string().min(1, messages.dialogs.startTime.validationProductRequired),
13
+ label: z.string().optional(),
14
+ startTimeLocal: z.string().min(1, messages.dialogs.startTime.validationStartTimeRequired),
15
+ durationMinutes: z.string().optional(),
16
+ sortOrder: z.coerce.number().int(),
17
+ active: z.boolean(),
18
+ });
19
+ }
20
+ export function AvailabilityStartTimeDialog(props) {
21
+ const startTimeMessages = props.messages.dialogs.startTime;
22
+ const startTimeFormSchema = getStartTimeFormSchema(props.messages);
23
+ const form = useForm({
24
+ resolver: zodResolver(startTimeFormSchema),
25
+ defaultValues: {
26
+ productId: "",
27
+ label: "",
28
+ startTimeLocal: "09:00",
29
+ durationMinutes: "",
30
+ sortOrder: 0,
31
+ active: true,
32
+ },
33
+ });
34
+ useEffect(() => {
35
+ if (props.open && props.startTime) {
36
+ form.reset({
37
+ productId: props.startTime.productId,
38
+ label: props.startTime.label ?? "",
39
+ startTimeLocal: props.startTime.startTimeLocal,
40
+ durationMinutes: props.startTime.durationMinutes?.toString() ?? "",
41
+ sortOrder: props.startTime.sortOrder,
42
+ active: props.startTime.active,
43
+ });
44
+ }
45
+ else if (props.open) {
46
+ form.reset();
47
+ }
48
+ }, [form, props.open, props.startTime]);
49
+ const isEditing = Boolean(props.startTime);
50
+ const onSubmit = async (values) => {
51
+ await props.onSubmit({
52
+ productId: values.productId,
53
+ label: nullableString(values.label),
54
+ startTimeLocal: values.startTimeLocal,
55
+ durationMinutes: nullableNumber(values.durationMinutes),
56
+ sortOrder: values.sortOrder,
57
+ active: values.active,
58
+ }, { isEditing, id: props.startTime?.id });
59
+ props.onSuccess();
60
+ };
61
+ return (_jsx(Dialog, { open: props.open, onOpenChange: props.onOpenChange, children: _jsxs(DialogContent, { children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: isEditing ? startTimeMessages.editTitle : startTimeMessages.newTitle }) }), _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), children: [_jsxs(DialogBody, { className: "grid gap-4", children: [_jsx(ProductSelect, { label: startTimeMessages.productLabel, placeholder: startTimeMessages.selectProductPlaceholder, products: props.products, value: form.watch("productId"), onValueChange: (value) => form.setValue("productId", value ?? "") }), _jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: startTimeMessages.labelLabel }), _jsx(Input, { ...form.register("label"), placeholder: startTimeMessages.labelPlaceholder })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: startTimeMessages.startTimeLabel }), _jsx(Input, { ...form.register("startTimeLocal"), type: "time" })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: startTimeMessages.durationMinutesLabel }), _jsx(Input, { ...form.register("durationMinutes"), type: "number", min: 0 })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: startTimeMessages.sortOrderLabel }), _jsx(Input, { ...form.register("sortOrder"), type: "number" })] })] }), _jsx(SwitchField, { title: startTimeMessages.activeTitle, description: startTimeMessages.activeDescription, checked: form.watch("active"), onCheckedChange: (checked) => form.setValue("active", checked) })] }), _jsx(DialogActions, { cancel: startTimeMessages.cancel, save: startTimeMessages.save, create: startTimeMessages.create, isEditing: isEditing, isSubmitting: form.formState.isSubmitting, onCancel: () => props.onOpenChange(false) })] })] }) }));
62
+ }
@@ -0,0 +1,7 @@
1
+ export { AvailabilityCloseoutDialog } from "./availability-dialogs/closeout-dialog.js";
2
+ export { AvailabilityPickupPointDialog } from "./availability-dialogs/pickup-point-dialog.js";
3
+ export { AvailabilityRuleDialog } from "./availability-dialogs/rule-dialog.js";
4
+ export type { AvailabilityCloseoutSubmitPayload, AvailabilityDialogMessages, AvailabilityPickupPointSubmitPayload, AvailabilityRuleSubmitPayload, AvailabilitySlotSubmitPayload, AvailabilityStartTimeSubmitPayload, } from "./availability-dialogs/shared.js";
5
+ export { AvailabilitySlotDialog } from "./availability-dialogs/slot-dialog.js";
6
+ export { AvailabilityStartTimeDialog } from "./availability-dialogs/start-time-dialog.js";
7
+ //# sourceMappingURL=availability-dialogs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"availability-dialogs.d.ts","sourceRoot":"","sources":["../../../src/availability/components/availability-dialogs.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAA;AACtF,OAAO,EAAE,6BAA6B,EAAE,MAAM,+CAA+C,CAAA;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAA;AAC9E,YAAY,EACV,iCAAiC,EACjC,0BAA0B,EAC1B,oCAAoC,EACpC,6BAA6B,EAC7B,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAA;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,6CAA6C,CAAA"}
@@ -0,0 +1,6 @@
1
+ "use client";
2
+ export { AvailabilityCloseoutDialog } from "./availability-dialogs/closeout-dialog.js";
3
+ export { AvailabilityPickupPointDialog } from "./availability-dialogs/pickup-point-dialog.js";
4
+ export { AvailabilityRuleDialog } from "./availability-dialogs/rule-dialog.js";
5
+ export { AvailabilitySlotDialog } from "./availability-dialogs/slot-dialog.js";
6
+ export { AvailabilityStartTimeDialog } from "./availability-dialogs/start-time-dialog.js";
@@ -0,0 +1,54 @@
1
+ import type { AvailabilityPickupPointRow, AvailabilityRuleRow, AvailabilitySlotRow, ProductOption } from "../index.js";
2
+ import { type AvailabilityColumnsMessages } from "./availability-columns.js";
3
+ export interface AvailabilityOverviewMessages extends AvailabilityColumnsMessages {
4
+ allProducts: string;
5
+ clearFilters: string;
6
+ searchPlaceholder: string;
7
+ overview: {
8
+ openSlotsTitle: string;
9
+ openSlotsDescription: string;
10
+ constrainedSlotsTitle: string;
11
+ constrainedSlotsDescription: string;
12
+ activeRulesTitle: string;
13
+ activeRulesDescription: string;
14
+ pickupPointsTitle: string;
15
+ pickupPointsDescription: string;
16
+ capacityWatchlistTitle: string;
17
+ capacityWatchlistEmpty: string;
18
+ coverageGapsTitle: string;
19
+ coverageGapsEmpty: string;
20
+ coverageGapDescription: string;
21
+ actionRequiredTitle: string;
22
+ actionRequiredBody: string;
23
+ actionRequiredCta: string;
24
+ attentionTitle: string;
25
+ attentionEmpty: string;
26
+ severityCoverageGap: string;
27
+ severityClosed: string;
28
+ severitySoldOut: string;
29
+ };
30
+ }
31
+ export declare function AvailabilityOverview({ messages, products, constrainedSlots, constrainedSlotsCount: providedConstrainedSlotsCount, openSlotsCount: providedOpenSlotsCount, activeRulesCount: providedActiveRulesCount, activePickupPointsCount: providedActivePickupPointsCount, filteredRules, filteredPickupPoints, productsWithoutUpcomingDepartures, productsWithoutUpcomingDeparturesCount: providedProductsWithoutUpcomingDeparturesCount, search, setSearch, productFilter, setProductFilter, hasFilters, onClearFilters, onOpenSlot, onOpenProduct, onJumpToSlots, showFilters, }: {
32
+ messages: AvailabilityOverviewMessages;
33
+ products: ProductOption[];
34
+ constrainedSlots: AvailabilitySlotRow[];
35
+ constrainedSlotsCount?: number;
36
+ openSlotsCount?: number;
37
+ activeRulesCount?: number;
38
+ activePickupPointsCount?: number;
39
+ filteredRules: AvailabilityRuleRow[];
40
+ filteredPickupPoints: AvailabilityPickupPointRow[];
41
+ productsWithoutUpcomingDepartures: ProductOption[];
42
+ productsWithoutUpcomingDeparturesCount?: number;
43
+ search: string;
44
+ setSearch: (value: string) => void;
45
+ productFilter: string;
46
+ setProductFilter: (value: string) => void;
47
+ hasFilters: boolean;
48
+ onClearFilters: () => void;
49
+ onOpenSlot: (slotId: string) => void;
50
+ onOpenProduct: (productId: string) => void;
51
+ onJumpToSlots?: () => void;
52
+ showFilters?: boolean;
53
+ }): import("react/jsx-runtime").JSX.Element;
54
+ //# sourceMappingURL=availability-overview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"availability-overview.d.ts","sourceRoot":"","sources":["../../../src/availability/components/availability-overview.tsx"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACd,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,KAAK,2BAA2B,EAAsB,MAAM,2BAA2B,CAAA;AAShG,MAAM,WAAW,4BAA6B,SAAQ,2BAA2B;IAC/E,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE;QACR,cAAc,EAAE,MAAM,CAAA;QACtB,oBAAoB,EAAE,MAAM,CAAA;QAC5B,qBAAqB,EAAE,MAAM,CAAA;QAC7B,2BAA2B,EAAE,MAAM,CAAA;QACnC,gBAAgB,EAAE,MAAM,CAAA;QACxB,sBAAsB,EAAE,MAAM,CAAA;QAC9B,iBAAiB,EAAE,MAAM,CAAA;QACzB,uBAAuB,EAAE,MAAM,CAAA;QAC/B,sBAAsB,EAAE,MAAM,CAAA;QAC9B,sBAAsB,EAAE,MAAM,CAAA;QAC9B,iBAAiB,EAAE,MAAM,CAAA;QACzB,iBAAiB,EAAE,MAAM,CAAA;QACzB,sBAAsB,EAAE,MAAM,CAAA;QAC9B,mBAAmB,EAAE,MAAM,CAAA;QAC3B,kBAAkB,EAAE,MAAM,CAAA;QAC1B,iBAAiB,EAAE,MAAM,CAAA;QACzB,cAAc,EAAE,MAAM,CAAA;QACtB,cAAc,EAAE,MAAM,CAAA;QACtB,mBAAmB,EAAE,MAAM,CAAA;QAC3B,cAAc,EAAE,MAAM,CAAA;QACtB,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;CACF;AAED,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,qBAAqB,EAAE,6BAA6B,EACpD,cAAc,EAAE,sBAAsB,EACtC,gBAAgB,EAAE,wBAAwB,EAC1C,uBAAuB,EAAE,+BAA+B,EACxD,aAAa,EACb,oBAAoB,EACpB,iCAAiC,EACjC,sCAAsC,EAAE,8CAA8C,EACtF,MAAM,EACN,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,UAAU,EACV,aAAa,EACb,aAAa,EACb,WAAkB,GACnB,EAAE;IACD,QAAQ,EAAE,4BAA4B,CAAA;IACtC,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,gBAAgB,EAAE,mBAAmB,EAAE,CAAA;IACvC,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,aAAa,EAAE,mBAAmB,EAAE,CAAA;IACpC,oBAAoB,EAAE,0BAA0B,EAAE,CAAA;IAClD,iCAAiC,EAAE,aAAa,EAAE,CAAA;IAClD,sCAAsC,CAAC,EAAE,MAAM,CAAA;IAC/C,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,UAAU,EAAE,OAAO,CAAA;IACnB,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,2CA0KA"}
@@ -0,0 +1,50 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { Badge, Button, Card, CardContent, CardHeader, CardTitle, cn, Input, OverviewMetric, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@voyant-travel/ui/components";
4
+ import { AlertTriangle, ArrowRight, CalendarDays, CheckCircle2, Clock3, Package, Search, Truck, } from "lucide-react";
5
+ import { useAvailabilityUiMessagesOrDefault } from "../i18n/index.js";
6
+ import { productNameById, slotLocalStart } from "../index.js";
7
+ import { getSlotStatusLabel } from "./availability-columns.js";
8
+ function interpolate(template, values) {
9
+ return template.replace(/\{(\w+)\}/g, (_, key) => {
10
+ const value = values[key];
11
+ return value === undefined ? "" : String(value);
12
+ });
13
+ }
14
+ export function AvailabilityOverview({ messages, products, constrainedSlots, constrainedSlotsCount: providedConstrainedSlotsCount, openSlotsCount: providedOpenSlotsCount, activeRulesCount: providedActiveRulesCount, activePickupPointsCount: providedActivePickupPointsCount, filteredRules, filteredPickupPoints, productsWithoutUpcomingDepartures, productsWithoutUpcomingDeparturesCount: providedProductsWithoutUpcomingDeparturesCount, search, setSearch, productFilter, setProductFilter, hasFilters, onClearFilters, onOpenSlot, onOpenProduct, onJumpToSlots, showFilters = true, }) {
15
+ useAvailabilityUiMessagesOrDefault();
16
+ const openSlotsCount = providedOpenSlotsCount ?? constrainedSlots.filter((slot) => slot.status === "open").length;
17
+ const constrainedSlotsCount = providedConstrainedSlotsCount ?? constrainedSlots.length;
18
+ const activeRulesCount = providedActiveRulesCount ?? filteredRules.filter((rule) => rule.active).length;
19
+ const activePickupPointsCount = providedActivePickupPointsCount ??
20
+ filteredPickupPoints.filter((pickupPoint) => pickupPoint.active).length;
21
+ const noDeparturesCount = providedProductsWithoutUpcomingDeparturesCount ?? productsWithoutUpcomingDepartures.length;
22
+ const hasNoDeparturesProducts = noDeparturesCount > 0;
23
+ const hasConstrainedSlots = constrainedSlotsCount > 0;
24
+ const hasAttention = hasNoDeparturesProducts || hasConstrainedSlots;
25
+ return (_jsxs(_Fragment, { children: [hasNoDeparturesProducts ? (_jsxs("div", { className: "flex flex-col gap-3 rounded-lg border border-amber-300 bg-amber-50 p-4 text-amber-900 sm:flex-row sm:items-center sm:justify-between dark:border-amber-700 dark:bg-amber-950/40 dark:text-amber-100", children: [_jsxs("div", { className: "flex items-start gap-3", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-5 w-5 shrink-0" }), _jsxs("div", { className: "space-y-1", children: [_jsx("div", { className: "font-medium", children: messages.overview.actionRequiredTitle }), _jsx("p", { className: "text-sm text-amber-900/80 dark:text-amber-100/80", children: interpolate(messages.overview.actionRequiredBody, { count: noDeparturesCount }) })] })] }), onJumpToSlots ? (_jsx(Button, { size: "sm", className: "self-start sm:self-auto", onClick: onJumpToSlots, children: messages.overview.actionRequiredCta })) : null] })) : null, _jsxs("div", { className: "grid gap-3 grid-cols-2 xl:grid-cols-4", children: [_jsx(OverviewMetric, { title: messages.overview.openSlotsTitle, value: openSlotsCount, description: messages.overview.openSlotsDescription, icon: CalendarDays }), _jsx(OverviewMetric, { title: messages.overview.constrainedSlotsTitle, value: constrainedSlotsCount, description: messages.overview.constrainedSlotsDescription, icon: Clock3 }), _jsx(OverviewMetric, { title: messages.overview.activeRulesTitle, value: activeRulesCount, description: messages.overview.activeRulesDescription, icon: Package }), _jsx(OverviewMetric, { title: messages.overview.pickupPointsTitle, value: activePickupPointsCount, description: messages.overview.pickupPointsDescription, icon: Truck })] }), _jsxs(Card, { size: "sm", children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between gap-3", children: [_jsxs(CardTitle, { className: "flex items-center gap-2 text-sm", children: [messages.overview.attentionTitle, hasAttention ? (_jsx(Badge, { variant: "secondary", className: "tabular-nums", children: noDeparturesCount + constrainedSlotsCount })) : null] }), !hasAttention ? (_jsxs("span", { className: "flex items-center gap-1.5 text-xs text-emerald-600 dark:text-emerald-400", children: [_jsx(CheckCircle2, { className: "h-4 w-4" }), messages.overview.attentionEmpty.split(".")[0]] })) : null] }), _jsx(CardContent, { className: "grid gap-3 lg:grid-cols-2", children: hasAttention ? (_jsxs(_Fragment, { children: [_jsx(AttentionColumn, { title: messages.overview.coverageGapsTitle, count: noDeparturesCount, items: productsWithoutUpcomingDepartures.slice(0, 4).map((product) => ({
26
+ id: product.id,
27
+ primary: product.name,
28
+ secondary: messages.overview.coverageGapDescription,
29
+ severityLabel: messages.overview.severityCoverageGap,
30
+ severityTone: "destructive",
31
+ onClick: () => onOpenProduct(product.id),
32
+ })), emptyMessage: messages.overview.coverageGapsEmpty }), _jsx(AttentionColumn, { title: messages.overview.capacityWatchlistTitle, count: constrainedSlotsCount, items: constrainedSlots.slice(0, 4).map((slot) => ({
33
+ id: slot.id,
34
+ primary: `${productNameById(products, slot.productId, slot.productName)} · ${slot.dateLocal}`,
35
+ secondary: `${formatSlotLocalDateTime(slotLocalStart(slot))} · ${messages.remainingPaxLabel}: ${slot.remainingPax ?? messages.details.noValue}`,
36
+ severityLabel: slot.status === "sold_out"
37
+ ? messages.overview.severitySoldOut
38
+ : slot.status === "closed"
39
+ ? messages.overview.severityClosed
40
+ : getSlotStatusLabel(slot.status, messages),
41
+ severityTone: slot.status === "sold_out" ? "default" : "outline",
42
+ onClick: () => onOpenSlot(slot.id),
43
+ })), emptyMessage: messages.overview.capacityWatchlistEmpty })] })) : (_jsx("p", { className: "col-span-full py-6 text-center text-sm text-muted-foreground", children: messages.overview.attentionEmpty })) })] }), showFilters ? (_jsxs("div", { className: "flex flex-col gap-3 md:flex-row md:items-center md:justify-between", children: [_jsxs("div", { className: "flex flex-1 flex-col gap-3 md:flex-row md:items-center", children: [_jsxs("div", { className: "relative w-full max-w-sm", children: [_jsx(Search, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { placeholder: messages.searchPlaceholder, value: search, onChange: (event) => setSearch(event.target.value), className: "pl-9" })] }), _jsxs(Select, { value: productFilter, onValueChange: (value) => setProductFilter(value ?? "all"), children: [_jsx(SelectTrigger, { className: "w-full md:w-56", children: _jsx(SelectValue, { placeholder: messages.allProducts }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "all", children: messages.allProducts }), products.map((product) => (_jsx(SelectItem, { value: product.id, children: product.name }, product.id)))] })] })] }), hasFilters ? (_jsx(Button, { variant: "outline", onClick: onClearFilters, children: messages.clearFilters })) : null] })) : null] }));
44
+ }
45
+ function formatSlotLocalDateTime(value) {
46
+ return `${value.date} ${value.time}`;
47
+ }
48
+ function AttentionColumn({ title, count, items, emptyMessage, }) {
49
+ return (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsxs("div", { className: "flex items-center gap-2 px-1", children: [_jsx("span", { className: "text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: title }), count > 0 ? (_jsx(Badge, { variant: "outline", className: "tabular-nums", children: count })) : null] }), items.length === 0 ? (_jsx("p", { className: "rounded-md border border-dashed px-3 py-4 text-center text-xs text-muted-foreground", children: emptyMessage })) : (_jsx("ul", { className: "flex flex-col gap-1.5", children: items.map((item) => (_jsx("li", { children: _jsxs("button", { type: "button", onClick: item.onClick, className: cn("group flex w-full items-start justify-between gap-3 rounded-md border bg-card px-3 py-2 text-left transition-colors", "hover:border-foreground/30 hover:bg-muted/40", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"), children: [_jsxs("div", { className: "min-w-0 flex-1 space-y-1", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Badge, { variant: item.severityTone, className: "text-[10px] uppercase", children: item.severityLabel }), _jsx("span", { className: "truncate text-sm font-medium", children: item.primary })] }), _jsx("p", { className: "truncate text-xs text-muted-foreground", children: item.secondary })] }), _jsx(ArrowRight, { className: "mt-1 h-4 w-4 shrink-0 text-muted-foreground transition-transform group-hover:translate-x-0.5" })] }) }, item.id))) }))] }));
50
+ }
@@ -0,0 +1,32 @@
1
+ import type { ReactNode } from "react";
2
+ import { type AvailabilitySlotRow } from "../index.js";
3
+ import { type AvailabilitySlotSubmitPayload } from "./availability-dialogs.js";
4
+ import { type AvailabilityBulkDeleteFn, type AvailabilityBulkUpdateFn } from "./availability-tabs.js";
5
+ export type AvailabilityPageView = "list" | "calendar";
6
+ export type AvailabilityPageSlotStatusFilter = "all" | AvailabilitySlotRow["status"];
7
+ export type AvailabilityPageBulkUpdateHandler = AvailabilityBulkUpdateFn;
8
+ export type AvailabilityPageBulkDeleteHandler = AvailabilityBulkDeleteFn;
9
+ type DialogSubmitContext = {
10
+ isEditing: boolean;
11
+ id?: string;
12
+ };
13
+ export type AvailabilityPageSlotSubmitHandler = (payload: AvailabilitySlotSubmitPayload, context: DialogSubmitContext) => Promise<void>;
14
+ export interface AvailabilityPageSlots {
15
+ headerEnd?: ReactNode;
16
+ beforeFilters?: ReactNode;
17
+ afterFilters?: ReactNode;
18
+ dialogs?: ReactNode;
19
+ }
20
+ export interface AvailabilityPageProps {
21
+ className?: string;
22
+ defaultView?: AvailabilityPageView;
23
+ bulkActionTarget?: string | null;
24
+ onBulkUpdate: AvailabilityPageBulkUpdateHandler;
25
+ onBulkDelete: AvailabilityPageBulkDeleteHandler;
26
+ onSlotOpen?: (slotId: string) => void;
27
+ onSlotSubmit?: AvailabilityPageSlotSubmitHandler;
28
+ slots?: AvailabilityPageSlots;
29
+ }
30
+ export declare function AvailabilityPage({ className, defaultView, bulkActionTarget, onBulkUpdate, onBulkDelete, onSlotOpen, onSlotSubmit, slots: pageSlots, }: AvailabilityPageProps): import("react/jsx-runtime").JSX.Element;
31
+ export {};
32
+ //# sourceMappingURL=availability-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"availability-page.d.ts","sourceRoot":"","sources":["../../../src/availability/components/availability-page.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,EACL,KAAK,mBAAmB,EAUzB,MAAM,aAAa,CAAA;AACpB,OAAO,EAEL,KAAK,6BAA6B,EACnC,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAE9B,MAAM,wBAAwB,CAAA;AAE/B,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,UAAU,CAAA;AACtD,MAAM,MAAM,gCAAgC,GAAG,KAAK,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;AACpF,MAAM,MAAM,iCAAiC,GAAG,wBAAwB,CAAA;AACxE,MAAM,MAAM,iCAAiC,GAAG,wBAAwB,CAAA;AAExE,KAAK,mBAAmB,GAAG;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9D,MAAM,MAAM,iCAAiC,GAAG,CAC9C,OAAO,EAAE,6BAA6B,EACtC,OAAO,EAAE,mBAAmB,KACzB,OAAO,CAAC,IAAI,CAAC,CAAA;AAElB,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,aAAa,CAAC,EAAE,SAAS,CAAA;IACzB,YAAY,CAAC,EAAE,SAAS,CAAA;IACxB,OAAO,CAAC,EAAE,SAAS,CAAA;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,oBAAoB,CAAA;IAClC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,YAAY,EAAE,iCAAiC,CAAA;IAC/C,YAAY,EAAE,iCAAiC,CAAA;IAC/C,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,YAAY,CAAC,EAAE,iCAAiC,CAAA;IAChD,KAAK,CAAC,EAAE,qBAAqB,CAAA;CAC9B;AAID,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,WAAoB,EACpB,gBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,UAAmB,EACnB,YAAY,EACZ,KAAK,EAAE,SAAS,GACjB,EAAE,qBAAqB,2CAkRvB"}
@@ -0,0 +1,128 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useQueryClient } from "@tanstack/react-query";
4
+ import { Button, cn, Label } from "@voyant-travel/ui/components";
5
+ import { AsyncCombobox } from "@voyant-travel/ui/components/async-combobox";
6
+ import { CalendarProvider, CalendarView, } from "@voyant-travel/ui/components/big-calendar";
7
+ import { DateRangePicker } from "@voyant-travel/ui/components/date-picker";
8
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@voyant-travel/ui/components/select";
9
+ import { ToggleGroup, ToggleGroupItem } from "@voyant-travel/ui/components/toggle-group";
10
+ import { CalendarDays, List, Plus } from "lucide-react";
11
+ import { useState } from "react";
12
+ import { useAvailabilityUiMessagesOrDefault } from "../i18n/index.js";
13
+ import { availabilityQueryKeys, useAvailabilitySlotMutation, useProducts, useRules, useSlots, useStartTimes, } from "../index.js";
14
+ import { AvailabilitySlotDialog, } from "./availability-dialogs.js";
15
+ import { AvailabilityBodySkeleton } from "./availability-skeletons.js";
16
+ import { AvailabilitySlotsTab, } from "./availability-tabs.js";
17
+ const noopId = (_id) => undefined;
18
+ export function AvailabilityPage({ className, defaultView = "list", bulkActionTarget = null, onBulkUpdate, onBulkDelete, onSlotOpen = noopId, onSlotSubmit, slots: pageSlots, }) {
19
+ const messages = useAvailabilityUiMessagesOrDefault();
20
+ const toolbar = messages.toolbar;
21
+ const queryClient = useQueryClient();
22
+ const slotMutation = useAvailabilitySlotMutation();
23
+ const [productFilter, setProductFilter] = useState("all");
24
+ const [productSearch, setProductSearch] = useState("");
25
+ const [slotStatusFilter, setSlotStatusFilter] = useState("all");
26
+ const [slotDateRange, setSlotDateRange] = useState(null);
27
+ const [view, setView] = useState(defaultView);
28
+ const [calendarView, setCalendarView] = useState("month");
29
+ const [slotSelection, setSlotSelection] = useState({});
30
+ const [slotDialogOpen, setSlotDialogOpen] = useState(false);
31
+ const [editingSlot, setEditingSlot] = useState();
32
+ const productIdFilter = productFilter === "all" ? undefined : productFilter;
33
+ const slotStatusFilterParam = slotStatusFilter === "all" ? undefined : slotStatusFilter;
34
+ const productsQuery = useProducts({ search: productSearch || undefined, limit: 25, offset: 0 });
35
+ // Rules + start times back the slot create/edit dialog. Eager-load so the
36
+ // dialog opens with full options the first time, but keep the queries cheap
37
+ // (no filters). Slots query honors the page filters so server returns the
38
+ // matching first page rather than a stale 25-row prefix.
39
+ const rulesQuery = useRules({ limit: 25, offset: 0 });
40
+ const startTimesQuery = useStartTimes({ limit: 25, offset: 0 });
41
+ // Date range is filtered client-side via matchesDateRange. The server's
42
+ // startsAtFrom expects an ISO datetime, but the date picker yields a
43
+ // yyyy-MM-dd string — passing it through gets rejected by the validator.
44
+ const slotsQuery = useSlots({
45
+ limit: 25,
46
+ offset: 0,
47
+ productId: productIdFilter,
48
+ status: slotStatusFilterParam,
49
+ });
50
+ const products = productsQuery.data?.data ?? [];
51
+ const rules = rulesQuery.data?.data ?? [];
52
+ const startTimes = startTimesQuery.data?.data ?? [];
53
+ const slots = slotsQuery.data?.data ?? [];
54
+ const matchesProduct = (productId) => productFilter === "all" || productId === productFilter;
55
+ const matchesDateRange = (date, range) => (!range?.from || date >= range.from) && (!range?.to || date <= range.to); // i18n-literal-ok comparison expression
56
+ const productFilteredSlots = slots.filter((slot) => matchesProduct(slot.productId));
57
+ const filteredSlots = productFilteredSlots.filter((slot) => (slotStatusFilter === "all" || slot.status === slotStatusFilter) &&
58
+ matchesDateRange(slot.dateLocal, slotDateRange));
59
+ const selectedProduct = products.find((product) => product.id === productFilter) ?? null;
60
+ const slotStatusToColor = {
61
+ open: "green",
62
+ closed: "gray",
63
+ sold_out: "red",
64
+ cancelled: "yellow",
65
+ };
66
+ const calendarEvents = filteredSlots.map((slot) => {
67
+ const productName = products.find((product) => product.id === slot.productId)?.name;
68
+ return {
69
+ id: slot.id,
70
+ startDate: slot.startsAt,
71
+ endDate: slot.endsAt ?? slot.startsAt,
72
+ title: productName ?? slot.productName ?? messages.slotFallbackTitle,
73
+ description: slot.notes ?? "",
74
+ color: slotStatusToColor[slot.status],
75
+ };
76
+ });
77
+ const filtersHaveValues = productFilter !== "all" ||
78
+ slotStatusFilter !== "all" ||
79
+ Boolean(slotDateRange?.from) ||
80
+ Boolean(slotDateRange?.to);
81
+ const refreshAll = async () => {
82
+ await queryClient.invalidateQueries({ queryKey: availabilityQueryKeys.all });
83
+ };
84
+ const handleSlotSubmit = onSlotSubmit ??
85
+ (async (payload, context) => {
86
+ if (context.isEditing) {
87
+ if (!context.id)
88
+ throw new Error("AvailabilityPage slot edit requires an id.");
89
+ await slotMutation.update.mutateAsync({
90
+ id: context.id,
91
+ input: payload,
92
+ });
93
+ return;
94
+ }
95
+ await slotMutation.create.mutateAsync(payload);
96
+ });
97
+ const closeSlotDialog = () => {
98
+ setSlotDialogOpen(false);
99
+ setEditingSlot(undefined);
100
+ };
101
+ const isLoading = productsQuery.isPending ||
102
+ rulesQuery.isPending ||
103
+ startTimesQuery.isPending ||
104
+ slotsQuery.isPending;
105
+ return (_jsxs("div", { className: cn("flex flex-col gap-6 p-6", className), children: [_jsxs("div", { className: "flex flex-col gap-3 md:flex-row md:items-start md:justify-between", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight", children: messages.title }), _jsx("p", { className: "text-sm text-muted-foreground", children: messages.description })] }), _jsxs("div", { className: "flex items-center gap-2", children: [pageSlots?.headerEnd, _jsxs(Button, { onClick: () => {
106
+ setEditingSlot(undefined);
107
+ setSlotDialogOpen(true);
108
+ }, children: [_jsx(Plus, { className: "mr-2 size-4" }), messages.tabs.slots.actionLabel] })] })] }), pageSlots?.beforeFilters, _jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-end sm:justify-between", children: [_jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-end", children: [_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "availability-product-filter", className: "text-xs", children: messages.productLabel }), _jsx(AsyncCombobox, { value: productFilter === "all" ? null : productFilter, onChange: (value) => setProductFilter(value ?? "all"), items: products, selectedItem: selectedProduct, getKey: (product) => product.id, getLabel: (product) => product.name, onSearchChange: setProductSearch, placeholder: messages.allProducts, emptyText: productsQuery.isFetching
109
+ ? messages.productsComboboxSearching
110
+ : messages.productsComboboxEmpty, triggerClassName: "w-full sm:w-64" })] }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "availability-slot-status", className: "text-xs", children: messages.statusLabel }), _jsxs(Select, { value: slotStatusFilter, onValueChange: (value) => setSlotStatusFilter(value ?? "all"), children: [_jsx(SelectTrigger, { id: "availability-slot-status", className: "w-full sm:w-44", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "all", children: toolbar.statusAll }), _jsx(SelectItem, { value: "open", children: messages.statusOpen }), _jsx(SelectItem, { value: "closed", children: messages.statusClosed }), _jsx(SelectItem, { value: "sold_out", children: messages.statusSoldOut }), _jsx(SelectItem, { value: "cancelled", children: messages.statusCancelled })] })] })] }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { className: "text-xs", children: toolbar.dateRangeLabel }), _jsx(DateRangePicker, { value: slotDateRange, onChange: setSlotDateRange, className: "w-full sm:w-72", placeholder: toolbar.dateRangePlaceholder })] }), filtersHaveValues ? (_jsx(Button, { variant: "outline", size: "sm", onClick: () => {
111
+ setProductFilter("all");
112
+ setSlotStatusFilter("all");
113
+ setSlotDateRange(null);
114
+ }, children: toolbar.reset })) : null] }), _jsxs(ToggleGroup, { value: [view], onValueChange: (values) => {
115
+ const next = values[values.length - 1];
116
+ if (next === "list" || next === "calendar")
117
+ setView(next);
118
+ }, variant: "outline", "aria-label": messages.title, children: [_jsxs(ToggleGroupItem, { value: "list", "aria-label": messages.tabSlots, children: [_jsx(List, { className: "mr-2 size-4" }), messages.tabSlots] }), _jsxs(ToggleGroupItem, { value: "calendar", "aria-label": messages.tabCalendar, children: [_jsx(CalendarDays, { className: "mr-2 size-4" }), messages.tabCalendar] })] })] }), pageSlots?.afterFilters, isLoading ? (_jsx(AvailabilityBodySkeleton, {})) : view === "list" ? (_jsx(AvailabilitySlotsTab, { messages: messages, products: products, filteredSlots: filteredSlots, slotSelection: slotSelection, setSlotSelection: setSlotSelection, bulkActionTarget: bulkActionTarget, handleBulkUpdate: onBulkUpdate, handleBulkDelete: onBulkDelete, onCreate: () => {
119
+ setEditingSlot(undefined);
120
+ setSlotDialogOpen(true);
121
+ }, onOpenRoute: onSlotOpen, onEdit: (row) => {
122
+ setEditingSlot(row);
123
+ setSlotDialogOpen(true);
124
+ }, hideHeader: true, asPanel: false, hideBulkDelete: true, bulkStatusSelect: true })) : (_jsx(CalendarProvider, { events: calendarEvents, onEventClick: (event) => onSlotOpen(event.id), children: _jsx(CalendarView, { view: calendarView, onViewChange: setCalendarView, onDayClick: () => setCalendarView("day") }) })), _jsx(AvailabilitySlotDialog, { messages: messages, open: slotDialogOpen, onOpenChange: setSlotDialogOpen, slot: editingSlot, products: products, rules: rules, startTimes: startTimes, onSubmit: handleSlotSubmit, onSuccess: () => {
125
+ closeSlotDialog();
126
+ void refreshAll();
127
+ } }), pageSlots?.dialogs] }));
128
+ }