@pie-element/hotspot 9.3.4-next.3 → 10.0.0-beta.0

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 (103) hide show
  1. package/configure/lib/DeleteWidget.js +30 -43
  2. package/configure/lib/DeleteWidget.js.map +1 -1
  3. package/configure/lib/button.js +26 -45
  4. package/configure/lib/button.js.map +1 -1
  5. package/configure/lib/buttons/circle.js +20 -27
  6. package/configure/lib/buttons/circle.js.map +1 -1
  7. package/configure/lib/buttons/polygon.js +26 -33
  8. package/configure/lib/buttons/polygon.js.map +1 -1
  9. package/configure/lib/buttons/rectangle.js +26 -33
  10. package/configure/lib/buttons/rectangle.js.map +1 -1
  11. package/configure/lib/defaults.js +2 -3
  12. package/configure/lib/defaults.js.map +1 -1
  13. package/configure/lib/hotspot-circle.js +132 -198
  14. package/configure/lib/hotspot-circle.js.map +1 -1
  15. package/configure/lib/hotspot-container.js +250 -355
  16. package/configure/lib/hotspot-container.js.map +1 -1
  17. package/configure/lib/hotspot-drawable.js +360 -472
  18. package/configure/lib/hotspot-drawable.js.map +1 -1
  19. package/configure/lib/hotspot-palette.js +92 -139
  20. package/configure/lib/hotspot-palette.js.map +1 -1
  21. package/configure/lib/hotspot-polygon.js +212 -317
  22. package/configure/lib/hotspot-polygon.js.map +1 -1
  23. package/configure/lib/hotspot-rectangle.js +128 -192
  24. package/configure/lib/hotspot-rectangle.js.map +1 -1
  25. package/configure/lib/icons.js.map +1 -1
  26. package/configure/lib/image-konva.js +46 -86
  27. package/configure/lib/image-konva.js.map +1 -1
  28. package/configure/lib/index.js +162 -222
  29. package/configure/lib/index.js.map +1 -1
  30. package/configure/lib/root.js +301 -393
  31. package/configure/lib/root.js.map +1 -1
  32. package/configure/lib/shapes/circle.js +69 -101
  33. package/configure/lib/shapes/circle.js.map +1 -1
  34. package/configure/lib/shapes/index.js +4 -12
  35. package/configure/lib/shapes/index.js.map +1 -1
  36. package/configure/lib/shapes/polygon.js +64 -96
  37. package/configure/lib/shapes/polygon.js.map +1 -1
  38. package/configure/lib/shapes/rectagle.js +69 -101
  39. package/configure/lib/shapes/rectagle.js.map +1 -1
  40. package/configure/lib/shapes/utils.js +2 -8
  41. package/configure/lib/shapes/utils.js.map +1 -1
  42. package/configure/lib/upload-control.js +25 -52
  43. package/configure/lib/upload-control.js.map +1 -1
  44. package/configure/lib/utils.js +84 -137
  45. package/configure/lib/utils.js.map +1 -1
  46. package/configure/package.json +11 -10
  47. package/configure/src/__tests__/hotspot-container.test.js +50 -19
  48. package/configure/src/__tests__/hotspot-drawable.test.js +55 -34
  49. package/configure/src/__tests__/index.test.js +167 -5
  50. package/configure/src/__tests__/root.test.js +89 -63
  51. package/configure/src/button.jsx +12 -20
  52. package/configure/src/hotspot-circle.jsx +5 -18
  53. package/configure/src/hotspot-container.jsx +82 -98
  54. package/configure/src/hotspot-drawable.jsx +43 -45
  55. package/configure/src/hotspot-palette.jsx +45 -37
  56. package/configure/src/hotspot-polygon.jsx +4 -20
  57. package/configure/src/hotspot-rectangle.jsx +4 -17
  58. package/configure/src/index.js +12 -2
  59. package/configure/src/root.jsx +85 -79
  60. package/configure/src/upload-control.jsx +6 -16
  61. package/controller/lib/defaults.js +2 -3
  62. package/controller/lib/defaults.js.map +1 -1
  63. package/controller/lib/index.js +151 -205
  64. package/controller/lib/index.js.map +1 -1
  65. package/controller/lib/utils.js +14 -34
  66. package/controller/lib/utils.js.map +1 -1
  67. package/controller/package.json +2 -2
  68. package/lib/hotspot/circle.js +110 -169
  69. package/lib/hotspot/circle.js.map +1 -1
  70. package/lib/hotspot/container.js +174 -260
  71. package/lib/hotspot/container.js.map +1 -1
  72. package/lib/hotspot/icons.js.map +1 -1
  73. package/lib/hotspot/image-konva-tooltip.js +65 -112
  74. package/lib/hotspot/image-konva-tooltip.js.map +1 -1
  75. package/lib/hotspot/index.js +135 -198
  76. package/lib/hotspot/index.js.map +1 -1
  77. package/lib/hotspot/polygon.js +150 -214
  78. package/lib/hotspot/polygon.js.map +1 -1
  79. package/lib/hotspot/rectangle.js +128 -185
  80. package/lib/hotspot/rectangle.js.map +1 -1
  81. package/lib/index.js +187 -256
  82. package/lib/index.js.map +1 -1
  83. package/lib/session-updater.js +12 -18
  84. package/lib/session-updater.js.map +1 -1
  85. package/package.json +14 -11
  86. package/src/__tests__/container.test.jsx +27 -175
  87. package/src/__tests__/index.test.js +70 -30
  88. package/src/hotspot/circle.jsx +2 -13
  89. package/src/hotspot/container.jsx +35 -50
  90. package/src/hotspot/index.jsx +16 -28
  91. package/src/hotspot/polygon.jsx +4 -13
  92. package/src/hotspot/rectangle.jsx +5 -15
  93. package/src/index.js +21 -12
  94. package/configure/src/__tests__/DeleteWidget.test.js +0 -64
  95. package/configure/src/__tests__/__snapshots__/hotspot-container.test.js.snap +0 -192
  96. package/configure/src/__tests__/__snapshots__/hotspot-drawable.test.js.snap +0 -562
  97. package/configure/src/__tests__/__snapshots__/root.test.js.snap +0 -469
  98. package/src/__tests__/__snapshots__/container.test.jsx.snap +0 -264
  99. package/src/__tests__/__snapshots__/index.test.js.snap +0 -81
  100. package/src/__tests__/__snapshots__/polygon.test.jsx.snap +0 -192
  101. package/src/__tests__/__snapshots__/rectangle.test.jsx.snap +0 -127
  102. package/src/__tests__/polygon.test.jsx +0 -230
  103. package/src/__tests__/rectangle.test.jsx +0 -232
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/root.jsx"],"names":["Panel","settings","toggle","dropdown","Root","fieldType","color","onColorChanged","props","cType","value","resizeType","model","dimensions","shapes","configuration","preserveAspectRatio","onUpdateImageDimension","onUpdateShapes","nextImageDimensions","updatedDimensions","enabled","shapesArray","updatedShapes","classes","imageSupport","uploadSoundSupport","onConfigurationChanged","onImageUpload","onModelChangedByConfig","onPromptChanged","onRationaleChanged","onTeacherInstructionsChanged","baseInputConfiguration","contentDimensions","maxImageWidth","maxImageHeight","multipleCorrect","partialScoring","prompt","rationale","settingsPanelDisabled","spellCheck","teacherInstructions","withRubric","mathMlOptions","language","languageChoices","errors","extraCSSRules","promptEnabled","rationaleEnabled","spellCheckEnabled","teacherInstructionsEnabled","toolbarEditorPosition","promptError","rationaleError","shapesError","selectionsError","selections","teacherInstructionsError","validationMessage","defaultImageMaxWidth","defaultImageMaxHeight","toolbarOpts","position","panelSettings","label","options","panelProperties","rubricEnabled","getPluginProps","Settings","Properties","promptContainer","inputConfiguration","errorText","flexContainer","subheading","tooltip","hotspotColor","hotspotList","outlineColor","outlineList","handleColorChange","imageUrl","selectedHotspotColor","hoverOutlineColor","strokeWidth","add","width","e","handleOnUpdateImageDimensions","field","height","React","Component","styles","theme","display","marginBottom","spacing","unit","flex","paddingTop","marginRight","alignItems","fontSize","typography","whiteSpace","maxWidth","palette","error","main","propTypes","PropTypes","object","isRequired","shape","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { settings, layout, InputContainer, NumberTextField } from '@pie-lib/config-ui';\nimport PropTypes from 'prop-types';\nimport EditableHtml from '@pie-lib/editable-html';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Info from '@material-ui/icons/Info';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport HotspotPalette from './hotspot-palette';\nimport HotspotContainer from './hotspot-container';\nimport { updateImageDimensions, generateValidationMessage, getUpdatedShapes, getAllShapes, groupShapes } from './utils';\n\nconst { Panel, toggle, dropdown } = settings;\n\nexport class Root extends React.Component {\n handleColorChange = (fieldType, color) => {\n const { onColorChanged } = this.props;\n const cType = `${fieldType}Color`;\n\n onColorChanged(cType, color);\n };\n\n handleOnUpdateImageDimensions = (value, resizeType) => {\n const {\n model: { dimensions, shapes },\n configuration: { preserveAspectRatio = {} },\n onUpdateImageDimension,\n onUpdateShapes,\n } = this.props;\n\n const nextImageDimensions = { ...dimensions, [resizeType]: value };\n\n // if preserveAspectRatio.enabled, updateImageDimensions function makes sure aspect ratio is kept\n const updatedDimensions = updateImageDimensions(\n dimensions,\n nextImageDimensions,\n preserveAspectRatio.enabled,\n resizeType,\n );\n // transform shapes map into shapes array\n const shapesArray = getAllShapes(shapes);\n // transform all the shapes to fit the re-sized image\n const updatedShapes = getUpdatedShapes(dimensions, updatedDimensions, shapesArray);\n // transform shapes array back into shapes map\n\n onUpdateShapes(groupShapes(updatedShapes));\n onUpdateImageDimension(updatedDimensions);\n };\n\n render() {\n const {\n classes,\n configuration,\n model,\n imageSupport,\n uploadSoundSupport,\n onConfigurationChanged,\n onImageUpload,\n onModelChangedByConfig,\n onPromptChanged,\n onRationaleChanged,\n onUpdateImageDimension,\n onTeacherInstructionsChanged,\n onUpdateShapes,\n } = this.props;\n const {\n baseInputConfiguration = {},\n contentDimensions = {},\n maxImageWidth = {},\n maxImageHeight = {},\n multipleCorrect = {},\n partialScoring = {},\n preserveAspectRatio = {},\n prompt = {},\n rationale = {},\n settingsPanelDisabled,\n spellCheck = {},\n teacherInstructions = {},\n withRubric = {},\n mathMlOptions = {},\n language = {},\n languageChoices = {},\n } = configuration || {};\n const {\n errors,\n extraCSSRules,\n promptEnabled,\n rationaleEnabled,\n spellCheckEnabled,\n teacherInstructionsEnabled,\n toolbarEditorPosition,\n } = model || {};\n const {\n prompt: promptError,\n rationale: rationaleError,\n shapes: shapesError,\n selections: selectionsError,\n teacherInstructions: teacherInstructionsError,\n } = errors || {};\n const validationMessage = generateValidationMessage(configuration);\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 multipleCorrect: multipleCorrect.settings && toggle(multipleCorrect.label),\n partialScoring: partialScoring.settings && toggle(partialScoring.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n 'language.enabled': language.settings && toggle(language.label, true),\n language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),\n };\n const panelProperties = {\n teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label),\n };\n\n const getPluginProps = (props = {}) => ({\n ...baseInputConfiguration,\n ...props,\n });\n\n return (\n <layout.ConfigLayout\n extraCSSRules={extraCSSRules}\n dimensions={contentDimensions}\n hideSettings={settingsPanelDisabled}\n settings={\n <Panel\n model={model}\n onChangeModel={onModelChangedByConfig}\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.promptContainer}>\n <EditableHtml\n markup={model.teacherInstructions || ''}\n onChange={onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={teacherInstructionsError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(teacherInstructions?.inputConfiguration)}\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 mathMlOptions={mathMlOptions}\n />\n {teacherInstructionsError && <div className={classes.errorText}>{teacherInstructionsError}</div>}\n </InputContainer>\n )}\n\n {promptEnabled && (\n <InputContainer label={prompt.label} className={classes.promptContainer}>\n <EditableHtml\n markup={model.prompt || ''}\n onChange={onPromptChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={promptError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(prompt?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={defaultImageMaxWidth}\n maxImageHeight={defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {promptError && <div className={classes.errorText}>{promptError}</div>}\n </InputContainer>\n )}\n\n <div className={classes.flexContainer}>\n <Typography className={classes.subheading} variant=\"subheading\">\n Define Hotspot\n </Typography>\n <Tooltip\n classes={{ tooltip: classes.tooltip }}\n disableFocusListener\n disableTouchListener\n placement={'left'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'} style={{ float: 'right' }} />\n </Tooltip>\n </div>\n\n <HotspotPalette\n hotspotColor={model.hotspotColor}\n hotspotList={model.hotspotList}\n outlineColor={model.outlineColor}\n outlineList={model.outlineList}\n onHotspotColorChange={(color) => this.handleColorChange('hotspot', color)}\n onOutlineColorChange={(color) => this.handleColorChange('outline', color)}\n />\n\n <HotspotContainer\n dimensions={model.dimensions}\n imageUrl={model.imageUrl}\n multipleCorrect={model.multipleCorrect}\n hasErrors={!!shapesError || !!selectionsError}\n hotspotColor={model.hotspotColor}\n outlineColor={model.outlineColor}\n selectedHotspotColor={model.selectedHotspotColor}\n hoverOutlineColor={model.hoverOutlineColor}\n onUpdateImageDimension={onUpdateImageDimension}\n onUpdateShapes={onUpdateShapes}\n onImageUpload={onImageUpload}\n shapes={model.shapes}\n strokeWidth={model.strokeWidth}\n preserveAspectRatioEnabled={preserveAspectRatio.enabled}\n insertImage={imageSupport && imageSupport.add}\n />\n {shapesError && <div className={classes.errorText}>{shapesError}</div>}\n {selectionsError && <div className={classes.errorText}>{selectionsError}</div>}\n\n {model.imageUrl && (\n <React.Fragment>\n <Typography variant=\"subheading\">Image Dimensions</Typography>\n\n <div className={classes.dimensions}>\n <NumberTextField\n key=\"hotspot-manual-width\"\n label=\"Width\"\n value={model.dimensions.width}\n min={0}\n onChange={(e, value) => this.handleOnUpdateImageDimensions(value, 'width')}\n showErrorWhenOutsideRange\n className={classes.field}\n />\n\n <NumberTextField\n key=\"hotspot-manual-height\"\n label=\"Height\"\n value={model.dimensions.height}\n min={0}\n onChange={(e, value) => this.handleOnUpdateImageDimensions(value, 'height')}\n showErrorWhenOutsideRange\n className={classes.field}\n />\n </div>\n </React.Fragment>\n )}\n\n {rationaleEnabled && (\n <InputContainer label={rationale.label} className={classes.promptContainer}>\n <EditableHtml\n markup={model.rationale || ''}\n onChange={onRationaleChanged}\n imageSupport={imageSupport}\n error={rationaleError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(rationale?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.rationale) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.rationale) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {rationaleError && <div className={classes.errorText}>{rationaleError}</div>}\n </InputContainer>\n )}\n </layout.ConfigLayout>\n );\n }\n}\n\nconst styles = (theme) => ({\n dimensions: {\n display: 'flex',\n marginBottom: theme.spacing.unit * 1.5,\n },\n field: {\n flex: 1,\n width: '90%',\n },\n promptContainer: {\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n width: '100%',\n },\n subheading: {\n marginRight: theme.spacing.unit,\n },\n flexContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n tooltip: {\n fontSize: theme.typography.fontSize - 2,\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing.unit,\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 onImageUpload: PropTypes.func.isRequired,\n onColorChanged: PropTypes.func.isRequired,\n onPromptChanged: PropTypes.func.isRequired,\n onUpdateImageDimension: PropTypes.func.isRequired,\n onUpdateShapes: PropTypes.func.isRequired,\n onModelChangedByConfig: PropTypes.func.isRequired,\n onRationaleChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n onTeacherInstructionsChanged: PropTypes.func.isRequired,\n};\n\nexport default withStyles(styles)(Root);\n"],"file":"root.js"}
1
+ {"version":3,"file":"root.js","names":["_react","_interopRequireDefault","require","_configUi","_propTypes","_editableHtml","_styles","_Typography","_Info","_Tooltip","_hotspotPalette","_hotspotContainer","_utils","Panel","toggle","dropdown","settings","DimensionsContainer","styled","theme","display","marginBottom","spacing","FieldContainer","flex","width","PromptContainer","InputContainer","paddingTop","marginTop","SubHeading","Typography","marginRight","FlexContainer","alignItems","StyledTooltip","Tooltip","fontSize","typography","whiteSpace","maxWidth","ErrorText","color","palette","error","main","Root","React","Component","constructor","args","_defineProperty2","default","fieldType","onColorChanged","props","cType","value","resizeType","model","dimensions","shapes","configuration","preserveAspectRatio","onUpdateImageDimension","onUpdateShapes","nextImageDimensions","updatedDimensions","updateImageDimensions","enabled","shapesArray","getAllShapes","updatedShapes","getUpdatedShapes","groupShapes","render","imageSupport","uploadSoundSupport","onConfigurationChanged","onImageUpload","onModelChangedByConfig","onPromptChanged","onRationaleChanged","onTeacherInstructionsChanged","baseInputConfiguration","contentDimensions","maxImageWidth","maxImageHeight","multipleCorrect","partialScoring","prompt","rationale","settingsPanelDisabled","spellCheck","teacherInstructions","withRubric","mathMlOptions","language","languageChoices","errors","extraCSSRules","promptEnabled","rationaleEnabled","spellCheckEnabled","teacherInstructionsEnabled","toolbarEditorPosition","promptError","rationaleError","shapesError","selections","selectionsError","teacherInstructionsError","validationMessage","generateValidationMessage","defaultImageMaxWidth","defaultImageMaxHeight","toolbarOpts","position","panelSettings","label","options","panelProperties","rubricEnabled","getPluginProps","createElement","layout","ConfigLayout","hideSettings","onChangeModel","onChangeConfiguration","groups","Settings","Properties","markup","onChange","nonEmpty","pluginProps","inputConfiguration","languageCharactersProps","variant","disableFocusListener","disableTouchListener","placement","title","style","float","hotspotColor","hotspotList","outlineColor","outlineList","onHotspotColorChange","handleColorChange","onOutlineColorChange","imageUrl","hasErrors","selectedHotspotColor","hoverOutlineColor","strokeWidth","preserveAspectRatioEnabled","insertImage","add","Fragment","NumberTextField","key","min","e","handleOnUpdateImageDimensions","showErrorWhenOutsideRange","height","exports","propTypes","PropTypes","object","isRequired","shape","func","delete","_default"],"sources":["../src/root.jsx"],"sourcesContent":["import React from 'react';\nimport { settings, layout, InputContainer, NumberTextField } from '@pie-lib/config-ui';\nimport PropTypes from 'prop-types';\nimport EditableHtml from '@pie-lib/editable-html';\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport Info from '@mui/icons-material/Info';\nimport Tooltip from '@mui/material/Tooltip';\nimport HotspotPalette from './hotspot-palette';\nimport HotspotContainer from './hotspot-container';\nimport { updateImageDimensions, generateValidationMessage, getUpdatedShapes, getAllShapes, groupShapes } from './utils';\n\nconst { Panel, toggle, dropdown } = settings;\n\nconst DimensionsContainer = styled('div')(({ theme }) => ({\n display: 'flex',\n marginBottom: theme.spacing(1.5),\n}));\n\nconst FieldContainer = styled('div')({\n flex: 1,\n width: '90%',\n});\n\nconst PromptContainer = styled(InputContainer)(({ theme }) => ({\n paddingTop: theme.spacing(1),\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n width: '100%',\n}));\n\nconst SubHeading = styled(Typography)(({ theme }) => ({\n marginRight: theme.spacing(1),\n}));\n\nconst FlexContainer = styled('div')({\n display: 'flex',\n alignItems: 'center',\n});\n\nconst StyledTooltip = styled(Tooltip)(({ theme }) => ({\n '& .MuiTooltip-tooltip': {\n fontSize: theme.typography.fontSize - 2,\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n}));\n\nconst ErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing(1),\n}));\n\nexport class Root extends React.Component {\n handleColorChange = (fieldType, color) => {\n const { onColorChanged } = this.props;\n const cType = `${fieldType}Color`;\n\n onColorChanged(cType, color);\n };\n\n handleOnUpdateImageDimensions = (value, resizeType) => {\n const {\n model: { dimensions, shapes },\n configuration: { preserveAspectRatio = {} },\n onUpdateImageDimension,\n onUpdateShapes,\n } = this.props;\n\n const nextImageDimensions = { ...dimensions, [resizeType]: value };\n\n // if preserveAspectRatio.enabled, updateImageDimensions function makes sure aspect ratio is kept\n const updatedDimensions = updateImageDimensions(\n dimensions,\n nextImageDimensions,\n preserveAspectRatio.enabled,\n resizeType,\n );\n // transform shapes map into shapes array\n const shapesArray = getAllShapes(shapes);\n // transform all the shapes to fit the re-sized image\n const updatedShapes = getUpdatedShapes(dimensions, updatedDimensions, shapesArray);\n // transform shapes array back into shapes map\n\n onUpdateShapes(groupShapes(updatedShapes));\n onUpdateImageDimension(updatedDimensions);\n };\n\n render() {\n const {\n configuration,\n model,\n imageSupport,\n uploadSoundSupport,\n onConfigurationChanged,\n onImageUpload,\n onModelChangedByConfig,\n onPromptChanged,\n onRationaleChanged,\n onUpdateImageDimension,\n onTeacherInstructionsChanged,\n onUpdateShapes,\n } = this.props;\n const {\n baseInputConfiguration = {},\n contentDimensions = {},\n maxImageWidth = {},\n maxImageHeight = {},\n multipleCorrect = {},\n partialScoring = {},\n preserveAspectRatio = {},\n prompt = {},\n rationale = {},\n settingsPanelDisabled,\n spellCheck = {},\n teacherInstructions = {},\n withRubric = {},\n mathMlOptions = {},\n language = {},\n languageChoices = {},\n } = configuration || {};\n const {\n errors,\n extraCSSRules,\n promptEnabled,\n rationaleEnabled,\n spellCheckEnabled,\n teacherInstructionsEnabled,\n toolbarEditorPosition,\n } = model || {};\n const {\n prompt: promptError,\n rationale: rationaleError,\n shapes: shapesError,\n selections: selectionsError,\n teacherInstructions: teacherInstructionsError,\n } = errors || {};\n const validationMessage = generateValidationMessage(configuration);\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 multipleCorrect: multipleCorrect.settings && toggle(multipleCorrect.label),\n partialScoring: partialScoring.settings && toggle(partialScoring.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n 'language.enabled': language.settings && toggle(language.label, true),\n language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),\n };\n const panelProperties = {\n teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label),\n };\n\n const getPluginProps = (props = {}) => ({\n ...baseInputConfiguration,\n ...props,\n });\n\n return (\n <layout.ConfigLayout\n extraCSSRules={extraCSSRules}\n dimensions={contentDimensions}\n hideSettings={settingsPanelDisabled}\n settings={\n <Panel\n model={model}\n onChangeModel={onModelChangedByConfig}\n configuration={configuration}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n Settings: panelSettings,\n Properties: panelProperties,\n }}\n />\n }\n >\n {teacherInstructionsEnabled && (\n <PromptContainer label={teacherInstructions.label}>\n <EditableHtml\n markup={model.teacherInstructions || ''}\n onChange={onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={teacherInstructionsError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(teacherInstructions?.inputConfiguration)}\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 mathMlOptions={mathMlOptions}\n />\n {teacherInstructionsError && <ErrorText>{teacherInstructionsError}</ErrorText>}\n </PromptContainer>\n )}\n\n {promptEnabled && (\n <PromptContainer label={prompt.label}>\n <EditableHtml\n markup={model.prompt || ''}\n onChange={onPromptChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={promptError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(prompt?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={defaultImageMaxWidth}\n maxImageHeight={defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {promptError && <ErrorText>{promptError}</ErrorText>}\n </PromptContainer>\n )}\n\n <FlexContainer>\n <SubHeading variant=\"h6\">\n Define Hotspot\n </SubHeading>\n <StyledTooltip\n disableFocusListener\n disableTouchListener\n placement={'left'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'} style={{ float: 'right' }} />\n </StyledTooltip>\n </FlexContainer>\n\n <HotspotPalette\n hotspotColor={model.hotspotColor}\n hotspotList={model.hotspotList}\n outlineColor={model.outlineColor}\n outlineList={model.outlineList}\n onHotspotColorChange={(color) => this.handleColorChange('hotspot', color)}\n onOutlineColorChange={(color) => this.handleColorChange('outline', color)}\n />\n\n <HotspotContainer\n dimensions={model.dimensions}\n imageUrl={model.imageUrl}\n multipleCorrect={model.multipleCorrect}\n hasErrors={!!shapesError || !!selectionsError}\n hotspotColor={model.hotspotColor}\n outlineColor={model.outlineColor}\n selectedHotspotColor={model.selectedHotspotColor}\n hoverOutlineColor={model.hoverOutlineColor}\n onUpdateImageDimension={onUpdateImageDimension}\n onUpdateShapes={onUpdateShapes}\n onImageUpload={onImageUpload}\n shapes={model.shapes}\n strokeWidth={model.strokeWidth}\n preserveAspectRatioEnabled={preserveAspectRatio.enabled}\n insertImage={imageSupport && imageSupport.add}\n />\n {shapesError && <ErrorText>{shapesError}</ErrorText>}\n {selectionsError && <ErrorText>{selectionsError}</ErrorText>}\n\n {model.imageUrl && (\n <React.Fragment>\n <Typography variant=\"h6\">Image Dimensions</Typography>\n\n <DimensionsContainer>\n <FieldContainer>\n <NumberTextField\n key=\"hotspot-manual-width\"\n label=\"Width\"\n value={model.dimensions.width}\n min={0}\n onChange={(e, value) => this.handleOnUpdateImageDimensions(value, 'width')}\n showErrorWhenOutsideRange\n />\n </FieldContainer>\n\n <FieldContainer>\n <NumberTextField\n key=\"hotspot-manual-height\"\n label=\"Height\"\n value={model.dimensions.height}\n min={0}\n onChange={(e, value) => this.handleOnUpdateImageDimensions(value, 'height')}\n showErrorWhenOutsideRange\n />\n </FieldContainer>\n </DimensionsContainer>\n </React.Fragment>\n )}\n\n {rationaleEnabled && (\n <PromptContainer label={rationale.label}>\n <EditableHtml\n markup={model.rationale || ''}\n onChange={onRationaleChanged}\n imageSupport={imageSupport}\n error={rationaleError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(rationale?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.rationale) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.rationale) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {rationaleError && <ErrorText>{rationaleError}</ErrorText>}\n </PromptContainer>\n )}\n </layout.ConfigLayout>\n );\n }\n}\n\nRoot.propTypes = {\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 onImageUpload: PropTypes.func.isRequired,\n onColorChanged: PropTypes.func.isRequired,\n onPromptChanged: PropTypes.func.isRequired,\n onUpdateImageDimension: PropTypes.func.isRequired,\n onUpdateShapes: PropTypes.func.isRequired,\n onModelChangedByConfig: PropTypes.func.isRequired,\n onRationaleChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n onTeacherInstructionsChanged: PropTypes.func.isRequired,\n};\n\nexport default Root;\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,aAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,KAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,QAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,eAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,iBAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,MAAA,GAAAV,OAAA;AAEA,MAAM;EAAEW,KAAK;EAAEC,MAAM;EAAEC;AAAS,CAAC,GAAGC,kBAAQ;AAE5C,MAAMC,mBAAmB,GAAG,IAAAC,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC;EAAEC;AAAM,CAAC,MAAM;EACxDC,OAAO,EAAE,MAAM;EACfC,YAAY,EAAEF,KAAK,CAACG,OAAO,CAAC,GAAG;AACjC,CAAC,CAAC,CAAC;AAEH,MAAMC,cAAc,GAAG,IAAAL,cAAM,EAAC,KAAK,CAAC,CAAC;EACnCM,IAAI,EAAE,CAAC;EACPC,KAAK,EAAE;AACT,CAAC,CAAC;AAEF,MAAMC,eAAe,GAAG,IAAAR,cAAM,EAACS,wBAAc,CAAC,CAAC,CAAC;EAAER;AAAM,CAAC,MAAM;EAC7DS,UAAU,EAAET,KAAK,CAACG,OAAO,CAAC,CAAC,CAAC;EAC5BO,SAAS,EAAEV,KAAK,CAACG,OAAO,CAAC,CAAC,CAAC;EAC3BD,YAAY,EAAEF,KAAK,CAACG,OAAO,CAAC,CAAC,CAAC;EAC9BG,KAAK,EAAE;AACT,CAAC,CAAC,CAAC;AAEH,MAAMK,UAAU,GAAG,IAAAZ,cAAM,EAACa,mBAAU,CAAC,CAAC,CAAC;EAAEZ;AAAM,CAAC,MAAM;EACpDa,WAAW,EAAEb,KAAK,CAACG,OAAO,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,MAAMW,aAAa,GAAG,IAAAf,cAAM,EAAC,KAAK,CAAC,CAAC;EAClCE,OAAO,EAAE,MAAM;EACfc,UAAU,EAAE;AACd,CAAC,CAAC;AAEF,MAAMC,aAAa,GAAG,IAAAjB,cAAM,EAACkB,gBAAO,CAAC,CAAC,CAAC;EAAEjB;AAAM,CAAC,MAAM;EACpD,uBAAuB,EAAE;IACvBkB,QAAQ,EAAElB,KAAK,CAACmB,UAAU,CAACD,QAAQ,GAAG,CAAC;IACvCE,UAAU,EAAE,KAAK;IACjBC,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC,CAAC;AAEH,MAAMC,SAAS,GAAG,IAAAvB,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC;EAAEC;AAAM,CAAC,MAAM;EAC9CkB,QAAQ,EAAElB,KAAK,CAACmB,UAAU,CAACD,QAAQ,GAAG,CAAC;EACvCK,KAAK,EAAEvB,KAAK,CAACwB,OAAO,CAACC,KAAK,CAACC,IAAI;EAC/BjB,UAAU,EAAET,KAAK,CAACG,OAAO,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEI,MAAMwB,IAAI,SAASC,cAAK,CAACC,SAAS,CAAC;EAAAC,YAAA,GAAAC,IAAA;IAAA,SAAAA,IAAA;IAAA,IAAAC,gBAAA,CAAAC,OAAA,6BACpB,CAACC,SAAS,EAAEX,KAAK,KAAK;MACxC,MAAM;QAAEY;MAAe,CAAC,GAAG,IAAI,CAACC,KAAK;MACrC,MAAMC,KAAK,GAAG,GAAGH,SAAS,OAAO;MAEjCC,cAAc,CAACE,KAAK,EAAEd,KAAK,CAAC;IAC9B,CAAC;IAAA,IAAAS,gBAAA,CAAAC,OAAA,yCAE+B,CAACK,KAAK,EAAEC,UAAU,KAAK;MACrD,MAAM;QACJC,KAAK,EAAE;UAAEC,UAAU;UAAEC;QAAO,CAAC;QAC7BC,aAAa,EAAE;UAAEC,mBAAmB,GAAG,CAAC;QAAE,CAAC;QAC3CC,sBAAsB;QACtBC;MACF,CAAC,GAAG,IAAI,CAACV,KAAK;MAEd,MAAMW,mBAAmB,GAAG;QAAE,GAAGN,UAAU;QAAE,CAACF,UAAU,GAAGD;MAAM,CAAC;;MAElE;MACA,MAAMU,iBAAiB,GAAG,IAAAC,4BAAqB,EAC7CR,UAAU,EACVM,mBAAmB,EACnBH,mBAAmB,CAACM,OAAO,EAC3BX,UACF,CAAC;MACD;MACA,MAAMY,WAAW,GAAG,IAAAC,mBAAY,EAACV,MAAM,CAAC;MACxC;MACA,MAAMW,aAAa,GAAG,IAAAC,uBAAgB,EAACb,UAAU,EAAEO,iBAAiB,EAAEG,WAAW,CAAC;MAClF;;MAEAL,cAAc,CAAC,IAAAS,kBAAW,EAACF,aAAa,CAAC,CAAC;MAC1CR,sBAAsB,CAACG,iBAAiB,CAAC;IAC3C,CAAC;EAAA;EAEDQ,MAAMA,CAAA,EAAG;IACP,MAAM;MACJb,aAAa;MACbH,KAAK;MACLiB,YAAY;MACZC,kBAAkB;MAClBC,sBAAsB;MACtBC,aAAa;MACbC,sBAAsB;MACtBC,eAAe;MACfC,kBAAkB;MAClBlB,sBAAsB;MACtBmB,4BAA4B;MAC5BlB;IACF,CAAC,GAAG,IAAI,CAACV,KAAK;IACd,MAAM;MACJ6B,sBAAsB,GAAG,CAAC,CAAC;MAC3BC,iBAAiB,GAAG,CAAC,CAAC;MACtBC,aAAa,GAAG,CAAC,CAAC;MAClBC,cAAc,GAAG,CAAC,CAAC;MACnBC,eAAe,GAAG,CAAC,CAAC;MACpBC,cAAc,GAAG,CAAC,CAAC;MACnB1B,mBAAmB,GAAG,CAAC,CAAC;MACxB2B,MAAM,GAAG,CAAC,CAAC;MACXC,SAAS,GAAG,CAAC,CAAC;MACdC,qBAAqB;MACrBC,UAAU,GAAG,CAAC,CAAC;MACfC,mBAAmB,GAAG,CAAC,CAAC;MACxBC,UAAU,GAAG,CAAC,CAAC;MACfC,aAAa,GAAG,CAAC,CAAC;MAClBC,QAAQ,GAAG,CAAC,CAAC;MACbC,eAAe,GAAG,CAAC;IACrB,CAAC,GAAGpC,aAAa,IAAI,CAAC,CAAC;IACvB,MAAM;MACJqC,MAAM;MACNC,aAAa;MACbC,aAAa;MACbC,gBAAgB;MAChBC,iBAAiB;MACjBC,0BAA0B;MAC1BC;IACF,CAAC,GAAG9C,KAAK,IAAI,CAAC,CAAC;IACf,MAAM;MACJ+B,MAAM,EAAEgB,WAAW;MACnBf,SAAS,EAAEgB,cAAc;MACzB9C,MAAM,EAAE+C,WAAW;MACnBC,UAAU,EAAEC,eAAe;MAC3BhB,mBAAmB,EAAEiB;IACvB,CAAC,GAAGZ,MAAM,IAAI,CAAC,CAAC;IAChB,MAAMa,iBAAiB,GAAG,IAAAC,gCAAyB,EAACnD,aAAa,CAAC;IAElE,MAAMoD,oBAAoB,GAAG5B,aAAa,IAAIA,aAAa,CAACI,MAAM;IAClE,MAAMyB,qBAAqB,GAAG5B,cAAc,IAAIA,cAAc,CAACG,MAAM;IAErE,MAAM0B,WAAW,GAAG;MAClBC,QAAQ,EAAEZ,qBAAqB,KAAK,KAAK,GAAG,KAAK,GAAG;IACtD,CAAC;IAED,MAAMa,aAAa,GAAG;MACpB9B,eAAe,EAAEA,eAAe,CAACxE,QAAQ,IAAIF,MAAM,CAAC0E,eAAe,CAAC+B,KAAK,CAAC;MAC1E9B,cAAc,EAAEA,cAAc,CAACzE,QAAQ,IAAIF,MAAM,CAAC2E,cAAc,CAAC8B,KAAK,CAAC;MACvElB,aAAa,EAAEX,MAAM,CAAC1E,QAAQ,IAAIF,MAAM,CAAC4E,MAAM,CAAC6B,KAAK,CAAC;MACtD,kBAAkB,EAAEtB,QAAQ,CAACjF,QAAQ,IAAIF,MAAM,CAACmF,QAAQ,CAACsB,KAAK,EAAE,IAAI,CAAC;MACrEtB,QAAQ,EAAEA,QAAQ,CAACjF,QAAQ,IAAIiF,QAAQ,CAAC5B,OAAO,IAAItD,QAAQ,CAACmF,eAAe,CAACqB,KAAK,EAAErB,eAAe,CAACsB,OAAO;IAC5G,CAAC;IACD,MAAMC,eAAe,GAAG;MACtBjB,0BAA0B,EAAEV,mBAAmB,CAAC9E,QAAQ,IAAIF,MAAM,CAACgF,mBAAmB,CAACyB,KAAK,CAAC;MAC7FjB,gBAAgB,EAAEX,SAAS,CAAC3E,QAAQ,IAAIF,MAAM,CAAC6E,SAAS,CAAC4B,KAAK,CAAC;MAC/DhB,iBAAiB,EAAEV,UAAU,CAAC7E,QAAQ,IAAIF,MAAM,CAAC+E,UAAU,CAAC0B,KAAK,CAAC;MAClEG,aAAa,EAAE3B,UAAU,EAAE/E,QAAQ,IAAIF,MAAM,CAACiF,UAAU,EAAEwB,KAAK;IACjE,CAAC;IAED,MAAMI,cAAc,GAAGA,CAACpE,KAAK,GAAG,CAAC,CAAC,MAAM;MACtC,GAAG6B,sBAAsB;MACzB,GAAG7B;IACL,CAAC,CAAC;IAEF,oBACEvD,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACzH,SAAA,CAAA0H,MAAM,CAACC,YAAY;MAClB1B,aAAa,EAAEA,aAAc;MAC7BxC,UAAU,EAAEyB,iBAAkB;MAC9B0C,YAAY,EAAEnC,qBAAsB;MACpC5E,QAAQ,eACNhB,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAAC/G,KAAK;QACJ8C,KAAK,EAAEA,KAAM;QACbqE,aAAa,EAAEhD,sBAAuB;QACtClB,aAAa,EAAEA,aAAc;QAC7BmE,qBAAqB,EAAEnD,sBAAuB;QAC9CoD,MAAM,EAAE;UACNC,QAAQ,EAAEb,aAAa;UACvBc,UAAU,EAAEX;QACd;MAAE,CACH;IACF,GAEAjB,0BAA0B,iBACzBxG,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAAClG,eAAe;MAAC6F,KAAK,EAAEzB,mBAAmB,CAACyB;IAAM,gBAChDvH,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACvH,aAAA,CAAA+C,OAAY;MACXiF,MAAM,EAAE1E,KAAK,CAACmC,mBAAmB,IAAI,EAAG;MACxCwC,QAAQ,EAAEnD,4BAA6B;MACvCP,YAAY,EAAEA,YAAa;MAC3B2D,QAAQ,EAAE,KAAM;MAChB3F,KAAK,EAAEmE,wBAAyB;MAChCK,WAAW,EAAEA,WAAY;MACzBoB,WAAW,EAAEb,cAAc,CAAC7B,mBAAmB,EAAE2C,kBAAkB,CAAE;MACrE5C,UAAU,EAAEU,iBAAkB;MAC9BjB,aAAa,EAAGA,aAAa,IAAIA,aAAa,CAACQ,mBAAmB,IAAKoB,oBAAqB;MAC5F3B,cAAc,EAAGA,cAAc,IAAIA,cAAc,CAACO,mBAAmB,IAAKqB,qBAAsB;MAChGtC,kBAAkB,EAAEA,kBAAmB;MACvC6D,uBAAuB,EAAE,CAAC;QAAEzC,QAAQ,EAAE;MAAU,CAAC,EAAE;QAAEA,QAAQ,EAAE;MAAU,CAAC,CAAE;MAC5ED,aAAa,EAAEA;IAAc,CAC9B,CAAC,EACDe,wBAAwB,iBAAI/G,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACnF,SAAS,QAAEsE,wBAAoC,CAC9D,CAClB,EAEAV,aAAa,iBACZrG,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAAClG,eAAe;MAAC6F,KAAK,EAAE7B,MAAM,CAAC6B;IAAM,gBACnCvH,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACvH,aAAA,CAAA+C,OAAY;MACXiF,MAAM,EAAE1E,KAAK,CAAC+B,MAAM,IAAI,EAAG;MAC3B4C,QAAQ,EAAErD,eAAgB;MAC1BL,YAAY,EAAEA,YAAa;MAC3B2D,QAAQ,EAAE,KAAM;MAChB3F,KAAK,EAAE8D,WAAY;MACnBU,WAAW,EAAEA,WAAY;MACzBoB,WAAW,EAAEb,cAAc,CAACjC,MAAM,EAAE+C,kBAAkB,CAAE;MACxD5C,UAAU,EAAEU,iBAAkB;MAC9BjB,aAAa,EAAE4B,oBAAqB;MACpC3B,cAAc,EAAE4B,qBAAsB;MACtCtC,kBAAkB,EAAEA,kBAAmB;MACvC6D,uBAAuB,EAAE,CAAC;QAAEzC,QAAQ,EAAE;MAAU,CAAC,EAAE;QAAEA,QAAQ,EAAE;MAAU,CAAC,CAAE;MAC5ED,aAAa,EAAEA;IAAc,CAC9B,CAAC,EACDU,WAAW,iBAAI1G,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACnF,SAAS,QAAEiE,WAAuB,CACpC,CAClB,eAED1G,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAAC3F,aAAa,qBACZjC,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAAC9F,UAAU;MAAC6G,OAAO,EAAC;IAAI,GAAC,gBAEb,CAAC,eACb3I,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACzF,aAAa;MACZyG,oBAAoB;MACpBC,oBAAoB;MACpBC,SAAS,EAAE,MAAO;MAClBC,KAAK,EAAE/B;IAAkB,gBAEzBhH,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACpH,KAAA,CAAA4C,OAAI;MAACf,QAAQ,EAAE,OAAQ;MAACK,KAAK,EAAE,SAAU;MAACsG,KAAK,EAAE;QAAEC,KAAK,EAAE;MAAQ;IAAE,CAAE,CAC1D,CACF,CAAC,eAEhBjJ,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAAClH,eAAA,CAAA0C,OAAc;MACb8F,YAAY,EAAEvF,KAAK,CAACuF,YAAa;MACjCC,WAAW,EAAExF,KAAK,CAACwF,WAAY;MAC/BC,YAAY,EAAEzF,KAAK,CAACyF,YAAa;MACjCC,WAAW,EAAE1F,KAAK,CAAC0F,WAAY;MAC/BC,oBAAoB,EAAG5G,KAAK,IAAK,IAAI,CAAC6G,iBAAiB,CAAC,SAAS,EAAE7G,KAAK,CAAE;MAC1E8G,oBAAoB,EAAG9G,KAAK,IAAK,IAAI,CAAC6G,iBAAiB,CAAC,SAAS,EAAE7G,KAAK;IAAE,CAC3E,CAAC,eAEF1C,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACjH,iBAAA,CAAAyC,OAAgB;MACfQ,UAAU,EAAED,KAAK,CAACC,UAAW;MAC7B6F,QAAQ,EAAE9F,KAAK,CAAC8F,QAAS;MACzBjE,eAAe,EAAE7B,KAAK,CAAC6B,eAAgB;MACvCkE,SAAS,EAAE,CAAC,CAAC9C,WAAW,IAAI,CAAC,CAACE,eAAgB;MAC9CoC,YAAY,EAAEvF,KAAK,CAACuF,YAAa;MACjCE,YAAY,EAAEzF,KAAK,CAACyF,YAAa;MACjCO,oBAAoB,EAAEhG,KAAK,CAACgG,oBAAqB;MACjDC,iBAAiB,EAAEjG,KAAK,CAACiG,iBAAkB;MAC3C5F,sBAAsB,EAAEA,sBAAuB;MAC/CC,cAAc,EAAEA,cAAe;MAC/Bc,aAAa,EAAEA,aAAc;MAC7BlB,MAAM,EAAEF,KAAK,CAACE,MAAO;MACrBgG,WAAW,EAAElG,KAAK,CAACkG,WAAY;MAC/BC,0BAA0B,EAAE/F,mBAAmB,CAACM,OAAQ;MACxD0F,WAAW,EAAEnF,YAAY,IAAIA,YAAY,CAACoF;IAAI,CAC/C,CAAC,EACDpD,WAAW,iBAAI5G,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACnF,SAAS,QAAEmE,WAAuB,CAAC,EACnDE,eAAe,iBAAI9G,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACnF,SAAS,QAAEqE,eAA2B,CAAC,EAE3DnD,KAAK,CAAC8F,QAAQ,iBACbzJ,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAAC5H,MAAA,CAAAoD,OAAK,CAAC6G,QAAQ,qBACbjK,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACrH,WAAA,CAAA6C,OAAU;MAACuF,OAAO,EAAC;IAAI,GAAC,kBAA4B,CAAC,eAEtD3I,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAAC3G,mBAAmB,qBAClBjB,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACrG,cAAc,qBACbvB,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACzH,SAAA,CAAA+J,eAAe;MACdC,GAAG,EAAC,sBAAsB;MAC1B5C,KAAK,EAAC,OAAO;MACb9D,KAAK,EAAEE,KAAK,CAACC,UAAU,CAACnC,KAAM;MAC9B2I,GAAG,EAAE,CAAE;MACP9B,QAAQ,EAAEA,CAAC+B,CAAC,EAAE5G,KAAK,KAAK,IAAI,CAAC6G,6BAA6B,CAAC7G,KAAK,EAAE,OAAO,CAAE;MAC3E8G,yBAAyB;IAAA,CAC1B,CACa,CAAC,eAEjBvK,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACrG,cAAc,qBACbvB,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACzH,SAAA,CAAA+J,eAAe;MACdC,GAAG,EAAC,uBAAuB;MAC3B5C,KAAK,EAAC,QAAQ;MACd9D,KAAK,EAAEE,KAAK,CAACC,UAAU,CAAC4G,MAAO;MAC/BJ,GAAG,EAAE,CAAE;MACP9B,QAAQ,EAAEA,CAAC+B,CAAC,EAAE5G,KAAK,KAAK,IAAI,CAAC6G,6BAA6B,CAAC7G,KAAK,EAAE,QAAQ,CAAE;MAC5E8G,yBAAyB;IAAA,CAC1B,CACa,CACG,CACP,CACjB,EAEAjE,gBAAgB,iBACftG,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAAClG,eAAe;MAAC6F,KAAK,EAAE5B,SAAS,CAAC4B;IAAM,gBACtCvH,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACvH,aAAA,CAAA+C,OAAY;MACXiF,MAAM,EAAE1E,KAAK,CAACgC,SAAS,IAAI,EAAG;MAC9B2C,QAAQ,EAAEpD,kBAAmB;MAC7BN,YAAY,EAAEA,YAAa;MAC3BhC,KAAK,EAAE+D,cAAe;MACtBS,WAAW,EAAEA,WAAY;MACzBoB,WAAW,EAAEb,cAAc,CAAChC,SAAS,EAAE8C,kBAAkB,CAAE;MAC3D5C,UAAU,EAAEU,iBAAkB;MAC9BjB,aAAa,EAAGA,aAAa,IAAIA,aAAa,CAACK,SAAS,IAAKuB,oBAAqB;MAClF3B,cAAc,EAAGA,cAAc,IAAIA,cAAc,CAACI,SAAS,IAAKwB,qBAAsB;MACtFtC,kBAAkB,EAAEA,kBAAmB;MACvC6D,uBAAuB,EAAE,CAAC;QAAEzC,QAAQ,EAAE;MAAU,CAAC,EAAE;QAAEA,QAAQ,EAAE;MAAU,CAAC,CAAE;MAC5ED,aAAa,EAAEA;IAAc,CAC9B,CAAC,EACDW,cAAc,iBAAI3G,MAAA,CAAAoD,OAAA,CAAAwE,aAAA,CAACnF,SAAS,QAAEkE,cAA0B,CAC1C,CAEA,CAAC;EAE1B;AACF;AAAC8D,OAAA,CAAA3H,IAAA,GAAAA,IAAA;AAEDA,IAAI,CAAC4H,SAAS,GAAG;EACf5G,aAAa,EAAE6G,kBAAS,CAACC,MAAM;EAC/BjH,KAAK,EAAEgH,kBAAS,CAACC,MAAM,CAACC,UAAU;EAClCjG,YAAY,EAAE+F,kBAAS,CAACG,KAAK,CAAC;IAC5Bd,GAAG,EAAEW,kBAAS,CAACI,IAAI;IACnBC,MAAM,EAAEL,kBAAS,CAACI;EACpB,CAAC,CAAC;EACFlG,kBAAkB,EAAE8F,kBAAS,CAACG,KAAK,CAAC;IAClCd,GAAG,EAAEW,kBAAS,CAACI,IAAI;IACnBC,MAAM,EAAEL,kBAAS,CAACI;EACpB,CAAC,CAAC;EACFhG,aAAa,EAAE4F,kBAAS,CAACI,IAAI,CAACF,UAAU;EACxCvH,cAAc,EAAEqH,kBAAS,CAACI,IAAI,CAACF,UAAU;EACzC5F,eAAe,EAAE0F,kBAAS,CAACI,IAAI,CAACF,UAAU;EAC1C7G,sBAAsB,EAAE2G,kBAAS,CAACI,IAAI,CAACF,UAAU;EACjD5G,cAAc,EAAE0G,kBAAS,CAACI,IAAI,CAACF,UAAU;EACzC7F,sBAAsB,EAAE2F,kBAAS,CAACI,IAAI,CAACF,UAAU;EACjD3F,kBAAkB,EAAEyF,kBAAS,CAACI,IAAI,CAACF,UAAU;EAC7C/F,sBAAsB,EAAE6F,kBAAS,CAACI,IAAI,CAACF,UAAU;EACjD1F,4BAA4B,EAAEwF,kBAAS,CAACI,IAAI,CAACF;AAC/C,CAAC;AAAC,IAAAI,QAAA,GAAAR,OAAA,CAAArH,OAAA,GAEaN,IAAI","ignoreList":[]}
@@ -1,116 +1,84 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.CircleShape = void 0;
9
-
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
-
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
-
18
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
19
-
20
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
21
-
22
- var CircleShape = /*#__PURE__*/function () {
23
- function CircleShape() {
24
- (0, _classCallCheck2["default"])(this, CircleShape);
9
+ class CircleShape {
10
+ static create(shapes, e) {
11
+ const newShapes = [...shapes];
12
+ const highestId = Math.max(...newShapes.map(shape => parseInt(shape.id)), 0);
13
+ const newCircle = {
14
+ id: `${highestId + 1}`,
15
+ radius: 0,
16
+ x: e.evt.layerX,
17
+ y: e.evt.layerY,
18
+ group: 'circles',
19
+ index: newShapes.length
20
+ };
21
+ newShapes.push(newCircle);
22
+ return {
23
+ shapes: newShapes,
24
+ isDrawing: true,
25
+ isDrawingShapeId: newCircle.id
26
+ };
25
27
  }
26
-
27
- (0, _createClass2["default"])(CircleShape, null, [{
28
- key: "create",
29
- value: function create(shapes, e) {
30
- var newShapes = (0, _toConsumableArray2["default"])(shapes);
31
- var highestId = Math.max.apply(Math, (0, _toConsumableArray2["default"])(newShapes.map(function (shape) {
32
- return parseInt(shape.id);
33
- })).concat([0]));
34
- var newCircle = {
35
- id: "".concat(highestId + 1),
36
- radius: 0,
37
- x: e.evt.layerX,
38
- y: e.evt.layerY,
39
- group: 'circles',
40
- index: newShapes.length
41
- };
42
- newShapes.push(newCircle);
43
- return {
44
- shapes: newShapes,
45
- isDrawing: true,
46
- isDrawingShapeId: newCircle.id
47
- };
48
- }
49
- }, {
50
- key: "finalizeCreation",
51
- value: function finalizeCreation(state, props) {
52
- var currentShapeIndex = state.shapes.findIndex(function (shape) {
53
- return shape.id === state.isDrawingShapeId;
54
- });
55
-
56
- if (currentShapeIndex !== -1) {
57
- var currentShape = state.shapes[currentShapeIndex]; // Check if the shape is a valid circle (has more than 0 radius) before finalizing
58
-
59
- if (currentShape.radius > 0) {
60
- return _objectSpread(_objectSpread({}, state), {}, {
61
- isDrawing: false,
62
- stateShapes: false,
63
- isDrawingShapeId: undefined
64
- });
65
- } else {
66
- return _objectSpread(_objectSpread({}, state), {}, {
67
- isDrawing: false,
68
- stateShapes: false,
69
- isDrawingShapeId: undefined,
70
- shapes: state.shapes.filter(function (shape) {
71
- return shape.id !== state.isDrawingShapeId;
72
- })
73
- });
74
- }
28
+ static finalizeCreation(state, props) {
29
+ const currentShapeIndex = state.shapes.findIndex(shape => shape.id === state.isDrawingShapeId);
30
+ if (currentShapeIndex !== -1) {
31
+ const currentShape = state.shapes[currentShapeIndex];
32
+
33
+ // Check if the shape is a valid circle (has more than 0 radius) before finalizing
34
+ if (currentShape.radius > 0) {
35
+ return {
36
+ ...state,
37
+ isDrawing: false,
38
+ stateShapes: false,
39
+ isDrawingShapeId: undefined
40
+ };
41
+ } else {
42
+ return {
43
+ ...state,
44
+ isDrawing: false,
45
+ stateShapes: false,
46
+ isDrawingShapeId: undefined,
47
+ shapes: state.shapes.filter(shape => shape.id !== state.isDrawingShapeId)
48
+ };
75
49
  }
76
-
77
- return _objectSpread(_objectSpread({}, state), {}, {
78
- isDrawing: false,
79
- stateShapes: false,
80
- isDrawingShapeId: undefined
81
- });
82
50
  }
83
- }, {
84
- key: "handleMouseMove",
85
- value: function handleMouseMove(state, e) {
86
- var isDrawing = state.isDrawing,
87
- isDrawingShapeId = state.isDrawingShapeId,
88
- shapes = state.shapes;
89
-
90
- if (isDrawing) {
91
- var tempShapes = (0, _toConsumableArray2["default"])(shapes);
92
- var resizingShapeIndex = tempShapes.findIndex(function (shape) {
93
- return shape.id === isDrawingShapeId;
94
- });
95
-
96
- if (resizingShapeIndex !== -1) {
97
- var resizingShape = tempShapes[resizingShapeIndex]; // Calculate radius based on mouse position
98
-
99
- var dx = e.evt.layerX - resizingShape.x;
100
- var dy = e.evt.layerY - resizingShape.y;
101
- resizingShape.radius = Math.sqrt(dx * dx + dy * dy);
102
- return {
103
- shapes: tempShapes
104
- };
105
- }
51
+ return {
52
+ ...state,
53
+ isDrawing: false,
54
+ stateShapes: false,
55
+ isDrawingShapeId: undefined
56
+ };
57
+ }
58
+ static handleMouseMove(state, e) {
59
+ const {
60
+ isDrawing,
61
+ isDrawingShapeId,
62
+ shapes
63
+ } = state;
64
+ if (isDrawing) {
65
+ const tempShapes = [...shapes];
66
+ const resizingShapeIndex = tempShapes.findIndex(shape => shape.id === isDrawingShapeId);
67
+ if (resizingShapeIndex !== -1) {
68
+ const resizingShape = tempShapes[resizingShapeIndex];
69
+
70
+ // Calculate radius based on mouse position
71
+ const dx = e.evt.layerX - resizingShape.x;
72
+ const dy = e.evt.layerY - resizingShape.y;
73
+ resizingShape.radius = Math.sqrt(dx * dx + dy * dy);
74
+ return {
75
+ shapes: tempShapes
76
+ };
106
77
  }
107
-
108
- return state;
109
78
  }
110
- }]);
111
- return CircleShape;
112
- }();
113
-
79
+ return state;
80
+ }
81
+ }
114
82
  exports.CircleShape = CircleShape;
115
- (0, _defineProperty2["default"])(CircleShape, "name", 'circle');
83
+ (0, _defineProperty2.default)(CircleShape, "name", 'circle');
116
84
  //# sourceMappingURL=circle.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/shapes/circle.js"],"names":["CircleShape","shapes","e","newShapes","highestId","Math","max","map","shape","parseInt","id","newCircle","radius","x","evt","layerX","y","layerY","group","index","length","push","isDrawing","isDrawingShapeId","state","props","currentShapeIndex","findIndex","currentShape","stateShapes","undefined","filter","tempShapes","resizingShapeIndex","resizingShape","dx","dy","sqrt"],"mappings":"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","sourcesContent":["export class CircleShape {\n static name = 'circle'\n\n static create(shapes, e) {\n const newShapes = [...shapes];\n const highestId = Math.max(...newShapes.map((shape) => parseInt(shape.id)), 0);\n const newCircle = {\n id: `${highestId + 1}`,\n radius: 0,\n x: e.evt.layerX,\n y: e.evt.layerY,\n group: 'circles',\n index: newShapes.length,\n };\n\n newShapes.push(newCircle);\n\n return {\n shapes: newShapes,\n isDrawing: true,\n isDrawingShapeId: newCircle.id,\n };\n }\n\n static finalizeCreation(state, props) {\n const currentShapeIndex = state.shapes.findIndex((shape) => shape.id === state.isDrawingShapeId);\n\n if (currentShapeIndex !== -1) {\n const currentShape = state.shapes[currentShapeIndex];\n\n // Check if the shape is a valid circle (has more than 0 radius) before finalizing\n if (currentShape.radius > 0) {\n return {\n ...state,\n isDrawing: false,\n stateShapes: false,\n isDrawingShapeId: undefined,\n };\n } else {\n return {\n ...state,\n isDrawing: false,\n stateShapes: false,\n isDrawingShapeId: undefined,\n shapes: state.shapes.filter((shape) => shape.id !== state.isDrawingShapeId),\n };\n }\n }\n\n return {\n ...state,\n isDrawing: false,\n stateShapes: false,\n isDrawingShapeId: undefined,\n };\n }\n\n static handleMouseMove(state, e) {\n const { isDrawing, isDrawingShapeId, shapes } = state;\n\n if (isDrawing) {\n const tempShapes = [...shapes];\n const resizingShapeIndex = tempShapes.findIndex((shape) => shape.id === isDrawingShapeId);\n\n if (resizingShapeIndex !== -1) {\n const resizingShape = tempShapes[resizingShapeIndex];\n\n // Calculate radius based on mouse position\n const dx = e.evt.layerX - resizingShape.x;\n const dy = e.evt.layerY - resizingShape.y;\n resizingShape.radius = Math.sqrt(dx * dx + dy * dy);\n\n return {\n shapes: tempShapes,\n };\n }\n }\n\n return state;\n }\n}\n"],"file":"circle.js"}
1
+ {"version":3,"file":"circle.js","names":["CircleShape","create","shapes","e","newShapes","highestId","Math","max","map","shape","parseInt","id","newCircle","radius","x","evt","layerX","y","layerY","group","index","length","push","isDrawing","isDrawingShapeId","finalizeCreation","state","props","currentShapeIndex","findIndex","currentShape","stateShapes","undefined","filter","handleMouseMove","tempShapes","resizingShapeIndex","resizingShape","dx","dy","sqrt","exports","_defineProperty2","default"],"sources":["../../src/shapes/circle.js"],"sourcesContent":["export class CircleShape {\n static name = 'circle'\n\n static create(shapes, e) {\n const newShapes = [...shapes];\n const highestId = Math.max(...newShapes.map((shape) => parseInt(shape.id)), 0);\n const newCircle = {\n id: `${highestId + 1}`,\n radius: 0,\n x: e.evt.layerX,\n y: e.evt.layerY,\n group: 'circles',\n index: newShapes.length,\n };\n\n newShapes.push(newCircle);\n\n return {\n shapes: newShapes,\n isDrawing: true,\n isDrawingShapeId: newCircle.id,\n };\n }\n\n static finalizeCreation(state, props) {\n const currentShapeIndex = state.shapes.findIndex((shape) => shape.id === state.isDrawingShapeId);\n\n if (currentShapeIndex !== -1) {\n const currentShape = state.shapes[currentShapeIndex];\n\n // Check if the shape is a valid circle (has more than 0 radius) before finalizing\n if (currentShape.radius > 0) {\n return {\n ...state,\n isDrawing: false,\n stateShapes: false,\n isDrawingShapeId: undefined,\n };\n } else {\n return {\n ...state,\n isDrawing: false,\n stateShapes: false,\n isDrawingShapeId: undefined,\n shapes: state.shapes.filter((shape) => shape.id !== state.isDrawingShapeId),\n };\n }\n }\n\n return {\n ...state,\n isDrawing: false,\n stateShapes: false,\n isDrawingShapeId: undefined,\n };\n }\n\n static handleMouseMove(state, e) {\n const { isDrawing, isDrawingShapeId, shapes } = state;\n\n if (isDrawing) {\n const tempShapes = [...shapes];\n const resizingShapeIndex = tempShapes.findIndex((shape) => shape.id === isDrawingShapeId);\n\n if (resizingShapeIndex !== -1) {\n const resizingShape = tempShapes[resizingShapeIndex];\n\n // Calculate radius based on mouse position\n const dx = e.evt.layerX - resizingShape.x;\n const dy = e.evt.layerY - resizingShape.y;\n resizingShape.radius = Math.sqrt(dx * dx + dy * dy);\n\n return {\n shapes: tempShapes,\n };\n }\n }\n\n return state;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -3,54 +3,46 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
-
7
6
  var _circle = require("./circle");
8
-
9
7
  Object.keys(_circle).forEach(function (key) {
10
8
  if (key === "default" || key === "__esModule") return;
11
9
  if (key in exports && exports[key] === _circle[key]) return;
12
10
  Object.defineProperty(exports, key, {
13
11
  enumerable: true,
14
- get: function get() {
12
+ get: function () {
15
13
  return _circle[key];
16
14
  }
17
15
  });
18
16
  });
19
-
20
17
  var _rectagle = require("./rectagle");
21
-
22
18
  Object.keys(_rectagle).forEach(function (key) {
23
19
  if (key === "default" || key === "__esModule") return;
24
20
  if (key in exports && exports[key] === _rectagle[key]) return;
25
21
  Object.defineProperty(exports, key, {
26
22
  enumerable: true,
27
- get: function get() {
23
+ get: function () {
28
24
  return _rectagle[key];
29
25
  }
30
26
  });
31
27
  });
32
-
33
28
  var _polygon = require("./polygon");
34
-
35
29
  Object.keys(_polygon).forEach(function (key) {
36
30
  if (key === "default" || key === "__esModule") return;
37
31
  if (key in exports && exports[key] === _polygon[key]) return;
38
32
  Object.defineProperty(exports, key, {
39
33
  enumerable: true,
40
- get: function get() {
34
+ get: function () {
41
35
  return _polygon[key];
42
36
  }
43
37
  });
44
38
  });
45
-
46
39
  var _utils = require("./utils");
47
-
48
40
  Object.keys(_utils).forEach(function (key) {
49
41
  if (key === "default" || key === "__esModule") return;
50
42
  if (key in exports && exports[key] === _utils[key]) return;
51
43
  Object.defineProperty(exports, key, {
52
44
  enumerable: true,
53
- get: function get() {
45
+ get: function () {
54
46
  return _utils[key];
55
47
  }
56
48
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/shapes/index.js"],"names":[],"mappings":";;;;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export * from './circle';\nexport * from './rectagle';\nexport * from './polygon';\nexport * from './utils';\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["_circle","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_rectagle","_polygon","_utils"],"sources":["../../src/shapes/index.js"],"sourcesContent":["export * from './circle';\nexport * from './rectagle';\nexport * from './polygon';\nexport * from './utils';\n"],"mappings":";;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,OAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,OAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,OAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,SAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,SAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,SAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,SAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,QAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,QAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,QAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,QAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,MAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,MAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,MAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,MAAA,CAAAP,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -1,114 +1,82 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.PolygonShape = void 0;
9
-
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
-
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
-
18
- var PolygonShape = /*#__PURE__*/function () {
19
- function PolygonShape() {
20
- (0, _classCallCheck2["default"])(this, PolygonShape);
9
+ class PolygonShape {
10
+ static create(shapes, e) {
11
+ const newShapes = [...shapes];
12
+ const newPolygon = {
13
+ id: 'newPolygon',
14
+ points: [{
15
+ x: e.evt.layerX,
16
+ y: e.evt.layerY
17
+ }],
18
+ group: 'polygons',
19
+ index: newShapes.length
20
+ };
21
+ newShapes.push(newPolygon);
22
+ return {
23
+ shapes: newShapes,
24
+ isDrawing: true,
25
+ isDrawingShapeId: newPolygon.id
26
+ };
21
27
  }
22
-
23
- (0, _createClass2["default"])(PolygonShape, null, [{
24
- key: "create",
25
- value: function create(shapes, e) {
26
- var newShapes = (0, _toConsumableArray2["default"])(shapes);
27
- var newPolygon = {
28
- id: 'newPolygon',
29
- points: [{
28
+ static addPoint(state, e, onPolygonComplete) {
29
+ // Number of pixels allowed to determine if the first point was clicked
30
+ const clickDelta = 5;
31
+ const shapesCopy = JSON.parse(JSON.stringify(state.shapes));
32
+ const currentShapeIndex = shapesCopy.findIndex(shape => shape.id === state.isDrawingShapeId);
33
+ if (currentShapeIndex !== -1) {
34
+ const currentShape = shapesCopy[currentShapeIndex];
35
+ if (currentShape.points && Array.isArray(currentShape.points)) {
36
+ const firstPoint = currentShape.points[0];
37
+
38
+ // If click is close enough to the first point (within clickDelta pixels), close the polygon
39
+ if (Math.abs(firstPoint.x - e.evt.layerX) <= clickDelta && Math.abs(firstPoint.y - e.evt.layerY) <= clickDelta) {
40
+ return PolygonShape.finalizeCreation(state, onPolygonComplete);
41
+ }
42
+ currentShape.points.push({
30
43
  x: e.evt.layerX,
31
44
  y: e.evt.layerY
32
- }],
33
- group: 'polygons',
34
- index: newShapes.length
35
- };
36
- newShapes.push(newPolygon);
37
- return {
38
- shapes: newShapes,
39
- isDrawing: true,
40
- isDrawingShapeId: newPolygon.id
41
- };
42
- }
43
- }, {
44
- key: "addPoint",
45
- value: function addPoint(state, e, onPolygonComplete) {
46
- // Number of pixels allowed to determine if the first point was clicked
47
- var clickDelta = 5;
48
- var shapesCopy = JSON.parse(JSON.stringify(state.shapes));
49
- var currentShapeIndex = shapesCopy.findIndex(function (shape) {
50
- return shape.id === state.isDrawingShapeId;
51
- });
52
-
53
- if (currentShapeIndex !== -1) {
54
- var currentShape = shapesCopy[currentShapeIndex];
55
-
56
- if (currentShape.points && Array.isArray(currentShape.points)) {
57
- var firstPoint = currentShape.points[0]; // If click is close enough to the first point (within clickDelta pixels), close the polygon
58
-
59
- if (Math.abs(firstPoint.x - e.evt.layerX) <= clickDelta && Math.abs(firstPoint.y - e.evt.layerY) <= clickDelta) {
60
- return PolygonShape.finalizeCreation(state, onPolygonComplete);
61
- }
62
-
63
- currentShape.points.push({
64
- x: e.evt.layerX,
65
- y: e.evt.layerY
66
- });
67
- shapesCopy[currentShapeIndex] = currentShape;
68
- return {
69
- shapes: shapesCopy
70
- };
71
- }
72
- }
73
-
74
- return state;
75
- }
76
- }, {
77
- key: "finalizeCreation",
78
- value: function finalizeCreation(state, onPolygonComplete) {
79
- var shapes = state.shapes;
80
- var tempShapes = (0, _toConsumableArray2["default"])(shapes);
81
- var highestId = Math.max.apply(Math, (0, _toConsumableArray2["default"])(state.shapes.map(function (shape) {
82
- return parseInt(shape.id) || 0;
83
- })).concat([0]));
84
- var polygonIndex = tempShapes.findIndex(function (shape) {
85
- return shape.id === state.isDrawingShapeId;
86
- });
87
-
88
- if (polygonIndex !== -1 && tempShapes[polygonIndex].points.length > 2) {
89
- var completedPolygon = tempShapes[polygonIndex];
90
- completedPolygon.id = "".concat(highestId + 1);
91
- onPolygonComplete(tempShapes);
45
+ });
46
+ shapesCopy[currentShapeIndex] = currentShape;
92
47
  return {
93
- isDrawing: false,
94
- shapes: tempShapes,
95
- isDrawingShapeId: undefined
48
+ shapes: shapesCopy
96
49
  };
97
50
  }
98
-
99
- return state;
100
- } // No need to update anything on mouse move,
101
- // but it's here if we need to add any logic later.
102
-
103
- }, {
104
- key: "handleMouseMove",
105
- value: function handleMouseMove(state, e) {
106
- return state;
107
51
  }
108
- }]);
109
- return PolygonShape;
110
- }();
52
+ return state;
53
+ }
54
+ static finalizeCreation(state, onPolygonComplete) {
55
+ const {
56
+ shapes
57
+ } = state;
58
+ const tempShapes = [...shapes];
59
+ const highestId = Math.max(...state.shapes.map(shape => parseInt(shape.id) || 0), 0);
60
+ const polygonIndex = tempShapes.findIndex(shape => shape.id === state.isDrawingShapeId);
61
+ if (polygonIndex !== -1 && tempShapes[polygonIndex].points.length > 2) {
62
+ const completedPolygon = tempShapes[polygonIndex];
63
+ completedPolygon.id = `${highestId + 1}`;
64
+ onPolygonComplete(tempShapes);
65
+ return {
66
+ isDrawing: false,
67
+ shapes: tempShapes,
68
+ isDrawingShapeId: undefined
69
+ };
70
+ }
71
+ return state;
72
+ }
111
73
 
74
+ // No need to update anything on mouse move,
75
+ // but it's here if we need to add any logic later.
76
+ static handleMouseMove(state, e) {
77
+ return state;
78
+ }
79
+ }
112
80
  exports.PolygonShape = PolygonShape;
113
- (0, _defineProperty2["default"])(PolygonShape, "name", 'polygon');
81
+ (0, _defineProperty2.default)(PolygonShape, "name", 'polygon');
114
82
  //# sourceMappingURL=polygon.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/shapes/polygon.js"],"names":["PolygonShape","shapes","e","newShapes","newPolygon","id","points","x","evt","layerX","y","layerY","group","index","length","push","isDrawing","isDrawingShapeId","state","onPolygonComplete","clickDelta","shapesCopy","JSON","parse","stringify","currentShapeIndex","findIndex","shape","currentShape","Array","isArray","firstPoint","Math","abs","finalizeCreation","tempShapes","highestId","max","map","parseInt","polygonIndex","completedPolygon","undefined"],"mappings":"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","sourcesContent":["export class PolygonShape {\n static name = 'polygon'\n\n static create(shapes, e) {\n const newShapes = [...shapes];\n const newPolygon = {\n id: 'newPolygon',\n points: [{ x: e.evt.layerX, y: e.evt.layerY }],\n group: 'polygons',\n index: newShapes.length,\n };\n\n newShapes.push(newPolygon);\n\n return {\n shapes: newShapes,\n isDrawing: true,\n isDrawingShapeId: newPolygon.id,\n };\n }\n\n static addPoint(state, e, onPolygonComplete) {\n // Number of pixels allowed to determine if the first point was clicked\n const clickDelta = 5;\n\n const shapesCopy = JSON.parse(JSON.stringify(state.shapes));\n const currentShapeIndex = shapesCopy.findIndex((shape) => shape.id === state.isDrawingShapeId);\n\n if (currentShapeIndex !== -1) {\n const currentShape = shapesCopy[currentShapeIndex];\n if (currentShape.points && Array.isArray(currentShape.points)) {\n const firstPoint = currentShape.points[0];\n\n // If click is close enough to the first point (within clickDelta pixels), close the polygon\n if (\n Math.abs(firstPoint.x - e.evt.layerX) <= clickDelta &&\n Math.abs(firstPoint.y - e.evt.layerY) <= clickDelta\n ) {\n return PolygonShape.finalizeCreation(state, onPolygonComplete);\n }\n\n currentShape.points.push({ x: e.evt.layerX, y: e.evt.layerY });\n shapesCopy[currentShapeIndex] = currentShape;\n\n return {\n shapes: shapesCopy,\n };\n }\n }\n return state;\n }\n\n static finalizeCreation(state, onPolygonComplete) {\n const { shapes } = state;\n const tempShapes = [...shapes];\n const highestId = Math.max(...state.shapes.map((shape) => parseInt(shape.id) || 0), 0);\n\n const polygonIndex = tempShapes.findIndex((shape) => shape.id === state.isDrawingShapeId);\n\n if (polygonIndex !== -1 && tempShapes[polygonIndex].points.length > 2) {\n const completedPolygon = tempShapes[polygonIndex];\n\n completedPolygon.id = `${highestId + 1}`;\n onPolygonComplete(tempShapes);\n\n return {\n isDrawing: false,\n shapes: tempShapes,\n isDrawingShapeId: undefined,\n };\n }\n\n return state;\n }\n\n // No need to update anything on mouse move,\n // but it's here if we need to add any logic later.\n static handleMouseMove(state, e) {\n return state;\n }\n}\n"],"file":"polygon.js"}
1
+ {"version":3,"file":"polygon.js","names":["PolygonShape","create","shapes","e","newShapes","newPolygon","id","points","x","evt","layerX","y","layerY","group","index","length","push","isDrawing","isDrawingShapeId","addPoint","state","onPolygonComplete","clickDelta","shapesCopy","JSON","parse","stringify","currentShapeIndex","findIndex","shape","currentShape","Array","isArray","firstPoint","Math","abs","finalizeCreation","tempShapes","highestId","max","map","parseInt","polygonIndex","completedPolygon","undefined","handleMouseMove","exports","_defineProperty2","default"],"sources":["../../src/shapes/polygon.js"],"sourcesContent":["export class PolygonShape {\n static name = 'polygon'\n\n static create(shapes, e) {\n const newShapes = [...shapes];\n const newPolygon = {\n id: 'newPolygon',\n points: [{ x: e.evt.layerX, y: e.evt.layerY }],\n group: 'polygons',\n index: newShapes.length,\n };\n\n newShapes.push(newPolygon);\n\n return {\n shapes: newShapes,\n isDrawing: true,\n isDrawingShapeId: newPolygon.id,\n };\n }\n\n static addPoint(state, e, onPolygonComplete) {\n // Number of pixels allowed to determine if the first point was clicked\n const clickDelta = 5;\n\n const shapesCopy = JSON.parse(JSON.stringify(state.shapes));\n const currentShapeIndex = shapesCopy.findIndex((shape) => shape.id === state.isDrawingShapeId);\n\n if (currentShapeIndex !== -1) {\n const currentShape = shapesCopy[currentShapeIndex];\n if (currentShape.points && Array.isArray(currentShape.points)) {\n const firstPoint = currentShape.points[0];\n\n // If click is close enough to the first point (within clickDelta pixels), close the polygon\n if (\n Math.abs(firstPoint.x - e.evt.layerX) <= clickDelta &&\n Math.abs(firstPoint.y - e.evt.layerY) <= clickDelta\n ) {\n return PolygonShape.finalizeCreation(state, onPolygonComplete);\n }\n\n currentShape.points.push({ x: e.evt.layerX, y: e.evt.layerY });\n shapesCopy[currentShapeIndex] = currentShape;\n\n return {\n shapes: shapesCopy,\n };\n }\n }\n return state;\n }\n\n static finalizeCreation(state, onPolygonComplete) {\n const { shapes } = state;\n const tempShapes = [...shapes];\n const highestId = Math.max(...state.shapes.map((shape) => parseInt(shape.id) || 0), 0);\n\n const polygonIndex = tempShapes.findIndex((shape) => shape.id === state.isDrawingShapeId);\n\n if (polygonIndex !== -1 && tempShapes[polygonIndex].points.length > 2) {\n const completedPolygon = tempShapes[polygonIndex];\n\n completedPolygon.id = `${highestId + 1}`;\n onPolygonComplete(tempShapes);\n\n return {\n isDrawing: false,\n shapes: tempShapes,\n isDrawingShapeId: undefined,\n };\n }\n\n return state;\n }\n\n // No need to update anything on mouse move,\n // but it's here if we need to add any logic later.\n static handleMouseMove(state, e) {\n return state;\n }\n}\n"],"mappings":"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","ignoreList":[]}