@opexa/portal-components 0.0.229 β†’ 0.0.230

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 (169) hide show
  1. package/dist/client/hooks/index.d.ts +65 -0
  2. package/dist/client/hooks/index.js +65 -0
  3. package/dist/client/hooks/useFeatureFlag.d.ts +5 -0
  4. package/dist/client/hooks/useFeatureFlag.js +34 -0
  5. package/dist/client/services/index.d.ts +4 -0
  6. package/dist/client/services/index.js +4 -0
  7. package/dist/client/utils/index.d.ts +3 -0
  8. package/dist/client/utils/index.js +3 -0
  9. package/dist/components/Bonus/Bonus.client.js +1 -1
  10. package/dist/components/Cashback/Cashback.client.js +1 -1
  11. package/dist/components/CustomPromo/CustomPromo.js +1 -1
  12. package/dist/components/Empty.d.ts +10 -0
  13. package/dist/components/Empty.js +7 -0
  14. package/dist/components/FeatureFlag/FeatureFlag.d.ts +1 -0
  15. package/dist/components/FeatureFlag/FeatureFlag.js +10 -0
  16. package/dist/components/GameLaunch/GameLaunch.lazy.js +1 -1
  17. package/dist/components/Games/GameContext.d.ts +2 -0
  18. package/dist/components/Games/GameContext.js +2 -0
  19. package/dist/components/GamesSearch/GamesSearch.js +1 -1
  20. package/dist/components/InfiniteScroll.d.ts +10 -0
  21. package/dist/components/InfiniteScroll.js +25 -0
  22. package/dist/components/JackpotCounter/JackpotCounter.client.d.ts +2 -0
  23. package/dist/components/JackpotCounter/JackpotCounter.client.js +66 -0
  24. package/dist/components/JackpotCounter/JackpotCounter.d.ts +17 -0
  25. package/dist/components/JackpotCounter/JackpotCounter.js +21 -0
  26. package/dist/components/JackpotCounter/JackpotCounterItem.d.ts +18 -0
  27. package/dist/components/JackpotCounter/JackpotCounterItem.js +109 -0
  28. package/dist/components/JackpotCounter/JackpotCounterItem.module.css +184 -0
  29. package/dist/components/JackpotCounter/index.d.ts +1 -0
  30. package/dist/components/JackpotCounter/index.js +1 -0
  31. package/dist/components/Jackpots/JackpotDesktop.d.ts +1 -0
  32. package/dist/components/Jackpots/JackpotDesktop.js +45 -0
  33. package/dist/components/Jackpots/JackpotGameProviders.d.ts +5 -0
  34. package/dist/components/Jackpots/JackpotGameProviders.js +41 -0
  35. package/dist/components/Jackpots/JackpotItemDesktop.d.ts +9 -0
  36. package/dist/components/Jackpots/JackpotItemDesktop.js +43 -0
  37. package/dist/components/Jackpots/JackpotItemMobile.d.ts +9 -0
  38. package/dist/components/Jackpots/JackpotItemMobile.js +44 -0
  39. package/dist/components/Jackpots/JackpotMobile.d.ts +1 -0
  40. package/dist/components/Jackpots/JackpotMobile.js +46 -0
  41. package/dist/components/Jackpots/JackpotRules.d.ts +5 -0
  42. package/dist/components/Jackpots/JackpotRules.js +11 -0
  43. package/dist/components/Jackpots/Jackpots.client.d.ts +2 -0
  44. package/dist/components/Jackpots/Jackpots.client.js +29 -0
  45. package/dist/components/Jackpots/JackpotsCarousel/JackpotsCarouselItem.module.css +184 -184
  46. package/dist/components/Jackpots/JackpotsContext.d.ts +4 -0
  47. package/dist/components/Jackpots/JackpotsContext.js +3 -0
  48. package/dist/components/Jackpots/JackpotsList/JackpotsListItem.module.css +184 -184
  49. package/dist/components/Jackpots/useJackpotData.d.ts +14 -0
  50. package/dist/components/Jackpots/useJackpotData.js +93 -0
  51. package/dist/components/Jackpots/useJackpotItemData.d.ts +20 -0
  52. package/dist/components/Jackpots/useJackpotItemData.js +87 -0
  53. package/dist/components/KYC/AutoOpen.js +8 -3
  54. package/dist/components/KYC/Header.d.ts +1 -0
  55. package/dist/components/KYC/Header.js +6 -0
  56. package/dist/components/KYC/KYCReminder.lazy.js +1 -1
  57. package/dist/components/KYC/Step1.d.ts +1 -0
  58. package/dist/components/KYC/Step1.js +12 -0
  59. package/dist/components/KYC/Step2.d.ts +1 -0
  60. package/dist/components/KYC/Step2.js +12 -0
  61. package/dist/components/KYC/Step3.d.ts +1 -0
  62. package/dist/components/KYC/Step3.js +11 -0
  63. package/dist/components/KYC/Step4.d.ts +1 -0
  64. package/dist/components/KYC/Step4.js +6 -0
  65. package/dist/components/KYC/backup/KYCContext.d.ts +1 -5
  66. package/dist/components/KYC/utils.js +18 -18
  67. package/dist/components/Messages/MessageContext.d.ts +1 -5
  68. package/dist/components/Messages/MessageItem.d.ts +4 -0
  69. package/dist/components/Messages/MessageItem.js +34 -0
  70. package/dist/components/News/News.js +1 -1
  71. package/dist/components/Promo/Promo.client.js +1 -1
  72. package/dist/components/Quests/DailyCheckInQuest/DailyCheckInQuest.d.ts +1 -1
  73. package/dist/components/Quests/DailyCheckInQuest/DailyCheckInQuest.js +5 -10
  74. package/dist/components/Quests/DailyCheckInQuest/DailyCheckInQuestModal.js +3 -4
  75. package/dist/components/Quests/OnboardingQuest/OnboardingQuest.d.ts +1 -1
  76. package/dist/components/Quests/WageringQuest/WageringQuest.d.ts +1 -1
  77. package/dist/components/Quests/WageringQuest/WageringQuest.js +2 -3
  78. package/dist/components/Quests/WageringQuest/WageringQuestModal.js +3 -4
  79. package/dist/components/Search/Search.lazy.js +1 -1
  80. package/dist/components/SignUp/SignUpForm.js +1 -2
  81. package/dist/components/SignUp/SignUpKYC/SignUpFormKYC.js +4 -0
  82. package/dist/components/TournamentCounter/TournamentCounter.client.d.ts +2 -0
  83. package/dist/components/TournamentCounter/TournamentCounter.client.js +50 -0
  84. package/dist/components/TournamentCounter/TournamentCounter.d.ts +8 -0
  85. package/dist/components/TournamentCounter/TournamentCounter.js +21 -0
  86. package/dist/components/TournamentCounter/TournamentCounterItem.d.ts +8 -0
  87. package/dist/components/TournamentCounter/TournamentCounterItem.js +106 -0
  88. package/dist/components/TournamentCounter/index.d.ts +1 -0
  89. package/dist/components/TournamentCounter/index.js +1 -0
  90. package/dist/components/Tournaments/TournamentDesktop.d.ts +1 -0
  91. package/dist/components/Tournaments/TournamentDesktop.js +57 -0
  92. package/dist/components/Tournaments/TournamentGameProviders.d.ts +5 -0
  93. package/dist/components/Tournaments/TournamentGameProviders.js +38 -0
  94. package/dist/components/Tournaments/TournamentItemDesktop.d.ts +7 -0
  95. package/dist/components/Tournaments/TournamentItemDesktop.js +56 -0
  96. package/dist/components/Tournaments/TournamentItemMobile.d.ts +7 -0
  97. package/dist/components/Tournaments/TournamentItemMobile.js +54 -0
  98. package/dist/components/Tournaments/TournamentMobile.d.ts +1 -0
  99. package/dist/components/Tournaments/TournamentMobile.js +55 -0
  100. package/dist/components/Tournaments/TournamentRules.d.ts +5 -0
  101. package/dist/components/Tournaments/TournamentRules.js +11 -0
  102. package/dist/components/Tournaments/Tournaments.client.d.ts +2 -0
  103. package/dist/components/Tournaments/Tournaments.client.js +20 -0
  104. package/dist/components/Tournaments/TournamentsCarousel/TournamentsCarouselItem.module.css +184 -184
  105. package/dist/components/Tournaments/TournamentsContext.d.ts +4 -0
  106. package/dist/components/Tournaments/TournamentsContext.js +3 -0
  107. package/dist/components/Tournaments/TournamentsList/TournamentItem.module.css +184 -184
  108. package/dist/components/Tournaments/useTournamentData.d.ts +10 -0
  109. package/dist/components/Tournaments/useTournamentData.js +72 -0
  110. package/dist/components/Tournaments/useTournamentItemData.d.ts +16 -0
  111. package/dist/components/Tournaments/useTournamentItemData.js +64 -0
  112. package/dist/components/index.d.ts +33 -0
  113. package/dist/components/index.js +33 -0
  114. package/dist/constants/envVars.d.ts +5 -0
  115. package/dist/constants/envVars.js +28 -0
  116. package/dist/constants/gameProviders.d.ts +5 -0
  117. package/dist/constants/gameProviders.js +362 -0
  118. package/dist/constants/gameTypes.d.ts +4 -0
  119. package/dist/constants/gameTypes.js +64 -0
  120. package/dist/constants/headerKeys.d.ts +1 -0
  121. package/dist/constants/headerKeys.js +1 -0
  122. package/dist/constants/secretQuestions.d.ts +3 -0
  123. package/dist/constants/secretQuestions.js +24 -0
  124. package/dist/constants/storageKeys.d.ts +2 -0
  125. package/dist/constants/storageKeys.js +2 -0
  126. package/dist/icons/index.d.ts +65 -0
  127. package/dist/icons/index.js +65 -0
  128. package/dist/images/hacksaw-gaming.png +0 -0
  129. package/dist/server/services/index.d.ts +4 -0
  130. package/dist/server/services/index.js +4 -0
  131. package/dist/server/utils/index.d.ts +29 -0
  132. package/dist/server/utils/index.js +29 -0
  133. package/dist/services/queries.js +2527 -2527
  134. package/dist/styles/theme.css +694 -694
  135. package/dist/ui/Presence.d.ts +2 -0
  136. package/dist/ui/Presence.js +7 -0
  137. package/dist/ui/Prose.d.ts +2 -0
  138. package/dist/ui/Prose.js +5 -0
  139. package/dist/ui/index.d.ts +26 -0
  140. package/dist/ui/index.js +26 -0
  141. package/dist/utils/constants.d.ts +2 -0
  142. package/dist/utils/constants.js +2 -0
  143. package/dist/utils/index.d.ts +17 -0
  144. package/dist/utils/index.js +17 -0
  145. package/dist/utils/isBetween3amAnd3pm.d.ts +1 -0
  146. package/dist/utils/isBetween3amAnd3pm.js +5 -0
  147. package/dist/utils/isMobile.d.ts +5 -0
  148. package/dist/utils/isMobile.js +9 -0
  149. package/dist/utils/resizeImageSize.d.ts +0 -1
  150. package/dist/utils/resizeImageSize.js +0 -5
  151. package/package.json +164 -164
  152. package/dist/components/KYC/loadModels.d.ts +0 -1
  153. package/dist/components/KYC/loadModels.js +0 -9
  154. package/dist/components/SignUp/SignUpPagcor/CaptureIdDocument.d.ts +0 -1
  155. package/dist/components/SignUp/SignUpPagcor/CaptureIdDocument.js +0 -198
  156. package/dist/components/SignUp/SignUpPagcor/CaptureSelfie.d.ts +0 -1
  157. package/dist/components/SignUp/SignUpPagcor/CaptureSelfie.js +0 -251
  158. package/dist/components/SignUp/SignUpPagcor/ImageUploader.d.ts +0 -10
  159. package/dist/components/SignUp/SignUpPagcor/ImageUploader.js +0 -41
  160. package/dist/components/SignUp/SignUpPagcor/SignUpFormPagcor.d.ts +0 -1
  161. package/dist/components/SignUp/SignUpPagcor/SignUpFormPagcor.js +0 -429
  162. package/dist/components/SignUp/SignUpPagcor/SignUpPagcor.lazy.d.ts +0 -13
  163. package/dist/components/SignUp/SignUpPagcor/SignUpPagcor.lazy.js +0 -26
  164. package/dist/components/SignUp/SignUpPagcor/SignUpPagcorContext.d.ts +0 -7
  165. package/dist/components/SignUp/SignUpPagcor/SignUpPagcorContext.js +0 -2
  166. package/dist/components/SignUp/SignUpPagcor/useImageUploader.d.ts +0 -11
  167. package/dist/components/SignUp/SignUpPagcor/useImageUploader.js +0 -20
  168. package/dist/constants/BranchCode.d.ts +0 -4
  169. package/dist/constants/BranchCode.js +0 -42
