@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.
- package/dist/components/dealer/DealerNFTList.d.ts +6 -0
- package/dist/components/dealer/DealerNFTList.d.ts.map +1 -0
- package/dist/components/dealer/DealerNFTList.js +46 -0
- package/dist/components/dealer/DealerNFTList.js.map +1 -0
- package/dist/components/dealer/DealerNFTSelector.d.ts +8 -0
- package/dist/components/dealer/DealerNFTSelector.d.ts.map +1 -0
- package/dist/components/dealer/DealerNFTSelector.js +10 -0
- package/dist/components/dealer/DealerNFTSelector.js.map +1 -0
- package/dist/components/dealer/UpcomingGamesWidget.d.ts +8 -0
- package/dist/components/dealer/UpcomingGamesWidget.d.ts.map +1 -0
- package/dist/components/dealer/UpcomingGamesWidget.js +68 -0
- package/dist/components/dealer/UpcomingGamesWidget.js.map +1 -0
- package/dist/components/icons/index.d.ts +2 -0
- package/dist/components/icons/index.d.ts.map +1 -0
- package/dist/components/icons/index.js +2 -0
- package/dist/components/icons/index.js.map +1 -0
- package/dist/components/market/GameMarketsSection.d.ts +16 -0
- package/dist/components/market/GameMarketsSection.d.ts.map +1 -0
- package/dist/components/market/GameMarketsSection.js +18 -0
- package/dist/components/market/GameMarketsSection.js.map +1 -0
- package/dist/components/market/InlineCreateMarketForm.d.ts +17 -0
- package/dist/components/market/InlineCreateMarketForm.d.ts.map +1 -0
- package/dist/components/market/InlineCreateMarketForm.js +274 -0
- package/dist/components/market/InlineCreateMarketForm.js.map +1 -0
- package/dist/components/market/LeagueMarketsSection.d.ts +16 -0
- package/dist/components/market/LeagueMarketsSection.d.ts.map +1 -0
- package/dist/components/market/LeagueMarketsSection.js +15 -0
- package/dist/components/market/LeagueMarketsSection.js.map +1 -0
- package/dist/components/market/MarketCard.d.ts +8 -0
- package/dist/components/market/MarketCard.d.ts.map +1 -0
- package/dist/components/market/MarketCard.js +30 -0
- package/dist/components/market/MarketCard.js.map +1 -0
- package/dist/components/market/MarketList.d.ts +9 -0
- package/dist/components/market/MarketList.d.ts.map +1 -0
- package/dist/components/market/MarketList.js +17 -0
- package/dist/components/market/MarketList.js.map +1 -0
- package/dist/components/market/MarketStatusBadge.d.ts +8 -0
- package/dist/components/market/MarketStatusBadge.d.ts.map +1 -0
- package/dist/components/market/MarketStatusBadge.js +31 -0
- package/dist/components/market/MarketStatusBadge.js.map +1 -0
- package/dist/components/market/PredictionSlider.d.ts +11 -0
- package/dist/components/market/PredictionSlider.d.ts.map +1 -0
- package/dist/components/market/PredictionSlider.js +55 -0
- package/dist/components/market/PredictionSlider.js.map +1 -0
- package/dist/components/market/SportPredictionCard.d.ts +15 -0
- package/dist/components/market/SportPredictionCard.d.ts.map +1 -0
- package/dist/components/market/SportPredictionCard.js +92 -0
- package/dist/components/market/SportPredictionCard.js.map +1 -0
- package/dist/components/market/TeamMarketsSection.d.ts +17 -0
- package/dist/components/market/TeamMarketsSection.d.ts.map +1 -0
- package/dist/components/market/TeamMarketsSection.js +8 -0
- package/dist/components/market/TeamMarketsSection.js.map +1 -0
- package/dist/components/market/TeamTournamentMarketForm.d.ts +19 -0
- package/dist/components/market/TeamTournamentMarketForm.d.ts.map +1 -0
- package/dist/components/market/TeamTournamentMarketForm.js +92 -0
- package/dist/components/market/TeamTournamentMarketForm.js.map +1 -0
- package/dist/components/market/TournamentMarketForm.d.ts +19 -0
- package/dist/components/market/TournamentMarketForm.d.ts.map +1 -0
- package/dist/components/market/TournamentMarketForm.js +86 -0
- package/dist/components/market/TournamentMarketForm.js.map +1 -0
- package/dist/components/market/index.d.ts +12 -0
- package/dist/components/market/index.d.ts.map +1 -0
- package/dist/components/market/index.js +12 -0
- package/dist/components/market/index.js.map +1 -0
- package/dist/components/sports/SeasonSelector.d.ts +10 -0
- package/dist/components/sports/SeasonSelector.d.ts.map +1 -0
- package/dist/components/sports/SeasonSelector.js +13 -0
- package/dist/components/sports/SeasonSelector.js.map +1 -0
- package/dist/components/ui/AnimatedCollapse.d.ts +9 -0
- package/dist/components/ui/AnimatedCollapse.d.ts.map +1 -0
- package/dist/components/ui/AnimatedCollapse.js +8 -0
- package/dist/components/ui/AnimatedCollapse.js.map +1 -0
- package/dist/components/ui/FavoriteStar.d.ts +13 -0
- package/dist/components/ui/FavoriteStar.d.ts.map +1 -0
- package/dist/components/ui/FavoriteStar.js +47 -0
- package/dist/components/ui/FavoriteStar.js.map +1 -0
- package/dist/components/wallet/ConnectedWalletMenu.d.ts +16 -0
- package/dist/components/wallet/ConnectedWalletMenu.d.ts.map +1 -0
- package/dist/components/wallet/ConnectedWalletMenu.js +131 -0
- package/dist/components/wallet/ConnectedWalletMenu.js.map +1 -0
- package/dist/components/wallet/DealerRoute.d.ts +6 -0
- package/dist/components/wallet/DealerRoute.d.ts.map +1 -0
- package/dist/components/wallet/DealerRoute.js +20 -0
- package/dist/components/wallet/DealerRoute.js.map +1 -0
- package/dist/components/wallet/ProtectedRoute.d.ts +8 -0
- package/dist/components/wallet/ProtectedRoute.d.ts.map +1 -0
- package/dist/components/wallet/ProtectedRoute.js +17 -0
- package/dist/components/wallet/ProtectedRoute.js.map +1 -0
- package/dist/components/wallet/WalletConnectionModal.d.ts +7 -0
- package/dist/components/wallet/WalletConnectionModal.d.ts.map +1 -0
- package/dist/components/wallet/WalletConnectionModal.js +334 -0
- package/dist/components/wallet/WalletConnectionModal.js.map +1 -0
- package/dist/config/app.d.ts +24 -0
- package/dist/config/app.d.ts.map +1 -0
- package/dist/config/app.js +18 -0
- package/dist/config/app.js.map +1 -0
- package/dist/config/chains.d.ts +1070 -0
- package/dist/config/chains.d.ts.map +1 -0
- package/dist/config/chains.js +28 -0
- package/dist/config/chains.js.map +1 -0
- package/dist/config/contracts.d.ts +15 -0
- package/dist/config/contracts.d.ts.map +1 -0
- package/dist/config/contracts.js +62 -0
- package/dist/config/contracts.js.map +1 -0
- package/dist/config/sportCodes.d.ts +58 -0
- package/dist/config/sportCodes.d.ts.map +1 -0
- package/dist/config/sportCodes.js +78 -0
- package/dist/config/sportCodes.js.map +1 -0
- package/dist/context/IndexerContext.d.ts +34 -0
- package/dist/context/IndexerContext.d.ts.map +1 -0
- package/dist/context/IndexerContext.js +40 -0
- package/dist/context/IndexerContext.js.map +1 -0
- package/dist/context/WalletAuthContext.d.ts +26 -0
- package/dist/context/WalletAuthContext.d.ts.map +1 -0
- package/dist/context/WalletAuthContext.js +148 -0
- package/dist/context/WalletAuthContext.js.map +1 -0
- package/dist/hooks/index.d.ts +13 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +13 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useContractWithToast.d.ts +1348 -0
- package/dist/hooks/useContractWithToast.d.ts.map +1 -0
- package/dist/hooks/useContractWithToast.js +395 -0
- package/dist/hooks/useContractWithToast.js.map +1 -0
- package/dist/hooks/useDealerNFT.d.ts +71 -0
- package/dist/hooks/useDealerNFT.d.ts.map +1 -0
- package/dist/hooks/useDealerNFT.js +127 -0
- package/dist/hooks/useDealerNFT.js.map +1 -0
- package/dist/hooks/useDealerPermission.d.ts +11 -0
- package/dist/hooks/useDealerPermission.d.ts.map +1 -0
- package/dist/hooks/useDealerPermission.js +48 -0
- package/dist/hooks/useDealerPermission.js.map +1 -0
- package/dist/hooks/useFilteredSportsData.d.ts +20 -0
- package/dist/hooks/useFilteredSportsData.d.ts.map +1 -0
- package/dist/hooks/useFilteredSportsData.js +52 -0
- package/dist/hooks/useFilteredSportsData.js.map +1 -0
- package/dist/hooks/useGameMarkets.d.ts +23 -0
- package/dist/hooks/useGameMarkets.d.ts.map +1 -0
- package/dist/hooks/useGameMarkets.js +50 -0
- package/dist/hooks/useGameMarkets.js.map +1 -0
- package/dist/hooks/useLeagueMarkets.d.ts +11 -0
- package/dist/hooks/useLeagueMarkets.d.ts.map +1 -0
- package/dist/hooks/useLeagueMarkets.js +38 -0
- package/dist/hooks/useLeagueMarkets.js.map +1 -0
- package/dist/hooks/useMarketContract.d.ts +219 -0
- package/dist/hooks/useMarketContract.d.ts.map +1 -0
- package/dist/hooks/useMarketContract.js +790 -0
- package/dist/hooks/useMarketContract.js.map +1 -0
- package/dist/hooks/useToastActions.d.ts +13 -0
- package/dist/hooks/useToastActions.d.ts.map +1 -0
- package/dist/hooks/useToastActions.js +40 -0
- package/dist/hooks/useToastActions.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/evmClient.d.ts +299 -0
- package/dist/lib/evmClient.d.ts.map +1 -0
- package/dist/lib/evmClient.js +691 -0
- package/dist/lib/evmClient.js.map +1 -0
- package/dist/types/auth.d.ts +44 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +17 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/dealer.d.ts +59 -0
- package/dist/types/dealer.d.ts.map +1 -0
- package/dist/types/dealer.js +31 -0
- package/dist/types/dealer.js.map +1 -0
- package/dist/types/market.d.ts +79 -0
- package/dist/types/market.d.ts.map +1 -0
- package/dist/types/market.js +47 -0
- package/dist/types/market.js.map +1 -0
- package/dist/utils/conditionData.d.ts +8 -0
- package/dist/utils/conditionData.d.ts.map +1 -0
- package/dist/utils/conditionData.js +7 -0
- package/dist/utils/conditionData.js.map +1 -0
- package/dist/utils/datetime.d.ts +3 -0
- package/dist/utils/datetime.d.ts.map +1 -0
- package/dist/utils/datetime.js +13 -0
- package/dist/utils/datetime.js.map +1 -0
- package/dist/utils/format.d.ts +79 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +144 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/marketDisplay.d.ts +28 -0
- package/dist/utils/marketDisplay.d.ts.map +1 -0
- package/dist/utils/marketDisplay.js +45 -0
- package/dist/utils/marketDisplay.js.map +1 -0
- package/dist/utils/marketId.d.ts +8 -0
- package/dist/utils/marketId.d.ts.map +1 -0
- package/dist/utils/marketId.js +12 -0
- package/dist/utils/marketId.js.map +1 -0
- package/dist/utils/oracleId.d.ts +33 -0
- package/dist/utils/oracleId.d.ts.map +1 -0
- package/dist/utils/oracleId.js +62 -0
- package/dist/utils/oracleId.js.map +1 -0
- package/dist/utils/sportsSeason.d.ts +10 -0
- package/dist/utils/sportsSeason.d.ts.map +1 -0
- package/dist/utils/sportsSeason.js +39 -0
- package/dist/utils/sportsSeason.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LeagueMarketsSection.d.ts","sourceRoot":"","sources":["../../../src/components/market/LeagueMarketsSection.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGzD,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,UAAU,yBAAyB;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,QAAQ,EACR,MAAM,EACN,UAAU,EACV,KAAK,GACN,EAAE,yBAAyB,2CAkD3B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useTranslation } from 'react-i18next';
|
|
3
|
+
import { useIndexer } from '../../context/IndexerContext';
|
|
4
|
+
import { useLeagueMarkets } from '../../hooks/useLeagueMarkets';
|
|
5
|
+
import { MarketCard } from './MarketCard';
|
|
6
|
+
import { TournamentMarketForm } from './TournamentMarketForm';
|
|
7
|
+
import { variants } from '@sudobility/design';
|
|
8
|
+
export function LeagueMarketsSection({ sportCode, leagueId, season, leagueName, teams, }) {
|
|
9
|
+
const { t } = useTranslation('common');
|
|
10
|
+
const { indexerClient } = useIndexer();
|
|
11
|
+
const { data: markets, isLoading } = useLeagueMarkets(indexerClient, sportCode, leagueId);
|
|
12
|
+
const hasMarkets = markets && markets.length > 0;
|
|
13
|
+
return (_jsxs("div", { children: [_jsx("h2", { className: 'text-lg font-semibold mb-4', children: t('markets.predictionMarkets', 'Prediction Markets') }), isLoading ? (_jsx("div", { className: 'space-y-3', children: Array.from({ length: 2 }).map((_, i) => (_jsx("div", { className: `${variants.loading.skeleton.base()} rounded-lg h-24` }, i))) })) : hasMarkets ? (_jsx("div", { className: 'space-y-3 mb-4', children: markets.map(market => (_jsx(MarketCard, { market: market, showCategory: false }, market.id))) })) : (_jsx("p", { className: 'text-sm text-muted-foreground mb-4', children: t('markets.noMarketsForLeague', 'No prediction markets for this league yet.') })), _jsx(TournamentMarketForm, { sportCode: sportCode, leagueId: leagueId, season: season, leagueName: leagueName, teams: teams })] }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=LeagueMarketsSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LeagueMarketsSection.js","sourceRoot":"","sources":["../../../src/components/market/LeagueMarketsSection.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAgB9C,MAAM,UAAU,oBAAoB,CAAC,EACnC,SAAS,EACT,QAAQ,EACR,MAAM,EACN,UAAU,EACV,KAAK,GACqB;IAC1B,MAAM,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,EAAE,CAAC;IACvC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,gBAAgB,CACnD,aAAa,EACb,SAAS,EACT,QAAQ,CACT,CAAC;IAEF,MAAM,UAAU,GAAG,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAEjD,OAAO,CACL,0BACE,aAAI,SAAS,EAAC,4BAA4B,YACvC,CAAC,CAAC,2BAA2B,EAAE,oBAAoB,CAAC,GAClD,EAEJ,SAAS,CAAC,CAAC,CAAC,CACX,cAAK,SAAS,EAAC,WAAW,YACvB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACvC,cAEE,SAAS,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,IAD3D,CAAC,CAEN,CACH,CAAC,GACE,CACP,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CACf,cAAK,SAAS,EAAC,gBAAgB,YAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CACrB,KAAC,UAAU,IAAiB,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,IAA9C,MAAM,CAAC,EAAE,CAAyC,CACpE,CAAC,GACE,CACP,CAAC,CAAC,CAAC,CACF,YAAG,SAAS,EAAC,oCAAoC,YAC9C,CAAC,CACA,4BAA4B,EAC5B,4CAA4C,CAC7C,GACC,CACL,EAED,KAAC,oBAAoB,IACnB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,GACZ,IACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Market } from '@heavymath/indexer_client';
|
|
2
|
+
interface MarketCardProps {
|
|
3
|
+
market: Market;
|
|
4
|
+
showCategory?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function MarketCard({ market, showCategory }: MarketCardProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=MarketCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarketCard.d.ts","sourceRoot":"","sources":["../../../src/components/market/MarketCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAMxD,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,YAAmB,EAAE,EAAE,eAAe,2CAyF1E"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Link, useParams } from 'react-router-dom';
|
|
3
|
+
import { useTranslation } from 'react-i18next';
|
|
4
|
+
import { MarketStatusBadge } from './MarketStatusBadge';
|
|
5
|
+
import { formatDate } from '../../utils/format';
|
|
6
|
+
import { getMarketDisplayInfo } from '../../utils/marketDisplay';
|
|
7
|
+
import { ConditionType, decodeConditionData } from '../../utils/conditionData';
|
|
8
|
+
export function MarketCard({ market, showCategory = true }) {
|
|
9
|
+
const { lang } = useParams();
|
|
10
|
+
const { t } = useTranslation('common');
|
|
11
|
+
const isActive = market.status === 'Active';
|
|
12
|
+
const { category, subcategory, displayTitle, displaySubtitle } = getMarketDisplayInfo(market);
|
|
13
|
+
const conditionLabel = (() => {
|
|
14
|
+
if (!market.conditionData)
|
|
15
|
+
return null;
|
|
16
|
+
try {
|
|
17
|
+
const condition = decodeConditionData(market.conditionData);
|
|
18
|
+
if (condition.type === ConditionType.MatchScore)
|
|
19
|
+
return t('market.conditionScore', 'Score');
|
|
20
|
+
if (condition.type === ConditionType.Tournament)
|
|
21
|
+
return t('market.conditionTournament', 'Tournament');
|
|
22
|
+
return null; // Don't show badge for WinLoss (default)
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
})();
|
|
28
|
+
return (_jsxs(Link, { to: `/${lang}/markets/${market.id}`, className: 'block p-6 rounded-lg border border-border bg-card hover:border-primary/50 transition-all hover:shadow-md', children: [_jsxs("div", { className: 'flex items-start justify-between gap-4 mb-4', children: [_jsxs("div", { className: 'flex-1 min-w-0', children: [showCategory && (category || subcategory) && (_jsxs("div", { className: 'flex items-center gap-1.5 mb-1', children: [category && (_jsx("span", { className: 'inline-block text-xs font-medium text-primary bg-primary/10 px-1.5 py-0.5 rounded', children: category })), subcategory && (_jsx("span", { className: 'inline-block text-xs font-medium text-muted-foreground bg-muted px-1.5 py-0.5 rounded', children: subcategory })), conditionLabel && (_jsx("span", { className: 'inline-block text-xs font-medium text-accent-foreground bg-accent px-1.5 py-0.5 rounded', children: conditionLabel }))] })), _jsx("h3", { className: 'font-semibold text-foreground line-clamp-2', children: displayTitle })] }), _jsx(MarketStatusBadge, { status: market.status })] }), displaySubtitle && (_jsx("p", { className: 'text-sm text-muted-foreground mb-4 line-clamp-2', children: displaySubtitle })), _jsxs("div", { className: 'flex items-center justify-between pt-4 border-t border-border', children: [_jsx("div", { className: 'flex items-center gap-2', children: _jsxs("span", { className: 'text-xs text-muted-foreground', children: [t('market.dealer', 'Dealer'), ": ", market.dealerAddress.slice(0, 6), "...", market.dealerAddress.slice(-4)] }) }), _jsx("div", { className: 'text-right', children: _jsx("span", { className: 'text-xs text-muted-foreground', children: formatDate(market.createdAt) }) })] }), isActive && (_jsxs("div", { className: 'mt-3 flex items-center gap-2', children: [_jsx("span", { className: 'w-2 h-2 bg-success-500 rounded-full animate-pulse' }), _jsx("span", { className: 'text-xs text-success-500', children: t('market.openForPredictions', 'Open for predictions') })] }))] }));
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=MarketCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarketCard.js","sourceRoot":"","sources":["../../../src/components/market/MarketCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAO/E,MAAM,UAAU,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,EAAmB;IACzE,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,EAAoB,CAAC;IAC/C,MAAM,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC;IAC5C,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,GAC5D,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE/B,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE;QAC3B,IAAI,CAAC,MAAM,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC5D,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,CAAC,UAAU;gBAC7C,OAAO,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;YAC7C,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,CAAC,UAAU;gBAC7C,OAAO,CAAC,CAAC,4BAA4B,EAAE,YAAY,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC,CAAC,yCAAyC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,CACL,MAAC,IAAI,IACH,EAAE,EAAE,IAAI,IAAI,YAAY,MAAM,CAAC,EAAE,EAAE,EACnC,SAAS,EAAC,0GAA0G,aAGpH,eAAK,SAAS,EAAC,6CAA6C,aAC1D,eAAK,SAAS,EAAC,gBAAgB,aAC5B,YAAY,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,IAAI,CAC5C,eAAK,SAAS,EAAC,gCAAgC,aAC5C,QAAQ,IAAI,CACX,eAAM,SAAS,EAAC,mFAAmF,YAChG,QAAQ,GACJ,CACR,EACA,WAAW,IAAI,CACd,eAAM,SAAS,EAAC,uFAAuF,YACpG,WAAW,GACP,CACR,EACA,cAAc,IAAI,CACjB,eAAM,SAAS,EAAC,yFAAyF,YACtG,cAAc,GACV,CACR,IACG,CACP,EACD,aAAI,SAAS,EAAC,4CAA4C,YACvD,YAAY,GACV,IACD,EACN,KAAC,iBAAiB,IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAI,IACxC,EAGL,eAAe,IAAI,CAClB,YAAG,SAAS,EAAC,iDAAiD,YAC3D,eAAe,GACd,CACL,EAGD,eAAK,SAAS,EAAC,+DAA+D,aAC5E,cAAK,SAAS,EAAC,yBAAyB,YACtC,gBAAM,SAAS,EAAC,+BAA+B,aAC5C,CAAC,CAAC,eAAe,EAAE,QAAQ,CAAC,QAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,SAEhE,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAC1B,GACH,EACN,cAAK,SAAS,EAAC,YAAY,YACzB,eAAM,SAAS,EAAC,+BAA+B,YAC5C,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,GACxB,GACH,IACF,EAGL,QAAQ,IAAI,CACX,eAAK,SAAS,EAAC,8BAA8B,aAC3C,eAAM,SAAS,EAAC,mDAAmD,GAAQ,EAC3E,eAAM,SAAS,EAAC,0BAA0B,YACvC,CAAC,CAAC,2BAA2B,EAAE,sBAAsB,CAAC,GAClD,IACH,CACP,IACI,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Market } from '@heavymath/indexer_client';
|
|
2
|
+
interface MarketListProps {
|
|
3
|
+
markets: Market[];
|
|
4
|
+
isLoading?: boolean;
|
|
5
|
+
showCategory?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function MarketList({ markets, isLoading, showCategory, }: MarketListProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=MarketList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarketList.d.ts","sourceRoot":"","sources":["../../../src/components/market/MarketList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAExD,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,SAAiB,EACjB,YAAmB,GACpB,EAAE,eAAe,2CAoCjB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useTranslation } from 'react-i18next';
|
|
3
|
+
import { MarketCard } from './MarketCard';
|
|
4
|
+
export function MarketList({ markets, isLoading = false, showCategory = true, }) {
|
|
5
|
+
const { t } = useTranslation('markets');
|
|
6
|
+
if (isLoading) {
|
|
7
|
+
return (_jsx("div", { className: 'grid md:grid-cols-2 lg:grid-cols-3 gap-6', children: Array.from({ length: 6 }).map((_, i) => (_jsx(MarketCardSkeleton, {}, i))) }));
|
|
8
|
+
}
|
|
9
|
+
if (markets.length === 0) {
|
|
10
|
+
return (_jsxs("div", { className: 'text-center py-16', children: [_jsx("div", { className: 'w-16 h-16 bg-muted rounded-full flex items-center justify-center mx-auto mb-4', children: _jsx("span", { className: 'text-2xl', children: "\uD83D\uDCCA" }) }), _jsx("h3", { className: 'text-lg font-semibold mb-2', children: t('empty.title') }), _jsx("p", { className: 'text-muted-foreground', children: t('empty.description') })] }));
|
|
11
|
+
}
|
|
12
|
+
return (_jsx("div", { className: 'grid md:grid-cols-2 lg:grid-cols-3 gap-6', children: markets.map(market => (_jsx(MarketCard, { market: market, showCategory: showCategory }, market.id))) }));
|
|
13
|
+
}
|
|
14
|
+
function MarketCardSkeleton() {
|
|
15
|
+
return (_jsxs("div", { className: 'p-6 rounded-lg border border-border bg-card animate-pulse', children: [_jsxs("div", { className: 'flex items-start justify-between gap-4 mb-4', children: [_jsxs("div", { className: 'flex-1', children: [_jsx("div", { className: 'h-3 bg-muted rounded w-20 mb-2' }), _jsx("div", { className: 'h-5 bg-muted rounded w-full mb-1' }), _jsx("div", { className: 'h-5 bg-muted rounded w-2/3' })] }), _jsx("div", { className: 'h-6 bg-muted rounded w-16' })] }), _jsx("div", { className: 'h-4 bg-muted rounded w-full mb-2' }), _jsx("div", { className: 'h-4 bg-muted rounded w-3/4 mb-4' }), _jsxs("div", { className: 'flex justify-between pt-4 border-t border-border', children: [_jsx("div", { className: 'h-3 bg-muted rounded w-24' }), _jsx("div", { className: 'h-3 bg-muted rounded w-20' })] })] }));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=MarketList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarketList.js","sourceRoot":"","sources":["../../../src/components/market/MarketList.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAS1C,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,EACP,SAAS,GAAG,KAAK,EACjB,YAAY,GAAG,IAAI,GACH;IAChB,MAAM,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAExC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,cAAK,SAAS,EAAC,0CAA0C,YACtD,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACvC,KAAC,kBAAkB,MAAM,CAAC,CAAI,CAC/B,CAAC,GACE,CACP,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CACL,eAAK,SAAS,EAAC,mBAAmB,aAChC,cAAK,SAAS,EAAC,+EAA+E,YAC5F,eAAM,SAAS,EAAC,UAAU,6BAAU,GAChC,EACN,aAAI,SAAS,EAAC,4BAA4B,YAAE,CAAC,CAAC,aAAa,CAAC,GAAM,EAClE,YAAG,SAAS,EAAC,uBAAuB,YAAE,CAAC,CAAC,mBAAmB,CAAC,GAAK,IAC7D,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,cAAK,SAAS,EAAC,0CAA0C,YACtD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CACrB,KAAC,UAAU,IAET,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,IAFrB,MAAM,CAAC,EAAE,CAGd,CACH,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,CACL,eAAK,SAAS,EAAC,2DAA2D,aACxE,eAAK,SAAS,EAAC,6CAA6C,aAC1D,eAAK,SAAS,EAAC,QAAQ,aACrB,cAAK,SAAS,EAAC,gCAAgC,GAAO,EACtD,cAAK,SAAS,EAAC,kCAAkC,GAAO,EACxD,cAAK,SAAS,EAAC,4BAA4B,GAAO,IAC9C,EACN,cAAK,SAAS,EAAC,2BAA2B,GAAO,IAC7C,EACN,cAAK,SAAS,EAAC,kCAAkC,GAAO,EACxD,cAAK,SAAS,EAAC,iCAAiC,GAAO,EACvD,eAAK,SAAS,EAAC,kDAAkD,aAC/D,cAAK,SAAS,EAAC,2BAA2B,GAAO,EACjD,cAAK,SAAS,EAAC,2BAA2B,GAAO,IAC7C,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MarketStatus } from '@heavymath/indexer_client';
|
|
2
|
+
interface MarketStatusBadgeProps {
|
|
3
|
+
status: MarketStatus;
|
|
4
|
+
size?: 'sm' | 'md';
|
|
5
|
+
}
|
|
6
|
+
export declare function MarketStatusBadge({ status, size, }: MarketStatusBadgeProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=MarketStatusBadge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarketStatusBadge.d.ts","sourceRoot":"","sources":["../../../src/components/market/MarketStatusBadge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,UAAU,sBAAsB;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,IAAW,GACZ,EAAE,sBAAsB,2CAuCxB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useTranslation } from 'react-i18next';
|
|
3
|
+
import { clsx } from 'clsx';
|
|
4
|
+
export function MarketStatusBadge({ status, size = 'sm', }) {
|
|
5
|
+
const { t } = useTranslation('common');
|
|
6
|
+
const statusConfig = {
|
|
7
|
+
Active: {
|
|
8
|
+
label: t('status.active'),
|
|
9
|
+
className: 'bg-success-500/10 text-success-500 border-success-500/20',
|
|
10
|
+
},
|
|
11
|
+
Locked: {
|
|
12
|
+
label: t('status.locked', 'Locked'),
|
|
13
|
+
className: 'bg-amber-500/10 text-amber-600 border-amber-500/20',
|
|
14
|
+
},
|
|
15
|
+
Resolved: {
|
|
16
|
+
label: t('status.resolved'),
|
|
17
|
+
className: 'bg-primary/10 text-primary border-primary/20',
|
|
18
|
+
},
|
|
19
|
+
Cancelled: {
|
|
20
|
+
label: t('status.cancelled'),
|
|
21
|
+
className: 'bg-muted text-muted-foreground border-border',
|
|
22
|
+
},
|
|
23
|
+
Abandoned: {
|
|
24
|
+
label: t('status.abandoned'),
|
|
25
|
+
className: 'bg-danger-500/10 text-danger-500 border-danger-500/20',
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
const config = statusConfig[status] || statusConfig.Active;
|
|
29
|
+
return (_jsx("span", { className: clsx('inline-flex items-center rounded-full border font-medium', size === 'sm' ? 'px-2 py-0.5 text-xs' : 'px-3 py-1 text-sm', config.className), children: config.label }));
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=MarketStatusBadge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarketStatusBadge.js","sourceRoot":"","sources":["../../../src/components/market/MarketStatusBadge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAO5B,MAAM,UAAU,iBAAiB,CAAC,EAChC,MAAM,EACN,IAAI,GAAG,IAAI,GACY;IACvB,MAAM,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEvC,MAAM,YAAY,GAAyD;QACzE,MAAM,EAAE;YACN,KAAK,EAAE,CAAC,CAAC,eAAe,CAAC;YACzB,SAAS,EAAE,0DAA0D;SACtE;QACD,MAAM,EAAE;YACN,KAAK,EAAE,CAAC,CAAC,eAAe,EAAE,QAAQ,CAAC;YACnC,SAAS,EAAE,oDAAoD;SAChE;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,iBAAiB,CAAC;YAC3B,SAAS,EAAE,8CAA8C;SAC1D;QACD,SAAS,EAAE;YACT,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC;YAC5B,SAAS,EAAE,8CAA8C;SAC1D;QACD,SAAS,EAAE;YACT,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC;YAC5B,SAAS,EAAE,uDAAuD;SACnE;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC;IAE3D,OAAO,CACL,eACE,SAAS,EAAE,IAAI,CACb,0DAA0D,EAC1D,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,mBAAmB,EAC3D,MAAM,CAAC,SAAS,CACjB,YAEA,MAAM,CAAC,KAAK,GACR,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface PredictionSliderProps {
|
|
2
|
+
value: number;
|
|
3
|
+
onChange: (value: number) => void;
|
|
4
|
+
min?: number;
|
|
5
|
+
max?: number;
|
|
6
|
+
step?: number;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function PredictionSlider({ value, onChange, min, max, step, disabled, }: PredictionSliderProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=PredictionSlider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PredictionSlider.d.ts","sourceRoot":"","sources":["../../../src/components/market/PredictionSlider.tsx"],"names":[],"mappings":"AAEA,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,QAAQ,EACR,GAAO,EACP,GAAS,EACT,IAAQ,EACR,QAAgB,GACjB,EAAE,qBAAqB,2CAkIvB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useRef } from 'react';
|
|
3
|
+
export function PredictionSlider({ value, onChange, min = 0, max = 100, step = 1, disabled = false, }) {
|
|
4
|
+
const sliderRef = useRef(null);
|
|
5
|
+
const isDragging = useRef(false);
|
|
6
|
+
const computeValue = useCallback((clientX) => {
|
|
7
|
+
if (!sliderRef.current)
|
|
8
|
+
return value;
|
|
9
|
+
const rect = sliderRef.current.getBoundingClientRect();
|
|
10
|
+
const x = clientX - rect.left;
|
|
11
|
+
const pct = Math.max(0, Math.min(100, (x / rect.width) * 100));
|
|
12
|
+
const steppedValue = Math.round(pct / step) * step;
|
|
13
|
+
return Math.max(min, Math.min(max, steppedValue));
|
|
14
|
+
}, [min, max, step, value]);
|
|
15
|
+
const handleSliderClick = useCallback((e) => {
|
|
16
|
+
if (disabled || !sliderRef.current)
|
|
17
|
+
return;
|
|
18
|
+
onChange(computeValue(e.clientX));
|
|
19
|
+
}, [disabled, computeValue, onChange]);
|
|
20
|
+
const handlePointerDown = useCallback((e) => {
|
|
21
|
+
if (disabled)
|
|
22
|
+
return;
|
|
23
|
+
e.preventDefault();
|
|
24
|
+
isDragging.current = true;
|
|
25
|
+
e.target.setPointerCapture(e.pointerId);
|
|
26
|
+
onChange(computeValue(e.clientX));
|
|
27
|
+
}, [disabled, computeValue, onChange]);
|
|
28
|
+
const handlePointerMove = useCallback((e) => {
|
|
29
|
+
if (!isDragging.current)
|
|
30
|
+
return;
|
|
31
|
+
onChange(computeValue(e.clientX));
|
|
32
|
+
}, [computeValue, onChange]);
|
|
33
|
+
const handlePointerUp = useCallback(() => {
|
|
34
|
+
isDragging.current = false;
|
|
35
|
+
}, []);
|
|
36
|
+
const handleInputChange = useCallback((e) => {
|
|
37
|
+
const newValue = parseInt(e.target.value, 10);
|
|
38
|
+
if (!isNaN(newValue)) {
|
|
39
|
+
onChange(Math.max(min, Math.min(max, newValue)));
|
|
40
|
+
}
|
|
41
|
+
}, [min, max, onChange]);
|
|
42
|
+
const percentage = ((value - min) / (max - min)) * 100;
|
|
43
|
+
// Determine color based on value
|
|
44
|
+
const getColor = () => {
|
|
45
|
+
if (value <= 30)
|
|
46
|
+
return 'bg-danger-500';
|
|
47
|
+
if (value <= 70)
|
|
48
|
+
return 'bg-warning-500';
|
|
49
|
+
return 'bg-success-500';
|
|
50
|
+
};
|
|
51
|
+
return (_jsxs("div", { className: 'space-y-3', children: [_jsxs("div", { ref: sliderRef, onClick: handleSliderClick, onPointerDown: handlePointerDown, onPointerMove: handlePointerMove, onPointerUp: handlePointerUp, className: `relative h-3 rounded-full bg-muted cursor-pointer touch-none ${disabled ? 'opacity-50 cursor-not-allowed' : ''}`, children: [_jsx("div", { className: `absolute left-0 top-0 h-full rounded-full transition-none ${getColor()}`, style: { width: `${percentage}%` } }), _jsx("div", { className: `absolute top-1/2 -translate-y-1/2 -translate-x-1/2 w-5 h-5 rounded-full border-2 border-white shadow-md transition-none ${getColor()} ${disabled ? '' : 'hover:scale-110'}`, style: { left: `${percentage}%` } })] }), _jsxs("div", { className: 'flex flex-wrap items-center justify-between gap-2', children: [_jsx("div", { className: 'flex gap-2', children: [0, 25, 50, 75, 100].map(preset => (_jsxs("button", { type: 'button', onClick: () => !disabled && onChange(preset), disabled: disabled, className: `px-2 py-1 text-xs rounded transition-colors ${value === preset
|
|
52
|
+
? 'bg-primary text-primary-foreground'
|
|
53
|
+
: 'bg-muted text-muted-foreground hover:bg-muted/80'} ${disabled ? 'opacity-50 cursor-not-allowed' : ''}`, children: [preset, "%"] }, preset))) }), _jsxs("div", { className: 'flex items-center gap-1', children: [_jsx("input", { type: 'number', value: value, onChange: handleInputChange, min: min, max: max, step: step, disabled: disabled, className: 'w-16 px-2 py-1 text-center text-sm rounded border border-input bg-background focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50' }), _jsx("span", { className: 'text-sm text-muted-foreground', children: "%" })] })] })] }));
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=PredictionSlider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PredictionSlider.js","sourceRoot":"","sources":["../../../src/components/market/PredictionSlider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Market } from '@heavymath/indexer_client';
|
|
2
|
+
interface SportPredictionCardProps {
|
|
3
|
+
prediction: {
|
|
4
|
+
id: string;
|
|
5
|
+
marketId: string;
|
|
6
|
+
percentage: number;
|
|
7
|
+
amount: string;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
hasClaimed: boolean;
|
|
10
|
+
market?: Market;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export declare function SportPredictionCard({ prediction }: SportPredictionCardProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=SportPredictionCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SportPredictionCard.d.ts","sourceRoot":"","sources":["../../../src/components/market/SportPredictionCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAmDxD,UAAU,wBAAwB;IAChC,UAAU,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,OAAO,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,wBAAgB,mBAAmB,CAAC,EAAE,UAAU,EAAE,EAAE,wBAAwB,2CAiK3E"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Link, useParams } from 'react-router-dom';
|
|
3
|
+
import { useTranslation } from 'react-i18next';
|
|
4
|
+
import { MarketStatusBadge } from './MarketStatusBadge';
|
|
5
|
+
import { formatDate, formatUSDC } from '../../utils/format';
|
|
6
|
+
import { isValidSportsOracleId, decodeOracleId } from '../../utils/oracleId';
|
|
7
|
+
import { getSportSlug } from '../../config/sportCodes';
|
|
8
|
+
import { SoccerBallIcon, BasketballIcon, FootballIcon, BaseballIcon, HockeyIcon, RugbyIcon, RacingIcon, MmaIcon, HandballIcon, VolleyballIcon, } from '../../components/icons';
|
|
9
|
+
import { useClaimWinningsWithToast, useClaimRefundWithToast, } from '../../hooks';
|
|
10
|
+
const SPORT_ICONS = {
|
|
11
|
+
1: SoccerBallIcon,
|
|
12
|
+
2: BasketballIcon,
|
|
13
|
+
3: FootballIcon,
|
|
14
|
+
4: BaseballIcon,
|
|
15
|
+
5: HockeyIcon,
|
|
16
|
+
6: RugbyIcon,
|
|
17
|
+
7: RacingIcon,
|
|
18
|
+
8: MmaIcon,
|
|
19
|
+
9: HandballIcon,
|
|
20
|
+
10: VolleyballIcon,
|
|
21
|
+
};
|
|
22
|
+
const SPORT_COLORS = {
|
|
23
|
+
1: 'bg-green-500',
|
|
24
|
+
2: 'bg-orange-500',
|
|
25
|
+
3: 'bg-amber-700',
|
|
26
|
+
4: 'bg-red-500',
|
|
27
|
+
5: 'bg-blue-500',
|
|
28
|
+
6: 'bg-emerald-600',
|
|
29
|
+
7: 'bg-red-600',
|
|
30
|
+
8: 'bg-purple-600',
|
|
31
|
+
9: 'bg-teal-500',
|
|
32
|
+
10: 'bg-indigo-500',
|
|
33
|
+
};
|
|
34
|
+
export function SportPredictionCard({ prediction }) {
|
|
35
|
+
const { lang } = useParams();
|
|
36
|
+
const { t } = useTranslation('common');
|
|
37
|
+
const claimWinnings = useClaimWinningsWithToast();
|
|
38
|
+
const claimRefund = useClaimRefundWithToast();
|
|
39
|
+
const market = prediction.market;
|
|
40
|
+
const hasClaimed = prediction.hasClaimed;
|
|
41
|
+
const canClaim = market?.status === 'Resolved' && !hasClaimed;
|
|
42
|
+
const canRefund = (market?.status === 'Cancelled' || market?.status === 'Abandoned') &&
|
|
43
|
+
!hasClaimed;
|
|
44
|
+
// Decode sport context from oracleId
|
|
45
|
+
const sportInfo = (() => {
|
|
46
|
+
const oracleId = market?.oracleId;
|
|
47
|
+
if (!oracleId)
|
|
48
|
+
return null;
|
|
49
|
+
try {
|
|
50
|
+
const hex = oracleId;
|
|
51
|
+
if (!isValidSportsOracleId(hex))
|
|
52
|
+
return null;
|
|
53
|
+
const { sportCode, gameId } = decodeOracleId(hex);
|
|
54
|
+
const slug = getSportSlug(sportCode);
|
|
55
|
+
return { sportCode, gameId, slug };
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
})();
|
|
61
|
+
const handleClaim = async () => {
|
|
62
|
+
try {
|
|
63
|
+
await claimWinnings.mutateAsync({
|
|
64
|
+
marketId: BigInt(prediction.marketId),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.error('Failed to claim winnings:', error);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const handleRefund = async () => {
|
|
72
|
+
try {
|
|
73
|
+
await claimRefund.mutateAsync({ marketId: BigInt(prediction.marketId) });
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error('Failed to claim refund:', error);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const SportIcon = sportInfo ? SPORT_ICONS[sportInfo.sportCode] : null;
|
|
80
|
+
const sportColor = sportInfo ? SPORT_COLORS[sportInfo.sportCode] : null;
|
|
81
|
+
const gameLink = sportInfo?.slug
|
|
82
|
+
? `/${lang || 'en'}/sports/${sportInfo.slug}/games/${sportInfo.gameId}`
|
|
83
|
+
: null;
|
|
84
|
+
return (_jsxs("div", { className: 'p-4 rounded-lg border border-border bg-card', children: [_jsxs("div", { className: 'flex items-start justify-between gap-4', children: [_jsxs("div", { className: 'flex-1 min-w-0', children: [_jsxs("div", { className: 'flex items-center gap-2 mb-1', children: [SportIcon && sportColor && (_jsx("div", { className: `w-6 h-6 rounded-full ${sportColor} flex items-center justify-center flex-shrink-0`, children: _jsx(SportIcon, { className: 'w-3.5 h-3.5 text-white' }) })), sportInfo?.slug && (_jsx("span", { className: 'text-xs text-primary font-medium capitalize', children: t(`nav.${sportInfo.slug}`, sportInfo.slug) }))] }), _jsx(Link, { to: `/${lang || 'en'}/markets/${prediction.marketId}`, className: 'font-medium hover:text-primary transition-colors line-clamp-1', children: market?.title ||
|
|
85
|
+
market?.description ||
|
|
86
|
+
`Market #${prediction.marketId}` }), _jsxs("div", { className: 'flex items-center gap-4 mt-2 text-sm text-muted-foreground', children: [_jsxs("span", { children: [t('sportPredictionCard.predicted'), ' ', _jsxs("strong", { className: 'text-foreground', children: [prediction.percentage, "%"] })] }), _jsxs("span", { children: [t('sportPredictionCard.staked'), ' ', _jsx("strong", { className: 'text-foreground', children: formatUSDC(BigInt(prediction.amount)) })] }), _jsx("span", { children: formatDate(prediction.createdAt) })] }), gameLink && (_jsx(Link, { to: gameLink, className: 'inline-block mt-2 text-xs text-primary hover:underline', children: t('sportPredictionCard.viewGameDetails') }))] }), _jsxs("div", { className: 'flex items-center gap-2', children: [market && _jsx(MarketStatusBadge, { status: market.status, size: 'sm' }), canClaim && (_jsx("button", { onClick: handleClaim, disabled: claimWinnings.isPending, className: 'px-3 py-1.5 text-sm rounded-lg bg-success-500 text-white font-medium hover:bg-success-600 transition-colors disabled:opacity-50', children: claimWinnings.isPending
|
|
87
|
+
? t('sportPredictionCard.claiming')
|
|
88
|
+
: t('sportPredictionCard.claim') })), canRefund && (_jsx("button", { onClick: handleRefund, disabled: claimRefund.isPending, className: 'px-3 py-1.5 text-sm rounded-lg bg-muted text-foreground font-medium hover:bg-muted/80 transition-colors disabled:opacity-50', children: claimRefund.isPending
|
|
89
|
+
? t('sportPredictionCard.claiming')
|
|
90
|
+
: t('sportPredictionCard.refund') })), hasClaimed && (_jsx("span", { className: 'px-3 py-1.5 text-sm rounded-lg bg-muted text-muted-foreground', children: t('sportPredictionCard.claimed') }))] })] }), market?.status === 'Resolved' && (_jsx("div", { className: 'mt-3 pt-3 border-t border-border', children: _jsxs("div", { className: 'flex items-center gap-4 text-sm', children: [_jsxs("span", { className: 'text-muted-foreground', children: [t('sportPredictionCard.yourPrediction'), ' ', _jsxs("strong", { className: 'text-foreground', children: [prediction.percentage, "%"] })] }), _jsx("span", { className: 'text-primary font-medium', children: t('sportPredictionCard.marketResolved') })] }) }))] }));
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=SportPredictionCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SportPredictionCard.js","sourceRoot":"","sources":["../../../src/components/market/SportPredictionCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { SportCode } from '../../config/sportCodes';
|
|
2
|
+
interface TournamentOption {
|
|
3
|
+
id: number;
|
|
4
|
+
name: string;
|
|
5
|
+
logo?: string | null;
|
|
6
|
+
}
|
|
7
|
+
interface TeamMarketsSectionProps {
|
|
8
|
+
sportCode: SportCode;
|
|
9
|
+
teamId: number;
|
|
10
|
+
teamName: string;
|
|
11
|
+
teamLogo?: string | null;
|
|
12
|
+
season: number;
|
|
13
|
+
tournaments: TournamentOption[];
|
|
14
|
+
}
|
|
15
|
+
export declare function TeamMarketsSection({ sportCode, teamId, teamName, teamLogo, season, tournaments, }: TeamMarketsSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=TeamMarketsSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TeamMarketsSection.d.ts","sourceRoot":"","sources":["../../../src/components/market/TeamMarketsSection.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,UAAU,uBAAuB;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAED,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,WAAW,GACZ,EAAE,uBAAuB,2CA0BzB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useTranslation } from 'react-i18next';
|
|
3
|
+
import { TeamTournamentMarketForm } from './TeamTournamentMarketForm';
|
|
4
|
+
export function TeamMarketsSection({ sportCode, teamId, teamName, teamLogo, season, tournaments, }) {
|
|
5
|
+
const { t } = useTranslation('common');
|
|
6
|
+
return (_jsxs("div", { children: [_jsx("h2", { className: 'text-lg font-semibold mb-4', children: t('markets.predictionMarkets', 'Prediction Markets') }), _jsx("p", { className: 'text-sm text-muted-foreground mb-4', children: t('markets.noMarketsForTeam', 'No prediction markets for this team yet.') }), _jsx(TeamTournamentMarketForm, { sportCode: sportCode, teamId: teamId, teamName: teamName, teamLogo: teamLogo, season: season, tournaments: tournaments })] }));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=TeamMarketsSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TeamMarketsSection.js","sourceRoot":"","sources":["../../../src/components/market/TeamMarketsSection.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAkBtE,MAAM,UAAU,kBAAkB,CAAC,EACjC,SAAS,EACT,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,WAAW,GACa;IACxB,MAAM,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEvC,OAAO,CACL,0BACE,aAAI,SAAS,EAAC,4BAA4B,YACvC,CAAC,CAAC,2BAA2B,EAAE,oBAAoB,CAAC,GAClD,EAEL,YAAG,SAAS,EAAC,oCAAoC,YAC9C,CAAC,CACA,0BAA0B,EAC1B,0CAA0C,CAC3C,GACC,EAEJ,KAAC,wBAAwB,IACvB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,GACxB,IACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SportCode } from '../../config/sportCodes';
|
|
2
|
+
interface TournamentOption {
|
|
3
|
+
id: number;
|
|
4
|
+
name: string;
|
|
5
|
+
logo?: string | null;
|
|
6
|
+
}
|
|
7
|
+
interface TeamTournamentMarketFormProps {
|
|
8
|
+
sportCode: SportCode;
|
|
9
|
+
teamId: number;
|
|
10
|
+
teamName: string;
|
|
11
|
+
teamLogo?: string | null;
|
|
12
|
+
season: number;
|
|
13
|
+
tournaments: TournamentOption[];
|
|
14
|
+
/** Pre-select a specific tournament */
|
|
15
|
+
preselectedTournamentId?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare function TeamTournamentMarketForm({ sportCode, teamId, teamName, teamLogo, season, tournaments, preselectedTournamentId, }: TeamTournamentMarketFormProps): import("react/jsx-runtime").JSX.Element | null;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=TeamTournamentMarketForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TeamTournamentMarketForm.d.ts","sourceRoot":"","sources":["../../../src/components/market/TeamTournamentMarketForm.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGzD,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,UAAU,6BAA6B;IACrC,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,uCAAuC;IACvC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,wBAAgB,wBAAwB,CAAC,EACvC,SAAS,EACT,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,WAAW,EACX,uBAAuB,GACxB,EAAE,6BAA6B,kDA+P/B"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import { useTranslation } from 'react-i18next';
|
|
4
|
+
import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem, } from '@sudobility/components';
|
|
5
|
+
import { useAuth } from '../../context/WalletAuthContext';
|
|
6
|
+
import { AnimatedCollapse } from '../../components/ui/AnimatedCollapse';
|
|
7
|
+
import { DealerNFTSelector } from '../../components/dealer/DealerNFTSelector';
|
|
8
|
+
import { useCreateMarketWithToast } from '../../hooks';
|
|
9
|
+
import { useDealerPermission } from '../../hooks/useDealerPermission';
|
|
10
|
+
import { encodeOracleId } from '../../utils/oracleId';
|
|
11
|
+
import { ConditionType, encodeConditionData } from '../../utils/conditionData';
|
|
12
|
+
import { getNow, toChainDate } from '../../utils/datetime';
|
|
13
|
+
import { CATEGORIES } from '../../types/market';
|
|
14
|
+
import { ui } from '@sudobility/design';
|
|
15
|
+
export function TeamTournamentMarketForm({ sportCode, teamId, teamName, teamLogo, season, tournaments, preselectedTournamentId, }) {
|
|
16
|
+
const { t } = useTranslation('common');
|
|
17
|
+
const { isDealer, dealerTokenIds } = useAuth();
|
|
18
|
+
const createMarket = useCreateMarketWithToast();
|
|
19
|
+
const [selectedNFTTokenId, setSelectedNFTTokenId] = useState(dealerTokenIds?.[0]);
|
|
20
|
+
// Sync when dealerTokenIds loads asynchronously after mount
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (selectedNFTTokenId === undefined &&
|
|
23
|
+
dealerTokenIds &&
|
|
24
|
+
dealerTokenIds.length > 0) {
|
|
25
|
+
setSelectedNFTTokenId(dealerTokenIds[0]);
|
|
26
|
+
}
|
|
27
|
+
}, [dealerTokenIds, selectedNFTTokenId]);
|
|
28
|
+
const { hasPermission, isLoading: isPermissionLoading } = useDealerPermission(sportCode, selectedNFTTokenId);
|
|
29
|
+
const [isExpanded, setIsExpanded] = useState(false);
|
|
30
|
+
const [selectedTournamentId, setSelectedTournamentId] = useState(preselectedTournamentId ?? null);
|
|
31
|
+
const [expectation, setExpectation] = useState('1');
|
|
32
|
+
const [deadline, setDeadline] = useState('');
|
|
33
|
+
if (!isDealer)
|
|
34
|
+
return null;
|
|
35
|
+
const tokenId = selectedNFTTokenId;
|
|
36
|
+
if (tokenId === undefined)
|
|
37
|
+
return null;
|
|
38
|
+
if (tournaments.length === 0)
|
|
39
|
+
return null;
|
|
40
|
+
if (!isPermissionLoading && !hasPermission) {
|
|
41
|
+
return (_jsx("div", { className: 'rounded-lg border border-dashed border-amber-500/40 bg-amber-500/5 p-4', children: _jsx("p", { className: 'text-sm text-amber-700 dark:text-amber-400', children: t('dealer.noPermission') }) }));
|
|
42
|
+
}
|
|
43
|
+
const now = getNow();
|
|
44
|
+
const deadlineDate = deadline ? new Date(deadline) : null;
|
|
45
|
+
const minDeadlineMs = 24 * 60 * 60 * 1000;
|
|
46
|
+
const isDeadlineValid = deadlineDate !== null &&
|
|
47
|
+
deadlineDate.getTime() - now.getTime() >= minDeadlineMs;
|
|
48
|
+
const canSubmit = selectedTournamentId !== null && isDeadlineValid && !createMarket.isPending;
|
|
49
|
+
const selectedTournament = tournaments.find(t => t.id === selectedTournamentId);
|
|
50
|
+
const handleSubmit = async () => {
|
|
51
|
+
if (!canSubmit || !selectedTournamentId || !deadlineDate)
|
|
52
|
+
return;
|
|
53
|
+
const oracleId = encodeOracleId(sportCode, selectedTournamentId);
|
|
54
|
+
const chainDeadline = toChainDate(deadlineDate);
|
|
55
|
+
const deadlineBigInt = BigInt(Math.floor(chainDeadline.getTime() / 1000));
|
|
56
|
+
const conditionData = encodeConditionData({
|
|
57
|
+
type: ConditionType.Tournament,
|
|
58
|
+
teamId,
|
|
59
|
+
expectation: expectation === '1',
|
|
60
|
+
});
|
|
61
|
+
const verb = expectation === '1'
|
|
62
|
+
? t('inlineCreateMarket.wins')
|
|
63
|
+
: t('inlineCreateMarket.doesNotWin');
|
|
64
|
+
const tournamentName = selectedTournament?.name ?? `Tournament #${selectedTournamentId}`;
|
|
65
|
+
const title = `${teamName} ${verb} ${season} ${tournamentName}`;
|
|
66
|
+
const desc = `${tournamentName} ${season} — ${teamName} ${verb}`;
|
|
67
|
+
await createMarket.mutateAsync({
|
|
68
|
+
tokenId: BigInt(tokenId),
|
|
69
|
+
category: BigInt(CATEGORIES.SPORTS),
|
|
70
|
+
subCategory: BigInt(sportCode),
|
|
71
|
+
deadline: deadlineBigInt,
|
|
72
|
+
description: `${title}\n${desc}`,
|
|
73
|
+
oracleId,
|
|
74
|
+
conditionData,
|
|
75
|
+
});
|
|
76
|
+
setIsExpanded(false);
|
|
77
|
+
};
|
|
78
|
+
return (_jsxs("div", { className: 'rounded-lg border border-dashed border-primary/40 bg-primary/5', children: [_jsxs("button", { onClick: () => setIsExpanded(!isExpanded), className: 'w-full flex items-center justify-between p-4 text-left', children: [_jsxs("div", { className: 'flex items-center gap-2', children: [_jsx("span", { className: 'text-lg font-semibold text-primary', children: "+" }), teamLogo && (_jsx("img", { src: teamLogo, alt: '', className: 'w-5 h-5 object-contain' })), _jsx("span", { className: 'font-medium', children: t('markets.createTournamentMarketForTeam', 'Tournament Market for {{team}}', {
|
|
79
|
+
team: teamName,
|
|
80
|
+
}) })] }), _jsx("svg", { className: `w-5 h-5 text-muted-foreground transition-transform ${isExpanded ? 'rotate-180' : ''}`, fill: 'none', stroke: 'currentColor', viewBox: '0 0 24 24', children: _jsx("path", { strokeLinecap: 'round', strokeLinejoin: 'round', strokeWidth: 2, d: 'M19 9l-7 7-7-7' }) })] }), _jsx(AnimatedCollapse, { open: isExpanded, children: _jsxs("div", { className: 'px-4 pb-4', children: [_jsx(DealerNFTSelector, { tokenIds: dealerTokenIds, selectedTokenId: selectedNFTTokenId, onSelect: setSelectedNFTTokenId }), _jsxs("div", { className: 'flex flex-col md:flex-row md:items-end gap-4', children: [_jsxs("div", { className: 'flex-1 min-w-0', children: [_jsx("label", { className: 'block text-sm font-medium mb-2', children: t('markets.selectTournament', 'Select Tournament') }), _jsxs(Select, { value: selectedTournamentId !== null
|
|
81
|
+
? String(selectedTournamentId)
|
|
82
|
+
: undefined, onValueChange: val => setSelectedTournamentId(Number(val)), children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, { placeholder: t('markets.selectTournamentPlaceholder', '-- Select a tournament --') }) }), _jsx(SelectContent, { children: tournaments.map(tour => (_jsx(SelectItem, { value: String(tour.id), children: tour.name }, tour.id))) })] })] }), _jsxs("div", { className: 'md:w-48', children: [_jsx("label", { className: 'block text-sm font-medium mb-2', children: t('market.condition.expectation', 'Expectation') }), _jsxs("div", { className: 'flex gap-1', children: [_jsx("button", { type: 'button', onClick: () => setExpectation('1'), className: `flex-1 px-2 py-2 rounded-lg border text-xs font-medium transition-colors ${expectation === '1'
|
|
83
|
+
? 'border-primary bg-primary/10 text-primary'
|
|
84
|
+
: 'border-gray-200 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-700'}`, children: t('market.condition.wins', 'Wins') }), _jsx("button", { type: 'button', onClick: () => setExpectation('0'), className: `flex-1 px-2 py-2 rounded-lg border text-xs font-medium transition-colors ${expectation === '0'
|
|
85
|
+
? 'border-primary bg-primary/10 text-primary'
|
|
86
|
+
: 'border-gray-200 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-700'}`, children: t('market.condition.doesNotWin', 'Does not win') })] })] }), _jsxs("div", { className: 'md:w-52', children: [_jsx("label", { className: 'block text-sm font-medium mb-1', children: t('markets.deadline', 'Deadline') }), _jsx("input", { type: 'datetime-local', value: deadline, onChange: e => setDeadline(e.target.value), className: `w-full px-3 py-2 rounded-lg border border-gray-300 dark:border-gray-600 ${ui.background.surface} text-sm` }), deadline && !isDeadlineValid && (_jsx("p", { className: 'mt-1 text-xs text-red-500', children: t('markets.deadlineMinimum', 'Deadline must be at least 24 hours from now') }))] }), _jsx("button", { onClick: handleSubmit, disabled: !canSubmit, className: 'md:w-auto py-2.5 px-4 rounded-lg bg-primary text-primary-foreground font-medium text-sm disabled:opacity-50 disabled:cursor-not-allowed hover:bg-primary/90 transition-colors whitespace-nowrap', children: createMarket.isPending
|
|
87
|
+
? t('markets.creating', 'Creating...')
|
|
88
|
+
: t('markets.create', 'Create') })] }), selectedTournament && (_jsxs("div", { className: `mt-3 p-2.5 rounded-lg ${ui.background.muted}/50 text-sm`, children: [_jsxs("span", { className: 'text-muted-foreground', children: [t('inlineCreateMarket.market'), ' '] }), _jsxs("span", { className: 'font-medium', children: [teamName, ' ', expectation === '1'
|
|
89
|
+
? t('inlineCreateMarket.wins')
|
|
90
|
+
: t('inlineCreateMarket.doesNotWin'), ' ', season, " ", selectedTournament.name] })] }))] }) })] }));
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=TeamTournamentMarketForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TeamTournamentMarketForm.js","sourceRoot":"","sources":["../../../src/components/market/TeamTournamentMarketForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SportCode } from '../../config/sportCodes';
|
|
2
|
+
interface TeamOption {
|
|
3
|
+
id: number;
|
|
4
|
+
name: string;
|
|
5
|
+
logo?: string | null;
|
|
6
|
+
}
|
|
7
|
+
interface TournamentMarketFormProps {
|
|
8
|
+
sportCode: SportCode;
|
|
9
|
+
/** A stable game/league ID to encode as the oracleId */
|
|
10
|
+
leagueId: number;
|
|
11
|
+
season: number;
|
|
12
|
+
leagueName: string;
|
|
13
|
+
teams: TeamOption[];
|
|
14
|
+
/** Pre-select a specific team (e.g. when rendered on a team detail page) */
|
|
15
|
+
preselectedTeamId?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare function TournamentMarketForm({ sportCode, leagueId, season, leagueName, teams, preselectedTeamId, }: TournamentMarketFormProps): import("react/jsx-runtime").JSX.Element | null;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=TournamentMarketForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TournamentMarketForm.d.ts","sourceRoot":"","sources":["../../../src/components/market/TournamentMarketForm.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGzD,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,UAAU,yBAAyB;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,QAAQ,EACR,MAAM,EACN,UAAU,EACV,KAAK,EACL,iBAAiB,GAClB,EAAE,yBAAyB,kDAgP3B"}
|