@opexa/portal-components 0.0.277 → 0.0.279

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 (312) hide show
  1. package/dist/client/hooks/useGlobalStore.d.ts +16 -6
  2. package/dist/client/hooks/useGlobalStore.js +99 -0
  3. package/dist/client/hooks/useJackpotsQuery.js +1 -1
  4. package/dist/components/BetRecords/BetRecords.client.js +76 -38
  5. package/dist/components/Bonus/Bonus.client.js +1 -1
  6. package/dist/components/Bonuses/ClaimSpotBonus.lazy.js +6 -2
  7. package/dist/components/Cashback/Cashback.client.js +1 -1
  8. package/dist/components/CustomPromo/CustomPromo.js +1 -1
  9. package/dist/components/Disclaimer/Disclaimer.d.ts +3 -14
  10. package/dist/components/Disclaimer/Disclaimer.js +14 -5
  11. package/dist/components/Disclaimer/DisclaimerV1.d.ts +1 -1
  12. package/dist/components/Disclaimer/DisclaimerV1.js +1 -1
  13. package/dist/components/Disclaimer/DisclaimerV2.d.ts +3 -7
  14. package/dist/components/Disclaimer/DisclaimerV2.js +23 -51
  15. package/dist/components/Disclaimer/useDisclaimer.js +1 -1
  16. package/dist/components/GameLaunch/GameLaunch.lazy.js +1 -1
  17. package/dist/components/GamesSearch/GamesSearch.js +1 -1
  18. package/dist/components/Jackpots/JackpotsCarousel/JackpotsCarouselItem.js +12 -1
  19. package/dist/components/Jackpots/JackpotsCarousel/JackpotsCarouselItem.module.css +184 -184
  20. package/dist/components/Jackpots/JackpotsList/JackpotsListItem.module.css +184 -184
  21. package/dist/components/Jackpots/JackpotsList/JackpotsListItemDesktop.js +12 -1
  22. package/dist/components/KYC/utils.js +18 -18
  23. package/dist/components/News/News.js +1 -1
  24. package/dist/components/PortalProvider/FeatureFlag.js +1 -1
  25. package/dist/components/Promo/Promo.client.js +1 -1
  26. package/dist/components/ResponsibleGaming/ResponsibleGaming.d.ts +3 -0
  27. package/dist/components/ResponsibleGaming/ResponsibleGaming.js +14 -0
  28. package/dist/components/ResponsibleGaming/ResponsibleGaming.lazy.d.ts +8 -0
  29. package/dist/components/ResponsibleGaming/ResponsibleGaming.lazy.js +35 -0
  30. package/dist/components/ResponsibleGaming/index.d.ts +1 -0
  31. package/dist/components/ResponsibleGaming/index.js +1 -0
  32. package/dist/components/Search/Search.lazy.js +1 -1
  33. package/dist/components/SignIn/MobileNumberSignIn.js +32 -26
  34. package/dist/components/SignIn/NameAndPasswordSignIn.js +31 -26
  35. package/dist/components/SignIn/SignIn.lazy.d.ts +4 -7
  36. package/dist/components/SignIn/SignIn.lazy.js +1 -0
  37. package/dist/components/SignUp/SignUp.d.ts +3 -3
  38. package/dist/components/SignUp/SignUp.js +7 -4
  39. package/dist/components/SignUp/SignUpDefault/SignUpDefault.lazy.d.ts +14 -0
  40. package/dist/components/SignUp/SignUpDefault/SignUpDefault.lazy.js +18 -0
  41. package/dist/components/SignUp/SignUpDefault/SignUpDefaultContext.d.ts +6 -0
  42. package/dist/components/SignUp/SignUpDefault/SignUpDefaultContext.js +2 -0
  43. package/dist/components/SignUp/SignUpDefault/SignUpDefaultForm.d.ts +1 -0
  44. package/dist/components/SignUp/{SignUpForm.js → SignUpDefault/SignUpDefaultForm.js} +88 -57
  45. package/dist/components/SignUp/SignUpDefault/SignUpForm.js +3 -7
  46. package/dist/components/SignUp/SignUpKYC/SignUpKYC.lazy.d.ts +5 -8
  47. package/dist/components/SignUp/SignUpKYC/SignUpKYCForm.js +37 -31
  48. package/dist/components/SignUp/SignUpKYC/utils.js +18 -18
  49. package/dist/components/TermsAndConditions/TermsAndConditions.d.ts +2 -0
  50. package/dist/components/TermsAndConditions/TermsAndConditions.js +14 -0
  51. package/dist/components/TermsAndConditions/TermsAndConditions.lazy.d.ts +9 -0
  52. package/dist/components/TermsAndConditions/TermsAndConditions.lazy.js +35 -0
  53. package/dist/components/TermsAndConditions/index.d.ts +1 -0
  54. package/dist/components/TermsAndConditions/index.js +1 -0
  55. package/dist/components/TermsOfUse/TermsOfUse.d.ts +3 -0
  56. package/dist/components/TermsOfUse/TermsOfUse.js +14 -0
  57. package/dist/components/TermsOfUse/TermsOfUse.lazy.d.ts +9 -0
  58. package/dist/components/TermsOfUse/TermsOfUse.lazy.js +35 -0
  59. package/dist/components/TermsOfUse/index.d.ts +1 -0
  60. package/dist/components/TermsOfUse/index.js +1 -0
  61. package/dist/components/Tournaments/TournamentsCarousel/TournamentsCarouselItem.module.css +184 -184
  62. package/dist/components/Tournaments/TournamentsList/TournamentItem.module.css +184 -184
  63. package/dist/components/TransactionRecords/TableFilters.js +72 -32
  64. package/dist/handlers/postTransformIdFrontImage.d.ts +3 -0
  65. package/dist/handlers/postTransformIdFrontImage.js +82 -0
  66. package/dist/handlers/postTransformSelfieImage.d.ts +3 -0
  67. package/dist/handlers/postTransformSelfieImage.js +82 -0
  68. package/dist/next.config.js +1 -0
  69. package/dist/services/queries.js +2570 -2570
  70. package/dist/styles/theme.css +695 -695
  71. package/dist/ui/AlertDialog/AlertDialog.d.ts +88 -88
  72. package/dist/ui/AlertDialog/alertDialog.recipe.d.ts +8 -8
  73. package/dist/ui/Badge/Badge.d.ts +12 -12
  74. package/dist/ui/Badge/badge.anatomy.d.ts +1 -1
  75. package/dist/ui/Badge/badge.recipe.d.ts +3 -3
  76. package/dist/ui/Carousel/Carousel.d.ts +99 -99
  77. package/dist/ui/Carousel/carousel.recipe.d.ts +11 -11
  78. package/dist/ui/Checkbox/Checkbox.d.ts +23 -23
  79. package/dist/ui/Checkbox/checkbox.recipe.d.ts +3 -3
  80. package/dist/ui/Clipboard/Clipboard.d.ts +18 -18
  81. package/dist/ui/Clipboard/clipboard.recipe.d.ts +3 -3
  82. package/dist/ui/Collapsible/Collapsible.d.ts +20 -20
  83. package/dist/ui/Collapsible/collapsible.recipe.d.ts +5 -5
  84. package/dist/ui/Combobox/Combobox.d.ts +42 -42
  85. package/dist/ui/Combobox/combobox.recipe.d.ts +3 -3
  86. package/dist/ui/DatePicker/DatePicker.d.ts +72 -72
  87. package/dist/ui/DatePicker/datePicker.recipe.d.ts +3 -3
  88. package/dist/ui/Dialog/Dialog.d.ts +88 -88
  89. package/dist/ui/Dialog/dialog.recipe.d.ts +8 -8
  90. package/dist/ui/Drawer/Drawer.d.ts +33 -33
  91. package/dist/ui/Drawer/drawer.recipe.d.ts +3 -3
  92. package/dist/ui/Field/Field.d.ts +21 -21
  93. package/dist/ui/Field/field.recipe.d.ts +3 -3
  94. package/dist/ui/Menu/Menu.d.ts +306 -306
  95. package/dist/ui/Menu/menu.recipe.d.ts +17 -17
  96. package/dist/ui/PasswordInput/PasswordInput.d.ts +18 -18
  97. package/dist/ui/PasswordInput/passwordInput.recipe.d.ts +3 -3
  98. package/dist/ui/Popover/Popover.d.ts +88 -88
  99. package/dist/ui/Popover/popover.recipe.d.ts +8 -8
  100. package/dist/ui/Progress/Progress.d.ts +27 -27
  101. package/dist/ui/Progress/progress.recipe.d.ts +3 -3
  102. package/dist/ui/SegmentGroup/SegmentGroup.d.ts +18 -18
  103. package/dist/ui/SegmentGroup/segmentGroup.recipe.d.ts +3 -3
  104. package/dist/ui/Select/Select.d.ts +45 -45
  105. package/dist/ui/Select/select.recipe.d.ts +3 -3
  106. package/dist/ui/Table/Table.d.ts +21 -21
  107. package/dist/ui/Table/table.anatomy.d.ts +1 -1
  108. package/dist/ui/Table/table.recipe.d.ts +3 -3
  109. package/dist/ui/Tabs/Tabs.d.ts +15 -15
  110. package/dist/ui/Tabs/tabs.recipe.d.ts +3 -3
  111. package/package.json +163 -163
  112. package/dist/client/hooks/index.d.ts +0 -65
  113. package/dist/client/hooks/index.js +0 -65
  114. package/dist/client/services/index.d.ts +0 -4
  115. package/dist/client/services/index.js +0 -4
  116. package/dist/client/utils/index.d.ts +0 -3
  117. package/dist/client/utils/index.js +0 -3
  118. package/dist/components/CashbackBonus/CashbackBonus.client.d.ts +0 -2
  119. package/dist/components/CashbackBonus/CashbackBonus.client.js +0 -9
  120. package/dist/components/CashbackBonus/CashbackBonus.d.ts +0 -10
  121. package/dist/components/CashbackBonus/CashbackBonus.js +0 -5
  122. package/dist/components/CashbackBonus/index.d.ts +0 -1
  123. package/dist/components/CashbackBonus/index.js +0 -1
  124. package/dist/components/Empty.d.ts +0 -9
  125. package/dist/components/Empty.js +0 -7
  126. package/dist/components/FeatureFlag/FeatureFlag.d.ts +0 -1
  127. package/dist/components/FeatureFlag/FeatureFlag.js +0 -29
  128. package/dist/components/FeatureFlag/index.d.ts +0 -1
  129. package/dist/components/FeatureFlag/index.js +0 -1
  130. package/dist/components/Games/GameContext.d.ts +0 -2
  131. package/dist/components/Games/GameContext.js +0 -2
  132. package/dist/components/InfiniteScroll.d.ts +0 -10
  133. package/dist/components/InfiniteScroll.js +0 -25
  134. package/dist/components/JackpotCounter/JackpotCounter.client.d.ts +0 -2
  135. package/dist/components/JackpotCounter/JackpotCounter.client.js +0 -66
  136. package/dist/components/JackpotCounter/JackpotCounter.d.ts +0 -17
  137. package/dist/components/JackpotCounter/JackpotCounter.js +0 -21
  138. package/dist/components/JackpotCounter/JackpotCounterItem.d.ts +0 -18
  139. package/dist/components/JackpotCounter/JackpotCounterItem.js +0 -109
  140. package/dist/components/JackpotCounter/JackpotCounterItem.module.css +0 -184
  141. package/dist/components/JackpotCounter/index.d.ts +0 -1
  142. package/dist/components/JackpotCounter/index.js +0 -1
  143. package/dist/components/Jackpots/JackpotDesktop.d.ts +0 -1
  144. package/dist/components/Jackpots/JackpotDesktop.js +0 -45
  145. package/dist/components/Jackpots/JackpotGameProviders.d.ts +0 -5
  146. package/dist/components/Jackpots/JackpotGameProviders.js +0 -41
  147. package/dist/components/Jackpots/JackpotItemDesktop.d.ts +0 -9
  148. package/dist/components/Jackpots/JackpotItemDesktop.js +0 -43
  149. package/dist/components/Jackpots/JackpotItemMobile.d.ts +0 -9
  150. package/dist/components/Jackpots/JackpotItemMobile.js +0 -44
  151. package/dist/components/Jackpots/JackpotMobile.d.ts +0 -1
  152. package/dist/components/Jackpots/JackpotMobile.js +0 -46
  153. package/dist/components/Jackpots/JackpotRules.d.ts +0 -5
  154. package/dist/components/Jackpots/JackpotRules.js +0 -11
  155. package/dist/components/Jackpots/Jackpots.client.d.ts +0 -2
  156. package/dist/components/Jackpots/Jackpots.client.js +0 -29
  157. package/dist/components/Jackpots/JackpotsContext.d.ts +0 -4
  158. package/dist/components/Jackpots/JackpotsContext.js +0 -3
  159. package/dist/components/Jackpots/useJackpotData.d.ts +0 -14
  160. package/dist/components/Jackpots/useJackpotData.js +0 -93
  161. package/dist/components/Jackpots/useJackpotItemData.d.ts +0 -20
  162. package/dist/components/Jackpots/useJackpotItemData.js +0 -87
  163. package/dist/components/KYC/AutoOpen.d.ts +0 -1
  164. package/dist/components/KYC/AutoOpen.js +0 -45
  165. package/dist/components/KYC/Header.d.ts +0 -1
  166. package/dist/components/KYC/Header.js +0 -8
  167. package/dist/components/KYC/Step1.d.ts +0 -1
  168. package/dist/components/KYC/Step1.js +0 -13
  169. package/dist/components/KYC/Step2.d.ts +0 -1
  170. package/dist/components/KYC/Step2.js +0 -13
  171. package/dist/components/KYC/Step3.d.ts +0 -1
  172. package/dist/components/KYC/Step3.js +0 -13
  173. package/dist/components/KYC/Step4.d.ts +0 -1
  174. package/dist/components/KYC/Step4.js +0 -7
  175. package/dist/components/KYC/backup/Header.d.ts +0 -1
  176. package/dist/components/KYC/backup/Header.js +0 -8
  177. package/dist/components/KYC/backup/Indicator.d.ts +0 -1
  178. package/dist/components/KYC/backup/Indicator.js +0 -9
  179. package/dist/components/KYC/backup/KYC.d.ts +0 -1
  180. package/dist/components/KYC/backup/KYC.js +0 -14
  181. package/dist/components/KYC/backup/KYC.lazy.d.ts +0 -1
  182. package/dist/components/KYC/backup/KYC.lazy.js +0 -26
  183. package/dist/components/KYC/backup/KYCContext.d.ts +0 -6
  184. package/dist/components/KYC/backup/KYCContext.js +0 -2
  185. package/dist/components/KYC/backup/Step1.d.ts +0 -1
  186. package/dist/components/KYC/backup/Step1.js +0 -13
  187. package/dist/components/KYC/backup/Step2.d.ts +0 -1
  188. package/dist/components/KYC/backup/Step2.js +0 -13
  189. package/dist/components/KYC/backup/Step3.d.ts +0 -1
  190. package/dist/components/KYC/backup/Step3.js +0 -13
  191. package/dist/components/KYC/backup/Step4.d.ts +0 -1
  192. package/dist/components/KYC/backup/Step4.js +0 -7
  193. package/dist/components/KYC/backup/useKYC.d.ts +0 -10
  194. package/dist/components/KYC/backup/useKYC.js +0 -8
  195. package/dist/components/KYC/loadModels.d.ts +0 -1
  196. package/dist/components/KYC/loadModels.js +0 -9
  197. package/dist/components/Messages/Message.d.ts +0 -1
  198. package/dist/components/Messages/Message.js +0 -34
  199. package/dist/components/Messages/MessageContext.d.ts +0 -6
  200. package/dist/components/Messages/MessageContext.js +0 -2
  201. package/dist/components/Messages/MessageItem.d.ts +0 -4
  202. package/dist/components/Messages/MessageItem.js +0 -34
  203. package/dist/components/Messages/MessagePopup.d.ts +0 -1
  204. package/dist/components/Messages/MessagePopup.js +0 -19
  205. package/dist/components/Messages/MessageTrigger.d.ts +0 -8
  206. package/dist/components/Messages/MessageTrigger.js +0 -19
  207. package/dist/components/Promo/PromoContent.d.ts +0 -2
  208. package/dist/components/Promo/PromoContent.js +0 -9
  209. package/dist/components/Promos/PromoCarousel.d.ts +0 -2
  210. package/dist/components/Promos/PromoCarousel.js +0 -41
  211. package/dist/components/Promos/PromoGrid.d.ts +0 -2
  212. package/dist/components/Promos/PromoGrid.js +0 -12
  213. package/dist/components/Promos/PromoItem.d.ts +0 -7
  214. package/dist/components/Promos/PromoItem.js +0 -10
  215. package/dist/components/Quests/CountdownTimer.d.ts +0 -15
  216. package/dist/components/Quests/CountdownTimer.js +0 -33
  217. package/dist/components/Quests/DailyCheckInQuest/DailyCheckInQuest.d.ts +0 -4
  218. package/dist/components/Quests/DailyCheckInQuest/DailyCheckInQuest.js +0 -78
  219. package/dist/components/Quests/DailyCheckInQuest/DailyCheckInQuestModal.d.ts +0 -8
  220. package/dist/components/Quests/DailyCheckInQuest/DailyCheckInQuestModal.js +0 -9
  221. package/dist/components/Quests/OnboardingQuest/OnboardingQuest.d.ts +0 -4
  222. package/dist/components/Quests/OnboardingQuest/OnboardingQuest.js +0 -4
  223. package/dist/components/Quests/WageringQuest/WageringQuest.d.ts +0 -4
  224. package/dist/components/Quests/WageringQuest/WageringQuest.js +0 -20
  225. package/dist/components/Quests/WageringQuest/WageringQuestModal.d.ts +0 -9
  226. package/dist/components/Quests/WageringQuest/WageringQuestModal.js +0 -9
  227. package/dist/components/SignUp/SignUp.lazy.d.ts +0 -12
  228. package/dist/components/SignUp/SignUp.lazy.js +0 -18
  229. package/dist/components/SignUp/SignUpContext.d.ts +0 -6
  230. package/dist/components/SignUp/SignUpContext.js +0 -2
  231. package/dist/components/SignUp/SignUpForm.d.ts +0 -1
  232. package/dist/components/TournamentCounter/TournamentCounter.client.d.ts +0 -2
  233. package/dist/components/TournamentCounter/TournamentCounter.client.js +0 -50
  234. package/dist/components/TournamentCounter/TournamentCounter.d.ts +0 -8
  235. package/dist/components/TournamentCounter/TournamentCounter.js +0 -21
  236. package/dist/components/TournamentCounter/TournamentCounterItem.d.ts +0 -8
  237. package/dist/components/TournamentCounter/TournamentCounterItem.js +0 -106
  238. package/dist/components/TournamentCounter/index.d.ts +0 -1
  239. package/dist/components/TournamentCounter/index.js +0 -1
  240. package/dist/components/Tournaments/TournamentDesktop.d.ts +0 -1
  241. package/dist/components/Tournaments/TournamentDesktop.js +0 -57
  242. package/dist/components/Tournaments/TournamentGameProviders.d.ts +0 -5
  243. package/dist/components/Tournaments/TournamentGameProviders.js +0 -38
  244. package/dist/components/Tournaments/TournamentItemDesktop.d.ts +0 -7
  245. package/dist/components/Tournaments/TournamentItemDesktop.js +0 -56
  246. package/dist/components/Tournaments/TournamentItemMobile.d.ts +0 -7
  247. package/dist/components/Tournaments/TournamentItemMobile.js +0 -54
  248. package/dist/components/Tournaments/TournamentMobile.d.ts +0 -1
  249. package/dist/components/Tournaments/TournamentMobile.js +0 -55
  250. package/dist/components/Tournaments/TournamentRules.d.ts +0 -5
  251. package/dist/components/Tournaments/TournamentRules.js +0 -11
  252. package/dist/components/Tournaments/Tournaments.client.d.ts +0 -2
  253. package/dist/components/Tournaments/Tournaments.client.js +0 -20
  254. package/dist/components/Tournaments/TournamentsContext.d.ts +0 -4
  255. package/dist/components/Tournaments/TournamentsContext.js +0 -3
  256. package/dist/components/Tournaments/useTournamentData.d.ts +0 -10
  257. package/dist/components/Tournaments/useTournamentData.js +0 -72
  258. package/dist/components/Tournaments/useTournamentItemData.d.ts +0 -16
  259. package/dist/components/Tournaments/useTournamentItemData.js +0 -64
  260. package/dist/components/index.d.ts +0 -33
  261. package/dist/components/index.js +0 -33
  262. package/dist/components/shared/IdDocumentField.client.d.ts +0 -25
  263. package/dist/components/shared/IdDocumentField.client.js +0 -204
  264. package/dist/components/shared/IdDocumentField.d.ts +0 -2
  265. package/dist/components/shared/IdDocumentField.js +0 -11
  266. package/dist/components/shared/SelfieField.client.d.ts +0 -20
  267. package/dist/components/shared/SelfieField.client.js +0 -327
  268. package/dist/components/shared/SelfieField.d.ts +0 -2
  269. package/dist/components/shared/SelfieField.js +0 -11
  270. package/dist/constants/BranchCode.d.ts +0 -4
  271. package/dist/constants/BranchCode.js +0 -42
  272. package/dist/constants/endpoints.d.ts +0 -10
  273. package/dist/constants/endpoints.js +0 -41
  274. package/dist/constants/envVars.d.ts +0 -5
  275. package/dist/constants/envVars.js +0 -28
  276. package/dist/constants/gameProviders.d.ts +0 -76
  277. package/dist/constants/gameProviders.js +0 -361
  278. package/dist/constants/gameTypes.d.ts +0 -3
  279. package/dist/constants/gameTypes.js +0 -64
  280. package/dist/constants/headerKeys.d.ts +0 -2
  281. package/dist/constants/headerKeys.js +0 -2
  282. package/dist/constants/secretQuestions.d.ts +0 -3
  283. package/dist/constants/secretQuestions.js +0 -24
  284. package/dist/constants/storageKeys.d.ts +0 -2
  285. package/dist/constants/storageKeys.js +0 -2
  286. package/dist/handlers.d.ts +0 -43
  287. package/dist/handlers.js +0 -297
  288. package/dist/icons/BellRingIcon.d.ts +0 -2
  289. package/dist/icons/BellRingIcon.js +0 -4
  290. package/dist/icons/index.d.ts +0 -65
  291. package/dist/icons/index.js +0 -65
  292. package/dist/images/hacksaw-gaming.png +0 -0
  293. package/dist/server/services/index.d.ts +0 -4
  294. package/dist/server/services/index.js +0 -4
  295. package/dist/server/utils/index.d.ts +0 -29
  296. package/dist/server/utils/index.js +0 -29
  297. package/dist/ui/Presence.d.ts +0 -2
  298. package/dist/ui/Presence.js +0 -7
  299. package/dist/ui/Prose.d.ts +0 -2
  300. package/dist/ui/Prose.js +0 -5
  301. package/dist/ui/index.d.ts +0 -26
  302. package/dist/ui/index.js +0 -26
  303. package/dist/utils/createErrorFromCode.d.ts +0 -2
  304. package/dist/utils/createErrorFromCode.js +0 -11
  305. package/dist/utils/dataUrlToBlob.d.ts +0 -1
  306. package/dist/utils/dataUrlToBlob.js +0 -11
  307. package/dist/utils/index.d.ts +0 -17
  308. package/dist/utils/index.js +0 -17
  309. package/dist/utils/isMobile.d.ts +0 -5
  310. package/dist/utils/isMobile.js +0 -9
  311. package/dist/utils/resizeImageSize.d.ts +0 -1
  312. package/dist/utils/resizeImageSize.js +0 -6
