@coinbase/cds-web-visualization 0.0.0 → 3.4.0-beta.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 (241) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +3 -0
  3. package/dts/chart/CartesianChart.d.ts +36 -0
  4. package/dts/chart/CartesianChart.d.ts.map +1 -0
  5. package/dts/chart/ChartProvider.d.ts +6 -0
  6. package/dts/chart/ChartProvider.d.ts.map +1 -0
  7. package/dts/chart/Path.d.ts +34 -0
  8. package/dts/chart/Path.d.ts.map +1 -0
  9. package/dts/chart/PeriodSelector.d.ts +61 -0
  10. package/dts/chart/PeriodSelector.d.ts.map +1 -0
  11. package/dts/chart/Point.d.ts +153 -0
  12. package/dts/chart/Point.d.ts.map +1 -0
  13. package/dts/chart/area/Area.d.ts +48 -0
  14. package/dts/chart/area/Area.d.ts.map +1 -0
  15. package/dts/chart/area/AreaChart.d.ts +52 -0
  16. package/dts/chart/area/AreaChart.d.ts.map +1 -0
  17. package/dts/chart/area/DottedArea.d.ts +68 -0
  18. package/dts/chart/area/DottedArea.d.ts.map +1 -0
  19. package/dts/chart/area/GradientArea.d.ts +30 -0
  20. package/dts/chart/area/GradientArea.d.ts.map +1 -0
  21. package/dts/chart/area/SolidArea.d.ts +8 -0
  22. package/dts/chart/area/SolidArea.d.ts.map +1 -0
  23. package/dts/chart/area/index.d.ts +6 -0
  24. package/dts/chart/area/index.d.ts.map +1 -0
  25. package/dts/chart/axis/Axis.d.ts +208 -0
  26. package/dts/chart/axis/Axis.d.ts.map +1 -0
  27. package/dts/chart/axis/XAxis.d.ts +16 -0
  28. package/dts/chart/axis/XAxis.d.ts.map +1 -0
  29. package/dts/chart/axis/YAxis.d.ts +21 -0
  30. package/dts/chart/axis/YAxis.d.ts.map +1 -0
  31. package/dts/chart/axis/index.d.ts +4 -0
  32. package/dts/chart/axis/index.d.ts.map +1 -0
  33. package/dts/chart/bar/Bar.d.ts +91 -0
  34. package/dts/chart/bar/Bar.d.ts.map +1 -0
  35. package/dts/chart/bar/BarChart.d.ts +53 -0
  36. package/dts/chart/bar/BarChart.d.ts.map +1 -0
  37. package/dts/chart/bar/BarPlot.d.ts +29 -0
  38. package/dts/chart/bar/BarPlot.d.ts.map +1 -0
  39. package/dts/chart/bar/BarStack.d.ts +111 -0
  40. package/dts/chart/bar/BarStack.d.ts.map +1 -0
  41. package/dts/chart/bar/BarStackGroup.d.ts +35 -0
  42. package/dts/chart/bar/BarStackGroup.d.ts.map +1 -0
  43. package/dts/chart/bar/DefaultBar.d.ts +17 -0
  44. package/dts/chart/bar/DefaultBar.d.ts.map +1 -0
  45. package/dts/chart/bar/DefaultBarStack.d.ts +16 -0
  46. package/dts/chart/bar/DefaultBarStack.d.ts.map +1 -0
  47. package/dts/chart/bar/index.d.ts +8 -0
  48. package/dts/chart/bar/index.d.ts.map +1 -0
  49. package/dts/chart/index.d.ts +13 -0
  50. package/dts/chart/index.d.ts.map +1 -0
  51. package/dts/chart/line/DottedLine.d.ts +14 -0
  52. package/dts/chart/line/DottedLine.d.ts.map +1 -0
  53. package/dts/chart/line/GradientLine.d.ts +42 -0
  54. package/dts/chart/line/GradientLine.d.ts.map +1 -0
  55. package/dts/chart/line/Line.d.ts +80 -0
  56. package/dts/chart/line/Line.d.ts.map +1 -0
  57. package/dts/chart/line/LineChart.d.ts +59 -0
  58. package/dts/chart/line/LineChart.d.ts.map +1 -0
  59. package/dts/chart/line/ReferenceLine.d.ts +131 -0
  60. package/dts/chart/line/ReferenceLine.d.ts.map +1 -0
  61. package/dts/chart/line/SolidLine.d.ts +14 -0
  62. package/dts/chart/line/SolidLine.d.ts.map +1 -0
  63. package/dts/chart/line/index.d.ts +7 -0
  64. package/dts/chart/line/index.d.ts.map +1 -0
  65. package/dts/chart/scrubber/Scrubber.d.ts +149 -0
  66. package/dts/chart/scrubber/Scrubber.d.ts.map +1 -0
  67. package/dts/chart/scrubber/ScrubberBeacon.d.ts +93 -0
  68. package/dts/chart/scrubber/ScrubberBeacon.d.ts.map +1 -0
  69. package/dts/chart/scrubber/ScrubberBeaconLabel.d.ts +7 -0
  70. package/dts/chart/scrubber/ScrubberBeaconLabel.d.ts.map +1 -0
  71. package/dts/chart/scrubber/ScrubberProvider.d.ts +17 -0
  72. package/dts/chart/scrubber/ScrubberProvider.d.ts.map +1 -0
  73. package/dts/chart/scrubber/index.d.ts +2 -0
  74. package/dts/chart/scrubber/index.d.ts.map +1 -0
  75. package/dts/chart/text/ChartText.d.ts +114 -0
  76. package/dts/chart/text/ChartText.d.ts.map +1 -0
  77. package/dts/chart/text/SmartChartTextGroup.d.ts +55 -0
  78. package/dts/chart/text/SmartChartTextGroup.d.ts.map +1 -0
  79. package/dts/chart/text/index.d.ts +3 -0
  80. package/dts/chart/text/index.d.ts.map +1 -0
  81. package/dts/chart/utils/axis.d.ts +342 -0
  82. package/dts/chart/utils/axis.d.ts.map +1 -0
  83. package/dts/chart/utils/bar.d.ts +20 -0
  84. package/dts/chart/utils/bar.d.ts.map +1 -0
  85. package/dts/chart/utils/chart.d.ts +97 -0
  86. package/dts/chart/utils/chart.d.ts.map +1 -0
  87. package/dts/chart/utils/context.d.ts +95 -0
  88. package/dts/chart/utils/context.d.ts.map +1 -0
  89. package/dts/chart/utils/index.d.ts +8 -0
  90. package/dts/chart/utils/index.d.ts.map +1 -0
  91. package/dts/chart/utils/path.d.ts +107 -0
  92. package/dts/chart/utils/path.d.ts.map +1 -0
  93. package/dts/chart/utils/point.d.ts +75 -0
  94. package/dts/chart/utils/point.d.ts.map +1 -0
  95. package/dts/chart/utils/scale.d.ts +43 -0
  96. package/dts/chart/utils/scale.d.ts.map +1 -0
  97. package/dts/index.d.ts +3 -0
  98. package/dts/index.d.ts.map +1 -0
  99. package/dts/sparkline/Counter.d.ts +8 -0
  100. package/dts/sparkline/Counter.d.ts.map +1 -0
  101. package/dts/sparkline/Sparkline.d.ts +67 -0
  102. package/dts/sparkline/Sparkline.d.ts.map +1 -0
  103. package/dts/sparkline/SparklineArea.d.ts +15 -0
  104. package/dts/sparkline/SparklineArea.d.ts.map +1 -0
  105. package/dts/sparkline/SparklineAreaPattern.d.ts +14 -0
  106. package/dts/sparkline/SparklineAreaPattern.d.ts.map +1 -0
  107. package/dts/sparkline/SparklineGradient.d.ts +23 -0
  108. package/dts/sparkline/SparklineGradient.d.ts.map +1 -0
  109. package/dts/sparkline/SparklinePath.d.ts +12 -0
  110. package/dts/sparkline/SparklinePath.d.ts.map +1 -0
  111. package/dts/sparkline/__figma__/Sparkline.figma.d.ts +2 -0
  112. package/dts/sparkline/__figma__/Sparkline.figma.d.ts.map +1 -0
  113. package/dts/sparkline/generateSparklineWithId.d.ts +11 -0
  114. package/dts/sparkline/generateSparklineWithId.d.ts.map +1 -0
  115. package/dts/sparkline/index.d.ts +6 -0
  116. package/dts/sparkline/index.d.ts.map +1 -0
  117. package/dts/sparkline/sparkline-interactive/InnerSparklineInteractiveProvider.d.ts +13 -0
  118. package/dts/sparkline/sparkline-interactive/InnerSparklineInteractiveProvider.d.ts.map +1 -0
  119. package/dts/sparkline/sparkline-interactive/SparklineInteractive.d.ts +199 -0
  120. package/dts/sparkline/sparkline-interactive/SparklineInteractive.d.ts.map +1 -0
  121. package/dts/sparkline/sparkline-interactive/SparklineInteractiveAnimatedPath.d.ts +26 -0
  122. package/dts/sparkline/sparkline-interactive/SparklineInteractiveAnimatedPath.d.ts.map +1 -0
  123. package/dts/sparkline/sparkline-interactive/SparklineInteractiveHoverDate.d.ts +5 -0
  124. package/dts/sparkline/sparkline-interactive/SparklineInteractiveHoverDate.d.ts.map +1 -0
  125. package/dts/sparkline/sparkline-interactive/SparklineInteractiveHoverPrice.d.ts +5 -0
  126. package/dts/sparkline/sparkline-interactive/SparklineInteractiveHoverPrice.d.ts.map +1 -0
  127. package/dts/sparkline/sparkline-interactive/SparklineInteractiveLineVertical.d.ts +8 -0
  128. package/dts/sparkline/sparkline-interactive/SparklineInteractiveLineVertical.d.ts.map +1 -0
  129. package/dts/sparkline/sparkline-interactive/SparklineInteractiveMarkerDates.d.ts +17 -0
  130. package/dts/sparkline/sparkline-interactive/SparklineInteractiveMarkerDates.d.ts.map +1 -0
  131. package/dts/sparkline/sparkline-interactive/SparklineInteractivePaths.d.ts +25 -0
  132. package/dts/sparkline/sparkline-interactive/SparklineInteractivePaths.d.ts.map +1 -0
  133. package/dts/sparkline/sparkline-interactive/SparklineInteractivePeriodSelector.d.ts +25 -0
  134. package/dts/sparkline/sparkline-interactive/SparklineInteractivePeriodSelector.d.ts.map +1 -0
  135. package/dts/sparkline/sparkline-interactive/SparklineInteractiveProvider.d.ts +25 -0
  136. package/dts/sparkline/sparkline-interactive/SparklineInteractiveProvider.d.ts.map +1 -0
  137. package/dts/sparkline/sparkline-interactive/SparklineInteractiveScrubHandler.d.ts +30 -0
  138. package/dts/sparkline/sparkline-interactive/SparklineInteractiveScrubHandler.d.ts.map +1 -0
  139. package/dts/sparkline/sparkline-interactive/SparklineInteractiveScrubProvider.d.ts +18 -0
  140. package/dts/sparkline/sparkline-interactive/SparklineInteractiveScrubProvider.d.ts.map +1 -0
  141. package/dts/sparkline/sparkline-interactive/SparklineInteractiveTimeseriesPaths.d.ts +31 -0
  142. package/dts/sparkline/sparkline-interactive/SparklineInteractiveTimeseriesPaths.d.ts.map +1 -0
  143. package/dts/sparkline/sparkline-interactive/__figma__/SparklineInteractive.figma.d.ts +2 -0
  144. package/dts/sparkline/sparkline-interactive/__figma__/SparklineInteractive.figma.d.ts.map +1 -0
  145. package/dts/sparkline/sparkline-interactive/fade.d.ts +3 -0
  146. package/dts/sparkline/sparkline-interactive/fade.d.ts.map +1 -0
  147. package/dts/sparkline/sparkline-interactive/useSparklineInteractiveConstants.d.ts +13 -0
  148. package/dts/sparkline/sparkline-interactive/useSparklineInteractiveConstants.d.ts.map +1 -0
  149. package/dts/sparkline/sparkline-interactive-header/SparklineInteractiveHeader.d.ts +112 -0
  150. package/dts/sparkline/sparkline-interactive-header/SparklineInteractiveHeader.d.ts.map +1 -0
  151. package/dts/sparkline/sparkline-interactive-header/__figma__/SparklineInteractiveHeader.figma.d.ts +2 -0
  152. package/dts/sparkline/sparkline-interactive-header/__figma__/SparklineInteractiveHeader.figma.d.ts.map +1 -0
  153. package/esm/chart/CartesianChart.css +1 -0
  154. package/esm/chart/CartesianChart.js +258 -0
  155. package/esm/chart/ChartProvider.js +10 -0
  156. package/esm/chart/Path.js +89 -0
  157. package/esm/chart/PeriodSelector.css +1 -0
  158. package/esm/chart/PeriodSelector.js +126 -0
  159. package/esm/chart/Point.css +2 -0
  160. package/esm/chart/Point.js +171 -0
  161. package/esm/chart/area/Area.js +85 -0
  162. package/esm/chart/area/AreaChart.js +164 -0
  163. package/esm/chart/area/DottedArea.js +141 -0
  164. package/esm/chart/area/GradientArea.js +111 -0
  165. package/esm/chart/area/SolidArea.js +29 -0
  166. package/esm/chart/area/index.js +7 -0
  167. package/esm/chart/axis/Axis.js +46 -0
  168. package/esm/chart/axis/XAxis.css +2 -0
  169. package/esm/chart/axis/XAxis.js +195 -0
  170. package/esm/chart/axis/YAxis.css +2 -0
  171. package/esm/chart/axis/YAxis.js +183 -0
  172. package/esm/chart/axis/index.js +5 -0
  173. package/esm/chart/bar/Bar.js +59 -0
  174. package/esm/chart/bar/BarChart.js +147 -0
  175. package/esm/chart/bar/BarPlot.js +96 -0
  176. package/esm/chart/bar/BarStack.js +519 -0
  177. package/esm/chart/bar/BarStackGroup.js +96 -0
  178. package/esm/chart/bar/DefaultBar.js +64 -0
  179. package/esm/chart/bar/DefaultBarStack.js +60 -0
  180. package/esm/chart/bar/index.js +9 -0
  181. package/esm/chart/index.js +14 -0
  182. package/esm/chart/line/DottedLine.js +38 -0
  183. package/esm/chart/line/GradientLine.js +58 -0
  184. package/esm/chart/line/Line.js +159 -0
  185. package/esm/chart/line/LineChart.js +120 -0
  186. package/esm/chart/line/ReferenceLine.js +142 -0
  187. package/esm/chart/line/SolidLine.js +34 -0
  188. package/esm/chart/line/index.js +8 -0
  189. package/esm/chart/scrubber/Scrubber.js +483 -0
  190. package/esm/chart/scrubber/ScrubberBeacon.js +195 -0
  191. package/esm/chart/scrubber/ScrubberBeaconLabel.js +33 -0
  192. package/esm/chart/scrubber/ScrubberProvider.js +228 -0
  193. package/esm/chart/scrubber/index.js +2 -0
  194. package/esm/chart/text/ChartText.js +236 -0
  195. package/esm/chart/text/SmartChartTextGroup.js +226 -0
  196. package/esm/chart/text/index.js +4 -0
  197. package/esm/chart/utils/axis.js +593 -0
  198. package/esm/chart/utils/bar.js +24 -0
  199. package/esm/chart/utils/chart.js +229 -0
  200. package/esm/chart/utils/context.js +15 -0
  201. package/esm/chart/utils/index.js +9 -0
  202. package/esm/chart/utils/path.js +204 -0
  203. package/esm/chart/utils/point.js +118 -0
  204. package/esm/chart/utils/scale.js +48 -0
  205. package/esm/index.js +4 -0
  206. package/esm/sparkline/Counter.css +3 -0
  207. package/esm/sparkline/Counter.js +35 -0
  208. package/esm/sparkline/Sparkline.js +164 -0
  209. package/esm/sparkline/SparklineArea.js +18 -0
  210. package/esm/sparkline/SparklineAreaPattern.js +37 -0
  211. package/esm/sparkline/SparklineGradient.js +30 -0
  212. package/esm/sparkline/SparklinePath.js +19 -0
  213. package/esm/sparkline/__figma__/Sparkline.figma.js +24 -0
  214. package/esm/sparkline/generateSparklineWithId.js +7 -0
  215. package/esm/sparkline/index.js +5 -0
  216. package/esm/sparkline/sparkline-interactive/InnerSparklineInteractiveProvider.js +21 -0
  217. package/esm/sparkline/sparkline-interactive/SparklineInteractive.js +317 -0
  218. package/esm/sparkline/sparkline-interactive/SparklineInteractiveAnimatedPath.js +108 -0
  219. package/esm/sparkline/sparkline-interactive/SparklineInteractiveHoverDate.css +2 -0
  220. package/esm/sparkline/sparkline-interactive/SparklineInteractiveHoverDate.js +26 -0
  221. package/esm/sparkline/sparkline-interactive/SparklineInteractiveHoverPrice.css +2 -0
  222. package/esm/sparkline/sparkline-interactive/SparklineInteractiveHoverPrice.js +24 -0
  223. package/esm/sparkline/sparkline-interactive/SparklineInteractiveLineVertical.css +4 -0
  224. package/esm/sparkline/sparkline-interactive/SparklineInteractiveLineVertical.js +65 -0
  225. package/esm/sparkline/sparkline-interactive/SparklineInteractiveMarkerDates.css +1 -0
  226. package/esm/sparkline/sparkline-interactive/SparklineInteractiveMarkerDates.js +80 -0
  227. package/esm/sparkline/sparkline-interactive/SparklineInteractivePaths.js +56 -0
  228. package/esm/sparkline/sparkline-interactive/SparklineInteractivePeriodSelector.js +70 -0
  229. package/esm/sparkline/sparkline-interactive/SparklineInteractiveProvider.js +45 -0
  230. package/esm/sparkline/sparkline-interactive/SparklineInteractiveScrubHandler.css +5 -0
  231. package/esm/sparkline/sparkline-interactive/SparklineInteractiveScrubHandler.js +199 -0
  232. package/esm/sparkline/sparkline-interactive/SparklineInteractiveScrubProvider.js +39 -0
  233. package/esm/sparkline/sparkline-interactive/SparklineInteractiveTimeseriesPaths.js +92 -0
  234. package/esm/sparkline/sparkline-interactive/__figma__/SparklineInteractive.figma.js +89 -0
  235. package/esm/sparkline/sparkline-interactive/fade.css +2 -0
  236. package/esm/sparkline/sparkline-interactive/fade.js +14 -0
  237. package/esm/sparkline/sparkline-interactive/useSparklineInteractiveConstants.js +28 -0
  238. package/esm/sparkline/sparkline-interactive-header/SparklineInteractiveHeader.js +225 -0
  239. package/esm/sparkline/sparkline-interactive-header/__figma__/SparklineInteractiveHeader.figma.js +108 -0
  240. package/package.json +68 -6
  241. package/index.js +0 -1
