@inorain_development/hotel-smarters-chat-ui 1.2.1 → 1.3.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 (372) hide show
  1. package/lib/commonjs/features/chat/components/common/calendar-icon.js +33 -0
  2. package/lib/commonjs/features/chat/components/common/calendar-icon.js.map +1 -0
  3. package/lib/commonjs/features/chat/components/common/calendar-icon.native.js +33 -0
  4. package/lib/commonjs/features/chat/components/common/calendar-icon.native.js.map +1 -0
  5. package/lib/commonjs/features/chat/components/common/cart-icon.js +36 -0
  6. package/lib/commonjs/features/chat/components/common/cart-icon.js.map +1 -0
  7. package/lib/commonjs/features/chat/components/common/chevron-icon.js +26 -0
  8. package/lib/commonjs/features/chat/components/common/chevron-icon.js.map +1 -0
  9. package/lib/commonjs/features/chat/components/common/chevron-icon.native.js +26 -0
  10. package/lib/commonjs/features/chat/components/common/chevron-icon.native.js.map +1 -0
  11. package/lib/commonjs/features/chat/components/common/plane-icon.js +23 -0
  12. package/lib/commonjs/features/chat/components/common/plane-icon.js.map +1 -0
  13. package/lib/commonjs/features/chat/components/common/plane-icon.native.js +23 -0
  14. package/lib/commonjs/features/chat/components/common/plane-icon.native.js.map +1 -0
  15. package/lib/commonjs/features/chat/components/event/event.js +5 -3
  16. package/lib/commonjs/features/chat/components/event/event.js.map +1 -1
  17. package/lib/commonjs/features/chat/components/event/event.native.js +5 -3
  18. package/lib/commonjs/features/chat/components/event/event.native.js.map +1 -1
  19. package/lib/commonjs/features/chat/components/flight/flight-card.js +130 -0
  20. package/lib/commonjs/features/chat/components/flight/flight-card.js.map +1 -0
  21. package/lib/commonjs/features/chat/components/flight/flight-card.native.js +132 -0
  22. package/lib/commonjs/features/chat/components/flight/flight-card.native.js.map +1 -0
  23. package/lib/commonjs/features/chat/components/flight/flight.js +149 -0
  24. package/lib/commonjs/features/chat/components/flight/flight.js.map +1 -0
  25. package/lib/commonjs/features/chat/components/flight/flight.model.js +6 -0
  26. package/lib/commonjs/features/chat/components/flight/flight.model.js.map +1 -0
  27. package/lib/commonjs/features/chat/components/flight/flight.native.js +151 -0
  28. package/lib/commonjs/features/chat/components/flight/flight.native.js.map +1 -0
  29. package/lib/commonjs/features/chat/components/flight/index.js +13 -0
  30. package/lib/commonjs/features/chat/components/flight/index.js.map +1 -0
  31. package/lib/commonjs/features/chat/components/flight-board/flight-board.js +154 -0
  32. package/lib/commonjs/features/chat/components/flight-board/flight-board.js.map +1 -0
  33. package/lib/commonjs/features/chat/components/flight-board/flight-board.model.js +6 -0
  34. package/lib/commonjs/features/chat/components/flight-board/flight-board.model.js.map +1 -0
  35. package/lib/commonjs/features/chat/components/flight-board/flight-board.native.js +165 -0
  36. package/lib/commonjs/features/chat/components/flight-board/flight-board.native.js.map +1 -0
  37. package/lib/commonjs/features/chat/components/flight-board/index.js +13 -0
  38. package/lib/commonjs/features/chat/components/flight-board/index.js.map +1 -0
  39. package/lib/commonjs/features/chat/components/info/info.js +41 -14
  40. package/lib/commonjs/features/chat/components/info/info.js.map +1 -1
  41. package/lib/commonjs/features/chat/components/info/info.native.js +45 -14
  42. package/lib/commonjs/features/chat/components/info/info.native.js.map +1 -1
  43. package/lib/commonjs/features/chat/components/order/index.js +20 -0
  44. package/lib/commonjs/features/chat/components/order/index.js.map +1 -0
  45. package/lib/commonjs/features/chat/components/order/order.js +171 -0
  46. package/lib/commonjs/features/chat/components/order/order.js.map +1 -0
  47. package/lib/commonjs/features/chat/components/order/order.model.js +15 -0
  48. package/lib/commonjs/features/chat/components/order/order.model.js.map +1 -0
  49. package/lib/commonjs/features/chat/components/order/order.native.js +192 -0
  50. package/lib/commonjs/features/chat/components/order/order.native.js.map +1 -0
  51. package/lib/commonjs/features/chat/components/reservation/index.js +20 -0
  52. package/lib/commonjs/features/chat/components/reservation/index.js.map +1 -0
  53. package/lib/commonjs/features/chat/components/reservation/reservation.js +164 -0
  54. package/lib/commonjs/features/chat/components/reservation/reservation.js.map +1 -0
  55. package/lib/commonjs/features/chat/components/reservation/reservation.model.js +13 -0
  56. package/lib/commonjs/features/chat/components/reservation/reservation.model.js.map +1 -0
  57. package/lib/commonjs/features/chat/components/reservation/reservation.native.js +180 -0
  58. package/lib/commonjs/features/chat/components/reservation/reservation.native.js.map +1 -0
  59. package/lib/commonjs/features/chat/model/chat.model.js +17 -1
  60. package/lib/commonjs/features/chat/model/chat.model.js.map +1 -1
  61. package/lib/commonjs/features/chat/renderer/renderer.js +26 -0
  62. package/lib/commonjs/features/chat/renderer/renderer.js.map +1 -1
  63. package/lib/commonjs/features/chat/renderer/renderer.native.js +26 -0
  64. package/lib/commonjs/features/chat/renderer/renderer.native.js.map +1 -1
  65. package/lib/commonjs/native.js +48 -0
  66. package/lib/commonjs/native.js.map +1 -1
  67. package/lib/commonjs/utils/flight.utils.js +86 -0
  68. package/lib/commonjs/utils/flight.utils.js.map +1 -0
  69. package/lib/commonjs/utils/order.utils.js +24 -0
  70. package/lib/commonjs/utils/order.utils.js.map +1 -0
  71. package/lib/commonjs/utils/price.utils.js +4 -4
  72. package/lib/commonjs/utils/price.utils.js.map +1 -1
  73. package/lib/commonjs/utils/reservation.utils.js +22 -0
  74. package/lib/commonjs/utils/reservation.utils.js.map +1 -0
  75. package/lib/commonjs/utils/status-badge.utils.js +75 -0
  76. package/lib/commonjs/utils/status-badge.utils.js.map +1 -0
  77. package/lib/commonjs/utils/theme.utils.js +8 -2
  78. package/lib/commonjs/utils/theme.utils.js.map +1 -1
  79. package/lib/commonjs/utils/time.utils.js +51 -0
  80. package/lib/commonjs/utils/time.utils.js.map +1 -0
  81. package/lib/commonjs/web.js +48 -0
  82. package/lib/commonjs/web.js.map +1 -1
  83. package/lib/module/features/chat/components/common/calendar-icon.js +29 -0
  84. package/lib/module/features/chat/components/common/calendar-icon.js.map +1 -0
  85. package/lib/module/features/chat/components/common/calendar-icon.native.js +29 -0
  86. package/lib/module/features/chat/components/common/calendar-icon.native.js.map +1 -0
  87. package/lib/module/features/chat/components/common/cart-icon.js +32 -0
  88. package/lib/module/features/chat/components/common/cart-icon.js.map +1 -0
  89. package/lib/module/features/chat/components/common/chevron-icon.js +22 -0
  90. package/lib/module/features/chat/components/common/chevron-icon.js.map +1 -0
  91. package/lib/module/features/chat/components/common/chevron-icon.native.js +22 -0
  92. package/lib/module/features/chat/components/common/chevron-icon.native.js.map +1 -0
  93. package/lib/module/features/chat/components/common/plane-icon.js +19 -0
  94. package/lib/module/features/chat/components/common/plane-icon.js.map +1 -0
  95. package/lib/module/features/chat/components/common/plane-icon.native.js +19 -0
  96. package/lib/module/features/chat/components/common/plane-icon.native.js.map +1 -0
  97. package/lib/module/features/chat/components/event/event.js +5 -3
  98. package/lib/module/features/chat/components/event/event.js.map +1 -1
  99. package/lib/module/features/chat/components/event/event.native.js +5 -3
  100. package/lib/module/features/chat/components/event/event.native.js.map +1 -1
  101. package/lib/module/features/chat/components/flight/flight-card.js +126 -0
  102. package/lib/module/features/chat/components/flight/flight-card.js.map +1 -0
  103. package/lib/module/features/chat/components/flight/flight-card.native.js +128 -0
  104. package/lib/module/features/chat/components/flight/flight-card.native.js.map +1 -0
  105. package/lib/module/features/chat/components/flight/flight.js +145 -0
  106. package/lib/module/features/chat/components/flight/flight.js.map +1 -0
  107. package/lib/module/features/chat/components/flight/flight.model.js +4 -0
  108. package/lib/module/features/chat/components/flight/flight.model.js.map +1 -0
  109. package/lib/module/features/chat/components/flight/flight.native.js +147 -0
  110. package/lib/module/features/chat/components/flight/flight.native.js.map +1 -0
  111. package/lib/module/features/chat/components/flight/index.js +4 -0
  112. package/lib/module/features/chat/components/flight/index.js.map +1 -0
  113. package/lib/module/features/chat/components/flight-board/flight-board.js +150 -0
  114. package/lib/module/features/chat/components/flight-board/flight-board.js.map +1 -0
  115. package/lib/module/features/chat/components/flight-board/flight-board.model.js +4 -0
  116. package/lib/module/features/chat/components/flight-board/flight-board.model.js.map +1 -0
  117. package/lib/module/features/chat/components/flight-board/flight-board.native.js +161 -0
  118. package/lib/module/features/chat/components/flight-board/flight-board.native.js.map +1 -0
  119. package/lib/module/features/chat/components/flight-board/index.js +4 -0
  120. package/lib/module/features/chat/components/flight-board/index.js.map +1 -0
  121. package/lib/module/features/chat/components/info/info.js +41 -14
  122. package/lib/module/features/chat/components/info/info.js.map +1 -1
  123. package/lib/module/features/chat/components/info/info.native.js +46 -15
  124. package/lib/module/features/chat/components/info/info.native.js.map +1 -1
  125. package/lib/module/features/chat/components/order/index.js +5 -0
  126. package/lib/module/features/chat/components/order/index.js.map +1 -0
  127. package/lib/module/features/chat/components/order/order.js +167 -0
  128. package/lib/module/features/chat/components/order/order.js.map +1 -0
  129. package/lib/module/features/chat/components/order/order.model.js +11 -0
  130. package/lib/module/features/chat/components/order/order.model.js.map +1 -0
  131. package/lib/module/features/chat/components/order/order.native.js +188 -0
  132. package/lib/module/features/chat/components/order/order.native.js.map +1 -0
  133. package/lib/module/features/chat/components/reservation/index.js +5 -0
  134. package/lib/module/features/chat/components/reservation/index.js.map +1 -0
  135. package/lib/module/features/chat/components/reservation/reservation.js +160 -0
  136. package/lib/module/features/chat/components/reservation/reservation.js.map +1 -0
  137. package/lib/module/features/chat/components/reservation/reservation.model.js +9 -0
  138. package/lib/module/features/chat/components/reservation/reservation.model.js.map +1 -0
  139. package/lib/module/features/chat/components/reservation/reservation.native.js +176 -0
  140. package/lib/module/features/chat/components/reservation/reservation.native.js.map +1 -0
  141. package/lib/module/features/chat/model/chat.model.js +16 -0
  142. package/lib/module/features/chat/model/chat.model.js.map +1 -1
  143. package/lib/module/features/chat/renderer/renderer.js +26 -0
  144. package/lib/module/features/chat/renderer/renderer.js.map +1 -1
  145. package/lib/module/features/chat/renderer/renderer.native.js +26 -0
  146. package/lib/module/features/chat/renderer/renderer.native.js.map +1 -1
  147. package/lib/module/native.js +7 -1
  148. package/lib/module/native.js.map +1 -1
  149. package/lib/module/utils/flight.utils.js +82 -0
  150. package/lib/module/utils/flight.utils.js.map +1 -0
  151. package/lib/module/utils/order.utils.js +20 -0
  152. package/lib/module/utils/order.utils.js.map +1 -0
  153. package/lib/module/utils/price.utils.js +4 -4
  154. package/lib/module/utils/price.utils.js.map +1 -1
  155. package/lib/module/utils/reservation.utils.js +18 -0
  156. package/lib/module/utils/reservation.utils.js.map +1 -0
  157. package/lib/module/utils/status-badge.utils.js +70 -0
  158. package/lib/module/utils/status-badge.utils.js.map +1 -0
  159. package/lib/module/utils/theme.utils.js +8 -2
  160. package/lib/module/utils/theme.utils.js.map +1 -1
  161. package/lib/module/utils/time.utils.js +46 -0
  162. package/lib/module/utils/time.utils.js.map +1 -0
  163. package/lib/module/web.js +7 -1
  164. package/lib/module/web.js.map +1 -1
  165. package/lib/typescript/commonjs/features/chat/components/common/calendar-icon.d.ts +6 -0
  166. package/lib/typescript/commonjs/features/chat/components/common/calendar-icon.d.ts.map +1 -0
  167. package/lib/typescript/commonjs/features/chat/components/common/calendar-icon.native.d.ts +6 -0
  168. package/lib/typescript/commonjs/features/chat/components/common/calendar-icon.native.d.ts.map +1 -0
  169. package/lib/typescript/commonjs/features/chat/components/common/cart-icon.d.ts +6 -0
  170. package/lib/typescript/commonjs/features/chat/components/common/cart-icon.d.ts.map +1 -0
  171. package/lib/typescript/commonjs/features/chat/components/common/chevron-icon.d.ts +6 -0
  172. package/lib/typescript/commonjs/features/chat/components/common/chevron-icon.d.ts.map +1 -0
  173. package/lib/typescript/commonjs/features/chat/components/common/chevron-icon.native.d.ts +6 -0
  174. package/lib/typescript/commonjs/features/chat/components/common/chevron-icon.native.d.ts.map +1 -0
  175. package/lib/typescript/commonjs/features/chat/components/common/plane-icon.d.ts +6 -0
  176. package/lib/typescript/commonjs/features/chat/components/common/plane-icon.d.ts.map +1 -0
  177. package/lib/typescript/commonjs/features/chat/components/common/plane-icon.native.d.ts +6 -0
  178. package/lib/typescript/commonjs/features/chat/components/common/plane-icon.native.d.ts.map +1 -0
  179. package/lib/typescript/commonjs/features/chat/components/event/event.d.ts.map +1 -1
  180. package/lib/typescript/commonjs/features/chat/components/event/event.model.d.ts +3 -1
  181. package/lib/typescript/commonjs/features/chat/components/event/event.model.d.ts.map +1 -1
  182. package/lib/typescript/commonjs/features/chat/components/event/event.native.d.ts.map +1 -1
  183. package/lib/typescript/commonjs/features/chat/components/flight/flight-card.d.ts +12 -0
  184. package/lib/typescript/commonjs/features/chat/components/flight/flight-card.d.ts.map +1 -0
  185. package/lib/typescript/commonjs/features/chat/components/flight/flight-card.native.d.ts +12 -0
  186. package/lib/typescript/commonjs/features/chat/components/flight/flight-card.native.d.ts.map +1 -0
  187. package/lib/typescript/commonjs/features/chat/components/flight/flight.d.ts +4 -0
  188. package/lib/typescript/commonjs/features/chat/components/flight/flight.d.ts.map +1 -0
  189. package/lib/typescript/commonjs/features/chat/components/flight/flight.model.d.ts +19 -0
  190. package/lib/typescript/commonjs/features/chat/components/flight/flight.model.d.ts.map +1 -0
  191. package/lib/typescript/commonjs/features/chat/components/flight/flight.native.d.ts +4 -0
  192. package/lib/typescript/commonjs/features/chat/components/flight/flight.native.d.ts.map +1 -0
  193. package/lib/typescript/commonjs/features/chat/components/flight/index.d.ts +3 -0
  194. package/lib/typescript/commonjs/features/chat/components/flight/index.d.ts.map +1 -0
  195. package/lib/typescript/commonjs/features/chat/components/flight-board/flight-board.d.ts +4 -0
  196. package/lib/typescript/commonjs/features/chat/components/flight-board/flight-board.d.ts.map +1 -0
  197. package/lib/typescript/commonjs/features/chat/components/flight-board/flight-board.model.d.ts +22 -0
  198. package/lib/typescript/commonjs/features/chat/components/flight-board/flight-board.model.d.ts.map +1 -0
  199. package/lib/typescript/commonjs/features/chat/components/flight-board/flight-board.native.d.ts +4 -0
  200. package/lib/typescript/commonjs/features/chat/components/flight-board/flight-board.native.d.ts.map +1 -0
  201. package/lib/typescript/commonjs/features/chat/components/flight-board/index.d.ts +3 -0
  202. package/lib/typescript/commonjs/features/chat/components/flight-board/index.d.ts.map +1 -0
  203. package/lib/typescript/commonjs/features/chat/components/info/info.d.ts +1 -1
  204. package/lib/typescript/commonjs/features/chat/components/info/info.d.ts.map +1 -1
  205. package/lib/typescript/commonjs/features/chat/components/info/info.model.d.ts +3 -0
  206. package/lib/typescript/commonjs/features/chat/components/info/info.model.d.ts.map +1 -1
  207. package/lib/typescript/commonjs/features/chat/components/info/info.native.d.ts +1 -1
  208. package/lib/typescript/commonjs/features/chat/components/info/info.native.d.ts.map +1 -1
  209. package/lib/typescript/commonjs/features/chat/components/order/index.d.ts +4 -0
  210. package/lib/typescript/commonjs/features/chat/components/order/index.d.ts.map +1 -0
  211. package/lib/typescript/commonjs/features/chat/components/order/order.d.ts +4 -0
  212. package/lib/typescript/commonjs/features/chat/components/order/order.d.ts.map +1 -0
  213. package/lib/typescript/commonjs/features/chat/components/order/order.model.d.ts +30 -0
  214. package/lib/typescript/commonjs/features/chat/components/order/order.model.d.ts.map +1 -0
  215. package/lib/typescript/commonjs/features/chat/components/order/order.native.d.ts +4 -0
  216. package/lib/typescript/commonjs/features/chat/components/order/order.native.d.ts.map +1 -0
  217. package/lib/typescript/commonjs/features/chat/components/reservation/index.d.ts +4 -0
  218. package/lib/typescript/commonjs/features/chat/components/reservation/index.d.ts.map +1 -0
  219. package/lib/typescript/commonjs/features/chat/components/reservation/reservation.d.ts +4 -0
  220. package/lib/typescript/commonjs/features/chat/components/reservation/reservation.d.ts.map +1 -0
  221. package/lib/typescript/commonjs/features/chat/components/reservation/reservation.model.d.ts +27 -0
  222. package/lib/typescript/commonjs/features/chat/components/reservation/reservation.model.d.ts.map +1 -0
  223. package/lib/typescript/commonjs/features/chat/components/reservation/reservation.native.d.ts +4 -0
  224. package/lib/typescript/commonjs/features/chat/components/reservation/reservation.native.d.ts.map +1 -0
  225. package/lib/typescript/commonjs/features/chat/model/chat.model.d.ts +17 -2
  226. package/lib/typescript/commonjs/features/chat/model/chat.model.d.ts.map +1 -1
  227. package/lib/typescript/commonjs/features/chat/renderer/renderer.d.ts +5 -1
  228. package/lib/typescript/commonjs/features/chat/renderer/renderer.d.ts.map +1 -1
  229. package/lib/typescript/commonjs/features/chat/renderer/renderer.native.d.ts +5 -1
  230. package/lib/typescript/commonjs/features/chat/renderer/renderer.native.d.ts.map +1 -1
  231. package/lib/typescript/commonjs/native.d.ts +11 -1
  232. package/lib/typescript/commonjs/native.d.ts.map +1 -1
  233. package/lib/typescript/commonjs/utils/flight.utils.d.ts +10 -0
  234. package/lib/typescript/commonjs/utils/flight.utils.d.ts.map +1 -0
  235. package/lib/typescript/commonjs/utils/order.utils.d.ts +7 -0
  236. package/lib/typescript/commonjs/utils/order.utils.d.ts.map +1 -0
  237. package/lib/typescript/commonjs/utils/reservation.utils.d.ts +7 -0
  238. package/lib/typescript/commonjs/utils/reservation.utils.d.ts.map +1 -0
  239. package/lib/typescript/commonjs/utils/status-badge.utils.d.ts +15 -0
  240. package/lib/typescript/commonjs/utils/status-badge.utils.d.ts.map +1 -0
  241. package/lib/typescript/commonjs/utils/theme.utils.d.ts +3 -0
  242. package/lib/typescript/commonjs/utils/theme.utils.d.ts.map +1 -1
  243. package/lib/typescript/commonjs/utils/time.utils.d.ts +3 -0
  244. package/lib/typescript/commonjs/utils/time.utils.d.ts.map +1 -0
  245. package/lib/typescript/commonjs/web.d.ts +11 -1
  246. package/lib/typescript/commonjs/web.d.ts.map +1 -1
  247. package/lib/typescript/module/features/chat/components/common/calendar-icon.d.ts +6 -0
  248. package/lib/typescript/module/features/chat/components/common/calendar-icon.d.ts.map +1 -0
  249. package/lib/typescript/module/features/chat/components/common/calendar-icon.native.d.ts +6 -0
  250. package/lib/typescript/module/features/chat/components/common/calendar-icon.native.d.ts.map +1 -0
  251. package/lib/typescript/module/features/chat/components/common/cart-icon.d.ts +6 -0
  252. package/lib/typescript/module/features/chat/components/common/cart-icon.d.ts.map +1 -0
  253. package/lib/typescript/module/features/chat/components/common/chevron-icon.d.ts +6 -0
  254. package/lib/typescript/module/features/chat/components/common/chevron-icon.d.ts.map +1 -0
  255. package/lib/typescript/module/features/chat/components/common/chevron-icon.native.d.ts +6 -0
  256. package/lib/typescript/module/features/chat/components/common/chevron-icon.native.d.ts.map +1 -0
  257. package/lib/typescript/module/features/chat/components/common/plane-icon.d.ts +6 -0
  258. package/lib/typescript/module/features/chat/components/common/plane-icon.d.ts.map +1 -0
  259. package/lib/typescript/module/features/chat/components/common/plane-icon.native.d.ts +6 -0
  260. package/lib/typescript/module/features/chat/components/common/plane-icon.native.d.ts.map +1 -0
  261. package/lib/typescript/module/features/chat/components/event/event.d.ts.map +1 -1
  262. package/lib/typescript/module/features/chat/components/event/event.model.d.ts +3 -1
  263. package/lib/typescript/module/features/chat/components/event/event.model.d.ts.map +1 -1
  264. package/lib/typescript/module/features/chat/components/event/event.native.d.ts.map +1 -1
  265. package/lib/typescript/module/features/chat/components/flight/flight-card.d.ts +12 -0
  266. package/lib/typescript/module/features/chat/components/flight/flight-card.d.ts.map +1 -0
  267. package/lib/typescript/module/features/chat/components/flight/flight-card.native.d.ts +12 -0
  268. package/lib/typescript/module/features/chat/components/flight/flight-card.native.d.ts.map +1 -0
  269. package/lib/typescript/module/features/chat/components/flight/flight.d.ts +4 -0
  270. package/lib/typescript/module/features/chat/components/flight/flight.d.ts.map +1 -0
  271. package/lib/typescript/module/features/chat/components/flight/flight.model.d.ts +19 -0
  272. package/lib/typescript/module/features/chat/components/flight/flight.model.d.ts.map +1 -0
  273. package/lib/typescript/module/features/chat/components/flight/flight.native.d.ts +4 -0
  274. package/lib/typescript/module/features/chat/components/flight/flight.native.d.ts.map +1 -0
  275. package/lib/typescript/module/features/chat/components/flight/index.d.ts +3 -0
  276. package/lib/typescript/module/features/chat/components/flight/index.d.ts.map +1 -0
  277. package/lib/typescript/module/features/chat/components/flight-board/flight-board.d.ts +4 -0
  278. package/lib/typescript/module/features/chat/components/flight-board/flight-board.d.ts.map +1 -0
  279. package/lib/typescript/module/features/chat/components/flight-board/flight-board.model.d.ts +22 -0
  280. package/lib/typescript/module/features/chat/components/flight-board/flight-board.model.d.ts.map +1 -0
  281. package/lib/typescript/module/features/chat/components/flight-board/flight-board.native.d.ts +4 -0
  282. package/lib/typescript/module/features/chat/components/flight-board/flight-board.native.d.ts.map +1 -0
  283. package/lib/typescript/module/features/chat/components/flight-board/index.d.ts +3 -0
  284. package/lib/typescript/module/features/chat/components/flight-board/index.d.ts.map +1 -0
  285. package/lib/typescript/module/features/chat/components/info/info.d.ts +1 -1
  286. package/lib/typescript/module/features/chat/components/info/info.d.ts.map +1 -1
  287. package/lib/typescript/module/features/chat/components/info/info.model.d.ts +3 -0
  288. package/lib/typescript/module/features/chat/components/info/info.model.d.ts.map +1 -1
  289. package/lib/typescript/module/features/chat/components/info/info.native.d.ts +1 -1
  290. package/lib/typescript/module/features/chat/components/info/info.native.d.ts.map +1 -1
  291. package/lib/typescript/module/features/chat/components/order/index.d.ts +4 -0
  292. package/lib/typescript/module/features/chat/components/order/index.d.ts.map +1 -0
  293. package/lib/typescript/module/features/chat/components/order/order.d.ts +4 -0
  294. package/lib/typescript/module/features/chat/components/order/order.d.ts.map +1 -0
  295. package/lib/typescript/module/features/chat/components/order/order.model.d.ts +30 -0
  296. package/lib/typescript/module/features/chat/components/order/order.model.d.ts.map +1 -0
  297. package/lib/typescript/module/features/chat/components/order/order.native.d.ts +4 -0
  298. package/lib/typescript/module/features/chat/components/order/order.native.d.ts.map +1 -0
  299. package/lib/typescript/module/features/chat/components/reservation/index.d.ts +4 -0
  300. package/lib/typescript/module/features/chat/components/reservation/index.d.ts.map +1 -0
  301. package/lib/typescript/module/features/chat/components/reservation/reservation.d.ts +4 -0
  302. package/lib/typescript/module/features/chat/components/reservation/reservation.d.ts.map +1 -0
  303. package/lib/typescript/module/features/chat/components/reservation/reservation.model.d.ts +27 -0
  304. package/lib/typescript/module/features/chat/components/reservation/reservation.model.d.ts.map +1 -0
  305. package/lib/typescript/module/features/chat/components/reservation/reservation.native.d.ts +4 -0
  306. package/lib/typescript/module/features/chat/components/reservation/reservation.native.d.ts.map +1 -0
  307. package/lib/typescript/module/features/chat/model/chat.model.d.ts +17 -2
  308. package/lib/typescript/module/features/chat/model/chat.model.d.ts.map +1 -1
  309. package/lib/typescript/module/features/chat/renderer/renderer.d.ts +5 -1
  310. package/lib/typescript/module/features/chat/renderer/renderer.d.ts.map +1 -1
  311. package/lib/typescript/module/features/chat/renderer/renderer.native.d.ts +5 -1
  312. package/lib/typescript/module/features/chat/renderer/renderer.native.d.ts.map +1 -1
  313. package/lib/typescript/module/native.d.ts +11 -1
  314. package/lib/typescript/module/native.d.ts.map +1 -1
  315. package/lib/typescript/module/utils/flight.utils.d.ts +10 -0
  316. package/lib/typescript/module/utils/flight.utils.d.ts.map +1 -0
  317. package/lib/typescript/module/utils/order.utils.d.ts +7 -0
  318. package/lib/typescript/module/utils/order.utils.d.ts.map +1 -0
  319. package/lib/typescript/module/utils/reservation.utils.d.ts +7 -0
  320. package/lib/typescript/module/utils/reservation.utils.d.ts.map +1 -0
  321. package/lib/typescript/module/utils/status-badge.utils.d.ts +15 -0
  322. package/lib/typescript/module/utils/status-badge.utils.d.ts.map +1 -0
  323. package/lib/typescript/module/utils/theme.utils.d.ts +3 -0
  324. package/lib/typescript/module/utils/theme.utils.d.ts.map +1 -1
  325. package/lib/typescript/module/utils/time.utils.d.ts +3 -0
  326. package/lib/typescript/module/utils/time.utils.d.ts.map +1 -0
  327. package/lib/typescript/module/web.d.ts +11 -1
  328. package/lib/typescript/module/web.d.ts.map +1 -1
  329. package/package.json +1 -1
  330. package/src/features/chat/components/common/calendar-icon.native.tsx +13 -0
  331. package/src/features/chat/components/common/calendar-icon.tsx +13 -0
  332. package/src/features/chat/components/common/cart-icon.tsx +20 -0
  333. package/src/features/chat/components/common/chevron-icon.native.tsx +18 -0
  334. package/src/features/chat/components/common/chevron-icon.tsx +18 -0
  335. package/src/features/chat/components/common/plane-icon.native.tsx +15 -0
  336. package/src/features/chat/components/common/plane-icon.tsx +15 -0
  337. package/src/features/chat/components/event/event.model.ts +3 -1
  338. package/src/features/chat/components/event/event.native.tsx +6 -2
  339. package/src/features/chat/components/event/event.tsx +6 -2
  340. package/src/features/chat/components/flight/flight-card.native.tsx +100 -0
  341. package/src/features/chat/components/flight/flight-card.tsx +100 -0
  342. package/src/features/chat/components/flight/flight.model.ts +20 -0
  343. package/src/features/chat/components/flight/flight.native.tsx +131 -0
  344. package/src/features/chat/components/flight/flight.tsx +131 -0
  345. package/src/features/chat/components/flight/index.ts +2 -0
  346. package/src/features/chat/components/flight-board/flight-board.model.ts +23 -0
  347. package/src/features/chat/components/flight-board/flight-board.native.tsx +155 -0
  348. package/src/features/chat/components/flight-board/flight-board.tsx +160 -0
  349. package/src/features/chat/components/flight-board/index.ts +2 -0
  350. package/src/features/chat/components/info/info.model.ts +3 -0
  351. package/src/features/chat/components/info/info.native.tsx +47 -11
  352. package/src/features/chat/components/info/info.tsx +43 -10
  353. package/src/features/chat/components/order/index.ts +3 -0
  354. package/src/features/chat/components/order/order.model.ts +32 -0
  355. package/src/features/chat/components/order/order.native.tsx +175 -0
  356. package/src/features/chat/components/order/order.tsx +176 -0
  357. package/src/features/chat/components/reservation/index.ts +3 -0
  358. package/src/features/chat/components/reservation/reservation.model.ts +29 -0
  359. package/src/features/chat/components/reservation/reservation.native.tsx +159 -0
  360. package/src/features/chat/components/reservation/reservation.tsx +161 -0
  361. package/src/features/chat/model/chat.model.ts +16 -0
  362. package/src/features/chat/renderer/renderer.native.tsx +29 -1
  363. package/src/features/chat/renderer/renderer.tsx +29 -1
  364. package/src/native.ts +11 -1
  365. package/src/utils/flight.utils.ts +35 -0
  366. package/src/utils/order.utils.ts +28 -0
  367. package/src/utils/price.utils.ts +4 -4
  368. package/src/utils/reservation.utils.ts +23 -0
  369. package/src/utils/status-badge.utils.ts +36 -0
  370. package/src/utils/theme.utils.ts +9 -0
  371. package/src/utils/time.utils.ts +58 -0
  372. package/src/web.ts +11 -1
