@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.
- package/CHANGELOG.md +26 -0
- package/README.md +3 -0
- package/dts/chart/CartesianChart.d.ts +36 -0
- package/dts/chart/CartesianChart.d.ts.map +1 -0
- package/dts/chart/ChartProvider.d.ts +6 -0
- package/dts/chart/ChartProvider.d.ts.map +1 -0
- package/dts/chart/Path.d.ts +34 -0
- package/dts/chart/Path.d.ts.map +1 -0
- package/dts/chart/PeriodSelector.d.ts +61 -0
- package/dts/chart/PeriodSelector.d.ts.map +1 -0
- package/dts/chart/Point.d.ts +153 -0
- package/dts/chart/Point.d.ts.map +1 -0
- package/dts/chart/area/Area.d.ts +48 -0
- package/dts/chart/area/Area.d.ts.map +1 -0
- package/dts/chart/area/AreaChart.d.ts +52 -0
- package/dts/chart/area/AreaChart.d.ts.map +1 -0
- package/dts/chart/area/DottedArea.d.ts +68 -0
- package/dts/chart/area/DottedArea.d.ts.map +1 -0
- package/dts/chart/area/GradientArea.d.ts +30 -0
- package/dts/chart/area/GradientArea.d.ts.map +1 -0
- package/dts/chart/area/SolidArea.d.ts +8 -0
- package/dts/chart/area/SolidArea.d.ts.map +1 -0
- package/dts/chart/area/index.d.ts +6 -0
- package/dts/chart/area/index.d.ts.map +1 -0
- package/dts/chart/axis/Axis.d.ts +208 -0
- package/dts/chart/axis/Axis.d.ts.map +1 -0
- package/dts/chart/axis/XAxis.d.ts +16 -0
- package/dts/chart/axis/XAxis.d.ts.map +1 -0
- package/dts/chart/axis/YAxis.d.ts +21 -0
- package/dts/chart/axis/YAxis.d.ts.map +1 -0
- package/dts/chart/axis/index.d.ts +4 -0
- package/dts/chart/axis/index.d.ts.map +1 -0
- package/dts/chart/bar/Bar.d.ts +91 -0
- package/dts/chart/bar/Bar.d.ts.map +1 -0
- package/dts/chart/bar/BarChart.d.ts +53 -0
- package/dts/chart/bar/BarChart.d.ts.map +1 -0
- package/dts/chart/bar/BarPlot.d.ts +29 -0
- package/dts/chart/bar/BarPlot.d.ts.map +1 -0
- package/dts/chart/bar/BarStack.d.ts +111 -0
- package/dts/chart/bar/BarStack.d.ts.map +1 -0
- package/dts/chart/bar/BarStackGroup.d.ts +35 -0
- package/dts/chart/bar/BarStackGroup.d.ts.map +1 -0
- package/dts/chart/bar/DefaultBar.d.ts +17 -0
- package/dts/chart/bar/DefaultBar.d.ts.map +1 -0
- package/dts/chart/bar/DefaultBarStack.d.ts +16 -0
- package/dts/chart/bar/DefaultBarStack.d.ts.map +1 -0
- package/dts/chart/bar/index.d.ts +8 -0
- package/dts/chart/bar/index.d.ts.map +1 -0
- package/dts/chart/index.d.ts +13 -0
- package/dts/chart/index.d.ts.map +1 -0
- package/dts/chart/line/DottedLine.d.ts +14 -0
- package/dts/chart/line/DottedLine.d.ts.map +1 -0
- package/dts/chart/line/GradientLine.d.ts +42 -0
- package/dts/chart/line/GradientLine.d.ts.map +1 -0
- package/dts/chart/line/Line.d.ts +80 -0
- package/dts/chart/line/Line.d.ts.map +1 -0
- package/dts/chart/line/LineChart.d.ts +59 -0
- package/dts/chart/line/LineChart.d.ts.map +1 -0
- package/dts/chart/line/ReferenceLine.d.ts +131 -0
- package/dts/chart/line/ReferenceLine.d.ts.map +1 -0
- package/dts/chart/line/SolidLine.d.ts +14 -0
- package/dts/chart/line/SolidLine.d.ts.map +1 -0
- package/dts/chart/line/index.d.ts +7 -0
- package/dts/chart/line/index.d.ts.map +1 -0
- package/dts/chart/scrubber/Scrubber.d.ts +149 -0
- package/dts/chart/scrubber/Scrubber.d.ts.map +1 -0
- package/dts/chart/scrubber/ScrubberBeacon.d.ts +93 -0
- package/dts/chart/scrubber/ScrubberBeacon.d.ts.map +1 -0
- package/dts/chart/scrubber/ScrubberBeaconLabel.d.ts +7 -0
- package/dts/chart/scrubber/ScrubberBeaconLabel.d.ts.map +1 -0
- package/dts/chart/scrubber/ScrubberProvider.d.ts +17 -0
- package/dts/chart/scrubber/ScrubberProvider.d.ts.map +1 -0
- package/dts/chart/scrubber/index.d.ts +2 -0
- package/dts/chart/scrubber/index.d.ts.map +1 -0
- package/dts/chart/text/ChartText.d.ts +114 -0
- package/dts/chart/text/ChartText.d.ts.map +1 -0
- package/dts/chart/text/SmartChartTextGroup.d.ts +55 -0
- package/dts/chart/text/SmartChartTextGroup.d.ts.map +1 -0
- package/dts/chart/text/index.d.ts +3 -0
- package/dts/chart/text/index.d.ts.map +1 -0
- package/dts/chart/utils/axis.d.ts +342 -0
- package/dts/chart/utils/axis.d.ts.map +1 -0
- package/dts/chart/utils/bar.d.ts +20 -0
- package/dts/chart/utils/bar.d.ts.map +1 -0
- package/dts/chart/utils/chart.d.ts +97 -0
- package/dts/chart/utils/chart.d.ts.map +1 -0
- package/dts/chart/utils/context.d.ts +95 -0
- package/dts/chart/utils/context.d.ts.map +1 -0
- package/dts/chart/utils/index.d.ts +8 -0
- package/dts/chart/utils/index.d.ts.map +1 -0
- package/dts/chart/utils/path.d.ts +107 -0
- package/dts/chart/utils/path.d.ts.map +1 -0
- package/dts/chart/utils/point.d.ts +75 -0
- package/dts/chart/utils/point.d.ts.map +1 -0
- package/dts/chart/utils/scale.d.ts +43 -0
- package/dts/chart/utils/scale.d.ts.map +1 -0
- package/dts/index.d.ts +3 -0
- package/dts/index.d.ts.map +1 -0
- package/dts/sparkline/Counter.d.ts +8 -0
- package/dts/sparkline/Counter.d.ts.map +1 -0
- package/dts/sparkline/Sparkline.d.ts +67 -0
- package/dts/sparkline/Sparkline.d.ts.map +1 -0
- package/dts/sparkline/SparklineArea.d.ts +15 -0
- package/dts/sparkline/SparklineArea.d.ts.map +1 -0
- package/dts/sparkline/SparklineAreaPattern.d.ts +14 -0
- package/dts/sparkline/SparklineAreaPattern.d.ts.map +1 -0
- package/dts/sparkline/SparklineGradient.d.ts +23 -0
- package/dts/sparkline/SparklineGradient.d.ts.map +1 -0
- package/dts/sparkline/SparklinePath.d.ts +12 -0
- package/dts/sparkline/SparklinePath.d.ts.map +1 -0
- package/dts/sparkline/__figma__/Sparkline.figma.d.ts +2 -0
- package/dts/sparkline/__figma__/Sparkline.figma.d.ts.map +1 -0
- package/dts/sparkline/generateSparklineWithId.d.ts +11 -0
- package/dts/sparkline/generateSparklineWithId.d.ts.map +1 -0
- package/dts/sparkline/index.d.ts +6 -0
- package/dts/sparkline/index.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive/InnerSparklineInteractiveProvider.d.ts +13 -0
- package/dts/sparkline/sparkline-interactive/InnerSparklineInteractiveProvider.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractive.d.ts +199 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractive.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveAnimatedPath.d.ts +26 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveAnimatedPath.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveHoverDate.d.ts +5 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveHoverDate.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveHoverPrice.d.ts +5 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveHoverPrice.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveLineVertical.d.ts +8 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveLineVertical.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveMarkerDates.d.ts +17 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveMarkerDates.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractivePaths.d.ts +25 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractivePaths.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractivePeriodSelector.d.ts +25 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractivePeriodSelector.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveProvider.d.ts +25 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveProvider.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveScrubHandler.d.ts +30 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveScrubHandler.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveScrubProvider.d.ts +18 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveScrubProvider.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveTimeseriesPaths.d.ts +31 -0
- package/dts/sparkline/sparkline-interactive/SparklineInteractiveTimeseriesPaths.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive/__figma__/SparklineInteractive.figma.d.ts +2 -0
- package/dts/sparkline/sparkline-interactive/__figma__/SparklineInteractive.figma.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive/fade.d.ts +3 -0
- package/dts/sparkline/sparkline-interactive/fade.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive/useSparklineInteractiveConstants.d.ts +13 -0
- package/dts/sparkline/sparkline-interactive/useSparklineInteractiveConstants.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive-header/SparklineInteractiveHeader.d.ts +112 -0
- package/dts/sparkline/sparkline-interactive-header/SparklineInteractiveHeader.d.ts.map +1 -0
- package/dts/sparkline/sparkline-interactive-header/__figma__/SparklineInteractiveHeader.figma.d.ts +2 -0
- package/dts/sparkline/sparkline-interactive-header/__figma__/SparklineInteractiveHeader.figma.d.ts.map +1 -0
- package/esm/chart/CartesianChart.css +1 -0
- package/esm/chart/CartesianChart.js +258 -0
- package/esm/chart/ChartProvider.js +10 -0
- package/esm/chart/Path.js +89 -0
- package/esm/chart/PeriodSelector.css +1 -0
- package/esm/chart/PeriodSelector.js +126 -0
- package/esm/chart/Point.css +2 -0
- package/esm/chart/Point.js +171 -0
- package/esm/chart/area/Area.js +85 -0
- package/esm/chart/area/AreaChart.js +164 -0
- package/esm/chart/area/DottedArea.js +141 -0
- package/esm/chart/area/GradientArea.js +111 -0
- package/esm/chart/area/SolidArea.js +29 -0
- package/esm/chart/area/index.js +7 -0
- package/esm/chart/axis/Axis.js +46 -0
- package/esm/chart/axis/XAxis.css +2 -0
- package/esm/chart/axis/XAxis.js +195 -0
- package/esm/chart/axis/YAxis.css +2 -0
- package/esm/chart/axis/YAxis.js +183 -0
- package/esm/chart/axis/index.js +5 -0
- package/esm/chart/bar/Bar.js +59 -0
- package/esm/chart/bar/BarChart.js +147 -0
- package/esm/chart/bar/BarPlot.js +96 -0
- package/esm/chart/bar/BarStack.js +519 -0
- package/esm/chart/bar/BarStackGroup.js +96 -0
- package/esm/chart/bar/DefaultBar.js +64 -0
- package/esm/chart/bar/DefaultBarStack.js +60 -0
- package/esm/chart/bar/index.js +9 -0
- package/esm/chart/index.js +14 -0
- package/esm/chart/line/DottedLine.js +38 -0
- package/esm/chart/line/GradientLine.js +58 -0
- package/esm/chart/line/Line.js +159 -0
- package/esm/chart/line/LineChart.js +120 -0
- package/esm/chart/line/ReferenceLine.js +142 -0
- package/esm/chart/line/SolidLine.js +34 -0
- package/esm/chart/line/index.js +8 -0
- package/esm/chart/scrubber/Scrubber.js +483 -0
- package/esm/chart/scrubber/ScrubberBeacon.js +195 -0
- package/esm/chart/scrubber/ScrubberBeaconLabel.js +33 -0
- package/esm/chart/scrubber/ScrubberProvider.js +228 -0
- package/esm/chart/scrubber/index.js +2 -0
- package/esm/chart/text/ChartText.js +236 -0
- package/esm/chart/text/SmartChartTextGroup.js +226 -0
- package/esm/chart/text/index.js +4 -0
- package/esm/chart/utils/axis.js +593 -0
- package/esm/chart/utils/bar.js +24 -0
- package/esm/chart/utils/chart.js +229 -0
- package/esm/chart/utils/context.js +15 -0
- package/esm/chart/utils/index.js +9 -0
- package/esm/chart/utils/path.js +204 -0
- package/esm/chart/utils/point.js +118 -0
- package/esm/chart/utils/scale.js +48 -0
- package/esm/index.js +4 -0
- package/esm/sparkline/Counter.css +3 -0
- package/esm/sparkline/Counter.js +35 -0
- package/esm/sparkline/Sparkline.js +164 -0
- package/esm/sparkline/SparklineArea.js +18 -0
- package/esm/sparkline/SparklineAreaPattern.js +37 -0
- package/esm/sparkline/SparklineGradient.js +30 -0
- package/esm/sparkline/SparklinePath.js +19 -0
- package/esm/sparkline/__figma__/Sparkline.figma.js +24 -0
- package/esm/sparkline/generateSparklineWithId.js +7 -0
- package/esm/sparkline/index.js +5 -0
- package/esm/sparkline/sparkline-interactive/InnerSparklineInteractiveProvider.js +21 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractive.js +317 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractiveAnimatedPath.js +108 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractiveHoverDate.css +2 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractiveHoverDate.js +26 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractiveHoverPrice.css +2 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractiveHoverPrice.js +24 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractiveLineVertical.css +4 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractiveLineVertical.js +65 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractiveMarkerDates.css +1 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractiveMarkerDates.js +80 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractivePaths.js +56 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractivePeriodSelector.js +70 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractiveProvider.js +45 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractiveScrubHandler.css +5 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractiveScrubHandler.js +199 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractiveScrubProvider.js +39 -0
- package/esm/sparkline/sparkline-interactive/SparklineInteractiveTimeseriesPaths.js +92 -0
- package/esm/sparkline/sparkline-interactive/__figma__/SparklineInteractive.figma.js +89 -0
- package/esm/sparkline/sparkline-interactive/fade.css +2 -0
- package/esm/sparkline/sparkline-interactive/fade.js +14 -0
- package/esm/sparkline/sparkline-interactive/useSparklineInteractiveConstants.js +28 -0
- package/esm/sparkline/sparkline-interactive-header/SparklineInteractiveHeader.js +225 -0
- package/esm/sparkline/sparkline-interactive-header/__figma__/SparklineInteractiveHeader.figma.js +108 -0
- package/package.json +68 -6
- 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
|
+
}));
|
package/esm/sparkline/sparkline-interactive-header/__figma__/SparklineInteractiveHeader.figma.js
ADDED
|
@@ -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": "
|
|
4
|
-
"description": "
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
|
|
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");
|