@pie-lib/plot 2.3.0 → 2.4.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/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [2.4.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/plot@2.3.0...@pie-lib/plot@2.4.0) (2022-08-15)
7
+
8
+
9
+ ### Features
10
+
11
+ * **graphing, plot:** added pixel guide lines + ui improvements ([02ddff1](https://github.com/pie-framework/pie-lib/commit/02ddff1aed6a279b8a4ae1fcf100c766596c29c4))
12
+
13
+
14
+
15
+
16
+
6
17
  # [2.3.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/plot@2.2.0...@pie-lib/plot@2.3.0) (2022-08-01)
7
18
 
8
19
 
package/lib/root.js CHANGED
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports["default"] = exports.Root = void 0;
9
9
 
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+
10
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
13
 
12
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -102,6 +104,8 @@ var Root = /*#__PURE__*/function (_React$Component) {
102
104
  children = _this$props2.children,
103
105
  classes = _this$props2.classes,
104
106
  onChangeTitle = _this$props2.onChangeTitle,
107
+ showLabels = _this$props2.showLabels,
108
+ showPixelGuides = _this$props2.showPixelGuides,
105
109
  showTitle = _this$props2.showTitle,
106
110
  title = _this$props2.title,
107
111
  rootRef = _this$props2.rootRef;
@@ -112,16 +116,27 @@ var Root = /*#__PURE__*/function (_React$Component) {
112
116
  height = _graphProps$size$heig === void 0 ? 500 : _graphProps$size$heig,
113
117
  domain = graphProps.domain,
114
118
  range = graphProps.range;
115
- var topPadding = 50;
116
- var leftPadding = topPadding + 10; // left side requires an extra padding of 10
117
-
118
- var finalWidth = width + leftPadding * 2 + (domain.padding || 0) * 2;
119
- var finalHeight = height + topPadding * 2 + (range.padding || 0) * 2;
120
- var activeTitlePlugins = ['bold', 'italic', 'underline', 'strikethrough' // 'languageCharacters'
119
+ var padding = showLabels ? 70 : 40;
120
+ var extraPadding = showLabels ? 16 : 40;
121
+ var finalWidth = width + padding * 2 + (domain.padding || 0) * 2 + extraPadding;
122
+ var finalHeight = height + padding * 2 + (range.padding || 0) * 2;
123
+ var activeTitlePlugins = ['bold', 'italic', 'underline', 'strikethrough', 'math' // 'languageCharacters'
121
124
  ];
125
+ var nbOfVerticalLines = parseInt(width / 100);
126
+ var nbOfHorizontalLines = parseInt(height / 100);
127
+ var sideGridlinesPadding = parseInt(height % 100);
122
128
  return /*#__PURE__*/_react["default"].createElement("div", {
123
129
  className: classes.root
124
- }, showTitle && /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
130
+ }, showPixelGuides && /*#__PURE__*/_react["default"].createElement("div", {
131
+ className: classes.topPixelGuides
132
+ }, (0, _toConsumableArray2["default"])(Array(nbOfVerticalLines + 1).keys()).map(function (value) {
133
+ return /*#__PURE__*/_react["default"].createElement(_renderUi.Readable, {
134
+ "false": true,
135
+ key: "top-guide-".concat(value)
136
+ }, /*#__PURE__*/_react["default"].createElement("div", {
137
+ className: classes.topPixelIndicator
138
+ }, /*#__PURE__*/_react["default"].createElement("div", null, value * 100, "px"), /*#__PURE__*/_react["default"].createElement("div", null, "|")));
139
+ })), showTitle && /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
125
140
  className: (0, _classnames["default"])((0, _defineProperty2["default"])({}, classes.disabledTitle, disabledTitle), classes.graphTitle),
126
141
  markup: title || '',
127
142
  width: finalWidth,
@@ -131,7 +146,9 @@ var Root = /*#__PURE__*/function (_React$Component) {
131
146
  noBorder: true
132
147
  },
133
148
  activePlugins: activeTitlePlugins
134
- }), /*#__PURE__*/_react["default"].createElement("svg", {
149
+ }), /*#__PURE__*/_react["default"].createElement("div", {
150
+ className: classes.wrapper
151
+ }, /*#__PURE__*/_react["default"].createElement("svg", {
135
152
  width: finalWidth,
136
153
  height: finalHeight,
137
154
  className: classes.svg
@@ -144,8 +161,20 @@ var Root = /*#__PURE__*/function (_React$Component) {
144
161
  }
145
162
  },
146
163
  className: classes.graphBox,
147
- transform: "translate(".concat(leftPadding, ", ").concat(topPadding, ")")
148
- }, children)));
164
+ transform: "translate(".concat(padding, ", ").concat(padding, ")")
165
+ }, children)), showPixelGuides && /*#__PURE__*/_react["default"].createElement("div", {
166
+ className: classes.sidePixelGuides,
167
+ style: {
168
+ paddingTop: sideGridlinesPadding
169
+ }
170
+ }, (0, _toConsumableArray2["default"])(Array(nbOfHorizontalLines + 1).keys()).reverse().map(function (value) {
171
+ return /*#__PURE__*/_react["default"].createElement(_renderUi.Readable, {
172
+ "false": true,
173
+ key: "top-guide-".concat(value)
174
+ }, /*#__PURE__*/_react["default"].createElement("div", {
175
+ className: classes.sidePixelIndicator
176
+ }, "\u2501 ", value * 100, "px"));
177
+ }))));
149
178
  }
