@pie-lib/plot 2.1.10-next.600 → 2.1.10-next.624

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/lib/label.js ADDED
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports["default"] = void 0;
11
+
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
17
+
18
+ var _renderUi = require("@pie-lib/render-ui");
19
+
20
+ var _classnames = _interopRequireDefault(require("classnames"));
21
+
22
+ var _editableHtml = _interopRequireDefault(require("@pie-lib/editable-html"));
23
+
24
+ var _styles = require("@material-ui/core/styles");
25
+
26
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
+
28
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
+
30
+ var LabelComponent = function LabelComponent(props) {
31
+ var _cn;
32
+
33
+ var classes = props.classes,
34
+ disabledLabel = props.disabledLabel,
35
+ graphHeight = props.graphHeight,
36
+ graphWidth = props.graphWidth,
37
+ placeholder = props.placeholder,
38
+ text = props.text,
39
+ side = props.side,
40
+ onChange = props.onChange;
41
+
42
+ var _useState = (0, _react.useState)(false),
43
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
44
+ rotatedToHorizontal = _useState2[0],
45
+ setRotatedToHorizontal = _useState2[1];
46
+
47
+ var activePlugins = ['bold', 'italic', 'underline', 'strikethrough', 'math' // 'languageCharacters'
48
+ ];
49
+ var defaultStyle = {
50
+ width: side === 'left' || side === 'right' ? graphHeight - 8 : graphWidth - 8,
51
+ top: side === 'left' && "".concat(graphHeight - 8, "px") || 0,
52
+ left: side === 'right' && "".concat(graphWidth - 8, "px") || 0
53
+ };
54
+ var rotatedStyle = {
55
+ width: graphWidth - 8,
56
+ top: side === 'right' && "".concat(graphHeight - 22, "px") || 0,
57
+ left: 0
58
+ };
59
+
60
+ var rotateLabel = function rotateLabel() {
61
+ return !disabledLabel && (side === 'left' || side === 'right') && setRotatedToHorizontal(true);
62
+ };
63
+
64
+ return /*#__PURE__*/_react["default"].createElement(_renderUi.Readable, {
65
+ "false": true
66
+ }, /*#__PURE__*/_react["default"].createElement("div", {
67
+ className: (0, _classnames["default"])(classes.axisLabel, (_cn = {}, (0, _defineProperty2["default"])(_cn, classes.rotateLeftLabel, side === 'left' && !rotatedToHorizontal), (0, _defineProperty2["default"])(_cn, classes.rotateRightLabel, side === 'right' && !rotatedToHorizontal), (0, _defineProperty2["default"])(_cn, classes.editLabel, rotatedToHorizontal), _cn)),
68
+ style: rotatedToHorizontal ? rotatedStyle : defaultStyle,
69
+ onClick: rotateLabel
70
+ }, disabledLabel ? /*#__PURE__*/_react["default"].createElement("div", {
71
+ className: classes.disabledLabel,
72
+ dangerouslySetInnerHTML: {
73
+ __html: text || ''
74
+ }
75
+ }) : /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
76
+ markup: text || '',
77
+ onChange: onChange,
78
+ placeholder: !disabledLabel && placeholder,
79
+ toolbarOpts: {
80
+ position: side === 'bottom' ? 'top' : 'bottom',
81
+ noBorder: true
82
+ },
83
+ activePlugins: activePlugins,
84
+ onDone: function onDone() {
85
+ return setRotatedToHorizontal(false);
86
+ }
87
+ })));
88
+ };
89
+
90
+ var _default = (0, _styles.withStyles)(function (theme) {
91
+ return {
92
+ label: {
93
+ fill: _renderUi.color.secondary()
94
+ },
95
+ axisLabel: {
96
+ fontSize: theme.typography.fontSize - 2,
97
+ textAlign: 'center',
98
+ margin: '4px',
99
+ padding: '4px 0'
100
+ },
101
+ disabledLabel: {
102
+ pointerEvents: 'none',
103
+ width: '100%'
104
+ },
105
+ editLabel: {
106
+ position: 'absolute',
107
+ backgroundColor: 'white',
108
+ borderRadius: '4px',
109
+ boxShadow: '0px 5px 8px rgba(0, 0, 0, 0.15)',
110
+ zIndex: 10
111
+ },
112
+ rotateLeftLabel: {
113
+ rotate: '-90deg',
114
+ transformOrigin: '0 0',
115
+ transformStyle: 'preserve-3d',
116
+ position: 'absolute'
117
+ },
118
+ rotateRightLabel: {
119
+ rotate: '90deg',
120
+ transformOrigin: '0 0',
121
+ transformStyle: 'preserve-3d',
122
+ position: 'absolute'
123
+ }
124
+ };
125
+ })(LabelComponent);
126
+
127
+ exports["default"] = _default;
128
+ //# sourceMappingURL=label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.js","names":["LabelComponent","props","classes","disabledLabel","graphHeight","graphWidth","placeholder","text","side","onChange","useState","rotatedToHorizontal","setRotatedToHorizontal","activePlugins","defaultStyle","width","top","left","rotatedStyle","rotateLabel","cn","axisLabel","rotateLeftLabel","rotateRightLabel","editLabel","__html","position","noBorder","withStyles","theme","label","fill","color","secondary","fontSize","typography","textAlign","margin","padding","pointerEvents","backgroundColor","borderRadius","boxShadow","zIndex","rotate","transformOrigin","transformStyle"],"sources":["../src/label.jsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { color, Readable } from '@pie-lib/render-ui';\nimport cn from 'classnames';\nimport EditableHtml from '@pie-lib/editable-html';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst LabelComponent = props => {\n const {\n classes,\n disabledLabel,\n graphHeight,\n graphWidth,\n placeholder,\n text,\n side,\n onChange\n } = props;\n const [rotatedToHorizontal, setRotatedToHorizontal] = useState(false);\n const activePlugins = [\n 'bold',\n 'italic',\n 'underline',\n 'strikethrough',\n 'math'\n // 'languageCharacters'\n ];\n\n const defaultStyle = {\n width: side === 'left' || side === 'right' ? graphHeight - 8 : graphWidth - 8,\n top: (side === 'left' && `${graphHeight - 8}px`) || 0,\n left: (side === 'right' && `${graphWidth - 8}px`) || 0\n };\n\n const rotatedStyle = {\n width: graphWidth - 8,\n top: (side === 'right' && `${graphHeight - 22}px`) || 0,\n left: 0\n };\n\n const rotateLabel = () =>\n !disabledLabel && (side === 'left' || side === 'right') && setRotatedToHorizontal(true);\n\n return (\n <Readable false>\n <div\n className={cn(classes.axisLabel, {\n [classes.rotateLeftLabel]: side === 'left' && !rotatedToHorizontal,\n [classes.rotateRightLabel]: side === 'right' && !rotatedToHorizontal,\n [classes.editLabel]: rotatedToHorizontal\n })}\n style={rotatedToHorizontal ? rotatedStyle : defaultStyle}\n onClick={rotateLabel}\n >\n {disabledLabel ? (\n <div className={classes.disabledLabel} dangerouslySetInnerHTML={{ __html: text || '' }} />\n ) : (\n <EditableHtml\n markup={text || ''}\n onChange={onChange}\n placeholder={!disabledLabel && placeholder}\n toolbarOpts={{\n position: side === 'bottom' ? 'top' : 'bottom',\n noBorder: true\n }}\n activePlugins={activePlugins}\n onDone={() => setRotatedToHorizontal(false)}\n />\n )}\n </div>\n </Readable>\n );\n};\n\nexport default withStyles(theme => ({\n label: {\n fill: color.secondary()\n },\n axisLabel: {\n fontSize: theme.typography.fontSize - 2,\n textAlign: 'center',\n margin: '4px',\n padding: '4px 0'\n },\n disabledLabel: {\n pointerEvents: 'none',\n width: '100%'\n },\n editLabel: {\n position: 'absolute',\n backgroundColor: 'white',\n borderRadius: '4px',\n boxShadow: '0px 5px 8px rgba(0, 0, 0, 0.15)',\n zIndex: 10\n },\n rotateLeftLabel: {\n rotate: '-90deg',\n transformOrigin: '0 0',\n transformStyle: 'preserve-3d',\n position: 'absolute'\n },\n rotateRightLabel: {\n rotate: '90deg',\n transformOrigin: '0 0',\n transformStyle: 'preserve-3d',\n position: 'absolute'\n }\n}))(LabelComponent);\n"],"mappings":"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"}
package/lib/root.js CHANGED
@@ -39,6 +39,12 @@ var _editableHtml = _interopRequireDefault(require("@pie-lib/editable-html"));
39
39
 