@@ -0,0 +1,225 @@
1
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
4
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
+ import React, { forwardRef, memo, useCallback, useImperativeHandle, useMemo, useRef } from 'react';
7
+ import { subheadIconSignMap } from '@coinbase/cds-common/tokens/sparkline';
8
+ import { debounce } from '@coinbase/cds-common/utils/debounce';
9
+ import { AccessibilityAnnouncer } from '@coinbase/cds-web/AccessibilityAnnouncer/AccessibilityAnnouncer';
10
+ import { VStack } from '@coinbase/cds-web/layout';
11
+ import { Text } from '@coinbase/cds-web/typography/Text';
12
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
+ export * from '@coinbase/cds-common/types/SparklineInteractiveHeaderBaseProps';
14
+ const variantColorMap = {
15
+ positive: 'bgPositive',
16
+ negative: 'bgNegative',
17
+ foregroundMuted: 'fgMuted'
18
+ };
19
+ export const interpolateSubHeadText = subHead => {
20
+ if (subHead.priceChange && subHead.percent) {
21
+ return "".concat(subHead.priceChange, " (").concat(subHead.percent, ")");
22
+ }
23
+ if (subHead.priceChange) {
24
+ return subHead.priceChange;
25
+ }
26
+ return '';
27
+ };
28
+ const SparklineInteractiveHeaderStable = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, forwardedRef) => {
29
+ let {
30
+ defaultLabel,
31
+ defaultTitle,
32
+ defaultSubHead,
33
+ testID,
34
+ labelNode,
35
+ compact
36
+ } = _ref;
37
+ const labelRef = useRef(null);
38
+ const titleRef = useRef(null);
39
+ const subHeadIconRef = useRef(null);
40
+ const subHeadA11yRef = useRef(null);
41
+ const subHeadRef = useRef(null);
42
+ const subHeadAccessoryRef = useRef(null);
43
+ const valuesRef = useRef({
44
+ title: defaultTitle,
45
+ label: defaultLabel,
46
+ subHead: defaultSubHead
47
+ });
48
+ const updateLabel = useCallback(label => {
49
+ var _valuesRef$current;
50
+ const prevLabel = (_valuesRef$current = valuesRef.current) === null || _valuesRef$current === void 0 ? void 0 : _valuesRef$current.label;
51
+ if (prevLabel !== label) {
52
+ if (labelRef.current) {
53
+ labelRef.current.innerText = label;
54
+ }
55
+ valuesRef.current = _objectSpread(_objectSpread({}, valuesRef.current), {}, {
56
+ label
57
+ });
58
+ }
59
+ }, []);
60
+ const updateTitle = useCallback(title => {
61
+ var _valuesRef$current2;
62
+ const prevTitle = (_valuesRef$current2 = valuesRef.current) === null || _valuesRef$current2 === void 0 ? void 0 : _valuesRef$current2.title;
63
+ if (prevTitle !== title && typeof title === 'string') {
64
+ if (titleRef.current) {
65
+ titleRef.current.innerText = title;
66
+ }
67
+ valuesRef.current = _objectSpread(_objectSpread({}, valuesRef.current), {}, {
68
+ title
69
+ });
70
+ }
71
+ }, []);
72
+
73
+ // To make sure we don't spam the screen reader, we debounce this update
74
+ const debouncedUpdateMessage = useMemo(() => debounce(subHead => {
75
+ if (subHeadA11yRef.current) {
76
+ const message = "".concat(valuesRef.current.label, " was ").concat(valuesRef.current.title, " ").concat(subHead.accessibilityLabel, " ").concat(interpolateSubHeadText(subHead));
77
+ subHeadA11yRef.current.innerText = message;
78
+ }
79
+ }, 500), []);
80
+ const safelyUpdateSubHeadA11yRef = useCallback(debouncedUpdateMessage, [debouncedUpdateMessage]);
81
+ const updateSubHead = useCallback(subHead => {
82
+ var _valuesRef$current3;
83
+ const prevSubHead = (_valuesRef$current3 = valuesRef.current) === null || _valuesRef$current3 === void 0 ? void 0 : _valuesRef$current3.subHead;
84
+ if (prevSubHead !== subHead) {
85
+ if (subHeadIconRef.current) {
86
+ subHeadIconRef.current.innerText = subheadIconSignMap[subHead.sign];
87
+ subHeadIconRef.current.style.color = "var(--color-".concat(variantColorMap[subHead.variant], ")");
88
+ }
89
+ if (subHeadRef.current) {
90
+ subHeadRef.current.innerText = interpolateSubHeadText(subHead);
91
+ subHeadRef.current.style.color = "var(--color-".concat(variantColorMap[subHead.variant], ")");
92
+ }
93
+ if (subHeadAccessoryRef.current) {
94
+ var _subHead$accessoryTex;
95
+ subHeadAccessoryRef.current.innerText = (_subHead$accessoryTex = subHead.accessoryText) !== null && _subHead$accessoryTex !== void 0 ? _subHead$accessoryTex : '';
96
+ }
97
+
98
+ // Update a11y message
99
+ if (subHeadA11yRef.current) {
100
+ safelyUpdateSubHeadA11yRef(subHead);
101
+ }
102
+ valuesRef.current = _objectSpread(_objectSpread({}, valuesRef.current), {}, {
103
+ subHead
104
+ });
105
+ }
106
+ }, [safelyUpdateSubHeadA11yRef]);
107
+
108
+ // update is triggered from a parent component.
109
+ // We track the values of each input in a valuesRef object
110
+ // so that we can avoid updating unnecessarily if previous
111
+ // value is the same as the new value
112
+ const update = useCallback(_ref2 => {
113
+ let {
114
+ label,
115
+ title,
116
+ subHead
117
+ } = _ref2;
118
+ if (label) {
119
+ updateLabel(label);
120
+ }
121
+ if (title) {
122
+ updateTitle(title);
123
+ }
124
+ if (subHead) {
125
+ updateSubHead(subHead);
126
+ }
127
+ }, [updateLabel, updateSubHead, updateTitle]);
128
+ useImperativeHandle(forwardedRef, () => {
129
+ return {
130
+ update
131
+ };
132
+ }, [update]);
133
+ const label = !!defaultLabel && /*#__PURE__*/_jsx(Text, {
134
+ as: "div",
135
+ color: "fgMuted",
136
+ font: "headline",
137
+ children: /*#__PURE__*/_jsx("span", {
138
+ ref: labelRef,
139
+ children: defaultLabel
140
+ })
141
+ });
142
+ const subHeadColorStyles = defaultSubHead ? {
143
+ color: "var(--color-".concat(variantColorMap[defaultSubHead.variant], ")"),
144
+ marginRight: 'var(--space-0_5)'
145
+ } : {
146
+ marginRight: 'var(--space-0_5)'
147
+ };
148
+ const subHead = !!defaultSubHead && /*#__PURE__*/_jsxs(_Fragment, {
149
+ children: [/*#__PURE__*/_jsxs(Text, {
150
+ tabularNumbers: true,
151
+ as: "span",
152
+ font: compact ? 'label1' : 'title4',
153
+ children: [/*#__PURE__*/_jsx("span", {
154
+ ref: subHeadIconRef,
155
+ style: subHeadColorStyles,
156
+ children: subheadIconSignMap[defaultSubHead.sign]
157
+ }), /*#__PURE__*/_jsx("span", {
158
+ ref: subHeadRef,
159
+ style: subHeadColorStyles,
160
+ children: interpolateSubHeadText(defaultSubHead)
161
+ })]
162
+ }), !!defaultSubHead.accessoryText && /*#__PURE__*/_jsx(Text, {
163
+ "aria-hidden": true,
164
+ tabularNumbers: true,
165
+ as: "span",
166
+ color: "fgMuted",
167
+ paddingStart: 1,
168
+ children: /*#__PURE__*/_jsx("span", {
169
+ ref: subHeadAccessoryRef,
170
+ children: defaultSubHead.accessoryText
171
+ })
172
+ })]
173
+ });
174
+ const title = /*#__PURE__*/_jsxs(VStack, {
175
+ alignItems: "baseline",
176
+ padding: 0,
177
+ children: [typeof defaultTitle === 'string' ? /*#__PURE__*/_jsx(Text, {
178
+ tabularNumbers: true,
179
+ as: "div",
180
+ color: "fg",
181
+ font: compact ? 'title1' : 'display3',
182
+ paddingEnd: 1,
183
+ children: /*#__PURE__*/_jsx("span", {
184
+ ref: titleRef,
185
+ children: defaultTitle
186
+ })
187
+ }) : defaultTitle, subHead]
188
+ });
189
+ return /*#__PURE__*/_jsxs(_Fragment, {
190
+ children: [/*#__PURE__*/_jsxs("div", {
191
+ "aria-hidden": true,
192
+ "data-testid": testID,
193
+ style: {
194
+ width: '100%'
195
+ },
196
+ children: [labelNode !== null && labelNode !== void 0 ? labelNode : label, title]
197
+ }), /*#__PURE__*/_jsx(AccessibilityAnnouncer, {
198
+ ref: subHeadA11yRef
199
+ })]
200
+ });
201
+ }));
202
+ export const SparklineInteractiveHeader = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref3, ref) => {
203
+ let {
204
+ defaultLabel,
205
+ defaultTitle,
206
+ defaultSubHead,
207
+ testID,
208
+ labelNode,
209
+ compact
210
+ } = _ref3;
211
+ return /*#__PURE__*/_jsx(SparklineInteractiveHeaderStable
212
+ // All updates after initial load should be handled imperatively
213
+ // via update function in forwarded ref to prevent overriding
214
+ // values unexpectedly. This is why we use ref here so that the
215
+ // default value is stable and never updates on re-renders
216
+ , {
217
+ ref: ref,
218
+ compact: compact,
219
+ defaultLabel: useRef(defaultLabel).current,
220
+ defaultSubHead: useRef(defaultSubHead).current,
221
+ defaultTitle: useRef(defaultTitle).current,
222
+ labelNode: labelNode,
223
+ testID: testID
224
+ });
225
+ }));
@@ -0,0 +1,108 @@
1
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
4
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
+ import React from 'react';
7
+ import { figma } from '@figma/code-connect';
8
+ import { SparklineInteractive } from '../../sparkline-interactive/SparklineInteractive';
9
+ import { SparklineInteractiveHeader } from '../SparklineInteractiveHeader';
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ figma.connect(SparklineInteractiveHeader, 'https://www.figma.com/design/k5CtyJccNQUGMI5bI4lJ2g/✨-CDS-Components?node-id=320-14931&m=dev', {
12
+ imports: ["import { SparklineInteractiveHeader } from '@coinbase/cds-web-visualization';", "import { SparklineInteractive } from '@coinbase/cds-web-visualization';"],
13
+ props: {
14
+ compact: figma.boolean('compact'),
15
+ disableScrubbing: figma.boolean('scrubbing', {
16
+ false: true,
17
+ true: false
18
+ })
19
+ },
20
+ example: props => {
21
+ const periods = [{
22
+ label: '1H',
23
+ value: 'hour'
24
+ }, {
25
+ label: '1D',
26
+ value: 'day'
27
+ }, {
28
+ label: '1W',
29
+ value: 'week'
30
+ }, {
31
+ label: '1M',
32
+ value: 'month'
33
+ }, {
34
+ label: '1Y',
35
+ value: 'year'
36
+ }, {
37
+ label: 'All',
38
+ value: 'all'
39
+ }];
40
+ const data = {
41
+ hour: [],
42
+ day: [{
43
+ value: 49259.38,
44
+ date: new Date('2021-12-05T04:00:00.000Z')
45
+ }, {
46
+ value: 49163.79,
47
+ date: new Date('2021-12-05T04:05:00.000Z')
48
+ }, {
49
+ value: 49146.66,
50
+ date: new Date('2021-12-05T04:10:00.000Z')
51
+ }, {
52
+ value: 49083.92,
53
+ date: new Date('2021-12-05T04:15:00.000Z')
54
+ }, {
55
+ value: 49115.3,
56
+ date: new Date('2021-12-05T04:20:00.000Z')
57
+ }, {
58
+ value: 48992.14,
59
+ date: new Date('2021-12-05T04:25:00.000Z')
60
+ }, {
61
+ value: 49075.75,
62
+ date: new Date('2021-12-05T04:30:00.000Z')
63
+ }, {
64
+ value: 49025.78,
65
+ date: new Date('2021-12-05T04:35:00.000Z')
66
+ }, {
67
+ value: 49066.23,
68
+ date: new Date('2021-12-05T04:40:00.000Z')
69
+ }, {
70
+ value: 49247.82,
71
+ date: new Date('2021-12-05T04:45:00.000Z')
72
+ }],
73
+ week: [],
74
+ month: [],
75
+ year: [],
76
+ all: []
77
+ };
78
+ const defaultSubHead = {
79
+ percent: '1.35%',
80
+ sign: 'upwardTrend',
81
+ variant: 'positive',
82
+ accessibilityLabel: 'on Sunday, December 5, 2021 at 10:55 PM, up',
83
+ priceChange: '$21.36'
84
+ };
85
+ const header = /*#__PURE__*/_jsx(SparklineInteractiveHeader, {
86
+ defaultLabel: "Portfolio balance"
87
+ // @ts-expect-error: defaultSubHead is not part of the type definition
88
+ ,
89
+ defaultSubHead: defaultSubHead,
90
+ defaultTitle: "$10,023.82"
91
+ });
92
+ return /*#__PURE__*/_jsx(SparklineInteractive, _objectSpread({
93
+ data: data,
94
+ defaultPeriod: "day",
95
+ formatDate: date => date.toLocaleString('en-US', {
96
+ timeZone: 'America/New_York',
97
+ hour: 'numeric',
98
+ minute: 'numeric'
99
+ }),
100
+ headerNode: header,
101
+ onPeriodChanged: () => {},
102
+ onScrub: () => {},
103
+ onScrubEnd: () => {},
104
+ periods: periods,
105
+ strokeColor: "#cb51bb"
106
+ }, props));
107
+ }
108
+ });
package/package.json CHANGED
@@ -1,8 +1,70 @@
1
1
  {
2
2
  "name": "@coinbase/cds-web-visualization",
3
- "version": "0.0.0",
4
- "description": "Placeholder package",
5
- "main": "index.js",
6
- "author": "Coinbase Inc.",
7
- "license": "Apache-2.0"
8
- }
3
+ "version": "3.4.0-beta.1",
4
+ "description": "Coinbase Design System - Web Sparkline",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git@github.com:coinbase/cds.git",
8
+ "directory": "packages/web-visualization"
9
+ },
10
+ "type": "module",
11
+ "main": "./esm/index.js",
12
+ "types": "./dts/index.d.ts",
13
+ "exports": {
14
+ "./package.json": "./package.json",
15
+ ".": {
16
+ "types": "./dts/index.d.ts",
17
+ "default": "./esm/index.js"
18
+ },
19
+ "./chart": {
20
+ "types": "./dts/chart/index.d.ts",
21
+ "default": "./esm/chart/index.js"
22
+ },
23
+ "./sparkline": {
24
+ "types": "./dts/sparkline/index.d.ts",
25
+ "default": "./esm/sparkline/index.js"
26
+ },
27
+ "./*": {
28
+ "types": "./dts/*.d.ts",
29
+ "default": "./esm/*.js"
30
+ }
31
+ },
32
+ "sideEffects": [
33
+ "*.css"
34
+ ],
35
+ "files": [
36
+ "dts",
37
+ "esm",
38
+ "CHANGELOG"
39
+ ],
40
+ "peerDependencies": {
41
+ "@coinbase/cds-common": "^8.13.5",
42
+ "@coinbase/cds-lottie-files": "^3.3.1",
43
+ "@coinbase/cds-utils": "^2.3.2",
44
+ "@coinbase/cds-web": "^8.13.5",
45
+ "react": "^18.3.1",
46
+ "react-dom": "^18.3.1"
47
+ },
48
+ "dependencies": {
49
+ "d3-color": "^3.1.0",
50
+ "d3-interpolate": "^3.0.1",
51
+ "d3-interpolate-path": "^2.3.0",
52
+ "d3-selection": "^3.0.0",
53
+ "d3-transition": "^3.0.1",
54
+ "lodash": "^4.17.21"
55
+ },
56
+ "devDependencies": {
57
+ "@babel/core": "^7.28.0",
58
+ "@babel/preset-env": "^7.28.0",
59
+ "@babel/preset-react": "^7.27.1",
60
+ "@babel/preset-typescript": "^7.27.1",
61
+ "@coinbase/cds-common": "^8.13.5",
62
+ "@coinbase/cds-lottie-files": "^3.3.1",
63
+ "@coinbase/cds-utils": "^2.3.2",
64
+ "@coinbase/cds-web": "^8.13.5",
65
+ "@figma/code-connect": "^1.3.4",
66
+ "@linaria/core": "^3.0.0-beta.22",
67
+ "@types/react": "^18.3.12",
68
+ "@types/react-dom": "^18.3.1"
69
+ }
70
+ }
package/index.js DELETED
@@ -1 +0,0 @@
1
- console.log("Temporary package");