@pie-element/drawing-response 6.0.1-next.24 → 6.0.1-next.39

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.
@@ -300,7 +300,7 @@ exports.ImageContainer = ImageContainer;
300
300
  var styles = function styles(theme) {
301
301
  return {
302
302
  base: {
303
- marginTop: theme.spacing.unit * 2
303
+ marginTop: theme.spacing.unit
304
304
  },
305
305
  box: {
306
306
  border: '1px solid #E0E1E6',
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/image-container.jsx"],"names":["isImage","file","imageType","type","match","ImageContainer","props","onImageUpload","reader","FileReader","onloadend","result","readAsDataURL","e","preventDefault","target","files","handleFileRead","setState","dropzoneActive","dataTransfer","items","kind","getAsFile","makeDropzoneInactive","state","makeDropzoneActive","dragEnabled","input","click","offsetHeight","offsetWidth","naturalHeight","naturalWidth","onUpdateImageDimension","imageDimensions","resizeHandle","resize","dimensions","height","width","imageAspectRatio","addEventListener","initialiseResize","window","startResizing","stopResizing","handleEnableDrag","removeEventListener","box","image","maxImageWidth","maxImageHeight","bounds","getBoundingClientRect","x","clientX","left","y","clientY","top","fitsContainer","hasMinimumWidth","style","handleDisableDrag","imageSection","positionInfo","label","classes","handleInputClick","handleUploadImage","ref","imageUrl","base","boxActive","onDragExit","handleOnDragExit","onDragLeave","onDragOver","handleOnDragOver","onDrop","handleOnDrop","toolbar","renderUploadControl","drawableHeight","imageContainer","handleOnImageLoad","undefined","maxWidth","maxHeight","centered","Component","styles","theme","marginTop","spacing","unit","border","borderRadius","alignItems","display","flexDirection","justifyContent","minHeight","position","borderBottom","borderRight","bottom","cursor","right","backgroundColor","borderTopLeftRadius","borderTopRightRadius","padding","propTypes","PropTypes","object","isRequired","string","func"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport Button from './button';\n\nconst isImage = (file) => {\n const imageType = /image.*/;\n return file.type.match(imageType);\n};\n\nexport class ImageContainer extends Component {\n constructor(props) {\n super(props);\n this.state = {\n maxImageWidth: '100%',\n maxImageHeight: 'auto',\n dragEnabled: true,\n dropzoneActive: false,\n };\n }\n\n componentDidMount() {\n if (this.imageSection) {\n const positionInfo = this.imageSection.getBoundingClientRect();\n const { height, width } = positionInfo;\n this.setState({\n maxImageWidth: width,\n maxImageHeight: height,\n });\n }\n }\n\n handleFileRead = (file) => {\n const { onImageUpload } = this.props;\n const reader = new FileReader();\n reader.onloadend = () => {\n onImageUpload(reader.result);\n };\n reader.readAsDataURL(file);\n };\n\n handleUploadImage = (e) => {\n e.preventDefault();\n const file = e.target.files[0];\n this.handleFileRead(file);\n };\n\n makeDropzoneActive = () => this.setState({ dropzoneActive: true });\n\n makeDropzoneInactive = () => this.setState({ dropzoneActive: false });\n\n handleOnDrop = (e) => {\n e.preventDefault();\n const { items, files } = e.dataTransfer;\n\n if (items && items[0].kind === 'file') {\n const file = items[0].getAsFile();\n if (isImage(file)) {\n this.handleFileRead(file);\n }\n } else if (isImage(files[0])) {\n this.handleFileRead(files[0]);\n }\n\n this.makeDropzoneInactive();\n };\n\n handleOnDragOver = (e) => {\n e.preventDefault();\n const { dropzoneActive } = this.state;\n\n if (!dropzoneActive) {\n this.makeDropzoneActive();\n }\n };\n\n handleOnDragExit = (e) => {\n e.preventDefault();\n this.makeDropzoneInactive();\n };\n\n handleEnableDrag = () => this.setState({ dragEnabled: true });\n handleDisableDrag = () => this.setState({ dragEnabled: false });\n handleInputClick = () => this.input.click();\n\n handleOnImageLoad = ({ target: { offsetHeight, offsetWidth, naturalHeight, naturalWidth } }) => {\n const { onUpdateImageDimension, imageDimensions } = this.props;\n const resizeHandle = this.resize;\n\n const dimensions = {\n height: (imageDimensions && imageDimensions.height) || offsetHeight || naturalHeight,\n width: (imageDimensions && imageDimensions.width) || offsetWidth || naturalWidth,\n };\n\n // check if aspect ratio is not respected on replacing image\n const imageAspectRatio = naturalWidth / naturalHeight;\n\n if (dimensions.width !== dimensions.height * imageAspectRatio) {\n dimensions.width = dimensions.height * imageAspectRatio;\n }\n\n this.setState({ dimensions });\n onUpdateImageDimension(dimensions);\n\n resizeHandle.addEventListener('mousedown', this.initialiseResize, false);\n };\n\n initialiseResize = () => {\n window.addEventListener('mousemove', this.startResizing, false);\n window.addEventListener('mouseup', this.stopResizing, false);\n };\n\n stopResizing = () => {\n const { onUpdateImageDimension } = this.props;\n const { dimensions } = this.state;\n\n this.handleEnableDrag();\n onUpdateImageDimension(dimensions);\n\n window.removeEventListener('mousemove', this.startResizing, false);\n window.removeEventListener('mouseup', this.stopResizing, false);\n };\n\n startResizing = (e) => {\n const box = this.image;\n const { maxImageWidth, maxImageHeight, dimensions } = this.state;\n\n const bounds = e.target.getBoundingClientRect();\n const x = e.clientX - bounds.left;\n const y = e.clientY - bounds.top;\n\n const imageAspectRatio = dimensions.width / dimensions.height;\n const fitsContainer = x <= maxImageWidth + 5 && x / imageAspectRatio <= maxImageHeight + 5;\n const hasMinimumWidth = x > 150 && y > 150;\n\n if (fitsContainer && hasMinimumWidth && box) {\n box.style.width = `${x}px`;\n box.style.height = `${x / imageAspectRatio}px`;\n\n this.setState({\n dimensions: {\n width: x,\n height: x / imageAspectRatio,\n },\n });\n }\n\n this.handleDisableDrag();\n };\n\n renderUploadControl(label) {\n const { classes } = this.props;\n\n return (\n <div>\n <Button label={label} onClick={this.handleInputClick} />\n <input\n accept=\"image/*\"\n className={classes.input}\n onChange={this.handleUploadImage}\n ref={(ref) => {\n this.input = ref;\n }}\n type=\"file\"\n />\n </div>\n );\n }\n\n render() {\n const { classes, imageUrl, imageDimensions } = this.props;\n const { dropzoneActive, dragEnabled, maxImageHeight, maxImageWidth } = this.state;\n\n return (\n <div className={classes.base}>\n <div\n className={`${classes.box} ${dropzoneActive ? classes.boxActive : ''}`}\n {...(dragEnabled\n ? {\n onDragExit: this.handleOnDragExit,\n onDragLeave: this.handleOnDragExit,\n onDragOver: this.handleOnDragOver,\n onDrop: this.handleOnDrop,\n }\n : {})}\n >\n <div className={classes.toolbar}>{this.renderUploadControl(imageUrl ? 'Replace Image' : 'Upload Image')}</div>\n\n <div\n ref={(ref) => {\n this.imageSection = ref;\n }}\n className={classes.drawableHeight}\n >\n {imageUrl ? (\n <div className={classes.imageContainer}>\n <img\n className={classes.image}\n height=\"auto\"\n onLoad={this.handleOnImageLoad}\n ref={(ref) => {\n this.image = ref;\n }}\n src={imageUrl}\n style={{\n width: imageDimensions && imageDimensions.width ? imageDimensions.width : undefined,\n maxWidth: maxImageWidth,\n maxHeight: maxImageHeight,\n }}\n alt=\"\"\n />\n <div\n ref={(ref) => {\n this.resize = ref;\n }}\n className={classes.resize}\n />\n </div>\n ) : (\n <div className={`${classes.drawableHeight} ${classes.centered}`}>\n <label>Drag and drop or upload image from computer</label>\n <br />\n {this.renderUploadControl('Upload Image')}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n base: {\n marginTop: theme.spacing.unit * 2,\n },\n box: {\n border: '1px solid #E0E1E6',\n borderRadius: '5px',\n },\n boxActive: {\n border: '1px solid #0032C2',\n },\n centered: {\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n },\n drawableHeight: {\n minHeight: 350,\n },\n image: {\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n },\n imageContainer: {\n position: 'relative',\n width: 'fit-content',\n },\n resize: {\n borderBottom: '1px solid #727272',\n borderRight: '1px solid #727272',\n bottom: '-10px',\n cursor: 'se-resize',\n height: '10px',\n position: 'absolute',\n right: '-10px',\n width: '10px',\n },\n input: {\n display: 'none',\n },\n toolbar: {\n backgroundColor: '#ECEDF1',\n borderBottom: '1px solid #E0E1E6',\n borderTopLeftRadius: '5px',\n borderTopRightRadius: '5px',\n display: 'flex',\n padding: '12px 8px',\n },\n});\n\nImageContainer.propTypes = {\n classes: PropTypes.object.isRequired,\n imageUrl: PropTypes.string.isRequired,\n onImageUpload: PropTypes.func.isRequired,\n onUpdateImageDimension: PropTypes.func.isRequired,\n};\n\nexport default withStyles(styles)(ImageContainer);\n"],"file":"image-container.js"}
1
+ {"version":3,"sources":["../src/image-container.jsx"],"names":["isImage","file","imageType","type","match","ImageContainer","props","onImageUpload","reader","FileReader","onloadend","result","readAsDataURL","e","preventDefault","target","files","handleFileRead","setState","dropzoneActive","dataTransfer","items","kind","getAsFile","makeDropzoneInactive","state","makeDropzoneActive","dragEnabled","input","click","offsetHeight","offsetWidth","naturalHeight","naturalWidth","onUpdateImageDimension","imageDimensions","resizeHandle","resize","dimensions","height","width","imageAspectRatio","addEventListener","initialiseResize","window","startResizing","stopResizing","handleEnableDrag","removeEventListener","box","image","maxImageWidth","maxImageHeight","bounds","getBoundingClientRect","x","clientX","left","y","clientY","top","fitsContainer","hasMinimumWidth","style","handleDisableDrag","imageSection","positionInfo","label","classes","handleInputClick","handleUploadImage","ref","imageUrl","base","boxActive","onDragExit","handleOnDragExit","onDragLeave","onDragOver","handleOnDragOver","onDrop","handleOnDrop","toolbar","renderUploadControl","drawableHeight","imageContainer","handleOnImageLoad","undefined","maxWidth","maxHeight","centered","Component","styles","theme","marginTop","spacing","unit","border","borderRadius","alignItems","display","flexDirection","justifyContent","minHeight","position","borderBottom","borderRight","bottom","cursor","right","backgroundColor","borderTopLeftRadius","borderTopRightRadius","padding","propTypes","PropTypes","object","isRequired","string","func"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport Button from './button';\n\nconst isImage = (file) => {\n const imageType = /image.*/;\n return file.type.match(imageType);\n};\n\nexport class ImageContainer extends Component {\n constructor(props) {\n super(props);\n this.state = {\n maxImageWidth: '100%',\n maxImageHeight: 'auto',\n dragEnabled: true,\n dropzoneActive: false,\n };\n }\n\n componentDidMount() {\n if (this.imageSection) {\n const positionInfo = this.imageSection.getBoundingClientRect();\n const { height, width } = positionInfo;\n this.setState({\n maxImageWidth: width,\n maxImageHeight: height,\n });\n }\n }\n\n handleFileRead = (file) => {\n const { onImageUpload } = this.props;\n const reader = new FileReader();\n reader.onloadend = () => {\n onImageUpload(reader.result);\n };\n reader.readAsDataURL(file);\n };\n\n handleUploadImage = (e) => {\n e.preventDefault();\n const file = e.target.files[0];\n this.handleFileRead(file);\n };\n\n makeDropzoneActive = () => this.setState({ dropzoneActive: true });\n\n makeDropzoneInactive = () => this.setState({ dropzoneActive: false });\n\n handleOnDrop = (e) => {\n e.preventDefault();\n const { items, files } = e.dataTransfer;\n\n if (items && items[0].kind === 'file') {\n const file = items[0].getAsFile();\n if (isImage(file)) {\n this.handleFileRead(file);\n }\n } else if (isImage(files[0])) {\n this.handleFileRead(files[0]);\n }\n\n this.makeDropzoneInactive();\n };\n\n handleOnDragOver = (e) => {\n e.preventDefault();\n const { dropzoneActive } = this.state;\n\n if (!dropzoneActive) {\n this.makeDropzoneActive();\n }\n };\n\n handleOnDragExit = (e) => {\n e.preventDefault();\n this.makeDropzoneInactive();\n };\n\n handleEnableDrag = () => this.setState({ dragEnabled: true });\n handleDisableDrag = () => this.setState({ dragEnabled: false });\n handleInputClick = () => this.input.click();\n\n handleOnImageLoad = ({ target: { offsetHeight, offsetWidth, naturalHeight, naturalWidth } }) => {\n const { onUpdateImageDimension, imageDimensions } = this.props;\n const resizeHandle = this.resize;\n\n const dimensions = {\n height: (imageDimensions && imageDimensions.height) || offsetHeight || naturalHeight,\n width: (imageDimensions && imageDimensions.width) || offsetWidth || naturalWidth,\n };\n\n // check if aspect ratio is not respected on replacing image\n const imageAspectRatio = naturalWidth / naturalHeight;\n\n if (dimensions.width !== dimensions.height * imageAspectRatio) {\n dimensions.width = dimensions.height * imageAspectRatio;\n }\n\n this.setState({ dimensions });\n onUpdateImageDimension(dimensions);\n\n resizeHandle.addEventListener('mousedown', this.initialiseResize, false);\n };\n\n initialiseResize = () => {\n window.addEventListener('mousemove', this.startResizing, false);\n window.addEventListener('mouseup', this.stopResizing, false);\n };\n\n stopResizing = () => {\n const { onUpdateImageDimension } = this.props;\n const { dimensions } = this.state;\n\n this.handleEnableDrag();\n onUpdateImageDimension(dimensions);\n\n window.removeEventListener('mousemove', this.startResizing, false);\n window.removeEventListener('mouseup', this.stopResizing, false);\n };\n\n startResizing = (e) => {\n const box = this.image;\n const { maxImageWidth, maxImageHeight, dimensions } = this.state;\n\n const bounds = e.target.getBoundingClientRect();\n const x = e.clientX - bounds.left;\n const y = e.clientY - bounds.top;\n\n const imageAspectRatio = dimensions.width / dimensions.height;\n const fitsContainer = x <= maxImageWidth + 5 && x / imageAspectRatio <= maxImageHeight + 5;\n const hasMinimumWidth = x > 150 && y > 150;\n\n if (fitsContainer && hasMinimumWidth && box) {\n box.style.width = `${x}px`;\n box.style.height = `${x / imageAspectRatio}px`;\n\n this.setState({\n dimensions: {\n width: x,\n height: x / imageAspectRatio,\n },\n });\n }\n\n this.handleDisableDrag();\n };\n\n renderUploadControl(label) {\n const { classes } = this.props;\n\n return (\n <div>\n <Button label={label} onClick={this.handleInputClick} />\n <input\n accept=\"image/*\"\n className={classes.input}\n onChange={this.handleUploadImage}\n ref={(ref) => {\n this.input = ref;\n }}\n type=\"file\"\n />\n </div>\n );\n }\n\n render() {\n const { classes, imageUrl, imageDimensions } = this.props;\n const { dropzoneActive, dragEnabled, maxImageHeight, maxImageWidth } = this.state;\n\n return (\n <div className={classes.base}>\n <div\n className={`${classes.box} ${dropzoneActive ? classes.boxActive : ''}`}\n {...(dragEnabled\n ? {\n onDragExit: this.handleOnDragExit,\n onDragLeave: this.handleOnDragExit,\n onDragOver: this.handleOnDragOver,\n onDrop: this.handleOnDrop,\n }\n : {})}\n >\n <div className={classes.toolbar}>{this.renderUploadControl(imageUrl ? 'Replace Image' : 'Upload Image')}</div>\n\n <div\n ref={(ref) => {\n this.imageSection = ref;\n }}\n className={classes.drawableHeight}\n >\n {imageUrl ? (\n <div className={classes.imageContainer}>\n <img\n className={classes.image}\n height=\"auto\"\n onLoad={this.handleOnImageLoad}\n ref={(ref) => {\n this.image = ref;\n }}\n src={imageUrl}\n style={{\n width: imageDimensions && imageDimensions.width ? imageDimensions.width : undefined,\n maxWidth: maxImageWidth,\n maxHeight: maxImageHeight,\n }}\n alt=\"\"\n />\n <div\n ref={(ref) => {\n this.resize = ref;\n }}\n className={classes.resize}\n />\n </div>\n ) : (\n <div className={`${classes.drawableHeight} ${classes.centered}`}>\n <label>Drag and drop or upload image from computer</label>\n <br />\n {this.renderUploadControl('Upload Image')}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n base: {\n marginTop: theme.spacing.unit,\n },\n box: {\n border: '1px solid #E0E1E6',\n borderRadius: '5px',\n },\n boxActive: {\n border: '1px solid #0032C2',\n },\n centered: {\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n },\n drawableHeight: {\n minHeight: 350,\n },\n image: {\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n },\n imageContainer: {\n position: 'relative',\n width: 'fit-content',\n },\n resize: {\n borderBottom: '1px solid #727272',\n borderRight: '1px solid #727272',\n bottom: '-10px',\n cursor: 'se-resize',\n height: '10px',\n position: 'absolute',\n right: '-10px',\n width: '10px',\n },\n input: {\n display: 'none',\n },\n toolbar: {\n backgroundColor: '#ECEDF1',\n borderBottom: '1px solid #E0E1E6',\n borderTopLeftRadius: '5px',\n borderTopRightRadius: '5px',\n display: 'flex',\n padding: '12px 8px',\n },\n});\n\nImageContainer.propTypes = {\n classes: PropTypes.object.isRequired,\n imageUrl: PropTypes.string.isRequired,\n onImageUpload: PropTypes.func.isRequired,\n onUpdateImageDimension: PropTypes.func.isRequired,\n};\n\nexport default withStyles(styles)(ImageContainer);\n"],"file":"image-container.js"}
@@ -149,9 +149,7 @@ var Root = /*#__PURE__*/function (_React$Component) {
149
149
  spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),
150
150
  rubricEnabled: (withRubric === null || withRubric === void 0 ? void 0 : withRubric.settings) && toggle(withRubric === null || withRubric === void 0 ? void 0 : withRubric.label)
151
151
  };
152
- return /*#__PURE__*/_react["default"].createElement("div", {
153
- className: classes.base
154
- }, /*#__PURE__*/_react["default"].createElement(_configUi.layout.ConfigLayout, {
152
+ return /*#__PURE__*/_react["default"].createElement(_configUi.layout.ConfigLayout, {
155
153
  hideSettings: settingsPanelDisabled,
156
154
  settings: /*#__PURE__*/_react["default"].createElement(Panel, {
157
155
  model: model,
@@ -163,11 +161,9 @@ var Root = /*#__PURE__*/function (_React$Component) {
163
161
  Properties: panelProperties
164
162
  }
165
163
  })
166
- }, /*#__PURE__*/_react["default"].createElement("div", {
167
- className: classes.regular
168
164
  }, teacherInstructionsEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
169
165
  label: teacherInstructions.label,
170
- className: classes.prompt
166
+ className: classes.promptHolder
171
167
  }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
172
168
  markup: model.teacherInstructions || '',
173
169
  onChange: this.onTeacherInstructionsChanged,
@@ -185,7 +181,7 @@ var Root = /*#__PURE__*/function (_React$Component) {
185
181
  }]
186
182
  })), promptEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
187
183
  label: "Item Stem",
188
- className: classes.prompt
184
+ className: classes.promptHolder
189
185
  }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
190
186
  markup: model.prompt,
191
187
  onChange: this.onPromptChanged,
@@ -200,15 +196,14 @@ var Root = /*#__PURE__*/function (_React$Component) {
200
196
  }, {
201
197
  language: 'special'
202
198
  }]
203
- })), backgroundImageEnabled && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
204
- className: classes.label,
199
+ })), backgroundImageEnabled && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
205
200
  variant: "subheading"
