@pie-element/number-line 5.14.10 → 5.14.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,30 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [5.14.13](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line@5.14.12...@pie-element/number-line@5.14.13) (2022-05-30)
7
+
8
+ **Note:** Version bump only for package @pie-element/number-line
9
+
10
+
11
+
12
+
13
+
14
+ ## [5.14.12](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line@5.14.11...@pie-element/number-line@5.14.12) (2022-05-30)
15
+
16
+ **Note:** Version bump only for package @pie-element/number-line
17
+
18
+
19
+
20
+
21
+
22
+ ## [5.14.11](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line@5.14.10...@pie-element/number-line@5.14.11) (2022-05-16)
23
+
24
+ **Note:** Version bump only for package @pie-element/number-line
25
+
26
+
27
+
28
+
29
+
6
30
  ## [5.14.10](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line@5.14.9...@pie-element/number-line@5.14.10) (2022-05-09)
7
31
 
8
32
  **Note:** Version bump only for package @pie-element/number-line
@@ -3,6 +3,30 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.9.12](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-configure@4.9.11...@pie-element/number-line-configure@4.9.12) (2022-05-30)
7
+
8
+ **Note:** Version bump only for package @pie-element/number-line-configure
9
+
10
+
11
+
12
+
13
+
14
+ ## [4.9.11](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-configure@4.9.10...@pie-element/number-line-configure@4.9.11) (2022-05-30)
15
+
16
+ **Note:** Version bump only for package @pie-element/number-line-configure
17
+
18
+
19
+
20
+
21
+
22
+ ## [4.9.10](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-configure@4.9.9...@pie-element/number-line-configure@4.9.10) (2022-05-16)
23
+
24
+ **Note:** Version bump only for package @pie-element/number-line-configure
25
+
26
+
27
+
28
+
29
+
6
30
  ## [4.9.9](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-configure@4.9.8...@pie-element/number-line-configure@4.9.9) (2022-05-09)
7
31
 
8
32
  **Note:** Version bump only for package @pie-element/number-line-configure
@@ -25,12 +25,15 @@ var CardBar = function CardBar(props) {
25
25
  var classes = props.classes,
26
26
  header = props.header,
27
27
  children = props.children,
28
- mini = props.mini;
28
+ mini = props.mini,
29
+ info = props.info;
29
30
  return /*#__PURE__*/_react["default"].createElement("div", {
30
31
  className: classes.cardBar
32
+ }, /*#__PURE__*/_react["default"].createElement("div", {
33
+ className: classes.flexContainer
31
34
  }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
32
35
  variant: mini ? 'subheading' : 'h5'
33
- }, header), children && /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
36
+ }, header), info), children && /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
34
37
  title: children,
35
38
  classes: {
36
39
  tooltip: classes.tooltip
@@ -62,6 +65,10 @@ var styles = function styles(theme) {
62
65
  },
63
66
  tooltip: {
64
67
  fontSize: '12px'
68
+ },
69
+ flexContainer: {
70
+ display: 'flex',
71
+ alignItems: 'center'
65
72
  }
66
73
  };