@@ -1,184 +1,184 @@
1
- @keyframes arrow-green-flash {
2
- 0% {
3
- color: #abefc6;
4
- }
5
- 100% {
6
- color: #079455;
7
- }
8
- }
9
-
10
- .animate-arrow-green-flash-1 {
11
- animation: arrow-green-flash 0.4s infinite;
12
- animation-delay: -0.2s;
13
- }
14
-
15
- .animate-arrow-green-flash-2 {
16
- animation: arrow-green-flash 0.4s infinite;
17
- animation-delay: -0.1s;
18
- }
19
-
20
- .animate-arrow-green-flash-3 {
21
- animation: arrow-green-flash 0.4s infinite;
22
- }
23
-
24
- @keyframes arrow-red-flash {
25
- 0%,
26
- 100% {
27
- color: #f97066;
28
- }
29
- 50% {
30
- color: #fecdca;
31
- }
32
- }
33
-
34
- .animate-arrow-red-flash-1 {
35
- animation: arrow-red-flash 0.4s infinite;
36
- }
37
-
38
- .animate-arrow-red-flash-2 {
39
- animation: arrow-red-flash 0.4s infinite;
40
- animation-delay: -0.1s;
41
- }
42
-
43
- .animate-arrow-red-flash-3 {
44
- animation: arrow-red-flash 0.4s infinite;
45
- animation-delay: -0.2s;
46
- }
47
-
48
- /* Animated BG */
49
- @keyframes rotate {
50
- to {
51
- transform: rotate(1turn);
52
- }
53
- }
54
-
55
- .light-rays {
56
- position: absolute;
57
- top: 0;
58
- left: 0;
59
- right: 0;
60
- bottom: 0;
61
- overflow: hidden;
62
-
63
- --first: var(--color-bg-tertiary);
64
- --second: var(--color-bg-quaternary);
65
- }
66
-
67
- .light-rays::before,
68
- .light-rays::after {
69
- content: '';
70
- position: absolute;
71
- top: var(--light-rays-top, 150px);
72
- left: calc(50% - 90px);
73
- margin: -100vmax;
74
- width: 200vmax;
75
- height: 200vmax;
76
- opacity: 0.6;
77
- transform-origin: center;
78
- }
79
-
80
- .light-rays::before {
81
- background: conic-gradient(
82
- var(--first) 0deg 7.2deg,
83
- var(--second) 7.2deg 14.4deg,
84
- var(--first) 14.4deg 21.6deg,
85
- var(--second) 21.6deg 28.8deg,
86
- var(--first) 28.8deg 36deg,
87
- var(--second) 36deg 43.2deg,
88
- var(--first) 43.2deg 50.4deg,
89
- var(--second) 50.4deg 57.6deg,
90
- var(--first) 57.6deg 64.8deg,
91
- var(--second) 64.8deg 72deg,
92
- var(--first) 72deg 79.2deg,
93
- var(--second) 79.2deg 86.4deg,
94
- var(--first) 86.4deg 93.6deg,
95
- var(--second) 93.6deg 100.8deg,
96
- var(--first) 100.8deg 108deg,
97
- var(--second) 108deg 115.2deg,
98
- var(--first) 115.2deg 122.4deg,
99
- var(--second) 122.4deg 129.6deg,
100
- var(--first) 129.6deg 136.8deg,
101
- var(--second) 136.8deg 144deg,
102
- var(--first) 144deg 151.2deg,
103
- var(--second) 151.2deg 158.4deg,
104
- var(--first) 158.4deg 165.6deg,
105
- var(--second) 165.6deg 172.8deg,
106
- var(--first) 172.8deg 180deg,
107
- var(--second) 180deg 187.2deg,
108
- var(--first) 187.2deg 194.4deg,
109
- var(--second) 194.4deg 201.6deg,
110
- var(--first) 201.6deg 208.8deg,
111
- var(--second) 208.8deg 216deg,
112
- var(--first) 216deg 223.2deg,
113
- var(--second) 223.2deg 230.4deg,
114
- var(--first) 230.4deg 237.6deg,
115
- var(--second) 237.6deg 244.8deg,
116
- var(--first) 244.8deg 252deg,
117
- var(--second) 252deg 259.2deg,
118
- var(--first) 259.2deg 266.4deg,
119
- var(--second) 266.4deg 273.6deg,
120
- var(--first) 273.6deg 280.8deg,
121
- var(--second) 280.8deg 288deg,
122
- var(--first) 288deg 295.2deg,
123
- var(--second) 295.2deg 302.4deg,
124
- var(--first) 302.4deg 309.6deg,
125
- var(--second) 309.6deg 316.8deg,
126
- var(--first) 316.8deg 324deg,
127
- var(--second) 324deg 331.2deg,
128
- var(--first) 331.2deg 338.4deg,
129
- var(--second) 338.4deg 345.6deg,
130
- var(--first) 345.6deg 352.8deg,
131
- var(--second) 352.8deg 360deg
132
- );
133
- animation: rotate 20s linear infinite;
134
- }
135
-
136
- @media (max-width: 1024px) {
137
- .light-rays::before,
138
- .light-rays::after {
139
- left: auto;
140
- right: 11%;
141
- }
142
- }
143
-
144
- /* ScrollArea.module.css */
145
- .scrollArea {
146
- overflow-y: scroll;
147
- padding-right: 4px;
148
- }
149
-
150
- /* WebKit-based browsers */
151
- .scrollArea::-webkit-scrollbar {
152
- width: 8px;
153
- }
154
-
155
- .scrollArea::-webkit-scrollbar-track {
156
- background: var(--color-bg-primary-alt);
157
- border-radius: 9999px;
158
- }
159
-
160
- .scrollArea::-webkit-scrollbar-thumb {
161
- background-color: var(--color-bg-quaternary);
162
- border-radius: 9999px;
163
- }
164
-
165
- @keyframes waveColor {
166
- 0%,
167
- 2.5% {
168
- color: var(--wave-highlight-color);
169
- }
170
- 2.51%,
171
- 100% {
172
- color: var(--color-brand-300);
173
- }
174
- }
175
-
176
- .animate-wave-color-success {
177
- --wave-highlight-color: var(--color-success-800);
178
- animation: waveColor 4s ease-in-out infinite;
179
- }
180
-
181
- .animate-wave-color-error {
182
- --wave-highlight-color: var(--color-error-600);
183
- animation: waveColor 4s ease-in-out infinite;
184
- }
1
+ @keyframes arrow-green-flash {
2
+ 0% {
3
+ color: #abefc6;
4
+ }
5
+ 100% {
6
+ color: #079455;
7
+ }
8
+ }
9
+
10
+ .animate-arrow-green-flash-1 {
11
+ animation: arrow-green-flash 0.4s infinite;
12
+ animation-delay: -0.2s;
13
+ }
14
+
15
+ .animate-arrow-green-flash-2 {
16
+ animation: arrow-green-flash 0.4s infinite;
17
+ animation-delay: -0.1s;
18
+ }
19
+
20
+ .animate-arrow-green-flash-3 {
21
+ animation: arrow-green-flash 0.4s infinite;
22
+ }
23
+
24
+ @keyframes arrow-red-flash {
25
+ 0%,
26
+ 100% {
27
+ color: #f97066;
28
+ }
29
+ 50% {
30
+ color: #fecdca;
31
+ }
32
+ }
33
+
34
+ .animate-arrow-red-flash-1 {
35
+ animation: arrow-red-flash 0.4s infinite;
36
+ }
37
+
38
+ .animate-arrow-red-flash-2 {
39
+ animation: arrow-red-flash 0.4s infinite;
40
+ animation-delay: -0.1s;
41
+ }
42
+
43
+ .animate-arrow-red-flash-3 {
44
+ animation: arrow-red-flash 0.4s infinite;
45
+ animation-delay: -0.2s;
46
+ }
47
+
48
+ /* Animated BG */
49
+ @keyframes rotate {
50
+ to {
51
+ transform: rotate(1turn);
52
+ }
53
+ }
54
+
55
+ .light-rays {
56
+ position: absolute;
57
+ top: 0;
58
+ left: 0;
59
+ right: 0;
60
+ bottom: 0;
61
+ overflow: hidden;
62
+
63
+ --first: var(--color-bg-tertiary);
64
+ --second: var(--color-bg-quaternary);
65
+ }
66
+
67
+ .light-rays::before,
68
+ .light-rays::after {
69
+ content: '';
70
+ position: absolute;
71
+ top: var(--light-rays-top, 150px);
72
+ left: calc(50% - 90px);
73
+ margin: -100vmax;
74
+ width: 200vmax;
75
+ height: 200vmax;
76
+ opacity: 0.6;
77
+ transform-origin: center;
78
+ }
79
+
80
+ .light-rays::before {
81
+ background: conic-gradient(
82
+ var(--first) 0deg 7.2deg,
83
+ var(--second) 7.2deg 14.4deg,
84
+ var(--first) 14.4deg 21.6deg,
85
+ var(--second) 21.6deg 28.8deg,
86
+ var(--first) 28.8deg 36deg,
87
+ var(--second) 36deg 43.2deg,
88
+ var(--first) 43.2deg 50.4deg,
89
+ var(--second) 50.4deg 57.6deg,
90
+ var(--first) 57.6deg 64.8deg,
91
+ var(--second) 64.8deg 72deg,
92
+ var(--first) 72deg 79.2deg,
93
+ var(--second) 79.2deg 86.4deg,
94
+ var(--first) 86.4deg 93.6deg,
95
+ var(--second) 93.6deg 100.8deg,
96
+ var(--first) 100.8deg 108deg,
97
+ var(--second) 108deg 115.2deg,
98
+ var(--first) 115.2deg 122.4deg,
99
+ var(--second) 122.4deg 129.6deg,
100
+ var(--first) 129.6deg 136.8deg,
101
+ var(--second) 136.8deg 144deg,
102
+ var(--first) 144deg 151.2deg,
103
+ var(--second) 151.2deg 158.4deg,
104
+ var(--first) 158.4deg 165.6deg,
105
+ var(--second) 165.6deg 172.8deg,
106
+ var(--first) 172.8deg 180deg,
107
+ var(--second) 180deg 187.2deg,
108
+ var(--first) 187.2deg 194.4deg,
109
+ var(--second) 194.4deg 201.6deg,
110
+ var(--first) 201.6deg 208.8deg,
111
+ var(--second) 208.8deg 216deg,
112
+ var(--first) 216deg 223.2deg,
113
+ var(--second) 223.2deg 230.4deg,
114
+ var(--first) 230.4deg 237.6deg,
115
+ var(--second) 237.6deg 244.8deg,
116
+ var(--first) 244.8deg 252deg,
117
+ var(--second) 252deg 259.2deg,
118
+ var(--first) 259.2deg 266.4deg,
119
+ var(--second) 266.4deg 273.6deg,
120
+ var(--first) 273.6deg 280.8deg,
121
+ var(--second) 280.8deg 288deg,
122
+ var(--first) 288deg 295.2deg,
123
+ var(--second) 295.2deg 302.4deg,
124
+ var(--first) 302.4deg 309.6deg,
125
+ var(--second) 309.6deg 316.8deg,
126
+ var(--first) 316.8deg 324deg,
127
+ var(--second) 324deg 331.2deg,
128
+ var(--first) 331.2deg 338.4deg,
129
+ var(--second) 338.4deg 345.6deg,
130
+ var(--first) 345.6deg 352.8deg,
131
+ var(--second) 352.8deg 360deg
132
+ );
133
+ animation: rotate 20s linear infinite;
134
+ }
135
+
136
+ @media (max-width: 1024px) {
137
+ .light-rays::before,
138
+ .light-rays::after {
139
+ left: auto;
140
+ right: 11%;
141
+ }
142
+ }
143
+
144
+ /* ScrollArea.module.css */
145
+ .scrollArea {
146
+ overflow-y: scroll;
147
+ padding-right: 4px;
148
+ }
149
+
150
+ /* WebKit-based browsers */
151
+ .scrollArea::-webkit-scrollbar {
152
+ width: 8px;
153
+ }
154
+
155
+ .scrollArea::-webkit-scrollbar-track {
156
+ background: var(--color-bg-primary-alt);
157
+ border-radius: 9999px;
158
+ }
159
+
160
+ .scrollArea::-webkit-scrollbar-thumb {
161
+ background-color: var(--color-bg-quaternary);
162
+ border-radius: 9999px;
163
+ }
164
+
165
+ @keyframes waveColor {
166
+ 0%,
167
+ 2.5% {
168
+ color: var(--wave-highlight-color);
169
+ }
170
+ 2.51%,
171
+ 100% {
172
+ color: var(--color-brand-300);
173
+ }
174
+ }
175
+
176
+ .animate-wave-color-success {
177
+ --wave-highlight-color: var(--color-success-800);
178
+ animation: waveColor 4s ease-in-out infinite;
179
+ }
180
+
181
+ .animate-wave-color-error {
182
+ --wave-highlight-color: var(--color-error-600);
183
+ animation: waveColor 4s ease-in-out infinite;
184
+ }
@@ -1,10 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { createListCollection } from '@ark-ui/react/collection';
3
- import { parseDate } from '@ark-ui/react/date-picker';
3
+ import { parseDate, useDatePickerContext } from '@ark-ui/react/date-picker';
4
4
  import { endOfDay, startOfDay } from 'date-fns';