150
179
  }]);
151
180
  return Root;
@@ -155,10 +184,14 @@ exports.Root = Root;
155
184
  (0, _defineProperty2["default"])(Root, "propTypes", {
156
185
  title: _propTypes["default"].string,
157
186
  children: _types.ChildrenType,
187
+ disabledTitle: _propTypes["default"].bool,
158
188
  graphProps: _types.GraphPropsType.isRequired,
189
+ onChangeTitle: _propTypes["default"].func,
159
190
  onMouseMove: _propTypes["default"].func,
160
191
  classes: _propTypes["default"].object.isRequired,
192
+ showLabels: _propTypes["default"].bool,
161
193
  showTitle: _propTypes["default"].bool,
194
+ showPixelGuides: _propTypes["default"].bool,
162
195
  rootRef: _propTypes["default"].func
163
196
  });
164
197
 
@@ -169,6 +202,9 @@ var styles = function styles(theme) {
169
202
  color: _renderUi.color.text(),
170
203
  backgroundColor: _renderUi.color.background()
171
204
  },
205
+ wrapper: {
206
+ display: 'flex'
207
+ },
172
208
  svg: {},
173
209
  graphBox: {
174
210
  cursor: 'pointer',
@@ -177,11 +213,42 @@ var styles = function styles(theme) {
177
213
  graphTitle: {
178
214
  color: _renderUi.color.text(),
179
215
  fontSize: theme.typography.fontSize + 2,
180
- padding: '8px 50px 0',
216
+ padding: '12px 4px 0',
181
217
  textAlign: 'center'
182
218
  },
183
219
  disabledTitle: {
184
220
  pointerEvents: 'none'
221
+ },
222
+ topPixelGuides: {
223
+ display: 'flex',
224
+ paddingTop: '6px',
225
+ marginLeft: '10px'
226
+ },
227
+ topPixelIndicator: {
228
+ color: _renderUi.color.primaryLight(),
229
+ display: 'flex',
230
+ flexDirection: 'column',
231
+ alignItems: 'center',
232
+ width: '100px',
233
+ pointerEvents: 'none',
234
+ userSelect: 'none'
235
+ },
236
+ sidePixelGuides: {
237
+ width: '70px',
238
+ display: 'flex',
239
+ flexDirection: 'column',
240
+ marginTop: '40px',
241
+ marginRight: '6px'
242
+ },
243
+ sidePixelIndicator: {
244
+ color: _renderUi.color.primaryLight(),
245
+ textAlign: 'right',
246
+ height: '20px',
247
+ pointerEvents: 'none',
248
+ userSelect: 'none',
249
+ '&:not(:last-child)': {
250
+ marginBottom: '80px'
251
+ }
185
252
  }
186
253
  };
187
254
  };
