@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.
- package/CHANGELOG.json +652 -0
- package/CHANGELOG.md +2055 -0
- package/LICENSE.md +5 -0
- package/README.md +1 -0
- package/configure/CHANGELOG.json +382 -0
- package/configure/CHANGELOG.md +1846 -0
- package/configure/lib/configure.js +328 -0
- package/configure/lib/configure.js.map +1 -0
- package/configure/lib/correct-response.js +484 -0
- package/configure/lib/correct-response.js.map +1 -0
- package/configure/lib/defaults.js +448 -0
- package/configure/lib/defaults.js.map +1 -0
- package/configure/lib/graphing-config.js +388 -0
- package/configure/lib/graphing-config.js.map +1 -0
- package/configure/lib/index.js +173 -0
- package/configure/lib/index.js.map +1 -0
- package/configure/lib/utils.js +122 -0
- package/configure/lib/utils.js.map +1 -0
- package/configure/package.json +30 -0
- package/controller/CHANGELOG.json +412 -0
- package/controller/CHANGELOG.md +1267 -0
- package/controller/lib/defaults.js +64 -0
- package/controller/lib/defaults.js.map +1 -0
- package/controller/lib/index.js +459 -0
- package/controller/lib/index.js.map +1 -0
- package/controller/lib/utils.js +451 -0
- package/controller/lib/utils.js.map +1 -0
- package/controller/package.json +24 -0
- package/docs/config-schema.json +3164 -0
- package/docs/config-schema.json.md +2293 -0
- package/docs/demo/config.js +8 -0
- package/docs/demo/generate.js +200 -0
- package/docs/demo/index.html +1 -0
- package/docs/demo/session.js +20 -0
- package/docs/pie-schema.json +3495 -0
- package/docs/pie-schema.json.md +1345 -0
- package/lib/index.js +69 -0
- package/lib/index.js.map +1 -0
- package/lib/main.js +161 -0
- package/lib/main.js.map +1 -0
- package/lib/utils.js +24 -0
- package/lib/utils.js.map +1 -0
- package/package.json +21 -87
- package/configure.js +0 -2
- package/controller.js +0 -1
- package/dist/author/configure.d.ts +0 -26
- package/dist/author/configure.js +0 -208
- package/dist/author/correct-response.d.ts +0 -54
- package/dist/author/correct-response.js +0 -303
- package/dist/author/defaults.d.ts +0 -294
- package/dist/author/defaults.js +0 -415
- package/dist/author/graphing-config.d.ts +0 -34
- package/dist/author/graphing-config.js +0 -244
- package/dist/author/index.d.ts +0 -59
- package/dist/author/index.js +0 -96
- package/dist/author/utils.d.ts +0 -43
- package/dist/author/utils.js +0 -260
- package/dist/browser/author/index.js +0 -4480
- package/dist/browser/author/index.js.map +0 -1
- package/dist/browser/container-CTkqz7Oi.js +0 -63877
- package/dist/browser/container-CTkqz7Oi.js.map +0 -1
- package/dist/browser/controller/index.js +0 -353
- package/dist/browser/controller/index.js.map +0 -1
- package/dist/browser/delivery/index.js +0 -683
- package/dist/browser/delivery/index.js.map +0 -1
- package/dist/browser/dist-B7TYAggd.js +0 -551
- package/dist/browser/dist-B7TYAggd.js.map +0 -1
- package/dist/browser/graphing.css +0 -2
- package/dist/controller/defaults.d.ts +0 -59
- package/dist/controller/defaults.js +0 -61
- package/dist/controller/index.d.ts +0 -34
- package/dist/controller/index.js +0 -179
- package/dist/controller/utils.d.ts +0 -37
- package/dist/controller/utils.js +0 -111
- package/dist/delivery/index.d.ts +0 -21
- package/dist/delivery/index.js +0 -43
- package/dist/delivery/main.d.ts +0 -23
- package/dist/delivery/main.js +0 -107
- package/dist/delivery/utils.d.ts +0 -22
- package/dist/graphing.css +0 -2
- package/dist/index.d.ts +0 -1
- package/dist/index.iife.d.ts +0 -8
- package/dist/index.iife.js +0 -414
- package/dist/index.js +0 -2
- package/dist/runtime-support.d.ts +0 -12
- 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":[]}
|