@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,237 @@
1
+ import { seatLayoutSpecSchema, } from "@voyant-travel/operations-react/availability";
2
+ export const ROOM_KIND = "room";
3
+ export const VEHICLE_KIND = "vehicle";
4
+ export const VEHICLE_SEAT_KIND = "vehicle_seat";
5
+ export const PARENT_ONLY_KINDS = new Set([VEHICLE_KIND]);
6
+ export function deriveAllocationKinds({ resources, templateOptions, }) {
7
+ const kinds = [];
8
+ const addKind = (kind) => {
9
+ if (!kind || PARENT_ONLY_KINDS.has(kind) || kinds.includes(kind))
10
+ return;
11
+ kinds.push(kind);
12
+ };
13
+ for (const resource of resources)
14
+ addKind(resource.kind);
15
+ for (const option of templateOptions) {
16
+ for (const template of option.templates)
17
+ addKind(template.kind);
18
+ }
19
+ return kinds;
20
+ }
21
+ export function collectOccupants(travelers, resources, kind) {
22
+ const resourceIds = new Set(resources.map((resource) => resource.id));
23
+ const byResource = new Map();
24
+ const byTravelerId = new Map();
25
+ const unallocated = [];
26
+ for (const traveler of travelers) {
27
+ byTravelerId.set(traveler.id, traveler);
28
+ const resourceId = traveler.allocations[kind];
29
+ if (!resourceId || !resourceIds.has(resourceId)) {
30
+ unallocated.push(traveler);
31
+ continue;
32
+ }
33
+ const list = byResource.get(resourceId) ?? [];
34
+ list.push(traveler);
35
+ byResource.set(resourceId, list);
36
+ }
37
+ return { byResource, byTravelerId, unallocated };
38
+ }
39
+ export function buildValidationIssues({ travelers, resources, occupants, kind, messages, }) {
40
+ const issues = [];
41
+ if (occupants.unallocated.length > 0) {
42
+ issues.push({
43
+ id: "unallocated",
44
+ label: `${occupants.unallocated.length} ${messages.validationUnallocated}`,
45
+ });
46
+ }
47
+ for (const resource of resources) {
48
+ const count = occupants.byResource.get(resource.id)?.length ?? 0;
49
+ if (count > resource.capacity) {
50
+ issues.push({
51
+ id: `over-capacity:${resource.id}`,
52
+ label: `${resource.label ?? kindLabel(kind, messages)} ${messages.validationOverCapacity}`,
53
+ });
54
+ }
55
+ }
56
+ for (const splitGroup of splitSharingGroups(travelers, kind)) {
57
+ issues.push({
58
+ id: `split:${splitGroup}`,
59
+ label: `${messages.validationSplitGroup}: ${splitGroup}`,
60
+ });
61
+ }
62
+ return issues;
63
+ }
64
+ export function splitSharingGroups(travelers, kind) {
65
+ const allocationsByGroup = new Map();
66
+ for (const traveler of travelers) {
67
+ const groupId = traveler.sharingGroupId;
68
+ if (!groupId)
69
+ continue;
70
+ const allocations = allocationsByGroup.get(groupId) ?? new Set();
71
+ allocations.add(traveler.allocations[kind] ?? "unallocated");
72
+ allocationsByGroup.set(groupId, allocations);
73
+ }
74
+ const split = [];
75
+ for (const [groupId, allocations] of allocationsByGroup) {
76
+ if (allocations.size > 1)
77
+ split.push(groupId);
78
+ }
79
+ return split;
80
+ }
81
+ export function groupSeatsByVehicle(seats, vehicles, messages) {
82
+ const vehiclesById = new Map(vehicles.map((vehicle) => [vehicle.id, vehicle]));
83
+ const grouped = new Map();
84
+ for (const seat of seats) {
85
+ const parentId = seat.parentId ?? "ungrouped";
86
+ const parent = parentId === "ungrouped" ? null : vehiclesById.get(parentId);
87
+ const group = grouped.get(parentId) ??
88
+ grouped
89
+ .set(parentId, {
90
+ id: parentId,
91
+ label: parent?.label ?? messages.vehicle,
92
+ sortOrder: parent?.sortOrder ?? 0,
93
+ layoutSpec: parseLayoutSpecFromFlags(parent?.flags ?? null),
94
+ seats: [],
95
+ })
96
+ .get(parentId);
97
+ group?.seats.push(seat);
98
+ }
99
+ return Array.from(grouped.values())
100
+ .map((group) => ({
101
+ ...group,
102
+ seats: group.seats.sort(compareSeatResources),
103
+ }))
104
+ .sort((a, b) => a.sortOrder - b.sortOrder || a.label.localeCompare(b.label));
105
+ }
106
+ function parseLayoutSpecFromFlags(flags) {
107
+ const raw = flags?.layoutSpec;
108
+ if (!raw)
109
+ return null;
110
+ const parsed = seatLayoutSpecSchema.safeParse(raw);
111
+ return parsed.success ? parsed.data : null;
112
+ }
113
+ export function seatRows(seats) {
114
+ const byRow = new Map();
115
+ for (const seat of seats) {
116
+ const rowKey = String(flagNumber(seat.flags.row) ?? 0);
117
+ const row = byRow.get(rowKey) ?? [];
118
+ row.push(seat);
119
+ byRow.set(rowKey, row);
120
+ }
121
+ return Array.from(byRow.entries())
122
+ .map(([rowKey, rowSeats]) => ({
123
+ rowKey,
124
+ seats: rowSeats.sort(compareSeatResources),
125
+ }))
126
+ .sort((a, b) => Number(a.rowKey) - Number(b.rowKey) || a.rowKey.localeCompare(b.rowKey));
127
+ }
128
+ export function seatName(seat, messages) {
129
+ const row = flagNumber(seat.flags.row);
130
+ const column = flagString(seat.flags.column);
131
+ if (row && column)
132
+ return `${row}${column}`;
133
+ return seat.label ?? messages.seat;
134
+ }
135
+ export function parentKindFor(kind) {
136
+ return kind === VEHICLE_SEAT_KIND ? VEHICLE_KIND : "";
137
+ }
138
+ export function defaultCapacityFor(kind) {
139
+ return kind === VEHICLE_SEAT_KIND ? 1 : kind === ROOM_KIND ? 2 : 1;
140
+ }
141
+ export function kindLabel(kind, messages) {
142
+ if (kind === ROOM_KIND)
143
+ return messages.rooms;
144
+ if (kind === VEHICLE_SEAT_KIND)
145
+ return messages.vehicleSeats;
146
+ if (kind === "cabin")
147
+ return messages.cabins;
148
+ if (kind === "flight_seat")
149
+ return messages.flightSeats;
150
+ return titleCaseKind(kind);
151
+ }
152
+ export function groupResourcesBySubType(resources) {
153
+ const buckets = new Map();
154
+ for (const resource of resources) {
155
+ const { key, label } = resourceSubTypeKey(resource);
156
+ const bucket = buckets.get(key) ?? { key, label, resources: [] };
157
+ bucket.resources.push(resource);
158
+ buckets.set(key, bucket);
159
+ }
160
+ return Array.from(buckets.values())
161
+ .map((bucket) => ({
162
+ key: bucket.key,
163
+ label: bucket.label,
164
+ resources: bucket.resources,
165
+ count: bucket.resources.length,
166
+ capacity: bucket.resources.reduce((sum, resource) => sum + resource.capacity, 0),
167
+ }))
168
+ .sort((a, b) => (a.label ?? "").localeCompare(b.label ?? "") || a.key.localeCompare(b.key));
169
+ }
170
+ function resourceSubTypeKey(resource) {
171
+ if (resource.refId)
172
+ return { key: `ref:${resource.refId}`, label: resource.refId };
173
+ const label = (resource.label ?? "").trim();
174
+ if (label.length > 0) {
175
+ const prefix = label.match(/^[A-Za-z]+/)?.[0];
176
+ if (prefix)
177
+ return { key: `prefix:${prefix.toUpperCase()}`, label: prefix.toUpperCase() };
178
+ }
179
+ return { key: "other", label: null };
180
+ }
181
+ /**
182
+ * Roll up slot pax vs. resource person-capacity into a single summary
183
+ * the header can render as a coloured pill. `slotPax` is the slot's
184
+ * `initialPax` when finite; if the slot is `unlimited` or has no
185
+ * initial pax we treat it as unbounded and the operator only sees the
186
+ * total resource capacity without a delta.
187
+ */
188
+ export function summarizeResourceCapacity(input) {
189
+ const resourceCapacity = input.resources.reduce((sum, resource) => sum + resource.capacity, 0);
190
+ const slotPax = input.unlimited ? null : (input.slotInitialPax ?? null);
191
+ if (slotPax == null) {
192
+ return {
193
+ resourceCount: input.resources.length,
194
+ resourceCapacity,
195
+ slotPax: null,
196
+ slotRemainingPax: input.unlimited ? null : (input.slotRemainingPax ?? null),
197
+ delta: null,
198
+ status: "unbounded",
199
+ };
200
+ }
201
+ const delta = resourceCapacity - slotPax;
202
+ return {
203
+ resourceCount: input.resources.length,
204
+ resourceCapacity,
205
+ slotPax,
206
+ slotRemainingPax: input.slotRemainingPax ?? null,
207
+ delta,
208
+ status: delta > 0 ? "over" : delta === 0 ? "exact" : "fits",
209
+ };
210
+ }
211
+ export function flagString(value) {
212
+ return typeof value === "string" ? value : null;
213
+ }
214
+ function compareSeatResources(a, b) {
215
+ const aRow = flagNumber(a.flags.row) ?? 0;
216
+ const bRow = flagNumber(b.flags.row) ?? 0;
217
+ const aColumn = flagString(a.flags.column) ?? "";
218
+ const bColumn = flagString(b.flags.column) ?? "";
219
+ return aRow - bRow || aColumn.localeCompare(bColumn) || a.sortOrder - b.sortOrder;
220
+ }
221
+ function titleCaseKind(kind) {
222
+ return kind
223
+ .split(/[_-]/g)
224
+ .filter(Boolean)
225
+ .map((part) => part.slice(0, 1).toUpperCase() + part.slice(1))
226
+ .join(" ");
227
+ }
228
+ function flagNumber(value) {
229
+ if (typeof value === "number" && Number.isFinite(value))
230
+ return value;
231
+ if (typeof value === "string") {
232
+ const parsed = Number(value);
233
+ if (Number.isFinite(parsed))
234
+ return parsed;
235
+ }
236
+ return null;
237
+ }
@@ -0,0 +1,17 @@
1
+ import type { AllocationManifestBooking, AllocationManifestTraveler } from "@voyant-travel/operations-react/availability";
2
+ import type { ReactNode } from "react";
3
+ import type { useAllocationUiMessagesOrDefault } from "../i18n/index.js";
4
+ import { type ResourceCapacitySummary } from "./slot-allocation-model.js";
5
+ export declare function PassengerListPanel({ bookings, sharingGroupLabels, onBookingOpen, renderTravelerActions, messages, }: {
6
+ bookings: AllocationManifestBooking[];
7
+ sharingGroupLabels: Record<string, string>;
8
+ onBookingOpen?: (bookingId: string) => void;
9
+ renderTravelerActions?: (traveler: AllocationManifestTraveler) => ReactNode;
10
+ messages: ReturnType<typeof useAllocationUiMessagesOrDefault>;
11
+ }): import("react/jsx-runtime").JSX.Element;
12
+ export declare function CapacitySummaryBadges({ summary, messages, kind, }: {
13
+ summary: ResourceCapacitySummary;
14
+ messages: ReturnType<typeof useAllocationUiMessagesOrDefault>;
15
+ kind: string;
16
+ }): import("react/jsx-runtime").JSX.Element | null;
17
+ //# sourceMappingURL=slot-allocation-page-panels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot-allocation-page-panels.d.ts","sourceRoot":"","sources":["../../../../src/availability/allocation/components/slot-allocation-page-panels.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,8CAA8C,CAAA;AAWrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kBAAkB,CAAA;AACxE,OAAO,EAAa,KAAK,uBAAuB,EAAE,MAAM,4BAA4B,CAAA;AAGpF,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,yBAAyB,EAAE,CAAA;IACrC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,qBAAqB,CAAC,EAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,SAAS,CAAA;IAC3E,QAAQ,EAAE,UAAU,CAAC,OAAO,gCAAgC,CAAC,CAAA;CAC9D,2CAkIA;AAED,wBAAgB,qBAAqB,CAAC,EACpC,OAAO,EACP,QAAQ,EACR,IAAI,GACL,EAAE;IACD,OAAO,EAAE,uBAAuB,CAAA;IAChC,QAAQ,EAAE,UAAU,CAAC,OAAO,gCAAgC,CAAC,CAAA;IAC7D,IAAI,EAAE,MAAM,CAAA;CACb,kDAwBA"}
@@ -0,0 +1,27 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Badge, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@voyant-travel/ui/components";
4
+ import { Accessibility, Crown, Users, UtensilsCrossed } from "lucide-react";
5
+ import { kindLabel } from "./slot-allocation-model.js";
6
+ import { paymentStatusChipClass, paymentStatusTooltip } from "./slot-allocation-shared.js";
7
+ export function PassengerListPanel({ bookings, sharingGroupLabels, onBookingOpen, renderTravelerActions, messages, }) {
8
+ const travelerCount = bookings.reduce((sum, booking) => sum + booking.travelers.length, 0);
9
+ const hasActions = Boolean(renderTravelerActions);
10
+ return (_jsxs("section", { className: "flex flex-col gap-3", children: [_jsx("header", { className: "flex flex-wrap items-center justify-between gap-3", children: _jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx(Users, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": "true" }), _jsxs("div", { className: "min-w-0", children: [_jsx("h2", { className: "font-semibold text-sm", children: messages.exportPassengers }), _jsxs("p", { className: "text-xs text-muted-foreground", children: [bookings.length, " ", messages.booking.toLowerCase(), " \u00B7 ", travelerCount, " ", messages.travelers.toLowerCase()] })] })] }) }), travelerCount === 0 ? (_jsx("div", { className: "rounded-md border border-dashed px-4 py-6 text-sm text-muted-foreground", children: messages.passengerListEmpty })) : (_jsx("div", { className: "flex flex-col gap-4", children: bookings.map((booking) => (_jsxs("section", { className: "overflow-hidden rounded-md border", children: [_jsxs("header", { className: "flex flex-wrap items-center justify-between gap-2 bg-muted/40 px-3 py-2", children: [_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-2", children: [booking.bookingSequence > 0 ? (_jsxs("span", { className: "text-muted-foreground text-xs tabular-nums", "aria-hidden": "true", children: ["(", booking.bookingSequence, ")"] })) : null, onBookingOpen ? (_jsx("button", { type: "button", onClick: () => onBookingOpen(booking.id), className: "truncate font-medium text-sm hover:underline", children: booking.bookingNumber })) : (_jsx("span", { className: "truncate font-medium text-sm", children: booking.bookingNumber })), _jsx(Badge, { variant: "outline", className: "text-[10px]", children: booking.status }), _jsx(Badge, { variant: "outline", className: paymentStatusChipClass(booking.paymentStatus), title: paymentStatusTooltip(booking.paymentStatus, messages), children: messages.paymentStatusLabels[booking.paymentStatus] })] }), _jsxs(Badge, { variant: "secondary", className: "text-[10px]", children: [booking.travelers.length, "/", booking.pax ?? booking.travelers.length] })] }), _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: messages.travelers }), _jsx(TableHead, { className: "w-40", children: messages.sharingGroup }), _jsx(TableHead, { className: "w-40", children: messages.resources }), hasActions ? _jsx(TableHead, { className: "w-12" }) : null] }) }), _jsx(TableBody, { children: booking.travelers.map((traveler) => (_jsxs(TableRow, { children: [_jsx(TableCell, { children: _jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-1.5", children: [traveler.isLeadTraveler ? (_jsx(Crown, { className: "size-3.5 shrink-0 text-amber-500", "aria-label": messages.lead })) : null, _jsx("span", { className: "truncate font-medium text-sm", children: traveler.fullName }), traveler.isPrimary ? (_jsx(Badge, { variant: "outline", className: "text-[10px]", children: messages.lead })) : null, traveler.travelerCategory ? (_jsx(Badge, { variant: "secondary", className: "text-[10px]", children: traveler.travelerCategory })) : null, traveler.hasAccessibilityNeeds ? (_jsx(Accessibility, { className: "size-3.5 shrink-0 text-muted-foreground", "aria-label": messages.accessibility })) : null, traveler.hasDietaryRequirements ? (_jsx(UtensilsCrossed, { className: "size-3.5 shrink-0 text-muted-foreground", "aria-label": messages.dietary })) : null] }) }), _jsx(TableCell, { className: "text-xs text-muted-foreground", children: traveler.sharingGroupId
11
+ ? (sharingGroupLabels[traveler.sharingGroupId] ?? messages.sharingGroup)
12
+ : "—" }), _jsx(TableCell, { className: "text-xs text-muted-foreground", children: [traveler.roomTypeId, traveler.bedPreference]
13
+ .filter(Boolean)
14
+ .join(" · ") || "—" }), hasActions ? (_jsx(TableCell, { className: "text-right", children: renderTravelerActions?.(traveler) })) : null] }, traveler.id))) })] })] }, booking.id))) }))] }));
15
+ }
16
+ export function CapacitySummaryBadges({ summary, messages, kind, }) {
17
+ if (summary.resourceCount === 0 && summary.slotPax == null)
18
+ return null;
19
+ // i18n-literal-ok numeric layout with separator
20
+ const slotLabel = summary.slotPax == null
21
+ ? messages.slotCapacityUnlimited
22
+ : `${summary.slotRemainingPax ?? 0} of ${summary.slotPax}`;
23
+ const resourceLabel = summary.slotPax == null
24
+ ? String(summary.resourceCapacity)
25
+ : `${summary.resourceCapacity} of ${summary.slotPax}`;
26
+ return (_jsxs("span", { className: "contents", "data-kind": kind, title: kindLabel(kind, messages), children: [_jsxs(Badge, { variant: "outline", className: "gap-1", children: [_jsx(Users, { className: "size-3", "aria-hidden": "true" }), messages.slotCapacityLabel, ": ", slotLabel] }), _jsxs(Badge, { variant: "outline", className: "gap-1", children: [messages.resourceCapacityLabel, ": ", resourceLabel] })] }));
27
+ }
@@ -0,0 +1,51 @@
1
+ import { type AllocationManifestTraveler, type SlotAllocationManifest } from "@voyant-travel/operations-react/availability";
2
+ import { type ReactNode } from "react";
3
+ export interface SlotAllocationPageRenderContext {
4
+ slotId: string;
5
+ tabId: string;
6
+ kind: string;
7
+ allocationKind: string;
8
+ manifest: SlotAllocationManifest;
9
+ travelers: AllocationManifestTraveler[];
10
+ allocationKinds: string[];
11
+ }
12
+ export interface SlotAllocationPageExtraTab {
13
+ id: string;
14
+ label: ReactNode;
15
+ icon?: ReactNode;
16
+ render: (context: SlotAllocationPageRenderContext) => ReactNode;
17
+ }
18
+ export interface SlotAllocationPageProps {
19
+ slotId: string;
20
+ className?: string;
21
+ onBack?: () => void;
22
+ /**
23
+ * Fired when the operator clicks a booking number on an allocation
24
+ * chip. The host owns the side-panel / drawer / route — this hook
25
+ * just supplies the booking id. When omitted, booking numbers render
26
+ * as plain text.
27
+ */
28
+ onBookingOpen?: (bookingId: string) => void;
29
+ renderExtraActions?: (context: {
30
+ slotId: string;
31
+ kind: string;
32
+ }) => ReactNode;
33
+ onCreateBooking?: (input: {
34
+ slotId: string;
35
+ productId: string;
36
+ }) => void;
37
+ renderTravelerActions?: (traveler: AllocationManifestTraveler) => ReactNode;
38
+ renderHeaderEnd?: (context: SlotAllocationPageRenderContext) => ReactNode;
39
+ renderBefore?: (context: SlotAllocationPageRenderContext) => ReactNode;
40
+ renderAfter?: (context: SlotAllocationPageRenderContext) => ReactNode;
41
+ extraTabs?: SlotAllocationPageExtraTab[];
42
+ /**
43
+ * Drop the top-level page header (title + back arrow). The host is
44
+ * expected to render its own. Capacity badges + the actions cluster
45
+ * stay as an inline toolbar above the kind tabs so the body is
46
+ * still self-sufficient when embedded.
47
+ */
48
+ embed?: boolean;
49
+ }
50
+ export declare function SlotAllocationPage({ slotId, className, onBack, onBookingOpen, renderExtraActions, onCreateBooking, renderTravelerActions, renderHeaderEnd, renderBefore, renderAfter, extraTabs, embed, }: SlotAllocationPageProps): import("react/jsx-runtime").JSX.Element;
51
+ //# sourceMappingURL=slot-allocation-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot-allocation-page.d.ts","sourceRoot":"","sources":["../../../../src/availability/allocation/components/slot-allocation-page.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,0BAA0B,EAE/B,KAAK,sBAAsB,EAO5B,MAAM,8CAA8C,CAAA;AAGrD,OAAO,EAAkB,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAA;AAmBzE,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,sBAAsB,CAAA;IAChC,SAAS,EAAE,0BAA0B,EAAE,CAAA;IACvC,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,SAAS,CAAA;IAChB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,MAAM,EAAE,CAAC,OAAO,EAAE,+BAA+B,KAAK,SAAS,CAAA;CAChE;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,SAAS,CAAA;IAC7E,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACxE,qBAAqB,CAAC,EAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,SAAS,CAAA;IAC3E,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,+BAA+B,KAAK,SAAS,CAAA;IACzE,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,+BAA+B,KAAK,SAAS,CAAA;IACtE,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,+BAA+B,KAAK,SAAS,CAAA;IACrE,SAAS,CAAC,EAAE,0BAA0B,EAAE,CAAA;IACxC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,SAAS,EACT,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,SAAc,EACd,KAAa,GACd,EAAE,uBAAuB,2CA8ZzB"}
@@ -0,0 +1,217 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useQuery } from "@tanstack/react-query";
4
+ import { getSlotQueryOptions, useAllocationAutomationMutation, useAllocationResourceMutation, useAssignTravelerAllocationMutation, useProductResourceTemplates, useSlotAllocation, useVoyantAvailabilityContext, } from "@voyant-travel/operations-react/availability";
5
+ import { Button, cn, Tabs, TabsList, TabsTrigger } from "@voyant-travel/ui/components";
6
+ import { Armchair, ArrowLeft, Bed, BookOpen, Plus, Sparkles, Users, Wand2 } from "lucide-react";
7
+ import { useMemo, useState } from "react";
8
+ import { useAllocationUiMessagesOrDefault } from "../i18n/index.js";
9
+ import { AddResourceDialog } from "./slot-allocation-add-resource-dialog.js";
10
+ import { collectOccupants, defaultCapacityFor, deriveAllocationKinds, kindLabel, parentKindFor, ROOM_KIND, summarizeResourceCapacity, VEHICLE_SEAT_KIND, } from "./slot-allocation-model.js";
11
+ import { CapacitySummaryBadges, PassengerListPanel } from "./slot-allocation-page-panels.js";
12
+ import { ResourceColumnsView } from "./slot-allocation-resource-view.js";
13
+ import { VehicleSeatsView } from "./slot-allocation-seat-view.js";
14
+ export function SlotAllocationPage({ slotId, className, onBack, onBookingOpen, renderExtraActions, onCreateBooking, renderTravelerActions, renderHeaderEnd, renderBefore, renderAfter, extraTabs = [], embed = false, }) {
15
+ const messages = useAllocationUiMessagesOrDefault();
16
+ const availabilityClient = useVoyantAvailabilityContext();
17
+ const allocation = useSlotAllocation({ slotId });
18
+ const slotRowQuery = useQuery(getSlotQueryOptions(availabilityClient, slotId));
19
+ const slotRow = slotRowQuery.data?.data;
20
+ const resourceMutation = useAllocationResourceMutation(slotId);
21
+ const assignMutation = useAssignTravelerAllocationMutation(slotId);
22
+ const automationMutation = useAllocationAutomationMutation(slotId);
23
+ const [selectedKind, setSelectedKind] = useState(ROOM_KIND);
24
+ const [addingResource, setAddingResource] = useState(false);
25
+ const [resourceLabel, setResourceLabel] = useState("");
26
+ const [resourceCapacity, setResourceCapacity] = useState(2);
27
+ const [resourceOptionId, setResourceOptionId] = useState(null);
28
+ const [error, setError] = useState(null);
29
+ const data = allocation.data?.data;
30
+ const templates = useProductResourceTemplates({
31
+ productId: data?.slot.productId,
32
+ enabled: Boolean(data?.slot.productId),
33
+ });
34
+ const travelers = useMemo(() => {
35
+ const out = [];
36
+ for (const booking of data?.bookings ?? []) {
37
+ if (booking.status === "cancelled")
38
+ continue;
39
+ out.push(...booking.travelers);
40
+ }
41
+ return out;
42
+ }, [data?.bookings]);
43
+ const allocationKinds = useMemo(() => {
44
+ return deriveAllocationKinds({
45
+ resources: data?.resources ?? [],
46
+ templateOptions: templates.data?.data ?? [],
47
+ });
48
+ }, [data?.resources, templates.data?.data]);
49
+ // option_id → option name, used by ResourceColumnsView to badge each
50
+ // resource row with the option it's tied to (Standard double, etc.).
51
+ const optionNamesById = useMemo(() => {
52
+ const map = new Map();
53
+ for (const option of templates.data?.data ?? []) {
54
+ map.set(option.id, option.name);
55
+ }
56
+ return map;
57
+ }, [templates.data?.data]);
58
+ const visibleExtraTabs = extraTabs.filter((tab) => !allocationKinds.includes(tab.id));
59
+ const selectedAllocationKind = allocationKinds.includes(selectedKind) ? selectedKind : undefined;
60
+ const selectedExtraTab = selectedAllocationKind
61
+ ? undefined
62
+ : (visibleExtraTabs.find((tab) => tab.id === selectedKind) ??
63
+ (allocationKinds.length === 0 ? visibleExtraTabs[0] : undefined));
64
+ const activeAllocationKind = selectedExtraTab
65
+ ? undefined
66
+ : (selectedAllocationKind ?? allocationKinds[0]);
67
+ const activeKind = activeAllocationKind ?? ROOM_KIND;
68
+ const activeTabId = selectedExtraTab?.id ?? activeKind;
69
+ const hasAllocationView = Boolean(activeAllocationKind);
70
+ const hasTabs = allocationKinds.length > 0 || visibleExtraTabs.length > 0;
71
+ const hasPassengerOnlyView = allocationKinds.length === 0 && visibleExtraTabs.length === 0;
72
+ const resources = useMemo(() => (data?.resources ?? []).filter((resource) => resource.kind === activeKind), [data?.resources, activeKind]);
73
+ const parentResources = useMemo(() => (data?.resources ?? []).filter((resource) => resource.kind === parentKindFor(activeKind)), [data?.resources, activeKind]);
74
+ const occupants = useMemo(() => collectOccupants(travelers, resources, activeKind), [travelers, resources, activeKind]);
75
+ const capacitySummary = useMemo(() => summarizeResourceCapacity({
76
+ resources,
77
+ slotInitialPax: slotRow?.initialPax ?? null,
78
+ slotRemainingPax: slotRow?.remainingPax ?? null,
79
+ unlimited: slotRow?.unlimited ?? false,
80
+ }), [resources, slotRow?.initialPax, slotRow?.remainingPax, slotRow?.unlimited]);
81
+ const projectedSummary = useMemo(() => {
82
+ if (!addingResource)
83
+ return null;
84
+ const capacityNumber = Number.isFinite(resourceCapacity) ? Math.max(0, resourceCapacity) : 0;
85
+ return summarizeResourceCapacity({
86
+ resources: [
87
+ ...resources,
88
+ {
89
+ id: "__projected__",
90
+ slotId,
91
+ kind: activeKind,
92
+ label: null,
93
+ refType: null,
94
+ refId: null,
95
+ capacity: capacityNumber,
96
+ flags: {},
97
+ parentId: null,
98
+ sortOrder: 0,
99
+ createdAt: new Date().toISOString(),
100
+ updatedAt: new Date().toISOString(),
101
+ },
102
+ ],
103
+ slotInitialPax: slotRow?.initialPax ?? null,
104
+ slotRemainingPax: slotRow?.remainingPax ?? null,
105
+ unlimited: slotRow?.unlimited ?? false,
106
+ });
107
+ }, [
108
+ addingResource,
109
+ resourceCapacity,
110
+ resources,
111
+ slotId,
112
+ activeKind,
113
+ slotRow?.initialPax,
114
+ slotRow?.remainingPax,
115
+ slotRow?.unlimited,
116
+ ]);
117
+ async function assignTraveler(travelerId, resourceId) {
118
+ setError(null);
119
+ try {
120
+ await assignMutation.mutateAsync({ travelerId, kind: activeKind, resourceId });
121
+ }
122
+ catch (err) {
123
+ setError(err instanceof Error ? err.message : messages.allocationFailed);
124
+ }
125
+ }
126
+ async function createResource(event) {
127
+ event.preventDefault();
128
+ setError(null);
129
+ try {
130
+ await resourceMutation.create.mutateAsync({
131
+ kind: activeKind,
132
+ label: resourceLabel.trim() || null,
133
+ capacity: resourceCapacity,
134
+ refType: resourceOptionId ? "option" : null,
135
+ refId: resourceOptionId,
136
+ });
137
+ setResourceLabel("");
138
+ setResourceCapacity(defaultCapacityFor(activeKind));
139
+ setResourceOptionId(null);
140
+ setAddingResource(false);
141
+ }
142
+ catch (err) {
143
+ setError(err instanceof Error ? err.message : messages.createResourceFailed);
144
+ }
145
+ }
146
+ async function editResource(resourceId, input) {
147
+ setError(null);
148
+ try {
149
+ await resourceMutation.update.mutateAsync({ resourceId, input });
150
+ }
151
+ catch (err) {
152
+ setError(err instanceof Error ? err.message : messages.updateResourceFailed);
153
+ throw err;
154
+ }
155
+ }
156
+ async function generateResources() {
157
+ setError(null);
158
+ try {
159
+ // Materialize the full configured inventory across all kinds (e.g. all 20
160
+ // doubles + 20 singles + 6 triples) in one click, rather than the
161
+ // pax-derived single-kind auto-materialize.
162
+ await automationMutation.materializeTemplates.mutateAsync();
163
+ }
164
+ catch (err) {
165
+ setError(err instanceof Error ? err.message : messages.generateResourcesFailed);
166
+ }
167
+ }
168
+ async function autoAllocate() {
169
+ setError(null);
170
+ try {
171
+ await automationMutation.autoAllocate.mutateAsync({ kind: activeKind });
172
+ }
173
+ catch (err) {
174
+ setError(err instanceof Error ? err.message : messages.autoAllocateFailed);
175
+ }
176
+ }
177
+ if (allocation.isPending) {
178
+ return (_jsx("div", { className: cn("p-6 text-sm text-muted-foreground", className), children: messages.loading }));
179
+ }
180
+ // Only short-circuit when we genuinely have no data to render
181
+ // against. The page intentionally renders even when both resources
182
+ // and travelers are empty so operators can seed the per-departure
183
+ // resource block before any bookings exist — setting up the room
184
+ // block before selling is the canonical flow. The per-kind resource
185
+ // view handles its own empty state (and the "Add resource" /
186
+ // "Generate resources" affordances stay reachable).
187
+ if (!data) {
188
+ return (_jsxs("div", { className: cn("flex flex-col items-center justify-center gap-3 p-8", className), children: [_jsx(Users, { className: "size-6 text-muted-foreground", "aria-hidden": "true" }), _jsx("p", { className: "text-sm text-muted-foreground", children: messages.empty })] }));
189
+ }
190
+ const isSeatMap = activeKind === VEHICLE_SEAT_KIND;
191
+ const canManuallyAddResource = !isSeatMap;
192
+ const createBookingProductId = data.slot.productId;
193
+ const context = {
194
+ slotId,
195
+ tabId: activeTabId,
196
+ kind: activeTabId,
197
+ allocationKind: activeKind,
198
+ manifest: data,
199
+ travelers,
200
+ allocationKinds,
201
+ };
202
+ const summaryLine = (_jsx("div", { className: "flex flex-wrap items-center gap-2 text-sm text-muted-foreground", children: selectedExtraTab || !hasAllocationView ? null : (_jsx(CapacitySummaryBadges, { summary: capacitySummary, messages: messages, kind: activeKind })) }));
203
+ const actionsCluster = (_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [selectedExtraTab || !hasAllocationView
204
+ ? null
205
+ : renderExtraActions?.({ slotId, kind: activeKind }), onCreateBooking && createBookingProductId ? (_jsxs(Button, { variant: "outline", onClick: () => onCreateBooking({ slotId, productId: createBookingProductId }), children: [_jsx(BookOpen, { "data-icon": "inline-start", "aria-hidden": "true" }), messages.createBooking] })) : null, selectedExtraTab || !hasAllocationView ? null : resources.length === 0 ? (_jsxs(Button, { variant: "outline", onClick: () => void generateResources(), disabled: automationMutation.materializeTemplates.isPending, children: [_jsx(Sparkles, { "data-icon": "inline-start", "aria-hidden": "true" }), automationMutation.materializeTemplates.isPending
206
+ ? messages.generatingResources
207
+ : messages.generateResources] })) : (_jsxs(Button, { variant: "outline", onClick: () => void autoAllocate(), disabled: automationMutation.autoAllocate.isPending, children: [_jsx(Wand2, { "data-icon": "inline-start", "aria-hidden": "true" }), automationMutation.autoAllocate.isPending
208
+ ? messages.autoAllocating
209
+ : messages.autoAllocate] })), !selectedExtraTab && hasAllocationView && canManuallyAddResource ? (_jsxs(Button, { variant: "outline", onClick: () => {
210
+ setResourceLabel("");
211
+ setResourceCapacity(defaultCapacityFor(activeKind));
212
+ setResourceOptionId(null);
213
+ setError(null);
214
+ setAddingResource(true);
215
+ }, children: [_jsx(Plus, { "data-icon": "inline-start", "aria-hidden": "true" }), messages.addResource] })) : null] }));
216
+ return (_jsxs("div", { className: cn("flex flex-col gap-4", embed ? null : "p-6", className), children: [embed ? (_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [summaryLine, actionsCluster] })) : (_jsxs("div", { className: "flex flex-col gap-3 md:flex-row md:items-start md:justify-between", children: [_jsxs("div", { className: "flex items-start gap-3", children: [onBack ? (_jsx(Button, { variant: "ghost", size: "icon", onClick: onBack, "aria-label": messages.back, children: _jsx(ArrowLeft, { "data-icon": true, "aria-hidden": "true" }) })) : null, _jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-semibold", children: messages.pageTitle }), _jsx("div", { className: "mt-1", children: summaryLine })] })] }), _jsxs("div", { className: "flex flex-col gap-3 md:items-end", children: [renderHeaderEnd?.(context), actionsCluster] })] })), renderBefore?.(context), hasTabs ? (_jsx(Tabs, { value: activeTabId, onValueChange: setSelectedKind, children: _jsxs(TabsList, { className: "flex h-auto w-fit flex-wrap justify-start", children: [allocationKinds.map((kind) => (_jsxs(TabsTrigger, { value: kind, className: "gap-2", children: [kind === VEHICLE_SEAT_KIND ? (_jsx(Armchair, { className: "size-4", "aria-hidden": "true" })) : (_jsx(Bed, { className: "size-4", "aria-hidden": "true" })), kindLabel(kind, messages)] }, kind))), visibleExtraTabs.map((tab) => (_jsxs(TabsTrigger, { value: tab.id, className: "gap-2", children: [tab.icon, tab.label] }, tab.id)))] }) })) : null, selectedExtraTab ? (selectedExtraTab.render(context)) : hasPassengerOnlyView ? (_jsx(PassengerListPanel, { bookings: data.bookings, sharingGroupLabels: data.sharingGroupLabels, onBookingOpen: onBookingOpen, renderTravelerActions: renderTravelerActions, messages: messages })) : !hasAllocationView ? (_jsxs("div", { className: "flex flex-col items-center justify-center gap-3 rounded-md border border-dashed p-8 text-center", children: [_jsx(Users, { className: "size-6 text-muted-foreground", "aria-hidden": "true" }), _jsx("p", { className: "text-sm text-muted-foreground", children: messages.noAllocationsToManage })] })) : (_jsxs(_Fragment, { children: [error ? (_jsx("div", { className: "rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive", children: error })) : null, canManuallyAddResource ? (_jsx(AddResourceDialog, { open: addingResource, onOpenChange: setAddingResource, onSubmit: createResource, activeKind: activeKind, resourceLabel: resourceLabel, onResourceLabelChange: setResourceLabel, resourceCapacity: resourceCapacity, onResourceCapacityChange: setResourceCapacity, resourceOptionId: resourceOptionId, onResourceOptionIdChange: setResourceOptionId, resourceOptions: templates.data?.data ?? [], projectedSummary: projectedSummary, createPending: resourceMutation.create.isPending, messages: messages })) : null, isSeatMap ? (_jsx(VehicleSeatsView, { seats: resources, vehicles: parentResources, occupants: occupants, sharingGroupLabels: data.sharingGroupLabels, onAssignTraveler: (travelerId, resourceId) => void assignTraveler(travelerId, resourceId), onUnassignTraveler: (travelerId) => void assignTraveler(travelerId, null), onBookingOpen: onBookingOpen, renderTravelerActions: renderTravelerActions })) : (_jsx(ResourceColumnsView, { kind: activeKind, resources: resources, travelers: travelers, occupants: occupants, sharingGroupLabels: data.sharingGroupLabels, optionNamesById: optionNamesById, onAssignTraveler: (travelerId, resourceId) => void assignTraveler(travelerId, resourceId), onUnassignTraveler: (travelerId) => void assignTraveler(travelerId, null), onRemoveResource: (resourceId) => void resourceMutation.remove.mutateAsync(resourceId), onEditResource: editResource, onBookingOpen: onBookingOpen, renderTravelerActions: renderTravelerActions }))] })), renderAfter?.(context)] }));
217
+ }
@@ -0,0 +1,28 @@
1
+ import type { AllocationManifestTraveler, AllocationResource } from "@voyant-travel/operations-react/availability";
2
+ import { type ReactNode } from "react";
3
+ import type { EditResourceInput } from "./slot-allocation-resource-view.js";
4
+ export declare function ResourceRow({ kind, resource, seated, unallocated, sharingGroupLabels, optionName, isEditing, isFull, canEdit, onBeginEdit, onCancelEdit, onSaveEdit, onAssignTraveler, onUnassignTraveler, onRemoveResource, onBookingOpen, }: {
5
+ kind: string;
6
+ resource: AllocationResource;
7
+ seated: AllocationManifestTraveler[];
8
+ unallocated: AllocationManifestTraveler[];
9
+ optionName?: string | null;
10
+ sharingGroupLabels: Record<string, string>;
11
+ isEditing: boolean;
12
+ isFull: boolean;
13
+ canEdit: boolean;
14
+ onBeginEdit: () => void;
15
+ onCancelEdit: () => void;
16
+ onSaveEdit: (input: EditResourceInput) => Promise<void>;
17
+ onAssignTraveler: (travelerId: string) => void;
18
+ onUnassignTraveler: (travelerId: string) => void;
19
+ onRemoveResource: () => void;
20
+ onBookingOpen?: (bookingId: string) => void;
21
+ }): import("react/jsx-runtime").JSX.Element;
22
+ export declare function UnallocatedTravelersTable({ travelers, sharingGroupLabels, onBookingOpen, renderActions, }: {
23
+ travelers: AllocationManifestTraveler[];
24
+ sharingGroupLabels: Record<string, string>;
25
+ onBookingOpen?: (bookingId: string) => void;
26
+ renderActions?: (traveler: AllocationManifestTraveler) => ReactNode;
27
+ }): import("react/jsx-runtime").JSX.Element;
28
+ //# sourceMappingURL=slot-allocation-resource-view-rows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot-allocation-resource-view-rows.d.ts","sourceRoot":"","sources":["../../../../src/availability/allocation/components/slot-allocation-resource-view-rows.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,0BAA0B,EAE1B,kBAAkB,EACnB,MAAM,8CAA8C,CAAA;AAkCrD,OAAO,EAAkB,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAA;AAI3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAG3E,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,SAAS,EACT,MAAM,EACN,OAAO,EACP,WAAW,EACX,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,GACd,EAAE;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,MAAM,EAAE,0BAA0B,EAAE,CAAA;IACpC,WAAW,EAAE,0BAA0B,EAAE,CAAA;IACzC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,UAAU,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvD,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9C,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAChD,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;CAC5C,2CAwFA;AA8OD,wBAAgB,yBAAyB,CAAC,EACxC,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,aAAa,GACd,EAAE;IACD,SAAS,EAAE,0BAA0B,EAAE,CAAA;IACvC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,SAAS,CAAA;CACpE,2CAyEA"}