@agg-market/ui 0.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 (192) hide show
  1. package/dist/badge.d.mts +26 -0
  2. package/dist/badge.d.ts +26 -0
  3. package/dist/badge.js +70 -0
  4. package/dist/badge.mjs +9 -0
  5. package/dist/button.d.mts +20 -0
  6. package/dist/button.d.ts +20 -0
  7. package/dist/button.js +197 -0
  8. package/dist/button.mjs +8 -0
  9. package/dist/card.d.mts +8 -0
  10. package/dist/card.d.ts +8 -0
  11. package/dist/card.js +84 -0
  12. package/dist/card.mjs +7 -0
  13. package/dist/chart.d.mts +40 -0
  14. package/dist/chart.d.ts +40 -0
  15. package/dist/chart.js +418 -0
  16. package/dist/chart.mjs +8 -0
  17. package/dist/chunk-2PGUPOXY.mjs +285 -0
  18. package/dist/chunk-3DV3D2LH.mjs +155 -0
  19. package/dist/chunk-44UEI6KD.mjs +280 -0
  20. package/dist/chunk-4ADCXJE6.mjs +297 -0
  21. package/dist/chunk-4GSXVVSA.mjs +64 -0
  22. package/dist/chunk-4NK2FNAG.mjs +581 -0
  23. package/dist/chunk-4XWCYUV3.mjs +355 -0
  24. package/dist/chunk-5MN6ZNFA.mjs +355 -0
  25. package/dist/chunk-6RRBINER.mjs +50 -0
  26. package/dist/chunk-765JPQDG.mjs +280 -0
  27. package/dist/chunk-7CD7GIZC.mjs +850 -0
  28. package/dist/chunk-7XRKA6XF.mjs +462 -0
  29. package/dist/chunk-AOFP74IB.mjs +850 -0
  30. package/dist/chunk-BNDFQPHF.mjs +9 -0
  31. package/dist/chunk-C4OI72SM.mjs +14 -0
  32. package/dist/chunk-CB2MLGCJ.mjs +279 -0
  33. package/dist/chunk-CKTAVEW2.mjs +212 -0
  34. package/dist/chunk-DA6KZWSK.mjs +807 -0
  35. package/dist/chunk-DBD5GHHD.mjs +147 -0
  36. package/dist/chunk-DQ6XFBYJ.mjs +37 -0
  37. package/dist/chunk-FACIYUNK.mjs +217 -0
  38. package/dist/chunk-FUJQIYOF.mjs +37 -0
  39. package/dist/chunk-FZTAHWOS.mjs +82 -0
  40. package/dist/chunk-GC3QIIH7.mjs +112 -0
  41. package/dist/chunk-GPBLZGJ2.mjs +136 -0
  42. package/dist/chunk-H4LELROL.mjs +262 -0
  43. package/dist/chunk-H7P6DIX4.mjs +262 -0
  44. package/dist/chunk-H7YEBGYY.mjs +42 -0
  45. package/dist/chunk-HJOBAMDU.mjs +142 -0
  46. package/dist/chunk-IJG5I642.mjs +462 -0
  47. package/dist/chunk-IY2AA3OL.mjs +50 -0
  48. package/dist/chunk-J6L5BLKX.mjs +136 -0
  49. package/dist/chunk-J7OETCZ7.mjs +147 -0
  50. package/dist/chunk-JLLMIPIX.mjs +42 -0
  51. package/dist/chunk-KBRLFTJT.mjs +741 -0
  52. package/dist/chunk-KDBYDMYV.mjs +64 -0
  53. package/dist/chunk-L6E6Q4C4.mjs +217 -0
  54. package/dist/chunk-LY6474C4.mjs +297 -0
  55. package/dist/chunk-M23S2DVV.mjs +581 -0
  56. package/dist/chunk-MG243DSX.mjs +44 -0
  57. package/dist/chunk-MRHSN2B7.mjs +279 -0
  58. package/dist/chunk-MXWRCVRJ.mjs +285 -0
  59. package/dist/chunk-NFYS557L.mjs +481 -0
  60. package/dist/chunk-NNSY462N.mjs +212 -0
  61. package/dist/chunk-OUOIDPGX.mjs +25 -0
  62. package/dist/chunk-P5PFQX75.mjs +31 -0
  63. package/dist/chunk-P674XRDY.mjs +481 -0
  64. package/dist/chunk-PAQ542ER.mjs +170 -0
  65. package/dist/chunk-QE46DVJG.mjs +323 -0
  66. package/dist/chunk-QXFDXXDB.mjs +792 -0
  67. package/dist/chunk-R3DRVI4J.mjs +741 -0
  68. package/dist/chunk-TTOR7JCT.mjs +155 -0
  69. package/dist/chunk-V5WIYMKS.mjs +25 -0
  70. package/dist/chunk-VAZE267Q.mjs +82 -0
  71. package/dist/chunk-VLIJ7PQK.mjs +792 -0
  72. package/dist/chunk-VYNVBJK6.mjs +44 -0
  73. package/dist/chunk-WIWJ6DIE.mjs +323 -0
  74. package/dist/chunk-XDAEEJYR.mjs +142 -0
  75. package/dist/chunk-YUIZZ6XE.mjs +31 -0
  76. package/dist/connect-button.d.mts +40 -0
  77. package/dist/connect-button.d.ts +40 -0
  78. package/dist/connect-button.js +1815 -0
  79. package/dist/connect-button.mjs +14 -0
  80. package/dist/event-list-item-details.d.mts +11 -0
  81. package/dist/event-list-item-details.d.ts +11 -0
  82. package/dist/event-list-item-details.js +2140 -0
  83. package/dist/event-list-item-details.mjs +19 -0
  84. package/dist/event-list-item-details.types-CMbXOrT-.d.ts +53 -0
  85. package/dist/event-list-item-details.types-CxWr4Qn1.d.ts +53 -0
  86. package/dist/event-list-item-details.types-DRi99PZq.d.mts +53 -0
  87. package/dist/event-list-item-details.types-DekJKeMD.d.mts +53 -0
  88. package/dist/event-list-item.d.mts +10 -0
  89. package/dist/event-list-item.d.ts +10 -0
  90. package/dist/event-list-item.js +2097 -0
  91. package/dist/event-list-item.mjs +17 -0
  92. package/dist/event-list-item.types-B1490EQm.d.mts +46 -0
  93. package/dist/event-list-item.types-B1490EQm.d.ts +46 -0
  94. package/dist/event-list-item.types-Y6IeJ4e4.d.mts +46 -0
  95. package/dist/event-list-item.types-Y6IeJ4e4.d.ts +46 -0
  96. package/dist/event-list.d.mts +9 -0
  97. package/dist/event-list.d.ts +9 -0
  98. package/dist/event-list.js +3151 -0
  99. package/dist/event-list.mjs +20 -0
  100. package/dist/event-list.types-Bpp6Vn-t.d.mts +13 -0
  101. package/dist/event-list.types-Bpp6Vn-t.d.ts +13 -0
  102. package/dist/event-list.types-CkAAUqwW.d.mts +13 -0
  103. package/dist/event-list.types-CkAAUqwW.d.ts +13 -0
  104. package/dist/event-market-page.d.mts +52 -0
  105. package/dist/event-market-page.d.ts +52 -0
  106. package/dist/event-market-page.js +5369 -0
  107. package/dist/event-market-page.mjs +29 -0
  108. package/dist/hello-world.d.mts +8 -0
  109. package/dist/hello-world.d.ts +8 -0
  110. package/dist/hello-world.js +80 -0
  111. package/dist/hello-world.mjs +8 -0
  112. package/dist/home-page.d.mts +51 -0
  113. package/dist/home-page.d.ts +51 -0
  114. package/dist/home-page.js +3415 -0
  115. package/dist/home-page.mjs +21 -0
  116. package/dist/icon.d.mts +123 -0
  117. package/dist/icon.d.ts +123 -0
  118. package/dist/icon.js +922 -0
  119. package/dist/icon.mjs +57 -0
  120. package/dist/index.d.mts +70 -0
  121. package/dist/index.d.ts +70 -0
  122. package/dist/index.js +8184 -0
  123. package/dist/index.mjs +307 -0
  124. package/dist/loading-icon.d.mts +14 -0
  125. package/dist/loading-icon.d.ts +14 -0
  126. package/dist/loading-icon.js +115 -0
  127. package/dist/loading-icon.mjs +8 -0
  128. package/dist/market-details.d.mts +73 -0
  129. package/dist/market-details.d.ts +73 -0
  130. package/dist/market-details.js +3923 -0
  131. package/dist/market-details.mjs +22 -0
  132. package/dist/modal.d.mts +66 -0
  133. package/dist/modal.d.ts +66 -0
  134. package/dist/modal.js +317 -0
  135. package/dist/modal.mjs +9 -0
  136. package/dist/number-value.d.mts +14 -0
  137. package/dist/number-value.d.ts +14 -0
  138. package/dist/number-value.js +67 -0
  139. package/dist/number-value.mjs +7 -0
  140. package/dist/onboarding-modal.d.mts +88 -0
  141. package/dist/onboarding-modal.d.ts +88 -0
  142. package/dist/onboarding-modal.js +2242 -0
  143. package/dist/onboarding-modal.mjs +24 -0
  144. package/dist/place-order.d.mts +20 -0
  145. package/dist/place-order.d.ts +20 -0
  146. package/dist/place-order.js +2916 -0
  147. package/dist/place-order.mjs +18 -0
  148. package/dist/registry-CVn79H3I.d.mts +106 -0
  149. package/dist/registry-CVn79H3I.d.ts +106 -0
  150. package/dist/search.d.mts +69 -0
  151. package/dist/search.d.ts +69 -0
  152. package/dist/search.js +1465 -0
  153. package/dist/search.mjs +12 -0
  154. package/dist/select.d.mts +19 -0
  155. package/dist/select.d.ts +19 -0
  156. package/dist/select.js +920 -0
  157. package/dist/select.mjs +11 -0
  158. package/dist/settlement.d.mts +16 -0
  159. package/dist/settlement.d.ts +16 -0
  160. package/dist/settlement.js +1769 -0
  161. package/dist/settlement.mjs +15 -0
  162. package/dist/skeleton.d.mts +22 -0
  163. package/dist/skeleton.d.ts +22 -0
  164. package/dist/skeleton.js +523 -0
  165. package/dist/skeleton.mjs +10 -0
  166. package/dist/styles.css +2 -0
  167. package/dist/switch-button.d.mts +21 -0
  168. package/dist/switch-button.d.ts +21 -0
  169. package/dist/switch-button.js +184 -0
  170. package/dist/switch-button.mjs +7 -0
  171. package/dist/tabs.d.mts +27 -0
  172. package/dist/tabs.d.ts +27 -0
  173. package/dist/tabs.js +1708 -0
  174. package/dist/tabs.mjs +12 -0
  175. package/dist/tailwind.css +2 -0
  176. package/dist/types-8VUuQVZq.d.mts +387 -0
  177. package/dist/types-8VUuQVZq.d.ts +387 -0
  178. package/dist/types-CayJ8tWA.d.mts +3 -0
  179. package/dist/types-CayJ8tWA.d.ts +3 -0
  180. package/dist/typography.d.mts +16 -0
  181. package/dist/typography.d.ts +16 -0
  182. package/dist/typography.js +62 -0
  183. package/dist/typography.mjs +7 -0
  184. package/dist/venue-logo.d.mts +12 -0
  185. package/dist/venue-logo.d.ts +12 -0
  186. package/dist/venue-logo.js +350 -0
  187. package/dist/venue-logo.mjs +10 -0
  188. package/dist/venue-logo.types-4hmCg3D3.d.ts +17 -0
  189. package/dist/venue-logo.types-B1iPJgiD.d.mts +17 -0
  190. package/dist/venue-logo.types-Bg8eXtGp.d.ts +17 -0
  191. package/dist/venue-logo.types-QNDwiQ77.d.mts +17 -0
  192. package/package.json +195 -0
