@agg-build/ui 4.9.2 → 4.11.0

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 (38) hide show
  1. package/dist/{chunk-TNNLRRHC.mjs → chunk-6EHT5OFU.mjs} +1 -1
  2. package/dist/{chunk-MVAOWNG3.mjs → chunk-CHM6SCOY.mjs} +19 -10
  3. package/dist/{chunk-GVIS3YXU.mjs → chunk-EYJS45RP.mjs} +35 -12
  4. package/dist/{chunk-GG57TRNE.mjs → chunk-I72YHWOI.mjs} +2 -2
  5. package/dist/{chunk-K6F2ZYNM.mjs → chunk-NCWBKC5C.mjs} +52 -21
  6. package/dist/{chunk-H7L4HDXS.mjs → chunk-TXQJUVRW.mjs} +3 -2
  7. package/dist/{chunk-NYL6A6AD.mjs → chunk-W7HQVQ22.mjs} +257 -195
  8. package/dist/events.js +766 -681
  9. package/dist/events.mjs +3 -3
  10. package/dist/index.js +2725 -2599
  11. package/dist/index.mjs +7 -7
  12. package/dist/modals.js +1352 -1289
  13. package/dist/modals.mjs +3 -3
  14. package/dist/pages.js +2085 -1959
  15. package/dist/pages.mjs +6 -6
  16. package/dist/primitives.js +288 -226
  17. package/dist/primitives.mjs +1 -1
  18. package/dist/trading.js +854 -760
  19. package/dist/trading.mjs +4 -4
  20. package/dist/types/events/item-details/event-list-item-details.types.d.mts +2 -0
  21. package/dist/types/events/item-details/event-list-item-details.types.d.ts +2 -0
  22. package/dist/types/events/list/event-list.constants.d.mts +1 -1
  23. package/dist/types/events/list/event-list.constants.d.ts +1 -1
  24. package/dist/types/pages/event-market/event-market.types.d.mts +2 -0
  25. package/dist/types/pages/event-market/event-market.types.d.ts +2 -0
  26. package/dist/types/pages/event-market/sports-event-market-page.d.mts +1 -1
  27. package/dist/types/pages/event-market/sports-event-market-page.d.ts +1 -1
  28. package/dist/types/pages/user-profile/user-profile.types.d.mts +2 -0
  29. package/dist/types/pages/user-profile/user-profile.types.d.ts +2 -0
  30. package/dist/types/primitives/venue-logo/svg/logo-pred.d.mts +10 -0
  31. package/dist/types/primitives/venue-logo/svg/logo-pred.d.ts +10 -0
  32. package/dist/types/trading/place-order/index.place-order.execution-view.d.mts +2 -1
  33. package/dist/types/trading/place-order/index.place-order.execution-view.d.ts +2 -1
  34. package/dist/types/trading/place-order/index.place-order.types.d.mts +8 -0
  35. package/dist/types/trading/place-order/index.place-order.types.d.ts +8 -0
  36. package/dist/types/trading/place-order/index.place-order.utils.d.mts +1 -1
  37. package/dist/types/trading/place-order/index.place-order.utils.d.ts +1 -1
  38. package/package.json +3 -3
@@ -19,7 +19,7 @@ import {
19
19
  selectPrimaryVenueMarket,
20
20
  skeletonViews,
21
21
  sortOutcomes
22
- } from "./chunk-NYL6A6AD.mjs";
22
+ } from "./chunk-W7HQVQ22.mjs";
23
23
 
24
24
  // src/trading/trading-context/index.tsx
25
25
  import { useEventTradingContext } from "@agg-build/hooks";
