@pie-element/hotspot 11.1.2-next.5 → 11.1.3

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 (234) hide show
  1. package/CHANGELOG.json +997 -0
  2. package/CHANGELOG.md +2226 -0
  3. package/LICENSE.md +5 -0
  4. package/README.md +1 -0
  5. package/configure/CHANGELOG.json +682 -0
  6. package/configure/CHANGELOG.md +1963 -0
  7. package/configure/lib/DeleteWidget.js +64 -0
  8. package/configure/lib/DeleteWidget.js.map +1 -0
  9. package/configure/lib/button.js +42 -0
  10. package/configure/lib/button.js.map +1 -0
  11. package/configure/lib/buttons/circle.js +33 -0
  12. package/configure/lib/buttons/circle.js.map +1 -0
  13. package/configure/lib/buttons/polygon.js +39 -0
  14. package/configure/lib/buttons/polygon.js.map +1 -0
  15. package/configure/lib/buttons/rectangle.js +39 -0
  16. package/configure/lib/buttons/rectangle.js.map +1 -0
  17. package/configure/lib/defaults.js +155 -0
  18. package/configure/lib/defaults.js.map +1 -0
  19. package/configure/lib/hotspot-circle.js +192 -0
  20. package/configure/lib/hotspot-circle.js.map +1 -0
  21. package/configure/lib/hotspot-container.js +320 -0
  22. package/configure/lib/hotspot-container.js.map +1 -0
  23. package/configure/lib/hotspot-drawable.js +519 -0
  24. package/configure/lib/hotspot-drawable.js.map +1 -0
  25. package/configure/lib/hotspot-palette.js +107 -0
  26. package/configure/lib/hotspot-palette.js.map +1 -0
  27. package/configure/lib/hotspot-polygon.js +293 -0
  28. package/configure/lib/hotspot-polygon.js.map +1 -0
  29. package/configure/lib/hotspot-rectangle.js +190 -0
  30. package/configure/lib/hotspot-rectangle.js.map +1 -0
  31. package/configure/lib/icons.js +7 -0
  32. package/configure/lib/icons.js.map +1 -0
  33. package/configure/lib/image-konva.js +66 -0
  34. package/configure/lib/image-konva.js.map +1 -0
  35. package/configure/lib/index.js +194 -0
  36. package/configure/lib/index.js.map +1 -0
  37. package/configure/lib/root.js +330 -0
  38. package/configure/lib/root.js.map +1 -0
  39. package/configure/lib/shapes/circle.js +84 -0
  40. package/configure/lib/shapes/circle.js.map +1 -0
  41. package/configure/lib/shapes/index.js +50 -0
  42. package/configure/lib/shapes/index.js.map +1 -0
  43. package/configure/lib/shapes/polygon.js +82 -0
  44. package/configure/lib/shapes/polygon.js.map +1 -0
  45. package/configure/lib/shapes/rectagle.js +84 -0
  46. package/configure/lib/shapes/rectagle.js.map +1 -0
  47. package/configure/lib/shapes/utils.js +21 -0
  48. package/configure/lib/shapes/utils.js.map +1 -0
  49. package/configure/lib/upload-control.js +41 -0
  50. package/configure/lib/upload-control.js.map +1 -0
  51. package/configure/lib/utils.js +185 -0
  52. package/configure/lib/utils.js.map +1 -0
  53. package/configure/package.json +26 -0
  54. package/configure/src/DeleteWidget.jsx +51 -0
  55. package/configure/src/__tests__/DeleteWidget.test.jsx +366 -0
  56. package/configure/src/__tests__/button.test.jsx +198 -0
  57. package/configure/src/__tests__/hotspot-circle.test.jsx +259 -0
  58. package/configure/src/__tests__/hotspot-container.test.js +366 -0
  59. package/configure/src/__tests__/hotspot-drawable.test.js +271 -0
  60. package/configure/src/__tests__/hotspot-palette.test.jsx +71 -0
  61. package/configure/src/__tests__/image-konva.test.jsx +226 -0
  62. package/configure/src/__tests__/index.test.js +329 -0
  63. package/configure/src/__tests__/root.test.js +400 -0
  64. package/configure/src/__tests__/utils.test.js +241 -0
  65. package/configure/src/button.jsx +35 -0
  66. package/configure/src/buttons/circle.jsx +18 -0
  67. package/configure/src/buttons/polygon.jsx +29 -0
  68. package/configure/src/buttons/rectangle.jsx +29 -0
  69. package/configure/src/defaults.js +109 -0
  70. package/configure/src/hotspot-circle.jsx +183 -0
  71. package/configure/src/hotspot-container.jsx +330 -0
  72. package/configure/src/hotspot-drawable.jsx +527 -0
  73. package/configure/src/hotspot-palette.jsx +90 -0
  74. package/configure/src/hotspot-polygon.jsx +294 -0
  75. package/configure/src/hotspot-rectangle.jsx +169 -0
  76. package/configure/src/icons.js +5 -0
  77. package/configure/src/image-konva.jsx +63 -0
  78. package/configure/src/index.js +208 -0
  79. package/configure/src/root.jsx +346 -0
  80. package/configure/src/shapes/circle.js +81 -0
  81. package/configure/src/shapes/index.js +4 -0
  82. package/configure/src/shapes/polygon.js +81 -0
  83. package/configure/src/shapes/rectagle.js +82 -0
  84. package/configure/src/shapes/utils.js +16 -0
  85. package/configure/src/upload-control.jsx +33 -0
  86. package/configure/src/utils.js +210 -0
  87. package/controller/CHANGELOG.json +362 -0
  88. package/controller/CHANGELOG.md +1304 -0
  89. package/controller/lib/defaults.js +33 -0
  90. package/controller/lib/defaults.js.map +1 -0
  91. package/controller/lib/index.js +341 -0
  92. package/controller/lib/index.js.map +1 -0
  93. package/controller/lib/utils.js +32 -0
  94. package/controller/lib/utils.js.map +1 -0
  95. package/controller/package.json +18 -0
  96. package/controller/src/__tests__/index.test.js +419 -0
  97. package/controller/src/__tests__/utils.test.js +5 -0
  98. package/controller/src/defaults.js +19 -0
  99. package/controller/src/index.js +328 -0
  100. package/controller/src/utils.js +29 -0
  101. package/docs/config-schema.json +2023 -0
  102. package/docs/config-schema.json.md +1495 -0
  103. package/docs/demo/config.js +8 -0
  104. package/docs/demo/generate.js +118 -0
  105. package/docs/demo/index.html +1 -0
  106. package/docs/demo/session.js +11 -0
  107. package/docs/pie-schema.json +1204 -0
  108. package/docs/pie-schema.json.md +851 -0
  109. package/lib/hotspot/circle.js +156 -0
  110. package/lib/hotspot/circle.js.map +1 -0
  111. package/lib/hotspot/container.js +206 -0
  112. package/lib/hotspot/container.js.map +1 -0
  113. package/lib/hotspot/icons.js +8 -0
  114. package/lib/hotspot/icons.js.map +1 -0
  115. package/lib/hotspot/image-konva-tooltip.js +86 -0
  116. package/lib/hotspot/image-konva-tooltip.js.map +1 -0
  117. package/lib/hotspot/index.js +163 -0
  118. package/lib/hotspot/index.js.map +1 -0
  119. package/lib/hotspot/polygon.js +203 -0
  120. package/lib/hotspot/polygon.js.map +1 -0
  121. package/lib/hotspot/rectangle.js +175 -0
  122. package/lib/hotspot/rectangle.js.map +1 -0
  123. package/lib/index.js +213 -0
  124. package/lib/index.js.map +1 -0
  125. package/lib/session-updater.js +42 -0
  126. package/lib/session-updater.js.map +1 -0
  127. package/package.json +18 -83
  128. package/src/__tests__/container.test.jsx +58 -0
  129. package/src/__tests__/index.test.js +123 -0
  130. package/src/__tests__/session-updater.test.jsx +69 -0
  131. package/src/hotspot/__tests__/circle.test.jsx +464 -0
  132. package/src/hotspot/__tests__/container.test.jsx +546 -0
  133. package/src/hotspot/__tests__/image-konva-tooltip.test.jsx +510 -0
  134. package/src/hotspot/__tests__/polygon.test.jsx +502 -0
  135. package/src/hotspot/__tests__/rectangle.test.jsx +418 -0
  136. package/src/hotspot/circle.jsx +152 -0
  137. package/src/hotspot/container.jsx +217 -0
  138. package/src/hotspot/icons.js +7 -0
  139. package/src/hotspot/image-konva-tooltip.jsx +76 -0
  140. package/src/hotspot/index.jsx +165 -0
  141. package/src/hotspot/polygon.jsx +195 -0
  142. package/src/hotspot/rectangle.jsx +171 -0
  143. package/src/index.js +226 -0
  144. package/src/session-updater.js +29 -0
  145. package/configure.js +0 -2
  146. package/controller.js +0 -1
  147. package/dist/author/DeleteWidget.d.ts +0 -38
  148. package/dist/author/DeleteWidget.js +0 -46
  149. package/dist/author/button.d.ts +0 -31
  150. package/dist/author/button.js +0 -27
  151. package/dist/author/buttons/circle.d.ts +0 -18
  152. package/dist/author/buttons/circle.js +0 -25
  153. package/dist/author/buttons/polygon.d.ts +0 -18
  154. package/dist/author/buttons/polygon.js +0 -36
  155. package/dist/author/buttons/rectangle.d.ts +0 -18
  156. package/dist/author/buttons/rectangle.js +0 -36
  157. package/dist/author/defaults.d.ts +0 -157
  158. package/dist/author/defaults.js +0 -119
  159. package/dist/author/hotspot-circle.d.ts +0 -21
  160. package/dist/author/hotspot-circle.js +0 -124
  161. package/dist/author/hotspot-container.d.ts +0 -29
  162. package/dist/author/hotspot-container.js +0 -210
  163. package/dist/author/hotspot-drawable.d.ts +0 -31
  164. package/dist/author/hotspot-drawable.js +0 -312
  165. package/dist/author/hotspot-palette.d.ts +0 -14
  166. package/dist/author/hotspot-palette.js +0 -72
  167. package/dist/author/hotspot-polygon.d.ts +0 -38
  168. package/dist/author/hotspot-polygon.js +0 -200
  169. package/dist/author/hotspot-rectangle.d.ts +0 -20
  170. package/dist/author/hotspot-rectangle.js +0 -119
  171. package/dist/author/icons.d.ts +0 -9
  172. package/dist/author/icons.js +0 -4
  173. package/dist/author/image-konva.d.ts +0 -19
  174. package/dist/author/image-konva.js +0 -49
  175. package/dist/author/index.d.ts +0 -52
  176. package/dist/author/index.js +0 -143
  177. package/dist/author/root.d.ts +0 -15
  178. package/dist/author/root.js +0 -215
  179. package/dist/author/shapes/circle.d.ts +0 -18
  180. package/dist/author/shapes/circle.js +0 -47
  181. package/dist/author/shapes/index.d.ts +0 -12
  182. package/dist/author/shapes/polygon.d.ts +0 -19
  183. package/dist/author/shapes/polygon.js +0 -51
  184. package/dist/author/shapes/rectagle.d.ts +0 -18
  185. package/dist/author/shapes/rectagle.js +0 -57
  186. package/dist/author/shapes/utils.d.ts +0 -19
  187. package/dist/author/shapes/utils.js +0 -16
  188. package/dist/author/upload-control.d.ts +0 -29
  189. package/dist/author/upload-control.js +0 -28
  190. package/dist/author/utils.d.ts +0 -24
  191. package/dist/author/utils.js +0 -83
  192. package/dist/browser/ReactKonva-CFo7dxdy.js +0 -19336
  193. package/dist/browser/ReactKonva-CFo7dxdy.js.map +0 -1
  194. package/dist/browser/author/index.js +0 -47549
  195. package/dist/browser/author/index.js.map +0 -1
  196. package/dist/browser/browser-CfnAFove.js +0 -219
  197. package/dist/browser/browser-CfnAFove.js.map +0 -1
  198. package/dist/browser/controller/index.js +0 -198
  199. package/dist/browser/controller/index.js.map +0 -1
  200. package/dist/browser/delivery/index.js +0 -2460
  201. package/dist/browser/delivery/index.js.map +0 -1
  202. package/dist/browser/dist-CeB-1djc.js +0 -100
  203. package/dist/browser/dist-CeB-1djc.js.map +0 -1
  204. package/dist/browser/hotspot.css +0 -2
  205. package/dist/controller/defaults.d.ts +0 -35
  206. package/dist/controller/defaults.js +0 -29
  207. package/dist/controller/index.d.ts +0 -22
  208. package/dist/controller/index.js +0 -154
  209. package/dist/controller/utils.d.ts +0 -10
  210. package/dist/controller/utils.js +0 -12
  211. package/dist/delivery/hotspot/circle.d.ts +0 -19
  212. package/dist/delivery/hotspot/circle.js +0 -100
  213. package/dist/delivery/hotspot/container.d.ts +0 -16
  214. package/dist/delivery/hotspot/container.js +0 -150
  215. package/dist/delivery/hotspot/icons.d.ts +0 -10
  216. package/dist/delivery/hotspot/icons.js +0 -4
  217. package/dist/delivery/hotspot/image-konva-tooltip.d.ts +0 -19
  218. package/dist/delivery/hotspot/image-konva-tooltip.js +0 -66
  219. package/dist/delivery/hotspot/index.d.ts +0 -17
  220. package/dist/delivery/hotspot/index.js +0 -114
  221. package/dist/delivery/hotspot/polygon.d.ts +0 -21
  222. package/dist/delivery/hotspot/polygon.js +0 -108
  223. package/dist/delivery/hotspot/rectangle.d.ts +0 -19
  224. package/dist/delivery/hotspot/rectangle.js +0 -104
  225. package/dist/delivery/index.d.ts +0 -20
  226. package/dist/delivery/index.js +0 -107
  227. package/dist/delivery/session-updater.d.ts +0 -10
  228. package/dist/delivery/session-updater.js +0 -14
  229. package/dist/index.d.ts +0 -1
  230. package/dist/index.iife.d.ts +0 -8
  231. package/dist/index.iife.js +0 -169
  232. package/dist/index.js +0 -2
  233. package/dist/runtime-support.d.ts +0 -12
  234. package/dist/runtime-support.js +0 -12