@@ -0,0 +1,176 @@
1
+ import { Fragment } from 'react';
2
+ import { getThemeClasses } from '../../../../utils/theme.utils';
3
+ import { getOrderStatusStyle } from '../../../../utils/order.utils';
4
+ import { resolveText } from '../../../../utils/i18n.utils';
5
+ import { useExpandableList } from '../../../../utils/use-expandable-list';
6
+ import { Collapsible } from '../common/collapsible';
7
+ import { CartIcon } from '../common/cart-icon';
8
+ import { ChevronIcon } from '../common/chevron-icon';
9
+ import { OrderStatus } from './order.model';
10
+ import { ItemAction, Theme } from '../../model/chat.model';
11
+ import type { ChatComponentProps } from '../../model/chat.model';
12
+ import type { OrderListItem, OrderRow } from './order.model';
13
+
14
+ export function Order({
15
+ data,
16
+ theme = Theme.Dark,
17
+ language,
18
+ actionLabel,
19
+ onAction,
20
+ onSelect,
21
+ }: ChatComponentProps<OrderListItem>) {
22
+ const c = getThemeClasses(theme);
23
+ const order = Array.isArray(data) ? data[0] : data;
24
+ const items = order?.items ?? [];
25
+ const { head, rest, expanded, hasMore, toggle } = useExpandableList(items);
26
+
27
+ if (!order) return null;
28
+
29
+ const onSelectRow = onSelect as ((row: OrderRow) => void) | undefined;
30
+ const location = order.location ? resolveText(order.location, language) : undefined;
31
+ const totalLabel = order.totalLabel ? resolveText(order.totalLabel, language) : undefined;
32
+ const action = order.actionLabel
33
+ ? resolveText(order.actionLabel, language)
34
+ : typeof actionLabel === 'function'
35
+ ? actionLabel(order)
36
+ : actionLabel;
37
+ const headerStyle = getOrderStatusStyle(order.status, theme);
38
+ const headerStatusLabel = order.statusLabel ? resolveText(order.statusLabel, language) : headerStyle.label;
39
+
40
+ const renderRow = (row: OrderRow) => {
41
+ const name = resolveText(row.name, language);
42
+ const isRejected = row.status === OrderStatus.Rejected;
43
+ const s = getOrderStatusStyle(row.status, theme);
44
+ const statusLabel = row.statusLabel ? resolveText(row.statusLabel, language) : s.label;
45
+
46
+ return (
47
+ <button
48
+ type="button"
49
+ className="flex w-full items-center gap-3 py-2.5 text-left"
50
+ onClick={() => onSelectRow?.(row)}
51
+ >
52
+ <div className="relative shrink-0">
53
+ {row.image ? (
54
+ <img src={row.image} alt={name} className={`h-11 w-11 rounded-lg object-cover ${c.iconBg}`} />
55
+ ) : (
56
+ <div className={`h-11 w-11 rounded-lg ${c.iconBg}`} />
57
+ )}
58
+ {row.quantity > 1 ? (
59
+ <span className="absolute -right-1.5 -top-1.5 flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500 text-[10px] font-bold text-white">
60
+ {row.quantity}
61
+ </span>
62
+ ) : null}
63
+ </div>
64
+
65
+ <div className="flex min-w-0 flex-1 flex-col gap-1">
66
+ <div className="flex items-center justify-between gap-2">
67
+ <span className={`truncate text-sm font-semibold ${isRejected ? 'line-through opacity-60' : ''} ${c.title}`}>
68
+ {name}
69
+ </span>
70
+ <span className={`shrink-0 text-sm font-bold ${isRejected ? 'line-through opacity-60' : ''} ${c.price}`}>
71
+ {row.price}
72
+ </span>
73
+ </div>
74
+ <div className="flex items-center justify-between gap-2">
75
+ <span className={`truncate text-xs ${c.subtitle}`}>
76
+ {row.unitPrice ? `${row.unitPrice} each` : ''}
77
+ {row.unitPrice && row.duration ? ' · ' : ''}
78
+ {row.duration ?? ''}
79
+ </span>
80
+ {row.status ? (
81
+ <span className={`shrink-0 rounded-full px-2 py-0.5 text-[11px] font-semibold ${s.badgeBg} ${s.badgeText}`}>
82
+ {statusLabel}
83
+ </span>
84
+ ) : null}
85
+ </div>
86
+ </div>
87
+ </button>
88
+ );
89
+ };
90
+
91
+ return (
92
+ <div className={`rounded-2xl border p-3.5 ${c.surface} ${c.border}`}>
93
+ <div className="flex items-center gap-3">
94
+ <div className={`flex h-11 w-11 shrink-0 items-center justify-center rounded-xl ${c.iconBg}`}>
95
+ <CartIcon size={20} color={c.iconColor} />
96
+ </div>
97
+
98
+ <div className="flex min-w-0 flex-1 flex-col">
99
+ <span className={`truncate text-base font-bold ${c.title}`}>Order #{order.orderNumber}</span>
100
+ {location ? <span className={`truncate text-xs ${c.subtitle}`}>{location}</span> : null}
101
+ </div>
102
+
103
+ <span
104
+ className={`shrink-0 rounded-full px-2.5 py-1 text-xs font-semibold ${headerStyle.badgeBg} ${headerStyle.badgeText}`}
105
+ >
106
+ {headerStatusLabel}
107
+ </span>
108
+ </div>
109
+
110
+ <div className={`my-3 h-px ${c.divider}`} />
111
+
112
+ {head.map((row, index) => (
113
+ <Fragment key={row.id}>
114
+ {index > 0 ? <div className={`h-px ${c.divider}`} /> : null}
115
+ {renderRow(row)}
116
+ </Fragment>
117
+ ))}
118
+
119
+ {hasMore ? (
120
+ <Collapsible expanded={expanded}>
121
+ {rest.map((row) => (
122
+ <Fragment key={row.id}>
123
+ <div className={`h-px ${c.divider}`} />
124
+ {renderRow(row)}
125
+ </Fragment>
126
+ ))}
127
+ </Collapsible>
128
+ ) : null}
129
+
130
+ {hasMore ? (
131
+ <button
132
+ type="button"
133
+ onClick={toggle}
134
+ className="mt-1 flex w-full items-center justify-between gap-2 rounded-xl py-2"
135
+ >
136
+ <div className="flex items-center gap-2">
137
+ <span className={`flex h-7 w-7 items-center justify-center rounded-full text-xs font-semibold ${c.iconBg} ${c.iconText}`}>
138
+ +{rest.length}
139
+ </span>
140
+ <span className={`text-sm ${c.subtitle}`}>
141
+ {expanded ? `Showing all ${items.length} items` : `Showing ${head.length} of ${items.length} items`}
142
+ </span>
143
+ </div>
144
+ <span className={`flex shrink-0 items-center gap-1 text-sm font-semibold ${c.iconText}`}>
145
+ {expanded ? 'Show less' : 'View all'}
146
+ <span className={`transition-transform ${expanded ? 'rotate-180' : ''}`}>
147
+ <ChevronIcon size={14} color="currentColor" />
148
+ </span>
149
+ </span>
150
+ </button>
151
+ ) : null}
152
+
153
+ {order.total || action ? (
154
+ <>
155
+ <div className={`my-3 h-px ${c.divider}`} />
156
+ <div className="flex items-center justify-between gap-3">
157
+ <div className="flex flex-col">
158
+ {totalLabel ? <span className={`text-xs ${c.subtitle}`}>{totalLabel}</span> : null}
159
+ {order.total ? <span className={`text-lg font-bold ${c.title}`}>{order.total}</span> : null}
160
+ </div>
161
+
162
+ {action ? (
163
+ <button
164
+ type="button"
165
+ onClick={() => onAction?.(order, ItemAction.Track)}
166
+ className="rounded-xl bg-indigo-500 px-4 py-2 text-sm font-semibold text-white"
167
+ >
168
+ {action}
169
+ </button>
170
+ ) : null}
171
+ </div>
172
+ </>
173
+ ) : null}
174
+ </div>
175
+ );
176
+ }
@@ -0,0 +1,3 @@
1
+ export { Reservation } from './reservation';
2
+ export { ReservationStatus } from './reservation.model';
3
+ export type { ReservationListItem, ReservationRow } from './reservation.model';
@@ -0,0 +1,29 @@
1
+ import type { LocalizedText } from '../../model/chat.model';
2
+
3
+ export enum ReservationStatus {
4
+ Pending = 'pending',
5
+ Confirmed = 'confirmed',
6
+ Cancelled = 'cancelled',
7
+ }
8
+
9
+ export interface ReservationRow {
10
+ id: number;
11
+ name: LocalizedText;
12
+ date: string;
13
+ time: string;
14
+ duration?: string;
15
+ price: string;
16
+ status: ReservationStatus;
17
+ statusLabel?: LocalizedText;
18
+ }
19
+
20
+ export interface ReservationListItem {
21
+ title: LocalizedText;
22
+ subtitle?: LocalizedText;
23
+ status?: ReservationStatus;
24
+ statusLabel?: LocalizedText;
25
+ reservations: ReservationRow[];
26
+ totalLabel?: LocalizedText;
27
+ total?: string;
28
+ actionLabel?: LocalizedText;
29
+ }
@@ -0,0 +1,159 @@
1
+ import { Fragment } from 'react';
2
+ import { Pressable, Text, View } from 'react-native';
3
+ import { getThemeClasses } from '../../../../utils/theme.utils';
4
+ import { getReservationStatusStyle } from '../../../../utils/reservation.utils';
5
+ import { resolveText } from '../../../../utils/i18n.utils';
6
+ import { useExpandableList } from '../../../../utils/use-expandable-list';
7
+ import { Collapsible } from '../common/collapsible.native';
8
+ import { CalendarIcon } from '../common/calendar-icon.native';
9
+ import { ChevronIcon } from '../common/chevron-icon.native';
10
+ import { ItemAction, Theme } from '../../model/chat.model';
11
+ import type { ChatComponentProps } from '../../model/chat.model';
12
+ import type { ReservationListItem, ReservationRow } from './reservation.model';
13
+
14
+ export function Reservation({
15
+ data,
16
+ theme = Theme.Dark,
17
+ language,
18
+ actionLabel,
19
+ onAction,
20
+ onSelect,
21
+ }: ChatComponentProps<ReservationListItem>) {
22
+ const c = getThemeClasses(theme);
23
+ const list = Array.isArray(data) ? data[0] : data;
24
+ const reservations = list?.reservations ?? [];
25
+ const { head, rest, expanded, hasMore, toggle } = useExpandableList(reservations);
26
+
27
+ if (!list) return null;
28
+
29
+ const onSelectRow = onSelect as ((row: ReservationRow) => void) | undefined;
30
+ const title = resolveText(list.title, language);
31
+ const subtitle = list.subtitle ? resolveText(list.subtitle, language) : undefined;
32
+ const totalLabel = list.totalLabel ? resolveText(list.totalLabel, language) : undefined;
33
+ const action = list.actionLabel
34
+ ? resolveText(list.actionLabel, language)
35
+ : typeof actionLabel === 'function'
36
+ ? actionLabel(list)
37
+ : actionLabel;
38
+ const headerStyle = getReservationStatusStyle(list.status, theme);
39
+ const headerStatusLabel = list.statusLabel ? resolveText(list.statusLabel, language) : headerStyle.label;
40
+
41
+ const renderRow = (row: ReservationRow) => {
42
+ const s = getReservationStatusStyle(row.status, theme);
43
+ const statusLabel = row.statusLabel ? resolveText(row.statusLabel, language) : s.label;
44
+ const name = resolveText(row.name, language);
45
+
46
+ return (
47
+ <Pressable className="flex-row items-center gap-3 py-2.5" onPress={() => onSelectRow?.(row)}>
48
+ <View className={`h-11 w-11 items-center justify-center rounded-xl ${c.mutedIconBg}`}>
49
+ <CalendarIcon size={18} color={c.mutedIconColor} />
50
+ </View>
51
+
52
+ <View className="flex-1 gap-1">
53
+ <View className="flex-row items-center justify-between gap-2">
54
+ <Text className={`flex-1 text-sm font-semibold ${c.title}`} numberOfLines={1}>
55
+ {name}
56
+ </Text>
57
+ <Text className={`text-sm font-bold ${c.price}`}>{row.price}</Text>
58
+ </View>
59
+ <View className="flex-row items-center justify-between gap-2">
60
+ <Text className={`flex-1 text-xs ${c.subtitle}`} numberOfLines={1}>
61
+ {row.date} · {row.time}
62
+ {row.duration ? ` · ${row.duration}` : ''}
63
+ </Text>
64
+ <View className={`rounded-full px-2 py-0.5 ${s.badgeBg}`}>
65
+ <Text className={`text-[11px] font-semibold ${s.badgeText}`}>{statusLabel}</Text>
66
+ </View>
67
+ </View>
68
+ </View>
69
+ </Pressable>
70
+ );
71
+ };
72
+
73
+ return (
74
+ <View className={`rounded-2xl border p-3.5 ${c.surface} ${c.border}`}>
75
+ <View className="flex-row items-center gap-3">
76
+ <View className={`h-11 w-11 items-center justify-center rounded-xl ${c.iconBg}`}>
77
+ <CalendarIcon size={20} color={c.iconColor} />
78
+ </View>
79
+
80
+ <View className="flex-1">
81
+ <Text className={`text-base font-bold ${c.title}`} numberOfLines={1}>
82
+ {title}
83
+ </Text>
84
+ {subtitle ? (
85
+ <Text className={`text-xs ${c.subtitle}`} numberOfLines={1}>
86
+ {subtitle}
87
+ </Text>
88
+ ) : null}
89
+ </View>
90
+
91
+ <View className={`rounded-full px-2.5 py-1 ${headerStyle.badgeBg}`}>
92
+ <Text className={`text-xs font-semibold ${headerStyle.badgeText}`}>{headerStatusLabel}</Text>
93
+ </View>
94
+ </View>
95
+
96
+ <View className={`my-3 h-px ${c.divider}`} />
97
+
98
+ {head.map((row, index) => (
99
+ <Fragment key={row.id}>
100
+ {index > 0 ? <View className={`h-px ${c.divider}`} /> : null}
101
+ {renderRow(row)}
102
+ </Fragment>
103
+ ))}
104
+
105
+ {hasMore ? (
106
+ <Collapsible expanded={expanded}>
107
+ {rest.map((row) => (
108
+ <Fragment key={row.id}>
109
+ <View className={`h-px ${c.divider}`} />
110
+ {renderRow(row)}
111
+ </Fragment>
112
+ ))}
113
+ </Collapsible>
114
+ ) : null}
115
+
116
+ {hasMore ? (
117
+ <Pressable onPress={toggle} className="mt-1 flex-row items-center justify-between gap-2 py-2">
118
+ <View className="flex-row items-center gap-2">
119
+ <View className={`h-7 w-7 items-center justify-center rounded-full ${c.iconBg}`}>
120
+ <Text className={`text-xs font-semibold ${c.iconText}`}>+{rest.length}</Text>
121
+ </View>
122
+ <Text className={`text-sm ${c.subtitle}`}>
123
+ {expanded
124
+ ? `Showing all ${reservations.length} requests`
125
+ : `Showing ${head.length} of ${reservations.length} requests`}
126
+ </Text>
127
+ </View>
128
+ <View className="flex-row items-center gap-1">
129
+ <Text className={`text-sm font-semibold ${c.iconText}`}>{expanded ? 'Show less' : 'View all'}</Text>
130
+ <View className={expanded ? 'rotate-180' : undefined}>
131
+ <ChevronIcon size={14} color={c.iconColor} />
132
+ </View>
133
+ </View>
134
+ </Pressable>
135
+ ) : null}
136
+
137
+ {list.total || action ? (
138
+ <>
139
+ <View className={`my-3 h-px ${c.divider}`} />
140
+ <View className="flex-row items-center justify-between gap-3">
141
+ <View>
142
+ {totalLabel ? <Text className={`text-xs ${c.subtitle}`}>{totalLabel}</Text> : null}
143
+ {list.total ? <Text className={`text-lg font-bold ${c.title}`}>{list.total}</Text> : null}
144
+ </View>
145
+
146
+ {action ? (
147
+ <Pressable
148
+ onPress={() => onAction?.(list, ItemAction.Manage)}
149
+ className="rounded-xl bg-indigo-500 px-4 py-2"
150
+ >
151
+ <Text className="text-sm font-semibold text-white">{action}</Text>
152
+ </Pressable>
153
+ ) : null}
154
+ </View>
155
+ </>
156
+ ) : null}
157
+ </View>
158
+ );
159
+ }
@@ -0,0 +1,161 @@
1
+ import { Fragment } from 'react';
2
+ import { getThemeClasses } from '../../../../utils/theme.utils';
3
+ import { getReservationStatusStyle } from '../../../../utils/reservation.utils';
4
+ import { resolveText } from '../../../../utils/i18n.utils';
5
+ import { useExpandableList } from '../../../../utils/use-expandable-list';
6
+ import { Collapsible } from '../common/collapsible';
7
+ import { CalendarIcon } from '../common/calendar-icon';
8
+ import { ChevronIcon } from '../common/chevron-icon';
9
+ import { ItemAction, Theme } from '../../model/chat.model';
10
+ import type { ChatComponentProps } from '../../model/chat.model';
11
+ import type { ReservationListItem, ReservationRow } from './reservation.model';
12
+
13
+ export function Reservation({
14
+ data,
15
+ theme = Theme.Dark,
16
+ language,
17
+ actionLabel,
18
+ onAction,
19
+ onSelect,
20
+ }: ChatComponentProps<ReservationListItem>) {
21
+ const c = getThemeClasses(theme);
22
+ const list = Array.isArray(data) ? data[0] : data;
23
+ const reservations = list?.reservations ?? [];
24
+ const { head, rest, expanded, hasMore, toggle } = useExpandableList(reservations);
25
+
26
+ if (!list) return null;
27
+
28
+ const onSelectRow = onSelect as ((row: ReservationRow) => void) | undefined;
29
+ const title = resolveText(list.title, language);
30
+ const subtitle = list.subtitle ? resolveText(list.subtitle, language) : undefined;
31
+ const totalLabel = list.totalLabel ? resolveText(list.totalLabel, language) : undefined;
32
+ const action = list.actionLabel
33
+ ? resolveText(list.actionLabel, language)
34
+ : typeof actionLabel === 'function'
35
+ ? actionLabel(list)
36
+ : actionLabel;
37
+ const headerStyle = getReservationStatusStyle(list.status, theme);
38
+ const headerStatusLabel = list.statusLabel ? resolveText(list.statusLabel, language) : headerStyle.label;
39
+
40
+ const renderRow = (row: ReservationRow) => {
41
+ const s = getReservationStatusStyle(row.status, theme);
42
+ const statusLabel = row.statusLabel ? resolveText(row.statusLabel, language) : s.label;
43
+ const name = resolveText(row.name, language);
44
+
45
+ return (
46
+ <button
47
+ type="button"
48
+ className="flex w-full items-center gap-3 py-2.5 text-left"
49
+ onClick={() => onSelectRow?.(row)}
50
+ >
51
+ <div className={`flex h-11 w-11 shrink-0 items-center justify-center rounded-xl ${c.mutedIconBg}`}>
52
+ <CalendarIcon size={18} color={c.mutedIconColor} />
53
+ </div>
54
+
55
+ <div className="flex min-w-0 flex-1 flex-col gap-1">
56
+ <div className="flex items-center justify-between gap-2">
57
+ <span className={`truncate text-sm font-semibold ${c.title}`}>{name}</span>
58
+ <span className={`shrink-0 text-sm font-bold ${c.price}`}>{row.price}</span>
59
+ </div>
60
+ <div className="flex items-center justify-between gap-2">
61
+ <span className={`truncate text-xs ${c.subtitle}`}>
62
+ {row.date} · {row.time}
63
+ {row.duration ? ` · ${row.duration}` : ''}
64
+ </span>
65
+ <span className={`shrink-0 rounded-full px-2 py-0.5 text-[11px] font-semibold ${s.badgeBg} ${s.badgeText}`}>
66
+ {statusLabel}
67
+ </span>
68
+ </div>
69
+ </div>
70
+ </button>
71
+ );
72
+ };
73
+
74
+ return (
75
+ <div className={`rounded-2xl border p-3.5 ${c.surface} ${c.border}`}>
76
+ <div className="flex items-center gap-3">
77
+ <div className={`flex h-11 w-11 shrink-0 items-center justify-center rounded-xl ${c.iconBg}`}>
78
+ <CalendarIcon size={20} color={c.iconColor} />
79
+ </div>
80
+
81
+ <div className="flex min-w-0 flex-1 flex-col">
82
+ <span className={`truncate text-base font-bold ${c.title}`}>{title}</span>
83
+ {subtitle ? <span className={`truncate text-xs ${c.subtitle}`}>{subtitle}</span> : null}
84
+ </div>
85
+
86
+ <span
87
+ className={`shrink-0 rounded-full px-2.5 py-1 text-xs font-semibold ${headerStyle.badgeBg} ${headerStyle.badgeText}`}
88
+ >
89
+ {headerStatusLabel}
90
+ </span>
91
+ </div>
92
+
93
+ <div className={`my-3 h-px ${c.divider}`} />
94
+
95
+ {head.map((row, index) => (
96
+ <Fragment key={row.id}>
97
+ {index > 0 ? <div className={`h-px ${c.divider}`} /> : null}
98
+ {renderRow(row)}
99
+ </Fragment>
100
+ ))}
101
+
102
+ {hasMore ? (
103
+ <Collapsible expanded={expanded}>
104
+ {rest.map((row) => (
105
+ <Fragment key={row.id}>
106
+ <div className={`h-px ${c.divider}`} />
107
+ {renderRow(row)}
108
+ </Fragment>
109
+ ))}
110
+ </Collapsible>
111
+ ) : null}
112
+
113
+ {hasMore ? (
114
+ <button
115
+ type="button"
116
+ onClick={toggle}
117
+ className={`mt-1 flex w-full items-center justify-between gap-2 rounded-xl py-2`}
118
+ >
119
+ <div className="flex items-center gap-2">
120
+ <span className={`flex h-7 w-7 items-center justify-center rounded-full text-xs font-semibold ${c.iconBg} ${c.iconText}`}>
121
+ +{rest.length}
122
+ </span>
123
+ <span className={`text-sm ${c.subtitle}`}>
124
+ {expanded
125
+ ? `Showing all ${reservations.length} requests`
126
+ : `Showing ${head.length} of ${reservations.length} requests`}
127
+ </span>
128
+ </div>
129
+ <span className={`flex shrink-0 items-center gap-1 text-sm font-semibold ${c.iconText}`}>
130
+ {expanded ? 'Show less' : 'View all'}
131
+ <span className={`transition-transform ${expanded ? 'rotate-180' : ''}`}>
132
+ <ChevronIcon size={14} color="currentColor" />
133
+ </span>
134
+ </span>
135
+ </button>
136
+ ) : null}
137
+
138
+ {list.total || action ? (
139
+ <>
140
+ <div className={`my-3 h-px ${c.divider}`} />
141
+ <div className="flex items-center justify-between gap-3">
142
+ <div className="flex flex-col">
143
+ {totalLabel ? <span className={`text-xs ${c.subtitle}`}>{totalLabel}</span> : null}
144
+ {list.total ? <span className={`text-lg font-bold ${c.title}`}>{list.total}</span> : null}
145
+ </div>
146
+
147
+ {action ? (
148
+ <button
149
+ type="button"
150
+ onClick={() => onAction?.(list, ItemAction.Manage)}
151
+ className="rounded-xl bg-indigo-500 px-4 py-2 text-sm font-semibold text-white"
152
+ >
153
+ {action}
154
+ </button>
155
+ ) : null}
156
+ </div>
157
+ </>
158
+ ) : null}
159
+ </div>
160
+ );
161
+ }
@@ -14,10 +14,26 @@ export enum ComponentType {
14
14
  Event = 'event',
15
15
  EventList = 'eventList',
16
16
  Info = 'info',
17
+ Flight = 'flight',
18
+ FlightList = 'flightList',
19
+ FlightBoard = 'flightBoard',
20
+ Order = 'order',
21
+ Reservation = 'reservation',
22
+ ReservationList = 'reservationList',
17
23
  }
