@agg-market/ui 1.0.0 → 3.0.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 (129) hide show
  1. package/dist/badge.d.mts +5 -3
  2. package/dist/badge.d.ts +5 -3
  3. package/dist/badge.js +52 -12
  4. package/dist/badge.mjs +1 -1
  5. package/dist/button.d.mts +2 -2
  6. package/dist/button.d.ts +2 -2
  7. package/dist/button.js +19 -34
  8. package/dist/button.mjs +2 -2
  9. package/dist/card.d.mts +4 -2
  10. package/dist/card.d.ts +4 -2
  11. package/dist/card.js +8 -4
  12. package/dist/card.mjs +1 -1
  13. package/dist/chart.js +14 -7
  14. package/dist/chart.mjs +2 -2
  15. package/dist/{chunk-ZYREURXK.mjs → chunk-2MJY6RVY.mjs} +35 -35
  16. package/dist/{chunk-P23GR7NX.mjs → chunk-422MCIXV.mjs} +1 -1
  17. package/dist/chunk-4KMFDCAH.mjs +371 -0
  18. package/dist/{chunk-HM3CGN32.mjs → chunk-5GDNWQZS.mjs} +46 -46
  19. package/dist/{chunk-VIP7HSOU.mjs → chunk-5K7VXAYM.mjs} +4 -0
  20. package/dist/{chunk-BJNHDIDW.mjs → chunk-6425RRBI.mjs} +4 -4
  21. package/dist/{chunk-O2XH4A3G.mjs → chunk-7NISYVSJ.mjs} +22 -22
  22. package/dist/{chunk-MXBPDNMC.mjs → chunk-BEDUFOIG.mjs} +95 -22
  23. package/dist/{chunk-VC7LTPQD.mjs → chunk-BN5VVHNV.mjs} +2 -2
  24. package/dist/{chunk-JRS2M5GY.mjs → chunk-CTVMT3VL.mjs} +13 -6
  25. package/dist/{chunk-USLTNDJA.mjs → chunk-D5FTFSKL.mjs} +8 -8
  26. package/dist/{chunk-BLSHXIAH.mjs → chunk-D7JTOGYP.mjs} +6 -11
  27. package/dist/{chunk-W2DMBW4E.mjs → chunk-DL7STJQ5.mjs} +61 -33
  28. package/dist/chunk-ERGNR6UQ.mjs +67 -0
  29. package/dist/chunk-FO263M3V.mjs +10 -0
  30. package/dist/{chunk-3O4U3E5I.mjs → chunk-FO2QCB4Z.mjs} +8 -4
  31. package/dist/{chunk-OGI343OV.mjs → chunk-IGPNIM2B.mjs} +3 -2
  32. package/dist/chunk-K6IJ4WBM.mjs +67 -0
  33. package/dist/{chunk-PGSPYQOW.mjs → chunk-KAGYJ4XT.mjs} +17 -27
  34. package/dist/{chunk-RGZQHSNJ.mjs → chunk-KCPDVBIZ.mjs} +26 -17
  35. package/dist/{chunk-ZHKMDK5M.mjs → chunk-KFOATMAE.mjs} +87 -87
  36. package/dist/{chunk-H4UIBDL2.mjs → chunk-LK5D3ZTK.mjs} +15 -15
  37. package/dist/{chunk-VUDJ3PYM.mjs → chunk-O46OFVH6.mjs} +40 -16
  38. package/dist/{chunk-RXACBTON.mjs → chunk-OA2IZ3VW.mjs} +16 -22
  39. package/dist/{chunk-F236MLT6.mjs → chunk-PZTHM6WG.mjs} +13 -10
  40. package/dist/{chunk-XELWY7SO.mjs → chunk-QYZKC7KG.mjs} +137 -104
  41. package/dist/{chunk-LWTQD345.mjs → chunk-S3H63TQ5.mjs} +57 -312
  42. package/dist/{chunk-MNSHWA6M.mjs → chunk-TA7LKYKP.mjs} +9 -8
  43. package/dist/{chunk-JH5VMNDL.mjs → chunk-V52WSZHQ.mjs} +8 -7
  44. package/dist/chunk-YJA5VQW6.mjs +167 -0
  45. package/dist/{chunk-EXF4SESB.mjs → chunk-ZFMCCBP6.mjs} +1 -1
  46. package/dist/connect-button.js +51 -73
  47. package/dist/connect-button.mjs +6 -6
  48. package/dist/deposit-modal.js +171 -177
  49. package/dist/deposit-modal.mjs +7 -7
  50. package/dist/event-list-item-details.js +222 -198
  51. package/dist/event-list-item-details.mjs +11 -11
  52. package/dist/event-list-item.js +172 -114
  53. package/dist/event-list-item.mjs +8 -8
  54. package/dist/event-list.js +391 -507
  55. package/dist/event-list.mjs +11 -11
  56. package/dist/event-market-page.js +826 -764
  57. package/dist/event-market-page.mjs +19 -19
  58. package/dist/hello-world.js +28 -16
  59. package/dist/hello-world.mjs +2 -2
  60. package/dist/home-page.js +395 -511
  61. package/dist/home-page.mjs +12 -12
  62. package/dist/icon.d.mts +1 -1
  63. package/dist/icon.d.ts +1 -1
  64. package/dist/icon.js +15 -17
  65. package/dist/icon.mjs +2 -2
  66. package/dist/index.d.mts +4 -4
  67. package/dist/index.d.ts +4 -4
  68. package/dist/index.js +1135 -944
  69. package/dist/index.mjs +34 -32
  70. package/dist/loading-icon.d.mts +1 -1
  71. package/dist/loading-icon.d.ts +1 -1
  72. package/dist/loading-icon.js +5 -9
  73. package/dist/loading-icon.mjs +2 -2
  74. package/dist/market-details.d.mts +2 -2
  75. package/dist/market-details.d.ts +2 -2
  76. package/dist/market-details.js +357 -551
  77. package/dist/market-details.mjs +13 -13
  78. package/dist/modal.js +4 -0
  79. package/dist/modal.mjs +1 -1
  80. package/dist/onboarding-modal.js +63 -67
  81. package/dist/onboarding-modal.mjs +6 -6
  82. package/dist/place-order.js +231 -466
  83. package/dist/place-order.mjs +9 -9
  84. package/dist/profile-modal.js +52 -65
  85. package/dist/profile-modal.mjs +6 -6
  86. package/dist/search.d.mts +2 -2
  87. package/dist/search.d.ts +2 -2
  88. package/dist/search.js +28 -34
  89. package/dist/search.mjs +4 -4
  90. package/dist/select.js +104 -99
  91. package/dist/select.mjs +3 -3
  92. package/dist/settlement.js +279 -59
  93. package/dist/settlement.mjs +6 -6
  94. package/dist/skeleton.js +15 -10
  95. package/dist/skeleton.mjs +2 -2
  96. package/dist/styles.css +1 -1
  97. package/dist/switch-button.js +13 -6
  98. package/dist/switch-button.mjs +1 -1
  99. package/dist/tabs.d.mts +8 -4
  100. package/dist/tabs.d.ts +8 -4
  101. package/dist/tabs.js +163 -420
  102. package/dist/tabs.mjs +4 -4
  103. package/dist/tailwind.css +1 -1
  104. package/dist/types-BVj9ky9P.d.mts +3 -0
  105. package/dist/types-BVj9ky9P.d.ts +3 -0
  106. package/dist/typography.d.mts +4 -2
  107. package/dist/typography.d.ts +4 -2
  108. package/dist/typography.js +49 -18
  109. package/dist/typography.mjs +5 -3
  110. package/dist/user-profile-page.d.mts +2 -2
  111. package/dist/user-profile-page.d.ts +2 -2
  112. package/dist/user-profile-page.js +200 -474
  113. package/dist/user-profile-page.mjs +7 -7
  114. package/dist/venue-logo.d.mts +2 -2
  115. package/dist/venue-logo.d.ts +2 -2
  116. package/dist/venue-logo.js +6 -11
  117. package/dist/venue-logo.mjs +1 -1
  118. package/dist/{venue-logo.types-BSAuY84j.d.ts → venue-logo.types-D8Cu2rAm.d.ts} +1 -1
  119. package/dist/{venue-logo.types-DACqcTvY.d.mts → venue-logo.types-HRf1yBLD.d.mts} +1 -1
  120. package/dist/withdraw-modal.js +72 -85
  121. package/dist/withdraw-modal.mjs +6 -6
  122. package/package.json +2 -2
  123. package/dist/chunk-AEMAY3MR.mjs +0 -44
  124. package/dist/chunk-DYEWXEEY.mjs +0 -37
  125. package/dist/chunk-QFQHD2V6.mjs +0 -146
  126. package/dist/chunk-ZDF7QP4G.mjs +0 -160
  127. package/dist/chunk-ZVBVGWSP.mjs +0 -15
  128. package/dist/types-Bed6Q0EK.d.mts +0 -3
  129. package/dist/types-Bed6Q0EK.d.ts +0 -3
