@pie-element/drawing-response 10.3.4-next.3 → 11.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/CHANGELOG.md +0 -11
  2. package/configure/CHANGELOG.md +0 -11
  3. package/configure/lib/button.js +23 -47
  4. package/configure/lib/button.js.map +1 -1
  5. package/configure/lib/defaults.js +2 -3
  6. package/configure/lib/defaults.js.map +1 -1
  7. package/configure/lib/image-container.js +238 -327
  8. package/configure/lib/image-container.js.map +1 -1
  9. package/configure/lib/index.js +115 -182
  10. package/configure/lib/index.js.map +1 -1
  11. package/configure/lib/root.js +195 -261
  12. package/configure/lib/root.js.map +1 -1
  13. package/configure/package.json +9 -7
  14. package/configure/src/__tests__/image-container.test.jsx +101 -37
  15. package/configure/src/__tests__/index.test.js +27 -5
  16. package/configure/src/__tests__/root.test.jsx +37 -21
  17. package/configure/src/button.jsx +14 -24
  18. package/configure/src/image-container.jsx +73 -77
  19. package/configure/src/index.js +12 -2
  20. package/configure/src/root.jsx +25 -26
  21. package/controller/lib/defaults.js +2 -3
  22. package/controller/lib/defaults.js.map +1 -1
  23. package/controller/lib/index.js +39 -65
  24. package/controller/lib/index.js.map +1 -1
  25. package/controller/package.json +1 -1
  26. package/lib/drawing-response/button.js +35 -60
  27. package/lib/drawing-response/button.js.map +1 -1
  28. package/lib/drawing-response/constants.js +2 -3
  29. package/lib/drawing-response/constants.js.map +1 -1
  30. package/lib/drawing-response/container.js +270 -351
  31. package/lib/drawing-response/container.js.map +1 -1
  32. package/lib/drawing-response/drawable-circle.js +65 -104
  33. package/lib/drawing-response/drawable-circle.js.map +1 -1
  34. package/lib/drawing-response/drawable-eraser.js +50 -86
  35. package/lib/drawing-response/drawable-eraser.js.map +1 -1
  36. package/lib/drawing-response/drawable-free-path.js +56 -97
  37. package/lib/drawing-response/drawable-free-path.js.map +1 -1
  38. package/lib/drawing-response/drawable-helper.js +16 -28
  39. package/lib/drawing-response/drawable-helper.js.map +1 -1
  40. package/lib/drawing-response/drawable-image.js +30 -49
  41. package/lib/drawing-response/drawable-image.js.map +1 -1
  42. package/lib/drawing-response/drawable-line.js +60 -99
  43. package/lib/drawing-response/drawable-line.js.map +1 -1
  44. package/lib/drawing-response/drawable-main.js +273 -345
  45. package/lib/drawing-response/drawable-main.js.map +1 -1
  46. package/lib/drawing-response/drawable-palette.js +123 -166
  47. package/lib/drawing-response/drawable-palette.js.map +1 -1
  48. package/lib/drawing-response/drawable-rectangle.js +65 -104
  49. package/lib/drawing-response/drawable-rectangle.js.map +1 -1
  50. package/lib/drawing-response/drawable-text.js +201 -313
  51. package/lib/drawing-response/drawable-text.js.map +1 -1
  52. package/lib/drawing-response/drawable-transformer.js +36 -79
  53. package/lib/drawing-response/drawable-transformer.js.map +1 -1
  54. package/lib/drawing-response/factory.js +6 -19
  55. package/lib/drawing-response/factory.js.map +1 -1
  56. package/lib/drawing-response/icon.js +8 -24
  57. package/lib/drawing-response/icon.js.map +1 -1
  58. package/lib/drawing-response/index.js +74 -116
  59. package/lib/drawing-response/index.js.map +1 -1
  60. package/lib/index.js +51 -102
  61. package/lib/index.js.map +1 -1
  62. package/package.json +13 -12
  63. package/src/__tests__/drawing-index-test.jsx +90 -27
  64. package/src/drawing-response/__tests__/container.test.jsx +56 -36
  65. package/src/drawing-response/__tests__/drawing-main.test.jsx +158 -139
  66. package/src/drawing-response/button.jsx +23 -34
  67. package/src/drawing-response/container.jsx +39 -40
  68. package/src/drawing-response/drawable-image.jsx +17 -20
  69. package/src/drawing-response/drawable-main.jsx +67 -60
  70. package/src/drawing-response/drawable-palette.jsx +48 -54
  71. package/src/drawing-response/drawable-text.jsx +26 -38
  72. package/src/drawing-response/index.jsx +21 -20
  73. package/src/index.js +17 -2
  74. package/configure/src/__tests__/__snapshots__/image-container.test.jsx.snap +0 -45
  75. package/configure/src/__tests__/__snapshots__/root.test.jsx.snap +0 -185
  76. package/esm/configure.js +0 -16151
  77. package/esm/configure.js.map +0 -1
  78. package/esm/controller.js +0 -814
  79. package/esm/controller.js.map +0 -1
  80. package/esm/element.js +0 -54130
  81. package/esm/element.js.map +0 -1
  82. package/esm/package.json +0 -3
  83. package/src/__tests__/__snapshots__/drawing-index-test.jsx.snap +0 -23
  84. package/src/drawing-response/__tests__/__snapshots__/container.test.jsx.snap +0 -396
  85. package/src/drawing-response/__tests__/__snapshots__/drawing-main.test.jsx.snap +0 -247
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/drawing-response/index.jsx"],"names":["DrawingResponseComponent","props","state","showCorrect","hasError","model","extraCSSRules","disabled","imageDimensions","imageUrl","prompt","mode","teacherInstructions","backgroundImageEnabled","language","session","onSessionChange","classes","errorMessage","isEvaluateMode","main","collapsible","hidden","visible","error","message","React","Component","propTypes","PropTypes","object","isRequired","func","styles","theme","color","text","backgroundColor","background","marginBottom","spacing","unit"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { color, Collapsible, PreviewPrompt, UiLayout } from '@pie-lib/render-ui';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport Container from './container';\n\nclass DrawingResponseComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showCorrect: false,\n hasError: false,\n };\n }\n\n static getDerivedStateFromError(error) {\n return { hasError: true, errorMessage: error.message };\n }\n\n render() {\n const {\n model: {\n extraCSSRules,\n disabled,\n imageDimensions,\n imageUrl,\n prompt,\n mode,\n teacherInstructions,\n backgroundImageEnabled,\n language,\n },\n session,\n onSessionChange,\n classes,\n } = this.props;\n const { hasError, errorMessage } = this.state;\n const isEvaluateMode = mode === 'evaluate';\n\n return hasError ? (\n <div className={classes.main}>An error occured: {errorMessage}</div>\n ) : (\n <UiLayout extraCSSRules={extraCSSRules} className={classes.main}>\n {teacherInstructions && (\n <Collapsible\n className={classes.collapsible}\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n >\n <PreviewPrompt prompt={teacherInstructions} />\n </Collapsible>\n )}\n\n {prompt && <PreviewPrompt tagName=\"span\" prompt={prompt} />}\n\n <Container\n session={session}\n onSessionChange={onSessionChange}\n isEvaluateMode={isEvaluateMode}\n imageDimensions={imageDimensions}\n imageUrl={imageUrl}\n backgroundImageEnabled={backgroundImageEnabled}\n disabled={disabled}\n language={language}\n />\n </UiLayout>\n );\n }\n}\n\nDrawingResponseComponent.propTypes = {\n classes: PropTypes.object,\n model: PropTypes.object.isRequired,\n onSessionChange: PropTypes.func.isRequired,\n session: PropTypes.object.isRequired,\n};\n\nconst styles = (theme) => ({\n main: {\n color: color.text(),\n backgroundColor: color.background(),\n },\n collapsible: {\n marginBottom: theme.spacing.unit * 2,\n },\n});\n\nexport default withStyles(styles)(DrawingResponseComponent);\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_propTypes","_renderUi","_styles","_container","StyledUiLayout","styled","UiLayout","color","text","backgroundColor","background","StyledCollapsible","Collapsible","theme","marginBottom","spacing","ErrorDiv","DrawingResponseComponent","React","Component","constructor","props","state","showCorrect","hasError","getDerivedStateFromError","error","errorMessage","message","render","model","extraCSSRules","disabled","imageDimensions","imageUrl","prompt","mode","teacherInstructions","backgroundImageEnabled","language","session","onSessionChange","isEvaluateMode","default","createElement","labels","hidden","visible","PreviewPrompt","tagName","propTypes","PropTypes","object","isRequired","func","_default","exports"],"sources":["../../src/drawing-response/index.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { color, Collapsible, PreviewPrompt, UiLayout } from '@pie-lib/render-ui';\nimport { styled } from '@mui/material/styles';\n\nimport Container from './container';\n\nconst StyledUiLayout = styled(UiLayout)({\n color: color.text(),\n backgroundColor: color.background(),\n});\n\nconst StyledCollapsible = styled(Collapsible)(({ theme }) => ({\n marginBottom: theme.spacing(2),\n}));\n\nconst ErrorDiv = styled('div')({\n color: color.text(),\n backgroundColor: color.background(),\n});\n\nclass DrawingResponseComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showCorrect: false,\n hasError: false,\n };\n }\n\n static getDerivedStateFromError(error) {\n return { hasError: true, errorMessage: error.message };\n }\n\n render() {\n const {\n model: {\n extraCSSRules,\n disabled,\n imageDimensions,\n imageUrl,\n prompt,\n mode,\n teacherInstructions,\n backgroundImageEnabled,\n language,\n },\n session,\n onSessionChange,\n } = this.props;\n const { hasError, errorMessage } = this.state;\n const isEvaluateMode = mode === 'evaluate';\n\n return hasError ? (\n <ErrorDiv>An error occured: {errorMessage}</ErrorDiv>\n ) : (\n <StyledUiLayout extraCSSRules={extraCSSRules}>\n {teacherInstructions && (\n <StyledCollapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n >\n <PreviewPrompt prompt={teacherInstructions} />\n </StyledCollapsible>\n )}\n\n {prompt && <PreviewPrompt tagName=\"span\" prompt={prompt} />}\n\n <Container\n session={session}\n onSessionChange={onSessionChange}\n isEvaluateMode={isEvaluateMode}\n imageDimensions={imageDimensions}\n imageUrl={imageUrl}\n backgroundImageEnabled={backgroundImageEnabled}\n disabled={disabled}\n language={language}\n />\n </StyledUiLayout>\n );\n }\n}\n\nDrawingResponseComponent.propTypes = {\n model: PropTypes.object.isRequired,\n onSessionChange: PropTypes.func.isRequired,\n session: PropTypes.object.isRequired,\n};\n\nexport default DrawingResponseComponent;\n"],"mappings":"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","ignoreList":[]}
package/lib/index.js CHANGED
@@ -1,119 +1,68 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
- exports["default"] = void 0;
9
-
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
-
16
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
-
18
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
-
20
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
-
22
- var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
23
-
7
+ exports.default = void 0;
24
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
-
26
9
  var _react = _interopRequireDefault(require("react"));
