@artsy/palette-charts 44.14.0-canary.1497.33070.0 → 44.14.0-canary.1497.33079.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/elements/BarChart/Bar.js.map +1 -0
- package/dist/cjs/elements/BarChart/BarChart.js.map +1 -0
- package/dist/cjs/elements/BarChart/BarChart.story.js.map +1 -0
- package/dist/cjs/elements/BarChart/index.js.map +1 -0
- package/dist/cjs/elements/DataVis/ChartHoverTooltip.js.map +1 -0
- package/dist/cjs/elements/DataVis/ChartTooltip.js.map +1 -0
- package/dist/cjs/elements/DataVis/MousePositionContext.js.map +1 -0
- package/dist/cjs/elements/DataVis/useIntersectionObserver.js.map +1 -0
- package/dist/cjs/elements/DataVis/utils/SharedTypes.js.map +1 -0
- package/dist/cjs/elements/DataVis/utils/useWrapperWidth.js.map +1 -0
- package/dist/cjs/elements/DonutChart/DonutChart.js.map +1 -0
- package/dist/cjs/elements/DonutChart/DonutChart.story.js.map +1 -0
- package/dist/cjs/elements/DonutChart/index.js.map +1 -0
- package/dist/cjs/elements/LineChart/Line.js.map +1 -0
- package/dist/cjs/elements/LineChart/LineChart.js.map +1 -0
- package/dist/cjs/elements/LineChart/LineChart.story.js.map +1 -0
- package/dist/cjs/elements/LineChart/LineChartSVG.js.map +1 -0
- package/dist/cjs/elements/LineChart/Point.js.map +1 -0
- package/dist/cjs/elements/LineChart/index.js.map +1 -0
- package/dist/cjs/elements/index.js.map +1 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/esm/elements/BarChart/Bar.js +145 -0
- package/dist/esm/elements/BarChart/Bar.js.map +1 -0
- package/dist/esm/elements/BarChart/BarChart.js +155 -0
- package/dist/esm/elements/BarChart/BarChart.js.map +1 -0
- package/dist/esm/elements/BarChart/BarChart.story.js +159 -0
- package/dist/esm/elements/BarChart/BarChart.story.js.map +1 -0
- package/dist/esm/elements/BarChart/index.js +3 -0
- package/dist/esm/elements/BarChart/index.js.map +1 -0
- package/dist/esm/elements/DataVis/ChartHoverTooltip.js +40 -0
- package/dist/esm/elements/DataVis/ChartHoverTooltip.js.map +1 -0
- package/dist/esm/elements/DataVis/ChartTooltip.js +57 -0
- package/dist/esm/elements/DataVis/ChartTooltip.js.map +1 -0
- package/dist/esm/elements/DataVis/MousePositionContext.js +42 -0
- package/dist/esm/elements/DataVis/MousePositionContext.js.map +1 -0
- package/dist/esm/elements/DataVis/useIntersectionObserver.js +60 -0
- package/dist/esm/elements/DataVis/useIntersectionObserver.js.map +1 -0
- package/dist/esm/elements/DataVis/utils/SharedTypes.js +2 -0
- package/dist/esm/elements/DataVis/utils/SharedTypes.js.map +1 -0
- package/dist/esm/elements/DataVis/utils/useWrapperWidth.js +35 -0
- package/dist/esm/elements/DataVis/utils/useWrapperWidth.js.map +1 -0
- package/dist/esm/elements/DonutChart/DonutChart.js +151 -0
- package/dist/esm/elements/DonutChart/DonutChart.js.map +1 -0
- package/dist/esm/elements/DonutChart/DonutChart.story.js +36 -0
- package/dist/esm/elements/DonutChart/DonutChart.story.js.map +1 -0
- package/dist/esm/elements/DonutChart/index.js +2 -0
- package/dist/esm/elements/DonutChart/index.js.map +1 -0
- package/dist/esm/elements/LineChart/Line.js +20 -0
- package/dist/esm/elements/LineChart/Line.js.map +1 -0
- package/dist/esm/elements/LineChart/LineChart.js +115 -0
- package/dist/esm/elements/LineChart/LineChart.js.map +1 -0
- package/dist/esm/elements/LineChart/LineChart.story.js +66 -0
- package/dist/esm/elements/LineChart/LineChart.story.js.map +1 -0
- package/dist/esm/elements/LineChart/LineChartSVG.js +83 -0
- package/dist/esm/elements/LineChart/LineChartSVG.js.map +1 -0
- package/dist/esm/elements/LineChart/Point.js +28 -0
- package/dist/esm/elements/LineChart/Point.js.map +1 -0
- package/dist/esm/elements/LineChart/index.js +2 -0
- package/dist/esm/elements/LineChart/index.js.map +1 -0
- package/dist/esm/elements/index.js +4 -0
- package/dist/esm/elements/index.js.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +20 -9
- package/dist/elements/BarChart/Bar.js.map +0 -1
- package/dist/elements/BarChart/BarChart.js.map +0 -1
- package/dist/elements/BarChart/BarChart.story.js.map +0 -1
- package/dist/elements/BarChart/index.js.map +0 -1
- package/dist/elements/DataVis/ChartHoverTooltip.js.map +0 -1
- package/dist/elements/DataVis/ChartTooltip.js.map +0 -1
- package/dist/elements/DataVis/MousePositionContext.js.map +0 -1
- package/dist/elements/DataVis/useIntersectionObserver.js.map +0 -1
- package/dist/elements/DataVis/utils/SharedTypes.js.map +0 -1
- package/dist/elements/DataVis/utils/useWrapperWidth.js.map +0 -1
- package/dist/elements/DonutChart/DonutChart.js.map +0 -1
- package/dist/elements/DonutChart/DonutChart.story.js.map +0 -1
- package/dist/elements/DonutChart/index.js.map +0 -1
- package/dist/elements/LineChart/Line.js.map +0 -1
- package/dist/elements/LineChart/LineChart.js.map +0 -1
- package/dist/elements/LineChart/LineChart.story.js.map +0 -1
- package/dist/elements/LineChart/LineChartSVG.js.map +0 -1
- package/dist/elements/LineChart/Point.js.map +0 -1
- package/dist/elements/LineChart/index.js.map +0 -1
- package/dist/elements/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- /package/dist/{elements → cjs/elements}/BarChart/Bar.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/BarChart/Bar.js +0 -0
- /package/dist/{elements → cjs/elements}/BarChart/BarChart.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/BarChart/BarChart.js +0 -0
- /package/dist/{elements → cjs/elements}/BarChart/BarChart.story.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/BarChart/BarChart.story.js +0 -0
- /package/dist/{elements → cjs/elements}/BarChart/index.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/BarChart/index.js +0 -0
- /package/dist/{elements → cjs/elements}/DataVis/ChartHoverTooltip.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/DataVis/ChartHoverTooltip.js +0 -0
- /package/dist/{elements → cjs/elements}/DataVis/ChartTooltip.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/DataVis/ChartTooltip.js +0 -0
- /package/dist/{elements → cjs/elements}/DataVis/MousePositionContext.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/DataVis/MousePositionContext.js +0 -0
- /package/dist/{elements → cjs/elements}/DataVis/useIntersectionObserver.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/DataVis/useIntersectionObserver.js +0 -0
- /package/dist/{elements → cjs/elements}/DataVis/utils/SharedTypes.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/DataVis/utils/SharedTypes.js +0 -0
- /package/dist/{elements → cjs/elements}/DataVis/utils/useWrapperWidth.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/DataVis/utils/useWrapperWidth.js +0 -0
- /package/dist/{elements → cjs/elements}/DonutChart/DonutChart.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/DonutChart/DonutChart.js +0 -0
- /package/dist/{elements → cjs/elements}/DonutChart/DonutChart.story.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/DonutChart/DonutChart.story.js +0 -0
- /package/dist/{elements → cjs/elements}/DonutChart/index.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/DonutChart/index.js +0 -0
- /package/dist/{elements → cjs/elements}/LineChart/Line.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/LineChart/Line.js +0 -0
- /package/dist/{elements → cjs/elements}/LineChart/LineChart.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/LineChart/LineChart.js +0 -0
- /package/dist/{elements → cjs/elements}/LineChart/LineChart.story.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/LineChart/LineChart.story.js +0 -0
- /package/dist/{elements → cjs/elements}/LineChart/LineChartSVG.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/LineChart/LineChartSVG.js +0 -0
- /package/dist/{elements → cjs/elements}/LineChart/Point.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/LineChart/Point.js +0 -0
- /package/dist/{elements → cjs/elements}/LineChart/index.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/LineChart/index.js +0 -0
- /package/dist/{elements → cjs/elements}/index.d.ts +0 -0
- /package/dist/{elements → cjs/elements}/index.js +0 -0
- /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
- /package/dist/{index.js → cjs/index.js} +0 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
2
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
4
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
5
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
6
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
7
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
8
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
9
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
10
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
11
|
+
import { Flex, Text } from "@artsy/palette";
|
|
12
|
+
import { themeGet } from "@styled-system/theme-get";
|
|
13
|
+
import React, { useEffect, useRef, useState } from "react";
|
|
14
|
+
import styled from "styled-components";
|
|
15
|
+
import { coerceTooltip } from "../DataVis/ChartTooltip";
|
|
16
|
+
import { ProvideMousePosition } from "../DataVis/MousePositionContext";
|
|
17
|
+
import { useIntersectionObserver } from "../DataVis/useIntersectionObserver";
|
|
18
|
+
import { Bar } from "./Bar";
|
|
19
|
+
var ChartContainer = styled(Flex).withConfig({
|
|
20
|
+
displayName: "BarChart__ChartContainer",
|
|
21
|
+
componentId: "sc-1317yz6-0"
|
|
22
|
+
})(["border-bottom:1px solid ", ";"], themeGet("colors.mono10"));
|
|
23
|
+
function useHighlightLabelPositionConstraints(wrapperDiv, labelDiv) {
|
|
24
|
+
// Constrain highlight label to be within the bounds of the graph
|
|
25
|
+
useEffect(function () {
|
|
26
|
+
if (!wrapperDiv || !labelDiv) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
// reset highlight label position
|
|
30
|
+
labelDiv.style.left = null;
|
|
31
|
+
labelDiv.style.right = null;
|
|
32
|
+
// force layout to find centered position
|
|
33
|
+
labelDiv.offsetWidth;
|
|
34
|
+
var wrapperRect = wrapperDiv.getBoundingClientRect();
|
|
35
|
+
var labelRect = labelDiv.getBoundingClientRect();
|
|
36
|
+
|
|
37
|
+
// check for overlap with BarChart left bound
|
|
38
|
+
var labelLeftOffset = wrapperRect.left - labelRect.left;
|
|
39
|
+
if (labelLeftOffset > 0) {
|
|
40
|
+
// label is too far to the left, compensate
|
|
41
|
+
labelDiv.style.left = labelLeftOffset + "px";
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// check for overlap with BarChart right bound
|
|
45
|
+
var labelRightOffset = labelRect.right - wrapperRect.right;
|
|
46
|
+
if (labelRightOffset > 0) {
|
|
47
|
+
// label is too far to the right, compensate
|
|
48
|
+
labelDiv.style.right = labelRightOffset + "px";
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* BarChart is a component which displays some bars of varying heights in a row.
|
|
54
|
+
* Useful for histograms etc.
|
|
55
|
+
* @param props props
|
|
56
|
+
*/
|
|
57
|
+
export var BarChart = function BarChart(_ref) {
|
|
58
|
+
var bars = _ref.bars,
|
|
59
|
+
minLabel = _ref.minLabel,
|
|
60
|
+
maxLabel = _ref.maxLabel,
|
|
61
|
+
primaryColor = _ref.primaryColor,
|
|
62
|
+
hoverColor = _ref.hoverColor,
|
|
63
|
+
highlightColor = _ref.highlightColor;
|
|
64
|
+
var highlightLabelRef = useRef(null);
|
|
65
|
+
var _useState = useState(false),
|
|
66
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
67
|
+
hasEnteredViewport = _useState2[0],
|
|
68
|
+
setHasEnteredViewport = _useState2[1];
|
|
69
|
+
var _useIntersectionObser = useIntersectionObserver({
|
|
70
|
+
once: true,
|
|
71
|
+
options: {
|
|
72
|
+
threshold: 0.2
|
|
73
|
+
},
|
|
74
|
+
onIntersection: function onIntersection() {
|
|
75
|
+
setHasEnteredViewport(true);
|
|
76
|
+
}
|
|
77
|
+
}),
|
|
78
|
+
wrapperRef = _useIntersectionObser.ref;
|
|
79
|
+
useHighlightLabelPositionConstraints(wrapperRef.current, highlightLabelRef.current);
|
|
80
|
+
var _useState3 = useState(0),
|
|
81
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
82
|
+
minHeight = _useState4[0],
|
|
83
|
+
setMinHeight = _useState4[1];
|
|
84
|
+
var maxValue = Math.max.apply(Math, _toConsumableArray(bars.map(function (_ref2) {
|
|
85
|
+
var value = _ref2.value;
|
|
86
|
+
return value;
|
|
87
|
+
})));
|
|
88
|
+
var allZero = bars.every(function (item) {
|
|
89
|
+
return item.value === 0;
|
|
90
|
+
});
|
|
91
|
+
return /*#__PURE__*/React.createElement(ProvideMousePosition, null, /*#__PURE__*/React.createElement(Flex, {
|
|
92
|
+
flexDirection: "column",
|
|
93
|
+
ref: wrapperRef,
|
|
94
|
+
flexGrow: 1,
|
|
95
|
+
id: "flex-wrapper"
|
|
96
|
+
}, /*#__PURE__*/React.createElement(ChartContainer, {
|
|
97
|
+
height: "80px",
|
|
98
|
+
alignItems: "flex-end",
|
|
99
|
+
mb: 0.5,
|
|
100
|
+
style: {
|
|
101
|
+
minHeight: minHeight
|
|
102
|
+
}
|
|
103
|
+
}, bars.map(function (_ref3, index) {
|
|
104
|
+
var value = _ref3.value,
|
|
105
|
+
label = _ref3.label,
|
|
106
|
+
axisLabelX = _ref3.axisLabelX,
|
|
107
|
+
highlightLabel = _ref3.highlightLabel,
|
|
108
|
+
onClick = _ref3.onClick,
|
|
109
|
+
onHover = _ref3.onHover;
|
|
110
|
+
var heightPercent = maxValue === 0 ? 100 : 100 / maxValue * value;
|
|
111
|
+
return /*#__PURE__*/React.createElement(Bar, {
|
|
112
|
+
key: index,
|
|
113
|
+
heightPercent: allZero ? 0 : heightPercent,
|
|
114
|
+
label: coerceTooltip(label),
|
|
115
|
+
axisLabelX: axisLabelX,
|
|
116
|
+
highlightLabelRef: highlightLabelRef,
|
|
117
|
+
highlightLabel: coerceTooltip(highlightLabel),
|
|
118
|
+
hasEnteredViewport: hasEnteredViewport,
|
|
119
|
+
onMeasureHeight: highlightLabel ? setMinHeight : null,
|
|
120
|
+
onClick: onClick,
|
|
121
|
+
onHover: onHover,
|
|
122
|
+
primaryColor: primaryColor,
|
|
123
|
+
hoverColor: hoverColor,
|
|
124
|
+
highlightColor: highlightColor
|
|
125
|
+
});
|
|
126
|
+
})), /*#__PURE__*/React.createElement(Flex, {
|
|
127
|
+
justifyContent: "space-between"
|
|
128
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
129
|
+
color: "mono60",
|
|
130
|
+
variant: "xs"
|
|
131
|
+
}, minLabel), /*#__PURE__*/React.createElement(Text, {
|
|
132
|
+
color: "mono60",
|
|
133
|
+
variant: "xs"
|
|
134
|
+
}, maxLabel)), bars.filter(function (bar) {
|
|
135
|
+
return bar.axisLabelX;
|
|
136
|
+
}).length > 0 && /*#__PURE__*/React.createElement(Flex, null, bars.map(function (_ref4, i) {
|
|
137
|
+
var axisLabelX = _ref4.axisLabelX;
|
|
138
|
+
return /*#__PURE__*/React.createElement(BarAxisLabelContainer, {
|
|
139
|
+
key: i
|
|
140
|
+
}, /*#__PURE__*/React.createElement(AxisLabelX, {
|
|
141
|
+
color: "mono60",
|
|
142
|
+
variant: "xs"
|
|
143
|
+
}, axisLabelX));
|
|
144
|
+
}))));
|
|
145
|
+
};
|
|
146
|
+
BarChart.displayName = "BarChart";
|
|
147
|
+
var BarAxisLabelContainer = styled.div.withConfig({
|
|
148
|
+
displayName: "BarChart__BarAxisLabelContainer",
|
|
149
|
+
componentId: "sc-1317yz6-1"
|
|
150
|
+
})(["flex:1;min-height:", ";position:relative;"], themeGet("space.2"));
|
|
151
|
+
var AxisLabelX = styled(Text).withConfig({
|
|
152
|
+
displayName: "BarChart__AxisLabelX",
|
|
153
|
+
componentId: "sc-1317yz6-2"
|
|
154
|
+
})(["position:absolute;text-align:center;white-space:nowrap;left:50%;transform:translateX(-50%);"]);
|
|
155
|
+
//# sourceMappingURL=BarChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BarChart.js","names":["Flex","Text","themeGet","React","useEffect","useRef","useState","styled","coerceTooltip","ProvideMousePosition","useIntersectionObserver","Bar","ChartContainer","withConfig","displayName","componentId","useHighlightLabelPositionConstraints","wrapperDiv","labelDiv","style","left","right","offsetWidth","wrapperRect","getBoundingClientRect","labelRect","labelLeftOffset","labelRightOffset","BarChart","_ref","bars","minLabel","maxLabel","primaryColor","hoverColor","highlightColor","highlightLabelRef","_useState","_useState2","_slicedToArray","hasEnteredViewport","setHasEnteredViewport","_useIntersectionObser","once","options","threshold","onIntersection","wrapperRef","ref","current","_useState3","_useState4","minHeight","setMinHeight","maxValue","Math","max","apply","_toConsumableArray","map","_ref2","value","allZero","every","item","createElement","flexDirection","flexGrow","id","height","alignItems","mb","_ref3","index","label","axisLabelX","highlightLabel","onClick","onHover","heightPercent","key","onMeasureHeight","justifyContent","color","variant","filter","bar","length","_ref4","i","BarAxisLabelContainer","AxisLabelX","div"],"sources":["../../../../src/elements/BarChart/BarChart.tsx"],"sourcesContent":["import { Color, Flex, Text } from \"@artsy/palette\"\nimport { themeGet } from \"@styled-system/theme-get\"\nimport React, { useEffect, useRef, useState } from \"react\"\nimport styled from \"styled-components\"\nimport { ChartTooltipProps, coerceTooltip } from \"../DataVis/ChartTooltip\"\nimport { ProvideMousePosition } from \"../DataVis/MousePositionContext\"\nimport { useIntersectionObserver } from \"../DataVis/useIntersectionObserver\"\nimport { Bar } from \"./Bar\"\n\nconst ChartContainer = styled(Flex)`\n border-bottom: 1px solid ${themeGet(\"colors.mono10\")};\n`\n\nfunction useHighlightLabelPositionConstraints(\n wrapperDiv: HTMLDivElement | null,\n labelDiv: HTMLDivElement | null\n) {\n // Constrain highlight label to be within the bounds of the graph\n useEffect(() => {\n if (!wrapperDiv || !labelDiv) {\n return\n }\n // reset highlight label position\n labelDiv.style.left = null\n labelDiv.style.right = null\n // force layout to find centered position\n labelDiv.offsetWidth\n\n const wrapperRect = wrapperDiv.getBoundingClientRect()\n const labelRect = labelDiv.getBoundingClientRect()\n\n // check for overlap with BarChart left bound\n const labelLeftOffset = wrapperRect.left - labelRect.left\n if (labelLeftOffset > 0) {\n // label is too far to the left, compensate\n labelDiv.style.left = labelLeftOffset + \"px\"\n return\n }\n // check for overlap with BarChart right bound\n const labelRightOffset = labelRect.right - wrapperRect.right\n if (labelRightOffset > 0) {\n // label is too far to the right, compensate\n labelDiv.style.right = labelRightOffset + \"px\"\n }\n })\n}\n\nexport interface BarDescriptor {\n value: number\n label?: React.ReactNode | ChartTooltipProps\n axisLabelX?: React.ReactNode\n highlightLabel?: React.ReactNode | ChartTooltipProps\n onClick?: any\n onHover?: any\n}\n\nexport interface BarChartProps {\n bars: BarDescriptor[]\n minLabel: React.ReactNode\n maxLabel: React.ReactNode\n primaryColor?: Color\n hoverColor?: Color\n highlightColor?: Color\n}\n/**\n * BarChart is a component which displays some bars of varying heights in a row.\n * Useful for histograms etc.\n * @param props props\n */\nexport const BarChart = ({ bars, minLabel, maxLabel, primaryColor, hoverColor, highlightColor }: BarChartProps) => {\n const highlightLabelRef = useRef<HTMLDivElement>(null)\n const [hasEnteredViewport, setHasEnteredViewport] = useState(false)\n\n const { ref: wrapperRef } = useIntersectionObserver({\n once: true,\n options: { threshold: 0.2 },\n onIntersection: () => {\n setHasEnteredViewport(true)\n },\n })\n\n useHighlightLabelPositionConstraints(\n wrapperRef.current as HTMLDivElement,\n highlightLabelRef.current\n )\n\n const [minHeight, setMinHeight] = useState(0)\n const maxValue = Math.max(...bars.map(({ value }) => value))\n const allZero = bars.every((item) => item.value === 0)\n return (\n <ProvideMousePosition>\n <Flex\n flexDirection=\"column\"\n ref={wrapperRef as any}\n flexGrow={1}\n id=\"flex-wrapper\"\n >\n <ChartContainer\n height=\"80px\"\n alignItems=\"flex-end\"\n mb={0.5}\n style={{ minHeight }}\n >\n {bars.map(\n (\n { value, label, axisLabelX, highlightLabel, onClick, onHover },\n index\n ) => {\n const heightPercent =\n maxValue === 0 ? 100 : (100 / maxValue) * value\n return (\n <Bar\n key={index}\n heightPercent={allZero ? 0 : heightPercent}\n label={coerceTooltip(label)}\n axisLabelX={axisLabelX}\n highlightLabelRef={highlightLabelRef}\n highlightLabel={coerceTooltip(highlightLabel)}\n hasEnteredViewport={hasEnteredViewport}\n onMeasureHeight={highlightLabel ? setMinHeight : null}\n onClick={onClick}\n onHover={onHover}\n primaryColor={primaryColor}\n hoverColor={hoverColor}\n highlightColor={highlightColor}\n />\n )\n }\n )}\n </ChartContainer>\n\n <Flex justifyContent=\"space-between\">\n <Text color=\"mono60\" variant=\"xs\">\n {minLabel}\n </Text>\n\n <Text color=\"mono60\" variant=\"xs\">\n {maxLabel}\n </Text>\n </Flex>\n\n {bars.filter((bar) => bar.axisLabelX).length > 0 && (\n <Flex>\n {bars.map(({ axisLabelX }, i) => (\n <BarAxisLabelContainer key={i}>\n <AxisLabelX color=\"mono60\" variant=\"xs\">\n {axisLabelX}\n </AxisLabelX>\n </BarAxisLabelContainer>\n ))}\n </Flex>\n )}\n </Flex>\n </ProvideMousePosition>\n )\n}\n\nconst BarAxisLabelContainer = styled.div`\n flex: 1;\n min-height: ${themeGet(\"space.2\")};\n position: relative;\n`\n\nconst AxisLabelX = styled(Text)`\n position: absolute;\n text-align: center;\n white-space: nowrap;\n left: 50%;\n transform: translateX(-50%);\n`\n"],"mappings":";;;;;;;;;;AAAA,SAAgBA,IAAI,EAAEC,IAAI,QAAQ,gBAAgB;AAClD,SAASC,QAAQ,QAAQ,0BAA0B;AACnD,OAAOC,KAAK,IAAIC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAC1D,OAAOC,MAAM,MAAM,mBAAmB;AACtC,SAA4BC,aAAa;AACzC,SAASC,oBAAoB;AAC7B,SAASC,uBAAuB;AAChC,SAASC,GAAG;AAEZ,IAAMC,cAAc,GAAGL,MAAM,CAACP,IAAI,CAAC,CAAAa,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,sCACNb,QAAQ,CAAC,eAAe,CAAC,CACrD;AAED,SAASc,oCAAoCA,CAC3CC,UAAiC,EACjCC,QAA+B,EAC/B;EACA;EACAd,SAAS,CAAC,YAAM;IACd,IAAI,CAACa,UAAU,IAAI,CAACC,QAAQ,EAAE;MAC5B;IACF;IACA;IACAA,QAAQ,CAACC,KAAK,CAACC,IAAI,GAAG,IAAI;IAC1BF,QAAQ,CAACC,KAAK,CAACE,KAAK,GAAG,IAAI;IAC3B;IACAH,QAAQ,CAACI,WAAW;IAEpB,IAAMC,WAAW,GAAGN,UAAU,CAACO,qBAAqB,EAAE;IACtD,IAAMC,SAAS,GAAGP,QAAQ,CAACM,qBAAqB,EAAE;;IAElD;IACA,IAAME,eAAe,GAAGH,WAAW,CAACH,IAAI,GAAGK,SAAS,CAACL,IAAI;IACzD,IAAIM,eAAe,GAAG,CAAC,EAAE;MACvB;MACAR,QAAQ,CAACC,KAAK,CAACC,IAAI,GAAGM,eAAe,GAAG,IAAI;MAC5C;IACF;IACA;IACA,IAAMC,gBAAgB,GAAGF,SAAS,CAACJ,KAAK,GAAGE,WAAW,CAACF,KAAK;IAC5D,IAAIM,gBAAgB,GAAG,CAAC,EAAE;MACxB;MACAT,QAAQ,CAACC,KAAK,CAACE,KAAK,GAAGM,gBAAgB,GAAG,IAAI;IAChD;EACF,CAAC,CAAC;AACJ;AAmBA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,QAAQ,GAAG,SAAXA,QAAQA,CAAAC,IAAA,EAA8F;EAAA,IAAxFC,IAAI,GAAAD,IAAA,CAAJC,IAAI;IAAEC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;IAAEC,QAAQ,GAAAH,IAAA,CAARG,QAAQ;IAAEC,YAAY,GAAAJ,IAAA,CAAZI,YAAY;IAAEC,UAAU,GAAAL,IAAA,CAAVK,UAAU;IAAEC,cAAc,GAAAN,IAAA,CAAdM,cAAc;EAC3F,IAAMC,iBAAiB,GAAG/B,MAAM,CAAiB,IAAI,CAAC;EACtD,IAAAgC,SAAA,GAAoD/B,QAAQ,CAAC,KAAK,CAAC;IAAAgC,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAA5DG,kBAAkB,GAAAF,UAAA;IAAEG,qBAAqB,GAAAH,UAAA;EAEhD,IAAAI,qBAAA,GAA4BhC,uBAAuB,CAAC;MAClDiC,IAAI,EAAE,IAAI;MACVC,OAAO,EAAE;QAAEC,SAAS,EAAE;MAAI,CAAC;MAC3BC,cAAc,EAAE,SAAAA,eAAA,EAAM;QACpBL,qBAAqB,CAAC,IAAI,CAAC;MAC7B;IACF,CAAC,CAAC;IANWM,UAAU,GAAAL,qBAAA,CAAfM,GAAG;EAQXhC,oCAAoC,CAClC+B,UAAU,CAACE,OAAO,EAClBb,iBAAiB,CAACa,OAAO,CAC1B;EAED,IAAAC,UAAA,GAAkC5C,QAAQ,CAAC,CAAC,CAAC;IAAA6C,UAAA,GAAAZ,cAAA,CAAAW,UAAA;IAAtCE,SAAS,GAAAD,UAAA;IAAEE,YAAY,GAAAF,UAAA;EAC9B,IAAMG,QAAQ,GAAGC,IAAI,CAACC,GAAG,CAAAC,KAAA,CAARF,IAAI,EAAAG,kBAAA,CAAQ5B,IAAI,CAAC6B,GAAG,CAAC,UAAAC,KAAA;IAAA,IAAGC,KAAK,GAAAD,KAAA,CAALC,KAAK;IAAA,OAAOA,KAAK;EAAA,EAAC,EAAC;EAC5D,IAAMC,OAAO,GAAGhC,IAAI,CAACiC,KAAK,CAAC,UAACC,IAAI;IAAA,OAAKA,IAAI,CAACH,KAAK,KAAK,CAAC;EAAA,EAAC;EACtD,oBACE1D,KAAA,CAAA8D,aAAA,CAACxD,oBAAoB,qBACnBN,KAAA,CAAA8D,aAAA,CAACjE,IAAI;IACHkE,aAAa,EAAC,QAAQ;IACtBlB,GAAG,EAAED,UAAkB;IACvBoB,QAAQ,EAAE,CAAE;IACZC,EAAE,EAAC;EAAc,gBAEjBjE,KAAA,CAAA8D,aAAA,CAACrD,cAAc;IACbyD,MAAM,EAAC,MAAM;IACbC,UAAU,EAAC,UAAU;IACrBC,EAAE,EAAE,GAAI;IACRpD,KAAK,EAAE;MAAEiC,SAAS,EAATA;IAAU;EAAE,GAEpBtB,IAAI,CAAC6B,GAAG,CACP,UAAAa,KAAA,EAEEC,KAAK,EACF;IAAA,IAFDZ,KAAK,GAAAW,KAAA,CAALX,KAAK;MAAEa,KAAK,GAAAF,KAAA,CAALE,KAAK;MAAEC,UAAU,GAAAH,KAAA,CAAVG,UAAU;MAAEC,cAAc,GAAAJ,KAAA,CAAdI,cAAc;MAAEC,OAAO,GAAAL,KAAA,CAAPK,OAAO;MAAEC,OAAO,GAAAN,KAAA,CAAPM,OAAO;IAG5D,IAAMC,aAAa,GACjBzB,QAAQ,KAAK,CAAC,GAAG,GAAG,GAAI,GAAG,GAAGA,QAAQ,GAAIO,KAAK;IACjD,oBACE1D,KAAA,CAAA8D,aAAA,CAACtD,GAAG;MACFqE,GAAG,EAAEP,KAAM;MACXM,aAAa,EAAEjB,OAAO,GAAG,CAAC,GAAGiB,aAAc;MAC3CL,KAAK,EAAElE,aAAa,CAACkE,KAAK,CAAE;MAC5BC,UAAU,EAAEA,UAAW;MACvBvC,iBAAiB,EAAEA,iBAAkB;MACrCwC,cAAc,EAAEpE,aAAa,CAACoE,cAAc,CAAE;MAC9CpC,kBAAkB,EAAEA,kBAAmB;MACvCyC,eAAe,EAAEL,cAAc,GAAGvB,YAAY,GAAG,IAAK;MACtDwB,OAAO,EAAEA,OAAQ;MACjBC,OAAO,EAAEA,OAAQ;MACjB7C,YAAY,EAAEA,YAAa;MAC3BC,UAAU,EAAEA,UAAW;MACvBC,cAAc,EAAEA;IAAe,EAC/B;EAEN,CAAC,CACF,CACc,eAEjBhC,KAAA,CAAA8D,aAAA,CAACjE,IAAI;IAACkF,cAAc,EAAC;EAAe,gBAClC/E,KAAA,CAAA8D,aAAA,CAAChE,IAAI;IAACkF,KAAK,EAAC,QAAQ;IAACC,OAAO,EAAC;EAAI,GAC9BrD,QAAQ,CACJ,eAEP5B,KAAA,CAAA8D,aAAA,CAAChE,IAAI;IAACkF,KAAK,EAAC,QAAQ;IAACC,OAAO,EAAC;EAAI,GAC9BpD,QAAQ,CACJ,CACF,EAENF,IAAI,CAACuD,MAAM,CAAC,UAACC,GAAG;IAAA,OAAKA,GAAG,CAACX,UAAU;EAAA,EAAC,CAACY,MAAM,GAAG,CAAC,iBAC9CpF,KAAA,CAAA8D,aAAA,CAACjE,IAAI,QACF8B,IAAI,CAAC6B,GAAG,CAAC,UAAA6B,KAAA,EAAiBC,CAAC;IAAA,IAAfd,UAAU,GAAAa,KAAA,CAAVb,UAAU;IAAA,oBACrBxE,KAAA,CAAA8D,aAAA,CAACyB,qBAAqB;MAACV,GAAG,EAAES;IAAE,gBAC5BtF,KAAA,CAAA8D,aAAA,CAAC0B,UAAU;MAACR,KAAK,EAAC,QAAQ;MAACC,OAAO,EAAC;IAAI,GACpCT,UAAU,CACA,CACS;EAAA,CACzB,CAAC,CAEL,CACI,CACc;AAE3B,CAAC;AAtFY/C,QAAQ,CAAAd,WAAA;AAwFrB,IAAM4E,qBAAqB,GAAGnF,MAAM,CAACqF,GAAG,CAAA/E,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,kDAExBb,QAAQ,CAAC,SAAS,CAAC,CAElC;AAED,IAAMyF,UAAU,GAAGpF,MAAM,CAACN,IAAI,CAAC,CAAAY,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,mGAM9B"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { BarChart } from "./BarChart";
|
|
3
|
+
export default {
|
|
4
|
+
title: "Components/BarChart"
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
/** Default BarChart with standard colors */
|
|
8
|
+
export var Default = function Default() {
|
|
9
|
+
return /*#__PURE__*/React.createElement(BarChart, {
|
|
10
|
+
minLabel: "$0",
|
|
11
|
+
maxLabel: "$30,000",
|
|
12
|
+
bars: BARS
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
Default.displayName = "Default";
|
|
16
|
+
/** BarChart with custom primary and hover colors */
|
|
17
|
+
export var WithCustomColors = function WithCustomColors() {
|
|
18
|
+
return /*#__PURE__*/React.createElement(BarChart, {
|
|
19
|
+
minLabel: "$0",
|
|
20
|
+
maxLabel: "$30,000",
|
|
21
|
+
bars: BARS,
|
|
22
|
+
primaryColor: "blue100",
|
|
23
|
+
hoverColor: "red100",
|
|
24
|
+
highlightColor: "orange100"
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
WithCustomColors.displayName = "WithCustomColors";
|
|
28
|
+
var BARS = [{
|
|
29
|
+
value: 1,
|
|
30
|
+
label: {
|
|
31
|
+
title: "$0–$1,500",
|
|
32
|
+
description: "1 work"
|
|
33
|
+
}
|
|
34
|
+
}, {
|
|
35
|
+
value: 1,
|
|
36
|
+
label: {
|
|
37
|
+
title: "$1,500–$3,000",
|
|
38
|
+
description: "1 work"
|
|
39
|
+
}
|
|
40
|
+
}, {
|
|
41
|
+
value: 1,
|
|
42
|
+
label: {
|
|
43
|
+
title: "$3,000–$4,500",
|
|
44
|
+
description: "1 work"
|
|
45
|
+
}
|
|
46
|
+
}, {
|
|
47
|
+
value: 1,
|
|
48
|
+
label: {
|
|
49
|
+
title: "$4,500–$6,000",
|
|
50
|
+
description: "1 work"
|
|
51
|
+
}
|
|
52
|
+
}, {
|
|
53
|
+
value: 4,
|
|
54
|
+
label: {
|
|
55
|
+
title: "$6,000–$7,500",
|
|
56
|
+
description: "4 works"
|
|
57
|
+
}
|
|
58
|
+
}, {
|
|
59
|
+
value: 10,
|
|
60
|
+
label: {
|
|
61
|
+
title: "$7,500–$9,000",
|
|
62
|
+
description: "10 works"
|
|
63
|
+
}
|
|
64
|
+
}, {
|
|
65
|
+
value: 42,
|
|
66
|
+
label: {
|
|
67
|
+
title: "$9,000–$10,500",
|
|
68
|
+
description: "42 works"
|
|
69
|
+
}
|
|
70
|
+
}, {
|
|
71
|
+
value: 0,
|
|
72
|
+
label: {
|
|
73
|
+
title: "$10,500–$12,000",
|
|
74
|
+
description: "0 works"
|
|
75
|
+
}
|
|
76
|
+
}, {
|
|
77
|
+
value: 216,
|
|
78
|
+
label: {
|
|
79
|
+
title: "$12,000–$13,500",
|
|
80
|
+
description: "216 works"
|
|
81
|
+
}
|
|
82
|
+
}, {
|
|
83
|
+
value: 1,
|
|
84
|
+
label: {
|
|
85
|
+
title: "$13,500–$15,000",
|
|
86
|
+
description: "1 work"
|
|
87
|
+
}
|
|
88
|
+
}, {
|
|
89
|
+
value: 201,
|
|
90
|
+
label: {
|
|
91
|
+
title: "$15,000–$16,500",
|
|
92
|
+
description: "201 works"
|
|
93
|
+
},
|
|
94
|
+
highlightLabel: {
|
|
95
|
+
title: "$15,000–$16,500",
|
|
96
|
+
description: "This work"
|
|
97
|
+
}
|
|
98
|
+
}, {
|
|
99
|
+
value: 0,
|
|
100
|
+
label: {
|
|
101
|
+
title: "$16,500–$18,000",
|
|
102
|
+
description: "0 works"
|
|
103
|
+
}
|
|
104
|
+
}, {
|
|
105
|
+
value: 113,
|
|
106
|
+
label: {
|
|
107
|
+
title: "$18,000–$19,500",
|
|
108
|
+
description: "113 works"
|
|
109
|
+
}
|
|
110
|
+
}, {
|
|
111
|
+
value: 4,
|
|
112
|
+
label: {
|
|
113
|
+
title: "$19,500–$21,000",
|
|
114
|
+
description: "4 works"
|
|
115
|
+
}
|
|
116
|
+
}, {
|
|
117
|
+
value: 2,
|
|
118
|
+
label: {
|
|
119
|
+
title: "$21,000–$22,500",
|
|
120
|
+
description: "2 works"
|
|
121
|
+
}
|
|
122
|
+
}, {
|
|
123
|
+
value: 6,
|
|
124
|
+
label: {
|
|
125
|
+
title: "$22,500–$24,000",
|
|
126
|
+
description: "6 works"
|
|
127
|
+
}
|
|
128
|
+
}, {
|
|
129
|
+
value: 37,
|
|
130
|
+
label: {
|
|
131
|
+
title: "$24,000–$25,500",
|
|
132
|
+
description: "37 works"
|
|
133
|
+
}
|
|
134
|
+
}, {
|
|
135
|
+
value: 1,
|
|
136
|
+
label: {
|
|
137
|
+
title: "$25,500–$27,000",
|
|
138
|
+
description: "1 work"
|
|
139
|
+
}
|
|
140
|
+
}, {
|
|
141
|
+
value: 3,
|
|
142
|
+
label: {
|
|
143
|
+
title: "$27,000–$28,500",
|
|
144
|
+
description: "3 works"
|
|
145
|
+
}
|
|
146
|
+
}, {
|
|
147
|
+
value: 0,
|
|
148
|
+
label: {
|
|
149
|
+
title: "$28,500–$30,000",
|
|
150
|
+
description: "0 works"
|
|
151
|
+
}
|
|
152
|
+
}, {
|
|
153
|
+
value: 0,
|
|
154
|
+
label: {
|
|
155
|
+
title: "$30,000+",
|
|
156
|
+
description: "0 works"
|
|
157
|
+
}
|
|
158
|
+
}];
|
|
159
|
+
//# sourceMappingURL=BarChart.story.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BarChart.story.js","names":["React","BarChart","title","Default","createElement","minLabel","maxLabel","bars","BARS","displayName","WithCustomColors","primaryColor","hoverColor","highlightColor","value","label","description","highlightLabel"],"sources":["../../../../src/elements/BarChart/BarChart.story.tsx"],"sourcesContent":["import React from \"react\"\nimport { BarChart } from \"./BarChart\"\n\nexport default {\n title: \"Components/BarChart\",\n}\n\n/** Default BarChart with standard colors */\nexport const Default = () => {\n return <BarChart minLabel=\"$0\" maxLabel=\"$30,000\" bars={BARS} />\n}\n\n/** BarChart with custom primary and hover colors */\nexport const WithCustomColors = () => {\n return (\n <BarChart\n minLabel=\"$0\"\n maxLabel=\"$30,000\"\n bars={BARS}\n primaryColor=\"blue100\"\n hoverColor=\"red100\"\n highlightColor=\"orange100\"\n />\n )\n}\n\nconst BARS = [\n {\n value: 1,\n label: {\n title: \"$0–$1,500\",\n description: \"1 work\",\n },\n },\n {\n value: 1,\n label: {\n title: \"$1,500–$3,000\",\n description: \"1 work\",\n },\n },\n {\n value: 1,\n label: {\n title: \"$3,000–$4,500\",\n description: \"1 work\",\n },\n },\n {\n value: 1,\n label: {\n title: \"$4,500–$6,000\",\n description: \"1 work\",\n },\n },\n {\n value: 4,\n label: {\n title: \"$6,000–$7,500\",\n description: \"4 works\",\n },\n },\n {\n value: 10,\n label: {\n title: \"$7,500–$9,000\",\n description: \"10 works\",\n },\n },\n {\n value: 42,\n label: {\n title: \"$9,000–$10,500\",\n description: \"42 works\",\n },\n },\n {\n value: 0,\n label: {\n title: \"$10,500–$12,000\",\n description: \"0 works\",\n },\n },\n {\n value: 216,\n label: {\n title: \"$12,000–$13,500\",\n description: \"216 works\",\n },\n },\n {\n value: 1,\n label: {\n title: \"$13,500–$15,000\",\n description: \"1 work\",\n },\n },\n {\n value: 201,\n label: {\n title: \"$15,000–$16,500\",\n description: \"201 works\",\n },\n highlightLabel: {\n title: \"$15,000–$16,500\",\n description: \"This work\",\n },\n },\n {\n value: 0,\n label: {\n title: \"$16,500–$18,000\",\n description: \"0 works\",\n },\n },\n {\n value: 113,\n label: {\n title: \"$18,000–$19,500\",\n description: \"113 works\",\n },\n },\n {\n value: 4,\n label: {\n title: \"$19,500–$21,000\",\n description: \"4 works\",\n },\n },\n {\n value: 2,\n label: {\n title: \"$21,000–$22,500\",\n description: \"2 works\",\n },\n },\n {\n value: 6,\n label: {\n title: \"$22,500–$24,000\",\n description: \"6 works\",\n },\n },\n {\n value: 37,\n label: {\n title: \"$24,000–$25,500\",\n description: \"37 works\",\n },\n },\n {\n value: 1,\n label: {\n title: \"$25,500–$27,000\",\n description: \"1 work\",\n },\n },\n {\n value: 3,\n label: {\n title: \"$27,000–$28,500\",\n description: \"3 works\",\n },\n },\n {\n value: 0,\n label: {\n title: \"$28,500–$30,000\",\n description: \"0 works\",\n },\n },\n {\n value: 0,\n label: {\n title: \"$30,000+\",\n description: \"0 works\",\n },\n },\n]\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/elements/BarChart/index.ts"],"sourcesContent":["export * from \"./BarChart\"\nexport * from \"./Bar\"\n"],"mappings":"AAAA;AACA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
var _templateObject;
|
|
2
|
+
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
3
|
+
import { Flex, media } from "@artsy/palette";
|
|
4
|
+
import { themeGet } from "@styled-system/theme-get";
|
|
5
|
+
import React, { useContext, useRef } from "react";
|
|
6
|
+
import styled from "styled-components";
|
|
7
|
+
import { MousePositionContext } from "./MousePositionContext";
|
|
8
|
+
var LABEL_OFFSET = 10;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Tooltip for bar and line charts
|
|
12
|
+
*/
|
|
13
|
+
export var ChartHoverTooltip = function ChartHoverTooltip(_ref) {
|
|
14
|
+
var children = _ref.children;
|
|
15
|
+
var ref = useRef(null);
|
|
16
|
+
var _useContext = useContext(MousePositionContext),
|
|
17
|
+
x = _useContext.x,
|
|
18
|
+
y = _useContext.y;
|
|
19
|
+
if (ref.current) {
|
|
20
|
+
// position outside of the render loop to avoid GC churn
|
|
21
|
+
ref.current.style.top = y - LABEL_OFFSET - ref.current.offsetHeight + "px";
|
|
22
|
+
ref.current.style.left = x + "px";
|
|
23
|
+
}
|
|
24
|
+
return /*#__PURE__*/React.createElement(HoverTooltipPositioner, {
|
|
25
|
+
ref: ref
|
|
26
|
+
}, children);
|
|
27
|
+
};
|
|
28
|
+
ChartHoverTooltip.displayName = "ChartHoverTooltip";
|
|
29
|
+
/**
|
|
30
|
+
* Base component for positioning tooltips
|
|
31
|
+
*/
|
|
32
|
+
export var BaseTooltipPositioner = styled(Flex).withConfig({
|
|
33
|
+
displayName: "ChartHoverTooltip__BaseTooltipPositioner",
|
|
34
|
+
componentId: "sc-2qa7c8-0"
|
|
35
|
+
})(["transform:translateX(-50%);pointer-events:none;border-radius:2px;"]);
|
|
36
|
+
var HoverTooltipPositioner = styled(BaseTooltipPositioner).withConfig({
|
|
37
|
+
displayName: "ChartHoverTooltip__HoverTooltipPositioner",
|
|
38
|
+
componentId: "sc-2qa7c8-1"
|
|
39
|
+
})(["", ";z-index:2;position:fixed;background-color:", ";box-shadow:", ";"], media.xs(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: none;\n "]))), themeGet("colors.mono0"), themeGet("effects.dropShadow"));
|
|
40
|
+
//# sourceMappingURL=ChartHoverTooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartHoverTooltip.js","names":["Flex","media","themeGet","React","useContext","useRef","styled","MousePositionContext","LABEL_OFFSET","ChartHoverTooltip","_ref","children","ref","_useContext","x","y","current","style","top","offsetHeight","left","createElement","HoverTooltipPositioner","displayName","BaseTooltipPositioner","withConfig","componentId","xs","_templateObject","_taggedTemplateLiteral"],"sources":["../../../../src/elements/DataVis/ChartHoverTooltip.tsx"],"sourcesContent":["import { Flex, media } from \"@artsy/palette\"\nimport { themeGet } from \"@styled-system/theme-get\"\nimport React, { useContext, useRef } from \"react\"\nimport styled from \"styled-components\"\nimport { MousePositionContext } from \"./MousePositionContext\"\n\nconst LABEL_OFFSET = 10\n\n/**\n * Tooltip for bar and line charts\n */\nexport const ChartHoverTooltip = ({ children }) => {\n const ref = useRef(null)\n const { x, y } = useContext(MousePositionContext)\n if (ref.current) {\n // position outside of the render loop to avoid GC churn\n ref.current.style.top = y - LABEL_OFFSET - ref.current.offsetHeight + \"px\"\n ref.current.style.left = x + \"px\"\n }\n return <HoverTooltipPositioner ref={ref}>{children}</HoverTooltipPositioner>\n}\n\n/**\n * Base component for positioning tooltips\n */\nexport const BaseTooltipPositioner = styled(Flex)`\n transform: translateX(-50%);\n pointer-events: none;\n border-radius: 2px;\n`\n\nconst HoverTooltipPositioner = styled(BaseTooltipPositioner)`\n ${media.xs`\n display: none;\n `};\n z-index: 2;\n position: fixed;\n background-color: ${themeGet(\"colors.mono0\")};\n box-shadow: ${themeGet(\"effects.dropShadow\")};\n`\n"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,KAAK,QAAQ,gBAAgB;AAC5C,SAASC,QAAQ,QAAQ,0BAA0B;AACnD,OAAOC,KAAK,IAAIC,UAAU,EAAEC,MAAM,QAAQ,OAAO;AACjD,OAAOC,MAAM,MAAM,mBAAmB;AACtC,SAASC,oBAAoB;AAE7B,IAAMC,YAAY,GAAG,EAAE;;AAEvB;AACA;AACA;AACA,OAAO,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAAC,IAAA,EAAqB;EAAA,IAAfC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EAC1C,IAAMC,GAAG,GAAGP,MAAM,CAAC,IAAI,CAAC;EACxB,IAAAQ,WAAA,GAAiBT,UAAU,CAACG,oBAAoB,CAAC;IAAzCO,CAAC,GAAAD,WAAA,CAADC,CAAC;IAAEC,CAAC,GAAAF,WAAA,CAADE,CAAC;EACZ,IAAIH,GAAG,CAACI,OAAO,EAAE;IACf;IACAJ,GAAG,CAACI,OAAO,CAACC,KAAK,CAACC,GAAG,GAAGH,CAAC,GAAGP,YAAY,GAAGI,GAAG,CAACI,OAAO,CAACG,YAAY,GAAG,IAAI;IAC1EP,GAAG,CAACI,OAAO,CAACC,KAAK,CAACG,IAAI,GAAGN,CAAC,GAAG,IAAI;EACnC;EACA,oBAAOX,KAAA,CAAAkB,aAAA,CAACC,sBAAsB;IAACV,GAAG,EAAEA;EAAI,GAAED,QAAQ,CAA0B;AAC9E,CAAC;AATYF,iBAAiB,CAAAc,WAAA;AAW9B;AACA;AACA;AACA,OAAO,IAAMC,qBAAqB,GAAGlB,MAAM,CAACN,IAAI,CAAC,CAAAyB,UAAA;EAAAF,WAAA;EAAAG,WAAA;AAAA,yEAIhD;AAED,IAAMJ,sBAAsB,GAAGhB,MAAM,CAACkB,qBAAqB,CAAC,CAAAC,UAAA;EAAAF,WAAA;EAAAG,WAAA;AAAA,6EACxDzB,KAAK,CAAC0B,EAAE,CAAAC,eAAA,KAAAA,eAAA,GAAAC,sBAAA,kCAKU3B,QAAQ,CAAC,cAAc,CAAC,EAC9BA,QAAQ,CAAC,oBAAoB,CAAC,CAC7C"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
var _excluded = ["title", "description", "noPadding"];
|
|
2
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
3
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
4
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
5
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
6
|
+
import { Flex, Text } from "@artsy/palette";
|
|
7
|
+
import React from "react";
|
|
8
|
+
import styled from "styled-components";
|
|
9
|
+
var ChartTooltipWrapper = styled(Flex).withConfig({
|
|
10
|
+
displayName: "ChartTooltip__ChartTooltipWrapper",
|
|
11
|
+
componentId: "sc-1g8t4p3-0"
|
|
12
|
+
})(["text-align:center;align-items:center;flex-direction:column;white-space:nowrap;"]);
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Returns tooltip component based on the type of tooltip param passed to it
|
|
16
|
+
* @param tooltip either a component or hash containing `title` and `description`
|
|
17
|
+
*/
|
|
18
|
+
export var coerceTooltip = function coerceTooltip(tooltip) {
|
|
19
|
+
return isChartTooltipProps(tooltip) ? /*#__PURE__*/React.createElement(ChartTooltip, tooltip) : tooltip;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Similart to `coerceTooltip` but without padding
|
|
24
|
+
* @param tooltip
|
|
25
|
+
*/
|
|
26
|
+
export var coerceTooltipWithoutPadding = function coerceTooltipWithoutPadding(tooltip) {
|
|
27
|
+
return isChartTooltipProps(tooltip) ? /*#__PURE__*/React.createElement(ChartTooltip, _extends({
|
|
28
|
+
noPadding: true
|
|
29
|
+
}, tooltip)) : tooltip;
|
|
30
|
+
};
|
|
31
|
+
// tslint:disable-next-line:completed-docs
|
|
32
|
+
export function isChartTooltipProps(obj) {
|
|
33
|
+
var result = obj && _typeof(obj) === "object" && obj.hasOwnProperty("title") && obj.hasOwnProperty("description");
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* ChartTooltip is the default content format for a label on a BarChart.
|
|
39
|
+
* @param props
|
|
40
|
+
*/
|
|
41
|
+
export var ChartTooltip = function ChartTooltip(_ref) {
|
|
42
|
+
var title = _ref.title,
|
|
43
|
+
description = _ref.description,
|
|
44
|
+
noPadding = _ref.noPadding,
|
|
45
|
+
others = _objectWithoutProperties(_ref, _excluded);
|
|
46
|
+
return /*#__PURE__*/React.createElement(ChartTooltipWrapper, _extends({
|
|
47
|
+
py: noPadding ? 0 : 0.5,
|
|
48
|
+
px: noPadding ? 0 : 1
|
|
49
|
+
}, others), /*#__PURE__*/React.createElement(Text, {
|
|
50
|
+
variant: "xs"
|
|
51
|
+
}, title), /*#__PURE__*/React.createElement(Text, {
|
|
52
|
+
color: "mono60",
|
|
53
|
+
variant: "xs"
|
|
54
|
+
}, description));
|
|
55
|
+
};
|
|
56
|
+
ChartTooltip.displayName = "ChartTooltip";
|
|
57
|
+
//# sourceMappingURL=ChartTooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartTooltip.js","names":["Flex","Text","React","styled","ChartTooltipWrapper","withConfig","displayName","componentId","coerceTooltip","tooltip","isChartTooltipProps","createElement","ChartTooltip","coerceTooltipWithoutPadding","_extends","noPadding","obj","result","_typeof","hasOwnProperty","_ref","title","description","others","_objectWithoutProperties","_excluded","py","px","variant","color"],"sources":["../../../../src/elements/DataVis/ChartTooltip.tsx"],"sourcesContent":["import { Flex, FlexProps, Text } from \"@artsy/palette\"\nimport React from \"react\"\nimport styled from \"styled-components\"\n\nconst ChartTooltipWrapper = styled(Flex)`\n text-align: center;\n align-items: center;\n flex-direction: column;\n white-space: nowrap;\n`\n\n/**\n * Returns tooltip component based on the type of tooltip param passed to it\n * @param tooltip either a component or hash containing `title` and `description`\n */\nexport const coerceTooltip = (tooltip: React.ReactNode | ChartTooltipProps) =>\n isChartTooltipProps(tooltip) ? <ChartTooltip {...tooltip} /> : tooltip\n\n/**\n * Similart to `coerceTooltip` but without padding\n * @param tooltip\n */\nexport const coerceTooltipWithoutPadding = (\n tooltip: React.ReactNode | ChartTooltipProps\n) =>\n isChartTooltipProps(tooltip) ? (\n <ChartTooltip noPadding {...tooltip} />\n ) : (\n tooltip\n )\n\nexport interface ChartTooltipProps extends FlexProps {\n title: React.ReactNode\n description: React.ReactNode\n noPadding?: boolean\n}\n\n// tslint:disable-next-line:completed-docs\nexport function isChartTooltipProps(obj: any): obj is ChartTooltipProps {\n const result =\n obj &&\n typeof obj === \"object\" &&\n obj.hasOwnProperty(\"title\") &&\n obj.hasOwnProperty(\"description\")\n return result\n}\n\n/**\n * ChartTooltip is the default content format for a label on a BarChart.\n * @param props\n */\nexport const ChartTooltip = ({\n title,\n description,\n noPadding,\n ...others\n}: ChartTooltipProps) => (\n <ChartTooltipWrapper\n py={noPadding ? 0 : 0.5}\n px={noPadding ? 0 : 1}\n {...others}\n >\n <Text variant=\"xs\">{title}</Text>\n\n <Text color=\"mono60\" variant=\"xs\">\n {description}\n </Text>\n </ChartTooltipWrapper>\n)\n"],"mappings":";;;;;AAAA,SAASA,IAAI,EAAaC,IAAI,QAAQ,gBAAgB;AACtD,OAAOC,KAAK,MAAM,OAAO;AACzB,OAAOC,MAAM,MAAM,mBAAmB;AAEtC,IAAMC,mBAAmB,GAAGD,MAAM,CAACH,IAAI,CAAC,CAAAK,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,sFAKvC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAIC,OAA4C;EAAA,OACxEC,mBAAmB,CAACD,OAAO,CAAC,gBAAGP,KAAA,CAAAS,aAAA,CAACC,YAAY,EAAKH,OAAO,CAAI,GAAGA,OAAO;AAAA;;AAExE;AACA;AACA;AACA;AACA,OAAO,IAAMI,2BAA2B,GAAG,SAA9BA,2BAA2BA,CACtCJ,OAA4C;EAAA,OAE5CC,mBAAmB,CAACD,OAAO,CAAC,gBAC1BP,KAAA,CAAAS,aAAA,CAACC,YAAY,EAAAE,QAAA;IAACC,SAAS;EAAA,GAAKN,OAAO,EAAI,GAEvCA,OACD;AAAA;AAQH;AACA,OAAO,SAASC,mBAAmBA,CAACM,GAAQ,EAA4B;EACtE,IAAMC,MAAM,GACVD,GAAG,IACHE,OAAA,CAAOF,GAAG,MAAK,QAAQ,IACvBA,GAAG,CAACG,cAAc,CAAC,OAAO,CAAC,IAC3BH,GAAG,CAACG,cAAc,CAAC,aAAa,CAAC;EACnC,OAAOF,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA,OAAO,IAAML,YAAY,GAAG,SAAfA,YAAYA,CAAAQ,IAAA;EAAA,IACvBC,KAAK,GAAAD,IAAA,CAALC,KAAK;IACLC,WAAW,GAAAF,IAAA,CAAXE,WAAW;IACXP,SAAS,GAAAK,IAAA,CAATL,SAAS;IACNQ,MAAM,GAAAC,wBAAA,CAAAJ,IAAA,EAAAK,SAAA;EAAA,oBAETvB,KAAA,CAAAS,aAAA,CAACP,mBAAmB,EAAAU,QAAA;IAClBY,EAAE,EAAEX,SAAS,GAAG,CAAC,GAAG,GAAI;IACxBY,EAAE,EAAEZ,SAAS,GAAG,CAAC,GAAG;EAAE,GAClBQ,MAAM,gBAEVrB,KAAA,CAAAS,aAAA,CAACV,IAAI;IAAC2B,OAAO,EAAC;EAAI,GAAEP,KAAK,CAAQ,eAEjCnB,KAAA,CAAAS,aAAA,CAACV,IAAI;IAAC4B,KAAK,EAAC,QAAQ;IAACD,OAAO,EAAC;EAAI,GAC9BN,WAAW,CACP,CACa;AAAA,CACvB;AAjBYV,YAAY,CAAAN,WAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
5
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
import React, { useEffect, useState } from "react";
|
|
8
|
+
|
|
9
|
+
// tslint:disable-next-line:completed-docs
|
|
10
|
+
export var MousePositionContext = /*#__PURE__*/React.createContext({
|
|
11
|
+
x: 0,
|
|
12
|
+
y: 0
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
// tslint:disable-next-line:completed-docs
|
|
16
|
+
export var ProvideMousePosition = function ProvideMousePosition(_ref) {
|
|
17
|
+
var children = _ref.children;
|
|
18
|
+
var _useState = useState({
|
|
19
|
+
x: 0,
|
|
20
|
+
y: 0
|
|
21
|
+
}),
|
|
22
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
23
|
+
state = _useState2[0],
|
|
24
|
+
setState = _useState2[1];
|
|
25
|
+
useEffect(function () {
|
|
26
|
+
var setMousePosition = function setMousePosition(ev) {
|
|
27
|
+
setState({
|
|
28
|
+
x: ev.clientX,
|
|
29
|
+
y: ev.clientY
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
window.addEventListener("mousemove", setMousePosition);
|
|
33
|
+
return function () {
|
|
34
|
+
window.removeEventListener("mousemove", setMousePosition);
|
|
35
|
+
};
|
|
36
|
+
}, [false]);
|
|
37
|
+
return /*#__PURE__*/React.createElement(MousePositionContext.Provider, {
|
|
38
|
+
value: state
|
|
39
|
+
}, children);
|
|
40
|
+
};
|
|
41
|
+
ProvideMousePosition.displayName = "ProvideMousePosition";
|
|
42
|
+
//# sourceMappingURL=MousePositionContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MousePositionContext.js","names":["React","useEffect","useState","MousePositionContext","createContext","x","y","ProvideMousePosition","_ref","children","_useState","_useState2","_slicedToArray","state","setState","setMousePosition","ev","clientX","clientY","window","addEventListener","removeEventListener","createElement","Provider","value","displayName"],"sources":["../../../../src/elements/DataVis/MousePositionContext.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\"\n\n// tslint:disable-next-line:completed-docs\nexport const MousePositionContext = React.createContext({ x: 0, y: 0 })\n\n// tslint:disable-next-line:completed-docs\nexport const ProvideMousePosition: React.FC<React.PropsWithChildren<unknown>> = ({ children }) => {\n const [state, setState] = useState({ x: 0, y: 0 })\n\n useEffect(() => {\n const setMousePosition = (ev: MouseEvent) => {\n setState({\n x: ev.clientX,\n y: ev.clientY,\n })\n }\n window.addEventListener(\"mousemove\", setMousePosition)\n return () => {\n window.removeEventListener(\"mousemove\", setMousePosition)\n }\n }, [false])\n\n return (\n <MousePositionContext.Provider value={state}>\n {children}\n </MousePositionContext.Provider>\n )\n}\n"],"mappings":";;;;;;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;;AAElD;AACA,OAAO,IAAMC,oBAAoB,gBAAGH,KAAK,CAACI,aAAa,CAAC;EAAEC,CAAC,EAAE,CAAC;EAAEC,CAAC,EAAE;AAAE,CAAC,CAAC;;AAEvE;AACA,OAAO,IAAMC,oBAAgE,GAAG,SAAnEA,oBAAgEA,CAAAC,IAAA,EAAqB;EAAA,IAAfC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EACzF,IAAAC,SAAA,GAA0BR,QAAQ,CAAC;MAAEG,CAAC,EAAE,CAAC;MAAEC,CAAC,EAAE;IAAE,CAAC,CAAC;IAAAK,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAA3CG,KAAK,GAAAF,UAAA;IAAEG,QAAQ,GAAAH,UAAA;EAEtBV,SAAS,CAAC,YAAM;IACd,IAAMc,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIC,EAAc,EAAK;MAC3CF,QAAQ,CAAC;QACPT,CAAC,EAAEW,EAAE,CAACC,OAAO;QACbX,CAAC,EAAEU,EAAE,CAACE;MACR,CAAC,CAAC;IACJ,CAAC;IACDC,MAAM,CAACC,gBAAgB,CAAC,WAAW,EAAEL,gBAAgB,CAAC;IACtD,OAAO,YAAM;MACXI,MAAM,CAACE,mBAAmB,CAAC,WAAW,EAAEN,gBAAgB,CAAC;IAC3D,CAAC;EACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;EAEX,oBACEf,KAAA,CAAAsB,aAAA,CAACnB,oBAAoB,CAACoB,QAAQ;IAACC,KAAK,EAAEX;EAAM,GACzCJ,QAAQ,CACqB;AAEpC,CAAC;AArBYF,oBAAgE,CAAAkB,WAAA"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
5
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
import { useEffect, useRef, useState } from "react";
|
|
8
|
+
// tslint:disable-next-line:completed-docs
|
|
9
|
+
export var useIntersectionObserver = function useIntersectionObserver(_ref) {
|
|
10
|
+
var _ref$once = _ref.once,
|
|
11
|
+
once = _ref$once === void 0 ? true : _ref$once,
|
|
12
|
+
_ref$options = _ref.options,
|
|
13
|
+
options = _ref$options === void 0 ? {
|
|
14
|
+
threshold: 0
|
|
15
|
+
} : _ref$options,
|
|
16
|
+
onIntersection = _ref.onIntersection,
|
|
17
|
+
onOffIntersection = _ref.onOffIntersection;
|
|
18
|
+
var ref = useRef(null);
|
|
19
|
+
var handleIntersect = function handleIntersect(entries) {
|
|
20
|
+
if (!observer) return;
|
|
21
|
+
if (once) {
|
|
22
|
+
var hasIntersected = entries.some(
|
|
23
|
+
// tslint:disable-next-line:no-shadowed-variable
|
|
24
|
+
function (_ref2) {
|
|
25
|
+
var isIntersecting = _ref2.isIntersecting;
|
|
26
|
+
return isIntersecting;
|
|
27
|
+
});
|
|
28
|
+
if (hasIntersected) {
|
|
29
|
+
onIntersection === null || onIntersection === void 0 ? void 0 : onIntersection(entries);
|
|
30
|
+
observer.disconnect();
|
|
31
|
+
} else {
|
|
32
|
+
onOffIntersection === null || onOffIntersection === void 0 ? void 0 : onOffIntersection(entries);
|
|
33
|
+
}
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
var isIntersecting = entries[entries.length - 1].isIntersecting;
|
|
37
|
+
if (!isIntersecting) {
|
|
38
|
+
onOffIntersection === null || onOffIntersection === void 0 ? void 0 : onOffIntersection(entries);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
onIntersection === null || onIntersection === void 0 ? void 0 : onIntersection(entries);
|
|
42
|
+
};
|
|
43
|
+
var _useState = useState(function () {
|
|
44
|
+
return isClientSide ? new IntersectionObserver(handleIntersect, options) : undefined;
|
|
45
|
+
}),
|
|
46
|
+
_useState2 = _slicedToArray(_useState, 1),
|
|
47
|
+
observer = _useState2[0];
|
|
48
|
+
useEffect(function () {
|
|
49
|
+
if (!ref.current || !observer) return;
|
|
50
|
+
observer.observe(ref.current);
|
|
51
|
+
return function () {
|
|
52
|
+
observer.disconnect();
|
|
53
|
+
};
|
|
54
|
+
}, [ref, observer]);
|
|
55
|
+
return {
|
|
56
|
+
ref: ref
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
var isClientSide = typeof window !== "undefined";
|
|
60
|
+
//# sourceMappingURL=useIntersectionObserver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useIntersectionObserver.js","names":["useEffect","useRef","useState","useIntersectionObserver","_ref","_ref$once","once","_ref$options","options","threshold","onIntersection","onOffIntersection","ref","handleIntersect","entries","observer","hasIntersected","some","_ref2","isIntersecting","disconnect","length","_useState","isClientSide","IntersectionObserver","undefined","_useState2","_slicedToArray","current","observe","window"],"sources":["../../../../src/elements/DataVis/useIntersectionObserver.ts"],"sourcesContent":["import { RefObject, useEffect, useRef, useState } from \"react\"\n\ninterface UseIntersectionObserverProperties {\n ref?: RefObject<Element> | null\n once?: boolean\n options?: {\n threshold: number | number[]\n root?: Element\n rootMargin?: string\n }\n onIntersection?: (entries: IntersectionObserverEntry[]) => void\n onOffIntersection?: (entries: IntersectionObserverEntry[]) => void\n}\n\n// tslint:disable-next-line:completed-docs\nexport const useIntersectionObserver = ({\n once = true,\n options = { threshold: 0 },\n onIntersection,\n onOffIntersection,\n}: UseIntersectionObserverProperties) => {\n const ref = useRef<HTMLElement | null>(null)\n\n const handleIntersect = (entries: IntersectionObserverEntry[]) => {\n if (!observer) return\n\n if (once) {\n const hasIntersected = entries.some(\n // tslint:disable-next-line:no-shadowed-variable\n ({ isIntersecting }) => isIntersecting\n )\n\n if (hasIntersected) {\n onIntersection?.(entries)\n observer.disconnect()\n } else {\n onOffIntersection?.(entries)\n }\n\n return\n }\n\n const isIntersecting = entries[entries.length - 1].isIntersecting\n\n if (!isIntersecting) {\n onOffIntersection?.(entries)\n return\n }\n\n onIntersection?.(entries)\n }\n\n const [observer] = useState(() =>\n isClientSide\n ? new IntersectionObserver(handleIntersect, options)\n : undefined\n )\n\n useEffect(() => {\n if (!ref.current || !observer) return\n\n observer.observe(ref.current)\n\n return () => {\n observer.disconnect()\n }\n }, [ref, observer])\n\n return { ref }\n}\n\nconst isClientSide = typeof window !== \"undefined\"\n"],"mappings":";;;;;;AAAA,SAAoBA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAc9D;AACA,OAAO,IAAMC,uBAAuB,GAAG,SAA1BA,uBAAuBA,CAAAC,IAAA,EAKK;EAAA,IAAAC,SAAA,GAAAD,IAAA,CAJvCE,IAAI;IAAJA,IAAI,GAAAD,SAAA,cAAG,IAAI,GAAAA,SAAA;IAAAE,YAAA,GAAAH,IAAA,CACXI,OAAO;IAAPA,OAAO,GAAAD,YAAA,cAAG;MAAEE,SAAS,EAAE;IAAE,CAAC,GAAAF,YAAA;IAC1BG,cAAc,GAAAN,IAAA,CAAdM,cAAc;IACdC,iBAAiB,GAAAP,IAAA,CAAjBO,iBAAiB;EAEjB,IAAMC,GAAG,GAAGX,MAAM,CAAqB,IAAI,CAAC;EAE5C,IAAMY,eAAe,GAAG,SAAlBA,eAAeA,CAAIC,OAAoC,EAAK;IAChE,IAAI,CAACC,QAAQ,EAAE;IAEf,IAAIT,IAAI,EAAE;MACR,IAAMU,cAAc,GAAGF,OAAO,CAACG,IAAI;MACjC;MACA,UAAAC,KAAA;QAAA,IAAGC,cAAc,GAAAD,KAAA,CAAdC,cAAc;QAAA,OAAOA,cAAc;MAAA,EACvC;MAED,IAAIH,cAAc,EAAE;QAClBN,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGI,OAAO,CAAC;QACzBC,QAAQ,CAACK,UAAU,EAAE;MACvB,CAAC,MAAM;QACLT,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAGG,OAAO,CAAC;MAC9B;MAEA;IACF;IAEA,IAAMK,cAAc,GAAGL,OAAO,CAACA,OAAO,CAACO,MAAM,GAAG,CAAC,CAAC,CAACF,cAAc;IAEjE,IAAI,CAACA,cAAc,EAAE;MACnBR,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAGG,OAAO,CAAC;MAC5B;IACF;IAEAJ,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGI,OAAO,CAAC;EAC3B,CAAC;EAED,IAAAQ,SAAA,GAAmBpB,QAAQ,CAAC;MAAA,OAC1BqB,YAAY,GACR,IAAIC,oBAAoB,CAACX,eAAe,EAAEL,OAAO,CAAC,GAClDiB,SAAS;IAAA,EACd;IAAAC,UAAA,GAAAC,cAAA,CAAAL,SAAA;IAJMP,QAAQ,GAAAW,UAAA;EAMf1B,SAAS,CAAC,YAAM;IACd,IAAI,CAACY,GAAG,CAACgB,OAAO,IAAI,CAACb,QAAQ,EAAE;IAE/BA,QAAQ,CAACc,OAAO,CAACjB,GAAG,CAACgB,OAAO,CAAC;IAE7B,OAAO,YAAM;MACXb,QAAQ,CAACK,UAAU,EAAE;IACvB,CAAC;EACH,CAAC,EAAE,CAACR,GAAG,EAAEG,QAAQ,CAAC,CAAC;EAEnB,OAAO;IAAEH,GAAG,EAAHA;EAAI,CAAC;AAChB,CAAC;AAED,IAAMW,YAAY,GAAG,OAAOO,MAAM,KAAK,WAAW"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SharedTypes.js","names":[],"sources":["../../../../../src/elements/DataVis/utils/SharedTypes.ts"],"sourcesContent":["import { ChartTooltipProps } from \"../ChartTooltip\"\n\nexport interface PointDescriptor {\n value: number\n axisLabelX?: React.ReactNode | ChartTooltipProps\n tooltip?: React.ReactNode | ChartTooltipProps\n}\n\nexport interface ChartProps {\n points: PointDescriptor[]\n}\n"],"mappings":""}
|