@agg-build/ui 1.0.0 → 1.0.1

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 (56) hide show
  1. package/dist/{chunk-2QJXRRYP.mjs → chunk-43K4PFBC.mjs} +3 -2
  2. package/dist/{chunk-I2WBGEWK.mjs → chunk-5ES2VJHO.mjs} +159 -93
  3. package/dist/{chunk-DMKKNK76.mjs → chunk-BYMLPLEZ.mjs} +791 -583
  4. package/dist/{chunk-C7T56TJR.mjs → chunk-HD6HBTK2.mjs} +1 -1
  5. package/dist/{chunk-CGNDMLQL.mjs → chunk-LPNZOX3E.mjs} +123 -52
  6. package/dist/{chunk-75IGOQ4N.mjs → chunk-WLXYCBZV.mjs} +62 -32
  7. package/dist/{chunk-6NS7D73S.mjs → chunk-YZNO6IUD.mjs} +740 -521
  8. package/dist/events.js +196 -93
  9. package/dist/events.mjs +3 -3
  10. package/dist/index.js +3396 -2806
  11. package/dist/index.mjs +13 -7
  12. package/dist/modals.js +798 -535
  13. package/dist/modals.mjs +3 -3
  14. package/dist/pages.js +378 -176
  15. package/dist/pages.mjs +6 -6
  16. package/dist/primitives.js +713 -531
  17. package/dist/primitives.mjs +7 -1
  18. package/dist/styles.css +1 -1
  19. package/dist/tailwind.css +1 -1
  20. package/dist/trading.js +242 -54
  21. package/dist/trading.mjs +4 -4
  22. package/dist/types/deposit/steps/card-payment-pending.d.mts +3 -1
  23. package/dist/types/deposit/steps/card-payment-pending.d.ts +3 -1
  24. package/dist/types/deposit/steps/crypto-transfer.d.mts +1 -1
  25. package/dist/types/deposit/steps/crypto-transfer.d.ts +1 -1
  26. package/dist/types/events/item/event-list-item.utils.d.mts +57 -0
  27. package/dist/types/events/item/event-list-item.utils.d.ts +57 -0
  28. package/dist/types/events/item-details/event-list-item-details.types.d.mts +16 -1
  29. package/dist/types/events/item-details/event-list-item-details.types.d.ts +16 -1
  30. package/dist/types/events/market-details/market-details.types.d.mts +8 -0
  31. package/dist/types/events/market-details/market-details.types.d.ts +8 -0
  32. package/dist/types/primitives/copy-button/index.d.mts +25 -0
  33. package/dist/types/primitives/copy-button/index.d.ts +25 -0
  34. package/dist/types/primitives/index.d.mts +2 -0
  35. package/dist/types/primitives/index.d.ts +2 -0
  36. package/dist/types/primitives/toast/index.d.mts +4 -0
  37. package/dist/types/primitives/toast/index.d.ts +4 -0
  38. package/dist/types/primitives/toast/toast.types.d.mts +31 -0
  39. package/dist/types/primitives/toast/toast.types.d.ts +31 -0
  40. package/dist/types/trading/place-order/index.place-order.constants.d.mts +8 -0
  41. package/dist/types/trading/place-order/index.place-order.constants.d.ts +8 -0
  42. package/dist/types/trading/place-order/index.place-order.types.d.mts +6 -0
  43. package/dist/types/trading/place-order/index.place-order.types.d.ts +6 -0
  44. package/dist/types/trading/place-order/index.place-order.utils.d.mts +4 -7
  45. package/dist/types/trading/place-order/index.place-order.utils.d.ts +4 -7
  46. package/dist/types/withdraw/index.d.mts +2 -2
  47. package/dist/types/withdraw/index.d.ts +2 -2
  48. package/dist/types/withdraw/steps/withdraw-amount.d.mts +6 -3
  49. package/dist/types/withdraw/steps/withdraw-amount.d.ts +6 -3
  50. package/dist/types/withdraw/steps/withdraw-success.d.mts +8 -1
  51. package/dist/types/withdraw/steps/withdraw-success.d.ts +8 -1
  52. package/dist/types/withdraw/steps/withdraw-success.utils.d.mts +36 -0
  53. package/dist/types/withdraw/steps/withdraw-success.utils.d.ts +36 -0
  54. package/dist/types/withdraw/withdraw-modal.types.d.mts +25 -15
  55. package/dist/types/withdraw/withdraw-modal.types.d.ts +25 -15
  56. package/package.json +6 -5
@@ -12,7 +12,7 @@ import {
12
12
  resolveVenueLineColor,
13
13
  selectPrimaryVenueMarket,
14
14
  sortOutcomes
15
- } from "./chunk-6NS7D73S.mjs";
15
+ } from "./chunk-YZNO6IUD.mjs";
16
16
 
17
17
  // src/trading/trading-context/index.tsx
18
18
  import { useEventTradingContext } from "@agg-build/hooks";