package/lib/root.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/root.jsx"],"names":["Root","g","props","graphProps","onMouseMove","scale","snap","coords","_groups","x","invert","y","snapped","on","mouseMove","bind","disabledTitle","children","classes","onChangeTitle","showTitle","title","rootRef","size","width","height","domain","range","topPadding","leftPadding","finalWidth","padding","finalHeight","activeTitlePlugins","root","graphTitle","noBorder","svg","r","graphBox","React","Component","PropTypes","string","ChildrenType","GraphPropsType","isRequired","func","object","bool","styles","theme","border","color","primaryLight","text","backgroundColor","background","cursor","userSelect","fontSize","typography","textAlign","pointerEvents"],"mappings":"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","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 } 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 graphProps: GraphPropsType.isRequired,\n onMouseMove: PropTypes.func,\n classes: PropTypes.object.isRequired,\n showTitle: 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 showTitle,\n title,\n rootRef\n } = this.props;\n const {\n size: { width = 500, height = 500 },\n domain,\n range\n } = graphProps;\n const topPadding = 50;\n const leftPadding = topPadding + 10; // left side requires an extra padding of 10\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 // 'languageCharacters'\n ];\n\n return (\n <div className={classes.root}>\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 <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 </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 svg: {},\n graphBox: {\n cursor: 'pointer',\n userSelect: 'none'\n },\n graphTitle: {\n color: color.text(),\n fontSize: theme.typography.fontSize + 2,\n padding: '8px 50px 0',\n textAlign: 'center'\n },\n disabledTitle: {\n pointerEvents: 'none'\n }\n});\n\nexport default withStyles(styles)(Root);\n"],"file":"root.js"}
1
+ {"version":3,"sources":["../src/root.jsx"],"names":["Root","g","props","graphProps","onMouseMove","scale","snap","coords","_groups","x","invert","y","snapped","on","mouseMove","bind","disabledTitle","children","classes","onChangeTitle","showLabels","showPixelGuides","showTitle","title","rootRef","size","width","height","domain","range","padding","extraPadding","finalWidth","finalHeight","activeTitlePlugins","nbOfVerticalLines","parseInt","nbOfHorizontalLines","sideGridlinesPadding","root","topPixelGuides","Array","keys","map","value","topPixelIndicator","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","marginTop","marginRight","marginBottom"],"mappings":"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","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 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 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 className={classes.sidePixelGuides} style={{ paddingTop: sideGridlinesPadding }}>\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 </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 marginTop: '40px',\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"],"file":"root.js"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "2.3.0",
6
+ "version": "2.4.0",
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": "5f0932d39d7f01be0f96665b8fbe45ee745c2868",
41
+ "gitHead": "5cd198308a7395a8faa8d9c09ab548964d9d65bf",
42
42
  "scripts": {}
43
43
  }
package/src/root.jsx CHANGED
@@ -4,7 +4,7 @@ import { withStyles } from '@material-ui/core/styles';
4
4
  import { select, mouse } from 'd3-selection';
5
5
  import PropTypes from 'prop-types';
6
6
  import { GraphPropsType } from './types';
7
- import { color } from '@pie-lib/render-ui';
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
10
 