27
-
28
- var _reactDom = _interopRequireDefault(require("react-dom"));
29
-
10
+ var _client = require("react-dom/client");
30
11
  var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
31
-
32
12
  var _mathRendering = require("@pie-lib/math-rendering");
33
-
34
13
  var _piePlayerEvents = require("@pie-framework/pie-player-events");
35
-
36
14
  var _drawingResponse = _interopRequireDefault(require("./drawing-response"));
37
-
38
- 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); }; }
39
-
40
- 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; } }
41
-
42
- var DrawingResponse = /*#__PURE__*/function (_HTMLElement) {
43
- (0, _inherits2["default"])(DrawingResponse, _HTMLElement);
44
-
45
- var _super = _createSuper(DrawingResponse);
46
-
47
- function DrawingResponse() {
48
- var _this;
49
-
50
- (0, _classCallCheck2["default"])(this, DrawingResponse);
51
-
52
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
53
- args[_key] = arguments[_key];
54
- }
55
-
56
- _this = _super.call.apply(_super, [this].concat(args));
57
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "sessionChanged", function (update) {
58
- _this._session.drawables = update.drawables;
59
- _this._session.texts = update.texts;
60
- _this._session.width = update.width;
61
-
62
- _this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(_this.tagName.toLowerCase(), _this.isComplete()));
63
-
64
- _this._render();
15
+ class DrawingResponse extends HTMLElement {
16
+ constructor() {
17
+ super();
18
+ (0, _defineProperty2.default)(this, "sessionChanged", update => {
19
+ this._session.drawables = update.drawables;
20
+ this._session.texts = update.texts;
21
+ this._session.width = update.width;
22
+ this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));
23
+ this._render();
65
24
  });
66
- return _this;
25
+ this._root = null;
67
26
  }