5
5
  import { useState } from 'react';
6
+ import { useMediaQuery } from 'usehooks-ts';
6
7
  import { z } from 'zod';
7
8
  import { useControllableState } from '../../client/hooks/useControllableState.js';
9
+ import { useDisclosure } from '../../client/hooks/useDisclosure.js';
8
10
  import { CheckIcon } from '../../icons/CheckIcon.js';
9
11
  import { ChevronDownIcon } from '../../icons/ChevronDownIcon.js';
10
12
  import { ChevronLeftIcon } from '../../icons/ChevronLeftIcon.js';
@@ -21,7 +23,7 @@ const DEPOSIT_TYPES = [
21
23
  'MAYA',
22
24
  'MANUAL',
23
25
  'ONLINE_BANK',
24
- 'QR_PH'
26
+ 'QR_PH',
25
27
  ];
26
28
  const DEPOSIT_TYPES_MAP = {
27
29
  BANK: 'Bank',
@@ -165,36 +167,35 @@ export function TableFilters(props) {
165
167
  handleChange({ transactionType });
166
168
  },
167
169
  });
168
- return (_jsxs("div", { className: "flex flex-col gap-lg lg:flex-row lg:items-center", children: [_jsxs(DatePicker.Root, { lazyMount: true, unmountOnExit: true, value: [timestamp?.start, timestamp?.end]
169
- .filter(Boolean)
170
- .map((d) => parseDate(d)), onValueChange: (details) => {
171
- setTimestamp({
172
- start: details.value.at(0)?.toDate(deviceTimezone),
173
- end: details.value.at(1)?.toDate(deviceTimezone),
174
- });
175
- }, onOpenChange: (details) => {
176
- if (details.open)
177
- return;
178
- if (timestamp)
179
- return;
180
- setTab('all');
181
- }, selectionMode: "range", closeOnSelect: false, positioning: {
182
- gutter: 20,
183
- placement: 'bottom',
184
- }, children: [_jsxs(SegmentGroup.Root, { value: tab, onValueChange: (details) => {
185
- const value = TabDefinition.parse(details.value);
186
- if (value === 'today') {
187
- const now = new Date();
188
- setTimestamp({
189
- start: startOfDay(now),
190
- end: endOfDay(now),
191
- });
192
- }
193
- else {
194
- setTimestamp(null);
195
- }
196
- setTab(value);
197
- }, className: "w-full lg:w-fit", children: [_jsxs(SegmentGroup.Item, { value: "all", className: "w-full lg:w-auto", children: [_jsx(SegmentGroup.ItemText, { children: "All" }), _jsx(SegmentGroup.ItemControl, {}), _jsx(SegmentGroup.ItemHiddenInput, {})] }), _jsxs(SegmentGroup.Item, { value: "today", className: "w-full lg:w-auto", children: [_jsx(SegmentGroup.ItemText, { children: "Today" }), _jsx(SegmentGroup.ItemControl, {}), _jsx(SegmentGroup.ItemHiddenInput, {})] }), _jsx(DatePicker.Context, { children: (api) => (_jsx(SegmentGroup.Item, { value: "custom", onClick: () => api.setOpen(true), className: "w-full lg:w-auto", children: _jsxs(DatePicker.Control, { children: [_jsx(SegmentGroup.ItemText, { children: "Custom" }), _jsx(SegmentGroup.ItemControl, {}), _jsx(SegmentGroup.ItemHiddenInput, {})] }) })) }), _jsx(SegmentGroup.Indicator, {})] }), _jsx(Portal, { children: _jsx(DatePicker.Positioner, { children: _jsx(DatePicker.Content, { children: _jsx(DatePicker.View, { view: "day", children: _jsx(DatePicker.Context, { children: (api) => (_jsxs(_Fragment, { children: [_jsxs(DatePicker.ViewControl, { children: [_jsx(DatePicker.PrevTrigger, { children: _jsx(ChevronLeftIcon, {}) }), _jsx(DatePicker.ViewTrigger, { children: _jsx(DatePicker.RangeText, {}) }), _jsx(DatePicker.NextTrigger, { children: _jsx(ChevronRightIcon, {}) })] }), _jsxs(DatePicker.Table, { children: [_jsx(DatePicker.TableHead, { children: _jsx(DatePicker.TableRow, { children: api.weekDays.map((weekDay, id) => (_jsx(DatePicker.TableHeader, { children: weekDay.short.substring(0, 2) }, id))) }) }), _jsx(DatePicker.TableBody, { children: api.weeks.map((week, id) => (_jsx(DatePicker.TableRow, { children: week.map((day, id) => (_jsx(DatePicker.TableCell, { value: day, children: _jsx(DatePicker.TableCellTrigger, { children: day.day }) }, id))) }, id))) })] })] })) }) }) }) }) })] }), _jsx("div", { className: "hidden grow lg:block" }), props.enabledFilters?.depositType && (_jsxs(Select.Root, { collection: depositTypeCollection, value: depositType ? [depositType] : [], onValueChange: (details) => {
170
+ const disclosure = useDisclosure({
171
+ onOpenChange(open) {
172
+ if (!open && !timestamp)
173
+ setTab('all');
174
+ },
175
+ });
176
+ return (_jsxs("div", { className: "flex flex-col gap-lg lg:flex-row lg:items-center", children: [_jsxs(SegmentGroup.Root, { value: tab, onValueChange: (details) => {
177
+ const value = TabDefinition.parse(details.value);
178
+ if (value === 'today') {
179
+ const now = new Date();
180
+ setTimestamp({
181
+ start: startOfDay(now),
182
+ end: endOfDay(now),
183
+ });
184
+ }
185
+ else {
186
+ setTimestamp(null);
187
+ }
188
+ setTab(value);
189
+ }, className: "w-full lg:w-fit", ids: {
190
+ item(value) {
191
+ return `segment-group:item:${value}`;
192
+ },
193
+ }, children: [_jsxs(SegmentGroup.Item, { value: "all", className: "w-full lg:w-auto", children: [_jsx(SegmentGroup.ItemText, { children: "All" }), _jsx(SegmentGroup.ItemControl, {}), _jsx(SegmentGroup.ItemHiddenInput, {})] }), _jsxs(SegmentGroup.Item, { value: "today", className: "w-full lg:w-auto", children: [_jsx(SegmentGroup.ItemText, { children: "Today" }), _jsx(SegmentGroup.ItemControl, {}), _jsx(SegmentGroup.ItemHiddenInput, {})] }), _jsxs(SegmentGroup.Item, { value: "custom", className: "w-full lg:w-auto", onClick: () => {
194
+ disclosure.setOpen(true);
195
+ }, children: [_jsx(SegmentGroup.ItemText, { children: "Custom" }), _jsx(SegmentGroup.ItemControl, {}), _jsx(SegmentGroup.ItemHiddenInput, {})] }), _jsx(SegmentGroup.Indicator, {})] }), _jsx(RangeDatePicker, { value: {
196
+ start: timestamp?.start,
197
+ end: timestamp?.end,
198
+ }, onValueChange: setTimestamp, open: disclosure.open, onOpenChange: disclosure.setOpen }), _jsx("div", { className: "hidden grow lg:block" }), props.enabledFilters?.depositType && (_jsxs(Select.Root, { collection: depositTypeCollection, value: depositType ? [depositType] : [], onValueChange: (details) => {
198
199
  const value = z
199
200
  .enum(DEPOSIT_TYPES)
200
201
  .safeParse(details.value.at(0)).data;
@@ -241,3 +242,42 @@ export function TableFilters(props) {
241
242
  e.stopPropagation();
242
243
  }, children: "Clear" }) })) : (_jsx(Select.Indicator, { asChild: true, children: _jsx(ChevronDownIcon, {}) })) })) })] }), _jsx(Portal, { children: _jsx(Select.Positioner, { children: _jsx(Select.Content, { children: _jsx(Select.ItemGroup, { children: transactionTypeCollection.items.map((item) => (_jsxs(Select.Item, { item: item, children: [_jsx(Select.ItemText, { children: transactionTypeCollection.stringifyItem(item) }), _jsx(Select.ItemIndicator, { asChild: true, children: _jsx(CheckIcon, {}) })] }, item))) }) }) }) })] }))] }));