@@ -12,7 +12,7 @@ import {
12
12
  isErrorWithStatus,
13
13
  useEventListTabs,
14
14
  useEventListTabsHeaderOverflow
15
- } from "./chunk-GVIS3YXU.mjs";
15
+ } from "./chunk-EYJS45RP.mjs";
16
16
  import {
17
17
  DEPOSIT_MODAL_OPEN_EVENT,
18
18
  PlaceOrder,
@@ -21,12 +21,12 @@ import {
21
21
  formatChainIdLabel,
22
22
  useClaimWinnings,
23
23
  useResolvedMarketClaim
24
- } from "./chunk-K6F2ZYNM.mjs";
24
+ } from "./chunk-NCWBKC5C.mjs";
25
25
  import {
26
26
  getDisplayOutcomePrice,
27
27
  resolveHeaderOutcomeItems,
28
28
  resolveMarketFromVenueMarkets
29
- } from "./chunk-TNNLRRHC.mjs";
29
+ } from "./chunk-6EHT5OFU.mjs";
30
30
  import {
31
31
  AggErrorBoundary,
32
32
  Button,
@@ -62,7 +62,7 @@ import {
62
62
  skeletonViews,
63
63
  sortCategoriesForNavigation,
64
64
  useOptionalToast
65
- } from "./chunk-NYL6A6AD.mjs";
65
+ } from "./chunk-W7HQVQ22.mjs";
66
66
 
67
67
  // src/pages/home/index.tsx
