@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,90 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Badge, Button, Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, cn, Input, Label, Popover, PopoverContent, PopoverTrigger, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@voyant-travel/ui/components";
4
+ import { Accessibility, Bed, Crown, Pencil, Plus, Trash2, UserMinus, UtensilsCrossed, X, } from "lucide-react";
5
+ import { useEffect, useState } from "react";
6
+ import { useAllocationUiMessagesOrDefault } from "../i18n/index.js";
7
+ import { kindLabel } from "./slot-allocation-model.js";
8
+ import { paymentStatusChipClass, paymentStatusTooltip } from "./slot-allocation-shared.js";
9
+ export function ResourceRow({ kind, resource, seated, unallocated, sharingGroupLabels, optionName, isEditing, isFull, canEdit, onBeginEdit, onCancelEdit, onSaveEdit, onAssignTraveler, onUnassignTraveler, onRemoveResource, onBookingOpen, }) {
10
+ const messages = useAllocationUiMessagesOrDefault();
11
+ const overCapacity = seated.length > resource.capacity;
12
+ if (isEditing && canEdit) {
13
+ return (_jsx(TableRow, { className: "bg-muted/30", children: _jsx(TableCell, { colSpan: 4, className: "whitespace-normal", children: _jsx(ResourceEditForm, { kind: kind, resource: resource, minCapacity: Math.max(1, seated.length), onCancel: onCancelEdit, onSave: onSaveEdit }) }) }));
14
+ }
15
+ return (_jsxs(TableRow, { children: [_jsx(TableCell, { className: "font-medium", children: _jsxs("span", { className: "inline-flex items-center gap-2", children: [_jsx(Bed, { className: "size-4 text-muted-foreground", "aria-hidden": "true" }), resource.label ?? kindLabel(kind, messages), optionName ? (_jsx(Badge, { variant: "secondary", className: "text-[10px] font-normal", children: optionName })) : null] }) }), _jsx(TableCell, { className: "text-center", children: _jsxs(Badge, { variant: overCapacity ? "destructive" : "outline", children: [seated.length, "/", resource.capacity] }) }), _jsx(TableCell, { className: "whitespace-normal py-2", children: _jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [seated.map((traveler) => (_jsx(TravelerChip, { traveler: traveler, sharingGroupLabel: traveler.sharingGroupId
16
+ ? (sharingGroupLabels[traveler.sharingGroupId] ?? null)
17
+ : null, onUnassign: () => onUnassignTraveler(traveler.id), onBookingOpen: onBookingOpen }, traveler.id))), !isFull ? (_jsx(AssignTravelerPopover, { unallocated: unallocated, seatedBookingIds: new Set(seated.map((t) => t.bookingId)), onSelect: (travelerId) => onAssignTraveler(travelerId) })) : null] }) }), _jsx(TableCell, { className: "text-right", children: _jsxs("div", { className: "inline-flex items-center justify-end gap-1", children: [canEdit ? (_jsx(Button, { type: "button", variant: "ghost", size: "icon", onClick: onBeginEdit, "aria-label": messages.editResource, children: _jsx(Pencil, { className: "size-4", "aria-hidden": "true" }) })) : null, _jsx(Button, { type: "button", variant: "ghost", size: "icon", onClick: onRemoveResource, "aria-label": messages.remove, children: _jsx(Trash2, { className: "size-4", "aria-hidden": "true" }) })] }) })] }));
18
+ }
19
+ function TravelerChip({ traveler, sharingGroupLabel, onUnassign, onBookingOpen, }) {
20
+ const messages = useAllocationUiMessagesOrDefault();
21
+ return (_jsxs("span", { className: cn("inline-flex items-center gap-1 rounded-full border bg-background px-2 py-0.5 text-xs", paymentStatusChipClass(traveler.paymentStatus)), title: paymentStatusTooltip(traveler.paymentStatus, messages), children: [traveler.bookingSequence > 0 ? (_jsxs("span", { className: "text-muted-foreground tabular-nums", "aria-hidden": "true", children: ["(", traveler.bookingSequence, ")"] })) : null, _jsx("span", { className: "truncate font-medium", title: sharingGroupLabel ?? undefined, children: traveler.fullName }), onBookingOpen ? (_jsx("button", { type: "button", onClick: () => onBookingOpen(traveler.bookingId), className: "text-muted-foreground hover:text-foreground hover:underline", children: traveler.bookingNumber })) : (_jsx("span", { className: "text-muted-foreground", children: traveler.bookingNumber })), _jsx(Button, { type: "button", variant: "ghost", size: "icon", className: "size-4 rounded-full", onClick: onUnassign, "aria-label": `${messages.remove}: ${traveler.fullName}`, children: _jsx(X, { className: "size-3", "aria-hidden": "true" }) })] }));
22
+ }
23
+ function AssignTravelerPopover({ unallocated, seatedBookingIds, onSelect, }) {
24
+ const messages = useAllocationUiMessagesOrDefault();
25
+ const [open, setOpen] = useState(false);
26
+ const disabled = unallocated.length === 0;
27
+ const sameBooking = seatedBookingIds
28
+ ? unallocated.filter((t) => seatedBookingIds.has(t.bookingId))
29
+ : [];
30
+ const others = seatedBookingIds
31
+ ? unallocated.filter((t) => !seatedBookingIds.has(t.bookingId))
32
+ : unallocated;
33
+ const renderItem = (traveler) => (_jsxs(CommandItem, { value: `${traveler.fullName} ${traveler.bookingNumber}`, onSelect: () => {
34
+ onSelect(traveler.id);
35
+ setOpen(false);
36
+ }, children: [_jsx(UserMinus, { className: "mr-2 size-4 text-muted-foreground", "aria-hidden": "true" }), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "font-medium", children: traveler.fullName }), _jsx("span", { className: "text-xs text-muted-foreground", children: traveler.bookingNumber })] })] }, traveler.id));
37
+ return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { render: _jsxs(Button, { type: "button", variant: "outline", size: "sm", className: "h-7 gap-1 px-2 text-xs", disabled: disabled, "aria-label": messages.assignTraveler, title: disabled ? messages.assignTravelerEmpty : messages.assignTraveler, children: [_jsx(Plus, { className: "size-3.5", "aria-hidden": "true" }), messages.assignTraveler] }) }), _jsx(PopoverContent, { className: "w-72 p-0", align: "start", children: _jsxs(Command, { children: [_jsx(CommandInput, { placeholder: messages.assignTravelerSearch }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: messages.assignTravelerEmpty }), sameBooking.length > 0 ? (_jsx(CommandGroup, { heading: messages.assignTravelerSameBooking, children: sameBooking.map(renderItem) })) : null, others.length > 0 ? (_jsx(CommandGroup, { heading: sameBooking.length > 0 ? messages.assignTravelerOthers : undefined, children: others.map(renderItem) })) : null] })] }) })] }));
38
+ }
39
+ function ResourceEditForm({ kind, resource, minCapacity, onCancel, onSave, }) {
40
+ const messages = useAllocationUiMessagesOrDefault();
41
+ const [label, setLabel] = useState(resource.label ?? "");
42
+ const [capacity, setCapacity] = useState(resource.capacity);
43
+ const [saving, setSaving] = useState(false);
44
+ useEffect(() => {
45
+ setLabel(resource.label ?? "");
46
+ setCapacity(resource.capacity);
47
+ }, [resource.label, resource.capacity]);
48
+ async function submit(event) {
49
+ event.preventDefault();
50
+ const trimmed = label.trim();
51
+ const nextCapacity = Math.max(minCapacity, Math.floor(capacity) || minCapacity);
52
+ setSaving(true);
53
+ try {
54
+ await onSave({
55
+ label: trimmed.length === 0 ? null : trimmed,
56
+ capacity: nextCapacity,
57
+ });
58
+ }
59
+ finally {
60
+ setSaving(false);
61
+ }
62
+ }
63
+ return (_jsxs("form", { className: "grid gap-2 sm:grid-cols-[1fr_8rem_auto_auto] sm:items-end", onSubmit: submit, "aria-label": messages.editResource, children: [_jsxs("div", { className: "grid gap-1", children: [_jsx(Label, { htmlFor: `edit-${resource.id}-label`, className: "text-xs", children: messages.resourceLabel }), _jsx(Input, { id: `edit-${resource.id}-label`, value: label, onChange: (event) => setLabel(event.target.value), placeholder: kindLabel(kind, messages) })] }), _jsxs("div", { className: "grid gap-1", children: [_jsx(Label, { htmlFor: `edit-${resource.id}-capacity`, className: "text-xs", children: messages.resourceCapacity }), _jsx(Input, { id: `edit-${resource.id}-capacity`, type: "number", min: minCapacity, value: capacity, onChange: (event) => setCapacity(Number(event.target.value) || minCapacity) })] }), _jsx(Button, { type: "submit", size: "sm", disabled: saving, children: messages.saveResource }), _jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: onCancel, disabled: saving, children: messages.cancel })] }));
64
+ }
65
+ /**
66
+ * Dense table view of unallocated travelers. Replaces the per-row Card
67
+ * tiles, which took multiple line-heights per traveler and made even a
68
+ * small slot scroll. Keeps the same metadata (lead flag, sharing group,
69
+ * accessibility / dietary icons, booking number) but in a single row.
70
+ */
71
+ /**
72
+ * Lighter tint than the chip — the row already has a left-column status
73
+ * bar via the booking-number cell, and a full-width tint would fight
74
+ * the table's striping. Just enough color to skim a denied row.
75
+ */
76
+ function paymentStatusUnallocatedRowClass(status) {
77
+ switch (status) {
78
+ case "paid":
79
+ return "text-emerald-700 dark:text-emerald-300";
80
+ case "partial":
81
+ return "text-amber-700 dark:text-amber-300";
82
+ case "unpaid":
83
+ return "text-rose-700 dark:text-rose-300";
84
+ }
85
+ }
86
+ export function UnallocatedTravelersTable({ travelers, sharingGroupLabels, onBookingOpen, renderActions, }) {
87
+ const messages = useAllocationUiMessagesOrDefault();
88
+ const hasActions = Boolean(renderActions);
89
+ return (_jsx("div", { className: "overflow-hidden rounded-md border", children: _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { className: "bg-muted/40", children: [_jsx(TableHead, { className: "px-3 py-1.5 text-xs", children: messages.travelers }), _jsx(TableHead, { className: "px-3 py-1.5 text-xs", children: "\u00A0" }), hasActions ? _jsx(TableHead, { className: "w-12 px-3 py-1.5" }) : null] }) }), _jsx(TableBody, { children: travelers.map((traveler) => (_jsxs(TableRow, { children: [_jsx(TableCell, { className: "px-3 py-1.5", children: _jsxs("div", { className: "flex 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.sharingGroupId ? (_jsx(Badge, { variant: "secondary", className: "max-w-full truncate text-[10px]", children: sharingGroupLabels[traveler.sharingGroupId] ?? messages.sharingGroup })) : 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: cn("px-3 py-1.5 text-xs", paymentStatusUnallocatedRowClass(traveler.paymentStatus)), children: onBookingOpen ? (_jsx("button", { type: "button", onClick: () => onBookingOpen(traveler.bookingId), className: "text-muted-foreground hover:text-foreground hover:underline", children: traveler.bookingNumber })) : (_jsx("span", { className: "text-muted-foreground", children: traveler.bookingNumber })) }), hasActions ? (_jsx(TableCell, { className: "px-3 py-1.5 text-right", children: renderActions?.(traveler) })) : null] }, traveler.id))) })] }) }));
90
+ }
@@ -0,0 +1,34 @@
1
+ import type { AllocationManifestTraveler, AllocationResource } from "@voyant-travel/operations-react/availability";
2
+ import { type ReactNode } from "react";
3
+ import { type AllocationOccupants } from "./slot-allocation-model.js";
4
+ export interface EditResourceInput {
5
+ label: string | null;
6
+ capacity: number;
7
+ }
8
+ export declare function ResourceColumnsView({ kind, resources, travelers, occupants, sharingGroupLabels, optionNamesById, onAssignTraveler, onUnassignTraveler, onRemoveResource, onEditResource, onBookingOpen, renderTravelerActions, }: {
9
+ kind: string;
10
+ resources: AllocationResource[];
11
+ travelers: AllocationManifestTraveler[];
12
+ occupants: AllocationOccupants;
13
+ sharingGroupLabels: Record<string, string>;
14
+ /**
15
+ * Map from product_option_id → option name, used to badge each resource
16
+ * row with the option it's tied to (when refType === "option"). Lets
17
+ * operators distinguish "Standard double" rooms from "Junior suite"
18
+ * rooms at a glance. Omit when the host doesn't have option data.
19
+ */
20
+ optionNamesById?: ReadonlyMap<string, string>;
21
+ /** Assign a single unallocated traveler to a specific resource. */
22
+ onAssignTraveler: (travelerId: string, resourceId: string) => void;
23
+ /** Remove a single traveler from their current resource. */
24
+ onUnassignTraveler: (travelerId: string) => void;
25
+ onRemoveResource: (resourceId: string) => void;
26
+ onEditResource?: (resourceId: string, input: EditResourceInput) => Promise<void> | void;
27
+ /**
28
+ * Fired when the operator clicks a booking number on a chip. The
29
+ * host decides whether to open a side panel, navigate, etc.
30
+ */
31
+ onBookingOpen?: (bookingId: string) => void;
32
+ renderTravelerActions?: (traveler: AllocationManifestTraveler) => ReactNode;
33
+ }): import("react/jsx-runtime").JSX.Element;
34
+ //# sourceMappingURL=slot-allocation-resource-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot-allocation-resource-view.d.ts","sourceRoot":"","sources":["../../../../src/availability/allocation/components/slot-allocation-resource-view.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,0BAA0B,EAC1B,kBAAkB,EACnB,MAAM,8CAA8C,CAAA;AAGrD,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAA;AAGhD,OAAO,EAAE,KAAK,mBAAmB,EAA2B,MAAM,4BAA4B,CAAA;AAI9F,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,SAAS,EACT,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,qBAAqB,GACtB,EAAE;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,kBAAkB,EAAE,CAAA;IAC/B,SAAS,EAAE,0BAA0B,EAAE,CAAA;IACvC,SAAS,EAAE,mBAAmB,CAAA;IAC9B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7C,mEAAmE;IACnE,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAClE,4DAA4D;IAC5D,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAChD,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9C,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACvF;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,qBAAqB,CAAC,EAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,SAAS,CAAA;CAC5E,2CAgEA"}
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Table, TableBody, TableHead, TableHeader, TableRow } from "@voyant-travel/ui/components";
4
+ import { Users } from "lucide-react";
5
+ import { useState } from "react";
6
+ import { useAllocationUiMessagesOrDefault } from "../i18n/index.js";
7
+ import { groupResourcesBySubType } from "./slot-allocation-model.js";
8
+ import { ResourceRow, UnallocatedTravelersTable } from "./slot-allocation-resource-view-rows.js";
9
+ import { AllocationColumn } from "./slot-allocation-shared.js";
10
+ export function ResourceColumnsView({ kind, resources, travelers, occupants, sharingGroupLabels, optionNamesById, onAssignTraveler, onUnassignTraveler, onRemoveResource, onEditResource, onBookingOpen, renderTravelerActions, }) {
11
+ const messages = useAllocationUiMessagesOrDefault();
12
+ return (_jsxs("div", { className: "grid gap-4 lg:grid-cols-[minmax(16rem,20rem)_1fr]", children: [_jsx(AllocationColumn, { id: "unallocated", icon: _jsx(Users, { className: "size-4", "aria-hidden": "true" }), title: messages.unallocated, description: messages.unallocatedDescription, count: occupants.unallocated.length, capacity: travelers.length, children: occupants.unallocated.length === 0 ? (_jsx("p", { className: "text-xs text-muted-foreground", children: messages.unallocatedEmpty })) : (_jsx(UnallocatedTravelersTable, { travelers: occupants.unallocated, sharingGroupLabels: sharingGroupLabels, onBookingOpen: onBookingOpen, renderActions: renderTravelerActions })) }), _jsx("div", { className: "flex min-w-0 flex-col gap-6", children: resources.length === 0 ? (_jsx("div", { className: "rounded-md border border-dashed p-6 text-sm text-muted-foreground", children: messages.noResources })) : (groupResourcesBySubType(resources).map((group) => {
13
+ // The grouping function uses the raw `refId` as the label fallback.
14
+ // Resolve product-option ids back to human names so the section
15
+ // header reads "Standard double" instead of "POPT_01KRS8…".
16
+ const resolvedLabel = (group.label ? optionNamesById?.get(group.label) : null) ?? group.label;
17
+ const groupLabel = resolvedLabel ?? messages.resourceOtherGroup;
18
+ return (_jsxs("section", { "aria-label": groupLabel, className: "flex flex-col gap-2", children: [_jsx("header", { className: "flex items-baseline gap-2 border-b pb-1", children: _jsx("h3", { className: "text-sm font-semibold tracking-wide uppercase text-muted-foreground", children: groupLabel }) }), _jsx(ResourceGroupTable, { kind: kind, resources: group.resources, occupants: occupants, unallocated: occupants.unallocated, sharingGroupLabels: sharingGroupLabels, optionNamesById: optionNamesById, onAssignTraveler: onAssignTraveler, onUnassignTraveler: onUnassignTraveler, onRemoveResource: onRemoveResource, onEditResource: onEditResource, onBookingOpen: onBookingOpen })] }, group.key));
19
+ })) })] }));
20
+ }
21
+ function ResourceGroupTable({ kind, resources, occupants, unallocated, sharingGroupLabels, optionNamesById, onAssignTraveler, onUnassignTraveler, onRemoveResource, onEditResource, onBookingOpen, }) {
22
+ const messages = useAllocationUiMessagesOrDefault();
23
+ const [editingId, setEditingId] = useState(null);
24
+ return (_jsx("div", { className: "rounded-md border", children: _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { className: "bg-muted/40", children: [_jsx(TableHead, { className: "w-48", children: messages.resourceLabel }), _jsx(TableHead, { className: "w-20 text-center", children: messages.capacity }), _jsx(TableHead, { children: messages.travelers }), _jsx(TableHead, { className: "w-40 text-right", children: "\u00A0" })] }) }), _jsx(TableBody, { children: resources.map((resource) => {
25
+ const seated = occupants.byResource.get(resource.id) ?? [];
26
+ const isEditing = editingId === resource.id;
27
+ const isFull = seated.length >= resource.capacity;
28
+ return (_jsx(ResourceRow, { kind: kind, resource: resource, seated: seated, unallocated: unallocated, sharingGroupLabels: sharingGroupLabels, optionName: resource.refType === "option" && resource.refId
29
+ ? (optionNamesById?.get(resource.refId) ?? null)
30
+ : null, isEditing: isEditing, isFull: isFull, canEdit: Boolean(onEditResource), onBeginEdit: () => setEditingId(resource.id), onCancelEdit: () => setEditingId(null), onSaveEdit: async (input) => {
31
+ await Promise.resolve(onEditResource?.(resource.id, input));
32
+ setEditingId(null);
33
+ }, onAssignTraveler: (travelerId) => onAssignTraveler(travelerId, resource.id), onUnassignTraveler: onUnassignTraveler, onRemoveResource: () => onRemoveResource(resource.id), onBookingOpen: onBookingOpen }, resource.id));
34
+ }) })] }) }));
35
+ }
@@ -0,0 +1,17 @@
1
+ import type { AllocationManifestTraveler, AllocationResource } from "@voyant-travel/operations-react/availability";
2
+ import { type ReactNode } from "react";
3
+ import { type AllocationOccupants } from "./slot-allocation-model.js";
4
+ export declare function VehicleSeatsView({ seats, vehicles, occupants, sharingGroupLabels, onAssignTraveler, onUnassignTraveler, onBookingOpen, renderTravelerActions, }: {
5
+ seats: AllocationResource[];
6
+ vehicles: AllocationResource[];
7
+ occupants: AllocationOccupants;
8
+ sharingGroupLabels: Record<string, string>;
9
+ /** Assign an unallocated traveler to a specific seat resource. */
10
+ onAssignTraveler: (travelerId: string, resourceId: string) => void;
11
+ /** Remove a traveler from their current seat (no resource id required). */
12
+ onUnassignTraveler: (travelerId: string) => void;
13
+ /** Fired when the operator clicks a booking number on a seat / tile. */
14
+ onBookingOpen?: (bookingId: string) => void;
15
+ renderTravelerActions?: (traveler: AllocationManifestTraveler) => ReactNode;
16
+ }): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=slot-allocation-seat-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot-allocation-seat-view.d.ts","sourceRoot":"","sources":["../../../../src/availability/allocation/components/slot-allocation-seat-view.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,0BAA0B,EAC1B,kBAAkB,EAGnB,MAAM,8CAA8C,CAAA;AAoBrD,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAA;AAGhD,OAAO,EACL,KAAK,mBAAmB,EAIzB,MAAM,4BAA4B,CAAA;AASnC,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,QAAQ,EACR,SAAS,EACT,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,qBAAqB,GACtB,EAAE;IACD,KAAK,EAAE,kBAAkB,EAAE,CAAA;IAC3B,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IAC9B,SAAS,EAAE,mBAAmB,CAAA;IAC9B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,kEAAkE;IAClE,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAClE,2EAA2E;IAC3E,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAChD,wEAAwE;IACxE,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,qBAAqB,CAAC,EAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,SAAS,CAAA;CAC5E,2CA0GA"}
@@ -0,0 +1,97 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Badge, Button, Card, CardContent, CardHeader, CardTitle, Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, cn, Popover, PopoverContent, PopoverTrigger, } from "@voyant-travel/ui/components";
4
+ import { Armchair, Crown, DoorOpen, Users, X } from "lucide-react";
5
+ import { useState } from "react";
6
+ import { useAllocationUiMessagesOrDefault } from "../i18n/index.js";
7
+ import { groupSeatsByVehicle, seatName, seatRows, } from "./slot-allocation-model.js";
8
+ import { AllocationColumn, paymentStatusChipClass, paymentStatusTooltip, SeatPositionBadge, TravelerTile, } from "./slot-allocation-shared.js";
9
+ export function VehicleSeatsView({ seats, vehicles, occupants, sharingGroupLabels, onAssignTraveler, onUnassignTraveler, onBookingOpen, renderTravelerActions, }) {
10
+ const messages = useAllocationUiMessagesOrDefault();
11
+ const groups = groupSeatsByVehicle(seats, vehicles, messages);
12
+ return (_jsxs("div", { className: "grid gap-4 xl:grid-cols-[minmax(18rem,22rem)_1fr]", children: [_jsx(AllocationColumn, { id: "unallocated", icon: _jsx(Users, { className: "size-4", "aria-hidden": "true" }), title: messages.unallocated, description: messages.unallocatedDescription, count: occupants.unallocated.length, capacity: occupants.byTravelerId.size, children: occupants.unallocated.length === 0 ? (_jsx("p", { className: "text-xs text-muted-foreground", children: messages.unallocatedEmpty })) : (occupants.unallocated.map((traveler) => (_jsx(TravelerTile, { traveler: traveler, sharingGroupLabel: traveler.sharingGroupId ? sharingGroupLabels[traveler.sharingGroupId] : null, renderActions: renderTravelerActions }, traveler.id)))) }), _jsx("div", { className: "grid min-w-0 gap-4", children: seats.length === 0 ? (_jsx("div", { className: "rounded-md border border-dashed p-6 text-sm text-muted-foreground", children: messages.noSeats })) : (groups.map((group) => (_jsxs(Card, { children: [_jsx(CardHeader, { className: "pb-3", children: _jsxs(CardTitle, { className: "flex flex-wrap items-center gap-2 text-base", children: [_jsx(Armchair, { className: "size-4", "aria-hidden": "true" }), _jsx("span", { children: group.label }), _jsxs(Badge, { variant: "outline", children: [group.seats.filter((seat) => (occupants.byResource.get(seat.id) ?? []).length > 0).length, "/", group.seats.length] })] }) }), _jsx(CardContent, { children: group.layoutSpec ? (_jsx(SpecGrid, { spec: group.layoutSpec, seats: group.seats, occupants: occupants, sharingGroupLabels: sharingGroupLabels, onAssignTraveler: onAssignTraveler, onUnassignTraveler: onUnassignTraveler, onBookingOpen: onBookingOpen })) : (_jsx("div", { className: "grid gap-2", children: seatRows(group.seats).map((row) => (_jsx("div", { className: "grid items-stretch gap-2", style: {
13
+ gridTemplateColumns: `repeat(${row.seats.length}, minmax(4.25rem, 1fr))`,
14
+ }, children: row.seats.map((seat) => {
15
+ const seatOccupants = occupants.byResource.get(seat.id) ?? [];
16
+ return (_jsx(VehicleSeatCell, { seat: seat, occupant: seatOccupants[0] ?? null, overflow: seatOccupants.length > 1, unallocated: occupants.unallocated, sharingGroupLabel: seatOccupants[0]?.sharingGroupId
17
+ ? sharingGroupLabels[seatOccupants[0].sharingGroupId]
18
+ : null, onAssignTraveler: (travelerId) => onAssignTraveler(travelerId, seat.id), onUnassignTraveler: onUnassignTraveler, onBookingOpen: onBookingOpen }, seat.id));
19
+ }) }, row.rowKey))) })) })] }, group.id)))) })] }));
20
+ }
21
+ function VehicleSeatCell({ seat, occupant, overflow, unallocated, sharingGroupLabel, onAssignTraveler, onUnassignTraveler, onBookingOpen, }) {
22
+ const messages = useAllocationUiMessagesOrDefault();
23
+ const [pickerOpen, setPickerOpen] = useState(false);
24
+ const occupiedClasses = occupant ? paymentStatusChipClass(occupant.paymentStatus) : null;
25
+ const cellClasses = cn("flex min-h-24 flex-col rounded-md border bg-background p-2 text-left text-xs", occupiedClasses, overflow ? "border-destructive bg-destructive/5" /* i18n-literal-ok CSS class token */ : null);
26
+ if (occupant) {
27
+ return (_jsxs("div", { id: `seat:${seat.id}`, className: cellClasses, title: paymentStatusTooltip(occupant.paymentStatus, messages), children: [_jsxs("div", { className: "flex items-start justify-between gap-2", children: [_jsx("span", { className: "font-medium", children: seat.label ?? seatName(seat, messages) }), _jsx(SeatPositionBadge, { seat: seat })] }), _jsxs("div", { className: "mt-2 min-w-0", children: [_jsxs("div", { className: "flex items-center gap-1", children: [occupant.isLeadTraveler ? (_jsx(Crown, { className: "size-3 text-amber-500", "aria-label": messages.lead })) : null, occupant.bookingSequence > 0 ? (_jsxs("span", { className: "text-muted-foreground tabular-nums", "aria-hidden": "true", children: ["(", occupant.bookingSequence, ")"] })) : null, _jsx("span", { className: "truncate font-medium", children: occupant.fullName })] }), _jsxs("div", { className: "mt-1 flex flex-wrap items-center gap-1 text-muted-foreground", children: [onBookingOpen ? (_jsx("button", { type: "button", onClick: () => onBookingOpen(occupant.bookingId), className: "hover:text-foreground hover:underline", children: occupant.bookingNumber })) : (_jsx("span", { children: occupant.bookingNumber })), sharingGroupLabel ? (_jsx(Badge, { variant: "secondary", className: "max-w-full truncate text-[10px]", children: sharingGroupLabel })) : null] })] }), _jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "mt-auto h-6 self-end px-1 text-xs", onClick: () => onUnassignTraveler(occupant.id), "aria-label": `${messages.remove}: ${occupant.fullName}`, children: _jsx(X, { className: "size-3", "aria-hidden": "true" }) })] }));
28
+ }
29
+ const disabled = unallocated.length === 0;
30
+ return (_jsxs("div", { id: `seat:${seat.id}`, className: cellClasses, children: [_jsxs("div", { className: "flex items-start justify-between gap-2", children: [_jsx("span", { className: "font-medium", children: seat.label ?? seatName(seat, messages) }), _jsx(SeatPositionBadge, { seat: seat })] }), _jsxs(Popover, { open: pickerOpen, onOpenChange: setPickerOpen, children: [_jsx(PopoverTrigger, { render: _jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "mt-auto h-7 w-full justify-center rounded border border-dashed text-muted-foreground", disabled: disabled, "aria-label": messages.assignTraveler, children: disabled ? messages.assignTravelerEmpty : messages.assignTraveler }) }), _jsx(PopoverContent, { className: "w-72 p-0", align: "start", children: _jsxs(Command, { children: [_jsx(CommandInput, { placeholder: messages.assignTravelerSearch }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: messages.assignTravelerEmpty }), _jsx(CommandGroup, { children: unallocated.map((traveler) => (_jsx(CommandItem, { value: `${traveler.fullName} ${traveler.bookingNumber}`, onSelect: () => {
31
+ onAssignTraveler(traveler.id);
32
+ setPickerOpen(false);
33
+ }, children: _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "font-medium", children: traveler.fullName }), _jsx("span", { className: "text-xs text-muted-foreground", children: traveler.bookingNumber })] }) }, traveler.id))) })] })] }) })] })] }));
34
+ }
35
+ /**
36
+ * Render the bus as the operator drew it. Walks `layoutSpec.rows` and maps
37
+ * each `"seat"` cell to its materialized resource by (row, seat-column-letter).
38
+ * Other cell kinds render as visible spacers — doors as a striped row, voids
39
+ * and aisles as gap tiles — so the rendered map mirrors the builder view.
40
+ */
41
+ function SpecGrid({ spec, seats, occupants, sharingGroupLabels, onAssignTraveler, onUnassignTraveler, onBookingOpen, }) {
42
+ const seatsByRowColumn = indexSeats(seats);
43
+ return (_jsx("div", { className: "flex flex-col gap-2 overflow-x-auto", children: spec.rows.map((row, rowIndex) => {
44
+ const rowNumber = rowIndex + 1;
45
+ let seatColumn = 0;
46
+ return (_jsx("div", { className: "grid items-stretch gap-2", style: { gridTemplateColumns: `repeat(${row.cells.length}, minmax(4.25rem, 1fr))` }, children: row.cells.map((cell, cellIndex) => {
47
+ if (cell === "seat") {
48
+ seatColumn += 1;
49
+ const columnName = columnLetter(seatColumn);
50
+ const seat = seatsByRowColumn.get(`${rowNumber}:${columnName}`);
51
+ if (!seat) {
52
+ return (_jsx(SpacerCell
53
+ // biome-ignore lint/suspicious/noArrayIndexKey: positional cell within a fixed row. -- owner: availability-react; existing suppression is intentional pending typed cleanup.
54
+ , { kind: "void", rowNumber: rowNumber }, `spec-${rowIndex}-${cellIndex}`));
55
+ }
56
+ const seatOccupants = occupants.byResource.get(seat.id) ?? [];
57
+ return (_jsx(VehicleSeatCell, { seat: seat, occupant: seatOccupants[0] ?? null, overflow: seatOccupants.length > 1, unallocated: occupants.unallocated, sharingGroupLabel: seatOccupants[0]?.sharingGroupId
58
+ ? sharingGroupLabels[seatOccupants[0].sharingGroupId]
59
+ : null, onAssignTraveler: (travelerId) => onAssignTraveler(travelerId, seat.id), onUnassignTraveler: onUnassignTraveler, onBookingOpen: onBookingOpen }, seat.id));
60
+ }
61
+ return (_jsx(SpacerCell
62
+ // biome-ignore lint/suspicious/noArrayIndexKey: positional cell within a fixed row. -- owner: availability-react; existing suppression is intentional pending typed cleanup.
63
+ , { kind: cell, rowNumber: rowNumber }, `spec-${rowIndex}-${cellIndex}`));
64
+ }) }, `spec-row-${rowIndex}`));
65
+ }) }));
66
+ }
67
+ function SpacerCell({ kind, rowNumber: _rowNumber, }) {
68
+ if (kind === "door") {
69
+ return (_jsx("div", { className: "flex min-h-24 items-center justify-center rounded-md border border-amber-500/50 bg-amber-500/10 text-amber-700 dark:text-amber-300", children: _jsx(DoorOpen, { className: "size-5", "aria-hidden": "true" }) }));
70
+ }
71
+ if (kind === "void") {
72
+ return _jsx("div", { className: "min-h-24 rounded-md border border-dashed border-muted-foreground/20" });
73
+ }
74
+ // aisle
75
+ return _jsx("div", { className: "min-h-24", "aria-hidden": "true" });
76
+ }
77
+ function indexSeats(seats) {
78
+ const map = new Map();
79
+ for (const seat of seats) {
80
+ const row = typeof seat.flags?.row === "number" ? seat.flags.row : null;
81
+ const column = typeof seat.flags?.column === "string" ? seat.flags.column : null;
82
+ if (row === null || column === null)
83
+ continue;
84
+ map.set(`${row}:${column}`, seat);
85
+ }
86
+ return map;
87
+ }
88
+ function columnLetter(value) {
89
+ let result = "";
90
+ let n = value;
91
+ while (n > 0) {
92
+ const remainder = (n - 1) % 26;
93
+ result = String.fromCharCode(65 + remainder) + result;
94
+ n = Math.floor((n - 1) / 26);
95
+ }
96
+ return result;
97
+ }
@@ -0,0 +1,54 @@
1
+ import type { AllocationAuditLogEntry, AllocationManifestTraveler, AllocationPaymentStatus, AllocationResource } from "@voyant-travel/operations-react/availability";
2
+ import type { ReactNode } from "react";
3
+ import { useAllocationUiMessagesOrDefault } from "../i18n/index.js";
4
+ import { type ValidationIssue } from "./slot-allocation-model.js";
5
+ /**
6
+ * Passive grouping container used by the unallocated column and other
7
+ * card-shaped sections. Used to be a drop target during the drag-and-
8
+ * drop era; switched to click-to-allocate, so it's now a plain layout
9
+ * primitive. Kept as a named export so render-prop consumers can
10
+ * compose new sections without re-exporting Card pieces themselves.
11
+ */
12
+ export declare function AllocationColumn({ id, icon, title, description, count, capacity, action, children, }: {
13
+ id: string;
14
+ icon: ReactNode;
15
+ title: string;
16
+ description: string;
17
+ count: number;
18
+ capacity: number;
19
+ action?: ReactNode;
20
+ children: ReactNode;
21
+ }): import("react/jsx-runtime").JSX.Element;
22
+ export declare function TravelerTile({ traveler, sharingGroupLabel, renderActions, }: {
23
+ traveler: AllocationManifestTraveler;
24
+ sharingGroupLabel?: string | null;
25
+ renderActions?: (traveler: AllocationManifestTraveler) => ReactNode;
26
+ }): import("react/jsx-runtime").JSX.Element;
27
+ export declare function ValidationSummary({ issues, resources, unallocatedCount, }: {
28
+ issues: ValidationIssue[];
29
+ resources: AllocationResource[];
30
+ unallocatedCount: number;
31
+ }): import("react/jsx-runtime").JSX.Element;
32
+ export declare function ResourceFlagBadges({ resource }: {
33
+ resource: AllocationResource;
34
+ }): import("react/jsx-runtime").JSX.Element | null;
35
+ export declare function SeatPositionBadge({ seat }: {
36
+ seat: AllocationResource;
37
+ }): import("react/jsx-runtime").JSX.Element | null;
38
+ export declare function AuditLogCard({ entries }: {
39
+ entries: AllocationAuditLogEntry[];
40
+ }): import("react/jsx-runtime").JSX.Element | null;
41
+ /**
42
+ * Border + background tint that mirrors the booking's payment status:
43
+ * red for unpaid, amber for partial, emerald for paid. Tailwind class
44
+ * names are written explicitly (no template strings) so the v4 JIT
45
+ * scanner picks them up.
46
+ *
47
+ * The saturation was bumped to `/20` background + `/70` border (from the
48
+ * earlier `/5` + `/40`) because the lower opacities rendered as no color
49
+ * on dark themes — the chips looked uncolored even though the helper
50
+ * was being applied.
51
+ */
52
+ export declare function paymentStatusChipClass(status: AllocationPaymentStatus): string;
53
+ export declare function paymentStatusTooltip(status: AllocationPaymentStatus, messages: ReturnType<typeof useAllocationUiMessagesOrDefault>): string;
54
+ //# sourceMappingURL=slot-allocation-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot-allocation-shared.d.ts","sourceRoot":"","sources":["../../../../src/availability/allocation/components/slot-allocation-shared.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,8CAA8C,CAAA;AAGrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,EAAE,gCAAgC,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE7E;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,EAAE,EACF,IAAI,EACJ,KAAK,EACL,WAAW,EACX,KAAK,EACL,QAAQ,EACR,MAAM,EACN,QAAQ,GACT,EAAE;IACD,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;CACpB,2CAqBA;AAED,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,iBAAiB,EACjB,aAAa,GACd,EAAE;IACD,QAAQ,EAAE,0BAA0B,CAAA;IACpC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,SAAS,CAAA;CACpE,2CA2CA;AAED,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,SAAS,EACT,gBAAgB,GACjB,EAAE;IACD,MAAM,EAAE,eAAe,EAAE,CAAA;IACzB,SAAS,EAAE,kBAAkB,EAAE,CAAA;IAC/B,gBAAgB,EAAE,MAAM,CAAA;CACzB,2CAkCA;AAED,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,kBAAkB,CAAA;CAAE,kDAoBhF;AAED,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,kDAmBvE;AAED,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,uBAAuB,EAAE,CAAA;CAAE,kDA4B/E;AAwBD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,uBAAuB,GAAG,MAAM,CAS9E;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,uBAAuB,EAC/B,QAAQ,EAAE,UAAU,CAAC,OAAO,gCAAgC,CAAC,GAC5D,MAAM,CAER"}
@@ -0,0 +1,106 @@
1
+ "use client";
2
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
3
+ import { Badge, Card, CardContent, CardHeader, CardTitle, cn } from "@voyant-travel/ui/components";
4
+ import { Accessibility, CircleAlert, Crown, History, UtensilsCrossed } from "lucide-react";
5
+ import { useAllocationUiMessagesOrDefault } from "../i18n/index.js";
6
+ import { flagString } from "./slot-allocation-model.js";
7
+ /**
8
+ * Passive grouping container used by the unallocated column and other
9
+ * card-shaped sections. Used to be a drop target during the drag-and-
10
+ * drop era; switched to click-to-allocate, so it's now a plain layout
11
+ * primitive. Kept as a named export so render-prop consumers can
12
+ * compose new sections without re-exporting Card pieces themselves.
13
+ */
14
+ export function AllocationColumn({ id, icon, title, description, count, capacity, action, children, }) {
15
+ return (_jsxs(Card, { id: id, className: "min-h-40", children: [_jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-3 space-y-0", children: [_jsxs("div", { children: [_jsxs(CardTitle, { className: "flex items-center gap-2 text-base", children: [icon, title] }), _jsx("p", { className: "text-xs text-muted-foreground", children: description })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Badge, { variant: count > capacity ? "destructive" : "outline", children: [count, "/", capacity] }), action] })] }), _jsx(CardContent, { className: "flex flex-col gap-2", children: children })] }));
16
+ }
17
+ export function TravelerTile({ traveler, sharingGroupLabel, renderActions, }) {
18
+ const messages = useAllocationUiMessagesOrDefault();
19
+ return (_jsxs("div", { className: cn("group flex items-start justify-between gap-3 rounded-md border bg-background p-3 text-sm shadow-sm", paymentStatusChipClass(traveler.paymentStatus)), title: paymentStatusTooltip(traveler.paymentStatus, messages), children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-1.5", children: [traveler.isLeadTraveler ? (_jsx(Crown, { className: "size-3.5 text-amber-500", "aria-label": messages.lead })) : null, traveler.bookingSequence > 0 ? (_jsxs("span", { className: "text-muted-foreground tabular-nums", "aria-hidden": "true", children: ["(", traveler.bookingSequence, ")"] })) : null, _jsx("span", { className: "truncate font-medium", children: traveler.fullName }), traveler.sharingGroupId ? (_jsx(Badge, { variant: "secondary", className: "max-w-full truncate text-[10px]", children: sharingGroupLabel ?? messages.sharingGroup })) : null] }), _jsxs("div", { className: "mt-1 flex flex-wrap items-center gap-1.5 text-xs text-muted-foreground", children: [_jsx("span", { children: traveler.bookingNumber }), traveler.roomTypeId ? _jsx("span", { children: traveler.roomTypeId }) : null, traveler.bedPreference ? _jsx("span", { children: traveler.bedPreference }) : null, traveler.hasAccessibilityNeeds ? (_jsx(Accessibility, { className: "size-3.5", "aria-label": messages.accessibility })) : null, traveler.hasDietaryRequirements ? (_jsx(UtensilsCrossed, { className: "size-3.5", "aria-label": messages.dietary })) : null] })] }), renderActions ? _jsx("div", { className: "shrink-0", children: renderActions(traveler) }) : null] }));
20
+ }
21
+ export function ValidationSummary({ issues, resources, unallocatedCount, }) {
22
+ const messages = useAllocationUiMessagesOrDefault();
23
+ if (issues.length === 0) {
24
+ return (_jsxs("div", { className: "flex flex-wrap items-center gap-2 rounded-md border bg-muted/30 px-3 py-2 text-sm text-muted-foreground", children: [_jsx(Badge, { variant: "outline", children: messages.validationClear }), _jsxs("span", { children: [resources.length, " ", messages.resources.toLowerCase(), " \u00B7 ", unallocatedCount, " ", messages.unallocated.toLowerCase()] })] }));
25
+ }
26
+ return (_jsxs("div", { className: "rounded-md border border-amber-300/60 bg-amber-50 px-3 py-2 text-sm text-amber-900 dark:border-amber-500/40 dark:bg-amber-500/10 dark:text-amber-200", children: [_jsxs("div", { className: "flex items-center gap-2 font-medium", children: [_jsx(CircleAlert, { className: "size-4", "aria-hidden": "true" }), messages.validationTitle] }), _jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: issues.map((issue) => (_jsx(Badge, { variant: "outline", className: "border-amber-300 bg-background/70 text-amber-900 dark:border-amber-500/40 dark:bg-amber-500/15 dark:text-amber-100", children: issue.label }, issue.id))) })] }));
27
+ }
28
+ export function ResourceFlagBadges({ resource }) {
29
+ const messages = useAllocationUiMessagesOrDefault();
30
+ const flags = resource.flags;
31
+ const badges = [];
32
+ if (flags.accessibilityNeeded === true)
33
+ badges.push(messages.accessibility);
34
+ if (flags.smokingAllowed === true)
35
+ badges.push(messages.smokingAllowed);
36
+ if (typeof flags.note === "string" && flags.note.trim())
37
+ badges.push(flags.note.trim());
38
+ if (badges.length === 0)
39
+ return null;
40
+ return (_jsx("div", { className: "flex flex-wrap gap-1", children: badges.map((badge) => (_jsx(Badge, { variant: "outline", className: "max-w-full truncate text-[10px]", children: badge }, badge))) }));
41
+ }
42
+ export function SeatPositionBadge({ seat }) {
43
+ const messages = useAllocationUiMessagesOrDefault();
44
+ const position = flagString(seat.flags.position);
45
+ if (!position)
46
+ return null;
47
+ const label = position === "window"
48
+ ? messages.windowSeat
49
+ : position === "aisle"
50
+ ? messages.aisleSeat
51
+ : position === "middle"
52
+ ? messages.middleSeat
53
+ : position;
54
+ return (_jsx(Badge, { variant: "outline", className: "text-[10px]", children: label }));
55
+ }
56
+ export function AuditLogCard({ entries }) {
57
+ const messages = useAllocationUiMessagesOrDefault();
58
+ if (entries.length === 0)
59
+ return null;
60
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center gap-2 space-y-0 py-3", children: [_jsx(History, { className: "size-4 text-muted-foreground", "aria-hidden": "true" }), _jsxs("div", { children: [_jsx(CardTitle, { className: "text-base", children: messages.auditLog }), _jsx("p", { className: "text-xs text-muted-foreground", children: messages.auditLogDescription })] })] }), _jsx(CardContent, { className: "flex flex-col gap-2", children: entries.slice(0, 8).map((entry) => (_jsxs("div", { className: "flex flex-wrap items-center gap-2 text-xs", children: [_jsx("span", { className: "text-muted-foreground", children: new Date(entry.createdAt).toLocaleString() }), _jsx(Badge, { variant: "outline", children: messages.auditActions[entry.action] ?? entry.action }), _jsx("span", { className: "min-w-0 flex-1 truncate text-muted-foreground", children: entryDetail(entry) })] }, entry.id))) })] }));
61
+ }
62
+ function entryDetail(entry) {
63
+ const after = entry.after ?? {};
64
+ if (entry.action === "auto-allocate") {
65
+ return `${after.kind ?? ""}: ${after.assigned ?? 0} assigned, ${after.skipped ?? 0} skipped`;
66
+ }
67
+ if (entry.action === "resources.materialize") {
68
+ return `${after.kind ?? ""}: ${after.created ?? 0} created`;
69
+ }
70
+ if (entry.action.startsWith("resource.")) {
71
+ return [after.kind, after.label, after.capacity ? `capacity ${after.capacity}` : null]
72
+ .filter(Boolean)
73
+ .join(" · ");
74
+ }
75
+ if (entry.action.startsWith("traveler.")) {
76
+ return [after.kind, after.resourceId, after.sharingGroupId].filter(Boolean).join(" · ");
77
+ }
78
+ if (entry.action.startsWith("sharing-group.")) {
79
+ return [after.sharingGroupId, after.label].filter(Boolean).join(" · ");
80
+ }
81
+ return JSON.stringify(after);
82
+ }
83
+ /**
84
+ * Border + background tint that mirrors the booking's payment status:
85
+ * red for unpaid, amber for partial, emerald for paid. Tailwind class
86
+ * names are written explicitly (no template strings) so the v4 JIT
87
+ * scanner picks them up.
88
+ *
89
+ * The saturation was bumped to `/20` background + `/70` border (from the
90
+ * earlier `/5` + `/40`) because the lower opacities rendered as no color
91
+ * on dark themes — the chips looked uncolored even though the helper
92
+ * was being applied.
93
+ */
94
+ export function paymentStatusChipClass(status) {
95
+ switch (status) {
96
+ case "paid":
97
+ return "border-emerald-500/70 bg-emerald-500/20 text-emerald-700 dark:text-emerald-200";
98
+ case "partial":
99
+ return "border-amber-500/70 bg-amber-500/20 text-amber-700 dark:text-amber-200";
100
+ case "unpaid":
101
+ return "border-rose-500/70 bg-rose-500/20 text-rose-700 dark:text-rose-200";
102
+ }
103
+ }
104
+ export function paymentStatusTooltip(status, messages) {
105
+ return messages.paymentStatusLabels?.[status] ?? status;
106
+ }
@@ -0,0 +1,2 @@
1
+ export { type AllocationUiMessageOverrides, type AllocationUiMessages, AllocationUiMessagesProvider, allocationUiEn, allocationUiMessageDefinitions, allocationUiRo, getAllocationUiI18n, resolveAllocationUiMessages, useAllocationUiI18n, useAllocationUiI18nOrDefault, useAllocationUiMessages, useAllocationUiMessagesOrDefault, } from "./provider.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/availability/allocation/i18n/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,oBAAoB,EACzB,4BAA4B,EAC5B,cAAc,EACd,8BAA8B,EAC9B,cAAc,EACd,mBAAmB,EACnB,2BAA2B,EAC3B,mBAAmB,EACnB,4BAA4B,EAC5B,uBAAuB,EACvB,gCAAgC,GACjC,MAAM,eAAe,CAAA"}
@@ -0,0 +1 @@
1
+ export { AllocationUiMessagesProvider, allocationUiEn, allocationUiMessageDefinitions, allocationUiRo, getAllocationUiI18n, resolveAllocationUiMessages, useAllocationUiI18n, useAllocationUiI18nOrDefault, useAllocationUiMessages, useAllocationUiMessagesOrDefault, } from "./provider.js";