@pie-element/graphing 10.1.2-next.5 → 10.1.3

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 +2055 -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 +1846 -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 -87
  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-CTkqz7Oi.js +0 -63877
  61. package/dist/browser/container-CTkqz7Oi.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-B7TYAggd.js +0 -551
  67. package/dist/browser/dist-B7TYAggd.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 -414
  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,484 @@
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.Tools = exports.CorrectResponse = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var React = _interopRequireWildcard(require("react"));
11
+ var _reactDom = _interopRequireDefault(require("react-dom"));
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+ var _styles = require("@mui/material/styles");
14
+ var _graphing = require("@pie-lib/graphing");
15
+ var _configUi = require("@pie-lib/config-ui");
16
+ var _mathRendering = require("@pie-lib/math-rendering");
17
+ var _Delete = _interopRequireDefault(require("@mui/icons-material/Delete"));
18
+ var _lodashEs = require("lodash-es");
19
+ var _material = require("@mui/material");
20
+ var _Info = _interopRequireDefault(require("@mui/icons-material/Info"));
21
+ 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); }
22
+ // custom grey values close to old v3 accents
23
+ const GREY_A100 = '#D5D5D5';
24
+ const GREY_A200 = '#AAAAAA';
25
+ const GraphingTools = (0, _styles.styled)('div')({
26
+ color: GREY_A200
27
+ });
28
+ const Button = (0, _styles.styled)('div')(({
29
+ theme
30
+ }) => ({
31
+ margin: `${theme.spacing(2.5)} 0`,
32
+ cursor: 'pointer',
33
+ background: theme.palette.grey[200],
34
+ padding: theme.spacing(1.5),
35
+ width: 'fit-content',
36
+ borderRadius: '4px',
37
+ '&:hover': {
38
+ background: GREY_A100
39
+ }
40
+ }));
41
+ const AvailableTools = (0, _styles.styled)('div')(({
42
+ theme
43
+ }) => ({
44
+ marginTop: theme.spacing(1),
45
+ display: 'flex',
46
+ flexWrap: 'wrap'
47
+ }));
48
+ const AvailableTool = (0, _styles.styled)('div')(({
49
+ theme
50
+ }) => ({
51
+ cursor: 'pointer',
52
+ margin: theme.spacing(1),
53
+ padding: theme.spacing(1),
54
+ border: `2px solid ${theme.palette.common.white}`,
55
+ textTransform: 'capitalize',
56
+ '&:hover': {
57
+ color: theme.palette.grey[800]
58
+ }
59
+ }));
60
+ const SelectedTool = (0, _styles.styled)(AvailableTool)({
61
+ background: GREY_A100,
62
+ border: `2px solid ${GREY_A200}`
63
+ });
64
+ const ResponseTitle = (0, _styles.styled)('div')(({
65
+ theme
66
+ }) => ({
67
+ display: 'flex',
68
+ alignItems: 'center',
69
+ marginTop: theme.spacing(2.5)
70
+ }));
71
+ const IconButton = (0, _styles.styled)('div')(({
72
+ theme
73
+ }) => ({
74
+ marginLeft: '6px',
75
+ color: theme.palette.grey[600],
76
+ '&:hover': {
77
+ cursor: 'pointer',
78
+ color: theme.palette.common.black
79
+ }
80
+ }));
81
+ const Name = (0, _styles.styled)('div')(({
82
+ theme
83
+ }) => ({
84
+ marginBottom: theme.spacing(0.5)
85
+ }));
86
+ const StyledTooltip = (0, _styles.styled)(({
87
+ className,
88
+ ...props
89
+ }) => /*#__PURE__*/React.createElement(_material.Tooltip, (0, _extends2.default)({}, props, {
90
+ classes: {
91
+ tooltip: className
92
+ }
93
+ })))(({
94
+ theme
95
+ }) => ({
96
+ '& .MuiTooltip-tooltip': {
97
+ fontSize: theme.typography.fontSize - 2,
98
+ whiteSpace: 'pre',
99
+ maxWidth: '500px'
100
+ }
101
+ }));
102
+ const SubtitleText = (0, _styles.styled)(_material.Typography)(({
103
+ theme
104
+ }) => ({
105
+ marginTop: theme.spacing(1.5),
106
+ marginBottom: theme.spacing(1)
107
+ }));
108
+ const ToolsHeader = (0, _styles.styled)('div')({
109
+ display: 'flex',
110
+ alignItems: 'center',
111
+ justifyContent: 'space-between'
112
+ });
113
+ const DefaultTool = (0, _styles.styled)('div')({
114
+ display: 'flex',
115
+ alignItems: 'center',
116
+ width: '300px'
117
+ });
118
+ const DefaultToolSelect = (0, _styles.styled)(_material.Select)(({
119
+ theme
120
+ }) => ({
121
+ marginLeft: theme.spacing(1),
122
+ textTransform: 'uppercase',
123
+ color: theme.palette.grey[800]
124
+ }));
125
+ const StyledMenuItem = (0, _styles.styled)(_material.MenuItem)({
126
+ textTransform: 'uppercase'
127
+ });
128
+ const ErrorMessage = (0, _styles.styled)('div')(({
129
+ theme
130
+ }) => ({
131
+ fontSize: theme.typography.fontSize - 2,
132
+ color: theme.palette.error.main,
133
+ marginTop: theme.spacing(1)
134
+ }));
135
+ const Tools = ({
136
+ availableTools,
137
+ defaultTool,
138
+ hasErrors,
139
+ toolbarTools,
140
+ toggleToolBarTool,
141
+ onDefaultToolChange
142
+ }) => {
143
+ let allTools = availableTools || [];
144
+ const isLabelAvailable = allTools.includes('label');
145
+ const toolbarToolsNoLabel = (toolbarTools || []).filter(tool => tool !== 'label');
146
+ if (isLabelAvailable) {
147
+ // label has to be placed at the end of the list
148
+ const allToolsNoLabel = allTools.filter(tool => tool !== 'label');
149
+ allTools = [...allToolsNoLabel, 'label'];
150
+ }
151
+ return /*#__PURE__*/React.createElement(GraphingTools, null, /*#__PURE__*/React.createElement(ToolsHeader, null, /*#__PURE__*/React.createElement("span", null, "GRAPHING TOOLS"), toolbarToolsNoLabel.length > 0 && /*#__PURE__*/React.createElement(DefaultTool, null, /*#__PURE__*/React.createElement("span", null, "Default graphing tool:"), /*#__PURE__*/React.createElement(DefaultToolSelect, {
152
+ variant: "standard",
153
+ onChange: onDefaultToolChange,
154
+ value: defaultTool,
155
+ disableUnderline: true,
156
+ MenuProps: {
157
+ transitionDuration: {
158
+ enter: 225,
159
+ exit: 195
160
+ }
161
+ }
162
+ }, toolbarToolsNoLabel.map((tool, index) => /*#__PURE__*/React.createElement(StyledMenuItem, {
163
+ key: index,
164
+ value: tool
165
+ }, tool))))), /*#__PURE__*/React.createElement(AvailableTools, null, allTools.map(tool => {
166
+ const selected = toolbarTools.find(t => t === tool);
167
+ const ToolComponent = selected ? SelectedTool : AvailableTool;
168
+ return /*#__PURE__*/React.createElement(ToolComponent, {
169
+ key: tool,
170
+ style: {
171
+ ...(hasErrors && tool !== 'label' && {
172
+ color: 'red'
173
+ })
174
+ },
175
+ onClick: () => toggleToolBarTool(tool)
176
+ }, tool.toUpperCase());
177
+ })));
178
+ };
179
+ exports.Tools = Tools;
180
+ Tools.propTypes = {
181
+ toolbarTools: _propTypes.default.arrayOf(_propTypes.default.string),
182
+ toggleToolBarTool: _propTypes.default.func,
183
+ availableTools: _propTypes.default.array,
184
+ defaultTool: _propTypes.default.string,
185
+ hasErrors: _propTypes.default.number,
186
+ onDefaultToolChange: _propTypes.default.func
187
+ };
188
+ class CorrectResponse extends React.Component {
189
+ constructor(...args) {
190
+ super(...args);
191
+ (0, _defineProperty2.default)(this, "state", {
192
+ dialog: {
193
+ open: false
194
+ }
195
+ });
196
+ (0, _defineProperty2.default)(this, "handleAlertDialog", (open, callback) => this.setState({
197
+ dialog: {
198
+ open
199
+ }
200
+ }, callback));
201
+ (0, _defineProperty2.default)(this, "changeMarks", (key, marks) => {
202
+ const {
203
+ model,
204
+ onChange
205
+ } = this.props;
206
+ (0, _lodashEs.set)(model, `answers.${key}.marks`, marks);
207
+ onChange(model);
208
+ });
209
+ (0, _defineProperty2.default)(this, "filterMarks", tool => {
210
+ const {
211
+ model: {
212
+ answers
213
+ }
214
+ } = this.props;
215
+ return Object.entries(answers || {}).reduce((object, [key, answer]) => {
216
+ object[key] = {
217
+ ...answer,
218
+ marks: (answer.marks || []).filter(mark => mark.type !== tool)
219
+ };
220
+ return object;
221
+ }, {});
222
+ });
223
+ (0, _defineProperty2.default)(this, "changeToolbarTools", toolbarTools => {
224
+ const {
225
+ model,
226
+ onChange
227
+ } = this.props;
228
+ model.toolbarTools = toolbarTools;
229
+ onChange(model);
230
+ });
231
+ (0, _defineProperty2.default)(this, "updateModel", props => {
232
+ const {
233
+ model,
234
+ onChange
235
+ } = this.props;
236
+ onChange({
237
+ ...model,
238
+ ...props
239
+ });
240
+ });
241
+ (0, _defineProperty2.default)(this, "toggleToolBarTool", tool => {
242
+ const {
243
+ model: {
244
+ defaultTool,
245
+ toolbarTools,
246
+ answers = {}
247
+ }
248
+ } = this.props;
249
+ const updatedToolbarTools = [...toolbarTools];
250
+ let newDefaultTool = defaultTool;
251
+ const index = toolbarTools.findIndex(t => tool === t);
252
+ if (index >= 0) {
253
+ const updatedAnswers = this.filterMarks(tool);
254
+ updatedToolbarTools.splice(index, 1);
255
+ if (tool === defaultTool) {
256
+ const toolbarToolsNoLabel = (updatedToolbarTools || []).filter(tool => tool !== 'label');
257
+ newDefaultTool = toolbarToolsNoLabel.length && toolbarToolsNoLabel[0] || '';
258
+ }
259
+ if (!(0, _lodashEs.isEqual)(answers, updatedAnswers)) {
260
+ this.setState({
261
+ dialog: {
262
+ open: true,
263
+ title: 'Warning',
264
+ text: `Correct answer includes one or more ${tool} objects and all of them will be deleted.`,
265
+ onConfirm: () => this.handleAlertDialog(false, this.updateModel({
266
+ toolbarTools: updatedToolbarTools,
267
+ answers: updatedAnswers,
268
+ defaultTool: newDefaultTool
269
+ })),
270
+ onClose: () => this.handleAlertDialog(false)
271
+ }
272
+ });
273
+ return;
274
+ }
275
+ } else {
276
+ updatedToolbarTools.push(tool);
277
+ if (defaultTool === '' && tool !== 'label') {
278
+ newDefaultTool = tool;
279
+ }
280
+ }
281
+ this.updateModel({
282
+ toolbarTools: updatedToolbarTools,
283
+ defaultTool: newDefaultTool
284
+ });
285
+ });
286
+ (0, _defineProperty2.default)(this, "onDefaultToolChange", event => {
287
+ const {
288
+ value
289
+ } = event.target;
290
+ this.updateModel({
291
+ defaultTool: value
292
+ });
293
+ });
294
+ (0, _defineProperty2.default)(this, "addAlternateResponse", () => {
295
+ const {
296
+ model,
297
+ onChange
298
+ } = this.props;
299
+ const {
300
+ answers
301
+ } = model || {};
302
+ const answersKeys = Object.keys(answers || {});
303
+ (0, _lodashEs.set)(model, `answers.${`alternate${answersKeys.length}`}`, {
304
+ name: `Alternate ${answersKeys.length}`,
305
+ marks: []
306
+ });
307
+ onChange(model);
308
+ });
309
+ (0, _defineProperty2.default)(this, "deleteAlternateResponse", (answerKey, answer) => {
310
+ const {
311
+ model,
312
+ onChange
313
+ } = this.props;
314
+ const {
315
+ answers
316
+ } = model || {};
317
+ const {
318
+ marks = [],
319
+ name
320
+ } = answer || {};
321
+ const deleteAnswer = () => {
322
+ delete answers[answerKey];
323
+ // rebuild answers based on new alternate positions after deletion
324
+ const newAnswers = Object.entries(answers).reduce((acc, currentValue, index) => {
325
+ const [key, value] = currentValue;
326
+ const newAnswer = key === 'correctAnswer' ? {
327
+ ...acc,
328
+ [key]: value
329
+ } : {
330
+ ...acc,
331
+ ['alternate' + index]: {
332
+ ...value,
333
+ name: `Alternate ${index}`
334
+ }
335
+ };
336
+ return newAnswer;
337
+ }, {});
338
+ onChange({
339
+ ...model,
340
+ answers: newAnswers
341
+ });
342
+ };
343
+ if (marks.length) {
344
+ this.setState({
345
+ dialog: {
346
+ open: true,
347
+ title: 'Warning',
348
+ text: `${name} includes one or more shapes and the entire response will be deleted.`,
349
+ onConfirm: () => this.handleAlertDialog(false, deleteAnswer),
350
+ onClose: () => this.handleAlertDialog(false)
351
+ }
352
+ });
353
+ return;
354
+ }
355
+ deleteAnswer();
356
+ });
357
+ }
358
+ componentDidMount() {
359
+ try {
360
+ // eslint-disable-next-line react/no-find-dom-node
361
+ const domNode = _reactDom.default.findDOMNode(this);
362
+ (0, _mathRendering.renderMath)(domNode);
363
+ } catch (e) {
364
+ // Added try-catch block to handle "Unable to find node on an unmounted component" error from tests, thrown because of the usage of shallow
365
+ console.error('DOM not mounted');
366
+ }
367
+ }
368
+ render() {
369
+ const {
370
+ availableTools,
371
+ errors,
372
+ model,
373
+ mathMlOptions = {},
374
+ removeIncompleteTool
375
+ } = this.props;
376
+ const {
377
+ dialog
378
+ } = this.state;
379
+ const {
380
+ answers = {},
381
+ arrows,
382
+ backgroundMarks,
383
+ coordinatesOnHover,
384
+ defaultTool,
385
+ domain,
386
+ graph = {},
387
+ labels,
388
+ labelsEnabled,
389
+ range,
390
+ title,
391
+ titleEnabled,
392
+ toolbarTools
393
+ } = model || {};
394
+ const {
395
+ correctAnswerErrors = {},
396
+ toolbarToolsError
397
+ } = errors || {};
398
+ return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(_material.Typography, {
399
+ component: "div",
400
+ variant: "h6"
401
+ }, "Define Tool Set and Correct Response"), /*#__PURE__*/React.createElement(SubtitleText, {
402
+ component: "div",
403
+ variant: "body1"
404
+ }, "Use this interface to choose which graphing tools students will be able to use, and to define the correct answer"), /*#__PURE__*/React.createElement(Tools, {
405
+ availableTools: availableTools,
406
+ defaultTool: defaultTool,
407
+ hasErrors: !!toolbarToolsError,
408
+ onDefaultToolChange: this.onDefaultToolChange,
409
+ toggleToolBarTool: this.toggleToolBarTool,
410
+ toolbarTools: toolbarTools
411
+ }), toolbarToolsError && /*#__PURE__*/React.createElement(ErrorMessage, null, toolbarToolsError), Object.entries(answers || {}).map(([key, answer]) => {
412
+ const {
413
+ marks = [],
414
+ name
415
+ } = answer || {};
416
+ return /*#__PURE__*/React.createElement(React.Fragment, {
417
+ key: `correct-response-graph-${name}`
418
+ }, /*#__PURE__*/React.createElement(ResponseTitle, null, /*#__PURE__*/React.createElement(Name, null, name), key === 'correctAnswer' && /*#__PURE__*/React.createElement(StyledTooltip, {
419
+ disableFocusListener: true,
420
+ disableTouchListener: true,
421
+ placement: 'right',
422
+ title: 'At least 1 graph object should be defined.'
423
+ }, /*#__PURE__*/React.createElement(_Info.default, {
424
+ fontSize: 'small',
425
+ color: 'primary',
426
+ style: {
427
+ marginLeft: '8px',
428
+ marginBottom: 'auto'
429
+ }
430
+ })), key !== 'correctAnswer' && /*#__PURE__*/React.createElement(IconButton, {
431
+ onClick: () => this.deleteAlternateResponse(key, answer)
432
+ }, /*#__PURE__*/React.createElement(_Delete.default, null))), /*#__PURE__*/React.createElement(_graphing.GraphContainer, {
433
+ style: correctAnswerErrors[key] && {
434
+ border: '2px solid red'
435
+ },
436
+ axesSettings: {
437
+ includeArrows: arrows
438
+ },
439
+ backgroundMarks: backgroundMarks.filter(mark => !mark.building),
440
+ coordinatesOnHover: coordinatesOnHover,
441
+ disabledLabels: true,
442
+ disabledTitle: true,
443
+ domain: domain,
444
+ draggableTools: key === 'correctAnswer',
445
+ labels: labels,
446
+ marks: marks,
447
+ onChangeMarks: newMarks => this.changeMarks(key, newMarks),
448
+ range: range,
449
+ showLabels: labelsEnabled,
450
+ showTitle: titleEnabled,
451
+ size: {
452
+ width: graph.width,
453
+ height: graph.height
454
+ },
455
+ title: title,
456
+ toolbarTools: toolbarTools,
457
+ onChangeTools: toolbarTools => this.updateModel({
458
+ toolbarTools
459
+ }),
460
+ mathMlOptions: mathMlOptions,
461
+ removeIncompleteTool: removeIncompleteTool,
462
+ limitLabeling: true
463
+ }), correctAnswerErrors[key] && /*#__PURE__*/React.createElement(ErrorMessage, null, correctAnswerErrors[key]));
464
+ }), /*#__PURE__*/React.createElement(Button, {
465
+ onClick: this.addAlternateResponse
466
+ }, "ADD ALTERNATE"), /*#__PURE__*/React.createElement(_configUi.AlertDialog, {
467
+ open: dialog.open,
468
+ title: dialog.title,
469
+ text: dialog.text,
470
+ onClose: dialog.onClose,
471
+ onConfirm: dialog.onConfirm
472
+ }));
473
+ }
474
+ }
475
+ exports.CorrectResponse = CorrectResponse;
476
+ (0, _defineProperty2.default)(CorrectResponse, "propTypes", {
477
+ availableTools: _propTypes.default.array,
478
+ errors: _propTypes.default.object,
479
+ model: _propTypes.default.object.isRequired,
480
+ onChange: _propTypes.default.func.isRequired,
481
+ toolbarTools: _propTypes.default.arrayOf(_propTypes.default.String)
482
+ });
483
+ var _default = exports.default = CorrectResponse;
484
+ //# sourceMappingURL=correct-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"correct-response.js","names":["React","_interopRequireWildcard","require","_reactDom","_interopRequireDefault","_propTypes","_styles","_graphing","_configUi","_mathRendering","_Delete","_lodashEs","_material","_Info","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","GREY_A100","GREY_A200","GraphingTools","styled","color","Button","theme","margin","spacing","cursor","background","palette","grey","padding","width","borderRadius","AvailableTools","marginTop","display","flexWrap","AvailableTool","border","common","white","textTransform","SelectedTool","ResponseTitle","alignItems","IconButton","marginLeft","black","Name","marginBottom","StyledTooltip","className","props","createElement","Tooltip","_extends2","classes","tooltip","fontSize","typography","whiteSpace","maxWidth","SubtitleText","Typography","ToolsHeader","justifyContent","DefaultTool","DefaultToolSelect","Select","StyledMenuItem","MenuItem","ErrorMessage","error","main","Tools","availableTools","defaultTool","hasErrors","toolbarTools","toggleToolBarTool","onDefaultToolChange","allTools","isLabelAvailable","includes","toolbarToolsNoLabel","filter","tool","allToolsNoLabel","length","variant","onChange","value","disableUnderline","MenuProps","transitionDuration","enter","exit","map","index","key","selected","find","ToolComponent","style","onClick","toUpperCase","exports","propTypes","PropTypes","arrayOf","string","func","array","number","CorrectResponse","Component","constructor","args","_defineProperty2","dialog","open","callback","setState","marks","model","answers","entries","reduce","object","answer","mark","type","updatedToolbarTools","newDefaultTool","findIndex","updatedAnswers","filterMarks","splice","isEqual","title","text","onConfirm","handleAlertDialog","updateModel","onClose","push","event","target","answersKeys","keys","name","answerKey","deleteAnswer","newAnswers","acc","currentValue","newAnswer","componentDidMount","domNode","ReactDOM","findDOMNode","renderMath","console","render","errors","mathMlOptions","removeIncompleteTool","state","arrows","backgroundMarks","coordinatesOnHover","domain","graph","labels","labelsEnabled","range","titleEnabled","correctAnswerErrors","toolbarToolsError","component","Fragment","disableFocusListener","disableTouchListener","placement","deleteAlternateResponse","GraphContainer","axesSettings","includeArrows","building","disabledLabels","disabledTitle","draggableTools","onChangeMarks","newMarks","changeMarks","showLabels","showTitle","size","height","onChangeTools","limitLabeling","addAlternateResponse","AlertDialog","isRequired","String","_default"],"sources":["../src/correct-response.jsx"],"sourcesContent":["import * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport { GraphContainer as Graph } from '@pie-lib/graphing';\nimport { AlertDialog } from '@pie-lib/config-ui';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport Delete from '@mui/icons-material/Delete';\nimport { set, isEqual } from 'lodash-es';\nimport { MenuItem, Select, Tooltip, Typography } from '@mui/material';\nimport Info from '@mui/icons-material/Info';\n\n// custom grey values close to old v3 accents\nconst GREY_A100 = '#D5D5D5';\nconst GREY_A200 = '#AAAAAA';\n\nconst GraphingTools = styled('div')({\n color: GREY_A200,\n});\n\nconst Button = styled('div')(({ theme }) => ({\n margin: `${theme.spacing(2.5)} 0`,\n cursor: 'pointer',\n background: theme.palette.grey[200],\n padding: theme.spacing(1.5),\n width: 'fit-content',\n borderRadius: '4px',\n '&:hover': {\n background: GREY_A100,\n },\n}));\n\nconst AvailableTools = styled('div')(({ theme }) => ({\n marginTop: theme.spacing(1),\n display: 'flex',\n flexWrap: 'wrap',\n}));\n\nconst AvailableTool = styled('div')(({ theme }) => ({\n cursor: 'pointer',\n margin: theme.spacing(1),\n padding: theme.spacing(1),\n border: `2px solid ${theme.palette.common.white}`,\n textTransform: 'capitalize',\n '&:hover': {\n color: theme.palette.grey[800],\n },\n}));\n\nconst SelectedTool = styled(AvailableTool)({\n background: GREY_A100,\n border: `2px solid ${GREY_A200}`,\n});\n\nconst ResponseTitle = styled('div')(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n marginTop: theme.spacing(2.5),\n}));\n\nconst IconButton = styled('div')(({ theme }) => ({\n marginLeft: '6px',\n color: theme.palette.grey[600],\n '&:hover': {\n cursor: 'pointer',\n color: theme.palette.common.black,\n },\n}));\n\nconst Name = styled('div')(({ theme }) => ({\n marginBottom: theme.spacing(0.5),\n}));\n\nconst StyledTooltip = styled(({ className, ...props }) => (\n <Tooltip {...props} classes={{ tooltip: className }} />\n))(({ theme }) => ({\n '& .MuiTooltip-tooltip': {\n fontSize: theme.typography.fontSize - 2,\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n}));\n\nconst SubtitleText = styled(Typography)(({ theme }) => ({\n marginTop: theme.spacing(1.5),\n marginBottom: theme.spacing(1),\n}));\n\nconst ToolsHeader = styled('div')({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n});\n\nconst DefaultTool = styled('div')({\n display: 'flex',\n alignItems: 'center',\n width: '300px',\n});\n\nconst DefaultToolSelect = styled(Select)(({ theme }) => ({\n marginLeft: theme.spacing(1),\n textTransform: 'uppercase',\n color: theme.palette.grey[800],\n}));\n\nconst StyledMenuItem = styled(MenuItem)({\n textTransform: 'uppercase',\n});\n\nconst ErrorMessage = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n marginTop: theme.spacing(1),\n}));\n\nexport const Tools = ({\n availableTools,\n defaultTool,\n hasErrors,\n toolbarTools,\n toggleToolBarTool,\n onDefaultToolChange,\n}) => {\n let allTools = availableTools || [];\n const isLabelAvailable = allTools.includes('label');\n const toolbarToolsNoLabel = (toolbarTools || []).filter((tool) => tool !== 'label');\n\n if (isLabelAvailable) {\n // label has to be placed at the end of the list\n const allToolsNoLabel = allTools.filter((tool) => tool !== 'label');\n allTools = [...allToolsNoLabel, 'label'];\n }\n\n return (\n <GraphingTools>\n <ToolsHeader>\n <span>GRAPHING TOOLS</span>\n {toolbarToolsNoLabel.length > 0 && (\n <DefaultTool>\n <span>Default graphing tool:</span>\n <DefaultToolSelect\n variant=\"standard\"\n onChange={onDefaultToolChange}\n value={defaultTool}\n disableUnderline\n MenuProps={{ transitionDuration: { enter: 225, exit: 195 } }}\n >\n {toolbarToolsNoLabel.map((tool, index) => (\n <StyledMenuItem key={index} value={tool}>\n {tool}\n </StyledMenuItem>\n ))}\n </DefaultToolSelect>\n </DefaultTool>\n )}\n </ToolsHeader>\n <AvailableTools>\n {allTools.map((tool) => {\n const selected = toolbarTools.find((t) => t === tool);\n const ToolComponent = selected ? SelectedTool : AvailableTool;\n\n return (\n <ToolComponent\n key={tool}\n style={{\n ...(hasErrors && tool !== 'label' && { color: 'red' }),\n }}\n onClick={() => toggleToolBarTool(tool)}\n >\n {tool.toUpperCase()}\n </ToolComponent>\n );\n })}\n </AvailableTools>\n </GraphingTools>\n );\n};\n\nTools.propTypes = {\n toolbarTools: PropTypes.arrayOf(PropTypes.string),\n toggleToolBarTool: PropTypes.func,\n availableTools: PropTypes.array,\n defaultTool: PropTypes.string,\n hasErrors: PropTypes.number,\n onDefaultToolChange: PropTypes.func,\n};\n\nexport class CorrectResponse extends React.Component {\n static propTypes = {\n availableTools: PropTypes.array,\n errors: PropTypes.object,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n toolbarTools: PropTypes.arrayOf(PropTypes.String),\n };\n\n state = {\n dialog: {\n open: false,\n },\n };\n\n componentDidMount() {\n try {\n // eslint-disable-next-line react/no-find-dom-node\n const domNode = ReactDOM.findDOMNode(this);\n\n renderMath(domNode);\n } catch (e) {\n // Added try-catch block to handle \"Unable to find node on an unmounted component\" error from tests, thrown because of the usage of shallow\n console.error('DOM not mounted');\n }\n }\n\n handleAlertDialog = (open, callback) =>\n this.setState(\n {\n dialog: { open },\n },\n callback,\n );\n\n changeMarks = (key, marks) => {\n const { model, onChange } = this.props;\n\n set(model, `answers.${key}.marks`, marks);\n onChange(model);\n };\n\n filterMarks = (tool) => {\n const {\n model: { answers },\n } = this.props;\n\n return Object.entries(answers || {}).reduce((object, [key, answer]) => {\n object[key] = {\n ...answer,\n marks: (answer.marks || []).filter((mark) => mark.type !== tool),\n };\n\n return object;\n }, {});\n };\n\n changeToolbarTools = (toolbarTools) => {\n const { model, onChange } = this.props;\n model.toolbarTools = toolbarTools;\n\n onChange(model);\n };\n\n updateModel = (props) => {\n const { model, onChange } = this.props;\n\n onChange({\n ...model,\n ...props,\n });\n };\n\n toggleToolBarTool = (tool) => {\n const {\n model: { defaultTool, toolbarTools, answers = {} },\n } = this.props;\n const updatedToolbarTools = [...toolbarTools];\n let newDefaultTool = defaultTool;\n\n const index = toolbarTools.findIndex((t) => tool === t);\n\n if (index >= 0) {\n const updatedAnswers = this.filterMarks(tool);\n updatedToolbarTools.splice(index, 1);\n if (tool === defaultTool) {\n const toolbarToolsNoLabel = (updatedToolbarTools || []).filter((tool) => tool !== 'label');\n newDefaultTool = (toolbarToolsNoLabel.length && toolbarToolsNoLabel[0]) || '';\n }\n\n if (!isEqual(answers, updatedAnswers)) {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: `Correct answer includes one or more ${tool} objects and all of them will be deleted.`,\n onConfirm: () =>\n this.handleAlertDialog(\n false,\n this.updateModel({\n toolbarTools: updatedToolbarTools,\n answers: updatedAnswers,\n defaultTool: newDefaultTool,\n }),\n ),\n onClose: () => this.handleAlertDialog(false),\n },\n });\n\n return;\n }\n } else {\n updatedToolbarTools.push(tool);\n\n if (defaultTool === '' && tool !== 'label') {\n newDefaultTool = tool;\n }\n }\n\n this.updateModel({\n toolbarTools: updatedToolbarTools,\n defaultTool: newDefaultTool,\n });\n };\n\n onDefaultToolChange = (event) => {\n const { value } = event.target;\n\n this.updateModel({ defaultTool: value });\n };\n\n addAlternateResponse = () => {\n const { model, onChange } = this.props;\n const { answers } = model || {};\n const answersKeys = Object.keys(answers || {});\n\n set(model, `answers.${`alternate${answersKeys.length}`}`, {\n name: `Alternate ${answersKeys.length}`,\n marks: [],\n });\n onChange(model);\n };\n\n deleteAlternateResponse = (answerKey, answer) => {\n const { model, onChange } = this.props;\n const { answers } = model || {};\n const { marks = [], name } = answer || {};\n\n const deleteAnswer = () => {\n delete answers[answerKey];\n // rebuild answers based on new alternate positions after deletion\n const newAnswers = Object.entries(answers).reduce((acc, currentValue, index) => {\n const [key, value] = currentValue;\n const newAnswer =\n key === 'correctAnswer'\n ? { ...acc, [key]: value }\n : { ...acc, ['alternate' + index]: { ...value, name: `Alternate ${index}` } };\n return newAnswer;\n }, {});\n\n onChange({ ...model, answers: newAnswers });\n };\n\n if (marks.length) {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: `${name} includes one or more shapes and the entire response will be deleted.`,\n onConfirm: () => this.handleAlertDialog(false, deleteAnswer),\n onClose: () => this.handleAlertDialog(false),\n },\n });\n\n return;\n }\n\n deleteAnswer();\n };\n\n render() {\n const { availableTools, errors, model, mathMlOptions = {}, removeIncompleteTool } = this.props;\n const { dialog } = this.state;\n const {\n answers = {},\n arrows,\n backgroundMarks,\n coordinatesOnHover,\n defaultTool,\n domain,\n graph = {},\n labels,\n labelsEnabled,\n range,\n title,\n titleEnabled,\n toolbarTools,\n } = model || {};\n const { correctAnswerErrors = {}, toolbarToolsError } = errors || {};\n\n return (\n <div>\n <Typography component=\"div\" variant=\"h6\">\n Define Tool Set and Correct Response\n </Typography>\n\n <SubtitleText component=\"div\" variant=\"body1\">\n Use this interface to choose which graphing tools students will be able to use, and to define the correct\n answer\n </SubtitleText>\n\n <Tools\n availableTools={availableTools}\n defaultTool={defaultTool}\n hasErrors={!!toolbarToolsError}\n onDefaultToolChange={this.onDefaultToolChange}\n toggleToolBarTool={this.toggleToolBarTool}\n toolbarTools={toolbarTools}\n />\n\n {toolbarToolsError && <ErrorMessage>{toolbarToolsError}</ErrorMessage>}\n\n {Object.entries(answers || {}).map(([key, answer]) => {\n const { marks = [], name } = answer || {};\n\n return (\n <React.Fragment key={`correct-response-graph-${name}`}>\n <ResponseTitle>\n <Name>{name}</Name>\n {key === 'correctAnswer' && (\n <StyledTooltip\n disableFocusListener\n disableTouchListener\n placement={'right'}\n title={'At least 1 graph object should be defined.'}\n >\n <Info fontSize={'small'} color={'primary'} style={{ marginLeft: '8px', marginBottom: 'auto' }} />\n </StyledTooltip>\n )}\n {key !== 'correctAnswer' && (\n <IconButton onClick={() => this.deleteAlternateResponse(key, answer)}>\n <Delete />\n </IconButton>\n )}\n </ResponseTitle>\n\n <Graph\n style={correctAnswerErrors[key] && { border: '2px solid red' }}\n axesSettings={{ includeArrows: arrows }}\n backgroundMarks={backgroundMarks.filter((mark) => !mark.building)}\n coordinatesOnHover={coordinatesOnHover}\n disabledLabels={true}\n disabledTitle={true}\n domain={domain}\n draggableTools={key === 'correctAnswer'}\n labels={labels}\n marks={marks}\n onChangeMarks={(newMarks) => this.changeMarks(key, newMarks)}\n range={range}\n showLabels={labelsEnabled}\n showTitle={titleEnabled}\n size={{ width: graph.width, height: graph.height }}\n title={title}\n toolbarTools={toolbarTools}\n onChangeTools={(toolbarTools) => this.updateModel({ toolbarTools })}\n mathMlOptions={mathMlOptions}\n removeIncompleteTool={removeIncompleteTool}\n limitLabeling={true}\n />\n\n {correctAnswerErrors[key] && <ErrorMessage>{correctAnswerErrors[key]}</ErrorMessage>}\n </React.Fragment>\n );\n })}\n\n <Button onClick={this.addAlternateResponse}>\n ADD ALTERNATE\n </Button>\n\n <AlertDialog\n open={dialog.open}\n title={dialog.title}\n text={dialog.text}\n onClose={dialog.onClose}\n onConfirm={dialog.onConfirm}\n />\n </div>\n );\n }\n}\n\nexport default CorrectResponse;\n"],"mappings":"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","ignoreList":[]}