67
74
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/card-bar.jsx"],"names":["CardBar","props","classes","header","children","mini","cardBar","tooltip","button","propTypes","PropTypes","object","bool","string","node","styles","theme","display","justifyContent","paddingBottom","spacing","unit","paddingTop","margin","padding","fontSize"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAMA,OAAO,GAAG,SAAVA,OAAU,CAAAC,KAAK,EAAI;AACvB,MAAQC,OAAR,GAA4CD,KAA5C,CAAQC,OAAR;AAAA,MAAiBC,MAAjB,GAA4CF,KAA5C,CAAiBE,MAAjB;AAAA,MAAyBC,QAAzB,GAA4CH,KAA5C,CAAyBG,QAAzB;AAAA,MAAmCC,IAAnC,GAA4CJ,KAA5C,CAAmCI,IAAnC;AACA,sBACE;AAAK,IAAA,SAAS,EAAEH,OAAO,CAACI;AAAxB,kBACE,gCAAC,sBAAD;AAAY,IAAA,OAAO,EAAED,IAAI,GAAG,YAAH,GAAkB;AAA3C,KAAkDF,MAAlD,CADF,EAEGC,QAAQ,iBACP,gCAAC,mBAAD;AAAS,IAAA,KAAK,EAAEA,QAAhB;AAA0B,IAAA,OAAO,EAAE;AAAEG,MAAAA,OAAO,EAAEL,OAAO,CAACK;AAAnB;AAAnC,kBACE,gCAAC,sBAAD;AAAY,kBAAW,QAAvB;AAAgC,IAAA,SAAS,EAAEL,OAAO,CAACM;AAAnD,kBACE,gCAAC,uBAAD,OADF,CADF,CAHJ,CADF;AAYD,CAdD;;AAgBAR,OAAO,CAACS,SAAR,GAAoB;AAClBP,EAAAA,OAAO,EAAEQ,sBAAUC,MADD;AAElBN,EAAAA,IAAI,EAAEK,sBAAUE,IAFE;AAGlBT,EAAAA,MAAM,EAAEO,sBAAUG,MAHA;AAIlBT,EAAAA,QAAQ,EAAEM,sBAAUI;AAJF,CAApB;;AAMA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAAAC,KAAK;AAAA,SAAK;AACvBV,IAAAA,OAAO,EAAE;AACPW,MAAAA,OAAO,EAAE,MADF;AAEPC,MAAAA,cAAc,EAAE,eAFT;AAGPC,MAAAA,aAAa,EAAEH,KAAK,CAACI,OAAN,CAAcC,IAAd,GAAqB,CAH7B;AAIPC,MAAAA,UAAU,EAAEN,KAAK,CAACI,OAAN,CAAcC,IAAd,GAAqB;AAJ1B,KADc;AAOvBb,IAAAA,MAAM,EAAE;AACNe,MAAAA,MAAM,EAAE,CADF;AAENC,MAAAA,OAAO,EAAE;AAFH,KAPe;AAWvBjB,IAAAA,OAAO,EAAE;AACPkB,MAAAA,QAAQ,EAAE;AADH;AAXc,GAAL;AAAA,CAApB;;eAee,wBAAWV,MAAX,EAAmBf,OAAnB,C","sourcesContent":["import { withStyles } from '@material-ui/core/styles';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport HelpIcon from '@material-ui/icons/HelpOutline';\nimport IconButton from '@material-ui/core/IconButton';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport Typography from '@material-ui/core/Typography';\n\nconst CardBar = props => {\n const { classes, header, children, mini } = props;\n return (\n <div className={classes.cardBar}>\n <Typography variant={mini ? 'subheading' : 'h5'}>{header}</Typography>\n {children && (\n <Tooltip title={children} classes={{ tooltip: classes.tooltip }}>\n <IconButton aria-label=\"Delete\" className={classes.button}>\n <HelpIcon />\n </IconButton>\n </Tooltip>\n )}\n </div>\n );\n};\n\nCardBar.propTypes = {\n classes: PropTypes.object,\n mini: PropTypes.bool,\n header: PropTypes.string,\n children: PropTypes.node\n};\nconst styles = theme => ({\n cardBar: {\n display: 'flex',\n justifyContent: 'space-between',\n paddingBottom: theme.spacing.unit * 2,\n paddingTop: theme.spacing.unit * 2\n },\n button: {\n margin: 0,\n padding: 0\n },\n tooltip: {\n fontSize: '12px'\n }\n});\nexport default withStyles(styles)(CardBar);\n"],"file":"card-bar.js"}
1
+ {"version":3,"sources":["../src/card-bar.jsx"],"names":["CardBar","props","classes","header","children","mini","info","cardBar","flexContainer","tooltip","button","propTypes","PropTypes","object","bool","string","node","styles","theme","display","justifyContent","paddingBottom","spacing","unit","paddingTop","margin","padding","fontSize","alignItems"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAMA,OAAO,GAAG,SAAVA,OAAU,CAAAC,KAAK,EAAI;AACvB,MAAQC,OAAR,GAAkDD,KAAlD,CAAQC,OAAR;AAAA,MAAiBC,MAAjB,GAAkDF,KAAlD,CAAiBE,MAAjB;AAAA,MAAyBC,QAAzB,GAAkDH,KAAlD,CAAyBG,QAAzB;AAAA,MAAmCC,IAAnC,GAAkDJ,KAAlD,CAAmCI,IAAnC;AAAA,MAAyCC,IAAzC,GAAkDL,KAAlD,CAAyCK,IAAzC;AACA,sBACE;AAAK,IAAA,SAAS,EAAEJ,OAAO,CAACK;AAAxB,kBACE;AAAK,IAAA,SAAS,EAAEL,OAAO,CAACM;AAAxB,kBACE,gCAAC,sBAAD;AAAY,IAAA,OAAO,EAAEH,IAAI,GAAG,YAAH,GAAkB;AAA3C,KAAkDF,MAAlD,CADF,EAEGG,IAFH,CADF,EAKGF,QAAQ,iBACP,gCAAC,mBAAD;AAAS,IAAA,KAAK,EAAEA,QAAhB;AAA0B,IAAA,OAAO,EAAE;AAAEK,MAAAA,OAAO,EAAEP,OAAO,CAACO;AAAnB;AAAnC,kBACE,gCAAC,sBAAD;AAAY,kBAAW,QAAvB;AAAgC,IAAA,SAAS,EAAEP,OAAO,CAACQ;AAAnD,kBACE,gCAAC,uBAAD,OADF,CADF,CANJ,CADF;AAeD,CAjBD;;AAmBAV,OAAO,CAACW,SAAR,GAAoB;AAClBT,EAAAA,OAAO,EAAEU,sBAAUC,MADD;AAElBR,EAAAA,IAAI,EAAEO,sBAAUE,IAFE;AAGlBX,EAAAA,MAAM,EAAES,sBAAUG,MAHA;AAIlBX,EAAAA,QAAQ,EAAEQ,sBAAUI;AAJF,CAApB;;AAMA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAAAC,KAAK;AAAA,SAAK;AACvBX,IAAAA,OAAO,EAAE;AACPY,MAAAA,OAAO,EAAE,MADF;AAEPC,MAAAA,cAAc,EAAE,eAFT;AAGPC,MAAAA,aAAa,EAAEH,KAAK,CAACI,OAAN,CAAcC,IAAd,GAAqB,CAH7B;AAIPC,MAAAA,UAAU,EAAEN,KAAK,CAACI,OAAN,CAAcC,IAAd,GAAqB;AAJ1B,KADc;AAOvBb,IAAAA,MAAM,EAAE;AACNe,MAAAA,MAAM,EAAE,CADF;AAENC,MAAAA,OAAO,EAAE;AAFH,KAPe;AAWvBjB,IAAAA,OAAO,EAAE;AACPkB,MAAAA,QAAQ,EAAE;AADH,KAXc;AAcvBnB,IAAAA,aAAa,EAAE;AACbW,MAAAA,OAAO,EAAE,MADI;AAEbS,MAAAA,UAAU,EAAE;AAFC;AAdQ,GAAL;AAAA,CAApB;;eAmBe,wBAAWX,MAAX,EAAmBjB,OAAnB,C","sourcesContent":["import { withStyles } from '@material-ui/core/styles';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport HelpIcon from '@material-ui/icons/HelpOutline';\nimport IconButton from '@material-ui/core/IconButton';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport Typography from '@material-ui/core/Typography';\n\nconst CardBar = props => {\n const { classes, header, children, mini, info } = props;\n return (\n <div className={classes.cardBar}>\n <div className={classes.flexContainer}>\n <Typography variant={mini ? 'subheading' : 'h5'}>{header}</Typography>\n {info}\n </div>\n {children && (\n <Tooltip title={children} classes={{ tooltip: classes.tooltip }}>\n <IconButton aria-label=\"Delete\" className={classes.button}>\n <HelpIcon />\n </IconButton>\n </Tooltip>\n )}\n </div>\n );\n};\n\nCardBar.propTypes = {\n classes: PropTypes.object,\n mini: PropTypes.bool,\n header: PropTypes.string,\n children: PropTypes.node\n};\nconst styles = theme => ({\n cardBar: {\n display: 'flex',\n justifyContent: 'space-between',\n paddingBottom: theme.spacing.unit * 2,\n paddingTop: theme.spacing.unit * 2\n },\n button: {\n margin: 0,\n padding: 0\n },\n tooltip: {\n fontSize: '12px'\n },\n flexContainer: {\n display: 'flex',\n alignItems: 'center'\n }\n});\nexport default withStyles(styles)(CardBar);\n"],"file":"card-bar.js"}
@@ -53,10 +53,16 @@ var _styles = require("@material-ui/core/styles");
53
53
 
54
54
  var _editableHtml = _interopRequireDefault(require("@pie-lib/editable-html"));
55
55
 
56
+ var _Info = _interopRequireDefault(require("@material-ui/icons/Info"));
57
+
58
+ var _Tooltip = _interopRequireDefault(require("@material-ui/core/Tooltip"));
59
+
56
60
  var _ticks = _interopRequireDefault(require("./ticks"));
57
61
 
58
62
  var _defaults = require("./defaults");
59
63
 
64
+ var _utils = require("./utils");
65
+
60
66
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
61
67
 
62
68
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
@@ -117,6 +123,19 @@ var styles = function styles(theme) {
117
123
  section: {
118
124
  margin: 0,
119
125
  padding: 0
126
+ },
127
+ tooltip: {
128
+ fontSize: '12px',
129
+ whiteSpace: 'pre',
130
+ maxWidth: '500px'
131
+ },
132
+ inlineFlexContainer: {
133
+ display: 'inline-flex'
134
+ },
135
+ errorText: {
136
+ fontSize: '12px',
137
+ color: 'red',
138
+ padding: '5px 0'
120
139
  }
121
140
  };
122
141
  };
@@ -416,16 +435,26 @@ var Main = /*#__PURE__*/function (_React$Component) {
416
435
  model = _this$props12.model,
417
436
  _onChange = _this$props12.onChange,
418
437
  configuration = _this$props12.configuration;
419
- var graph = model.graph,
420
- spellCheckEnabled = model.spellCheckEnabled;
421
-
422
- var _ref4 = configuration || {},
423
- _ref4$prompt = _ref4.prompt,
424
- prompt = _ref4$prompt === void 0 ? {} : _ref4$prompt,
425
- _ref4$spellCheck = _ref4.spellCheck,
426
- spellCheck = _ref4$spellCheck === void 0 ? {} : _ref4$spellCheck;
427
438
 
428
- console.log(spellCheckEnabled, spellCheckEnabled);
439
+ var _ref4 = model || {},
440
+ graph = _ref4.graph,
441
+ spellCheckEnabled = _ref4.spellCheckEnabled,
442
+ errors = _ref4.errors;
443
+
444
+ var _ref5 = configuration || {},
445
+ _ref5$prompt = _ref5.prompt,
446
+ prompt = _ref5$prompt === void 0 ? {} : _ref5$prompt,
447
+ _ref5$spellCheck = _ref5.spellCheck,
448
+ spellCheck = _ref5$spellCheck === void 0 ? {} : _ref5$spellCheck;
449
+
450
+ var _ref6 = errors || {},
451
+ widthError = _ref6.widthError,
452
+ domainError = _ref6.domainError,
453
+ maxError = _ref6.maxError,
454
+ pointsError = _ref6.pointsError,
455
+ correctResponseError = _ref6.correctResponseError;
456
+
457
+ var validationMessage = (0, _utils.generateValidationMessage)();
429
458
  var correctResponse = (0, _cloneDeep["default"])(model.correctResponse || []).map(toGraphFormat);
430
459
  var initialView = (0, _cloneDeep["default"])(graph.initialElements || []).map(toGraphFormat);
431
460
  var toolbarOpts = {};
@@ -457,8 +486,29 @@ var Main = /*#__PURE__*/function (_React$Component) {
457
486
  toolbarOpts: toolbarOpts,
458
487
  spellCheck: spellCheckEnabled
459
488
  })), /*#__PURE__*/_react["default"].createElement(_cardBar["default"], {
460
- header: "Attributes"
461
- }, "Set up the number line by entering the domain and number of tick marks to display. Labels on the number line can be edited or removed by clicking on the label."), /*#__PURE__*/_react["default"].createElement("div", {
489
+ header: "Attributes",
490
+ info: /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
491
+ classes: {
492
+ tooltip: classes.tooltip
493
+ },
494
+ disableFocusListener: true,
495
+ disableTouchListener: true,
496
+ placement: 'right',
497
+ title: validationMessage
498
+ }, /*#__PURE__*/_react["default"].createElement(_Info["default"], {
499
+ fontSize: 'small',
500
+ color: 'primary',
501
+ style: {
502
+ marginLeft: '5px'
503
+ }
504
+ }))
505
+ }, "Set up the number line by entering the domain and number of tick marks to display. Labels on the number line can be edited or removed by clicking on the label."), widthError && /*#__PURE__*/_react["default"].createElement("div", {
506
+ className: classes.errorText
507
+ }, widthError), domainError && /*#__PURE__*/_react["default"].createElement("div", {
508
+ className: classes.errorText
509
+ }, domainError), maxError && /*#__PURE__*/_react["default"].createElement("div", {
510
+ className: classes.errorText
511
+ }, maxError), /*#__PURE__*/_react["default"].createElement("div", {
462
512
  className: classes.row
463
513
  }, /*#__PURE__*/_react["default"].createElement(_configUi.FormSection, {
464
514
  label: 'Size'
@@ -510,7 +560,11 @@ var Main = /*#__PURE__*/function (_React$Component) {
510
560
  onClick: this.setDefaults
511
561
  }, "Reset to default values"), /*#__PURE__*/_react["default"].createElement("br", null), /*#__PURE__*/_react["default"].createElement("br", null), !graph.exhibitOnly && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_cardBar["default"], {
512
562
  header: "Correct Response"
513
- }, "Select answer type and place it on the number line. Intersecting points, line segments and/or rays will appear above the number line.", ' ', /*#__PURE__*/_react["default"].createElement("i", null, "Note: A maximum of 20 points, line segments or rays may be plotted.")), /*#__PURE__*/_react["default"].createElement(_numberLine.NumberLineComponent, {
563
+ }, "Select answer type and place it on the number line. Intersecting points, line segments and/or rays will appear above the number line.", ' ', /*#__PURE__*/_react["default"].createElement("i", null, "Note: A maximum of 20 points, line segments or rays may be plotted.")), pointsError && /*#__PURE__*/_react["default"].createElement("div", {
564
+ className: classes.errorText
565
+ }, pointsError), correctResponseError && /*#__PURE__*/_react["default"].createElement("div", {
566
+ className: classes.errorText
567
+ }, correctResponseError), /*#__PURE__*/_react["default"].createElement(_numberLine.NumberLineComponent, {
514
568
  onMoveElement: this.moveCorrectResponse,
515
569
  onDeleteElements: this.deleteCorrectResponse,
516
570
  onAddElement: this.addCorrectResponse,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main.jsx"],"names":["trimModel","model","feedback","undefined","prompt","graph","title","correctResponse","lineIsSwitched","dataConverter","switchGraphLine","toGraphFormat","toSessionFormat","styles","theme","maxNumberOfPoints","width","checkbox","marginTop","spacing","unit","row","display","flexWrap","paddingRight","hide","opacity","resetDefaults","margin","pointTypeChooser","promptHolder","paddingBottom","marginBottom","paddingTop","section","padding","toPointType","response","rest","pointType","direction","leftPoint","rightPoint","type","toUpperCase","Main","props","o","onChange","height","graphChange","availableTypes","onlyPFAvailable","Object","entries","forEach","value","e","getAdjustedHeight","ticks","tickUtils","snapElements","domain","initialElements","arrows","defaultModel","event","exhibitOnly","index","el","position","update","Set","map","indices","filter","v","some","d","data","push","pop","addInitialView","classes","configuration","spellCheckEnabled","spellCheck","console","log","initialView","toolbarOpts","toolbarEditorPosition","root","settings","label","changeSize","changeTicks","changeArrows","changeGraphTitle","changeMaxNoOfPoints","setDefaults","moveCorrectResponse","deleteCorrectResponse","addCorrectResponse","clearCorrectResponse","undoCorrectResponse","availableTypesChange","moveInitialView","deleteInitialView","onAddElement","clearInitialView","undoInitialView","exhibitChanged","React","Component","PropTypes","object","isRequired","func","name"],"mappings":"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","sourcesContent":["import { InputCheckbox, FeedbackConfig, FormSection } from '@pie-lib/config-ui';\nimport NumberTextField from './number-text-field';\nimport CardBar from './card-bar';\nimport {\n NumberLineComponent,\n dataConverter,\n tickUtils\n} from '@pie-element/number-line';\nimport Size from './size';\nimport PropTypes from 'prop-types';\nimport Button from '@material-ui/core/Button';\nimport Domain from './domain';\nimport Arrows from './arrows';\nimport PointConfig from './point-config';\nimport React from 'react';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { withStyles } from '@material-ui/core/styles';\nimport EditableHtml from '@pie-lib/editable-html';\nimport Ticks from './ticks';\nimport { model as defaultModel } from './defaults';\n\nconst trimModel = model => ({\n ...model,\n feedback: undefined,\n prompt: undefined,\n graph: { ...model.graph, title: undefined },\n correctResponse: undefined\n});\n\nconst {\n lineIsSwitched,\n switchGraphLine,\n toGraphFormat,\n toSessionFormat\n} = dataConverter;\n\nconst styles = theme => ({\n maxNumberOfPoints: {\n width: '150px'\n },\n checkbox: {\n marginTop: theme.spacing.unit * 2\n },\n row: {\n display: 'flex',\n flexWrap: 'wrap',\n '& > *': {\n paddingRight: theme.spacing.unit * 2\n }\n },\n hide: {\n opacity: 0.5\n },\n resetDefaults: {\n margin: '20px 0'\n },\n pointTypeChooser: {\n margin: '20px 0'\n },\n promptHolder: {\n width: '100%',\n paddingBottom: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2\n },\n prompt: {\n paddingTop: theme.spacing.unit * 2,\n width: '100%'\n },\n section: {\n margin: 0,\n padding: 0\n }\n});\n\nexport const toPointType = response => {\n function rest(response) {\n if (response.pointType) {\n if (response.direction) {\n return `${response.pointType[0]}${response.direction[0]}`;\n }\n return response.pointType[0];\n } else {\n return `${response.leftPoint[0]}${response.rightPoint[0]}`;\n }\n }\n return `${response.type[0]}${rest(response)}`.toUpperCase();\n};\n\nexport class Main extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired\n };\n\n constructor(props) {\n super(props);\n const { model: { graph: { availableTypes, maxNumberOfPoints }}} = props;\n const height = this.getAdjustedHeight(availableTypes, maxNumberOfPoints);\n\n this.graphChange({ height });\n }\n\n graphChange = o => {\n const { onChange } = this.props;\n const graph = { ...this.props.model.graph, ...o };\n onChange({ graph });\n };\n\n changeSize = ({ width, height }) => this.graphChange({ width, height });\n\n getAdjustedHeight = (availableTypes, maxNumberOfPoints) => {\n let onlyPFAvailable = true;\n\n Object.entries(availableTypes || {}).forEach(([type, value]) => {\n if (type !== 'PF' && value) {\n onlyPFAvailable = false;\n return;\n }\n });\n\n const height = maxNumberOfPoints && (maxNumberOfPoints === 1 || onlyPFAvailable)\n ? 100 : (50 + (maxNumberOfPoints || 20) * 25);\n\n return height;\n };\n\n changeMaxNoOfPoints = (e, maxNumberOfPoints) => {\n const { model : { graph: { availableTypes }}} = this.props;\n const height = this.getAdjustedHeight(availableTypes, maxNumberOfPoints);\n\n this.graphChange({ maxNumberOfPoints, height });\n };\n\n changeGraphTitle = title => this.graphChange({ title });\n\n changeTicks = ticks => {\n const { model, onChange } = this.props;\n const correctResponse = tickUtils.snapElements(\n model.graph.domain,\n ticks,\n model.correctResponse\n );\n const initialElements = tickUtils.snapElements(\n model.graph.domain,\n ticks,\n model.graph.initialElements\n );\n\n const graph = { ...this.props.model.graph, ticks, initialElements };\n onChange({ graph, correctResponse });\n };\n\n changeArrows = arrows => this.graphChange({ arrows });\n\n setDefaults = () => {\n const { graph: { availableTypes, maxNumberOfPoints }} = defaultModel;\n const height = this.getAdjustedHeight(availableTypes, maxNumberOfPoints);\n const graph = { ...cloneDeep(defaultModel.graph), height };\n\n this.props.onChange({ graph });\n };\n\n exhibitChanged = (event, value) => {\n const graph = { ...this.props.model.graph, exhibitOnly: value };\n this.props.onChange({ graph });\n };\n\n moveCorrectResponse = (index, el, position) => {\n const { onChange, model } = this.props;\n el.position = position;\n const update = toSessionFormat(\n el.type === 'line' && lineIsSwitched(el) ? switchGraphLine(el) : el\n );\n const correctResponse = [...model.correctResponse];\n correctResponse[index] = update;\n onChange({ correctResponse });\n };\n\n moveInitialView = (index, el, position) => {\n const { model, onChange } = this.props;\n el.position = position;\n const update = toSessionFormat(\n el.type === 'line' && lineIsSwitched(el) ? switchGraphLine(el) : el\n );\n const initialElements = [...this.props.model.graph.initialElements];\n initialElements[index] = update;\n const graph = { ...model.graph, initialElements };\n onChange({ graph });\n };\n\n availableTypesChange = availableTypes => {\n const { model, onChange } = this.props;\n const { correctResponse, graph: { maxNumberOfPoints }} = model;\n\n new Set(correctResponse.map(toPointType)).forEach(pointType => {\n availableTypes[pointType] = true;\n });\n\n const height = this.getAdjustedHeight(availableTypes, maxNumberOfPoints);\n const graph = { ...model.graph, availableTypes, height };\n\n onChange({ graph });\n };\n\n deleteCorrectResponse = indices => {\n const { model, onChange } = this.props;\n const correctResponse = model.correctResponse.filter((v, index) => {\n return !indices.some(d => d === index);\n });\n onChange({ correctResponse });\n };\n\n deleteInitialView = indices => {\n const { model, onChange } = this.props;\n const initialElements = model.graph.initialElements.filter((v, index) => {\n return !indices.some(d => d === index);\n });\n const graph = { ...model.graph, initialElements };\n onChange({ graph });\n };\n\n addCorrectResponse = data => {\n const { model, onChange } = this.props;\n const correctResponse = [...model.correctResponse];\n correctResponse.push(toSessionFormat(data));\n onChange({ correctResponse });\n };\n\n addInitialView = data => {\n const { onChange, model } = this.props;\n const graph = { ...model.graph };\n graph.initialElements = graph.initialElements || [];\n graph.initialElements.push(toSessionFormat(data));\n onChange({ graph });\n };\n\n clearCorrectResponse = () => {\n const { onChange } = this.props;\n const correctResponse = [];\n onChange({ correctResponse });\n };\n\n clearInitialView = () => {\n const { model, onChange } = this.props;\n const initialElements = [];\n const graph = { ...model.graph, initialElements };\n onChange({ graph });\n };\n\n undoCorrectResponse = () => {\n const { model, onChange } = this.props;\n const correctResponse = [...model.correctResponse];\n correctResponse.pop();\n onChange({ correctResponse });\n };\n\n undoInitialView = () => {\n const { onChange, model } = this.props;\n const graph = { ...model.graph };\n graph.initialElements = graph.initialElements || [];\n graph.initialElements.pop();\n onChange({ graph });\n };\n\n onAddElement = this.addInitialView;\n\n render() {\n const { classes, model, onChange, configuration } = this.props;\n\n const { graph, spellCheckEnabled } = model;\n const { prompt = {}, spellCheck = {} } = configuration || {};\n\n\n console.log(spellCheckEnabled, spellCheckEnabled)\n const correctResponse = cloneDeep(model.correctResponse || []).map(\n toGraphFormat\n );\n\n const initialView = cloneDeep(graph.initialElements || []).map(\n toGraphFormat\n );\n const toolbarOpts = {};\n\n switch (model.toolbarEditorPosition) {\n case 'top':\n toolbarOpts.position = 'top';\n break;\n default:\n toolbarOpts.position = 'bottom';\n break;\n }\n\n return (\n <div className={classes.root}>\n\n {prompt.settings && (\n <FormSection label={prompt.label}>\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={prompt => onChange({ prompt })}\n nonEmpty={false}\n disableUnderline\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n />\n </FormSection>\n )}\n\n <CardBar header=\"Attributes\">\n Set up the number line by entering the domain and number of tick marks\n to display. Labels on the number line can be edited or removed by\n clicking on the label.\n </CardBar>\n\n <div className={classes.row}>\n <FormSection label={'Size'}>\n <Size size={graph} onChange={this.changeSize} />\n </FormSection>\n\n <FormSection label={'Domain'}>\n <Domain\n domain={graph.domain}\n onChange={domain => this.graphChange({ domain })}\n />\n </FormSection>\n </div>\n <div className={classes.row}>\n <FormSection label={'Ticks'}>\n <Ticks\n ticks={graph.ticks}\n onChange={this.changeTicks}\n domain={graph.domain}\n />\n </FormSection>\n <FormSection label={'Arrows'}>\n <Arrows arrows={graph.arrows} onChange={this.changeArrows} />\n </FormSection>\n </div>\n <FormSection label={'Title'}>\n <EditableHtml\n markup={graph.title || ''}\n onChange={this.changeGraphTitle}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n />\n </FormSection>\n <FormSection label={'Limits'}>\n <NumberTextField\n className={classes.maxNumberOfPoints}\n label=\"Max No of Elements\"\n min={1}\n max={20}\n value={graph.maxNumberOfPoints}\n onChange={this.changeMaxNoOfPoints}\n />\n </FormSection>\n <Button\n variant=\"outlined\"\n mini\n color=\"primary\"\n onClick={this.setDefaults}\n >\n Reset to default values\n </Button>\n <br />\n <br />\n\n {!graph.exhibitOnly && (\n <div>\n <CardBar header=\"Correct Response\">\n Select answer type and place it on the number line. Intersecting\n points, line segments and/or rays will appear above the number\n line.{' '}\n <i>\n Note: A maximum of 20 points, line segments or rays may be\n plotted.\n </i>\n </CardBar>\n\n <NumberLineComponent\n onMoveElement={this.moveCorrectResponse}\n onDeleteElements={this.deleteCorrectResponse}\n onAddElement={this.addCorrectResponse}\n onClearElements={this.clearCorrectResponse}\n onUndoElement={this.undoCorrectResponse}\n answer={correctResponse}\n //strip feedback for this model\n model={trimModel(model)}\n />\n <CardBar header=\"Available Types\" mini>\n Click on the input options to be displayed to the students. All\n inputs will display by default.\n </CardBar>\n <div className={classes.pointTypeChooser}>\n <PointConfig\n onSelectionChange={this.availableTypesChange}\n selection={graph.availableTypes}\n />\n </div>\n </div>\n )}\n <CardBar header=\"Initial view/Make Exhibit\">\n Use this number line to set a starting point, line segment or ray.\n This is optional. <br />\n This number line may also be used to make an exhibit number line,\n which can not be manipulated by a student.\n </CardBar>\n <NumberLineComponent\n onMoveElement={this.moveInitialView}\n onDeleteElements={this.deleteInitialView}\n onAddElement={this.onAddElement}\n onClearElements={this.clearInitialView}\n onUndoElement={this.undoInitialView}\n answer={initialView}\n model={trimModel(model)}\n />\n <InputCheckbox\n label=\"Make exhibit\"\n className={classes.checkbox}\n checked={graph.exhibitOnly}\n onChange={this.exhibitChanged}\n value={'exhibitOnly'}\n />\n\n {!graph.exhibitOnly && (\n <React.Fragment>\n <br />\n <FeedbackConfig\n feedback={model.feedback}\n onChange={feedback => onChange({ feedback })}\n toolbarOpts={toolbarOpts}\n />\n </React.Fragment>\n )}\n </div>\n );\n }\n}\n\nexport default withStyles(styles, { name: 'Main' })(Main);\n"],"file":"main.js"}
1
+ {"version":3,"sources":["../src/main.jsx"],"names":["trimModel","model","feedback","undefined","prompt","graph","title","correctResponse","lineIsSwitched","dataConverter","switchGraphLine","toGraphFormat","toSessionFormat","styles","theme","maxNumberOfPoints","width","checkbox","marginTop","spacing","unit","row","display","flexWrap","paddingRight","hide","opacity","resetDefaults","margin","pointTypeChooser","promptHolder","paddingBottom","marginBottom","paddingTop","section","padding","tooltip","fontSize","whiteSpace","maxWidth","inlineFlexContainer","errorText","color","toPointType","response","rest","pointType","direction","leftPoint","rightPoint","type","toUpperCase","Main","props","o","onChange","height","graphChange","availableTypes","onlyPFAvailable","Object","entries","forEach","value","e","getAdjustedHeight","ticks","tickUtils","snapElements","domain","initialElements","arrows","defaultModel","event","exhibitOnly","index","el","position","update","Set","map","indices","filter","v","some","d","data","push","pop","addInitialView","classes","configuration","spellCheckEnabled","errors","spellCheck","widthError","domainError","maxError","pointsError","correctResponseError","validationMessage","initialView","toolbarOpts","toolbarEditorPosition","root","settings","label","marginLeft","changeSize","changeTicks","changeArrows","changeGraphTitle","changeMaxNoOfPoints","setDefaults","moveCorrectResponse","deleteCorrectResponse","addCorrectResponse","clearCorrectResponse","undoCorrectResponse","availableTypesChange","moveInitialView","deleteInitialView","onAddElement","clearInitialView","undoInitialView","exhibitChanged","React","Component","PropTypes","object","isRequired","func","name"],"mappings":"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","sourcesContent":["import { InputCheckbox, FeedbackConfig, FormSection } from '@pie-lib/config-ui';\nimport NumberTextField from './number-text-field';\nimport CardBar from './card-bar';\nimport {\n NumberLineComponent,\n dataConverter,\n tickUtils\n} from '@pie-element/number-line';\nimport Size from './size';\nimport PropTypes from 'prop-types';\nimport Button from '@material-ui/core/Button';\nimport Domain from './domain';\nimport Arrows from './arrows';\nimport PointConfig from './point-config';\nimport React from 'react';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { withStyles } from '@material-ui/core/styles';\nimport EditableHtml from '@pie-lib/editable-html';\nimport Info from '@material-ui/icons/Info';\nimport Tooltip from '@material-ui/core/Tooltip';\n\nimport Ticks from './ticks';\nimport { model as defaultModel } from './defaults';\nimport { generateValidationMessage } from './utils';\n\nconst trimModel = model => ({\n ...model,\n feedback: undefined,\n prompt: undefined,\n graph: { ...model.graph, title: undefined },\n correctResponse: undefined\n});\n\nconst {\n lineIsSwitched,\n switchGraphLine,\n toGraphFormat,\n toSessionFormat\n} = dataConverter;\n\nconst styles = theme => ({\n maxNumberOfPoints: {\n width: '150px'\n },\n checkbox: {\n marginTop: theme.spacing.unit * 2\n },\n row: {\n display: 'flex',\n flexWrap: 'wrap',\n '& > *': {\n paddingRight: theme.spacing.unit * 2\n }\n },\n hide: {\n opacity: 0.5\n },\n resetDefaults: {\n margin: '20px 0'\n },\n pointTypeChooser: {\n margin: '20px 0'\n },\n promptHolder: {\n width: '100%',\n paddingBottom: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2\n },\n prompt: {\n paddingTop: theme.spacing.unit * 2,\n width: '100%'\n },\n section: {\n margin: 0,\n padding: 0\n },\n tooltip: {\n fontSize: '12px',\n whiteSpace: 'pre',\n maxWidth: '500px'\n },\n inlineFlexContainer: {\n display: 'inline-flex',\n },\n errorText: {\n fontSize: '12px',\n color: 'red',\n padding: '5px 0'\n }\n});\n\nexport const toPointType = response => {\n function rest(response) {\n if (response.pointType) {\n if (response.direction) {\n return `${response.pointType[0]}${response.direction[0]}`;\n }\n return response.pointType[0];\n } else {\n return `${response.leftPoint[0]}${response.rightPoint[0]}`;\n }\n }\n return `${response.type[0]}${rest(response)}`.toUpperCase();\n};\n\nexport class Main extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired\n };\n\n constructor(props) {\n super(props);\n const { model: { graph: { availableTypes, maxNumberOfPoints }}} = props;\n const height = this.getAdjustedHeight(availableTypes, maxNumberOfPoints);\n\n this.graphChange({ height });\n }\n\n graphChange = o => {\n const { onChange } = this.props;\n const graph = { ...this.props.model.graph, ...o };\n onChange({ graph });\n };\n\n changeSize = ({ width, height }) => this.graphChange({ width, height });\n\n getAdjustedHeight = (availableTypes, maxNumberOfPoints) => {\n let onlyPFAvailable = true;\n\n Object.entries(availableTypes || {}).forEach(([type, value]) => {\n if (type !== 'PF' && value) {\n onlyPFAvailable = false;\n return;\n }\n });\n\n const height = maxNumberOfPoints && (maxNumberOfPoints === 1 || onlyPFAvailable)\n ? 100 : (50 + (maxNumberOfPoints || 20) * 25);\n\n return height;\n };\n\n changeMaxNoOfPoints = (e, maxNumberOfPoints) => {\n const { model : { graph: { availableTypes }}} = this.props;\n const height = this.getAdjustedHeight(availableTypes, maxNumberOfPoints);\n\n this.graphChange({ maxNumberOfPoints, height });\n };\n\n changeGraphTitle = title => this.graphChange({ title });\n\n changeTicks = ticks => {\n const { model, onChange } = this.props;\n const correctResponse = tickUtils.snapElements(\n model.graph.domain,\n ticks,\n model.correctResponse\n );\n const initialElements = tickUtils.snapElements(\n model.graph.domain,\n ticks,\n model.graph.initialElements\n );\n\n const graph = { ...this.props.model.graph, ticks, initialElements };\n onChange({ graph, correctResponse });\n };\n\n changeArrows = arrows => this.graphChange({ arrows });\n\n setDefaults = () => {\n const { graph: { availableTypes, maxNumberOfPoints }} = defaultModel;\n const height = this.getAdjustedHeight(availableTypes, maxNumberOfPoints);\n const graph = { ...cloneDeep(defaultModel.graph), height };\n\n this.props.onChange({ graph });\n };\n\n exhibitChanged = (event, value) => {\n const graph = { ...this.props.model.graph, exhibitOnly: value };\n this.props.onChange({ graph });\n };\n\n moveCorrectResponse = (index, el, position) => {\n const { onChange, model } = this.props;\n el.position = position;\n const update = toSessionFormat(\n el.type === 'line' && lineIsSwitched(el) ? switchGraphLine(el) : el\n );\n const correctResponse = [...model.correctResponse];\n correctResponse[index] = update;\n onChange({ correctResponse });\n };\n\n moveInitialView = (index, el, position) => {\n const { model, onChange } = this.props;\n el.position = position;\n const update = toSessionFormat(\n el.type === 'line' && lineIsSwitched(el) ? switchGraphLine(el) : el\n );\n const initialElements = [...this.props.model.graph.initialElements];\n initialElements[index] = update;\n const graph = { ...model.graph, initialElements };\n onChange({ graph });\n };\n\n availableTypesChange = availableTypes => {\n const { model, onChange } = this.props;\n const { correctResponse, graph: { maxNumberOfPoints }} = model;\n\n new Set(correctResponse.map(toPointType)).forEach(pointType => {\n availableTypes[pointType] = true;\n });\n\n const height = this.getAdjustedHeight(availableTypes, maxNumberOfPoints);\n const graph = { ...model.graph, availableTypes, height };\n\n onChange({ graph });\n };\n\n deleteCorrectResponse = indices => {\n const { model, onChange } = this.props;\n const correctResponse = model.correctResponse.filter((v, index) => {\n return !indices.some(d => d === index);\n });\n onChange({ correctResponse });\n };\n\n deleteInitialView = indices => {\n const { model, onChange } = this.props;\n const initialElements = model.graph.initialElements.filter((v, index) => {\n return !indices.some(d => d === index);\n });\n const graph = { ...model.graph, initialElements };\n onChange({ graph });\n };\n\n addCorrectResponse = data => {\n const { model, onChange } = this.props;\n const correctResponse = [...model.correctResponse];\n correctResponse.push(toSessionFormat(data));\n onChange({ correctResponse });\n };\n\n addInitialView = data => {\n const { onChange, model } = this.props;\n const graph = { ...model.graph };\n graph.initialElements = graph.initialElements || [];\n graph.initialElements.push(toSessionFormat(data));\n onChange({ graph });\n };\n\n clearCorrectResponse = () => {\n const { onChange } = this.props;\n const correctResponse = [];\n onChange({ correctResponse });\n };\n\n clearInitialView = () => {\n const { model, onChange } = this.props;\n const initialElements = [];\n const graph = { ...model.graph, initialElements };\n onChange({ graph });\n };\n\n undoCorrectResponse = () => {\n const { model, onChange } = this.props;\n const correctResponse = [...model.correctResponse];\n correctResponse.pop();\n onChange({ correctResponse });\n };\n\n undoInitialView = () => {\n const { onChange, model } = this.props;\n const graph = { ...model.graph };\n graph.initialElements = graph.initialElements || [];\n graph.initialElements.pop();\n onChange({ graph });\n };\n\n onAddElement = this.addInitialView;\n\n render() {\n const { classes, model, onChange, configuration } = this.props;\n\n const { graph, spellCheckEnabled, errors } = model || {};\n const { prompt = {}, spellCheck = {} } = configuration || {};\n const { widthError, domainError, maxError, pointsError, correctResponseError } = errors || {};\n const validationMessage = generateValidationMessage();\n\n const correctResponse = cloneDeep(model.correctResponse || []).map(\n toGraphFormat\n );\n\n const initialView = cloneDeep(graph.initialElements || []).map(\n toGraphFormat\n );\n const toolbarOpts = {};\n\n switch (model.toolbarEditorPosition) {\n case 'top':\n toolbarOpts.position = 'top';\n break;\n default:\n toolbarOpts.position = 'bottom';\n break;\n }\n\n return (\n <div className={classes.root}>\n\n {prompt.settings && (\n <FormSection label={prompt.label}>\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={prompt => onChange({ prompt })}\n nonEmpty={false}\n disableUnderline\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n />\n </FormSection>\n )}\n <CardBar\n header=\"Attributes\"\n info={<Tooltip\n classes={{tooltip: classes.tooltip}}\n disableFocusListener\n disableTouchListener\n placement={'right'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'} style={{ marginLeft: '5px' }}/>\n </Tooltip>}\n >\n Set up the number line by entering the domain and number of tick marks\n to display. Labels on the number line can be edited or removed by\n clicking on the label.\n </CardBar>\n\n {widthError && <div className={classes.errorText}>{widthError}</div>}\n {domainError && <div className={classes.errorText}>{domainError}</div>}\n {maxError && <div className={classes.errorText}>{maxError}</div>}\n\n <div className={classes.row}>\n <FormSection label={'Size'}>\n <Size size={graph} onChange={this.changeSize} />\n </FormSection>\n\n <FormSection label={'Domain'}>\n <Domain\n domain={graph.domain}\n onChange={domain => this.graphChange({ domain })}\n />\n </FormSection>\n </div>\n <div className={classes.row}>\n <FormSection label={'Ticks'}>\n <Ticks\n ticks={graph.ticks}\n onChange={this.changeTicks}\n domain={graph.domain}\n />\n </FormSection>\n <FormSection label={'Arrows'}>\n <Arrows arrows={graph.arrows} onChange={this.changeArrows} />\n </FormSection>\n </div>\n <FormSection label={'Title'}>\n <EditableHtml\n markup={graph.title || ''}\n onChange={this.changeGraphTitle}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n />\n </FormSection>\n <FormSection label={'Limits'}>\n <NumberTextField\n className={classes.maxNumberOfPoints}\n label=\"Max No of Elements\"\n min={1}\n max={20}\n value={graph.maxNumberOfPoints}\n onChange={this.changeMaxNoOfPoints}\n />\n </FormSection>\n <Button\n variant=\"outlined\"\n mini\n color=\"primary\"\n onClick={this.setDefaults}\n >\n Reset to default values\n </Button>\n <br />\n <br />\n\n {!graph.exhibitOnly && (\n <div>\n <CardBar header=\"Correct Response\">\n Select answer type and place it on the number line. Intersecting\n points, line segments and/or rays will appear above the number\n line.{' '}\n <i>\n Note: A maximum of 20 points, line segments or rays may be\n plotted.\n </i>\n </CardBar>\n\n {pointsError && <div className={classes.errorText}>{pointsError}</div>}\n {correctResponseError && <div className={classes.errorText}>{correctResponseError}</div>}\n\n <NumberLineComponent\n onMoveElement={this.moveCorrectResponse}\n onDeleteElements={this.deleteCorrectResponse}\n onAddElement={this.addCorrectResponse}\n onClearElements={this.clearCorrectResponse}\n onUndoElement={this.undoCorrectResponse}\n answer={correctResponse}\n //strip feedback for this model\n model={trimModel(model)}\n />\n <CardBar header=\"Available Types\" mini>\n Click on the input options to be displayed to the students. All\n inputs will display by default.\n </CardBar>\n <div className={classes.pointTypeChooser}>\n <PointConfig\n onSelectionChange={this.availableTypesChange}\n selection={graph.availableTypes}\n />\n </div>\n </div>\n )}\n <CardBar header=\"Initial view/Make Exhibit\">\n Use this number line to set a starting point, line segment or ray.\n This is optional. <br />\n This number line may also be used to make an exhibit number line,\n which can not be manipulated by a student.\n </CardBar>\n <NumberLineComponent\n onMoveElement={this.moveInitialView}\n onDeleteElements={this.deleteInitialView}\n onAddElement={this.onAddElement}\n onClearElements={this.clearInitialView}\n onUndoElement={this.undoInitialView}\n answer={initialView}\n model={trimModel(model)}\n />\n <InputCheckbox\n label=\"Make exhibit\"\n className={classes.checkbox}\n checked={graph.exhibitOnly}\n onChange={this.exhibitChanged}\n value={'exhibitOnly'}\n />\n\n {!graph.exhibitOnly && (\n <React.Fragment>\n <br />\n <FeedbackConfig\n feedback={model.feedback}\n onChange={feedback => onChange({ feedback })}\n toolbarOpts={toolbarOpts}\n />\n </React.Fragment>\n )}\n </div>\n );\n }\n}\n\nexport default withStyles(styles, { name: 'Main' })(Main);\n"],"file":"main.js"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.generateValidationMessage = void 0;
7
+
8
+ var generateValidationMessage = function generateValidationMessage() {
9
+ var baselineValidationMessage = '\nWidth should be a value between 200 and 800.' + '\nMin and max must both be in the range [-100000, 10000].' + '\nMax must be greater than min.' + '\nMax number of elements should be between 1 and 20.' + '\nThe correct answer should include at least one number line object.';
10
+ return 'Validation requirements:' + baselineValidationMessage;
11
+ };
12
+
13
+ exports.generateValidationMessage = generateValidationMessage;
14
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils.js"],"names":["generateValidationMessage","baselineValidationMessage"],"mappings":";;;;;;;AAAO,IAAMA,yBAAyB,GAAG,SAA5BA,yBAA4B,GAAM;AAC7C,MAAMC,yBAAyB,GAAG,mDAChC,2DADgC,GAEhC,iCAFgC,GAGhC,sDAHgC,GAIhC,sEAJF;AAMA,SAAO,6BAA6BA,yBAApC;AACD,CARM","sourcesContent":["export const generateValidationMessage = () => {\n const baselineValidationMessage = '\\nWidth should be a value between 200 and 800.' +\n '\\nMin and max must both be in the range [-100000, 10000].' +\n '\\nMax must be greater than min.' +\n '\\nMax number of elements should be between 1 and 20.' +\n '\\nThe correct answer should include at least one number line object.';\n\n return 'Validation requirements:' + baselineValidationMessage;\n};\n"],"file":"utils.js"}
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@pie-element/number-line-configure",
3
3
  "private": true,
4
- "version": "4.9.9",
4
+ "version": "4.9.12",
5
5
  "main": "lib/index.js",
6
6
  "module": "src/index.js",
7
7
  "dependencies": {
8
8
  "@material-ui/core": "^3.9.2",
9
9
  "@pie-framework/pie-configure-events": "^1.2.0",
10
- "@pie-lib/config-ui": "^10.12.2",
11
- "@pie-lib/editable-html": "^7.22.2",
10
+ "@pie-lib/config-ui": "^10.13.2",
11
+ "@pie-lib/editable-html": "^7.22.5",
12
12
  "react": "^16.8.1",
13
13
  "react-dom": "^16.8.1"
14
14
  }
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.3.25](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-controller@4.3.24...@pie-element/number-line-controller@4.3.25) (2022-05-16)
7
+
8
+ **Note:** Version bump only for package @pie-element/number-line-controller
9
+
10
+
11
+
12
+
13
+
6
14
  ## [4.3.24](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-controller@4.3.23...@pie-element/number-line-controller@4.3.24) (2022-02-04)
7
15
 
8
16
  **Note:** Version bump only for package @pie-element/number-line-controller
@@ -14,6 +14,7 @@ exports.getScore = getScore;
14
14
  exports.model = model;
15
15
  exports.normalize = normalize;
16
16
  exports.outcome = outcome;
17
+ exports.validate = void 0;
17
18
 
18
19
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
19
20
 
@@ -388,4 +389,49 @@ var createCorrectResponseSession = function createCorrectResponseSession(questio
388
389
  };
389
390
 
390
391
  exports.createCorrectResponseSession = createCorrectResponseSession;
392
+
393
+ var validate = function validate() {
394
+ var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
395
+ var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
396
+
397
+ // TODO: add configurable validation props after authoring is updated
398
+ var _ref2 = model || {},
399
+ graph = _ref2.graph,
400
+ correctResponse = _ref2.correctResponse;
401
+
402
+ var _ref3 = graph || {},
403
+ width = _ref3.width,
404
+ domain = _ref3.domain,
405
+ maxNumberOfPoints = _ref3.maxNumberOfPoints;
406
+
407
+ var _ref4 = domain || {},
408
+ min = _ref4.min,
409
+ max = _ref4.max;
410
+
411
+ var errors = {};
412
+
413
+ if (width < 200 || width > 800) {
414
+ errors.widthError = 'Width should be a value between 200 and 800.';
415
+ }
416
+
417
+ if (min < -100000 || min > 10000 || max < -100000 || max > 10000) {
418
+ errors.domainError = 'Min and max must both be in the range [-100000, 10000].';
419
+ }
420
+
421
+ if (min >= max) {
422
+ errors.maxError = 'Max must be greater than min.';
423
+ }
424
+
425
+ if (maxNumberOfPoints < 1 || maxNumberOfPoints > 20) {
426
+ errors.pointsError = 'Max number of elements should be between 1 and 20.';
427
+ }
428
+
429
+ if (correctResponse && correctResponse.length === 0) {
430
+ errors.correctResponseError = 'The correct answer should include at least one number line object.';
431
+ }
432
+
433
+ return errors;
434
+ };
435
+
436
+ exports.validate = validate;
391
437
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["score","number","scaled","getPartialScore","corrected","ps","correct","rule","find","r","numberOfCorrect","length","scorePercentage","accumulateAnswer","correctResponse","total","answer","isCorrectResponse","some","cr","matches","outcome","model","session","env","Promise","resolve","empty","partialScoringEnabled","partialScoring","enabled","numCorrect","reduce","numIncorrect","getScore","question","getCorrected","correctness","getCorrectness","allowPartialScoring","filter","o","canDoPartialScoring","CLOSE_TO_PRECISION","closeTo","a","b","precision","expectedDiff","Math","pow","receivedDiff","abs","close","v","ov","incorrect","notInAnswer","noCorrectResponse","acc","index","match","push","splice","indexOf","normalize","feedback","defaults","createDefaultModel","out","graph","colorContrast","updateTicks","labelStep","ticks","minor","major","fraction","step","math","evaluate","reject","Error","normalizedQuestion","evaluateMode","mode","exhibitOnly","disabled","fb","undefined","then","feedbackMessage","prompt","type","message","accessibility","createCorrectResponseSession","role","id"],"mappings":"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","sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport find from 'lodash/find';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\nimport isEqualWith from 'lodash/isEqualWith';\nimport merge from 'lodash/merge';\nimport omitBy from 'lodash/omitBy';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { partialScoring } from '@pie-lib/controller-utils';\nimport * as math from 'mathjs';\n\nimport defaults from './defaults';\n\nconst score = number => {\n return {\n score: {\n scaled: number\n }\n };\n};\n\nconst getPartialScore = (corrected, ps) => {\n const { correct } = corrected;\n const rule = ps.find(r => r.numberOfCorrect === correct.length);\n\n if (rule) {\n return 1.0 * (rule.scorePercentage / 100);\n } else {\n return 0;\n }\n};\n\nconst accumulateAnswer = correctResponse => (total, answer) => {\n const isCorrectResponse = correctResponse.some(cr => matches(cr)(answer));\n return total + (isCorrectResponse ? 1 : 0);\n};\n\n/**\n */\nexport function outcome(model, session, env) {\n return new Promise(resolve => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n } else {\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const numCorrect = (session.answer || []).reduce(\n accumulateAnswer(model.correctResponse),\n 0\n );\n\n let total = model.correctResponse.length;\n let numIncorrect = 0;\n\n if((session.answer || []).length > total) {\n numIncorrect = (session.answer || []).length - total;\n }\n\n if (total === 0) {\n total = 1;\n }\n\n let score = numCorrect < 0 ? 0 : (numCorrect - numIncorrect) / total;\n\n if(score < 0) {\n score = 0;\n }\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0 });\n }\n });\n}\n\nexport function getScore(question, session) {\n return new Promise(resolve => {\n if (!session || isEmpty(session)) {\n resolve({ score: { scaled: 0 } })\n } else {\n session.answer = session.answer || [];\n\n const corrected = getCorrected(\n session.answer,\n cloneDeep(question.correctResponse)\n );\n\n const correctness = getCorrectness(corrected);\n\n if (correctness === 'correct') {\n resolve(score(1.0));\n } else if (correctness === 'incorrect') {\n resolve(score(0.0));\n } else if (correctness === 'partial') {\n const { allowPartialScoring, partialScoring } = question;\n const ps = (partialScoring || []).filter(o => !isEmpty(o));\n const canDoPartialScoring = allowPartialScoring && ps.length > 0;\n if (canDoPartialScoring) {\n resolve(score(getPartialScore(corrected, ps)));\n } else {\n resolve(score(0.0));\n }\n } else {\n resolve({ score: { scaled: -1 } });\n }\n }\n });\n}\n\nexport const CLOSE_TO_PRECISION = 3;\n\nexport const closeTo = (a, b, precision) => {\n precision = precision || 5;\n const expectedDiff = Math.pow(10, -precision) / 2;\n const receivedDiff = Math.abs(a - b);\n const close = receivedDiff <= expectedDiff;\n return close;\n};\n\nconst matches = a => v => {\n return isEqualWith(a, v, (v, ov) => {\n if (typeof v === 'number' && typeof ov === 'number') {\n return closeTo(v, ov, CLOSE_TO_PRECISION);\n }\n });\n};\n\nexport const getCorrected = (answer, correctResponse) => {\n if (isEmpty(correctResponse) && answer.length > 0) {\n return {\n correct: [],\n incorrect: [],\n notInAnswer: [],\n noCorrectResponse: true\n };\n }\n\n return answer.reduce(\n (acc, a, index) => {\n const { correct, incorrect, notInAnswer } = acc;\n\n const match = find(notInAnswer, matches(a));\n if (match) {\n correct.push(index);\n notInAnswer.splice(notInAnswer.indexOf(match), 1);\n } else {\n incorrect.push(index);\n }\n\n return {\n correct: correct,\n incorrect: incorrect,\n notInAnswer: notInAnswer\n };\n },\n {\n correct: [],\n incorrect: [],\n notInAnswer: correctResponse\n }\n );\n};\n\nexport const getCorrectness = corrected => {\n const { incorrect, correct, notInAnswer, noCorrectResponse } = corrected;\n\n if (noCorrectResponse) {\n return 'unknown';\n }\n\n if (incorrect.length === 0 && correct.length === 0) {\n return 'unanswered';\n }\n\n if (incorrect.length === 0 && notInAnswer.length === 0) {\n return 'correct';\n }\n\n if (incorrect.length > 0 || notInAnswer.length > 0) {\n if (correct.length > 0) {\n return 'partial';\n } else {\n return 'incorrect';\n }\n }\n\n return 'unknown';\n};\n\n/**\n * A sample of a normalize function see:\n * https://github.com/pie-framework/pie-elements/issues/21\n */\nexport function normalize(question) {\n return new Promise(resolve => {\n const feedback = merge(defaults.feedback, question.feedback);\n\n if (isEqual(feedback, question.feedback)) {\n return resolve({ ...question });\n } else {\n resolve({ ...question, feedback });\n }\n });\n}\n\nexport function createDefaultModel(model = {}) {\n return new Promise(resolve => {\n const out = {\n ...model,\n graph: {\n ...defaults.graph,\n ...model.graph,\n },\n colorContrast: 'black_on_white'\n };\n\n resolve(omitBy(out, v => !v));\n });\n}\n\n// this function is duplicated in configure; at some point, use the same shared function\nconst updateTicks = model => {\n const { graph: { labelStep, ticks = {}} = {}} = model;\n const { minor, major } = ticks;\n\n if (labelStep && typeof labelStep === 'string' && labelStep.match(/^[1-9][0-9]*\\/[1-9][0-9]*$/g)) {\n model.graph.fraction = true;\n\n // update the ticks frequency and label value to match the label step if needed\n const step = math.evaluate(labelStep);\n\n if (step !== major) {\n ticks.major = step;\n ticks.minor = step / (major / minor);\n }\n }\n\n return model;\n};\n\nexport function model(question, session, env) {\n if (!question) {\n return Promise.reject(new Error('question is null'));\n }\n\n return new Promise(async (resolve, reject) => {\n const normalizedQuestion = await normalize(question);\n const { graph } = updateTicks(normalizedQuestion);\n\n if (graph) {\n const evaluateMode = env.mode === 'evaluate';\n\n const correctResponse = cloneDeep(normalizedQuestion.correctResponse);\n const corrected =\n evaluateMode &&\n getCorrected(session ? session.answer || [] : [], correctResponse);\n const correctness = evaluateMode && getCorrectness(corrected);\n\n const { exhibitOnly } = graph;\n const disabled = env.mode !== 'gather' || exhibitOnly === true;\n\n const fb = evaluateMode\n ? getFeedbackForCorrectness(correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then(feedbackMessage => {\n const out = {\n prompt: normalizedQuestion.prompt,\n graph,\n disabled,\n corrected,\n correctResponse:\n evaluateMode &&\n ['unanswered', 'correct'].indexOf(correctness) === -1 &&\n normalizedQuestion.correctResponse,\n feedback: feedbackMessage && {\n type: correctness,\n message: feedbackMessage\n },\n colorContrast:\n (env.accessibility && env.accessibility.colorContrast) ||\n 'black_on_white'\n };\n\n resolve(omitBy(out, v => !v));\n });\n } else {\n reject(new Error('graph is undefined'));\n }\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise(resolve => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { correctResponse: answer } = question;\n\n resolve({\n answer,\n id: '1'\n });\n } else {\n resolve(null);\n }\n });\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["score","number","scaled","getPartialScore","corrected","ps","correct","rule","find","r","numberOfCorrect","length","scorePercentage","accumulateAnswer","correctResponse","total","answer","isCorrectResponse","some","cr","matches","outcome","model","session","env","Promise","resolve","empty","partialScoringEnabled","partialScoring","enabled","numCorrect","reduce","numIncorrect","getScore","question","getCorrected","correctness","getCorrectness","allowPartialScoring","filter","o","canDoPartialScoring","CLOSE_TO_PRECISION","closeTo","a","b","precision","expectedDiff","Math","pow","receivedDiff","abs","close","v","ov","incorrect","notInAnswer","noCorrectResponse","acc","index","match","push","splice","indexOf","normalize","feedback","defaults","createDefaultModel","out","graph","colorContrast","updateTicks","labelStep","ticks","minor","major","fraction","step","math","evaluate","reject","Error","normalizedQuestion","evaluateMode","mode","exhibitOnly","disabled","fb","undefined","then","feedbackMessage","prompt","type","message","accessibility","createCorrectResponseSession","role","id","validate","config","width","domain","maxNumberOfPoints","min","max","errors","widthError","domainError","maxError","pointsError","correctResponseError"],"mappings":"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","sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport find from 'lodash/find';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\nimport isEqualWith from 'lodash/isEqualWith';\nimport merge from 'lodash/merge';\nimport omitBy from 'lodash/omitBy';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { partialScoring } from '@pie-lib/controller-utils';\nimport * as math from 'mathjs';\n\nimport defaults from './defaults';\n\nconst score = number => {\n return {\n score: {\n scaled: number\n }\n };\n};\n\nconst getPartialScore = (corrected, ps) => {\n const { correct } = corrected;\n const rule = ps.find(r => r.numberOfCorrect === correct.length);\n\n if (rule) {\n return 1.0 * (rule.scorePercentage / 100);\n } else {\n return 0;\n }\n};\n\nconst accumulateAnswer = correctResponse => (total, answer) => {\n const isCorrectResponse = correctResponse.some(cr => matches(cr)(answer));\n return total + (isCorrectResponse ? 1 : 0);\n};\n\n/**\n */\nexport function outcome(model, session, env) {\n return new Promise(resolve => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n } else {\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const numCorrect = (session.answer || []).reduce(\n accumulateAnswer(model.correctResponse),\n 0\n );\n\n let total = model.correctResponse.length;\n let numIncorrect = 0;\n\n if((session.answer || []).length > total) {\n numIncorrect = (session.answer || []).length - total;\n }\n\n if (total === 0) {\n total = 1;\n }\n\n let score = numCorrect < 0 ? 0 : (numCorrect - numIncorrect) / total;\n\n if(score < 0) {\n score = 0;\n }\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0 });\n }\n });\n}\n\nexport function getScore(question, session) {\n return new Promise(resolve => {\n if (!session || isEmpty(session)) {\n resolve({ score: { scaled: 0 } })\n } else {\n session.answer = session.answer || [];\n\n const corrected = getCorrected(\n session.answer,\n cloneDeep(question.correctResponse)\n );\n\n const correctness = getCorrectness(corrected);\n\n if (correctness === 'correct') {\n resolve(score(1.0));\n } else if (correctness === 'incorrect') {\n resolve(score(0.0));\n } else if (correctness === 'partial') {\n const { allowPartialScoring, partialScoring } = question;\n const ps = (partialScoring || []).filter(o => !isEmpty(o));\n const canDoPartialScoring = allowPartialScoring && ps.length > 0;\n if (canDoPartialScoring) {\n resolve(score(getPartialScore(corrected, ps)));\n } else {\n resolve(score(0.0));\n }\n } else {\n resolve({ score: { scaled: -1 } });\n }\n }\n });\n}\n\nexport const CLOSE_TO_PRECISION = 3;\n\nexport const closeTo = (a, b, precision) => {\n precision = precision || 5;\n const expectedDiff = Math.pow(10, -precision) / 2;\n const receivedDiff = Math.abs(a - b);\n const close = receivedDiff <= expectedDiff;\n return close;\n};\n\nconst matches = a => v => {\n return isEqualWith(a, v, (v, ov) => {\n if (typeof v === 'number' && typeof ov === 'number') {\n return closeTo(v, ov, CLOSE_TO_PRECISION);\n }\n });\n};\n\nexport const getCorrected = (answer, correctResponse) => {\n if (isEmpty(correctResponse) && answer.length > 0) {\n return {\n correct: [],\n incorrect: [],\n notInAnswer: [],\n noCorrectResponse: true\n };\n }\n\n return answer.reduce(\n (acc, a, index) => {\n const { correct, incorrect, notInAnswer } = acc;\n\n const match = find(notInAnswer, matches(a));\n if (match) {\n correct.push(index);\n notInAnswer.splice(notInAnswer.indexOf(match), 1);\n } else {\n incorrect.push(index);\n }\n\n return {\n correct: correct,\n incorrect: incorrect,\n notInAnswer: notInAnswer\n };\n },\n {\n correct: [],\n incorrect: [],\n notInAnswer: correctResponse\n }\n );\n};\n\nexport const getCorrectness = corrected => {\n const { incorrect, correct, notInAnswer, noCorrectResponse } = corrected;\n\n if (noCorrectResponse) {\n return 'unknown';\n }\n\n if (incorrect.length === 0 && correct.length === 0) {\n return 'unanswered';\n }\n\n if (incorrect.length === 0 && notInAnswer.length === 0) {\n return 'correct';\n }\n\n if (incorrect.length > 0 || notInAnswer.length > 0) {\n if (correct.length > 0) {\n return 'partial';\n } else {\n return 'incorrect';\n }\n }\n\n return 'unknown';\n};\n\n/**\n * A sample of a normalize function see:\n * https://github.com/pie-framework/pie-elements/issues/21\n */\nexport function normalize(question) {\n return new Promise(resolve => {\n const feedback = merge(defaults.feedback, question.feedback);\n\n if (isEqual(feedback, question.feedback)) {\n return resolve({ ...question });\n } else {\n resolve({ ...question, feedback });\n }\n });\n}\n\nexport function createDefaultModel(model = {}) {\n return new Promise(resolve => {\n const out = {\n ...model,\n graph: {\n ...defaults.graph,\n ...model.graph,\n },\n colorContrast: 'black_on_white'\n };\n\n resolve(omitBy(out, v => !v));\n });\n}\n\n// this function is duplicated in configure; at some point, use the same shared function\nconst updateTicks = model => {\n const { graph: { labelStep, ticks = {}} = {}} = model;\n const { minor, major } = ticks;\n\n if (labelStep && typeof labelStep === 'string' && labelStep.match(/^[1-9][0-9]*\\/[1-9][0-9]*$/g)) {\n model.graph.fraction = true;\n\n // update the ticks frequency and label value to match the label step if needed\n const step = math.evaluate(labelStep);\n\n if (step !== major) {\n ticks.major = step;\n ticks.minor = step / (major / minor);\n }\n }\n\n return model;\n};\n\nexport function model(question, session, env) {\n if (!question) {\n return Promise.reject(new Error('question is null'));\n }\n\n return new Promise(async (resolve, reject) => {\n const normalizedQuestion = await normalize(question);\n const { graph } = updateTicks(normalizedQuestion);\n\n if (graph) {\n const evaluateMode = env.mode === 'evaluate';\n\n const correctResponse = cloneDeep(normalizedQuestion.correctResponse);\n const corrected =\n evaluateMode &&\n getCorrected(session ? session.answer || [] : [], correctResponse);\n const correctness = evaluateMode && getCorrectness(corrected);\n\n const { exhibitOnly } = graph;\n const disabled = env.mode !== 'gather' || exhibitOnly === true;\n\n const fb = evaluateMode\n ? getFeedbackForCorrectness(correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then(feedbackMessage => {\n const out = {\n prompt: normalizedQuestion.prompt,\n graph,\n disabled,\n corrected,\n correctResponse:\n evaluateMode &&\n ['unanswered', 'correct'].indexOf(correctness) === -1 &&\n normalizedQuestion.correctResponse,\n feedback: feedbackMessage && {\n type: correctness,\n message: feedbackMessage\n },\n colorContrast:\n (env.accessibility && env.accessibility.colorContrast) ||\n 'black_on_white'\n };\n\n resolve(omitBy(out, v => !v));\n });\n } else {\n reject(new Error('graph is undefined'));\n }\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise(resolve => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { correctResponse: answer } = question;\n\n resolve({\n answer,\n id: '1'\n });\n } else {\n resolve(null);\n }\n });\n};\n\nexport const validate = (model = {}, config = {}) => {\n // TODO: add configurable validation props after authoring is updated\n const { graph, correctResponse } = model || {};\n const { width, domain, maxNumberOfPoints } = graph || {};\n const { min, max } = domain || {};\n const errors = {};\n\n if (width < 200 || width > 800) {\n errors.widthError = 'Width should be a value between 200 and 800.';\n }\n\n if (min < -100000 || min > 10000 || max < -100000 || max > 10000) {\n errors.domainError = 'Min and max must both be in the range [-100000, 10000].';\n }\n\n if (min >= max) {\n errors.maxError = 'Max must be greater than min.';\n }\n\n if (maxNumberOfPoints < 1 || maxNumberOfPoints > 20) {\n errors.pointsError = 'Max number of elements should be between 1 and 20.';\n }\n\n if (correctResponse && correctResponse.length === 0) {\n errors.correctResponseError = 'The correct answer should include at least one number line object.';\n }\n\n return errors;\n};\n"],"file":"index.js"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/number-line-controller",
3
3
  "private": true,