243
244
  }
245
+ function RangeDatePicker(props) {
246
+ const [value, setValue] = useControllableState({
247
+ value: props.value,
248
+ defaultValue: props.defaultValue ?? null,
249
+ onChange: (value) => {
250
+ props.onValueChange?.(value);
251
+ },
252
+ });
253
+ const [open, setOpen] = useControllableState({
254
+ value: props.open,
255
+ defaultValue: props.defaultOpen ?? false,
256
+ onChange: (open) => {
257
+ props.onOpenChange?.(open);
258
+ },
259
+ });
260
+ const desktop = useMediaQuery('(min-width: 1024px)');
261
+ return (_jsx(DatePicker.Root, { lazyMount: true, unmountOnExit: true, value: [value?.start, value?.end]
262
+ .filter(Boolean)
263
+ .map((d) => parseDate(d)), onValueChange: (details) => {
264
+ setValue({
265
+ start: details.value.at(0)?.toDate(deviceTimezone),
266
+ end: details.value.at(1)?.toDate(deviceTimezone),
267
+ });
268
+ }, open: open, onOpenChange: (details) => {
269
+ setOpen(details.open);
270
+ }, selectionMode: "range", closeOnSelect: false, fixedWeeks: true, numOfMonths: desktop ? 2 : 1, positioning: {
271
+ gutter: 16,
272
+ placement: 'bottom',
273
+ }, ids: {
274
+ control: 'segment-group:item:custom',
275
+ }, children: _jsx(Portal, { children: _jsx(DatePicker.Positioner, { children: _jsx(DatePicker.Content, { className: "p-0", children: _jsxs("div", { className: "flex", children: [_jsx(RangeDatePickerCalendar, { monthOffset: 0 }), desktop && _jsx(RangeDatePickerCalendar, { monthOffset: 1 })] }) }) }) }) }));
276
+ }
277
+ function RangeDatePickerCalendar({ monthOffset }) {
278
+ const datePicker = useDatePickerContext();
279
+ const offset = datePicker.getOffset({
280
+ months: monthOffset,
281
+ });
282
+ return (_jsxs(DatePicker.View, { view: "day", className: "border-border-secondary px-6 py-5 lg:first:border-r", children: [_jsxs(DatePicker.ViewControl, { children: [_jsx(DatePicker.PrevTrigger, { children: _jsx(ChevronLeftIcon, {}) }), _jsx("span", { className: "text-text-secondary-700 text-base font-semibold", children: offset.visibleRangeText.start }), _jsx(DatePicker.NextTrigger, { children: _jsx(ChevronRightIcon, {}) })] }), _jsxs(DatePicker.Table, { children: [_jsx(DatePicker.TableHead, { children: _jsx(DatePicker.TableRow, { children: datePicker.weekDays.map((weekDay, id) => (_jsx(DatePicker.TableHeader, { children: weekDay.short.slice(0, 2) }, id))) }) }), _jsx(DatePicker.TableBody, { children: offset.weeks.map((week, id) => (_jsx(DatePicker.TableRow, { children: week.map((day, id) => (_jsx(DatePicker.TableCell, { value: day, visibleRange: offset.visibleRange, children: _jsx(DatePicker.TableCellTrigger, { children: day.day }) }, id))) }, id))) })] })] }));
283
+ }
@@ -0,0 +1,3 @@
1
+ import type { NextRequest } from 'next/server';
2
+ import { NextResponse } from 'next/server';
3
+ export declare function postTransformIdFrontImage(request: NextRequest): Promise<NextResponse<unknown>>;
@@ -0,0 +1,82 @@
1
+ import { NextResponse } from 'next/server';
2
+ import sharp from 'sharp';
3
+ import { z } from 'zod';
4
+ import { validateFile } from '../utils/validateFile.js';
5
+ const TransformIdFrontImageDefinition = z.object({
6
+ image: z.instanceof(File).superRefine((file, context) => {
7
+ const error = validateFile(file);
8
+ if (error) {
9
+ context.addIssue({
10
+ code: z.ZodIssueCode.custom,
11
+ message: error.message,
12
+ });
13
+ }
14
+ }),
15
+ cropTop: z.number().or(z.string().transform((v) => Math.round(Number(v)))),
16
+ cropLeft: z.number().or(z.string().transform((v) => Math.round(Number(v)))),
17
+ cropWidth: z.number().or(z.string().transform((v) => Math.round(Number(v)))),
18
+ cropHeight: z.number().or(z.string().transform((v) => Math.round(Number(v)))),
19
+ });
20
+ export async function postTransformIdFrontImage(request) {
21
+ const form = await request.formData();
22
+ const parsed = TransformIdFrontImageDefinition.safeParse({
23
+ image: form.get('image'),
24
+ cropTop: form.get('cropTop'),
25
+ cropLeft: form.get('cropLeft'),
26
+ cropWidth: form.get('cropWidth'),
27
+ cropHeight: form.get('cropHeight'),
28
+ });
29
+ if (!parsed.success) {
30
+ return NextResponse.json({
31
+ ok: false,
32
+ message: parsed.error.issues[0].message,
33
+ __error: parsed.error,
34
+ }, { status: 400 });
35
+ }
36
+ const file = parsed.data.image;
37
+ const arrayBuffer = await file.arrayBuffer();
38
+ const buffer = Buffer.from(arrayBuffer);
39
+ const cropped = await sharp(buffer)
40
+ .extract({
41
+ top: parsed.data.cropTop,
42
+ left: parsed.data.cropLeft,
43
+ width: parsed.data.cropWidth,
44
+ height: parsed.data.cropHeight,
45
+ })
46
+ .resize({
47
+ fit: 'contain',
48
+ width: 1200,
49
+ height: 757,
50
+ kernel: sharp.kernel.lanczos3,
51
+ withoutEnlargement: true,
52
+ })
53
+ .modulate({
54
+ brightness: 1.03,
55
+ saturation: 1.05,
56
+ })
57
+ .median(1)
58
+ .blur(0.3)
59
+ .sharpen({
60
+ sigma: 1,
61
+ m1: 0.5,
62
+ m2: 1.0,
63
+ x1: 2,
64
+ y2: 10,
65
+ y3: 20,
66
+ })
67
+ .webp({
68
+ effort: 6,
69
+ quality: 100,
70
+ alphaQuality: 100,
71
+ lossless: false,
72
+ nearLossless: false,
73
+ smartSubsample: true,
74
+ })
75
+ .toBuffer();
76
+ return new NextResponse(cropped, {
77
+ headers: {
78
+ 'Content-Type': 'image/webp',
79
+ 'Content-Disposition': `inline; filename="id-front-${Date.now()}.webp"`,
80
+ },
81
+ });
82
+ }
@@ -0,0 +1,3 @@
1
+ import type { NextRequest } from 'next/server';
2
+ import { NextResponse } from 'next/server';
3
+ export declare function postTransformSelfieImage(request: NextRequest): Promise<NextResponse<unknown>>;
@@ -0,0 +1,82 @@
1
+ import { NextResponse } from 'next/server';
2
+ import sharp from 'sharp';
3
+ import { z } from 'zod';
4
+ import { validateFile } from '../utils/validateFile.js';
5
+ const TransformSelfieImageDefinition = z.object({
6
+ image: z.instanceof(File).superRefine((file, context) => {
7
+ const error = validateFile(file);
8
+ if (error) {
9
+ context.addIssue({
10
+ code: z.ZodIssueCode.custom,
11
+ message: error.message,
12
+ });
13
+ }
14
+ }),
15
+ cropTop: z.number().or(z.string().transform((v) => Math.round(Number(v)))),
16
+ cropLeft: z.number().or(z.string().transform((v) => Math.round(Number(v)))),
17
+ cropWidth: z.number().or(z.string().transform((v) => Math.round(Number(v)))),
18
+ cropHeight: z.number().or(z.string().transform((v) => Math.round(Number(v)))),
19
+ });
20
+ export async function postTransformSelfieImage(request) {
21
+ const form = await request.formData();
22
+ const parsed = TransformSelfieImageDefinition.safeParse({
23
+ image: form.get('image'),
24
+ cropTop: form.get('cropTop'),
25
+ cropLeft: form.get('cropLeft'),
26
+ cropWidth: form.get('cropWidth'),
27
+ cropHeight: form.get('cropHeight'),
28
+ });
29
+ if (!parsed.success) {
30
+ return NextResponse.json({
31
+ ok: false,
32
+ message: parsed.error.issues[0].message,
33
+ __error: parsed.error,
34
+ }, { status: 400 });
35
+ }
36
+ const file = parsed.data.image;
37
+ const arrayBuffer = await file.arrayBuffer();
38
+ const buffer = Buffer.from(arrayBuffer);
39
+ const cropped = await sharp(buffer)
40
+ .extract({
41
+ top: parsed.data.cropTop,
42
+ left: parsed.data.cropLeft,
43
+ width: parsed.data.cropWidth,
44
+ height: parsed.data.cropHeight,
45
+ })
46
+ .resize({
47
+ fit: 'contain',
48
+ width: 1200,
49
+ height: 1200,
50
+ kernel: sharp.kernel.lanczos3,
51
+ withoutEnlargement: true,
52
+ })
53
+ .modulate({
54
+ brightness: 1.03,
55
+ saturation: 1.05,
56
+ })
57
+ .median(1)
58
+ .blur(0.3)
59
+ .sharpen({
60
+ sigma: 1,
61
+ m1: 0.5,
62
+ m2: 1.0,
63
+ x1: 2,
64
+ y2: 10,
65
+ y3: 20,
66
+ })
67
+ .webp({
68
+ effort: 6,
69
+ quality: 100,
70
+ alphaQuality: 100,
71
+ lossless: false,
72
+ nearLossless: false,
73
+ smartSubsample: true,
74
+ })
75
+ .toBuffer();
76
+ return new NextResponse(cropped, {
77
+ headers: {
78
+ 'Content-Type': 'image/webp',
79
+ 'Content-Disposition': `inline; filename="selfie-${Date.now()}.webp"`,
80
+ },
81
+ });
82
+ }