@pie-element/graphing 10.1.2-next.1 → 10.1.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.
Files changed (86) hide show
  1. package/CHANGELOG.json +652 -0
  2. package/CHANGELOG.md +2049 -0
  3. package/LICENSE.md +5 -0
  4. package/README.md +1 -0
  5. package/configure/CHANGELOG.json +382 -0
  6. package/configure/CHANGELOG.md +1840 -0
  7. package/configure/lib/configure.js +328 -0
  8. package/configure/lib/configure.js.map +1 -0
  9. package/configure/lib/correct-response.js +484 -0
  10. package/configure/lib/correct-response.js.map +1 -0
  11. package/configure/lib/defaults.js +448 -0
  12. package/configure/lib/defaults.js.map +1 -0
  13. package/configure/lib/graphing-config.js +388 -0
  14. package/configure/lib/graphing-config.js.map +1 -0
  15. package/configure/lib/index.js +173 -0
  16. package/configure/lib/index.js.map +1 -0
  17. package/configure/lib/utils.js +122 -0
  18. package/configure/lib/utils.js.map +1 -0
  19. package/configure/package.json +30 -0
  20. package/controller/CHANGELOG.json +412 -0
  21. package/controller/CHANGELOG.md +1267 -0
  22. package/controller/lib/defaults.js +64 -0
  23. package/controller/lib/defaults.js.map +1 -0
  24. package/controller/lib/index.js +459 -0
  25. package/controller/lib/index.js.map +1 -0
  26. package/controller/lib/utils.js +451 -0
  27. package/controller/lib/utils.js.map +1 -0
  28. package/controller/package.json +24 -0
  29. package/docs/config-schema.json +3164 -0
  30. package/docs/config-schema.json.md +2293 -0
  31. package/docs/demo/config.js +8 -0
  32. package/docs/demo/generate.js +200 -0
  33. package/docs/demo/index.html +1 -0
  34. package/docs/demo/session.js +20 -0
  35. package/docs/pie-schema.json +3495 -0
  36. package/docs/pie-schema.json.md +1345 -0
  37. package/lib/index.js +69 -0
  38. package/lib/index.js.map +1 -0
  39. package/lib/main.js +161 -0
  40. package/lib/main.js.map +1 -0
  41. package/lib/utils.js +24 -0
  42. package/lib/utils.js.map +1 -0
  43. package/package.json +21 -88
  44. package/configure.js +0 -2
  45. package/controller.js +0 -1
  46. package/dist/author/configure.d.ts +0 -26
  47. package/dist/author/configure.js +0 -208
  48. package/dist/author/correct-response.d.ts +0 -54
  49. package/dist/author/correct-response.js +0 -303
  50. package/dist/author/defaults.d.ts +0 -294
  51. package/dist/author/defaults.js +0 -415
  52. package/dist/author/graphing-config.d.ts +0 -34
  53. package/dist/author/graphing-config.js +0 -244
  54. package/dist/author/index.d.ts +0 -59
  55. package/dist/author/index.js +0 -96
  56. package/dist/author/utils.d.ts +0 -43
  57. package/dist/author/utils.js +0 -260
  58. package/dist/browser/author/index.js +0 -4480
  59. package/dist/browser/author/index.js.map +0 -1
  60. package/dist/browser/container-DaIvr1Vu.js +0 -57966
  61. package/dist/browser/container-DaIvr1Vu.js.map +0 -1
  62. package/dist/browser/controller/index.js +0 -353
  63. package/dist/browser/controller/index.js.map +0 -1
  64. package/dist/browser/delivery/index.js +0 -683
  65. package/dist/browser/delivery/index.js.map +0 -1
  66. package/dist/browser/dist-BrN2xZtM.js +0 -547
  67. package/dist/browser/dist-BrN2xZtM.js.map +0 -1
  68. package/dist/browser/graphing.css +0 -2
  69. package/dist/controller/defaults.d.ts +0 -59
  70. package/dist/controller/defaults.js +0 -61
  71. package/dist/controller/index.d.ts +0 -34
  72. package/dist/controller/index.js +0 -179
  73. package/dist/controller/utils.d.ts +0 -37
  74. package/dist/controller/utils.js +0 -111
  75. package/dist/delivery/index.d.ts +0 -21
  76. package/dist/delivery/index.js +0 -43
  77. package/dist/delivery/main.d.ts +0 -23
  78. package/dist/delivery/main.js +0 -107
  79. package/dist/delivery/utils.d.ts +0 -22
  80. package/dist/graphing.css +0 -2
  81. package/dist/index.d.ts +0 -1
  82. package/dist/index.iife.d.ts +0 -8
  83. package/dist/index.iife.js +0 -406
  84. package/dist/index.js +0 -2
  85. package/dist/runtime-support.d.ts +0 -12
  86. package/dist/runtime-support.js +0 -12