4
- "version": "4.3.24",
4
+ "version": "4.3.25",
5
5
  "description": "Controller logic for @pie-ui/number-line",
6
6
  "keywords": [
7
7
  "pie",
@@ -81,12 +81,15 @@ var style = {
81
81
  correct: rayColor(colors.correct),
82
82
  incorrect: rayColor(colors.incorrect),
83
83
  arrowCorrect: {
84
+ fill: colors.correct,
84
85
  '--arrow-color': colors.correct
85
86
  },
86
87
  arrowIncorrect: {
88
+ fill: colors.incorrect,
87
89
  '--arrow-color': colors.incorrect
88
90
  },
89
91
  arrowSelected: {
92
+ fill: colors.selected,
90
93
  '--arrow-color': colors.selected
91
94
  }
92
95
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/number-line/graph/elements/ray.jsx"],"names":["rayColor","stroke","fill","strokeWidth","style","ray","cursor","color","primary","transition","selected","colors","correct","incorrect","arrowCorrect","arrowIncorrect","arrowSelected","Ray","props","state","dragPosition","p","domain","min","max","setState","interval","empty","position","direction","y","disabled","width","classes","xScale","context","drag","bind","stopDrag","finalPosition","className","positive","left","right","x1","x2","arrowX","arrowDirection","noop","arrowClassNames","onToggleSelect","onMove","React","Component","PropTypes","number","isRequired","bool","oneOf","func","snapValue"],"mappings":"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","sourcesContent":["import * as colors from '../../colors';\nimport { color } from '@pie-lib/render-ui';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Arrow from '../arrow';\nimport Point from './point';\nimport { basePropTypes } from './base';\nimport classNames from 'classnames';\nimport injectSheet from 'react-jss';\nimport isNumber from 'lodash/isNumber';\n\nconst rayColor = rayColor => ({\n '& line': {\n stroke: rayColor\n },\n '& .arrow': {\n fill: rayColor,\n strokeWidth: '1px',\n stroke: rayColor\n }\n});\n\nconst style = {\n ray: {\n '& line': {\n cursor: 'pointer',\n strokeWidth: '5px',\n stroke: color.primary()\n },\n '& line, & .arrow': {\n transition: 'stroke 150ms linear, fill 150ms linear'\n }\n },\n selected: rayColor(colors.selected),\n correct: rayColor(colors.correct),\n incorrect: rayColor(colors.incorrect),\n arrowCorrect: {\n '--arrow-color': colors.correct\n },\n arrowIncorrect: {\n '--arrow-color': colors.incorrect\n },\n arrowSelected: {\n '--arrow-color': colors.selected\n }\n};\n\nexport class Ray extends React.Component {\n static propTypes = {\n ...basePropTypes(),\n width: PropTypes.number.isRequired,\n selected: PropTypes.bool,\n disabled: PropTypes.bool,\n empty: PropTypes.bool,\n direction: PropTypes.oneOf(['positive', 'negative']),\n y: PropTypes.number,\n position: PropTypes.number.isRequired,\n onMove: PropTypes.func.isRequired,\n onToggleSelect: PropTypes.func.isRequired\n };\n\n static defaultProps = {\n selected: false,\n direction: 'positive',\n y: 0,\n disabled: false\n };\n\n static contextTypes = {\n xScale: PropTypes.func.isRequired,\n snapValue: PropTypes.func.isRequired\n };\n\n constructor(props) {\n super(props);\n this.state = {\n dragPosition: null\n };\n }\n\n drag(p) {\n const { domain } = this.props;\n if (p >= domain.min && p <= domain.max) {\n this.setState({ dragPosition: p });\n }\n }\n\n stopDrag() {\n this.setState({ dragPosition: null });\n }\n\n render() {\n /* eslint-disable */\n const {\n interval,\n empty,\n position,\n direction,\n domain,\n y,\n selected,\n disabled,\n width,\n correct,\n classes\n } = this.props;\n /* eslint-enable */\n const { xScale } = this.context;\n\n const drag = this.drag.bind(this);\n const stopDrag = this.stopDrag.bind(this);\n\n const finalPosition = isNumber(this.state.dragPosition)\n ? this.state.dragPosition\n : position;\n\n const className = classNames(classes.ray, {\n [classes.selected]: selected,\n [classes.correct]: correct === true,\n [classes.incorrect]: correct === false\n });\n\n const positive = direction === 'positive';\n const left = positive ? finalPosition : domain.min;\n const right = positive ? domain.max : finalPosition;\n // const triangleX = positive ? xScale(right) : xScale(left);\n\n //const et the line run all the way to 0 or width.\n const x1 = positive ? xScale(left) : 8;\n const x2 = positive ? width - 8 : xScale(right);\n const arrowX = positive ? width : 0;\n const arrowDirection = positive ? 'right' : 'left';\n\n const noop = () => {};\n\n const arrowClassNames = classNames({\n [classes.arrowCorrect]: correct === true,\n [classes.arrowIncorrect]: correct === false,\n [classes.arrowSelected]: selected\n });\n\n return (\n <g className={className} transform={`translate(0, ${y})`}>\n <line\n onClick={disabled ? noop : this.props.onToggleSelect}\n className=\"line-handle\"\n x1={x1}\n x2={x2}\n />\n <Point\n disabled={disabled}\n correct={correct}\n selected={selected}\n empty={empty}\n interval={interval}\n bounds={{ left: domain.min - position, right: domain.max - position }}\n position={position}\n onDrag={drag}\n onDragStop={stopDrag}\n onMove={this.props.onMove}\n />\n <Arrow\n x={arrowX}\n className={arrowClassNames}\n direction={arrowDirection}\n />\n </g>\n );\n }\n}\n\nexport default injectSheet(style)(Ray);\n"],"file":"ray.js"}
1
+ {"version":3,"sources":["../../../../src/number-line/graph/elements/ray.jsx"],"names":["rayColor","stroke","fill","strokeWidth","style","ray","cursor","color","primary","transition","selected","colors","correct","incorrect","arrowCorrect","arrowIncorrect","arrowSelected","Ray","props","state","dragPosition","p","domain","min","max","setState","interval","empty","position","direction","y","disabled","width","classes","xScale","context","drag","bind","stopDrag","finalPosition","className","positive","left","right","x1","x2","arrowX","arrowDirection","noop","arrowClassNames","onToggleSelect","onMove","React","Component","PropTypes","number","isRequired","bool","oneOf","func","snapValue"],"mappings":"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","sourcesContent":["import * as colors from '../../colors';\nimport { color } from '@pie-lib/render-ui';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Arrow from '../arrow';\nimport Point from './point';\nimport { basePropTypes } from './base';\nimport classNames from 'classnames';\nimport injectSheet from 'react-jss';\nimport isNumber from 'lodash/isNumber';\n\nconst rayColor = rayColor => ({\n '& line': {\n stroke: rayColor\n },\n '& .arrow': {\n fill: rayColor,\n strokeWidth: '1px',\n stroke: rayColor\n }\n});\n\nconst style = {\n ray: {\n '& line': {\n cursor: 'pointer',\n strokeWidth: '5px',\n stroke: color.primary()\n },\n '& line, & .arrow': {\n transition: 'stroke 150ms linear, fill 150ms linear'\n }\n },\n selected: rayColor(colors.selected),\n correct: rayColor(colors.correct),\n incorrect: rayColor(colors.incorrect),\n arrowCorrect: {\n fill: colors.correct,\n '--arrow-color': colors.correct\n },\n arrowIncorrect: {\n fill: colors.incorrect,\n '--arrow-color': colors.incorrect\n },\n arrowSelected: {\n fill: colors.selected,\n '--arrow-color': colors.selected\n }\n};\n\nexport class Ray extends React.Component {\n static propTypes = {\n ...basePropTypes(),\n width: PropTypes.number.isRequired,\n selected: PropTypes.bool,\n disabled: PropTypes.bool,\n empty: PropTypes.bool,\n direction: PropTypes.oneOf(['positive', 'negative']),\n y: PropTypes.number,\n position: PropTypes.number.isRequired,\n onMove: PropTypes.func.isRequired,\n onToggleSelect: PropTypes.func.isRequired\n };\n\n static defaultProps = {\n selected: false,\n direction: 'positive',\n y: 0,\n disabled: false\n };\n\n static contextTypes = {\n xScale: PropTypes.func.isRequired,\n snapValue: PropTypes.func.isRequired\n };\n\n constructor(props) {\n super(props);\n this.state = {\n dragPosition: null\n };\n }\n\n drag(p) {\n const { domain } = this.props;\n if (p >= domain.min && p <= domain.max) {\n this.setState({ dragPosition: p });\n }\n }\n\n stopDrag() {\n this.setState({ dragPosition: null });\n }\n\n render() {\n /* eslint-disable */\n const {\n interval,\n empty,\n position,\n direction,\n domain,\n y,\n selected,\n disabled,\n width,\n correct,\n classes\n } = this.props;\n /* eslint-enable */\n const { xScale } = this.context;\n\n const drag = this.drag.bind(this);\n const stopDrag = this.stopDrag.bind(this);\n\n const finalPosition = isNumber(this.state.dragPosition)\n ? this.state.dragPosition\n : position;\n\n const className = classNames(classes.ray, {\n [classes.selected]: selected,\n [classes.correct]: correct === true,\n [classes.incorrect]: correct === false\n });\n\n const positive = direction === 'positive';\n const left = positive ? finalPosition : domain.min;\n const right = positive ? domain.max : finalPosition;\n // const triangleX = positive ? xScale(right) : xScale(left);\n\n //const et the line run all the way to 0 or width.\n const x1 = positive ? xScale(left) : 8;\n const x2 = positive ? width - 8 : xScale(right);\n const arrowX = positive ? width : 0;\n const arrowDirection = positive ? 'right' : 'left';\n\n const noop = () => {};\n\n const arrowClassNames = classNames({\n [classes.arrowCorrect]: correct === true,\n [classes.arrowIncorrect]: correct === false,\n [classes.arrowSelected]: selected\n });\n\n return (\n <g className={className} transform={`translate(0, ${y})`}>\n <line\n onClick={disabled ? noop : this.props.onToggleSelect}\n className=\"line-handle\"\n x1={x1}\n x2={x2}\n />\n <Point\n disabled={disabled}\n correct={correct}\n selected={selected}\n empty={empty}\n interval={interval}\n bounds={{ left: domain.min - position, right: domain.max - position }}\n position={position}\n onDrag={drag}\n onDragStop={stopDrag}\n onMove={this.props.onMove}\n />\n <Arrow\n x={arrowX}\n className={arrowClassNames}\n direction={arrowDirection}\n />\n </g>\n );\n }\n}\n\nexport default injectSheet(style)(Ray);\n"],"file":"ray.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/number-line",
3
- "version": "5.14.10",
3
+ "version": "5.14.13",
4
4
  "repository": "pie-framework/pie-elements",
5
5
  "description": "",
6
6
  "publishConfig": {
@@ -8,11 +8,11 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "@material-ui/core": "^3.9.2",
11
- "@pie-lib/correct-answer-toggle": "^2.3.36",
11
+ "@pie-lib/correct-answer-toggle": "^2.3.38",
12
12
  "@pie-lib/feedback": "^0.4.27",
13
13
  "@pie-lib/icons": "^2.4.25",
14
- "@pie-lib/math-rendering": "^2.4.0",
15
- "@pie-lib/render-ui": "^4.12.6",
14
+ "@pie-lib/math-rendering": "^2.4.2",
15
+ "@pie-lib/render-ui": "^4.12.8",
16
16
  "classnames": "^2.2.5",
17
17
  "d3-scale": "^3.2.1",
18
18
  "d3-selection": "^1.4.1",
@@ -27,7 +27,7 @@
27
27
  },
28
28
  "author": "pie framework developers",
29
29
  "license": "ISC",
30
- "gitHead": "43f534de577f1eb49e63c8dc43d5519754d4df93",
30
+ "gitHead": "3f3d6edc68890098821978ebd5a8b90da31ab222",
31
31
  "scripts": {
32
32
  "postpublish": "../../scripts/postpublish"
33
33
  },