@opexa/portal-components 0.0.2 → 0.0.3

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 (670) hide show
  1. package/dist/components/Account/Account.d.ts +12 -0
  2. package/dist/components/Account/Account.jsx +172 -0
  3. package/dist/components/Account/index.d.ts +1 -0
  4. package/dist/components/Account/index.js +1 -0
  5. package/dist/components/Banner/Banner.d.ts +11 -0
  6. package/dist/components/Banner/Banner.jsx +52 -0
  7. package/dist/components/Banner/index.d.ts +1 -0
  8. package/dist/components/Banner/index.js +1 -0
  9. package/dist/components/BetRecords/BetRecords.d.ts +7 -0
  10. package/dist/components/BetRecords/BetRecords.jsx +4 -0
  11. package/dist/components/BetRecords/BetRecordsContent.d.ts +2 -0
  12. package/dist/components/BetRecords/BetRecordsContent.jsx +413 -0
  13. package/dist/components/BetRecords/index.d.ts +1 -0
  14. package/dist/components/BetRecords/index.js +1 -0
  15. package/dist/components/DepositWithdrawal/AmountChoices.d.ts +11 -0
  16. package/dist/components/DepositWithdrawal/AmountChoices.jsx +31 -0
  17. package/dist/components/DepositWithdrawal/AvailablePromos.d.ts +8 -0
  18. package/dist/components/DepositWithdrawal/AvailablePromos.jsx +78 -0
  19. package/dist/components/DepositWithdrawal/Deposit/Deposit.d.ts +1 -0
  20. package/dist/components/DepositWithdrawal/Deposit/Deposit.jsx +82 -0
  21. package/dist/components/DepositWithdrawal/Deposit/GCashDeposit/GCashDeposit.d.ts +1 -0
  22. package/dist/components/DepositWithdrawal/Deposit/GCashDeposit/GCashDeposit.jsx +275 -0
  23. package/dist/components/DepositWithdrawal/Deposit/MayaAppDeposit/MayaAppDeposit.d.ts +1 -0
  24. package/dist/components/DepositWithdrawal/Deposit/MayaAppDeposit/MayaAppDeposit.jsx +282 -0
  25. package/dist/components/DepositWithdrawal/Deposit/MayaAppDeposit/SessionExpired.d.ts +1 -0
  26. package/dist/components/DepositWithdrawal/Deposit/MayaAppDeposit/SessionExpired.jsx +13 -0
  27. package/dist/components/DepositWithdrawal/Deposit/MayaDeposit/MayaDeposit.d.ts +1 -0
  28. package/dist/components/DepositWithdrawal/Deposit/MayaDeposit/MayaDeposit.jsx +275 -0
  29. package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/OnlineBankDeposit.d.ts +1 -0
  30. package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/OnlineBankDeposit.jsx +15 -0
  31. package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/OnlineBankDepositContext.d.ts +22 -0
  32. package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/OnlineBankDepositContext.jsx +8 -0
  33. package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/OnlineBankDepositForm.d.ts +1 -0
  34. package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/OnlineBankDepositForm.jsx +286 -0
  35. package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/OnlineBankDepositLoading.d.ts +1 -0
  36. package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/OnlineBankDepositLoading.jsx +15 -0
  37. package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/OnlineBankDepositSuccess.d.ts +1 -0
  38. package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/OnlineBankDepositSuccess.jsx +13 -0
  39. package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/OnlineBankDepositVCA.d.ts +1 -0
  40. package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/OnlineBankDepositVCA.jsx +92 -0
  41. package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/useOnlineBankDeposit.d.ts +14 -0
  42. package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/useOnlineBankDeposit.jsx +77 -0
  43. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/QRPHDeposit.d.ts +1 -0
  44. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/QRPHDeposit.jsx +15 -0
  45. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/QRPHDepositContext.d.ts +24 -0
  46. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/QRPHDepositContext.jsx +8 -0
  47. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/QRPHDepositForm.d.ts +1 -0
  48. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/QRPHDepositForm.jsx +256 -0
  49. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/QRPHDepositLoading.d.ts +1 -0
  50. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/QRPHDepositLoading.jsx +14 -0
  51. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/QRPHDepositQrCode.d.ts +1 -0
  52. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/QRPHDepositQrCode.jsx +107 -0
  53. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/QRPHDepositSuccess.d.ts +1 -0
  54. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/QRPHDepositSuccess.jsx +19 -0
  55. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/useQRPHDeposit.d.ts +15 -0
  56. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/useQRPHDeposit.jsx +81 -0
  57. package/dist/components/DepositWithdrawal/DepositWithdrawal.d.ts +6 -0
  58. package/dist/components/DepositWithdrawal/DepositWithdrawal.jsx +101 -0
  59. package/dist/components/DepositWithdrawal/DepositWithdrawalTrigger.d.ts +4 -0
  60. package/dist/components/DepositWithdrawal/DepositWithdrawalTrigger.jsx +63 -0
  61. package/dist/components/DepositWithdrawal/PaymentMethods.d.ts +10 -0
  62. package/dist/components/DepositWithdrawal/PaymentMethods.jsx +70 -0
  63. package/dist/components/DepositWithdrawal/Withdrawal/GCashWithdrawal.d.ts +0 -0
  64. package/dist/components/DepositWithdrawal/Withdrawal/GCashWithdrawal.jsx +1 -0
  65. package/dist/components/DepositWithdrawal/Withdrawal/InstapayWithdrawal.d.ts +0 -0
  66. package/dist/components/DepositWithdrawal/Withdrawal/InstapayWithdrawal.jsx +1 -0
  67. package/dist/components/DepositWithdrawal/Withdrawal/MayaAppWithdrawal.d.ts +0 -0
  68. package/dist/components/DepositWithdrawal/Withdrawal/MayaAppWithdrawal.jsx +1 -0
  69. package/dist/components/DepositWithdrawal/Withdrawal/MayaWithdrawal.d.ts +0 -0
  70. package/dist/components/DepositWithdrawal/Withdrawal/MayaWithdrawal.jsx +1 -0
  71. package/dist/components/DepositWithdrawal/Withdrawal/Withdrawal.d.ts +1 -0
  72. package/dist/components/DepositWithdrawal/Withdrawal/Withdrawal.jsx +3 -0
  73. package/dist/components/DepositWithdrawal/index.d.ts +1 -0
  74. package/dist/components/DepositWithdrawal/index.js +1 -0
  75. package/dist/components/DepositWithdrawal/utils.d.ts +3 -0
  76. package/dist/components/DepositWithdrawal/utils.js +8 -0
  77. package/dist/components/Disclaimer/Disclaimer.d.ts +5 -0
  78. package/dist/components/Disclaimer/Disclaimer.jsx +45 -0
  79. package/dist/components/Disclaimer/index.d.ts +1 -0
  80. package/dist/components/Disclaimer/index.js +1 -0
  81. package/dist/components/Disclaimer/useDisclaimer.d.ts +4 -0
  82. package/dist/components/Disclaimer/useDisclaimer.jsx +39 -0
  83. package/dist/components/Empty/CloudIcon.d.ts +2 -0
  84. package/dist/components/Empty/CloudIcon.jsx +42 -0
  85. package/dist/components/Empty/Empty.d.ts +9 -0
  86. package/dist/components/Empty/Empty.jsx +16 -0
  87. package/dist/components/Empty/index.d.ts +1 -0
  88. package/dist/components/Empty/index.js +1 -0
  89. package/dist/components/FeatureFlagProvider/FeatureFlagContext.d.ts +3 -0
  90. package/dist/components/FeatureFlagProvider/FeatureFlagContext.jsx +8 -0
  91. package/dist/components/FeatureFlagProvider/FeatureFlagProvider.d.ts +6 -0
  92. package/dist/components/FeatureFlagProvider/FeatureFlagProvider.jsx +19 -0
  93. package/dist/components/FeatureFlagProvider/index.d.ts +2 -0
  94. package/dist/components/FeatureFlagProvider/index.js +3 -0
  95. package/dist/components/FeatureFlagProvider/useFeatureFlag.d.ts +8 -0
  96. package/dist/components/FeatureFlagProvider/useFeatureFlag.js +66 -0
  97. package/dist/components/GameLaunch/GameLaunch.d.ts +5 -0
  98. package/dist/components/GameLaunch/GameLaunch.jsx +225 -0
  99. package/dist/components/GameLaunch/GameLaunchTrigger.d.ts +6 -0
  100. package/dist/components/GameLaunch/GameLaunchTrigger.jsx +107 -0
  101. package/dist/components/GameLaunch/index.d.ts +2 -0
  102. package/dist/components/GameLaunch/index.js +2 -0
  103. package/dist/components/GameProviders/GameProviders.d.ts +14 -0
  104. package/dist/components/GameProviders/GameProviders.jsx +3 -0
  105. package/dist/components/Games/Games.d.ts +10 -0
  106. package/dist/components/Games/Games.jsx +57 -0
  107. package/dist/components/Games/GamesContent.d.ts +2 -0
  108. package/dist/components/Games/GamesContent.jsx +138 -0
  109. package/dist/components/Games/index.d.ts +1 -0
  110. package/dist/components/Games/index.js +1 -0
  111. package/dist/components/JackpotCounter/JackpotCounter.d.ts +6 -0
  112. package/dist/components/JackpotCounter/JackpotCounter.jsx +61 -0
  113. package/dist/components/JackpotCounter/JackpotCounterContent.d.ts +2 -0
  114. package/dist/components/JackpotCounter/JackpotCounterContent.jsx +87 -0
  115. package/dist/components/JackpotCounter/JackpotCounterItem.d.ts +6 -0
  116. package/dist/components/JackpotCounter/JackpotCounterItem.jsx +108 -0
  117. package/dist/components/JackpotCounter/index.d.ts +1 -0
  118. package/dist/components/JackpotCounter/index.js +1 -0
  119. package/dist/components/Marquee/Marquee.d.ts +5 -0
  120. package/dist/components/Marquee/Marquee.jsx +14 -0
  121. package/dist/components/Marquee/index.d.ts +1 -0
  122. package/dist/components/Marquee/index.js +1 -0
  123. package/dist/components/PortalProvider/PortalProvider.d.ts +2 -0
  124. package/dist/components/PortalProvider/PortalProvider.jsx +67 -0
  125. package/dist/components/PortalProvider/Providers.d.ts +2 -0
  126. package/dist/components/PortalProvider/Providers.jsx +49 -0
  127. package/dist/components/PortalProvider/index.d.ts +1 -0
  128. package/dist/components/PortalProvider/index.js +1 -0
  129. package/dist/components/Promo/Promo.d.ts +4 -0
  130. package/dist/components/Promo/Promo.jsx +50 -0
  131. package/dist/components/Promo/PromoContent.d.ts +2 -0
  132. package/dist/components/Promo/PromoContent.jsx +18 -0
  133. package/dist/components/Promo/index.d.ts +1 -0
  134. package/dist/components/Promo/index.js +1 -0
  135. package/dist/components/Promos/PromoCarousel.d.ts +2 -0
  136. package/dist/components/Promos/PromoCarousel.jsx +110 -0
  137. package/dist/components/Promos/PromoGrid.d.ts +2 -0
  138. package/dist/components/Promos/PromoGrid.jsx +24 -0
  139. package/dist/components/Promos/PromoItem.d.ts +7 -0
  140. package/dist/components/Promos/PromoItem.jsx +24 -0
  141. package/dist/components/Promos/Promos.d.ts +11 -0
  142. package/dist/components/Promos/Promos.jsx +57 -0
  143. package/dist/components/Promos/PromosContent.d.ts +2 -0
  144. package/dist/components/Promos/PromosContent.jsx +110 -0
  145. package/dist/components/Promos/index.d.ts +1 -0
  146. package/dist/components/Promos/index.js +1 -0
  147. package/dist/components/Protected/Protected.d.ts +6 -0
  148. package/dist/components/Protected/Protected.jsx +9 -0
  149. package/dist/components/Protected/index.d.ts +1 -0
  150. package/dist/components/Protected/index.js +1 -0
  151. package/dist/components/SignIn/SignIn.d.ts +8 -0
  152. package/dist/components/SignIn/SignIn.jsx +39 -0
  153. package/dist/components/SignIn/SignInForm.d.ts +1 -0
  154. package/dist/components/SignIn/SignInForm.jsx +308 -0
  155. package/dist/components/SignIn/index.d.ts +1 -0
  156. package/dist/components/SignIn/index.js +1 -0
  157. package/dist/components/SignUp/SignUp.d.ts +8 -0
  158. package/dist/components/SignUp/SignUp.jsx +37 -0
  159. package/dist/components/SignUp/SignUpForm.d.ts +1 -0
  160. package/dist/components/SignUp/SignUpForm.jsx +312 -0
  161. package/dist/components/SignUp/index.d.ts +1 -0
  162. package/dist/components/SignUp/index.js +1 -0
  163. package/dist/components/TopWins/TopWins.d.ts +5 -0
  164. package/dist/components/TopWins/TopWins.jsx +45 -0
  165. package/dist/components/TopWins/TopWinsContent.d.ts +2 -0
  166. package/dist/components/TopWins/TopWinsContent.jsx +51 -0
  167. package/dist/components/TopWins/index.d.ts +1 -0
  168. package/dist/components/TopWins/index.js +1 -0
  169. package/dist/components/TournamentCounter/TournamentCounter.d.ts +6 -0
  170. package/dist/components/TournamentCounter/TournamentCounter.jsx +54 -0
  171. package/dist/components/TournamentCounter/TournamentCounterContent.d.ts +2 -0
  172. package/dist/components/TournamentCounter/TournamentCounterContent.jsx +79 -0
  173. package/dist/components/TournamentCounter/TournamentCounterItem.d.ts +8 -0
  174. package/dist/components/TournamentCounter/TournamentCounterItem.jsx +111 -0
  175. package/dist/components/TournamentCounter/index.d.ts +1 -0
  176. package/dist/components/TournamentCounter/index.js +1 -0
  177. package/dist/components/TransactionRecords/DepositRecordsTable.d.ts +1 -0
  178. package/dist/components/TransactionRecords/DepositRecordsTable.jsx +181 -0
  179. package/dist/components/TransactionRecords/TableFilters.d.ts +26 -0
  180. package/dist/components/TransactionRecords/TableFilters.jsx +359 -0
  181. package/dist/components/TransactionRecords/TransactionRecords.d.ts +7 -0
  182. package/dist/components/TransactionRecords/TransactionRecords.jsx +33 -0
  183. package/dist/components/TransactionRecords/TransactionRecordsTable.d.ts +1 -0
  184. package/dist/components/TransactionRecords/TransactionRecordsTable.jsx +141 -0
  185. package/dist/components/TransactionRecords/WithdrawalRecordsTable.d.ts +1 -0
  186. package/dist/components/TransactionRecords/WithdrawalRecordsTable.jsx +177 -0
  187. package/dist/components/TransactionRecords/index.d.ts +1 -0
  188. package/dist/components/TransactionRecords/index.js +1 -0
  189. package/dist/components/index.d.ts +18 -0
  190. package/dist/components/index.js +18 -0
  191. package/dist/constants/index.d.ts +10 -0
  192. package/dist/constants/index.js +64 -0
  193. package/dist/handlers.d.ts +4 -6
  194. package/dist/handlers.js +291 -303
  195. package/dist/hooks/useAccountQuery/getAccountQueryKey.d.ts +2 -0
  196. package/dist/hooks/useAccountQuery/getAccountQueryKey.js +1 -0
  197. package/dist/hooks/useAccountQuery/prefetchAccountQuery.d.ts +1 -0
  198. package/dist/hooks/useAccountQuery/prefetchAccountQuery.js +75 -0
  199. package/dist/hooks/useAccountQuery/useAccountQuery.d.ts +3 -0
  200. package/dist/hooks/useAccountQuery/useAccountQuery.js +88 -0
  201. package/dist/hooks/useAuthenticateMutation/getAuthenticateMutationKey.d.ts +2 -0
  202. package/dist/hooks/useAuthenticateMutation/getAuthenticateMutationKey.js +1 -0
  203. package/dist/hooks/useAuthenticateMutation/useAuthenticateMutation.d.ts +3 -0
  204. package/dist/hooks/useAuthenticateMutation/useAuthenticateMutation.js +70 -0
  205. package/dist/hooks/useAvailablePromosQuery/getAvailablePromosQueryKey.d.ts +3 -0
  206. package/dist/hooks/useAvailablePromosQuery/getAvailablePromosQueryKey.js +4 -0
  207. package/dist/hooks/useAvailablePromosQuery/prefetchAvailablePromosQuery.d.ts +2 -0
  208. package/dist/hooks/useAvailablePromosQuery/prefetchAvailablePromosQuery.js +75 -0
  209. package/dist/hooks/useAvailablePromosQuery/useAvailablePromosQuery.d.ts +3 -0
  210. package/dist/hooks/useAvailablePromosQuery/useAvailablePromosQuery.js +88 -0
  211. package/dist/hooks/useBetRecordsQuery/getBetRecordsQueryKey.d.ts +3 -0
  212. package/dist/hooks/useBetRecordsQuery/getBetRecordsQueryKey.js +4 -0
  213. package/dist/hooks/useBetRecordsQuery/prefetchBetRecordsQuery.d.ts +2 -0
  214. package/dist/hooks/useBetRecordsQuery/prefetchBetRecordsQuery.js +75 -0
  215. package/dist/hooks/useBetRecordsQuery/useBetRecordsQuery.d.ts +3 -0
  216. package/dist/hooks/useBetRecordsQuery/useBetRecordsQuery.js +91 -0
  217. package/dist/hooks/useCashbacksQuery/getCashbacksQueryKey.d.ts +2 -0
  218. package/dist/hooks/useCashbacksQuery/getCashbacksQueryKey.js +1 -0
  219. package/dist/hooks/useCashbacksQuery/prefetchCashbacksQuery.d.ts +1 -0
  220. package/dist/hooks/useCashbacksQuery/prefetchCashbacksQuery.js +67 -0
  221. package/dist/hooks/useCashbacksQuery/useCashbacksQuery.d.ts +3 -0
  222. package/dist/hooks/useCashbacksQuery/useCashbacksQuery.js +68 -0
  223. package/dist/hooks/useControllableState.d.ts +8 -0
  224. package/dist/hooks/useControllableState.js +47 -0
  225. package/dist/hooks/useCooldown.d.ts +43 -0
  226. package/dist/hooks/useCooldown.js +101 -0
  227. package/dist/hooks/useCreateGCashDepositMutation/getCreateGCashDepositMutationKey.d.ts +2 -0
  228. package/dist/hooks/useCreateGCashDepositMutation/getCreateGCashDepositMutationKey.js +3 -0
  229. package/dist/hooks/useCreateGCashDepositMutation/useCreateGCashDepositMutation.d.ts +4 -0
  230. package/dist/hooks/useCreateGCashDepositMutation/useCreateGCashDepositMutation.js +125 -0
  231. package/dist/hooks/useCreateGameSessionMutation/getCreateGameSessionMutationKey.d.ts +2 -0
  232. package/dist/hooks/useCreateGameSessionMutation/getCreateGameSessionMutationKey.js +3 -0
  233. package/dist/hooks/useCreateGameSessionMutation/useCreateGameSessionMutation.d.ts +3 -0
  234. package/dist/hooks/useCreateGameSessionMutation/useCreateGameSessionMutation.js +171 -0
  235. package/dist/hooks/useCreateMayaAppDepositMutation/getCreateMayaAppDepositMutationKey.d.ts +2 -0
  236. package/dist/hooks/useCreateMayaAppDepositMutation/getCreateMayaAppDepositMutationKey.js +3 -0
  237. package/dist/hooks/useCreateMayaAppDepositMutation/useCreateMayaAppDepositMutation.d.ts +4 -0
  238. package/dist/hooks/useCreateMayaAppDepositMutation/useCreateMayaAppDepositMutation.js +125 -0
  239. package/dist/hooks/useCreateMayaDepositMutation/getCreateMayaDepositMutationKey.d.ts +2 -0
  240. package/dist/hooks/useCreateMayaDepositMutation/getCreateMayaDepositMutationKey.js +3 -0
  241. package/dist/hooks/useCreateMayaDepositMutation/useCreateMayaDepositMutation.d.ts +4 -0
  242. package/dist/hooks/useCreateMayaDepositMutation/useCreateMayaDepositMutation.js +125 -0
  243. package/dist/hooks/useCreateOnlineBankDepositMutation/getCreateOnlineBankDepositMutationKey.d.ts +2 -0
  244. package/dist/hooks/useCreateOnlineBankDepositMutation/getCreateOnlineBankDepositMutationKey.js +3 -0
  245. package/dist/hooks/useCreateOnlineBankDepositMutation/useCreateOnlineBankDepositMutation.d.ts +4 -0
  246. package/dist/hooks/useCreateOnlineBankDepositMutation/useCreateOnlineBankDepositMutation.js +125 -0
  247. package/dist/hooks/useCreateQRPHDepositMutation/getCreateQRPHDepositMutationKey.d.ts +2 -0
  248. package/dist/hooks/useCreateQRPHDepositMutation/getCreateQRPHDepositMutationKey.js +3 -0
  249. package/dist/hooks/useCreateQRPHDepositMutation/useCreateQRPHDepositMutation.d.ts +4 -0
  250. package/dist/hooks/useCreateQRPHDepositMutation/useCreateQRPHDepositMutation.js +125 -0
  251. package/dist/hooks/useDepositQuery/getDepositQueryKey.d.ts +2 -0
  252. package/dist/hooks/useDepositQuery/getDepositQueryKey.js +4 -0
  253. package/dist/hooks/useDepositQuery/prefetchDepositQuery.d.ts +1 -0
  254. package/dist/hooks/useDepositQuery/prefetchDepositQuery.js +75 -0
  255. package/dist/hooks/useDepositQuery/useDepositQuery.d.ts +3 -0
  256. package/dist/hooks/useDepositQuery/useDepositQuery.js +88 -0
  257. package/dist/hooks/useDepositRecordsQuery/getDepositRecordsQueryKey.d.ts +3 -0
  258. package/dist/hooks/useDepositRecordsQuery/getDepositRecordsQueryKey.js +4 -0
  259. package/dist/hooks/useDepositRecordsQuery/prefetchDepositRecordsQuery.d.ts +2 -0
  260. package/dist/hooks/useDepositRecordsQuery/prefetchDepositRecordsQuery.js +75 -0
  261. package/dist/hooks/useDepositRecordsQuery/useDepositRecordsQuery.d.ts +3 -0
  262. package/dist/hooks/useDepositRecordsQuery/useDepositRecordsQuery.js +93 -0
  263. package/dist/hooks/useDepositsCountQuery/getDepositsCountQueryKey.d.ts +2 -0
  264. package/dist/hooks/useDepositsCountQuery/getDepositsCountQueryKey.js +3 -0
  265. package/dist/hooks/useDepositsCountQuery/prefetchDepositsCountQuery.d.ts +1 -0
  266. package/dist/hooks/useDepositsCountQuery/prefetchDepositsCountQuery.js +75 -0
  267. package/dist/hooks/useDepositsCountQuery/useDepositsCountQuery.d.ts +2 -0
  268. package/dist/hooks/useDepositsCountQuery/useDepositsCountQuery.js +88 -0
  269. package/dist/hooks/useDisclosure.d.ts +11 -0
  270. package/dist/hooks/useDisclosure.js +13 -0
  271. package/dist/hooks/useEndGameSessionMutation/getEndGameSessionMutationKey.d.ts +2 -0
  272. package/dist/hooks/useEndGameSessionMutation/getEndGameSessionMutationKey.js +3 -0
  273. package/dist/hooks/useEndGameSessionMutation/useEndGameSessionMutation.d.ts +6 -0
  274. package/dist/hooks/useEndGameSessionMutation/useEndGameSessionMutation.js +95 -0
  275. package/dist/hooks/useGamesQuery/getGamesQueryKey.d.ts +3 -0
  276. package/dist/hooks/useGamesQuery/getGamesQueryKey.js +1 -0
  277. package/dist/hooks/useGamesQuery/prefetchGamesQuery.d.ts +2 -0
  278. package/dist/hooks/useGamesQuery/prefetchGamesQuery.js +80 -0
  279. package/dist/hooks/useGamesQuery/useGamesQuery.d.ts +3 -0
  280. package/dist/hooks/useGamesQuery/useGamesQuery.js +33 -0
  281. package/dist/hooks/useGlobalStore.d.ts +42 -0
  282. package/dist/hooks/useGlobalStore.js +76 -0
  283. package/dist/hooks/useInfiniteQueryHelper.d.ts +31 -0
  284. package/dist/hooks/useInfiniteQueryHelper.js +121 -0
  285. package/dist/hooks/useInstapayBankListQuery/getInstapayBankListQueryKey.d.ts +2 -0
  286. package/dist/hooks/useInstapayBankListQuery/getInstapayBankListQueryKey.js +3 -0
  287. package/dist/hooks/useInstapayBankListQuery/prefetchInstapayBankListQuery.d.ts +1 -0
  288. package/dist/hooks/useInstapayBankListQuery/prefetchInstapayBankListQuery.js +75 -0
  289. package/dist/hooks/useInstapayBankListQuery/useInstapayBankListQuery.d.ts +3 -0
  290. package/dist/hooks/useInstapayBankListQuery/useInstapayBankListQuery.js +88 -0
  291. package/dist/hooks/useIsMayaSessionValidQuery/getIsMayaSessionValidQueryKey.d.ts +2 -0
  292. package/dist/hooks/useIsMayaSessionValidQuery/getIsMayaSessionValidQueryKey.js +3 -0
  293. package/dist/hooks/useIsMayaSessionValidQuery/prefetchIsMayaSessionValidQuery.d.ts +1 -0
  294. package/dist/hooks/useIsMayaSessionValidQuery/prefetchIsMayaSessionValidQuery.js +84 -0
  295. package/dist/hooks/useIsMayaSessionValidQuery/useIsMayaSessionValidQuery.d.ts +2 -0
  296. package/dist/hooks/useIsMayaSessionValidQuery/useIsMayaSessionValidQuery.js +97 -0
  297. package/dist/hooks/useJackpotsQuery/getJackpotsQueryKey.d.ts +3 -0
  298. package/dist/hooks/useJackpotsQuery/getJackpotsQueryKey.js +1 -0
  299. package/dist/hooks/useJackpotsQuery/prefetchJackpotsQuery.d.ts +2 -0
  300. package/dist/hooks/useJackpotsQuery/prefetchJackpotsQuery.js +68 -0
  301. package/dist/hooks/useJackpotsQuery/useJackpotsQuery.d.ts +3 -0
  302. package/dist/hooks/useJackpotsQuery/useJackpotsQuery.js +32 -0
  303. package/dist/hooks/useLocaleInfo.d.ts +1 -0
  304. package/dist/hooks/useLocaleInfo.js +7 -0
  305. package/dist/hooks/useMemberVerificationQuery/getMemberVerificationQueryKey.d.ts +2 -0
  306. package/dist/hooks/useMemberVerificationQuery/getMemberVerificationQueryKey.js +1 -0
  307. package/dist/hooks/useMemberVerificationQuery/prefetchMemberVerificationQuery.d.ts +1 -0
  308. package/dist/hooks/useMemberVerificationQuery/prefetchMemberVerificationQuery.js +75 -0
  309. package/dist/hooks/useMemberVerificationQuery/useMemberVerificationQuery.d.ts +3 -0
  310. package/dist/hooks/useMemberVerificationQuery/useMemberVerificationQuery.js +87 -0
  311. package/dist/hooks/useMobileNumberParser.d.ts +8 -0
  312. package/dist/hooks/useMobileNumberParser.js +63 -0
  313. package/dist/hooks/useOnMMA.d.ts +2 -0
  314. package/dist/hooks/useOnMMA.js +5 -0
  315. package/dist/hooks/usePaymentSettingsQuery/getPaymentSettingsQueryKey.d.ts +2 -0
  316. package/dist/hooks/usePaymentSettingsQuery/getPaymentSettingsQueryKey.js +3 -0
  317. package/dist/hooks/usePaymentSettingsQuery/prefetchPaymentSettingsQuery.d.ts +1 -0
  318. package/dist/hooks/usePaymentSettingsQuery/prefetchPaymentSettingsQuery.js +75 -0
  319. package/dist/hooks/usePaymentSettingsQuery/usePaymentSettingsQuery.d.ts +3 -0
  320. package/dist/hooks/usePaymentSettingsQuery/usePaymentSettingsQuery.js +88 -0
  321. package/dist/hooks/usePlatformQuery/getPlatformQueryKey.d.ts +2 -0
  322. package/dist/hooks/usePlatformQuery/getPlatformQueryKey.js +1 -0
  323. package/dist/hooks/usePlatformQuery/prefetchPlatformQuery.d.ts +1 -0
  324. package/dist/hooks/usePlatformQuery/prefetchPlatformQuery.js +70 -0
  325. package/dist/hooks/usePlatformQuery/usePlatformQuery.d.ts +3 -0
  326. package/dist/hooks/usePlatformQuery/usePlatformQuery.js +65 -0
  327. package/dist/hooks/usePromoQuery/getPromoQueryKey.d.ts +2 -0
  328. package/dist/hooks/usePromoQuery/getPromoQueryKey.js +1 -0
  329. package/dist/hooks/usePromoQuery/prefetchPromoQuery.d.ts +1 -0
  330. package/dist/hooks/usePromoQuery/prefetchPromoQuery.js +67 -0
  331. package/dist/hooks/usePromoQuery/usePromoQuery.d.ts +3 -0
  332. package/dist/hooks/usePromoQuery/usePromoQuery.js +68 -0
  333. package/dist/hooks/usePromosQuery/getPromosQueryKey.d.ts +2 -0
  334. package/dist/hooks/usePromosQuery/getPromosQueryKey.js +1 -0
  335. package/dist/hooks/usePromosQuery/prefetchPromosQuery.d.ts +1 -0
  336. package/dist/hooks/usePromosQuery/prefetchPromosQuery.js +67 -0
  337. package/dist/hooks/usePromosQuery/usePromosQuery.d.ts +3 -0
  338. package/dist/hooks/usePromosQuery/usePromosQuery.js +68 -0
  339. package/dist/hooks/useSendVerificationCodeMutation/getSendVerificationCodeMutationKey.d.ts +2 -0
  340. package/dist/hooks/useSendVerificationCodeMutation/getSendVerificationCodeMutationKey.js +3 -0
  341. package/dist/hooks/useSendVerificationCodeMutation/useSendVerificationCodeMutation.d.ts +3 -0
  342. package/dist/hooks/useSendVerificationCodeMutation/useSendVerificationCodeMutation.js +68 -0
  343. package/dist/hooks/useSessionQuery/getSessionQueryKey.d.ts +2 -0
  344. package/dist/hooks/useSessionQuery/getSessionQueryKey.js +1 -0
  345. package/dist/hooks/useSessionQuery/prefetchSessionQuery.d.ts +1 -0
  346. package/dist/hooks/useSessionQuery/prefetchSessionQuery.js +53 -0
  347. package/dist/hooks/useSessionQuery/useSessionQuery.d.ts +2 -0
  348. package/dist/hooks/useSessionQuery/useSessionQuery.js +60 -0
  349. package/dist/hooks/useSignOutMutation/getSignOutMutationKey.d.ts +2 -0
  350. package/dist/hooks/useSignOutMutation/getSignOutMutationKey.js +1 -0
  351. package/dist/hooks/useSignOutMutation/useSignOutMutation.d.ts +2 -0
  352. package/dist/hooks/useSignOutMutation/useSignOutMutation.js +69 -0
  353. package/dist/hooks/useSignUpMutation/getSignUpMutationKey.d.ts +2 -0
  354. package/dist/hooks/useSignUpMutation/getSignUpMutationKey.js +1 -0
  355. package/dist/hooks/useSignUpMutation/useSignUpMutation.d.ts +5 -0
  356. package/dist/hooks/useSignUpMutation/useSignUpMutation.js +65 -0
  357. package/dist/hooks/useSigninMutation/getSignInMutationKey.d.ts +2 -0
  358. package/dist/hooks/useSigninMutation/getSignInMutationKey.js +1 -0
  359. package/dist/hooks/useSigninMutation/useSignInMutation.d.ts +4 -0
  360. package/dist/hooks/useSigninMutation/useSignInMutation.js +73 -0
  361. package/dist/hooks/useSiteQuery/getSiteQueryKey.d.ts +2 -0
  362. package/dist/hooks/useSiteQuery/getSiteQueryKey.js +1 -0
  363. package/dist/hooks/useSiteQuery/prefetchSiteQuery.d.ts +1 -0
  364. package/dist/hooks/useSiteQuery/prefetchSiteQuery.js +70 -0
  365. package/dist/hooks/useSiteQuery/useSiteQuery.d.ts +3 -0
  366. package/dist/hooks/useSiteQuery/useSiteQuery.js +68 -0
  367. package/dist/hooks/useTopWinsQuery/getTopWinsQueryKey.d.ts +2 -0
  368. package/dist/hooks/useTopWinsQuery/getTopWinsQueryKey.js +1 -0
  369. package/dist/hooks/useTopWinsQuery/prefetchTopWinsQuery.d.ts +1 -0
  370. package/dist/hooks/useTopWinsQuery/prefetchTopWinsQuery.js +67 -0
  371. package/dist/hooks/useTopWinsQuery/useTopWinsQuery.d.ts +3 -0
  372. package/dist/hooks/useTopWinsQuery/useTopWinsQuery.js +66 -0
  373. package/dist/hooks/useTournamentsQuery/getTournamentsQueryKey.d.ts +3 -0
  374. package/dist/hooks/useTournamentsQuery/getTournamentsQueryKey.js +4 -0
  375. package/dist/hooks/useTournamentsQuery/prefetchTournamentsQuery.d.ts +2 -0
  376. package/dist/hooks/useTournamentsQuery/prefetchTournamentsQuery.js +68 -0
  377. package/dist/hooks/useTournamentsQuery/useTournamentsQuery.d.ts +3 -0
  378. package/dist/hooks/useTournamentsQuery/useTournamentsQuery.js +33 -0
  379. package/dist/hooks/useTransactionRecordsQuery/getTransactionRecordsQueryKey.d.ts +3 -0
  380. package/dist/hooks/useTransactionRecordsQuery/getTransactionRecordsQueryKey.js +4 -0
  381. package/dist/hooks/useTransactionRecordsQuery/prefetchTransactionRecordsQuery.d.ts +2 -0
  382. package/dist/hooks/useTransactionRecordsQuery/prefetchTransactionRecordsQuery.js +75 -0
  383. package/dist/hooks/useTransactionRecordsQuery/useTransactionRecordsQuery.d.ts +3 -0
  384. package/dist/hooks/useTransactionRecordsQuery/useTransactionRecordsQuery.js +93 -0
  385. package/dist/hooks/useWalletQuery/getWalletQueryKey.d.ts +2 -0
  386. package/dist/hooks/useWalletQuery/getWalletQueryKey.js +1 -0
  387. package/dist/hooks/useWalletQuery/prefetchWalletQuery.d.ts +1 -0
  388. package/dist/hooks/useWalletQuery/prefetchWalletQuery.js +75 -0
  389. package/dist/hooks/useWalletQuery/useWalletQuery.d.ts +3 -0
  390. package/dist/hooks/useWalletQuery/useWalletQuery.js +87 -0
  391. package/dist/hooks/useWithdrawalRecordsQuery/getWithdrawalRecordsQueryKey.d.ts +3 -0
  392. package/dist/hooks/useWithdrawalRecordsQuery/getWithdrawalRecordsQueryKey.js +4 -0
  393. package/dist/hooks/useWithdrawalRecordsQuery/prefetchWithdrawalRecordsQuery.d.ts +2 -0
  394. package/dist/hooks/useWithdrawalRecordsQuery/prefetchWithdrawalRecordsQuery.js +75 -0
  395. package/dist/hooks/useWithdrawalRecordsQuery/useWithdrawalRecordsQuery.d.ts +3 -0
  396. package/dist/hooks/useWithdrawalRecordsQuery/useWithdrawalRecordsQuery.js +94 -0
  397. package/dist/icons/AlertCircleIcon.d.ts +2 -0
  398. package/dist/icons/AlertCircleIcon.jsx +5 -0
  399. package/dist/icons/AlertTriangle.d.ts +2 -0
  400. package/dist/icons/AlertTriangle.jsx +5 -0
  401. package/dist/icons/ArrowLeftIcon.d.ts +2 -0
  402. package/dist/icons/ArrowLeftIcon.jsx +5 -0
  403. package/dist/icons/ArrowNarrowUpRightIcon.d.ts +2 -0
  404. package/dist/icons/ArrowNarrowUpRightIcon.jsx +5 -0
  405. package/dist/icons/ArrowRightIcon.d.ts +2 -0
  406. package/dist/icons/ArrowRightIcon.jsx +5 -0
  407. package/dist/icons/Award02Icon.d.ts +2 -0
  408. package/dist/icons/Award02Icon.jsx +5 -0
  409. package/dist/icons/BankIcon.d.ts +2 -0
  410. package/dist/icons/BankIcon.jsx +5 -0
  411. package/dist/icons/CheckCircleBrokenIcon.d.ts +2 -0
  412. package/dist/icons/CheckCircleBrokenIcon.jsx +5 -0
  413. package/dist/icons/CheckIcon.d.ts +2 -0
  414. package/dist/icons/CheckIcon.jsx +5 -0
  415. package/dist/icons/ChevronDownIcon.d.ts +2 -0
  416. package/dist/icons/ChevronDownIcon.jsx +5 -0
  417. package/dist/icons/ChevronLeftIcon.d.ts +2 -0
  418. package/dist/icons/ChevronLeftIcon.jsx +5 -0
  419. package/dist/icons/ChevronRightIcon.d.ts +2 -0
  420. package/dist/icons/ChevronRightIcon.jsx +5 -0
  421. package/dist/icons/ChevronUpIcon.d.ts +2 -0
  422. package/dist/icons/ChevronUpIcon.jsx +5 -0
  423. package/dist/icons/Expand03Icon.d.ts +2 -0
  424. package/dist/icons/Expand03Icon.jsx +5 -0
  425. package/dist/icons/FacebookIcon.d.ts +2 -0
  426. package/dist/icons/FacebookIcon.jsx +6 -0
  427. package/dist/icons/File02Icon.d.ts +2 -0
  428. package/dist/icons/File02Icon.jsx +5 -0
  429. package/dist/icons/Gift01Icon.d.ts +2 -0
  430. package/dist/icons/Gift01Icon.jsx +5 -0
  431. package/dist/icons/GoogleIcon.d.ts +2 -0
  432. package/dist/icons/GoogleIcon.jsx +9 -0
  433. package/dist/icons/Logout01Icon.d.ts +2 -0
  434. package/dist/icons/Logout01Icon.jsx +5 -0
  435. package/dist/icons/QrCode02Icon.d.ts +2 -0
  436. package/dist/icons/QrCode02Icon.jsx +5 -0
  437. package/dist/icons/SpinnerIcon.d.ts +2 -0
  438. package/dist/icons/SpinnerIcon.jsx +9 -0
  439. package/dist/icons/User01Icon.d.ts +2 -0
  440. package/dist/icons/User01Icon.jsx +5 -0
  441. package/dist/icons/Wallet02Icon.d.ts +2 -0
  442. package/dist/icons/Wallet02Icon.jsx +5 -0
  443. package/dist/icons/XIcon.d.ts +1 -0
  444. package/dist/icons/XIcon.jsx +5 -0
  445. package/dist/index.d.ts +1 -144
  446. package/dist/index.js +1 -7654
  447. package/dist/middleware.d.ts +2 -5
  448. package/dist/middleware.js +90 -90
  449. package/dist/services/client/authenticate.d.ts +2 -0
  450. package/dist/services/client/authenticate.js +76 -0
  451. package/dist/services/client/getSession.d.ts +2 -0
  452. package/dist/services/client/getSession.js +59 -0
  453. package/dist/services/client/signIn.d.ts +3 -0
  454. package/dist/services/client/signIn.js +77 -0
  455. package/dist/services/client/signOut.d.ts +1 -0
  456. package/dist/services/client/signOut.js +61 -0
  457. package/dist/services/server/authenticate.d.ts +2 -0
  458. package/dist/services/server/authenticate.js +69 -0
  459. package/dist/services/server/getSession.d.ts +2 -0
  460. package/dist/services/server/getSession.js +55 -0
  461. package/dist/services/server/signIn.d.ts +2 -0
  462. package/dist/services/server/signIn.js +74 -0
  463. package/dist/services/server/signOut.d.ts +1 -0
  464. package/dist/services/server/signOut.js +67 -0
  465. package/dist/tsconfig.build.tsbuildinfo +1 -0
  466. package/dist/types/index.d.ts +63 -0
  467. package/dist/types/index.js +1 -0
  468. package/dist/ui/AlertDialog/AlertDialog.d.ts +508 -0
  469. package/dist/ui/AlertDialog/AlertDialog.jsx +17 -0
  470. package/dist/ui/AlertDialog/alertDialog.recipe.d.ts +46 -0
  471. package/dist/ui/AlertDialog/alertDialog.recipe.js +17 -0
  472. package/dist/ui/AlertDialog/index.d.ts +1 -0
  473. package/dist/ui/AlertDialog/index.js +1 -0
  474. package/dist/ui/Avatar/Avatar.d.ts +68 -0
  475. package/dist/ui/Avatar/Avatar.jsx +9 -0
  476. package/dist/ui/Avatar/avatar.recipe.d.ts +22 -0
  477. package/dist/ui/Avatar/avatar.recipe.js +21 -0
  478. package/dist/ui/Avatar/index.d.ts +1 -0
  479. package/dist/ui/Avatar/index.js +1 -0
  480. package/dist/ui/Badge/Badge.d.ts +167 -0
  481. package/dist/ui/Badge/Badge.jsx +10 -0
  482. package/dist/ui/Badge/badge.anatomy.d.ts +1 -0
  483. package/dist/ui/Badge/badge.anatomy.js +2 -0
  484. package/dist/ui/Badge/badge.recipe.d.ts +52 -0
  485. package/dist/ui/Badge/badge.recipe.js +67 -0
  486. package/dist/ui/Badge/index.d.ts +1 -0
  487. package/dist/ui/Badge/index.js +1 -0
  488. package/dist/ui/Button/Button.d.ts +7 -0
  489. package/dist/ui/Button/Button.jsx +20 -0
  490. package/dist/ui/Button/button.recipe.d.ts +57 -0
  491. package/dist/ui/Button/button.recipe.js +46 -0
  492. package/dist/ui/Button/index.d.ts +1 -0
  493. package/dist/ui/Button/index.js +1 -0
  494. package/dist/ui/Checkbox/Checkbox.d.ts +286 -0
  495. package/dist/ui/Checkbox/Checkbox.jsx +13 -0
  496. package/dist/ui/Checkbox/checkbox.recipe.d.ts +40 -0
  497. package/dist/ui/Checkbox/checkbox.recipe.js +40 -0
  498. package/dist/ui/Checkbox/index.d.ts +1 -0
  499. package/dist/ui/Checkbox/index.js +1 -0
  500. package/dist/ui/Clipboard/Clipboard.d.ts +224 -0
  501. package/dist/ui/Clipboard/Clipboard.jsx +12 -0
  502. package/dist/ui/Clipboard/clipboard.recipe.d.ts +37 -0
  503. package/dist/ui/Clipboard/clipboard.recipe.js +38 -0
  504. package/dist/ui/Clipboard/index.d.ts +1 -0
  505. package/dist/ui/Clipboard/index.js +1 -0
  506. package/dist/ui/Combobox/Combobox.d.ts +1 -0
  507. package/dist/ui/Combobox/Combobox.jsx +2 -0
  508. package/dist/ui/Combobox/combobox.recipe.d.ts +0 -0
  509. package/dist/ui/Combobox/combobox.recipe.js +1 -0
  510. package/dist/ui/Combobox/index.d.ts +1 -0
  511. package/dist/ui/Combobox/index.js +1 -0
  512. package/dist/ui/DatePicker/DatePicker.d.ts +2114 -0
  513. package/dist/ui/DatePicker/DatePicker.jsx +30 -0
  514. package/dist/ui/DatePicker/datePicker.recipe.d.ts +88 -0
  515. package/dist/ui/DatePicker/datePicker.recipe.js +15 -0
  516. package/dist/ui/DatePicker/index.d.ts +1 -0
  517. package/dist/ui/DatePicker/index.js +1 -0
  518. package/dist/ui/Dialog/Dialog.d.ts +508 -0
  519. package/dist/ui/Dialog/Dialog.jsx +17 -0
  520. package/dist/ui/Dialog/dialog.recipe.d.ts +46 -0
  521. package/dist/ui/Dialog/dialog.recipe.js +12 -0
  522. package/dist/ui/Dialog/index.d.ts +1 -0
  523. package/dist/ui/Dialog/index.js +1 -0
  524. package/dist/ui/Drawer/Drawer.d.ts +310 -0
  525. package/dist/ui/Drawer/Drawer.jsx +17 -0
  526. package/dist/ui/Drawer/drawer.recipe.d.ts +28 -0
  527. package/dist/ui/Drawer/drawer.recipe.js +24 -0
  528. package/dist/ui/Drawer/index.d.ts +1 -0
  529. package/dist/ui/Drawer/index.js +1 -0
  530. package/dist/ui/Field/Field.d.ts +303 -0
  531. package/dist/ui/Field/Field.jsx +13 -0
  532. package/dist/ui/Field/field.recipe.d.ts +43 -0
  533. package/dist/ui/Field/field.recipe.js +47 -0
  534. package/dist/ui/Field/index.d.ts +1 -0
  535. package/dist/ui/Field/index.js +1 -0
  536. package/dist/ui/IconButton/IconButton.d.ts +7 -0
  537. package/dist/ui/IconButton/IconButton.jsx +20 -0
  538. package/dist/ui/IconButton/iconButton.recipe.d.ts +80 -0
  539. package/dist/ui/IconButton/iconButton.recipe.js +17 -0
  540. package/dist/ui/IconButton/index.d.ts +1 -0
  541. package/dist/ui/IconButton/index.js +1 -0
  542. package/dist/ui/Menu/Menu.d.ts +2 -0
  543. package/dist/ui/Menu/Menu.jsx +3 -0
  544. package/dist/ui/Menu/index.d.ts +1 -0
  545. package/dist/ui/Menu/index.js +1 -0
  546. package/dist/ui/Menu/menu.recipe.d.ts +0 -0
  547. package/dist/ui/Menu/menu.recipe.js +1 -0
  548. package/dist/ui/NumberInput/NumberInput.d.ts +202 -0
  549. package/dist/ui/NumberInput/NumberInput.jsx +14 -0
  550. package/dist/ui/NumberInput/index.d.ts +1 -0
  551. package/dist/ui/NumberInput/index.js +1 -0
  552. package/dist/ui/NumberInput/numberInput.recipe.d.ts +25 -0
  553. package/dist/ui/NumberInput/numberInput.recipe.js +24 -0
  554. package/dist/ui/PinInput/PinInput.d.ts +163 -0
  555. package/dist/ui/PinInput/PinInput.jsx +11 -0
  556. package/dist/ui/PinInput/index.d.ts +1 -0
  557. package/dist/ui/PinInput/index.js +1 -0
  558. package/dist/ui/PinInput/pinInput.recipe.d.ts +40 -0
  559. package/dist/ui/PinInput/pinInput.recipe.js +38 -0
  560. package/dist/ui/Popover/Popover.d.ts +508 -0
  561. package/dist/ui/Popover/Popover.jsx +17 -0
  562. package/dist/ui/Popover/index.d.ts +1 -0
  563. package/dist/ui/Popover/index.js +1 -0
  564. package/dist/ui/Popover/popover.recipe.d.ts +46 -0
  565. package/dist/ui/Popover/popover.recipe.js +9 -0
  566. package/dist/ui/Presence.d.ts +2 -0
  567. package/dist/ui/Presence.jsx +5 -0
  568. package/dist/ui/Progress/Progress.d.ts +1 -0
  569. package/dist/ui/Progress/Progress.jsx +2 -0
  570. package/dist/ui/Progress/index.d.ts +1 -0
  571. package/dist/ui/Progress/index.js +1 -0
  572. package/dist/ui/Progress/progress.recipe.d.ts +0 -0
  573. package/dist/ui/Progress/progress.recipe.js +1 -0
  574. package/dist/ui/SegmentGroup/SegmentGroup.d.ts +226 -0
  575. package/dist/ui/SegmentGroup/SegmentGroup.jsx +14 -0
  576. package/dist/ui/SegmentGroup/index.d.ts +1 -0
  577. package/dist/ui/SegmentGroup/index.js +1 -0
  578. package/dist/ui/SegmentGroup/segmentGroup.recipe.d.ts +37 -0
  579. package/dist/ui/SegmentGroup/segmentGroup.recipe.js +33 -0
  580. package/dist/ui/Select/Select.d.ts +739 -0
  581. package/dist/ui/Select/Select.jsx +24 -0
  582. package/dist/ui/Select/index.d.ts +1 -0
  583. package/dist/ui/Select/index.js +1 -0
  584. package/dist/ui/Select/select.recipe.d.ts +49 -0
  585. package/dist/ui/Select/select.recipe.js +37 -0
  586. package/dist/ui/Table/Table.d.ts +301 -0
  587. package/dist/ui/Table/Table.jsx +12 -0
  588. package/dist/ui/Table/index.d.ts +1 -0
  589. package/dist/ui/Table/index.js +1 -0
  590. package/dist/ui/Table/table.anatomy.d.ts +1 -0
  591. package/dist/ui/Table/table.anatomy.js +2 -0
  592. package/dist/ui/Table/table.recipe.d.ts +43 -0
  593. package/dist/ui/Table/table.recipe.js +27 -0
  594. package/dist/ui/Tabs/Tabs.d.ts +187 -0
  595. package/dist/ui/Tabs/Tabs.jsx +11 -0
  596. package/dist/ui/Tabs/index.d.ts +1 -0
  597. package/dist/ui/Tabs/index.js +1 -0
  598. package/dist/ui/Tabs/tabs.recipe.d.ts +37 -0
  599. package/dist/ui/Tabs/tabs.recipe.js +33 -0
  600. package/dist/ui/Tooltip/Tooltip.d.ts +1 -0
  601. package/dist/ui/Tooltip/Tooltip.jsx +2 -0
  602. package/dist/ui/Tooltip/index.d.ts +1 -0
  603. package/dist/ui/Tooltip/index.js +1 -0
  604. package/dist/ui/Tooltip/tooltip.recipe.d.ts +0 -0
  605. package/dist/ui/Tooltip/tooltip.recipe.js +1 -0
  606. package/dist/ui/index.d.ts +23 -0
  607. package/dist/ui/index.js +23 -0
  608. package/dist/utils/anatomyToRecipeSlots.d.ts +6 -0
  609. package/dist/utils/anatomyToRecipeSlots.js +13 -0
  610. package/dist/utils/capitalize.d.ts +40 -0
  611. package/dist/utils/capitalize.js +47 -0
  612. package/dist/utils/createPoll.d.ts +28 -0
  613. package/dist/utils/createPoll.js +104 -0
  614. package/dist/utils/createRecipeContext.d.ts +15 -0
  615. package/dist/utils/createRecipeContext.jsx +71 -0
  616. package/dist/utils/createSplitProps.d.ts +3 -0
  617. package/dist/utils/createSplitProps.js +19 -0
  618. package/dist/utils/dataAttr.d.ts +1 -0
  619. package/dist/utils/dataAttr.js +3 -0
  620. package/dist/utils/formatNumber.d.ts +21 -0
  621. package/dist/utils/formatNumber.js +45 -0
  622. package/dist/utils/getGameImageUrl.d.ts +12 -0
  623. package/dist/utils/getGameImageUrl.js +10 -0
  624. package/dist/utils/getLocaleInfo.d.ts +79 -0
  625. package/dist/utils/getLocaleInfo.jsx +237 -0
  626. package/dist/utils/getQueryClient.d.ts +2 -0
  627. package/dist/utils/getQueryClient.js +26 -0
  628. package/dist/utils/isMobile.d.ts +5 -0
  629. package/dist/utils/isMobile.js +16 -0
  630. package/dist/utils/parseDecimal.d.ts +2 -0
  631. package/dist/utils/parseDecimal.js +18 -0
  632. package/dist/utils/toaster.d.ts +2 -0
  633. package/dist/utils/toaster.js +8 -0
  634. package/package.json +156 -13
  635. package/dist/JackpotCounter.module-5D2TMSET.module.css +0 -46
  636. package/dist/QRPh-LURVHEVK.png +0 -0
  637. package/dist/ball-TSKR3KCL.png +0 -0
  638. package/dist/card-DTJVRZI7.png +0 -0
  639. package/dist/chunk-CA3CKIFK.mjs +0 -74
  640. package/dist/chunk-CA3CKIFK.mjs.map +0 -1
  641. package/dist/chunk-J5LGTIGS.mjs +0 -10
  642. package/dist/chunk-J5LGTIGS.mjs.map +0 -1
  643. package/dist/chunk-WGWFJYET.mjs +0 -1229
  644. package/dist/chunk-WGWFJYET.mjs.map +0 -1
  645. package/dist/close-chest-T4YK5KYS.png +0 -0
  646. package/dist/gcash-3TV2ZD5Z.png +0 -0
  647. package/dist/handlers.d.mts +0 -43
  648. package/dist/handlers.js.map +0 -1
  649. package/dist/handlers.mjs +0 -267
  650. package/dist/handlers.mjs.map +0 -1
  651. package/dist/index.d.mts +0 -144
  652. package/dist/index.js.map +0 -1
  653. package/dist/index.mjs +0 -6422
  654. package/dist/index.mjs.map +0 -1
  655. package/dist/maya-2LESMCYJ.png +0 -0
  656. package/dist/middleware.d.mts +0 -8
  657. package/dist/middleware.js.map +0 -1
  658. package/dist/middleware.mjs +0 -45
  659. package/dist/middleware.mjs.map +0 -1
  660. package/dist/online-bank-ZRRABICE.png +0 -0
  661. package/dist/open-chest-XMGW5QZE.png +0 -0
  662. package/dist/pagcor-AFUY5PSY.png +0 -0
  663. package/dist/responsible-gaming-MQQBK5RV.png +0 -0
  664. package/dist/trophy-QC26LEAT.png +0 -0
  665. package/dist/ui.d.mts +0 -6904
  666. package/dist/ui.d.ts +0 -6904
  667. package/dist/ui.js +0 -1280
  668. package/dist/ui.js.map +0 -1
  669. package/dist/ui.mjs +0 -48
  670. package/dist/ui.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/components/Account/Account.tsx","../src/lib/hooks/useAccountQuery/useAccountQuery.ts","../src/lib/services/client/getSession.ts","../src/lib/utils/getQueryClient.ts","../src/lib/hooks/useSessionQuery/getSessionQueryKey.ts","../src/lib/hooks/useSessionQuery/useSessionQuery.ts","../src/lib/hooks/useAccountQuery/getAccountQueryKey.ts","../src/lib/hooks/useGlobalStore.ts","../src/lib/utils/getLocaleInfo.tsx","../src/lib/hooks/usePlatformQuery/usePlatformQuery.ts","../src/lib/hooks/usePlatformQuery/getPlatformQueryKey.ts","../src/lib/hooks/useLocaleInfo.ts","../src/lib/hooks/useSignOutMutation/useSignOutMutation.ts","../src/lib/services/client/signOut.ts","../src/lib/hooks/useSignOutMutation/getSignOutMutationKey.ts","../src/lib/hooks/useWalletQuery/useWalletQuery.ts","../src/lib/hooks/useWalletQuery/getWalletQueryKey.ts","../src/lib/icons/ChevronRightIcon.tsx","../src/lib/icons/Logout01Icon.tsx","../src/lib/icons/User01Icon.tsx","../src/lib/utils/parseDecimal.ts","../src/lib/utils/formatNumber.ts","../src/lib/components/Banner/Banner.tsx","../src/lib/components/BetRecords/BetRecordsContent.tsx","../src/lib/hooks/useBetRecordsQuery/useBetRecordsQuery.ts","../src/lib/hooks/useBetRecordsQuery/getBetRecordsQueryKey.ts","../src/lib/hooks/useInfiniteQueryHelper.ts","../src/lib/icons/CheckIcon.tsx","../src/lib/icons/ChevronDownIcon.tsx","../src/lib/icons/ChevronLeftIcon.tsx","../src/lib/icons/File02Icon.tsx","../src/lib/icons/SpinnerIcon.tsx","../src/lib/utils/capitalize.ts","../src/lib/components/Empty/CloudIcon.tsx","../src/lib/components/Empty/Empty.tsx","../src/lib/components/BetRecords/BetRecords.tsx","../src/lib/components/DepositWithdrawal/DepositWithdrawal.tsx","../src/lib/icons/Wallet02Icon.tsx","../src/lib/icons/XIcon.tsx","../src/lib/components/DepositWithdrawal/Deposit/Deposit.tsx","../src/lib/hooks/usePaymentSettingsQuery/usePaymentSettingsQuery.ts","../src/lib/hooks/usePaymentSettingsQuery/getPaymentSettingsQueryKey.ts","../src/lib/icons/AlertCircleIcon.tsx","../src/lib/utils/isMobile.ts","../src/lib/components/DepositWithdrawal/PaymentMethods.tsx","../src/lib/hooks/useControllableState.ts","../src/lib/components/DepositWithdrawal/utils.ts","../src/lib/components/DepositWithdrawal/Deposit/GCashDeposit.tsx","../src/lib/hooks/useAvailablePromosQuery/useAvailablePromosQuery.ts","../src/lib/hooks/useAvailablePromosQuery/getAvailablePromosQueryKey.ts","../src/lib/hooks/useCreateGCashDepositMutation/useCreateGCashDepositMutation.ts","../src/lib/utils/createPoll.ts","../src/lib/hooks/useCreateGCashDepositMutation/getCreateGCashDepositMutationKey.ts","../src/lib/hooks/useDepositsCountQuery/useDepositsCountQuery.ts","../src/lib/hooks/useDepositsCountQuery/getDepositsCountQueryKey.ts","../src/lib/hooks/useDisclosure.ts","../src/lib/icons/ChevronUpIcon.tsx","../src/lib/utils/toaster.ts","../src/lib/components/DepositWithdrawal/AmountChoices.tsx","../src/lib/components/DepositWithdrawal/AvailablePromos.tsx","../src/lib/components/DepositWithdrawal/Deposit/MayaAppDeposit.tsx","../src/lib/components/DepositWithdrawal/Deposit/MayaDeposit.tsx","../src/lib/hooks/useCreateMayaDepositMutation copy/useCreateMayaDepositMutation.ts","../src/lib/hooks/useCreateMayaDepositMutation copy/getCreateMayaDepositMutationKey.ts","../src/lib/components/DepositWithdrawal/Deposit/OnlineBankDeposit.tsx","../src/lib/components/DepositWithdrawal/Deposit/QRPHDeposit.tsx","../src/lib/components/DepositWithdrawal/Withdrawal/Withdrawal.tsx","../src/lib/components/Disclaimer/Disclaimer.tsx","../src/lib/components/Disclaimer/useDisclaimer.tsx","../src/lib/components/FeatureFlagProvider/FeatureFlagContext.tsx","../src/lib/components/FeatureFlagProvider/FeatureFlagProvider.tsx","../src/lib/components/FeatureFlagProvider/useFeatureFlag.ts","../src/lib/components/GameLaunch/GameLaunch.tsx","../src/lib/hooks/useEndGameSessionMutation/useEndGameSessionMutation.ts","../src/lib/hooks/useEndGameSessionMutation/getEndGameSessionMutationKey.ts","../src/lib/icons/Expand03Icon.tsx","../src/lib/components/GameLaunch/GameLaunchTrigger.tsx","../src/lib/hooks/useCreateGameSessionMutation/useCreateGameSessionMutation.ts","../src/lib/hooks/useCreateGameSessionMutation/getCreateGameSessionMutationKey.ts","../src/lib/hooks/useGamesQuery/prefetchGamesQuery.ts","../src/lib/hooks/useGamesQuery/getGamesQueryKey.ts","../src/lib/components/Games/GamesContent.tsx","../src/lib/hooks/useGamesQuery/useGamesQuery.ts","../src/lib/icons/ArrowLeftIcon.tsx","../src/lib/icons/ArrowRightIcon.tsx","../src/lib/components/Games/Games.tsx","../src/lib/components/JackpotCounter/JackpotCounterContent.tsx","../src/lib/hooks/useJackpotsQuery/useJackpotsQuery.ts","../src/lib/hooks/useJackpotsQuery/getJackpotsQueryKey.ts","../src/lib/components/JackpotCounter/JackpotCounterItem.tsx","../src/lib/icons/ArrowNarrowUpRightIcon.tsx","../src/lib/components/JackpotCounter/JackpotCounter.tsx","../src/lib/components/Marquee/Marquee.tsx","../src/lib/components/PortalProvider/PortalProvider.tsx","../src/lib/hooks/usePlatformQuery/prefetchPlatformQuery.ts","../src/lib/services/server/getSession.ts","../src/lib/hooks/useSessionQuery/prefetchSessionQuery.ts","../src/lib/hooks/useWalletQuery/prefetchWalletQuery.ts","../src/lib/components/PortalProvider/Providers.tsx","../src/lib/hooks/usePromosQuery/prefetchPromosQuery.ts","../src/lib/hooks/usePromosQuery/getPromosQueryKey.ts","../src/lib/components/Promos/PromosContent.tsx","../src/lib/hooks/usePromosQuery/usePromosQuery.ts","../src/lib/icons/Gift01Icon.tsx","../src/lib/components/Promos/PromoItem.tsx","../src/lib/components/Promos/Promos.tsx","../src/lib/components/Protected/Protected.tsx","../src/lib/components/SignIn/SignIn.tsx","../src/lib/components/SignIn/SignInForm.tsx","../src/lib/hooks/useCooldown.ts","../src/lib/hooks/useMobileNumberParser.ts","../src/lib/hooks/useSendVerificationCodeMutation/useSendVerificationCodeMutation.ts","../src/lib/hooks/useSendVerificationCodeMutation/getSendVerificationCodeMutationKey.ts","../src/lib/hooks/useSigninMutation/useSignInMutation.ts","../src/lib/services/client/signIn.ts","../src/lib/hooks/useSigninMutation/getSignInMutationKey.ts","../src/lib/icons/FacebookIcon.tsx","../src/lib/icons/GoogleIcon.tsx","../src/lib/components/SignUp/SignUp.tsx","../src/lib/components/SignUp/SignUpForm.tsx","../src/lib/hooks/useSignUpMutation/useSignUpMutation.ts","../src/lib/hooks/useSignUpMutation/getSignUpMutationKey.ts","../src/lib/components/TopWins/TopWinsContent.tsx","../src/lib/hooks/useTopWinsQuery/useTopWinsQuery.ts","../src/lib/hooks/useTopWinsQuery/getTopWinsQueryKey.ts","../src/lib/utils/getGameImageUrl.ts","../src/lib/components/TopWins/TopWins.tsx","../src/lib/components/TournamentCounter/TournamentCounterContent.tsx","../src/lib/hooks/useTournamentsQuery/useTournamentsQuery.ts","../src/lib/hooks/useTournamentsQuery/getTournamentsQueryKey.ts","../src/lib/components/TournamentCounter/TournamentCounterItem.tsx","../src/lib/icons/Award02Icon.tsx","../src/lib/components/TournamentCounter/TournamentCounter.tsx","../src/lib/components/TransactionRecords/DepositRecordsTable.tsx","../src/lib/hooks/useDepositRecordsQuery/useDepositRecordsQuery.ts","../src/lib/hooks/useDepositRecordsQuery/getDepositRecordsQueryKey.ts","../src/lib/components/TransactionRecords/TableFilters.tsx","../src/lib/components/TransactionRecords/TransactionRecordsTable.tsx","../src/lib/hooks/useTransactionRecordsQuery/useTransactionRecordsQuery.ts","../src/lib/hooks/useTransactionRecordsQuery/getTransactionRecordsQueryKey.ts","../src/lib/components/TransactionRecords/WithdrawalRecordsTable.tsx","../src/lib/hooks/useWithdrawalRecordsQuery/useWithdrawalRecordsQuery.ts","../src/lib/hooks/useWithdrawalRecordsQuery/getWithdrawalRecordsQueryKey.ts","../src/lib/components/TransactionRecords/TransactionRecords.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { Portal } from '@ark-ui/react';\r\nimport Link from 'next/link';\r\nimport type { ComponentProps, ComponentType, ReactNode } from 'react';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useAccountQuery } from '../../hooks/useAccountQuery/useAccountQuery';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useSignOutMutation } from '../../hooks/useSignOutMutation/useSignOutMutation';\r\nimport { useWalletQuery } from '../../hooks/useWalletQuery/useWalletQuery';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { Logout01Icon } from '../../icons/Logout01Icon';\r\nimport { User01Icon } from '../../icons/User01Icon';\r\nimport { Avatar, Button, Drawer, Popover } from '../../ui';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\n\r\ninterface AccountLink {\r\n icon: ComponentType<ComponentProps<'svg'>>;\r\n href: string;\r\n label: string;\r\n}\r\n\r\nexport interface AccountProps {\r\n links?: AccountLink[];\r\n children?: ReactNode;\r\n}\r\n\r\nexport function Account(props: AccountProps) {\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n profile: ctx.profile,\r\n mobileProfile: ctx.mobileProfile,\r\n })),\r\n );\r\n\r\n return (\r\n <>\r\n <Drawer.Root\r\n open={globalStore.profile.open}\r\n onOpenChange={(details) => {\r\n globalStore.profile.setOpen(details.open);\r\n }}\r\n lazyMount\r\n unmountOnExit\r\n >\r\n <Drawer.Trigger asChild className=\"lg:hidden\">\r\n {props.children ?? (\r\n <button type=\"button\">\r\n <Avatar.Root>\r\n <Avatar.Fallback>\r\n <User01Icon />\r\n </Avatar.Fallback>\r\n </Avatar.Root>\r\n </button>\r\n )}\r\n </Drawer.Trigger>\r\n <Portal>\r\n <Drawer.Backdrop />\r\n <Drawer.Positioner>\r\n <Drawer.Content className=\"bg-gray-50 flex w-[316px] flex-col px-xl py-6\">\r\n <Profile />\r\n <Wallet />\r\n <Links links={props.links ?? []} />\r\n <div className=\"grow\" />\r\n <TradeMark />\r\n </Drawer.Content>\r\n </Drawer.Positioner>\r\n </Portal>\r\n </Drawer.Root>\r\n\r\n <Popover.Root\r\n open={globalStore.mobileProfile.open}\r\n onOpenChange={(details) => {\r\n globalStore.mobileProfile.setOpen(details.open);\r\n }}\r\n lazyMount\r\n unmountOnExit\r\n positioning={{\r\n placement: 'bottom',\r\n }}\r\n >\r\n <Popover.Trigger className=\"hidden lg:flex\" asChild>\r\n {props.children ?? (\r\n <button type=\"button\">\r\n <Avatar.Root>\r\n <Avatar.Fallback>\r\n <User01Icon />\r\n </Avatar.Fallback>\r\n </Avatar.Root>\r\n </button>\r\n )}\r\n </Popover.Trigger>\r\n <Portal>\r\n <Popover.Positioner>\r\n <Popover.Content className=\"border-gray-200 z-popover w-[316px] rounded-xl border bg-white p-xl ui-open:animate-fade-in ui-closed:animate-fade-out\">\r\n <Profile />\r\n <Wallet />\r\n <Links links={props.links ?? []} />\r\n <TradeMark />\r\n </Popover.Content>\r\n </Popover.Positioner>\r\n </Portal>\r\n </Popover.Root>\r\n </>\r\n );\r\n}\r\n\r\nfunction TradeMark() {\r\n return (\r\n <div className=\"text-gray-400 mt-xl text-center text-2xs\">\r\n &copy; 2025 HappyBingo All rights reserved\r\n </div>\r\n );\r\n}\r\n\r\nfunction Profile() {\r\n const accountQuery = useAccountQuery();\r\n\r\n return (\r\n <div className=\"flex items-center gap-3\">\r\n <Avatar.Root>\r\n <Avatar.Fallback>\r\n <User01Icon />\r\n </Avatar.Fallback>\r\n </Avatar.Root>\r\n <div>\r\n <p className=\"text-sm font-semibold\">{accountQuery.data?.name}</p>\r\n <p className=\"text-gray-400 text-xs\">\r\n {accountQuery.data?.nickName ??\r\n accountQuery.data?.emailAddress ??\r\n accountQuery.data?.realName}\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\ninterface LinksProps {\r\n links: AccountLink[];\r\n}\r\n\r\nfunction Links(props: LinksProps) {\r\n const signOutMutation = useSignOutMutation();\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n profile: ctx.profile,\r\n mobileProfile: ctx.mobileProfile,\r\n })),\r\n );\r\n\r\n return (\r\n <nav className=\"mt-xl space-y-xl\">\r\n <ul>\r\n {props.links.map((link, index) => (\r\n <li\r\n key={link.href + index}\r\n className=\"border-gray-200 block border-x border-b bg-white first:rounded-t-xl first:border-t last:rounded-b-xl\"\r\n >\r\n <Link\r\n href={link.href}\r\n onClick={() => {\r\n globalStore.profile.setOpen(false);\r\n globalStore.mobileProfile.setOpen(false);\r\n }}\r\n className=\"flex w-full items-center gap-lg px-xl py-xl text-left text-sm font-semibold\"\r\n >\r\n <link.icon className=\"size-5\" />\r\n <span className=\"grow\">{link.label}</span>\r\n <ChevronRightIcon className=\"text-gray-400 size-5\" />\r\n </Link>\r\n </li>\r\n ))}\r\n </ul>\r\n\r\n <ul>\r\n <li className=\"border-gray-200 block rounded-xl border bg-white\">\r\n <button\r\n type=\"button\"\r\n className=\"flex w-full items-center gap-lg px-xl py-xl text-left text-sm font-semibold\"\r\n disabled={signOutMutation.isPending}\r\n onClick={() => {\r\n signOutMutation.mutate();\r\n globalStore.profile.setOpen(false);\r\n globalStore.mobileProfile.setOpen(false);\r\n }}\r\n >\r\n <Logout01Icon className=\"size-5\" />\r\n <span className=\"grow\">Log Out</span>\r\n <ChevronRightIcon className=\"text-gray-400 size-5\" />\r\n </button>\r\n </li>\r\n </ul>\r\n </nav>\r\n );\r\n}\r\n\r\nfunction Wallet() {\r\n const localeInfo = useLocaleInfo();\r\n const walletQuery = useWalletQuery({\r\n refetchInterval: 1000,\r\n });\r\n\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n profile: ctx.profile,\r\n mobileProfile: ctx.mobileProfile,\r\n depositWithdrawal: ctx.depositWithdrawal,\r\n })),\r\n );\r\n\r\n return (\r\n <div className=\"border-gray-200 mt-3 rounded-lg border bg-white p-xl\">\r\n <div className=\"border-gray-200 bg-gray-50 text-gray-600 w-fit rounded-sm border px-1.5 py-0.5 text-xs font-medium\">\r\n Available Balance\r\n </div>\r\n <div className=\"mt-2 text-3xl font-semibold\">\r\n {formatNumber(walletQuery.data?.balance, {\r\n currency: localeInfo?.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </div>\r\n <div className=\"mt-3 flex gap-lg\">\r\n <Button\r\n size=\"xs\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => {\r\n globalStore.depositWithdrawal.setOpen(true);\r\n globalStore.depositWithdrawal.setTab('WITHDRAWAL');\r\n globalStore.profile.setOpen(false);\r\n globalStore.mobileProfile.setOpen(false);\r\n }}\r\n >\r\n Withdraw\r\n </Button>\r\n <Button\r\n size=\"xs\"\r\n onClick={() => {\r\n globalStore.depositWithdrawal.setOpen(true);\r\n globalStore.depositWithdrawal.setTab('DEPOSIT');\r\n globalStore.profile.setOpen(false);\r\n globalStore.mobileProfile.setOpen(false);\r\n }}\r\n >\r\n Deposit\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { getMemberAccount, type MemberAccount } from '@opexa/portal-sdk-core';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Query } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getAccountQueryKey } from './getAccountQueryKey';\r\n\r\nexport const useAccountQuery: Query<MemberAccount> = (config) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n const query = useQuery({\r\n ...config,\r\n enabled:\r\n config?.enabled === false\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated',\r\n queryKey: getAccountQueryKey(),\r\n queryFn: async ({ signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getMemberAccount({\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { ApiResponse, Session } from '../../types';\r\n\r\nexport async function getSession(): Promise<Session> {\r\n const res = await fetch('/api/sessions', {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n },\r\n });\r\n\r\n const json = (await res.json()) as ApiResponse<Session>;\r\n const data: Session = json.ok ? json.data : { status: 'unauthenticated' };\r\n\r\n return data;\r\n}\r\n","import { QueryClient, isServer } from '@tanstack/react-query';\r\nimport { cache } from 'react';\r\n\r\nfunction createQueryClient() {\r\n return new QueryClient({\r\n defaultOptions: {\r\n queries: {\r\n staleTime: 1000 * 60 * 10, // 10mins\r\n gcTime: 1000 * 60 * 60 * 12, // 12hr\r\n refetchOnMount: true,\r\n refetchOnReconnect: true,\r\n refetchOnWindowFocus: true,\r\n networkMode: 'always',\r\n },\r\n },\r\n });\r\n}\r\n\r\nlet BROWSER_QUERY_CLIENT: QueryClient | undefined = undefined;\r\n\r\nexport const getQueryClient = cache(() => {\r\n if (isServer) {\r\n return createQueryClient();\r\n }\r\n\r\n if (!BROWSER_QUERY_CLIENT) {\r\n BROWSER_QUERY_CLIENT = createQueryClient();\r\n }\r\n\r\n return BROWSER_QUERY_CLIENT;\r\n});\r\n","import type { QueryKey } from '@tanstack/react-query';\n\nexport const getSessionQueryKey = (): QueryKey => ['queries/session'];\n","import { useQuery } from '@tanstack/react-query';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Query, Session } from '../../types';\r\nimport { getSessionQueryKey } from './getSessionQueryKey';\r\n\r\nexport const useSessionQuery: Query<Session> = (config) => {\r\n return useQuery({\r\n staleTime: 0,\r\n gcTime: 0,\r\n ...config,\r\n queryKey: getSessionQueryKey(),\r\n queryFn: async () => {\r\n return await getSession();\r\n },\r\n });\r\n};\r\n","import type { QueryKey } from '@tanstack/react-query';\n\nexport const getAccountQueryKey = (): QueryKey => ['queries/account'];\n","import type { Game, GameSession } from '@opexa/portal-sdk-core';\r\nimport { create } from 'zustand';\r\n\r\ninterface Popup {\r\n open: boolean;\r\n setOpen: (open: boolean) => void;\r\n}\r\n\r\ntype GameLaunchDetails =\r\n | { status: 'WAITING'; game?: null; session?: null }\r\n | { status: 'LOADING'; game: Game; session?: GameSession | null }\r\n | { status: 'PLAYING'; game: Game; session: GameSession }\r\n | { status: 'FAILED'; game: Game; session?: null };\r\n\r\ninterface GameLaunch {\r\n details: GameLaunchDetails;\r\n setDetails: (details: GameLaunchDetails) => void;\r\n}\r\n\r\ntype DepositWithdrawalTab = 'DEPOSIT' | 'WITHDRAWAL';\r\n\r\ninterface DepositWithdrawalPopup extends Popup {\r\n tab: DepositWithdrawalTab;\r\n setTab: (tab: DepositWithdrawalTab) => void;\r\n}\r\n\r\ninterface GlobalStore {\r\n signUp: Popup;\r\n signIn: Popup;\r\n disclaimer: Popup;\r\n depositWithdrawal: DepositWithdrawalPopup;\r\n gameLaunch: GameLaunch;\r\n profile: Popup;\r\n mobileProfile: Popup;\r\n}\r\n\r\nexport const useGlobalStore = create<GlobalStore>((set, get) => ({\r\n signIn: {\r\n open: false,\r\n setOpen(open: boolean) {\r\n set({ signIn: { ...get().signIn, open } });\r\n },\r\n },\r\n signUp: {\r\n open: false,\r\n setOpen(open: boolean) {\r\n set({ signUp: { ...get().signUp, open } });\r\n },\r\n },\r\n disclaimer: {\r\n open: false,\r\n setOpen(open: boolean) {\r\n set({ disclaimer: { ...get().disclaimer, open } });\r\n },\r\n },\r\n depositWithdrawal: {\r\n open: false,\r\n setOpen(open: boolean) {\r\n set({ depositWithdrawal: { ...get().depositWithdrawal, open } });\r\n },\r\n tab: 'DEPOSIT',\r\n setTab(tab: DepositWithdrawalTab) {\r\n set({ depositWithdrawal: { ...get().depositWithdrawal, tab } });\r\n },\r\n },\r\n gameLaunch: {\r\n details: { status: 'WAITING' },\r\n setDetails(details: GameLaunchDetails) {\r\n set({ gameLaunch: { ...get().gameLaunch, details } });\r\n },\r\n },\r\n profile: {\r\n open: false,\r\n setOpen(open: boolean) {\r\n set({ profile: { ...get().profile, open } });\r\n },\r\n },\r\n mobileProfile: {\r\n open: false,\r\n setOpen(open: boolean) {\r\n set({ mobileProfile: { ...get().mobileProfile, open } });\r\n },\r\n },\r\n}));\r\n","import {\r\n cache,\r\n type ComponentProps,\r\n type ComponentPropsWithRef,\r\n type ComponentType,\r\n} from 'react';\r\n\r\nexport interface CountryInfo {\r\n /**\r\n * @description The country code\r\n * @example 'PHL'\r\n */\r\n code: 'IDN' | 'IND' | 'MYS' | 'PHL' | 'VNM';\r\n /**\r\n * @description The country name\r\n * @example 'Philippines'\r\n */\r\n name: string;\r\n /**\r\n * @description The country flag\r\n * @usage\r\n * ```tsx\r\n * const localeInfo = getLocaleInfo('Asia/Manila');\r\n * <localeInfo.country.flag />\r\n * ```\r\n */\r\n flag: ComponentType<ComponentProps<'svg'>>;\r\n}\r\n\r\nexport interface CurrencyInfo {\r\n /**\r\n * @description The currency code\r\n * @example 'PHP'\r\n */\r\n code: 'IDR' | 'INR' | 'MYR' | 'PHP' | 'USD' | 'VND';\r\n /**\r\n * @description The currency name\r\n * @example 'Philippine Peso'\r\n */\r\n name: string;\r\n /**\r\n * @description The currency symbol\r\n * @example '₱'\r\n */\r\n symbol: string;\r\n /**\r\n * Used in api\r\n * @example 'VIRTUAL'\r\n */\r\n externalCode:\r\n | 'IDR'\r\n | 'INR'\r\n | 'MYR'\r\n | 'PHP'\r\n | 'USD'\r\n | 'VIRTUAL'\r\n | (string & {});\r\n}\r\n\r\nexport interface MobileNumberInfo {\r\n /**\r\n * @description The mobile number area code\r\n * @example '+63'\r\n */\r\n areaCode: string;\r\n /**\r\n * @description The mobile number digits count\r\n * @example 10\r\n */\r\n numOfDigits: number;\r\n /**\r\n * @description pattern to validate mobile number\r\n * @usage\r\n * ```ts\r\n * const localeInfo = getLocaleInfo('Asia/Manila');\r\n * const isValid = localeInfo.mobileNumber.pattern.test('9190000000');\r\n * ```\r\n */\r\n pattern: RegExp;\r\n /**\r\n * @description The mobile number example\r\n * @example '9190000000'\r\n */\r\n example: string;\r\n}\r\n\r\nexport type Timezone =\r\n | 'Asia/Manila'\r\n | 'Asia/Kolkata'\r\n | 'Asia/Jakarta'\r\n | 'Asia/Makassar'\r\n | 'Asia/Jayapura'\r\n | 'Asia/Kuala_Lumpur'\r\n | 'Asia/Ho_Chi_Minh'\r\n | (string & {});\r\n\r\nexport interface LocaleInfo {\r\n locale: string;\r\n timezone: Timezone;\r\n country: CountryInfo;\r\n currency: CurrencyInfo;\r\n mobileNumber: MobileNumberInfo;\r\n}\r\n\r\nexport const getLocaleInfo = cache((timezone: Timezone): LocaleInfo => {\r\n switch (timezone.toLowerCase()) {\r\n case 'asia/jakarta':\r\n return {\r\n locale: 'id-ID',\r\n timezone: 'Asia/Jakarta',\r\n country: {\r\n name: 'Indonesia',\r\n code: 'IDN',\r\n flag: IndonesianFlag,\r\n },\r\n currency: {\r\n code: 'IDR',\r\n name: 'Indonesian Rupiah',\r\n symbol: 'Rp',\r\n externalCode: 'IDR',\r\n },\r\n mobileNumber: {\r\n areaCode: '+62',\r\n numOfDigits: 10,\r\n example: '81' + ''.padStart(8, '0'),\r\n pattern: /^(\\+?62|0)?8\\d{9}$/,\r\n },\r\n };\r\n\r\n case 'asia/jayapura':\r\n return {\r\n locale: 'id-ID',\r\n timezone: 'Asia/Jayapura',\r\n country: {\r\n code: 'IDN',\r\n name: 'Indonesia',\r\n flag: IndonesianFlag,\r\n },\r\n currency: {\r\n code: 'IDR',\r\n name: 'Indonesian Rupiah',\r\n symbol: 'Rp',\r\n externalCode: 'IDR',\r\n },\r\n mobileNumber: {\r\n areaCode: '+62',\r\n numOfDigits: 10,\r\n example: '81' + ''.padStart(8, '0'),\r\n pattern: /^(\\+?62|0)?8\\d{9}$/,\r\n },\r\n };\r\n\r\n case 'asia/makassar':\r\n return {\r\n locale: 'id-ID',\r\n timezone: 'Asia/Makassar',\r\n country: {\r\n code: 'IDN',\r\n name: 'Indonesia',\r\n flag: IndonesianFlag,\r\n },\r\n currency: {\r\n code: 'IDR',\r\n name: 'Indonesian Rupiah',\r\n symbol: 'Rp',\r\n externalCode: 'IDR',\r\n },\r\n mobileNumber: {\r\n areaCode: '+62',\r\n numOfDigits: 10,\r\n example: '81' + ''.padStart(8, '0'),\r\n pattern: /^(\\+?62|0)?8\\d{9}$/,\r\n },\r\n };\r\n\r\n case 'asia/kuala_lumpur':\r\n return {\r\n locale: 'ms-MY',\r\n timezone: 'Asia/Kuala_Lumpur',\r\n country: {\r\n name: 'Malaysia',\r\n code: 'MYS',\r\n flag: MalaysianFlag,\r\n },\r\n currency: {\r\n code: 'MYR',\r\n name: 'Malaysian Ringgit',\r\n symbol: 'RM',\r\n externalCode: 'MYR',\r\n },\r\n mobileNumber: {\r\n areaCode: '+60',\r\n numOfDigits: 9,\r\n example: '12' + ''.padStart(7, '0'),\r\n pattern: /^(\\+?60|0)?1[0-9]{1}\\d{7}$/,\r\n },\r\n };\r\n\r\n case 'asia/kolkata':\r\n return {\r\n locale: 'en-IN',\r\n timezone: 'Asia/Kolkata',\r\n country: {\r\n code: 'IND',\r\n name: 'India',\r\n flag: IndianFlag,\r\n },\r\n currency: {\r\n code: 'INR',\r\n name: 'Indian Rupee',\r\n symbol: '₹',\r\n externalCode: 'INR',\r\n },\r\n mobileNumber: {\r\n areaCode: '+91',\r\n numOfDigits: 10,\r\n example: '919' + ''.padStart(7, '0'),\r\n pattern: /^(\\+?91|0)?[789]\\d{9}$/,\r\n },\r\n };\r\n\r\n case 'asia/ho_chi_minh':\r\n return {\r\n locale: 'vi-VN',\r\n timezone: 'Asia/Ho_Chi_Minh',\r\n country: {\r\n code: 'VNM',\r\n name: 'Vietnam',\r\n flag: VietnameseFlag,\r\n },\r\n currency: {\r\n code: 'VND',\r\n name: 'Vietnamese Dong',\r\n symbol: '₫',\r\n externalCode: 'VIRTUAL',\r\n },\r\n mobileNumber: {\r\n areaCode: '+84',\r\n numOfDigits: 9,\r\n example: '849' + ''.padStart(7, '0'),\r\n pattern:\r\n /^(\\+?84|0)?(3[2-9]|5[6|8|9]|7[0|6-9]|8[1-6|8|9]|9[0-9])\\d{7}$/,\r\n },\r\n };\r\n\r\n default:\r\n return {\r\n locale: 'en-PH',\r\n timezone: 'Asia/Manila',\r\n country: {\r\n code: 'PHL',\r\n name: 'Philippines',\r\n flag: PhilippineFlag,\r\n },\r\n currency: {\r\n code: 'PHP',\r\n name: 'Philippine Peso',\r\n symbol: '₱',\r\n externalCode: 'PHP',\r\n },\r\n mobileNumber: {\r\n areaCode: '+63',\r\n numOfDigits: 10,\r\n example: '919' + ''.padStart(7, '0'),\r\n pattern: /^(\\+?63|0)?9\\d{9}$/,\r\n },\r\n };\r\n }\r\n});\r\n\r\nconst PhilippineFlag = (props: ComponentPropsWithRef<'svg'>) => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <g clipPath=\"url(#clip0_4392_27540)\">\r\n <path\r\n d=\"M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z\"\r\n fill=\"#F0F0F0\"\r\n />\r\n <path\r\n d=\"M12.0004 0V12L3.51514 20.4853C5.68671 22.6568 8.68671 24 12.0004 24C18.6278 24 24.0004 18.6274 24.0004 12C24.0004 5.37262 12.0004 0 12.0004 0Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M12.0004 0C8.68671 0 5.68671 1.34316 3.51514 3.51469C6.45936 6.45891 7.50453 7.50412 12.0004 12H24.0004C24.0004 5.37262 18.6278 0 12.0004 0Z\"\r\n fill=\"#0052B4\"\r\n />\r\n <path\r\n d=\"M8.21723 11.9998L6.75173 11.3104L7.53215 9.89111L5.94074 10.1956L5.73909 8.58789L4.63059 9.77027L3.52213 8.58789L3.32043 10.1956L1.72907 9.89106L2.50949 11.3104L1.04395 11.9998L2.50949 12.6891L1.72907 14.1085L3.32057 13.8041L3.52209 15.4117L4.63059 14.2293L5.73909 15.4117L5.94074 13.8041L7.53205 14.1085L6.75168 12.6892L8.21723 11.9998Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n <path\r\n d=\"M3.20082 4.69519L3.68851 5.37689L4.48749 5.12382L3.98977 5.79825L4.47746 6.47996L3.68218 6.21507L3.18451 6.88946L3.19074 6.05133L2.39551 5.78639L3.19463 5.53332L3.20082 4.69519Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n <path\r\n d=\"M3.20082 17.1095L3.68851 17.7912L4.48749 17.5381L3.98977 18.2126L4.47746 18.8943L3.68218 18.6294L3.18451 19.3038L3.19074 18.4656L2.39551 18.2007L3.19463 17.9476L3.20082 17.1095Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n <path\r\n d=\"M10.1563 10.9032L9.66866 11.5849L8.86963 11.3317L9.36735 12.0062L8.87966 12.688L9.67494 12.423L10.1727 13.0974L10.1664 12.2593L10.9616 11.9944L10.1625 11.7413L10.1563 10.9032Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4392_27540\">\r\n <rect width=\"24\" height=\"24\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nconst MalaysianFlag = (props: ComponentPropsWithRef<'svg'>) => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <g clipPath=\"url(#clip0_4392_27547)\">\r\n <path\r\n d=\"M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z\"\r\n fill=\"#F0F0F0\"\r\n />\r\n <path\r\n d=\"M11.4783 12.0002H24C24 10.9171 23.8556 9.86791 23.5866 8.86975H11.4783V12.0002Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M11.4783 5.73873H22.2387C21.5041 4.54004 20.565 3.48053 19.4698 2.60828H11.4783V5.73873Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M12.0001 24.0002C14.8243 24.0002 17.4201 23.024 19.47 21.3915H4.53027C6.58016 23.024 9.17596 24.0002 12.0001 24.0002Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M1.76146 18.2601H22.2389C22.8286 17.2978 23.2859 16.2459 23.5868 15.1296H0.413574C0.714371 16.2459 1.17173 17.2978 1.76146 18.2601Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M12 12C12 5.37262 12 4.59131 12 0C5.37262 0 0 5.37262 0 12H12Z\"\r\n fill=\"#0052B4\"\r\n />\r\n <path\r\n d=\"M7.98001 10.2709C6.34117 10.2709 5.01263 8.94229 5.01263 7.30349C5.01263 5.6647 6.34121 4.33612 7.98001 4.33612C8.491 4.33612 8.97179 4.46535 9.39156 4.69279C8.73306 4.04887 7.8325 3.65137 6.8387 3.65137C4.82171 3.65137 3.18652 5.28651 3.18652 7.30354C3.18652 9.32057 4.82171 10.9557 6.8387 10.9557C7.8325 10.9557 8.73306 10.5582 9.39156 9.91429C8.97179 10.1416 8.49104 10.2709 7.98001 10.2709Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n <path\r\n d=\"M8.81671 5.21729L9.34354 6.31894L10.5333 6.04407L10.0005 7.14277L10.9573 7.90153L9.76602 8.17008L9.76935 9.39122L8.81671 8.62725L7.86402 9.39122L7.86731 8.17008L6.67603 7.90153L7.63284 7.14277L7.10001 6.04407L8.28984 6.31894L8.81671 5.21729Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4392_27547\">\r\n <rect width=\"24\" height=\"24\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nconst IndianFlag = (props: ComponentPropsWithRef<'svg'>) => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <g clipPath=\"url(#clip0_4392_27553)\">\r\n <path\r\n d=\"M1.19023 6.78213C0.427387 8.35976 -0.000488281 10.1296 -0.000488281 11.9995C-0.000488281 13.8694 0.427387 15.6393 1.19023 17.2169L11.9995 18.2604L22.8088 17.2169C23.5716 15.6393 23.9995 13.8694 23.9995 11.9995C23.9995 10.1296 23.5716 8.35976 22.8088 6.78213L11.9995 5.73865L1.19023 6.78213Z\"\r\n fill=\"#F0F0F0\"\r\n />\r\n <path\r\n d=\"M1.19092 17.2183C3.13182 21.2322 7.24225 24.0009 11.9998 24.0009C16.7573 24.0009 20.8677 21.2322 22.8086 17.2183H1.19092Z\"\r\n fill=\"#6DA544\"\r\n />\r\n <path\r\n d=\"M1.19092 6.78238H22.8086C20.8677 2.76843 16.7573 -0.000244141 11.9998 -0.000244141C7.24229 -0.000244141 3.13182 2.76843 1.19092 6.78238Z\"\r\n fill=\"#FF9811\"\r\n />\r\n <path\r\n d=\"M12.0001 16.1742C14.3052 16.1742 16.174 14.3055 16.174 12.0003C16.174 9.69513 14.3052 7.82642 12.0001 7.82642C9.69489 7.82642 7.82617 9.69513 7.82617 12.0003C7.82617 14.3055 9.69489 16.1742 12.0001 16.1742Z\"\r\n fill=\"#FF9811\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4392_27553\">\r\n <rect width=\"24\" height=\"24\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nconst IndonesianFlag = (props: ComponentPropsWithRef<'svg'>) => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <g clipPath=\"url(#clip0_4392_27559)\">\r\n <path\r\n d=\"M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z\"\r\n fill=\"#F0F0F0\"\r\n />\r\n <path\r\n d=\"M0 12C0 5.37262 5.37262 0 12 0C18.6274 0 24 5.37262 24 12\"\r\n fill=\"#A2001D\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4392_27559\">\r\n <rect width=\"24\" height=\"24\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nconst VietnameseFlag = (props: ComponentPropsWithRef<'svg'>) => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <g clipPath=\"url(#clip0_10544_106556)\">\r\n <path\r\n d=\"M10 20C15.5228 20 20 15.5228 20 10C20 4.47715 15.5228 0 10 0C4.47715 0 0 4.47715 0 10C0 15.5228 4.47715 20 10 20Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M10.0003 5.2168L11.0795 8.53825H14.5719L11.7464 10.591L12.8257 13.9125L10.0003 11.8597L7.17488 13.9125L8.2541 10.591L5.42871 8.53825H8.92105L10.0003 5.2168Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_10544_106556\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n","import { getPlatform, type Platform } from '@opexa/portal-sdk-core';\nimport { useQuery } from '@tanstack/react-query';\nimport { PLATFORM_CODE } from '../../constants';\nimport type { Query } from '../../types';\nimport { getPlatformQueryKey } from './getPlatformQueryKey';\n\nexport const usePlatformQuery: Query<Platform> = (config) => {\n return useQuery({\n ...config,\n queryKey: getPlatformQueryKey(),\n queryFn: async () => {\n return await getPlatform({\n headers: {\n 'Platform-Code': PLATFORM_CODE,\n },\n });\n },\n });\n};\n","import type { QueryKey } from '@tanstack/react-query';\n\nexport const getPlatformQueryKey = (): QueryKey => ['queries/platform'];\n","import { getLocaleInfo } from '../utils/getLocaleInfo';\nimport { usePlatformQuery } from './usePlatformQuery/usePlatformQuery';\n\nexport const useLocaleInfo = () => {\n const query = usePlatformQuery();\n return getLocaleInfo(query.data?.timezone ?? 'Asia/Manila');\n};\n","import { useMutation } from '@tanstack/react-query';\nimport { signOut } from '../../services/client/signOut';\nimport type { Mutation } from '../../types/index';\nimport { getQueryClient } from '../../utils/getQueryClient';\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\nimport { getSignOutMutationKey } from './getSignOutMutationKey';\n\nexport const useSignOutMutation: Mutation = (config) => {\n const queryClient = getQueryClient();\n\n return useMutation({\n ...config,\n mutationKey: getSignOutMutationKey(),\n mutationFn: async () => {\n await signOut();\n await queryClient.invalidateQueries({ queryKey: getSessionQueryKey() });\n queryClient.clear();\n },\n });\n};\n","export async function signOut() {\n const res = await fetch('/api/sessions', {\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n });\n\n if (!res.ok) {\n const error = new Error();\n error.name = 'SignOutError';\n error.message = 'Failed to sign out';\n throw error;\n }\n}\n","import type { MutationKey } from '@tanstack/react-query';\n\nexport const getSignOutMutationKey = (): MutationKey => ['mutations/signOut'];\n","import { getWallet, type Wallet } from '@opexa/portal-sdk-core';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Query } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getWalletQueryKey } from './getWalletQueryKey';\r\n\r\nexport const useWalletQuery: Query<Wallet | null> = (config) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n return useQuery({\r\n ...config,\r\n enabled:\r\n config?.enabled === false\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated',\r\n queryKey: getWalletQueryKey(),\r\n queryFn: async ({ signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getWallet({\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n });\r\n};\r\n","import type { QueryKey } from '@tanstack/react-query';\n\nexport const getWalletQueryKey = (): QueryKey => ['queries/wallet'];\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function ChevronRightIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M9 18L15 12L9 6\" />\r\n </svg>\r\n );\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function Logout01Icon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M16 17L21 12M21 12L16 7M21 12H9M9 3H7.8C6.11984 3 5.27976 3 4.63803 3.32698C4.07354 3.6146 3.6146 4.07354 3.32698 4.63803C3 5.27976 3 6.11984 3 7.8V16.2C3 17.8802 3 18.7202 3.32698 19.362C3.6146 19.9265 4.07354 20.3854 4.63803 20.673C5.27976 21 6.11984 21 7.8 21H9\" />\r\n </svg>\r\n );\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function User01Icon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M20 21C20 19.6044 20 18.9067 19.8278 18.3389C19.44 17.0605 18.4395 16.06 17.1611 15.6722C16.5933 15.5 15.8956 15.5 14.5 15.5H9.5C8.10444 15.5 7.40665 15.5 6.83886 15.6722C5.56045 16.06 4.56004 17.0605 4.17224 18.3389C4 18.9067 4 19.6044 4 21M16.5 7.5C16.5 9.98528 14.4853 12 12 12C9.51472 12 7.5 9.98528 7.5 7.5C7.5 5.01472 9.51472 3 12 3C14.4853 3 16.5 5.01472 16.5 7.5Z\" />\r\n </svg>\r\n );\r\n}\r\n","import { z } from 'zod';\n\nconst definition = z\n .union([\n z.number(),\n z.string().transform((val) => {\n const parsed = parseFloat(val);\n return isNaN(parsed) ? null : parsed;\n }),\n ])\n .nullable()\n .optional()\n .default(null)\n .catch(null);\n\nexport function parseDecimal(value: unknown): number | null;\nexport function parseDecimal(value: unknown, fallback: number): number;\nexport function parseDecimal(value: unknown, fallback: number | null = null) {\n return definition.parse(value) ?? fallback;\n}\n","import { parseDecimal } from './parseDecimal';\n\ninterface FormatNumberConfig {\n /** @default \"en-US\" */\n locale?: string;\n compact?: boolean;\n currency?: string;\n /** @default 0 */\n minDecimalPlaces?: number;\n /** @default 2 */\n maxDecimalPlaces?: number;\n}\n\nconst defaultConfig = {\n locale: 'en-US',\n compact: false,\n minDecimalPlaces: 0,\n maxDecimalPlaces: 2,\n} satisfies FormatNumberConfig;\n\n/**\n * @example\n * ```ts\n * numberFormatter.format(1234567.89) // \"1,234,567.89\"\n * numberFormatter.format(1234567.89, { locale: 'de-DE' }) // \"1.234.567,89\"\n * numberFormatter.format(1234567.89, { compact: true }) // \"1M\"\n * numberFormatter.format(1234567.89, { currency: 'USD' }) // \"$1,234,567.89\"\n * ```\n */\nexport function formatNumber(value: unknown, config?: FormatNumberConfig) {\n const {\n /**/\n locale,\n compact,\n currency,\n minDecimalPlaces,\n maxDecimalPlaces,\n } = Object.assign({}, defaultConfig, config);\n\n const formatter = new Intl.NumberFormat(locale, {\n minimumFractionDigits: minDecimalPlaces,\n maximumFractionDigits: maxDecimalPlaces,\n\n ...(typeof currency === 'string'\n ? {\n style: 'currency',\n currency,\n }\n : {}),\n\n ...(compact\n ? {\n notation: 'compact',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }\n : {}),\n });\n\n return formatter.format(parseDecimal(value, 0));\n}\n","'use client';\r\n\r\nimport emblaCarouselAutoplay from 'embla-carousel-autoplay';\r\nimport useEmblaCarousel, {\r\n type UseEmblaCarouselType,\r\n} from 'embla-carousel-react';\r\nimport type { ImageProps } from 'next/image';\r\nimport Image from 'next/image';\r\nimport Link from 'next/link';\r\nimport { Fragment, useEffect, useState } from 'react';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { dataAttr } from '../../utils/dataAttr';\r\n\r\ninterface Banner {\r\n src: ImageProps['src'];\r\n redirectUrl?: string;\r\n}\r\n\r\nexport interface BannerProps {\r\n banners: Banner[];\r\n className?: string;\r\n}\r\n\r\nexport function Banner(props: BannerProps) {\r\n const [emblaRef, emblaApi] = useEmblaCarousel(\r\n {\r\n loop: true,\r\n align: 'start',\r\n },\r\n [\r\n emblaCarouselAutoplay({\r\n playOnInit: true,\r\n delay: 5000,\r\n }),\r\n ],\r\n );\r\n\r\n const [currentIndex, setCurrentIndex] = useState(0);\r\n\r\n useEffect(() => {\r\n function handler(detail: UseEmblaCarouselType[1]) {\r\n setCurrentIndex(detail?.selectedScrollSnap() ?? 0);\r\n }\r\n\r\n emblaApi?.on('scroll', handler);\r\n emblaApi?.on('init', handler);\r\n\r\n return () => {\r\n emblaApi?.on('init', handler);\r\n emblaApi?.off('scroll', handler);\r\n };\r\n }, [emblaApi]);\r\n\r\n return (\r\n <div className={twMerge('relative', props.className)}>\r\n <div ref={emblaRef} className=\"overflow-hidden\">\r\n <div className=\"flex gap-2\">\r\n {props.banners.map((banner, index) => {\r\n const img = (\r\n <Image\r\n src={banner.src}\r\n alt=\"\"\r\n width={1200} /* ✏️ TODO: must be 400 on mobile */\r\n height={300} /* ✏️ TODO: must be 225 on mobile */\r\n className=\"block h-auto w-full rounded-xl\"\r\n priority={index === 0}\r\n />\r\n );\r\n\r\n return (\r\n <Fragment key={index}>\r\n {!banner.redirectUrl ? (\r\n <div className=\"w-full shrink-0\">{img}</div>\r\n ) : (\r\n <Link\r\n href={banner.redirectUrl}\r\n className=\"block w-full shrink-0\"\r\n >\r\n {img}\r\n </Link>\r\n )}\r\n </Fragment>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n\r\n <div className=\"absolute bottom-lg left-1/2 flex w-fit -translate-x-1/2 gap-2\">\r\n {props.banners.map((_, index) => (\r\n <button\r\n key={index}\r\n type=\"button\"\r\n className=\"border-gray-200 ui-active:bg-gray-800 bg-gray-400 size-3 shrink-0 rounded-full border transition-all duration-300 ui-active:w-9\"\r\n onClick={() => {\r\n emblaApi?.scrollTo(index);\r\n }}\r\n aria-label={`Go to slide ${index + 1}`}\r\n data-active={dataAttr(index === currentIndex)}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport { createListCollection, parseDate, Portal } from '@ark-ui/react';\r\nimport { tz, TZDateMini } from '@date-fns/tz';\r\nimport type {\r\n BetRecordStatus,\r\n GameProvider,\r\n GameType,\r\n} from '@opexa/portal-sdk-core';\r\nimport { endOfDay, format, startOfDay } from 'date-fns';\r\nimport { useReducer, useState } from 'react';\r\nimport { z } from 'zod';\r\nimport { useBetRecordsQuery } from '../../hooks/useBetRecordsQuery/useBetRecordsQuery';\r\nimport { useInfiniteQueryHelper } from '../../hooks/useInfiniteQueryHelper';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { CheckIcon } from '../../icons/CheckIcon';\r\nimport { ChevronDownIcon } from '../../icons/ChevronDownIcon';\r\nimport { ChevronLeftIcon } from '../../icons/ChevronLeftIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { File02Icon } from '../../icons/File02Icon';\r\nimport { SpinnerIcon } from '../../icons/SpinnerIcon';\r\nimport type { DateRange } from '../../types';\r\nimport { DatePicker, IconButton, SegmentGroup, Select, Table } from '../../ui';\r\nimport { capitalize } from '../../utils/capitalize';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\nimport { Empty } from '../Empty';\r\nimport type { BetRecordsProps } from './BetRecords';\r\n\r\ninterface PageState {\r\n page: number;\r\n pageSize: number;\r\n type?: GameType | null;\r\n timestamp?: Partial<DateRange> | null;\r\n provider?: GameProvider | null;\r\n status?: BetRecordStatus | null;\r\n}\r\n\r\nexport function BetRecordsContent(props: BetRecordsProps) {\r\n const [tab, setTab] = useState<z.infer<typeof TabDefinition>>('all');\r\n\r\n const [state, setState] = useReducer(\r\n (prev: PageState, next: Partial<PageState>) => ({\r\n ...prev,\r\n ...next,\r\n }),\r\n {\r\n page: 1,\r\n pageSize: 10,\r\n type: props.gameTypes[0],\r\n },\r\n );\r\n\r\n const localeInfo = useLocaleInfo();\r\n\r\n const providerCollection = createListCollection({\r\n items: props.gameProviders,\r\n itemToValue: (item) => item,\r\n itemToString: (item) =>\r\n capitalize(item, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n }),\r\n });\r\n\r\n const {\r\n page,\r\n pageSize,\r\n hasNextPage,\r\n hasPrevPage,\r\n next,\r\n prev,\r\n rows,\r\n setPageSize,\r\n totalPages,\r\n loading,\r\n firstPage,\r\n } = useInfiniteQueryHelper(useBetRecordsQuery, {\r\n filter: {\r\n ...(state.type && {\r\n game__type: {\r\n equal: state.type,\r\n },\r\n }),\r\n ...(state.provider && {\r\n game__provider: {\r\n equal: state.provider,\r\n },\r\n }),\r\n ...(state.status && {\r\n status: {\r\n equal: state.status,\r\n },\r\n }),\r\n ...(state.timestamp && {\r\n dateTimeCreated: {\r\n ...(state.timestamp.start && {\r\n greaterThanOrEqual: new TZDateMini(\r\n startOfDay(state.timestamp.start),\r\n localeInfo.timezone,\r\n ).toISOString(),\r\n }),\r\n ...(state.timestamp.end && {\r\n lesserThanOrEqual: new TZDateMini(\r\n endOfDay(state.timestamp.end),\r\n localeInfo.timezone,\r\n ).toISOString(),\r\n }),\r\n },\r\n }),\r\n },\r\n });\r\n\r\n return (\r\n <div className={props.className}>\r\n <h2 className=\"text-lg font-semibold\">Bet Records</h2>\r\n <p className=\"text-gray-600 mt-xs text-xs\">View your bet records</p>\r\n\r\n <div className=\"mt-2xl pb-2xl\">\r\n <SegmentGroup.Root\r\n value={state.type}\r\n onValueChange={(details) => {\r\n firstPage();\r\n setState({\r\n type:\r\n z\r\n .enum((props.gameTypes ?? []) as [GameType])\r\n .safeParse(details.value).data ?? null,\r\n });\r\n }}\r\n >\r\n {props.gameTypes.map((type) => (\r\n <SegmentGroup.Item key={type} value={type}>\r\n <SegmentGroup.ItemText>\r\n {capitalize(type, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </SegmentGroup.ItemText>\r\n <SegmentGroup.ItemControl />\r\n <SegmentGroup.ItemHiddenInput />\r\n </SegmentGroup.Item>\r\n ))}\r\n\r\n <SegmentGroup.Indicator />\r\n </SegmentGroup.Root>\r\n </div>\r\n\r\n <div className=\"mt-4xl\">\r\n <div className=\"flex items-center gap-lg\">\r\n <DatePicker.Root\r\n lazyMount\r\n unmountOnExit\r\n value={[state.timestamp?.start, state.timestamp?.end]\r\n .filter(Boolean)\r\n .map((d) => parseDate(d))}\r\n onValueChange={(details) => {\r\n firstPage();\r\n setState({\r\n timestamp: {\r\n start: details.value.at(0)?.toDate(DEVICE_TIMEZONE),\r\n end: details.value.at(1)?.toDate(DEVICE_TIMEZONE),\r\n },\r\n });\r\n }}\r\n onOpenChange={(details) => {\r\n if (details.open) return;\r\n if (state.timestamp) return;\r\n setTab('all');\r\n }}\r\n selectionMode=\"range\"\r\n closeOnSelect={false}\r\n positioning={{\r\n gutter: 20,\r\n placement: 'bottom',\r\n }}\r\n >\r\n <SegmentGroup.Root\r\n value={tab}\r\n onValueChange={(details) => {\r\n const value = TabDefinition.parse(details.value);\r\n\r\n if (value === 'today') {\r\n const now = new Date();\r\n\r\n setState({\r\n timestamp: {\r\n start: startOfDay(now),\r\n end: endOfDay(now),\r\n },\r\n });\r\n } else {\r\n setState({\r\n timestamp: null,\r\n });\r\n }\r\n\r\n firstPage();\r\n setTab(value);\r\n }}\r\n >\r\n <SegmentGroup.Item value=\"all\">\r\n <SegmentGroup.ItemText>All</SegmentGroup.ItemText>\r\n <SegmentGroup.ItemControl />\r\n <SegmentGroup.ItemHiddenInput />\r\n </SegmentGroup.Item>\r\n <SegmentGroup.Item value=\"today\">\r\n <SegmentGroup.ItemText>Today</SegmentGroup.ItemText>\r\n <SegmentGroup.ItemControl />\r\n <SegmentGroup.ItemHiddenInput />\r\n </SegmentGroup.Item>\r\n\r\n <DatePicker.Context>\r\n {(api) => (\r\n <SegmentGroup.Item\r\n value=\"custom\"\r\n onClick={() => api.setOpen(true)}\r\n >\r\n <DatePicker.Control>\r\n <SegmentGroup.ItemText>Custom</SegmentGroup.ItemText>\r\n <SegmentGroup.ItemControl />\r\n <SegmentGroup.ItemHiddenInput />\r\n </DatePicker.Control>\r\n </SegmentGroup.Item>\r\n )}\r\n </DatePicker.Context>\r\n\r\n <SegmentGroup.Indicator />\r\n </SegmentGroup.Root>\r\n <Portal>\r\n <DatePicker.Positioner>\r\n <DatePicker.Content>\r\n <DatePicker.View view=\"day\">\r\n <DatePicker.Context>\r\n {(api) => (\r\n <>\r\n <DatePicker.ViewControl>\r\n <DatePicker.PrevTrigger>\r\n <ChevronLeftIcon />\r\n </DatePicker.PrevTrigger>\r\n <DatePicker.ViewTrigger>\r\n <DatePicker.RangeText />\r\n </DatePicker.ViewTrigger>\r\n <DatePicker.NextTrigger>\r\n <ChevronRightIcon />\r\n </DatePicker.NextTrigger>\r\n </DatePicker.ViewControl>\r\n <DatePicker.Table>\r\n <DatePicker.TableHead>\r\n <DatePicker.TableRow>\r\n {api.weekDays.map((weekDay, id) => (\r\n <DatePicker.TableHeader key={id}>\r\n {weekDay.short.substring(0, 2)}\r\n </DatePicker.TableHeader>\r\n ))}\r\n </DatePicker.TableRow>\r\n </DatePicker.TableHead>\r\n <DatePicker.TableBody>\r\n {api.weeks.map((week, id) => (\r\n <DatePicker.TableRow key={id}>\r\n {week.map((day, id) => (\r\n <DatePicker.TableCell key={id} value={day}>\r\n <DatePicker.TableCellTrigger>\r\n {day.day}\r\n </DatePicker.TableCellTrigger>\r\n </DatePicker.TableCell>\r\n ))}\r\n </DatePicker.TableRow>\r\n ))}\r\n </DatePicker.TableBody>\r\n </DatePicker.Table>\r\n </>\r\n )}\r\n </DatePicker.Context>\r\n </DatePicker.View>\r\n </DatePicker.Content>\r\n </DatePicker.Positioner>\r\n </Portal>\r\n </DatePicker.Root>\r\n\r\n <div className=\"grow\" />\r\n\r\n <Select.Root\r\n collection={providerCollection}\r\n value={state.provider ? [state.provider] : []}\r\n onValueChange={(details) => {\r\n const value = z\r\n .enum((props.gameProviders ?? []) as [GameProvider])\r\n .safeParse(details.value.at(0)).data;\r\n\r\n firstPage();\r\n setState({\r\n provider: value ?? null,\r\n });\r\n }}\r\n lazyMount\r\n deselectable\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText placeholder=\"Game Vendor\" />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n </Select.Trigger>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n <Select.ItemGroup>\r\n {providerCollection.items.map((provider) => (\r\n <Select.Item key={provider} item={provider}>\r\n <Select.ItemText>\r\n {capitalize(provider, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Select.ItemText>\r\n <Select.ItemIndicator asChild>\r\n <CheckIcon />\r\n </Select.ItemIndicator>\r\n </Select.Item>\r\n ))}\r\n </Select.ItemGroup>\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Root>\r\n\r\n <Select.Root\r\n collection={statusCollection}\r\n value={state.status ? [state.status] : []}\r\n onValueChange={(details) => {\r\n const value = z\r\n .enum(BET_RECORD_STATUSES)\r\n .safeParse(details.value.at(0)).data;\r\n\r\n firstPage();\r\n setState({\r\n status: value ?? null,\r\n });\r\n }}\r\n lazyMount\r\n deselectable\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText placeholder=\"Status\" />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n </Select.Trigger>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n <Select.ItemGroup>\r\n {statusCollection.items.map((status) => (\r\n <Select.Item key={status} item={status}>\r\n <Select.ItemText>\r\n {capitalize(status, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Select.ItemText>\r\n <Select.ItemIndicator asChild>\r\n <CheckIcon />\r\n </Select.ItemIndicator>\r\n </Select.Item>\r\n ))}\r\n </Select.ItemGroup>\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Root>\r\n </div>\r\n\r\n {rows.length <= 0 && (\r\n <Empty\r\n icon={loading ? SpinnerIcon : File02Icon}\r\n title={loading ? 'Just a moment' : 'No data'}\r\n message={\r\n loading\r\n ? 'Fetching latest bet records...'\r\n : 'No data is currently available.'\r\n }\r\n className=\"mt-8 lg:mt-16\"\r\n />\r\n )}\r\n\r\n {rows.length >= 1 && (\r\n <div className=\"border-gray-200 mt-lg rounded-xl border\">\r\n <div className=\"border-gray-200 overflow-hidden overflow-x-auto rounded-xl border-b\">\r\n <Table.Root className=\"border-0\">\r\n <Table.Header>\r\n <Table.Row>\r\n <Table.Heading>Bet Time</Table.Heading>\r\n <Table.Heading>Settlement Time</Table.Heading>\r\n <Table.Heading>Bet Content</Table.Heading>\r\n <Table.Heading>Odds</Table.Heading>\r\n <Table.Heading>Bet Amount</Table.Heading>\r\n <Table.Heading>Valid Bet</Table.Heading>\r\n <Table.Heading>Settled Amount</Table.Heading>\r\n <Table.Heading>Jackpot Contribution</Table.Heading>\r\n <Table.Heading>Jackpot Payout</Table.Heading>\r\n <Table.Heading>Bet Status</Table.Heading>\r\n <Table.Heading>Game Name</Table.Heading>\r\n <Table.Heading>Vendor Round ID</Table.Heading>\r\n </Table.Row>\r\n </Table.Header>\r\n <Table.Body>\r\n {rows.map((data) => (\r\n <Table.Row key={data.id}>\r\n <Table.Cell>\r\n {format(data.dateTimeCreated, 'yyyy MMM dd hh:mma', {\r\n in: tz(localeInfo.timezone),\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {!!data.dateTimeSettled &&\r\n format(data.dateTimeSettled, 'yyyy MMM dd hh:mma', {\r\n in: tz(localeInfo.timezone),\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>{data?.betContent}</Table.Cell>\r\n <Table.Cell>{data.metadata?.odds}</Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.bet, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>{data.validBet}</Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.payout, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.jackpotContribution, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.jackpotPayout, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>{data.status}</Table.Cell>\r\n <Table.Cell>{data.game.name}</Table.Cell>\r\n <Table.Cell>{data.vendorRoundId}</Table.Cell>\r\n </Table.Row>\r\n ))}\r\n </Table.Body>\r\n </Table.Root>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-lg px-4 py-3\">\r\n <p>\r\n Page {page} of {totalPages}\r\n </p>\r\n <div className=\"grow\"></div>\r\n <Select.Root\r\n size=\"sm\"\r\n value={[pageSize.toString()]}\r\n onValueChange={(details) => {\r\n const n = parseInt(details.value[0]);\r\n const v = isNaN(n) ? 10 : n;\r\n\r\n setPageSize(v);\r\n }}\r\n collection={pageSizeCollection}\r\n lazyMount\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n {pageSizeCollection.items.map((item) => (\r\n <Select.Item key={item} item={item}>\r\n {pageSizeCollection.stringifyItem(item)}\r\n </Select.Item>\r\n ))}\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Trigger>\r\n </Select.Root>\r\n <div>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n disabled={!hasPrevPage || loading}\r\n onClick={() => prev()}\r\n >\r\n <ChevronLeftIcon className=\"size-5\" />\r\n </IconButton>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n disabled={!hasNextPage || loading}\r\n onClick={() => next()}\r\n >\r\n <ChevronRightIcon className=\"size-5\" />\r\n </IconButton>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nconst BET_RECORD_STATUSES = [\r\n 'CANCELLED',\r\n 'SETTLED',\r\n 'STARTED',\r\n] as const satisfies BetRecordStatus[];\r\n\r\nconst pageSizeCollection = createListCollection({\r\n items: useInfiniteQueryHelper.config.pageSizes,\r\n itemToValue: (item) => item.toString(),\r\n itemToString: (item) => `${item} items per page`,\r\n});\r\n\r\nconst statusCollection = createListCollection({\r\n items: BET_RECORD_STATUSES,\r\n itemToValue: (item) => item,\r\n itemToString: (item) =>\r\n capitalize(item, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n }),\r\n});\r\n\r\nconst TabDefinition = z.enum(['all', 'today', 'custom']);\r\n\r\nconst DEVICE_TIMEZONE = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n","import {\r\n type BetRecord,\r\n type BetRecordsInput,\r\n getBetRecords,\r\n type PaginatedQueryResult,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useInfiniteQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { InfiniteQuery } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getBetRecordsQueryKey } from './getBetRecordsQueryKey';\r\n\r\nexport const useBetRecordsQuery: InfiniteQuery<\r\n PaginatedQueryResult<BetRecord>,\r\n BetRecordsInput\r\n> = (input, config) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n const query = useInfiniteQuery({\r\n enabled: sessionQuery.data?.status === 'authenticated',\r\n ...config,\r\n queryKey: getBetRecordsQueryKey(input),\r\n queryFn: async ({ pageParam, signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getBetRecords(\r\n { ...input, after: pageParam },\r\n {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n getNextPageParam(lastPage) {\r\n if (lastPage?.pageInfo?.hasNextPage) {\r\n return lastPage?.pageInfo?.endCursor;\r\n }\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { BetRecordsInput } from '@opexa/portal-sdk-core';\nimport type { QueryKey } from '@tanstack/react-query';\n\nexport const getBetRecordsQueryKey = (input?: BetRecordsInput): QueryKey => [\n 'queries/betRecords',\n input,\n];\n","import type { PaginatedQueryResult } from '@opexa/portal-sdk-core';\r\nimport { chunk } from 'lodash-es';\r\nimport { useState } from 'react';\r\nimport type { InfiniteQuery } from '../types';\r\n\r\ntype KnownVariables = {\r\n first?: number;\r\n after?: string | null;\r\n [x: string]: unknown;\r\n};\r\n\r\ninterface UseInfiniteQueryHelperReturn<\r\n T extends PaginatedQueryResult<unknown>,\r\n> {\r\n rows: Array<T['edges'][0]['node']>;\r\n page: number;\r\n setPage: (page: number) => void;\r\n next: () => Promise<void>;\r\n prev: () => Promise<void>;\r\n pageSize: number;\r\n setPageSize: (size: number) => void;\r\n totalRows: number;\r\n totalPages: number;\r\n hasNextPage: boolean;\r\n hasPrevPage: boolean;\r\n loading: boolean;\r\n firstPage: () => void;\r\n}\r\n\r\nexport function useInfiniteQueryHelper<\r\n QueryData extends PaginatedQueryResult<unknown>,\r\n QueryVariables extends KnownVariables,\r\n>(\r\n useQuery: InfiniteQuery<QueryData, QueryVariables>,\r\n variables: QueryVariables,\r\n): UseInfiniteQueryHelperReturn<QueryData> {\r\n const [page, setPage] = useState(1);\r\n const [pageSize, setPageSize_] = useState(10);\r\n\r\n const setPageSize = (size: number) => {\r\n setPage(1);\r\n setPageSize_(size);\r\n };\r\n\r\n const query = useQuery({\r\n first: pageSize,\r\n after: null,\r\n ...variables,\r\n });\r\n\r\n const rowsLoaded =\r\n query.data?.pages\r\n .map((page) => page.edges.map((edge) => edge.node))\r\n .flat() ?? [];\r\n\r\n const pagesLoaded = chunk(rowsLoaded, pageSize);\r\n const totalPagesLoaded = Math.ceil(rowsLoaded.length / pageSize);\r\n\r\n const rows = pagesLoaded.at(page - 1) ?? [];\r\n const totalRows = query.data?.pages.at(-1)?.totalCount ?? 0;\r\n const totalPages = Math.ceil(totalRows / pageSize);\r\n const hasNextPage = page < totalPages;\r\n const hasPrevPage = page > 1;\r\n\r\n const next = async () => {\r\n if (!hasNextPage) {\r\n return;\r\n }\r\n\r\n const nextPage = page + 1;\r\n\r\n if (totalPagesLoaded < nextPage) {\r\n await query.fetchNextPage();\r\n }\r\n\r\n setPage((prev) => prev + 1);\r\n };\r\n\r\n const prev = async () => {\r\n if (!hasPrevPage) {\r\n return;\r\n }\r\n\r\n setPage((prev) => prev - 1);\r\n };\r\n\r\n const firstPage = () => {\r\n setPage(1);\r\n };\r\n\r\n const loading = query.isLoading || query.isFetchingNextPage;\r\n\r\n return {\r\n rows,\r\n page,\r\n setPage,\r\n next,\r\n prev,\r\n pageSize,\r\n setPageSize,\r\n totalRows,\r\n totalPages,\r\n hasNextPage,\r\n hasPrevPage,\r\n loading,\r\n firstPage,\r\n };\r\n}\r\n\r\nuseInfiniteQueryHelper.config = {\r\n pageSizes: [10, 25, 50, 100],\r\n defaultPageSize: 10,\r\n defaultPage: 1,\r\n};\r\n","import type { ComponentPropsWithRef } from 'react';\n\nexport function CheckIcon(props: ComponentPropsWithRef<'svg'>) {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M20 6L9 17L4 12\" />\n </svg>\n );\n}\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function ChevronDownIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M6 9L12 15L18 9\" />\r\n </svg>\r\n );\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function ChevronLeftIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M15 18L9 12L15 6\" />\r\n </svg>\r\n );\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function File02Icon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M14 11H8M10 15H8M16 7H8M20 6.8V17.2C20 18.8802 20 19.7202 19.673 20.362C19.3854 20.9265 18.9265 21.3854 18.362 21.673C17.7202 22 16.8802 22 15.2 22H8.8C7.11984 22 6.27976 22 5.63803 21.673C5.07354 21.3854 4.6146 20.9265 4.32698 20.362C4 19.7202 4 18.8802 4 17.2V6.8C4 5.11984 4 4.27976 4.32698 3.63803C4.6146 3.07354 5.07354 2.6146 5.63803 2.32698C6.27976 2 7.11984 2 8.8 2H15.2C16.8802 2 17.7202 2 18.362 2.32698C18.9265 2.6146 19.3854 3.07354 19.673 3.63803C20 4.27976 20 5.11984 20 6.8Z\" />\r\n </svg>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function SpinnerIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 24 24\"\r\n {...props}\r\n >\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z\"\r\n opacity=\".25\"\r\n />\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M12,4a8,8,0,0,1,7.89,6.7A1.53,1.53,0,0,0,21.38,12h0a1.5,1.5,0,0,0,1.48-1.75,11,11,0,0,0-21.72,0A1.5,1.5,0,0,0,2.62,12h0a1.53,1.53,0,0,0,1.49-1.3A8,8,0,0,1,12,4Z\"\r\n >\r\n <animateTransform\r\n attributeName=\"transform\"\r\n dur=\"0.75s\"\r\n repeatCount=\"indefinite\"\r\n type=\"rotate\"\r\n values=\"0 12 12;360 12 12\"\r\n />\r\n </path>\r\n </svg>\r\n );\r\n}\r\n","interface CapitalizeConfig {\n /**\n * @description The delimiter used to split the string into words.\n * @default ' '\n */\n delimiter?: string | RegExp;\n /**\n * @description Whether to convert the string to lowercase before capitalizing.\n * @default true\n */\n lower?: boolean;\n /**\n * @description Whether to trim the string before capitalizing.\n * @default true\n */\n trim?: boolean;\n}\n\nconst SPACE = /\\s/g;\nconst UNDERSCORE = /_/g;\nconst DASH = /-/g;\nconst PASCAL = /(?=[A-Z])/;\n\n/**\n * @example\n * ```ts\n * capitalize('foo bar baz') // 'Foo Bar Baz'\n * capitalize('foo_bar_baz', { delimiter: capitalize.delimiters.UNDERSCORE }) // 'Foo Bar Baz'\n * ```\n */\nexport function capitalize(subject: string, config?: CapitalizeConfig) {\n const trim = config?.trim ?? true;\n const lower = config?.lower ?? true;\n const delimiter = config?.delimiter ?? SPACE;\n\n if (trim) subject = subject.trim();\n\n if (subject.length < 2) {\n return subject.toUpperCase();\n }\n\n if (delimiter instanceof RegExp) {\n delimiter.lastIndex = 0;\n }\n\n return subject\n .split(delimiter)\n .map((word) => {\n if (word.length < 2) return word.toUpperCase();\n\n const firstChar = word.charAt(0).toUpperCase();\n const otherChars = lower ? word.substring(1).toLowerCase() : word.substring(1);\n\n return firstChar.concat(otherChars);\n })\n .join(' ');\n}\n\ncapitalize.delimiters = {\n SPACE,\n UNDERSCORE,\n DASH,\n /**\n * ```\n * SpotBonus => Spot Bonus\n * GenericPromo => Generic Promo\n * ```\n */\n PASCAL,\n};\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function CloudIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 152 104\"\r\n fill=\"none\"\r\n {...props}\r\n >\r\n <g filter=\"url(#filter0_dd_2719_19242)\">\r\n <path\r\n d=\"M77.6 0C66.8273 0 57.2978 5.32329 51.4987 13.4829C49.605 13.0363 47.6301 12.8 45.6 12.8C31.4615 12.8 20 24.2615 20 38.4C20 52.5385 31.4615 64 45.6 64L109.6 64C121.971 64 132 53.9712 132 41.6C132 29.2288 121.971 19.2 109.6 19.2C108.721 19.2 107.854 19.2506 107.002 19.349C102.098 7.9677 90.7797 0 77.6 0Z\"\r\n fill=\"#F9FAFB\"\r\n />\r\n <ellipse\r\n cx=\"45.6\"\r\n cy=\"38.4008\"\r\n rx=\"25.6\"\r\n ry=\"25.6\"\r\n fill=\"url(#paint0_linear_2719_19242)\"\r\n />\r\n <circle\r\n cx=\"77.6\"\r\n cy=\"32\"\r\n r=\"32\"\r\n fill=\"url(#paint1_linear_2719_19242)\"\r\n />\r\n <ellipse\r\n cx=\"109.6\"\r\n cy=\"41.5992\"\r\n rx=\"22.4\"\r\n ry=\"22.4\"\r\n fill=\"url(#paint2_linear_2719_19242)\"\r\n />\r\n </g>\r\n <defs>\r\n <filter\r\n id=\"filter0_dd_2719_19242\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"152\"\r\n height=\"104\"\r\n filterUnits=\"userSpaceOnUse\"\r\n colorInterpolationFilters=\"sRGB\"\r\n >\r\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feMorphology\r\n radius=\"4\"\r\n operator=\"erode\"\r\n in=\"SourceAlpha\"\r\n result=\"effect1_dropShadow_2719_19242\"\r\n />\r\n <feOffset dy=\"8\" />\r\n <feGaussianBlur stdDeviation=\"4\" />\r\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.03 0\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2719_19242\"\r\n />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feMorphology\r\n radius=\"4\"\r\n operator=\"erode\"\r\n in=\"SourceAlpha\"\r\n result=\"effect2_dropShadow_2719_19242\"\r\n />\r\n <feOffset dy=\"20\" />\r\n <feGaussianBlur stdDeviation=\"12\" />\r\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.08 0\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in2=\"effect1_dropShadow_2719_19242\"\r\n result=\"effect2_dropShadow_2719_19242\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in=\"SourceGraphic\"\r\n in2=\"effect2_dropShadow_2719_19242\"\r\n result=\"shape\"\r\n />\r\n </filter>\r\n <linearGradient\r\n id=\"paint0_linear_2719_19242\"\r\n x1=\"25.9429\"\r\n y1=\"21.4865\"\r\n x2=\"71.2\"\r\n y2=\"64.0007\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stopColor=\"#D0D5DD\" />\r\n <stop offset=\"0.350715\" stopColor=\"white\" stopOpacity=\"0\" />\r\n </linearGradient>\r\n <linearGradient\r\n id=\"paint1_linear_2719_19242\"\r\n x1=\"53.0286\"\r\n y1=\"10.8571\"\r\n x2=\"109.6\"\r\n y2=\"64\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stopColor=\"#D0D5DD\" />\r\n <stop offset=\"0.350715\" stopColor=\"white\" stopOpacity=\"0\" />\r\n </linearGradient>\r\n <linearGradient\r\n id=\"paint2_linear_2719_19242\"\r\n x1=\"92.4\"\r\n y1=\"26.7992\"\r\n x2=\"132\"\r\n y2=\"63.9992\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stopColor=\"#D0D5DD\" />\r\n <stop offset=\"0.350715\" stopColor=\"white\" stopOpacity=\"0\" />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n );\r\n}\r\n","import type { ComponentProps, ComponentType } from 'react';\r\nimport { CloudIcon } from './CloudIcon';\r\n\r\ninterface EmptyProps {\r\n icon: ComponentType<ComponentProps<'svg'>>;\r\n title: string;\r\n message: string;\r\n className?: string;\r\n}\r\n\r\nexport function Empty(props: EmptyProps) {\r\n return (\r\n <div role=\"alert\" aria-live=\"polite\" className={props.className}>\r\n <div className=\"relative mx-auto w-[9.5rem] pt-4\">\r\n <div className=\"bg-gray-100 absolute left-1/2 top-0 size-[6.5rem] -translate-x-1/2 rounded-full\" />\r\n <CloudIcon className=\"relative h-auto w-full shrink-0\" />\r\n <div className=\"bg-gray-600/25 absolute bottom-2 left-1/2 flex size-9 -translate-x-1/2 items-center justify-center rounded-full backdrop-blur-sm\">\r\n <props.icon className=\"size-6 text-white\" />\r\n </div>\r\n </div>\r\n <h2 className=\"mt-xl text-center font-semibold\">{props.title}</h2>\r\n <p className=\"text-gray-500 mx-auto mt-xs max-w-[25rem] text-center text-sm\">\r\n {props.message}\r\n </p>\r\n </div>\r\n );\r\n}\r\n","import type { GameProvider, GameType } from '@opexa/portal-sdk-core';\r\nimport { BetRecordsContent } from './BetRecordsContent';\r\n\r\nexport interface BetRecordsProps {\r\n gameTypes: GameType[];\r\n gameProviders: GameProvider[];\r\n className?: string;\r\n}\r\n\r\nexport function BetRecords(props: BetRecordsProps) {\r\n return <BetRecordsContent {...props} />;\r\n}\r\n","'use client';\r\n\r\nimport { Portal } from '@ark-ui/react';\r\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { z } from 'zod';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useWalletQuery } from '../../hooks/useWalletQuery/useWalletQuery';\r\nimport { Wallet02Icon } from '../../icons/Wallet02Icon';\r\nimport { XIcon } from '../../icons/XIcon';\r\nimport { Dialog, Tabs } from '../../ui';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\nimport { Deposit } from './Deposit/Deposit';\r\nimport { Withdrawal } from './Withdrawal/Withdrawal';\r\n\r\ninterface DepositWithdrawalProps {\r\n children?: ReactNode;\r\n}\r\n\r\nexport function DepositWithdrawal(props: DepositWithdrawalProps) {\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n depositWithdrawal: ctx.depositWithdrawal,\r\n })),\r\n );\r\n\r\n const localeInfo = useLocaleInfo();\r\n const walletQuery = useWalletQuery({\r\n refetchInterval: 5000,\r\n });\r\n\r\n return (\r\n <Dialog.Root\r\n lazyMount\r\n unmountOnExit\r\n open={globalStore.depositWithdrawal.open}\r\n onOpenChange={(details) => {\r\n globalStore.depositWithdrawal.setOpen(details.open);\r\n }}\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n >\r\n <Dialog.Trigger asChild>\r\n {props.children ?? <DefaulTrigger />}\r\n </Dialog.Trigger>\r\n <Portal>\r\n <Dialog.Backdrop className=\"!z-[calc(var(--z-dialog)+1)]\" />\r\n <Dialog.Positioner className=\"!z-[calc(var(--z-dialog)+2)]\">\r\n <Dialog.Content className=\"mx-auto h-full w-full bg-white p-3xl shadow-xl lg:h-auto lg:w-[640px] lg:rounded-xl\">\r\n <Dialog.CloseTrigger>\r\n <XIcon />\r\n </Dialog.CloseTrigger>\r\n <Dialog.Header className=\"flex items-center gap-xl\">\r\n <div className=\"border-gray-200 shadow-xs text-gray-700 flex size-12 items-center justify-center rounded-lg border\">\r\n <Wallet02Icon />\r\n </div>\r\n <Dialog.Title className=\"grow text-lg font-semibold\">\r\n Wallet\r\n </Dialog.Title>\r\n </Dialog.Header>\r\n\r\n <Dialog.Body className=\"mt-5\">\r\n <p className=\"text-gray-500 text-center text-sm font-medium leading-tight\">\r\n Available Balance\r\n </p>\r\n <p className=\"mt-lg text-center text-4xl font-semibold leading-tight tracking-tight\">\r\n {formatNumber(walletQuery.data?.balance, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </p>\r\n\r\n <Tabs.Root\r\n value={globalStore.depositWithdrawal.tab}\r\n onValueChange={(details) => {\r\n globalStore.depositWithdrawal.setTab(\r\n z.enum(['DEPOSIT', 'WITHDRAWAL']).parse(details.value),\r\n );\r\n }}\r\n lazyMount\r\n unmountOnExit\r\n className=\"mt-4xl space-y-4xl\"\r\n >\r\n <Tabs.List className=\"w-full\">\r\n <Tabs.Trigger value=\"DEPOSIT\" className=\"grow\">\r\n Deposit\r\n </Tabs.Trigger>\r\n <Tabs.Trigger value=\"WITHDRAWAL\" className=\"grow\">\r\n Withdrawal\r\n </Tabs.Trigger>\r\n <Tabs.Indicator />\r\n </Tabs.List>\r\n\r\n <Tabs.Content value=\"DEPOSIT\" className=\"space-y-4xl\">\r\n <Deposit />\r\n </Tabs.Content>\r\n <Tabs.Content value=\"WITHDRAWAL\" className=\"space-y-4xl\">\r\n <Withdrawal />\r\n </Tabs.Content>\r\n </Tabs.Root>\r\n </Dialog.Body>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n );\r\n}\r\n\r\nfunction DefaulTrigger(props: ComponentPropsWithRef<'button'>) {\r\n const localeInfo = useLocaleInfo();\r\n const walletQuery = useWalletQuery({\r\n refetchInterval: 5000,\r\n });\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n {...props}\r\n className={twMerge('flex', props.className)}\r\n >\r\n <div className=\"border-gray-200 flex h-11 items-center rounded-l-md border border-r-0 px-3.5 font-medium\">\r\n {formatNumber(walletQuery.data?.balance, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </div>\r\n <div className=\"bg-gray-900 flex h-11 items-center gap-1.5 rounded-r-md px-3.5 font-semibold text-white\">\r\n <Wallet02Icon className=\"size-5\" />\r\n Wallet\r\n </div>\r\n </button>\r\n );\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function Wallet02Icon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M16 7.99983V4.50048C16 3.66874 16 3.25287 15.8248 2.9973C15.6717 2.77401 15.4346 2.62232 15.1678 2.57691C14.8623 2.52493 14.4847 2.6992 13.7295 3.04775L4.85901 7.14182C4.18551 7.45267 3.84875 7.6081 3.60211 7.84915C3.38406 8.06225 3.21762 8.32238 3.1155 8.60966C3 8.93462 3 9.30551 3 10.0473V14.9998M16.5 14.4998H16.51M3 11.1998L3 17.7998C3 18.9199 3 19.48 3.21799 19.9078C3.40973 20.2841 3.71569 20.5901 4.09202 20.7818C4.51984 20.9998 5.07989 20.9998 6.2 20.9998H17.8C18.9201 20.9998 19.4802 20.9998 19.908 20.7818C20.2843 20.5901 20.5903 20.2841 20.782 19.9078C21 19.48 21 18.9199 21 17.7998V11.1998C21 10.0797 21 9.51967 20.782 9.09185C20.5903 8.71552 20.2843 8.40956 19.908 8.21782C19.4802 7.99983 18.9201 7.99983 17.8 7.99983L6.2 7.99983C5.0799 7.99983 4.51984 7.99983 4.09202 8.21781C3.7157 8.40956 3.40973 8.71552 3.21799 9.09185C3 9.51967 3 10.0797 3 11.1998ZM17 14.4998C17 14.776 16.7761 14.9998 16.5 14.9998C16.2239 14.9998 16 14.776 16 14.4998C16 14.2237 16.2239 13.9998 16.5 13.9998C16.7761 13.9998 17 14.2237 17 14.4998Z\" />\r\n </svg>\r\n );\r\n}\r\n","export function XIcon(props: React.ComponentPropsWithRef<'svg'>) {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M18 6L6 18M6 6L18 18\" />\n </svg>\n );\n}\n","import { useEffect, useState } from 'react';\r\nimport { usePaymentSettingsQuery } from '../../../hooks/usePaymentSettingsQuery/usePaymentSettingsQuery';\r\nimport { AlertCircleIcon } from '../../../icons/AlertCircleIcon';\r\nimport { SpinnerIcon } from '../../../icons/SpinnerIcon';\r\nimport { onMobileDevice } from '../../../utils/isMobile';\r\nimport { PaymentMethods } from '../PaymentMethods';\r\nimport type { PaymentMethod } from '../utils';\r\nimport { GCashDeposit } from './GCashDeposit';\r\nimport { MayaAppDeposit } from './MayaAppDeposit';\r\nimport { MayaDeposit } from './MayaDeposit';\r\nimport { OnlineBankDeposit } from './OnlineBankDeposit';\r\nimport { QRPHDeposit } from './QRPHDeposit';\r\n\r\nexport function Deposit() {\r\n const paymentSettingsQuery = usePaymentSettingsQuery();\r\n const paymentSettings = paymentSettingsQuery.data;\r\n\r\n const enabledPaymentMethods = (() => {\r\n const l: PaymentMethod[] = [];\r\n\r\n if (onMobileDevice()) {\r\n if (paymentSettings?.gcashDepositGatewaySettings?.mobileWebEnabled)\r\n l.push('GCASH');\r\n if (paymentSettings?.mayaDepositGatewaySettings?.mobileWebEnabled)\r\n l.push('MAYA');\r\n if (paymentSettings?.mayaAppDepositGatewaySettings?.mobileWebEnabled)\r\n l.push('MAYA_APP');\r\n if (paymentSettings?.qrphDepositGatewaySettings?.mobileWebEnabled)\r\n l.push('QRPH');\r\n if (paymentSettings?.onlineBankDepositGatewaySettings?.mobileWebEnabled)\r\n l.push('ONLINE_BANK');\r\n } else {\r\n if (paymentSettings?.gcashDepositGatewaySettings?.webEnabled)\r\n l.push('GCASH');\r\n if (paymentSettings?.mayaDepositGatewaySettings?.webEnabled)\r\n l.push('MAYA');\r\n if (paymentSettings?.mayaAppDepositGatewaySettings?.webEnabled)\r\n l.push('MAYA_APP');\r\n if (paymentSettings?.qrphDepositGatewaySettings?.webEnabled)\r\n l.push('QRPH');\r\n if (paymentSettings?.onlineBankDepositGatewaySettings?.webEnabled)\r\n l.push('ONLINE_BANK');\r\n }\r\n\r\n return l;\r\n })();\r\n\r\n const [paymentMethod, setPaymentMethod] = useState<PaymentMethod>();\r\n\r\n useEffect(() => {\r\n if (enabledPaymentMethods.length > 0 && !paymentMethod) {\r\n setPaymentMethod(enabledPaymentMethods[0]);\r\n }\r\n }, [enabledPaymentMethods, paymentMethod]);\r\n\r\n if (paymentSettingsQuery.isLoading) {\r\n return <SpinnerIcon className=\"mx-auto size-6\" />;\r\n }\r\n\r\n if (enabledPaymentMethods.length <= 0) {\r\n /* TODO: Empty state */\r\n return (\r\n <div className=\"border-amber-200 text-amber-700 bg-amber-50 flex items-center gap-1.5 rounded-sm border px-3 py-2.5 text-sm\">\r\n <AlertCircleIcon className=\"size-4\" />\r\n No available payment methods\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <PaymentMethods\r\n value={paymentMethod}\r\n onChange={setPaymentMethod}\r\n options={enabledPaymentMethods}\r\n />\r\n\r\n {paymentMethod === 'QRPH' && <QRPHDeposit />}\r\n {paymentMethod === 'GCASH' && <GCashDeposit />}\r\n {paymentMethod === 'MAYA' && <MayaDeposit />}\r\n {paymentMethod === 'MAYA_APP' && <MayaAppDeposit />}\r\n {paymentMethod === 'ONLINE_BANK' && <OnlineBankDeposit />}\r\n </>\r\n );\r\n}\r\n","import {\r\n getPaymentSettings,\r\n type PaymentSettings,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Query } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getPaymentSettingsQueryKey } from './getPaymentSettingsQueryKey';\r\n\r\nexport const usePaymentSettingsQuery: Query<PaymentSettings> = (config) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n const query = useQuery({\r\n ...config,\r\n enabled:\r\n config?.enabled === false\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated',\r\n queryKey: getPaymentSettingsQueryKey(),\r\n queryFn: async ({ signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getPaymentSettings({\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { QueryKey } from '@tanstack/react-query';\r\n\r\nexport const getPaymentSettingsQueryKey = (): QueryKey => [\r\n 'queries/paymentSettings',\r\n];\r\n","import type { ComponentPropsWithRef } from 'react';\n\nexport function AlertCircleIcon(props: ComponentPropsWithRef<'svg'>) {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M12 8V12M12 16H12.01M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\" />\n </svg>\n );\n}\n","import { type IsMobileOptions, isMobile } from 'is-mobile';\r\nimport { cache } from 'react';\r\n\r\ninterface OnMobileOptions extends IsMobileOptions {}\r\n\r\nexport const onMobileDevice = cache((opts?: OnMobileOptions) => {\r\n return isMobile({\r\n tablet: true,\r\n featureDetect: typeof window !== 'undefined',\r\n ...opts,\r\n });\r\n});\r\n","import type { ImageProps } from 'next/image';\r\nimport Image from 'next/image';\r\nimport { useControllableState } from '../../hooks/useControllableState';\r\nimport { CheckIcon } from '../../icons/CheckIcon';\r\nimport qrph from '../../images/QRPh.png';\r\nimport gcash from '../../images/gcash.png';\r\nimport maya from '../../images/maya.png';\r\nimport onlineBank from '../../images/online-bank.png';\r\nimport { Checkbox, Field } from '../../ui';\r\nimport { PaymentMethodDefinition, type PaymentMethod } from './utils';\r\n\r\nconst OPTIONS: {\r\n value: PaymentMethod;\r\n label: string;\r\n image: ImageProps['src'];\r\n}[] = [\r\n {\r\n value: 'GCASH',\r\n label: 'GCash',\r\n image: gcash,\r\n },\r\n {\r\n value: 'MAYA_APP',\r\n label: 'Maya App',\r\n image: maya,\r\n },\r\n {\r\n value: 'MAYA',\r\n label: 'Maya',\r\n image: maya,\r\n },\r\n {\r\n value: 'QRPH',\r\n label: 'QRPH',\r\n image: qrph,\r\n },\r\n {\r\n value: 'ONLINE_BANK',\r\n label: 'Online Bank',\r\n image: onlineBank,\r\n },\r\n];\r\n\r\ninterface PaymentMethodsProps {\r\n value?: PaymentMethod;\r\n onChange?: (value: PaymentMethod) => void;\r\n defaultValue?: PaymentMethod;\r\n options?: PaymentMethod[];\r\n className?: string;\r\n}\r\n\r\nexport function PaymentMethods(props: PaymentMethodsProps) {\r\n const options = props.options?.length\r\n ? OPTIONS.filter((option) => props.options?.includes(option.value))\r\n : OPTIONS;\r\n\r\n const [value, setValue] = useControllableState({\r\n value: props.value,\r\n defaultValue: props.defaultValue ?? options[0].value,\r\n onChange: props.onChange,\r\n });\r\n\r\n return (\r\n <div className={props.className}>\r\n <Field.Label asChild>\r\n <div>Select your payment method</div>\r\n </Field.Label>\r\n <Checkbox.Group\r\n value={[value]}\r\n onValueChange={(newValue) => {\r\n const lastValue = newValue.at(-1);\r\n if (!lastValue) return;\r\n setValue(PaymentMethodDefinition.parse(lastValue));\r\n }}\r\n className=\"grid grid-cols-2 gap-x-4 gap-y-3\"\r\n >\r\n {options.map((option) => (\r\n <Checkbox.Root\r\n key={option.value}\r\n value={option.value}\r\n className=\"border-gray-200 ui-checked:border-gray-900 ui-checked:outline-solid ui-checked:outline-gray-900 flex cursor-pointer rounded-xl border p-xl ui-checked:outline\"\r\n >\r\n <div className=\"grow\">\r\n <Image\r\n src={option.image}\r\n alt=\"\"\r\n width={200}\r\n height={40}\r\n className=\"h-5 w-auto lg:h-8\"\r\n draggable={false}\r\n />\r\n </div>\r\n <Checkbox.Control className=\"shrink-0\">\r\n <Checkbox.Indicator asChild>\r\n <CheckIcon />\r\n </Checkbox.Indicator>\r\n </Checkbox.Control>\r\n <Checkbox.HiddenInput />\r\n </Checkbox.Root>\r\n ))}\r\n </Checkbox.Group>\r\n </div>\r\n );\r\n}\r\n","import * as React from 'react';\r\n\r\nfunction useCallbackRef<Args extends unknown[], Return>(\r\n callback: ((...args: Args) => Return) | undefined,\r\n deps: React.DependencyList = [],\r\n) {\r\n const callbackRef = React.useRef<typeof callback>(() => {\r\n throw new Error('Cannot call an event handler while rendering.');\r\n });\r\n\r\n React.useInsertionEffect(() => {\r\n callbackRef.current = callback;\r\n });\r\n\r\n return React.useCallback(\r\n (...args: Args) => callbackRef.current?.(...args),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n deps,\r\n );\r\n}\r\n\r\ninterface UseControllableStateProps<T> {\r\n value?: T;\r\n onChange?: (value: T) => void;\r\n defaultValue?: T | (() => T);\r\n}\r\n\r\nexport function useControllableState<T>(\r\n props: UseControllableStateProps<T>,\r\n): [T, React.Dispatch<React.SetStateAction<T>>] {\r\n const { value: userDefinedValue, defaultValue, onChange } = props;\r\n\r\n const onChangeProp = useCallbackRef(onChange);\r\n const shouldUpdateProp = useCallbackRef((prev, next) => prev !== next);\r\n\r\n const [uncontrolledState, setUncontrolledState] = React.useState(\r\n defaultValue as T,\r\n );\r\n const controlled = userDefinedValue !== undefined;\r\n const value = controlled ? userDefinedValue : uncontrolledState;\r\n\r\n const setValue = useCallbackRef(\r\n (next: React.SetStateAction<T>) => {\r\n const setter = next as (prevState?: T) => T;\r\n const nextValue = typeof next === 'function' ? setter(value) : next;\r\n\r\n if (!shouldUpdateProp(value, nextValue)) return;\r\n\r\n if (!controlled) setUncontrolledState(nextValue);\r\n\r\n onChangeProp(nextValue);\r\n },\r\n [controlled, onChangeProp, value, shouldUpdateProp],\r\n );\r\n\r\n return [value, setValue];\r\n}\r\n","import { z } from 'zod';\r\n\r\nexport const PaymentMethodDefinition = z.enum([\r\n 'GCASH',\r\n 'MAYA_APP',\r\n 'MAYA',\r\n 'ONLINE_BANK',\r\n 'QRPH',\r\n]);\r\n\r\nexport type PaymentMethod = z.infer<typeof PaymentMethodDefinition>;\r\n","import { Portal } from '@ark-ui/react';\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useEffect } from 'react';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport { z } from 'zod';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useAvailablePromosQuery } from '../../../hooks/useAvailablePromosQuery/useAvailablePromosQuery';\r\nimport { useCreateGCashDepositMutation } from '../../../hooks/useCreateGCashDepositMutation/useCreateGCashDepositMutation';\r\nimport { useDepositsCountQuery } from '../../../hooks/useDepositsCountQuery/useDepositsCountQuery';\r\nimport { useDisclosure } from '../../../hooks/useDisclosure';\r\nimport { useGlobalStore } from '../../../hooks/useGlobalStore';\r\nimport { usePaymentSettingsQuery } from '../../../hooks/usePaymentSettingsQuery/usePaymentSettingsQuery';\r\nimport { AlertCircleIcon } from '../../../icons/AlertCircleIcon';\r\nimport { ChevronDownIcon } from '../../../icons/ChevronDownIcon';\r\nimport { ChevronUpIcon } from '../../../icons/ChevronUpIcon';\r\nimport { SpinnerIcon } from '../../../icons/SpinnerIcon';\r\nimport { XIcon } from '../../../icons/XIcon';\r\nimport { AlertDialog, Button, Field, NumberInput } from '../../../ui';\r\nimport { parseDecimal } from '../../../utils/parseDecimal';\r\nimport { toaster } from '../../../utils/toaster';\r\nimport { AmountChoices } from '../AmountChoices';\r\nimport { AvailablePromos } from '../AvailablePromos';\r\n\r\nexport function GCashDeposit() {\r\n const disclosure = useDisclosure();\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n depositWithdrawal: ctx.depositWithdrawal,\r\n })),\r\n );\r\n\r\n const createDepositMutation = useCreateGCashDepositMutation({\r\n onSuccess(data) {\r\n if (!data.checkoutUrl) return;\r\n window.open(data.checkoutUrl, '_blank', 'noopener,noreferrer');\r\n form.reset();\r\n globalStore.depositWithdrawal.setOpen(false);\r\n },\r\n onError(error) {\r\n toaster.error({\r\n description: error.message,\r\n });\r\n },\r\n });\r\n\r\n const depositsCountQuery = useDepositsCountQuery();\r\n const depositsCount = depositsCountQuery.data ?? 0;\r\n const paymentSettingsQuery = usePaymentSettingsQuery();\r\n const paymentSettings = paymentSettingsQuery.data;\r\n const gatewaySettings = paymentSettings?.gcashDepositGatewaySettings;\r\n const maximumAmount = parseDecimal(gatewaySettings?.maximumAmount, 0);\r\n const minimumAmount =\r\n depositsCount <= 0\r\n ? parseDecimal(paymentSettingsQuery.data?.minimumFirstDepositAmount, 0)\r\n : parseDecimal(gatewaySettings?.minimumAmount, 0);\r\n\r\n const promosQuery = useAvailablePromosQuery();\r\n const promos = promosQuery.data ?? [];\r\n\r\n const definition = z\r\n .object({\r\n amount: z.string().superRefine((val, ctx) => {\r\n const n = parseDecimal(val, 0);\r\n if (n < minimumAmount) {\r\n ctx.addIssue({\r\n type: 'number',\r\n code: z.ZodIssueCode.too_small,\r\n inclusive: true,\r\n minimum: minimumAmount,\r\n message: `Minimum amount is ${minimumAmount.toLocaleString()}`,\r\n });\r\n }\r\n\r\n if (n > maximumAmount) {\r\n ctx.addIssue({\r\n type: 'number',\r\n code: z.ZodIssueCode.too_big,\r\n inclusive: true,\r\n maximum: maximumAmount,\r\n message: `Maximum amount is ${maximumAmount.toLocaleString()}`,\r\n });\r\n }\r\n }),\r\n promo: z.string().optional().nullable(),\r\n })\r\n .superRefine((value, ctx) => {\r\n const promo = promos.find((o) => o.id === value.promo);\r\n const promoMinAmount = parseDecimal(promo?.minimumDepositAmount, 0);\r\n const promoMaxAmount = parseDecimal(promo?.maximumDepositAmount, 0);\r\n const amount = parseDecimal(value.amount, 0);\r\n\r\n if (promo && amount < promoMinAmount) {\r\n ctx.addIssue({\r\n path: ['amount'],\r\n code: z.ZodIssueCode.custom,\r\n message: `Minimum amount for this promo is ${promoMinAmount.toLocaleString()}`,\r\n });\r\n }\r\n\r\n if (promo && amount > promoMaxAmount) {\r\n ctx.addIssue({\r\n path: ['amount'],\r\n code: z.ZodIssueCode.custom,\r\n message: `Maximum amount for this promo is ${promoMaxAmount}`,\r\n });\r\n }\r\n });\r\n\r\n const form = useForm({\r\n mode: 'all',\r\n resolver: zodResolver(definition),\r\n defaultValues: {\r\n amount: '0',\r\n promo: null,\r\n },\r\n });\r\n\r\n useEffect(() => {\r\n if (minimumAmount) {\r\n form.reset({\r\n amount: minimumAmount.toString(),\r\n promo: null,\r\n });\r\n }\r\n }, [form, minimumAmount]);\r\n\r\n const handleSubmit = form.handleSubmit(async (data) => {\r\n createDepositMutation.mutate({\r\n amount: data.amount.toString(),\r\n promo: data.promo ?? undefined,\r\n });\r\n });\r\n\r\n return (\r\n <form onSubmit={handleSubmit} noValidate>\r\n <Controller\r\n control={form.control}\r\n name=\"amount\"\r\n render={(o) => (\r\n <Field.Root invalid={!!form.formState.errors.amount}>\r\n <NumberInput.Root\r\n min={0}\r\n step={1}\r\n value={o.field.value}\r\n onValueChange={(details) => {\r\n o.field.onChange(details.value);\r\n }}\r\n formatOptions={{\r\n maximumFractionDigits: 2,\r\n minimumFractionDigits: 0,\r\n }}\r\n allowMouseWheel\r\n >\r\n <NumberInput.Label>\r\n Enter amount you want to deposit\r\n </NumberInput.Label>\r\n <NumberInput.Control>\r\n <NumberInput.Input />\r\n <NumberInput.IncrementTrigger>\r\n <ChevronUpIcon />\r\n </NumberInput.IncrementTrigger>\r\n <NumberInput.DecrementTrigger>\r\n <ChevronDownIcon />\r\n </NumberInput.DecrementTrigger>\r\n </NumberInput.Control>\r\n </NumberInput.Root>\r\n <Field.ErrorText>\r\n {form.formState.errors.amount?.message}\r\n </Field.ErrorText>\r\n </Field.Root>\r\n )}\r\n />\r\n\r\n <AmountChoices\r\n value={parseDecimal(form.watch('amount'), 0)}\r\n onChange={(value) => {\r\n form.setValue('amount', value.toString(), {\r\n shouldTouch: true,\r\n shouldDirty: true,\r\n shouldValidate: true,\r\n });\r\n }}\r\n min={minimumAmount}\r\n max={maximumAmount}\r\n className=\"mt-xl\"\r\n />\r\n\r\n <Controller\r\n control={form.control}\r\n name=\"promo\"\r\n render={(o) => (\r\n <AvailablePromos\r\n className=\"mt-4xl\"\r\n value={o.field.value}\r\n onChange={o.field.onChange}\r\n />\r\n )}\r\n />\r\n\r\n <p className=\"mt-4xl text-xs\">\r\n Upon clicking the deposit button, you agree to the{' '}\r\n <button type=\"button\" className=\"underline underline-offset-2\">\r\n Terms of Use and Privacy Policy\r\n </button>\r\n .\r\n </p>\r\n <Button\r\n type=\"submit\"\r\n className=\"mt-4.5\"\r\n disabled={createDepositMutation.isPending}\r\n onClick={async (e) => {\r\n const ok = await form.trigger('amount');\r\n if (!ok) return;\r\n if (promos.length <= 0) return;\r\n if (form.getValues('promo')) return;\r\n e.preventDefault();\r\n disclosure.setOpen(true);\r\n }}\r\n >\r\n {createDepositMutation.isPending ? (\r\n <>\r\n <SpinnerIcon />\r\n Processing...\r\n </>\r\n ) : (\r\n 'Deposit'\r\n )}\r\n </Button>\r\n\r\n <AlertDialog.Root\r\n role=\"alertdialog\"\r\n open={disclosure.open}\r\n onOpenChange={(details) => {\r\n disclosure.setOpen(details.open);\r\n }}\r\n lazyMount\r\n unmountOnExit\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n >\r\n <Portal>\r\n <AlertDialog.Backdrop className=\"!z-[calc(var(--z-dialog)+10)]\" />\r\n <AlertDialog.Positioner className=\"!z-[calc(var(--z-dialog)+25)]\">\r\n <AlertDialog.Content>\r\n <AlertDialog.Header>\r\n <div className=\"flex size-12 items-center justify-center rounded-full bg-[#FEE4E2] text-[#D92D20]\">\r\n <AlertCircleIcon />\r\n </div>\r\n <AlertDialog.CloseTrigger>\r\n <XIcon />\r\n </AlertDialog.CloseTrigger>\r\n </AlertDialog.Header>\r\n <AlertDialog.Body>\r\n <AlertDialog.Title>\r\n Submit deposit request without promo?\r\n </AlertDialog.Title>\r\n <AlertDialog.Description>\r\n You haven&rsquo;t selected a promo. Are you sure you want to\r\n proceed without one?\r\n </AlertDialog.Description>\r\n </AlertDialog.Body>\r\n <AlertDialog.Footer>\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => {\r\n disclosure.setOpen(false);\r\n }}\r\n >\r\n Cancel\r\n </Button>\r\n <Button\r\n onClick={() => {\r\n handleSubmit();\r\n disclosure.setOpen(false);\r\n }}\r\n >\r\n Proceed\r\n </Button>\r\n </AlertDialog.Footer>\r\n </AlertDialog.Content>\r\n </AlertDialog.Positioner>\r\n </Portal>\r\n </AlertDialog.Root>\r\n </form>\r\n );\r\n}\r\n","import {\r\n getAvailablePromos,\r\n type AvailablePromosInput,\r\n type Promo,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Query } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getAvailablePromosQueryKey } from './getAvailablePromosQueryKey';\r\n\r\nexport const useAvailablePromosQuery: Query<Promo[], AvailablePromosInput> = (\r\n input,\r\n config,\r\n) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n const query = useQuery({\r\n ...config,\r\n enabled:\r\n config?.enabled === false\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated',\r\n queryKey: getAvailablePromosQueryKey(input),\r\n queryFn: async ({ signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getAvailablePromos(input, {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { AvailablePromosInput } from '@opexa/portal-sdk-core';\nimport type { QueryKey } from '@tanstack/react-query';\n\nexport const getAvailablePromosQueryKey = (input?: AvailablePromosInput): QueryKey => [\n 'queries/availablePromos',\n input,\n];\n","import {\r\n createGCashDeposit,\r\n getDeposit,\r\n type CreateGCashDepositInput,\r\n type Deposit,\r\n} from '@opexa/portal-sdk-core';\r\nimport { ObjectId, ObjectType } from '@opexa/portal-sdk-core/object-id';\r\nimport { useMutation } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Mutation } from '../../types';\r\nimport { createPoll } from '../../utils/createPoll';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { getCreateGCashDepositMutationKey } from './getCreateGCashDepositMutationKey';\r\n\r\nexport const useCreateGCashDepositMutation: Mutation<\r\n Deposit,\r\n Omit<CreateGCashDepositInput, 'id'>\r\n> = (config) => {\r\n const queryClient = getQueryClient();\r\n\r\n const mutation = useMutation({\r\n ...config,\r\n mutationKey: getCreateGCashDepositMutationKey(),\r\n mutationFn: async (input) => {\r\n const id = ObjectId.generate(ObjectType.Deposit).toString();\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n await createGCashDeposit(\r\n {\r\n id,\r\n ...input,\r\n },\r\n {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n },\r\n );\r\n\r\n const poll = createPoll(\r\n async () => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getDeposit(id, {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n {\r\n until(res) {\r\n return !!res?.checkoutUrl;\r\n },\r\n interval: 1000,\r\n maxAttempt: 5,\r\n },\r\n );\r\n\r\n const res = await poll();\r\n\r\n if (!res?.checkoutUrl) {\r\n const error = new Error();\r\n error.name = 'GCashDepositError';\r\n error.message = 'Failed to process GCash deposit';\r\n throw error;\r\n }\r\n\r\n return res;\r\n },\r\n });\r\n\r\n return mutation;\r\n};\r\n","interface CreatePollConfig<T = unknown> {\r\n until(response: T): boolean | Promise<boolean>;\r\n /**\r\n * @default 1000\r\n */\r\n interval?: number;\r\n /**\r\n * @default 3\r\n */\r\n maxAttempt?: number;\r\n}\r\n\r\nconst defaultConfig = {\r\n interval: 1000,\r\n maxAttempt: 3,\r\n} satisfies Partial<CreatePollConfig>;\r\n\r\n/**\r\n * @example\r\n * ```ts\r\n * const poll = createPoll(\r\n * fn,\r\n * {\r\n * until: (r) => r.ok,\r\n * interval: 1000,\r\n * maxAttempt: 5,\r\n * }\r\n * );\r\n *\r\n * poll()\r\n * ```\r\n */\r\nexport function createPoll<Return, Args = never>(\r\n func: (...args: Args[]) => Promise<Return>,\r\n config: CreatePollConfig<Return>,\r\n) {\r\n const { until, interval, maxAttempt } = Object.assign(defaultConfig, config);\r\n\r\n async function repeater(args: Args[], max?: number) {\r\n const remainingAttempts = max ?? maxAttempt;\r\n const result = await func(...args);\r\n const shouldStop = await until(result);\r\n\r\n if (shouldStop) return result;\r\n\r\n const retryCount = maxAttempt + 1 - remainingAttempts;\r\n const maxJitter = interval * 2 ** retryCount; /* Exponential backoff */\r\n const jitter = Math.random() * maxJitter;\r\n\r\n if (remainingAttempts > 1) {\r\n await sleep(jitter);\r\n return repeater(args, remainingAttempts - 1);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n return async (...args: Args[]): Promise<Return> => {\r\n return await repeater(args);\r\n };\r\n}\r\n\r\nfunction sleep(ms: number) {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n}\r\n","import type { MutationKey } from '@tanstack/react-query';\r\n\r\nexport const getCreateGCashDepositMutationKey = (): MutationKey => [\r\n 'mutations/createGCashDeposit',\r\n];\r\n","import { getDepositsCount } from '@opexa/portal-sdk-core';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Query } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getDepositsCountQueryKey } from './getDepositsCountQueryKey';\r\n\r\nexport const useDepositsCountQuery: Query<number> = (config) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n const query = useQuery({\r\n ...config,\r\n enabled:\r\n config?.enabled === false\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated',\r\n queryKey: getDepositsCountQueryKey(),\r\n queryFn: async ({ signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getDepositsCount({\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { QueryKey } from '@tanstack/react-query';\r\n\r\nexport const getDepositsCountQueryKey = (): QueryKey => [\r\n 'queries/depositsCount',\r\n];\r\n","import type { Dispatch, SetStateAction } from 'react';\r\nimport { useControllableState } from './useControllableState';\r\n\r\nexport interface UseDisclosureReturn {\r\n open: boolean;\r\n setOpen: Dispatch<SetStateAction<boolean>>;\r\n}\r\n\r\nexport interface UseDisclosureProps {\r\n open?: boolean;\r\n defaultOpen?: boolean;\r\n onOpenChange?: (open: boolean) => void;\r\n}\r\n\r\nexport function useDisclosure(props?: UseDisclosureProps): UseDisclosureReturn {\r\n const [open, setOpen] = useControllableState({\r\n value: props?.open,\r\n defaultValue: props?.defaultOpen ?? false,\r\n onChange: props?.onOpenChange,\r\n });\r\n\r\n return {\r\n open,\r\n setOpen,\r\n };\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function ChevronUpIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M18 15L12 9L6 15\" />\r\n </svg>\r\n );\r\n}\r\n","import { createToaster, type CreateToasterReturn } from '@ark-ui/react/toast';\n\nexport const toaster: CreateToasterReturn = createToaster({\n placement: 'top',\n duration: 5000,\n max: 5,\n overlap: true,\n gap: 8,\n});\n","import { twMerge } from 'tailwind-merge';\r\nimport { useControllableState } from '../../hooks/useControllableState';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { Button } from '../../ui';\r\nimport { dataAttr } from '../../utils/dataAttr';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\n\r\ninterface AmountChoicesProps {\r\n value?: number;\r\n defaultValue?: number;\r\n onChange?: (value: number) => void;\r\n options?: number[];\r\n className?: string;\r\n min?: number;\r\n max?: number;\r\n}\r\n\r\nexport function AmountChoices(props: AmountChoicesProps) {\r\n const min = props.min ?? 0;\r\n const max = props.max ?? 9999999;\r\n\r\n const localeInfo = useLocaleInfo();\r\n\r\n const options = props.options?.length\r\n ? props.options\r\n : [500, 750, 1000, 2000];\r\n\r\n const [value, setValue] = useControllableState({\r\n value: props.value,\r\n defaultValue: props.defaultValue ?? options[0],\r\n onChange: props.onChange,\r\n });\r\n\r\n return (\r\n <div className={twMerge('grid grid-cols-4 gap-2', props.className)}>\r\n {options.map((option) => (\r\n <Button\r\n key={option}\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => {\r\n setValue(option);\r\n }}\r\n disabled={min > option || max < option}\r\n data-selected={dataAttr(value === option)}\r\n >\r\n {formatNumber(option, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 0,\r\n maxDecimalPlaces: 0,\r\n })}\r\n </Button>\r\n ))}\r\n </div>\r\n );\r\n}\r\n","import { Carousel } from '@ark-ui/react';\r\nimport Image from 'next/image';\r\nimport Link from 'next/link';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useAvailablePromosQuery } from '../../hooks/useAvailablePromosQuery/useAvailablePromosQuery';\r\nimport { useControllableState } from '../../hooks/useControllableState';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { CheckIcon } from '../../icons/CheckIcon';\r\nimport { ChevronLeftIcon } from '../../icons/ChevronLeftIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { Checkbox, IconButton } from '../../ui';\r\n\r\ninterface AvailablePromosProps {\r\n value?: string | null;\r\n defaultValue?: string | null;\r\n onChange?: (value: string | null) => void;\r\n className?: string;\r\n}\r\n\r\nexport function AvailablePromos(props: AvailablePromosProps) {\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n depositWithdrawal: ctx.depositWithdrawal,\r\n })),\r\n );\r\n\r\n const query = useAvailablePromosQuery();\r\n const promos = query.data ?? [];\r\n\r\n const [value, setValue] = useControllableState({\r\n value: props.value,\r\n defaultValue: props.defaultValue ?? null,\r\n onChange: props.onChange,\r\n });\r\n\r\n return (\r\n <Carousel.Root\r\n slideCount={promos.length}\r\n className={props.className}\r\n spacing=\"16px\"\r\n slidesPerPage={2}\r\n >\r\n <div className=\"flex items-center gap-xl\">\r\n <div className=\"grow\">\r\n <h2 className=\"text-lg font-semibold leading-tight\">\r\n Available Promotions\r\n </h2>\r\n <p className=\"text-gray-500 mt-1 text-sm leading-tight\">\r\n Select a promotion with your deposit. Only one can be active at a\r\n time.\r\n </p>\r\n </div>\r\n\r\n <Carousel.Control>\r\n <Carousel.PrevTrigger asChild>\r\n <IconButton\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n >\r\n <ChevronLeftIcon />\r\n </IconButton>\r\n </Carousel.PrevTrigger>\r\n <Carousel.NextTrigger asChild>\r\n <IconButton\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n >\r\n <ChevronRightIcon />\r\n </IconButton>\r\n </Carousel.NextTrigger>\r\n </Carousel.Control>\r\n </div>\r\n\r\n <Carousel.ItemGroup className=\"mt-3xl\">\r\n {promos.map((promo, index) => (\r\n <Carousel.Item key={promo.id} index={index}>\r\n <div className=\"relative select-none p-0.5\">\r\n <div\r\n className={twMerge(\r\n 'block rounded-lg',\r\n promo.id === value && 'ring-gray-500/25 ring-2',\r\n )}\r\n >\r\n {promo.banner.url && (\r\n <Image\r\n src={promo.banner.url}\r\n alt=\"\"\r\n width={288}\r\n height={184}\r\n className=\"rounded-lg\"\r\n />\r\n )}\r\n </div>\r\n\r\n <Checkbox.Root\r\n checked={promo.id === value}\r\n onCheckedChange={(details) => {\r\n setValue(details.checked ? promo.id : null);\r\n }}\r\n className=\"absolute right-3 top-3 rounded-md border border-white/50 bg-white/60 p-lg backdrop-blur-sm\"\r\n >\r\n <Checkbox.Control className=\"bg-white\">\r\n <Checkbox.Indicator asChild>\r\n <CheckIcon />\r\n </Checkbox.Indicator>\r\n </Checkbox.Control>\r\n <Checkbox.HiddenInput />\r\n </Checkbox.Root>\r\n\r\n <Link\r\n href={`/promos/${promo.id}`}\r\n className=\"absolute bottom-3 right-3 rounded-md border border-white/50 bg-white/60 px-lg py-md text-sm font-semibold backdrop-blur-sm\"\r\n onClick={() => {\r\n globalStore.depositWithdrawal.setOpen(false);\r\n }}\r\n >\r\n Promo Details\r\n </Link>\r\n </div>\r\n </Carousel.Item>\r\n ))}\r\n </Carousel.ItemGroup>\r\n </Carousel.Root>\r\n );\r\n}\r\n","export function MayaAppDeposit() {\r\n return null;\r\n}\r\n","import { Portal } from '@ark-ui/react';\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useEffect } from 'react';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport { z } from 'zod';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useAvailablePromosQuery } from '../../../hooks/useAvailablePromosQuery/useAvailablePromosQuery';\r\nimport { useCreateMayaDepositMutation } from '../../../hooks/useCreateMayaDepositMutation copy/useCreateMayaDepositMutation';\r\nimport { useDepositsCountQuery } from '../../../hooks/useDepositsCountQuery/useDepositsCountQuery';\r\nimport { useDisclosure } from '../../../hooks/useDisclosure';\r\nimport { useGlobalStore } from '../../../hooks/useGlobalStore';\r\nimport { usePaymentSettingsQuery } from '../../../hooks/usePaymentSettingsQuery/usePaymentSettingsQuery';\r\nimport { AlertCircleIcon } from '../../../icons/AlertCircleIcon';\r\nimport { ChevronDownIcon } from '../../../icons/ChevronDownIcon';\r\nimport { ChevronUpIcon } from '../../../icons/ChevronUpIcon';\r\nimport { SpinnerIcon } from '../../../icons/SpinnerIcon';\r\nimport { XIcon } from '../../../icons/XIcon';\r\nimport { AlertDialog, Button, Field, NumberInput } from '../../../ui';\r\nimport { parseDecimal } from '../../../utils/parseDecimal';\r\nimport { toaster } from '../../../utils/toaster';\r\nimport { AmountChoices } from '../AmountChoices';\r\nimport { AvailablePromos } from '../AvailablePromos';\r\n\r\nexport function MayaDeposit() {\r\n const disclosure = useDisclosure();\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n depositWithdrawal: ctx.depositWithdrawal,\r\n })),\r\n );\r\n\r\n const createDepositMutation = useCreateMayaDepositMutation({\r\n onSuccess(data) {\r\n if (!data.checkoutUrl) return;\r\n window.open(data.checkoutUrl, '_blank', 'noopener,noreferrer');\r\n form.reset();\r\n globalStore.depositWithdrawal.setOpen(false);\r\n },\r\n onError(error) {\r\n toaster.error({\r\n description: error.message,\r\n });\r\n },\r\n });\r\n\r\n const depositsCountQuery = useDepositsCountQuery();\r\n const depositsCount = depositsCountQuery.data ?? 0;\r\n const paymentSettingsQuery = usePaymentSettingsQuery();\r\n const paymentSettings = paymentSettingsQuery.data;\r\n const gatewaySettings = paymentSettings?.mayaDepositGatewaySettings;\r\n const maximumAmount = parseDecimal(gatewaySettings?.maximumAmount, 0);\r\n const minimumAmount =\r\n depositsCount <= 0\r\n ? parseDecimal(paymentSettingsQuery.data?.minimumFirstDepositAmount, 0)\r\n : parseDecimal(gatewaySettings?.minimumAmount, 0);\r\n\r\n const promosQuery = useAvailablePromosQuery();\r\n const promos = promosQuery.data ?? [];\r\n\r\n const definition = z\r\n .object({\r\n amount: z.string().superRefine((val, ctx) => {\r\n const n = parseDecimal(val, 0);\r\n if (n < minimumAmount) {\r\n ctx.addIssue({\r\n type: 'number',\r\n code: z.ZodIssueCode.too_small,\r\n inclusive: true,\r\n minimum: minimumAmount,\r\n message: `Minimum amount is ${minimumAmount.toLocaleString()}`,\r\n });\r\n }\r\n\r\n if (n > maximumAmount) {\r\n ctx.addIssue({\r\n type: 'number',\r\n code: z.ZodIssueCode.too_big,\r\n inclusive: true,\r\n maximum: maximumAmount,\r\n message: `Maximum amount is ${maximumAmount.toLocaleString()}`,\r\n });\r\n }\r\n }),\r\n promo: z.string().optional().nullable(),\r\n })\r\n .superRefine((value, ctx) => {\r\n const promo = promos.find((o) => o.id === value.promo);\r\n const promoMinAmount = parseDecimal(promo?.minimumDepositAmount, 0);\r\n const promoMaxAmount = parseDecimal(promo?.maximumDepositAmount, 0);\r\n const amount = parseDecimal(value.amount, 0);\r\n\r\n if (promo && amount < promoMinAmount) {\r\n ctx.addIssue({\r\n path: ['amount'],\r\n code: z.ZodIssueCode.custom,\r\n message: `Minimum amount for this promo is ${promoMinAmount.toLocaleString()}`,\r\n });\r\n }\r\n\r\n if (promo && amount > promoMaxAmount) {\r\n ctx.addIssue({\r\n path: ['amount'],\r\n code: z.ZodIssueCode.custom,\r\n message: `Maximum amount for this promo is ${promoMaxAmount}`,\r\n });\r\n }\r\n });\r\n\r\n const form = useForm({\r\n mode: 'all',\r\n resolver: zodResolver(definition),\r\n defaultValues: {\r\n amount: '0',\r\n promo: null,\r\n },\r\n });\r\n\r\n useEffect(() => {\r\n if (minimumAmount) {\r\n form.reset({\r\n amount: minimumAmount.toString(),\r\n promo: null,\r\n });\r\n }\r\n }, [form, minimumAmount]);\r\n\r\n const handleSubmit = form.handleSubmit(async (data) => {\r\n createDepositMutation.mutate({\r\n amount: data.amount.toString(),\r\n promo: data.promo ?? undefined,\r\n });\r\n });\r\n\r\n return (\r\n <form onSubmit={handleSubmit} noValidate>\r\n <Controller\r\n control={form.control}\r\n name=\"amount\"\r\n render={(o) => (\r\n <Field.Root invalid={!!form.formState.errors.amount}>\r\n <NumberInput.Root\r\n min={0}\r\n step={1}\r\n value={o.field.value}\r\n onValueChange={(details) => {\r\n o.field.onChange(details.value);\r\n }}\r\n formatOptions={{\r\n maximumFractionDigits: 2,\r\n minimumFractionDigits: 0,\r\n }}\r\n allowMouseWheel\r\n >\r\n <NumberInput.Label>\r\n Enter amount you want to deposit\r\n </NumberInput.Label>\r\n <NumberInput.Control>\r\n <NumberInput.Input />\r\n <NumberInput.IncrementTrigger>\r\n <ChevronUpIcon />\r\n </NumberInput.IncrementTrigger>\r\n <NumberInput.DecrementTrigger>\r\n <ChevronDownIcon />\r\n </NumberInput.DecrementTrigger>\r\n </NumberInput.Control>\r\n </NumberInput.Root>\r\n <Field.ErrorText>\r\n {form.formState.errors.amount?.message}\r\n </Field.ErrorText>\r\n </Field.Root>\r\n )}\r\n />\r\n\r\n <AmountChoices\r\n value={parseDecimal(form.watch('amount'), 0)}\r\n onChange={(value) => {\r\n form.setValue('amount', value.toString(), {\r\n shouldTouch: true,\r\n shouldDirty: true,\r\n shouldValidate: true,\r\n });\r\n }}\r\n min={minimumAmount}\r\n max={maximumAmount}\r\n className=\"mt-xl\"\r\n />\r\n\r\n <Controller\r\n control={form.control}\r\n name=\"promo\"\r\n render={(o) => (\r\n <AvailablePromos\r\n className=\"mt-4xl\"\r\n value={o.field.value}\r\n onChange={o.field.onChange}\r\n />\r\n )}\r\n />\r\n\r\n <p className=\"mt-4xl text-xs\">\r\n Upon clicking the deposit button, you agree to the{' '}\r\n <button type=\"button\" className=\"underline underline-offset-2\">\r\n Terms of Use and Privacy Policy\r\n </button>\r\n .\r\n </p>\r\n <Button\r\n type=\"submit\"\r\n className=\"mt-4.5\"\r\n disabled={createDepositMutation.isPending}\r\n onClick={async (e) => {\r\n const ok = await form.trigger('amount');\r\n if (!ok) return;\r\n if (promos.length <= 0) return;\r\n if (form.getValues('promo')) return;\r\n e.preventDefault();\r\n disclosure.setOpen(true);\r\n }}\r\n >\r\n {createDepositMutation.isPending ? (\r\n <>\r\n <SpinnerIcon />\r\n Processing...\r\n </>\r\n ) : (\r\n 'Deposit'\r\n )}\r\n </Button>\r\n\r\n <AlertDialog.Root\r\n role=\"alertdialog\"\r\n open={disclosure.open}\r\n onOpenChange={(details) => {\r\n disclosure.setOpen(details.open);\r\n }}\r\n lazyMount\r\n unmountOnExit\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n >\r\n <Portal>\r\n <AlertDialog.Backdrop className=\"!z-[calc(var(--z-dialog)+10)]\" />\r\n <AlertDialog.Positioner className=\"!z-[calc(var(--z-dialog)+25)]\">\r\n <AlertDialog.Content>\r\n <AlertDialog.Header>\r\n <div className=\"flex size-12 items-center justify-center rounded-full bg-[#FEE4E2] text-[#D92D20]\">\r\n <AlertCircleIcon />\r\n </div>\r\n <AlertDialog.CloseTrigger>\r\n <XIcon />\r\n </AlertDialog.CloseTrigger>\r\n </AlertDialog.Header>\r\n <AlertDialog.Body>\r\n <AlertDialog.Title>\r\n Submit deposit request without promo?\r\n </AlertDialog.Title>\r\n <AlertDialog.Description>\r\n You haven&rsquo;t selected a promo. Are you sure you want to\r\n proceed without one?\r\n </AlertDialog.Description>\r\n </AlertDialog.Body>\r\n <AlertDialog.Footer>\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => {\r\n disclosure.setOpen(false);\r\n }}\r\n >\r\n Cancel\r\n </Button>\r\n <Button\r\n onClick={() => {\r\n handleSubmit();\r\n disclosure.setOpen(false);\r\n }}\r\n >\r\n Proceed\r\n </Button>\r\n </AlertDialog.Footer>\r\n </AlertDialog.Content>\r\n </AlertDialog.Positioner>\r\n </Portal>\r\n </AlertDialog.Root>\r\n </form>\r\n );\r\n}\r\n","import {\r\n createMayaDeposit,\r\n getDeposit,\r\n type CreateGCashDepositInput,\r\n type Deposit,\r\n} from '@opexa/portal-sdk-core';\r\nimport { ObjectId, ObjectType } from '@opexa/portal-sdk-core/object-id';\r\nimport { useMutation } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Mutation } from '../../types';\r\nimport { createPoll } from '../../utils/createPoll';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { getCreateMayaDepositMutationKey } from './getCreateMayaDepositMutationKey';\r\n\r\nexport const useCreateMayaDepositMutation: Mutation<\r\n Deposit,\r\n Omit<CreateGCashDepositInput, 'id'>\r\n> = (config) => {\r\n const queryClient = getQueryClient();\r\n\r\n const mutation = useMutation({\r\n ...config,\r\n mutationKey: getCreateMayaDepositMutationKey(),\r\n mutationFn: async (input) => {\r\n const id = ObjectId.generate(ObjectType.Deposit).toString();\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n await createMayaDeposit(\r\n {\r\n id,\r\n ...input,\r\n },\r\n {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n },\r\n );\r\n\r\n const poll = createPoll(\r\n async () => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getDeposit(id, {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n {\r\n until(res) {\r\n return !!res?.checkoutUrl;\r\n },\r\n interval: 1000,\r\n maxAttempt: 5,\r\n },\r\n );\r\n\r\n const res = await poll();\r\n\r\n if (!res?.checkoutUrl) {\r\n const error = new Error();\r\n error.name = 'MayaDepositError';\r\n error.message = 'Failed to process GCash deposit';\r\n throw error;\r\n }\r\n\r\n return res;\r\n },\r\n });\r\n\r\n return mutation;\r\n};\r\n","import type { MutationKey } from '@tanstack/react-query';\r\n\r\nexport const getCreateMayaDepositMutationKey = (): MutationKey => [\r\n 'mutations/createMayaDeposit',\r\n];\r\n","export function OnlineBankDeposit() {\r\n return null;\r\n}\r\n","export function QRPHDeposit() {\r\n return null;\r\n}\r\n","export function Withdrawal() {\r\n return null;\r\n}\r\n","'use client';\r\n\r\nimport { Portal } from '@ark-ui/react';\r\nimport type { ImageProps } from 'next/image';\r\nimport Image from 'next/image';\r\nimport { useRef } from 'react';\r\nimport pagcorLogo from '../../images/pagcor.png';\r\nimport responsibleGamingLogo from '../../images/responsible-gaming.png';\r\nimport { Button, Dialog } from '../../ui';\r\nimport { useDisclaimer } from './useDisclaimer';\r\n\r\nexport interface DisclaimerProps {\r\n logo: ImageProps['src'];\r\n}\r\n\r\nexport function Disclaimer(props: DisclaimerProps) {\r\n const disclaimer = useDisclaimer();\r\n const acceptTriggerRef = useRef<HTMLButtonElement>(null);\r\n\r\n return (\r\n <Dialog.Root\r\n open={disclaimer.open}\r\n lazyMount\r\n unmountOnExit\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n initialFocusEl={() => acceptTriggerRef.current}\r\n >\r\n <Portal>\r\n <Dialog.Backdrop />\r\n <Dialog.Positioner>\r\n <Dialog.Content className=\"flex h-full w-full flex-col items-start bg-white p-3xl lg:mx-auto lg:h-auto lg:w-[400px] lg:rounded-xl\">\r\n <Image\r\n src={props.logo}\r\n alt=\"\"\r\n width={200}\r\n height={100}\r\n className=\"mx-auto h-auto w-[120px]\"\r\n draggable={false}\r\n />\r\n\r\n <div className=\"w-full grow\">\r\n <Dialog.Title className=\"mt-3xl text-center text-lg font-semibold\">\r\n Age Verification\r\n </Dialog.Title>\r\n <Dialog.Description className=\"text-gray-600 mt-xs text-center text-sm\">\r\n By entering this website I acknowledge and confirmI am 21 years\r\n of age and I agree with the{' '}\r\n <button\r\n type=\"button\"\r\n className=\"text-accent-700 underline underline-offset-2\"\r\n >\r\n Terms and Conditions.\r\n </button>\r\n </Dialog.Description>\r\n\r\n <div className=\"mt-5 flex items-center justify-center gap-3xl\">\r\n <Image\r\n src={pagcorLogo}\r\n alt=\"\"\r\n className=\"h-[88px] w-auto shrink-0\"\r\n draggable={false}\r\n />\r\n\r\n <Image\r\n src={responsibleGamingLogo}\r\n alt=\"\"\r\n className=\"h-[62px] w-auto shrink-0\"\r\n draggable={false}\r\n />\r\n </div>\r\n </div>\r\n\r\n <Button\r\n ref={acceptTriggerRef}\r\n type=\"button\"\r\n className=\"mt-4xl\"\r\n onClick={disclaimer.close}\r\n >\r\n Accept\r\n </Button>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n );\r\n}\r\n","import { addMinutes } from 'date-fns';\r\nimport { clamp } from 'lodash-es';\r\nimport { useLocalStorage, useTimeout } from 'usehooks-ts';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { useSessionQuery } from '../../hooks/useSessionQuery/useSessionQuery';\r\n\r\nexport function useDisclaimer() {\r\n 'use no memo';\r\n\r\n const sessionQuery = useSessionQuery();\r\n const disclaimerStore = useGlobalStore(\r\n useShallow((state) => state.disclaimer),\r\n );\r\n\r\n const [refreshPausedUntil, setRefreshPausedUntil] =\r\n useLocalStorage<Date | null>(\r\n 'WebPortalDisclaimerRefreshPausedUntil',\r\n null,\r\n {\r\n serializer(v) {\r\n return v?.toISOString() ?? '';\r\n },\r\n deserializer(v) {\r\n return v ? new Date(v) : null;\r\n },\r\n },\r\n );\r\n\r\n const now = new Date();\r\n\r\n const refetchPausedUntilInMs = refreshPausedUntil\r\n ? clamp(refreshPausedUntil.getTime() - now.getTime(), 0, Infinity)\r\n : /* set to zero to trigger timeout function */ 0;\r\n\r\n useTimeout(() => {\r\n disclaimerStore.setOpen(true);\r\n }, refetchPausedUntilInMs);\r\n\r\n return {\r\n open: sessionQuery.isLoading\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated'\r\n ? false\r\n : disclaimerStore.open,\r\n close: () => {\r\n disclaimerStore.setOpen(false);\r\n setRefreshPausedUntil(addMinutes(new Date(), 30));\r\n },\r\n };\r\n}\r\n","import { createContext, useContext } from 'react';\r\nimport invariant from 'tiny-invariant';\r\nimport type { UseFeatureFlagReturn } from './useFeatureFlag';\r\n\r\nexport const FeatureFlagContext = createContext<UseFeatureFlagReturn | null>(\r\n null,\r\n);\r\n\r\nexport const useFeatureFlagContext = () => {\r\n const context = useContext(FeatureFlagContext);\r\n invariant(context);\r\n return context;\r\n};\r\n","import { Portal, Presence } from '@ark-ui/react';\r\nimport type { ReactNode } from 'react';\r\nimport { FeatureFlagContext } from './FeatureFlagContext';\r\nimport { useFeatureFlag } from './useFeatureFlag';\r\n\r\ninterface FeatureFlagProviderProps {\r\n children: ReactNode;\r\n}\r\n\r\nexport function FeatureFlagProvider(props: FeatureFlagProviderProps) {\r\n const context = useFeatureFlag();\r\n\r\n return (\r\n <FeatureFlagContext value={context}>\r\n {props.children}\r\n\r\n <Portal>\r\n <Presence\r\n lazyMount\r\n unmountOnExit\r\n present={context.enabled}\r\n className=\"fixed bottom-2 left-1/2 z-toast flex -translate-x-1/2 gap-1 rounded-full bg-black/50 px-1.5 py-0.5 text-2xs leading-tight text-white backdrop-blur-sm ui-open:animate-fade-in ui-closed:animate-fade-out\"\r\n suppressHydrationWarning\r\n >\r\n Experimental features are enabled.{' '}\r\n <button\r\n type=\"button\"\r\n onClick={context.disable}\r\n className=\"underline underline-offset-2\"\r\n >\r\n Disable\r\n </button>\r\n </Presence>\r\n </Portal>\r\n </FeatureFlagContext>\r\n );\r\n}\r\n","import { usePathname, useRouter, useSearchParams } from 'next/navigation';\r\nimport { useEffect } from 'react';\r\nimport { useLocalStorage } from 'usehooks-ts';\r\n\r\nexport interface UseFeatureFlagReturn {\r\n enabled: boolean;\r\n disable: () => void;\r\n}\r\n\r\nexport function useFeatureFlag() {\r\n const [enabled, setEnabled] = useLocalStorage(\r\n 'WebPortalFeatureFlagEnabled',\r\n false,\r\n );\r\n\r\n const router = useRouter();\r\n const pathname = usePathname();\r\n const searchParams = useSearchParams();\r\n\r\n const disable = async () => {\r\n router.push(pathname);\r\n setTimeout(() => {\r\n setEnabled(false);\r\n }, 250);\r\n };\r\n\r\n useEffect(() => {\r\n if (enabled) return;\r\n if (!searchParams.has('future')) return;\r\n setEnabled(true);\r\n }, [enabled, searchParams, setEnabled]);\r\n\r\n return {\r\n enabled,\r\n disable,\r\n };\r\n}\r\n","'use client';\r\n\r\nimport { Dialog, Portal, Presence } from '@ark-ui/react';\r\nimport type { ImageProps } from 'next/image';\r\nimport Image from 'next/image';\r\nimport { useRef } from 'react';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useDisclosure } from '../../hooks/useDisclosure';\r\nimport { useEndGameSessionMutation } from '../../hooks/useEndGameSessionMutation/useEndGameSessionMutation';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { AlertCircleIcon } from '../../icons/AlertCircleIcon';\r\nimport { ChevronLeftIcon } from '../../icons/ChevronLeftIcon';\r\nimport { Expand03Icon } from '../../icons/Expand03Icon';\r\nimport { SpinnerIcon } from '../../icons/SpinnerIcon';\r\nimport { Wallet02Icon } from '../../icons/Wallet02Icon';\r\nimport { XIcon } from '../../icons/XIcon';\r\nimport { AlertDialog, Button, IconButton } from '../../ui';\r\n\r\nexport interface GameLaunchProps {\r\n logo: ImageProps['src'];\r\n}\r\n\r\nexport function GameLaunch(props: GameLaunchProps) {\r\n const ref = useRef<HTMLDivElement>(null);\r\n\r\n const maximizeDisclosure = useDisclosure({\r\n defaultOpen: true,\r\n onOpenChange(open) {\r\n if (!open) {\r\n setTimeout(() => {\r\n ref.current?.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'start',\r\n inline: 'start',\r\n });\r\n }, 25);\r\n }\r\n },\r\n });\r\n\r\n const cancelDisclosure = useDisclosure();\r\n const endGameSessionMutation = useEndGameSessionMutation();\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n gameLaunch: ctx.gameLaunch,\r\n depositWithdrawal: ctx.depositWithdrawal,\r\n })),\r\n );\r\n\r\n async function endGameSession() {\r\n if (globalStore.gameLaunch.details.status === 'PLAYING') {\r\n await endGameSessionMutation.mutateAsync({\r\n game: globalStore.gameLaunch.details.game,\r\n session: globalStore.gameLaunch.details.session,\r\n });\r\n }\r\n\r\n maximizeDisclosure.setOpen(true);\r\n\r\n globalStore.gameLaunch.setDetails({\r\n status: 'WAITING',\r\n session: null,\r\n game: null,\r\n });\r\n }\r\n\r\n return (\r\n <>\r\n <Presence\r\n ref={ref}\r\n present={\r\n globalStore.gameLaunch.details.status !== 'WAITING' &&\r\n !maximizeDisclosure.open\r\n }\r\n lazyMount\r\n unmountOnExit={globalStore.gameLaunch.details.status === 'WAITING'}\r\n className=\"border-gray-200 w-full overflow-hidden rounded-lg border ui-open:animate-fade-in ui-closed:animate-fade-out\"\r\n >\r\n <section className=\"aspect-[960/540] w-full\">\r\n {globalStore.gameLaunch.details.status === 'LOADING' && (\r\n <div className=\"flex size-full items-center justify-center\">\r\n <SpinnerIcon className=\"size-8\" />\r\n </div>\r\n )}\r\n\r\n {globalStore.gameLaunch.details.status === 'FAILED' && (\r\n <div>{/* TODO */}</div>\r\n )}\r\n\r\n {globalStore.gameLaunch.details.status === 'PLAYING' && (\r\n <iframe\r\n src={globalStore.gameLaunch.details.session?.launchUrl ?? ''}\r\n className=\"size-full\"\r\n />\r\n )}\r\n </section>\r\n <section className=\"border-gray-200 flex justify-end gap-lg border-t p-2\">\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => {\r\n if (globalStore.gameLaunch.details.status !== 'PLAYING') {\r\n endGameSession();\r\n return;\r\n }\r\n\r\n cancelDisclosure.setOpen(true);\r\n }}\r\n disabled={globalStore.gameLaunch.details.status === 'LOADING'}\r\n aria-label=\"Quit Game\"\r\n title=\"Quit\"\r\n >\r\n <XIcon className=\"size-5\" />\r\n </IconButton>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => maximizeDisclosure.setOpen(true)}\r\n title=\"Maximize\"\r\n aria-label=\"Maximize\"\r\n >\r\n <Expand03Icon className=\"size-5\" />\r\n </IconButton>\r\n </section>\r\n </Presence>\r\n\r\n <Dialog.Root\r\n open={\r\n globalStore.gameLaunch.details.status !== 'WAITING' &&\r\n maximizeDisclosure.open &&\r\n !cancelDisclosure.open\r\n }\r\n lazyMount\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n >\r\n <Portal>\r\n <Dialog.Positioner className=\"z-dialog fixed inset-0\">\r\n <Dialog.Content className=\"ui-open:animate-dialog-in ui-closed:animate-dialog-out flex size-full flex-col bg-white\">\r\n <section className=\"grid grid-cols-[22rem_auto_22rem] items-center px-4 py-2\">\r\n <div className=\"flex items-center justify-start gap-2\">\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => {\r\n if (globalStore.gameLaunch.details.status !== 'PLAYING') {\r\n endGameSession();\r\n return;\r\n }\r\n\r\n cancelDisclosure.setOpen(true);\r\n }}\r\n disabled={\r\n globalStore.gameLaunch.details.status === 'LOADING'\r\n }\r\n title=\"Quit\"\r\n aria-label=\"Quit Game\"\r\n >\r\n <ChevronLeftIcon className=\"size-5\" />\r\n </IconButton>\r\n </div>\r\n <div className=\"flex items-center justify-center\">\r\n {!!props.logo && (\r\n <Image\r\n src={props.logo}\r\n height={40}\r\n width={80}\r\n alt=\"\"\r\n className=\"h-9 w-auto shrink-0\"\r\n />\r\n )}\r\n </div>\r\n <div className=\"flex justify-end gap-2\">\r\n <Button\r\n size=\"sm\"\r\n fullWidth={false}\r\n onClick={() => {\r\n globalStore.depositWithdrawal.setOpen(true);\r\n }}\r\n >\r\n <Wallet02Icon className=\"size-5\" />\r\n Wallet\r\n </Button>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => maximizeDisclosure.setOpen(false)}\r\n title=\"Minimize\"\r\n aria-label=\"Minimize\"\r\n >\r\n <Expand03Icon className=\"size-5\" />\r\n </IconButton>\r\n </div>\r\n </section>\r\n <section className=\"grow\">\r\n {globalStore.gameLaunch.details.status === 'LOADING' && (\r\n <div className=\"flex size-full items-center justify-center\">\r\n <SpinnerIcon className=\"size-8\" />\r\n </div>\r\n )}\r\n\r\n {globalStore.gameLaunch.details.status === 'FAILED' && (\r\n <div>{/* TODO: Error */}</div>\r\n )}\r\n\r\n {globalStore.gameLaunch.details.status === 'PLAYING' && (\r\n <iframe\r\n src={globalStore.gameLaunch.details.session.launchUrl ?? ''}\r\n className=\"size-full\"\r\n />\r\n )}\r\n </section>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n\r\n <AlertDialog.Root\r\n role=\"alertdialog\"\r\n open={cancelDisclosure.open}\r\n onOpenChange={(details) => {\r\n cancelDisclosure.setOpen(details.open);\r\n }}\r\n lazyMount\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n >\r\n <Portal>\r\n <AlertDialog.Backdrop />\r\n <AlertDialog.Positioner>\r\n <AlertDialog.Content>\r\n <AlertDialog.Header>\r\n <div className=\"flex size-12 items-center justify-center rounded-full bg-[#FEE4E2] text-[#D92D20]\">\r\n <AlertCircleIcon />\r\n </div>\r\n <AlertDialog.CloseTrigger>\r\n <XIcon />\r\n </AlertDialog.CloseTrigger>\r\n </AlertDialog.Header>\r\n <AlertDialog.Body>\r\n <AlertDialog.Title>Quit Game</AlertDialog.Title>\r\n <AlertDialog.Description>\r\n Are you sure you want to quit?\r\n </AlertDialog.Description>\r\n </AlertDialog.Body>\r\n <AlertDialog.Context>\r\n {(api) => (\r\n <AlertDialog.Footer>\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n disabled={endGameSessionMutation.isPending}\r\n onClick={() => {\r\n api.setOpen(false);\r\n }}\r\n >\r\n Cancel\r\n </Button>\r\n <Button\r\n colorScheme=\"danger\"\r\n disabled={endGameSessionMutation.isPending}\r\n onClick={async () => {\r\n await endGameSession();\r\n api.setOpen(false);\r\n }}\r\n >\r\n Proceed\r\n </Button>\r\n </AlertDialog.Footer>\r\n )}\r\n </AlertDialog.Context>\r\n </AlertDialog.Content>\r\n </AlertDialog.Positioner>\r\n </Portal>\r\n </AlertDialog.Root>\r\n </>\r\n );\r\n}\r\n","import {\r\n endGameSession,\r\n endGameSession__legacy,\r\n type Game,\r\n type GameSession,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useMutation } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport {\r\n ENVIRONMENT,\r\n LEGACY_GAME_PROVIDERS,\r\n PLATFORM_CODE,\r\n} from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Mutation } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { getEndGameSessionMutationKey } from './getEndGameSessionMutationKey';\r\n\r\nexport const useEndGameSessionMutation: Mutation<\r\n void,\r\n {\r\n game: Game;\r\n session: GameSession;\r\n }\r\n> = (config) => {\r\n const queryClient = getQueryClient();\r\n\r\n return useMutation({\r\n ...config,\r\n mutationKey: getEndGameSessionMutationKey(),\r\n mutationFn: async (input) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n if (LEGACY_GAME_PROVIDERS.includes(input.game.provider)) {\r\n await endGameSession__legacy(input.session.id, {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n } else {\r\n await endGameSession(input.session.id, {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n }\r\n },\r\n });\r\n};\r\n","import type { MutationKey } from '@tanstack/react-query';\r\n\r\nexport const getEndGameSessionMutationKey = (): MutationKey => [\r\n 'mutations/endGameSession',\r\n];\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function Expand03Icon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M21 14V16.2C21 17.8802 21 18.7202 20.673 19.362C20.3854 19.9265 19.9265 20.3854 19.362 20.673C18.7202 21 17.8802 21 16.2 21H14M10 3H7.8C6.11984 3 5.27976 3 4.63803 3.32698C4.07354 3.6146 3.6146 4.07354 3.32698 4.63803C3 5.27976 3 6.11984 3 7.8V10M15 9L21 3M21 3H15M21 3V9M9 15L3 21M3 21H9M3 21L3 15\" />\r\n </svg>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport { ark, type HTMLArkProps } from '@ark-ui/react';\r\nimport type { Game } from '@opexa/portal-sdk-core';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useCreateGameSessionMutation } from '../../hooks/useCreateGameSessionMutation/useCreateGameSessionMutation';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { useSessionQuery } from '../../hooks/useSessionQuery/useSessionQuery';\r\nimport { dataAttr } from '../../utils/dataAttr';\r\nimport { toaster } from '../../utils/toaster';\r\n\r\nexport interface GameLaunchTriggerProps extends HTMLArkProps<'button'> {\r\n game: Game;\r\n}\r\n\r\nexport function GameLaunchTrigger(props: GameLaunchTriggerProps) {\r\n const sessionQuery = useSessionQuery();\r\n const createGameSessionMutation = useCreateGameSessionMutation();\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n signIn: ctx.signIn,\r\n gameLaunch: ctx.gameLaunch,\r\n })),\r\n );\r\n\r\n const disabled =\r\n sessionQuery.data?.status === 'unauthenticated'\r\n ? false\r\n : globalStore.gameLaunch.details.status !== 'WAITING'\r\n ? true\r\n : props.disabled;\r\n\r\n return (\r\n <ark.button\r\n type=\"button\"\r\n {...props}\r\n onClick={async (e) => {\r\n props.onClick?.(e);\r\n\r\n if (sessionQuery.data?.status === 'unauthenticated') {\r\n return globalStore.signIn.setOpen(true);\r\n }\r\n\r\n globalStore.gameLaunch.setDetails({\r\n game: props.game,\r\n status: 'LOADING',\r\n session: null,\r\n });\r\n\r\n try {\r\n const session = await createGameSessionMutation.mutateAsync(\r\n props.game,\r\n );\r\n\r\n globalStore.gameLaunch.setDetails({\r\n game: props.game,\r\n session,\r\n status: 'PLAYING',\r\n });\r\n } catch (error) {\r\n globalStore.gameLaunch.setDetails({\r\n game: props.game,\r\n session: null,\r\n status: 'FAILED',\r\n });\r\n\r\n toaster.error({\r\n description:\r\n error instanceof Error ? error.message : 'Failed to launch game',\r\n });\r\n }\r\n }}\r\n disabled={disabled}\r\n data-disabled={dataAttr(disabled)}\r\n data-state={\r\n sessionQuery.data?.status === 'unauthenticated'\r\n ? globalStore.signIn.open\r\n ? 'open'\r\n : 'closed'\r\n : globalStore.gameLaunch.details.status === 'WAITING'\r\n ? 'closed'\r\n : 'open'\r\n }\r\n />\r\n );\r\n}\r\n","import {\r\n createGameSession,\r\n createGameSession__legacy,\r\n getGameSession,\r\n getGameSession__legacy,\r\n type Game,\r\n type GameSession,\r\n} from '@opexa/portal-sdk-core';\r\nimport { ObjectId, ObjectType } from '@opexa/portal-sdk-core/object-id';\r\nimport { useMutation } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport {\r\n ENVIRONMENT,\r\n LEGACY_GAME_PROVIDERS,\r\n PLATFORM_CODE,\r\n} from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Mutation } from '../../types';\r\nimport { createPoll } from '../../utils/createPoll';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { getCreateGameSessionMutationKey } from './getCreateGameSessionMutationKey';\r\n\r\nexport const useCreateGameSessionMutation: Mutation<GameSession, Game> = (\r\n config,\r\n) => {\r\n const queryClient = getQueryClient();\r\n\r\n return useMutation({\r\n ...config,\r\n mutationKey: getCreateGameSessionMutationKey(),\r\n mutationFn: async (game) => {\r\n const id = ObjectId.generate(ObjectType.GameSession).toString();\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n if (LEGACY_GAME_PROVIDERS.includes(game.provider)) {\r\n await createGameSession__legacy(\r\n {\r\n id,\r\n game: game.reference,\r\n },\r\n {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n },\r\n );\r\n\r\n const data = await createPoll(\r\n async () => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getGameSession__legacy(id, {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n {\r\n until: (r) => !!r?.launchUrl,\r\n interval: 1000,\r\n maxAttempt: 5,\r\n },\r\n )();\r\n\r\n if (!data?.launchUrl) {\r\n const error = new Error();\r\n error.name = 'GameSessionError';\r\n error.message = 'Failed to launch game';\r\n throw error;\r\n }\r\n\r\n return data;\r\n } else {\r\n await createGameSession(\r\n {\r\n id,\r\n game: game.reference,\r\n },\r\n {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n },\r\n );\r\n\r\n const data = await createPoll(\r\n async () => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getGameSession(id, {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n {\r\n until: (r) => !!r?.launchUrl,\r\n interval: 1000,\r\n maxAttempt: 5,\r\n },\r\n )();\r\n\r\n if (!data?.launchUrl) {\r\n const error = new Error();\r\n error.name = 'GameSessionError';\r\n error.message = 'Failed to launch game';\r\n throw error;\r\n }\r\n\r\n return data;\r\n }\r\n },\r\n });\r\n};\r\n","import type { MutationKey } from '@tanstack/react-query';\r\n\r\nexport const getCreateGameSessionMutationKey = (): MutationKey => [\r\n 'mutations/createGameSession',\r\n];\r\n","import { type GamesInput, getGames } from '@opexa/portal-sdk-core';\r\nimport { ENVIRONMENT, PLATFORM_ID, SITE_ID } from '../../constants';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getGamesQueryKey } from './getGamesQueryKey';\r\n\r\nexport const prefetchGamesQuery = async (input?: GamesInput) => {\r\n await getQueryClient().prefetchInfiniteQuery({\r\n queryKey: getGamesQueryKey(input),\r\n queryFn: async ({ pageParam, signal }) => {\r\n return await getGames(\r\n {\r\n ...input,\r\n after: pageParam,\r\n },\r\n {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Site-ID': SITE_ID,\r\n 'Platform-ID': PLATFORM_ID,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n });\r\n};\r\n","import type { GamesInput } from '@opexa/portal-sdk-core';\nimport type { QueryKey } from '@tanstack/react-query';\n\nexport const getGamesQueryKey = (input?: GamesInput): QueryKey => ['queries/games', input];\n","'use client';\r\n\r\nimport useEmblaCarousel, {\r\n type UseEmblaCarouselType,\r\n} from 'embla-carousel-react';\r\nimport Image from 'next/image';\r\nimport Link from 'next/link';\r\nimport { useCallback, useEffect, useState } from 'react';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { useGamesQuery } from '../../hooks/useGamesQuery/useGamesQuery';\r\nimport { ArrowLeftIcon } from '../../icons/ArrowLeftIcon';\r\nimport { ArrowRightIcon } from '../../icons/ArrowRightIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { SpinnerIcon } from '../../icons/SpinnerIcon';\r\nimport { Button } from '../../ui';\r\nimport { GameLaunchTrigger } from '../GameLaunch';\r\nimport type { GamesProps } from './Games';\r\n\r\nexport function GamesContent(props: GamesProps) {\r\n const numOfRows = props.numOfRows ?? 1;\r\n\r\n const gamesQuery = useGamesQuery({\r\n first: (numOfRows + 1) * 6,\r\n filter: props.filter,\r\n });\r\n\r\n const games =\r\n gamesQuery.data?.pages\r\n .map((page) => page.edges.map((edge) => edge.node))\r\n .flat() ?? [];\r\n\r\n const [emblaRef, emblaApi] = useEmblaCarousel({\r\n align: 'start',\r\n slidesToScroll: 3,\r\n breakpoints: {\r\n '(min-width: 1024px)': {\r\n slidesToScroll: 6,\r\n },\r\n },\r\n });\r\n\r\n const [prevBtnDisabled, setPrevBtnDisabled] = useState(true);\r\n const [nextBtnDisabled, setNextBtnDisabled] = useState(true);\r\n\r\n const onPrevButtonClick = useCallback(\r\n () => emblaApi?.scrollPrev(),\r\n [emblaApi],\r\n );\r\n const onNextButtonClick = useCallback(async () => {\r\n if (!emblaApi?.canScrollNext() && gamesQuery.hasNextPage) {\r\n await gamesQuery.fetchNextPage();\r\n emblaApi?.reInit();\r\n await new Promise((resolve) => setTimeout(resolve, 1));\r\n }\r\n\r\n emblaApi?.scrollNext();\r\n }, [emblaApi, gamesQuery]);\r\n\r\n const onSelect = useCallback((emblaApi: UseEmblaCarouselType[1]) => {\r\n setPrevBtnDisabled(!emblaApi?.canScrollPrev());\r\n setNextBtnDisabled(!emblaApi?.canScrollNext());\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!emblaApi) return;\r\n onSelect(emblaApi);\r\n emblaApi.on('reInit', onSelect).on('select', onSelect);\r\n }, [emblaApi, onSelect]);\r\n\r\n return (\r\n <div className={props.className}>\r\n <div className=\"flex items-center\">\r\n <h2 className=\"text-lg font-semibold\">{props.heading}</h2>\r\n <div className=\"grow\" />\r\n <div className=\"flex items-center justify-center gap-xl\">\r\n <Link\r\n href={props.seeAllUrl}\r\n className=\"flex gap-sm text-sm font-semibold\"\r\n >\r\n See All\r\n <ChevronRightIcon className=\"size-5 lg:hidden\" />\r\n </Link>\r\n <div className=\"hidden lg:flex\">\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n onClick={onPrevButtonClick}\r\n disabled={prevBtnDisabled}\r\n aria-label=\"Previous\"\r\n >\r\n <ArrowLeftIcon className=\"size-5\" />\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n onClick={onNextButtonClick}\r\n disabled={\r\n nextBtnDisabled && !gamesQuery.hasNextPage\r\n ? true\r\n : gamesQuery.isFetchingNextPage\r\n }\r\n aria-label=\"Next\"\r\n >\r\n {gamesQuery.isFetchingNextPage ? (\r\n <SpinnerIcon className=\"size-5\" />\r\n ) : (\r\n <ArrowRightIcon className=\"size-5\" />\r\n )}\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div ref={emblaRef} className=\"relative mt-lg lg:overflow-hidden\">\r\n <div\r\n className={twMerge(\r\n 'grid auto-cols-[calc((100%-(0.375rem*2))/3)] grid-flow-col gap-sm lg:auto-cols-[calc((100%-(0.5rem*5))/6)] lg:gap-md',\r\n numOfRows === 3\r\n ? 'grid-rows-3'\r\n : numOfRows === 2\r\n ? 'grid-rows-2'\r\n : 'grid-rows-1',\r\n )}\r\n >\r\n {games.map((game) => (\r\n <GameLaunchTrigger\r\n key={game.id}\r\n game={game}\r\n className=\"block w-full\"\r\n >\r\n <Image\r\n src={game.image}\r\n alt=\"\"\r\n width={200}\r\n height={200}\r\n priority\r\n className=\"aspect-square w-full rounded-t-md object-cover\"\r\n />\r\n\r\n <span className=\"bg-gray-50 block w-full truncate rounded-b-md px-2 py-2.5 text-center text-xs font-semibold\">\r\n {game.name}\r\n </span>\r\n </GameLaunchTrigger>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import {\r\n type Game,\r\n type GamesInput,\r\n type PaginatedQueryResult,\r\n getGames,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useInfiniteQuery } from '@tanstack/react-query';\r\nimport { ENVIRONMENT, PLATFORM_ID, SITE_ID } from '../../constants';\r\nimport type { InfiniteQuery } from '../../types';\r\nimport { getGamesQueryKey } from './getGamesQueryKey';\r\n\r\nexport const useGamesQuery: InfiniteQuery<\r\n PaginatedQueryResult<Game>,\r\n GamesInput\r\n> = (input, config) => {\r\n return useInfiniteQuery({\r\n refetchOnMount: false,\r\n refetchOnReconnect: false,\r\n refetchOnWindowFocus: false,\r\n ...config,\r\n queryKey: getGamesQueryKey(input),\r\n queryFn: ({ pageParam, signal }) => {\r\n return getGames(\r\n {\r\n ...input,\r\n after: pageParam,\r\n },\r\n {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Site-ID': SITE_ID,\r\n 'Platform-ID': PLATFORM_ID,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n getNextPageParam(lastPage) {\r\n if (lastPage?.pageInfo?.hasNextPage) {\r\n return lastPage?.pageInfo?.endCursor;\r\n }\r\n },\r\n });\r\n};\r\n","import type { ComponentPropsWithRef } from 'react';\n\nexport function ArrowLeftIcon(props: ComponentPropsWithRef<'svg'>) {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M19 12H5M5 12L12 19M5 12L12 5\" />\n </svg>\n );\n}\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function ArrowRightIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M5 12H19M19 12L12 5M19 12L12 19\" />\r\n </svg>\r\n );\r\n}\r\n","import type { GamesInput } from '@opexa/portal-sdk-core';\r\nimport { prefetchGamesQuery } from '../../hooks/useGamesQuery/prefetchGamesQuery';\r\nimport { GamesContent } from './GamesContent';\r\n\r\nexport interface GamesProps {\r\n heading: string;\r\n seeAllUrl: string;\r\n /** @default 1 */\r\n numOfRows?: 1 | 2 | 3;\r\n className?: string;\r\n filter?: GamesInput['filter'];\r\n}\r\n\r\nexport async function Games(props: GamesProps) {\r\n const numOfRows = props.numOfRows ?? 1;\r\n\r\n await prefetchGamesQuery({\r\n first: (numOfRows + 1) * 6,\r\n filter: props.filter,\r\n });\r\n\r\n return <GamesContent {...props} />;\r\n}\r\n","'use client';\r\n\r\nimport useEmblaCarousel from 'embla-carousel-react';\r\nimport Link from 'next/link';\r\nimport { useCallback, useEffect, useState } from 'react';\r\nimport { useJackpotsQuery } from '../../hooks/useJackpotsQuery/useJackpotsQuery';\r\nimport { ArrowLeftIcon } from '../../icons/ArrowLeftIcon';\r\nimport { ArrowRightIcon } from '../../icons/ArrowRightIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { Button } from '../../ui';\r\nimport type { JackpotCounterProps } from './JackpotCounter';\r\nimport { JackpotCounterItem } from './JackpotCounterItem';\r\n\r\nexport function JackpotCounterContent(props: JackpotCounterProps) {\r\n const [emblaRef, emblaApi] = useEmblaCarousel({\r\n align: 'start',\r\n slidesToScroll: 1,\r\n });\r\n\r\n const scrollPrev = useCallback(() => {\r\n if (emblaApi) emblaApi.scrollPrev();\r\n }, [emblaApi]);\r\n\r\n const scrollNext = useCallback(() => {\r\n if (emblaApi) emblaApi.scrollNext();\r\n }, [emblaApi]);\r\n\r\n const [canScrollPrev, setCanScrollPrev] = useState(false);\r\n const [canScrollNext, setCanScrollNext] = useState(false);\r\n\r\n const onSelect = useCallback(() => {\r\n if (!emblaApi) return;\r\n setCanScrollPrev(emblaApi.canScrollPrev());\r\n setCanScrollNext(emblaApi.canScrollNext());\r\n }, [emblaApi]);\r\n\r\n useEffect(() => {\r\n if (!emblaApi) return;\r\n onSelect();\r\n emblaApi.on('select', onSelect);\r\n emblaApi.on('reInit', onSelect);\r\n }, [emblaApi, onSelect]);\r\n\r\n const jackpotsQuery = useJackpotsQuery({\r\n first: 100,\r\n filter: {\r\n status: {\r\n equal: 'ACTIVE',\r\n },\r\n deleted: {\r\n equal: false,\r\n },\r\n },\r\n sort: {\r\n cursor: 'POOL',\r\n order: 'DESC',\r\n },\r\n });\r\n\r\n const jackpots =\r\n jackpotsQuery.data?.pages[0].edges.map((edge) => edge.node) ?? [];\r\n\r\n if (jackpots.length <= 0) return null;\r\n\r\n return (\r\n <div className={props.className}>\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"text-lg font-semibold\">{props.heading}</div>\r\n <div className=\"flex items-center md:gap-3xl\">\r\n <Link\r\n href={props.seeAllUrl}\r\n className=\"flex gap-sm text-sm font-semibold\"\r\n >\r\n See All\r\n <ChevronRightIcon className=\"size-5 lg:hidden\" />\r\n </Link>\r\n\r\n <div className=\"hidden lg:flex\">\r\n <Button\r\n disabled={!canScrollPrev}\r\n onClick={scrollPrev}\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n aria-label=\"Previous\"\r\n >\r\n <ArrowLeftIcon className=\"size-5\" />\r\n </Button>\r\n <Button\r\n disabled={!canScrollNext}\r\n onClick={scrollNext}\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n aria-label=\"Next\"\r\n >\r\n <span className=\"sr-only\">Next</span>\r\n <ArrowRightIcon className=\"size-5\" />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"relative mt-lg lg:overflow-hidden\" ref={emblaRef}>\r\n <div className=\"flex gap-2.5\">\r\n {jackpots.map((jackpot) => (\r\n <JackpotCounterItem\r\n key={jackpot.id}\r\n jackpot={jackpot}\r\n className={\r\n jackpots.length < 2\r\n ? 'w-full'\r\n : 'w-full lg:w-[calc((100%-0.75rem)/2)]'\r\n }\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import {\r\n getJackpots,\r\n type Jackpot,\r\n type JackpotsInput,\r\n type PaginatedQueryResult,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useInfiniteQuery } from '@tanstack/react-query';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport type { InfiniteQuery } from '../../types';\r\nimport { getJackpotsQueryKey } from './getJackpotsQueryKey';\r\n\r\nexport const useJackpotsQuery: InfiniteQuery<\r\n PaginatedQueryResult<Jackpot>,\r\n JackpotsInput\r\n> = (input, config) => {\r\n const query = useInfiniteQuery({\r\n ...config,\r\n queryKey: getJackpotsQueryKey(input),\r\n queryFn: ({ pageParam, signal }) => {\r\n return getJackpots(\r\n { ...input, after: pageParam },\r\n {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n getNextPageParam(lastPage) {\r\n if (lastPage?.pageInfo.hasNextPage) {\r\n return lastPage.pageInfo.endCursor;\r\n }\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { JackpotsInput } from '@opexa/portal-sdk-core';\nimport type { QueryKey } from '@tanstack/react-query';\n\nexport const getJackpotsQueryKey = (input?: JackpotsInput): QueryKey => ['queries/jackpots', input];\n","'use client';\r\n\r\nimport { Progress } from '@ark-ui/react';\r\nimport type { Jackpot } from '@opexa/portal-sdk-core';\r\nimport Image from 'next/image';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { ArrowNarrowUpRightIcon } from '../../icons/ArrowNarrowUpRightIcon';\r\nimport { ChevronLeftIcon } from '../../icons/ChevronLeftIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport closeChest from '../../images/close-chest.png';\r\nimport openChest from '../../images/open-chest.png';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\nimport styles from './JackpotCounter.module.css';\r\n\r\nexport interface JackpotCounterCardProps {\r\n jackpot: Jackpot;\r\n className?: string;\r\n}\r\n\r\nexport function JackpotCounterItem({\r\n jackpot,\r\n className,\r\n}: JackpotCounterCardProps) {\r\n const localeInfo = useLocaleInfo();\r\n\r\n const isPayingOut = jackpot.drawing;\r\n const jackpotAmount = isPayingOut\r\n ? jackpot.maximumJackpotPoolLimit\r\n : jackpot.pool;\r\n\r\n return (\r\n <div\r\n className={twMerge(\r\n 'bg-gray-50 border-gray-200 flex shrink-0 flex-col space-y-2 rounded-sm border p-3 text-center',\r\n className,\r\n )}\r\n >\r\n <div className=\"flex w-full justify-between\">\r\n <div className=\"flex flex-col gap-1\">\r\n {isPayingOut ? (\r\n <div className=\"border-gray-700 bg-gray-300 flex w-fit items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium\">\r\n <span className=\"full bg-gray-900 size-1.5 animate-pulse rounded\" />\r\n Paying Out\r\n </div>\r\n ) : (\r\n <div className=\"border-gray-700 bg-gray-300 flex w-fit items-center rounded-full border px-2 py-0.5 text-xs font-medium\">\r\n <ArrowNarrowUpRightIcon className=\"size-3.5\" />\r\n Accumulating\r\n </div>\r\n )}\r\n\r\n <div className=\"text-left text-lg font-medium\">{jackpot.name}</div>\r\n <div className=\"bg-gray-950 text-gray-300 w-fit rounded-md px-2 py-1 text-2xl font-bold\">\r\n {formatNumber(jackpotAmount, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n maxDecimalPlaces: 2,\r\n })}\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <Image\r\n width={100}\r\n height={100}\r\n src={isPayingOut ? openChest : closeChest}\r\n alt=\"closeChest\"\r\n quality={100}\r\n className=\"h-25 w-25 size-full\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex justify-between\">\r\n <div className=\"text-xs font-medium\">\r\n {formatNumber(0, {\r\n currency: localeInfo.currency.code,\r\n compact: true,\r\n })}\r\n </div>\r\n\r\n <div className=\"relative flex items-center justify-end gap-1.5\">\r\n {isPayingOut ? (\r\n <div className=\"flex w-6 items-center\">\r\n <div\r\n className={twMerge(\r\n 'absolute left-0',\r\n styles['animate-arrow-red-flash-1'],\r\n )}\r\n >\r\n <ChevronLeftIcon className=\"size-4.5\" />\r\n </div>\r\n <div\r\n className={twMerge(\r\n 'absolute left-1.5',\r\n styles['animate-arrow-red-flash-2'],\r\n )}\r\n >\r\n <ChevronLeftIcon className=\"size-4.5\" />\r\n </div>\r\n <div\r\n className={twMerge(\r\n 'absolute left-3',\r\n styles['animate-arrow-red-flash-3'],\r\n )}\r\n >\r\n <ChevronLeftIcon className=\"size-4.5\" />\r\n </div>\r\n </div>\r\n ) : (\r\n <div className=\"flex w-6 items-center\">\r\n <div\r\n className={twMerge(\r\n 'absolute left-0',\r\n styles['animate-arrow-green-flash-1'],\r\n )}\r\n >\r\n <ChevronRightIcon className=\"size-4.5\" />\r\n </div>\r\n <div\r\n className={twMerge(\r\n 'absolute left-1.5',\r\n styles['animate-arrow-green-flash-2'],\r\n )}\r\n >\r\n <ChevronRightIcon className=\"size-4.5\" />\r\n </div>\r\n <div\r\n className={twMerge(\r\n 'absolute left-3',\r\n styles['animate-arrow-green-flash-3'],\r\n )}\r\n >\r\n <ChevronRightIcon className=\"size-4.5\" />\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div className=\"text-xs font-medium\">\r\n {formatNumber(jackpot?.maximumJackpotPoolLimit, {\r\n currency: localeInfo.currency.code,\r\n compact: true,\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <Progress.Root\r\n className=\"bg-gray-200 h-2 w-full rounded-full\"\r\n max={100}\r\n value={33}\r\n >\r\n <Progress.Track className=\"bg-gray-950 h-full rounded-full\">\r\n <Progress.Range className=\"bg-gray-300 h-full rounded-full\" />\r\n </Progress.Track>\r\n </Progress.Root>\r\n\r\n <div className=\"mt-1 text-start text-[10px]\">\r\n {isPayingOut\r\n ? `The pot has hit ${formatNumber(jackpot?.maximumJackpotPoolLimit, {\r\n currency: localeInfo.currency.code,\r\n compact: true,\r\n })} Play now for your chance to win big! 🔥`\r\n : getAccumulatingJackpotDescription(\r\n Number(jackpot?.pool) ?? 0,\r\n Number(jackpot?.maximumJackpotPoolLimit) ?? 0,\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nconst getAccumulatingJackpotDescription = (\r\n part: number,\r\n total: number,\r\n): string => {\r\n const percentage = total === 0 ? 0 : (part / total) * 100;\r\n\r\n return percentage <= 90\r\n ? 'The jackpot is heating up! Keep playing to stay in the action and watch it grow!'\r\n : '🔥 It’s about to pop! Stay in the game for your shot at the prize!';\r\n};\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function ArrowNarrowUpRightIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M6 18L18 6M18 6H10M18 6V14\" />\r\n </svg>\r\n );\r\n}\r\n","import { JackpotCounterContent } from './JackpotCounterContent';\r\n\r\nexport interface JackpotCounterProps {\r\n heading: string;\r\n seeAllUrl: string;\r\n className?: string;\r\n}\r\n\r\nexport async function JackpotCounter(props: JackpotCounterProps) {\r\n /*\r\n await prefetchJackpotsQuery({\r\n first: 100,\r\n filter: {\r\n status: {\r\n equal: 'ACTIVE',\r\n },\r\n deleted: {\r\n equal: false,\r\n },\r\n },\r\n sort: {\r\n cursor: 'POOL',\r\n order: 'DESC',\r\n },\r\n });\r\n */\r\n\r\n return <JackpotCounterContent {...props} />;\r\n}\r\n","import Primitive from 'react-fast-marquee';\r\nimport { twMerge } from 'tailwind-merge';\r\n\r\nexport interface MarqueeProps {\r\n children?: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function Marquee(props: MarqueeProps) {\r\n return (\r\n <div\r\n className={twMerge(\r\n 'border-gray-200 text-gray-700 flex gap-lg rounded-lg border p-1 pr-2.5 text-sm font-medium',\r\n props.className,\r\n )}\r\n >\r\n <div className=\"border-gray-200 flex shrink-0 items-center gap-sm rounded-sm border px-2 py-0.5\">\r\n <span className=\"bg-green-400 outline-green-400/20 size-2 rounded-full outline-4\" />\r\n <span>What&apos;s new</span>\r\n </div>\r\n <Primitive className=\"grow\">\r\n {props.children}\r\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n </Primitive>\r\n </div>\r\n );\r\n}\r\n","import { dehydrate, HydrationBoundary } from '@tanstack/react-query';\r\nimport type { PropsWithChildren } from 'react';\r\nimport { prefetchPlatformQuery } from '../../hooks/usePlatformQuery/prefetchPlatformQuery';\r\nimport { prefetchSessionQuery } from '../../hooks/useSessionQuery/prefetchSessionQuery';\r\nimport { prefetchWalletQuery } from '../../hooks/useWalletQuery/prefetchWalletQuery';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { FeatureFlagProvider } from '../FeatureFlagProvider';\r\nimport { Providers } from './Providers';\r\n\r\nexport async function PortalProvider({ children }: PropsWithChildren) {\r\n const queryClient = getQueryClient();\r\n\r\n await Promise.all([\r\n prefetchSessionQuery(),\r\n prefetchPlatformQuery(),\r\n prefetchWalletQuery(),\r\n ]);\r\n\r\n return (\r\n <Providers>\r\n <HydrationBoundary state={dehydrate(queryClient)}>\r\n <FeatureFlagProvider>{children}</FeatureFlagProvider>\r\n </HydrationBoundary>\r\n </Providers>\r\n );\r\n}\r\n","import { getPlatform } from '@opexa/portal-sdk-core';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getPlatformQueryKey } from './getPlatformQueryKey';\r\n\r\nexport async function prefetchPlatformQuery() {\r\n await getQueryClient().prefetchQuery({\r\n queryKey: getPlatformQueryKey(),\r\n queryFn: async ({ signal }) => {\r\n return await getPlatform({\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n });\r\n },\r\n });\r\n}\r\n","import { cookies } from 'next/headers';\nimport { ACCESS_TOKEN_COOKIE_NAME } from '../../constants';\nimport type { Session } from '../../types';\n\nexport async function getSession(): Promise<Session> {\n const Cookies = await cookies();\n const accessToken = Cookies.get(ACCESS_TOKEN_COOKIE_NAME)?.value;\n\n return accessToken\n ? { status: 'authenticated', token: accessToken }\n : { status: 'unauthenticated' };\n}\n","import { getSession } from '../../services/server/getSession';\nimport { getQueryClient } from '../../utils/getQueryClient';\nimport { getSessionQueryKey } from './getSessionQueryKey';\n\nexport function prefetchSessionQuery() {\n return getQueryClient().prefetchQuery({\n queryKey: getSessionQueryKey(),\n queryFn: async () => {\n return await getSession();\n },\n });\n}\n","import { getWallet } from '@opexa/portal-sdk-core';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/server/getSession';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getWalletQueryKey } from './getWalletQueryKey';\r\n\r\nexport const prefetchWalletQuery = async () => {\r\n const session = await getSession();\r\n\r\n if (session.status === 'unauthenticated') return;\r\n\r\n await getQueryClient().prefetchQuery({\r\n queryKey: getWalletQueryKey(),\r\n queryFn: async ({ signal }) => {\r\n return await getWallet({\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n });\r\n};\r\n","'use client';\r\n\r\nimport { Toast, Toaster } from '@ark-ui/react';\r\nimport { QueryClientProvider } from '@tanstack/react-query';\r\n\r\nimport type { PropsWithChildren } from 'react';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { AlertCircleIcon } from '../../icons/AlertCircleIcon';\r\nimport { XIcon } from '../../icons/XIcon';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { toaster } from '../../utils/toaster';\r\n\r\nexport function Providers({ children }: PropsWithChildren) {\r\n const queryClient = getQueryClient();\r\n\r\n return (\r\n <QueryClientProvider client={queryClient}>\r\n {children}\r\n\r\n <Toaster toaster={toaster}>\r\n {(toast) => (\r\n <Toast.Root\r\n key={toast.id}\r\n className=\"shadow-xs border-gray-300 group z-[var(--z-index)] flex h-[var(--height)] w-[860px] max-w-full scale-[var(--scale)] items-center gap-lg rounded-xl border bg-white p-xl opacity-[var(--opacity)] transition-all duration-300 [translate:var(--x)_var(--y)_0]\"\r\n >\r\n <div\r\n className={twMerge(\r\n 'flex size-9.5 items-center justify-center rounded-full border-2',\r\n toast.type === 'error'\r\n ? 'border-red-500/15'\r\n : 'border-green-500/15',\r\n )}\r\n >\r\n <div\r\n className={twMerge(\r\n 'flex size-7 items-center justify-center rounded-full border-2',\r\n toast.type === 'error'\r\n ? 'border-red-500/35'\r\n : 'border-green-500/35',\r\n )}\r\n >\r\n <AlertCircleIcon\r\n className={twMerge(\r\n 'size-5',\r\n toast.type === 'error' ? 'text-red-500' : 'text-green-500',\r\n )}\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"grow text-sm leading-none\">\r\n <Toast.Title className=\"font-semibold\">\r\n {toast.title\r\n ? toast.title\r\n : toast.type === 'error'\r\n ? 'Error'\r\n : 'Success'}\r\n </Toast.Title>\r\n <Toast.Description className=\"text-gray-700 mt-1\">\r\n {toast.description\r\n ? toast.description\r\n : toast.type === 'error'\r\n ? 'Something went wrong.'\r\n : 'Operation completed successfully.'}\r\n </Toast.Description>\r\n </div>\r\n <Toast.CloseTrigger className=\"text-gray-400 hover:text-gray-500 self-start\">\r\n <XIcon className=\"size-5\" />\r\n </Toast.CloseTrigger>\r\n </Toast.Root>\r\n )}\r\n </Toaster>\r\n </QueryClientProvider>\r\n );\r\n}\r\n","import { getPromos } from '@opexa/portal-sdk-core';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getPromosQueryKey } from './getPromosQueryKey';\r\n\r\nexport const prefetchPromosQuery = async () => {\r\n await getQueryClient().prefetchQuery({\r\n queryKey: getPromosQueryKey(),\r\n queryFn: async ({ signal }) => {\r\n return await getPromos({\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n });\r\n },\r\n });\r\n};\r\n","import type { QueryKey } from '@tanstack/react-query';\n\nexport const getPromosQueryKey = (): QueryKey => ['queries/promos'];\n","'use client';\r\n\r\nimport useEmblaCarousel, {\r\n type UseEmblaCarouselType,\r\n} from 'embla-carousel-react';\r\nimport Link from 'next/link';\r\nimport { useCallback, useEffect, useState } from 'react';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { usePromosQuery } from '../../hooks/usePromosQuery/usePromosQuery';\r\nimport { ArrowLeftIcon } from '../../icons/ArrowLeftIcon';\r\nimport { ArrowRightIcon } from '../../icons/ArrowRightIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { Gift01Icon } from '../../icons/Gift01Icon';\r\nimport { Button } from '../../ui';\r\nimport { Empty } from '../Empty';\r\nimport { PromosItem } from './PromoItem';\r\nimport type { PromoProps } from './Promos';\r\n\r\nexport function PromosContent(props: PromoProps) {\r\n const promosQuery = usePromosQuery({});\r\n\r\n const promos = promosQuery.data || [];\r\n\r\n const [emblaRef, emblaApi] = useEmblaCarousel({\r\n align: 'start',\r\n slidesToScroll: 1,\r\n breakpoints: {\r\n '(min-width: 1024px)': {\r\n slidesToScroll: 3,\r\n },\r\n },\r\n });\r\n\r\n const [prevBtnDisabled, setPrevBtnDisabled] = useState(true);\r\n const [nextBtnDisabled, setNextBtnDisabled] = useState(true);\r\n\r\n const onPrevButtonClick = useCallback(\r\n () => emblaApi?.scrollPrev(),\r\n [emblaApi],\r\n );\r\n\r\n const onNextButtonClick = useCallback(async () => {\r\n emblaApi?.scrollNext();\r\n }, [emblaApi]);\r\n\r\n const onSelect = useCallback((emblaApi: UseEmblaCarouselType[1]) => {\r\n setPrevBtnDisabled(!emblaApi?.canScrollPrev());\r\n setNextBtnDisabled(!emblaApi?.canScrollNext());\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!emblaApi) return;\r\n onSelect(emblaApi);\r\n emblaApi.on('reInit', onSelect).on('select', onSelect);\r\n }, [emblaApi, onSelect]);\r\n\r\n return (\r\n <div className={props.className}>\r\n <div className=\"flex items-center\">\r\n <h2 className=\"text-lg font-semibold\">{props.heading}</h2>\r\n <div className=\"grow\" />\r\n <div className=\"flex items-center justify-center gap-xl\">\r\n <Link\r\n href={props.seeAllUrl}\r\n className=\"flex gap-sm text-sm font-semibold\"\r\n >\r\n See All\r\n <ChevronRightIcon className=\"size-5 lg:hidden\" />\r\n </Link>\r\n <div className=\"hidden lg:flex\">\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n onClick={onPrevButtonClick}\r\n disabled={prevBtnDisabled}\r\n aria-label=\"Previous\"\r\n >\r\n <ArrowLeftIcon className=\"size-5\" />\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n onClick={onNextButtonClick}\r\n disabled={nextBtnDisabled}\r\n aria-label=\"Next\"\r\n >\r\n <ArrowRightIcon className=\"size-5\" />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {promos.length <= 0 && (\r\n <Empty\r\n icon={Gift01Icon}\r\n title=\"No Promos\"\r\n message=\"No promo is currently available.\"\r\n className=\"mt-lg\"\r\n />\r\n )}\r\n\r\n {promos.length >= 1 && (\r\n <div ref={emblaRef} className=\"relative mt-lg lg:overflow-hidden\">\r\n <div\r\n className={twMerge(\r\n 'grid auto-cols-[calc((100%-(0.375rem*2))/1)] grid-flow-col gap-sm lg:auto-cols-[calc((100%-(0.5rem*5))/3)] lg:gap-md',\r\n )}\r\n >\r\n {promos.map((promo) => (\r\n <PromosItem\r\n key={promo.id}\r\n promo={promo}\r\n shouldShowDescription={props.shouldShowDescription}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { getPromos, type Promo } from '@opexa/portal-sdk-core';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport type { Query } from '../../types';\r\nimport { getPromosQueryKey } from './getPromosQueryKey';\r\n\r\nexport const usePromosQuery: Query<Promo[]> = (config) => {\r\n return useQuery({\r\n ...config,\r\n queryKey: getPromosQueryKey(),\r\n queryFn: async ({ signal }) => {\r\n return await getPromos({\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n });\r\n },\r\n });\r\n};\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function Gift01Icon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M12 6V22M12 6H8.46429C7.94332 6 7.4437 5.78929 7.07533 5.41421C6.70695 5.03914 6.5 4.53043 6.5 4C6.5 3.46957 6.70695 2.96086 7.07533 2.58579C7.4437 2.21071 7.94332 2 8.46429 2C11.2143 2 12 6 12 6ZM12 6H15.5357C16.0567 6 16.5563 5.78929 16.9247 5.41421C17.293 5.03914 17.5 4.53043 17.5 4C17.5 3.46957 17.293 2.96086 16.9247 2.58579C16.5563 2.21071 16.0567 2 15.5357 2C12.7857 2 12 6 12 6ZM20 11V18.8C20 19.9201 20 20.4802 19.782 20.908C19.5903 21.2843 19.2843 21.5903 18.908 21.782C18.4802 22 17.9201 22 16.8 22L7.2 22C6.07989 22 5.51984 22 5.09202 21.782C4.71569 21.5903 4.40973 21.2843 4.21799 20.908C4 20.4802 4 19.9201 4 18.8V11M2 7.6L2 9.4C2 9.96005 2 10.2401 2.10899 10.454C2.20487 10.6422 2.35785 10.7951 2.54601 10.891C2.75992 11 3.03995 11 3.6 11L20.4 11C20.9601 11 21.2401 11 21.454 10.891C21.6422 10.7951 21.7951 10.6422 21.891 10.454C22 10.2401 22 9.96005 22 9.4V7.6C22 7.03995 22 6.75992 21.891 6.54601C21.7951 6.35785 21.6422 6.20487 21.454 6.10899C21.2401 6 20.9601 6 20.4 6L3.6 6C3.03995 6 2.75992 6 2.54601 6.10899C2.35785 6.20487 2.20487 6.35785 2.10899 6.54601C2 6.75992 2 7.03995 2 7.6Z\" />\r\n </svg>\r\n );\r\n}\r\n","import type { Promo } from '@opexa/portal-sdk-core';\r\nimport Image from 'next/image';\r\nimport { useRouter } from 'next/navigation';\r\nimport { twJoin } from 'tailwind-merge';\r\nimport { Button } from '../../ui';\r\n\r\ninterface PromosItemProps {\r\n promo: Promo;\r\n shouldShowDescription?: boolean;\r\n}\r\n\r\nexport function PromosItem(props: PromosItemProps) {\r\n const { promo } = props;\r\n const router = useRouter();\r\n\r\n return (\r\n <div\r\n key={promo.id}\r\n className=\"border-gray-50 bg-accent-50 relative flex h-full flex-col rounded-md border\"\r\n >\r\n {promo.banner.url && (\r\n <Image\r\n src={promo.banner.url}\r\n alt={promo.name}\r\n width={1200}\r\n height={500}\r\n priority\r\n className=\"aspect-[1200/500] w-full rounded-t-md object-cover\"\r\n />\r\n )}\r\n <div className=\"flex flex-grow flex-col p-4\">\r\n <p\r\n className={twJoin(\r\n 'w-full text-xl font-bold',\r\n props.shouldShowDescription ? 'text-start' : 'text-center',\r\n )}\r\n >\r\n {promo.name}\r\n </p>\r\n\r\n {props.shouldShowDescription && promo.description && (\r\n <p\r\n className=\"text-gray-600 mb-2 line-clamp-2 w-full overflow-hidden text-start text-sm\"\r\n dangerouslySetInnerHTML={{ __html: promo.description }}\r\n />\r\n )}\r\n\r\n <div className=\"mt-auto pt-4\">\r\n <Button\r\n className=\"w-full\"\r\n variant=\"outline\"\r\n onClick={() => router.push(`/promos/${promo.id}`)}\r\n >\r\n Read More\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { prefetchPromosQuery } from '../../hooks/usePromosQuery/prefetchPromosQuery';\r\nimport { PromosContent } from './PromosContent';\r\n\r\nexport interface PromoProps {\r\n heading: string;\r\n seeAllUrl: string;\r\n /** @default true */\r\n shouldShowDescription?: boolean;\r\n /** @default 1 */\r\n numOfRows?: 1 | 2 | 3;\r\n className?: string;\r\n}\r\n\r\nexport async function Promos(props: PromoProps) {\r\n await prefetchPromosQuery();\r\n\r\n return <PromosContent {...props} />;\r\n}\r\n","'use client';\r\n\r\nimport { useSessionQuery } from '../../hooks/useSessionQuery/useSessionQuery';\r\n\r\ninterface ProtectedProps {\r\n children: React.ReactNode;\r\n fallback?: React.ReactNode;\r\n}\r\n\r\nexport function Protected(props: ProtectedProps) {\r\n const query = useSessionQuery();\r\n return query.data?.status === 'authenticated'\r\n ? props.children\r\n : (props.fallback ?? null);\r\n}\r\n","'use client';\r\n\r\nimport { Portal } from '@ark-ui/react';\r\nimport Image, { type ImageProps } from 'next/image';\r\nimport type { ReactNode } from 'react';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { XIcon } from '../../icons/XIcon';\r\nimport { Dialog } from '../../ui';\r\nimport { SignInForm } from './SignInForm';\r\n\r\nexport interface SignInProps {\r\n logo: ImageProps['src'];\r\n banner: ImageProps['src'];\r\n children?: ReactNode;\r\n}\r\n\r\nexport function SignIn(props: SignInProps) {\r\n const signInStore = useGlobalStore(useShallow((popups) => popups.signIn));\r\n\r\n return (\r\n <Dialog.Root\r\n open={signInStore.open}\r\n onOpenChange={(details) => {\r\n signInStore.setOpen(details.open);\r\n }}\r\n lazyMount\r\n unmountOnExit\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n >\r\n <Dialog.Trigger asChild>\r\n {props.children ?? (\r\n <button type=\"button\" className=\"px-3.5 font-semibold\">\r\n Login\r\n </button>\r\n )}\r\n </Dialog.Trigger>\r\n <Portal>\r\n <Dialog.Backdrop />\r\n <Dialog.Positioner>\r\n <Dialog.Content className=\"mx-auto flex h-full w-full items-start lg:h-auto lg:w-fit\">\r\n <Image\r\n src={props.banner}\r\n alt=\"h-auto w-[400px]\"\r\n width={400}\r\n height={800}\r\n className=\"hidden rounded-l-xl lg:block\"\r\n />\r\n\r\n <div className=\"relative flex w-full flex-col items-start self-stretch bg-white p-3xl lg:w-[400px] lg:rounded-r-xl\">\r\n <Dialog.CloseTrigger>\r\n <XIcon />\r\n </Dialog.CloseTrigger>\r\n\r\n <Image\r\n src={props.logo}\r\n alt=\"\"\r\n width={200}\r\n height={100}\r\n className=\"mx-auto h-auto w-[120px]\"\r\n draggable={false}\r\n />\r\n\r\n <SignInForm />\r\n </div>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport { useDialogContext } from '@ark-ui/react';\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useState } from 'react';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport { z } from 'zod';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useCooldown } from '../../hooks/useCooldown';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useMobileNumberParser } from '../../hooks/useMobileNumberParser';\r\nimport { useSendVerificationCodeMutation } from '../../hooks/useSendVerificationCodeMutation/useSendVerificationCodeMutation';\r\nimport { useSignInMutation } from '../../hooks/useSigninMutation/useSignInMutation';\r\nimport { ArrowLeftIcon } from '../../icons/ArrowLeftIcon';\r\nimport { CheckIcon } from '../../icons/CheckIcon';\r\nimport { FacebookIcon } from '../../icons/FacebookIcon';\r\nimport { GoogleIcon } from '../../icons/GoogleIcon';\r\nimport { Button, Checkbox, Field, PinInput } from '../../ui';\r\nimport { toaster } from '../../utils/toaster';\r\n\r\nexport function SignInForm() {\r\n const [step, setStep] = useState<1 | 2>(1);\r\n\r\n const dialog = useDialogContext();\r\n const signUpStore = useGlobalStore(useShallow((popups) => popups.signUp));\r\n const signInMutation = useSignInMutation();\r\n const sendVerificationCodeMutation = useSendVerificationCodeMutation();\r\n\r\n const localeInfo = useLocaleInfo();\r\n const mobileNumberParser = useMobileNumberParser();\r\n\r\n const Step1Definition = z.object({\r\n mobileNumber: z.string().superRefine((v, ctx) => {\r\n if (!mobileNumberParser.validate(v)) {\r\n ctx.addIssue({\r\n code: z.ZodIssueCode.custom,\r\n message: 'Invalid mobile number',\r\n });\r\n }\r\n }),\r\n termsAccepted: z.boolean().superRefine((v, ctx) => {\r\n if (!v) {\r\n ctx.addIssue({\r\n code: z.ZodIssueCode.custom,\r\n message: 'You must accept the terms and conditions',\r\n });\r\n }\r\n }),\r\n });\r\n\r\n const Step2Definition = z.object({\r\n verificationCode: z.array(z.string().min(1).max(1).trim()).min(6).max(6),\r\n });\r\n\r\n const step1Form = useForm({\r\n resolver: zodResolver(Step1Definition),\r\n defaultValues: {\r\n mobileNumber: '',\r\n termsAccepted: false,\r\n },\r\n });\r\n\r\n const step2Form = useForm({\r\n resolver: zodResolver(Step2Definition),\r\n defaultValues: {\r\n verificationCode: Array.from<string>({ length: 6 }).fill(''),\r\n },\r\n });\r\n\r\n const cooldown = useCooldown({\r\n max: 60,\r\n duration: 1000 * 60,\r\n });\r\n\r\n return (\r\n <>\r\n {step === 1 && (\r\n <>\r\n <div className=\"w-full grow\">\r\n <h2 className=\"mt-xl text-center text-lg font-semibold\">\r\n Log in to your account\r\n </h2>\r\n <p className=\"text-gray-600 mt-xs text-center text-sm\">\r\n Welcome back! Please enter your details.\r\n </p>\r\n\r\n <form\r\n className=\"mt-5\"\r\n onSubmit={step1Form.handleSubmit(async (data) => {\r\n try {\r\n await sendVerificationCodeMutation.mutateAsync({\r\n channel: 'SMS',\r\n recipient: mobileNumberParser.format(data.mobileNumber),\r\n strict: true,\r\n });\r\n\r\n setStep(2);\r\n cooldown.start();\r\n } catch (e) {\r\n toaster.error({\r\n description:\r\n e instanceof Error\r\n ? e.message\r\n : 'Failed to send verification code',\r\n });\r\n }\r\n })}\r\n >\r\n <Field.Root invalid={!!step1Form.formState.errors.mobileNumber}>\r\n <Field.Label>Mobile Number</Field.Label>\r\n <div className=\"relative\">\r\n <localeInfo.country.flag className=\"absolute left-3.5 top-1/2 size-5 shrink-0 -translate-y-1/2\" />\r\n <Field.Input\r\n className=\"pl-11\"\r\n placeholder={`${localeInfo.mobileNumber.areaCode}${localeInfo.mobileNumber.example}`}\r\n {...step1Form.register('mobileNumber')}\r\n />\r\n </div>\r\n <Field.ErrorText>\r\n {step1Form.formState.errors.mobileNumber?.message}\r\n </Field.ErrorText>\r\n </Field.Root>\r\n\r\n <Button\r\n type=\"submit\"\r\n className=\"mt-xl\"\r\n disabled={step1Form.formState.isSubmitting}\r\n >\r\n Log In\r\n </Button>\r\n\r\n <Controller\r\n control={step1Form.control}\r\n name=\"termsAccepted\"\r\n render={(o) => (\r\n <Checkbox.Root\r\n className=\"mt-xl\"\r\n invalid={o.fieldState.invalid}\r\n checked={o.field.value}\r\n onCheckedChange={(details) => {\r\n o.field.onChange(details.checked);\r\n }}\r\n >\r\n <Checkbox.Control>\r\n <Checkbox.Indicator asChild>\r\n <CheckIcon />\r\n </Checkbox.Indicator>\r\n </Checkbox.Control>\r\n <Checkbox.Label>\r\n I confirm that I am at least 21 years old, not listed in\r\n the PAGCOR NDRP, not a GEL license holder, government\r\n employee, or member of the Armed Forces of the\r\n Philippines. I am not playing in a public space and agree\r\n to the Terms of Use and Privacy Policy. Ineligible\r\n accounts will have their funds forfeited to the\r\n government.\r\n </Checkbox.Label>\r\n <Checkbox.HiddenInput />\r\n </Checkbox.Root>\r\n )}\r\n />\r\n </form>\r\n\r\n <div className=\"relative mt-5 text-center\">\r\n <hr className=\"-translte-y-1/2 text-gray-200 absolute top-1/2 w-full\" />\r\n <span className=\"text-gray-500 relative bg-white px-md text-center text-sm font-semibold\">\r\n OR\r\n </span>\r\n </div>\r\n\r\n <div className=\"mt-5\">\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => {\r\n dialog.setOpen(false);\r\n }}\r\n >\r\n <GoogleIcon className=\"size-6\" />\r\n Continue with Google\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"mt-lg\"\r\n onClick={() => {\r\n dialog.setOpen(false);\r\n }}\r\n >\r\n <FacebookIcon className=\"size-6\" />\r\n Continue with Facebook\r\n </Button>\r\n </div>\r\n </div>\r\n <div className=\"flex w-full items-center justify-center gap-xs text-sm\">\r\n <span className=\"text-gray-500\">Don&apos;t have an account?</span>\r\n <button\r\n type=\"submit\"\r\n className=\"text-accent-700 font-semibold\"\r\n onClick={() => {\r\n dialog.setOpen(false);\r\n signUpStore.setOpen(true);\r\n }}\r\n >\r\n Sign up\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n\r\n {step === 2 && (\r\n <div className=\"w-full grow\">\r\n <h2 className=\"mt-xl text-center text-lg font-semibold\">\r\n Check your Phone\r\n </h2>\r\n <p className=\"text-gray-600 mt-xs text-center text-sm\">\r\n We&rsquo;ve sent a verification code to your mobile number{' '}\r\n <span className=\"font-semibold\">\r\n {mobileNumberParser.format(step1Form.getValues('mobileNumber'))}\r\n </span>{' '}\r\n via text\r\n </p>\r\n\r\n <form\r\n className=\"mt-5\"\r\n onSubmit={step2Form.handleSubmit(async ({ verificationCode }) => {\r\n const { mobileNumber } = step1Form.getValues();\r\n\r\n try {\r\n await signInMutation.mutateAsync({\r\n type: 'MOBILE_NUMBER',\r\n mobileNumber: mobileNumberParser.format(mobileNumber),\r\n verificationCode: verificationCode.join(''),\r\n });\r\n\r\n dialog.setOpen(false);\r\n step1Form.reset();\r\n step2Form.reset();\r\n setStep(1);\r\n } catch {\r\n toaster.error({\r\n description: 'Invalid Verification Code',\r\n });\r\n }\r\n })}\r\n >\r\n <Controller\r\n name=\"verificationCode\"\r\n control={step2Form.control}\r\n render={(o) => (\r\n <PinInput.Root\r\n placeholder=\"0\"\r\n invalid={o.fieldState.invalid}\r\n value={o.field.value}\r\n onValueChange={(details) => {\r\n o.field.onChange(details.value);\r\n }}\r\n >\r\n <PinInput.Control>\r\n <PinInput.Input index={0} />\r\n <PinInput.Input index={1} />\r\n <PinInput.Input index={2} />\r\n <PinInput.Input index={3} />\r\n <PinInput.Input index={4} />\r\n <PinInput.Input index={5} />\r\n </PinInput.Control>\r\n <PinInput.HiddenInput />\r\n </PinInput.Root>\r\n )}\r\n />\r\n\r\n <Button\r\n type=\"submit\"\r\n className=\"mt-5\"\r\n disabled={step2Form.formState.isSubmitting}\r\n >\r\n Verify and Play\r\n </Button>\r\n\r\n <div className=\"mt-5 flex w-full items-center justify-center gap-xs text-sm\">\r\n <span className=\"text-gray-500\">\r\n Didn&apos;t recieve the code?\r\n </span>\r\n <button\r\n type=\"button\"\r\n className=\"text-accent-700 font-semibold\"\r\n disabled={cooldown.cooling}\r\n onClick={async () => {\r\n await sendVerificationCodeMutation.mutateAsync({\r\n channel: 'SMS',\r\n recipient: mobileNumberParser.format(\r\n step1Form.getValues('mobileNumber'),\r\n ),\r\n });\r\n\r\n cooldown.start();\r\n }}\r\n >\r\n {cooldown.cooling\r\n ? `Resend in ${cooldown.countdown}s`\r\n : 'Resend'}\r\n </button>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n className=\"text-gray-600 mx-auto mt-5 flex w-fit items-center gap-1 text-sm font-semibold\"\r\n onClick={() => {\r\n setStep(1);\r\n step2Form.reset();\r\n cooldown.stop();\r\n }}\r\n >\r\n <ArrowLeftIcon className=\"size-5\" />\r\n Back\r\n </button>\r\n </form>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n","import { clamp, noop } from 'lodash-es';\nimport { useCallback, useEffect, useState } from 'react';\n\ninterface UseCooldownOptions {\n /** @default 0 */\n min?: number;\n /** @default 10 */\n max?: number;\n /**\n * The duration of the cooldown in milliseconds.\n * @default 10000\n */\n duration?: number;\n /** @default false */\n autoplay?: boolean;\n /** @default false */\n allowPause?: boolean;\n onCooldown?: () => void;\n}\n\ninterface UseCooldownReturn {\n /** Starts or pauses the cooldown */\n start: () => void;\n /** Restarts the cooldown */\n restart: () => void;\n /** Stops the cooldown */\n stop: () => void;\n /** The current countdown value */\n countdown: number;\n /** Whether the cooldown has started */\n cooling: boolean;\n /** Whether the cooldown is paused */\n paused: boolean;\n}\n\n/**\n * @example\n * ```ts\n * const cooldown = useCooldown({\n * max: 60,\n * duration: 1000 * 60,\n * autoplay: false,\n * allowPause: false,\n * });\n *\n */\nexport function useCooldown(opts?: UseCooldownOptions): UseCooldownReturn {\n 'use no memo';\n\n const min = opts?.min ?? 0;\n const max = opts?.max ?? 10;\n const duration = opts?.duration ?? 10000;\n const autoplay = opts?.autoplay ?? false;\n const allowPause = opts?.allowPause ?? false;\n const onCooldown = opts?.onCooldown ?? noop;\n\n const [paused, setPaused] = useState(false);\n const [cooling, setCooling] = useState(false);\n const [countdown, setCountdown] = useState(min);\n const [autoPlayed, setAutoplayed] = useState(false);\n\n const start = useCallback(() => {\n /* is it paused? */\n if (paused) {\n setPaused(false);\n return;\n }\n\n /* is it still cooling down? */\n if (cooling) {\n /* do we allow pause? */\n if (allowPause) {\n setPaused(true);\n }\n\n return;\n }\n\n setCooling(true);\n setCountdown(max - 1);\n }, [allowPause, cooling, max, paused]);\n\n function stop() {\n setPaused(false);\n setCooling(false);\n setCountdown(min);\n }\n\n function restart() {\n stop();\n start();\n }\n\n useEffect(() => {\n let timer: NodeJS.Timeout;\n\n if (cooling && !paused) {\n timer = setInterval(() => {\n setCountdown(round(clamp(countdown - 1, min, max)));\n\n if (countdown <= min) {\n clearInterval(timer);\n setCountdown(min);\n setCooling(false);\n onCooldown();\n }\n }, duration / max);\n }\n\n return () => {\n if (timer) {\n clearInterval(timer);\n }\n };\n });\n\n useEffect(() => {\n if (cooling) return;\n if (autoPlayed) return;\n if (!autoplay) return;\n start();\n setAutoplayed(true);\n }, [autoPlayed, autoplay, cooling, start]);\n\n useEffect(() => {\n return () => {\n setCooling(false);\n setPaused(false);\n setCountdown(min);\n setAutoplayed(false);\n };\n }, [min]);\n\n return {\n start,\n restart,\n stop,\n paused,\n cooling,\n countdown,\n };\n}\n\nfunction round(n: number) {\n return Math.round((n + Number.EPSILON) * 100) / 100;\n}\n","import { useLocaleInfo } from './useLocaleInfo';\n\nexport function useMobileNumberParser() {\n const localeInfo = useLocaleInfo();\n\n /**\n * Formats a mobile number based on the current locale information.\n * Adds the area code if it is not present and ensures the number is in the correct format.\n * @example\n * ```ts\n * format('9190000001'); // '+639190000001'\n * format('09190000001'); // '+639190000001'\n * format('639190000001'); // '+639190000001'\n * format('+639190000001'); // '+639190000001'\n * ```\n */\n const format = (value: string) => {\n if (value.startsWith(localeInfo.mobileNumber.areaCode)) {\n return value;\n }\n\n if (value.startsWith('0')) {\n return localeInfo.mobileNumber.areaCode + value.substring(1);\n }\n\n if (value.startsWith(localeInfo.mobileNumber.areaCode.substring(1))) {\n return '+' + value;\n }\n\n return localeInfo.mobileNumber.areaCode + value;\n };\n\n /**\n * Parses a mobile number based on the current locale information.\n * Returns the area code and the mobile number as separate values.\n * @example\n * ```ts\n * parse('+639190000001'); // { mobileNumber: '9190000001', areaCode: '+63' }\n * parse('639190000001'); // { mobileNumber: '9190000001', areaCode: '+63' }\n * parse('09190000001'); // { mobileNumber: '9190000001', areaCode: '+63' }\n * parse('9190000001'); // { mobileNumber: '9190000001', areaCode: '+63' }\n * ```\n */\n const parse = (value: string) => {\n const mobileNumber = format(value).replace(localeInfo.mobileNumber.areaCode, '');\n\n return {\n mobileNumber: mobileNumber,\n areaCode: localeInfo.mobileNumber.areaCode,\n };\n };\n\n /**\n * Validates a mobile number based on the current locale information.\n * @example\n * ```ts\n * validate('9190000001'); // true\n * validate('09190000001'); // true\n * validate('639190000001'); // true\n * validate('+639190000001'); // true\n * ```\n */\n const validate = (value: unknown): value is string => {\n return typeof value === 'string' && localeInfo.mobileNumber.pattern.test(value);\n };\n\n return {\n validate,\n format,\n parse,\n };\n}\n","import {\r\n sendVerificationCode,\r\n type SendVerificationCodeInput,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useMutation } from '@tanstack/react-query';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport type { Mutation } from '../../types';\r\nimport { getSendVerificationCodeMutationKey } from './getSendVerificationCodeMutationKey';\r\n\r\nexport const useSendVerificationCodeMutation: Mutation<\r\n void,\r\n SendVerificationCodeInput\r\n> = (config) => {\r\n return useMutation({\r\n ...config,\r\n mutationKey: getSendVerificationCodeMutationKey(),\r\n mutationFn: async (input) => {\r\n await sendVerificationCode(input, {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n });\r\n },\r\n });\r\n};\r\n","import type { MutationKey } from '@tanstack/react-query';\n\nexport const getSendVerificationCodeMutationKey = (): MutationKey => [\n 'mutations/sendVerificationCode',\n];\n","import type { Authenticator } from '@opexa/portal-sdk-core';\nimport { useMutation } from '@tanstack/react-query';\nimport { signIn, type SignInInput } from '../../services/client/signIn';\nimport type { Mutation } from '../../types';\nimport { getQueryClient } from '../../utils/getQueryClient';\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\nimport { getSignInMutationKey } from './getSignInMutationKey';\n\nexport const useSignInMutation: Mutation<Authenticator | null, SignInInput> = (config) => {\n const queryClient = getQueryClient();\n\n return useMutation({\n ...config,\n mutationKey: getSignInMutationKey(),\n mutationFn: async (input) => {\n const authenticator = await signIn(input);\n\n if (!authenticator) {\n await queryClient.invalidateQueries({\n queryKey: getSessionQueryKey(),\n });\n }\n\n return authenticator;\n },\n });\n};\n","import type { Authenticator, CreateSessionInput } from '@opexa/portal-sdk-core';\r\nimport { BYPASS_RECAPTCHA } from '../../constants';\r\nimport type { ApiResponse } from '../../types';\r\n\r\nexport type SignInInput = CreateSessionInput;\r\n\r\nexport async function signIn(\r\n input: SignInInput,\r\n): Promise<Authenticator | null> {\r\n const res = await fetch('/api/sessions', {\r\n body: JSON.stringify(input),\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n ...(BYPASS_RECAPTCHA && {\r\n 'Test-Pass': '',\r\n }),\r\n },\r\n });\r\n\r\n const json = (await res.json()) as ApiResponse<Authenticator | null>;\r\n\r\n if (!json.ok) {\r\n const error = new Error();\r\n error.name = 'SignInError';\r\n error.message = 'Failed to sign in';\r\n throw error;\r\n }\r\n\r\n return json.data ?? null;\r\n}\r\n","import type { MutationKey } from '@tanstack/react-query';\n\nexport const getSignInMutationKey = (): MutationKey => ['mutations/signIn'];\n","import type { ComponentPropsWithRef } from 'react';\n\nexport function FacebookIcon(props: ComponentPropsWithRef<'svg'>) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 256 256\"\n {...props}\n >\n <path\n fill=\"#1877F2\"\n d=\"M256 128C256 57.308 198.692 0 128 0S0 57.308 0 128c0 63.888 46.808 116.843 108 126.445V165H75.5v-37H108V99.8c0-32.08 19.11-49.8 48.348-49.8C170.352 50 185 52.5 185 52.5V84h-16.14C152.959 84 148 93.867 148 103.99V128h35.5l-5.675 37H148v89.445c61.192-9.602 108-62.556 108-126.445\"\n />\n <path\n fill=\"#FFF\"\n d=\"m177.825 165l5.675-37H148v-24.01C148 93.866 152.959 84 168.86 84H185V52.5S170.352 50 156.347 50C127.11 50 108 67.72 108 99.8V128H75.5v37H108v89.445A129 129 0 0 0 128 256a129 129 0 0 0 20-1.555V165z\"\n />\n </svg>\n );\n}\n","import type { ComponentPropsWithRef } from 'react';\n\nexport function GoogleIcon(props: ComponentPropsWithRef<'svg'>) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 128 128\"\n {...props}\n >\n <path\n fill=\"#fff\"\n d=\"M44.59 4.21a63.28 63.28 0 0 0 4.33 120.9a67.6 67.6 0 0 0 32.36.35a57.13 57.13 0 0 0 25.9-13.46a57.44 57.44 0 0 0 16-26.26a74.3 74.3 0 0 0 1.61-33.58H65.27v24.69h34.47a29.72 29.72 0 0 1-12.66 19.52a36.2 36.2 0 0 1-13.93 5.5a41.3 41.3 0 0 1-15.1 0A37.2 37.2 0 0 1 44 95.74a39.3 39.3 0 0 1-14.5-19.42a38.3 38.3 0 0 1 0-24.63a39.25 39.25 0 0 1 9.18-14.91A37.17 37.17 0 0 1 76.13 27a34.3 34.3 0 0 1 13.64 8q5.83-5.8 11.64-11.63c2-2.09 4.18-4.08 6.15-6.22A61.2 61.2 0 0 0 87.2 4.59a64 64 0 0 0-42.61-.38\"\n />\n <path\n fill=\"#e33629\"\n d=\"M44.59 4.21a64 64 0 0 1 42.61.37a61.2 61.2 0 0 1 20.35 12.62c-2 2.14-4.11 4.14-6.15 6.22Q95.58 29.23 89.77 35a34.3 34.3 0 0 0-13.64-8a37.17 37.17 0 0 0-37.46 9.74a39.25 39.25 0 0 0-9.18 14.91L8.76 35.6A63.53 63.53 0 0 1 44.59 4.21\"\n />\n <path\n fill=\"#f8bd00\"\n d=\"M3.26 51.5a63 63 0 0 1 5.5-15.9l20.73 16.09a38.3 38.3 0 0 0 0 24.63q-10.36 8-20.73 16.08a63.33 63.33 0 0 1-5.5-40.9\"\n />\n <path\n fill=\"#587dbd\"\n d=\"M65.27 52.15h59.52a74.3 74.3 0 0 1-1.61 33.58a57.44 57.44 0 0 1-16 26.26c-6.69-5.22-13.41-10.4-20.1-15.62a29.72 29.72 0 0 0 12.66-19.54H65.27c-.01-8.22 0-16.45 0-24.68\"\n />\n <path\n fill=\"#319f43\"\n d=\"M8.75 92.4q10.37-8 20.73-16.08A39.3 39.3 0 0 0 44 95.74a37.2 37.2 0 0 0 14.08 6.08a41.3 41.3 0 0 0 15.1 0a36.2 36.2 0 0 0 13.93-5.5c6.69 5.22 13.41 10.4 20.1 15.62a57.13 57.13 0 0 1-25.9 13.47a67.6 67.6 0 0 1-32.36-.35a63 63 0 0 1-23-11.59A63.7 63.7 0 0 1 8.75 92.4\"\n />\n </svg>\n );\n}\n","'use client';\r\n\r\nimport { Portal } from '@ark-ui/react';\r\nimport Image, { type ImageProps } from 'next/image';\r\nimport type { ReactNode } from 'react';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { XIcon } from '../../icons/XIcon';\r\nimport { Button, Dialog } from '../../ui';\r\nimport { SignUpForm } from './SignUpForm';\r\n\r\nexport interface SignUpProps {\r\n logo: ImageProps['src'];\r\n banner: ImageProps['src'];\r\n children?: ReactNode;\r\n}\r\n\r\nexport function SignUp(props: SignUpProps) {\r\n const signUpStore = useGlobalStore(useShallow((popups) => popups.signUp));\r\n\r\n return (\r\n <Dialog.Root\r\n open={signUpStore.open}\r\n onOpenChange={(details) => {\r\n signUpStore.setOpen(details.open);\r\n }}\r\n lazyMount\r\n unmountOnExit\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n >\r\n <Dialog.Trigger asChild>\r\n {props.children ?? <Button>Sign up</Button>}\r\n </Dialog.Trigger>\r\n <Portal>\r\n <Dialog.Backdrop />\r\n <Dialog.Positioner>\r\n <Dialog.Content className=\"mx-auto flex h-full w-full items-start lg:h-auto lg:w-fit\">\r\n <Image\r\n src={props.banner}\r\n alt=\"h-auto w-[400px]\"\r\n width={400}\r\n height={800}\r\n className=\"hidden rounded-l-xl lg:block\"\r\n />\r\n\r\n <div className=\"relative flex w-full flex-col items-start self-stretch bg-white p-3xl lg:w-[400px] lg:rounded-r-xl\">\r\n <Dialog.CloseTrigger>\r\n <XIcon />\r\n </Dialog.CloseTrigger>\r\n\r\n <Image\r\n src={props.logo}\r\n alt=\"\"\r\n width={200}\r\n height={100}\r\n className=\"mx-auto h-auto w-[120px]\"\r\n draggable={false}\r\n />\r\n\r\n <SignUpForm />\r\n </div>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport { useDialogContext } from '@ark-ui/react';\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { ObjectId, ObjectType } from '@opexa/portal-sdk-core/object-id';\r\nimport { useSearchParams } from 'next/navigation';\r\nimport { useState } from 'react';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport { z } from 'zod';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useCooldown } from '../../hooks/useCooldown';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useMobileNumberParser } from '../../hooks/useMobileNumberParser';\r\nimport { useSendVerificationCodeMutation } from '../../hooks/useSendVerificationCodeMutation/useSendVerificationCodeMutation';\r\nimport { useSignInMutation } from '../../hooks/useSigninMutation/useSignInMutation';\r\nimport { useSignUpMutation } from '../../hooks/useSignUpMutation/useSignUpMutation';\r\nimport { ArrowLeftIcon } from '../../icons/ArrowLeftIcon';\r\nimport { CheckIcon } from '../../icons/CheckIcon';\r\nimport { Button, Checkbox, Field, PinInput } from '../../ui';\r\nimport { toaster } from '../../utils/toaster';\r\n\r\nexport function SignUpForm() {\r\n const [step, setStep] = useState<1 | 2>(1);\r\n\r\n const dialog = useDialogContext();\r\n const search = useSearchParams();\r\n const signInStore = useGlobalStore(useShallow((popups) => popups.signIn));\r\n const signUpMutation = useSignUpMutation();\r\n const signInMutation = useSignInMutation();\r\n const sendVerificationCodeMutation = useSendVerificationCodeMutation();\r\n\r\n const localeInfo = useLocaleInfo();\r\n const mobileNumberParser = useMobileNumberParser();\r\n\r\n const Step1Definition = z.object({\r\n mobileNumber: z.string().superRefine((v, ctx) => {\r\n if (!mobileNumberParser.validate(v)) {\r\n ctx.addIssue({\r\n code: z.ZodIssueCode.custom,\r\n message: 'Invalid mobile number',\r\n });\r\n }\r\n }),\r\n termsAccepted: z.boolean().superRefine((v, ctx) => {\r\n if (!v) {\r\n ctx.addIssue({\r\n code: z.ZodIssueCode.custom,\r\n message: 'You must accept the terms and conditions',\r\n });\r\n }\r\n }),\r\n });\r\n\r\n const Step2Definition = z.object({\r\n verificationCode: z.array(z.string().min(1).max(1).trim()).min(6).max(6),\r\n });\r\n\r\n const step1Form = useForm({\r\n resolver: zodResolver(Step1Definition),\r\n defaultValues: {\r\n mobileNumber: '',\r\n termsAccepted: false,\r\n },\r\n });\r\n\r\n const step2Form = useForm({\r\n resolver: zodResolver(Step2Definition),\r\n defaultValues: {\r\n verificationCode: Array.from<string>({ length: 6 }).fill(''),\r\n },\r\n });\r\n\r\n const cooldown = useCooldown({\r\n max: 60,\r\n duration: 1000 * 60,\r\n });\r\n\r\n return (\r\n <>\r\n {step === 1 && (\r\n <>\r\n <div className=\"w-full grow\">\r\n <h2 className=\"mt-xl text-center text-lg font-semibold\">\r\n Create an account\r\n </h2>\r\n <p className=\"text-gray-600 mt-xs text-center text-sm\">\r\n Register instantly and start playing!\r\n </p>\r\n\r\n <form\r\n className=\"mt-5\"\r\n onSubmit={step1Form.handleSubmit(async (data) => {\r\n try {\r\n await sendVerificationCodeMutation.mutateAsync({\r\n channel: 'SMS',\r\n recipient: mobileNumberParser.format(data.mobileNumber),\r\n });\r\n\r\n setStep(2);\r\n cooldown.start();\r\n } catch (e) {\r\n toaster.error({\r\n description:\r\n e instanceof Error\r\n ? e.message\r\n : 'Failed to send verification code',\r\n });\r\n }\r\n })}\r\n >\r\n <Field.Root invalid={!!step1Form.formState.errors.mobileNumber}>\r\n <Field.Label>Mobile Number</Field.Label>\r\n <div className=\"relative\">\r\n <localeInfo.country.flag className=\"absolute left-3.5 top-1/2 size-5 shrink-0 -translate-y-1/2\" />\r\n <Field.Input\r\n className=\"pl-11\"\r\n {...step1Form.register('mobileNumber')}\r\n />\r\n </div>\r\n <Field.ErrorText>\r\n {step1Form.formState.errors.mobileNumber?.message}\r\n </Field.ErrorText>\r\n </Field.Root>\r\n\r\n <Button\r\n type=\"submit\"\r\n className=\"mt-5\"\r\n disabled={step1Form.formState.isSubmitting}\r\n >\r\n Create Account\r\n </Button>\r\n\r\n <Controller\r\n control={step1Form.control}\r\n name=\"termsAccepted\"\r\n render={(o) => (\r\n <Checkbox.Root\r\n className=\"mt-xl\"\r\n invalid={o.fieldState.invalid}\r\n checked={o.field.value}\r\n onCheckedChange={(details) => {\r\n o.field.onChange(details.checked);\r\n }}\r\n >\r\n <Checkbox.Control>\r\n <Checkbox.Indicator asChild>\r\n <CheckIcon />\r\n </Checkbox.Indicator>\r\n </Checkbox.Control>\r\n <Checkbox.Label>\r\n I confirm that I am at least 21 years old, not listed in\r\n the PAGCOR NDRP, not a GEL license holder, government\r\n employee, or member of the Armed Forces of the\r\n Philippines. I am not playing in a public space and agree\r\n to the Terms of Use and Privacy Policy. Ineligible\r\n accounts will have their funds forfeited to the\r\n government.\r\n </Checkbox.Label>\r\n <Checkbox.HiddenInput />\r\n </Checkbox.Root>\r\n )}\r\n />\r\n </form>\r\n </div>\r\n\r\n <div className=\"flex w-full items-center justify-center gap-xs text-sm\">\r\n <span className=\"text-gray-500\">Don&apos;t have an account?</span>\r\n <button\r\n type=\"submit\"\r\n className=\"text-accent-700 font-semibold\"\r\n onClick={() => {\r\n dialog.setOpen(false);\r\n signInStore.setOpen(true);\r\n }}\r\n >\r\n Log In\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n\r\n {step === 2 && (\r\n <div className=\"w-full grow\">\r\n <h2 className=\"mt-xl text-center text-lg font-semibold\">\r\n Check your Phone\r\n </h2>\r\n <p className=\"text-gray-600 mt-xs text-center text-sm\">\r\n We&rsquo;ve sent a verification code to your mobile number{' '}\r\n <span className=\"font-semibold\">\r\n {mobileNumberParser.format(step1Form.getValues('mobileNumber'))}\r\n </span>{' '}\r\n via text\r\n </p>\r\n\r\n <form\r\n className=\"mt-5\"\r\n onSubmit={step2Form.handleSubmit(async ({ verificationCode }) => {\r\n const id = ObjectId.generate(ObjectType.MemberAccount).toString();\r\n const { mobileNumber } = step1Form.getValues();\r\n\r\n try {\r\n await signUpMutation.mutateAsync({\r\n id,\r\n mobileNumber: mobileNumberParser.format(mobileNumber),\r\n verificationCode: verificationCode.join(''),\r\n referralCode: search.get('referralCode') ?? undefined,\r\n domain: search.get('domain') ?? undefined,\r\n btag: search.get('btag') ?? undefined,\r\n });\r\n\r\n const name = mobileNumberParser.format(mobileNumber);\r\n const password = `${name}${id}`;\r\n\r\n try {\r\n await signInMutation.mutateAsync({\r\n type: 'NAME_AND_PASSWORD',\r\n name: mobileNumberParser.format(mobileNumber),\r\n password,\r\n });\r\n } catch {\r\n signInStore.setOpen(true);\r\n }\r\n\r\n dialog.setOpen(false);\r\n step1Form.reset();\r\n step2Form.reset();\r\n setStep(1);\r\n } catch {\r\n toaster.error({\r\n title: 'Invalid Verification Code',\r\n });\r\n }\r\n })}\r\n >\r\n <Controller\r\n name=\"verificationCode\"\r\n control={step2Form.control}\r\n render={(o) => (\r\n <PinInput.Root\r\n placeholder=\"0\"\r\n invalid={o.fieldState.invalid}\r\n value={o.field.value}\r\n onValueChange={(details) => {\r\n o.field.onChange(details.value);\r\n }}\r\n >\r\n <PinInput.Control>\r\n <PinInput.Input index={0} />\r\n <PinInput.Input index={1} />\r\n <PinInput.Input index={2} />\r\n <PinInput.Input index={3} />\r\n <PinInput.Input index={4} />\r\n <PinInput.Input index={5} />\r\n </PinInput.Control>\r\n <PinInput.HiddenInput />\r\n </PinInput.Root>\r\n )}\r\n />\r\n\r\n <Button\r\n type=\"submit\"\r\n className=\"mt-5\"\r\n disabled={step2Form.formState.isSubmitting}\r\n >\r\n Verify and Play\r\n </Button>\r\n\r\n <div className=\"mt-5 flex w-full items-center justify-center gap-xs text-sm\">\r\n <span className=\"text-gray-500\">\r\n Didn&apos;t recieve the code?\r\n </span>\r\n <button\r\n type=\"button\"\r\n className=\"text-accent-700 font-semibold disabled:cursor-not-allowed disabled:opacity-75\"\r\n disabled={cooldown.cooling}\r\n onClick={async () => {\r\n await sendVerificationCodeMutation.mutateAsync({\r\n channel: 'SMS',\r\n recipient: mobileNumberParser.format(\r\n step1Form.getValues('mobileNumber'),\r\n ),\r\n });\r\n\r\n cooldown.start();\r\n }}\r\n >\r\n {cooldown.cooling\r\n ? `Resend in ${cooldown.countdown}s`\r\n : 'Resend'}\r\n </button>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n className=\"text-gray-600 mx-auto mt-5 flex w-fit items-center gap-1 text-sm font-semibold\"\r\n onClick={() => {\r\n setStep(1);\r\n step2Form.reset();\r\n cooldown.stop();\r\n }}\r\n >\r\n <ArrowLeftIcon className=\"size-5\" />\r\n Back\r\n </button>\r\n </form>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n","import {\r\n registerMemberAccountViaMobile,\r\n type RegisterMemberAccountViaMobileInput,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useMutation } from '@tanstack/react-query';\r\nimport { BYPASS_RECAPTCHA, ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport type { Mutation } from '../../types';\r\nimport { getSignUpMutationKey } from './getSignUpMutationKey';\r\n\r\nexport interface SignUpMutationInput\r\n extends RegisterMemberAccountViaMobileInput {}\r\n\r\nexport const useSignUpMutation: Mutation<void, SignUpMutationInput> = (\r\n config,\r\n) => {\r\n return useMutation({\r\n ...config,\r\n mutationKey: getSignUpMutationKey(),\r\n mutationFn: async (input) => {\r\n return await registerMemberAccountViaMobile(input, {\r\n headers: {\r\n environment: ENVIRONMENT,\r\n 'Platform-Code': PLATFORM_CODE,\r\n ...(BYPASS_RECAPTCHA && {\r\n 'Test-Pass': '',\r\n }),\r\n },\r\n });\r\n },\r\n });\r\n};\r\n","import type { MutationKey } from '@tanstack/react-query';\n\nexport const getSignUpMutationKey = (): MutationKey => ['mutations/signUp'];\n","'use client';\r\n\r\nimport useEmblaCarousel from 'embla-carousel-react';\r\nimport Image from 'next/image';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useTopWinsQuery } from '../../hooks/useTopWinsQuery/useTopWinsQuery';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\nimport { getGameImageUrl } from '../../utils/getGameImageUrl';\r\nimport type { TopWinsProps } from './TopWins';\r\n\r\nexport function TopWinsContent(props: TopWinsProps) {\r\n const localeInfo = useLocaleInfo();\r\n const topWinsQuery = useTopWinsQuery();\r\n const topWins = topWinsQuery.data ?? [];\r\n\r\n const [emblaRef] = useEmblaCarousel({\r\n align: 'start',\r\n slidesToScroll: 1,\r\n });\r\n\r\n if (!topWins?.length) return null;\r\n\r\n return (\r\n <div className={props.className}>\r\n <div className=\"text-gray-600 mb-3 text-lg font-semibold md:mb-4\">\r\n {props.heading}\r\n </div>\r\n\r\n <div ref={emblaRef} className=\"relative lg:overflow-hidden\">\r\n <div className=\"flex gap-sm lg:gap-md\">\r\n {topWins.map((topWin) => (\r\n <div\r\n key={topWin.id}\r\n className=\"bg-gray-50 border-gray-200 flex w-[calc((100%-(0.375rem*2))/3)] shrink-0 flex-col space-y-2 rounded-sm border p-2 text-center lg:w-[calc((100%-(0.5rem*5))/6)] xl:w-[calc((100%-(0.5rem*9))/10)]\"\r\n >\r\n <div className=\"mx-auto aspect-square w-full\">\r\n {topWin.game && (\r\n <Image\r\n width={100}\r\n height={100}\r\n src={getGameImageUrl(topWin.game)}\r\n alt=\"\"\r\n className=\"size-full rounded-sm object-cover\"\r\n />\r\n )}\r\n </div>\r\n\r\n <div className=\"space-y-0.5\">\r\n <div className=\"text-gray-600 text-xs\">\r\n {topWin.member.name}\r\n </div>\r\n <div className=\"text-gray-800 text-sm font-semibold\">\r\n {formatNumber(topWin.payout, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </div>\r\n <div className=\"text-gray-600 text-xs\">\r\n {formatNumber(topWin.multiplier, {\r\n minDecimalPlaces: 2,\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { getTopWins, type TopWin } from '@opexa/portal-sdk-core';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport type { Query } from '../../types';\r\nimport { getTopWinsQueryKey } from './getTopWinsQueryKey';\r\n\r\nexport const useTopWinsQuery: Query<TopWin[]> = (config) => {\r\n return useQuery({\r\n ...config,\r\n queryKey: getTopWinsQueryKey(),\r\n queryFn: async () => {\r\n return await getTopWins({\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n environment: ENVIRONMENT,\r\n });\r\n },\r\n });\r\n};\r\n","import type { QueryKey } from '@tanstack/react-query';\n\nexport const getTopWinsQueryKey = (): QueryKey => ['queries/topWins'];\n","import type { GameProvider } from '@opexa/portal-sdk-core';\r\nimport { ENVIRONMENT } from '../constants';\r\n\r\nconst VERSION = '1';\r\nconst ORIGIN =\r\n ENVIRONMENT === 'development'\r\n ? 'https://static.development.opexa.io/images'\r\n : 'https://static.opexa.io/images';\r\n\r\ntype Args =\r\n | {\r\n id: string;\r\n reference?: never;\r\n provider: GameProvider;\r\n }\r\n | {\r\n id?: never;\r\n reference: string;\r\n provider: GameProvider;\r\n };\r\n\r\nexport function getGameImageUrl<T extends Args>(args: T) {\r\n const id = args.id ?? args.reference;\r\n return `${ORIGIN}/${args.provider.toLocaleLowerCase()}/thumbnail-${id}.webp?version=${VERSION}`;\r\n}\r\n","import { TopWinsContent } from './TopWinsContent';\r\n\r\nexport interface TopWinsProps {\r\n heading: string;\r\n className?: string;\r\n}\r\n\r\nexport async function TopWins(props: TopWinsProps) {\r\n /* await prefetchTopWinsQuery(); */\r\n\r\n return <TopWinsContent {...props} />;\r\n}\r\n","'use client';\r\n\r\nimport useEmblaCarousel from 'embla-carousel-react';\r\nimport Link from 'next/link';\r\nimport { useCallback, useEffect, useState } from 'react';\r\nimport { useTournamentsQuery } from '../../hooks/useTournamentsQuery/useTournamentsQuery';\r\nimport { ArrowLeftIcon } from '../../icons/ArrowLeftIcon';\r\nimport { ArrowRightIcon } from '../../icons/ArrowRightIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { Button } from '../../ui';\r\nimport type { TournamentCounterProps } from './TournamentCounter';\r\nimport { TournamentCounterItem } from './TournamentCounterItem';\r\n\r\nexport function TournamentCounterContent(props: TournamentCounterProps) {\r\n const [emblaRef, emblaApi] = useEmblaCarousel({\r\n align: 'start',\r\n slidesToScroll: 1,\r\n });\r\n\r\n const scrollPrev = useCallback(() => {\r\n if (emblaApi) emblaApi.scrollPrev();\r\n }, [emblaApi]);\r\n\r\n const scrollNext = useCallback(() => {\r\n if (emblaApi) emblaApi.scrollNext();\r\n }, [emblaApi]);\r\n\r\n const [canScrollPrev, setCanScrollPrev] = useState(false);\r\n const [canScrollNext, setCanScrollNext] = useState(false);\r\n\r\n const onSelect = useCallback(() => {\r\n if (!emblaApi) return;\r\n setCanScrollPrev(emblaApi.canScrollPrev());\r\n setCanScrollNext(emblaApi.canScrollNext());\r\n }, [emblaApi]);\r\n\r\n useEffect(() => {\r\n if (!emblaApi) return;\r\n onSelect(); // set initial state\r\n emblaApi.on('select', onSelect);\r\n emblaApi.on('reInit', onSelect); // handles responsive changes\r\n }, [emblaApi, onSelect]);\r\n\r\n const tournamentsQuery = useTournamentsQuery({\r\n first: 100,\r\n filter: {\r\n status: {\r\n equal: 'ACTIVE',\r\n },\r\n },\r\n });\r\n\r\n const tournaments =\r\n tournamentsQuery.data?.pages[0].edges.map((edge) => edge.node) ?? [];\r\n\r\n if (tournaments.length <= 0) return null;\r\n\r\n return (\r\n <div className={props.className}>\r\n <div className=\"mb-3 flex items-center justify-between md:mb-4\">\r\n <div className=\"text-lg font-semibold\">{props.heading}</div>\r\n <div className=\"flex items-center md:gap-3xl\">\r\n <Link\r\n href={props.seeAllUrl}\r\n className=\"flex gap-sm text-sm font-semibold\"\r\n >\r\n See All\r\n <ChevronRightIcon className=\"size-5 lg:hidden\" />\r\n </Link>\r\n\r\n <div className=\"hidden lg:flex\">\r\n <Button\r\n disabled={!canScrollPrev}\r\n onClick={scrollPrev}\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n aria-label=\"Previous\"\r\n >\r\n <ArrowLeftIcon className=\"size-5\" />\r\n </Button>\r\n <Button\r\n disabled={!canScrollNext}\r\n onClick={scrollNext}\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n aria-label=\"Next\"\r\n >\r\n <ArrowRightIcon className=\"size-5\" />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"w-full overflow-hidden\" ref={emblaRef}>\r\n <div className=\"flex gap-2.5\">\r\n {tournaments.map((tournament, index) => (\r\n <TournamentCounterItem\r\n key={tournament.id}\r\n index={index}\r\n tournament={tournament}\r\n className={\r\n tournaments.length < 2\r\n ? 'w-full'\r\n : 'w-full lg:w-[calc((100%-0.75rem)/2)]'\r\n }\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import {\r\n getTournaments,\r\n type PaginatedQueryResult,\r\n type Tournament,\r\n type TournamentsInput,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useInfiniteQuery } from '@tanstack/react-query';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport type { InfiniteQuery } from '../../types';\r\nimport { getTournamentsQueryKey } from './getTournamentsQueryKey';\r\n\r\nexport const useTournamentsQuery: InfiniteQuery<\r\n PaginatedQueryResult<Tournament>,\r\n TournamentsInput\r\n> = (input, config) => {\r\n const query = useInfiniteQuery({\r\n ...config,\r\n queryKey: getTournamentsQueryKey(input),\r\n queryFn: ({ pageParam, signal }) => {\r\n return getTournaments(\r\n { ...input, after: pageParam },\r\n {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n getNextPageParam(lastPage) {\r\n if (lastPage?.pageInfo?.hasNextPage) {\r\n return lastPage?.pageInfo?.endCursor;\r\n }\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { TournamentsInput } from '@opexa/portal-sdk-core';\nimport type { QueryKey } from '@tanstack/react-query';\n\nexport const getTournamentsQueryKey = (input?: TournamentsInput): QueryKey => [\n 'queries/tournaments',\n input,\n];\n","'use client';\r\n\r\nimport type { Tournament } from '@opexa/portal-sdk-core';\r\nimport { map, pick, sum } from 'lodash-es';\r\nimport Image from 'next/image';\r\nimport React, { useEffect, useMemo, useState } from 'react';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { Award02Icon } from '../../icons/Award02Icon';\r\nimport ball from '../../images/ball.png';\r\nimport card from '../../images/card.png';\r\nimport trophy from '../../images/trophy.png';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\n\r\nexport interface JackpotCounterCardProps {\r\n tournament: Tournament;\r\n className?: string;\r\n index: number;\r\n}\r\n\r\nexport function TournamentCounterItem({\r\n tournament,\r\n className,\r\n index,\r\n}: JackpotCounterCardProps) {\r\n const localeInfo = useLocaleInfo();\r\n\r\n const tournamentReward = sum(map(tournament.rewardSettings, Number));\r\n\r\n const [timeRemaining, setTimeRemaining] = useState({\r\n days: 0,\r\n hours: 0,\r\n minutes: 0,\r\n isPast: false,\r\n });\r\n\r\n const activationEndDateTime = useMemo(\r\n () => new Date(tournament.activationEndDateTime),\r\n [tournament.activationEndDateTime],\r\n );\r\n\r\n const calculateRemainingTime = React.useCallback(() => {\r\n const now = new Date();\r\n const diffMs = activationEndDateTime.getTime() - now.getTime();\r\n\r\n if (diffMs <= 0) {\r\n setTimeRemaining({ days: 0, hours: 0, minutes: 0, isPast: true });\r\n return;\r\n }\r\n\r\n const diffSeconds = Math.floor(diffMs / 1000);\r\n\r\n const days = Math.floor(diffSeconds / (3600 * 24));\r\n const hours = Math.floor((diffSeconds % (3600 * 24)) / 3600);\r\n const minutes = Math.floor((diffSeconds % 3600) / 60);\r\n\r\n const updated = pick({ days, hours, minutes, isPast: false }, [\r\n 'days',\r\n 'hours',\r\n 'minutes',\r\n 'isPast',\r\n ]);\r\n setTimeRemaining(updated);\r\n }, [activationEndDateTime]);\r\n\r\n useEffect(() => {\r\n calculateRemainingTime();\r\n const interval = setInterval(calculateRemainingTime, 60 * 1000);\r\n return () => clearInterval(interval);\r\n }, [activationEndDateTime, calculateRemainingTime]);\r\n\r\n const timeParts = [\r\n { label: 'Day', value: timeRemaining.days },\r\n { label: 'Hour', value: timeRemaining.hours },\r\n { label: 'Min', value: timeRemaining.minutes },\r\n ];\r\n\r\n const tournamentImage = [\r\n {\r\n image: trophy,\r\n },\r\n {\r\n image: card,\r\n },\r\n {\r\n image: ball,\r\n },\r\n ];\r\n\r\n return (\r\n <div\r\n className={twMerge(\r\n 'bg-gray-50 border-gray-200 flex shrink-0 flex-col space-y-2 rounded-sm border p-3 text-center',\r\n className,\r\n )}\r\n >\r\n <div className=\"flex h-full w-full justify-between\">\r\n <div className=\"border-gray-700 bg-gray-300 flex h-fit w-fit items-center rounded-full border px-2 py-0.5 text-xs font-medium\">\r\n <Award02Icon className=\"size-3.5\" />\r\n Multiplier\r\n </div>\r\n\r\n <div className=\"flex h-fit\">\r\n {timeParts.map((part, idx) => (\r\n <React.Fragment key={part.label}>\r\n <div\r\n className={twMerge(\r\n 'rounded-xs bg-gray-600 text-gray-50 flex h-fit w-8 flex-col items-center pb-1.5',\r\n )}\r\n >\r\n <span className=\"text-base font-medium\">\r\n {String(part.value).padStart(2, '0')}\r\n </span>\r\n <span className=\"text-[8px]\">{part.label}</span>\r\n </div>\r\n\r\n {idx < timeParts.length - 1 && (\r\n <div className=\"flex flex-col justify-center gap-[6px] px-[6px]\">\r\n <div className=\"h-1 w-1 rounded-full bg-[#09232E]\" />\r\n <div className=\"h-1 w-1 rounded-full bg-[#09232E]\" />\r\n </div>\r\n )}\r\n </React.Fragment>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex justify-between\">\r\n <div className=\"flex h-fit flex-col justify-between text-left\">\r\n <div>\r\n <div className=\"text-lg font-semibold\">{tournament.name}</div>\r\n\r\n <div className=\"bg-gray-950 text-gray-300 w-fit rounded-md px-2 py-1 text-2xl font-bold\">\r\n {formatNumber(tournamentReward, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n maxDecimalPlaces: 2,\r\n })}\r\n </div>\r\n </div>\r\n\r\n <div className=\"mt-4 text-base font-medium\">Play and Win!</div>\r\n </div>\r\n\r\n <div className=\"flex h-full items-end\">\r\n <div className=\"h-24 w-auto shrink-0\">\r\n <Image\r\n quality={100}\r\n width={100}\r\n height={100}\r\n src={tournamentImage[index % 3].image}\r\n alt=\"\"\r\n className=\"h-full w-auto\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function Award02Icon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M7 15.0903V22L11.7029 20.1188C11.8126 20.0749 11.8675 20.053 11.9242 20.0443C11.9744 20.0366 12.0256 20.0366 12.0758 20.0443C12.1325 20.053 12.1874 20.0749 12.2971 20.1188L17 22V15.0903M19.5 9.5C19.5 13.6421 16.1421 17 12 17C7.85786 17 4.5 13.6421 4.5 9.5C4.5 5.35786 7.85786 2 12 2C16.1421 2 19.5 5.35786 19.5 9.5Z\" />\r\n </svg>\r\n );\r\n}\r\n","import { TournamentCounterContent } from './TournamentCounterContent';\r\n\r\nexport interface TournamentCounterProps {\r\n className?: string;\r\n heading: string;\r\n seeAllUrl: string;\r\n}\r\n\r\nexport async function TournamentCounter(props: TournamentCounterProps) {\r\n /*\r\n await prefetchTournamentsQuery({\r\n first: 100,\r\n filter: {\r\n status: {\r\n equal: 'ACTIVE',\r\n },\r\n },\r\n });\r\n */\r\n\r\n return <TournamentCounterContent {...props} />;\r\n}\r\n","'use client';\r\n\r\nimport { createListCollection, Portal } from '@ark-ui/react';\r\nimport { tz, TZDateMini } from '@date-fns/tz';\r\nimport { type DepositStatus } from '@opexa/portal-sdk-core';\r\nimport { endOfDay, format, startOfDay } from 'date-fns';\r\nimport { useState } from 'react';\r\nimport { useDepositRecordsQuery } from '../../hooks/useDepositRecordsQuery/useDepositRecordsQuery';\r\nimport { useInfiniteQueryHelper } from '../../hooks/useInfiniteQueryHelper';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { ChevronDownIcon } from '../../icons/ChevronDownIcon';\r\nimport { ChevronLeftIcon } from '../../icons/ChevronLeftIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { File02Icon } from '../../icons/File02Icon';\r\nimport { SpinnerIcon } from '../../icons/SpinnerIcon';\r\nimport type { DateRange } from '../../types';\r\nimport { Badge, IconButton, Select, Table } from '../../ui';\r\nimport { capitalize } from '../../utils/capitalize';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\nimport { Empty } from '../Empty';\r\nimport { TableFilters } from './TableFilters';\r\n\r\nexport function DepositRecordsTable() {\r\n const [timestamp, setTimestamp] = useState<Partial<DateRange> | null>();\r\n const [depositStatus, setDepositStatus] = useState<DepositStatus | null>();\r\n\r\n const localeInfo = useLocaleInfo();\r\n\r\n const {\r\n page,\r\n pageSize,\r\n hasNextPage,\r\n hasPrevPage,\r\n next,\r\n prev,\r\n rows,\r\n setPageSize,\r\n totalPages,\r\n loading,\r\n firstPage,\r\n } = useInfiniteQueryHelper(useDepositRecordsQuery, {\r\n filter: {\r\n ...(depositStatus && {\r\n status: {\r\n equal: depositStatus,\r\n },\r\n }),\r\n ...(timestamp && {\r\n dateTimeCreated: {\r\n ...(timestamp.start && {\r\n greaterThanOrEqual: new TZDateMini(\r\n startOfDay(timestamp.start),\r\n localeInfo.timezone,\r\n ).toISOString(),\r\n }),\r\n ...(timestamp.end && {\r\n lesserThanOrEqual: new TZDateMini(\r\n endOfDay(timestamp.end),\r\n localeInfo.timezone,\r\n ).toISOString(),\r\n }),\r\n },\r\n }),\r\n },\r\n });\r\n\r\n return (\r\n <>\r\n <TableFilters\r\n enabledFilters={{\r\n depositStatus: true,\r\n }}\r\n value={{\r\n timestamp,\r\n depositStatus,\r\n }}\r\n onChange={(value) => {\r\n firstPage();\r\n setTimestamp(value.timestamp);\r\n setDepositStatus(value.depositStatus);\r\n }}\r\n />\r\n\r\n {rows.length <= 0 && (\r\n <Empty\r\n icon={loading ? SpinnerIcon : File02Icon}\r\n title={loading ? 'Just a moment' : 'No data'}\r\n message={\r\n loading\r\n ? 'Fetching latest deposit records...'\r\n : 'No data is currently available.'\r\n }\r\n className=\"mt-8 lg:mt-16\"\r\n />\r\n )}\r\n\r\n {rows.length >= 1 && (\r\n <div className=\"border-gray-200 mt-lg rounded-xl border\">\r\n <div className=\"border-gray-200 overflow-hidden overflow-x-auto rounded-xl border-b\">\r\n <Table.Root className=\"border-0\">\r\n <Table.Header>\r\n <Table.Row>\r\n <Table.Heading>Deposit No.</Table.Heading>\r\n <Table.Heading>Reference</Table.Heading>\r\n <Table.Heading>Deposit Method</Table.Heading>\r\n <Table.Heading>Applied Amount</Table.Heading>\r\n <Table.Heading>Recieved Amount</Table.Heading>\r\n <Table.Heading>Transaction Fee</Table.Heading>\r\n <Table.Heading>Deposit Time</Table.Heading>\r\n <Table.Heading>Recieved Time</Table.Heading>\r\n <Table.Heading>Status</Table.Heading>\r\n </Table.Row>\r\n </Table.Header>\r\n\r\n <Table.Body>\r\n {rows.map((data) => (\r\n <Table.Row key={data.id}>\r\n <Table.Cell>{data.depositNumber}</Table.Cell>\r\n <Table.Cell>{data.reference}</Table.Cell>\r\n <Table.Cell>\r\n {capitalize(data.type, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.amount, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.netAmount, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.fee, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {format(data.dateTimeCreated, 'yyyy MMM dd hh:mma', {\r\n in: tz(localeInfo.timezone),\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {(data.status === 'CONFIRMED' ||\r\n data.status === 'APPROVED') &&\r\n format(data.dateTimeLastUpdated, 'yyyy MMM dd hh:mma', {\r\n in: tz(localeInfo.timezone),\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n <Badge.Root\r\n variant=\"subtle\"\r\n colorScheme={\r\n data.status === 'FAILED' ||\r\n data.status === 'REJECTED' ||\r\n data.status === 'CANCELLED'\r\n ? 'danger'\r\n : data.status === 'PENDING'\r\n ? 'warning'\r\n : 'success'\r\n }\r\n >\r\n <Badge.Label>\r\n {capitalize(data.status, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Badge.Label>\r\n </Badge.Root>\r\n </Table.Cell>\r\n </Table.Row>\r\n ))}\r\n </Table.Body>\r\n </Table.Root>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-lg px-4 py-3\">\r\n <p>\r\n Page {page} of {totalPages}\r\n </p>\r\n <div className=\"grow\"></div>\r\n <Select.Root\r\n size=\"sm\"\r\n value={[pageSize.toString()]}\r\n onValueChange={(details) => {\r\n const n = parseInt(details.value[0]);\r\n const v = isNaN(n) ? 10 : n;\r\n\r\n setPageSize(v);\r\n }}\r\n collection={pageSizeCollection}\r\n lazyMount\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n {pageSizeCollection.items.map((item) => (\r\n <Select.Item key={item} item={item}>\r\n {pageSizeCollection.stringifyItem(item)}\r\n </Select.Item>\r\n ))}\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Trigger>\r\n </Select.Root>\r\n <div>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n disabled={!hasPrevPage || loading}\r\n onClick={() => prev()}\r\n >\r\n <ChevronLeftIcon className=\"size-5\" />\r\n </IconButton>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n disabled={!hasNextPage || loading}\r\n onClick={() => next()}\r\n >\r\n <ChevronRightIcon className=\"size-5\" />\r\n </IconButton>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nconst pageSizeCollection = createListCollection({\r\n items: useInfiniteQueryHelper.config.pageSizes,\r\n itemToValue: (item) => item.toString(),\r\n itemToString: (item) => `${item} items per page`,\r\n});\r\n","import {\r\n type DepositRecord,\r\n type DepositRecordsInput,\r\n getDepositRecords,\r\n type PaginatedQueryResult,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useInfiniteQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { InfiniteQuery } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getDepositRecordsQueryKey } from './getDepositRecordsQueryKey';\r\n\r\nexport const useDepositRecordsQuery: InfiniteQuery<\r\n PaginatedQueryResult<DepositRecord>,\r\n DepositRecordsInput\r\n> = (input, config) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n const query = useInfiniteQuery({\r\n ...config,\r\n enabled:\r\n config?.enabled === false\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated',\r\n queryKey: getDepositRecordsQueryKey(input),\r\n queryFn: async ({ pageParam, signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getDepositRecords(\r\n { ...input, after: pageParam },\r\n {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n getNextPageParam(lastPage) {\r\n if (lastPage?.pageInfo?.hasNextPage) {\r\n return lastPage?.pageInfo?.endCursor;\r\n }\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { DepositRecordsInput } from '@opexa/portal-sdk-core';\nimport type { QueryKey } from '@tanstack/react-query';\n\nexport const getDepositRecordsQueryKey = (input?: DepositRecordsInput): QueryKey => [\n 'queries/depositRecords',\n input,\n];\n","import { createListCollection, parseDate, Portal } from '@ark-ui/react';\r\nimport type {\r\n DepositStatus,\r\n GameProvider,\r\n GameType,\r\n WithdrawalStatus,\r\n} from '@opexa/portal-sdk-core';\r\nimport { endOfDay, startOfDay } from 'date-fns';\r\nimport { useState } from 'react';\r\nimport { z } from 'zod';\r\nimport { useControllableState } from '../../hooks/useControllableState';\r\nimport { CheckIcon } from '../../icons/CheckIcon';\r\nimport { ChevronDownIcon } from '../../icons/ChevronDownIcon';\r\nimport { ChevronLeftIcon } from '../../icons/ChevronLeftIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport type { DateRange } from '../../types';\r\nimport { DatePicker, SegmentGroup, Select } from '../../ui';\r\nimport { capitalize } from '../../utils/capitalize';\r\n\r\nconst TabDefinition = z.enum(['all', 'today', 'custom']).catch('all');\r\ntype Tab = z.infer<typeof TabDefinition>;\r\n\r\ninterface EnabledFilters {\r\n timestamp?: boolean;\r\n gameType?: boolean;\r\n gameProvider?: boolean;\r\n depositStatus?: boolean;\r\n withdrawalStatus?: boolean;\r\n}\r\n\r\ninterface Value {\r\n timestamp?: Partial<DateRange> | null;\r\n gameType?: GameType | null;\r\n gameProvider?: GameProvider | null;\r\n depositStatus?: DepositStatus | null;\r\n withdrawalStatus?: WithdrawalStatus | null;\r\n}\r\n\r\ninterface TableFiltersProps {\r\n value?: Value;\r\n defaultValue?: Value;\r\n onChange?: (value: Value) => void;\r\n enabledFilters?: EnabledFilters;\r\n gameTypeOptions?: GameType[];\r\n gameProviderOptions?: GameProvider[];\r\n}\r\n\r\nconst DEPOSIT_STATUSES = [\r\n 'ACCEPTED',\r\n 'APPROVED',\r\n 'CANCELLED',\r\n 'CONFIRMED',\r\n 'FAILED',\r\n 'PENDING',\r\n 'REJECTED',\r\n] as const satisfies DepositStatus[];\r\n\r\nconst WITHDRAWAL_STATUSES = [\r\n 'ACCEPTED',\r\n 'APPROVED',\r\n 'CANCELLED',\r\n 'CONFIRMED',\r\n 'FAILED',\r\n 'PENDING',\r\n 'REJECTED',\r\n] as const satisfies WithdrawalStatus[];\r\n\r\nconst deviceTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n\r\nexport function TableFilters(props: TableFiltersProps) {\r\n const gameTypeCollection = createListCollection({\r\n items: props.gameTypeOptions ?? [],\r\n itemToValue: (item) => item,\r\n itemToString: (item) =>\r\n capitalize(item, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n }),\r\n });\r\n\r\n const gameProviderCollection = createListCollection({\r\n items: props.gameProviderOptions ?? [],\r\n itemToValue: (item) => item,\r\n itemToString: (item) =>\r\n capitalize(item, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n }),\r\n });\r\n\r\n const depositStatusCollection = createListCollection({\r\n items: DEPOSIT_STATUSES,\r\n itemToValue: (item) => item,\r\n itemToString: (item) =>\r\n capitalize(item, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n }),\r\n });\r\n\r\n const withdrawalStatusCollection = createListCollection({\r\n items: WITHDRAWAL_STATUSES,\r\n itemToValue: (item) => item,\r\n itemToString: (item) =>\r\n capitalize(item, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n }),\r\n });\r\n\r\n const [tab, setTab] = useState<Tab>('all');\r\n\r\n const handleChange = (next: Value) => {\r\n const prev = {\r\n timestamp,\r\n gameType,\r\n gameProvider,\r\n depositStatus,\r\n withdrawalStatus,\r\n };\r\n\r\n props.onChange?.({\r\n ...prev,\r\n ...next,\r\n });\r\n };\r\n\r\n const [timestamp, setTimestamp] = useControllableState({\r\n value: props.value?.timestamp,\r\n defaultValue: props.defaultValue?.timestamp ?? null,\r\n onChange(timestamp) {\r\n handleChange({ timestamp });\r\n },\r\n });\r\n\r\n const [gameType, setGameType] = useControllableState({\r\n value: props.value?.gameType,\r\n defaultValue: props.defaultValue?.gameType ?? null,\r\n onChange(gameType) {\r\n handleChange({ gameType });\r\n },\r\n });\r\n\r\n const [gameProvider, setGameProvider] = useControllableState({\r\n value: props.value?.gameProvider,\r\n defaultValue: props.defaultValue?.gameProvider ?? null,\r\n onChange(gameProvider) {\r\n handleChange({ gameProvider });\r\n },\r\n });\r\n\r\n const [depositStatus, setDepositStatus] = useControllableState({\r\n value: props.value?.depositStatus,\r\n defaultValue: props.defaultValue?.depositStatus ?? null,\r\n onChange(depositStatus) {\r\n handleChange({ depositStatus });\r\n },\r\n });\r\n\r\n const [withdrawalStatus, setWithdrawalStatus] = useControllableState({\r\n value: props.value?.withdrawalStatus,\r\n defaultValue: props.defaultValue?.withdrawalStatus ?? null,\r\n onChange(withdrawalStatus) {\r\n handleChange({ withdrawalStatus });\r\n },\r\n });\r\n\r\n return (\r\n <div className=\"flex items-center gap-lg\">\r\n <DatePicker.Root\r\n lazyMount\r\n unmountOnExit\r\n value={[timestamp?.start, timestamp?.end]\r\n .filter(Boolean)\r\n .map((d) => parseDate(d))}\r\n onValueChange={(details) => {\r\n setTimestamp({\r\n start: details.value.at(0)?.toDate(deviceTimezone),\r\n end: details.value.at(1)?.toDate(deviceTimezone),\r\n });\r\n }}\r\n onOpenChange={(details) => {\r\n if (details.open) return;\r\n if (timestamp) return;\r\n setTab('all');\r\n }}\r\n selectionMode=\"range\"\r\n closeOnSelect={false}\r\n positioning={{\r\n gutter: 20,\r\n placement: 'bottom',\r\n }}\r\n >\r\n <SegmentGroup.Root\r\n value={tab}\r\n onValueChange={(details) => {\r\n const value = TabDefinition.parse(details.value);\r\n\r\n if (value === 'today') {\r\n const now = new Date();\r\n\r\n setTimestamp({\r\n start: startOfDay(now),\r\n end: endOfDay(now),\r\n });\r\n } else {\r\n setTimestamp(null);\r\n }\r\n\r\n setTab(value);\r\n }}\r\n >\r\n <SegmentGroup.Item value=\"all\">\r\n <SegmentGroup.ItemText>All</SegmentGroup.ItemText>\r\n <SegmentGroup.ItemControl />\r\n <SegmentGroup.ItemHiddenInput />\r\n </SegmentGroup.Item>\r\n <SegmentGroup.Item value=\"today\">\r\n <SegmentGroup.ItemText>Today</SegmentGroup.ItemText>\r\n <SegmentGroup.ItemControl />\r\n <SegmentGroup.ItemHiddenInput />\r\n </SegmentGroup.Item>\r\n\r\n <DatePicker.Context>\r\n {(api) => (\r\n <SegmentGroup.Item\r\n value=\"custom\"\r\n onClick={() => api.setOpen(true)}\r\n >\r\n <DatePicker.Control>\r\n <SegmentGroup.ItemText>Custom</SegmentGroup.ItemText>\r\n <SegmentGroup.ItemControl />\r\n <SegmentGroup.ItemHiddenInput />\r\n </DatePicker.Control>\r\n </SegmentGroup.Item>\r\n )}\r\n </DatePicker.Context>\r\n\r\n <SegmentGroup.Indicator />\r\n </SegmentGroup.Root>\r\n <Portal>\r\n <DatePicker.Positioner>\r\n <DatePicker.Content>\r\n <DatePicker.View view=\"day\">\r\n <DatePicker.Context>\r\n {(api) => (\r\n <>\r\n <DatePicker.ViewControl>\r\n <DatePicker.PrevTrigger>\r\n <ChevronLeftIcon />\r\n </DatePicker.PrevTrigger>\r\n <DatePicker.ViewTrigger>\r\n <DatePicker.RangeText />\r\n </DatePicker.ViewTrigger>\r\n <DatePicker.NextTrigger>\r\n <ChevronRightIcon />\r\n </DatePicker.NextTrigger>\r\n </DatePicker.ViewControl>\r\n <DatePicker.Table>\r\n <DatePicker.TableHead>\r\n <DatePicker.TableRow>\r\n {api.weekDays.map((weekDay, id) => (\r\n <DatePicker.TableHeader key={id}>\r\n {weekDay.short.substring(0, 2)}\r\n </DatePicker.TableHeader>\r\n ))}\r\n </DatePicker.TableRow>\r\n </DatePicker.TableHead>\r\n <DatePicker.TableBody>\r\n {api.weeks.map((week, id) => (\r\n <DatePicker.TableRow key={id}>\r\n {week.map((day, id) => (\r\n <DatePicker.TableCell key={id} value={day}>\r\n <DatePicker.TableCellTrigger>\r\n {day.day}\r\n </DatePicker.TableCellTrigger>\r\n </DatePicker.TableCell>\r\n ))}\r\n </DatePicker.TableRow>\r\n ))}\r\n </DatePicker.TableBody>\r\n </DatePicker.Table>\r\n </>\r\n )}\r\n </DatePicker.Context>\r\n </DatePicker.View>\r\n </DatePicker.Content>\r\n </DatePicker.Positioner>\r\n </Portal>\r\n </DatePicker.Root>\r\n\r\n <div className=\"grow\" />\r\n\r\n {props.enabledFilters?.gameType && (\r\n <Select.Root\r\n collection={gameTypeCollection}\r\n value={gameType ? [gameType] : []}\r\n onValueChange={(details) => {\r\n const value = z\r\n .enum((props.gameTypeOptions ?? []) as [GameType])\r\n .safeParse(details.value.at(0)).data;\r\n setGameType(value ?? null);\r\n }}\r\n lazyMount\r\n deselectable\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText placeholder=\"Game Type\" />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n </Select.Trigger>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n <Select.ItemGroup>\r\n {gameTypeCollection.items.map((type) => (\r\n <Select.Item key={type} item={type}>\r\n <Select.ItemText>\r\n {capitalize(type, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Select.ItemText>\r\n <Select.ItemIndicator asChild>\r\n <CheckIcon />\r\n </Select.ItemIndicator>\r\n </Select.Item>\r\n ))}\r\n </Select.ItemGroup>\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Root>\r\n )}\r\n\r\n {props.enabledFilters?.gameProvider && (\r\n <Select.Root\r\n collection={gameProviderCollection}\r\n value={gameProvider ? [gameProvider] : []}\r\n onValueChange={(details) => {\r\n const value = z\r\n .enum((props.gameProviderOptions ?? []) as [GameProvider])\r\n .safeParse(details.value.at(0)).data;\r\n setGameProvider(value ?? null);\r\n }}\r\n lazyMount\r\n deselectable\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText placeholder=\"Game Vendor\" />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n </Select.Trigger>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n <Select.ItemGroup>\r\n {gameProviderCollection.items.map((provider) => (\r\n <Select.Item key={provider} item={provider}>\r\n <Select.ItemText>\r\n {capitalize(provider, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Select.ItemText>\r\n <Select.ItemIndicator asChild>\r\n <CheckIcon />\r\n </Select.ItemIndicator>\r\n </Select.Item>\r\n ))}\r\n </Select.ItemGroup>\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Root>\r\n )}\r\n\r\n {props.enabledFilters?.depositStatus && (\r\n <Select.Root\r\n collection={depositStatusCollection}\r\n value={depositStatus ? [depositStatus] : []}\r\n onValueChange={(details) => {\r\n const value = z\r\n .enum(DEPOSIT_STATUSES)\r\n .safeParse(details.value.at(0)).data;\r\n setDepositStatus(value ?? null);\r\n }}\r\n lazyMount\r\n deselectable\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText placeholder=\"Status\" />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n </Select.Trigger>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n <Select.ItemGroup>\r\n {withdrawalStatusCollection.items.map((status) => (\r\n <Select.Item key={status} item={status}>\r\n <Select.ItemText>\r\n {capitalize(status, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Select.ItemText>\r\n <Select.ItemIndicator asChild>\r\n <CheckIcon />\r\n </Select.ItemIndicator>\r\n </Select.Item>\r\n ))}\r\n </Select.ItemGroup>\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Root>\r\n )}\r\n\r\n {props.enabledFilters?.withdrawalStatus && (\r\n <Select.Root\r\n collection={withdrawalStatusCollection}\r\n value={withdrawalStatus ? [withdrawalStatus] : []}\r\n onValueChange={(details) => {\r\n const value = z\r\n .enum(WITHDRAWAL_STATUSES)\r\n .safeParse(details.value.at(0)).data;\r\n setWithdrawalStatus(value ?? null);\r\n }}\r\n lazyMount\r\n deselectable\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText placeholder=\"Status\" />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n </Select.Trigger>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n <Select.ItemGroup>\r\n {depositStatusCollection.items.map((status) => (\r\n <Select.Item key={status} item={status}>\r\n <Select.ItemText>\r\n {capitalize(status, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Select.ItemText>\r\n <Select.ItemIndicator asChild>\r\n <CheckIcon />\r\n </Select.ItemIndicator>\r\n </Select.Item>\r\n ))}\r\n </Select.ItemGroup>\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Root>\r\n )}\r\n </div>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport { createListCollection, Portal } from '@ark-ui/react';\r\nimport { tz, TZDateMini } from '@date-fns/tz';\r\nimport { endOfDay, format, startOfDay } from 'date-fns';\r\nimport { useState } from 'react';\r\nimport { useInfiniteQueryHelper } from '../../hooks/useInfiniteQueryHelper';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useTransactionRecordsQuery } from '../../hooks/useTransactionRecordsQuery/useTransactionRecordsQuery';\r\nimport { ChevronDownIcon } from '../../icons/ChevronDownIcon';\r\nimport { ChevronLeftIcon } from '../../icons/ChevronLeftIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { File02Icon } from '../../icons/File02Icon';\r\nimport { SpinnerIcon } from '../../icons/SpinnerIcon';\r\nimport type { DateRange } from '../../types';\r\nimport { IconButton, Select, Table } from '../../ui';\r\nimport { capitalize } from '../../utils/capitalize';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\nimport { Empty } from '../Empty';\r\nimport { TableFilters } from './TableFilters';\r\n\r\nexport function TransactionRecordsTable() {\r\n const [timestamp, setTimestamp] = useState<Partial<DateRange> | null>();\r\n\r\n const localeInfo = useLocaleInfo();\r\n\r\n const {\r\n page,\r\n pageSize,\r\n hasNextPage,\r\n hasPrevPage,\r\n next,\r\n prev,\r\n rows,\r\n setPageSize,\r\n totalPages,\r\n loading,\r\n firstPage,\r\n } = useInfiniteQueryHelper(useTransactionRecordsQuery, {\r\n filter: {\r\n ...(timestamp && {\r\n dateTimeCreated: {\r\n ...(timestamp.start && {\r\n greaterThanOrEqual: new TZDateMini(\r\n startOfDay(timestamp.start),\r\n localeInfo.timezone,\r\n ).toISOString(),\r\n }),\r\n ...(timestamp.end && {\r\n lesserThanOrEqual: new TZDateMini(\r\n endOfDay(timestamp.end),\r\n localeInfo.timezone,\r\n ).toISOString(),\r\n }),\r\n },\r\n }),\r\n },\r\n });\r\n\r\n return (\r\n <>\r\n <TableFilters\r\n value={{\r\n timestamp,\r\n }}\r\n onChange={(value) => {\r\n setTimestamp(value.timestamp);\r\n firstPage();\r\n }}\r\n />\r\n\r\n {rows.length <= 0 && (\r\n <Empty\r\n icon={loading ? SpinnerIcon : File02Icon}\r\n title={loading ? 'Just a moment' : 'No data'}\r\n message={\r\n loading\r\n ? 'Fetching latest transaction records...'\r\n : 'No data is currently available.'\r\n }\r\n className=\"mt-8 lg:mt-16\"\r\n />\r\n )}\r\n\r\n {rows.length >= 1 && (\r\n <div className=\"border-gray-200 mt-lg rounded-xl border\">\r\n <div className=\"border-gray-200 overflow-hidden overflow-x-auto rounded-xl border-b\">\r\n <Table.Root className=\"border-0\">\r\n <Table.Header>\r\n <Table.Row>\r\n <Table.Heading>Transaction Type</Table.Heading>\r\n <Table.Heading>Transaction Time</Table.Heading>\r\n <Table.Heading>Amount</Table.Heading>\r\n <Table.Heading>Current Balance</Table.Heading>\r\n <Table.Heading>Reference Number</Table.Heading>\r\n <Table.Heading>Content</Table.Heading>\r\n </Table.Row>\r\n </Table.Header>\r\n\r\n <Table.Body>\r\n {rows.map((data) => (\r\n <Table.Row key={data.id}>\r\n <Table.Cell>\r\n {capitalize(data.type, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {format(data.dateTimeCreated, 'yyyy MMM dd hh:mma', {\r\n in: tz(localeInfo.timezone),\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.amount, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.currentBalance, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>{data.referenceNumber}</Table.Cell>\r\n <Table.Cell>{data.content}</Table.Cell>\r\n </Table.Row>\r\n ))}\r\n </Table.Body>\r\n </Table.Root>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-lg px-4 py-3\">\r\n <p>\r\n Page {page} of {totalPages}\r\n </p>\r\n <div className=\"grow\"></div>\r\n <Select.Root\r\n size=\"sm\"\r\n value={[pageSize.toString()]}\r\n onValueChange={(details) => {\r\n const n = parseInt(details.value[0]);\r\n const v = isNaN(n) ? 10 : n;\r\n\r\n setPageSize(v);\r\n }}\r\n collection={pageSizeCollection}\r\n lazyMount\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n {pageSizeCollection.items.map((item) => (\r\n <Select.Item key={item} item={item}>\r\n {pageSizeCollection.stringifyItem(item)}\r\n </Select.Item>\r\n ))}\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Trigger>\r\n </Select.Root>\r\n <div>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n disabled={!hasPrevPage || loading}\r\n onClick={() => prev()}\r\n >\r\n <ChevronLeftIcon className=\"size-5\" />\r\n </IconButton>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n disabled={!hasNextPage || loading}\r\n onClick={() => next()}\r\n >\r\n <ChevronRightIcon className=\"size-5\" />\r\n </IconButton>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nconst pageSizeCollection = createListCollection({\r\n items: useInfiniteQueryHelper.config.pageSizes,\r\n itemToValue: (item) => item.toString(),\r\n itemToString: (item) => `${item} items per page`,\r\n});\r\n","import {\r\n getTransactionRecords,\r\n type PaginatedQueryResult,\r\n type TransactionRecord,\r\n type TransactionRecordsInput,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useInfiniteQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { InfiniteQuery } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getTransactionRecordsQueryKey } from './getTransactionRecordsQueryKey';\r\n\r\nexport const useTransactionRecordsQuery: InfiniteQuery<\r\n PaginatedQueryResult<TransactionRecord>,\r\n TransactionRecordsInput\r\n> = (input, config) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n const query = useInfiniteQuery({\r\n ...config,\r\n enabled:\r\n config?.enabled === false\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated',\r\n queryKey: getTransactionRecordsQueryKey(input),\r\n queryFn: async ({ pageParam, signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return getTransactionRecords(\r\n { ...input, after: pageParam },\r\n {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n getNextPageParam(lastPage) {\r\n if (lastPage?.pageInfo?.hasNextPage) {\r\n return lastPage?.pageInfo?.endCursor;\r\n }\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { TransactionRecordsInput } from '@opexa/portal-sdk-core';\nimport type { QueryKey } from '@tanstack/react-query';\n\nexport const getTransactionRecordsQueryKey = (input?: TransactionRecordsInput): QueryKey => [\n 'queries/transactionRecords',\n input,\n];\n","'use client';\r\n\r\nimport { createListCollection, Portal } from '@ark-ui/react';\r\nimport { tz, TZDateMini } from '@date-fns/tz';\r\nimport type { WithdrawalStatus } from '@opexa/portal-sdk-core';\r\nimport { endOfDay, format, startOfDay } from 'date-fns';\r\nimport { useState } from 'react';\r\nimport { useInfiniteQueryHelper } from '../../hooks/useInfiniteQueryHelper';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useWithdrawalRecordsQuery } from '../../hooks/useWithdrawalRecordsQuery/useWithdrawalRecordsQuery';\r\nimport { ChevronDownIcon } from '../../icons/ChevronDownIcon';\r\nimport { ChevronLeftIcon } from '../../icons/ChevronLeftIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { File02Icon } from '../../icons/File02Icon';\r\nimport { SpinnerIcon } from '../../icons/SpinnerIcon';\r\nimport type { DateRange } from '../../types';\r\nimport { Badge, IconButton, Select, Table } from '../../ui';\r\nimport { capitalize } from '../../utils/capitalize';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\nimport { Empty } from '../Empty';\r\nimport { TableFilters } from './TableFilters';\r\n\r\nexport function WithdrawalRecordsTable() {\r\n const [timestamp, setTimestamp] = useState<Partial<DateRange> | null>();\r\n const [withdrawalStatus, setWithdrawalStatus] =\r\n useState<WithdrawalStatus | null>();\r\n\r\n const localeInfo = useLocaleInfo();\r\n\r\n const {\r\n page,\r\n pageSize,\r\n hasNextPage,\r\n hasPrevPage,\r\n next,\r\n prev,\r\n rows,\r\n setPageSize,\r\n totalPages,\r\n loading,\r\n firstPage,\r\n } = useInfiniteQueryHelper(useWithdrawalRecordsQuery, {\r\n filter: {\r\n ...(withdrawalStatus && {\r\n status: {\r\n equal: withdrawalStatus,\r\n },\r\n }),\r\n ...(timestamp && {\r\n dateTimeCreated: {\r\n ...(timestamp.start && {\r\n greaterThanOrEqual: new TZDateMini(\r\n startOfDay(timestamp.start),\r\n localeInfo.timezone,\r\n ).toISOString(),\r\n }),\r\n ...(timestamp.end && {\r\n lesserThanOrEqual: new TZDateMini(\r\n endOfDay(timestamp.end),\r\n localeInfo.timezone,\r\n ).toISOString(),\r\n }),\r\n },\r\n }),\r\n },\r\n });\r\n\r\n return (\r\n <>\r\n <TableFilters\r\n enabledFilters={{\r\n withdrawalStatus: true,\r\n }}\r\n value={{\r\n timestamp,\r\n withdrawalStatus,\r\n }}\r\n onChange={(value) => {\r\n firstPage();\r\n setTimestamp(value.timestamp);\r\n setWithdrawalStatus(value.withdrawalStatus);\r\n }}\r\n />\r\n\r\n {rows.length <= 0 && (\r\n <Empty\r\n icon={loading ? SpinnerIcon : File02Icon}\r\n title={loading ? 'Just a moment' : 'No data'}\r\n message={\r\n loading\r\n ? 'Fetching latest withdrawal records...'\r\n : 'No data is currently available.'\r\n }\r\n className=\"mt-8 lg:mt-16\"\r\n />\r\n )}\r\n\r\n {rows.length >= 1 && (\r\n <div className=\"border-gray-200 mt-lg rounded-xl border\">\r\n <div className=\"border-gray-200 overflow-hidden overflow-x-auto rounded-xl border-b\">\r\n <Table.Root className=\"border-0\">\r\n <Table.Header>\r\n <Table.Row>\r\n <Table.Heading>Withdrawal No.</Table.Heading>\r\n <Table.Heading>Reference</Table.Heading>\r\n <Table.Heading>Withdrawal Method</Table.Heading>\r\n <Table.Heading>Mobile Number</Table.Heading>\r\n <Table.Heading>Withdrawal Amount</Table.Heading>\r\n <Table.Heading>Net Amount</Table.Heading>\r\n <Table.Heading>Transaction Fee</Table.Heading>\r\n <Table.Heading>Bank Name</Table.Heading>\r\n <Table.Heading>Withdrawal Time</Table.Heading>\r\n <Table.Heading>Status</Table.Heading>\r\n </Table.Row>\r\n </Table.Header>\r\n\r\n <Table.Body>\r\n {rows.map((data) => (\r\n <Table.Row key={data.id}>\r\n <Table.Cell>{data.withdrawalNumber}</Table.Cell>\r\n <Table.Cell>{data.reference}</Table.Cell>\r\n <Table.Cell>\r\n {capitalize(data.type, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>{data.recipientMobileNumber}</Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.amount, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.netAmount, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.fee, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>{data.bank}</Table.Cell>\r\n <Table.Cell>\r\n {format(data.dateTimeCreated, 'yyyy MMM dd hh:mma', {\r\n in: tz(localeInfo.timezone),\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n <Badge.Root\r\n variant=\"subtle\"\r\n colorScheme={\r\n data.status === 'FAILED' ||\r\n data.status === 'REJECTED' ||\r\n data.status === 'CANCELLED'\r\n ? 'danger'\r\n : data.status === 'PENDING'\r\n ? 'warning'\r\n : 'success'\r\n }\r\n >\r\n <Badge.Label>\r\n {capitalize(data.status, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Badge.Label>\r\n </Badge.Root>\r\n </Table.Cell>\r\n </Table.Row>\r\n ))}\r\n </Table.Body>\r\n </Table.Root>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-lg px-4 py-3\">\r\n <p>\r\n Page {page} of {totalPages}\r\n </p>\r\n <div className=\"grow\"></div>\r\n <Select.Root\r\n size=\"sm\"\r\n value={[pageSize.toString()]}\r\n onValueChange={(details) => {\r\n const n = parseInt(details.value[0]);\r\n const v = isNaN(n) ? 10 : n;\r\n\r\n setPageSize(v);\r\n }}\r\n collection={pageSizeCollection}\r\n lazyMount\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n {pageSizeCollection.items.map((item) => (\r\n <Select.Item key={item} item={item}>\r\n {pageSizeCollection.stringifyItem(item)}\r\n </Select.Item>\r\n ))}\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Trigger>\r\n </Select.Root>\r\n <div>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n disabled={!hasPrevPage || loading}\r\n onClick={() => prev()}\r\n >\r\n <ChevronLeftIcon className=\"size-5\" />\r\n </IconButton>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n disabled={!hasNextPage || loading}\r\n onClick={() => next()}\r\n >\r\n <ChevronRightIcon className=\"size-5\" />\r\n </IconButton>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nconst pageSizeCollection = createListCollection({\r\n items: useInfiniteQueryHelper.config.pageSizes,\r\n itemToValue: (item) => item.toString(),\r\n itemToString: (item) => `${item} items per page`,\r\n});\r\n","import {\r\n getWithdrawalRecords,\r\n type PaginatedQueryResult,\r\n type WithdrawalRecord,\r\n type WithdrawalRecordsInput,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useInfiniteQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { InfiniteQuery } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getWithdrawalRecordsQueryKey } from './getWithdrawalRecordsQueryKey';\r\n\r\nexport const useWithdrawalRecordsQuery: InfiniteQuery<\r\n PaginatedQueryResult<WithdrawalRecord>,\r\n WithdrawalRecordsInput\r\n> = (input, config) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n const query = useInfiniteQuery({\r\n ...config,\r\n enabled:\r\n config?.enabled === false\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated',\r\n queryKey: getWithdrawalRecordsQueryKey(input),\r\n queryFn: async ({ pageParam, signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getWithdrawalRecords(\r\n { ...input, after: pageParam },\r\n {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n getNextPageParam(lastPage) {\r\n if (lastPage?.pageInfo?.hasNextPage) {\r\n return lastPage?.pageInfo?.endCursor;\r\n }\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { WithdrawalRecordsInput } from '@opexa/portal-sdk-core';\nimport type { QueryKey } from '@tanstack/react-query';\n\nexport const getWithdrawalRecordsQueryKey = (input?: WithdrawalRecordsInput): QueryKey => [\n 'queries/withdrawalRecords',\n input,\n];\n","import type { GameProvider, GameType } from '@opexa/portal-sdk-core';\r\nimport { Tabs } from '../../ui';\r\nimport { DepositRecordsTable } from './DepositRecordsTable';\r\nimport { TransactionRecordsTable } from './TransactionRecordsTable';\r\nimport { WithdrawalRecordsTable } from './WithdrawalRecordsTable';\r\n\r\nexport interface TransactionRecordsProps {\r\n gameTypes: GameType[];\r\n gameProviders: GameProvider[];\r\n className?: string;\r\n}\r\n\r\nexport function TransactionRecords(props: TransactionRecordsProps) {\r\n return (\r\n <div className={props.className}>\r\n <h2 className=\"text-lg font-semibold\">Transaction Records</h2>\r\n <p className=\"text-gray-600 mt-xs text-xs\">\r\n View your transaction records\r\n </p>\r\n\r\n <Tabs.Root\r\n className=\"mt-2xl\"\r\n defaultValue=\"transactions\"\r\n lazyMount\r\n unmountOnExit\r\n >\r\n <div className=\"pb-2xl\">\r\n <Tabs.List>\r\n <Tabs.Trigger value=\"transactions\">Transactions</Tabs.Trigger>\r\n <Tabs.Trigger value=\"deposits\">Deposits</Tabs.Trigger>\r\n <Tabs.Trigger value=\"withdrawals\">Withdrawals</Tabs.Trigger>\r\n <Tabs.Indicator />\r\n </Tabs.List>\r\n </div>\r\n\r\n <Tabs.Content value=\"transactions\" className=\"mt-4xl\">\r\n <TransactionRecordsTable />\r\n </Tabs.Content>\r\n <Tabs.Content value=\"deposits\" className=\"mt-4xl\">\r\n <DepositRecordsTable />\r\n </Tabs.Content>\r\n <Tabs.Content value=\"withdrawals\" className=\"mt-4xl\">\r\n <WithdrawalRecordsTable />\r\n </Tabs.Content>\r\n </Tabs.Root>\r\n </div>\r\n );\r\n}\r\n"],"mappings":"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","names":["useQuery","useQuery","cache","useQuery","useQuery","useQuery","invariant","useQuery","invariant","Link","Link","Portal","useState","z","invariant","invariant","_a","useState","useQuery","page","prev","useState","prev","next","z","_a","_b","Portal","id","Portal","twMerge","z","useShallow","useEffect","useState","useQuery","invariant","useQuery","invariant","cache","Image","React","z","_a","Image","Portal","useEffect","z","useShallow","useQuery","invariant","useQuery","invariant","useMutation","invariant","defaultConfig","useMutation","invariant","session","res","useQuery","invariant","useQuery","invariant","twMerge","twMerge","Image","Link","twMerge","useShallow","useShallow","twMerge","Image","Link","useShallow","definition","z","useEffect","_a","Portal","Portal","zodResolver","useEffect","Controller","useForm","z","useShallow","getDeposit","ObjectId","ObjectType","useMutation","invariant","useMutation","ObjectId","ObjectType","invariant","session","getDeposit","res","useShallow","definition","z","useForm","zodResolver","useEffect","Controller","_a","Portal","useState","useEffect","useShallow","Portal","z","twMerge","Portal","Image","useRef","useShallow","useShallow","useRef","Portal","Image","invariant","Portal","useEffect","useLocalStorage","Portal","Portal","Presence","Image","useRef","useShallow","useMutation","invariant","useMutation","invariant","useRef","_a","useShallow","endGameSession","Presence","Portal","Image","useShallow","ObjectId","ObjectType","useMutation","invariant","useMutation","ObjectId","ObjectType","invariant","session","useShallow","_a","_b","useEmblaCarousel","Image","Link","useCallback","useEffect","useState","twMerge","getGames","useInfiniteQuery","useInfiniteQuery","getGames","useEmblaCarousel","useState","useCallback","emblaApi","useEffect","Link","twMerge","Image","useEmblaCarousel","Link","useCallback","useEffect","useState","useInfiniteQuery","useInfiniteQuery","Image","twMerge","twMerge","Image","useEmblaCarousel","useCallback","useState","useEffect","Link","twMerge","getPlatform","getPlatform","getSession","getSession","getWallet","getSession","getWallet","twMerge","twMerge","useEmblaCarousel","Link","useCallback","useEffect","useState","twMerge","getPromos","useQuery","useQuery","getPromos","Image","useRouter","useRouter","Image","useEmblaCarousel","useState","useCallback","emblaApi","useEffect","Link","twMerge","Portal","Image","useShallow","zodResolver","useState","Controller","useForm","z","useShallow","clamp","useCallback","useEffect","useState","format","useMutation","useMutation","useMutation","useMutation","useState","useShallow","z","useForm","zodResolver","Controller","useShallow","Portal","Image","Portal","Image","useShallow","useDialogContext","zodResolver","ObjectId","ObjectType","useSearchParams","useState","Controller","useForm","z","useShallow","useMutation","useMutation","useState","useDialogContext","useSearchParams","useShallow","z","useForm","zodResolver","Controller","ObjectId","ObjectType","useShallow","Portal","Image","useEmblaCarousel","Image","useQuery","useQuery","useEmblaCarousel","Image","useEmblaCarousel","Link","useCallback","useEffect","useState","useInfiniteQuery","useInfiniteQuery","Image","React","useEffect","useState","twMerge","useState","React","useEffect","twMerge","Image","useEmblaCarousel","useCallback","useState","useEffect","Link","createListCollection","Portal","tz","TZDateMini","endOfDay","format","startOfDay","useState","useInfiniteQuery","invariant","useInfiniteQuery","invariant","_a","createListCollection","parseDate","Portal","endOfDay","startOfDay","useState","z","TabDefinition","z","createListCollection","useState","_a","timestamp","gameType","gameProvider","depositStatus","withdrawalStatus","parseDate","_b","startOfDay","endOfDay","Portal","id","useState","TZDateMini","startOfDay","endOfDay","format","tz","pageSizeCollection","Portal","createListCollection","createListCollection","Portal","tz","TZDateMini","endOfDay","format","startOfDay","useState","useInfiniteQuery","invariant","useInfiniteQuery","invariant","_a","useState","TZDateMini","startOfDay","endOfDay","format","tz","pageSizeCollection","Portal","createListCollection","createListCollection","Portal","tz","TZDateMini","endOfDay","format","startOfDay","useState","useInfiniteQuery","invariant","useInfiniteQuery","invariant","_a","useState","TZDateMini","startOfDay","endOfDay","format","tz","pageSizeCollection","Portal","createListCollection"]}