@sudobility/heavymath_ui 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/dist/components/dealer/DealerNFTList.d.ts +6 -0
  2. package/dist/components/dealer/DealerNFTList.d.ts.map +1 -0
  3. package/dist/components/dealer/DealerNFTList.js +46 -0
  4. package/dist/components/dealer/DealerNFTList.js.map +1 -0
  5. package/dist/components/dealer/DealerNFTSelector.d.ts +8 -0
  6. package/dist/components/dealer/DealerNFTSelector.d.ts.map +1 -0
  7. package/dist/components/dealer/DealerNFTSelector.js +10 -0
  8. package/dist/components/dealer/DealerNFTSelector.js.map +1 -0
  9. package/dist/components/dealer/UpcomingGamesWidget.d.ts +8 -0
  10. package/dist/components/dealer/UpcomingGamesWidget.d.ts.map +1 -0
  11. package/dist/components/dealer/UpcomingGamesWidget.js +68 -0
  12. package/dist/components/dealer/UpcomingGamesWidget.js.map +1 -0
  13. package/dist/components/icons/index.d.ts +2 -0
  14. package/dist/components/icons/index.d.ts.map +1 -0
  15. package/dist/components/icons/index.js +2 -0
  16. package/dist/components/icons/index.js.map +1 -0
  17. package/dist/components/market/GameMarketsSection.d.ts +16 -0
  18. package/dist/components/market/GameMarketsSection.d.ts.map +1 -0
  19. package/dist/components/market/GameMarketsSection.js +18 -0
  20. package/dist/components/market/GameMarketsSection.js.map +1 -0
  21. package/dist/components/market/InlineCreateMarketForm.d.ts +17 -0
  22. package/dist/components/market/InlineCreateMarketForm.d.ts.map +1 -0
  23. package/dist/components/market/InlineCreateMarketForm.js +274 -0
  24. package/dist/components/market/InlineCreateMarketForm.js.map +1 -0
  25. package/dist/components/market/LeagueMarketsSection.d.ts +16 -0
  26. package/dist/components/market/LeagueMarketsSection.d.ts.map +1 -0
  27. package/dist/components/market/LeagueMarketsSection.js +15 -0
  28. package/dist/components/market/LeagueMarketsSection.js.map +1 -0
  29. package/dist/components/market/MarketCard.d.ts +8 -0
  30. package/dist/components/market/MarketCard.d.ts.map +1 -0
  31. package/dist/components/market/MarketCard.js +30 -0
  32. package/dist/components/market/MarketCard.js.map +1 -0
  33. package/dist/components/market/MarketList.d.ts +9 -0
  34. package/dist/components/market/MarketList.d.ts.map +1 -0
  35. package/dist/components/market/MarketList.js +17 -0
  36. package/dist/components/market/MarketList.js.map +1 -0
  37. package/dist/components/market/MarketStatusBadge.d.ts +8 -0
  38. package/dist/components/market/MarketStatusBadge.d.ts.map +1 -0
  39. package/dist/components/market/MarketStatusBadge.js +31 -0
  40. package/dist/components/market/MarketStatusBadge.js.map +1 -0
  41. package/dist/components/market/PredictionSlider.d.ts +11 -0
  42. package/dist/components/market/PredictionSlider.d.ts.map +1 -0
  43. package/dist/components/market/PredictionSlider.js +55 -0
  44. package/dist/components/market/PredictionSlider.js.map +1 -0
  45. package/dist/components/market/SportPredictionCard.d.ts +15 -0
  46. package/dist/components/market/SportPredictionCard.d.ts.map +1 -0
  47. package/dist/components/market/SportPredictionCard.js +92 -0
  48. package/dist/components/market/SportPredictionCard.js.map +1 -0
  49. package/dist/components/market/TeamMarketsSection.d.ts +17 -0
  50. package/dist/components/market/TeamMarketsSection.d.ts.map +1 -0
  51. package/dist/components/market/TeamMarketsSection.js +8 -0
  52. package/dist/components/market/TeamMarketsSection.js.map +1 -0
  53. package/dist/components/market/TeamTournamentMarketForm.d.ts +19 -0
  54. package/dist/components/market/TeamTournamentMarketForm.d.ts.map +1 -0
  55. package/dist/components/market/TeamTournamentMarketForm.js +92 -0
  56. package/dist/components/market/TeamTournamentMarketForm.js.map +1 -0
  57. package/dist/components/market/TournamentMarketForm.d.ts +19 -0
  58. package/dist/components/market/TournamentMarketForm.d.ts.map +1 -0
  59. package/dist/components/market/TournamentMarketForm.js +86 -0
  60. package/dist/components/market/TournamentMarketForm.js.map +1 -0
  61. package/dist/components/market/index.d.ts +12 -0
  62. package/dist/components/market/index.d.ts.map +1 -0
  63. package/dist/components/market/index.js +12 -0
  64. package/dist/components/market/index.js.map +1 -0
  65. package/dist/components/sports/SeasonSelector.d.ts +10 -0
  66. package/dist/components/sports/SeasonSelector.d.ts.map +1 -0
  67. package/dist/components/sports/SeasonSelector.js +13 -0
  68. package/dist/components/sports/SeasonSelector.js.map +1 -0
  69. package/dist/components/ui/AnimatedCollapse.d.ts +9 -0
  70. package/dist/components/ui/AnimatedCollapse.d.ts.map +1 -0
  71. package/dist/components/ui/AnimatedCollapse.js +8 -0
  72. package/dist/components/ui/AnimatedCollapse.js.map +1 -0
  73. package/dist/components/ui/FavoriteStar.d.ts +13 -0
  74. package/dist/components/ui/FavoriteStar.d.ts.map +1 -0
  75. package/dist/components/ui/FavoriteStar.js +47 -0
  76. package/dist/components/ui/FavoriteStar.js.map +1 -0
  77. package/dist/components/wallet/ConnectedWalletMenu.d.ts +16 -0
  78. package/dist/components/wallet/ConnectedWalletMenu.d.ts.map +1 -0
  79. package/dist/components/wallet/ConnectedWalletMenu.js +131 -0
  80. package/dist/components/wallet/ConnectedWalletMenu.js.map +1 -0
  81. package/dist/components/wallet/DealerRoute.d.ts +6 -0
  82. package/dist/components/wallet/DealerRoute.d.ts.map +1 -0
  83. package/dist/components/wallet/DealerRoute.js +20 -0
  84. package/dist/components/wallet/DealerRoute.js.map +1 -0
  85. package/dist/components/wallet/ProtectedRoute.d.ts +8 -0
  86. package/dist/components/wallet/ProtectedRoute.d.ts.map +1 -0
  87. package/dist/components/wallet/ProtectedRoute.js +17 -0
  88. package/dist/components/wallet/ProtectedRoute.js.map +1 -0
  89. package/dist/components/wallet/WalletConnectionModal.d.ts +7 -0
  90. package/dist/components/wallet/WalletConnectionModal.d.ts.map +1 -0
  91. package/dist/components/wallet/WalletConnectionModal.js +334 -0
  92. package/dist/components/wallet/WalletConnectionModal.js.map +1 -0
  93. package/dist/config/app.d.ts +24 -0
  94. package/dist/config/app.d.ts.map +1 -0
  95. package/dist/config/app.js +18 -0
  96. package/dist/config/app.js.map +1 -0
  97. package/dist/config/chains.d.ts +1070 -0
  98. package/dist/config/chains.d.ts.map +1 -0
  99. package/dist/config/chains.js +28 -0
  100. package/dist/config/chains.js.map +1 -0
  101. package/dist/config/contracts.d.ts +15 -0
  102. package/dist/config/contracts.d.ts.map +1 -0
  103. package/dist/config/contracts.js +62 -0
  104. package/dist/config/contracts.js.map +1 -0
  105. package/dist/config/sportCodes.d.ts +58 -0
  106. package/dist/config/sportCodes.d.ts.map +1 -0
  107. package/dist/config/sportCodes.js +78 -0
  108. package/dist/config/sportCodes.js.map +1 -0
  109. package/dist/context/IndexerContext.d.ts +34 -0
  110. package/dist/context/IndexerContext.d.ts.map +1 -0
  111. package/dist/context/IndexerContext.js +40 -0
  112. package/dist/context/IndexerContext.js.map +1 -0
  113. package/dist/context/WalletAuthContext.d.ts +26 -0
  114. package/dist/context/WalletAuthContext.d.ts.map +1 -0
  115. package/dist/context/WalletAuthContext.js +148 -0
  116. package/dist/context/WalletAuthContext.js.map +1 -0
  117. package/dist/hooks/index.d.ts +13 -0
  118. package/dist/hooks/index.d.ts.map +1 -0
  119. package/dist/hooks/index.js +13 -0
  120. package/dist/hooks/index.js.map +1 -0
  121. package/dist/hooks/useContractWithToast.d.ts +1348 -0
  122. package/dist/hooks/useContractWithToast.d.ts.map +1 -0
  123. package/dist/hooks/useContractWithToast.js +395 -0
  124. package/dist/hooks/useContractWithToast.js.map +1 -0
  125. package/dist/hooks/useDealerNFT.d.ts +71 -0
  126. package/dist/hooks/useDealerNFT.d.ts.map +1 -0
  127. package/dist/hooks/useDealerNFT.js +127 -0
  128. package/dist/hooks/useDealerNFT.js.map +1 -0
  129. package/dist/hooks/useDealerPermission.d.ts +11 -0
  130. package/dist/hooks/useDealerPermission.d.ts.map +1 -0
  131. package/dist/hooks/useDealerPermission.js +48 -0
  132. package/dist/hooks/useDealerPermission.js.map +1 -0
  133. package/dist/hooks/useFilteredSportsData.d.ts +20 -0
  134. package/dist/hooks/useFilteredSportsData.d.ts.map +1 -0
  135. package/dist/hooks/useFilteredSportsData.js +52 -0
  136. package/dist/hooks/useFilteredSportsData.js.map +1 -0
  137. package/dist/hooks/useGameMarkets.d.ts +23 -0
  138. package/dist/hooks/useGameMarkets.d.ts.map +1 -0
  139. package/dist/hooks/useGameMarkets.js +50 -0
  140. package/dist/hooks/useGameMarkets.js.map +1 -0
  141. package/dist/hooks/useLeagueMarkets.d.ts +11 -0
  142. package/dist/hooks/useLeagueMarkets.d.ts.map +1 -0
  143. package/dist/hooks/useLeagueMarkets.js +38 -0
  144. package/dist/hooks/useLeagueMarkets.js.map +1 -0
  145. package/dist/hooks/useMarketContract.d.ts +219 -0
  146. package/dist/hooks/useMarketContract.d.ts.map +1 -0
  147. package/dist/hooks/useMarketContract.js +790 -0
  148. package/dist/hooks/useMarketContract.js.map +1 -0
  149. package/dist/hooks/useToastActions.d.ts +13 -0
  150. package/dist/hooks/useToastActions.d.ts.map +1 -0
  151. package/dist/hooks/useToastActions.js +40 -0
  152. package/dist/hooks/useToastActions.js.map +1 -0
  153. package/dist/index.d.ts +43 -0
  154. package/dist/index.d.ts.map +1 -0
  155. package/dist/index.js +47 -0
  156. package/dist/index.js.map +1 -0
  157. package/dist/lib/evmClient.d.ts +299 -0
  158. package/dist/lib/evmClient.d.ts.map +1 -0
  159. package/dist/lib/evmClient.js +691 -0
  160. package/dist/lib/evmClient.js.map +1 -0
  161. package/dist/types/auth.d.ts +44 -0
  162. package/dist/types/auth.d.ts.map +1 -0
  163. package/dist/types/auth.js +17 -0
  164. package/dist/types/auth.js.map +1 -0
  165. package/dist/types/dealer.d.ts +59 -0
  166. package/dist/types/dealer.d.ts.map +1 -0
  167. package/dist/types/dealer.js +31 -0
  168. package/dist/types/dealer.js.map +1 -0
  169. package/dist/types/market.d.ts +79 -0
  170. package/dist/types/market.d.ts.map +1 -0
  171. package/dist/types/market.js +47 -0
  172. package/dist/types/market.js.map +1 -0
  173. package/dist/utils/conditionData.d.ts +8 -0
  174. package/dist/utils/conditionData.d.ts.map +1 -0
  175. package/dist/utils/conditionData.js +7 -0
  176. package/dist/utils/conditionData.js.map +1 -0
  177. package/dist/utils/datetime.d.ts +3 -0
  178. package/dist/utils/datetime.d.ts.map +1 -0
  179. package/dist/utils/datetime.js +13 -0
  180. package/dist/utils/datetime.js.map +1 -0
  181. package/dist/utils/format.d.ts +79 -0
  182. package/dist/utils/format.d.ts.map +1 -0
  183. package/dist/utils/format.js +144 -0
  184. package/dist/utils/format.js.map +1 -0
  185. package/dist/utils/marketDisplay.d.ts +28 -0
  186. package/dist/utils/marketDisplay.d.ts.map +1 -0
  187. package/dist/utils/marketDisplay.js +45 -0
  188. package/dist/utils/marketDisplay.js.map +1 -0
  189. package/dist/utils/marketId.d.ts +8 -0
  190. package/dist/utils/marketId.d.ts.map +1 -0
  191. package/dist/utils/marketId.js +12 -0
  192. package/dist/utils/marketId.js.map +1 -0
  193. package/dist/utils/oracleId.d.ts +33 -0
  194. package/dist/utils/oracleId.d.ts.map +1 -0
  195. package/dist/utils/oracleId.js +62 -0
  196. package/dist/utils/oracleId.js.map +1 -0
  197. package/dist/utils/sportsSeason.d.ts +10 -0
  198. package/dist/utils/sportsSeason.d.ts.map +1 -0
  199. package/dist/utils/sportsSeason.js +39 -0
  200. package/dist/utils/sportsSeason.js.map +1 -0
  201. package/package.json +85 -0
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @fileoverview Market display helpers
3
+ * @description Parses raw market data into human-readable display values.
4
+ * The indexer stores title as "category-subCategory" (e.g., "1-1") and the
5
+ * meaningful content in the description field as "title\nfull description".
6
+ */
7
+ export interface MarketDisplayInfo {
8
+ /** Human-readable category (e.g., "Sports") */
9
+ category: string | undefined;
10
+ /** Human-readable subcategory for sports (e.g., "Soccer") */
11
+ subcategory: string | undefined;
12
+ /** The meaningful title extracted from description first line */
13
+ displayTitle: string;
14
+ /** Additional detail line (league + date), if present */
15
+ displaySubtitle: string | undefined;
16
+ }
17
+ /**
18
+ * Parse raw market fields into display-friendly values.
19
+ *
20
+ * @param market - Object with at least title, description, and id
21
+ * @returns Parsed display info
22
+ */
23
+ export declare function getMarketDisplayInfo(market: {
24
+ id: string;
25
+ title?: string | null;
26
+ description?: string | null;
27
+ }): MarketDisplayInfo;
28
+ //# sourceMappingURL=marketDisplay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketDisplay.d.ts","sourceRoot":"","sources":["../../src/utils/marketDisplay.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqBH,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,6DAA6D;IAC7D,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GAAG,iBAAiB,CAmBpB"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @fileoverview Market display helpers
3
+ * @description Parses raw market data into human-readable display values.
4
+ * The indexer stores title as "category-subCategory" (e.g., "1-1") and the
5
+ * meaningful content in the description field as "title\nfull description".
6
+ */
7
+ const CATEGORY_LABELS = {
8
+ '1': 'Sports',
9
+ '2': 'Crypto',
10
+ '3': 'Events',
11
+ };
12
+ const SPORT_LABELS = {
13
+ '1': 'Soccer',
14
+ '2': 'Basketball',
15
+ '3': 'NFL',
16
+ '4': 'Baseball',
17
+ '5': 'Hockey',
18
+ '6': 'Rugby',
19
+ '7': 'Formula 1',
20
+ '8': 'MMA',
21
+ '9': 'Handball',
22
+ '10': 'Volleyball',
23
+ };
24
+ /**
25
+ * Parse raw market fields into display-friendly values.
26
+ *
27
+ * @param market - Object with at least title, description, and id
28
+ * @returns Parsed display info
29
+ */
30
+ export function getMarketDisplayInfo(market) {
31
+ // title is stored as "category-subCategory" (e.g., "1-1")
32
+ const titleParts = (market.title || '').split('-');
33
+ const categoryNum = titleParts[0];
34
+ const subCategoryNum = titleParts[1];
35
+ const category = CATEGORY_LABELS[categoryNum];
36
+ const subcategory = categoryNum === '1' ? SPORT_LABELS[subCategoryNum] : undefined;
37
+ // description stores: "meaningful title\nfull description with league and date"
38
+ const lines = (market.description || '').split('\n');
39
+ const firstLine = lines[0]?.trim();
40
+ const restLines = lines.slice(1).join(' ').trim();
41
+ const displayTitle = firstLine || market.title || `Market #${market.id}`;
42
+ const displaySubtitle = restLines || undefined;
43
+ return { category, subcategory, displayTitle, displaySubtitle };
44
+ }
45
+ //# sourceMappingURL=marketDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketDisplay.js","sourceRoot":"","sources":["../../src/utils/marketDisplay.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,eAAe,GAA2B;IAC9C,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;CACd,CAAC;AAEF,MAAM,YAAY,GAA2B;IAC3C,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,YAAY;CACnB,CAAC;AAaF;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAIpC;IACC,0DAA0D;IAC1D,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAErC,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,WAAW,GACf,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEjE,gFAAgF;IAChF,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAElD,MAAM,YAAY,GAAG,SAAS,IAAI,MAAM,CAAC,KAAK,IAAI,WAAW,MAAM,CAAC,EAAE,EAAE,CAAC;IACzE,MAAM,eAAe,GAAG,SAAS,IAAI,SAAS,CAAC;IAE/C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC;AAClE,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Extract the on-chain numeric market ID from a chain-prefixed ID string.
3
+ *
4
+ * Chain-prefixed IDs have the format `"{chainId}-{identifier}"` (e.g. `"11155111-2"`).
5
+ * Smart contract calls require just the numeric identifier portion as a bigint.
6
+ */
7
+ export declare function getOnChainMarketId(chainPrefixedId: string): bigint;
8
+ //# sourceMappingURL=marketId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketId.d.ts","sourceRoot":"","sources":["../../src/utils/marketId.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAKlE"}
@@ -0,0 +1,12 @@
1
+ import { parseChainPrefixedId } from '@sudobility/heavymath_types';
2
+ /**
3
+ * Extract the on-chain numeric market ID from a chain-prefixed ID string.
4
+ *
5
+ * Chain-prefixed IDs have the format `"{chainId}-{identifier}"` (e.g. `"11155111-2"`).
6
+ * Smart contract calls require just the numeric identifier portion as a bigint.
7
+ */
8
+ export function getOnChainMarketId(chainPrefixedId) {
9
+ const { identifier } = parseChainPrefixedId(chainPrefixedId);
10
+ return BigInt(identifier);
11
+ }
12
+ //# sourceMappingURL=marketId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketId.js","sourceRoot":"","sources":["../../src/utils/marketId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,eAAuB;IACxD,MAAM,EAAE,UAAU,EAAE,GAAG,oBAAoB,CACzC,eAAwC,CACzC,CAAC;IACF,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @fileoverview OracleId encoding/decoding for sports markets
3
+ * @description Encodes sport code + game ID into a bytes32 oracleId.
4
+ * Format: [1 byte sport code][31 bytes game ID (uint248)]
5
+ */
6
+ import { type Hex } from 'viem';
7
+ import { type SportCode } from '../config/sportCodes';
8
+ /**
9
+ * Encode a sport code and game ID into a bytes32 oracleId.
10
+ *
11
+ * @param sportCode - Numeric sport code (1-10)
12
+ * @param gameId - Game/fixture ID from the sports API
13
+ * @returns bytes32 hex string
14
+ */
15
+ export declare function encodeOracleId(sportCode: SportCode, gameId: number): Hex;
16
+ /**
17
+ * Decode a bytes32 oracleId into sport code and game ID.
18
+ *
19
+ * @param oracleId - bytes32 hex string
20
+ * @returns Decoded sport code and game ID
21
+ */
22
+ export declare function decodeOracleId(oracleId: Hex): {
23
+ sportCode: SportCode;
24
+ gameId: number;
25
+ };
26
+ /**
27
+ * Check if an oracleId is a valid sports oracle ID.
28
+ *
29
+ * @param oracleId - bytes32 hex string
30
+ * @returns True if the oracleId has a valid sport code in byte 0
31
+ */
32
+ export declare function isValidSportsOracleId(oracleId: Hex): boolean;
33
+ //# sourceMappingURL=oracleId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oracleId.d.ts","sourceRoot":"","sources":["../../src/utils/oracleId.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA2B,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AACzD,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEnE;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAexE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG;IAC7C,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,CAaA;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAQ5D"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @fileoverview OracleId encoding/decoding for sports markets
3
+ * @description Encodes sport code + game ID into a bytes32 oracleId.
4
+ * Format: [1 byte sport code][31 bytes game ID (uint248)]
5
+ */
6
+ import { pad, toHex, hexToBigInt } from 'viem';
7
+ import { isSportCode } from '../config/sportCodes';
8
+ /**
9
+ * Encode a sport code and game ID into a bytes32 oracleId.
10
+ *
11
+ * @param sportCode - Numeric sport code (1-10)
12
+ * @param gameId - Game/fixture ID from the sports API
13
+ * @returns bytes32 hex string
14
+ */
15
+ export function encodeOracleId(sportCode, gameId) {
16
+ if (!isSportCode(sportCode)) {
17
+ throw new Error(`Invalid sport code: ${sportCode}`);
18
+ }
19
+ if (!Number.isInteger(gameId) || gameId < 0) {
20
+ throw new Error(`Invalid game ID: ${gameId}`);
21
+ }
22
+ // Sport code as 1 byte, game ID as uint248 (31 bytes)
23
+ const sportByte = BigInt(sportCode);
24
+ const gameIdBig = BigInt(gameId);
25
+ // Shift sport code to the leftmost byte of 32 bytes (248 bits)
26
+ const combined = (sportByte << 248n) | gameIdBig;
27
+ return pad(toHex(combined), { size: 32 });
28
+ }
29
+ /**
30
+ * Decode a bytes32 oracleId into sport code and game ID.
31
+ *
32
+ * @param oracleId - bytes32 hex string
33
+ * @returns Decoded sport code and game ID
34
+ */
35
+ export function decodeOracleId(oracleId) {
36
+ const value = hexToBigInt(oracleId);
37
+ // Extract sport code from leftmost byte
38
+ const sportCode = Number(value >> 248n);
39
+ // Extract game ID from remaining 31 bytes
40
+ const gameId = Number(value & ((1n << 248n) - 1n));
41
+ if (!isSportCode(sportCode)) {
42
+ throw new Error(`Invalid sport code in oracleId: ${sportCode}`);
43
+ }
44
+ return { sportCode: sportCode, gameId };
45
+ }
46
+ /**
47
+ * Check if an oracleId is a valid sports oracle ID.
48
+ *
49
+ * @param oracleId - bytes32 hex string
50
+ * @returns True if the oracleId has a valid sport code in byte 0
51
+ */
52
+ export function isValidSportsOracleId(oracleId) {
53
+ try {
54
+ const value = hexToBigInt(oracleId);
55
+ const sportCode = Number(value >> 248n);
56
+ return isSportCode(sportCode);
57
+ }
58
+ catch {
59
+ return false;
60
+ }
61
+ }
62
+ //# sourceMappingURL=oracleId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oracleId.js","sourceRoot":"","sources":["../../src/utils/oracleId.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAY,MAAM,MAAM,CAAC;AACzD,OAAO,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,SAAoB,EAAE,MAAc;IACjE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uBAAuB,SAAS,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,sDAAsD;IACtD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAEjC,+DAA+D;IAC/D,MAAM,QAAQ,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,SAAS,CAAC;IACjD,OAAO,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,QAAa;IAI1C,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEpC,wCAAwC;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IACxC,0CAA0C;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAEnD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,mCAAmC,SAAS,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,SAAsB,EAAE,MAAM,EAAE,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAa;IACjD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;QACxC,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface SeasonOption {
2
+ value: string;
3
+ label: string;
4
+ }
5
+ export declare function formatSeasonLabel(value: string | number): string;
6
+ export declare function normalizeSeasonSortValue(value: string | number): number;
7
+ export declare function buildSeasonOptions<T>(seasons: T[], getValue: (season: T) => string | number): SeasonOption[];
8
+ export declare function hasSeasonValue<T>(seasons: T[], selectedSeason: string | undefined, getValue: (season: T) => string | number): boolean;
9
+ export declare function getNumericSeasonValue(season: string | number, fallback: number): number;
10
+ //# sourceMappingURL=sportsSeason.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sportsSeason.d.ts","sourceRoot":"","sources":["../../src/utils/sportsSeason.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAUvE;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,OAAO,EAAE,CAAC,EAAE,EACZ,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,GACvC,YAAY,EAAE,CAmBhB;AAED,wBAAgB,cAAc,CAAC,CAAC,EAC9B,OAAO,EAAE,CAAC,EAAE,EACZ,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,GACvC,OAAO,CAIT;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,QAAQ,EAAE,MAAM,GACf,MAAM,CAKR"}
@@ -0,0 +1,39 @@
1
+ export function formatSeasonLabel(value) {
2
+ return String(value);
3
+ }
4
+ export function normalizeSeasonSortValue(value) {
5
+ if (typeof value === 'number')
6
+ return value;
7
+ const matches = value.match(/\d{4}/g);
8
+ if (matches && matches.length > 0) {
9
+ return Number(matches[matches.length - 1]);
10
+ }
11
+ const parsed = Number(value);
12
+ return Number.isNaN(parsed) ? Number.NEGATIVE_INFINITY : parsed;
13
+ }
14
+ export function buildSeasonOptions(seasons, getValue) {
15
+ const uniqueOptions = new Map();
16
+ seasons.forEach(season => {
17
+ const rawValue = getValue(season);
18
+ const value = String(rawValue);
19
+ if (!uniqueOptions.has(value)) {
20
+ uniqueOptions.set(value, {
21
+ value,
22
+ label: formatSeasonLabel(rawValue),
23
+ });
24
+ }
25
+ });
26
+ return Array.from(uniqueOptions.values()).sort((a, b) => normalizeSeasonSortValue(b.value) - normalizeSeasonSortValue(a.value));
27
+ }
28
+ export function hasSeasonValue(seasons, selectedSeason, getValue) {
29
+ if (!selectedSeason)
30
+ return false;
31
+ return seasons.some(season => String(getValue(season)) === selectedSeason);
32
+ }
33
+ export function getNumericSeasonValue(season, fallback) {
34
+ if (typeof season === 'number')
35
+ return season;
36
+ const parsed = Number.parseInt(season, 10);
37
+ return Number.isNaN(parsed) ? fallback : parsed;
38
+ }
39
+ //# sourceMappingURL=sportsSeason.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sportsSeason.js","sourceRoot":"","sources":["../../src/utils/sportsSeason.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,iBAAiB,CAAC,KAAsB;IACtD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAsB;IAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,OAAY,EACZ,QAAwC;IAExC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEtD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACvB,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE/B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE;gBACvB,KAAK;gBACL,KAAK,EAAE,iBAAiB,CAAC,QAAQ,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAC5C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,wBAAwB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,wBAAwB,CAAC,CAAC,CAAC,KAAK,CAAC,CACxE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,OAAY,EACZ,cAAkC,EAClC,QAAwC;IAExC,IAAI,CAAC,cAAc;QAAE,OAAO,KAAK,CAAC;IAElC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,MAAuB,EACvB,QAAgB;IAEhB,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAE9C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AAClD,CAAC"}
package/package.json ADDED
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "@sudobility/heavymath_ui",
3
+ "version": "0.0.3",
4
+ "description": "Shared UI components, hooks, and utilities for Heavymath prediction market apps",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "publishConfig": {
9
+ "access": "restricted"
10
+ },
11
+ "files": [
12
+ "dist/**/*"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc -p tsconfig.build.json",
16
+ "build:watch": "tsc -p tsconfig.build.json --watch",
17
+ "clean": "rm -rf dist",
18
+ "prepublishOnly": "bun run clean && bun run build",
19
+ "typecheck": "tsc --noEmit",
20
+ "lint": "eslint src",
21
+ "lint:fix": "eslint src --fix",
22
+ "format": "prettier --write \"src/**/*.{ts,tsx}\"",
23
+ "format:check": "prettier --check \"src/**/*.{ts,tsx}\"",
24
+ "test": "vitest run",
25
+ "test:watch": "vitest",
26
+ "verify": "bun run typecheck && bun run lint && bun run test && bun run format:check"
27
+ },
28
+ "peerDependencies": {
29
+ "@sudobility/components": "^5.0.64",
30
+ "@sudobility/design": "^1.1.30",
31
+ "@sudobility/di": "^1.5.53",
32
+ "@sudobility/heavymath_contracts": "^0.1.60",
33
+ "@sudobility/heavymath_indexer_client": "^0.0.45",
34
+ "@sudobility/heavymath_lib": "^0.0.72",
35
+ "@sudobility/heavymath_types": "^0.0.26",
36
+ "@sudobility/types": "^1.9.61",
37
+ "@sudobility/web3-components": "^2.0.15",
38
+ "@heroicons/react": ">=2.0.0",
39
+ "@tanstack/react-query": ">=5.0.0",
40
+ "i18next": ">=25.0.0",
41
+ "react": ">=18.0.0",
42
+ "react-dom": ">=18.0.0",
43
+ "react-i18next": ">=16.0.0",
44
+ "react-icons": ">=5.0.0",
45
+ "react-router-dom": ">=7.0.0",
46
+ "recharts": ">=3.0.0",
47
+ "viem": ">=2.0.0",
48
+ "wagmi": ">=2.0.0"
49
+ },
50
+ "devDependencies": {
51
+ "@heroicons/react": "^2.2.0",
52
+ "@sudobility/components": "^5.0.64",
53
+ "@sudobility/design": "^1.1.30",
54
+ "@sudobility/di": "^1.5.53",
55
+ "@sudobility/heavymath_contracts": "^0.1.60",
56
+ "@sudobility/heavymath_indexer_client": "^0.0.45",
57
+ "@sudobility/heavymath_lib": "^0.0.72",
58
+ "@sudobility/heavymath_types": "^0.0.26",
59
+ "@sudobility/types": "^1.9.61",
60
+ "@sudobility/web3-components": "^2.0.15",
61
+ "@tanstack/react-query": "^5.90.5",
62
+ "@types/react": "^19.0.0",
63
+ "@types/react-dom": "^19.0.0",
64
+ "@typescript-eslint/eslint-plugin": "^8.59.1",
65
+ "@typescript-eslint/parser": "^8.59.1",
66
+ "eslint": "^10.3.0",
67
+ "i18next": "^25.8.7",
68
+ "prettier": "^3.8.3",
69
+ "react": "^19.0.0",
70
+ "react-dom": "^19.0.0",
71
+ "react-i18next": "^16.5.4",
72
+ "react-icons": "^5.6.0",
73
+ "react-router-dom": "^7.13.0",
74
+ "recharts": "^3.8.1",
75
+ "typescript": "~5.9.3",
76
+ "viem": "^2.38.0",
77
+ "vitest": "^4.1.5",
78
+ "wagmi": "^2.19.0"
79
+ },
80
+ "license": "BUSL-1.1",
81
+ "repository": {
82
+ "type": "git",
83
+ "url": "https://github.com/sudobility-usf/heavymath_ui.git"
84
+ }
85
+ }