@@ -0,0 +1,65 @@
1
+ export * from './useAccountQuery';
2
+ export * from './useAuthenticateMutation';
3
+ export * from './useAvailablePromosQuery';
4
+ export * from './useAvailableQuestsQuery';
5
+ export * from './useBetRecordsQuery';
6
+ export * from './useBonusesQuery';
7
+ export * from './useBonusQuery';
8
+ export * from './useCashbackBonusesQuery';
9
+ export * from './useCashbackBonusQuery';
10
+ export * from './useCashbackQuery';
11
+ export * from './useCashbacksQuery';
12
+ export * from './useCheckInDailyCheckInQuestMutation';
13
+ export * from './useChunk';
14
+ export * from './useClaimCashbackBonusMutation';
15
+ export * from './useClaimSpotBonusMutation';
16
+ export * from './useControllableState';
17
+ export * from './useCooldown';
18
+ export * from './useCreateGameSessionMutation';
19
+ export * from './useCreateGCashDepositMutation';
20
+ export * from './useCreateGCashWithdrawalMutation';
21
+ export * from './useCreateInstapayWithdrawalMutation';
22
+ export * from './useCreateMayaAppDepositMutation';
23
+ export * from './useCreateMayaAppWithdrawalMutation';
24
+ export * from './useCreateMayaDepositMutation';
25
+ export * from './useCreateMayaWithdrawalMutation';
26
+ export * from './useCreateOnlineBankDepositMutation';
27
+ export * from './useCreateQRPHDepositMutation';
28
+ export * from './useDepositQuery';
29
+ export * from './useDepositRecordsQuery';
30
+ export * from './useDepositsCountQuery';
31
+ export * from './useDisclosure';
32
+ export * from './useEndGameSessionMutation';
33
+ export * from './useFavoriteGamesQuery';
34
+ export * from './useGamesQuery';
35
+ export * from './useGlobalStore';
36
+ export * from './useInfiniteQueryHelper';
37
+ export * from './useInstapayBankListQuery';
38
+ export * from './useIsMayaSessionValidQuery';
39
+ export * from './useJackpotsQuery';
40
+ export * from './useLocaleInfo';
41
+ export * from './useMarkGameAsFavoriteMutation';
42
+ export * from './useMarkMessageAsReadMutation';
43
+ export * from './useMemberVerificationQuery';
44
+ export * from './useMessagesQuery';
45
+ export * from './useMobileNumberParser';
46
+ export * from './useOnMMA';
47
+ export * from './usePaymentSettingsQuery';
48
+ export * from './usePlatformQuery';
49
+ export * from './useProfileCompletionQuery';
50
+ export * from './usePromoQuery';
51
+ export * from './usePromosQuery';
52
+ export * from './useRemainingTime';
53
+ export * from './useSendVerificationCodeMutation';
54
+ export * from './useSessionQuery';
55
+ export * from './useSignInMutation';
56
+ export * from './useSignOutMutation';
57
+ export * from './useSignUpMutation';
58
+ export * from './useTopWinsQuery';
59
+ export * from './useTournamentsQuery';
60
+ export * from './useTransactionRecordsQuery';
61
+ export * from './useUnmarkGameAsFavoriteMutation';
62
+ export * from './useUnreadMessagesCountQuery';
63
+ export * from './useUpdateAccountMutation';
64
+ export * from './useWalletQuery';
65
+ export * from './useWithdrawalRecordsQuery';
@@ -0,0 +1,65 @@
1
+ export * from './useAccountQuery.js';
2
+ export * from './useAuthenticateMutation.js';
3
+ export * from './useAvailablePromosQuery.js';
4
+ export * from './useAvailableQuestsQuery.js';
5
+ export * from './useBetRecordsQuery.js';
6
+ export * from './useBonusesQuery.js';
7
+ export * from './useBonusQuery.js';
8
+ export * from './useCashbackBonusesQuery.js';
9
+ export * from './useCashbackBonusQuery.js';
10
+ export * from './useCashbackQuery.js';
11
+ export * from './useCashbacksQuery.js';
12
+ export * from './useCheckInDailyCheckInQuestMutation.js';
13
+ export * from './useChunk.js';
14
+ export * from './useClaimCashbackBonusMutation.js';
15
+ export * from './useClaimSpotBonusMutation.js';
16
+ export * from './useControllableState.js';
17
+ export * from './useCooldown.js';
18
+ export * from './useCreateGameSessionMutation.js';
19
+ export * from './useCreateGCashDepositMutation.js';
20
+ export * from './useCreateGCashWithdrawalMutation.js';
21
+ export * from './useCreateInstapayWithdrawalMutation.js';
22
+ export * from './useCreateMayaAppDepositMutation.js';
23
+ export * from './useCreateMayaAppWithdrawalMutation.js';
24
+ export * from './useCreateMayaDepositMutation.js';
25
+ export * from './useCreateMayaWithdrawalMutation.js';
26
+ export * from './useCreateOnlineBankDepositMutation.js';
27
+ export * from './useCreateQRPHDepositMutation.js';
28
+ export * from './useDepositQuery.js';
29
+ export * from './useDepositRecordsQuery.js';
30
+ export * from './useDepositsCountQuery.js';
31
+ export * from './useDisclosure.js';
32
+ export * from './useEndGameSessionMutation.js';
33
+ export * from './useFavoriteGamesQuery.js';
34
+ export * from './useGamesQuery.js';
35
+ export * from './useGlobalStore.js';
36
+ export * from './useInfiniteQueryHelper.js';
37
+ export * from './useInstapayBankListQuery.js';
38
+ export * from './useIsMayaSessionValidQuery.js';
39
+ export * from './useJackpotsQuery.js';
40
+ export * from './useLocaleInfo.js';
41
+ export * from './useMarkGameAsFavoriteMutation.js';
42
+ export * from './useMarkMessageAsReadMutation.js';
43
+ export * from './useMemberVerificationQuery.js';
44
+ export * from './useMessagesQuery.js';
45
+ export * from './useMobileNumberParser.js';
46
+ export * from './useOnMMA.js';
47
+ export * from './usePaymentSettingsQuery.js';
48
+ export * from './usePlatformQuery.js';
49
+ export * from './useProfileCompletionQuery.js';
50
+ export * from './usePromoQuery.js';
51
+ export * from './usePromosQuery.js';
52
+ export * from './useRemainingTime.js';
53
+ export * from './useSendVerificationCodeMutation.js';
54
+ export * from './useSessionQuery.js';
55
+ export * from './useSignInMutation.js';
56
+ export * from './useSignOutMutation.js';
57
+ export * from './useSignUpMutation.js';
58
+ export * from './useTopWinsQuery.js';
59
+ export * from './useTournamentsQuery.js';
60
+ export * from './useTransactionRecordsQuery.js';
61
+ export * from './useUnmarkGameAsFavoriteMutation.js';
62
+ export * from './useUnreadMessagesCountQuery.js';
63
+ export * from './useUpdateAccountMutation.js';
64
+ export * from './useWalletQuery.js';
65
+ export * from './useWithdrawalRecordsQuery.js';
@@ -0,0 +1,5 @@
1
+ export declare const FEATURE_FLAG_KEY = "FEATURE_FLAG_ENABLED";
2
+ export declare const useFeatureFlag: () => {
3
+ featureFlagEnabled: boolean;
4
+ disableFeatureFlag: () => void;
5
+ };
@@ -0,0 +1,34 @@
1
+ 'use client';
2
+ import { useRouter, useSearchParams } from 'next/navigation';
3
+ import { useEffect, useState } from 'react';
4
+ export const FEATURE_FLAG_KEY = 'FEATURE_FLAG_ENABLED';
5
+ export const useFeatureFlag = () => {
6
+ const [featureFlagEnabled, setFeatureFlagEnabled] = useState(false);
7
+ const searchParams = useSearchParams();
8
+ const router = useRouter();
9
+ useEffect(() => {
10
+ const futureFlagParam = searchParams.get('future');
11
+ if (futureFlagParam !== null) {
12
+ const isEnabled = futureFlagParam === 'true';
13
+ setFeatureFlagEnabled(isEnabled);
14
+ localStorage.setItem(FEATURE_FLAG_KEY, isEnabled.toString());
15
+ }
16
+ }, [searchParams]);
17
+ useEffect(() => {
18
+ const storedFlag = localStorage.getItem(FEATURE_FLAG_KEY);
19
+ if (storedFlag !== null) {
20
+ setFeatureFlagEnabled(storedFlag === 'true');
21
+ }
22
+ }, []);
23
+ function disableFeatureFlag() {
24
+ setFeatureFlagEnabled(false);
25
+ localStorage.removeItem(FEATURE_FLAG_KEY);
26
+ const params = new URLSearchParams(searchParams.toString());
27
+ params.delete('future');
28
+ router.replace(`?${params.toString()}`, { scroll: false });
29
+ }
30
+ return {
31
+ featureFlagEnabled,
32
+ disableFeatureFlag,
33
+ };
34
+ };
@@ -0,0 +1,4 @@
1
+ export * from './authenticate';
2
+ export * from './getSession';
3
+ export * from './signIn';
4
+ export * from './signOut';
@@ -0,0 +1,4 @@
1
+ export * from './authenticate.js';
2
+ export * from './getSession.js';
3
+ export * from './signIn.js';
4
+ export * from './signOut.js';
@@ -0,0 +1,3 @@
1
+ export * from './createContext';
2
+ export * from './createRecipeContext';
3
+ export * from './toaster';
@@ -0,0 +1,3 @@
1
+ export * from './createContext.js';
2
+ export * from './createRecipeContext.js';
3
+ export * from './toaster.js';
@@ -13,7 +13,7 @@ import piggyBank from '../../images/piggy-bank.png';
13
13
  import { Badge } from '../../ui/Badge/index.js';