206
201
  }, "Define Background Image"), /*#__PURE__*/_react["default"].createElement(_imageContainer["default"], {
207
202
  imageUrl: model.imageUrl,
208
203
  onUpdateImageDimension: this.onUpdateImageDimension,
209
204
  onImageUpload: this.onImageUpload,
210
205
  imageDimensions: model.imageDimensions
211
- })))));
206
+ })));
212
207
  }
213
208
  }]);
214
209
  return Root;
@@ -218,18 +213,10 @@ exports.Root = Root;
218
213
 
219
214
  var styles = function styles(theme) {
220
215
  return {
221
- base: {
222
- marginTop: theme.spacing.unit * 3
223
- },
224
- label: {
225
- marginTop: theme.spacing.unit * 4
226
- },
227
- prompt: {
216
+ promptHolder: {
228
217
  paddingTop: theme.spacing.unit * 2,
218
+ marginBottom: theme.spacing.unit * 2,
229
219
  width: '100%'
230
- },
231
- regular: {
232
- marginBottom: theme.spacing.unit * 3
233
220
  }
234
221
  };
235
222
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/root.jsx"],"names":["Panel","settings","toggle","Root","prompt","props","model","onModelChanged","update","teacherInstructions","dimensions","imageDimensions","imageUrl","classes","configuration","imageSupport","onConfigurationChanged","uploadSoundSupport","backgroundImage","maxImageWidth","maxImageHeight","settingsPanelDisabled","spellCheck","withRubric","backgroundImageEnabled","promptEnabled","spellCheckEnabled","teacherInstructionsEnabled","toolbarEditorPosition","defaultImageMaxWidth","defaultImageMaxHeight","toolbarOpts","position","panelSettings","label","panelProperties","rubricEnabled","base","Settings","Properties","regular","onTeacherInstructionsChanged","language","onPromptChanged","onUpdateImageDimension","onImageUpload","React","Component","styles","theme","marginTop","spacing","unit","paddingTop","width","marginBottom","propTypes","PropTypes","object","isRequired","shape","add","func"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;;;;;;;;;AAEA,IAAQA,KAAR,GAA0BC,kBAA1B,CAAQD,KAAR;AAAA,IAAeE,MAAf,GAA0BD,kBAA1B,CAAeC,MAAf;;IAEaC,I;;;;;;;;;;;;;;;wGACO,UAACC,MAAD,EAAY;AAC5B,wBAAkC,MAAKC,KAAvC;AAAA,UAAQC,KAAR,eAAQA,KAAR;AAAA,UAAeC,cAAf,eAAeA,cAAf;AACA,UAAMC,MAAM,GAAG,2BAAUF,KAAV,CAAf;AAEAC,MAAAA,cAAc,iCAAMC,MAAN;AAAcJ,QAAAA,MAAM,EAANA;AAAd,SAAd;AACD,K;qHAE8B,UAACK,mBAAD,EAAyB;AACtD,yBAAkC,MAAKJ,KAAvC;AAAA,UAAQC,KAAR,gBAAQA,KAAR;AAAA,UAAeC,cAAf,gBAAeA,cAAf;AAEAA,MAAAA,cAAc,iCAAMD,KAAN;AAAaG,QAAAA,mBAAmB,EAAnBA;AAAb,SAAd;AACD,K;+GAEwB,UAACC,UAAD,EAAgB;AACvC,yBAAkC,MAAKL,KAAvC;AAAA,UAAQC,KAAR,gBAAQA,KAAR;AAAA,UAAeC,cAAf,gBAAeA,cAAf;AAEAA,MAAAA,cAAc,iCAAMD,KAAN;AAAaK,QAAAA,eAAe,EAAED;AAA9B,SAAd;AACD,K;sGAEe,UAACE,QAAD,EAAc;AAC5B,yBAAkC,MAAKP,KAAvC;AAAA,UAAQC,KAAR,gBAAQA,KAAR;AAAA,UAAeC,cAAf,gBAAeA,cAAf;AAEAA,MAAAA,cAAc,iCAAMD,KAAN;AAAaM,QAAAA,QAAQ,EAARA;AAAb,SAAd;AACD,K;;;;;;WAED,kBAAS;AACP,yBACE,KAAKP,KADP;AAAA,UAAQQ,OAAR,gBAAQA,OAAR;AAAA,UAAiBC,aAAjB,gBAAiBA,aAAjB;AAAA,UAAgCC,YAAhC,gBAAgCA,YAAhC;AAAA,UAA8CT,KAA9C,gBAA8CA,KAA9C;AAAA,UAAqDU,sBAArD,gBAAqDA,sBAArD;AAAA,UAA6ET,cAA7E,gBAA6EA,cAA7E;AAAA,UAA6FU,kBAA7F,gBAA6FA,kBAA7F;;AAEA,iBASIH,aAAa,IAAI,EATrB;AAAA,sCACEI,eADF;AAAA,UACEA,eADF,qCACoB,EADpB;AAAA,oCAEEC,aAFF;AAAA,UAEEA,aAFF,mCAEkB,EAFlB;AAAA,qCAGEC,cAHF;AAAA,UAGEA,cAHF,oCAGmB,EAHnB;AAAA,6BAIEhB,MAJF;AAAA,UAIEA,MAJF,4BAIW,EAJX;AAAA,UAKEiB,qBALF,QAKEA,qBALF;AAAA,iCAMEC,UANF;AAAA,UAMEA,UANF,gCAMe,EANf;AAAA,uCAOEb,mBAPF;AAAA,UAOEA,mBAPF,sCAOwB,EAPxB;AAAA,iCAQEc,UARF;AAAA,UAQEA,UARF,gCAQe,EARf;;AAUA,kBAMIjB,KAAK,IAAI,EANb;AAAA,UACEkB,sBADF,SACEA,sBADF;AAAA,UAEEC,aAFF,SAEEA,aAFF;AAAA,UAGEC,iBAHF,SAGEA,iBAHF;AAAA,UAIEC,0BAJF,SAIEA,0BAJF;AAAA,UAKEC,qBALF,SAKEA,qBALF;;AAQA,UAAMC,oBAAoB,GAAGV,aAAa,IAAIA,aAAa,CAACf,MAA5D;AACA,UAAM0B,qBAAqB,GAAGV,cAAc,IAAIA,cAAc,CAAChB,MAA/D;AAEA,UAAM2B,WAAW,GAAG;AAClBC,QAAAA,QAAQ,EAAEJ,qBAAqB,KAAK,KAA1B,GAAkC,KAAlC,GAA0C;AADlC,OAApB;AAIA,UAAMK,aAAa,GAAG;AACpBT,QAAAA,sBAAsB,EAAEN,eAAe,CAACjB,QAAhB,IAA4BC,MAAM,CAACgB,eAAe,CAACgB,KAAjB,CADtC;AAEpBT,QAAAA,aAAa,EAAErB,MAAM,CAACH,QAAP,IAAmBC,MAAM,CAACE,MAAM,CAAC8B,KAAR;AAFpB,OAAtB;AAKA,UAAMC,eAAe,GAAG;AACtBR,QAAAA,0BAA0B,EAAElB,mBAAmB,CAACR,QAApB,IAAgCC,MAAM,CAACO,mBAAmB,CAACyB,KAArB,CAD5C;AAEtBR,QAAAA,iBAAiB,EAAEJ,UAAU,CAACrB,QAAX,IAAuBC,MAAM,CAACoB,UAAU,CAACY,KAAZ,CAF1B;AAGtBE,QAAAA,aAAa,EAAE,CAAAb,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAEtB,QAAZ,KAAwBC,MAAM,CAACqB,UAAD,aAACA,UAAD,uBAACA,UAAU,CAAEW,KAAb;AAHvB,OAAxB;AAMA,0BACE;AAAK,QAAA,SAAS,EAAErB,OAAO,CAACwB;AAAxB,sBACE,gCAAC,gBAAD,CAAQ,YAAR;AACE,QAAA,YAAY,EAAEhB,qBADhB;AAEE,QAAA,QAAQ,eACN,gCAAC,KAAD;AACE,UAAA,KAAK,EAAEf,KADT;AAEE,UAAA,aAAa,EAAEC,cAFjB;AAGE,UAAA,aAAa,EAAEO,aAHjB;AAIE,UAAA,qBAAqB,EAAEE,sBAJzB;AAKE,UAAA,MAAM,EAAE;AACNsB,YAAAA,QAAQ,EAAEL,aADJ;AAENM,YAAAA,UAAU,EAAEJ;AAFN;AALV;AAHJ,sBAeE;AAAK,QAAA,SAAS,EAAEtB,OAAO,CAAC2B;AAAxB,SACGb,0BAA0B,iBACzB,gCAAC,wBAAD;AAAgB,QAAA,KAAK,EAAElB,mBAAmB,CAACyB,KAA3C;AAAkD,QAAA,SAAS,EAAErB,OAAO,CAACT;AAArE,sBACE,gCAAC,wBAAD;AACE,QAAA,MAAM,EAAEE,KAAK,CAACG,mBAAN,IAA6B,EADvC;AAEE,QAAA,QAAQ,EAAE,KAAKgC,4BAFjB;AAGE,QAAA,YAAY,EAAE1B,YAHhB;AAIE,QAAA,QAAQ,EAAE,KAJZ;AAKE,QAAA,WAAW,EAAEgB,WALf;AAME,QAAA,UAAU,EAAEL,iBANd;AAOE,QAAA,aAAa,EAAGP,aAAa,IAAIA,aAAa,CAACV,mBAAhC,IAAwDoB,oBAPzE;AAQE,QAAA,cAAc,EAAGT,cAAc,IAAIA,cAAc,CAACX,mBAAlC,IAA0DqB,qBAR5E;AASE,QAAA,kBAAkB,EAAEb,kBATtB;AAUE,QAAA,uBAAuB,EAAE,CAAC;AAAEyB,UAAAA,QAAQ,EAAE;AAAZ,SAAD,EAA0B;AAAEA,UAAAA,QAAQ,EAAE;AAAZ,SAA1B;AAV3B,QADF,CAFJ,EAkBGjB,aAAa,iBACZ,gCAAC,wBAAD;AAAgB,QAAA,KAAK,EAAC,WAAtB;AAAkC,QAAA,SAAS,EAAEZ,OAAO,CAACT;AAArD,sBACE,gCAAC,wBAAD;AACE,QAAA,MAAM,EAAEE,KAAK,CAACF,MADhB;AAEE,QAAA,QAAQ,EAAE,KAAKuC,eAFjB;AAGE,QAAA,WAAW,EAAEZ,WAHf;AAIE,QAAA,UAAU,EAAEL,iBAJd;AAKE,QAAA,YAAY,EAAEX,YALhB;AAME,QAAA,aAAa,EAAEc,oBANjB;AAOE,QAAA,cAAc,EAAEC,qBAPlB;AAQE,QAAA,kBAAkB,EAAEb,kBARtB;AASE,QAAA,uBAAuB,EAAE,CAAC;AAAEyB,UAAAA,QAAQ,EAAE;AAAZ,SAAD,EAA0B;AAAEA,UAAAA,QAAQ,EAAE;AAAZ,SAA1B;AAT3B,QADF,CAnBJ,EAkCGlB,sBAAsB,iBACrB,0DACE,gCAAC,sBAAD;AAAY,QAAA,SAAS,EAAEX,OAAO,CAACqB,KAA/B;AAAsC,QAAA,OAAO,EAAC;AAA9C,mCADF,eAKE,gCAAC,0BAAD;AACE,QAAA,QAAQ,EAAE5B,KAAK,CAACM,QADlB;AAEE,QAAA,sBAAsB,EAAE,KAAKgC,sBAF/B;AAGE,QAAA,aAAa,EAAE,KAAKC,aAHtB;AAIE,QAAA,eAAe,EAAEvC,KAAK,CAACK;AAJzB,QALF,CAnCJ,CAfF,CADF,CADF;AAqED;;;EAtIuBmC,kBAAMC,S;;;;AAyIhC,IAAMC,MAAM,GAAG,SAATA,MAAS,CAACC,KAAD;AAAA,SAAY;AACzBZ,IAAAA,IAAI,EAAE;AACJa,MAAAA,SAAS,EAAED,KAAK,CAACE,OAAN,CAAcC,IAAd,GAAqB;AAD5B,KADmB;AAIzBlB,IAAAA,KAAK,EAAE;AACLgB,MAAAA,SAAS,EAAED,KAAK,CAACE,OAAN,CAAcC,IAAd,GAAqB;AAD3B,KAJkB;AAOzBhD,IAAAA,MAAM,EAAE;AACNiD,MAAAA,UAAU,EAAEJ,KAAK,CAACE,OAAN,CAAcC,IAAd,GAAqB,CAD3B;AAENE,MAAAA,KAAK,EAAE;AAFD,KAPiB;AAWzBd,IAAAA,OAAO,EAAE;AACPe,MAAAA,YAAY,EAAEN,KAAK,CAACE,OAAN,CAAcC,IAAd,GAAqB;AAD5B;AAXgB,GAAZ;AAAA,CAAf;;AAgBAjD,IAAI,CAACqD,SAAL,GAAiB;AACf3C,EAAAA,OAAO,EAAE4C,sBAAUC,MAAV,CAAiBC,UADX;AAEf7C,EAAAA,aAAa,EAAE2C,sBAAUC,MAFV;AAGfpD,EAAAA,KAAK,EAAEmD,sBAAUC,MAAV,CAAiBC,UAHT;AAIf5C,EAAAA,YAAY,EAAE0C,sBAAUG,KAAV,CAAgB;AAC5BC,IAAAA,GAAG,EAAEJ,sBAAUK,IADa;AAE5B,cAAQL,sBAAUK;AAFU,GAAhB,CAJC;AAQf7C,EAAAA,kBAAkB,EAAEwC,sBAAUG,KAAV,CAAgB;AAClCC,IAAAA,GAAG,EAAEJ,sBAAUK,IADmB;AAElC,cAAQL,sBAAUK;AAFgB,GAAhB,CARL;AAYfvD,EAAAA,cAAc,EAAEkD,sBAAUK,IAAV,CAAeH,UAZhB;AAaf3C,EAAAA,sBAAsB,EAAEyC,sBAAUK,IAAV,CAAeH;AAbxB,CAAjB;;eAgBe,wBAAWX,MAAX,EAAmB7C,IAAnB,C","sourcesContent":["import React from 'react';\nimport { settings, layout, InputContainer } from '@pie-lib/config-ui';\nimport PropTypes from 'prop-types';\nimport EditableHtml from '@pie-lib/editable-html';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport ImageContainer from './image-container';\nimport cloneDeep from 'lodash/cloneDeep';\n\nconst { Panel, toggle } = settings;\n\nexport class Root extends React.Component {\n onPromptChanged = (prompt) => {\n const { model, onModelChanged } = this.props;\n const update = cloneDeep(model);\n\n onModelChanged({ ...update, prompt });\n };\n\n onTeacherInstructionsChanged = (teacherInstructions) => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({ ...model, teacherInstructions });\n };\n\n onUpdateImageDimension = (dimensions) => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({ ...model, imageDimensions: dimensions });\n };\n\n onImageUpload = (imageUrl) => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({ ...model, imageUrl });\n };\n\n render() {\n const { classes, configuration, imageSupport, model, onConfigurationChanged, onModelChanged, uploadSoundSupport } =\n this.props;\n const {\n backgroundImage = {},\n maxImageWidth = {},\n maxImageHeight = {},\n prompt = {},\n settingsPanelDisabled,\n spellCheck = {},\n teacherInstructions = {},\n withRubric = {},\n } = configuration || {};\n const {\n backgroundImageEnabled,\n promptEnabled,\n spellCheckEnabled,\n teacherInstructionsEnabled,\n toolbarEditorPosition,\n } = model || {};\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n const panelSettings = {\n backgroundImageEnabled: backgroundImage.settings && toggle(backgroundImage.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n };\n\n const panelProperties = {\n teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label),\n };\n\n return (\n <div className={classes.base}>\n <layout.ConfigLayout\n hideSettings={settingsPanelDisabled}\n settings={\n <Panel\n model={model}\n onChangeModel={onModelChanged}\n configuration={configuration}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n Settings: panelSettings,\n Properties: panelProperties,\n }}\n />\n }\n >\n <div className={classes.regular}>\n {teacherInstructionsEnabled && (\n <InputContainer label={teacherInstructions.label} className={classes.prompt}>\n <EditableHtml\n markup={model.teacherInstructions || ''}\n onChange={this.onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.teacherInstructions) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.teacherInstructions) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </InputContainer>\n )}\n\n {promptEnabled && (\n <InputContainer label=\"Item Stem\" className={classes.prompt}>\n <EditableHtml\n markup={model.prompt}\n onChange={this.onPromptChanged}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n imageSupport={imageSupport}\n maxImageWidth={defaultImageMaxWidth}\n maxImageHeight={defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </InputContainer>\n )}\n\n {backgroundImageEnabled && (\n <div>\n <Typography className={classes.label} variant=\"subheading\">\n Define Background Image\n </Typography>\n\n <ImageContainer\n imageUrl={model.imageUrl}\n onUpdateImageDimension={this.onUpdateImageDimension}\n onImageUpload={this.onImageUpload}\n imageDimensions={model.imageDimensions}\n />\n </div>\n )}\n </div>\n </layout.ConfigLayout>\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n base: {\n marginTop: theme.spacing.unit * 3,\n },\n label: {\n marginTop: theme.spacing.unit * 4,\n },\n prompt: {\n paddingTop: theme.spacing.unit * 2,\n width: '100%',\n },\n regular: {\n marginBottom: theme.spacing.unit * 3,\n },\n});\n\nRoot.propTypes = {\n classes: PropTypes.object.isRequired,\n configuration: PropTypes.object,\n model: PropTypes.object.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func,\n }),\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func,\n }),\n onModelChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n};\n\nexport default withStyles(styles)(Root);\n"],"file":"root.js"}
1
+ {"version":3,"sources":["../src/root.jsx"],"names":["Panel","settings","toggle","Root","prompt","props","model","onModelChanged","update","teacherInstructions","dimensions","imageDimensions","imageUrl","classes","configuration","imageSupport","onConfigurationChanged","uploadSoundSupport","backgroundImage","maxImageWidth","maxImageHeight","settingsPanelDisabled","spellCheck","withRubric","backgroundImageEnabled","promptEnabled","spellCheckEnabled","teacherInstructionsEnabled","toolbarEditorPosition","defaultImageMaxWidth","defaultImageMaxHeight","toolbarOpts","position","panelSettings","label","panelProperties","rubricEnabled","Settings","Properties","promptHolder","onTeacherInstructionsChanged","language","onPromptChanged","onUpdateImageDimension","onImageUpload","React","Component","styles","theme","paddingTop","spacing","unit","marginBottom","width","propTypes","PropTypes","object","isRequired","shape","add","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { settings, layout, InputContainer } from '@pie-lib/config-ui';\nimport PropTypes from 'prop-types';\nimport EditableHtml from '@pie-lib/editable-html';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport ImageContainer from './image-container';\nimport cloneDeep from 'lodash/cloneDeep';\n\nconst { Panel, toggle } = settings;\n\nexport class Root extends React.Component {\n onPromptChanged = (prompt) => {\n const { model, onModelChanged } = this.props;\n const update = cloneDeep(model);\n\n onModelChanged({ ...update, prompt });\n };\n\n onTeacherInstructionsChanged = (teacherInstructions) => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({ ...model, teacherInstructions });\n };\n\n onUpdateImageDimension = (dimensions) => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({ ...model, imageDimensions: dimensions });\n };\n\n onImageUpload = (imageUrl) => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({ ...model, imageUrl });\n };\n\n render() {\n const { classes, configuration, imageSupport, model, onConfigurationChanged, onModelChanged, uploadSoundSupport } =\n this.props;\n const {\n backgroundImage = {},\n maxImageWidth = {},\n maxImageHeight = {},\n prompt = {},\n settingsPanelDisabled,\n spellCheck = {},\n teacherInstructions = {},\n withRubric = {},\n } = configuration || {};\n const {\n backgroundImageEnabled,\n promptEnabled,\n spellCheckEnabled,\n teacherInstructionsEnabled,\n toolbarEditorPosition,\n } = model || {};\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n const panelSettings = {\n backgroundImageEnabled: backgroundImage.settings && toggle(backgroundImage.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n };\n\n const panelProperties = {\n teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label),\n };\n\n return (\n <layout.ConfigLayout\n hideSettings={settingsPanelDisabled}\n settings={\n <Panel\n model={model}\n onChangeModel={onModelChanged}\n configuration={configuration}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n Settings: panelSettings,\n Properties: panelProperties,\n }}\n />\n }\n >\n {teacherInstructionsEnabled && (\n <InputContainer label={teacherInstructions.label} className={classes.promptHolder}>\n <EditableHtml\n markup={model.teacherInstructions || ''}\n onChange={this.onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.teacherInstructions) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.teacherInstructions) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </InputContainer>\n )}\n\n {promptEnabled && (\n <InputContainer label=\"Item Stem\" className={classes.promptHolder}>\n <EditableHtml\n markup={model.prompt}\n onChange={this.onPromptChanged}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n imageSupport={imageSupport}\n maxImageWidth={defaultImageMaxWidth}\n maxImageHeight={defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </InputContainer>\n )}\n\n {backgroundImageEnabled && (\n <React.Fragment>\n <Typography variant=\"subheading\">Define Background Image</Typography>\n\n <ImageContainer\n imageUrl={model.imageUrl}\n onUpdateImageDimension={this.onUpdateImageDimension}\n onImageUpload={this.onImageUpload}\n imageDimensions={model.imageDimensions}\n />\n </React.Fragment>\n )}\n </layout.ConfigLayout>\n );\n }\n}\n\nconst styles = (theme) => ({\n promptHolder: {\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n width: '100%',\n },\n});\n\nRoot.propTypes = {\n classes: PropTypes.object.isRequired,\n configuration: PropTypes.object,\n model: PropTypes.object.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func,\n }),\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func,\n }),\n onModelChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n};\n\nexport default withStyles(styles)(Root);\n"],"file":"root.js"}
@@ -1,101 +1,97 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`Root snapshot renders 1`] = `
4
- <div>
5
- <ConfigLayout
6
- hideSettings={false}
7
- settings={
8
- <Panel
9
- configuration={
10
- Object {
11
- "backgroundImage": Object {
12
- "label": "Background Image",
13
- "settings": true,
14
- },
15
- "maxImageHeight": Object {
16
- "prompt": 300,
17
- "teacherInstructions": 300,
18
- },
19
- "maxImageWidth": Object {
20
- "prompt": 300,
21
- "teacherInstructions": 300,
22
- },
23
- "prompt": Object {
24
- "label": "Prompt",
25
- "settings": true,
26
- },
27
- "settingsPanelDisabled": false,
28
- "spellCheck": Object {
29
- "enabled": true,
30
- "label": "Spellcheck",
31
- "settings": false,
32
- },
33
- "teacherInstructions": Object {
34
- "label": "Teacher Instructions",
35
- "settings": true,
36
- },
37
- "withRubric": Object {
38
- "label": "Add Rubric",
39
- "settings": false,
40
- },
41
- }
4
+ <ConfigLayout
5
+ hideSettings={false}
6
+ settings={
7
+ <Panel
8
+ configuration={
9
+ Object {
10
+ "backgroundImage": Object {
11
+ "label": "Background Image",
12
+ "settings": true,
13
+ },
14
+ "maxImageHeight": Object {
15
+ "prompt": 300,
16
+ "teacherInstructions": 300,
17
+ },
18
+ "maxImageWidth": Object {
19
+ "prompt": 300,
20
+ "teacherInstructions": 300,
21
+ },
22
+ "prompt": Object {
23
+ "label": "Prompt",
24
+ "settings": true,
25
+ },
26
+ "settingsPanelDisabled": false,
27
+ "spellCheck": Object {
28
+ "enabled": true,
29
+ "label": "Spellcheck",
30
+ "settings": false,
31
+ },
32
+ "teacherInstructions": Object {
33
+ "label": "Teacher Instructions",
34
+ "settings": true,
35
+ },
36
+ "withRubric": Object {
37
+ "label": "Add Rubric",
38
+ "settings": false,
39
+ },
42
40
  }
43
- groups={
44
- Object {
45
- "Properties": Object {
46
- "rubricEnabled": false,
47
- "spellCheckEnabled": false,
48
- "teacherInstructionsEnabled": undefined,
49
- },
50
- "Settings": Object {
51
- "backgroundImageEnabled": undefined,
52
- "promptEnabled": undefined,
53
- },
54
- }
41
+ }
42
+ groups={
43
+ Object {
44
+ "Properties": Object {
45
+ "rubricEnabled": false,
46
+ "spellCheckEnabled": false,
47
+ "teacherInstructionsEnabled": undefined,
48
+ },
49
+ "Settings": Object {
50
+ "backgroundImageEnabled": undefined,
51
+ "promptEnabled": undefined,
52
+ },
55
53
  }
56
- model={
57
- Object {
58
- "imageDimensions": Object {
59
- "height": 100,
60
- "width": 100,
61
- },
62
- "imageUrl": "",
63
- "prompt": "Test Prompt",
64
- "promptEnabled": true,
65
- }
54
+ }
55
+ model={
56
+ Object {
57
+ "imageDimensions": Object {
58
+ "height": 100,
59
+ "width": 100,
60
+ },
61
+ "imageUrl": "",
62
+ "prompt": "Test Prompt",
63
+ "promptEnabled": true,
66
64
  }
67
- onChangeConfiguration={[MockFunction]}
68
- onChangeModel={[MockFunction]}
69
- />
70
- }
65
+ }
66
+ onChangeConfiguration={[MockFunction]}
67
+ onChangeModel={[MockFunction]}
68
+ />
69
+ }
70
+ >
71
+ <Component
72
+ label="Item Stem"
71
73
  >
72
- <div>
73
- <Component
74
- label="Item Stem"
75
- >
76
- <EditableHtml
77
- languageCharactersProps={
78
- Array [
79
- Object {
80
- "language": "spanish",
81
- },
82
- Object {
83
- "language": "special",
84
- },
85
- ]
86
- }
87
- markup="Test Prompt"
88
- maxImageHeight={300}
89
- maxImageWidth={300}
90
- onChange={[Function]}
91
- toolbarOpts={
92
- Object {
93
- "position": "bottom",
94
- }
95
- }
96
- />
97
- </Component>
98
- </div>
99
- </ConfigLayout>
100
- </div>
74
+ <EditableHtml
75
+ languageCharactersProps={
76
+ Array [
77
+ Object {
78
+ "language": "spanish",
79
+ },
80
+ Object {
81
+ "language": "special",
82
+ },
83
+ ]
84
+ }
85
+ markup="Test Prompt"
86
+ maxImageHeight={300}
87
+ maxImageWidth={300}
88
+ onChange={[Function]}
89
+ toolbarOpts={
90
+ Object {
91
+ "position": "bottom",
92
+ }
93
+ }
94
+ />
95
+ </Component>
96
+ </ConfigLayout>
101
97
  `;