@@ -0,0 +1,330 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.Root = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _configUi = require("@pie-lib/config-ui");
11
+ var _propTypes = _interopRequireDefault(require("prop-types"));
12
+ var _editableHtmlTipTap = _interopRequireDefault(require("@pie-lib/editable-html-tip-tap"));
13
+ var _styles = require("@mui/material/styles");
14
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
15
+ var _Info = _interopRequireDefault(require("@mui/icons-material/Info"));
16
+ var _Tooltip = _interopRequireDefault(require("@mui/material/Tooltip"));
17
+ var _hotspotPalette = _interopRequireDefault(require("./hotspot-palette"));
18
+ var _hotspotContainer = _interopRequireDefault(require("./hotspot-container"));
19
+ var _utils = require("./utils");
20
+ const {
21
+ Panel,
22
+ toggle,
23
+ dropdown
24
+ } = _configUi.settings;
25
+ const DimensionsContainer = (0, _styles.styled)('div')(({
26
+ theme
27
+ }) => ({
28
+ display: 'flex',
29
+ marginBottom: theme.spacing(1.5)
30
+ }));
31
+ const FieldContainer = (0, _styles.styled)('div')({
32
+ flex: 1,
33
+ width: '90%'
34
+ });
35
+ const PromptContainer = (0, _styles.styled)(_configUi.InputContainer)(({
36
+ theme
37
+ }) => ({
38
+ paddingTop: theme.spacing(1),
39
+ marginTop: theme.spacing(2),
40
+ marginBottom: theme.spacing(2),
41
+ width: '100%'
42
+ }));
43
+ const SubHeading = (0, _styles.styled)(_Typography.default)(({
44
+ theme
45
+ }) => ({
46
+ marginRight: theme.spacing(1)
47
+ }));
48
+ const FlexContainer = (0, _styles.styled)('div')({
49
+ display: 'flex',
50
+ alignItems: 'center'
51
+ });
52
+ const StyledTooltip = (0, _styles.styled)(_Tooltip.default)(({
53
+ theme
54
+ }) => ({
55
+ '& .MuiTooltip-tooltip': {
56
+ fontSize: theme.typography.fontSize - 2,
57
+ whiteSpace: 'pre',
58
+ maxWidth: '500px'
59
+ }
60
+ }));
61
+ const ErrorText = (0, _styles.styled)('div')(({
62
+ theme
63
+ }) => ({
64
+ fontSize: theme.typography.fontSize - 2,
65
+ color: theme.palette.error.main,
66
+ paddingTop: theme.spacing(1)
67
+ }));
68
+ class Root extends _react.default.Component {
69
+ constructor(...args) {
70
+ super(...args);
71
+ (0, _defineProperty2.default)(this, "handleColorChange", (fieldType, color) => {
72
+ const {
73
+ onColorChanged
74
+ } = this.props;
75
+ const cType = `${fieldType}Color`;
76
+ onColorChanged(cType, color);
77
+ });
78
+ (0, _defineProperty2.default)(this, "handleOnUpdateImageDimensions", (value, resizeType) => {
79
+ const {
80
+ model: {
81
+ dimensions,
82
+ shapes
83
+ },
84
+ configuration: {
85
+ preserveAspectRatio = {}
86
+ },
87
+ onUpdateImageDimension,
88
+ onUpdateShapes
89
+ } = this.props;
90
+ const nextImageDimensions = {
91
+ ...dimensions,
92
+ [resizeType]: value
93
+ };
94
+
95
+ // if preserveAspectRatio.enabled, updateImageDimensions function makes sure aspect ratio is kept
96
+ const updatedDimensions = (0, _utils.updateImageDimensions)(dimensions, nextImageDimensions, preserveAspectRatio.enabled, resizeType);
97
+ // transform shapes map into shapes array
98
+ const shapesArray = (0, _utils.getAllShapes)(shapes);
99
+ // transform all the shapes to fit the re-sized image
100
+ const updatedShapes = (0, _utils.getUpdatedShapes)(dimensions, updatedDimensions, shapesArray);
101
+ // transform shapes array back into shapes map
102
+
103
+ onUpdateShapes((0, _utils.groupShapes)(updatedShapes));
104
+ onUpdateImageDimension(updatedDimensions);
105
+ });
106
+ }
107
+ render() {
108
+ const {
109
+ configuration,
110
+ model,
111
+ imageSupport,
112
+ uploadSoundSupport,
113
+ onConfigurationChanged,
114
+ onImageUpload,
115
+ onModelChangedByConfig,
116
+ onPromptChanged,
117
+ onRationaleChanged,
118
+ onUpdateImageDimension,
119
+ onTeacherInstructionsChanged,
120
+ onUpdateShapes
121
+ } = this.props;
122
+ const {
123
+ baseInputConfiguration = {},
124
+ contentDimensions = {},
125
+ maxImageWidth = {},
126
+ maxImageHeight = {},
127
+ multipleCorrect = {},
128
+ partialScoring = {},
129
+ preserveAspectRatio = {},
130
+ prompt = {},
131
+ rationale = {},
132
+ settingsPanelDisabled,
133
+ spellCheck = {},
134
+ teacherInstructions = {},
135
+ withRubric = {},
136
+ mathMlOptions = {},
137
+ language = {},
138
+ languageChoices = {}
139
+ } = configuration || {};
140
+ const {
141
+ errors,
142
+ extraCSSRules,
143
+ promptEnabled,
144
+ rationaleEnabled,
145
+ spellCheckEnabled,
146
+ teacherInstructionsEnabled,
147
+ toolbarEditorPosition
148
+ } = model || {};
149
+ const {
150
+ prompt: promptError,
151
+ rationale: rationaleError,
152
+ shapes: shapesError,
153
+ selections: selectionsError,
154
+ teacherInstructions: teacherInstructionsError
155
+ } = errors || {};
156
+ const validationMessage = (0, _utils.generateValidationMessage)(configuration);
157
+ const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;
158
+ const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;
159
+ const toolbarOpts = {
160
+ position: toolbarEditorPosition === 'top' ? 'top' : 'bottom'
161
+ };
162
+ const panelSettings = {
163
+ multipleCorrect: multipleCorrect.settings && toggle(multipleCorrect.label),
164
+ partialScoring: partialScoring.settings && toggle(partialScoring.label),
165
+ promptEnabled: prompt.settings && toggle(prompt.label),
166
+ 'language.enabled': language.settings && toggle(language.label, true),
167
+ language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options)
168
+ };
169
+ const panelProperties = {
170
+ teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
171
+ rationaleEnabled: rationale.settings && toggle(rationale.label),
172
+ spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),
173
+ rubricEnabled: withRubric?.settings && toggle(withRubric?.label)
174
+ };
175
+ const getPluginProps = (props = {}) => ({
176
+ ...baseInputConfiguration,
177
+ ...props
178
+ });
179
+ return /*#__PURE__*/_react.default.createElement(_configUi.layout.ConfigLayout, {
180
+ extraCSSRules: extraCSSRules,
181
+ dimensions: contentDimensions,
182
+ hideSettings: settingsPanelDisabled,
183
+ settings: /*#__PURE__*/_react.default.createElement(Panel, {
184
+ model: model,
185
+ onChangeModel: onModelChangedByConfig,
186
+ configuration: configuration,
187
+ onChangeConfiguration: onConfigurationChanged,
188
+ groups: {
189
+ Settings: panelSettings,
190
+ Properties: panelProperties
191
+ }
192
+ })
193
+ }, teacherInstructionsEnabled && /*#__PURE__*/_react.default.createElement(PromptContainer, {
194
+ label: teacherInstructions.label
195
+ }, /*#__PURE__*/_react.default.createElement(_editableHtmlTipTap.default, {
196
+ markup: model.teacherInstructions || '',
197
+ onChange: onTeacherInstructionsChanged,
198
+ imageSupport: imageSupport,
199
+ nonEmpty: false,
200
+ error: teacherInstructionsError,
201
+ toolbarOpts: toolbarOpts,
202
+ pluginProps: getPluginProps(teacherInstructions?.inputConfiguration),
203
+ spellCheck: spellCheckEnabled,
204
+ maxImageWidth: maxImageWidth && maxImageWidth.teacherInstructions || defaultImageMaxWidth,
205
+ maxImageHeight: maxImageHeight && maxImageHeight.teacherInstructions || defaultImageMaxHeight,
206
+ uploadSoundSupport: uploadSoundSupport,
207
+ languageCharactersProps: [{
208
+ language: 'spanish'
209
+ }, {
210
+ language: 'special'
211
+ }],
212
+ mathMlOptions: mathMlOptions
213
+ }), teacherInstructionsError && /*#__PURE__*/_react.default.createElement(ErrorText, null, teacherInstructionsError)), promptEnabled && /*#__PURE__*/_react.default.createElement(PromptContainer, {
214
+ label: prompt.label
215
+ }, /*#__PURE__*/_react.default.createElement(_editableHtmlTipTap.default, {
216
+ markup: model.prompt || '',
217
+ onChange: onPromptChanged,
218
+ imageSupport: imageSupport,
219
+ nonEmpty: false,
220
+ error: promptError,
221
+ toolbarOpts: toolbarOpts,
222
+ pluginProps: getPluginProps(prompt?.inputConfiguration),
223
+ spellCheck: spellCheckEnabled,
224
+ maxImageWidth: defaultImageMaxWidth,
225
+ maxImageHeight: defaultImageMaxHeight,
226
+ uploadSoundSupport: uploadSoundSupport,
227
+ languageCharactersProps: [{
228
+ language: 'spanish'
229
+ }, {
230
+ language: 'special'
231
+ }],
232
+ mathMlOptions: mathMlOptions
233
+ }), promptError && /*#__PURE__*/_react.default.createElement(ErrorText, null, promptError)), /*#__PURE__*/_react.default.createElement(FlexContainer, null, /*#__PURE__*/_react.default.createElement(SubHeading, {
234
+ variant: "h6"
235
+ }, "Define Hotspot"), /*#__PURE__*/_react.default.createElement(StyledTooltip, {
236
+ disableFocusListener: true,
237
+ disableTouchListener: true,
238
+ placement: 'left',
239
+ title: validationMessage
240
+ }, /*#__PURE__*/_react.default.createElement(_Info.default, {
241
+ fontSize: 'small',
242
+ color: 'primary',
243
+ style: {
244
+ float: 'right'
245
+ }
246
+ }))), /*#__PURE__*/_react.default.createElement(_hotspotPalette.default, {
247
+ hotspotColor: model.hotspotColor,
248
+ hotspotList: model.hotspotList,
249
+ outlineColor: model.outlineColor,
250
+ outlineList: model.outlineList,
251
+ onHotspotColorChange: color => this.handleColorChange('hotspot', color),
252
+ onOutlineColorChange: color => this.handleColorChange('outline', color)
253
+ }), /*#__PURE__*/_react.default.createElement(_hotspotContainer.default, {
254
+ dimensions: model.dimensions,
255
+ imageUrl: model.imageUrl,
256
+ multipleCorrect: model.multipleCorrect,
257
+ hasErrors: !!shapesError || !!selectionsError,
258
+ hotspotColor: model.hotspotColor,
259
+ outlineColor: model.outlineColor,
260
+ selectedHotspotColor: model.selectedHotspotColor,
261
+ hoverOutlineColor: model.hoverOutlineColor,
262
+ onUpdateImageDimension: onUpdateImageDimension,
263
+ onUpdateShapes: onUpdateShapes,
264
+ onImageUpload: onImageUpload,
265
+ shapes: model.shapes,
266
+ strokeWidth: model.strokeWidth,
267
+ preserveAspectRatioEnabled: preserveAspectRatio.enabled,
268
+ insertImage: imageSupport && imageSupport.add
269
+ }), shapesError && /*#__PURE__*/_react.default.createElement(ErrorText, null, shapesError), selectionsError && /*#__PURE__*/_react.default.createElement(ErrorText, null, selectionsError), model.imageUrl && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Typography.default, {
270
+ variant: "h6"
271
+ }, "Image Dimensions"), /*#__PURE__*/_react.default.createElement(DimensionsContainer, null, /*#__PURE__*/_react.default.createElement(FieldContainer, null, /*#__PURE__*/_react.default.createElement(_configUi.NumberTextField, {
272
+ key: "hotspot-manual-width",
273
+ label: "Width",
274
+ value: model.dimensions.width,
275
+ min: 0,
276
+ onChange: (e, value) => this.handleOnUpdateImageDimensions(value, 'width'),
277
+ showErrorWhenOutsideRange: true
278
+ })), /*#__PURE__*/_react.default.createElement(FieldContainer, null, /*#__PURE__*/_react.default.createElement(_configUi.NumberTextField, {
279
+ key: "hotspot-manual-height",
280
+ label: "Height",
281
+ value: model.dimensions.height,
282
+ min: 0,
283
+ onChange: (e, value) => this.handleOnUpdateImageDimensions(value, 'height'),
284
+ showErrorWhenOutsideRange: true
285
+ })))), rationaleEnabled && /*#__PURE__*/_react.default.createElement(PromptContainer, {
286
+ label: rationale.label
287
+ }, /*#__PURE__*/_react.default.createElement(_editableHtmlTipTap.default, {
288
+ markup: model.rationale || '',
289
+ onChange: onRationaleChanged,
290
+ imageSupport: imageSupport,
291
+ error: rationaleError,
292
+ toolbarOpts: toolbarOpts,
293
+ pluginProps: getPluginProps(rationale?.inputConfiguration),
294
+ spellCheck: spellCheckEnabled,
295
+ maxImageWidth: maxImageWidth && maxImageWidth.rationale || defaultImageMaxWidth,
296
+ maxImageHeight: maxImageHeight && maxImageHeight.rationale || defaultImageMaxHeight,
297
+ uploadSoundSupport: uploadSoundSupport,
298
+ languageCharactersProps: [{
299
+ language: 'spanish'
300
+ }, {
301
+ language: 'special'
302
+ }],
303
+ mathMlOptions: mathMlOptions
304
+ }), rationaleError && /*#__PURE__*/_react.default.createElement(ErrorText, null, rationaleError)));
305
+ }
306
+ }
307
+ exports.Root = Root;
308
+ Root.propTypes = {
309
+ configuration: _propTypes.default.object,
310
+ model: _propTypes.default.object.isRequired,
311
+ imageSupport: _propTypes.default.shape({
312
+ add: _propTypes.default.func,
313
+ delete: _propTypes.default.func
314
+ }),
315
+ uploadSoundSupport: _propTypes.default.shape({
316
+ add: _propTypes.default.func,
317
+ delete: _propTypes.default.func
318
+ }),
319
+ onImageUpload: _propTypes.default.func.isRequired,
320
+ onColorChanged: _propTypes.default.func.isRequired,
321
+ onPromptChanged: _propTypes.default.func.isRequired,
322
+ onUpdateImageDimension: _propTypes.default.func.isRequired,
323
+ onUpdateShapes: _propTypes.default.func.isRequired,
324
+ onModelChangedByConfig: _propTypes.default.func.isRequired,
325
+ onRationaleChanged: _propTypes.default.func.isRequired,
326
+ onConfigurationChanged: _propTypes.default.func.isRequired,
327
+ onTeacherInstructionsChanged: _propTypes.default.func.isRequired
328
+ };
329
+ var _default = exports.default = Root;
330
+ //# sourceMappingURL=root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root.js","names":["_react","_interopRequireDefault","require","_configUi","_propTypes","_editableHtmlTipTap","_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-tip-tap';\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":"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","ignoreList":[]}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.CircleShape = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
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
+ };
27
+ }
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
+ };
49
+ }
50
+ }
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
+ };
77
+ }
78
+ }
79
+ return state;
80
+ }
81
+ }
82
+ exports.CircleShape = CircleShape;
83
+ (0, _defineProperty2.default)(CircleShape, "name", 'circle');
84
+ //# sourceMappingURL=circle.js.map
@@ -0,0 +1 @@
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":[]}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _circle = require("./circle");
7
+ Object.keys(_circle).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _circle[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _circle[key];
14
+ }
15
+ });
16
+ });
17
+ var _rectagle = require("./rectagle");
18
+ Object.keys(_rectagle).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _rectagle[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _rectagle[key];
25
+ }
26
+ });
27
+ });
28
+ var _polygon = require("./polygon");
29
+ Object.keys(_polygon).forEach(function (key) {
30
+ if (key === "default" || key === "__esModule") return;
31
+ if (key in exports && exports[key] === _polygon[key]) return;
32
+ Object.defineProperty(exports, key, {
33
+ enumerable: true,
34
+ get: function () {
35
+ return _polygon[key];
36
+ }
37
+ });
38
+ });
39
+ var _utils = require("./utils");
40
+ Object.keys(_utils).forEach(function (key) {
41
+ if (key === "default" || key === "__esModule") return;
42
+ if (key in exports && exports[key] === _utils[key]) return;
43
+ Object.defineProperty(exports, key, {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _utils[key];
47
+ }
48
+ });
49
+ });
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
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":[]}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.PolygonShape = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
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
+ };
27
+ }
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({
43
+ x: e.evt.layerX,
44
+ y: e.evt.layerY
45
+ });
46
+ shapesCopy[currentShapeIndex] = currentShape;
47
+ return {
48
+ shapes: shapesCopy
49
+ };
50
+ }
51
+ }
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
+ }
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
+ }
80
+ exports.PolygonShape = PolygonShape;
81
+ (0, _defineProperty2.default)(PolygonShape, "name", 'polygon');
82
+ //# sourceMappingURL=polygon.js.map
@@ -0,0 +1 @@
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":[]}