40
40
  var _classnames = _interopRequireDefault(require("classnames"));
41
41
 
42
+ var _label = _interopRequireDefault(require("./label"));
43
+
44
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
45
+
46
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
47
+
42
48
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
43
49
 
44
50
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
@@ -78,6 +84,12 @@ var Root = /*#__PURE__*/function (_React$Component) {
78
84
  };
79
85
  onMouseMove(snapped);
80
86
  });
87
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onChangeLabel", function (newValue, side) {
88
+ var _this$props2 = _this.props,
89
+ labels = _this$props2.labels,
90
+ onChangeLabels = _this$props2.onChangeLabels;
91
+ onChangeLabels(_objectSpread(_objectSpread({}, labels), {}, (0, _defineProperty2["default"])({}, side, newValue)));
92
+ });
81
93
  return _this;
82
94
  }
83
95
 
@@ -98,18 +110,21 @@ var Root = /*#__PURE__*/function (_React$Component) {
98
110
  value: function render() {
99
111
  var _this2 = this;
100
112
 
101
- var _this$props2 = this.props,
102
- disabledTitle = _this$props2.disabledTitle,
103
- graphProps = _this$props2.graphProps,
104
- children = _this$props2.children,
105
- classes = _this$props2.classes,
106
- onChangeTitle = _this$props2.onChangeTitle,
107
- thisIsChart = _this$props2.thisIsChart,
108
- showLabels = _this$props2.showLabels,
109
- showPixelGuides = _this$props2.showPixelGuides,
110
- showTitle = _this$props2.showTitle,
111
- title = _this$props2.title,
112
- rootRef = _this$props2.rootRef;
113
+ var _this$props3 = this.props,
114
+ disabledTitle = _this$props3.disabledTitle,
115
+ disabledLabels = _this$props3.disabledLabels,
116
+ labels = _this$props3.labels,
117
+ labelsPlaceholders = _this$props3.labelsPlaceholders,
118
+ graphProps = _this$props3.graphProps,
119
+ children = _this$props3.children,
120
+ classes = _this$props3.classes,
121
+ onChangeTitle = _this$props3.onChangeTitle,
122
+ thisIsChart = _this$props3.thisIsChart,
123
+ showLabels = _this$props3.showLabels,
124
+ showPixelGuides = _this$props3.showPixelGuides,
125
+ showTitle = _this$props3.showTitle,
126
+ title = _this$props3.title,
127
+ rootRef = _this$props3.rootRef;
113
128
  var _graphProps$size = graphProps.size,
114
129
  _graphProps$size$widt = _graphProps$size.width,
115
130
  width = _graphProps$size$widt === void 0 ? 500 : _graphProps$size$widt,
@@ -117,20 +132,23 @@ var Root = /*#__PURE__*/function (_React$Component) {
117
132
  height = _graphProps$size$heig === void 0 ? 500 : _graphProps$size$heig,
118
133
  domain = graphProps.domain,
119
134
  range = graphProps.range;
120
- var chartPadding = thisIsChart ? 45 : 0;
121
- var padding = showLabels ? 70 : 40;
122
- var extraPadding = showLabels ? 16 : 40;
123
- var finalWidth = width + padding * 2 + (domain.padding || 0) * 2 + extraPadding;
124
- var finalHeight = height + padding * 2 + (range.padding || 0) * 2;
135
+ var topPadding = 40;
136
+ var leftPadding = showLabels ? 80 : 60;
137
+ var finalWidth = width + leftPadding * 2 + (domain.padding || 0) * 2;
138
+ var finalHeight = height + topPadding * 2 + (range.padding || 0) * 2;
125
139
  var activeTitlePlugins = ['bold', 'italic', 'underline', 'strikethrough', 'math' // 'languageCharacters'
126
140
  ];
141
+ var actualHeight = thisIsChart && showPixelGuides ? height - 80 : height;
127
142
  var nbOfVerticalLines = parseInt(width / 100);
128
- var nbOfHorizontalLines = parseInt(height / 100);
129
- var sideGridlinesPadding = parseInt(height % 100);
143
+ var nbOfHorizontalLines = parseInt(actualHeight / 100);
144
+ var sideGridlinesPadding = parseInt(actualHeight % 100);
130
145
  return /*#__PURE__*/_react["default"].createElement("div", {
131
146
  className: classes.root
132
147
  }, showPixelGuides && /*#__PURE__*/_react["default"].createElement("div", {
133
- className: classes.topPixelGuides
148
+ className: classes.topPixelGuides,
149
+ style: {
150
+ marginLeft: thisIsChart ? 10 : showLabels ? 30 : 10
151
+ }
134
152
  }, (0, _toConsumableArray2["default"])(Array(nbOfVerticalLines + 1).keys()).map(function (value) {
135
153
  return /*#__PURE__*/_react["default"].createElement(_renderUi.Readable, {
136
154
  "false": true,
@@ -138,19 +156,43 @@ var Root = /*#__PURE__*/function (_React$Component) {
138
156
  }, /*#__PURE__*/_react["default"].createElement("div", {
139
157
  className: classes.topPixelIndicator
140
158
  }, /*#__PURE__*/_react["default"].createElement("div", null, value * 100, "px"), /*#__PURE__*/_react["default"].createElement("div", null, "|")));
141
- })), showTitle && /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
142
- className: (0, _classnames["default"])((0, _defineProperty2["default"])({}, classes.disabledTitle, disabledTitle), classes.graphTitle),
159
+ })), showTitle && (disabledTitle ? /*#__PURE__*/_react["default"].createElement("div", {
160
+ className: (0, _classnames["default"])(classes.graphTitle, classes.disabledTitle),
161
+ dangerouslySetInnerHTML: {
162
+ __html: title || ''
163
+ }
164
+ }) : /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
165
+ className: (0, _classnames["default"])((0, _defineProperty2["default"])({}, classes.rightMargin, showPixelGuides), classes.graphTitle),
143
166
  markup: title || '',
144
- width: finalWidth,
145
167
  onChange: onChangeTitle,
146
168
  placeholder: !disabledTitle && 'Click here to add a title for this graph',
147
169
  toolbarOpts: {
148
170
  noBorder: true
149
171
  },
150
172
  activePlugins: activeTitlePlugins
173
+ })), showLabels && /*#__PURE__*/_react["default"].createElement(_label["default"], {
174
+ side: "top",
175
+ text: labels.top,
176
+ disabledLabel: disabledLabels,
177
+ placeholder: labelsPlaceholders.top,
178
+ graphHeight: finalHeight,
179
+ graphWidth: finalWidth,
180
+ onChange: function onChange(value) {
181
+ return _this2.onChangeLabel(value, 'top');
182
+ }
151
183
  }), /*#__PURE__*/_react["default"].createElement("div", {
152
184
  className: classes.wrapper
153
- }, /*#__PURE__*/_react["default"].createElement("svg", {
185
+ }, showLabels && /*#__PURE__*/_react["default"].createElement(_label["default"], {
186
+ side: "left",
187
+ text: labels.left,
188
+ disabledLabel: disabledLabels,
189
+ placeholder: labelsPlaceholders.left,
190
+ graphHeight: finalHeight,
191
+ graphWidth: finalWidth,
192
+ onChange: function onChange(value) {
193
+ return _this2.onChangeLabel(value, 'left');
194
+ }
195
+ }), /*#__PURE__*/_react["default"].createElement("svg", {
154
196
  width: finalWidth,
155
197
  height: finalHeight,
156
198
  className: classes.svg
@@ -163,20 +205,41 @@ var Root = /*#__PURE__*/function (_React$Component) {
163
205
  }
164
206
  },
165
207
  className: classes.graphBox,
166
- transform: "translate(".concat(padding, ", ").concat(padding, ")")
167
- }, children)), showPixelGuides && /*#__PURE__*/_react["default"].createElement("div", {
208
+ transform: "translate(".concat(leftPadding, ", ").concat(topPadding, ")")
209
+ }, children)), showLabels && /*#__PURE__*/_react["default"].createElement(_label["default"], {
210
+ side: "right",
211
+ text: labels.right,
212
+ disabledLabel: disabledLabels,
213
+ placeholder: labelsPlaceholders.right,
214
+ graphHeight: finalHeight,
215
+ graphWidth: finalWidth,
216
+ onChange: function onChange(value) {
217
+ return _this2.onChangeLabel(value, 'right');
218
+ }
219
+ }), showPixelGuides && /*#__PURE__*/_react["default"].createElement("div", {
168
220
  className: classes.sidePixelGuides,
169
221
  style: {
170
- paddingTop: sideGridlinesPadding + chartPadding
222
+ paddingTop: sideGridlinesPadding,
223
+ marginTop: thisIsChart ? 25 : 31
171
224
  }
172
- }, (0, _toConsumableArray2["default"])(Array(nbOfHorizontalLines + 1 - thisIsChart).keys()).reverse().map(function (value) {
225
+ }, (0, _toConsumableArray2["default"])(Array(nbOfHorizontalLines + 1).keys()).reverse().map(function (value) {
173
226
  return /*#__PURE__*/_react["default"].createElement(_renderUi.Readable, {
174
227
  "false": true,
175
228
  key: "top-guide-".concat(value)
176
229
  }, /*#__PURE__*/_react["default"].createElement("div", {
177
230
  className: classes.sidePixelIndicator
178
231
  }, "\u2501 ", value * 100, "px"));
179
- }))));
232
+ }))), showLabels && /*#__PURE__*/_react["default"].createElement(_label["default"], {
233
+ side: "bottom",
234
+ text: labels.bottom,
235
+ disabledLabel: disabledLabels,
236
+ placeholder: labelsPlaceholders.bottom,
237
+ graphHeight: finalHeight,
238
+ graphWidth: finalWidth,
239
+ onChange: function onChange(value) {
240
+ return _this2.onChangeLabel(value, 'bottom');
241
+ }
242
+ }));
180
243
  }