@@ -0,0 +1,147 @@
1
+ import {
2
+ defaultSettlementDifferencesTitle,
3
+ defaultSettlementSectionLabel,
4
+ getTradingVenueLabel
5
+ } from "./chunk-4GSXVVSA.mjs";
6
+ import {
7
+ Skeleton,
8
+ skeletonViews
9
+ } from "./chunk-P674XRDY.mjs";
10
+ import {
11
+ VenueLogo
12
+ } from "./chunk-4ADCXJE6.mjs";
13
+ import {
14
+ Icon
15
+ } from "./chunk-DA6KZWSK.mjs";
16
+ import {
17
+ Card
18
+ } from "./chunk-P5PFQX75.mjs";
19
+ import {
20
+ cn
21
+ } from "./chunk-GC3QIIH7.mjs";
22
+
23
+ // src/trading/settlement/index.tsx
24
+ import { useEffect, useState } from "react";
25
+ import { useLabels } from "@agg/hooks";
26
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
27
+ var getSettlementHeaderClassName = () => {
28
+ return "flex items-center justify-between gap-4";
29
+ };
30
+ var Settlement = ({
31
+ sectionLabel = defaultSettlementSectionLabel,
32
+ question,
33
+ differencesTitle = defaultSettlementDifferencesTitle,
34
+ differences,
35
+ venues,
36
+ defaultExpandedVenue,
37
+ expandedVenue,
38
+ isLoading = false,
39
+ onExpandedVenueChange,
40
+ onShowMore,
41
+ className
42
+ }) => {
43
+ var _a, _b;
44
+ const labels = useLabels();
45
+ const resolvedSectionLabel = sectionLabel === defaultSettlementSectionLabel ? labels.trading.settlementSection : sectionLabel;
46
+ const resolvedDifferencesTitle = differencesTitle === defaultSettlementDifferencesTitle ? labels.trading.settlementDifferencesTitle : differencesTitle;
47
+ if (isLoading) {
48
+ return /* @__PURE__ */ jsx(
49
+ Skeleton,
50
+ {
51
+ ariaLabel: labels.trading.settlementLoading,
52
+ className,
53
+ view: skeletonViews.settlement
54
+ }
55
+ );
56
+ }
57
+ const [internalExpandedVenue, setInternalExpandedVenue] = (
58
+ // eslint-disable-next-line react-hooks/rules-of-hooks
59
+ useState((_b = defaultExpandedVenue != null ? defaultExpandedVenue : (_a = venues[0]) == null ? void 0 : _a.venue) != null ? _b : null)
60
+ );
61
+ useEffect(() => {
62
+ if (expandedVenue === void 0)
63
+ return;
64
+ setInternalExpandedVenue(expandedVenue);
65
+ }, [expandedVenue]);
66
+ const resolvedExpandedVenue = expandedVenue === void 0 ? internalExpandedVenue : expandedVenue;
67
+ const handleVenueClick = (venue) => {
68
+ const nextVenue = resolvedExpandedVenue === venue ? null : venue;
69
+ if (expandedVenue === void 0) {
70
+ setInternalExpandedVenue(nextVenue);
71
+ }
72
+ onExpandedVenueChange == null ? void 0 : onExpandedVenueChange(nextVenue);
73
+ };
74
+ return /* @__PURE__ */ jsxs(
75
+ Card,
76
+ {
77
+ className: cn(
78
+ "gap-5 rounded-agg-xl border border-agg-separator bg-agg-secondary p-5 shadow-none hover:shadow-none",
79
+ className
80
+ ),
81
+ children: [
82
+ /* @__PURE__ */ jsxs("div", { className: getSettlementHeaderClassName(), children: [
83
+ /* @__PURE__ */ jsx("p", { className: "text-agg-xs font-agg-bold leading-agg-4 uppercase text-agg-muted-foreground", children: resolvedSectionLabel }),
84
+ /* @__PURE__ */ jsx("p", { className: "text-agg-sm font-agg-bold leading-agg-5 text-agg-foreground", children: question })
85
+ ] }),
86
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
87
+ /* @__PURE__ */ jsx("p", { className: "text-agg-sm font-agg-bold leading-agg-5 text-agg-foreground", children: resolvedDifferencesTitle }),
88
+ /* @__PURE__ */ jsx("ul", { className: "list-disc pl-5 text-agg-sm leading-agg-5 text-agg-foreground", children: differences.map((difference) => /* @__PURE__ */ jsx("li", { children: difference }, difference)) })
89
+ ] }),
90
+ /* @__PURE__ */ jsx("div", { className: "h-px w-full bg-agg-separator" }),
91
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-3", children: venues.map((venue) => {
92
+ const venueLabel = getTradingVenueLabel(venue.venue, venue.label);
93
+ const isExpanded = resolvedExpandedVenue === venue.venue;
94
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col", isExpanded ? "gap-2" : "gap-0"), children: [
95
+ /* @__PURE__ */ jsxs(
96
+ "button",
97
+ {
98
+ type: "button",
99
+ className: "flex items-center gap-2 text-left",
100
+ "aria-expanded": isExpanded,
101
+ "aria-label": labels.trading.settlementDetailsAria(venueLabel),
102
+ onClick: () => handleVenueClick(venue.venue),
103
+ children: [
104
+ /* @__PURE__ */ jsx(VenueLogo, { venue: venue.venue, size: "s", ariaLabel: venueLabel }),
105
+ /* @__PURE__ */ jsx("span", { className: "text-agg-sm font-agg-bold leading-agg-5 text-agg-foreground", children: venueLabel }),
106
+ /* @__PURE__ */ jsx(
107
+ Icon,
108
+ {
109
+ name: isExpanded ? "chevron-up" : "chevron-down",
110
+ size: "s",
111
+ className: "text-agg-foreground",
112
+ color: "currentColor"
113
+ }
114
+ )
115
+ ]
116
+ }
117
+ ),
118
+ isExpanded ? /* @__PURE__ */ jsxs("p", { className: "text-agg-sm leading-agg-5 text-agg-foreground", children: [
119
+ venue.description,
120
+ venue.showMoreLabel ? /* @__PURE__ */ jsxs(Fragment, { children: [
121
+ " ",
122
+ /* @__PURE__ */ jsx(
123
+ "button",
124
+ {
125
+ type: "button",
126
+ className: "font-agg-normal text-agg-foreground underline-offset-2 hover:underline",
127
+ "aria-label": labels.trading.settlementShowMoreAria(
128
+ venue.showMoreLabel,
129
+ venueLabel
130
+ ),
131
+ onClick: () => onShowMore == null ? void 0 : onShowMore(venue.venue),
132
+ children: venue.showMoreLabel
133
+ }
134
+ )
135
+ ] }) : null
136
+ ] }) : null
137
+ ] }, venue.venue);
138
+ }) })
139
+ ]
140
+ }
141
+ );
142
+ };
143
+ Settlement.displayName = "Settlement";
144
+
145
+ export {
146
+ Settlement
147
+ };
@@ -0,0 +1,37 @@
1
+ import {
2
+ cn
3
+ } from "./chunk-GC3QIIH7.mjs";
4
+
5
+ // src/primitives/typography/typography.constants.ts
6
+ var variantClasses = {
7
+ title: cn("font-agg-sans text-agg-lg leading-agg-7", "font-agg-bold", "text-agg-foreground"),
8
+ body: cn("font-agg-sans text-agg-base leading-agg-6", "font-agg-normal", "text-agg-foreground"),
9
+ meta: cn(
10
+ "font-agg-sans text-agg-sm leading-agg-5",
11
+ "font-agg-normal",
12
+ "text-agg-muted-foreground"
13
+ ),
14
+ label: cn(
15
+ "font-agg-sans text-agg-sm leading-agg-5",
16
+ "font-agg-bold uppercase",
17
+ "text-agg-foreground"
18
+ ),
19
+ value: cn("font-agg-sans text-agg-xl leading-agg-7", "font-agg-normal", "text-agg-foreground"),
20
+ caption: cn("font-agg-sans text-agg-xs leading-agg-4", "font-agg-normal", "text-agg-foreground")
21
+ };
22
+
23
+ // src/primitives/typography/index.tsx
24
+ import { jsx } from "react/jsx-runtime";
25
+ var Typography = ({
26
+ as: Component = "p",
27
+ variant = "body",
28
+ className,
29
+ children
30
+ }) => {
31
+ return /* @__PURE__ */ jsx(Component, { className: cn(variantClasses[variant], "truncate", className), children });
32
+ };
33
+ Typography.displayName = "Typography";
34
+
35
+ export {
36
+ Typography
37
+ };
@@ -0,0 +1,217 @@
1
+ import {
2
+ SwitchButton
3
+ } from "./chunk-TTOR7JCT.mjs";
4
+ import {
5
+ __spreadProps,
6
+ __spreadValues,
7
+ cn
8
+ } from "./chunk-GC3QIIH7.mjs";
9
+
10
+ // src/primitives/chart/index.tsx
11
+ import dayjs from "dayjs";
12
+ import { useLabels, useSdkUiConfig } from "@agg-market/hooks";
13
+ import { useEffect, useMemo, useState } from "react";
14
+ import { Liveline } from "liveline";
15
+ import { jsx, jsxs } from "react/jsx-runtime";
16
+ var normalizeSeries = (series) => {
17
+ return series.map((seriesItem) => {
18
+ const pointsByTime = /* @__PURE__ */ new Map();
19
+ seriesItem.points.forEach((point) => {
20
+ if (!Number.isFinite(point.time) || !Number.isFinite(point.value)) {
21
+ return;
22
+ }
23
+ pointsByTime.set(Math.floor(point.time), point.value);
24
+ });
25
+ const sortedPoints = [...pointsByTime.entries()].sort((left, right) => left[0] - right[0]).map(([time, value]) => ({
26
+ time,
27
+ value
28
+ }));
29
+ return __spreadProps(__spreadValues({}, seriesItem), {
30
+ points: sortedPoints
31
+ });
32
+ }).filter((seriesItem) => seriesItem.points.length > 0);
33
+ };
34
+ var defaultValueFormatter = (value) => {
35
+ return `${Math.round(value)}%`;
36
+ };
37
+ var defaultTimeFormatter = (timestamp) => {
38
+ return dayjs.unix(timestamp).format("MMM D");
39
+ };
40
+ var toLivelinePoints = (points) => {
41
+ return points.map((point) => ({
42
+ time: point.time,
43
+ value: point.value
44
+ }));
45
+ };
46
+ var resolveWindowSeconds = (normalizedSeries) => {
47
+ const timestamps = normalizedSeries.flatMap(
48
+ (seriesItem) => seriesItem.points.map((point) => point.time)
49
+ );
50
+ if (timestamps.length <= 1)
51
+ return 30;
52
+ const minTimestamp = Math.min(...timestamps);
53
+ const maxTimestamp = Math.max(...timestamps);
54
+ const span = maxTimestamp - minTimestamp;
55
+ if (!Number.isFinite(span) || span <= 0)
56
+ return 30;
57
+ return Math.max(1, Math.floor(span));
58
+ };
59
+ var resolveLatestValue = (points) => {
60
+ const latestPoint = points[points.length - 1];
61
+ if (!latestPoint)
62
+ return 0;
63
+ return latestPoint.value;
64
+ };
65
+ var resolveActiveSeriesId = (series, activeSeriesId) => {
66
+ var _a, _b;
67
+ if (activeSeriesId) {
68
+ const matchingSeries = series.find((seriesItem) => seriesItem.id === activeSeriesId);
69
+ if (matchingSeries) {
70
+ return matchingSeries.id;
71
+ }
72
+ }
73
+ return (_b = (_a = series[0]) == null ? void 0 : _a.id) != null ? _b : "";
74
+ };
75
+ var formatDefaultSeriesLabel = (seriesItem) => {
76
+ return seriesItem.id.charAt(0).toUpperCase() + seriesItem.id.slice(1);
77
+ };
78
+ var renderDefaultSeriesControls = ({
79
+ series,
80
+ activeSeriesId,
81
+ handleSeriesChange,
82
+ defaultSeriesSwitchClassName,
83
+ seriesSwitchAriaLabel,
84
+ formatSeriesOptionAriaLabel
85
+ }) => {
86
+ return /* @__PURE__ */ jsx(
87
+ SwitchButton,
88
+ {
89
+ ariaLabel: seriesSwitchAriaLabel,
90
+ className: defaultSeriesSwitchClassName,
91
+ options: series.map((seriesItem) => ({
92
+ value: seriesItem.id,
93
+ label: formatDefaultSeriesLabel(seriesItem),
94
+ ariaLabel: formatSeriesOptionAriaLabel(formatDefaultSeriesLabel(seriesItem))
95
+ })),
96
+ value: activeSeriesId,
97
+ onValueChange: handleSeriesChange
98
+ }
99
+ );
100
+ };
101
+ var resolveSelectedSeries = (series, activeSeriesId) => {
102
+ const availableSeriesIds = new Set(series.map((seriesItem) => seriesItem.id));
103
+ if (!availableSeriesIds.has(activeSeriesId)) {
104
+ return series[0];
105
+ }
106
+ return series.find((seriesItem) => seriesItem.id === activeSeriesId);
107
+ };
108
+ var LineChart = ({
109
+ series,
110
+ height = 280,
111
+ width,
112
+ classNames,
113
+ isLoading = false,
114
+ showSeriesControls = true,
115
+ renderSeriesControls
116
+ }) => {
117
+ var _a, _b;
118
+ const labels = useLabels();
119
+ const { theme } = useSdkUiConfig();
120
+ const normalizedSeries = useMemo(() => {
121
+ return normalizeSeries(series);
122
+ }, [series]);
123
+ const [activeSeriesId, setActiveSeriesId] = useState(
124
+ () => resolveActiveSeriesId(normalizedSeries, null)
125
+ );
126
+ useEffect(() => {
127
+ setActiveSeriesId(
128
+ (currentActiveSeriesId) => resolveActiveSeriesId(normalizedSeries, currentActiveSeriesId)
129
+ );
130
+ }, [normalizedSeries]);
131
+ const livelineTheme = theme;
132
+ const handleSeriesChange = (seriesId) => {
133
+ setActiveSeriesId(seriesId);
134
+ };
135
+ const primarySeries = useMemo(() => {
136
+ return resolveSelectedSeries(normalizedSeries, activeSeriesId);
137
+ }, [activeSeriesId, normalizedSeries]);
138
+ const primaryData = useMemo(() => {
139
+ if (!primarySeries) {
140
+ return [];
141
+ }
142
+ return toLivelinePoints(primarySeries.points);
143
+ }, [primarySeries]);
144
+ const primaryValue = useMemo(() => {
145
+ if (!primarySeries) {
146
+ return 0;
147
+ }
148
+ return resolveLatestValue(primarySeries.points);
149
+ }, [primarySeries]);
150
+ const livelineSeries = useMemo(() => {
151
+ return normalizedSeries.map((seriesItem) => ({
152
+ id: seriesItem.id,
153
+ color: seriesItem.color,
154
+ data: toLivelinePoints(seriesItem.points),
155
+ value: resolveLatestValue(seriesItem.points)
156
+ }));
157
+ }, [normalizedSeries]);
158
+ const windowSeconds = useMemo(() => {
159
+ return resolveWindowSeconds(normalizedSeries);
160
+ }, [normalizedSeries]);
161
+ const seriesControls = showSeriesControls && normalizedSeries.length > 0 ? (_a = renderSeriesControls == null ? void 0 : renderSeriesControls({
162
+ series: normalizedSeries,
163
+ activeSeriesId,
164
+ handleSeriesChange
165
+ })) != null ? _a : normalizedSeries.length > 1 ? renderDefaultSeriesControls({
166
+ series: normalizedSeries,
167
+ activeSeriesId,
168
+ handleSeriesChange,
169
+ defaultSeriesSwitchClassName: classNames == null ? void 0 : classNames.defaultSeriesSwitch,
170
+ seriesSwitchAriaLabel: labels.common.lineChartSeriesSwitchAria,
171
+ formatSeriesOptionAriaLabel: labels.common.lineChartSeriesOptionAria
172
+ }) : null : null;
173
+ return /* @__PURE__ */ jsxs("div", { className: cn("w-full", classNames == null ? void 0 : classNames.root), style: { width }, children: [
174
+ !isLoading && seriesControls ? /* @__PURE__ */ jsx("div", { className: cn("mb-3", classNames == null ? void 0 : classNames.controls), children: seriesControls }) : null,
175
+ /* @__PURE__ */ jsx(
176
+ "div",
177
+ {
178
+ className: cn(
179
+ "overflow-hidden [&>div:not(.agg-livechart):first-of-type]:hidden!",
180
+ classNames == null ? void 0 : classNames.chartViewport
181
+ ),
182
+ style: { height },
183
+ role: "img",
184
+ "aria-label": labels.common.lineChartAria,
185
+ children: /* @__PURE__ */ jsx(
186
+ Liveline,
187
+ {
188
+ className: cn("h-full w-full agg-livechart", classNames == null ? void 0 : classNames.liveline),
189
+ data: primaryData,
190
+ value: primaryValue,
191
+ series: livelineSeries,
192
+ color: (_b = primarySeries == null ? void 0 : primarySeries.color) != null ? _b : "var(--agg-color-primary)",
193
+ theme: livelineTheme,
194
+ grid: true,
195
+ momentum: false,
196
+ pulse: false,
197
+ window: windowSeconds,
198
+ formatValue: defaultValueFormatter,
199
+ formatTime: defaultTimeFormatter,
200
+ padding: {
201
+ top: 12,
202
+ right: 80,
203
+ bottom: 28,
204
+ left: 12
205
+ },
206
+ loading: isLoading
207
+ }
208
+ )
209
+ }
210
+ )
211
+ ] });
212
+ };
213
+ LineChart.displayName = "LineChart";
214
+
215
+ export {
216
+ LineChart
217
+ };
@@ -0,0 +1,37 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __objRest = (source, exclude) => {
21
+ var target = {};
22
+ for (var prop in source)
23
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
24
+ target[prop] = source[prop];
25
+ if (source != null && __getOwnPropSymbols)
26
+ for (var prop of __getOwnPropSymbols(source)) {
27
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
28
+ target[prop] = source[prop];
29
+ }
30
+ return target;
31
+ };
32
+
33
+ export {
34
+ __spreadValues,
35
+ __spreadProps,
36
+ __objRest
37
+ };
@@ -0,0 +1,82 @@
1
+ import {
2
+ iconSizeClasses
3
+ } from "./chunk-C4OI72SM.mjs";
4
+ import {
5
+ cn
6
+ } from "./chunk-GC3QIIH7.mjs";
7
+
8
+ // src/primitives/loading-icon/index.tsx
9
+ import { useLabels, useSdkUiConfig } from "@agg-market/hooks";
10
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
+ var LoadingIcon = ({
12
+ size = "m",
13
+ className,
14
+ ariaLabel
15
+ }) => {
16
+ const labels = useLabels();
17
+ const { enableAnimations } = useSdkUiConfig();
18
+ return /* @__PURE__ */ jsx(
19
+ "span",
20
+ {
21
+ role: "status",
22
+ "aria-label": ariaLabel != null ? ariaLabel : labels.common.loading,
23
+ className: cn(
24
+ "inline-grid place-items-center text-agg-primary will-change-transform",
25
+ className
26
+ ),
27
+ children: /* @__PURE__ */ jsx("span", { className: "inline-grid place-items-center", "aria-hidden": "true", children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 44 44", className: cn("block", iconSizeClasses[size]), children: /* @__PURE__ */ jsxs("g", { children: [
28
+ enableAnimations ? /* @__PURE__ */ jsx(
29
+ "animateTransform",
30
+ {
31
+ attributeName: "transform",
32
+ attributeType: "XML",
33
+ type: "rotate",
34
+ from: "0 22 22",
35
+ to: "360 22 22",
36
+ dur: "1.4s",
37
+ repeatCount: "indefinite"
38
+ }
39
+ ) : null,
40
+ /* @__PURE__ */ jsx(
41
+ "circle",
42
+ {
43
+ cx: "22",
44
+ cy: "22",
45
+ r: "16",
46
+ fill: "none",
47
+ stroke: "currentColor",
48
+ strokeWidth: "6",
49
+ strokeLinecap: "round",
50
+ strokeDasharray: "60 100",
51
+ strokeDashoffset: "0",
52
+ children: enableAnimations ? /* @__PURE__ */ jsxs(Fragment, { children: [
53
+ /* @__PURE__ */ jsx(
54
+ "animate",
55
+ {
56
+ attributeName: "stroke-dasharray",
57
+ values: "1 100;60 100;1 100",
58
+ dur: "1.2s",
59
+ repeatCount: "indefinite"
60
+ }
61
+ ),
62
+ /* @__PURE__ */ jsx(
63
+ "animate",
64
+ {
65
+ attributeName: "stroke-dashoffset",
66
+ values: "0;-25;-100",
67
+ dur: "1.2s",
68
+ repeatCount: "indefinite"
69
+ }
70
+ )
71
+ ] }) : null
72
+ }
73
+ )
74
+ ] }) }) })
75
+ }
76
+ );
77
+ };
78
+ LoadingIcon.displayName = "LoadingIcon";
79
+
80
+ export {
81
+ LoadingIcon
82
+ };
@@ -0,0 +1,112 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __objRest = (source, exclude) => {
21
+ var target = {};
22
+ for (var prop in source)
23
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
24
+ target[prop] = source[prop];
25
+ if (source != null && __getOwnPropSymbols)
26
+ for (var prop of __getOwnPropSymbols(source)) {
27
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
28
+ target[prop] = source[prop];
29
+ }
30
+ return target;
31
+ };
32
+ var __async = (__this, __arguments, generator) => {
33
+ return new Promise((resolve, reject) => {
34
+ var fulfilled = (value) => {
35
+ try {
36
+ step(generator.next(value));
37
+ } catch (e) {
38
+ reject(e);
39
+ }
40
+ };
41
+ var rejected = (value) => {
42
+ try {
43
+ step(generator.throw(value));
44
+ } catch (e) {
45
+ reject(e);
46
+ }
47
+ };
48
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
49
+ step((generator = generator.apply(__this, __arguments)).next());
50
+ });
51
+ };
52
+
53
+ // src/constants.ts
54
+ var AGG_ROOT_CLASS_NAME = "agg-root";
55
+
56
+ // src/shared/utils.ts
57
+ var isTruthy = (x) => !!x;
58
+ var cn = (...values) => values.filter(Boolean).join(" ");
59
+ var getMotionClassName = (enabled, ...values) => {
60
+ if (!enabled)
61
+ return void 0;
62
+ return cn(...values);
63
+ };
64
+ var getScrollBehavior = (enabled) => {
65
+ return enabled ? "smooth" : "auto";
66
+ };
67
+ var isValidDateValue = (value) => {
68
+ if (value instanceof Date && !Number.isNaN(value.getTime()))
69
+ return true;
70
+ return false;
71
+ };
72
+ var toDate = (value) => {
73
+ if (!value)
74
+ return null;
75
+ if (value instanceof Date)
76
+ return value;
77
+ const parsed = new Date(value);
78
+ if (Number.isNaN(parsed.getTime()))
79
+ return null;
80
+ return parsed;
81
+ };
82
+ var shortenAddress = (value) => {
83
+ if (value.length < 10)
84
+ return value;
85
+ return `${value.slice(0, 6)}...${value.slice(-5)}`;
86
+ };
87
+ var formatUsd = (value) => {
88
+ if (!Number.isFinite(value))
89
+ return "$0";
90
+ return value.toLocaleString("en-US", {
91
+ style: "currency",
92
+ currency: "USD",
93
+ minimumFractionDigits: 0,
94
+ maximumFractionDigits: 2
95
+ });
96
+ };
97
+
98
+ export {
99
+ __spreadValues,
100
+ __spreadProps,
101
+ __objRest,
102
+ __async,
103
+ AGG_ROOT_CLASS_NAME,
104
+ isTruthy,
105
+ cn,
106
+ getMotionClassName,
107
+ getScrollBehavior,
108
+ isValidDateValue,
109
+ toDate,
110
+ shortenAddress,
111
+ formatUsd
112
+ };