@@ -233,7 +233,7 @@ export class ImageContainer extends Component {
233
233
 
234
234
  const styles = (theme) => ({
235
235
  base: {
236
- marginTop: theme.spacing.unit * 2,
236
+ marginTop: theme.spacing.unit,
237
237
  },
238
238
  box: {
239
239
  border: '1px solid #E0E1E6',
@@ -76,91 +76,77 @@ export class Root extends React.Component {
76
76
  };
77
77
 
78
78
  return (
79
- <div className={classes.base}>
80
- <layout.ConfigLayout
81
- hideSettings={settingsPanelDisabled}
82
- settings={
83
- <Panel
84
- model={model}
85
- onChangeModel={onModelChanged}
86
- configuration={configuration}
87
- onChangeConfiguration={onConfigurationChanged}
88
- groups={{
89
- Settings: panelSettings,
90
- Properties: panelProperties,
91
- }}
79
+ <layout.ConfigLayout
80
+ hideSettings={settingsPanelDisabled}
81
+ settings={
82
+ <Panel
83
+ model={model}
84
+ onChangeModel={onModelChanged}
85
+ configuration={configuration}
86
+ onChangeConfiguration={onConfigurationChanged}
87
+ groups={{
88
+ Settings: panelSettings,
89
+ Properties: panelProperties,
90
+ }}
91
+ />
92
+ }
93
+ >
94
+ {teacherInstructionsEnabled && (
95
+ <InputContainer label={teacherInstructions.label} className={classes.promptHolder}>
96
+ <EditableHtml
97
+ markup={model.teacherInstructions || ''}
98
+ onChange={this.onTeacherInstructionsChanged}
99
+ imageSupport={imageSupport}
100
+ nonEmpty={false}
101
+ toolbarOpts={toolbarOpts}
102
+ spellCheck={spellCheckEnabled}
103
+ maxImageWidth={(maxImageWidth && maxImageWidth.teacherInstructions) || defaultImageMaxWidth}
104
+ maxImageHeight={(maxImageHeight && maxImageHeight.teacherInstructions) || defaultImageMaxHeight}
105
+ uploadSoundSupport={uploadSoundSupport}
106
+ languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}
92
107
  />
93
- }
94
- >
95
- <div className={classes.regular}>
96
- {teacherInstructionsEnabled && (
97
- <InputContainer label={teacherInstructions.label} className={classes.prompt}>
98
- <EditableHtml
99
- markup={model.teacherInstructions || ''}
100
- onChange={this.onTeacherInstructionsChanged}
101
- imageSupport={imageSupport}
102
- nonEmpty={false}
103
- toolbarOpts={toolbarOpts}
104
- spellCheck={spellCheckEnabled}
105
- maxImageWidth={(maxImageWidth && maxImageWidth.teacherInstructions) || defaultImageMaxWidth}
106
- maxImageHeight={(maxImageHeight && maxImageHeight.teacherInstructions) || defaultImageMaxHeight}
107
- uploadSoundSupport={uploadSoundSupport}
108
- languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}
109
- />
110
- </InputContainer>
111
- )}
112
-
113
- {promptEnabled && (
114
- <InputContainer label="Item Stem" className={classes.prompt}>
115
- <EditableHtml
116
- markup={model.prompt}
117
- onChange={this.onPromptChanged}
118
- toolbarOpts={toolbarOpts}
119
- spellCheck={spellCheckEnabled}
120
- imageSupport={imageSupport}
121
- maxImageWidth={defaultImageMaxWidth}
122
- maxImageHeight={defaultImageMaxHeight}
123
- uploadSoundSupport={uploadSoundSupport}
124
- languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}
125
- />
126
- </InputContainer>
127
- )}
128
-
129
- {backgroundImageEnabled && (
130
- <div>
131
- <Typography className={classes.label} variant="subheading">
132
- Define Background Image
133
- </Typography>
134
-
135
- <ImageContainer
136
- imageUrl={model.imageUrl}
137
- onUpdateImageDimension={this.onUpdateImageDimension}
138
- onImageUpload={this.onImageUpload}
139
- imageDimensions={model.imageDimensions}
140
- />
141
- </div>
142
- )}
143
- </div>
144
- </layout.ConfigLayout>
145
- </div>
108
+ </InputContainer>
109
+ )}
110
+
111
+ {promptEnabled && (
112
+ <InputContainer label="Item Stem" className={classes.promptHolder}>
113
+ <EditableHtml
114
+ markup={model.prompt}
115
+ onChange={this.onPromptChanged}
116
+ toolbarOpts={toolbarOpts}
117
+ spellCheck={spellCheckEnabled}
118
+ imageSupport={imageSupport}
119
+ maxImageWidth={defaultImageMaxWidth}
120
+ maxImageHeight={defaultImageMaxHeight}
121
+ uploadSoundSupport={uploadSoundSupport}
122
+ languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}
123
+ />
124
+ </InputContainer>
125
+ )}
126
+
127
+ {backgroundImageEnabled && (
128
+ <React.Fragment>
129
+ <Typography variant="subheading">Define Background Image</Typography>
130
+
131
+ <ImageContainer
132
+ imageUrl={model.imageUrl}
133
+ onUpdateImageDimension={this.onUpdateImageDimension}
134
+ onImageUpload={this.onImageUpload}
135
+ imageDimensions={model.imageDimensions}
136
+ />
137
+ </React.Fragment>
138
+ )}
139
+ </layout.ConfigLayout>
146
140
  );