18
24
 
19
25
  export enum ItemAction {
20
26
  Add = 'add',
27
+ Manage = 'manage',
28
+ Track = 'track',
29
+ }
30
+
31
+ export enum FlightStatus {
32
+ OnTime = 'onTime',
33
+ Delayed = 'delayed',
34
+ Boarding = 'boarding',
35
+ Landed = 'landed',
36
+ Cancelled = 'cancelled',
21
37
  }
22
38
 
23
39
  export type ActionHandler<TItem = unknown> = (item: TItem, action?: ItemAction) => void;
@@ -2,15 +2,31 @@ import { Product } from '../components/product/product.native';
2
2
  import { Service } from '../components/service/service.native';
3
3
  import { Event } from '../components/event/event.native';
4
4
  import { Info } from '../components/info/info.native';
5
+ import { Flight } from '../components/flight/flight.native';
6
+ import { FlightBoard } from '../components/flight-board/flight-board.native';
7
+ import { Order } from '../components/order/order.native';
8
+ import { Reservation } from '../components/reservation/reservation.native';
5
9
  import type { ProductItem } from '../components/product/product.model';
6
10
  import type { ServiceItem } from '../components/service/service.model';
7
11
  import type { EventItem } from '../components/event/event.model';
8
12
  import type { InfoItem } from '../components/info/info.model';