@@ -79,19 +79,23 @@ var getMotionClassName = (enabled, ...values) => {
79
79
  // src/primitives/card/index.tsx
80
80
  var import_jsx_runtime = require("react/jsx-runtime");
81
81
  var Card = (_a) => {
82
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
82
+ var _b = _a, { className, onClick } = _b, props = __objRest(_b, ["className", "onClick"]);
83
83
  const { enableAnimations } = (0, import_hooks.useSdkUiConfig)();
84
84
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
85
85
  "div",
86
- __spreadValues({
86
+ __spreadValues(__spreadValues({
87
87
  className: cn(
88
+ "group/agg-card",
88
89
  "flex w-full flex-col font-agg-sans",
89
90
  "rounded-agg-xl border border-agg-separator",
90
91
  "bg-agg-secondary text-agg-foreground shadow-agg-card",
91
- getMotionClassName(enableAnimations, "transition-shadow hover:shadow-agg-card-hover"),
92
+ getMotionClassName(
93
+ enableAnimations,
94
+ "transition-shadow hover:shadow-agg-card-hover duration-300 ease-in-out"
95
+ ),
92
96
  className
93
97
  )
94
- }, props)
98
+ }, onClick ? { onClick } : {}), props)
95
99
  );
96
100
  };
97
101
  Card.displayName = "Card";