147
141
  }
148
142
  }
149
143
 
150
144
  const styles = (theme) => ({
151
- base: {
152
- marginTop: theme.spacing.unit * 3,
153
- },
154
- label: {
155
- marginTop: theme.spacing.unit * 4,
156
- },
157
- prompt: {
145
+ promptHolder: {
158
146
  paddingTop: theme.spacing.unit * 2,
147
+ marginBottom: theme.spacing.unit * 2,
159
148
  width: '100%',
160
149
  },
161
- regular: {
162
- marginBottom: theme.spacing.unit * 3,
163
- },
164
150
  });
165
151
 
166
152
  Root.propTypes = {
@@ -378,7 +378,7 @@ var styles = function styles() {
378
378
  },
379
379
  undoControls: {
380
380
  marginTop: -43,
381
- width: 163
381
+ width: 172
382
382
  }
383
383
  };
384
384
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/drawing-response/drawable-main.jsx"],"names":["DrawableMain","props","onSessionChange","session","TextEntry","drawables","state","newSession","map","d","toJson","texts","all","text","id","attrs","value","setState","isOver","e","document","body","style","overflow","newDrawable","textIsSelected","toolActive","fillColor","outlineColor","scale","length","target","getStage","getPointerPosition","x","y","type","startx","starty","createdAt","Date","drawableToAdd","registerMovement","push","handleSessionChange","bind","updatedNewDrawable","newDrawables","allData","sort","a","b","lastElement","pop","updatedAt","nextProps","currentDrawables","drawablesString","JSON","stringify","sessionDrawableString","drawable","drawableArray","currentTexts","setAll","classes","disabled","drawableDimensions","imageDimensions","imageUrl","paintColor","backgroundImageEnabled","draggable","paint","drawableProps","forceUpdate","toggleTextSelected","stage","onMouseOverElement","onMouseOutElement","listeners","onMouseUp","handleMouseUp","onTouchEnd","onMouseMove","handleMouseMove","onTouchMove","onMouseDown","handleMouseDown","onTouchStart","imageHeight","height","imageWidth","width","wrapper","undoControls","handleUndo","handleClearAll","base","renderTextareas","ref","active","layer","key","render","React","Component","styles","display","flexWrap","justifyContent","position","left","touchAction","top","cursor","marginTop","propTypes","PropTypes","object","isRequired","bool","string","func","number"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport omit from 'lodash/omit';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqual from 'lodash/isEqual';\nimport classnames from 'classnames';\nimport { Layer, Stage } from 'react-konva';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport ImageBackground from './drawable-image';\nimport Button from './button';\nimport factory from './factory';\n\nexport class DrawableMain extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n drawables: [],\n newDrawable: [],\n textIsSelected: false\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.session) {\n const { TextEntry } = nextProps;\n const { drawables: currentDrawables } = this.state;\n\n if (nextProps.session.drawables) {\n const newDrawables = cloneDeep(nextProps.session.drawables);\n const drawablesString = JSON.stringify(currentDrawables);\n const sessionDrawableString = JSON.stringify(\n (newDrawables || []).map(drawable => omit(drawable, 'type'))\n );\n\n if (drawablesString !== sessionDrawableString) {\n const drawableArray = nextProps.session.drawables;\n\n this.setState({\n drawables: drawableArray.map(drawable =>\n factory(drawable.type, drawable)\n )\n });\n }\n\n const currentTexts = TextEntry.all.map(text => ({\n ...text,\n ...(TextEntry[`text_${text.id}`] &&\n TextEntry[`text_${text.id}`].attrs),\n value:\n TextEntry[`textarea_${text.id}`] &&\n TextEntry[`textarea_${text.id}`].value\n }));\n\n if (!isEqual(currentTexts, nextProps.session.texts)) {\n TextEntry.setAll(nextProps.session.texts || []);\n }\n }\n } else {\n this.handleSessionChange();\n }\n }\n\n handleSessionChange = () => {\n const { onSessionChange, session, TextEntry } = this.props;\n const { drawables } = this.state;\n\n const newSession = {\n drawables: drawables.map(d => d.toJson()),\n texts: TextEntry.all.map(text => ({\n ...text,\n ...(TextEntry[`text_${text.id}`] && TextEntry[`text_${text.id}`].attrs),\n value:\n TextEntry[`textarea_${text.id}`] &&\n TextEntry[`textarea_${text.id}`].value\n }))\n };\n\n if (!isEqual(newSession, session)) {\n onSessionChange({\n ...session,\n ...newSession\n });\n }\n };\n\n onMouseOverElement = () => this.setState({ isOver: true });\n\n onMouseOutElement = () => this.setState({ isOver: false });\n\n handleMouseDown = e => {\n // ONLY IF MOBILE?\n document.body.style.overflow = 'hidden';\n\n const { newDrawable, textIsSelected } = this.state;\n const { toolActive, fillColor, outlineColor, scale } = this.props;\n\n if (newDrawable.length === 0 && !textIsSelected) {\n const { x, y } = e.target.getStage().getPointerPosition();\n\n const newDrawable = factory(toolActive.type, {\n startx: x / scale,\n starty: y / scale,\n fillColor,\n outlineColor,\n createdAt: new Date()\n });\n\n this.setState({\n newDrawable: [newDrawable]\n });\n }\n };\n\n handleMouseUp = e => {\n // ONLY IF MOBILE?\n document.body.style.overflow = 'initial';\n\n const { newDrawable, drawables } = this.state;\n const { scale } = this.props;\n\n if (newDrawable.length === 1) {\n const { x, y } = e.target.getStage().getPointerPosition();\n const drawableToAdd = newDrawable[0];\n\n drawableToAdd.registerMovement(x / scale, y / scale);\n drawables.push(drawableToAdd);\n\n this.setState(\n {\n newDrawable: [],\n drawables\n },\n this.handleSessionChange.bind(this, drawableToAdd)\n );\n }\n };\n\n handleMouseMove = e => {\n const { newDrawable } = this.state;\n const { scale } = this.props;\n\n if (newDrawable.length === 1) {\n const { x, y } = e.target.getStage().getPointerPosition();\n const updatedNewDrawable = newDrawable[0];\n\n updatedNewDrawable.registerMovement(x / scale, y / scale);\n\n this.setState({\n newDrawable: [updatedNewDrawable]\n });\n }\n };\n\n handleUndo = () => {\n const { drawables } = this.state;\n const { TextEntry } = this.props;\n\n const newDrawables = [...drawables];\n const allData = [...drawables, ...TextEntry.all];\n\n allData.sort((a, b) => new Date(a.createdAt) - new Date(b.createdAt));\n const lastElement = allData[allData.length - 1];\n\n if (lastElement && lastElement.type === 'text-entry') {\n TextEntry.all.pop();\n this.setState({ updatedAt: new Date() }, this.handleSessionChange);\n } else {\n newDrawables.pop();\n this.setState({ drawables: newDrawables }, this.handleSessionChange);\n }\n };\n\n handleClearAll = () => {\n const { TextEntry } = this.props;\n\n TextEntry.all = [];\n this.setState(\n { drawables: [], updatedAt: new Date() },\n this.handleSessionChange\n );\n };\n\n toggleTextSelected = textIsSelected => this.setState({ textIsSelected });\n\n render() {\n const {\n classes,\n disabled,\n drawableDimensions,\n fillColor,\n imageDimensions,\n imageUrl,\n paintColor,\n outlineColor,\n TextEntry,\n backgroundImageEnabled = true,\n toolActive: { type },\n scale\n } = this.props;\n const { isOver, newDrawable } = this.state;\n\n const draggable = type === 'Select';\n const paint = type === 'PaintBucket';\n const drawables = [...this.state.drawables, ...this.state.newDrawable];\n\n const drawableProps = {\n draggable: draggable && !disabled,\n disabled,\n paint,\n fillColor,\n forceUpdate: () => this.setState({ updatedAt: new Date() }),\n paintColor,\n outlineColor,\n toggleTextSelected: this.toggleTextSelected,\n handleSessionChange: this.handleSessionChange,\n stage: this.stage,\n onMouseOverElement: this.onMouseOverElement,\n onMouseOutElement: this.onMouseOutElement,\n scale\n };\n\n let listeners = {};\n\n if (!disabled) {\n listeners = {\n onMouseUp: this.handleMouseUp,\n onTouchEnd: this.handleMouseUp,\n onMouseMove: this.handleMouseMove,\n onTouchMove: this.handleMouseMove,\n };\n\n if (!draggable) {\n listeners.onMouseDown = this.handleMouseDown;\n listeners.onTouchStart = this.handleMouseDown;\n }\n }\n\n const imageHeight = imageDimensions?.height * scale;\n const imageWidth = imageDimensions?.width * scale;\n\n return (\n <div className={classes.wrapper}>\n <div className={classes.undoControls}>\n <Button disabled={disabled} onClick={this.handleUndo} label=\"Undo\"/>\n <Button disabled={disabled} onClick={this.handleClearAll} label=\"Clear all\"/>\n </div>\n <div className={classes.base}>\n {backgroundImageEnabled && imageUrl && (\n <ImageBackground\n dimensions={{ height: imageHeight, width: imageWidth }}\n url={imageUrl}/>\n )}\n\n {TextEntry.renderTextareas()}\n\n <Stage\n scaleX={scale}\n scaleY={scale}\n ref={ref => {\n this.stage = ref;\n }}\n className={classnames(classes.stage, {\n [classes.active]:\n draggable &&\n (isOver || (newDrawable && newDrawable.length === 1))\n })}\n height={drawableDimensions.height}\n width={drawableDimensions.width}\n {...listeners}\n >\n <Layer\n ref={ref => {\n this.layer = ref;\n }}\n >\n {drawables.map((drawable, key) =>\n drawable.render({ ...drawableProps, key })\n )}\n {/* Text Entry is a special case */}\n {TextEntry.render(drawableProps)}\n </Layer>\n </Stage>\n </div>\n </div>\n );\n }\n}\n\nconst styles = () => ({\n wrapper: {\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'flex-end'\n },\n base: {\n position: 'relative',\n width: '100%'\n },\n stage: {\n left: 0,\n position: 'absolute',\n touchAction: 'none',\n top: 0\n },\n active: {\n cursor: 'pointer'\n },\n undoControls: {\n marginTop: -43,\n width: 163\n }\n});\n\nDrawableMain.propTypes = {\n classes: PropTypes.object.isRequired,\n disabled: PropTypes.bool,\n drawableDimensions: PropTypes.object.isRequired,\n imageDimensions: PropTypes.object.isRequired,\n fillColor: PropTypes.string.isRequired,\n onSessionChange: PropTypes.func.isRequired,\n paintColor: PropTypes.string.isRequired,\n outlineColor: PropTypes.string.isRequired,\n imageUrl: PropTypes.string.isRequired,\n TextEntry: PropTypes.object.isRequired,\n toolActive: PropTypes.object.isRequired,\n session: PropTypes.object.isRequired,\n backgroundImageEnabled: PropTypes.bool.isRequired,\n scale: PropTypes.number.isRequired\n};\n\nexport default withStyles(styles)(DrawableMain);\n"],"file":"drawable-main.js"}
1
+ {"version":3,"sources":["../../src/drawing-response/drawable-main.jsx"],"names":["DrawableMain","props","onSessionChange","session","TextEntry","drawables","state","newSession","map","d","toJson","texts","all","text","id","attrs","value","setState","isOver","e","document","body","style","overflow","newDrawable","textIsSelected","toolActive","fillColor","outlineColor","scale","length","target","getStage","getPointerPosition","x","y","type","startx","starty","createdAt","Date","drawableToAdd","registerMovement","push","handleSessionChange","bind","updatedNewDrawable","newDrawables","allData","sort","a","b","lastElement","pop","updatedAt","nextProps","currentDrawables","drawablesString","JSON","stringify","sessionDrawableString","drawable","drawableArray","currentTexts","setAll","classes","disabled","drawableDimensions","imageDimensions","imageUrl","paintColor","backgroundImageEnabled","draggable","paint","drawableProps","forceUpdate","toggleTextSelected","stage","onMouseOverElement","onMouseOutElement","listeners","onMouseUp","handleMouseUp","onTouchEnd","onMouseMove","handleMouseMove","onTouchMove","onMouseDown","handleMouseDown","onTouchStart","imageHeight","height","imageWidth","width","wrapper","undoControls","handleUndo","handleClearAll","base","renderTextareas","ref","active","layer","key","render","React","Component","styles","display","flexWrap","justifyContent","position","left","touchAction","top","cursor","marginTop","propTypes","PropTypes","object","isRequired","bool","string","func","number"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport omit from 'lodash/omit';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqual from 'lodash/isEqual';\nimport classnames from 'classnames';\nimport { Layer, Stage } from 'react-konva';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport ImageBackground from './drawable-image';\nimport Button from './button';\nimport factory from './factory';\n\nexport class DrawableMain extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n drawables: [],\n newDrawable: [],\n textIsSelected: false,\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.session) {\n const { TextEntry } = nextProps;\n const { drawables: currentDrawables } = this.state;\n\n if (nextProps.session.drawables) {\n const newDrawables = cloneDeep(nextProps.session.drawables);\n const drawablesString = JSON.stringify(currentDrawables);\n const sessionDrawableString = JSON.stringify((newDrawables || []).map((drawable) => omit(drawable, 'type')));\n\n if (drawablesString !== sessionDrawableString) {\n const drawableArray = nextProps.session.drawables;\n\n this.setState({\n drawables: drawableArray.map((drawable) => factory(drawable.type, drawable)),\n });\n }\n\n const currentTexts = TextEntry.all.map((text) => ({\n ...text,\n ...(TextEntry[`text_${text.id}`] && TextEntry[`text_${text.id}`].attrs),\n value: TextEntry[`textarea_${text.id}`] && TextEntry[`textarea_${text.id}`].value,\n }));\n\n if (!isEqual(currentTexts, nextProps.session.texts)) {\n TextEntry.setAll(nextProps.session.texts || []);\n }\n }\n } else {\n this.handleSessionChange();\n }\n }\n\n handleSessionChange = () => {\n const { onSessionChange, session, TextEntry } = this.props;\n const { drawables } = this.state;\n\n const newSession = {\n drawables: drawables.map((d) => d.toJson()),\n texts: TextEntry.all.map((text) => ({\n ...text,\n ...(TextEntry[`text_${text.id}`] && TextEntry[`text_${text.id}`].attrs),\n value: TextEntry[`textarea_${text.id}`] && TextEntry[`textarea_${text.id}`].value,\n })),\n };\n\n if (!isEqual(newSession, session)) {\n onSessionChange({\n ...session,\n ...newSession,\n });\n }\n };\n\n onMouseOverElement = () => this.setState({ isOver: true });\n\n onMouseOutElement = () => this.setState({ isOver: false });\n\n handleMouseDown = (e) => {\n // ONLY IF MOBILE?\n document.body.style.overflow = 'hidden';\n\n const { newDrawable, textIsSelected } = this.state;\n const { toolActive, fillColor, outlineColor, scale } = this.props;\n\n if (newDrawable.length === 0 && !textIsSelected) {\n const { x, y } = e.target.getStage().getPointerPosition();\n\n const newDrawable = factory(toolActive.type, {\n startx: x / scale,\n starty: y / scale,\n fillColor,\n outlineColor,\n createdAt: new Date(),\n });\n\n this.setState({\n newDrawable: [newDrawable],\n });\n }\n };\n\n handleMouseUp = (e) => {\n // ONLY IF MOBILE?\n document.body.style.overflow = 'initial';\n\n const { newDrawable, drawables } = this.state;\n const { scale } = this.props;\n\n if (newDrawable.length === 1) {\n const { x, y } = e.target.getStage().getPointerPosition();\n const drawableToAdd = newDrawable[0];\n\n drawableToAdd.registerMovement(x / scale, y / scale);\n drawables.push(drawableToAdd);\n\n this.setState(\n {\n newDrawable: [],\n drawables,\n },\n this.handleSessionChange.bind(this, drawableToAdd),\n );\n }\n };\n\n handleMouseMove = (e) => {\n const { newDrawable } = this.state;\n const { scale } = this.props;\n\n if (newDrawable.length === 1) {\n const { x, y } = e.target.getStage().getPointerPosition();\n const updatedNewDrawable = newDrawable[0];\n\n updatedNewDrawable.registerMovement(x / scale, y / scale);\n\n this.setState({\n newDrawable: [updatedNewDrawable],\n });\n }\n };\n\n handleUndo = () => {\n const { drawables } = this.state;\n const { TextEntry } = this.props;\n\n const newDrawables = [...drawables];\n const allData = [...drawables, ...TextEntry.all];\n\n allData.sort((a, b) => new Date(a.createdAt) - new Date(b.createdAt));\n const lastElement = allData[allData.length - 1];\n\n if (lastElement && lastElement.type === 'text-entry') {\n TextEntry.all.pop();\n this.setState({ updatedAt: new Date() }, this.handleSessionChange);\n } else {\n newDrawables.pop();\n this.setState({ drawables: newDrawables }, this.handleSessionChange);\n }\n };\n\n handleClearAll = () => {\n const { TextEntry } = this.props;\n\n TextEntry.all = [];\n this.setState({ drawables: [], updatedAt: new Date() }, this.handleSessionChange);\n };\n\n toggleTextSelected = (textIsSelected) => this.setState({ textIsSelected });\n\n render() {\n const {\n classes,\n disabled,\n drawableDimensions,\n fillColor,\n imageDimensions,\n imageUrl,\n paintColor,\n outlineColor,\n TextEntry,\n backgroundImageEnabled = true,\n toolActive: { type },\n scale,\n } = this.props;\n const { isOver, newDrawable } = this.state;\n\n const draggable = type === 'Select';\n const paint = type === 'PaintBucket';\n const drawables = [...this.state.drawables, ...this.state.newDrawable];\n\n const drawableProps = {\n draggable: draggable && !disabled,\n disabled,\n paint,\n fillColor,\n forceUpdate: () => this.setState({ updatedAt: new Date() }),\n paintColor,\n outlineColor,\n toggleTextSelected: this.toggleTextSelected,\n handleSessionChange: this.handleSessionChange,\n stage: this.stage,\n onMouseOverElement: this.onMouseOverElement,\n onMouseOutElement: this.onMouseOutElement,\n scale,\n };\n\n let listeners = {};\n\n if (!disabled) {\n listeners = {\n onMouseUp: this.handleMouseUp,\n onTouchEnd: this.handleMouseUp,\n onMouseMove: this.handleMouseMove,\n onTouchMove: this.handleMouseMove,\n };\n\n if (!draggable) {\n listeners.onMouseDown = this.handleMouseDown;\n listeners.onTouchStart = this.handleMouseDown;\n }\n }\n\n const imageHeight = imageDimensions?.height * scale;\n const imageWidth = imageDimensions?.width * scale;\n\n return (\n <div className={classes.wrapper}>\n <div className={classes.undoControls}>\n <Button disabled={disabled} onClick={this.handleUndo} label=\"Undo\" />\n <Button disabled={disabled} onClick={this.handleClearAll} label=\"Clear all\" />\n </div>\n <div className={classes.base}>\n {backgroundImageEnabled && imageUrl && (\n <ImageBackground dimensions={{ height: imageHeight, width: imageWidth }} url={imageUrl} />\n )}\n\n {TextEntry.renderTextareas()}\n\n <Stage\n scaleX={scale}\n scaleY={scale}\n ref={(ref) => {\n this.stage = ref;\n }}\n className={classnames(classes.stage, {\n [classes.active]: draggable && (isOver || (newDrawable && newDrawable.length === 1)),\n })}\n height={drawableDimensions.height}\n width={drawableDimensions.width}\n {...listeners}\n >\n <Layer\n ref={(ref) => {\n this.layer = ref;\n }}\n >\n {drawables.map((drawable, key) => drawable.render({ ...drawableProps, key }))}\n {/* Text Entry is a special case */}\n {TextEntry.render(drawableProps)}\n </Layer>\n </Stage>\n </div>\n </div>\n );\n }\n}\n\nconst styles = () => ({\n wrapper: {\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'flex-end',\n },\n base: {\n position: 'relative',\n width: '100%',\n },\n stage: {\n left: 0,\n position: 'absolute',\n touchAction: 'none',\n top: 0,\n },\n active: {\n cursor: 'pointer',\n },\n undoControls: {\n marginTop: -43,\n width: 172,\n },\n});\n\nDrawableMain.propTypes = {\n classes: PropTypes.object.isRequired,\n disabled: PropTypes.bool,\n drawableDimensions: PropTypes.object.isRequired,\n imageDimensions: PropTypes.object.isRequired,\n fillColor: PropTypes.string.isRequired,\n onSessionChange: PropTypes.func.isRequired,\n paintColor: PropTypes.string.isRequired,\n outlineColor: PropTypes.string.isRequired,\n imageUrl: PropTypes.string.isRequired,\n TextEntry: PropTypes.object.isRequired,\n toolActive: PropTypes.object.isRequired,\n session: PropTypes.object.isRequired,\n backgroundImageEnabled: PropTypes.bool.isRequired,\n scale: PropTypes.number.isRequired,\n};\n\nexport default withStyles(styles)(DrawableMain);\n"],"file":"drawable-main.js"}
@@ -21,8 +21,6 @@ var _react = _interopRequireDefault(require("react"));
21
21
 
22
22
  var _propTypes = _interopRequireDefault(require("prop-types"));
23
23
 
24
- var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
25
-
26
24
  var _renderUi = require("@pie-lib/render-ui");
27
25
 
28
26
  var _styles = require("@material-ui/core/styles");
@@ -70,19 +68,18 @@ var DrawingResponseComponent = /*#__PURE__*/function (_React$Component) {
70
68
  hasError = _this$state.hasError,
71
69
  errorMessage = _this$state.errorMessage;
72
70
  var isEvaluateMode = mode === 'evaluate';
73
- return hasError ? /*#__PURE__*/_react["default"].createElement("div", null, "An error occured: ", errorMessage) : /*#__PURE__*/_react["default"].createElement("div", null, teacherInstructions && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
71
+ return hasError ? /*#__PURE__*/_react["default"].createElement("div", null, "An error occured: ", errorMessage) : /*#__PURE__*/_react["default"].createElement("div", null, teacherInstructions && /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
72
+ className: classes.collapsible,
74
73
  labels: {
75
74
  hidden: 'Show Teacher Instructions',
76
75
  visible: 'Hide Teacher Instructions'
77
76
  }
78
77
  }, /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
79
78
  prompt: teacherInstructions
80
- })), /*#__PURE__*/_react["default"].createElement("br", null)), /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
81
- className: classes.prompt
82
- }, /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
79
+ })), prompt && /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
83
80
  tagName: "span",