@@ -12,10 +12,14 @@ export class Root extends React.Component {
12
12
  static propTypes = {
13
13
  title: PropTypes.string,
14
14
  children: ChildrenType,
15
+ disabledTitle: PropTypes.bool,
15
16
  graphProps: GraphPropsType.isRequired,
17
+ onChangeTitle: PropTypes.func,
16
18
  onMouseMove: PropTypes.func,
17
19
  classes: PropTypes.object.isRequired,
20
+ showLabels: PropTypes.bool,
18
21
  showTitle: PropTypes.bool,
22
+ showPixelGuides: PropTypes.bool,
19
23
  rootRef: PropTypes.func
20
24
  };
21
25
 
@@ -56,6 +60,8 @@ export class Root extends React.Component {
56
60
  children,
57
61
  classes,
58
62
  onChangeTitle,
63
+ showLabels,
64
+ showPixelGuides,
59
65
  showTitle,
60
66
  title,
61
67
  rootRef
@@ -65,21 +71,39 @@ export class Root extends React.Component {
65
71
  domain,
66
72
  range
67
73
  } = graphProps;
68
- const topPadding = 50;
69
- const leftPadding = topPadding + 10; // left side requires an extra padding of 10
70
- const finalWidth = width + leftPadding * 2 + (domain.padding || 0) * 2;
71
- const finalHeight = height + topPadding * 2 + (range.padding || 0) * 2;
74
+
75
+ const padding = showLabels ? 70 : 40;
76
+ const extraPadding = showLabels ? 16 : 40;
77
+ const finalWidth = width + padding * 2 + (domain.padding || 0) * 2 + extraPadding;
78
+ const finalHeight = height + padding * 2 + (range.padding || 0) * 2;
72
79
 
73
80
  const activeTitlePlugins = [
74
81
  'bold',
75
82
  'italic',
76
83
  'underline',
77
- 'strikethrough'
84
+ 'strikethrough',
85
+ 'math'
78
86
  // 'languageCharacters'
79
87
  ];
80
88
 
89
+ const nbOfVerticalLines = parseInt(width / 100);
90
+ const nbOfHorizontalLines = parseInt(height / 100);
91
+ const sideGridlinesPadding = parseInt(height % 100);
92
+
81
93
  return (
82
94
  <div className={classes.root}>
95
+ {showPixelGuides && (
96
+ <div className={classes.topPixelGuides}>
97
+ {[...Array(nbOfVerticalLines + 1).keys()].map(value => (
98
+ <Readable false key={`top-guide-${value}`}>
99
+ <div className={classes.topPixelIndicator}>
100
+ <div>{value * 100}px</div>
101
+ <div>|</div>
102
+ </div>
103
+ </Readable>
104
+ ))}
105
+ </div>
106
+ )}
83
107
  {showTitle && (
84
108
  <EditableHtml
85
109
  className={cn(
@@ -96,20 +120,31 @@ export class Root extends React.Component {
96
120
  activePlugins={activeTitlePlugins}
97
121
  />
98
122
  )}
99
- <svg width={finalWidth} height={finalHeight} className={classes.svg}>
100
- <g
101
- ref={r => {
102
- this.g = r;
103
- if (rootRef) {
104
- rootRef(r);
105
- }
106
- }}
107
- className={classes.graphBox}
108
- transform={`translate(${leftPadding}, ${topPadding})`}
109
- >
110
- {children}
111
- </g>
112
- </svg>
123
+ <div className={classes.wrapper}>
124
+ <svg width={finalWidth} height={finalHeight} className={classes.svg}>
125
+ <g
126
+ ref={r => {
127
+ this.g = r;
128
+ if (rootRef) {
129
+ rootRef(r);
130
+ }
131
+ }}
132
+ className={classes.graphBox}
133
+ transform={`translate(${padding}, ${padding})`}
134
+ >
135
+ {children}
136
+ </g>
137
+ </svg>
138
+ {showPixelGuides && (
139
+ <div className={classes.sidePixelGuides} style={{ paddingTop: sideGridlinesPadding }}>
140
+ {[...Array(nbOfHorizontalLines + 1).keys()].reverse().map(value => (
141
+ <Readable false key={`top-guide-${value}`}>
142
+ <div className={classes.sidePixelIndicator}>━ {value * 100}px</div>
143
+ </Readable>
144
+ ))}
145
+ </div>
146
+ )}
147
+ </div>
113
148
  </div>
114
149
  );
115
150
  }
@@ -120,6 +155,9 @@ const styles = theme => ({
120
155
  color: color.text(),
121
156
  backgroundColor: color.background()
122
157
  },
158
+ wrapper: {
159
+ display: 'flex'
160
+ },
123
161
  svg: {},
124
162
  graphBox: {
125
163
  cursor: 'pointer',
@@ -128,11 +166,43 @@ const styles = theme => ({
128
166
  graphTitle: {
129
167
  color: color.text(),
130
168
  fontSize: theme.typography.fontSize + 2,
131
- padding: '8px 50px 0',
169
+ padding: '12px 4px 0',
132
170
  textAlign: 'center'
133
171
  },
134
172
  disabledTitle: {
135
173
  pointerEvents: 'none'
174
+ },
175
+ topPixelGuides: {
176
+ display: 'flex',
177
+ paddingTop: '6px',
178
+ marginLeft: '10px'
179
+ },
180
+ topPixelIndicator: {
181
+ color: color.primaryLight(),
182
+ display: 'flex',
183
+ flexDirection: 'column',
184
+ alignItems: 'center',
185
+ width: '100px',
186
+ pointerEvents: 'none',
187
+ userSelect: 'none'
188
+ },
189
+ sidePixelGuides: {
190
+ width: '70px',
191
+ display: 'flex',
192
+ flexDirection: 'column',
193
+ marginTop: '40px',
194
+ marginRight: '6px'
195
+ },
196
+ sidePixelIndicator: {
197
+ color: color.primaryLight(),
198
+ textAlign: 'right',
199
+ height: '20px',
200
+ pointerEvents: 'none',
201
+ userSelect: 'none',
202
+
203
+ '&:not(:last-child)': {
204
+ marginBottom: '80px'
205
+ }
136
206
  }
137
207
  });
138
208