@@ -157,14 +161,10 @@ var ArrowsToDotIcon = (_a) => {
157
161
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
158
162
  "path",
159
163
  {
160
- d: "M8 2V5M8 11V14M2 8H5M11 8H14M3.76 3.76L5.9 5.9M10.1 10.1L12.24 12.24M12.24 3.76L10.1 5.9M5.9 10.1L3.76 12.24",
161
- stroke: "currentColor",
162
- strokeWidth: "1.25",
163
- strokeLinecap: "round",
164
- strokeLinejoin: "round"
164
+ d: "M8 6.66667C8.73667 6.66667 9.33333 7.26333 9.33333 8C9.33333 8.73667 8.73667 9.33333 8 9.33333C7.26333 9.33333 6.66667 8.73667 6.66667 8C6.66667 7.26333 7.26333 6.66667 8 6.66667ZM5.27867 7.05733L3.39267 5.17133C3.132 4.91067 2.71067 4.91067 2.45 5.17133C2.18933 5.432 2.18933 5.854 2.45 6.114L3.67467 7.33333H0.666667C0.298 7.33333 0 7.632 0 8C0 8.368 0.298 8.66667 0.666667 8.66667H3.662L2.44867 9.88667C2.18867 10.148 2.19 10.5693 2.45133 10.8293C2.71267 11.0893 3.13467 11.088 3.394 10.8267L5.27933 8.93133C5.79467 8.41467 5.79467 7.574 5.27933 7.05667L5.27867 7.05733ZM7.068 5.278C7.56133 5.79267 8.45 5.79267 8.94267 5.278L10.828 3.392C11.0887 3.13133 11.0887 2.70933 10.828 2.44933C10.5673 2.18867 10.146 2.18867 9.88533 2.44933L8.66667 3.674V0.666667C8.66667 0.298667 8.36867 0 8 0C7.63133 0 7.33333 0.298667 7.33333 0.666667V3.662L6.11333 2.44867C5.852 2.18867 5.43067 2.19 5.17067 2.45133C4.91067 2.71267 4.912 3.13467 5.17333 3.394L7.068 5.278ZM8.94267 10.7213C8.42667 10.2053 7.58533 10.2053 7.06867 10.72L5.17267 12.606C4.91133 12.866 4.91 13.2873 5.17 13.5487C5.42933 13.8093 5.85067 13.8113 6.11267 13.5513L7.33267 12.3307V15.3333C7.33267 15.702 7.63067 16 7.99933 16C8.368 16 8.666 15.702 8.666 15.3333V12.3307L9.88467 13.55C10.1453 13.8107 10.5667 13.8107 10.8273 13.55C11.088 13.2893 11.088 12.868 10.8273 12.6073L8.94267 10.7213ZM15.3333 7.33333H12.3307L13.55 6.114C13.8107 5.854 13.8107 5.432 13.55 5.17133C13.2893 4.91067 12.868 4.91067 12.6073 5.17133L10.7213 7.05733C10.2053 7.574 10.2047 8.41467 10.72 8.93133L12.606 10.8273C12.866 11.088 13.2873 11.09 13.5487 10.83C13.81 10.57 13.8113 10.1487 13.5513 9.88733L12.3307 8.66733H15.3333C15.702 8.66733 16 8.36867 16 8.00067C16 7.63267 15.702 7.334 15.3333 7.334V7.33333Z",
165
+ fill: "currentColor"
165
166
  }
166
- ),
167
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("circle", { cx: "8", cy: "8", r: "1.5", fill: "currentColor" })
167
+ )
168
168
  ]
169
169
  })
170
170
  );
@@ -698,14 +698,9 @@ InfoIcon.displayName = "InfoIcon";
698
698
 
699
699
  // src/primitives/icon/icon.constants.ts
700
700
  var iconSizeClasses = {
701
- xxs: "h-2 w-2",
702
- xs: "h-3 w-3",
703
- s: "h-4 w-4",
704
- ms: "h-5 w-5",
705
- m: "h-6 w-6",
706
- l: "h-8 w-8",
707
- xl: "h-10 w-10",
708
- xxl: "h-12 w-12"
701
+ small: "h-4 w-4",
702
+ medium: "h-6 w-6",
703
+ large: "h-8 w-8"
709
704
  };
710
705
 
711
706
  // src/primitives/icon/svg/check-badge.tsx
