@pie-lib/graphing 2.6.1 → 2.6.2

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.6.2](https://github.com/pie-framework/pie-lib/compare/@pie-lib/graphing@2.6.1...@pie-lib/graphing@2.6.2) (2022-05-30)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * unable to load items locally ([17ab686](https://github.com/pie-framework/pie-lib/commit/17ab6864557288aef6ec1d9a130cb508e2591562))
12
+
13
+
14
+
15
+
16
+
6
17
  ## [2.6.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/graphing@2.6.0...@pie-lib/graphing@2.6.1) (2022-05-24)
7
18
 
8
19
  **Note:** Version bump only for package @pie-lib/graphing
@@ -0,0 +1,376 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _renderUi = require("@pie-lib/render-ui");
13
+
14
+ var _styles = require("@material-ui/core/styles");
15
+
16
+ var _ExpansionPanelSummary = _interopRequireDefault(require("@material-ui/core/ExpansionPanelSummary"));
17
+
18
+ var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
19
+
20
+ var _ExpansionPanelDetails = _interopRequireDefault(require("@material-ui/core/ExpansionPanelDetails"));
21
+
22
+ var _ExpansionPanel = _interopRequireDefault(require("@material-ui/core/ExpansionPanel"));
23
+
24
+ var _ExpandMore = _interopRequireDefault(require("@material-ui/icons/ExpandMore"));
25
+
26
+ var _TextField = _interopRequireDefault(require("@material-ui/core/TextField"));
27
+
28
+ var _configUi = require("@pie-lib/config-ui");
29
+
30
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
31
+
32
+ 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; }
33
+
34
+ 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) { _defineProperty(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; }
35
+
36
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
37
+
38
+ var GridConfig = function GridConfig(props) {
39
+ var classes = props.classes,
40
+ disabled = props.disabled,
41
+ labelValue = props.labelValue,
42
+ labelValues = props.labelValues,
43
+ gridValue = props.gridValue,
44
+ gridValues = props.gridValues,
45
+ _onChange = props.onChange;
46
+ return /*#__PURE__*/_react["default"].createElement("div", {
47
+ className: classes.columnView
48
+ }, /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
49
+ className: classes.textField,
50
+ label: "Grid Interval",
51
+ value: gridValue,
52
+ customValues: gridValues,
53
+ variant: "outlined",
54
+ disabled: disabled,
55
+ onChange: function onChange(e, v) {
56
+ return _onChange('step', v);
57
+ }
58
+ }), /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
59
+ className: classes.textField,
60
+ label: "Label Interval",
61
+ value: labelValue,
62
+ customValues: labelValues,
63
+ variant: "outlined",
64
+ disabled: disabled,
65
+ onChange: function onChange(e, v) {
66
+ return _onChange('labelStep', v);
67
+ }
68
+ }));
69
+ };
70
+
71
+ var AxisConfig = function AxisConfig(props) {
72
+ var classes = props.classes,
73
+ disabled = props.disabled,
74
+ label = props.label,
75
+ maxValue = props.maxValue,
76
+ minValue = props.minValue,
77
+ _onChange2 = props.onChange,
78
+ type = props.type;
79
+ return /*#__PURE__*/_react["default"].createElement("div", {
80
+ className: classes.columnView
81
+ }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
82
+ variant: "subtitle2"
83
+ }, /*#__PURE__*/_react["default"].createElement("i", null, type === 'domain' ? 'x' : 'y'), "-axis"), /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
84
+ className: classes.textField,
85
+ label: "Min Value",
86
+ value: minValue,
87
+ variant: "outlined",
88
+ disabled: disabled,
89
+ onChange: function onChange(e, v) {
90
+ return _onChange2('min', v);
91
+ }
92
+ }), /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
93
+ className: classes.textField,
94
+ label: "Max Value",
95
+ value: maxValue,
96
+ variant: "outlined",
97
+ disabled: disabled,
98
+ onChange: function onChange(e, v) {
99
+ return _onChange2('max', v);
100
+ }
101
+ }), /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
102
+ label: "Label",
103
+ value: label,
104
+ inputProps: {
105
+ maxLength: 5,
106
+ style: {
107
+ textAlign: 'center'
108
+ }
109
+ },
110
+ variant: "outlined",
111
+ className: classes.textField,
112
+ onChange: function onChange(e) {
113
+ return _onChange2('axisLabel', e.target.value);
114
+ }
115
+ }));
116
+ };
117
+
118
+ var GridSetup = function GridSetup(props) {
119
+ var classes = props.classes,
120
+ sizeConstraints = props.sizeConstraints,
121
+ domain = props.domain,
122
+ dimensionsEnabled = props.dimensionsEnabled,
123
+ gridValues = props.gridValues,
124
+ includeAxes = props.includeAxes,
125
+ labelValues = props.labelValues,
126
+ onChange = props.onChange,
127
+ range = props.range,
128
+ size = props.size,
129
+ standardGrid = props.standardGrid;
130
+ var gridProps = {
131
+ min: 2,
132
+ max: 41
133
+ };
134
+
135
+ var onIncludeAxes = function onIncludeAxes(includeAxes) {
136
+ var noAxesConfig = function noAxesConfig(type) {
137
+ var axis = type === 'domain' ? domain : range;
138
+ return {
139
+ min: 1,
140
+ max: axis.max < gridProps.min || axis.max > gridProps.max ? 16 : axis.max,
141
+ step: 1,
142
+ labelStep: 0
143
+ };
144
+ };
145
+
146
+ var updatedRange = _objectSpread(_objectSpread({}, range), includeAxes ? {
147
+ labelStep: 1
148
+ } : noAxesConfig('range'));
149
+
150
+ var updatedDomain = _objectSpread(_objectSpread({}, domain), includeAxes ? {
151
+ labelStep: 1
152
+ } : noAxesConfig('domain'));
153
+
154
+ onChange({
155
+ includeAxes: includeAxes,
156
+ range: updatedRange,
157
+ domain: updatedDomain
158
+ });
159
+ };
160
+
161
+ var onStandardGridChanged = function onStandardGridChanged(value) {
162
+ onChange({
163
+ standardGrid: value,
164
+ range: _objectSpread(_objectSpread({}, domain), {}, {
165
+ axisLabel: range.axisLabel
166
+ }),
167
+ graph: _objectSpread(_objectSpread({}, size), {}, {
168
+ height: size.width
169
+ })
170
+ });
171
+ };
172
+
173
+ var onSizeChanged = function onSizeChanged(key, value) {
174
+ var graph = _objectSpread(_objectSpread({}, size), {}, _defineProperty({}, key, value));
175
+
176
+ if (standardGrid) {
177
+ graph.height = value;
178
+ }
179
+
180
+ onChange({
181
+ graph: graph
182
+ });
183
+ };
184
+
185
+ var onDomainChanged = function onDomainChanged(key, value) {
186
+ domain[key] = value;
187
+
188
+ if (standardGrid && key !== 'axisLabel') {
189
+ range[key] = value;
190
+ }
191
+
192
+ onChange({
193
+ domain: domain,
194
+ range: range
195
+ });
196
+ };
197
+
198
+ var onRangeChanged = function onRangeChanged(key, value) {
199
+ range[key] = value;
200
+ onChange({
201
+ range: range
202
+ });
203
+ };
204
+
205
+ var axesConfig = /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
206
+ className: classes.rowView
207
+ }, /*#__PURE__*/_react["default"].createElement(AxisConfig, {
208
+ classes: classes,
209
+ type: "domain",
210
+ minValue: domain.min,
211
+ maxValue: domain.max,
212
+ label: domain.axisLabel,
213
+ includeAxes: includeAxes,
214
+ onChange: onDomainChanged
215
+ }), /*#__PURE__*/_react["default"].createElement(AxisConfig, {
216
+ classes: classes,
217
+ type: "range",
218
+ minValue: range.min,
219
+ maxValue: range.max,
220
+ label: range.axisLabel,
221
+ disabled: standardGrid,
222
+ includeAxes: includeAxes,
223
+ onChange: onRangeChanged
224
+ })), /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
225
+ className: classes.text
226
+ }, "If you want the axis to be visible, use a zero or negative Min Value, and a positive Max Value"), /*#__PURE__*/_react["default"].createElement("div", {
227
+ className: classes.rowView
228
+ }, /*#__PURE__*/_react["default"].createElement(GridConfig, {
229
+ classes: classes,
230
+ gridValue: domain.step,
231
+ labelValue: domain.labelStep,
232
+ gridValues: gridValues,
233
+ labelValues: labelValues,
234
+ onChange: onDomainChanged
235
+ }), /*#__PURE__*/_react["default"].createElement(GridConfig, {
236
+ classes: classes,
237
+ disabled: standardGrid,
238
+ gridValue: range.step,
239
+ labelValue: range.labelStep,
240
+ onChange: onRangeChanged
241
+ })), /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
242
+ className: classes.text
243
+ }, "For unnumbered gridlines, enter a label interval of 0"));
244
+
245
+ var gridlinesConfig = /*#__PURE__*/_react["default"].createElement("div", {
246
+ className: classes.columnView
247
+ }, /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
248
+ className: classes.largeTextField,
249
+ label: "Number of Horizontal Gridlines",
250
+ value: domain.max,
251
+ min: !includeAxes && gridProps.min,
252
+ max: !includeAxes && gridProps.max,
253
+ variant: "outlined",
254
+ onChange: function onChange(e, v) {
255
+ return onDomainChanged('max', v);
256
+ }
257
+ }), /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
258
+ className: classes.largeTextField,
259
+ label: "Number of Vertical Gridlines",
260
+ value: range.max,
261
+ min: !includeAxes && gridProps.min,
262
+ max: !includeAxes && gridProps.max,
263
+ variant: "outlined",
264
+ disabled: standardGrid,
265
+ onChange: function onChange(e, v) {
266
+ return onRangeChanged('max', v);
267
+ }
268
+ }));
269
+
270
+ return /*#__PURE__*/_react["default"].createElement("div", {
271
+ className: classes.wrapper
272
+ }, /*#__PURE__*/_react["default"].createElement(_ExpansionPanel["default"], null, /*#__PURE__*/_react["default"].createElement(_ExpansionPanelSummary["default"], {
273
+ expandIcon: /*#__PURE__*/_react["default"].createElement(_ExpandMore["default"], null)
274
+ }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
275
+ variant: "subtitle1"
276
+ }, "Customize Grid Setup")), /*#__PURE__*/_react["default"].createElement(_ExpansionPanelDetails["default"], null, /*#__PURE__*/_react["default"].createElement("div", {
277
+ className: classes.content
278
+ }, /*#__PURE__*/_react["default"].createElement(_configUi.Toggle, {
279
+ label: "Include axes and labels?",
280
+ toggle: onIncludeAxes,
281
+ checked: includeAxes
282
+ }), /*#__PURE__*/_react["default"].createElement(_configUi.Toggle, {
283
+ label: "Constrain to standard coordinate grid?",
284
+ toggle: onStandardGridChanged,
285
+ checked: standardGrid
286
+ }), includeAxes ? axesConfig : gridlinesConfig, dimensionsEnabled && /*#__PURE__*/_react["default"].createElement("div", {
287
+ className: classes.dimensions
288
+ }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_Typography["default"], null, "Dimensions(px)"), /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
289
+ className: classes.disabled
290
+ }, "Min 150, Max 700")), /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
291
+ className: classes.textField,
292
+ label: "Width",
293
+ value: size.width,
294
+ min: sizeConstraints.min,
295
+ max: sizeConstraints.max,
296
+ step: sizeConstraints.step,
297
+ variant: "outlined",
298
+ onChange: function onChange(e, v) {
299
+ return onSizeChanged('width', v);
300
+ }
301
+ }), /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
302
+ className: classes.textField,
303
+ label: "Height",
304
+ value: size.height,
305
+ min: sizeConstraints.min,
306
+ max: sizeConstraints.max,
307
+ step: sizeConstraints.step,
308
+ variant: "outlined",
309
+ disabled: standardGrid,
310
+ onChange: function onChange(e, v) {
311
+ return onSizeChanged('height', v);
312
+ }
313
+ }))))));
314
+ };
315
+
316
+ GridSetup.propTypes = {
317
+ classes: _propTypes["default"].object,
318
+ domain: _propTypes["default"].object,
319
+ dimensionsEnabled: _propTypes["default"].object,
320
+ gridValues: _propTypes["default"].object,
321
+ includeAxes: _propTypes["default"].bool,
322
+ labelValues: _propTypes["default"].object,
323
+ onChange: _propTypes["default"]["function"],
324
+ range: _propTypes["default"].object,
325
+ size: _propTypes["default"].object,
326
+ sizeConstraints: _propTypes["default"].object,
327
+ standardGrid: _propTypes["default"].bool
328
+ };
329
+
330
+ var styles = function styles(theme) {
331
+ return {
332
+ wrapper: {
333
+ width: '450px'
334
+ },
335
+ content: {
336
+ display: 'flex',
337
+ flexDirection: 'column',
338
+ width: '100%'
339
+ },
340
+ columnView: {
341
+ display: 'flex',
342
+ flexDirection: 'column',
343
+ alignItems: 'center'
344
+ },
345
+ rowView: {
346
+ display: 'flex',
347
+ justifyContent: 'space-around',
348
+ alignItems: 'center'
349
+ },
350
+ textField: {
351
+ width: '130px',
352
+ margin: "".concat(theme.spacing.unit, "px ").concat(theme.spacing.unit / 2, "px")
353
+ },
354
+ largeTextField: {
355
+ width: '230px',
356
+ margin: "".concat(theme.spacing.unit, "px ").concat(theme.spacing.unit / 2, "px")
357
+ },
358
+ text: {
359
+ fontStyle: 'italic',
360
+ margin: "".concat(theme.spacing.unit, "px 0")
361
+ },
362
+ dimensions: {
363
+ display: 'flex',
364
+ justifyContent: 'space-between',
365
+ alignItems: 'center'
366
+ },
367
+ disabled: {
368
+ color: _renderUi.color.disabled()
369
+ }
370
+ };
371
+ };
372
+
373
+ var _default = (0, _styles.withStyles)(styles)(GridSetup);
374
+
375
+ exports["default"] = _default;
376
+ //# sourceMappingURL=grid-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/grid-setup.jsx"],"names":["GridConfig","props","classes","disabled","labelValue","labelValues","gridValue","gridValues","onChange","columnView","textField","e","v","AxisConfig","label","maxValue","minValue","type","maxLength","style","textAlign","target","value","GridSetup","sizeConstraints","domain","dimensionsEnabled","includeAxes","range","size","standardGrid","gridProps","min","max","onIncludeAxes","noAxesConfig","axis","step","labelStep","updatedRange","updatedDomain","onStandardGridChanged","axisLabel","graph","height","width","onSizeChanged","key","onDomainChanged","onRangeChanged","axesConfig","rowView","text","gridlinesConfig","largeTextField","wrapper","content","dimensions","propTypes","PropTypes","object","bool","styles","theme","display","flexDirection","alignItems","justifyContent","margin","spacing","unit","fontStyle","color"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { color } from '@pie-lib/render-ui';\nimport { withStyles } from '@material-ui/core/styles';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport Typography from '@material-ui/core/Typography';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport TextField from '@material-ui/core/TextField';\nimport { NumberTextFieldCustom, Toggle } from '@pie-lib/config-ui';\n\nconst GridConfig = props => {\n const { classes, disabled, labelValue, labelValues, gridValue, gridValues, onChange } = props;\n\n return (\n <div className={classes.columnView}>\n <NumberTextFieldCustom\n className={classes.textField}\n label=\"Grid Interval\"\n value={gridValue}\n customValues={gridValues}\n variant=\"outlined\"\n disabled={disabled}\n onChange={(e, v) => onChange('step', v)}\n />\n <NumberTextFieldCustom\n className={classes.textField}\n label=\"Label Interval\"\n value={labelValue}\n customValues={labelValues}\n variant=\"outlined\"\n disabled={disabled}\n onChange={(e, v) => onChange('labelStep', v)}\n />\n </div>\n );\n};\n\nconst AxisConfig = props => {\n const { classes, disabled, label, maxValue, minValue, onChange, type } = props;\n\n return (\n <div className={classes.columnView}>\n <Typography variant=\"subtitle2\">\n <i>{type === 'domain' ? 'x' : 'y'}</i>\n -axis\n </Typography>\n <NumberTextFieldCustom\n className={classes.textField}\n label=\"Min Value\"\n value={minValue}\n variant=\"outlined\"\n disabled={disabled}\n onChange={(e, v) => onChange('min', v)}\n />\n <NumberTextFieldCustom\n className={classes.textField}\n label=\"Max Value\"\n value={maxValue}\n variant=\"outlined\"\n disabled={disabled}\n onChange={(e, v) => onChange('max', v)}\n />\n <TextField\n label=\"Label\"\n value={label}\n inputProps={{\n maxLength: 5,\n style: { textAlign: 'center' }\n }}\n variant=\"outlined\"\n className={classes.textField}\n onChange={e => onChange('axisLabel', e.target.value)}\n />\n </div>\n );\n};\n\nconst GridSetup = props => {\n const {\n classes,\n sizeConstraints,\n domain,\n dimensionsEnabled,\n gridValues,\n includeAxes,\n labelValues,\n onChange,\n range,\n size,\n standardGrid\n } = props;\n const gridProps = { min: 2, max: 41 };\n\n const onIncludeAxes = includeAxes => {\n const noAxesConfig = type => {\n const axis = type === 'domain' ? domain : range;\n\n return {\n min: 1,\n max: axis.max < gridProps.min || axis.max > gridProps.max ? 16 : axis.max,\n step: 1,\n labelStep: 0\n };\n };\n\n const updatedRange = {\n ...range,\n ...(includeAxes ? { labelStep: 1 } : noAxesConfig('range'))\n };\n const updatedDomain = {\n ...domain,\n ...(includeAxes ? { labelStep: 1 } : noAxesConfig('domain'))\n };\n\n onChange({ includeAxes, range: updatedRange, domain: updatedDomain });\n };\n\n const onStandardGridChanged = value => {\n onChange({\n standardGrid: value,\n range: {\n ...domain,\n axisLabel: range.axisLabel\n },\n graph: {\n ...size,\n height: size.width\n }\n });\n };\n\n const onSizeChanged = (key, value) => {\n const graph = { ...size, [key]: value };\n\n if (standardGrid) {\n graph.height = value;\n }\n\n onChange({ graph });\n };\n\n const onDomainChanged = (key, value) => {\n domain[key] = value;\n\n if (standardGrid && key !== 'axisLabel') {\n range[key] = value;\n }\n\n onChange({ domain, range });\n };\n\n const onRangeChanged = (key, value) => {\n range[key] = value;\n\n onChange({ range });\n };\n\n const axesConfig = (\n <React.Fragment>\n <div className={classes.rowView}>\n <AxisConfig\n classes={classes}\n type=\"domain\"\n minValue={domain.min}\n maxValue={domain.max}\n label={domain.axisLabel}\n includeAxes={includeAxes}\n onChange={onDomainChanged}\n />\n <AxisConfig\n classes={classes}\n type=\"range\"\n minValue={range.min}\n maxValue={range.max}\n label={range.axisLabel}\n disabled={standardGrid}\n includeAxes={includeAxes}\n onChange={onRangeChanged}\n />\n </div>\n <Typography className={classes.text}>\n If you want the axis to be visible, use a zero or negative Min Value, and a positive Max\n Value\n </Typography>\n <div className={classes.rowView}>\n <GridConfig\n classes={classes}\n gridValue={domain.step}\n labelValue={domain.labelStep}\n gridValues={gridValues}\n labelValues={labelValues}\n onChange={onDomainChanged}\n />\n <GridConfig\n classes={classes}\n disabled={standardGrid}\n gridValue={range.step}\n labelValue={range.labelStep}\n onChange={onRangeChanged}\n />\n </div>\n <Typography className={classes.text}>\n For unnumbered gridlines, enter a label interval of 0\n </Typography>\n </React.Fragment>\n );\n\n const gridlinesConfig = (\n <div className={classes.columnView}>\n <NumberTextFieldCustom\n className={classes.largeTextField}\n label=\"Number of Horizontal Gridlines\"\n value={domain.max}\n min={!includeAxes && gridProps.min}\n max={!includeAxes && gridProps.max}\n variant=\"outlined\"\n onChange={(e, v) => onDomainChanged('max', v)}\n />\n <NumberTextFieldCustom\n className={classes.largeTextField}\n label=\"Number of Vertical Gridlines\"\n value={range.max}\n min={!includeAxes && gridProps.min}\n max={!includeAxes && gridProps.max}\n variant=\"outlined\"\n disabled={standardGrid}\n onChange={(e, v) => onRangeChanged('max', v)}\n />\n </div>\n );\n\n return (\n <div className={classes.wrapper}>\n <ExpansionPanel>\n <ExpansionPanelSummary expandIcon={<ExpandMoreIcon />}>\n <Typography variant=\"subtitle1\">Customize Grid Setup</Typography>\n </ExpansionPanelSummary>\n <ExpansionPanelDetails>\n <div className={classes.content}>\n <Toggle label=\"Include axes and labels?\" toggle={onIncludeAxes} checked={includeAxes} />\n <Toggle\n label=\"Constrain to standard coordinate grid?\"\n toggle={onStandardGridChanged}\n checked={standardGrid}\n />\n {includeAxes ? axesConfig : gridlinesConfig}\n {dimensionsEnabled && (\n <div className={classes.dimensions}>\n <div>\n <Typography>Dimensions(px)</Typography>\n <Typography className={classes.disabled}>Min 150, Max 700</Typography>\n </div>\n <NumberTextFieldCustom\n className={classes.textField}\n label=\"Width\"\n value={size.width}\n min={sizeConstraints.min}\n max={sizeConstraints.max}\n step={sizeConstraints.step}\n variant=\"outlined\"\n onChange={(e, v) => onSizeChanged('width', v)}\n />\n <NumberTextFieldCustom\n className={classes.textField}\n label=\"Height\"\n value={size.height}\n min={sizeConstraints.min}\n max={sizeConstraints.max}\n step={sizeConstraints.step}\n variant=\"outlined\"\n disabled={standardGrid}\n onChange={(e, v) => onSizeChanged('height', v)}\n />\n </div>\n )}\n </div>\n </ExpansionPanelDetails>\n </ExpansionPanel>\n </div>\n );\n};\n\nGridSetup.propTypes = {\n classes: PropTypes.object,\n domain: PropTypes.object,\n dimensionsEnabled: PropTypes.object,\n gridValues: PropTypes.object,\n includeAxes: PropTypes.bool,\n labelValues: PropTypes.object,\n onChange: PropTypes.function,\n range: PropTypes.object,\n size: PropTypes.object,\n sizeConstraints: PropTypes.object,\n standardGrid: PropTypes.bool\n};\n\nconst styles = theme => ({\n wrapper: {\n width: '450px'\n },\n content: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%'\n },\n columnView: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center'\n },\n rowView: {\n display: 'flex',\n justifyContent: 'space-around',\n alignItems: 'center'\n },\n textField: {\n width: '130px',\n margin: `${theme.spacing.unit}px ${theme.spacing.unit / 2}px`\n },\n largeTextField: {\n width: '230px',\n margin: `${theme.spacing.unit}px ${theme.spacing.unit / 2}px`\n },\n text: {\n fontStyle: 'italic',\n margin: `${theme.spacing.unit}px 0`\n },\n dimensions: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center'\n },\n disabled: {\n color: color.disabled()\n }\n});\n\nexport default withStyles(styles)(GridSetup);\n"],"file":"grid-setup.js"}
package/lib/index.js CHANGED
@@ -17,6 +17,12 @@ Object.defineProperty(exports, "GraphContainer", {
17
17
  return _container["default"];
18
18
  }
19
19
  });