@@ -0,0 +1,388 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.GraphingConfig = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+ var _graphing = require("@pie-lib/graphing");
12
+ var _configUi = require("@pie-lib/config-ui");
13
+ var _material = require("@mui/material");
14
+ var _styles = require("@mui/material/styles");
15
+ var _utils = require("./utils");
16
+ var _lodashEs = require("lodash-es");
17
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
18
+ const Container = (0, _styles.styled)('div')(({
19
+ theme
20
+ }) => ({
21
+ display: 'flex',
22
+ flexWrap: 'wrap',
23
+ marginBottom: theme.spacing(2.5)
24
+ }));
25
+ const GridConfigWrapper = (0, _styles.styled)('div')(({
26
+ theme
27
+ }) => ({
28
+ display: 'flex',
29
+ flexDirection: 'column',
30
+ marginRight: theme.spacing(3),
31
+ marginBottom: theme.spacing(2.5)
32
+ }));
33
+ const GraphConfig = (0, _styles.styled)('div')({
34
+ display: 'flex',
35
+ flexDirection: 'column'
36
+ });
37
+ const SubtitleText = (0, _styles.styled)(_material.Typography)(({
38
+ theme
39
+ }) => ({
40
+ marginTop: theme.spacing(1.5),
41
+ marginBottom: theme.spacing(1)
42
+ }));
43
+ const GridConfig = (0, _styles.styled)('div')(({
44
+ theme
45
+ }) => ({
46
+ display: 'flex',
47
+ flexWrap: 'wrap',
48
+ alignItems: 'center',
49
+ width: '100%',
50
+ marginBottom: theme.spacing(2.5)
51
+ }));
52
+ const GridConfigLabel = (0, _styles.styled)(_material.Typography)(({
53
+ theme
54
+ }) => ({
55
+ padding: `0 ${theme.spacing(1)}`
56
+ }));
57
+ const GridConfigSelect = (0, _styles.styled)(_material.Select)({
58
+ flex: '1'
59
+ });
60
+ class GraphingConfig extends React.Component {
61
+ constructor(props) {
62
+ super(props);
63
+ (0, _defineProperty2.default)(this, "changeBackgroundMarks", backgroundMarks => {
64
+ const model = {
65
+ ...this.props.model,
66
+ backgroundMarks
67
+ };
68
+ this.props.onChange(model);
69
+ });
70
+ (0, _defineProperty2.default)(this, "changeLabels", labels => {
71
+ const {
72
+ model,
73
+ onChange
74
+ } = this.props;
75
+ onChange({
76
+ ...model,
77
+ labels
78
+ });
79
+ });
80
+ (0, _defineProperty2.default)(this, "changeTitle", title => {
81
+ const {
82
+ model,
83
+ onChange
84
+ } = this.props;
85
+ onChange({
86
+ ...model,
87
+ title
88
+ });
89
+ });
90
+ (0, _defineProperty2.default)(this, "onConfigChange", (config, newSelectedGrid) => {
91
+ const {
92
+ model,
93
+ onChange
94
+ } = this.props;
95
+ const {
96
+ defaultGridConfiguration: oldSelectedGrid = 0
97
+ } = model;
98
+ const {
99
+ gridValues: oldGridValues,
100
+ labelValues: oldLabelValues,
101
+ domain: oldDomain,
102
+ range: oldRange
103
+ } = this.state;
104
+ const updatedModel = {
105
+ ...model,
106
+ ...config
107
+ };
108
+ const {
109
+ answers,
110
+ domain,
111
+ includeAxes,
112
+ graph,
113
+ range,
114
+ standardGrid
115
+ } = updatedModel;
116
+ const gridValues = {
117
+ domain: [],
118
+ range: []
119
+ };
120
+ const labelValues = {
121
+ domain: [],
122
+ range: []
123
+ };
124
+ const selectedGrid = newSelectedGrid >= 0 ? newSelectedGrid : oldSelectedGrid;
125
+ if (includeAxes) {
126
+ const domainConstraints = (0, _utils.applyConstraints)(domain, graph.width, oldGridValues.domain, oldLabelValues.domain);
127
+ gridValues.domain = domainConstraints.gridValues || [];
128
+ labelValues.domain = domainConstraints.labelValues || [];
129
+ }
130
+ if (standardGrid) {
131
+ gridValues.range = gridValues.domain;
132
+ labelValues.range = labelValues.domain;
133
+ range.step = domain.step;
134
+ range.labelStep = domain.labelStep;
135
+ } else {
136
+ if (includeAxes) {
137
+ const rangeConstraints = (0, _utils.applyConstraints)(range, graph.height, oldGridValues.range, oldLabelValues.range);
138
+ gridValues.range = rangeConstraints.gridValues || [];
139
+ labelValues.range = rangeConstraints.labelValues || [];
140
+ }
141
+ }
142
+ const plotableAnswers = (0, _utils.filterPlotableMarks)(domain, range, answers);
143
+ if (!(0, _lodashEs.isEqual)(answers, plotableAnswers)) {
144
+ this.setState({
145
+ dialog: {
146
+ isOpened: true,
147
+ onClose: () => this.setState({
148
+ dialog: {
149
+ isOpened: false
150
+ }
151
+ }, onChange({
152
+ ...model,
153
+ domain: oldDomain,
154
+ range: oldRange
155
+ })),
156
+ onConfirm: () => {
157
+ this.setState({
158
+ gridValues,
159
+ labelValues,
160
+ dialog: {
161
+ isOpened: false
162
+ },
163
+ domain: {
164
+ ...domain
165
+ },
166
+ range: {
167
+ ...range
168
+ }
169
+ }, onChange({
170
+ ...updatedModel,
171
+ answers: plotableAnswers,
172
+ defaultGridConfiguration: selectedGrid
173
+ }));
174
+ }
175
+ }
176
+ });
177
+ return;
178
+ }
179
+ this.setState({
180
+ gridValues,
181
+ labelValues,
182
+ domain: {
183
+ ...domain
184
+ },
185
+ range: {
186
+ ...range
187
+ }
188
+ });
189
+ onChange({
190
+ ...updatedModel,
191
+ defaultGridConfiguration: selectedGrid
192
+ });
193
+ });
194
+ (0, _defineProperty2.default)(this, "onChangeView", (event, expanded) => {
195
+ const {
196
+ graphDimensions: {
197
+ enabled
198
+ } = {}
199
+ } = this.props;
200
+ if (enabled) {
201
+ this.setState({
202
+ showPixelGuides: expanded
203
+ });
204
+ }
205
+ });
206
+ (0, _defineProperty2.default)(this, "changeGridConfiguration", event => {
207
+ const {
208
+ gridConfigurations
209
+ } = this.props;
210
+ const {
211
+ value
212
+ } = event.target;
213
+ this.onConfigChange(gridConfigurations?.[value] || {}, value);
214
+ });
215
+ const {
216
+ domain: _domain,
217
+ range: _range,
218
+ graph: _graph
219
+ } = props.model || {};
220
+ const _gridValues = {
221
+ domain: (0, _utils.getGridValues)(_domain, _graph.width, true),
222
+ range: (0, _utils.getGridValues)(_range, _graph.height, true)
223
+ };
224
+ const _labelValues = {
225
+ domain: (0, _utils.getLabelValues)(_domain.step),
226
+ range: (0, _utils.getLabelValues)(_range.step)
227
+ };
228
+ this.state = {
229
+ gridValues: _gridValues,
230
+ labelValues: _labelValues,
231
+ showPixelGuides: false,
232
+ dialog: {
233
+ isOpened: false
234
+ },
235
+ domain: {
236
+ ..._domain
237
+ },
238
+ range: {
239
+ ..._range
240
+ }
241
+ };
242
+ }
243
+ render() {
244
+ const {
245
+ authoring = {},
246
+ availableTools = [],
247
+ gridConfigurations = [],
248
+ graphDimensions = {},
249
+ labelsPlaceholders,
250
+ model,
251
+ showLabels,
252
+ dimensionsEnabled,
253
+ showTitle,
254
+ titlePlaceholder,
255
+ mathMlOptions = {},
256
+ removeIncompleteTool
257
+ } = this.props;
258
+ const {
259
+ arrows,
260
+ backgroundMarks,
261
+ coordinatesOnHover,
262
+ defaultGridConfiguration,
263
+ domain,
264
+ includeAxes,
265
+ labels,
266
+ range,
267
+ standardGrid,
268
+ title
269
+ } = model || {};
270
+ const graph = (model || {}).graph || {};
271
+ const {
272
+ min,
273
+ max,
274
+ step
275
+ } = graphDimensions || {};
276
+ const {
277
+ dialog = {},
278
+ gridValues,
279
+ labelValues,
280
+ showPixelGuides
281
+ } = this.state;
282
+ const sizeConstraints = {
283
+ min: Math.max(150, min),
284
+ max: Math.min(800, max),
285
+ step: step >= 1 ? Math.min(200, step) : 20
286
+ };
287
+ const displayedFields = {
288
+ axisLabel: authoring.axisLabel,
289
+ dimensionsEnabled,
290
+ includeAxesEnabled: authoring.includeAxesEnabled,
291
+ labelStep: authoring.labelStep,
292
+ min: authoring.min,
293
+ max: authoring.max,
294
+ standardGridEnabled: authoring.standardGridEnabled,
295
+ step: authoring.step
296
+ };
297
+ const displayGridSetup = authoring.enabled && Object.values(displayedFields).some(field => typeof field === 'object' ? field.enabled : field);
298
+ return /*#__PURE__*/React.createElement(Container, null, /*#__PURE__*/React.createElement(GridConfigWrapper, null, gridConfigurations && gridConfigurations.length ? /*#__PURE__*/React.createElement(GridConfig, null, /*#__PURE__*/React.createElement(GridConfigLabel, {
299
+ component: "div",
300
+ variant: "h6"
301
+ }, "Grid Configuration"), /*#__PURE__*/React.createElement(GridConfigSelect, {
302
+ input: /*#__PURE__*/React.createElement(_material.OutlinedInput, null),
303
+ displayEmpty: true,
304
+ onChange: this.changeGridConfiguration,
305
+ value: defaultGridConfiguration,
306
+ MenuProps: {
307
+ transitionDuration: {
308
+ enter: 225,
309
+ exit: 195
310
+ }
311
+ }
312
+ }, (gridConfigurations || []).map((config, index) => /*#__PURE__*/React.createElement(_material.MenuItem, {
313
+ key: index,
314
+ value: index
315
+ }, config.label)))) : null, displayGridSetup && /*#__PURE__*/React.createElement(_graphing.GridSetup, {
316
+ displayedFields: displayedFields,
317
+ domain: domain,
318
+ gridValues: gridValues,
319
+ includeAxes: includeAxes,
320
+ labelValues: labelValues,
321
+ range: range,
322
+ size: graph,
323
+ sizeConstraints: sizeConstraints,
324
+ standardGrid: standardGrid,
325
+ onChange: this.onConfigChange,
326
+ onChangeView: this.onChangeView
327
+ })), /*#__PURE__*/React.createElement(GraphConfig, {
328
+ key: "graph"
329
+ }, /*#__PURE__*/React.createElement(_material.Typography, {
330
+ component: "div",
331
+ variant: "h6"
332
+ }, "Define Graph Attributes"), /*#__PURE__*/React.createElement(SubtitleText, {
333
+ component: "div",
334
+ variant: "body1"
335
+ }, "Use this interface to add/edit a title and/or labels, and to set background shapes"), /*#__PURE__*/React.createElement(_graphing.GraphContainer, {
336
+ axesSettings: {
337
+ includeArrows: arrows
338
+ },
339
+ backgroundMarks: [],
340
+ coordinatesOnHover: coordinatesOnHover,
341
+ collapsibleToolbar: true,
342
+ collapsibleToolbarTitle: 'Add Background Shapes to Graph',
343
+ domain: domain,
344
+ key: "graphing-config",
345
+ labels: labels,
346
+ labelsPlaceholders: labelsPlaceholders,
347
+ marks: backgroundMarks,
348
+ onChangeLabels: this.changeLabels,
349
+ onChangeMarks: this.changeBackgroundMarks,
350
+ onChangeTitle: this.changeTitle,
351
+ range: range,
352
+ showLabels: showLabels,
353
+ showPixelGuides: showPixelGuides,
354
+ showTitle: showTitle,
355
+ size: {
356
+ width: graph.width,
357
+ height: graph.height
358
+ },
359
+ title: title,
360
+ titlePlaceholder: titlePlaceholder,
361
+ toolbarTools: availableTools,
362
+ mathMlOptions: mathMlOptions,
363
+ removeIncompleteTool: removeIncompleteTool
364
+ })), /*#__PURE__*/React.createElement(_configUi.AlertDialog, {
365
+ open: dialog.isOpened,
366
+ title: "Warning",
367
+ text: "This change would make it impossible for students to plot one or more graph objects in the current correct answers. If you proceed, all such graph objects will be removed from the correct answers.",
368
+ onClose: dialog.onClose,
369
+ onConfirm: dialog.onConfirm
370
+ }));
371
+ }
372
+ }
373
+ exports.GraphingConfig = GraphingConfig;
374
+ (0, _defineProperty2.default)(GraphingConfig, "propTypes", {
375
+ availableTools: _propTypes.default.array,
376
+ authoring: _propTypes.default.object,
377
+ dimensionsEnabled: _propTypes.default.bool,
378
+ graphDimensions: _propTypes.default.object,
379
+ gridConfigurations: _propTypes.default.array,
380
+ labelsPlaceholders: _propTypes.default.object,
381
+ model: _propTypes.default.object.isRequired,
382
+ onChange: _propTypes.default.func.isRequired,
383
+ showLabels: _propTypes.default.bool,
384
+ showTitle: _propTypes.default.bool,
385
+ titlePlaceholder: _propTypes.default.string
386
+ });
387
+ var _default = exports.default = GraphingConfig;
388
+ //# sourceMappingURL=graphing-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphing-config.js","names":["React","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_graphing","_configUi","_material","_styles","_utils","_lodashEs","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Container","styled","theme","display","flexWrap","marginBottom","spacing","GridConfigWrapper","flexDirection","marginRight","GraphConfig","SubtitleText","Typography","marginTop","GridConfig","alignItems","width","GridConfigLabel","padding","GridConfigSelect","Select","flex","GraphingConfig","Component","constructor","props","_defineProperty2","backgroundMarks","model","onChange","labels","title","config","newSelectedGrid","defaultGridConfiguration","oldSelectedGrid","gridValues","oldGridValues","labelValues","oldLabelValues","domain","oldDomain","range","oldRange","state","updatedModel","answers","includeAxes","graph","standardGrid","selectedGrid","domainConstraints","applyConstraints","step","labelStep","rangeConstraints","height","plotableAnswers","filterPlotableMarks","isEqual","setState","dialog","isOpened","onClose","onConfirm","event","expanded","graphDimensions","enabled","showPixelGuides","gridConfigurations","value","target","onConfigChange","getGridValues","getLabelValues","render","authoring","availableTools","labelsPlaceholders","showLabels","dimensionsEnabled","showTitle","titlePlaceholder","mathMlOptions","removeIncompleteTool","arrows","coordinatesOnHover","min","max","sizeConstraints","Math","displayedFields","axisLabel","includeAxesEnabled","standardGridEnabled","displayGridSetup","values","some","field","createElement","length","component","variant","input","OutlinedInput","displayEmpty","changeGridConfiguration","MenuProps","transitionDuration","enter","exit","map","index","MenuItem","key","label","GridSetup","size","onChangeView","GraphContainer","axesSettings","includeArrows","collapsibleToolbar","collapsibleToolbarTitle","marks","onChangeLabels","changeLabels","onChangeMarks","changeBackgroundMarks","onChangeTitle","changeTitle","toolbarTools","AlertDialog","open","text","exports","PropTypes","array","object","bool","isRequired","func","string","_default"],"sources":["../src/graphing-config.jsx"],"sourcesContent":["import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { GraphContainer, GridSetup } from '@pie-lib/graphing';\nimport { AlertDialog } from '@pie-lib/config-ui';\nimport { MenuItem, Select, Typography, OutlinedInput } from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { applyConstraints, filterPlotableMarks, getGridValues, getLabelValues } from './utils';\nimport { isEqual } from 'lodash-es';\n\nconst Container = styled('div')(({ theme }) => ({\n display: 'flex',\n flexWrap: 'wrap',\n marginBottom: theme.spacing(2.5),\n}));\n\nconst GridConfigWrapper = styled('div')(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n marginRight: theme.spacing(3),\n marginBottom: theme.spacing(2.5),\n}));\n\nconst GraphConfig = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n});\n\nconst SubtitleText = styled(Typography)(({ theme }) => ({\n marginTop: theme.spacing(1.5),\n marginBottom: theme.spacing(1),\n}));\n\nconst GridConfig = styled('div')(({ theme }) => ({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n width: '100%',\n marginBottom: theme.spacing(2.5),\n}));\n\nconst GridConfigLabel = styled(Typography)(({ theme }) => ({\n padding: `0 ${theme.spacing(1)}`,\n}));\n\nconst GridConfigSelect = styled(Select)({\n flex: '1',\n});\n\nexport class GraphingConfig extends React.Component {\n static propTypes = {\n availableTools: PropTypes.array,\n authoring: PropTypes.object,\n dimensionsEnabled: PropTypes.bool,\n graphDimensions: PropTypes.object,\n gridConfigurations: PropTypes.array,\n labelsPlaceholders: PropTypes.object,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n showLabels: PropTypes.bool,\n showTitle: PropTypes.bool,\n titlePlaceholder: PropTypes.string,\n };\n\n constructor(props) {\n super(props);\n const { domain, range, graph } = props.model || {};\n\n const gridValues = {\n domain: getGridValues(domain, graph.width, true),\n range: getGridValues(range, graph.height, true),\n };\n const labelValues = {\n domain: getLabelValues(domain.step),\n range: getLabelValues(range.step),\n };\n\n this.state = {\n gridValues,\n labelValues,\n showPixelGuides: false,\n dialog: { isOpened: false },\n domain: { ...domain },\n range: { ...range },\n };\n }\n\n changeBackgroundMarks = (backgroundMarks) => {\n const model = { ...this.props.model, backgroundMarks };\n\n this.props.onChange(model);\n };\n\n changeLabels = (labels) => {\n const { model, onChange } = this.props;\n\n onChange({ ...model, labels });\n };\n\n changeTitle = (title) => {\n const { model, onChange } = this.props;\n\n onChange({ ...model, title });\n };\n\n onConfigChange = (config, newSelectedGrid) => {\n const { model, onChange } = this.props;\n const { defaultGridConfiguration: oldSelectedGrid = 0 } = model;\n const { gridValues: oldGridValues, labelValues: oldLabelValues, domain: oldDomain, range: oldRange } = this.state;\n const updatedModel = { ...model, ...config };\n const { answers, domain, includeAxes, graph, range, standardGrid } = updatedModel;\n const gridValues = { domain: [], range: [] };\n const labelValues = { domain: [], range: [] };\n const selectedGrid = newSelectedGrid >= 0 ? newSelectedGrid : oldSelectedGrid;\n\n if (includeAxes) {\n const domainConstraints = applyConstraints(domain, graph.width, oldGridValues.domain, oldLabelValues.domain);\n\n gridValues.domain = domainConstraints.gridValues || [];\n labelValues.domain = domainConstraints.labelValues || [];\n }\n\n if (standardGrid) {\n gridValues.range = gridValues.domain;\n labelValues.range = labelValues.domain;\n range.step = domain.step;\n range.labelStep = domain.labelStep;\n } else {\n if (includeAxes) {\n const rangeConstraints = applyConstraints(range, graph.height, oldGridValues.range, oldLabelValues.range);\n\n gridValues.range = rangeConstraints.gridValues || [];\n labelValues.range = rangeConstraints.labelValues || [];\n }\n }\n\n const plotableAnswers = filterPlotableMarks(domain, range, answers);\n\n if (!isEqual(answers, plotableAnswers)) {\n this.setState({\n dialog: {\n isOpened: true,\n onClose: () =>\n this.setState({ dialog: { isOpened: false } }, onChange({ ...model, domain: oldDomain, range: oldRange })),\n onConfirm: () => {\n this.setState(\n {\n gridValues,\n labelValues,\n dialog: { isOpened: false },\n domain: { ...domain },\n range: { ...range },\n },\n onChange({ ...updatedModel, answers: plotableAnswers, defaultGridConfiguration: selectedGrid }),\n );\n },\n },\n });\n\n return;\n }\n\n this.setState({ gridValues, labelValues, domain: { ...domain }, range: { ...range } });\n onChange({ ...updatedModel, defaultGridConfiguration: selectedGrid });\n };\n\n onChangeView = (event, expanded) => {\n const { graphDimensions: { enabled } = {} } = this.props;\n\n if (enabled) {\n this.setState({ showPixelGuides: expanded });\n }\n };\n\n changeGridConfiguration = (event) => {\n const { gridConfigurations } = this.props;\n const { value } = event.target;\n\n this.onConfigChange(gridConfigurations?.[value] || {}, value);\n };\n\n render() {\n const {\n authoring = {},\n availableTools = [],\n gridConfigurations = [],\n graphDimensions = {},\n labelsPlaceholders,\n model,\n showLabels,\n dimensionsEnabled,\n showTitle,\n titlePlaceholder,\n mathMlOptions = {},\n removeIncompleteTool,\n } = this.props;\n const {\n arrows,\n backgroundMarks,\n coordinatesOnHover,\n defaultGridConfiguration,\n domain,\n includeAxes,\n labels,\n range,\n standardGrid,\n title,\n } = model || {};\n const graph = (model || {}).graph || {};\n const { min, max, step } = graphDimensions || {};\n const { dialog = {}, gridValues, labelValues, showPixelGuides } = this.state;\n\n const sizeConstraints = {\n min: Math.max(150, min),\n max: Math.min(800, max),\n step: step >= 1 ? Math.min(200, step) : 20,\n };\n\n const displayedFields = {\n axisLabel: authoring.axisLabel,\n dimensionsEnabled,\n includeAxesEnabled: authoring.includeAxesEnabled,\n labelStep: authoring.labelStep,\n min: authoring.min,\n max: authoring.max,\n standardGridEnabled: authoring.standardGridEnabled,\n step: authoring.step,\n };\n\n const displayGridSetup =\n authoring.enabled &&\n Object.values(displayedFields).some((field) => (typeof field === 'object' ? field.enabled : field));\n\n return (\n <Container>\n <GridConfigWrapper>\n {gridConfigurations && gridConfigurations.length ? (\n <GridConfig>\n <GridConfigLabel component=\"div\" variant=\"h6\">\n Grid Configuration\n </GridConfigLabel>\n\n <GridConfigSelect\n input={<OutlinedInput />}\n displayEmpty\n onChange={this.changeGridConfiguration}\n value={defaultGridConfiguration}\n MenuProps={{ transitionDuration: { enter: 225, exit: 195 } }}\n >\n {(gridConfigurations || []).map((config, index) => (\n <MenuItem key={index} value={index}>\n {config.label}\n </MenuItem>\n ))}\n </GridConfigSelect>\n </GridConfig>\n ) : null}\n\n {displayGridSetup && (\n <GridSetup\n displayedFields={displayedFields}\n domain={domain}\n gridValues={gridValues}\n includeAxes={includeAxes}\n labelValues={labelValues}\n range={range}\n size={graph}\n sizeConstraints={sizeConstraints}\n standardGrid={standardGrid}\n onChange={this.onConfigChange}\n onChangeView={this.onChangeView}\n />\n )}\n </GridConfigWrapper>\n\n <GraphConfig key=\"graph\">\n <Typography component=\"div\" variant=\"h6\">\n Define Graph Attributes\n </Typography>\n\n <SubtitleText component=\"div\" variant=\"body1\">\n Use this interface to add/edit a title and/or labels, and to set background shapes\n </SubtitleText>\n\n <GraphContainer\n axesSettings={{ includeArrows: arrows }}\n backgroundMarks={[]}\n coordinatesOnHover={coordinatesOnHover}\n collapsibleToolbar={true}\n collapsibleToolbarTitle={'Add Background Shapes to Graph'}\n domain={domain}\n key=\"graphing-config\"\n labels={labels}\n labelsPlaceholders={labelsPlaceholders}\n marks={backgroundMarks}\n onChangeLabels={this.changeLabels}\n onChangeMarks={this.changeBackgroundMarks}\n onChangeTitle={this.changeTitle}\n range={range}\n showLabels={showLabels}\n showPixelGuides={showPixelGuides}\n showTitle={showTitle}\n size={{ width: graph.width, height: graph.height }}\n title={title}\n titlePlaceholder={titlePlaceholder}\n toolbarTools={availableTools}\n mathMlOptions={mathMlOptions}\n removeIncompleteTool={removeIncompleteTool}\n />\n </GraphConfig>\n\n <AlertDialog\n open={dialog.isOpened}\n title=\"Warning\"\n text=\"This change would make it impossible for students to plot one or more graph objects in the current correct answers. If you proceed, all such graph objects will be removed from the correct answers.\"\n onClose={dialog.onClose}\n onConfirm={dialog.onConfirm}\n />\n </Container>\n );\n }\n}\n\nexport default GraphingConfig;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _client = require("react-dom/client");
11
+ var _configure = _interopRequireDefault(require("./configure"));
12
+ var _pieConfigureEvents = require("@pie-framework/pie-configure-events");
13
+ var _debug = _interopRequireDefault(require("debug"));
14
+ var _defaults = _interopRequireDefault(require("./defaults"));
15
+ var _mathRendering = require("@pie-lib/math-rendering");
16
+ var _lodashEs = require("lodash-es");
17
+ const log = (0, _debug.default)('pie-elements:graphing:configure');
18
+
19
+ // this function is implemented in controller as well
20
+ const sortedAnswers = answers => Object.keys(answers || {}).sort().reduce((result, key) => {
21
+ if (key !== 'correctAnswer') {
22
+ result[key] = answers[key];
23
+ }
24
+ return result;
25
+ }, {});
26
+ class GraphLinesConfigure extends HTMLElement {
27
+ constructor() {
28
+ super();
29
+ (0, _defineProperty2.default)(this, "resetModelAfterConfigurationIsSet", () => {
30
+ // In environments that use pie-player-components, model is set before configuration.
31
+ // This is the reason why sometimes the model gets altered non-reversible
32
+ // (altered using default configuration instead of client configuration, because at that point client configuration was not set yet)
33
+ // Therefore, in such environments, we will make sure to keep a modelCopy (initialised in set model) and use it to reset
34
+ // the model in set configuration (resetModelAfterConfigurationIsSet) if set configuration is ever called
35
+ const pieAuthors = document.querySelectorAll('pie-author');
36
+ this.hasPlayerAsParent = Array.from(pieAuthors).some(author => author.contains(this));
37
+ if (this.hasPlayerAsParent) {
38
+ if (this._modelCopy) {
39
+ this._model = this._modelCopy;
40
+ } else {
41
+ delete this._modelCopy;
42
+ }
43
+ }
44
+ });
45
+ (0, _defineProperty2.default)(this, "onModelChanged", model => {
46
+ this._model = model;
47
+ this._render();
48
+ log('[onModelChanged]: ', this._model);
49
+ this.dispatchEvent(new _pieConfigureEvents.ModelUpdatedEvent(this._model));
50
+ });
51
+ (0, _defineProperty2.default)(this, "onConfigurationChanged", config => {
52
+ this._configuration = config;
53
+ this._render();
54
+ });
55
+ (0, _defineProperty2.default)(this, "insertImage", handler => {
56
+ this.dispatchEvent(new _pieConfigureEvents.InsertImageEvent(handler));
57
+ });
58
+ (0, _defineProperty2.default)(this, "onDeleteImage", (src, done) => {
59
+ this.dispatchEvent(new _pieConfigureEvents.DeleteImageEvent(src, done));
60
+ });
61
+ this._root = null;
62
+ this._model = GraphLinesConfigure.createDefaultModel();
63
+ this._configuration = _defaults.default.configuration;
64
+ }
65
+ set model(m) {
66
+ this._model = GraphLinesConfigure.createDefaultModel(m);
67
+ this._modelCopy = (0, _lodashEs.cloneDeep)(this._model);
68
+ this._render();
69
+ }
70
+ set configuration(c) {
71
+ this._configuration = {
72
+ ..._defaults.default.configuration,
73
+ ...c
74
+ };
75
+ this.resetModelAfterConfigurationIsSet();
76
+
77
+ // if language:enabled is true, then the corresponding default item model should include a language value;
78
+ // if it is false, then the language field should be omitted from the item model.
79
+ // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,
80
+ // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).
81
+ //TODO: add logic in controller and add tests
82
+ if (c.language?.enabled) {
83
+ if (c.languageChoices?.options?.length) {
84
+ this._model.language = c.languageChoices.options[0].value;
85
+ }
86
+ } else {
87
+ if (c.language.settings) {
88
+ if (this._model.language) {
89
+ this._configuration.language.enabled = true;
90
+ }
91
+ } else {
92
+ delete this._model.language;
93
+ }
94
+ }
95
+ this._render();
96
+ }
97
+ insertSound(handler) {
98
+ this.dispatchEvent(new _pieConfigureEvents.InsertSoundEvent(handler));
99
+ }
100
+ onDeleteSound(src, done) {
101
+ this.dispatchEvent(new _pieConfigureEvents.DeleteSoundEvent(src, done));
102
+ }
103
+ _render() {
104
+ if (this._model) {
105
+ const el = /*#__PURE__*/_react.default.createElement(_configure.default, {
106
+ onModelChanged: this.onModelChanged,
107
+ onConfigurationChanged: this.onConfigurationChanged,
108
+ model: this._model,
109
+ configuration: this._configuration,
110
+ imageSupport: {
111
+ add: this.insertImage,
112
+ delete: this.onDeleteImage
113
+ },
114
+ uploadSoundSupport: {
115
+ add: this.insertSound.bind(this),
116
+ delete: this.onDeleteSound.bind(this)
117
+ }
118
+ });
119
+ if (!this._root) {
120
+ this._root = (0, _client.createRoot)(this);
121
+ }
122
+ this._root.render(el);
123
+ queueMicrotask(() => {
124
+ (0, _mathRendering.renderMath)(this);
125
+ });
126
+ }
127
+ }
128
+ disconnectedCallback() {
129
+ if (this._root) {
130
+ this._root.unmount();
131
+ }
132
+ }
133
+ }
134
+ exports.default = GraphLinesConfigure;
135
+ (0, _defineProperty2.default)(GraphLinesConfigure, "createDefaultModel", (model = {}) => {
136
+ const normalizedModel = {
137
+ ..._defaults.default.model,
138
+ ...model
139
+ };
140
+ const {
141
+ answers = {},
142
+ domain = {},
143
+ defaultTool,
144
+ graph = {},
145
+ range = {},
146
+ standardGrid,
147
+ toolbarTools
148
+ } = normalizedModel;
149
+
150
+ // added support for models without defaultTool defined; also used in packages/graphing/controller/src/index.js
151
+ const toolbarToolsNoLabel = (toolbarTools || []).filter(tool => tool !== 'label');
152
+ const normalizedDefaultTool = defaultTool || toolbarToolsNoLabel.length && toolbarToolsNoLabel[0] || '';
153
+ return {
154
+ ...normalizedModel,
155
+ answers: answers && answers.correctAnswer && {
156
+ correctAnswer: answers.correctAnswer,
157
+ ...sortedAnswers(answers)
158
+ } || answers,
159
+ defaultTool: normalizedDefaultTool,
160
+ range: standardGrid && {
161
+ ...range,
162
+ min: domain.min,
163
+ max: domain.max,
164
+ step: domain.step,
165
+ labelStep: domain.labelStep
166
+ } || range,
167
+ graph: standardGrid && {
168
+ ...graph,
169
+ height: graph.width
170
+ } || graph
171
+ };
172
+ });
173
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_configure","_pieConfigureEvents","_debug","_defaults","_mathRendering","_lodashEs","log","debug","sortedAnswers","answers","Object","keys","sort","reduce","result","key","GraphLinesConfigure","HTMLElement","constructor","_defineProperty2","default","pieAuthors","document","querySelectorAll","hasPlayerAsParent","Array","from","some","author","contains","_modelCopy","_model","model","_render","dispatchEvent","ModelUpdatedEvent","config","_configuration","handler","InsertImageEvent","src","done","DeleteImageEvent","_root","createDefaultModel","defaultValues","configuration","m","cloneDeep","c","resetModelAfterConfigurationIsSet","language","enabled","languageChoices","options","length","value","settings","insertSound","InsertSoundEvent","onDeleteSound","DeleteSoundEvent","el","React","createElement","Configure","onModelChanged","onConfigurationChanged","imageSupport","add","insertImage","delete","onDeleteImage","uploadSoundSupport","bind","createRoot","render","queueMicrotask","renderMath","disconnectedCallback","unmount","exports","normalizedModel","domain","defaultTool","graph","range","standardGrid","toolbarTools","toolbarToolsNoLabel","filter","tool","normalizedDefaultTool","correctAnswer","min","max","step","labelStep","height","width"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport Configure from './configure';\nimport {\n DeleteImageEvent,\n DeleteSoundEvent,\n InsertImageEvent,\n InsertSoundEvent,\n ModelUpdatedEvent,\n} from '@pie-framework/pie-configure-events';\nimport debug from 'debug';\nimport defaultValues from './defaults';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { cloneDeep } from 'lodash-es';\n\nconst log = debug('pie-elements:graphing:configure');\n\n// this function is implemented in controller as well\nconst sortedAnswers = (answers) =>\n Object.keys(answers || {})\n .sort()\n .reduce((result, key) => {\n if (key !== 'correctAnswer') {\n result[key] = answers[key];\n }\n\n return result;\n }, {});\n\nexport default class GraphLinesConfigure extends HTMLElement {\n static createDefaultModel = (model = {}) => {\n const normalizedModel = { ...defaultValues.model, ...model };\n const {\n answers = {},\n domain = {},\n defaultTool,\n graph = {},\n range = {},\n standardGrid,\n toolbarTools,\n } = normalizedModel;\n\n // added support for models without defaultTool defined; also used in packages/graphing/controller/src/index.js\n const toolbarToolsNoLabel = (toolbarTools || []).filter((tool) => tool !== 'label');\n const normalizedDefaultTool = defaultTool || (toolbarToolsNoLabel.length && toolbarToolsNoLabel[0]) || '';\n\n return {\n ...normalizedModel,\n answers:\n (answers &&\n answers.correctAnswer && {\n correctAnswer: answers.correctAnswer,\n ...sortedAnswers(answers),\n }) ||\n answers,\n defaultTool: normalizedDefaultTool,\n range:\n (standardGrid && {\n ...range,\n min: domain.min,\n max: domain.max,\n step: domain.step,\n labelStep: domain.labelStep,\n }) ||\n range,\n graph: (standardGrid && { ...graph, height: graph.width }) || graph,\n };\n };\n\n constructor() {\n super();\n this._root = null;\n this._model = GraphLinesConfigure.createDefaultModel();\n this._configuration = defaultValues.configuration;\n }\n\n set model(m) {\n this._model = GraphLinesConfigure.createDefaultModel(m);\n this._modelCopy = cloneDeep(this._model);\n\n this._render();\n }\n\n resetModelAfterConfigurationIsSet = () => {\n // In environments that use pie-player-components, model is set before configuration.\n // This is the reason why sometimes the model gets altered non-reversible\n // (altered using default configuration instead of client configuration, because at that point client configuration was not set yet)\n // Therefore, in such environments, we will make sure to keep a modelCopy (initialised in set model) and use it to reset\n // the model in set configuration (resetModelAfterConfigurationIsSet) if set configuration is ever called\n const pieAuthors = document.querySelectorAll('pie-author');\n this.hasPlayerAsParent = Array.from(pieAuthors).some((author) => author.contains(this));\n\n if (this.hasPlayerAsParent) {\n if (this._modelCopy) {\n this._model = this._modelCopy;\n } else {\n delete this._modelCopy;\n }\n }\n };\n\n set configuration(c) {\n this._configuration = {\n ...defaultValues.configuration,\n ...c,\n };\n\n this.resetModelAfterConfigurationIsSet();\n\n // if language:enabled is true, then the corresponding default item model should include a language value;\n // if it is false, then the language field should be omitted from the item model.\n // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,\n // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).\n //TODO: add logic in controller and add tests\n if (c.language?.enabled) {\n if (c.languageChoices?.options?.length) {\n this._model.language = c.languageChoices.options[0].value;\n }\n } else {\n if (c.language.settings) {\n if (this._model.language) {\n this._configuration.language.enabled = true;\n }\n } else {\n delete this._model.language;\n }\n }\n\n this._render();\n }\n\n onModelChanged = (model) => {\n this._model = model;\n this._render();\n\n log('[onModelChanged]: ', this._model);\n\n this.dispatchEvent(new ModelUpdatedEvent(this._model));\n };\n\n onConfigurationChanged = (config) => {\n this._configuration = config;\n this._render();\n };\n\n insertImage = (handler) => {\n this.dispatchEvent(new InsertImageEvent(handler));\n };\n\n onDeleteImage = (src, done) => {\n this.dispatchEvent(new DeleteImageEvent(src, done));\n };\n\n insertSound(handler) {\n this.dispatchEvent(new InsertSoundEvent(handler));\n }\n\n onDeleteSound(src, done) {\n this.dispatchEvent(new DeleteSoundEvent(src, done));\n }\n\n _render() {\n if (this._model) {\n const el = React.createElement(Configure, {\n onModelChanged: this.onModelChanged,\n onConfigurationChanged: this.onConfigurationChanged,\n model: this._model,\n configuration: this._configuration,\n imageSupport: {\n add: this.insertImage,\n delete: this.onDeleteImage,\n },\n uploadSoundSupport: {\n add: this.insertSound.bind(this),\n delete: this.onDeleteSound.bind(this),\n },\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(el);\n queueMicrotask(() => {\n renderMath(this);\n });\n }\n }\n\n disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}