@@ -2,11 +2,12 @@
2
2
  import {
3
3
  formatProbabilityCents,
4
4
  resolveOrderEligibilityMessage
5
- } from "./chunk-C7T56TJR.mjs";
5
+ } from "./chunk-HD6HBTK2.mjs";
6
6
  import {
7
7
  GeoBlockBanner
8
- } from "./chunk-2QJXRRYP.mjs";
8
+ } from "./chunk-43K4PFBC.mjs";
9
9
  import {
10
+ AGG_TERMS_OF_SERVICE_URL,
10
11
  Button,
11
12
  Card,
12
13
  CloseIcon,
@@ -27,8 +28,9 @@ import {
27
28
  cn,
28
29
  formatUsd,
29
30
  getMotionClassName,
31
+ normalizeVenueMarketCluster,
30
32
  skeletonViews
31
- } from "./chunk-6NS7D73S.mjs";
33
+ } from "./chunk-YZNO6IUD.mjs";
32
34
 
33
35
  // src/trading/types.ts
34
36
  import { Venue, enumGuard, isFiniteNonNeg, safeParse } from "@agg-build/sdk";
@@ -500,6 +502,7 @@ import {
500
502
  useGeoBlock,
501
503
  useLabels as useLabels3,
502
504
  useLiveOutcomePrices,
505
+ useMidpoints,
503
506
  useQueryClient,
504
507
  useSdkUiConfig as useSdkUiConfig2,
505
508
  useSmartRoute
@@ -632,7 +635,9 @@ var useKalshiKycFlow = ({
632
635
  };
633
636
 
634
637
  // src/trading/place-order/index.place-order.constants.ts
638
+ var PLACE_ORDER_DEFAULT_AMOUNT = 20;
635
639
  var MIN_BUY_ORDER_AMOUNT = 1;
640
+ var MIN_SELL_ORDER_SHARES = 1;
636
641
  var DEFAULT_SLIPPAGE_VALUE = "0.5";
637
642
  var HIGH_SLIPPAGE_THRESHOLD = 10;
638
643
  var PLACE_ORDER_ROUTE_COLLAPSED_CARD_COUNT = 3;
@@ -843,10 +848,12 @@ var resolvePlaceOrderQuoteStatus = ({
843
848
  var buildLiveRouteCards = ({
844
849
  labels,
845
850
  quoteData,
846
- tradeSide
851
+ tradeSide,
852
+ eventVenues = []
847
853
  }) => {
848
854
  var _a, _b, _c;
849
855
  const geoBlockedVenues = extractGeoBlockedVenues(quoteData.warnings);
856
+ const eventVenueSet = new Set(eventVenues);
850
857
  const primaryResult = resolvePlaceOrderQuoteResult({ labels, quoteData, tradeSide });
851
858
  const primaryVenue = (_a = quoteData.fills[0]) == null ? void 0 : _a.venue;
852
859
  const parsedPrimaryVenue = parseVenue(primaryVenue);
@@ -944,24 +951,26 @@ var buildLiveRouteCards = ({
944
951
  });
945
952
  const baseCards = primaryCard ? [primaryCard, ...soloCards] : soloCards;
946
953
  const coveredVenueStrings = new Set(
947
- [...baseCards, ...unavailableCards].flatMap((c) => c.venue ? [c.venue] : [])
954
+ [...baseCards, ...unavailableCards].flatMap((card) => card.venue ? [card.venue] : [])
948
955
  );
949
- const geoBlockedOnlyCards = [...geoBlockedVenues].filter((venueStr) => !coveredVenueStrings.has(venueStr)).map((venueStr) => {
950
- const parsedVenue = parseVenue(venueStr);
951
- const venue = parsedVenue.success ? parsedVenue.data : void 0;
952
- return {
953
- id: `live-geo-blocked-${venueStr}`,
954
- hint: "",
955
- kind: "venue",
956
- label: getTradingVenueLabel(venue),
957
- numericValue: 0,
958
- quoteData,
959
- value: "",
960
- venue,
961
- isUnavailable: true
962
- };
963
- });
964
- return [...baseCards, ...unavailableCards, ...geoBlockedOnlyCards];
956
+ const parsedKalshiVenue = parseVenue("kalshi");
957
+ const kalshiVenue = parsedKalshiVenue.success ? parsedKalshiVenue.data : void 0;
958
+ const warningOnlyUnavailableCards = geoBlockedVenues.has("kalshi") && !!kalshiVenue && eventVenueSet.has(kalshiVenue) && !coveredVenueStrings.has("kalshi") ? (() => {
959
+ return [
960
+ {
961
+ id: "live-geo-blocked-kalshi",
962
+ hint: "",
963
+ kind: "venue",
964
+ label: getTradingVenueLabel(kalshiVenue),
965
+ numericValue: 0,
966
+ quoteData,
967
+ value: "",
968
+ venue: kalshiVenue,
969
+ isUnavailable: true
970
+ }
971
+ ];
972
+ })() : [];
973
+ return [...baseCards, ...unavailableCards, ...warningOnlyUnavailableCards];
965
974
  };
966
975
  var resolveExecutionVenueFromQuote = (quoteData) => {
967
976
  if (!(quoteData == null ? void 0 : quoteData.fills.length)) return void 0;
@@ -1123,14 +1132,18 @@ var groupPlaceOrderFailureSteps = (steps) => {
1123
1132
  };
1124
1133
  var buildPlaceOrderExecutionStepGroupsFromFailureSummary = ({
1125
1134
  labels,
1126
- summary
1135
+ summary,
1136
+ // When the partial-fill steps are rendered inside the success view (auto
1137
+ // 95%+ skip or after the user clicks Skip), surface them as completed
1138
+ // checks instead of warnings — the order is being treated as complete.
1139
+ treatPartialAsComplete = false
1127
1140
  }) => {
1128
1141
  var _a;
1129
1142
  const failureStepGroups = groupPlaceOrderFailureSteps(summary.steps).map(
1130
1143
  (group) => group.map((step) => ({
1131
1144
  id: step.id,
1132
1145
  label: step.label,
1133
- tone: step.tone,
1146
+ tone: treatPartialAsComplete && (step.tone === "warning" || step.tone === "error") ? "complete" : step.tone,
1134
1147
  venue: step.venue
1135
1148
  }))
1136
1149
  );
@@ -1591,10 +1604,6 @@ var PlaceOrderFailureView = ({
1591
1604
  ] }),
1592
1605
  summary.eventSubtitle ? /* @__PURE__ */ jsx3("p", { className: "text-agg-base leading-agg-6 text-agg-foreground", children: summary.eventSubtitle }) : null
1593
1606
  ] }),
1594
- /* @__PURE__ */ jsxs2("div", { className: "flex min-h-12 w-full items-center justify-center gap-3 rounded-agg-full agg-bg-brand px-8 text-agg-base font-agg-bold leading-agg-6 text-agg-on-primary", children: [
1595
- /* @__PURE__ */ jsx3(LoadingIcon, { size: "small", className: "text-agg-on-primary!" }),
1596
- /* @__PURE__ */ jsx3("span", { children: summary.actionLabel })
1597
- ] }),
1598
1607
  /* @__PURE__ */ jsx3("div", { className: "flex flex-col gap-4", children: failureStepGroups.map((group, groupIndex) => /* @__PURE__ */ jsx3("div", { className: "flex flex-col gap-2", children: group.map((step) => renderPartialFailureStep(step)) }, `failure-group-${groupIndex}`)) }),
1599
1608
  /* @__PURE__ */ jsx3("div", { className: "flex items-center gap-4", children: summary.actions.map((action) => /* @__PURE__ */ jsx3(
1600
1609
  Button,
@@ -1699,19 +1708,6 @@ var PlaceOrderSuccessView = ({
1699
1708
  ] }),
1700
1709
  summary.eventDateLabel ? /* @__PURE__ */ jsx4("p", { className: "text-agg-base leading-agg-6 text-agg-foreground", children: summary.eventDateLabel }) : null
1701
1710
  ] }) : null,
1702
- /* @__PURE__ */ jsxs3(
1703
- "div",
1704
- {
1705
- className: cn(
1706
- "agg-order-success-pill flex min-h-12 w-full items-center justify-center gap-2 rounded-agg-full px-6 py-2.5 text-center text-agg-base font-agg-bold leading-agg-6 text-agg-on-primary",
1707
- resolvedActionTone === "positive" ? "bg-agg-success" : "bg-agg-error"
1708
- ),
1709
- children: [
1710
- /* @__PURE__ */ jsx4(Icon, { name: "success-check", size: "small", className: "h-4 w-4 shrink-0 text-current" }),
1711
- /* @__PURE__ */ jsx4("span", { children: resolvedActionLabel })
1712
- ]
1713
- }
1714
- ),
1715
1711
  executionStepGroups.length > 0 ? /* @__PURE__ */ jsxs3("div", { className: "agg-order-success-timeline flex flex-col gap-2", children: [
1716
1712
  /* @__PURE__ */ jsx4(
1717
1713
  "div",
@@ -1801,6 +1797,19 @@ var PlaceOrderSuccessView = ({
1801
1797
  /* @__PURE__ */ jsx4("p", { className: "min-w-0 flex-1", children: finalStep.label })
1802
1798
  ] }) : null
1803
1799
  ] }) : null,
1800
+ /* @__PURE__ */ jsxs3(
1801
+ "div",
1802
+ {
1803
+ className: cn(
1804
+ "agg-order-success-pill flex min-h-12 w-full items-center justify-center gap-2 rounded-agg-full px-6 py-2.5 text-center text-agg-base font-agg-bold leading-agg-6 text-agg-on-primary",
1805
+ resolvedActionTone === "positive" ? "bg-agg-success" : "bg-agg-error"
1806
+ ),
1807
+ children: [
1808
+ /* @__PURE__ */ jsx4(Icon, { name: "success-check", size: "small", className: "h-4 w-4 shrink-0 text-current" }),
1809
+ /* @__PURE__ */ jsx4("span", { children: resolvedActionLabel })
1810
+ ]
1811
+ }
1812
+ ),
1804
1813
  /* @__PURE__ */ jsxs3("div", { className: "agg-order-success-summary flex items-center justify-between gap-4", children: [
1805
1814
  /* @__PURE__ */ jsx4("p", { className: "text-agg-base font-agg-bold leading-agg-6 text-agg-foreground", children: tradingLabels.amount(resolvedTradeSide) }),
1806
1815
  /* @__PURE__ */ jsx4("p", { className: "text-right text-[30px] font-agg-bold leading-[36px] text-agg-foreground", children: resolvedAmountLabel })
@@ -2510,7 +2519,7 @@ var InitiateKycButton = ({ label, onOpen }) => /* @__PURE__ */ jsx5(
2510
2519
  size: "large",
2511
2520
  variant: "primary",
2512
2521
  onClick: onOpen,
2513
- className: "agg-order-kyc-action h-12 w-full px-8 text-agg-base leading-agg-6 shadow-none mb-3",
2522
+ className: "agg-order-kyc-action h-12 w-full px-8 text-agg-base leading-agg-6 shadow-none",
2514
2523
  children: label
2515
2524
  }
2516
2525
  );
@@ -2707,6 +2716,14 @@ var PlaceOrder = ({
2707
2716
  const livePrices = useLiveOutcomePrices(
2708
2717
  scopedSelectedMarket ? [scopedSelectedMarket] : void 0
2709
2718
  );
2719
+ const midpointsClusterMarkets = useMemo3(() => {
2720
+ if (!scopedSelectedMarket) return [];
2721
+ return normalizeVenueMarketCluster(
2722
+ resolvedEventTradingState.displayMarkets,
2723
+ scopedSelectedMarket.id
2724
+ );
2725
+ }, [resolvedEventTradingState.displayMarkets, scopedSelectedMarket]);
2726
+ const { prices: clusterMidpoints } = useMidpoints(midpointsClusterMarkets);
2710
2727
  const outcomes = useMemo3(
2711
2728
  () => mapVenueMarketOutcomesToPlaceOrderOutcomes(scopedSelectedMarket == null ? void 0 : scopedSelectedMarket.venueMarketOutcomes),
2712
2729
  [scopedSelectedMarket == null ? void 0 : scopedSelectedMarket.venueMarketOutcomes]
@@ -2714,7 +2731,8 @@ var PlaceOrder = ({
2714
2731
  const buyTabRef = useRef3(null);
2715
2732
  const sellTabRef = useRef3(null);
2716
2733
  const [internalTab, setInternalTab] = useState4("buy");
2717
- const [internalAmount, setInternalAmount] = useState4(0);
2734
+ const [internalAmount, setInternalAmount] = useState4(PLACE_ORDER_DEFAULT_AMOUNT);
2735
+ const [sellFilledForOutcomeId, setSellFilledForOutcomeId] = useState4(null);
2718
2736
  const [internalSlippage, setInternalSlippage] = useState4(DEFAULT_SLIPPAGE_VALUE);
2719
2737
  const [isRoutesExpanded, setIsRoutesExpanded] = useState4(false);
2720
2738
  const [selectedRouteCardId, setSelectedRouteCardId] = useState4(null);
@@ -2784,13 +2802,28 @@ var PlaceOrder = ({
2784
2802
  if (!Number.isFinite(currentSellableShares)) return 0;
2785
2803
  return currentSellableShares;
2786
2804
  }, [currentSellableShares]);
2805
+ useEffect3(() => {
2806
+ if (!isSell || isCurrentSellableSharesLoading) return;
2807
+ if (scopedSelectedOutcomeId === sellFilledForOutcomeId) return;
2808
+ setInternalAmount(displayedCurrentSellableShares);
2809
+ setSellFilledForOutcomeId(scopedSelectedOutcomeId != null ? scopedSelectedOutcomeId : null);
2810
+ onAmountChange == null ? void 0 : onAmountChange(displayedCurrentSellableShares);
2811
+ }, [
2812
+ isSell,
2813
+ isCurrentSellableSharesLoading,
2814
+ scopedSelectedOutcomeId,
2815
+ sellFilledForOutcomeId,
2816
+ displayedCurrentSellableShares,
2817
+ onAmountChange
2818
+ ]);
2787
2819
  const routeCards = useMemo3(
2788
2820
  () => smartRoute.data ? buildLiveRouteCards({
2821
+ eventVenues: scopedSelectedEvent == null ? void 0 : scopedSelectedEvent.venueMarkets.map((market) => market.venue),
2789
2822
  labels: tradingLabels,
2790
2823
  quoteData: smartRoute.data,
2791
2824
  tradeSide: isSell ? "sell" : "buy"
2792
2825
  }) : [],
2793
- [smartRoute.data, tradingLabels, isSell]
2826
+ [smartRoute.data, tradingLabels, isSell, scopedSelectedEvent == null ? void 0 : scopedSelectedEvent.venueMarkets]
2794
2827
  );
2795
2828
  const resolvedSelectedRouteCardId = useMemo3(() => {
2796
2829
  var _a2, _b2, _c2, _d2;
@@ -2904,7 +2937,10 @@ var PlaceOrder = ({
2904
2937
  potentialReturnLabel,
2905
2938
  executionStepGroups: (partialFillSummary == null ? void 0 : partialFillSummary.kind) === "partial_fill" ? buildPlaceOrderExecutionStepGroupsFromFailureSummary({
2906
2939
  labels: tradingLabels,
2907
- summary: partialFillSummary
2940
+ summary: partialFillSummary,
2941
+ // Inside the success view (auto-95% skip or user-clicked
2942
+ // Skip), surface partial-fill steps as completed checks.
2943
+ treatPartialAsComplete: true
2908
2944
  }) : buildPlaceOrderExecutionStepGroups({
2909
2945
  labels: tradingLabels,
2910
2946
  orderId: orderId != null ? orderId : (_h2 = executionProgress.submittedOrders[0]) == null ? void 0 : _h2.orderId,
@@ -3077,13 +3113,24 @@ var PlaceOrder = ({
3077
3113
  }, [smartRoute.error, tradingLabels.quoteUnavailable]);
3078
3114
  const progressActionLabel = (internalTab === "buy" ? tradingLabels.buyingOutcome(selectedOutcomeLabel) : tradingLabels.sellingOutcome(selectedOutcomeLabel)).trim();
3079
3115
  const canRetryRemaining = useMemo3(() => {
3080
- if (isSell) return true;
3081
3116
  const remaining = getPlaceOrderUnfilledRemaining({
3082
3117
  originalAmount: internalAmount,
3083
3118
  terminalOrderEvents: executionProgress.terminalOrderEvents
3084
3119
  });
3085
- return remaining >= MIN_BUY_ORDER_AMOUNT;
3120
+ const minRemainder = isSell ? MIN_SELL_ORDER_SHARES : MIN_BUY_ORDER_AMOUNT;
3121
+ return remaining >= minRemainder;
3086
3122
  }, [executionProgress.terminalOrderEvents, internalAmount, isSell]);
3123
+ const PARTIAL_FILL_AUTO_SUCCESS_THRESHOLD = 0.95;
3124
+ const shouldAutoSkipPartialFill = useMemo3(() => {
3125
+ if (internalAmount <= 0) return false;
3126
+ const remaining = getPlaceOrderUnfilledRemaining({
3127
+ originalAmount: internalAmount,
3128
+ terminalOrderEvents: executionProgress.terminalOrderEvents
3129
+ });
3130
+ const filled = Math.max(0, internalAmount - remaining);
3131
+ const fillRatio = filled / internalAmount;
3132
+ return fillRatio >= PARTIAL_FILL_AUTO_SUCCESS_THRESHOLD || !canRetryRemaining;
3133
+ }, [canRetryRemaining, executionProgress.terminalOrderEvents, internalAmount]);
3087
3134
  const failureSummary = useMemo3(() => {
3088
3135
  var _a2;
3089
3136
  if ((submissionProgressState == null ? void 0 : submissionProgressState.phase) !== "failed") return void 0;
@@ -3140,6 +3187,7 @@ var PlaceOrder = ({
3140
3187
  setSubmissionProgressState(null);
3141
3188
  setSubmissionFeedback(null);
3142
3189
  setInternalAmount(0);
3190
+ setSellFilledForOutcomeId(null);
3143
3191
  setInternalSlippage(DEFAULT_SLIPPAGE_VALUE);
3144
3192
  setInternalTab("buy");
3145
3193
  setIsRoutesExpanded(false);
@@ -3203,6 +3251,17 @@ var PlaceOrder = ({
3203
3251
  failureSummary,
3204
3252
  selectedRouteCard == null ? void 0 : selectedRouteCard.quoteData
3205
3253
  ]);
3254
+ useEffect3(() => {
3255
+ if ((submissionProgressState == null ? void 0 : submissionProgressState.phase) !== "failed") return;
3256
+ if ((failureSummary == null ? void 0 : failureSummary.kind) !== "partial_fill") return;
3257
+ if (!shouldAutoSkipPartialFill) return;
3258
+ handleSkipToSuccess();
3259
+ }, [
3260
+ failureSummary == null ? void 0 : failureSummary.kind,
3261
+ handleSkipToSuccess,
3262
+ shouldAutoSkipPartialFill,
3263
+ submissionProgressState == null ? void 0 : submissionProgressState.phase
3264
+ ]);
3206
3265
  const handleRetrySubmission = useCallback3(() => __async(null, null, function* () {
3207
3266
  var _a2, _b2, _c2;
3208
3267
  if (!orderEligibility.canPlaceOrder) {
@@ -3245,6 +3304,7 @@ var PlaceOrder = ({
3245
3304
  throw new Error(tradingLabels.quoteUnavailable);
3246
3305
  }
3247
3306
  const refreshedCards = buildLiveRouteCards({
3307
+ eventVenues: scopedSelectedEvent == null ? void 0 : scopedSelectedEvent.venueMarkets.map((market) => market.venue),
3248
3308
  labels: tradingLabels,
3249
3309
  quoteData: refetchedQuoteData,
3250
3310
  tradeSide: internalTab
@@ -3281,6 +3341,7 @@ var PlaceOrder = ({
3281
3341
  isSell,
3282
3342
  onAmountChange,
3283
3343
  orderEligibility.canPlaceOrder,
3344
+ scopedSelectedEvent == null ? void 0 : scopedSelectedEvent.venueMarkets,
3284
3345
  scopedSelectedOutcomeId,
3285
3346
  selectedRouteCardId,
3286
3347
  smartRoute,
@@ -3339,11 +3400,20 @@ var PlaceOrder = ({
3339
3400
  const handleTabChange = (nextTab) => {
3340
3401
  if (!orderEligibility.canPlaceOrder) return;
3341
3402
  setInternalTab(nextTab);
3403
+ if (nextTab === "sell") {
3404
+ setInternalAmount(0);
3405
+ setSellFilledForOutcomeId(null);
3406
+ onAmountChange == null ? void 0 : onAmountChange(0);
3407
+ } else {
3408
+ setInternalAmount(PLACE_ORDER_DEFAULT_AMOUNT);
3409
+ onAmountChange == null ? void 0 : onAmountChange(PLACE_ORDER_DEFAULT_AMOUNT);
3410
+ }
3342
3411
  onTabChange == null ? void 0 : onTabChange(nextTab);
3343
3412
  };
3344
3413
  const handleOutcomeChange = (nextOutcomeId) => {
3345
3414
  if (isResolvedOutcomeCtaLocked) return;
3346
3415
  if (!orderEligibility.canPlaceOrder) return;
3416
+ if (isSell) setSellFilledForOutcomeId(null);
3347
3417
  onOutcomeChange == null ? void 0 : onOutcomeChange(nextOutcomeId);
3348
3418
  tradingContext == null ? void 0 : tradingContext.selectOutcome(nextOutcomeId);
3349
3419
  };
@@ -3351,6 +3421,7 @@ var PlaceOrder = ({
3351
3421
  if (!orderEligibility.canPlaceOrder) return;
3352
3422
  const resolvedNextValue = nextValue != null ? nextValue : 0;
3353
3423
  setInternalAmount(resolvedNextValue);
3424
+ if (isSell) setSellFilledForOutcomeId(scopedSelectedOutcomeId != null ? scopedSelectedOutcomeId : null);
3354
3425
  onAmountChange == null ? void 0 : onAmountChange(resolvedNextValue);
3355
3426
  };
3356
3427
  const handleFillSellableShares = () => {
@@ -3490,11 +3561,11 @@ var PlaceOrder = ({
3490
3561
  }
3491
3562
  ),
3492
3563
  outcomes.length >= 2 ? /* @__PURE__ */ jsx5("div", { className: "agg-outcomes flex w-full max-w-full gap-2", children: outcomes.map((outcome, index) => {
3493
- var _a2, _b2;
3494
- const price = (_a2 = livePrices.get(outcome.id)) != null ? _a2 : outcome.price;
3564
+ var _a2, _b2, _c2;
3565
+ const price = (_b2 = (_a2 = clusterMidpoints.get(outcome.id)) != null ? _a2 : livePrices.get(outcome.id)) != null ? _b2 : outcome.price;
3495
3566
  const isActive = outcome.id === scopedSelectedOutcomeId;
3496
3567
  const isPositive = resolveIsPositiveOutcome(outcome, index);
3497
- const displayLabel = ((_b2 = outcome.title) == null ? void 0 : _b2.trim()) || outcome.label;
3568
+ const displayLabel = ((_c2 = outcome.title) == null ? void 0 : _c2.trim()) || outcome.label;
3498
3569
  return /* @__PURE__ */ jsxs4(
3499
3570
  "button",
3500
3571
  {
@@ -3601,7 +3672,7 @@ var PlaceOrder = ({
3601
3672
  card,
3602
3673
  enableAnimations,
3603
3674
  isExpanded: card.kind === "split" ? isSplitDetailOpen : isRoutesExpanded,
3604
- isSelected: card.id === resolvedSelectedRouteCardId,
3675
+ isSelected: !card.isUnavailable && card.id === resolvedSelectedRouteCardId,
3605
3676
  onSelect: handleRouteCardSelect,
3606
3677
  tradingLabels
3607
3678
  }) }, card.id);
@@ -3732,7 +3803,7 @@ var PlaceOrder = ({
3732
3803
  {
3733
3804
  size: "large",
3734
3805
  variant: hasEnteredAmount && !shouldShowGeoBlockBanner ? "primary" : "secondary",
3735
- className: "agg-order-submit h-12 w-full px-8 text-agg-base leading-agg-6 shadow-none mb-3",
3806
+ className: "agg-order-submit h-12 w-full px-8 text-agg-base leading-agg-6 shadow-none",
3736
3807
  disabled: isActionDisabled || shouldShowGeoBlockBanner,
3737
3808
  isLoading: isActionLoading,
3738
3809
  "aria-label": actionLabel,
@@ -3742,7 +3813,7 @@ var PlaceOrder = ({
3742
3813
  children: actionLabel
3743
3814
  }
3744
3815
  ),
3745
- shouldShowGeoBlockBanner ? /* @__PURE__ */ jsx5(GeoBlockBanner, { venue: geoBlockVenueLabel }) : null,
3816
+ shouldShowGeoBlockBanner ? /* @__PURE__ */ jsx5(GeoBlockBanner, { venue: geoBlockVenueLabel, termsUrl: AGG_TERMS_OF_SERVICE_URL }) : null,
3746
3817
  !shouldShowGeoBlockBanner ? /* @__PURE__ */ jsx5("p", { className: "agg-order-disclaimer text-center text-agg-xs leading-agg-4 text-agg-muted-foreground", children: tradingLabels.disclaimer }) : null
3747
3818
  ]
3748
3819
  }
@@ -9,13 +9,13 @@ import {
9
9
  isErrorWithStatus,
10
10
  useEventListTabs,
11
11
  useEventListTabsHeaderOverflow
12
- } from "./chunk-I2WBGEWK.mjs";
12
+ } from "./chunk-5ES2VJHO.mjs";
13
13
  import {
14
14
  DEPOSIT_MODAL_OPEN_EVENT,
15
15
  PlaceOrder,
16
16
  SettlementDetails,
17
17
  WITHDRAW_MODAL_OPEN_EVENT
18
- } from "./chunk-CGNDMLQL.mjs";
18
+ } from "./chunk-LPNZOX3E.mjs";
19
19
  import {
20
20
  AggErrorBoundary,
21
21
  Button,
@@ -44,7 +44,7 @@ import {
44
44
  filterOpenEvents,
45
45
  resolveTabVenus,
46
46
  venueLogoNames
47
- } from "./chunk-6NS7D73S.mjs";
47
+ } from "./chunk-YZNO6IUD.mjs";
48
48
 
49
49
  // src/pages/home/index.tsx
50
50
  import {
@@ -741,11 +741,32 @@ var HomeSearchResults = ({
741
741
  ]
742
742
  }
743
743
  ),
744
+ !isError && openEvents.length === 0 ? /* @__PURE__ */ jsx2("div", { className: "col-span-full w-full", children: /* @__PURE__ */ jsx2(
745
+ StateMessage,
746
+ {
747
+ title: labels.eventList.emptyTitle,
748
+ description: labels.eventList.emptyDescription,
749
+ classNames: {
750
+ title: "!text-agg-base leading-agg-6",
751
+ description: "!text-agg-sm leading-agg-5"
752
+ },
753
+ icon: /* @__PURE__ */ jsx2(Icon, { name: "search-empty" })
754
+ }
755
+ ) }) : null,
756
+ isError ? /* @__PURE__ */ jsx2(
757
+ StateMessage,
758
+ {
759
+ title: labels.eventList.errorTitle,
760
+ description: labels.eventList.errorDescription,
761
+ icon: /* @__PURE__ */ jsx2(Icon, { name: "warning" })
762
+ }
763
+ ) : null,
744
764
  /* @__PURE__ */ jsxs2(
745
765
  "div",
746
766
  {
747
767
  className: cn(
748
768
  "agg-event-list-grid grid grid-cols-[repeat(auto-fill,minmax(240px,1fr))] md:grid-cols-[repeat(auto-fill,minmax(360px,1fr))] gap-4 transition-opacity duration-200",
769
+ "empty:hidden",
749
770
  isPlaceholderData && "opacity-60"
750
771
  ),
751
772
  children: [
@@ -780,27 +801,7 @@ var HomeSearchResults = ({
780
801
  }
781
802
  },
782
803
  `search-results-loading-${index}`
783
- )) : null,
784
- !isError && openEvents.length === 0 ? /* @__PURE__ */ jsx2("div", { className: "col-span-full w-full", children: /* @__PURE__ */ jsx2(
785
- StateMessage,
786
- {
787
- title: labels.eventList.emptyTitle,
788
- description: labels.eventList.emptyDescription,
789
- classNames: {
790
- title: "!text-agg-base leading-agg-6",
791
- description: "!text-agg-sm leading-agg-5"
792
- },
793
- icon: /* @__PURE__ */ jsx2(Icon, { name: "search-empty" })
794
- }
795
- ) }) : null,
796
- isError ? /* @__PURE__ */ jsx2(
797
- StateMessage,
798
- {
799
- title: labels.eventList.errorTitle,
800
- description: labels.eventList.errorDescription,
801
- icon: /* @__PURE__ */ jsx2(Icon, { name: "warning" })
802
- }
803
- ) : null
804
+ )) : null
804
805
  ]
805
806
  }
806
807
  ),
@@ -1377,13 +1378,13 @@ var AmountTimeStack = ({
1377
1378
  var TradeTypeCell = ({
1378
1379
  activity,
1379
1380
  tone
1380
- }) => /* @__PURE__ */ jsxs4("div", { className: "hidden w-22 shrink-0 items-center gap-3 sm:flex", children: [
1381
+ }) => /* @__PURE__ */ jsxs4("div", { className: "hidden w-[108px] shrink-0 items-center gap-3 sm:flex", children: [
1381
1382
  /* @__PURE__ */ jsx4(VenueLogo, { venue: activity.venue, size: "small", className: "shrink-0" }),
1382
1383
  /* @__PURE__ */ jsx4(
1383
1384
  "p",
1384
1385
  {
1385
1386
  className: cn(
1386
- "agg-activity-type w-15 font-agg-sans text-agg-sm leading-agg-5 font-agg-normal",
1387
+ "agg-activity-type w-20 font-agg-sans text-agg-sm leading-agg-5 font-agg-normal",
1387
1388
  tone.primary
1388
1389
  ),
1389
1390
  children: activity.type
@@ -1393,7 +1394,7 @@ var TradeTypeCell = ({
1393
1394
  var TransferTypeCell = ({
1394
1395
  activity,
1395
1396
  tone
1396
- }) => /* @__PURE__ */ jsxs4("div", { className: "hidden w-[88px] shrink-0 items-center gap-3 sm:flex", children: [
1397
+ }) => /* @__PURE__ */ jsxs4("div", { className: "hidden w-[108px] shrink-0 items-center gap-3 sm:flex", children: [
1397
1398
  /* @__PURE__ */ jsx4(
1398
1399
  Icon,
1399
1400
  {
@@ -1406,7 +1407,7 @@ var TransferTypeCell = ({
1406
1407
  "p",
1407
1408
  {
1408
1409
  className: cn(
1409
- "agg-activity-type w-15 font-agg-sans text-agg-sm leading-agg-5 font-agg-normal",
1410
+ "agg-activity-type w-20 font-agg-sans text-agg-sm leading-agg-5 font-agg-normal",
1410
1411
  tone.primary
1411
1412
  ),
1412
1413
  children: activity.type
@@ -1523,7 +1524,6 @@ var TransferRow = ({
1523
1524
  onClick
1524
1525
  }) => {
1525
1526
  const tone = resolveToneClasses(activity);
1526
- const isDeposit = activity.kind === "deposit";
1527
1527
  const transferIconName = TRANSFER_ICON[activity.kind];
1528
1528
  return /* @__PURE__ */ jsx4("button", { type: "button", className, onClick, children: /* @__PURE__ */ jsxs4(
1529
1529
  "div",
@@ -1549,7 +1549,7 @@ var TransferRow = ({
1549
1549
  ] }) }),
1550
1550
  /* @__PURE__ */ jsxs4("div", { className: "flex w-full items-center justify-between sm:contents", children: [
1551
1551
  /* @__PURE__ */ jsxs4("div", { className: "flex min-w-0 flex-1 items-center gap-3 sm:gap-4", children: [
1552
- /* @__PURE__ */ jsx4("div", { className: "agg-activity-deposit-square hidden h-15 w-15 shrink-0 items-center justify-center rounded-agg-lg bg-agg-secondary-hover sm:flex", children: isDeposit ? /* @__PURE__ */ jsx4(Icon, { name: "badge-check-thin", size: "medium", className: "text-agg-muted-foreground" }) : /* @__PURE__ */ jsx4(Icon, { name: transferIconName, size: "medium", className: "text-agg-foreground" }) }),
1552
+ /* @__PURE__ */ jsx4("div", { className: "agg-activity-deposit-square hidden h-15 w-15 shrink-0 items-center justify-center rounded-agg-lg bg-agg-secondary-hover sm:flex", children: /* @__PURE__ */ jsx4(Icon, { name: "badge-check-thin", size: "medium", className: "text-agg-muted-foreground" }) }),
1553
1553
  /* @__PURE__ */ jsxs4("div", { className: "flex min-w-0 flex-1 flex-col justify-center gap-1", children: [
1554
1554
  /* @__PURE__ */ jsx4(
1555
1555
  "p",
@@ -1558,7 +1558,7 @@ var TransferRow = ({
1558
1558
  "min-w-0 overflow-hidden text-ellipsis whitespace-nowrap font-agg-sans text-agg-sm leading-agg-5 font-agg-bold sm:text-agg-base sm:leading-agg-6",
1559
1559
  tone.primary
1560
1560
  ),
1561
- children: isDeposit ? "Successful deposit" : activity.title
1561
+ children: activity.title
1562
1562
  }
1563
1563
  ),
1564
1564
  /* @__PURE__ */ jsx4(
@@ -2659,6 +2659,7 @@ var twoDecimalUsdFormatter = new Intl.NumberFormat("en-US", {
2659
2659
  maximumFractionDigits: 2
2660
2660
  });
2661
2661
  var DEFAULT_TOKEN_DECIMALS = 6;
2662
+ var LEGACY_TWELVE_DECIMAL_SCALE = BigInt("1000000000000");
2662
2663
  var TOKEN_DECIMALS_BY_SYMBOL = {
2663
2664
  BNB: 18,
2664
2665
  ETH: 18,
@@ -2727,9 +2728,38 @@ var parseRawTokenValue = (value, decimals) => {
2727
2728
  return parsed / __pow(10, decimals);
2728
2729
  }
2729
2730
  };
2731
+ var shouldUseLegacyEighteenDecimalFallback = ({
2732
+ value,
2733
+ parsed,
2734
+ decimals,
2735
+ tokenSymbol,
2736
+ chainId
2737
+ }) => {
2738
+ if (parsed == null || decimals !== 6 || value.includes(".")) return false;
2739
+ const normalizedSymbol = tokenSymbol.trim().toUpperCase();
2740
+ if (normalizedSymbol !== "USDC" && normalizedSymbol !== "USDT") return false;
2741
+ const normalizedChainId = chainId == null ? void 0 : chainId.trim();
2742
+ if (normalizedChainId === "56") return false;
2743
+ if (!/^\d+$/.test(value)) return false;
2744
+ try {
2745
+ const raw = BigInt(value);
2746
+ if (raw % LEGACY_TWELVE_DECIMAL_SCALE !== BigInt(0)) return false;
2747
+ const parsedAsEighteen = Number(raw / LEGACY_TWELVE_DECIMAL_SCALE) / 1e6;
2748
+ return Number.isFinite(parsedAsEighteen) && parsed > 1e6 && parsedAsEighteen < 1e6;
2749
+ } catch (e) {
2750
+ return false;
2751
+ }
2752
+ };
2730
2753
  var formatTokenAmountTwoDecimals = (value, tokenSymbol, chainId) => {
2731
- const parsed = parseRawTokenValue(value, getTokenDecimals(tokenSymbol, chainId));
2754
+ const decimals = getTokenDecimals(tokenSymbol, chainId);
2755
+ const parsed = parseRawTokenValue(value, decimals);
2732
2756
  if (parsed == null) return "0.00";
2757
+ if (value && shouldUseLegacyEighteenDecimalFallback({ value, parsed, decimals, tokenSymbol, chainId })) {
2758
+ const fallbackParsed = parseRawTokenValue(value, 18);
2759
+ if (fallbackParsed != null) {
2760
+ return twoDecimalNumberFormatter.format(fallbackParsed);
2761
+ }
2762
+ }
2733
2763
  return twoDecimalNumberFormatter.format(parsed);
2734
2764
  };
2735
2765
  var getFilledUsdValue = (filledAmountRaw) => {