20
+ Object.defineProperty(exports, "GridSetup", {
21
+ enumerable: true,
22
+ get: function get() {
23
+ return _gridSetup["default"];
24
+ }
25
+ });
20
26
  Object.defineProperty(exports, "ToolMenu", {
21
27
  enumerable: true,
22
28
  get: function get() {
@@ -29,6 +35,8 @@ var _graph = _interopRequireDefault(require("./graph"));
29
35
 
30
36
  var _container = _interopRequireDefault(require("./container"));
31
37
 
38
+ var _gridSetup = _interopRequireDefault(require("./grid-setup"));
39
+
32
40
  var tools = _interopRequireWildcard(require("./tools"));
33
41
 
34
42
  exports.tools = tools;
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;AACA","sourcesContent":["import Graph from './graph';\nimport GraphContainer from './container';\nimport * as tools from './tools';\nimport ToolMenu from './tool-menu';\n\nexport { Graph, GraphContainer, ToolMenu, tools };\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;AACA","sourcesContent":["import Graph from './graph';\nimport GraphContainer from './container';\nimport GridSetup from './grid-setup';\nimport * as tools from './tools';\nimport ToolMenu from './tool-menu';\n\nexport { Graph, GraphContainer, GridSetup, ToolMenu, tools };\n"],"file":"index.js"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "2.6.1",
6
+ "version": "2.6.2",
7
7
  "description": "Graphing components",
8
8
  "keywords": [
9
9
  "react",
@@ -20,7 +20,7 @@
20
20
  "@material-ui/core": "^3.8.3",
21
21
  "@pie-lib/graphing-utils": "^1.1.20",
22
22
  "@pie-lib/plot": "^2.2.0",
23
- "@pie-lib/render-ui": "^4.12.7",
23
+ "@pie-lib/render-ui": "^4.12.8",
24
24
  "@vx/axis": "^0.0.189",
25
25
  "@vx/clip-path": "^0.0.189",
26
26
  "@vx/event": "^0.0.189",
@@ -43,6 +43,6 @@
43
43
  "peerDependencies": {
44
44
  "react": "^16.8.1"
45
45
  },
46
- "gitHead": "611d47d0ed9fb2591be8f26cc78a40049e5e70a5",
46
+ "gitHead": "debcaf764c62d97a1401f2898b062183847ce33b",
47
47
  "scripts": {}
48
48
  }
@@ -0,0 +1,340 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { color } from '@pie-lib/render-ui';
4
+ import { withStyles } from '@material-ui/core/styles';
5
+ import ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';
6
+ import Typography from '@material-ui/core/Typography';
7
+ import ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';
8
+ import ExpansionPanel from '@material-ui/core/ExpansionPanel';
9
+ import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
10
+ import TextField from '@material-ui/core/TextField';
11
+ import { NumberTextFieldCustom, Toggle } from '@pie-lib/config-ui';
12
+
13
+ const GridConfig = props => {
14
+ const { classes, disabled, labelValue, labelValues, gridValue, gridValues, onChange } = props;
15
+
16
+ return (
17
+ <div className={classes.columnView}>
18
+ <NumberTextFieldCustom
19
+ className={classes.textField}
20
+ label="Grid Interval"
21
+ value={gridValue}
22
+ customValues={gridValues}
23
+ variant="outlined"
24
+ disabled={disabled}
25
+ onChange={(e, v) => onChange('step', v)}
26
+ />
27
+ <NumberTextFieldCustom
28
+ className={classes.textField}
29
+ label="Label Interval"
30
+ value={labelValue}
31
+ customValues={labelValues}
32
+ variant="outlined"
33
+ disabled={disabled}
34
+ onChange={(e, v) => onChange('labelStep', v)}
35
+ />
36
+ </div>
37
+ );
38
+ };
39
+
40
+ const AxisConfig = props => {
41
+ const { classes, disabled, label, maxValue, minValue, onChange, type } = props;
42
+
43
+ return (
44
+ <div className={classes.columnView}>
45
+ <Typography variant="subtitle2">
46
+ <i>{type === 'domain' ? 'x' : 'y'}</i>
47
+ -axis
48
+ </Typography>
49
+ <NumberTextFieldCustom
50
+ className={classes.textField}
51
+ label="Min Value"
52
+ value={minValue}
53
+ variant="outlined"
54
+ disabled={disabled}
55
+ onChange={(e, v) => onChange('min', v)}
56
+ />
57
+ <NumberTextFieldCustom
58
+ className={classes.textField}
59
+ label="Max Value"
60
+ value={maxValue}
61
+ variant="outlined"
62
+ disabled={disabled}
63
+ onChange={(e, v) => onChange('max', v)}
64
+ />
65
+ <TextField
66
+ label="Label"
67
+ value={label}
68
+ inputProps={{
69
+ maxLength: 5,
70
+ style: { textAlign: 'center' }
71
+ }}
72
+ variant="outlined"
73
+ className={classes.textField}
74
+ onChange={e => onChange('axisLabel', e.target.value)}
75
+ />
76
+ </div>
77
+ );
78
+ };
79
+
80
+ const GridSetup = props => {
81
+ const {
82
+ classes,
83
+ sizeConstraints,
84
+ domain,
85
+ dimensionsEnabled,
86
+ gridValues,
87
+ includeAxes,
88
+ labelValues,
89
+ onChange,
90
+ range,
91
+ size,
92
+ standardGrid
93
+ } = props;
94
+ const gridProps = { min: 2, max: 41 };
95
+
96
+ const onIncludeAxes = includeAxes => {
97
+ const noAxesConfig = type => {
98
+ const axis = type === 'domain' ? domain : range;
99
+
100
+ return {
101
+ min: 1,
102
+ max: axis.max < gridProps.min || axis.max > gridProps.max ? 16 : axis.max,
103
+ step: 1,
104
+ labelStep: 0
105
+ };
106
+ };
107
+
108
+ const updatedRange = {
109
+ ...range,
110
+ ...(includeAxes ? { labelStep: 1 } : noAxesConfig('range'))
111
+ };
112
+ const updatedDomain = {
113
+ ...domain,
114
+ ...(includeAxes ? { labelStep: 1 } : noAxesConfig('domain'))
115
+ };
116
+
117
+ onChange({ includeAxes, range: updatedRange, domain: updatedDomain });
118
+ };
119
+
120
+ const onStandardGridChanged = value => {
121
+ onChange({
122
+ standardGrid: value,
123
+ range: {
124
+ ...domain,
125
+ axisLabel: range.axisLabel
126
+ },
127
+ graph: {
128
+ ...size,
129
+ height: size.width
130
+ }
131
+ });
132
+ };
133
+
134
+ const onSizeChanged = (key, value) => {
135
+ const graph = { ...size, [key]: value };
136
+
137
+ if (standardGrid) {
138
+ graph.height = value;
139
+ }
140
+
141
+ onChange({ graph });
142
+ };
143
+
144
+ const onDomainChanged = (key, value) => {
145
+ domain[key] = value;
146
+
147
+ if (standardGrid && key !== 'axisLabel') {
148
+ range[key] = value;
149
+ }
150
+
151
+ onChange({ domain, range });
152
+ };
153
+
154
+ const onRangeChanged = (key, value) => {
155
+ range[key] = value;
156
+
157
+ onChange({ range });
158
+ };
159
+
160
+ const axesConfig = (
161
+ <React.Fragment>
162
+ <div className={classes.rowView}>
163
+ <AxisConfig
164
+ classes={classes}
165
+ type="domain"
166
+ minValue={domain.min}
167
+ maxValue={domain.max}
168
+ label={domain.axisLabel}
169
+ includeAxes={includeAxes}
170
+ onChange={onDomainChanged}
171
+ />
172
+ <AxisConfig
173
+ classes={classes}
174
+ type="range"
175
+ minValue={range.min}
176
+ maxValue={range.max}
177
+ label={range.axisLabel}
178
+ disabled={standardGrid}
179
+ includeAxes={includeAxes}
180
+ onChange={onRangeChanged}
181
+ />
182
+ </div>
183
+ <Typography className={classes.text}>
184
+ If you want the axis to be visible, use a zero or negative Min Value, and a positive Max
185
+ Value
186
+ </Typography>
187
+ <div className={classes.rowView}>
188
+ <GridConfig
189
+ classes={classes}
190
+ gridValue={domain.step}
191
+ labelValue={domain.labelStep}
192
+ gridValues={gridValues}
193
+ labelValues={labelValues}
194
+ onChange={onDomainChanged}
195
+ />
196
+ <GridConfig
197
+ classes={classes}
198
+ disabled={standardGrid}
199
+ gridValue={range.step}
200
+ labelValue={range.labelStep}
201
+ onChange={onRangeChanged}
202
+ />
203
+ </div>
204
+ <Typography className={classes.text}>
205
+ For unnumbered gridlines, enter a label interval of 0
206
+ </Typography>
207
+ </React.Fragment>
208
+ );
209
+
210
+ const gridlinesConfig = (
211
+ <div className={classes.columnView}>
212
+ <NumberTextFieldCustom
213
+ className={classes.largeTextField}
214
+ label="Number of Horizontal Gridlines"
215
+ value={domain.max}
216
+ min={!includeAxes && gridProps.min}
217
+ max={!includeAxes && gridProps.max}
218
+ variant="outlined"
219
+ onChange={(e, v) => onDomainChanged('max', v)}
220
+ />
221
+ <NumberTextFieldCustom
222
+ className={classes.largeTextField}
223
+ label="Number of Vertical Gridlines"
224
+ value={range.max}
225
+ min={!includeAxes && gridProps.min}
226
+ max={!includeAxes && gridProps.max}
227
+ variant="outlined"
228
+ disabled={standardGrid}
229
+ onChange={(e, v) => onRangeChanged('max', v)}
230
+ />
231
+ </div>
232
+ );
233
+
234
+ return (
235
+ <div className={classes.wrapper}>
236
+ <ExpansionPanel>
237
+ <ExpansionPanelSummary expandIcon={<ExpandMoreIcon />}>
238
+ <Typography variant="subtitle1">Customize Grid Setup</Typography>
239
+ </ExpansionPanelSummary>
240
+ <ExpansionPanelDetails>
241
+ <div className={classes.content}>
242
+ <Toggle label="Include axes and labels?" toggle={onIncludeAxes} checked={includeAxes} />
243
+ <Toggle
244
+ label="Constrain to standard coordinate grid?"
245
+ toggle={onStandardGridChanged}
246
+ checked={standardGrid}
247
+ />
248
+ {includeAxes ? axesConfig : gridlinesConfig}
249
+ {dimensionsEnabled && (
250
+ <div className={classes.dimensions}>
251
+ <div>
252
+ <Typography>Dimensions(px)</Typography>
253
+ <Typography className={classes.disabled}>Min 150, Max 700</Typography>
254
+ </div>
255
+ <NumberTextFieldCustom
256
+ className={classes.textField}
257
+ label="Width"
258
+ value={size.width}
259
+ min={sizeConstraints.min}
260
+ max={sizeConstraints.max}
261
+ step={sizeConstraints.step}
262
+ variant="outlined"
263
+ onChange={(e, v) => onSizeChanged('width', v)}
264
+ />
265
+ <NumberTextFieldCustom
266
+ className={classes.textField}
267
+ label="Height"
268
+ value={size.height}
269
+ min={sizeConstraints.min}
270
+ max={sizeConstraints.max}
271
+ step={sizeConstraints.step}
272
+ variant="outlined"
273
+ disabled={standardGrid}
274
+ onChange={(e, v) => onSizeChanged('height', v)}
275
+ />
276
+ </div>
277
+ )}
278
+ </div>
279
+ </ExpansionPanelDetails>
280
+ </ExpansionPanel>
281
+ </div>
282
+ );
283
+ };
284
+
285
+ GridSetup.propTypes = {
286
+ classes: PropTypes.object,
287
+ domain: PropTypes.object,
288
+ dimensionsEnabled: PropTypes.object,
289
+ gridValues: PropTypes.object,
290
+ includeAxes: PropTypes.bool,
291
+ labelValues: PropTypes.object,
292
+ onChange: PropTypes.function,
293
+ range: PropTypes.object,
294
+ size: PropTypes.object,
295
+ sizeConstraints: PropTypes.object,
296
+ standardGrid: PropTypes.bool
297
+ };
298
+
299
+ const styles = theme => ({
300
+ wrapper: {
301
+ width: '450px'
302
+ },
303
+ content: {
304
+ display: 'flex',
305
+ flexDirection: 'column',
306
+ width: '100%'
307
+ },
308
+ columnView: {
309
+ display: 'flex',
310
+ flexDirection: 'column',
311
+ alignItems: 'center'
312
+ },
313
+ rowView: {
314
+ display: 'flex',
315
+ justifyContent: 'space-around',
316
+ alignItems: 'center'
317
+ },
318
+ textField: {
319
+ width: '130px',
320
+ margin: `${theme.spacing.unit}px ${theme.spacing.unit / 2}px`
321
+ },
322
+ largeTextField: {
323
+ width: '230px',
324
+ margin: `${theme.spacing.unit}px ${theme.spacing.unit / 2}px`
325
+ },
326
+ text: {
327
+ fontStyle: 'italic',
328
+ margin: `${theme.spacing.unit}px 0`
329
+ },
330
+ dimensions: {
331
+ display: 'flex',
332
+ justifyContent: 'space-between',
333
+ alignItems: 'center'
334
+ },
335
+ disabled: {
336
+ color: color.disabled()
337
+ }
338
+ });
339
+
340
+ export default withStyles(styles)(GridSetup);
package/src/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import Graph from './graph';
2
2
  import GraphContainer from './container';
3
+ import GridSetup from './grid-setup';
3
4
  import * as tools from './tools';
4
5
  import ToolMenu from './tool-menu';
5
6
 
6
- export { Graph, GraphContainer, ToolMenu, tools };
7
+ export { Graph, GraphContainer, GridSetup, ToolMenu, tools };