68
-
69
- (0, _createClass2["default"])(DrawingResponse, [{
70
- key: "model",
71
- set: function set(m) {
72
- this._model = m;
73
- this.dispatchEvent(new _piePlayerEvents.ModelSetEvent(this.tagName.toLowerCase(), this.isComplete(), !!this._model));
74
-
75
- this._render();
76
- }
77
- }, {
78
- key: "isComplete",
79
- value: function isComplete() {
80
- return this._session && (!(0, _isEmpty["default"])(this._session.drawables) || !(0, _isEmpty["default"])(this._session.texts));
81
- }
82
- }, {
83
- key: "session",
84
- get: function get() {
85
- return this._session;
86
- },
87
- set: function set(s) {
88
- this._session = s;
89
-
90
- this._render();
91
- }
92
- }, {
93
- key: "connectedCallback",
94
- value: function connectedCallback() {
95
- this._render();
96
- }
97
- }, {
98
- key: "_render",
99
- value: function _render() {
100
- var _this2 = this;
101
-
102
- if (this._model && this._session) {
103
- var el = /*#__PURE__*/_react["default"].createElement(_drawingResponse["default"], {
104
- model: this._model,
105
- session: this._session,
106
- onSessionChange: this.sessionChanged
107
- });
108
-
109
- _reactDom["default"].render(el, this, function () {
110
- (0, _mathRendering.renderMath)(_this2);
111
- });
27
+ set model(m) {
28
+ this._model = m;
29
+ this.dispatchEvent(new _piePlayerEvents.ModelSetEvent(this.tagName.toLowerCase(), this.isComplete(), !!this._model));
30
+ this._render();
31
+ }
32
+ isComplete() {
33
+ return this._session && (!(0, _isEmpty.default)(this._session.drawables) || !(0, _isEmpty.default)(this._session.texts));
34
+ }
35
+ set session(s) {
36
+ this._session = s;
37
+ this._render();
38
+ }
39
+ get session() {
40
+ return this._session;
41
+ }
42
+ connectedCallback() {
43
+ this._render();
44
+ }
45
+ _render() {
46
+ if (this._model && this._session) {
47
+ const el = /*#__PURE__*/_react.default.createElement(_drawingResponse.default, {
48
+ model: this._model,
49
+ session: this._session,
50
+ onSessionChange: this.sessionChanged
51
+ });
52
+ if (!this._root) {
53
+ this._root = (0, _client.createRoot)(this);
112
54
  }
55
+ this._root.render(el);
56
+ queueMicrotask(() => {
57
+ (0, _mathRendering.renderMath)(this);
58
+ });
113
59
  }
114
- }]);
115
- return DrawingResponse;
116
- }( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
117
-
118
- exports["default"] = DrawingResponse;
60
+ }
61
+ disconnectedCallback() {
62
+ if (this._root) {
63
+ this._root.unmount();
64
+ }
65
+ }
66
+ }
67
+ exports.default = DrawingResponse;
119
68
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["DrawingResponse","update","_session","drawables","texts","width","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","isComplete","_render","m","_model","ModelSetEvent","s","el","React","createElement","DrawingResponseComponent","model","session","onSessionChange","sessionChanged","ReactDOM","render","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;;;IAEqBA,e;;;;;;;;;;;;;;;uGAYF,UAACC,MAAD,EAAY;AAC3B,YAAKC,QAAL,CAAcC,SAAd,GAA0BF,MAAM,CAACE,SAAjC;AACA,YAAKD,QAAL,CAAcE,KAAd,GAAsBH,MAAM,CAACG,KAA7B;AACA,YAAKF,QAAL,CAAcG,KAAd,GAAsBJ,MAAM,CAACI,KAA7B;;AAEA,YAAKC,aAAL,CAAmB,IAAIC,oCAAJ,CAAwB,MAAKC,OAAL,CAAaC,WAAb,EAAxB,EAAoD,MAAKC,UAAL,EAApD,CAAnB;;AAEA,YAAKC,OAAL;AACD,K;;;;;;SAnBD,aAAUC,CAAV,EAAa;AACX,WAAKC,MAAL,GAAcD,CAAd;AAEA,WAAKN,aAAL,CAAmB,IAAIQ,8BAAJ,CAAkB,KAAKN,OAAL,CAAaC,WAAb,EAAlB,EAA8C,KAAKC,UAAL,EAA9C,EAAiE,CAAC,CAAC,KAAKG,MAAxE,CAAnB;;AACA,WAAKF,OAAL;AACD;;;WAED,sBAAa;AACX,aAAO,KAAKT,QAAL,KAAkB,CAAC,yBAAQ,KAAKA,QAAL,CAAcC,SAAtB,CAAD,IAAqC,CAAC,yBAAQ,KAAKD,QAAL,CAAcE,KAAtB,CAAxD,CAAP;AACD;;;SAiBD,eAAc;AACZ,aAAO,KAAKF,QAAZ;AACD,K;SAPD,aAAYa,CAAZ,EAAe;AACb,WAAKb,QAAL,GAAgBa,CAAhB;;AACA,WAAKJ,OAAL;AACD;;;WAMD,6BAAoB;AAClB,WAAKA,OAAL;AACD;;;WAED,mBAAU;AAAA;;AACR,UAAI,KAAKE,MAAL,IAAe,KAAKX,QAAxB,EAAkC;AAChC,YAAMc,EAAE,gBAAGC,kBAAMC,aAAN,CAAoBC,2BAApB,EAA8C;AACvDC,UAAAA,KAAK,EAAE,KAAKP,MAD2C;AAEvDQ,UAAAA,OAAO,EAAE,KAAKnB,QAFyC;AAGvDoB,UAAAA,eAAe,EAAE,KAAKC;AAHiC,SAA9C,CAAX;;AAMAC,6BAASC,MAAT,CAAgBT,EAAhB,EAAoB,IAApB,EAA0B,YAAM;AAC9B,yCAAW,MAAX;AACD,SAFD;AAGD;AACF;;;kDA/C0CU,W","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport isEmpty from 'lodash/isEmpty';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-framework/pie-player-events';\n\nimport DrawingResponseComponent from './drawing-response';\n\nexport default class DrawingResponse extends HTMLElement {\n set model(m) {\n this._model = m;\n\n this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), this.isComplete(), !!this._model));\n this._render();\n }\n\n isComplete() {\n return this._session && (!isEmpty(this._session.drawables) || !isEmpty(this._session.texts));\n }\n\n sessionChanged = (update) => {\n this._session.drawables = update.drawables;\n this._session.texts = update.texts;\n this._session.width = update.width;\n\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));\n\n this._render();\n };\n\n set session(s) {\n this._session = s;\n this._render();\n }\n\n get session() {\n return this._session;\n }\n\n connectedCallback() {\n this._render();\n }\n\n _render() {\n if (this._model && this._session) {\n const el = React.createElement(DrawingResponseComponent, {\n model: this._model,\n session: this._session,\n onSessionChange: this.sessionChanged,\n });\n\n ReactDOM.render(el, this, () => {\n renderMath(this);\n });\n }\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_isEmpty","_mathRendering","_piePlayerEvents","_drawingResponse","DrawingResponse","HTMLElement","constructor","_defineProperty2","default","update","_session","drawables","texts","width","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","isComplete","_render","_root","model","m","_model","ModelSetEvent","isEmpty","session","s","connectedCallback","el","React","createElement","DrawingResponseComponent","onSessionChange","sessionChanged","createRoot","render","queueMicrotask","renderMath","disconnectedCallback","unmount","exports"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport isEmpty from 'lodash/isEmpty';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-framework/pie-player-events';\n\nimport DrawingResponseComponent from './drawing-response';\n\nexport default class DrawingResponse extends HTMLElement {\n constructor() {\n super();\n this._root = null;\n }\n\n set model(m) {\n this._model = m;\n\n this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), this.isComplete(), !!this._model));\n this._render();\n }\n\n isComplete() {\n return this._session && (!isEmpty(this._session.drawables) || !isEmpty(this._session.texts));\n }\n\n sessionChanged = (update) => {\n this._session.drawables = update.drawables;\n this._session.texts = update.texts;\n this._session.width = update.width;\n\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));\n\n this._render();\n };\n\n set session(s) {\n this._session = s;\n this._render();\n }\n\n get session() {\n return this._session;\n }\n\n connectedCallback() {\n this._render();\n }\n\n _render() {\n if (this._model && this._session) {\n const el = React.createElement(DrawingResponseComponent, {\n model: this._model,\n session: this._session,\n onSessionChange: this.sessionChanged,\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":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AACA,IAAAI,gBAAA,GAAAJ,OAAA;AAEA,IAAAK,gBAAA,GAAAN,sBAAA,CAAAC,OAAA;AAEe,MAAMM,eAAe,SAASC,WAAW,CAAC;EACvDC,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAAC,IAAAC,gBAAA,CAAAC,OAAA,0BAeQC,MAAM,IAAK;MAC3B,IAAI,CAACC,QAAQ,CAACC,SAAS,GAAGF,MAAM,CAACE,SAAS;MAC1C,IAAI,CAACD,QAAQ,CAACE,KAAK,GAAGH,MAAM,CAACG,KAAK;MAClC,IAAI,CAACF,QAAQ,CAACG,KAAK,GAAGJ,MAAM,CAACI,KAAK;MAElC,IAAI,CAACC,aAAa,CAAC,IAAIC,oCAAmB,CAAC,IAAI,CAACC,OAAO,CAACC,WAAW,CAAC,CAAC,EAAE,IAAI,CAACC,UAAU,CAAC,CAAC,CAAC,CAAC;MAE1F,IAAI,CAACC,OAAO,CAAC,CAAC;IAChB,CAAC;IAtBC,IAAI,CAACC,KAAK,GAAG,IAAI;EACnB;EAEA,IAAIC,KAAKA,CAACC,CAAC,EAAE;IACX,IAAI,CAACC,MAAM,GAAGD,CAAC;IAEf,IAAI,CAACR,aAAa,CAAC,IAAIU,8BAAa,CAAC,IAAI,CAACR,OAAO,CAACC,WAAW,CAAC,CAAC,EAAE,IAAI,CAACC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAACK,MAAM,CAAC,CAAC;IACnG,IAAI,CAACJ,OAAO,CAAC,CAAC;EAChB;EAEAD,UAAUA,CAAA,EAAG;IACX,OAAO,IAAI,CAACR,QAAQ,KAAK,CAAC,IAAAe,gBAAO,EAAC,IAAI,CAACf,QAAQ,CAACC,SAAS,CAAC,IAAI,CAAC,IAAAc,gBAAO,EAAC,IAAI,CAACf,QAAQ,CAACE,KAAK,CAAC,CAAC;EAC9F;EAYA,IAAIc,OAAOA,CAACC,CAAC,EAAE;IACb,IAAI,CAACjB,QAAQ,GAAGiB,CAAC;IACjB,IAAI,CAACR,OAAO,CAAC,CAAC;EAChB;EAEA,IAAIO,OAAOA,CAAA,EAAG;IACZ,OAAO,IAAI,CAAChB,QAAQ;EACtB;EAEAkB,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAACT,OAAO,CAAC,CAAC;EAChB;EAEAA,OAAOA,CAAA,EAAG;IACR,IAAI,IAAI,CAACI,MAAM,IAAI,IAAI,CAACb,QAAQ,EAAE;MAChC,MAAMmB,EAAE,gBAAGC,cAAK,CAACC,aAAa,CAACC,wBAAwB,EAAE;QACvDX,KAAK,EAAE,IAAI,CAACE,MAAM;QAClBG,OAAO,EAAE,IAAI,CAAChB,QAAQ;QACtBuB,eAAe,EAAE,IAAI,CAACC;MACxB,CAAC,CAAC;MAEF,IAAI,CAAC,IAAI,CAACd,KAAK,EAAE;QACf,IAAI,CAACA,KAAK,GAAG,IAAAe,kBAAU,EAAC,IAAI,CAAC;MAC/B;MACA,IAAI,CAACf,KAAK,CAACgB,MAAM,CAACP,EAAE,CAAC;MACrBQ,cAAc,CAAC,MAAM;QACnB,IAAAC,yBAAU,EAAC,IAAI,CAAC;MAClB,CAAC,CAAC;IACJ;EACF;EAEAC,oBAAoBA,CAAA,EAAG;IACrB,IAAI,IAAI,CAACnB,KAAK,EAAE;MACd,IAAI,CAACA,KAAK,CAACoB,OAAO,CAAC,CAAC;IACtB;EACF;AACF;AAACC,OAAA,CAAAjC,OAAA,GAAAJ,eAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,31 +1,32 @@
1
1
  {
2
2
  "name": "@pie-element/drawing-response",
3
- "version": "10.3.4-next.3+1f5df43bb",
3
+ "version": "11.0.0-beta.1",
4
4
  "description": "",
5
5
  "repository": "pie-framework/pie-elements",
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
9
9
  "dependencies": {
10
- "@material-ui/core": "^3.9.3",
10
+ "@emotion/react": "^11.14.0",
11
+ "@emotion/style": "^0.8.0",
11
12
  "@mdi/js": "^3.6.95",
12
13
  "@mdi/react": "^1.1.1",
14
+ "@mui/icons-material": "^7.3.4",
15
+ "@mui/material": "^7.3.4",
13
16
  "@pie-framework/pie-player-events": "^0.1.0",
14
- "@pie-lib/math-rendering": "3.22.1",
15
- "@pie-lib/render-ui": "4.35.2",
16
- "@pie-lib/translator": "2.23.1",
17
- "classnames": "^2.2.6",
18
- "enzyme-to-json": "^3.3.5",
19
- "konva": "^3.4.1",
17
+ "@pie-lib/math-rendering": "4.1.0-next.4",
18
+ "@pie-lib/render-ui": "5.1.0-next.5",
19
+ "@pie-lib/translator": "3.1.0-next.4",
20
+ "konva": "8.3.0",
20
21
  "lodash": "^4.17.11",
21
22
  "prop-types": "^15.6.1",
22
- "react": "^16.8.1",
23
- "react-dom": "^16.8.1",
24
- "react-konva": "^16.10.1-0"
23
+ "react": "18.2.0",
24
+ "react-dom": "18.2.0",
25
+ "react-konva": "18.1.0"
25
26
  },
26
27
  "author": "pie framework developers",
27
28
  "license": "ISC",
28
- "gitHead": "1f5df43bb21a7e04dbae9de66831b3d64d3ff5a8",
29
+ "gitHead": "38eb4b4700ca4eaad440566dfc50623ff8876a92",
29
30
  "scripts": {
30
31
  "postpublish": "../../scripts/postpublish"
31
32
  },
@@ -1,40 +1,103 @@
1
1
  import React from 'react';
2
- import _ from 'lodash';
3
- import { shallow } from 'enzyme';
2
+ import { render, screen } from '@testing-library/react';
4
3
  import DrawingResponse from '../drawing-response';
5
- import toJson from 'enzyme-to-json';
4
+
5
+ // Mock @pie-lib/render-ui
6
+ jest.mock('@pie-lib/render-ui', () => ({
7
+ color: {
8
+ text: () => '#000',
9
+ background: () => '#fff',
10
+ },
11
+ Collapsible: ({ children, labels }) => (
12
+ <div data-testid="collapsible">
13
+ <button>{labels.hidden}</button>
14
+ {children}
15
+ </div>
16
+ ),
17
+ PreviewPrompt: ({ prompt }) => <span data-testid="preview-prompt">{prompt}</span>,
18
+ UiLayout: ({ children }) => <div data-testid="ui-layout">{children}</div>,
19
+ }));
20
+
21
+ // Mock the Container component since it has complex dependencies
22
+ jest.mock('../drawing-response/container', () => {
23
+ return function MockContainer() {
24
+ return <div data-testid="drawing-container">Drawing Container</div>;
25
+ };
26
+ });
6
27
 
7
28
  describe('DrawingResponse', () => {
8
- let wrapper;
9
-
10
- const mkWrapper = (opts = {}) => {
11
- opts = _.extend(
12
- {
13
- model: {
14
- disabled: false,
15
- imageDimensions: {
16
- height: 0,
17
- width: 0,
18
- },
19
- imageUrl: '',
20
- mode: 'gather',
21
- prompt: 'This is the question prompt',
22
- },
29
+ const defaultProps = {
30
+ model: {
31
+ disabled: false,
32
+ imageDimensions: {
33
+ height: 400,
34
+ width: 600,
23
35
  },
24
- opts,
25
- );
36
+ imageUrl: 'http://example.com/image.png',
37
+ mode: 'gather',
38
+ prompt: 'Draw your response',
39
+ backgroundImageEnabled: true,
40
+ },
41
+ session: {},
42
+ onSessionChange: jest.fn(),
43
+ };
26
44
 
27
- return shallow(<DrawingResponse {...opts} />);
45
+ const renderDrawingResponse = (propsOverrides = {}) => {
46
+ const props = { ...defaultProps, ...propsOverrides };
47
+ return render(<DrawingResponse {...props} />);
28
48
  };
29
49
 
30
- beforeEach(() => {
31
- wrapper = mkWrapper();
50
+ describe('prompt', () => {
51
+ it('displays the prompt', () => {
52
+ renderDrawingResponse();
53
+ expect(screen.getByText('Draw your response')).toBeInTheDocument();
54
+ });
55
+
56
+ it('does not render prompt when not provided', () => {
57
+ renderDrawingResponse({
58
+ model: { ...defaultProps.model, prompt: '' },
59
+ });
60
+ // PreviewPrompt should not be in the document when prompt is empty
61
+ const prompts = screen.queryAllByTestId('preview-prompt');
62
+ expect(prompts.every(p => p.textContent !== 'Draw your response')).toBe(true);
63
+ });
64
+ });
65
+
66
+ describe('teacher instructions', () => {
67
+ it('does not show collapsible when teacherInstructions is not provided', () => {
68
+ renderDrawingResponse();
69
+ expect(screen.queryByTestId('collapsible')).not.toBeInTheDocument();
70
+ });
71
+
72
+ it('shows collapsible when teacherInstructions is provided', () => {
73
+ renderDrawingResponse({
74
+ model: { ...defaultProps.model, teacherInstructions: 'Grade based on creativity' },
75
+ });
76
+ expect(screen.getByTestId('collapsible')).toBeInTheDocument();
77
+ expect(screen.getByText('Grade based on creativity')).toBeInTheDocument();
78
+ });
32
79
  });
33
80
 
34
- describe('snapshots', () => {
35
- it('renders', () => {
36
- const wrapper = mkWrapper();
37
- expect(toJson(wrapper)).toMatchSnapshot();
81
+ describe('container', () => {
82
+ it('renders the drawing container', () => {
83
+ renderDrawingResponse();
84
+ expect(screen.getByTestId('drawing-container')).toBeInTheDocument();
85
+ });
86
+ });
87
+
88
+ describe('modes', () => {
89
+ it('renders in gather mode', () => {
90
+ renderDrawingResponse({
91
+ model: { ...defaultProps.model, mode: 'gather' },
92
+ });
93
+ expect(screen.getByTestId('ui-layout')).toBeInTheDocument();
94
+ });
95
+
96
+ it('renders in evaluate mode', () => {
97
+ renderDrawingResponse({
98
+ model: { ...defaultProps.model, mode: 'evaluate' },
99
+ });
100
+ expect(screen.getByTestId('ui-layout')).toBeInTheDocument();
38
101
  });
39
102
  });
40
103
  });
@@ -1,61 +1,81 @@
1
- import { shallow } from 'enzyme';
1
+ import { render } from '@testing-library/react';
2
2
  import React from 'react';
3
+ import { ThemeProvider, createTheme } from '@mui/material/styles';
3
4
 
4
- global.MutationObserver = class {
5
- constructor(callback) {}
6
- disconnect() {}
7
- observe(element, initObject) {}
8
- };
5
+ import { Container } from '../container';
9
6
 
10
- global.ResizeObserver = class {
11
- observe() {}
12
- disconnect() {}
13
- };
7
+ jest.mock('../drawable-palette', () => (props) => <div data-testid="drawable-palette" {...props} />);
8
+ jest.mock('../drawable-main', () => (props) => <div data-testid="drawable-main" {...props} />);
9
+ jest.mock('../drawable-text', () =>
10
+ jest.fn().mockImplementation(() => ({
11
+ removeEventListeners: jest.fn(),
12
+ }))
13
+ );
14
+ jest.mock('../button', () => (props) => <button {...props}>{props.label}</button>);
15
+ jest.mock('../icon', () => (props) => <span {...props} />);
14
16
 
15
- import { Container } from '../container';
17
+ const theme = createTheme();
16
18
 
17
19
  beforeEach(() => {
18
20
  jest.useFakeTimers();
19
21
  });
22
+
23
+ afterEach(() => {
24
+ jest.useRealTimers();
25
+ });
26
+
20
27
  describe('Container', () => {
21
- let w;
22
28
  let onSessionChange = jest.fn();
23
- const wrapper = (extras, renderOpts) => {
24
- const defaults = {
25
- classes: {},
29
+
30
+ beforeEach(() => {
31
+ jest.clearAllMocks();
32
+ });
33
+
34
+ const renderContainer = (props = {}) => {
35
+ const defaultProps = {
26
36
  className: 'className',
27
37
  onSessionChange,
28
38
  imageDimensions: {},
29
39
  imageUrl: 'url',
30
40
  session: {},
41
+ backgroundImageEnabled: true,
42
+ ...props,
31
43
  };
32
- const props = { ...defaults, ...extras };
33
- return shallow(<Container {...props} />, {
34
- disableLifecycleMethods: false,
35
- ...renderOpts,
36
- });
44
+ return render(
45
+ <ThemeProvider theme={theme}>
46
+ <Container {...defaultProps} />
47
+ </ThemeProvider>
48
+ );
37
49
  };
38
50
 
39
- describe('snapshot', () => {
40
- it('renders', () => {
41
- w = wrapper();
42
- expect(w).toMatchSnapshot();
43
- });
44
-
45
- it('renders disabled', () => {
46
- w = wrapper({ disabled: true });
47
- expect(w).toMatchSnapshot();
48
- });
49
- });
50
-
51
51
  describe('logic', () => {
52
52
  describe('setDimensions', () => {
53
53
  it('handles errors and clears interval', () => {
54
- const w = wrapper({}, { disableLifecycleMethods: true });
55
- w.instance().drawable = undefined;
56
- w.instance().setDimensions();
54
+ // Create a container instance directly to test the setDimensions method
55
+ const testInstance = new Container({
56
+ onSessionChange,
57
+ imageDimensions: {},
58
+ imageUrl: 'url',
59
+ session: {},
60
+ backgroundImageEnabled: true,
61
+ });
62
+
63
+ // Set drawable to undefined to trigger error handling
64
+ testInstance.drawable = undefined;
65
+
66
+ // Spy on clearInterval
67
+ const clearIntervalSpy = jest.spyOn(global, 'clearInterval');
68
+
69
+ // Call setDimensions which should handle the error and clear the interval
70
+ testInstance.setDimensions();
71
+
72
+ // Run all timers to execute the setInterval callback
57
73
  jest.runAllTimers();
58
- expect(clearInterval).toHaveBeenCalled();
74
+
75
+ // Verify clearInterval was called
76
+ expect(clearIntervalSpy).toHaveBeenCalled();
77
+
78
+ clearIntervalSpy.mockRestore();
59
79
  });
60
80
  });
61
81
  });