84
81
  prompt: prompt
85
- })), /*#__PURE__*/_react["default"].createElement(_container["default"], {
82
+ }), /*#__PURE__*/_react["default"].createElement(_container["default"], {
86
83
  session: session,
87
84
  onSessionChange: onSessionChange,
88
85
  isEvaluateMode: isEvaluateMode,
@@ -111,10 +108,10 @@ DrawingResponseComponent.propTypes = {
111
108
  session: _propTypes["default"].object.isRequired
112
109
  };
113
110
 
114
- var styles = function styles() {
111
+ var styles = function styles(theme) {
115
112
  return {
116
- prompt: {
117
- fontSize: 'inherit'
113
+ collapsible: {
114
+ marginBottom: theme.spacing.unit * 2
118
115
  }
119
116
  };
120
117
  };
@@ -1 +1 @@
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,wBAKI,KAAKH,KALT;AAAA,0CACEI,KADF;AAAA,UACWC,QADX,qBACWA,QADX;AAAA,UACqBC,eADrB,qBACqBA,eADrB;AAAA,UACsCC,QADtC,qBACsCA,QADtC;AAAA,UACgDC,MADhD,qBACgDA,MADhD;AAAA,UACwDC,IADxD,qBACwDA,IADxD;AAAA,UAC8DC,mBAD9D,qBAC8DA,mBAD9D;AAAA,oDACmFC,sBADnF;AAAA,UACmFA,sBADnF,sCAC4G,IAD5G;AAAA,UAEEC,OAFF,eAEEA,OAFF;AAAA,UAGEC,eAHF,eAGEA,eAHF;AAAA,UAIEC,OAJF,eAIEA,OAJF;AAMA,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;;;WA/CD,kCAAgCc,KAAhC,EAAuC;AACrC,aAAO;AAAEhB,QAAAA,QAAQ,EAAE,IAAZ;AAAkBY,QAAAA,YAAY,EAAEI,KAAK,CAACC;AAAtC,OAAP;AACD;;;EAXoCC,kBAAMC,S;;AA2D7CvB,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: { disabled, imageDimensions, imageUrl, prompt, mode, teacherInstructions, backgroundImageEnabled = true },\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"}
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","collapsible","hidden","visible","error","message","React","Component","propTypes","PropTypes","object","isRequired","func","styles","theme","marginBottom","spacing","unit"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;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,wBAKI,KAAKH,KALT;AAAA,0CACEI,KADF;AAAA,UACWC,QADX,qBACWA,QADX;AAAA,UACqBC,eADrB,qBACqBA,eADrB;AAAA,UACsCC,QADtC,qBACsCA,QADtC;AAAA,UACgDC,MADhD,qBACgDA,MADhD;AAAA,UACwDC,IADxD,qBACwDA,IADxD;AAAA,UAC8DC,mBAD9D,qBAC8DA,mBAD9D;AAAA,oDACmFC,sBADnF;AAAA,UACmFA,sBADnF,sCAC4G,IAD5G;AAAA,UAEEC,OAFF,eAEEA,OAFF;AAAA,UAGEC,eAHF,eAGEA,eAHF;AAAA,UAIEC,OAJF,eAIEA,OAJF;AAMA,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,qBAAD;AACE,QAAA,SAAS,EAAEI,OAAO,CAACG,WADrB;AAEE,QAAA,MAAM,EAAE;AACNC,UAAAA,MAAM,EAAE,2BADF;AAENC,UAAAA,OAAO,EAAE;AAFH;AAFV,sBAOE,gCAAC,uBAAD;AAAe,QAAA,MAAM,EAAET;AAAvB,QAPF,CAFJ,EAaGF,MAAM,iBAAI,gCAAC,uBAAD;AAAe,QAAA,OAAO,EAAC,MAAvB;AAA8B,QAAA,MAAM,EAAEA;AAAtC,QAbb,eAeE,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,QAfF,CAHF;AA6BD;;;WA3CD,kCAAgCe,KAAhC,EAAuC;AACrC,aAAO;AAAEjB,QAAAA,QAAQ,EAAE,IAAZ;AAAkBY,QAAAA,YAAY,EAAEK,KAAK,CAACC;AAAtC,OAAP;AACD;;;EAXoCC,kBAAMC,S;;AAuD7CxB,wBAAwB,CAACyB,SAAzB,GAAqC;AACnCV,EAAAA,OAAO,EAAEW,sBAAUC,MADgB;AAEnCtB,EAAAA,KAAK,EAAEqB,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,CAACC,KAAD;AAAA,SAAY;AACzBb,IAAAA,WAAW,EAAE;AACXc,MAAAA,YAAY,EAAED,KAAK,CAACE,OAAN,CAAcC,IAAd,GAAqB;AADxB;AADY,GAAZ;AAAA,CAAf;;eAMe,wBAAWJ,MAAX,EAAmB9B,wBAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\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: { disabled, imageDimensions, imageUrl, prompt, mode, teacherInstructions, backgroundImageEnabled = true },\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 <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 />\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 = (theme) => ({\n collapsible: {\n marginBottom: theme.spacing.unit * 2,\n },\n});\n\nexport default withStyles(styles)(DrawingResponseComponent);\n"],"file":"index.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/drawing-response",
3
- "version": "6.0.1-next.24+9353f7376",
3
+ "version": "6.0.1-next.39+a42a408d1",
4
4
  "description": "",
5
5
  "repository": "pie-framework/pie-elements",
6
6
  "publishConfig": {
@@ -24,7 +24,7 @@
24
24
  },
25
25
  "author": "pie framework developers",
26
26
  "license": "ISC",
27
- "gitHead": "9353f73768c78233621ab11119b1961af018a7e4",
27
+ "gitHead": "a42a408d1d238e52cbcf907fbbaec2ee98550385",
28
28
  "scripts": {
29
29
  "postpublish": "../../scripts/postpublish"
30
30
  },
@@ -17,7 +17,7 @@ export class DrawableMain extends React.Component {
17
17
  this.state = {
18
18
  drawables: [],
19
19
  newDrawable: [],
20
- textIsSelected: false
20
+ textIsSelected: false,
21
21
  };
22
22
  }
23
23
 
@@ -29,27 +29,20 @@ export class DrawableMain extends React.Component {
29
29
  if (nextProps.session.drawables) {
30
30
  const newDrawables = cloneDeep(nextProps.session.drawables);
31
31
  const drawablesString = JSON.stringify(currentDrawables);
32
- const sessionDrawableString = JSON.stringify(
33
- (newDrawables || []).map(drawable => omit(drawable, 'type'))
34
- );
32
+ const sessionDrawableString = JSON.stringify((newDrawables || []).map((drawable) => omit(drawable, 'type')));
35
33
 
36
34
  if (drawablesString !== sessionDrawableString) {
37
35
  const drawableArray = nextProps.session.drawables;
38
36
 
39
37
  this.setState({
40
- drawables: drawableArray.map(drawable =>
41
- factory(drawable.type, drawable)
42
- )
38
+ drawables: drawableArray.map((drawable) => factory(drawable.type, drawable)),
43
39
  });
44
40
  }
45
41
 
46
- const currentTexts = TextEntry.all.map(text => ({
42
+ const currentTexts = TextEntry.all.map((text) => ({
47
43
  ...text,
48
- ...(TextEntry[`text_${text.id}`] &&
49
- TextEntry[`text_${text.id}`].attrs),
50
- value:
51
- TextEntry[`textarea_${text.id}`] &&
52
- TextEntry[`textarea_${text.id}`].value
44
+ ...(TextEntry[`text_${text.id}`] && TextEntry[`text_${text.id}`].attrs),
45
+ value: TextEntry[`textarea_${text.id}`] && TextEntry[`textarea_${text.id}`].value,
53
46
  }));
54
47
 
55
48
  if (!isEqual(currentTexts, nextProps.session.texts)) {
@@ -66,20 +59,18 @@ export class DrawableMain extends React.Component {
66
59
  const { drawables } = this.state;
67
60
 
68
61
  const newSession = {
69
- drawables: drawables.map(d => d.toJson()),
70
- texts: TextEntry.all.map(text => ({
62
+ drawables: drawables.map((d) => d.toJson()),
63
+ texts: TextEntry.all.map((text) => ({
71
64
  ...text,
72
65
  ...(TextEntry[`text_${text.id}`] && TextEntry[`text_${text.id}`].attrs),
73
- value:
74
- TextEntry[`textarea_${text.id}`] &&
75
- TextEntry[`textarea_${text.id}`].value
76
- }))
66
+ value: TextEntry[`textarea_${text.id}`] && TextEntry[`textarea_${text.id}`].value,
67
+ })),
77
68
  };
78
69
 
79
70
  if (!isEqual(newSession, session)) {
80
71
  onSessionChange({
81
72
  ...session,
82
- ...newSession
73
+ ...newSession,
83
74
  });
84
75
  }
85
76
  };
@@ -88,7 +79,7 @@ export class DrawableMain extends React.Component {
88
79
 
89
80
  onMouseOutElement = () => this.setState({ isOver: false });
90
81
 
91
- handleMouseDown = e => {
82
+ handleMouseDown = (e) => {
92
83
  // ONLY IF MOBILE?
93
84
  document.body.style.overflow = 'hidden';
94
85
 
@@ -103,16 +94,16 @@ export class DrawableMain extends React.Component {
103
94
  starty: y / scale,
104
95
  fillColor,
105
96
  outlineColor,
106
- createdAt: new Date()
97
+ createdAt: new Date(),
107
98
  });
108
99
 
109
100
  this.setState({
110
- newDrawable: [newDrawable]
101
+ newDrawable: [newDrawable],
111
102
  });
112
103
  }
113
104
  };
114
105
 
115
- handleMouseUp = e => {
106
+ handleMouseUp = (e) => {
116
107
  // ONLY IF MOBILE?
117
108
  document.body.style.overflow = 'initial';
118
109
 
@@ -129,14 +120,14 @@ export class DrawableMain extends React.Component {
129
120
  this.setState(
130
121
  {
131
122
  newDrawable: [],
132
- drawables
123
+ drawables,
133
124
  },
134
- this.handleSessionChange.bind(this, drawableToAdd)
125
+ this.handleSessionChange.bind(this, drawableToAdd),
135
126
  );
136
127
  }
137
128
  };
138
129
 
139
- handleMouseMove = e => {
130
+ handleMouseMove = (e) => {
140
131
  const { newDrawable } = this.state;
141
132
  const { scale } = this.props;
142
133
 
@@ -147,7 +138,7 @@ export class DrawableMain extends React.Component {
147
138
  updatedNewDrawable.registerMovement(x / scale, y / scale);
148
139
 
149
140
  this.setState({
150
- newDrawable: [updatedNewDrawable]
141
+ newDrawable: [updatedNewDrawable],
151
142
  });
152
143
  }
153
144
  };
@@ -175,13 +166,10 @@ export class DrawableMain extends React.Component {
175
166
  const { TextEntry } = this.props;
176
167
 
177
168
  TextEntry.all = [];
178
- this.setState(
179
- { drawables: [], updatedAt: new Date() },
180
- this.handleSessionChange
181
- );
169
+ this.setState({ drawables: [], updatedAt: new Date() }, this.handleSessionChange);
182
170
  };
183
171
 
184
- toggleTextSelected = textIsSelected => this.setState({ textIsSelected });
172
+ toggleTextSelected = (textIsSelected) => this.setState({ textIsSelected });
185
173
 
186
174
  render() {
187
175
  const {
@@ -196,7 +184,7 @@ export class DrawableMain extends React.Component {
196
184
  TextEntry,
197
185
  backgroundImageEnabled = true,
198
186
  toolActive: { type },
199
- scale
187
+ scale,
200
188
  } = this.props;
201
189
  const { isOver, newDrawable } = this.state;
202
190
 
@@ -217,7 +205,7 @@ export class DrawableMain extends React.Component {
217
205
  stage: this.stage,
218
206
  onMouseOverElement: this.onMouseOverElement,
219
207
  onMouseOutElement: this.onMouseOutElement,
220
- scale
208
+ scale,
221
209
  };
222
210
 
223
211
  let listeners = {};
@@ -242,14 +230,12 @@ export class DrawableMain extends React.Component {
242
230
  return (
243
231
  <div className={classes.wrapper}>
244
232
  <div className={classes.undoControls}>
245
- <Button disabled={disabled} onClick={this.handleUndo} label="Undo"/>
246
- <Button disabled={disabled} onClick={this.handleClearAll} label="Clear all"/>
233
+ <Button disabled={disabled} onClick={this.handleUndo} label="Undo" />
234
+ <Button disabled={disabled} onClick={this.handleClearAll} label="Clear all" />
247
235
  </div>
248
236
  <div className={classes.base}>
249
237
  {backgroundImageEnabled && imageUrl && (
250
- <ImageBackground
251
- dimensions={{ height: imageHeight, width: imageWidth }}
252
- url={imageUrl}/>
238
+ <ImageBackground dimensions={{ height: imageHeight, width: imageWidth }} url={imageUrl} />
253
239
  )}
254
240
 
255
241
  {TextEntry.renderTextareas()}
@@ -257,26 +243,22 @@ export class DrawableMain extends React.Component {
257
243
  <Stage
258
244
  scaleX={scale}
259
245
  scaleY={scale}
260
- ref={ref => {
246
+ ref={(ref) => {
261
247
  this.stage = ref;
262
248
  }}
263
249
  className={classnames(classes.stage, {
264
- [classes.active]:
265
- draggable &&
266
- (isOver || (newDrawable && newDrawable.length === 1))
250
+ [classes.active]: draggable && (isOver || (newDrawable && newDrawable.length === 1)),
267
251
  })}
268
252
  height={drawableDimensions.height}
269
253
  width={drawableDimensions.width}
270
254
  {...listeners}
271
255
  >
272
256
  <Layer
273
- ref={ref => {
257
+ ref={(ref) => {
274
258
  this.layer = ref;
275
259
  }}
276
260
  >
277
- {drawables.map((drawable, key) =>
278
- drawable.render({ ...drawableProps, key })
279
- )}
261
+ {drawables.map((drawable, key) => drawable.render({ ...drawableProps, key }))}
280
262
  {/* Text Entry is a special case */}
281
263
  {TextEntry.render(drawableProps)}
282
264
  </Layer>
@@ -291,25 +273,25 @@ const styles = () => ({
291
273
  wrapper: {
292
274
  display: 'flex',
293
275
  flexWrap: 'wrap',
294
- justifyContent: 'flex-end'
276
+ justifyContent: 'flex-end',
295
277
  },
296
278
  base: {
297
279
  position: 'relative',
298
- width: '100%'
280
+ width: '100%',
299
281
  },
300
282
  stage: {
301
283
  left: 0,
302
284
  position: 'absolute',
303
285
  touchAction: 'none',
304
- top: 0
286
+ top: 0,
305
287
  },
306
288
  active: {
307
- cursor: 'pointer'
289
+ cursor: 'pointer',
308
290
  },
309
291
  undoControls: {
310
292
  marginTop: -43,
311
- width: 163
312
- }
293
+ width: 172,
294
+ },
313
295
  });
314
296
 
315
297
  DrawableMain.propTypes = {
@@ -326,7 +308,7 @@ DrawableMain.propTypes = {
326
308
  toolActive: PropTypes.object.isRequired,
327
309
  session: PropTypes.object.isRequired,
328
310
  backgroundImageEnabled: PropTypes.bool.isRequired,
329
- scale: PropTypes.number.isRequired
311
+ scale: PropTypes.number.isRequired,
330
312
  };
331
313
 
332
314
  export default withStyles(styles)(DrawableMain);
@@ -1,6 +1,5 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import Typography from '@material-ui/core/Typography';
4
3
  import { Collapsible, PreviewPrompt } from '@pie-lib/render-ui';
5
4
  import { withStyles } from '@material-ui/core/styles';
6
5
 
@@ -34,22 +33,18 @@ class DrawingResponseComponent extends React.Component {
34
33
  ) : (
35
34
  <div>
36
35
  {teacherInstructions && (
37
- <React.Fragment>
38
- <Collapsible
39
- labels={{
40
- hidden: 'Show Teacher Instructions',
41
- visible: 'Hide Teacher Instructions',
42
- }}
43
- >
44
- <PreviewPrompt prompt={teacherInstructions} />
45
- </Collapsible>
46
- <br />
47
- </React.Fragment>
36
+ <Collapsible
37
+ className={classes.collapsible}
38
+ labels={{
39
+ hidden: 'Show Teacher Instructions',
40
+ visible: 'Hide Teacher Instructions',
41
+ }}
42
+ >
43
+ <PreviewPrompt prompt={teacherInstructions} />
44
+ </Collapsible>
48
45
  )}
49
46
 
50
- <Typography className={classes.prompt}>
51
- <PreviewPrompt tagName="span" prompt={prompt} />
52
- </Typography>
47
+ {prompt && <PreviewPrompt tagName="span" prompt={prompt} />}
53
48
 
54
49
  <Container
55
50
  session={session}
@@ -72,9 +67,9 @@ DrawingResponseComponent.propTypes = {
72
67
  session: PropTypes.object.isRequired,
73
68
  };
74
69
 
75
- const styles = () => ({
76
- prompt: {
77
- fontSize: 'inherit',
70
+ const styles = (theme) => ({
71
+ collapsible: {
72
+ marginBottom: theme.spacing.unit * 2,
78
73
  },
79
74
  });
80
75