181
244
  }]);
182
245
  return Root;
@@ -205,7 +268,8 @@ var styles = function styles(theme) {
205
268
  backgroundColor: _renderUi.color.background()
206
269
  },
207
270
  wrapper: {
208
- display: 'flex'
271
+ display: 'flex',
272
+ position: 'relative'
209
273
  },
210
274
  svg: {},
211
275
  graphBox: {
@@ -221,10 +285,12 @@ var styles = function styles(theme) {
221
285
  disabledTitle: {
222
286
  pointerEvents: 'none'
223
287
  },
288
+ rightMargin: {
289
+ marginRight: '74px'
290
+ },
224
291
  topPixelGuides: {
225
292
  display: 'flex',
226
- paddingTop: '6px',
227
- marginLeft: '10px'
293
+ paddingTop: '6px'
228
294
  },
229
295
  topPixelIndicator: {
230
296
  color: _renderUi.color.primaryLight(),
package/lib/root.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"root.js","names":["Root","g","props","graphProps","onMouseMove","scale","snap","coords","mouse","_groups","x","invert","y","snapped","select","on","mouseMove","bind","disabledTitle","children","classes","onChangeTitle","thisIsChart","showLabels","showPixelGuides","showTitle","title","rootRef","size","width","height","domain","range","chartPadding","padding","extraPadding","finalWidth","finalHeight","activeTitlePlugins","nbOfVerticalLines","parseInt","nbOfHorizontalLines","sideGridlinesPadding","root","topPixelGuides","Array","keys","map","value","topPixelIndicator","cn","graphTitle","noBorder","wrapper","svg","r","graphBox","sidePixelGuides","paddingTop","reverse","sidePixelIndicator","React","Component","PropTypes","string","ChildrenType","bool","GraphPropsType","isRequired","func","object","styles","theme","border","color","primaryLight","text","backgroundColor","background","display","cursor","userSelect","fontSize","typography","textAlign","pointerEvents","marginLeft","flexDirection","alignItems","marginRight","marginBottom","withStyles"],"sources":["../src/root.jsx"],"sourcesContent":["import React from 'react';\nimport { ChildrenType } from './types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { select, mouse } from 'd3-selection';\nimport PropTypes from 'prop-types';\nimport { GraphPropsType } from './types';\nimport { color, Readable } from '@pie-lib/render-ui';\nimport EditableHtml from '@pie-lib/editable-html';\nimport cn from 'classnames';\n\nexport class Root extends React.Component {\n static propTypes = {\n title: PropTypes.string,\n children: ChildrenType,\n disabledTitle: PropTypes.bool,\n graphProps: GraphPropsType.isRequired,\n onChangeTitle: PropTypes.func,\n onMouseMove: PropTypes.func,\n classes: PropTypes.object.isRequired,\n showLabels: PropTypes.bool,\n showTitle: PropTypes.bool,\n showPixelGuides: PropTypes.bool,\n rootRef: PropTypes.func\n };\n\n mouseMove = g => {\n const { graphProps, onMouseMove } = this.props;\n\n if (!onMouseMove) {\n return;\n }\n\n const { scale, snap } = graphProps;\n const coords = mouse(g._groups[0][0]);\n const x = scale.x.invert(coords[0]);\n const y = scale.y.invert(coords[1]);\n\n const snapped = {\n x: snap.x(x),\n y: snap.y(y)\n };\n\n onMouseMove(snapped);\n };\n\n componentDidMount() {\n const g = select(this.g);\n g.on('mousemove', this.mouseMove.bind(this, g));\n }\n\n componentWillUnmount() {\n const g = select(this.g);\n g.on('mousemove', null);\n }\n\n render() {\n const {\n disabledTitle,\n graphProps,\n children,\n classes,\n onChangeTitle,\n thisIsChart,\n showLabels,\n showPixelGuides,\n showTitle,\n title,\n rootRef\n } = this.props;\n const {\n size: { width = 500, height = 500 },\n domain,\n range\n } = graphProps;\n\n const chartPadding = thisIsChart ? 45 : 0;\n const padding = showLabels ? 70 : 40;\n const extraPadding = showLabels ? 16 : 40;\n const finalWidth = width + padding * 2 + (domain.padding || 0) * 2 + extraPadding;\n const finalHeight = height + padding * 2 + (range.padding || 0) * 2;\n\n const activeTitlePlugins = [\n 'bold',\n 'italic',\n 'underline',\n 'strikethrough',\n 'math'\n // 'languageCharacters'\n ];\n\n const nbOfVerticalLines = parseInt(width / 100);\n const nbOfHorizontalLines = parseInt(height / 100);\n const sideGridlinesPadding = parseInt(height % 100);\n\n return (\n <div className={classes.root}>\n {showPixelGuides && (\n <div className={classes.topPixelGuides}>\n {[...Array(nbOfVerticalLines + 1).keys()].map(value => (\n <Readable false key={`top-guide-${value}`}>\n <div className={classes.topPixelIndicator}>\n <div>{value * 100}px</div>\n <div>|</div>\n </div>\n </Readable>\n ))}\n </div>\n )}\n {showTitle && (\n <EditableHtml\n className={cn(\n {\n [classes.disabledTitle]: disabledTitle\n },\n classes.graphTitle\n )}\n markup={title || ''}\n width={finalWidth}\n onChange={onChangeTitle}\n placeholder={!disabledTitle && 'Click here to add a title for this graph'}\n toolbarOpts={{ noBorder: true }}\n activePlugins={activeTitlePlugins}\n />\n )}\n <div className={classes.wrapper}>\n <svg width={finalWidth} height={finalHeight} className={classes.svg}>\n <g\n ref={r => {\n this.g = r;\n if (rootRef) {\n rootRef(r);\n }\n }}\n className={classes.graphBox}\n transform={`translate(${padding}, ${padding})`}\n >\n {children}\n </g>\n </svg>\n {showPixelGuides && (\n <div\n className={classes.sidePixelGuides}\n style={{ paddingTop: sideGridlinesPadding + chartPadding }}\n >\n {[...Array(nbOfHorizontalLines + 1 - thisIsChart).keys()].reverse().map(value => (\n <Readable false key={`top-guide-${value}`}>\n <div className={classes.sidePixelIndicator}>━ {value * 100}px</div>\n </Readable>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n }\n}\nconst styles = theme => ({\n root: {\n border: `solid 1px ${color.primaryLight()}`,\n color: color.text(),\n backgroundColor: color.background()\n },\n wrapper: {\n display: 'flex'\n },\n svg: {},\n graphBox: {\n cursor: 'pointer',\n userSelect: 'none'\n },\n graphTitle: {\n color: color.text(),\n fontSize: theme.typography.fontSize + 2,\n padding: '12px 4px 0',\n textAlign: 'center'\n },\n disabledTitle: {\n pointerEvents: 'none'\n },\n topPixelGuides: {\n display: 'flex',\n paddingTop: '6px',\n marginLeft: '10px'\n },\n topPixelIndicator: {\n color: color.primaryLight(),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n width: '100px',\n pointerEvents: 'none',\n userSelect: 'none'\n },\n sidePixelGuides: {\n width: '70px',\n display: 'flex',\n flexDirection: 'column',\n\n marginRight: '6px'\n },\n sidePixelIndicator: {\n color: color.primaryLight(),\n textAlign: 'right',\n height: '20px',\n pointerEvents: 'none',\n userSelect: 'none',\n\n '&:not(:last-child)': {\n marginBottom: '80px'\n }\n }\n});\n\nexport default withStyles(styles)(Root);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;;;;;IAEaA,I;;;;;;;;;;;;;;;kGAeC,UAAAC,CAAC,EAAI;MACf,kBAAoC,MAAKC,KAAzC;MAAA,IAAQC,UAAR,eAAQA,UAAR;MAAA,IAAoBC,WAApB,eAAoBA,WAApB;;MAEA,IAAI,CAACA,WAAL,EAAkB;QAChB;MACD;;MAED,IAAQC,KAAR,GAAwBF,UAAxB,CAAQE,KAAR;MAAA,IAAeC,IAAf,GAAwBH,UAAxB,CAAeG,IAAf;MACA,IAAMC,MAAM,GAAG,IAAAC,kBAAA,EAAMP,CAAC,CAACQ,OAAF,CAAU,CAAV,EAAa,CAAb,CAAN,CAAf;MACA,IAAMC,CAAC,GAAGL,KAAK,CAACK,CAAN,CAAQC,MAAR,CAAeJ,MAAM,CAAC,CAAD,CAArB,CAAV;MACA,IAAMK,CAAC,GAAGP,KAAK,CAACO,CAAN,CAAQD,MAAR,CAAeJ,MAAM,CAAC,CAAD,CAArB,CAAV;MAEA,IAAMM,OAAO,GAAG;QACdH,CAAC,EAAEJ,IAAI,CAACI,CAAL,CAAOA,CAAP,CADW;QAEdE,CAAC,EAAEN,IAAI,CAACM,CAAL,CAAOA,CAAP;MAFW,CAAhB;MAKAR,WAAW,CAACS,OAAD,CAAX;IACD,C;;;;;;WAED,6BAAoB;MAClB,IAAMZ,CAAC,GAAG,IAAAa,mBAAA,EAAO,KAAKb,CAAZ,CAAV;MACAA,CAAC,CAACc,EAAF,CAAK,WAAL,EAAkB,KAAKC,SAAL,CAAeC,IAAf,CAAoB,IAApB,EAA0BhB,CAA1B,CAAlB;IACD;;;WAED,gCAAuB;MACrB,IAAMA,CAAC,GAAG,IAAAa,mBAAA,EAAO,KAAKb,CAAZ,CAAV;MACAA,CAAC,CAACc,EAAF,CAAK,WAAL,EAAkB,IAAlB;IACD;;;WAED,kBAAS;MAAA;;MACP,mBAYI,KAAKb,KAZT;MAAA,IACEgB,aADF,gBACEA,aADF;MAAA,IAEEf,UAFF,gBAEEA,UAFF;MAAA,IAGEgB,QAHF,gBAGEA,QAHF;MAAA,IAIEC,OAJF,gBAIEA,OAJF;MAAA,IAKEC,aALF,gBAKEA,aALF;MAAA,IAMEC,WANF,gBAMEA,WANF;MAAA,IAOEC,UAPF,gBAOEA,UAPF;MAAA,IAQEC,eARF,gBAQEA,eARF;MAAA,IASEC,SATF,gBASEA,SATF;MAAA,IAUEC,KAVF,gBAUEA,KAVF;MAAA,IAWEC,OAXF,gBAWEA,OAXF;MAaA,uBAIIxB,UAJJ,CACEyB,IADF;MAAA,6CACUC,KADV;MAAA,IACUA,KADV,sCACkB,GADlB;MAAA,6CACuBC,MADvB;MAAA,IACuBA,MADvB,sCACgC,GADhC;MAAA,IAEEC,MAFF,GAII5B,UAJJ,CAEE4B,MAFF;MAAA,IAGEC,KAHF,GAII7B,UAJJ,CAGE6B,KAHF;MAMA,IAAMC,YAAY,GAAGX,WAAW,GAAG,EAAH,GAAQ,CAAxC;MACA,IAAMY,OAAO,GAAGX,UAAU,GAAG,EAAH,GAAQ,EAAlC;MACA,IAAMY,YAAY,GAAGZ,UAAU,GAAG,EAAH,GAAQ,EAAvC;MACA,IAAMa,UAAU,GAAGP,KAAK,GAAGK,OAAO,GAAG,CAAlB,GAAsB,CAACH,MAAM,CAACG,OAAP,IAAkB,CAAnB,IAAwB,CAA9C,GAAkDC,YAArE;MACA,IAAME,WAAW,GAAGP,MAAM,GAAGI,OAAO,GAAG,CAAnB,GAAuB,CAACF,KAAK,CAACE,OAAN,IAAiB,CAAlB,IAAuB,CAAlE;MAEA,IAAMI,kBAAkB,GAAG,CACzB,MADyB,EAEzB,QAFyB,EAGzB,WAHyB,EAIzB,eAJyB,EAKzB,MALyB,CAMzB;MANyB,CAA3B;MASA,IAAMC,iBAAiB,GAAGC,QAAQ,CAACX,KAAK,GAAG,GAAT,CAAlC;MACA,IAAMY,mBAAmB,GAAGD,QAAQ,CAACV,MAAM,GAAG,GAAV,CAApC;MACA,IAAMY,oBAAoB,GAAGF,QAAQ,CAACV,MAAM,GAAG,GAAV,CAArC;MAEA,oBACE;QAAK,SAAS,EAAEV,OAAO,CAACuB;MAAxB,GACGnB,eAAe,iBACd;QAAK,SAAS,EAAEJ,OAAO,CAACwB;MAAxB,GACG,oCAAIC,KAAK,CAACN,iBAAiB,GAAG,CAArB,CAAL,CAA6BO,IAA7B,EAAJ,EAAyCC,GAAzC,CAA6C,UAAAC,KAAK;QAAA,oBACjD,gCAAC,kBAAD;UAAU,aAAV;UAAgB,GAAG,sBAAeA,KAAf;QAAnB,gBACE;UAAK,SAAS,EAAE5B,OAAO,CAAC6B;QAAxB,gBACE,6CAAMD,KAAK,GAAG,GAAd,OADF,eAEE,iDAFF,CADF,CADiD;MAAA,CAAlD,CADH,CAFJ,EAaGvB,SAAS,iBACR,gCAAC,wBAAD;QACE,SAAS,EAAE,IAAAyB,sBAAA,uCAEN9B,OAAO,CAACF,aAFF,EAEkBA,aAFlB,GAITE,OAAO,CAAC+B,UAJC,CADb;QAOE,MAAM,EAAEzB,KAAK,IAAI,EAPnB;QAQE,KAAK,EAAEU,UART;QASE,QAAQ,EAAEf,aATZ;QAUE,WAAW,EAAE,CAACH,aAAD,IAAkB,0CAVjC;QAWE,WAAW,EAAE;UAAEkC,QAAQ,EAAE;QAAZ,CAXf;QAYE,aAAa,EAAEd;MAZjB,EAdJ,eA6BE;QAAK,SAAS,EAAElB,OAAO,CAACiC;MAAxB,gBACE;QAAK,KAAK,EAAEjB,UAAZ;QAAwB,MAAM,EAAEC,WAAhC;QAA6C,SAAS,EAAEjB,OAAO,CAACkC;MAAhE,gBACE;QACE,GAAG,EAAE,aAAAC,CAAC,EAAI;UACR,MAAI,CAACtD,CAAL,GAASsD,CAAT;;UACA,IAAI5B,OAAJ,EAAa;YACXA,OAAO,CAAC4B,CAAD,CAAP;UACD;QACF,CANH;QAOE,SAAS,EAAEnC,OAAO,CAACoC,QAPrB;QAQE,SAAS,sBAAetB,OAAf,eAA2BA,OAA3B;MARX,GAUGf,QAVH,CADF,CADF,EAeGK,eAAe,iBACd;QACE,SAAS,EAAEJ,OAAO,CAACqC,eADrB;QAEE,KAAK,EAAE;UAAEC,UAAU,EAAEhB,oBAAoB,GAAGT;QAArC;MAFT,GAIG,oCAAIY,KAAK,CAACJ,mBAAmB,GAAG,CAAtB,GAA0BnB,WAA3B,CAAL,CAA6CwB,IAA7C,EAAJ,EAAyDa,OAAzD,GAAmEZ,GAAnE,CAAuE,UAAAC,KAAK;QAAA,oBAC3E,gCAAC,kBAAD;UAAU,aAAV;UAAgB,GAAG,sBAAeA,KAAf;QAAnB,gBACE;UAAK,SAAS,EAAE5B,OAAO,CAACwC;QAAxB,cAA+CZ,KAAK,GAAG,GAAvD,OADF,CAD2E;MAAA,CAA5E,CAJH,CAhBJ,CA7BF,CADF;IA4DD;;;EAhJuBa,iBAAA,CAAMC,S;;;iCAAnB9D,I,eACQ;EACjB0B,KAAK,EAAEqC,qBAAA,CAAUC,MADA;EAEjB7C,QAAQ,EAAE8C,mBAFO;EAGjB/C,aAAa,EAAE6C,qBAAA,CAAUG,IAHR;EAIjB/D,UAAU,EAAEgE,qBAAA,CAAeC,UAJV;EAKjB/C,aAAa,EAAE0C,qBAAA,CAAUM,IALR;EAMjBjE,WAAW,EAAE2D,qBAAA,CAAUM,IANN;EAOjBjD,OAAO,EAAE2C,qBAAA,CAAUO,MAAV,CAAiBF,UAPT;EAQjB7C,UAAU,EAAEwC,qBAAA,CAAUG,IARL;EASjBzC,SAAS,EAAEsC,qBAAA,CAAUG,IATJ;EAUjB1C,eAAe,EAAEuC,qBAAA,CAAUG,IAVV;EAWjBvC,OAAO,EAAEoC,qBAAA,CAAUM;AAXF,C;;AAiJrB,IAAME,MAAM,GAAG,SAATA,MAAS,CAAAC,KAAK;EAAA,OAAK;IACvB7B,IAAI,EAAE;MACJ8B,MAAM,sBAAeC,eAAA,CAAMC,YAAN,EAAf,CADF;MAEJD,KAAK,EAAEA,eAAA,CAAME,IAAN,EAFH;MAGJC,eAAe,EAAEH,eAAA,CAAMI,UAAN;IAHb,CADiB;IAMvBzB,OAAO,EAAE;MACP0B,OAAO,EAAE;IADF,CANc;IASvBzB,GAAG,EAAE,EATkB;IAUvBE,QAAQ,EAAE;MACRwB,MAAM,EAAE,SADA;MAERC,UAAU,EAAE;IAFJ,CAVa;IAcvB9B,UAAU,EAAE;MACVuB,KAAK,EAAEA,eAAA,CAAME,IAAN,EADG;MAEVM,QAAQ,EAAEV,KAAK,CAACW,UAAN,CAAiBD,QAAjB,GAA4B,CAF5B;MAGVhD,OAAO,EAAE,YAHC;MAIVkD,SAAS,EAAE;IAJD,CAdW;IAoBvBlE,aAAa,EAAE;MACbmE,aAAa,EAAE;IADF,CApBQ;IAuBvBzC,cAAc,EAAE;MACdmC,OAAO,EAAE,MADK;MAEdrB,UAAU,EAAE,KAFE;MAGd4B,UAAU,EAAE;IAHE,CAvBO;IA4BvBrC,iBAAiB,EAAE;MACjByB,KAAK,EAAEA,eAAA,CAAMC,YAAN,EADU;MAEjBI,OAAO,EAAE,MAFQ;MAGjBQ,aAAa,EAAE,QAHE;MAIjBC,UAAU,EAAE,QAJK;MAKjB3D,KAAK,EAAE,OALU;MAMjBwD,aAAa,EAAE,MANE;MAOjBJ,UAAU,EAAE;IAPK,CA5BI;IAqCvBxB,eAAe,EAAE;MACf5B,KAAK,EAAE,MADQ;MAEfkD,OAAO,EAAE,MAFM;MAGfQ,aAAa,EAAE,QAHA;MAKfE,WAAW,EAAE;IALE,CArCM;IA4CvB7B,kBAAkB,EAAE;MAClBc,KAAK,EAAEA,eAAA,CAAMC,YAAN,EADW;MAElBS,SAAS,EAAE,OAFO;MAGlBtD,MAAM,EAAE,MAHU;MAIlBuD,aAAa,EAAE,MAJG;MAKlBJ,UAAU,EAAE,MALM;MAOlB,sBAAsB;QACpBS,YAAY,EAAE;MADM;IAPJ;EA5CG,CAAL;AAAA,CAApB;;eAyDe,IAAAC,kBAAA,EAAWpB,MAAX,EAAmBvE,IAAnB,C"}
1
+ {"version":3,"file":"root.js","names":["Root","g","props","graphProps","onMouseMove","scale","snap","coords","mouse","_groups","x","invert","y","snapped","newValue","side","labels","onChangeLabels","select","on","mouseMove","bind","disabledTitle","disabledLabels","labelsPlaceholders","children","classes","onChangeTitle","thisIsChart","showLabels","showPixelGuides","showTitle","title","rootRef","size","width","height","domain","range","topPadding","leftPadding","finalWidth","padding","finalHeight","activeTitlePlugins","actualHeight","nbOfVerticalLines","parseInt","nbOfHorizontalLines","sideGridlinesPadding","root","topPixelGuides","marginLeft","Array","keys","map","value","topPixelIndicator","cn","graphTitle","__html","rightMargin","noBorder","top","onChangeLabel","wrapper","left","svg","r","graphBox","right","sidePixelGuides","paddingTop","marginTop","reverse","sidePixelIndicator","bottom","React","Component","PropTypes","string","ChildrenType","bool","GraphPropsType","isRequired","func","object","styles","theme","border","color","primaryLight","text","backgroundColor","background","display","position","cursor","userSelect","fontSize","typography","textAlign","pointerEvents","marginRight","flexDirection","alignItems","marginBottom","withStyles"],"sources":["../src/root.jsx"],"sourcesContent":["import React from 'react';\nimport { ChildrenType } from './types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { select, mouse } from 'd3-selection';\nimport PropTypes from 'prop-types';\nimport { GraphPropsType } from './types';\nimport { color, Readable } from '@pie-lib/render-ui';\nimport EditableHtml from '@pie-lib/editable-html';\nimport cn from 'classnames';\nimport Label from './label';\n\nexport class Root extends React.Component {\n static propTypes = {\n title: PropTypes.string,\n children: ChildrenType,\n disabledTitle: PropTypes.bool,\n graphProps: GraphPropsType.isRequired,\n onChangeTitle: PropTypes.func,\n onMouseMove: PropTypes.func,\n classes: PropTypes.object.isRequired,\n showLabels: PropTypes.bool,\n showTitle: PropTypes.bool,\n showPixelGuides: PropTypes.bool,\n rootRef: PropTypes.func\n };\n\n mouseMove = g => {\n const { graphProps, onMouseMove } = this.props;\n\n if (!onMouseMove) {\n return;\n }\n\n const { scale, snap } = graphProps;\n const coords = mouse(g._groups[0][0]);\n const x = scale.x.invert(coords[0]);\n const y = scale.y.invert(coords[1]);\n\n const snapped = {\n x: snap.x(x),\n y: snap.y(y)\n };\n\n onMouseMove(snapped);\n };\n\n componentDidMount() {\n const g = select(this.g);\n g.on('mousemove', this.mouseMove.bind(this, g));\n }\n\n componentWillUnmount() {\n const g = select(this.g);\n g.on('mousemove', null);\n }\n\n onChangeLabel = (newValue, side) => {\n const { labels, onChangeLabels } = this.props;\n\n onChangeLabels({\n ...labels,\n [side]: newValue\n });\n };\n\n render() {\n const {\n disabledTitle,\n disabledLabels,\n labels,\n labelsPlaceholders,\n graphProps,\n children,\n classes,\n onChangeTitle,\n thisIsChart,\n showLabels,\n showPixelGuides,\n showTitle,\n title,\n rootRef\n } = this.props;\n const {\n size: { width = 500, height = 500 },\n domain,\n range\n } = graphProps;\n\n const topPadding = 40;\n const leftPadding = showLabels ? 80 : 60;\n const finalWidth = width + leftPadding * 2 + (domain.padding || 0) * 2;\n const finalHeight = height + topPadding * 2 + (range.padding || 0) * 2;\n\n const activeTitlePlugins = [\n 'bold',\n 'italic',\n 'underline',\n 'strikethrough',\n 'math'\n // 'languageCharacters'\n ];\n\n const actualHeight = thisIsChart && showPixelGuides ? height - 80 : height;\n const nbOfVerticalLines = parseInt(width / 100);\n const nbOfHorizontalLines = parseInt(actualHeight / 100);\n const sideGridlinesPadding = parseInt(actualHeight % 100);\n\n return (\n <div className={classes.root}>\n {showPixelGuides && (\n <div\n className={classes.topPixelGuides}\n style={{ marginLeft: thisIsChart ? 10 : showLabels ? 30 : 10 }}\n >\n {[...Array(nbOfVerticalLines + 1).keys()].map(value => (\n <Readable false key={`top-guide-${value}`}>\n <div className={classes.topPixelIndicator}>\n <div>{value * 100}px</div>\n <div>|</div>\n </div>\n </Readable>\n ))}\n </div>\n )}\n {showTitle &&\n (disabledTitle ? (\n <div\n className={cn(classes.graphTitle, classes.disabledTitle)}\n dangerouslySetInnerHTML={{ __html: title || '' }}\n />\n ) : (\n <EditableHtml\n className={cn({ [classes.rightMargin]: showPixelGuides }, classes.graphTitle)}\n markup={title || ''}\n onChange={onChangeTitle}\n placeholder={!disabledTitle && 'Click here to add a title for this graph'}\n toolbarOpts={{ noBorder: true }}\n activePlugins={activeTitlePlugins}\n />\n ))}\n {showLabels && (\n <Label\n side=\"top\"\n text={labels.top}\n disabledLabel={disabledLabels}\n placeholder={labelsPlaceholders.top}\n graphHeight={finalHeight}\n graphWidth={finalWidth}\n onChange={value => this.onChangeLabel(value, 'top')}\n />\n )}\n <div className={classes.wrapper}>\n {showLabels && (\n <Label\n side=\"left\"\n text={labels.left}\n disabledLabel={disabledLabels}\n placeholder={labelsPlaceholders.left}\n graphHeight={finalHeight}\n graphWidth={finalWidth}\n onChange={value => this.onChangeLabel(value, 'left')}\n />\n )}\n <svg width={finalWidth} height={finalHeight} className={classes.svg}>\n <g\n ref={r => {\n this.g = r;\n if (rootRef) {\n rootRef(r);\n }\n }}\n className={classes.graphBox}\n transform={`translate(${leftPadding}, ${topPadding})`}\n >\n {children}\n </g>\n </svg>\n {showLabels && (\n <Label\n side=\"right\"\n text={labels.right}\n disabledLabel={disabledLabels}\n placeholder={labelsPlaceholders.right}\n graphHeight={finalHeight}\n graphWidth={finalWidth}\n onChange={value => this.onChangeLabel(value, 'right')}\n />\n )}\n {showPixelGuides && (\n <div\n className={classes.sidePixelGuides}\n style={{\n paddingTop: sideGridlinesPadding,\n marginTop: thisIsChart ? 25 : 31\n }}\n >\n {[...Array(nbOfHorizontalLines + 1).keys()].reverse().map(value => (\n <Readable false key={`top-guide-${value}`}>\n <div className={classes.sidePixelIndicator}>━ {value * 100}px</div>\n </Readable>\n ))}\n </div>\n )}\n </div>\n {showLabels && (\n <Label\n side=\"bottom\"\n text={labels.bottom}\n disabledLabel={disabledLabels}\n placeholder={labelsPlaceholders.bottom}\n graphHeight={finalHeight}\n graphWidth={finalWidth}\n onChange={value => this.onChangeLabel(value, 'bottom')}\n />\n )}\n </div>\n );\n }\n}\nconst styles = theme => ({\n root: {\n border: `solid 1px ${color.primaryLight()}`,\n color: color.text(),\n backgroundColor: color.background()\n },\n wrapper: {\n display: 'flex',\n position: 'relative'\n },\n svg: {},\n graphBox: {\n cursor: 'pointer',\n userSelect: 'none'\n },\n graphTitle: {\n color: color.text(),\n fontSize: theme.typography.fontSize + 2,\n padding: '12px 4px 0',\n textAlign: 'center'\n },\n disabledTitle: {\n pointerEvents: 'none'\n },\n rightMargin: {\n marginRight: '74px'\n },\n topPixelGuides: {\n display: 'flex',\n paddingTop: '6px'\n },\n topPixelIndicator: {\n color: color.primaryLight(),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n width: '100px',\n pointerEvents: 'none',\n userSelect: 'none'\n },\n sidePixelGuides: {\n width: '70px',\n display: 'flex',\n flexDirection: 'column',\n marginRight: '6px'\n },\n sidePixelIndicator: {\n color: color.primaryLight(),\n textAlign: 'right',\n height: '20px',\n pointerEvents: 'none',\n userSelect: 'none',\n\n '&:not(:last-child)': {\n marginBottom: '80px'\n }\n }\n});\n\nexport default withStyles(styles)(Root);\n"],"mappings":"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"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "2.1.10-next.600+98312644",
6
+ "version": "2.1.10-next.624+902972ab",
7
7
  "description": "Some underlying components for building charts/graphs",
8
8
  "keywords": [
9
9
  "react",
@@ -38,6 +38,6 @@
38
38
  "peerDependencies": {
39
39
  "react": "^16.8.1"
40
40
  },
41
- "gitHead": "9831264443f6dee10be7f14ccdb712a80d2d8658",
41
+ "gitHead": "902972ab86b0fcd40ddd0e7c809efe9922605668",
42
42
  "scripts": {}
43
43
  }
package/src/label.jsx ADDED
@@ -0,0 +1,107 @@
1
+ import React, { useState } from 'react';
2
+ import { color, Readable } from '@pie-lib/render-ui';
3
+ import cn from 'classnames';
4
+ import EditableHtml from '@pie-lib/editable-html';
5
+ import { withStyles } from '@material-ui/core/styles';
6
+
7
+ const LabelComponent = props => {
8
+ const {
9
+ classes,
10
+ disabledLabel,
11
+ graphHeight,
12
+ graphWidth,
13
+ placeholder,
14
+ text,
15
+ side,
16
+ onChange
17
+ } = props;
18
+ const [rotatedToHorizontal, setRotatedToHorizontal] = useState(false);
19
+ const activePlugins = [
20
+ 'bold',
21
+ 'italic',
22
+ 'underline',
23
+ 'strikethrough',
24
+ 'math'
25
+ // 'languageCharacters'
26
+ ];
27
+
28
+ const defaultStyle = {
29
+ width: side === 'left' || side === 'right' ? graphHeight - 8 : graphWidth - 8,
30
+ top: (side === 'left' && `${graphHeight - 8}px`) || 0,
31
+ left: (side === 'right' && `${graphWidth - 8}px`) || 0
32
+ };
33
+
34
+ const rotatedStyle = {
35
+ width: graphWidth - 8,
36
+ top: (side === 'right' && `${graphHeight - 22}px`) || 0,
37
+ left: 0
38
+ };
39
+
40
+ const rotateLabel = () =>
41
+ !disabledLabel && (side === 'left' || side === 'right') && setRotatedToHorizontal(true);
42
+
43
+ return (
44
+ <Readable false>
45
+ <div
46
+ className={cn(classes.axisLabel, {
47
+ [classes.rotateLeftLabel]: side === 'left' && !rotatedToHorizontal,
48
+ [classes.rotateRightLabel]: side === 'right' && !rotatedToHorizontal,
49
+ [classes.editLabel]: rotatedToHorizontal
50
+ })}
51
+ style={rotatedToHorizontal ? rotatedStyle : defaultStyle}
52
+ onClick={rotateLabel}
53
+ >
54
+ {disabledLabel ? (
55
+ <div className={classes.disabledLabel} dangerouslySetInnerHTML={{ __html: text || '' }} />
56
+ ) : (
57
+ <EditableHtml
58
+ markup={text || ''}
59
+ onChange={onChange}
60
+ placeholder={!disabledLabel && placeholder}
61
+ toolbarOpts={{
62
+ position: side === 'bottom' ? 'top' : 'bottom',
63
+ noBorder: true
64
+ }}
65
+ activePlugins={activePlugins}
66
+ onDone={() => setRotatedToHorizontal(false)}
67
+ />
68
+ )}
69
+ </div>
70
+ </Readable>
71
+ );
72
+ };
73
+
74
+ export default withStyles(theme => ({
75
+ label: {
76
+ fill: color.secondary()
77
+ },
78
+ axisLabel: {
79
+ fontSize: theme.typography.fontSize - 2,
80
+ textAlign: 'center',
81
+ margin: '4px',
82
+ padding: '4px 0'
83
+ },
84
+ disabledLabel: {
85
+ pointerEvents: 'none',
86
+ width: '100%'
87
+ },
88
+ editLabel: {
89
+ position: 'absolute',
90
+ backgroundColor: 'white',
91
+ borderRadius: '4px',
92
+ boxShadow: '0px 5px 8px rgba(0, 0, 0, 0.15)',
93
+ zIndex: 10
94
+ },
95
+ rotateLeftLabel: {
96
+ rotate: '-90deg',
97
+ transformOrigin: '0 0',
98
+ transformStyle: 'preserve-3d',
99
+ position: 'absolute'
100
+ },
101
+ rotateRightLabel: {
102
+ rotate: '90deg',
103
+ transformOrigin: '0 0',
104
+ transformStyle: 'preserve-3d',
105
+ position: 'absolute'
106
+ }
107
+ }))(LabelComponent);
package/src/root.jsx CHANGED
@@ -7,6 +7,7 @@ import { GraphPropsType } from './types';
7
7
  import { color, Readable } from '@pie-lib/render-ui';
8
8
  import EditableHtml from '@pie-lib/editable-html';
9
9
  import cn from 'classnames';
10
+ import Label from './label';
10
11
 
11
12
  export class Root extends React.Component {
12
13
  static propTypes = {
@@ -53,9 +54,21 @@ export class Root extends React.Component {
53
54
  g.on('mousemove', null);
54
55
  }
55
56
 
57
+ onChangeLabel = (newValue, side) => {
58
+ const { labels, onChangeLabels } = this.props;
59
+
60
+ onChangeLabels({
61
+ ...labels,
62
+ [side]: newValue
63
+ });
64
+ };
65
+
56
66
  render() {
57
67
  const {
58
68
  disabledTitle,
69
+ disabledLabels,
70
+ labels,
71
+ labelsPlaceholders,
59
72
  graphProps,
60
73
  children,
61
74
  classes,
@@ -73,11 +86,10 @@ export class Root extends React.Component {
73
86
  range
74
87
  } = graphProps;
75
88
 
76
- const chartPadding = thisIsChart ? 45 : 0;
77
- const padding = showLabels ? 70 : 40;
78
- const extraPadding = showLabels ? 16 : 40;
79
- const finalWidth = width + padding * 2 + (domain.padding || 0) * 2 + extraPadding;
80
- const finalHeight = height + padding * 2 + (range.padding || 0) * 2;
89
+ const topPadding = 40;
90
+ const leftPadding = showLabels ? 80 : 60;
91
+ const finalWidth = width + leftPadding * 2 + (domain.padding || 0) * 2;
92
+ const finalHeight = height + topPadding * 2 + (range.padding || 0) * 2;
81
93
 
82
94
  const activeTitlePlugins = [
83
95
  'bold',
@@ -88,14 +100,18 @@ export class Root extends React.Component {
88
100
  // 'languageCharacters'
89
101
  ];
90
102
 
103
+ const actualHeight = thisIsChart && showPixelGuides ? height - 80 : height;
91
104
  const nbOfVerticalLines = parseInt(width / 100);
92
- const nbOfHorizontalLines = parseInt(height / 100);
93
- const sideGridlinesPadding = parseInt(height % 100);
105
+ const nbOfHorizontalLines = parseInt(actualHeight / 100);
106
+ const sideGridlinesPadding = parseInt(actualHeight % 100);
94
107
 
95
108
  return (
96
109
  <div className={classes.root}>
97
110
  {showPixelGuides && (
98
- <div className={classes.topPixelGuides}>
111
+ <div
112
+ className={classes.topPixelGuides}
113
+ style={{ marginLeft: thisIsChart ? 10 : showLabels ? 30 : 10 }}
114
+ >
99
115
  {[...Array(nbOfVerticalLines + 1).keys()].map(value => (
100
116
  <Readable false key={`top-guide-${value}`}>
101
117
  <div className={classes.topPixelIndicator}>
@@ -106,23 +122,45 @@ export class Root extends React.Component {
106
122
  ))}
107
123
  </div>
108
124
  )}
109
- {showTitle && (
110
- <EditableHtml
111
- className={cn(
112
- {
113
- [classes.disabledTitle]: disabledTitle
114
- },
115
- classes.graphTitle
116
- )}
117
- markup={title || ''}
118
- width={finalWidth}
119
- onChange={onChangeTitle}
120
- placeholder={!disabledTitle && 'Click here to add a title for this graph'}
121
- toolbarOpts={{ noBorder: true }}
122
- activePlugins={activeTitlePlugins}
125
+ {showTitle &&
126
+ (disabledTitle ? (
127
+ <div
128
+ className={cn(classes.graphTitle, classes.disabledTitle)}
129
+ dangerouslySetInnerHTML={{ __html: title || '' }}
130
+ />
131
+ ) : (
132
+ <EditableHtml
133
+ className={cn({ [classes.rightMargin]: showPixelGuides }, classes.graphTitle)}
134
+ markup={title || ''}
135
+ onChange={onChangeTitle}
136
+ placeholder={!disabledTitle && 'Click here to add a title for this graph'}
137
+ toolbarOpts={{ noBorder: true }}
138
+ activePlugins={activeTitlePlugins}
139
+ />
140
+ ))}
141
+ {showLabels && (
142
+ <Label
143
+ side="top"
144
+ text={labels.top}
145
+ disabledLabel={disabledLabels}
146
+ placeholder={labelsPlaceholders.top}
147
+ graphHeight={finalHeight}
148
+ graphWidth={finalWidth}
149
+ onChange={value => this.onChangeLabel(value, 'top')}
123
150
  />
124
151
  )}
125
152
  <div className={classes.wrapper}>
153
+ {showLabels && (
154
+ <Label
155
+ side="left"
156
+ text={labels.left}
157
+ disabledLabel={disabledLabels}
158
+ placeholder={labelsPlaceholders.left}
159
+ graphHeight={finalHeight}
160
+ graphWidth={finalWidth}
161
+ onChange={value => this.onChangeLabel(value, 'left')}
162
+ />
163
+ )}
126
164
  <svg width={finalWidth} height={finalHeight} className={classes.svg}>
127
165
  <g
128
166
  ref={r => {
@@ -132,17 +170,31 @@ export class Root extends React.Component {
132
170
  }
133
171
  }}
134
172
  className={classes.graphBox}
135
- transform={`translate(${padding}, ${padding})`}
173
+ transform={`translate(${leftPadding}, ${topPadding})`}
136
174
  >
137
175
  {children}
138
176
  </g>
139
177
  </svg>
178
+ {showLabels && (
179
+ <Label
180
+ side="right"
181
+ text={labels.right}
182
+ disabledLabel={disabledLabels}
183
+ placeholder={labelsPlaceholders.right}
184
+ graphHeight={finalHeight}
185
+ graphWidth={finalWidth}
186
+ onChange={value => this.onChangeLabel(value, 'right')}
187
+ />
188
+ )}
140
189
  {showPixelGuides && (
141
190
  <div
142
191
  className={classes.sidePixelGuides}
143
- style={{ paddingTop: sideGridlinesPadding + chartPadding }}
192
+ style={{
193
+ paddingTop: sideGridlinesPadding,
194
+ marginTop: thisIsChart ? 25 : 31
195
+ }}
144
196
  >
145
- {[...Array(nbOfHorizontalLines + 1 - thisIsChart).keys()].reverse().map(value => (
197
+ {[...Array(nbOfHorizontalLines + 1).keys()].reverse().map(value => (
146
198
  <Readable false key={`top-guide-${value}`}>
147
199
  <div className={classes.sidePixelIndicator}>━ {value * 100}px</div>
148
200
  </Readable>
@@ -150,6 +202,17 @@ export class Root extends React.Component {
150
202
  </div>
151
203
  )}
152
204
  </div>
205
+ {showLabels && (
206
+ <Label
207
+ side="bottom"
208
+ text={labels.bottom}
209
+ disabledLabel={disabledLabels}
210
+ placeholder={labelsPlaceholders.bottom}
211
+ graphHeight={finalHeight}
212
+ graphWidth={finalWidth}
213
+ onChange={value => this.onChangeLabel(value, 'bottom')}
214
+ />
215
+ )}
153
216
  </div>
154
217
  );
155
218
  }
@@ -161,7 +224,8 @@ const styles = theme => ({
161
224
  backgroundColor: color.background()
162
225
  },
163
226
  wrapper: {
164
- display: 'flex'
227
+ display: 'flex',
228
+ position: 'relative'
165
229
  },
166
230
  svg: {},
167
231
  graphBox: {
@@ -177,10 +241,12 @@ const styles = theme => ({
177
241
  disabledTitle: {
178
242
  pointerEvents: 'none'
179
243
  },
244
+ rightMargin: {
245
+ marginRight: '74px'
246
+ },
180
247
  topPixelGuides: {
181
248
  display: 'flex',
182
- paddingTop: '6px',
183
- marginLeft: '10px'
249
+ paddingTop: '6px'
184
250
  },
185
251
  topPixelIndicator: {
186
252
  color: color.primaryLight(),
@@ -195,7 +261,6 @@ const styles = theme => ({
195
261
  width: '70px',
196
262
  display: 'flex',
197
263
  flexDirection: 'column',
198
-
199
264
  marginRight: '6px'
200
265
  },
201
266
  sidePixelIndicator: {