13
+ import type { FlightItem } from '../components/flight/flight.model';
14
+ import type { FlightBoardItem } from '../components/flight-board/flight-board.model';
15
+ import type { OrderListItem } from '../components/order/order.model';
16
+ import type { ReservationListItem } from '../components/reservation/reservation.model';
9
17
  import { ComponentType } from '../model/chat.model';
10
18
  import type { ChatComponentProps } from '../model/chat.model';
11
19
 
12
20
  export function ChatComponentRenderer<
13
- TItem extends ProductItem | ServiceItem | EventItem | InfoItem,
21
+ TItem extends
22
+ | ProductItem
23
+ | ServiceItem
24
+ | EventItem
25
+ | InfoItem
26
+ | FlightItem
27
+ | FlightBoardItem
28
+ | OrderListItem
29
+ | ReservationListItem,
14
30
  >({ type, ...rest }: ChatComponentProps<TItem>) {
15
31
  switch (type) {
16
32
  case ComponentType.Product:
@@ -24,6 +40,18 @@ export function ChatComponentRenderer<
24
40
  return <Event type={type} {...(rest as unknown as Omit<ChatComponentProps<EventItem>, 'type'>)} />;
25
41
  case ComponentType.Info:
26
42
  return <Info type={type} {...(rest as unknown as Omit<ChatComponentProps<InfoItem>, 'type'>)} />;
43
+ case ComponentType.Flight:
44
+ case ComponentType.FlightList:
45
+ return <Flight type={type} {...(rest as unknown as Omit<ChatComponentProps<FlightItem>, 'type'>)} />;
46
+ case ComponentType.FlightBoard:
47
+ return <FlightBoard type={type} {...(rest as unknown as Omit<ChatComponentProps<FlightBoardItem>, 'type'>)} />;
48
+ case ComponentType.Order:
49
+ return <Order type={type} {...(rest as unknown as Omit<ChatComponentProps<OrderListItem>, 'type'>)} />;
50
+ case ComponentType.Reservation:
51
+ case ComponentType.ReservationList:
52
+ return (
53
+ <Reservation type={type} {...(rest as unknown as Omit<ChatComponentProps<ReservationListItem>, 'type'>)} />
54
+ );
27
55
  default:
28
56
  return null;
29
57
  }
@@ -2,15 +2,31 @@ import { Product } from '../components/product/product';
2
2
  import { Service } from '../components/service/service';
3
3
  import { Event } from '../components/event/event';
4
4
  import { Info } from '../components/info/info';
5
+ import { Flight } from '../components/flight/flight';
6
+ import { FlightBoard } from '../components/flight-board/flight-board';
7
+ import { Order } from '../components/order/order';
8
+ import { Reservation } from '../components/reservation/reservation';
5
9
  import type { ProductItem } from '../components/product/product.model';
6
10
  import type { ServiceItem } from '../components/service/service.model';
7
11
  import type { EventItem } from '../components/event/event.model';
8
12
  import type { InfoItem } from '../components/info/info.model';
13
+ import type { FlightItem } from '../components/flight/flight.model';
14
+ import type { FlightBoardItem } from '../components/flight-board/flight-board.model';
15
+ import type { OrderListItem } from '../components/order/order.model';
16
+ import type { ReservationListItem } from '../components/reservation/reservation.model';
9
17
  import { ComponentType } from '../model/chat.model';
10
18
  import type { ChatComponentProps } from '../model/chat.model';
11
19
 
12
20
  export function ChatComponentRenderer<
13
- TItem extends ProductItem | ServiceItem | EventItem | InfoItem,
21
+ TItem extends
22
+ | ProductItem
23
+ | ServiceItem
24
+ | EventItem
25
+ | InfoItem
26
+ | FlightItem
27
+ | FlightBoardItem
28
+ | OrderListItem
29
+ | ReservationListItem,
14
30
  >({ type, ...rest }: ChatComponentProps<TItem>) {
15
31
  switch (type) {
16
32
  case ComponentType.Product:
@@ -24,6 +40,18 @@ export function ChatComponentRenderer<
24
40
  return <Event type={type} {...(rest as unknown as Omit<ChatComponentProps<EventItem>, 'type'>)} />;
25
41
  case ComponentType.Info:
26
42
  return <Info type={type} {...(rest as unknown as Omit<ChatComponentProps<InfoItem>, 'type'>)} />;
43
+ case ComponentType.Flight:
44
+ case ComponentType.FlightList:
45
+ return <Flight type={type} {...(rest as unknown as Omit<ChatComponentProps<FlightItem>, 'type'>)} />;
46
+ case ComponentType.FlightBoard:
47
+ return <FlightBoard type={type} {...(rest as unknown as Omit<ChatComponentProps<FlightBoardItem>, 'type'>)} />;
48
+ case ComponentType.Order:
49
+ return <Order type={type} {...(rest as unknown as Omit<ChatComponentProps<OrderListItem>, 'type'>)} />;
50
+ case ComponentType.Reservation:
51
+ case ComponentType.ReservationList:
52
+ return (
53
+ <Reservation type={type} {...(rest as unknown as Omit<ChatComponentProps<ReservationListItem>, 'type'>)} />
54
+ );
27
55
  default:
28
56
  return null;
29
57
  }