@@ -1411,7 +1406,7 @@ var Icon = (_a) => {
1411
1406
  var _b = _a, {
1412
1407
  name,
1413
1408
  color,
1414
- size = "m",
1409
+ size = "medium",
1415
1410
  className = "text-agg-primary",
1416
1411
  style
1417
1412
  } = _b, props = __objRest(_b, [
@@ -1424,7 +1419,14 @@ var Icon = (_a) => {
1424
1419
  const Component = iconRegistry[name];
1425
1420
  const resolvedStyle = resolveIconStyle(color, style);
1426
1421
  const resolvedClassName = cn(iconSizeClasses[size], className);
1427
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Component, __spreadValues({ color, className: resolvedClassName, style: resolvedStyle }, props));
1422
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
1423
+ Component,
1424
+ __spreadValues({
1425
+ color,
1426
+ className: cn("group/agg-icon", resolvedClassName),
1427
+ style: resolvedStyle
1428
+ }, props)
1429
+ );
1428
1430
  };
1429
1431
  Icon.displayName = "Icon";
1430
1432
 
@@ -1467,7 +1469,7 @@ var EventListItemSkeletonView = ({
1467
1469
  return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
1468
1470
  Card,
1469
1471
  {
1470
- className: cn(baseCardClassName, className),
1472
+ className: cn("group/agg-skeleton", baseCardClassName, className),
1471
1473
  role: isStandalone ? "status" : void 0,
1472
1474
  "aria-label": isStandalone ? ariaLabel != null ? ariaLabel : labels.eventItem.loading : void 0,
1473
1475
  "aria-busy": isStandalone || void 0,
@@ -1516,7 +1518,7 @@ var EventListSkeletonView = ({ className, ariaLabel }) => {
1516
1518
  return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
1517
1519
  "section",
1518
1520
  {
1519
- className: cn("flex w-full flex-col gap-5", className),
1521
+ className: cn("group/agg-skeleton", "flex w-full flex-col gap-5", className),
1520
1522
  role: "status",
1521
1523
  "aria-label": ariaLabel != null ? ariaLabel : labels.eventList.loading("events"),
1522
1524
  "aria-busy": true,
@@ -1559,7 +1561,7 @@ var EventListItemDetailsSkeletonView = ({
1559
1561
  return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
1560
1562
  Card,
1561
1563
  {
1562
- className: cn(detailsBaseCardClassName, className),
1564
+ className: cn("group/agg-skeleton", detailsBaseCardClassName, className),
1563
1565
  role: "status",
1564
1566
  "aria-label": ariaLabel != null ? ariaLabel : labels.eventItemDetails.loading,
1565
1567
  "aria-busy": true,
@@ -1612,7 +1614,7 @@ var MarketDetailsSkeletonView = ({
1612
1614
  return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
1613
1615
  Card,
1614
1616
  {
1615
- className: cn(marketDetailsBaseCardClassName, className),
1617
+ className: cn("group/agg-skeleton", marketDetailsBaseCardClassName, className),
1616
1618
  role: "status",
1617
1619
  "aria-label": ariaLabel != null ? ariaLabel : labels.marketDetails.loading,
1618
1620
  "aria-busy": true,
@@ -1682,7 +1684,7 @@ MarketDetailsSkeletonView.displayName = "MarketDetailsSkeletonView";
1682
1684
  var import_jsx_runtime49 = require("react/jsx-runtime");
1683
1685
  var placeOrderCardClassName = "overflow-hidden rounded-agg-xl border border-agg-border bg-agg-secondary shadow-none hover:shadow-none";
1684
1686
  var ContentBody = () => {
1685
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex flex-col gap-6 p-5", children: [
1687
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: cn("flex flex-col gap-6 p-5"), children: [
1686
1688
  /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex flex-col gap-2", children: [
1687
1689
  /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-start justify-between gap-5", children: [
1688
1690
  /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [
@@ -1749,7 +1751,7 @@ var PlaceOrderSkeletonView = ({
1749
1751
  return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
1750
1752
  "div",
1751
1753
  {
1752
- className: cn("w-full", className),
1754
+ className: cn("group/agg-skeleton", "w-full", className),
1753
1755
  role: "status",
1754
1756
  "aria-label": ariaLabel != null ? ariaLabel : "Loading place order",
1755
1757
  "aria-busy": true,
@@ -1783,6 +1785,7 @@ var SettlementSkeletonView = ({
1783
1785
  Card,
1784
1786
  {
1785
1787
  className: cn(
1788
+ "group/agg-skeleton",
1786
1789
  "flex flex-col w-full gap-5 rounded-agg-xl border border-agg-separator bg-agg-secondary p-5 shadow-none hover:shadow-none",
1787
1790
  className
1788
1791
  ),
@@ -1869,7 +1872,7 @@ Skeleton.displayName = "Skeleton";
1869
1872
  var import_hooks8 = require("@agg-market/hooks");
1870
1873
 
1871
1874
  // src/primitives/venue-logo/logo-props.ts
1872
- var DEFAULT_MONOCHROME_COLOR = "#000000";
1875
+ var DEFAULT_MONOCHROME_COLOR = "currentColor";
1873
1876
  var resolveLogoPrimaryColor = ({
1874
1877
  brandColor,
1875
1878
  isColor = true,
@@ -2067,14 +2070,9 @@ var venueLogoRegistry = {
2067
2070
  };
2068
2071
  var venueLogoNames = Object.keys(venueLogoRegistry);
2069
2072
  var sizeClasses = {
2070
- xxs: "h-2 w-2",
2071
- xs: "h-3 w-3",
2072
- s: "h-4 w-4",
2073
- ms: "h-5 w-5",
2074
- m: "h-6 w-6",
2075
- l: "h-8 w-8",
2076
- xl: "h-10 w-10",
2077
- xxl: "h-12 w-12"
2073
+ small: "h-4 w-4",
2074
+ medium: "h-6 w-6",
2075
+ large: "h-8 w-8"
2078
2076
  };
2079
2077
 
2080
2078
  // src/primitives/venue-logo/index.tsx
@@ -2084,7 +2082,7 @@ var VenueLogo = ({
2084
2082
  isColor = true,
2085
2083
  isMonochromatic = false,
2086
2084
  color,
2087
- size = "m",
2085
+ size = "medium",
2088
2086
  className,
2089
2087
  ariaLabel,
2090
2088
  title
@@ -2096,7 +2094,7 @@ var VenueLogo = ({
2096
2094
  return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
2097
2095
  Component,
2098
2096
  {
2099
- className: cn("shrink-0", sizeClass, className),
2097
+ className: cn("group/agg-venue-logo", "shrink-0", sizeClass, className),
2100
2098
  isColor: resolvedIsColor,
2101
2099
  color,
2102
2100
  "aria-label": ariaLabel != null ? ariaLabel : labels.venues[venue],
@@ -2139,11 +2137,17 @@ var Settlement = ({
2139
2137
  }) => {
2140
2138
  var _a, _b;
2141
2139
  const labels = (0, import_hooks10.useLabels)();
2140
+ const { enableAnimations } = (0, import_hooks10.useSdkUiConfig)();
2142
2141
  const resolvedSectionLabel = sectionLabel === defaultSettlementSectionLabel ? labels.trading.settlementSection : sectionLabel;
2143
2142
  const resolvedDifferencesTitle = differencesTitle === defaultSettlementDifferencesTitle ? labels.trading.settlementDifferencesTitle : differencesTitle;
2144
2143
  const [internalExpandedVenue, setInternalExpandedVenue] = (0, import_react.useState)(
2145
2144
  (_b = defaultExpandedVenue != null ? defaultExpandedVenue : (_a = venues[0]) == null ? void 0 : _a.venue) != null ? _b : null
2146
2145
  );
2146
+ const [expandedDescriptionByVenue, setExpandedDescriptionByVenue] = (0, import_react.useState)({});
2147
+ const [overflowingDescriptionByVenue, setOverflowingDescriptionByVenue] = (0, import_react.useState)({});
2148
+ const [collapsedDescriptionByVenue, setCollapsedDescriptionByVenue] = (0, import_react.useState)({});
2149
+ const descriptionWrapperRefs = (0, import_react.useRef)(/* @__PURE__ */ new Map());
2150
+ const descriptionMeasureRefs = (0, import_react.useRef)(/* @__PURE__ */ new Map());
2147
2151
  (0, import_react.useEffect)(() => {
2148
2152
  if (expandedVenue === void 0)
2149
2153
  return;
@@ -2157,6 +2161,154 @@ var Settlement = ({
2157
2161
  }
2158
2162
  onExpandedVenueChange == null ? void 0 : onExpandedVenueChange(nextVenue);
2159
2163
  };
2164
+ const handleDescriptionWrapperRef = (0, import_react.useCallback)(
2165
+ (venue, element) => {
2166
+ if (!element) {
2167
+ descriptionWrapperRefs.current.delete(venue);
2168
+ return;
2169
+ }
2170
+ descriptionWrapperRefs.current.set(venue, element);
2171
+ },
2172
+ []
2173
+ );
2174
+ const handleDescriptionMeasureRef = (0, import_react.useCallback)(
2175
+ (venue, element) => {
2176
+ if (!element) {
2177
+ descriptionMeasureRefs.current.delete(venue);
2178
+ return;
2179
+ }
2180
+ descriptionMeasureRefs.current.set(venue, element);
2181
+ },
2182
+ []
2183
+ );
2184
+ const updateDescriptionLayout = (0, import_react.useCallback)(
2185
+ (venue, description, showMoreLabel) => {
2186
+ const descriptionWrapperElement = descriptionWrapperRefs.current.get(venue);
2187
+ const descriptionMeasureElement = descriptionMeasureRefs.current.get(venue);
2188
+ if (!descriptionWrapperElement || !descriptionMeasureElement)
2189
+ return;
2190
+ const wrapperWidth = descriptionWrapperElement.clientWidth;
2191
+ if (wrapperWidth <= 0)
2192
+ return;
2193
+ const computedStyles = window.getComputedStyle(descriptionWrapperElement);
2194
+ const parsedLineHeight = Number.parseFloat(computedStyles.lineHeight);
2195
+ const lineHeight = Number.isFinite(parsedLineHeight) ? parsedLineHeight : 20;
2196
+ const maxHeight = lineHeight * 2 + 1;
2197
+ descriptionMeasureElement.style.width = `${wrapperWidth}px`;
2198
+ const getHeight = (value) => {
2199
+ descriptionMeasureElement.textContent = value;
2200
+ return descriptionMeasureElement.scrollHeight;
2201
+ };
2202
+ const fullHeight = getHeight(description);
2203
+ if (fullHeight <= maxHeight) {
2204
+ setOverflowingDescriptionByVenue((currentState) => {
2205
+ if (currentState[venue] === false)
2206
+ return currentState;
2207
+ return __spreadProps(__spreadValues({}, currentState), {
2208
+ [venue]: false
2209
+ });
2210
+ });
2211
+ setCollapsedDescriptionByVenue((currentState) => {
2212
+ if (currentState[venue] === description)
2213
+ return currentState;
2214
+ return __spreadProps(__spreadValues({}, currentState), {
2215
+ [venue]: description
2216
+ });
2217
+ });
2218
+ return;
2219
+ }
2220
+ const suffix = `... ${showMoreLabel}`;
2221
+ let left = 0;
2222
+ let right = description.length;
2223
+ let bestLength = 0;
2224
+ while (left <= right) {
2225
+ const middle = Math.floor((left + right) / 2);
2226
+ const candidate = description.slice(0, middle).trimEnd();
2227
+ const candidateHeight = getHeight(`${candidate}${suffix}`);
2228
+ if (candidateHeight <= maxHeight) {
2229
+ bestLength = middle;
2230
+ left = middle + 1;
2231
+ continue;
2232
+ }
2233
+ right = middle - 1;
2234
+ }
2235
+ const collapsedDescription = description.slice(0, bestLength).trimEnd();
2236
+ setOverflowingDescriptionByVenue((currentState) => {
2237
+ if (currentState[venue] === true)
2238
+ return currentState;
2239
+ return __spreadProps(__spreadValues({}, currentState), {
2240
+ [venue]: true
2241
+ });
2242
+ });
2243
+ setCollapsedDescriptionByVenue((currentState) => {
2244
+ if (currentState[venue] === collapsedDescription)
2245
+ return currentState;
2246
+ return __spreadProps(__spreadValues({}, currentState), {
2247
+ [venue]: collapsedDescription
2248
+ });
2249
+ });
2250
+ },
2251
+ []
2252
+ );
2253
+ (0, import_react.useEffect)(() => {
2254
+ if (typeof window === "undefined")
2255
+ return;
2256
+ if (!resolvedExpandedVenue)
2257
+ return;
2258
+ if (expandedDescriptionByVenue[resolvedExpandedVenue])
2259
+ return;
2260
+ const expandedVenueItem = venues.find((venueItem) => venueItem.venue === resolvedExpandedVenue);
2261
+ if (!expandedVenueItem)
2262
+ return;
2263
+ const frameId = window.requestAnimationFrame(() => {
2264
+ var _a2;
2265
+ updateDescriptionLayout(
2266
+ resolvedExpandedVenue,
2267
+ expandedVenueItem.description,
2268
+ (_a2 = expandedVenueItem.showMoreLabel) != null ? _a2 : "Show more"
2269
+ );
2270
+ });
2271
+ return () => {
2272
+ window.cancelAnimationFrame(frameId);
2273
+ };
2274
+ }, [expandedDescriptionByVenue, resolvedExpandedVenue, updateDescriptionLayout, venues]);
2275
+ (0, import_react.useEffect)(() => {
2276
+ if (!resolvedExpandedVenue)
2277
+ return;
2278
+ if (expandedDescriptionByVenue[resolvedExpandedVenue])
2279
+ return;
2280
+ if (typeof ResizeObserver === "undefined")
2281
+ return;
2282
+ const expandedVenueItem = venues.find((venueItem) => venueItem.venue === resolvedExpandedVenue);
2283
+ if (!expandedVenueItem)
2284
+ return;
2285
+ const descriptionWrapperElement = descriptionWrapperRefs.current.get(resolvedExpandedVenue);
2286
+ if (!descriptionWrapperElement)
2287
+ return;
2288
+ const resizeObserver = new ResizeObserver(() => {
2289
+ var _a2;
2290
+ updateDescriptionLayout(
2291
+ resolvedExpandedVenue,
2292
+ expandedVenueItem.description,
2293
+ (_a2 = expandedVenueItem.showMoreLabel) != null ? _a2 : "Show more"
2294
+ );
2295
+ });
2296
+ resizeObserver.observe(descriptionWrapperElement);
2297
+ return () => {
2298
+ resizeObserver.disconnect();
2299
+ };
2300
+ }, [expandedDescriptionByVenue, resolvedExpandedVenue, updateDescriptionLayout, venues]);
2301
+ const handleDescriptionShowMoreClick = (event, venue) => {
2302
+ event == null ? void 0 : event.stopPropagation();
2303
+ setExpandedDescriptionByVenue((currentState) => {
2304
+ if (currentState[venue])
2305
+ return currentState;
2306
+ return __spreadProps(__spreadValues({}, currentState), {
2307
+ [venue]: true
2308
+ });
2309
+ });
2310
+ onShowMore == null ? void 0 : onShowMore(venue);
2311
+ };
2160
2312
  if (isLoading) {
2161
2313
  return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
2162
2314
  Skeleton,
@@ -2185,25 +2337,53 @@ var Settlement = ({
2185
2337
  ] }),
2186
2338
  /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "h-px w-full bg-agg-separator" }),
2187
2339
  /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "flex flex-col gap-3", children: venues.map((venue) => {
2340
+ var _a2, _b2;
2188
2341
  const venueLabel = getTradingVenueLabel(venue.venue, venue.label);
2189
2342
  const isExpanded = resolvedExpandedVenue === venue.venue;
2190
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: cn("flex flex-col", isExpanded ? "gap-2" : "gap-0"), children: [
2343
+ const isDescriptionExpanded = !!expandedDescriptionByVenue[venue.venue];
2344
+ const isDescriptionOverflowing = !!overflowingDescriptionByVenue[venue.venue];
2345
+ const shouldShowDescriptionCta = isExpanded && isDescriptionOverflowing && !isDescriptionExpanded;
2346
+ const resolvedShowMoreLabel = (_a2 = venue.showMoreLabel) != null ? _a2 : "Show more";
2347
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex flex-col", children: [
2191
2348
  /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
2192
2349
  "button",
2193
2350
  {
2194
2351
  type: "button",
2195
- className: "flex items-center gap-2 text-left",
2352
+ className: cn(
2353
+ "flex items-center gap-2 text-left",
2354
+ "cursor-pointer disabled:cursor-not-allowed hover:opacity-50",
2355
+ getMotionClassName(
2356
+ enableAnimations,
2357
+ "transition-[opacity,color] duration-200 ease-in-out"
2358
+ )
2359
+ ),
2196
2360
  "aria-expanded": isExpanded,
2197
2361
  "aria-label": labels.trading.settlementDetailsAria(venueLabel),
2198
2362
  onClick: () => handleVenueClick(venue.venue),
2199
2363
  children: [
2200
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(VenueLogo, { venue: venue.venue, size: "s", ariaLabel: venueLabel }),
2201
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-agg-sm font-agg-bold leading-agg-5 text-agg-foreground", children: venueLabel }),
2364
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
2365
+ VenueLogo,
2366
+ {
2367
+ venue: venue.venue,
2368
+ size: "small",
2369
+ ariaLabel: venueLabel
2370
+ }
2371
+ ),
2372
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
2373
+ "span",
2374
+ {
2375
+ className: cn(
2376
+ "text-agg-sm font-agg-bold leading-agg-5 text-agg-foreground",
2377
+ isExpanded ? "text-agg-primary" : "text-agg-foreground"
2378
+ ),
2379
+ children: venueLabel
2380
+ }
2381
+ ),
2202
2382
  /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
2203
2383
  Icon,
2204
2384
  {
2205
2385
  name: isExpanded ? "chevron-up" : "chevron-down",
2206
- size: "s",
2386
+ size: "small",
2207
2387
  className: "text-agg-foreground",
2208
2388
  color: "currentColor"
2209
2389
  }
@@ -2211,25 +2391,65 @@ var Settlement = ({
2211
2391
  ]
2212
2392
  }
2213
2393
  ),
2214
- isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("p", { className: "text-agg-sm leading-agg-5 text-agg-foreground", children: [
2215
- venue.description,
2216
- venue.showMoreLabel ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
2217
- " ",
2218
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
2219
- "button",
2394
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
2395
+ "div",
2396
+ {
2397
+ "aria-hidden": !isExpanded,
2398
+ className: cn(
2399
+ "grid overflow-hidden",
2400
+ isExpanded ? "mt-2 grid-rows-[1fr] opacity-100" : "mt-0 grid-rows-[0fr] opacity-0",
2401
+ !isExpanded && "pointer-events-none",
2402
+ getMotionClassName(
2403
+ enableAnimations,
2404
+ "transition-[grid-template-rows,opacity,margin-top] duration-300 ease-in-out"
2405
+ )
2406
+ ),
2407
+ children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
2408
+ "div",
2220
2409
  {
2221
- type: "button",
2222
- className: "font-agg-normal text-agg-foreground underline-offset-2 hover:underline",
2223
- "aria-label": labels.trading.settlementShowMoreAria(
2224
- venue.showMoreLabel,
2225
- venueLabel
2226
- ),
2227
- onClick: () => onShowMore == null ? void 0 : onShowMore(venue.venue),
2228
- children: venue.showMoreLabel
2410
+ ref: (element) => handleDescriptionWrapperRef(venue.venue, element),
2411
+ className: "relative min-h-0",
2412
+ children: [
2413
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("p", { className: "min-h-0 text-agg-sm leading-agg-5 text-agg-foreground", children: [
2414
+ isDescriptionExpanded || !isDescriptionOverflowing ? venue.description : (_b2 = collapsedDescriptionByVenue[venue.venue]) != null ? _b2 : venue.description,
2415
+ shouldShowDescriptionCta ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
2416
+ "... ",
2417
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
2418
+ "button",
2419
+ {
2420
+ type: "button",
2421
+ tabIndex: isExpanded ? 0 : -1,
2422
+ className: cn(
2423
+ "cursor-pointer disabled:cursor-not-allowed",
2424
+ "text-agg-sm leading-agg-5 text-agg-foreground underline-offset-2 hover:underline hover:font-agg-bold",
2425
+ getMotionClassName(
2426
+ enableAnimations,
2427
+ "transition-[text-decoration] duration-200 ease-in-out"
2428
+ )
2429
+ ),
2430
+ "aria-label": labels.trading.settlementShowMoreAria(
2431
+ resolvedShowMoreLabel,
2432
+ venueLabel
2433
+ ),
2434
+ onClick: (event) => handleDescriptionShowMoreClick(event, venue.venue),
2435
+ children: resolvedShowMoreLabel
2436
+ }
2437
+ )
2438
+ ] }) : null
2439
+ ] }),
2440
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
2441
+ "p",
2442
+ {
2443
+ ref: (element) => handleDescriptionMeasureRef(venue.venue, element),
2444
+ "aria-hidden": true,
2445
+ className: "pointer-events-none invisible fixed top-0 left-0 -z-10 whitespace-normal text-agg-sm leading-agg-5"
2446
+ }
2447
+ )
2448
+ ]
2229
2449
  }
2230
2450
  )
2231
- ] }) : null
2232
- ] }) : null
2451
+ }
2452
+ )
2233
2453
  ] }, venue.venue);
2234
2454
  }) })
2235
2455
  ]
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  Settlement
3
- } from "./chunk-QFQHD2V6.mjs";
3
+ } from "./chunk-4KMFDCAH.mjs";
4
4
  import "./chunk-OBCHURW5.mjs";
5
- import "./chunk-JH5VMNDL.mjs";
6
- import "./chunk-BLSHXIAH.mjs";
7
- import "./chunk-F236MLT6.mjs";
5
+ import "./chunk-V52WSZHQ.mjs";
6
+ import "./chunk-D7JTOGYP.mjs";
7
+ import "./chunk-PZTHM6WG.mjs";
8
8
  import "./chunk-NDG43KGL.mjs";
9
9
  import "./chunk-BNDFQPHF.mjs";
10
- import "./chunk-ZVBVGWSP.mjs";
11
- import "./chunk-3O4U3E5I.mjs";
10
+ import "./chunk-FO263M3V.mjs";
11
+ import "./chunk-FO2QCB4Z.mjs";
12
12
  import "./chunk-GJ4U5NCE.mjs";
13
13
  export {
14
14
  Settlement
package/dist/skeleton.js CHANGED
@@ -88,19 +88,23 @@ var import_hooks3 = require("@agg-market/hooks");
88
88
  var import_hooks2 = require("@agg-market/hooks");
89
89
  var import_jsx_runtime2 = require("react/jsx-runtime");
90
90
  var Card = (_a) => {
91
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
91
+ var _b = _a, { className, onClick } = _b, props = __objRest(_b, ["className", "onClick"]);
92
92
  const { enableAnimations } = (0, import_hooks2.useSdkUiConfig)();
93
93
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
94
94
  "div",
95
- __spreadValues({
95
+ __spreadValues(__spreadValues({
96
96
  className: cn(
97
+ "group/agg-card",
97
98
  "flex w-full flex-col font-agg-sans",
98
99
  "rounded-agg-xl border border-agg-separator",
99
100
  "bg-agg-secondary text-agg-foreground shadow-agg-card",
100
- getMotionClassName(enableAnimations, "transition-shadow hover:shadow-agg-card-hover"),
101
+ getMotionClassName(
102
+ enableAnimations,
103
+ "transition-shadow hover:shadow-agg-card-hover duration-300 ease-in-out"
104
+ ),
101
105
  className
102
106
  )
103
- }, props)
107
+ }, onClick ? { onClick } : {}), props)
104
108
  );
105
109
  };
106
110
  Card.displayName = "Card";
@@ -119,7 +123,7 @@ var EventListItemSkeletonView = ({
119
123
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
120
124
  Card,
121
125
  {
122
- className: cn(baseCardClassName, className),
126
+ className: cn("group/agg-skeleton", baseCardClassName, className),
123
127
  role: isStandalone ? "status" : void 0,
124
128
  "aria-label": isStandalone ? ariaLabel != null ? ariaLabel : labels.eventItem.loading : void 0,
125
129
  "aria-busy": isStandalone || void 0,
@@ -168,7 +172,7 @@ var EventListSkeletonView = ({ className, ariaLabel }) => {
168
172
  return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
169
173
  "section",
170
174
  {
171
- className: cn("flex w-full flex-col gap-5", className),
175
+ className: cn("group/agg-skeleton", "flex w-full flex-col gap-5", className),
172
176
  role: "status",
173
177
  "aria-label": ariaLabel != null ? ariaLabel : labels.eventList.loading("events"),
174
178
  "aria-busy": true,
@@ -211,7 +215,7 @@ var EventListItemDetailsSkeletonView = ({
211
215
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
212
216
  Card,
213
217
  {
214
- className: cn(detailsBaseCardClassName, className),
218
+ className: cn("group/agg-skeleton", detailsBaseCardClassName, className),
215
219
  role: "status",
216
220
  "aria-label": ariaLabel != null ? ariaLabel : labels.eventItemDetails.loading,
217
221
  "aria-busy": true,
@@ -264,7 +268,7 @@ var MarketDetailsSkeletonView = ({
264
268
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
265
269
  Card,
266
270
  {
267
- className: cn(marketDetailsBaseCardClassName, className),
271
+ className: cn("group/agg-skeleton", marketDetailsBaseCardClassName, className),
268
272
  role: "status",
269
273
  "aria-label": ariaLabel != null ? ariaLabel : labels.marketDetails.loading,
270
274
  "aria-busy": true,
@@ -334,7 +338,7 @@ MarketDetailsSkeletonView.displayName = "MarketDetailsSkeletonView";
334
338
  var import_jsx_runtime7 = require("react/jsx-runtime");
335
339
  var placeOrderCardClassName = "overflow-hidden rounded-agg-xl border border-agg-border bg-agg-secondary shadow-none hover:shadow-none";
336
340
  var ContentBody = () => {
337
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex flex-col gap-6 p-5", children: [
341
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: cn("flex flex-col gap-6 p-5"), children: [
338
342
  /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex flex-col gap-2", children: [
339
343
  /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex items-start justify-between gap-5", children: [
340
344
  /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [
@@ -401,7 +405,7 @@ var PlaceOrderSkeletonView = ({
401
405
  return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
402
406
  "div",
403
407
  {
404
- className: cn("w-full", className),
408
+ className: cn("group/agg-skeleton", "w-full", className),
405
409
  role: "status",
406
410
  "aria-label": ariaLabel != null ? ariaLabel : "Loading place order",
407
411
  "aria-busy": true,
@@ -435,6 +439,7 @@ var SettlementSkeletonView = ({
435
439
  Card,
436
440
  {
437
441
  className: cn(
442
+ "group/agg-skeleton",
438
443
  "flex flex-col w-full gap-5 rounded-agg-xl border border-agg-separator bg-agg-secondary p-5 shadow-none hover:shadow-none",
439
444
  className
440
445
  ),
package/dist/skeleton.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  Skeleton,
3
3
  skeletonViews
4
- } from "./chunk-JH5VMNDL.mjs";
5
- import "./chunk-3O4U3E5I.mjs";
4
+ } from "./chunk-V52WSZHQ.mjs";
5
+ import "./chunk-FO2QCB4Z.mjs";
6
6
  import "./chunk-GJ4U5NCE.mjs";
7
7
  export {
8
8
  Skeleton,