68
68
  import {
@@ -2309,6 +2309,7 @@ var SportsEventMarketPage = ({
2309
2309
  event,
2310
2310
  defaultMarketId,
2311
2311
  defaultOutcomeId,
2312
+ defaultTradeSide,
2312
2313
  classNames,
2313
2314
  ariaLabel,
2314
2315
  showPlaceOrder,
@@ -2407,6 +2408,7 @@ var SportsEventMarketPage = ({
2407
2408
  event: composedEvent,
2408
2409
  defaultMarketId,
2409
2410
  defaultOutcomeId,
2411
+ defaultTradeSide,
2410
2412
  eventTradingState,
2411
2413
  midpointsResult,
2412
2414
  sportsLiveState: sportsLiveStateByEventId.get(event.id),
@@ -2548,6 +2550,7 @@ var EventMarketPageContent = ({
2548
2550
  event,
2549
2551
  defaultMarketId,
2550
2552
  defaultOutcomeId,
2553
+ defaultTradeSide,
2551
2554
  classNames,
2552
2555
  ariaLabel,
2553
2556
  showPlaceOrder,
@@ -2707,6 +2710,7 @@ var EventMarketPageContent = ({
2707
2710
  event,
2708
2711
  defaultMarketId,
2709
2712
  defaultOutcomeId,
2713
+ defaultTradeSide,
2710
2714
  eventTradingState,
2711
2715
  midpointsResult,
2712
2716
  recurringMarkets: recurringMarketsPresentation,
@@ -4003,6 +4007,7 @@ var CLAIM_VENUE_LABELS = {
4003
4007
  [Venue.limitless]: "Limitless",
4004
4008
  [Venue.opinion]: "Opinion",
4005
4009
  [Venue.predict]: "Predict",
4010
+ [Venue.pred]: "PRED",
4006
4011
  [Venue.probable]: "Probable",
4007
4012
  [Venue.myriad]: "Myriad",
4008
4013
  [Venue.hyperliquid]: "Hyperliquid",
@@ -4158,6 +4163,7 @@ var VENUE_LABELS = {
4158
4163
  [Venue2.opinion]: "Opinion",
4159
4164
  [Venue2.polymarket]: "Polymarket",
4160
4165
  [Venue2.predict]: "Predict",
4166
+ [Venue2.pred]: "PRED",
4161
4167
  [Venue2.probable]: "Probable",
4162
4168
  [Venue2.myriad]: "Myriad",
4163
4169
  [Venue2.hyperliquid]: "Hyperliquid",
@@ -7411,7 +7417,8 @@ var POSITION_ROW_VENUE_ORDER = [
7411
7417
  Venue3.polymarket,
7412
7418
  Venue3.kalshi,
7413
7419
  Venue3.opinion,
7414
- Venue3.limitless
7420
+ Venue3.limitless,
7421
+ Venue3.pred
7415
7422
  ];
7416
7423
  function venueBreakdownSortKey(venue) {
7417
7424
  const idx = POSITION_ROW_VENUE_ORDER.indexOf(venue);
@@ -8032,7 +8039,8 @@ var UserProfilePage = ({
8032
8039
  const eventId = (_d = group.eventId) != null ? _d : venueEventId;
8033
8040
  const marketId = group.targetMarketId;
8034
8041
  return group.venueMarket.venueMarketOutcomes.map((outcome) => {
8035
- var _a3, _b3, _c3, _d2;
8042
+ var _a3, _b3, _c3, _d2, _e, _f;
8043
+ const outcomeId = (_b3 = (_a3 = outcome.venueBreakdown.find((row) => row.venueMarketOutcomeId)) == null ? void 0 : _a3.venueMarketOutcomeId) != null ? _b3 : void 0;
8036
8044
  const isResolved = group.venueMarket.status === "resolved";
8037
8045
  const isUnpriced = outcome.priceSource === "entry";
8038
8046
  const averagePriceCents = Math.round(outcome.avgEntryPrice * 100);
@@ -8050,12 +8058,13 @@ var UserProfilePage = ({
8050
8058
  const pnlPercent = displayPnlPercent == null ? null : displayPnlPercent.toFixed(2);
8051
8059
  const winningOutcomeIds = outcome.winner === true ? outcome.venueBreakdown.map((breakdown) => breakdown.venueMarketOutcomeId) : [];
8052
8060
  return {
8053
- id: `${group.targetMarketId}-${outcome.label}-${(_a3 = outcome.title) != null ? _a3 : ""}`,
8061
+ id: `${group.targetMarketId}-${outcome.label}-${(_c3 = outcome.title) != null ? _c3 : ""}`,
8054
8062
  eventId,
8055
8063
  marketId,
8056
- thumbnailSrc: (_b3 = group.venueMarket.image) != null ? _b3 : fallbackThumbnailSrc,
8064
+ outcomeId,
8065
+ thumbnailSrc: (_d2 = group.venueMarket.image) != null ? _d2 : fallbackThumbnailSrc,
8057
8066
  title: group.venueMarket.question,
8058
- outcomeLabel: ((_c3 = outcome.title) == null ? void 0 : _c3.trim()) || outcome.label,
8067
+ outcomeLabel: ((_e = outcome.title) == null ? void 0 : _e.trim()) || outcome.label,
8059
8068
  resolutionLabel: winningOutcomeLabel,
8060
8069
  venueShareBreakdown: buildVenueShareBreakdown(outcome),
8061
8070
  totalShares: outcome.totalSize,
@@ -8071,7 +8080,7 @@ var UserProfilePage = ({
8071
8080
  isPnlPositive: displayPnlValue != null && displayPnlValue >= 0,
8072
8081
  status: group.status,
8073
8082
  marketStatus: group.venueMarket.status,
8074
- winner: (_d2 = outcome.winner) != null ? _d2 : null,
8083
+ winner: (_f = outcome.winner) != null ? _f : null,
8075
8084
  resolutionDate: group.resolutionDate,
8076
8085
  closedTotalTradedLabel: formatUsd2(totalTradedValue),
8077
8086
  totalTradedValue,
@@ -24,7 +24,7 @@ import {
24
24
  resolveUnifiedOrderBookEntries,
25
25
  sortOutcomeSelectorOutcomes,
26
26
  useEventTradingContext
27
- } from "./chunk-TNNLRRHC.mjs";
27
+ } from "./chunk-6EHT5OFU.mjs";
28
28
  import {
29
29
  AutocompleteSelect,
30
30
  Badge,
@@ -78,7 +78,7 @@ import {
78
78
  sortOutcomes,
79
79
  splitEventsByLifecycle,
80
80
  validateSubcategoryPath
81
- } from "./chunk-NYL6A6AD.mjs";
81
+ } from "./chunk-W7HQVQ22.mjs";
82
82
 
83
83
  // src/events/item/index.tsx
84
84
  import {
@@ -2893,6 +2893,7 @@ var EventListItemDetailsContent = ({
2893
2893
  event,
2894
2894
  defaultMarketId,
2895
2895
  defaultOutcomeId,
2896
+ defaultTradeSide,
2896
2897
  classNames,
2897
2898
  venueInfo,
2898
2899
  detailsStats,
@@ -2979,7 +2980,7 @@ var EventListItemDetailsContent = ({
2979
2980
  if (!tradingContext) return;
2980
2981
  if (!defaultMarketId) return;
2981
2982
  if (tradingContext.selectedEventId !== event.id) return;
2982
- const applyKey = `${event.id}::${defaultMarketId}::${defaultOutcomeId != null ? defaultOutcomeId : ""}`;
2983
+ const applyKey = `${event.id}::${defaultMarketId}::${defaultOutcomeId != null ? defaultOutcomeId : ""}::${defaultTradeSide != null ? defaultTradeSide : ""}`;
2983
2984
  if (lastAppliedDefaultRef.current === applyKey) return;
2984
2985
  const nextMarket = event.venueMarkets.find((market) => market.id === defaultMarketId);
2985
2986
  if (!nextMarket) return;
@@ -2989,14 +2990,17 @@ var EventListItemDetailsContent = ({
2989
2990
  );
2990
2991
  if (!nextOutcome) return;
2991
2992
  tradingContext.selectMarketAndOutcome(defaultMarketId, defaultOutcomeId);
2992
- lastAppliedDefaultRef.current = applyKey;
2993
- return;
2993
+ } else {
2994
+ tradingContext.selectMarket(defaultMarketId, nextMarket);
2995
+ }
2996
+ if (defaultTradeSide === "sell" || defaultTradeSide === "buy") {
2997
+ tradingContext.setTradeSide(defaultTradeSide);
2994
2998
  }
2995
- tradingContext.selectMarket(defaultMarketId, nextMarket);
2996
2999
  lastAppliedDefaultRef.current = applyKey;
2997
3000
  }, [
2998
3001
  defaultMarketId,
2999
3002
  defaultOutcomeId,
3003
+ defaultTradeSide,
3000
3004
  event.id,
3001
3005
  event.venueMarkets,
3002
3006
  tradingContext,
@@ -3345,6 +3349,7 @@ var EventListItemDetails = (props) => {
3345
3349
  classNames,
3346
3350
  defaultMarketId,
3347
3351
  defaultOutcomeId,
3352
+ defaultTradeSide,
3348
3353
  venueInfo,
3349
3354
  detailsStats,
3350
3355
  ariaLabel: ariaLabelOverride,
@@ -3356,6 +3361,7 @@ var EventListItemDetails = (props) => {
3356
3361
  classNames,
3357
3362
  defaultMarketId,
3358
3363
  defaultOutcomeId,
3364
+ defaultTradeSide,
3359
3365
  venueInfo,
3360
3366
  detailsStats,
3361
3367
  ariaLabel: ariaLabelOverride,
@@ -4470,7 +4476,7 @@ var MarketDetailsContent = ({
4470
4476
  suppressOutcomeFallbackSelection,
4471
4477
  midpointsResult
4472
4478
  }) => {
4473
- var _a, _b, _c, _d, _e, _f, _g, _h, _i;
4479
+ var _a, _b, _c, _d, _e, _f, _g;
4474
4480
  const config = useSdkUiConfig5();
4475
4481
  const {
4476
4482
  features: { enableAnimations },
@@ -4727,11 +4733,10 @@ var MarketDetailsContent = ({
4727
4733
  });
4728
4734
  }, [model, selectedOutcomeLabel, selectedOutcomeId]);
4729
4735
  const orderBookEnabled = isOpened && effectiveSelectedTab === "order-book" && !marketTradingState.isTradingDisabled;
4730
- const primaryVenueMarketId = (_g = (_f = selectedOutcomesByVenue[0]) == null ? void 0 : _f.market.id) != null ? _g : null;
4731
- const primaryOutcomeId = (_i = (_h = selectedOutcomesByVenue[0]) == null ? void 0 : _h.outcome.id) != null ? _i : null;
4736
+ const primaryOutcomeId = (_g = (_f = selectedOutcomesByVenue[0]) == null ? void 0 : _f.outcome.id) != null ? _g : null;
4732
4737
  const marketOrderbookResult = useMarketOrderbook({
4733
- marketId: primaryVenueMarketId,
4734
- enabled: orderBookEnabled && !!primaryVenueMarketId,
4738
+ venueMarketOutcomeId: primaryOutcomeId,
4739
+ enabled: orderBookEnabled && !!primaryOutcomeId,
4735
4740
  venueOutcomes: selectedOutcomesByVenue.map((item) => ({
4736
4741
  venue: item.venue,
4737
4742
  venueMarketOutcomeId: item.outcomeId
@@ -5618,6 +5623,7 @@ import { getEffectiveDisabledVenues, isVenueInactive } from "@agg-build/sdk";
5618
5623
  import { useCallback as useCallback3, useEffect as useEffect7, useMemo as useMemo9, useRef as useRef7, useState as useState6 } from "react";
5619
5624
 
5620
5625
  // src/events/list/event-list.constants.ts
5626
+ import { sortVenues as sortVenues4 } from "@agg-build/hooks";
5621
5627
  import { MatchStatus, Venue as Venue2 } from "@agg-build/sdk";
5622
5628
  var DEFAULT_EVENTS_LIMIT = 50;
5623
5629
  var DEFAULT_EVENT_LIST_SORT = "volume24hr";
@@ -5628,7 +5634,7 @@ var EVENT_LIST_SORT_VALUES = [
5628
5634
  "endDate"
5629
5635
  ];
5630
5636
  var getDefaultEventListTabs = (labels) => {
5631
- return [
5637
+ const tabs = [
5632
5638
  {
5633
5639
  value: "matched",
5634
5640
  label: labels.eventList.matchedTab,
@@ -5664,6 +5670,12 @@ var getDefaultEventListTabs = (labels) => {
5664
5670
  venueLogo: Venue2.predict,
5665
5671
  venues: [Venue2.predict]
5666
5672
  },
5673
+ {
5674
+ value: Venue2.pred,
5675
+ label: labels.venues.pred,
5676
+ venueLogo: Venue2.pred,
5677
+ venues: [Venue2.pred]
5678
+ },
5667
5679
  {
5668
5680
  value: Venue2.hyperliquid,
5669
5681
  label: labels.venues.hyperliquid,
@@ -5698,6 +5710,17 @@ var getDefaultEventListTabs = (labels) => {
5698
5710
  isComingSoon: true
5699
5711
  }
5700
5712
  ];
5713
+ const venueRank = new Map(
5714
+ sortVenues4(tabs.flatMap((tab) => tab.venueLogo ? [tab.venueLogo] : [])).map((venue, i) => [
5715
+ venue,
5716
+ i
5717
+ ])
5718
+ );
5719
+ const rank = (tab) => {
5720
+ var _a;
5721
+ return tab.venueLogo ? 1 + ((_a = venueRank.get(tab.venueLogo)) != null ? _a : venueRank.size) : 0;
5722
+ };
5723
+ return [...tabs].sort((a, b) => rank(a) - rank(b));
5701
5724
  };
5702
5725
 
5703
5726
  // src/events/list/event-list-tabs.tsx
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  ConnectKalshiModal,
4
4
  dispatchAggDepositNotification
5
- } from "./chunk-H7L4HDXS.mjs";
5
+ } from "./chunk-TXQJUVRW.mjs";
6
6
  import {
7
7
  BoltIcon,
8
8
  Button,
@@ -36,7 +36,7 @@ import {
36
36
  shortenAddress,
37
37
  useOptionalToast,
38
38
  venueLogoLabels
39
- } from "./chunk-NYL6A6AD.mjs";
39
+ } from "./chunk-W7HQVQ22.mjs";
40
40
 
41
41
  // src/deposit/index.tsx
42
42
  import { useAggAuthState, useAggUiConfig, useDepositAddresses, useLabels as useLabels11 } from "@agg-build/hooks";
@@ -9,13 +9,13 @@ import {
9
9
  getTradingVenueLabel,
10
10
  prepareSettlementDifferences,
11
11
  resolveOrderEligibilityMessage
12
- } from "./chunk-TNNLRRHC.mjs";
12
+ } from "./chunk-6EHT5OFU.mjs";
13
13
  import {
14
14
  ConnectKalshiModal,
15
15
  GeoBlockBanner,
16
16
  SharedKycModal,
17
17
  subscribeAggDepositNotification
18
- } from "./chunk-H7L4HDXS.mjs";
18
+ } from "./chunk-TXQJUVRW.mjs";
19
19
  import {
20
20
  AGG_TERMS_OF_SERVICE_URL,
21
21
  Button,
@@ -48,7 +48,7 @@ import {
48
48
  resolveResolvedOutcomeLabel,
49
49
  skeletonViews,
50
50
  useOptionalToast
51
- } from "./chunk-NYL6A6AD.mjs";
51
+ } from "./chunk-W7HQVQ22.mjs";
52
52
 
53
53
  // src/trading/types.ts
54
54
  import { Venue, enumGuard, isFiniteNonNeg, safeParse } from "@agg-build/sdk";
@@ -1311,8 +1311,14 @@ var extractGeoBlockedVenues = (warnings) => {
1311
1311
  );
1312
1312
  };
1313
1313
  var getSmartRouteTotalFees = (feeBreakdown) => {
1314
+ var _a;
1314
1315
  if (!feeBreakdown) return null;
1315
- const feeParts = [feeBreakdown.venueFees, feeBreakdown.bridgeFees, feeBreakdown.executionGas];
1316
+ const feeParts = [
1317
+ feeBreakdown.venueFees,
1318
+ (_a = feeBreakdown.builderFee) != null ? _a : 0,
1319
+ feeBreakdown.bridgeFees,
1320
+ feeBreakdown.executionGas
1321
+ ];
1316
1322
  if (!feeParts.every(Number.isFinite)) return null;
1317
1323
  return feeParts.reduce((total, fee) => total + Math.round(fee * 100) / 100, 0);
1318
1324
  };
@@ -1438,9 +1444,10 @@ var resolvePlaceOrderQuoteStatus = ({
1438
1444
  amount,
1439
1445
  labels,
1440
1446
  quoteData,
1441
- selectedMarket
1447
+ selectedMarket,
1448
+ tradeSide = "buy"
1442
1449
  }) => {
1443
- var _a, _b, _c;
1450
+ var _a, _b, _c, _d, _e;
1444
1451
  if (!selectedMarket) {
1445
1452
  return {
1446
1453
  tone: "warning",
@@ -1460,9 +1467,10 @@ var resolvePlaceOrderQuoteStatus = ({
1460
1467
  };
1461
1468
  }
1462
1469
  if (quoteData.status === "no_orderbooks") {
1470
+ const serverError = (_a = quoteData.error) == null ? void 0 : _a.trim();
1463
1471
  return {
1464
1472
  tone: "error",
1465
- message: labels.noOrderbooks,
1473
+ message: serverError || labels.noOrderbooks,
1466
1474
  placement: "above-action"
1467
1475
  };
1468
1476
  }
@@ -1476,26 +1484,27 @@ var resolvePlaceOrderQuoteStatus = ({
1476
1484
  if (quoteData.status === "insufficient_input_amount") {
1477
1485
  return {
1478
1486
  tone: "error",
1479
- message: (_a = quoteData.message) != null ? _a : labels.insufficientInputAmount,
1487
+ message: (_b = quoteData.message) != null ? _b : labels.insufficientInputAmount,
1480
1488
  placement: "above-action"
1481
1489
  };
1482
1490
  }
1483
1491
  if (quoteData.status === "invalid_input") {
1484
1492
  return {
1485
1493
  tone: "error",
1486
- message: (_b = quoteData.message) != null ? _b : labels.quoteUnavailable,
1494
+ message: (_c = quoteData.message) != null ? _c : labels.quoteUnavailable,
1487
1495
  placement: "above-action"
1488
1496
  };
1489
1497
  }
1490
1498
  if (quoteData.status === "insufficient_position") {
1491
- const total = (_c = quoteData.positionAvailability) == null ? void 0 : _c.totalSellableShares;
1499
+ const total = (_d = quoteData.positionAvailability) == null ? void 0 : _d.totalSellableShares;
1492
1500
  const message = total != null ? labels.insufficientPosition(total) : labels.insufficientPositionGeneric;
1493
1501
  return { tone: "error", message, placement: "above-action" };
1494
1502
  }
1495
1503
  if (quoteData.status === "insufficient_depth") {
1504
+ const serverError = (_e = quoteData.error) == null ? void 0 : _e.trim();
1496
1505
  return {
1497
1506
  tone: "error",
1498
- message: labels.insufficientSellDepth,
1507
+ message: tradeSide === "sell" ? serverError || labels.insufficientSellDepth : serverError || labels.insufficientLiquidity,
1499
1508
  placement: "above-action"
1500
1509
  };
1501
1510
  }
@@ -1575,6 +1584,7 @@ var buildLiveRouteCards = ({
1575
1584
  executionPrice: averageExecutionPrice,
1576
1585
  requiresSharedKyc: primaryRequiresSharedKyc
1577
1586
  } : null;
1587
+ const soloCardId = (prefix, sq) => `${prefix}-${sq.venue}${sq.venueMarketOutcomeId ? `-${sq.venueMarketOutcomeId}` : ""}`;
1578
1588
  const soloCards = ((_c = quoteData.venueSoloQuotes) != null ? _c : []).filter(
1579
1589
  (sq) => sq.status === "ok" && sq.unavailableReason !== "venue_unavailable" && sq.avgPrice !== null && sq.filledQty > 0 && // No `sq.quoteId` requirement: a solo is preview-only whenever its own
1580
1590
  // funding lane is short (API nulls the quoteId), which is NOT always the
@@ -1590,7 +1600,8 @@ var buildLiveRouteCards = ({
1590
1600
  const venue = parsedVenue.success ? parsedVenue.data : void 0;
1591
1601
  if (geoBlockedVenues.has(sq.venue)) {
1592
1602
  return {
1593
- id: `live-unavailable-${sq.venue}`,
1603
+ id: soloCardId("live-unavailable", sq),
1604
+ venueMarketOutcomeId: sq.venueMarketOutcomeId,
1594
1605
  hint: labels.venueUnavailableInRegion,
1595
1606
  kind: "venue",
1596
1607
  label: getTradingVenueLabel(venue),
@@ -1627,7 +1638,8 @@ var buildLiveRouteCards = ({
1627
1638
  feeBreakdown: (_b2 = sq.feeBreakdown) != null ? _b2 : quoteData.feeBreakdown
1628
1639
  }), sq.quoteId ? { status: "ok", error: void 0 } : null);
1629
1640
  return {
1630
- id: `live-solo-${sq.venue}`,
1641
+ id: soloCardId("live-solo", sq),
1642
+ venueMarketOutcomeId: sq.venueMarketOutcomeId,
1631
1643
  hint: labels.averagePrice(avgPrice),
1632
1644
  kind: "venue",
1633
1645
  label: getTradingVenueLabel(venue),
@@ -1649,7 +1661,8 @@ var buildLiveRouteCards = ({
1649
1661
  const temporarilyUnavailable = sq.unavailableReason === "venue_unavailable";
1650
1662
  const hasPreview = temporarilyUnavailable && sq.filledQty > 0;
1651
1663
  return __spreadProps(__spreadValues({
1652
- id: `live-unavailable-${sq.venue}`,
1664
+ id: soloCardId("live-unavailable", sq),
1665
+ venueMarketOutcomeId: sq.venueMarketOutcomeId,
1653
1666
  hint: temporarilyUnavailable ? labels.venueTemporarilyUnavailable : labels.venueUnavailableInRegion,
1654
1667
  kind: "venue",
1655
1668
  label: getTradingVenueLabel(venue),
@@ -3282,7 +3295,8 @@ var PlaceOrderExecutionView = ({
3282
3295
  eventTitle,
3283
3296
  groups,
3284
3297
  labels,
3285
- progress
3298
+ progress,
3299
+ settlementHint
3286
3300
  }) => {
3287
3301
  return /* @__PURE__ */ jsx4(
3288
3302
  Card,
@@ -3326,7 +3340,8 @@ var PlaceOrderExecutionView = ({
3326
3340
  groups,
3327
3341
  labels
3328
3342
  }
3329
- )
3343
+ ),
3344
+ settlementHint ? /* @__PURE__ */ jsx4("p", { className: "text-agg-sm leading-agg-5 text-agg-muted-foreground", children: settlementHint }) : null
3330
3345
  ] })
3331
3346
  ] })
3332
3347
  }
@@ -5267,13 +5282,13 @@ var PlaceOrder = ({
5267
5282
  setSubmissionProgressState((prev) => {
5268
5283
  if (!prev || prev.phase === "success" || prev.phase === "failed") return prev;
5269
5284
  return __spreadProps(__spreadValues({}, prev), {
5270
- phase: "failed",
5271
- errorMessage: "Couldn't confirm the order in time. Your trade may still complete in the background \u2014 check your activity feed."
5285
+ phase: "executing",
5286
+ errorMessage: tradingLabels.orderStillSettling
5272
5287
  });
5273
5288
  });
5274
5289
  }, timeoutMs);
5275
5290
  return () => clearTimeout(id);
5276
- }, [submissionProgressState == null ? void 0 : submissionProgressState.phase, estDurationMs]);
5291
+ }, [submissionProgressState == null ? void 0 : submissionProgressState.phase, estDurationMs, tradingLabels.orderStillSettling]);
5277
5292
  const emitTerminalOrderNotifications = useCallback3(() => {
5278
5293
  const toast = toastCtx == null ? void 0 : toastCtx.toast;
5279
5294
  if (!toast) return;
@@ -5384,11 +5399,13 @@ var PlaceOrder = ({
5384
5399
  amount: internalAmount,
5385
5400
  labels: tradingLabels,
5386
5401
  quoteData: activeQuoteData,
5387
- selectedMarket: scopedSelectedMarket
5402
+ selectedMarket: scopedSelectedMarket,
5403
+ tradeSide: isSell ? "sell" : "buy"
5388
5404
  });
5389
5405
  }, [
5390
5406
  activeQuoteData,
5391
5407
  internalAmount,
5408
+ isSell,
5392
5409
  orderEligibility.canPlaceOrder,
5393
5410
  scopedSelectedMarket,
5394
5411
  tradingLabels
@@ -5696,6 +5713,7 @@ var PlaceOrder = ({
5696
5713
  return formatUsd(totalFees, { minimumFractionDigits: 2, maximumFractionDigits: 2 });
5697
5714
  }, [activeFeeBreakdown]);
5698
5715
  const feeBreakdownRows = useMemo(() => {
5716
+ var _a2, _b2;
5699
5717
  if (!activeFeeBreakdown) return [];
5700
5718
  return [
5701
5719
  {
@@ -5706,6 +5724,18 @@ var PlaceOrder = ({
5706
5724
  maximumFractionDigits: 2
5707
5725
  })
5708
5726
  },
5727
+ // Only Hyperliquid charges a builder slice today; every other route
5728
+ // would show a bare "$0.00" line.
5729
+ ...((_a2 = activeFeeBreakdown.builderFee) != null ? _a2 : 0) > 0 ? [
5730
+ {
5731
+ kind: "amount",
5732
+ label: tradingLabels.feeBreakdownBuilderFee,
5733
+ value: formatUsd((_b2 = activeFeeBreakdown.builderFee) != null ? _b2 : 0, {
5734
+ minimumFractionDigits: 2,
5735
+ maximumFractionDigits: 2
5736
+ })
5737
+ }
5738
+ ] : [],
5709
5739
  {
5710
5740
  kind: "amount",
5711
5741
  label: tradingLabels.feeBreakdownExecutionGas,
@@ -6211,7 +6241,8 @@ var PlaceOrder = ({
6211
6241
  eventTitle: headerTitle,
6212
6242
  groups: executionOrderGroups,
6213
6243
  labels: tradingLabels,
6214
- progress: executionProgressPercent
6244
+ progress: executionProgressPercent,
6245
+ settlementHint: submissionProgressState.phase === "executing" ? submissionProgressState.errorMessage : void 0
6215
6246
  }
6216
6247
  );
6217
6248
  }
@@ -20,7 +20,7 @@ import {
20
20
  __spreadProps,
21
21
  __spreadValues,
22
22
  cn
23
- } from "./chunk-NYL6A6AD.mjs";
23
+ } from "./chunk-W7HQVQ22.mjs";
24
24
 
25
25
  // src/geo-block-banner/index.tsx
26
26
  import { useLabels } from "@agg-build/hooks";
@@ -171,7 +171,8 @@ var ONBOARDING_STEPS = {
171
171
  var ONCHAIN_VENUES = [
172
172
  Venue.polymarket,
173
173
  Venue.opinion,
174
- Venue.predict
174
+ Venue.predict,
175
+ Venue.pred
175
176
  ].filter(isVenueActive);
176
177
 
177
178
  // src/onboarding/steps/how-it-works.tsx