14
14
  import { Collapsible } from '../../ui/Collapsible/index.js';
15
15
  import { Progress } from '../../ui/Progress/index.js';
16
- import { Prose } from '../../ui/Prose/index.js';
16
+ import { Prose } from '../../ui/Prose.js';
17
17
  import { capitalize } from '../../utils/capitalize.js';
18
18
  import { formatNumber } from '../../utils/formatNumber.js';
19
19
  import { parseDecimal } from '../../utils/parseDecimal.js';
@@ -11,7 +11,7 @@ import { useGlobalStore } from '../../client/hooks/useGlobalStore.js';
11
11
  import { useLocaleInfo } from '../../client/hooks/useLocaleInfo.js';
12
12
  import { ChevronLeftIcon } from '../../icons/ChevronLeftIcon.js';
13
13
  import { Button } from '../../ui/Button/index.js';
14
- import { Prose } from '../../ui/Prose/index.js';
14
+ import { Prose } from '../../ui/Prose.js';
15
15
  export function Cashback__client(props) {
16
16
  const availablePromosQuery = useAvailablePromosQuery();
17
17
  const cashbackQuery = useCashbackQuery(props.id);
@@ -3,7 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
3
3
  import Image from 'next/image';
4
4
  import Link from 'next/link';
5
5
  import { ChevronLeftIcon } from '../../icons/ChevronLeftIcon.js';
6
- import { Prose } from '../../ui/Prose/index.js';
6
+ import { Prose } from '../../ui/Prose.js';
7
7
  import { stripTags } from '../../utils/stripTags.js';
8
8
  export function CustomPromo(props) {
9
9
  return (_jsxs(_Fragment, { children: [_jsx("meta", { name: "description", content: stripTags(props.promo.description) }), _jsx("meta", { name: "og:title", content: props.promo.name }), _jsx("meta", { name: "og:description", content: stripTags(props.promo.description) }), _jsx("meta", { name: "og:image", content: props.promo.banner }), _jsx("meta", { name: "twitter:title", content: props.promo.name }), _jsx("meta", { name: "twitter:description", content: stripTags(props.promo.description) }), _jsx("meta", { name: "twitter:image", content: props.promo.banner }), _jsx("meta", { name: "twitter:card", content: "summary_large_image" }), _jsxs("div", { className: props.className, children: [_jsxs(Link, { href: props.viewAllPromosUrl ?? '/promos', className: "text-button-tertiary-fg flex w-fit items-center gap-lg text-lg font-semibold", children: [_jsx(ChevronLeftIcon, { className: "size-6" }), "Back to all Promotions"] }), _jsx(Image, { src: props.promo.banner, alt: "", width: 1024, height: 600, priority: true, unoptimized: true, className: "mt-xl h-auto w-full rounded-xl lg:mt-6" }), _jsx("h1", { className: "mt-xl text-2xl font-semibold lg:mt-6 lg:text-3xl", children: props.promo.name }), _jsx(Prose, { className: "mt-2xl lg:mt-6", dangerouslySetInnerHTML: {
@@ -0,0 +1,10 @@
1
+ import type { ComponentProps, ComponentType } from 'react';
2
+ interface EmptyProps {
3
+ icon: ComponentType<ComponentProps<'svg'>>;
4
+ title: string;
5
+ message: string;
6
+ style?: React.CSSProperties;
7
+ className?: string;
8
+ }
9
+ export declare function Empty(props: EmptyProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function Empty(props) {
3
+ return (_jsxs("div", { role: "alert", "aria-live": "polite", style: props.style, className: props.className, children: [_jsxs("div", { className: "relative mx-auto w-[9.5rem] pt-4", children: [_jsx("div", { className: "bg-utility-gray-200 absolute left-1/2 top-0 size-[6.5rem] -translate-x-1/2 rounded-full" }), _jsx(CloudIcon, { className: "relative h-auto w-full shrink-0" }), _jsx("div", { className: "bg-utility-gray-200/40 absolute bottom-2 left-1/2 flex size-12 -translate-x-1/2 items-center justify-center rounded-full backdrop-blur-sm", children: _jsx(props.icon, { className: "size-6 text-white" }) }), _jsx("div", { className: "bg-utility-gray-200 absolute left-4 top-3.5 size-2.5 rounded-full" }), _jsx("div", { className: "bg-utility-gray-200 absolute bottom-0.5 left-3 size-3.5 rounded-full" }), _jsx("div", { className: "bg-utility-gray-200 absolute right-3.5 top-1 size-2 rounded-full" }), _jsx("div", { className: "bg-utility-gray-200 absolute right-0 top-6.5 size-3.5 rounded-full" })] }), _jsx("h2", { className: "mt-xl text-center font-semibold", children: props.title }), _jsx("p", { className: "text-text-tertiary-600 mx-auto mt-xs max-w-[25rem] text-center text-sm", children: props.message })] }));
4
+ }
5
+ function CloudIcon(props) {
6
+ return (_jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 152 104", fill: "none", ...props, children: [_jsxs("g", { filter: "url(#filter0_dd_2719_19242)", children: [_jsx("path", { 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", fill: "#F9FAFB" }), _jsx("ellipse", { cx: "45.6", cy: "38.4008", rx: "25.6", ry: "25.6", fill: "url(#paint0_linear_2719_19242)" }), _jsx("circle", { cx: "77.6", cy: "32", r: "32", fill: "url(#paint1_linear_2719_19242)" }), _jsx("ellipse", { cx: "109.6", cy: "41.5992", rx: "22.4", ry: "22.4", fill: "url(#paint2_linear_2719_19242)" })] }), _jsxs("defs", { children: [_jsxs("filter", { id: "filter0_dd_2719_19242", x: "0", y: "0", width: "152", height: "104", filterUnits: "userSpaceOnUse", colorInterpolationFilters: "sRGB", children: [_jsx("feFlood", { floodOpacity: "0", result: "BackgroundImageFix" }), _jsx("feColorMatrix", { in: "SourceAlpha", type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0", result: "hardAlpha" }), _jsx("feMorphology", { radius: "4", operator: "erode", in: "SourceAlpha", result: "effect1_dropShadow_2719_19242" }), _jsx("feOffset", { dy: "8" }), _jsx("feGaussianBlur", { stdDeviation: "4" }), _jsx("feComposite", { in2: "hardAlpha", operator: "out" }), _jsx("feColorMatrix", { type: "matrix", 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" }), _jsx("feBlend", { mode: "normal", in2: "BackgroundImageFix", result: "effect1_dropShadow_2719_19242" }), _jsx("feColorMatrix", { in: "SourceAlpha", type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0", result: "hardAlpha" }), _jsx("feMorphology", { radius: "4", operator: "erode", in: "SourceAlpha", result: "effect2_dropShadow_2719_19242" }), _jsx("feOffset", { dy: "20" }), _jsx("feGaussianBlur", { stdDeviation: "12" }), _jsx("feComposite", { in2: "hardAlpha", operator: "out" }), _jsx("feColorMatrix", { type: "matrix", 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" }), _jsx("feBlend", { mode: "normal", in2: "effect1_dropShadow_2719_19242", result: "effect2_dropShadow_2719_19242" }), _jsx("feBlend", { mode: "normal", in: "SourceGraphic", in2: "effect2_dropShadow_2719_19242", result: "shape" })] }), _jsxs("linearGradient", { id: "paint0_linear_2719_19242", x1: "25.9429", y1: "21.4865", x2: "71.2", y2: "64.0007", gradientUnits: "userSpaceOnUse", children: [_jsx("stop", { stopColor: "#D0D5DD" }), _jsx("stop", { offset: "0.350715", stopColor: "white", stopOpacity: "0" })] }), _jsxs("linearGradient", { id: "paint1_linear_2719_19242", x1: "53.0286", y1: "10.8571", x2: "109.6", y2: "64", gradientUnits: "userSpaceOnUse", children: [_jsx("stop", { stopColor: "#D0D5DD" }), _jsx("stop", { offset: "0.350715", stopColor: "white", stopOpacity: "0" })] }), _jsxs("linearGradient", { id: "paint2_linear_2719_19242", x1: "92.4", y1: "26.7992", x2: "132", y2: "63.9992", gradientUnits: "userSpaceOnUse", children: [_jsx("stop", { stopColor: "#D0D5DD" }), _jsx("stop", { offset: "0.350715", stopColor: "white", stopOpacity: "0" })] })] })] }));
7
+ }
@@ -0,0 +1 @@
1
+ export declare function FeatureFlag(): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
3
+ import { useFeatureFlag } from '../../client/hooks/useFeatureFlag.js';
4
+ export function FeatureFlag() {
5
+ const { featureFlagEnabled, disableFeatureFlag } = useFeatureFlag();
6
+ if (!featureFlagEnabled) {
7
+ return null;
8
+ }
9
+ return (_jsx("div", { className: "fixed bottom-3 flex w-full flex-col items-center justify-center", children: _jsxs("div", { className: "bg-black/70 p-1", children: ["Experimental features are enabled.", ' ', _jsxs("button", { onClick: () => disableFeatureFlag(), className: "cursor-pointer underline", children: [' ', "Disable"] })] }) }));
10
+ }
@@ -22,7 +22,7 @@ import { AlertDialog } from '../../ui/AlertDialog/index.js';
22
22
  import { Button } from '../../ui/Button/index.js';
23
23
  import { IconButton } from '../../ui/IconButton/index.js';
24
24
  import { Portal } from '../../ui/Portal/index.js';
25
- import { Presence } from '../../ui/Presence/index.js';
25
+ import { Presence } from '../../ui/Presence.js';
26
26
  export function GameLaunch() {
27
27
  const globalStore = useGlobalStore(useShallow((ctx) => ({
28
28
  gameLaunch: ctx.gameLaunch,
@@ -0,0 +1,2 @@
1
+ import type { Game } from '@opexa/portal-sdk-core';
2
+ export declare const GameContext: import("react").Context<Game>, useGameContext: () => Game;
@@ -0,0 +1,2 @@
1
+ import { createContext } from '../../client/utils/index.js';
2
+ export const [GameContext, useGameContext] = createContext();
@@ -10,7 +10,7 @@ import { SearchLgIcon } from '../../icons/SearchLgIcon.js';
10
10
  import { Button } from '../../ui/Button/index.js';
11
11
  import { Combobox } from '../../ui/Combobox/index.js';
12
12
  import { Portal } from '../../ui/Portal/index.js';
13
- import { Presence } from '../../ui/Presence/index.js';
13
+ import { Presence } from '../../ui/Presence.js';
14
14
  import { getGameImageUrl } from '../../utils/getGameImageUrl.js';
15
15
  import { GameLaunchTrigger } from '../GameLaunch/index.js';
16
16
  export function GamesSearch(props) {
@@ -0,0 +1,10 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface InfiniteScrollProps {
3
+ loader?: ReactNode;
4
+ hasMore?: boolean;
5
+ loadMore: () => Promise<void> | void;
6
+ children?: ReactNode;
7
+ style?: React.CSSProperties;
8
+ className?: string;
9
+ }
10
+ export declare function InfiniteScroll(props: InfiniteScrollProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,25 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Fragment } from 'react';
4
+ import { useBoolean, useDebounceCallback, useIntersectionObserver, } from 'usehooks-ts';
5
+ export function InfiniteScroll(props) {
6
+ const { value: loading, setValue: setLoading } = useBoolean(false);
7
+ const loader = props.loader ?? null;
8
+ const hasMore = props.hasMore ?? false;
9
+ const loadMore = useDebounceCallback(async () => {
10
+ if (loading)
11
+ return;
12
+ if (!hasMore)
13
+ return;
14
+ setLoading(true);
15
+ await props.loadMore();
16
+ setLoading(false);
17
+ }, 300);
18
+ const [ref] = useIntersectionObserver({
19
+ onChange(isIntersecting) {
20
+ if (isIntersecting)
21
+ loadMore();
22
+ },
23
+ });
24
+ return (_jsxs(Fragment, { children: [props.children, _jsx("div", { ref: ref, role: "presentation", style: props.style, className: props.className, hidden: !hasMore, children: !!hasMore && _jsx(Fragment, { children: loader }) })] }));
25
+ }
@@ -0,0 +1,2 @@
1
+ import type { JackpotCounterProps } from './JackpotCounter';
2
+ export declare function JackpotCounter__client(props: JackpotCounterProps): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,66 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import useEmblaCarousel from 'embla-carousel-react';
4
+ import { isString } from 'lodash-es';
5
+ import Link from 'next/link';
6
+ import { useCallback, useEffect, useState } from 'react';
7
+ import { useJackpotsQuery } from '../../client/hooks/index.js';
8
+ import { ArrowLeftIcon, ArrowRightIcon, ChevronRightIcon } from '../../icons/index.js';
9
+ import { Button } from '../../ui/index.js';
10
+ import { JackpotCounterItem } from './JackpotCounterItem.js';
11
+ export function JackpotCounter__client(props) {
12
+ const [emblaRef, emblaApi] = useEmblaCarousel({
13
+ align: 'start',
14
+ slidesToScroll: 1,
15
+ });
16
+ const scrollPrev = useCallback(() => {
17
+ if (emblaApi)
18
+ emblaApi.scrollPrev();
19
+ }, [emblaApi]);
20
+ const scrollNext = useCallback(() => {
21
+ if (emblaApi)
22
+ emblaApi.scrollNext();
23
+ }, [emblaApi]);
24
+ const [canScrollPrev, setCanScrollPrev] = useState(false);
25
+ const [canScrollNext, setCanScrollNext] = useState(false);
26
+ const onSelect = useCallback(() => {
27
+ if (!emblaApi)
28
+ return;
29
+ setCanScrollPrev(emblaApi.canScrollPrev());
30
+ setCanScrollNext(emblaApi.canScrollNext());
31
+ }, [emblaApi]);
32
+ useEffect(() => {
33
+ if (!emblaApi)
34
+ return;
35
+ onSelect();
36
+ emblaApi.on('select', onSelect);
37
+ emblaApi.on('reInit', onSelect);
38
+ }, [emblaApi, onSelect]);
39
+ const jackpotsQuery = useJackpotsQuery({
40
+ first: 100,
41
+ filter: {
42
+ status: {
43
+ equal: 'ACTIVE',
44
+ },
45
+ deleted: {
46
+ equal: false,
47
+ },
48
+ },
49
+ sort: {
50
+ cursor: 'POOL',
51
+ order: 'DESC',
52
+ },
53
+ });
54
+ const jackpots = jackpotsQuery.data?.pages[0].edges.map((edge) => edge.node) ?? [];
55
+ if (jackpots.length <= 0)
56
+ return null;
57
+ const classNames = isString(props.className)
58
+ ? { root: props.className }
59
+ : (props.className ?? {});
60
+ return (_jsxs("div", { className: classNames.root, children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("div", { className: "text-lg font-semibold", children: props.heading ?? 'Jackpots' }), _jsxs("div", { className: "flex items-center md:gap-3xl", children: [_jsxs(Link, { href: props.viewAllUrl ?? '/jackpots', className: "text-button-tertiary-fg flex gap-sm text-sm font-semibold", children: ["See All", _jsx(ChevronRightIcon, { className: "size-5 lg:hidden" })] }), _jsxs("div", { className: "hidden lg:flex", children: [_jsx(Button, { disabled: !canScrollPrev, onClick: scrollPrev, variant: "outline", colorScheme: "gray", className: "rounded-r-none border-r-0", "aria-label": "Previous", children: _jsx(ArrowLeftIcon, { className: "size-5" }) }), _jsxs(Button, { disabled: !canScrollNext, onClick: scrollNext, variant: "outline", colorScheme: "gray", className: "rounded-l-none", "aria-label": "Next", children: [_jsx("span", { className: "sr-only", children: "Next" }), _jsx(ArrowRightIcon, { className: "size-5" })] })] })] })] }), _jsx("div", { className: "relative mt-lg lg:overflow-hidden", ref: emblaRef, children: _jsx("div", { className: "flex gap-2.5", children: jackpots.map((jackpot) => (_jsx(JackpotCounterItem, { jackpot: jackpot, className: {
61
+ root: {
62
+ className: classNames.jackpotCounterItemRoot?.className,
63
+ style: classNames.jackpotCounterItemRoot?.style,
64
+ },
65
+ }, viewAllUrl: props.viewAllUrl, hideAnimation: props.hideAnimation }, jackpot.id))) }) })] }));
66
+ }
@@ -0,0 +1,17 @@
1
+ import type { CSSProperties } from 'react';
2
+ export interface ClassNameEntries {
3
+ root?: string;
4
+ jackpotCounterItemRoot?: {
5
+ className?: string;
6
+ style?: CSSProperties;
7
+ };
8
+ }
9
+ export interface JackpotCounterProps {
10
+ /** @default "Promos" */
11
+ heading?: string;
12
+ /** @default "/jackpots" */
13
+ viewAllUrl?: string;
14
+ className?: string | ClassNameEntries;
15
+ hideAnimation?: boolean;
16
+ }
17
+ export declare function JackpotCounter(props: JackpotCounterProps): Promise<import("react/jsx-runtime").JSX.Element>;
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { prefetchJackpotsQuery } from '../../server/utils/index.js';
3
+ import { JackpotCounter__client } from './JackpotCounter.client.js';
4
+ export async function JackpotCounter(props) {
5
+ await prefetchJackpotsQuery({
6
+ first: 100,
7
+ filter: {
8
+ status: {
9
+ equal: 'ACTIVE',
10
+ },
11
+ deleted: {
12
+ equal: false,
13
+ },
14
+ },
15
+ sort: {
16
+ cursor: 'POOL',
17
+ order: 'DESC',
18
+ },
19
+ });
20
+ return _jsx(JackpotCounter__client, { ...props });
21
+ }
@@ -0,0 +1,18 @@
1
+ import type { Jackpot } from '@opexa/portal-sdk-core';
2
+ import { type CSSProperties } from 'react';
3
+ interface ClassNameEntries {
4
+ root?: {
5
+ className?: string;
6
+ style?: CSSProperties;
7
+ };
8
+ }
9
+ export interface JackpotCounterCardProps {
10
+ jackpot: Jackpot;
11
+ className?: string | ClassNameEntries;
12
+ style?: string;
13
+ /** @default "/jackpots" */
14
+ viewAllUrl?: string;
15
+ hideAnimation?: boolean;
16
+ }
17
+ export declare function JackpotCounterItem({ jackpot, className, viewAllUrl, hideAnimation, }: JackpotCounterCardProps): import("react/jsx-runtime").JSX.Element;
18
+ export {};
@@ -0,0 +1,109 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { Progress } from '@ark-ui/react';
4
+ import { isString } from 'lodash-es';
5
+ import Image from 'next/image';
6
+ import Link from 'next/link';
7
+ import { useCallback, useMemo } from 'react';
8
+ import { twMerge } from 'tailwind-merge';
9
+ import { useLocaleInfo } from '../../client/hooks/index.js';
10
+ import { useJackpotPayoutsQuery } from '../../client/hooks/useJackpotPayoutsQuery.js';
11
+ import { ArrowNarrowUpRightIcon, ChevronLeftIcon, ChevronRightIcon, Trophy01Icon, User01Icon, } from '../../icons/index.js';
12
+ import { StarIcon } from '../../icons/StarIcon.js';
13
+ import closeChest from '../../images/close-chest.png';
14
+ import firstPlace from '../../images/first-place.png';
15
+ import leaderboard from '../../images/leaderboard.png';
16
+ import openChest from '../../images/open-chest.png';
17
+ import { formatNumber, getPercentage, mask } from '../../utils/index.js';
18
+ import styles from './JackpotCounterItem.module.css';
19
+ export function JackpotCounterItem({ jackpot, className, viewAllUrl, hideAnimation = false, }) {
20
+ const jackpotPayoutsQuery = useJackpotPayoutsQuery({
21
+ first: 30,
22
+ filter: {
23
+ jackpot: {
24
+ equal: jackpot.id,
25
+ },
26
+ },
27
+ sort: {
28
+ cursor: 'AMOUNT',
29
+ order: 'DESC',
30
+ },
31
+ }, {
32
+ enabled: typeof window !== 'undefined',
33
+ });
34
+ const jackpotPayouts = jackpotPayoutsQuery.data?.pages[0].edges.map((edge) => edge.node) ?? [];
35
+ const topJackpotPayout = jackpotPayouts[0] ?? [];
36
+ const localeInfo = useLocaleInfo();
37
+ const isPayingOut = jackpot.drawing;
38
+ const jackpotAmount = isPayingOut
39
+ ? jackpot.maximumJackpotPoolLimit
40
+ : jackpot.pool;
41
+ const Arrow = useCallback(({ index }) => {
42
+ const Icon = isPayingOut ? ChevronLeftIcon : ChevronRightIcon;
43
+ return (_jsx(Icon, { className: twMerge('scale-400 lg:scale-250 text-brand-300 min-w-2.5 lg:min-w-4', isPayingOut
44
+ ? styles['animate-wave-color-error']
45
+ : styles['animate-wave-color-success']), style: {
46
+ animationDelay: isPayingOut
47
+ ? `${(40 - index - 1) * 0.1}s`
48
+ : `${index * 0.1}s`,
49
+ } }));
50
+ }, [isPayingOut]);
51
+ const arrowImages = useMemo(() => Array.from({ length: 40 }, (_, i) => (_jsx(Arrow, { isFirst: i === 0, index: i }, i))), [Arrow]);
52
+ const classNames = isString(className)
53
+ ? { root: { className } }
54
+ : (className ?? {});
55
+ return (_jsxs("div", { className: twMerge('bg-bg-tertiary border-border-primary relative flex w-full shrink-0 rounded-2xl border p-3 text-center lg:gap-4 lg:p-5', classNames.root?.className), style: classNames.root?.style, children: [_jsxs("div", { className: "z-1 relative flex flex-1 flex-col", children: [_jsx("div", { className: "flex h-full flex-col justify-between", children: _jsx("div", { className: "flex w-full justify-between", children: _jsxs("div", { className: "flex w-full flex-col", children: [_jsxs("div", { className: "relative flex w-full justify-between", children: [_jsxs("div", { children: [isPayingOut ? (_jsxs("div", { className: "border-utility-success-200 bg-utility-success-50 text-utility-success-700 flex w-fit items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium", children: [_jsx("span", { className: "full bg-utility-success-500 size-1.5 animate-pulse rounded" }), "Paying Out"] })) : (_jsxs("div", { className: "border-utility-blue-200 bg-utility-blue-50 text-utility-blue-700 flex w-fit items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium", children: [_jsx(ArrowNarrowUpRightIcon, { className: "text-utility-blue-500 size-3.5" }), "Accumulating"] })), _jsx("div", { className: "text-text-primary-900 mt-1 text-left text-lg font-medium lg:mt-5 lg:text-2xl", children: jackpot.name }), _jsx("div", { className: "bg-bg-primary text-brand-400 mt-1.5 w-fit rounded-md px-2 py-1 text-2xl font-bold lg:mt-2 lg:text-4xl", children: formatNumber(jackpotAmount, {
56
+ currency: localeInfo.currency.code,
57
+ minDecimalPlaces: 2,
58
+ maxDecimalPlaces: 2,
59
+ }) })] }), _jsx("div", { className: "z-1 bottom-[-60] right-0 lg:absolute", children: _jsx(Image, { width: 150, height: 150, src: isPayingOut ? openChest : closeChest, alt: "closeChest", quality: 100, className: "h-25 w-25 lg:h-37.5 lg:w-37.5 size-full p-2" }) })] }), topJackpotPayout.amount ? (_jsx("div", { children: _jsxs("div", { className: "bg-bg-primary relative mt-4 hidden w-full gap-4 rounded-lg p-4 lg:flex", children: [_jsxs("div", { className: "bg-bg-tertiary relative flex h-18 w-18 items-center justify-center rounded-full", children: [_jsx(User01Icon, { className: "text-text-quarterary-500 size-9" }), _jsx("div", { className: "bg-yellow-400 text-brand-950 border-bg-primary absolute bottom-0 right-0 flex h-6 w-6 items-center justify-center rounded-full border-[1.5px] text-xs font-bold", children: "1st" })] }), _jsxs("div", { className: "flex flex-col gap-1 text-left", children: [_jsxs("div", { className: "border-utility-brand-200 bg-utility-brand-50 text-utility-brand-700 flex h-fit w-fit items-center gap-1 rounded-sm border px-2 py-0.5 text-xs font-medium", children: [_jsx(Trophy01Icon, { className: "text-utility-brand-600 size-3.5" }), "Top Payout"] }), _jsx("div", { className: "font-semibold", children: topJackpotPayout.member.name }), _jsx("div", { className: "text-brand-400 text-2xl", children: formatNumber(topJackpotPayout.amount, {
60
+ currency: localeInfo.currency.code,
61
+ minDecimalPlaces: 2,
62
+ maxDecimalPlaces: 2,
63
+ }) })] })] }) })) : (_jsxs("div", { className: "bg-bg-primary relative mt-4 hidden w-full gap-4 rounded-lg p-4 lg:flex", children: [_jsx(Image, { width: 66, height: 87, src: firstPlace, alt: "firstPlace", className: "size-full h-auto w-[66px] mix-blend-luminosity" }), _jsxs("div", { className: "flex flex-col gap-1 text-left", children: [_jsxs("div", { className: "border-utility-brand-200 bg-utility-brand-50 text-utility-brand-700 flex h-fit w-fit items-center gap-1 rounded-sm border px-2 py-0.5 text-xs font-medium", children: [_jsx(Trophy01Icon, { className: "text-utility-brand-600 size-3.5" }), "Top Payout"] }), _jsx("div", { className: "font-semibold", children: "No winners yet" }), _jsx("div", { className: "text-text-secondary-700 text-xs", children: "You could be the first to win the tournament!" })] })] }))] }) }) }), _jsxs("div", { className: "mt-3 lg:mt-4", children: [_jsxs("div", { className: "mb-1 flex justify-between", children: [_jsx("div", { className: "text-text-primary-900 text-xs font-semibold", children: formatNumber(0, {
64
+ currency: localeInfo.currency.code,
65
+ compact: true,
66
+ }) }), _jsxs("div", { className: "relative flex items-center justify-end gap-1.5", children: [isPayingOut ? (_jsxs("div", { className: "flex w-6 items-center", children: [_jsx("div", { className: twMerge('absolute left-0', styles['animate-arrow-red-flash-1']), children: _jsx(ChevronLeftIcon, { className: "size-4.5" }) }), _jsx("div", { className: twMerge('absolute left-1.5', styles['animate-arrow-red-flash-2']), children: _jsx(ChevronLeftIcon, { className: "size-4.5" }) }), _jsx("div", { className: twMerge('absolute left-3', styles['animate-arrow-red-flash-3']), children: _jsx(ChevronLeftIcon, { className: "size-4.5" }) })] })) : (_jsxs("div", { className: "flex w-6 items-center", children: [_jsx("div", { className: twMerge('absolute left-0', styles['animate-arrow-green-flash-1']), children: _jsx(ChevronRightIcon, { className: "size-4.5" }) }), _jsx("div", { className: twMerge('absolute left-1.5', styles['animate-arrow-green-flash-2']), children: _jsx(ChevronRightIcon, { className: "size-4.5" }) }), _jsx("div", { className: twMerge('absolute left-3', styles['animate-arrow-green-flash-3']), children: _jsx(ChevronRightIcon, { className: "size-4.5" }) })] })), _jsx("div", { className: "text-text-primary-900 text-xs font-semibold", children: formatNumber(jackpot?.maximumJackpotPoolLimit, {
67
+ currency: localeInfo.currency.code,
68
+ compact: true,
69
+ }) })] })] }), _jsx(Progress.Root, { className: "bg-bg-primary h-2 w-full rounded-full lg:h-4", max: 100, value: getPercentage(jackpot.pool, jackpot.maximumJackpotPoolLimit), children: _jsx(Progress.Track, { className: "bg-bg-primary h-full overflow-hidden rounded-full", children: _jsx(Progress.Range, { className: "bg-brand-500 relative h-full overflow-hidden rounded-full pl-1.5", children: _jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-start pl-1.5", "aria-hidden": "true", children: arrowImages }) }) }) }), _jsx("div", { className: "mt-1 block text-start text-2xs lg:hidden", children: isPayingOut
70
+ ? `The pot has hit ${formatNumber(jackpot?.maximumJackpotPoolLimit, {
71
+ currency: localeInfo.currency.code,
72
+ compact: true,
73
+ })} Play now for your chance to win big! πŸ”₯`
74
+ : getAccumulatingJackpotDescription(Number(jackpot?.pool) ?? 0, Number(jackpot?.maximumJackpotPoolLimit) ?? 0) })] })] }), _jsxs("div", { className: "z-1 hidden flex-1 space-y-4 lg:block", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex gap-2", children: [_jsx(Image, { width: 24, height: 24, src: leaderboard, quality: 100, alt: "leaderboardIcon", className: "size-full h-auto w-6" }), _jsx("div", { className: "text-text-primary-900 text-lg font-semibold", children: jackpotPayouts.length ? 'Recent payouts' : 'Starting soon!' })] }), _jsxs(Link, { className: "text-button-tertiary-fg flex text-sm font-semibold", href: viewAllUrl ?? '/jackpots', children: ["See details", _jsx(ChevronRightIcon, { className: "size-5" })] })] }), _jsx("div", { className: twMerge('max-h-[272px] overflow-y-scroll', styles['scrollArea']), children: _jsx("div", { className: "border-gray-200 overflow-hidden rounded-xl", children: _jsxs("table", { className: "w-full", children: [_jsx("thead", { children: _jsxs("tr", { className: "bg-bg-secondary text-text-tertiary-600 h-8 text-xs font-medium", children: [_jsx("th", { children: "Player" }), _jsx("th", { children: "Multiplier" }), _jsx("th", { children: "Prize" })] }) }), _jsx("tbody", { children: jackpotPayouts.length ? (_jsx(_Fragment, { children: jackpotPayouts.map((jackpotPayout, i) => (_jsxs("tr", { className: "bg-bg-primary text-text-secondary-700 text-sm", children: [_jsx("td", { className: "border-border-secondary h-12 border-t-2", children: mask(jackpotPayout.member.name, {
75
+ totalCharsCount: 6,
76
+ }) }), _jsxs("td", { className: "border-border-secondary h-12 border-t-2", children: [jackpotPayout.multiplier, "x"] }), _jsx("td", { className: "border-border-secondary text-brand-400 h-12 border-t-2", children: formatNumber(jackpotPayout.amount, {
77
+ currency: localeInfo.currency.code,
78
+ minDecimalPlaces: 2,
79
+ maxDecimalPlaces: 2,
80
+ }) })] }, i))) })) : (_jsx(_Fragment, { children: Array.from({ length: 10 }).map((_, i) => (_jsxs("tr", { className: "bg-bg-primary text-text-secondary-700 text-sm", children: [_jsx("td", { className: "border-border-secondary h-12 w-[52px] border-t-2", children: i + 1 < 6 ? (_jsxs("div", { className: "relative", children: [_jsx(StarIcon, { className: twMerge('mx-auto size-6.5', starTierStyles[i].starColor) }), _jsx("span", { className: twMerge('absolute inset-0 mt-0.5 flex items-center justify-center text-2xs font-bold', starTierStyles[i].numberColor), children: i + 1 })] })) : (i + 1) }), _jsx("td", { className: "border-border-secondary h-12 border-t-2", children: "-" }), _jsx("td", { className: "border-border-secondary h-12 border-t-2", children: "-" }), _jsx("td", { className: "border-border-secondary h-12 border-t-2", children: "-" })] }, i))) })) })] }) }) })] }), isPayingOut && !hideAnimation && (_jsx("div", { className: twMerge(styles['light-rays'], 'absolute right-0 top-0 rounded-2xl [--light-rays-top:25%] lg:[--light-rays-top:150px]') }))] }));
81
+ }
82
+ const getAccumulatingJackpotDescription = (part, total) => {
83
+ const percentage = total === 0 ? 0 : (part / total) * 100;
84
+ return percentage <= 90
85
+ ? 'The jackpot is heating up! Keep playing to stay in the action and watch it grow!'
86
+ : 'πŸ”₯ It’s about to pop! Stay in the game for your shot at the prize!';
87
+ };
88
+ const starTierStyles = [
89
+ {
90
+ starColor: 'text-yellow-400',
91
+ numberColor: 'text-bg-primary',
92
+ },
93
+ {
94
+ starColor: 'text-utility-gray-700',
95
+ numberColor: 'text-bg-primary',
96
+ },
97
+ {
98
+ starColor: 'text-yellow-700',
99
+ numberColor: 'text-bg-primary',
100
+ },
101
+ {
102
+ starColor: 'text-bg-quaternary',
103
+ numberColor: 'text-text-primary-900',
104
+ },
105
+ {
106
+ starColor: 'text-bg-quaternary',
107
+ numberColor: 'text-text-primary-900',
108
+ },
109
+ ];