@pie-element/drawing-response 3.7.2 → 3.7.3-next.1008

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 (72) hide show
  1. package/CHANGELOG.md +158 -0
  2. package/configure/CHANGELOG.md +117 -0
  3. package/configure/lib/defaults.js +18 -3
  4. package/configure/lib/defaults.js.map +1 -1
  5. package/configure/lib/image-container.js +23 -14
  6. package/configure/lib/image-container.js.map +1 -1
  7. package/configure/lib/index.js +3 -9
  8. package/configure/lib/index.js.map +1 -1
  9. package/configure/lib/root.js +44 -11
  10. package/configure/lib/root.js.map +1 -1
  11. package/configure/package.json +3 -3
  12. package/configure/src/__tests__/__snapshots__/image-container.test.jsx.snap +3 -2
  13. package/configure/src/__tests__/__snapshots__/root.test.jsx.snap +22 -14
  14. package/configure/src/defaults.js +17 -2
  15. package/configure/src/image-container.jsx +71 -45
  16. package/configure/src/index.js +0 -6
  17. package/configure/src/root.jsx +53 -24
  18. package/controller/CHANGELOG.md +24 -0
  19. package/controller/lib/index.js +13 -9
  20. package/controller/lib/index.js.map +1 -1
  21. package/controller/package.json +1 -1
  22. package/controller/src/__tests__/index.test.js +18 -9
  23. package/controller/src/index.js +4 -1
  24. package/docs/config-schema.json +79 -0
  25. package/docs/config-schema.json.md +61 -1
  26. package/docs/demo/generate.js +2 -0
  27. package/docs/pie-schema.json +43 -0
  28. package/docs/pie-schema.json.md +35 -0
  29. package/lib/drawing-response/container.js +65 -15
  30. package/lib/drawing-response/container.js.map +1 -1
  31. package/lib/drawing-response/drawable-circle.js +1 -1
  32. package/lib/drawing-response/drawable-circle.js.map +1 -1
  33. package/lib/drawing-response/drawable-eraser.js +1 -1
  34. package/lib/drawing-response/drawable-eraser.js.map +1 -1
  35. package/lib/drawing-response/drawable-free-path.js +1 -1
  36. package/lib/drawing-response/drawable-free-path.js.map +1 -1
  37. package/lib/drawing-response/drawable-helper.js.map +1 -1
  38. package/lib/drawing-response/drawable-image.js +1 -0
  39. package/lib/drawing-response/drawable-image.js.map +1 -1
  40. package/lib/drawing-response/drawable-line.js +1 -1
  41. package/lib/drawing-response/drawable-line.js.map +1 -1
  42. package/lib/drawing-response/drawable-main.js +37 -14
  43. package/lib/drawing-response/drawable-main.js.map +1 -1
  44. package/lib/drawing-response/drawable-palette.js +1 -1
  45. package/lib/drawing-response/drawable-palette.js.map +1 -1
  46. package/lib/drawing-response/drawable-rectangle.js +1 -1
  47. package/lib/drawing-response/drawable-rectangle.js.map +1 -1
  48. package/lib/drawing-response/drawable-text.js +15 -5
  49. package/lib/drawing-response/drawable-text.js.map +1 -1
  50. package/lib/drawing-response/drawable-transformer.js +1 -1
  51. package/lib/drawing-response/drawable-transformer.js.map +1 -1
  52. package/lib/drawing-response/index.js +9 -9
  53. package/lib/drawing-response/index.js.map +1 -1
  54. package/lib/index.js +4 -1
  55. package/lib/index.js.map +1 -1
  56. package/package.json +4 -4
  57. package/src/drawing-response/__tests__/__snapshots__/container.test.jsx.snap +18 -130
  58. package/src/drawing-response/__tests__/__snapshots__/drawing-main.test.jsx.snap +26 -2
  59. package/src/drawing-response/__tests__/container.test.jsx +7 -0
  60. package/src/drawing-response/__tests__/drawing-main.test.jsx +2 -1
  61. package/src/drawing-response/container.jsx +55 -15
  62. package/src/drawing-response/drawable-image.jsx +1 -0
  63. package/src/drawing-response/drawable-main.jsx +39 -15
  64. package/src/drawing-response/drawable-text.jsx +7 -1
  65. package/src/drawing-response/index.jsx +6 -4
  66. package/src/index.js +5 -0
  67. package/module/configure.js +0 -1099
  68. package/module/controller.js +0 -66
  69. package/module/demo.js +0 -38
  70. package/module/element.js +0 -1893
  71. package/module/index.html +0 -16
  72. package/module/manifest.json +0 -14
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/drawing-response/index.jsx"],"names":["DrawingResponseComponent","props","state","showCorrect","hasError","model","disabled","imageDimensions","imageUrl","prompt","mode","teacherInstructions","session","onSessionChange","classes","errorMessage","isEvaluateMode","hidden","visible","__html","error","message","React","Component","propTypes","PropTypes","object","isRequired","func","styles","fontSize"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;;;IAEMA,wB;;;;;AACJ,oCAAYC,KAAZ,EAAmB;AAAA;;AAAA;AACjB,8BAAMA,KAAN;AACA,UAAKC,KAAL,GAAa;AACXC,MAAAA,WAAW,EAAE,KADF;AAEXC,MAAAA,QAAQ,EAAE;AAFC,KAAb;AAFiB;AAMlB;;;;WAMD,kBAAS;AAAA,wBAaH,KAAKH,KAbF;AAAA,0CAELI,KAFK;AAAA,UAGHC,QAHG,qBAGHA,QAHG;AAAA,UAIHC,eAJG,qBAIHA,eAJG;AAAA,UAKHC,QALG,qBAKHA,QALG;AAAA,UAMHC,MANG,qBAMHA,MANG;AAAA,UAOHC,IAPG,qBAOHA,IAPG;AAAA,UAQHC,mBARG,qBAQHA,mBARG;AAAA,UAULC,OAVK,eAULA,OAVK;AAAA,UAWLC,eAXK,eAWLA,eAXK;AAAA,UAYLC,OAZK,eAYLA,OAZK;AAAA,wBAc4B,KAAKZ,KAdjC;AAAA,UAcCE,QAdD,eAcCA,QAdD;AAAA,UAcWW,YAdX,eAcWA,YAdX;AAeP,UAAMC,cAAc,GAAGN,IAAI,KAAK,UAAhC;AAEA,aAAON,QAAQ,gBACb,mEAAwBW,YAAxB,CADa,gBAGb,6CACGJ,mBAAmB,iBAClB,gCAAC,iBAAD,CAAO,QAAP,qBACE,gCAAC,qBAAD;AACE,QAAA,MAAM,EAAE;AACNM,UAAAA,MAAM,EAAE,2BADF;AAENC,UAAAA,OAAO,EAAE;AAFH;AADV,sBAME;AAAK,QAAA,uBAAuB,EAAE;AAAEC,UAAAA,MAAM,EAAER;AAAV;AAA9B,QANF,CADF,eASE,2CATF,CAFJ,eAeE,gCAAC,sBAAD;AAAY,QAAA,SAAS,EAAEG,OAAO,CAACL;AAA/B,sBACE;AAAM,QAAA,uBAAuB,EAAE;AAAEU,UAAAA,MAAM,EAAEV;AAAV;AAA/B,QADF,CAfF,eAmBE,gCAAC,qBAAD;AACE,QAAA,OAAO,EAAEG,OADX;AAEE,QAAA,eAAe,EAAEC,eAFnB;AAGE,QAAA,cAAc,EAAEG,cAHlB;AAIE,QAAA,eAAe,EAAET,eAJnB;AAKE,QAAA,QAAQ,EAAEC,QALZ;AAME,QAAA,QAAQ,EAAEF;AANZ,QAnBF,CAHF;AAgCD;;;WArDD,kCAAgCc,KAAhC,EAAuC;AACrC,aAAO;AAAEhB,QAAAA,QAAQ,EAAE,IAAZ;AAAkBW,QAAAA,YAAY,EAAEK,KAAK,CAACC;AAAtC,OAAP;AACD;;;EAXoCC,kBAAMC,S;;AAiE7CvB,wBAAwB,CAACwB,SAAzB,GAAqC;AACnCV,EAAAA,OAAO,EAAEW,sBAAUC,MADgB;AAEnCrB,EAAAA,KAAK,EAAEoB,sBAAUC,MAAV,CAAiBC,UAFW;AAGnCd,EAAAA,eAAe,EAAEY,sBAAUG,IAAV,CAAeD,UAHG;AAInCf,EAAAA,OAAO,EAAEa,sBAAUC,MAAV,CAAiBC;AAJS,CAArC;;AAOA,IAAME,MAAM,GAAG,SAATA,MAAS;AAAA,SAAO;AACpBpB,IAAAA,MAAM,EAAE;AACNqB,MAAAA,QAAQ,EAAE;AADJ;AADY,GAAP;AAAA,CAAf;;eAMe,wBAAWD,MAAX,EAAmB7B,wBAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Typography from '@material-ui/core/Typography';\nimport { Collapsible } 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 disabled,\n imageDimensions,\n imageUrl,\n prompt,\n mode,\n teacherInstructions\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>An error occured: {errorMessage}</div>\n ) : (\n <div>\n {teacherInstructions && (\n <React.Fragment>\n <Collapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions'\n }}\n >\n <div dangerouslySetInnerHTML={{ __html: teacherInstructions }} />\n </Collapsible>\n <br />\n </React.Fragment>\n )}\n\n <Typography className={classes.prompt}>\n <span dangerouslySetInnerHTML={{ __html: prompt }} />\n </Typography>\n\n <Container\n session={session}\n onSessionChange={onSessionChange}\n isEvaluateMode={isEvaluateMode}\n imageDimensions={imageDimensions}\n imageUrl={imageUrl}\n disabled={disabled}\n />\n </div>\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 = () => ({\n prompt: {\n fontSize: 'inherit'\n }\n});\n\nexport default withStyles(styles)(DrawingResponseComponent);\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/drawing-response/index.jsx"],"names":["DrawingResponseComponent","props","state","showCorrect","hasError","model","disabled","imageDimensions","imageUrl","prompt","mode","teacherInstructions","backgroundImageEnabled","session","onSessionChange","classes","errorMessage","isEvaluateMode","hidden","visible","error","message","React","Component","propTypes","PropTypes","object","isRequired","func","styles","fontSize"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;;;IAEMA,wB;;;;;AACJ,oCAAYC,KAAZ,EAAmB;AAAA;;AAAA;AACjB,8BAAMA,KAAN;AACA,UAAKC,KAAL,GAAa;AACXC,MAAAA,WAAW,EAAE,KADF;AAEXC,MAAAA,QAAQ,EAAE;AAFC,KAAb;AAFiB;AAMlB;;;;WAMD,kBAAS;AACP,wBAaI,KAAKH,KAbT;AAAA,0CACEI,KADF;AAAA,UAEIC,QAFJ,qBAEIA,QAFJ;AAAA,UAGIC,eAHJ,qBAGIA,eAHJ;AAAA,UAIIC,QAJJ,qBAIIA,QAJJ;AAAA,UAKIC,MALJ,qBAKIA,MALJ;AAAA,UAMIC,IANJ,qBAMIA,IANJ;AAAA,UAOIC,mBAPJ,qBAOIA,mBAPJ;AAAA,oDAQIC,sBARJ;AAAA,UAQIA,sBARJ,sCAQ6B,IAR7B;AAAA,UAUEC,OAVF,eAUEA,OAVF;AAAA,UAWEC,eAXF,eAWEA,eAXF;AAAA,UAYEC,OAZF,eAYEA,OAZF;AAcA,wBAAmC,KAAKb,KAAxC;AAAA,UAAQE,QAAR,eAAQA,QAAR;AAAA,UAAkBY,YAAlB,eAAkBA,YAAlB;AACA,UAAMC,cAAc,GAAGP,IAAI,KAAK,UAAhC;AAEA,aAAON,QAAQ,gBACb,mEAAwBY,YAAxB,CADa,gBAGb,6CACGL,mBAAmB,iBAClB,gCAAC,iBAAD,CAAO,QAAP,qBACE,gCAAC,qBAAD;AACE,QAAA,MAAM,EAAE;AACNO,UAAAA,MAAM,EAAE,2BADF;AAENC,UAAAA,OAAO,EAAE;AAFH;AADV,sBAME,gCAAC,uBAAD;AAAe,QAAA,MAAM,EAAER;AAAvB,QANF,CADF,eASE,2CATF,CAFJ,eAeE,gCAAC,sBAAD;AAAY,QAAA,SAAS,EAAEI,OAAO,CAACN;AAA/B,sBACE,gCAAC,uBAAD;AAAe,QAAA,OAAO,EAAC,MAAvB;AAA8B,QAAA,MAAM,EAAEA;AAAtC,QADF,CAfF,eAmBE,gCAAC,qBAAD;AACE,QAAA,OAAO,EAAEI,OADX;AAEE,QAAA,eAAe,EAAEC,eAFnB;AAGE,QAAA,cAAc,EAAEG,cAHlB;AAIE,QAAA,eAAe,EAAEV,eAJnB;AAKE,QAAA,QAAQ,EAAEC,QALZ;AAME,QAAA,sBAAsB,EAAEI,sBAN1B;AAOE,QAAA,QAAQ,EAAEN;AAPZ,QAnBF,CAHF;AAiCD;;;WAvDD,kCAAgCc,KAAhC,EAAuC;AACrC,aAAO;AAAEhB,QAAAA,QAAQ,EAAE,IAAZ;AAAkBY,QAAAA,YAAY,EAAEI,KAAK,CAACC;AAAtC,OAAP;AACD;;;EAXoCC,kBAAMC,S;;AAmE7CvB,wBAAwB,CAACwB,SAAzB,GAAqC;AACnCT,EAAAA,OAAO,EAAEU,sBAAUC,MADgB;AAEnCrB,EAAAA,KAAK,EAAEoB,sBAAUC,MAAV,CAAiBC,UAFW;AAGnCb,EAAAA,eAAe,EAAEW,sBAAUG,IAAV,CAAeD,UAHG;AAInCd,EAAAA,OAAO,EAAEY,sBAAUC,MAAV,CAAiBC;AAJS,CAArC;;AAOA,IAAME,MAAM,GAAG,SAATA,MAAS;AAAA,SAAO;AACpBpB,IAAAA,MAAM,EAAE;AACNqB,MAAAA,QAAQ,EAAE;AADJ;AADY,GAAP;AAAA,CAAf;;eAMe,wBAAWD,MAAX,EAAmB7B,wBAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Typography from '@material-ui/core/Typography';\nimport {Collapsible, PreviewPrompt} 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 disabled,\n imageDimensions,\n imageUrl,\n prompt,\n mode,\n teacherInstructions,\n backgroundImageEnabled = true\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>An error occured: {errorMessage}</div>\n ) : (\n <div>\n {teacherInstructions && (\n <React.Fragment>\n <Collapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions'\n }}\n >\n <PreviewPrompt prompt={teacherInstructions} />\n </Collapsible>\n <br />\n </React.Fragment>\n )}\n\n <Typography className={classes.prompt}>\n <PreviewPrompt tagName=\"span\" prompt={prompt} />\n </Typography>\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 />\n </div>\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 = () => ({\n prompt: {\n fontSize: 'inherit'\n }\n});\n\nexport default withStyles(styles)(DrawingResponseComponent);\n"],"file":"index.js"}
package/lib/index.js CHANGED
@@ -37,7 +37,7 @@ var _drawingResponse = _interopRequireDefault(require("./drawing-response"));
37
37
 
38
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
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 { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
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
41
 
42
42
  var DrawingResponse = /*#__PURE__*/function (_HTMLElement) {
43
43
  (0, _inherits2["default"])(DrawingResponse, _HTMLElement);
@@ -80,6 +80,9 @@ var DrawingResponse = /*#__PURE__*/function (_HTMLElement) {
80
80
  }
81
81
  }, {
82
82
  key: "session",
83
+ get: function get() {
84
+ return this._session;
85
+ },
83
86
  set: function set(s) {
84
87
  this._session = s;
85
88
 
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["DrawingResponse","update","_session","drawables","texts","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;;;;;;;;;;;;;;;uGAkBF,UAACC,MAAD,EAAY;AAC3B,YAAKC,QAAL,CAAcC,SAAd,GAA0BF,MAAM,CAACE,SAAjC;AACA,YAAKD,QAAL,CAAcE,KAAd,GAAsBH,MAAM,CAACG,KAA7B;;AAEA,YAAKC,aAAL,CACE,IAAIC,oCAAJ,CAAwB,MAAKC,OAAL,CAAaC,WAAb,EAAxB,EAAoD,MAAKC,UAAL,EAApD,CADF;;AAIA,YAAKC,OAAL;AACD,K;;;;;;SA1BD,aAAUC,CAAV,EAAa;AACX,WAAKC,MAAL,GAAcD,CAAd;AAEA,WAAKN,aAAL,CACE,IAAIQ,8BAAJ,CACE,KAAKN,OAAL,CAAaC,WAAb,EADF,EAEE,KAAKC,UAAL,EAFF,EAGE,CAAC,CAAC,KAAKG,MAHT,CADF;;AAOA,WAAKF,OAAL;AACD;;;WAED,sBAAa;AACX,aAAO,KAAKR,QAAL,KAAkB,CAAC,yBAAQ,KAAKA,QAAL,CAAcC,SAAtB,CAAD,IAAqC,CAAC,yBAAQ,KAAKD,QAAL,CAAcE,KAAtB,CAAxD,CAAP;AACD;;;SAaD,aAAYU,CAAZ,EAAe;AACb,WAAKZ,QAAL,GAAgBY,CAAhB;;AACA,WAAKJ,OAAL;AACD;;;WAED,6BAAoB;AAClB,WAAKA,OAAL;AACD;;;WAED,mBAAU;AAAA;;AACR,UAAI,KAAKE,MAAL,IAAe,KAAKV,QAAxB,EAAkC;AAChC,YAAMa,EAAE,gBAAGC,kBAAMC,aAAN,CAAoBC,2BAApB,EAA8C;AACvDC,UAAAA,KAAK,EAAE,KAAKP,MAD2C;AAEvDQ,UAAAA,OAAO,EAAE,KAAKlB,QAFyC;AAGvDmB,UAAAA,eAAe,EAAE,KAAKC;AAHiC,SAA9C,CAAX;;AAKAC,6BAASC,MAAT,CAAgBT,EAAhB,EAAoB,IAApB,EAA0B,YAAM;AAC9B,yCAAW,MAAX;AACD,SAFD;AAGD;AACF;;;kDAjD0CU,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(\n new ModelSetEvent(\n this.tagName.toLowerCase(),\n this.isComplete(),\n !!this._model\n )\n );\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\n this.dispatchEvent(\n new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete())\n );\n\n this._render();\n };\n\n set session(s) {\n this._session = s;\n this._render();\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 ReactDOM.render(el, this, () => {\n renderMath(this);\n });\n }\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["DrawingResponse","update","_session","drawables","texts","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;;;;;;;;;;;;;;;uGAkBF,UAACC,MAAD,EAAY;AAC3B,YAAKC,QAAL,CAAcC,SAAd,GAA0BF,MAAM,CAACE,SAAjC;AACA,YAAKD,QAAL,CAAcE,KAAd,GAAsBH,MAAM,CAACG,KAA7B;;AAEA,YAAKC,aAAL,CACE,IAAIC,oCAAJ,CAAwB,MAAKC,OAAL,CAAaC,WAAb,EAAxB,EAAoD,MAAKC,UAAL,EAApD,CADF;;AAIA,YAAKC,OAAL;AACD,K;;;;;;SA1BD,aAAUC,CAAV,EAAa;AACX,WAAKC,MAAL,GAAcD,CAAd;AAEA,WAAKN,aAAL,CACE,IAAIQ,8BAAJ,CACE,KAAKN,OAAL,CAAaC,WAAb,EADF,EAEE,KAAKC,UAAL,EAFF,EAGE,CAAC,CAAC,KAAKG,MAHT,CADF;;AAOA,WAAKF,OAAL;AACD;;;WAED,sBAAa;AACX,aAAO,KAAKR,QAAL,KAAkB,CAAC,yBAAQ,KAAKA,QAAL,CAAcC,SAAtB,CAAD,IAAqC,CAAC,yBAAQ,KAAKD,QAAL,CAAcE,KAAtB,CAAxD,CAAP;AACD;;;SAkBD,eAAc;AACZ,aAAO,KAAKF,QAAZ;AACD,K;SAPD,aAAYY,CAAZ,EAAe;AACb,WAAKZ,QAAL,GAAgBY,CAAhB;;AACA,WAAKJ,OAAL;AACD;;;WAMD,6BAAoB;AAClB,WAAKA,OAAL;AACD;;;WAED,mBAAU;AAAA;;AACR,UAAI,KAAKE,MAAL,IAAe,KAAKV,QAAxB,EAAkC;AAChC,YAAMa,EAAE,gBAAGC,kBAAMC,aAAN,CAAoBC,2BAApB,EAA8C;AACvDC,UAAAA,KAAK,EAAE,KAAKP,MAD2C;AAEvDQ,UAAAA,OAAO,EAAE,KAAKlB,QAFyC;AAGvDmB,UAAAA,eAAe,EAAE,KAAKC;AAHiC,SAA9C,CAAX;;AAMAC,6BAASC,MAAT,CAAgBT,EAAhB,EAAoB,IAApB,EAA0B,YAAM;AAC9B,yCAAW,MAAX;AACD,SAFD;AAGD;AACF;;;kDAtD0CU,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(\n new ModelSetEvent(\n this.tagName.toLowerCase(),\n this.isComplete(),\n !!this._model\n )\n );\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\n this.dispatchEvent(\n new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete())\n );\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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/drawing-response",
3
- "version": "3.7.2",
3
+ "version": "3.7.3-next.1008+7ab630754",
4
4
  "description": "",
5
5
  "repository": "pie-framework/pie-elements",
6
6
  "publishConfig": {
@@ -11,8 +11,8 @@
11
11
  "@mdi/js": "^3.6.95",
12
12
  "@mdi/react": "^1.1.1",
13
13
  "@pie-framework/pie-player-events": "^0.1.0",
14
- "@pie-lib/math-rendering": "^2.3.8",
15
- "@pie-lib/render-ui": "^4.11.7",
14
+ "@pie-lib/math-rendering": "^2.4.3",
15
+ "@pie-lib/render-ui": "^4.12.9",
16
16
  "classnames": "^2.2.6",
17
17
  "enzyme-to-json": "^3.3.5",
18
18
  "konva": "^3.4.1",
@@ -24,7 +24,7 @@
24
24
  },
25
25
  "author": "pie framework developers",
26
26
  "license": "ISC",
27
- "gitHead": "c4ade45496a17fa2a49e6fe44f6bc500ea17580f",
27
+ "gitHead": "7ab6307548d6d1387d82263513e6483fe30872fa",
28
28
  "scripts": {
29
29
  "postpublish": "../../scripts/postpublish"
30
30
  },
@@ -212,7 +212,14 @@ exports[`Container snapshot renders 1`] = `
212
212
  />
213
213
  </div>
214
214
  </div>
215
- <div>
215
+ <div
216
+ style={
217
+ Object {
218
+ "height": 0,
219
+ "maxHeight": 0,
220
+ }
221
+ }
222
+ >
216
223
  <WithStyles(DrawableMain)
217
224
  TextEntry={
218
225
  TextDrawable {
@@ -240,6 +247,7 @@ exports[`Container snapshot renders 1`] = `
240
247
  onSessionChange={[MockFunction]}
241
248
  outlineColor="black"
242
249
  paintColor="red"
250
+ scale={1}
243
251
  session={Object {}}
244
252
  toolActive={
245
253
  Object {
@@ -256,134 +264,6 @@ exports[`Container snapshot renders 1`] = `
256
264
 
257
265
  exports[`Container snapshot renders disabled 1`] = `
258
266
  <div>
259
- <WithStyles(Palette)
260
- fillColor="white"
261
- fillList={
262
- Array [
263
- Object {
264
- "label": "no fill",
265
- "value": "transparent",
266
- },
267
- Object {
268
- "label": "lightblue",
269
- "value": "lightblue",
270
- },
271
- Object {
272
- "label": "lightyellow",
273
- "value": "lightyellow",
274
- },
275
- Object {
276
- "label": "red",
277
- "value": "red",
278
- },
279
- Object {
280
- "label": "orange",
281
- "value": "orange",
282
- },
283
- Object {
284
- "label": "yellow",
285
- "value": "yellow",
286
- },
287
- Object {
288
- "label": "violet",
289
- "value": "violet",
290
- },
291
- Object {
292
- "label": "blue",
293
- "value": "blue",
294
- },
295
- Object {
296
- "label": "green",
297
- "value": "green",
298
- },
299
- Object {
300
- "label": "white",
301
- "value": "white",
302
- },
303
- Object {
304
- "label": "black",
305
- "value": "black",
306
- },
307
- ]
308
- }
309
- onFillColorChange={[Function]}
310
- onOutlineColorChange={[Function]}
311
- onPaintColorChange={[Function]}
312
- outlineColor="black"
313
- outlineList={
314
- Array [
315
- Object {
316
- "label": "red",
317
- "value": "red",
318
- },
319
- Object {
320
- "label": "orange",
321
- "value": "orange",
322
- },
323
- Object {
324
- "label": "yellow",
325
- "value": "yellow",
326
- },
327
- Object {
328
- "label": "violet",
329
- "value": "violet",
330
- },
331
- Object {
332
- "label": "blue",
333
- "value": "blue",
334
- },
335
- Object {
336
- "label": "green",
337
- "value": "green",
338
- },
339
- Object {
340
- "label": "white",
341
- "value": "white",
342
- },
343
- Object {
344
- "label": "black",
345
- "value": "black",
346
- },
347
- ]
348
- }
349
- paintColor="red"
350
- paintList={
351
- Array [
352
- Object {
353
- "label": "red",
354
- "value": "red",
355
- },
356
- Object {
357
- "label": "orange",
358
- "value": "orange",
359
- },
360
- Object {
361
- "label": "yellow",
362
- "value": "yellow",
363
- },
364
- Object {
365
- "label": "violet",
366
- "value": "violet",
367
- },
368
- Object {
369
- "label": "blue",
370
- "value": "blue",
371
- },
372
- Object {
373
- "label": "green",
374
- "value": "green",
375
- },
376
- Object {
377
- "label": "white",
378
- "value": "white",
379
- },
380
- Object {
381
- "label": "black",
382
- "value": "black",
383
- },
384
- ]
385
- }
386
- />
387
267
  <div>
388
268
  <div>
389
269
  <div>
@@ -466,7 +346,14 @@ exports[`Container snapshot renders disabled 1`] = `
466
346
  />
467
347
  </div>
468
348
  </div>
469
- <div>
349
+ <div
350
+ style={
351
+ Object {
352
+ "height": 0,
353
+ "maxHeight": 0,
354
+ }
355
+ }
356
+ >
470
357
  <WithStyles(DrawableMain)
471
358
  TextEntry={
472
359
  TextDrawable {
@@ -495,6 +382,7 @@ exports[`Container snapshot renders disabled 1`] = `
495
382
  onSessionChange={[MockFunction]}
496
383
  outlineColor="black"
497
384
  paintColor="red"
385
+ scale={1}
498
386
  session={Object {}}
499
387
  toolActive={
500
388
  Object {
@@ -26,7 +26,12 @@ exports[`DrawingResponse DrawableMain snapshot renders 1`] = `
26
26
  </div>
27
27
  <div>
28
28
  <WithStyles(DrawableImage)
29
- dimensions={Object {}}
29
+ dimensions={
30
+ Object {
31
+ "height": NaN,
32
+ "width": NaN,
33
+ }
34
+ }
30
35
  url="url"
31
36
  />
32
37
  <ForwardRef
@@ -34,6 +39,8 @@ exports[`DrawingResponse DrawableMain snapshot renders 1`] = `
34
39
  height={350}
35
40
  onMouseMove={[Function]}
36
41
  onMouseUp={[Function]}
42
+ onTouchEnd={[Function]}
43
+ onTouchMove={[Function]}
37
44
  width={353}
38
45
  >
39
46
  <Layer />
@@ -58,7 +65,12 @@ exports[`DrawingResponse DrawableMain snapshot renders disabled 1`] = `
58
65
  </div>
59
66
  <div>
60
67
  <WithStyles(DrawableImage)
61
- dimensions={Object {}}
68
+ dimensions={
69
+ Object {
70
+ "height": NaN,
71
+ "width": NaN,
72
+ }
73
+ }
62
74
  url="url"
63
75
  />
64
76
  <ForwardRef
@@ -83,9 +95,13 @@ exports[`DrawingResponse DrawableText snapshot renders 1`] = `
83
95
  name="text_gcifqhhimf8k2d6g8hs"
84
96
  onClick={[Function]}
85
97
  onDblClick={[Function]}
98
+ onDblTap={[Function]}
86
99
  onDragEnd={[MockFunction]}
87
100
  onMouseDown={[Function]}
88
101
  onMouseUp={[Function]}
102
+ onTap={[Function]}
103
+ onTouchEnd={[Function]}
104
+ onTouchStart={[Function]}
89
105
  onTransform={[Function]}
90
106
  onTransformEnd={[MockFunction]}
91
107
  text="Double click to edit this text. Press Enter to submit."
@@ -98,6 +114,8 @@ exports[`DrawingResponse DrawableText snapshot renders 1`] = `
98
114
  key="transformer_gcifqhhimf8k2d6g8hs"
99
115
  onMouseDown={[Function]}
100
116
  onMouseUp={[Function]}
117
+ onTouchEnd={[Function]}
118
+ onTouchStart={[Function]}
101
119
  selectedShapeName="text_gcifqhhimf8k2d6g8hs"
102
120
  />
103
121
  </div>
@@ -127,9 +145,13 @@ exports[`DrawingResponse DrawableText snapshot when there is no value renders 1`
127
145
  name="text_gcifqhhimf8k2d6g8hs"
128
146
  onClick={[Function]}
129
147
  onDblClick={[Function]}
148
+ onDblTap={[Function]}
130
149
  onDragEnd={[MockFunction]}
131
150
  onMouseDown={[Function]}
132
151
  onMouseUp={[Function]}
152
+ onTap={[Function]}
153
+ onTouchEnd={[Function]}
154
+ onTouchStart={[Function]}
133
155
  onTransform={[Function]}
134
156
  onTransformEnd={[MockFunction]}
135
157
  text="Double click to edit this text. Press Enter to submit."
@@ -142,6 +164,8 @@ exports[`DrawingResponse DrawableText snapshot when there is no value renders 1`
142
164
  key="transformer_gcifqhhimf8k2d6g8hs"
143
165
  onMouseDown={[Function]}
144
166
  onMouseUp={[Function]}
167
+ onTouchEnd={[Function]}
168
+ onTouchStart={[Function]}
145
169
  selectedShapeName="text_gcifqhhimf8k2d6g8hs"
146
170
  />
147
171
  </div>
@@ -1,5 +1,12 @@
1
1
  import { shallow } from 'enzyme';
2
2
  import React from 'react';
3
+
4
+ global.MutationObserver = class {
5
+ constructor(callback) {}
6
+ disconnect() {}
7
+ observe(element, initObject) {}
8
+ };
9
+
3
10
  import { Container } from '../container';
4
11
 
5
12
  beforeEach(() => {
@@ -507,7 +507,8 @@ describe('DrawingResponse', () => {
507
507
  startx: 200,
508
508
  starty: 200,
509
509
  x: 300,
510
- y: 300
510
+ y: 300,
511
+ scale: 1
511
512
  };
512
513
  wrapper = mkWrapper('DrawableText', props, 'div');
513
514
  });
@@ -29,7 +29,8 @@ export class Container extends Component {
29
29
  session: PropTypes.object.isRequired,
30
30
  onSessionChange: PropTypes.func.isRequired,
31
31
  imageDimensions: PropTypes.object.isRequired,
32
- imageUrl: PropTypes.string.isRequired
32
+ imageUrl: PropTypes.string.isRequired,
33
+ backgroundImageEnabled: PropTypes.bool.isRequired
33
34
  };
34
35
 
35
36
  constructor(props) {
@@ -37,6 +38,7 @@ export class Container extends Component {
37
38
  const TextEntry = new DrawableText();
38
39
 
39
40
  this.state = {
41
+ scale: 1,
40
42
  drawableDimensions: {
41
43
  height: 0,
42
44
  width: 0
@@ -80,12 +82,42 @@ export class Container extends Component {
80
82
 
81
83
  componentDidMount() {
82
84
  this.setDimensions();
85
+
86
+ this.observer = new MutationObserver((mutations) => {
87
+ mutations.forEach(() => {
88
+ const target = document.getElementById('question-container')?.style?.cssText
89
+ const zoom = target?.substring(
90
+ target.indexOf('--pie-zoom') + 11,
91
+ target.lastIndexOf('%')
92
+ );
93
+ const zoomParsed = zoom?.replace(/\s/g, '');
94
+
95
+ if (zoomParsed) {
96
+ const newScale = parseFloat(zoomParsed) / 100;
97
+ if (newScale !== this.state.scale) {
98
+ this.setState({
99
+ scale: parseFloat(zoomParsed) / 100,
100
+ })
101
+ }
102
+ } else if (!zoomParsed && this.state.scale !== 1) {
103
+ this.setState({
104
+ scale: 1,
105
+ });
106
+ }
107
+ });
108
+ });
109
+
110
+ const target = document.getElementById('question-container');
111
+ if (target) {
112
+ this.observer.observe(target, { attributes : true, attributeFilter : ['style'] })
113
+ }
83
114
  }
84
115
 
85
116
  componentWillUnmount() {
86
117
  const { TextEntry } = this.state;
87
118
 
88
119
  TextEntry.removeEventListeners();
120
+ this.observer?.disconnect();
89
121
  }
90
122
 
91
123
  handleMakeToolActive(tool) {
@@ -131,7 +163,8 @@ export class Container extends Component {
131
163
  imageUrl,
132
164
  imageDimensions,
133
165
  onSessionChange,
134
- session
166
+ session,
167
+ backgroundImageEnabled
135
168
  } = this.props;
136
169
  const {
137
170
  drawableDimensions,
@@ -145,21 +178,25 @@ export class Container extends Component {
145
178
  TextEntry
146
179
  } = this.state;
147
180
 
181
+ const heightToUse = drawableDimensions.height * this.state.scale;
182
+
148
183
  return (
149
184
  <div className={classes.base}>
150
- <DrawablePalette
151
- fillColor={fillColor}
152
- fillList={fillColorList}
153
- outlineColor={outlineColor}
154
- outlineList={outlineColorList}
155
- paintColor={paintColor}
156
- paintList={paintColorList}
157
- onFillColorChange={color => this.handleColorChange('fill', color)}
158
- onOutlineColorChange={color =>
159
- this.handleColorChange('outline', color)
160
- }
161
- onPaintColorChange={color => this.handleColorChange('paint', color)}
162
- />
185
+ {!disabled &&
186
+ <DrawablePalette
187
+ fillColor={fillColor}
188
+ fillList={fillColorList}
189
+ outlineColor={outlineColor}
190
+ outlineList={outlineColorList}
191
+ paintColor={paintColor}
192
+ paintList={paintColorList}
193
+ onFillColorChange={color => this.handleColorChange('fill', color)}
194
+ onOutlineColorChange={color =>
195
+ this.handleColorChange('outline', color)
196
+ }
197
+ onPaintColorChange={color => this.handleColorChange('paint', color)}
198
+ />
199
+ }
163
200
 
164
201
  <div className={classes.box}>
165
202
  <div className={classes.toolbar}>
@@ -185,8 +222,10 @@ export class Container extends Component {
185
222
  this.drawable = drawable;
186
223
  }}
187
224
  className={classes.drawableHeight}
225
+ style={{ height: heightToUse, maxHeight: heightToUse }}
188
226
  >
189
227
  <DrawableMain
228
+ scale={this.state.scale}
190
229
  session={session}
191
230
  disabled={disabled}
192
231
  onSessionChange={onSessionChange}
@@ -198,6 +237,7 @@ export class Container extends Component {
198
237
  imageDimensions={imageDimensions}
199
238
  toolActive={toolActive}
200
239
  TextEntry={TextEntry}
240
+ backgroundImageEnabled={backgroundImageEnabled}
201
241
  />
202
242
  </div>
203
243
  </div>
@@ -5,6 +5,7 @@ import { withStyles } from '@material-ui/core/styles';
5
5
  const DrawableImage = ({ classes, url, dimensions: { height, width } }) => (
6
6
  <div className={classes.imageContainer}>
7
7
  <img
8
+ alt="drawing-response-image"
8
9
  className={classes.image}
9
10
  src={url}
10
11
  style={{
@@ -89,14 +89,18 @@ export class DrawableMain extends React.Component {
89
89
  onMouseOutElement = () => this.setState({ isOver: false });
90
90
 
91
91
  handleMouseDown = e => {
92
+ // ONLY IF MOBILE?
93
+ document.body.style.overflow = 'hidden';
94
+
92
95
  const { newDrawable, textIsSelected } = this.state;
93
- const { toolActive, fillColor, outlineColor } = this.props;
96
+ const { toolActive, fillColor, outlineColor, scale } = this.props;
94
97
 
95
98
  if (newDrawable.length === 0 && !textIsSelected) {
96
99
  const { x, y } = e.target.getStage().getPointerPosition();
100
+
97
101
  const newDrawable = factory(toolActive.type, {
98
- startx: x,
99
- starty: y,
102
+ startx: x / scale,
103
+ starty: y / scale,
100
104
  fillColor,
101
105
  outlineColor,
102
106
  createdAt: new Date()
@@ -109,13 +113,17 @@ export class DrawableMain extends React.Component {
109
113
  };
110
114
 
111
115
  handleMouseUp = e => {
116
+ // ONLY IF MOBILE?
117
+ document.body.style.overflow = 'initial';
118
+
112
119
  const { newDrawable, drawables } = this.state;
120
+ const { scale } = this.props;
113
121
 
114
122
  if (newDrawable.length === 1) {
115
123
  const { x, y } = e.target.getStage().getPointerPosition();
116
124
  const drawableToAdd = newDrawable[0];
117
125
 
118
- drawableToAdd.registerMovement(x, y);
126
+ drawableToAdd.registerMovement(x / scale, y / scale);
119
127
  drawables.push(drawableToAdd);
120
128
 
121
129
  this.setState(
@@ -130,12 +138,13 @@ export class DrawableMain extends React.Component {
130
138
 
131
139
  handleMouseMove = e => {
132
140
  const { newDrawable } = this.state;
141
+ const { scale } = this.props;
133
142
 
134
143
  if (newDrawable.length === 1) {
135
144
  const { x, y } = e.target.getStage().getPointerPosition();
136
145
  const updatedNewDrawable = newDrawable[0];
137
146
 
138
- updatedNewDrawable.registerMovement(x, y);
147
+ updatedNewDrawable.registerMovement(x / scale, y / scale);
139
148
 
140
149
  this.setState({
141
150
  newDrawable: [updatedNewDrawable]
@@ -185,7 +194,9 @@ export class DrawableMain extends React.Component {
185
194
  paintColor,
186
195
  outlineColor,
187
196
  TextEntry,
188
- toolActive: { type }
197
+ backgroundImageEnabled = true,
198
+ toolActive: { type },
199
+ scale
189
200
  } = this.props;
190
201
  const { isOver, newDrawable } = this.state;
191
202
 
@@ -205,7 +216,8 @@ export class DrawableMain extends React.Component {
205
216
  handleSessionChange: this.handleSessionChange,
206
217
  stage: this.stage,
207
218
  onMouseOverElement: this.onMouseOverElement,
208
- onMouseOutElement: this.onMouseOutElement
219
+ onMouseOutElement: this.onMouseOutElement,
220
+ scale
209
221
  };
210
222
 
211
223
  let listeners = {};
@@ -213,35 +225,45 @@ export class DrawableMain extends React.Component {
213
225
  if (!disabled) {
214
226
  listeners = {
215
227
  onMouseUp: this.handleMouseUp,
216
- onMouseMove: this.handleMouseMove
228
+ onTouchEnd: this.handleMouseUp,
229
+ onMouseMove: this.handleMouseMove,
230
+ onTouchMove: this.handleMouseMove,
217
231
  };
218
232
 
219
233
  if (!draggable) {
220
234
  listeners.onMouseDown = this.handleMouseDown;
235
+ listeners.onTouchStart = this.handleMouseDown;
221
236
  }
222
237
  }
223
238
 
239
+ const imageHeight = imageDimensions?.height * scale;
240
+ const imageWidth = imageDimensions?.width * scale;
241
+
224
242
  return (
225
243
  <div>
226
244
  <div className={classes.undoControls}>
227
- <Button disabled={disabled} onClick={this.handleUndo} label="Undo" />
228
- <Button disabled={disabled} onClick={this.handleClearAll} label="Clear all" />
245
+ <Button disabled={disabled} onClick={this.handleUndo} label="Undo"/>
246
+ <Button disabled={disabled} onClick={this.handleClearAll} label="Clear all"/>
229
247
  </div>
230
248
  <div className={classes.base}>
231
- {imageUrl && (
232
- <ImageBackground dimensions={imageDimensions} url={imageUrl} />
249
+ {backgroundImageEnabled && imageUrl && (
250
+ <ImageBackground
251
+ dimensions={{ height: imageHeight, width: imageWidth }}
252
+ url={imageUrl}/>
233
253
  )}
234
254
 
235
255
  {TextEntry.renderTextareas()}
236
256
 
237
257
  <Stage
258
+ scaleX={scale}
259
+ scaleY={scale}
238
260
  ref={ref => {
239
261
  this.stage = ref;
240
262
  }}
241
263
  className={classnames(classes.stage, {
242
264
  [classes.active]:
243
- draggable &&
244
- (isOver || (newDrawable && newDrawable.length === 1))
265
+ draggable &&
266
+ (isOver || (newDrawable && newDrawable.length === 1))
245
267
  })}
246
268
  height={drawableDimensions.height}
247
269
  width={drawableDimensions.width}
@@ -297,7 +319,9 @@ DrawableMain.propTypes = {
297
319
  imageUrl: PropTypes.string.isRequired,
298
320
  TextEntry: PropTypes.object.isRequired,
299
321
  toolActive: PropTypes.object.isRequired,
300
- session: PropTypes.object.isRequired
322
+ session: PropTypes.object.isRequired,
323
+ backgroundImageEnabled: PropTypes.bool.isRequired,
324
+ scale: PropTypes.number.isRequired
301
325
  };
302
326
 
303
327
  export default withStyles(styles)(DrawableMain);