@pie-element/drawing-response 12.1.1 → 12.1.2-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/configure.js +2 -0
  2. package/controller.js +1 -0
  3. package/dist/author/button.d.ts +29 -0
  4. package/dist/author/button.js +25 -0
  5. package/dist/author/defaults.d.ts +118 -0
  6. package/dist/author/defaults.js +86 -0
  7. package/dist/author/image-container.d.ts +42 -0
  8. package/dist/author/image-container.js +183 -0
  9. package/dist/author/index.d.ts +37 -0
  10. package/dist/author/index.js +79 -0
  11. package/dist/author/root.d.ts +17 -0
  12. package/dist/author/root.js +142 -0
  13. package/dist/browser/MenuItem-DbAfJgc1.js +10476 -0
  14. package/dist/browser/MenuItem-DbAfJgc1.js.map +1 -0
  15. package/dist/browser/author/index.js +37837 -0
  16. package/dist/browser/author/index.js.map +1 -0
  17. package/dist/browser/browser-kkT1XVKw.js +219 -0
  18. package/dist/browser/browser-kkT1XVKw.js.map +1 -0
  19. package/dist/browser/controller/index.js +61 -0
  20. package/dist/browser/controller/index.js.map +1 -0
  21. package/dist/browser/delivery/index.js +13560 -0
  22. package/dist/browser/delivery/index.js.map +1 -0
  23. package/dist/browser/drawing-response.css +2 -0
  24. package/dist/controller/defaults.d.ts +24 -0
  25. package/dist/controller/defaults.js +18 -0
  26. package/dist/controller/index.d.ts +13 -0
  27. package/dist/controller/index.js +46 -0
  28. package/dist/delivery/drawing-response/button.d.ts +31 -0
  29. package/dist/delivery/drawing-response/button.js +36 -0
  30. package/dist/delivery/drawing-response/constants.d.ts +16 -0
  31. package/dist/delivery/drawing-response/constants.js +40 -0
  32. package/dist/delivery/drawing-response/container.d.ts +32 -0
  33. package/dist/delivery/drawing-response/container.js +212 -0
  34. package/dist/delivery/drawing-response/drawable-circle.d.ts +18 -0
  35. package/dist/delivery/drawing-response/drawable-circle.js +51 -0
  36. package/dist/delivery/drawing-response/drawable-eraser.d.ts +17 -0
  37. package/dist/delivery/drawing-response/drawable-eraser.js +52 -0
  38. package/dist/delivery/drawing-response/drawable-free-path.d.ts +18 -0
  39. package/dist/delivery/drawing-response/drawable-free-path.js +52 -0
  40. package/dist/delivery/drawing-response/drawable-helper.d.ts +17 -0
  41. package/dist/delivery/drawing-response/drawable-helper.js +12 -0
  42. package/dist/delivery/drawing-response/drawable-image.d.ts +24 -0
  43. package/dist/delivery/drawing-response/drawable-image.js +28 -0
  44. package/dist/delivery/drawing-response/drawable-line.d.ts +18 -0
  45. package/dist/delivery/drawing-response/drawable-line.js +53 -0
  46. package/dist/delivery/drawing-response/drawable-main.d.ts +25 -0
  47. package/dist/delivery/drawing-response/drawable-main.js +210 -0
  48. package/dist/delivery/drawing-response/drawable-palette.d.ts +14 -0
  49. package/dist/delivery/drawing-response/drawable-palette.js +89 -0
  50. package/dist/delivery/drawing-response/drawable-rectangle.d.ts +18 -0
  51. package/dist/delivery/drawing-response/drawable-rectangle.js +49 -0
  52. package/dist/delivery/drawing-response/drawable-text.d.ts +30 -0
  53. package/dist/delivery/drawing-response/drawable-text.js +189 -0
  54. package/dist/delivery/drawing-response/drawable-transformer.d.ts +16 -0
  55. package/dist/delivery/drawing-response/drawable-transformer.js +35 -0
  56. package/dist/delivery/drawing-response/factory.d.ts +11 -0
  57. package/dist/delivery/drawing-response/factory.js +19 -0
  58. package/dist/delivery/drawing-response/icon.d.ts +19 -0
  59. package/dist/delivery/drawing-response/icon.js +52 -0
  60. package/dist/delivery/drawing-response/index.d.ts +18 -0
  61. package/dist/delivery/drawing-response/index.js +70 -0
  62. package/dist/delivery/index.d.ts +19 -0
  63. package/dist/delivery/index.js +47 -0
  64. package/dist/index.d.ts +1 -0
  65. package/dist/index.iife.d.ts +8 -0
  66. package/dist/index.iife.js +165 -0
  67. package/dist/index.js +2 -0
  68. package/dist/runtime-support.d.ts +12 -0
  69. package/dist/runtime-support.js +12 -0
  70. package/package.json +84 -20
  71. package/CHANGELOG.json +0 -547
  72. package/CHANGELOG.md +0 -1960
  73. package/LICENSE.md +0 -5
  74. package/README.md +0 -1
  75. package/configure/CHANGELOG.json +0 -367
  76. package/configure/CHANGELOG.md +0 -1760
  77. package/configure/lib/button.js +0 -37
  78. package/configure/lib/button.js.map +0 -1
  79. package/configure/lib/defaults.js +0 -116
  80. package/configure/lib/defaults.js.map +0 -1
  81. package/configure/lib/image-container.js +0 -307
  82. package/configure/lib/image-container.js.map +0 -1
  83. package/configure/lib/index.js +0 -147
  84. package/configure/lib/index.js.map +0 -1
  85. package/configure/lib/root.js +0 -219
  86. package/configure/lib/root.js.map +0 -1
  87. package/configure/package.json +0 -24
  88. package/configure/src/__tests__/image-container.test.jsx +0 -231
  89. package/configure/src/__tests__/index.test.js +0 -72
  90. package/configure/src/__tests__/root.test.jsx +0 -110
  91. package/configure/src/button.jsx +0 -33
  92. package/configure/src/defaults.js +0 -80
  93. package/configure/src/image-container.jsx +0 -316
  94. package/configure/src/index.js +0 -167
  95. package/configure/src/root.jsx +0 -198
  96. package/controller/CHANGELOG.json +0 -52
  97. package/controller/CHANGELOG.md +0 -261
  98. package/controller/lib/defaults.js +0 -22
  99. package/controller/lib/defaults.js.map +0 -1
  100. package/controller/lib/index.js +0 -84
  101. package/controller/lib/index.js.map +0 -1
  102. package/controller/package.json +0 -16
  103. package/controller/src/__tests__/index.test.js +0 -172
  104. package/controller/src/defaults.js +0 -12
  105. package/controller/src/index.js +0 -71
  106. package/docs/config-schema.json +0 -1766
  107. package/docs/config-schema.json.md +0 -1313
  108. package/docs/demo/config.js +0 -8
  109. package/docs/demo/generate.js +0 -14
  110. package/docs/demo/index.html +0 -1
  111. package/docs/demo/session.js +0 -37
  112. package/docs/pie-schema.json +0 -823
  113. package/docs/pie-schema.json.md +0 -606
  114. package/lib/drawing-response/button.js +0 -49
  115. package/lib/drawing-response/button.js.map +0 -1
  116. package/lib/drawing-response/constants.js +0 -43
  117. package/lib/drawing-response/constants.js.map +0 -1
  118. package/lib/drawing-response/container.js +0 -327
  119. package/lib/drawing-response/container.js.map +0 -1
  120. package/lib/drawing-response/drawable-circle.js +0 -80
  121. package/lib/drawing-response/drawable-circle.js.map +0 -1
  122. package/lib/drawing-response/drawable-eraser.js +0 -64
  123. package/lib/drawing-response/drawable-eraser.js.map +0 -1
  124. package/lib/drawing-response/drawable-free-path.js +0 -71
  125. package/lib/drawing-response/drawable-free-path.js.map +0 -1
  126. package/lib/drawing-response/drawable-helper.js +0 -34
  127. package/lib/drawing-response/drawable-helper.js.map +0 -1
  128. package/lib/drawing-response/drawable-image.js +0 -41
  129. package/lib/drawing-response/drawable-image.js.map +0 -1
  130. package/lib/drawing-response/drawable-line.js +0 -75
  131. package/lib/drawing-response/drawable-line.js.map +0 -1
  132. package/lib/drawing-response/drawable-main.js +0 -345
  133. package/lib/drawing-response/drawable-main.js.map +0 -1
  134. package/lib/drawing-response/drawable-palette.js +0 -140
  135. package/lib/drawing-response/drawable-palette.js.map +0 -1
  136. package/lib/drawing-response/drawable-rectangle.js +0 -80
  137. package/lib/drawing-response/drawable-rectangle.js.map +0 -1
  138. package/lib/drawing-response/drawable-text.js +0 -295
  139. package/lib/drawing-response/drawable-text.js.map +0 -1
  140. package/lib/drawing-response/drawable-transformer.js +0 -52
  141. package/lib/drawing-response/drawable-transformer.js.map +0 -1
  142. package/lib/drawing-response/factory.js +0 -22
  143. package/lib/drawing-response/factory.js.map +0 -1
  144. package/lib/drawing-response/icon.js +0 -55
  145. package/lib/drawing-response/icon.js.map +0 -1
  146. package/lib/drawing-response/index.js +0 -91
  147. package/lib/drawing-response/index.js.map +0 -1
  148. package/lib/index.js +0 -68
  149. package/lib/index.js.map +0 -1
  150. package/src/__tests__/drawing-index-test.jsx +0 -103
  151. package/src/drawing-response/__tests__/container.test.jsx +0 -82
  152. package/src/drawing-response/__tests__/drawable-helper.test.jsx +0 -24
  153. package/src/drawing-response/__tests__/drawing-main.test.jsx +0 -855
  154. package/src/drawing-response/__tests__/factory.test.js +0 -13
  155. package/src/drawing-response/button.jsx +0 -45
  156. package/src/drawing-response/constants.js +0 -44
  157. package/src/drawing-response/container.jsx +0 -301
  158. package/src/drawing-response/drawable-circle.jsx +0 -74
  159. package/src/drawing-response/drawable-eraser.jsx +0 -53
  160. package/src/drawing-response/drawable-free-path.jsx +0 -59
  161. package/src/drawing-response/drawable-helper.jsx +0 -21
  162. package/src/drawing-response/drawable-image.jsx +0 -36
  163. package/src/drawing-response/drawable-line.jsx +0 -62
  164. package/src/drawing-response/drawable-main.jsx +0 -333
  165. package/src/drawing-response/drawable-palette.jsx +0 -99
  166. package/src/drawing-response/drawable-rectangle.jsx +0 -69
  167. package/src/drawing-response/drawable-text.jsx +0 -318
  168. package/src/drawing-response/drawable-transformer.jsx +0 -52
  169. package/src/drawing-response/factory.js +0 -17
  170. package/src/drawing-response/icon.jsx +0 -52
  171. package/src/drawing-response/index.jsx +0 -92
  172. package/src/index.js +0 -72
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["_pieConfigureEvents","require","_react","_interopRequireDefault","_client","_debug","_root","_defaults","log","debug","DrawableResponseConfigure","HTMLElement","constructor","_defineProperty2","default","m","reset","_model","dispatchModelUpdated","_render","c","_configuration","handler","dispatchEvent","InsertImageEvent","src","done","DeleteImageEvent","sensibleDefaults","configuration","withRubric","forceEnabled","settings","createDefaultModel","onModelChanged","bind","model","s","newConfiguration","rubricEnabled","language","enabled","languageChoices","options","length","value","find","option","push","label","resetValue","ModelUpdatedEvent","insertSound","InsertSoundEvent","onDeleteSound","DeleteSoundEvent","element","React","createElement","Root","onConfigurationChanged","imageSupport","add","insertImage","delete","onDeleteImage","uploadSoundSupport","createRoot","render","disconnectedCallback","unmount","exports","config","defaultModel"],"sources":["../src/index.js"],"sourcesContent":["import {\n DeleteImageEvent,\n DeleteSoundEvent,\n InsertImageEvent,\n InsertSoundEvent,\n ModelUpdatedEvent,\n} from '@pie-framework/pie-configure-events';\n\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport debug from 'debug';\n\nimport Root from './root';\nimport sensibleDefaults from './defaults';\n\nconst log = debug('hotspot:configure');\n\nexport default class DrawableResponseConfigure extends HTMLElement {\n static createDefaultModel = (model = {}, config) => {\n const defaultModel = {\n ...sensibleDefaults.model,\n ...model,\n };\n\n // if configuration.withRubric.forceEnabled is true, then we update the model\n // without triggering the Model Updated event (for more details, check documentation)\n if (config?.withRubric?.forceEnabled && !defaultModel.rubricEnabled) {\n defaultModel.rubricEnabled = true;\n }\n\n return defaultModel;\n };\n\n constructor() {\n super();\n this._root = null;\n this._configuration = sensibleDefaults.configuration;\n\n // if configuration.withRubric.forceEnabled is true, then we\n // update the configuration (we do not want to display the toggle in the Settings Panel)\n if (this._configuration.withRubric?.forceEnabled) {\n this._configuration.withRubric.settings = false;\n }\n\n this._model = DrawableResponseConfigure.createDefaultModel({}, this._configuration);\n this.onModelChanged = this.onModelChanged.bind(this);\n }\n\n set model(s) {\n this._model = DrawableResponseConfigure.createDefaultModel(s, this._configuration);\n this._render();\n }\n\n set configuration(c) {\n const newConfiguration = {\n ...sensibleDefaults.configuration,\n ...c,\n };\n\n this._configuration = newConfiguration;\n\n const { withRubric = {} } = c || {};\n\n // if configuration.withRubric.forceEnabled is true, then we update the model\n // without triggering the Model Updated event (for more details, check documentation)\n // and also update the configuration (we do not want to display the toggle in the Settings Panel)\n if (withRubric?.forceEnabled) {\n this._configuration.withRubric.settings = false;\n\n if (!this._model.rubricEnabled) {\n this._model.rubricEnabled = true;\n }\n }\n\n // if language:enabled is true, then the corresponding default item model should include a language value;\n // if it is false, then the language field should be omitted from the item model.\n // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,\n // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).\n if (newConfiguration?.language?.enabled) {\n if (newConfiguration?.languageChoices?.options?.length) {\n this._model.language = newConfiguration?.languageChoices.options[0].value;\n }\n } else if (newConfiguration.language.settings && this._model.language) {\n this._configuration.language.enabled = true;\n\n if (!this._configuration.languageChoices.options || !this._configuration.languageChoices.options.length) {\n this._configuration.languageChoices.options = [];\n }\n\n // check if the language is already included in the languageChoices.options array\n // and if not, then add it.\n if (!this._configuration.languageChoices.options.find(option => option.value === this._model.language)) {\n this._configuration.languageChoices.options.push({\n value: this._model.language,\n label: this._model.language,\n });\n }\n } else {\n delete this._model.language;\n }\n\n this._render();\n }\n\n dispatchModelUpdated(reset) {\n const resetValue = !!reset;\n\n this.dispatchEvent(new ModelUpdatedEvent(this._model, resetValue));\n }\n\n onModelChanged = (m, reset) => {\n this._model = m;\n this.dispatchModelUpdated(reset);\n this._render();\n };\n\n onConfigurationChanged = (c) => {\n this._configuration = c;\n\n this._render();\n };\n\n insertImage = (handler) => {\n this.dispatchEvent(new InsertImageEvent(handler));\n };\n\n onDeleteImage = (src, done) => {\n this.dispatchEvent(new DeleteImageEvent(src, done));\n };\n\n insertSound(handler) {\n this.dispatchEvent(new InsertSoundEvent(handler));\n }\n\n onDeleteSound(src, done) {\n this.dispatchEvent(new DeleteSoundEvent(src, done));\n }\n\n _render() {\n log('_render');\n\n let element = React.createElement(Root, {\n model: this._model,\n configuration: this._configuration,\n onModelChanged: this.onModelChanged,\n onConfigurationChanged: this.onConfigurationChanged,\n imageSupport: {\n add: this.insertImage,\n delete: this.onDeleteImage,\n },\n uploadSoundSupport: {\n add: this.insertSound.bind(this),\n delete: this.onDeleteSound.bind(this),\n },\n });\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(element);\n }\n\n disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,219 +0,0 @@
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 _Typography = _interopRequireDefault(require("@mui/material/Typography"));
14
- var _styles = require("@mui/material/styles");
15
- var _imageContainer = _interopRequireDefault(require("./image-container"));
16
- var _lodashEs = require("lodash-es");
17
- const {
18
- Panel,
19
- toggle,
20
- dropdown
21
- } = _configUi.settings;
22
- const PromptHolder = (0, _styles.styled)(_configUi.InputContainer)(({
23
- theme
24
- }) => ({
25
- paddingTop: theme.spacing(1),
26
- marginTop: theme.spacing(2),
27
- marginBottom: theme.spacing(1),
28
- width: '100%'
29
- }));
30
- const ErrorText = (0, _styles.styled)('div')(({
31
- theme
32
- }) => ({
33
- fontSize: theme.typography.fontSize - 2,
34
- color: theme.palette.error.main,
35
- paddingTop: theme.spacing(1)
36
- }));
37
- class Root extends _react.default.Component {
38
- constructor(...args) {
39
- super(...args);
40
- (0, _defineProperty2.default)(this, "onPromptChanged", prompt => {
41
- const {
42
- model,
43
- onModelChanged
44
- } = this.props;
45
- const update = (0, _lodashEs.cloneDeep)(model);
46
- onModelChanged({
47
- ...update,
48
- prompt
49
- });
50
- });
51
- (0, _defineProperty2.default)(this, "onTeacherInstructionsChanged", teacherInstructions => {
52
- const {
53
- model,
54
- onModelChanged
55
- } = this.props;
56
- onModelChanged({
57
- ...model,
58
- teacherInstructions
59
- });
60
- });
61
- (0, _defineProperty2.default)(this, "onUpdateImageDimension", dimensions => {
62
- const {
63
- model,
64
- onModelChanged
65
- } = this.props;
66
- onModelChanged({
67
- ...model,
68
- imageDimensions: dimensions
69
- });
70
- });
71
- (0, _defineProperty2.default)(this, "onImageUpload", imageUrl => {
72
- const {
73
- model,
74
- onModelChanged
75
- } = this.props;
76
- onModelChanged({
77
- ...model,
78
- imageUrl
79
- });
80
- });
81
- }
82
- render() {
83
- const {
84
- configuration,
85
- imageSupport,
86
- model,
87
- onConfigurationChanged,
88
- onModelChanged,
89
- uploadSoundSupport
90
- } = this.props;
91
- const {
92
- baseInputConfiguration = {},
93
- backgroundImage = {},
94
- contentDimensions = {},
95
- maxImageWidth = {},
96
- maxImageHeight = {},
97
- prompt = {},
98
- settingsPanelDisabled,
99
- spellCheck = {},
100
- teacherInstructions = {},
101
- withRubric = {},
102
- language = {},
103
- languageChoices = {},
104
- mathMlOptions = {}
105
- } = configuration || {};
106
- const {
107
- backgroundImageEnabled,
108
- errors = {},
109
- extraCSSRules,
110
- promptEnabled,
111
- spellCheckEnabled,
112
- teacherInstructionsEnabled,
113
- toolbarEditorPosition
114
- } = model || {};
115
- const {
116
- prompt: promptError,
117
- teacherInstructions: teacherInstructionsError
118
- } = errors;
119
- const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;
120
- const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;
121
- const toolbarOpts = {
122
- position: toolbarEditorPosition === 'top' ? 'top' : 'bottom'
123
- };
124
- const panelSettings = {
125
- backgroundImageEnabled: backgroundImage.settings && toggle(backgroundImage.label),
126
- promptEnabled: prompt.settings && toggle(prompt.label),
127
- 'language.enabled': language.settings && toggle(language.label, true),
128
- language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options)
129
- };
130
- const panelProperties = {
131
- teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
132
- spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),
133
- rubricEnabled: withRubric?.settings && toggle(withRubric?.label)
134
- };
135
- const getPluginProps = (props = {}) => ({
136
- ...baseInputConfiguration,
137
- ...props
138
- });
139
- return /*#__PURE__*/_react.default.createElement(_configUi.layout.ConfigLayout, {
140
- extraCSSRules: extraCSSRules,
141
- dimensions: contentDimensions,
142
- hideSettings: settingsPanelDisabled,
143
- settings: /*#__PURE__*/_react.default.createElement(Panel, {
144
- model: model,
145
- onChangeModel: onModelChanged,
146
- configuration: configuration,
147
- onChangeConfiguration: onConfigurationChanged,
148
- groups: {
149
- Settings: panelSettings,
150
- Properties: panelProperties
151
- }
152
- })
153
- }, teacherInstructionsEnabled && /*#__PURE__*/_react.default.createElement(PromptHolder, {
154
- label: teacherInstructions.label
155
- }, /*#__PURE__*/_react.default.createElement(_editableHtmlTipTap.default, {
156
- markup: model.teacherInstructions || '',
157
- onChange: this.onTeacherInstructionsChanged,
158
- imageSupport: imageSupport,
159
- nonEmpty: false,
160
- error: teacherInstructionsError,
161
- toolbarOpts: toolbarOpts,
162
- pluginProps: getPluginProps(teacherInstructions?.inputConfiguration),
163
- spellCheck: spellCheckEnabled,
164
- maxImageWidth: maxImageWidth && maxImageWidth.teacherInstructions || defaultImageMaxWidth,
165
- maxImageHeight: maxImageHeight && maxImageHeight.teacherInstructions || defaultImageMaxHeight,
166
- uploadSoundSupport: uploadSoundSupport,
167
- languageCharactersProps: [{
168
- language: 'spanish'
169
- }, {
170
- language: 'special'
171
- }],
172
- mathMlOptions: mathMlOptions
173
- }), teacherInstructionsError && /*#__PURE__*/_react.default.createElement(ErrorText, null, teacherInstructionsError)), promptEnabled && /*#__PURE__*/_react.default.createElement(PromptHolder, {
174
- label: "Item Stem"
175
- }, /*#__PURE__*/_react.default.createElement(_editableHtmlTipTap.default, {
176
- markup: model.prompt,
177
- onChange: this.onPromptChanged,
178
- error: promptError,
179
- toolbarOpts: toolbarOpts,
180
- spellCheck: spellCheckEnabled,
181
- pluginProps: getPluginProps(prompt?.inputConfiguration),
182
- imageSupport: imageSupport,
183
- maxImageWidth: defaultImageMaxWidth,
184
- maxImageHeight: defaultImageMaxHeight,
185
- uploadSoundSupport: uploadSoundSupport,
186
- languageCharactersProps: [{
187
- language: 'spanish'
188
- }, {
189
- language: 'special'
190
- }],
191
- mathMlOptions: mathMlOptions
192
- }), promptError && /*#__PURE__*/_react.default.createElement(ErrorText, null, promptError)), backgroundImageEnabled && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Typography.default, {
193
- variant: "h6"
194
- }, "Define Background Image"), /*#__PURE__*/_react.default.createElement(_imageContainer.default, {
195
- imageUrl: model.imageUrl,
196
- onUpdateImageDimension: this.onUpdateImageDimension,
197
- onImageUpload: this.onImageUpload,
198
- imageDimensions: model.imageDimensions,
199
- insertImage: imageSupport && imageSupport.add
200
- })));
201
- }
202
- }
203
- exports.Root = Root;
204
- Root.propTypes = {
205
- configuration: _propTypes.default.object,
206
- model: _propTypes.default.object.isRequired,
207
- imageSupport: _propTypes.default.shape({
208
- add: _propTypes.default.func,
209
- delete: _propTypes.default.func
210
- }),
211
- uploadSoundSupport: _propTypes.default.shape({
212
- add: _propTypes.default.func,
213
- delete: _propTypes.default.func
214
- }),
215
- onModelChanged: _propTypes.default.func.isRequired,
216
- onConfigurationChanged: _propTypes.default.func.isRequired
217
- };
218
- var _default = exports.default = Root;
219
- //# sourceMappingURL=root.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"root.js","names":["_react","_interopRequireDefault","require","_configUi","_propTypes","_editableHtmlTipTap","_Typography","_styles","_imageContainer","_lodashEs","Panel","toggle","dropdown","settings","PromptHolder","styled","InputContainer","theme","paddingTop","spacing","marginTop","marginBottom","width","ErrorText","fontSize","typography","color","palette","error","main","Root","React","Component","constructor","args","_defineProperty2","default","prompt","model","onModelChanged","props","update","cloneDeep","teacherInstructions","dimensions","imageDimensions","imageUrl","render","configuration","imageSupport","onConfigurationChanged","uploadSoundSupport","baseInputConfiguration","backgroundImage","contentDimensions","maxImageWidth","maxImageHeight","settingsPanelDisabled","spellCheck","withRubric","language","languageChoices","mathMlOptions","backgroundImageEnabled","errors","extraCSSRules","promptEnabled","spellCheckEnabled","teacherInstructionsEnabled","toolbarEditorPosition","promptError","teacherInstructionsError","defaultImageMaxWidth","defaultImageMaxHeight","toolbarOpts","position","panelSettings","label","enabled","options","panelProperties","rubricEnabled","getPluginProps","createElement","layout","ConfigLayout","hideSettings","onChangeModel","onChangeConfiguration","groups","Settings","Properties","markup","onChange","onTeacherInstructionsChanged","nonEmpty","pluginProps","inputConfiguration","languageCharactersProps","onPromptChanged","Fragment","variant","onUpdateImageDimension","onImageUpload","insertImage","add","exports","propTypes","PropTypes","object","isRequired","shape","func","delete","_default"],"sources":["../src/root.jsx"],"sourcesContent":["import React from 'react';\nimport { settings, layout, InputContainer } from '@pie-lib/config-ui';\nimport PropTypes from 'prop-types';\nimport EditableHtml from '@pie-lib/editable-html-tip-tap';\nimport Typography from '@mui/material/Typography';\nimport { styled } from '@mui/material/styles';\n\nimport ImageContainer from './image-container';\nimport { cloneDeep } from 'lodash-es';\n\nconst { Panel, toggle, dropdown } = settings;\n\nconst PromptHolder = styled(InputContainer)(({ theme }) => ({\n paddingTop: theme.spacing(1),\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(1),\n width: '100%',\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 onPromptChanged = (prompt) => {\n const { model, onModelChanged } = this.props;\n const update = cloneDeep(model);\n\n onModelChanged({ ...update, prompt });\n };\n\n onTeacherInstructionsChanged = (teacherInstructions) => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({ ...model, teacherInstructions });\n };\n\n onUpdateImageDimension = (dimensions) => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({ ...model, imageDimensions: dimensions });\n };\n\n onImageUpload = (imageUrl) => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({ ...model, imageUrl });\n };\n\n render() {\n const { configuration, imageSupport, model, onConfigurationChanged, onModelChanged, uploadSoundSupport } =\n this.props;\n const {\n baseInputConfiguration = {},\n backgroundImage = {},\n contentDimensions = {},\n maxImageWidth = {},\n maxImageHeight = {},\n prompt = {},\n settingsPanelDisabled,\n spellCheck = {},\n teacherInstructions = {},\n withRubric = {},\n language = {},\n languageChoices = {},\n mathMlOptions = {},\n } = configuration || {};\n const {\n backgroundImageEnabled,\n errors = {},\n extraCSSRules,\n promptEnabled,\n spellCheckEnabled,\n teacherInstructionsEnabled,\n toolbarEditorPosition,\n } = model || {};\n const { prompt: promptError, teacherInstructions: teacherInstructionsError } = errors;\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n const panelSettings = {\n backgroundImageEnabled: backgroundImage.settings && toggle(backgroundImage.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n 'language.enabled': language.settings && toggle(language.label, true),\n language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),\n };\n\n const panelProperties = {\n teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label),\n };\n\n 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={onModelChanged}\n configuration={configuration}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n Settings: panelSettings,\n Properties: panelProperties,\n }}\n />\n }\n >\n {teacherInstructionsEnabled && (\n <PromptHolder label={teacherInstructions.label}>\n <EditableHtml\n markup={model.teacherInstructions || ''}\n onChange={this.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 </PromptHolder>\n )}\n\n {promptEnabled && (\n <PromptHolder label=\"Item Stem\">\n <EditableHtml\n markup={model.prompt}\n onChange={this.onPromptChanged}\n error={promptError}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n pluginProps={getPluginProps(prompt?.inputConfiguration)}\n imageSupport={imageSupport}\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 </PromptHolder>\n )}\n\n {backgroundImageEnabled && (\n <React.Fragment>\n <Typography variant=\"h6\">Define Background Image</Typography>\n\n <ImageContainer\n imageUrl={model.imageUrl}\n onUpdateImageDimension={this.onUpdateImageDimension}\n onImageUpload={this.onImageUpload}\n imageDimensions={model.imageDimensions}\n insertImage={imageSupport && imageSupport.add}\n />\n </React.Fragment>\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 onModelChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n};\n\nexport default Root;\n"],"mappings":"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","ignoreList":[]}
@@ -1,24 +0,0 @@
1
- {
2
- "name": "@pie-element/drawing-response-configure",
3
- "private": true,
4
- "version": "11.1.1",
5
- "description": "",
6
- "main": "lib/index.js",
7
- "module": "src/index.js",
8
- "author": "",
9
- "dependencies": {
10
- "@emotion/react": "^11.14.0",
11
- "@emotion/style": "^0.8.0",
12
- "@mui/icons-material": "^7.3.4",
13
- "@mui/material": "^7.3.4",
14
- "@pie-framework/pie-configure-events": "^1.3.0",
15
- "@pie-lib/config-ui": "13.0.4",
16
- "@pie-lib/editable-html-tip-tap": "2.1.2",
17
- "debug": "^4.1.1",
18
- "lodash-es": "^4.17.23",
19
- "prop-types": "^15.7.2",
20
- "react": "18.3.1",
21
- "react-dom": "18.3.1"
22
- },
23
- "license": "ISC"
24
- }
@@ -1,231 +0,0 @@
1
- import { render, screen } from '@testing-library/react';
2
- import React from 'react';
3
- import { ThemeProvider, createTheme } from '@mui/material/styles';
4
-
5
- import { ImageContainer } from '../image-container';
6
-
7
- jest.mock('@pie-lib/config-ui', () => ({
8
- settings: {
9
- Panel: (props) => <div {...props} />,
10
- toggle: jest.fn(),
11
- radio: jest.fn(),
12
- dropdown: jest.fn(),
13
- },
14
- layout: {
15
- ConfigLayout: (props) => <div>{props.children}</div>,
16
- },
17
- }));
18
-
19
- const theme = createTheme();
20
-
21
- describe('ImageContainer', () => {
22
- const onUpdateImageDimension = jest.fn();
23
- const onImageUpload = jest.fn();
24
-
25
- beforeEach(() => {
26
- jest.clearAllMocks();
27
- });
28
-
29
- const renderImageContainer = (props = {}) => {
30
- const defaultProps = {
31
- imageUrl: 'url',
32
- onUpdateImageDimension,
33
- onImageUpload,
34
- ...props,
35
- };
36
- return render(
37
- <ThemeProvider theme={theme}>
38
- <ImageContainer {...defaultProps} />
39
- </ThemeProvider>
40
- );
41
- };
42
-
43
- describe('rendering', () => {
44
- it('renders "Replace Image" button when imageUrl is provided', () => {
45
- renderImageContainer({ imageUrl: 'http://example.com/image.png' });
46
- expect(screen.getByRole('button', { name: /replace image/i })).toBeInTheDocument();
47
- });
48
-
49
- it('renders "Upload Image" button when no imageUrl', () => {
50
- renderImageContainer({ imageUrl: '' });
51
- // Should have two "Upload Image" buttons - one in toolbar, one in center
52
- const uploadButtons = screen.getAllByRole('button', { name: /upload image/i });
53
- expect(uploadButtons.length).toBeGreaterThanOrEqual(1);
54
- });
55
-
56
- it('shows drag and drop instruction when no image', () => {
57
- renderImageContainer({ imageUrl: '' });
58
- expect(screen.getByText(/drag and drop or upload image from computer/i)).toBeInTheDocument();
59
- });
60
-
61
- it('renders the image when imageUrl is provided', () => {
62
- const { container } = renderImageContainer({ imageUrl: 'http://example.com/test.png' });
63
- // Image has alt="" so it has role="presentation", query by tag instead
64
- const image = container.querySelector('img');
65
- expect(image).toBeInTheDocument();
66
- expect(image).toHaveAttribute('src', 'http://example.com/test.png');
67
- });
68
-
69
- it('does not show drag and drop instruction when image exists', () => {
70
- renderImageContainer({ imageUrl: 'http://example.com/image.png' });
71
- expect(screen.queryByText(/drag and drop or upload image from computer/i)).not.toBeInTheDocument();
72
- });
73
- });
74
-
75
- describe('logic', () => {
76
- let oldFileReader;
77
- let dummyFileReader;
78
-
79
- beforeAll(() => {
80
- oldFileReader = window.FileReader;
81
- dummyFileReader = {};
82
-
83
- dummyFileReader.readAsDataURL = (result) => {
84
- dummyFileReader.result = result;
85
- dummyFileReader.onloadend();
86
- };
87
- window.FileReader = jest.fn(() => dummyFileReader);
88
- });
89
-
90
- afterAll(() => {
91
- window.FileReader = oldFileReader;
92
- });
93
-
94
- it('handleFileRead calls onImageUpload', () => {
95
- const testInstance = new ImageContainer({ imageUrl: 'url', onUpdateImageDimension, onImageUpload });
96
- testInstance.resize = { addEventListener: jest.fn() };
97
-
98
- testInstance.handleFileRead('file');
99
-
100
- expect(onImageUpload).toBeCalled();
101
- expect(onImageUpload).toHaveBeenCalledTimes(1);
102
- });
103
-
104
- it('handleUploadImage calls handleFileRead which calls onImageUpload', () => {
105
- const testInstance = new ImageContainer({ imageUrl: 'url', onUpdateImageDimension, onImageUpload });
106
- testInstance.resize = { addEventListener: jest.fn() };
107
-
108
- testInstance.handleUploadImage({ target: { files: ['file'] }, preventDefault: jest.fn() });
109
-
110
- expect(onImageUpload).toBeCalled();
111
- expect(onImageUpload).toHaveBeenCalledTimes(1);
112
- });
113
-
114
- it('handleOnDrop calls handleFileRead which calls onImageUpload if item is file and image', () => {
115
- const testInstance = new ImageContainer({ imageUrl: 'url', onUpdateImageDimension, onImageUpload });
116
- testInstance.resize = { addEventListener: jest.fn() };
117
-
118
- testInstance.handleOnDrop({
119
- preventDefault: jest.fn(),
120
- dataTransfer: {
121
- items: [
122
- {
123
- kind: 'file',
124
- getAsFile: jest.fn().mockReturnValue({ type: 'image', key: 'item' }),
125
- },
126
- ],
127
- files: [],
128
- },
129
- });
130
-
131
- expect(onImageUpload).toBeCalledWith({ type: 'image', key: 'item' });
132
- expect(onImageUpload).toHaveBeenCalledTimes(1);
133
- });
134
-
135
- it("handleOnDrop calls handleFileRead which doesn't call onImageUpload if item is file but not image", () => {
136
- const testInstance = new ImageContainer({ imageUrl: 'url', onUpdateImageDimension, onImageUpload });
137
- testInstance.resize = { addEventListener: jest.fn() };
138
-
139
- testInstance.handleOnDrop({
140
- preventDefault: jest.fn(),
141
- dataTransfer: {
142
- items: [
143
- {
144
- kind: 'file',
145
- getAsFile: jest.fn().mockReturnValue({ type: 'jpg' }),
146
- },
147
- ],
148
- files: [],
149
- },
150
- });
151
-
152
- // Should not be called since 'jpg' doesn't start with 'image'
153
- expect(onImageUpload).not.toHaveBeenCalled();
154
- });
155
-
156
- it('handleOnDrop calls handleFileRead which calls onImageUpload if item is not file, but file is image', () => {
157
- jest.clearAllMocks();
158
- const testInstance = new ImageContainer({ imageUrl: 'url', onUpdateImageDimension, onImageUpload });
159
- testInstance.resize = { addEventListener: jest.fn() };
160
-
161
- testInstance.handleOnDrop({
162
- preventDefault: jest.fn(),
163
- dataTransfer: {
164
- items: [
165
- {
166
- kind: 'something else',
167
- getAsFile: jest.fn().mockReturnValue({ type: 'image' }),
168
- },
169
- ],
170
- files: [{ type: 'image', key: 'file' }],
171
- },
172
- });
173
-
174
- expect(onImageUpload).toBeCalledWith({ type: 'image', key: 'file' });
175
- expect(onImageUpload).toHaveBeenCalledTimes(1);
176
- });
177
-
178
- it("handleOnDrop calls handleFileRead which doesn't call onImageUpload if item is not file and file is not image", () => {
179
- jest.clearAllMocks();
180
- const testInstance = new ImageContainer({ imageUrl: 'url', onUpdateImageDimension, onImageUpload });
181
- testInstance.resize = { addEventListener: jest.fn() };
182
-
183
- testInstance.handleOnDrop({
184
- preventDefault: jest.fn(),
185
- dataTransfer: {
186
- items: [
187
- {
188
- kind: 'something else',
189
- getAsFile: jest.fn().mockReturnValue({ type: 'image' }),
190
- },
191
- ],
192
- files: [{ type: 'something else', key: 'file' }],
193
- },
194
- });
195
-
196
- // Should not be called since file type is 'something else', not 'image'
197
- expect(onImageUpload).not.toHaveBeenCalled();
198
- });
199
-
200
- it('handleOnImageLoad calls onUpdateImageDimension', () => {
201
- const testInstance = new ImageContainer({ imageUrl: 'url', onUpdateImageDimension, onImageUpload });
202
- testInstance.resize = { addEventListener: jest.fn() };
203
-
204
- testInstance.handleOnImageLoad({
205
- target: { offsetHeight: 50, offsetWidth: 50, naturalWidth: 50, naturalHeight: 50 },
206
- });
207
-
208
- expect(onUpdateImageDimension).toHaveBeenCalledWith({
209
- height: 50,
210
- width: 50,
211
- });
212
- });
213
-
214
- it('stopResizing calls onUpdateImageDimension with state dimensions', () => {
215
- jest.clearAllMocks();
216
- const testInstance = new ImageContainer({ imageUrl: 'url', onUpdateImageDimension, onImageUpload });
217
- testInstance.resize = { addEventListener: jest.fn() };
218
-
219
- // Set state dimensions directly
220
- testInstance.state = { ...testInstance.state, dimensions: { height: 75, width: 100 } };
221
-
222
- // Call stopResizing which should use the dimensions from state
223
- testInstance.stopResizing();
224
-
225
- expect(onUpdateImageDimension).toHaveBeenCalledWith({
226
- height: 75,
227
- width: 100,
228
- });
229
- });
230
- });
231
- });
@@ -1,72 +0,0 @@
1
- import React from 'react';
2
- import { createRoot } from 'react-dom/client';
3
-
4
- jest.mock('@pie-lib/config-ui', () => ({
5
- choiceUtils: {
6
- firstAvailableIndex: jest.fn(),
7
- },
8
- settings: {
9
- Panel: (props) => <div {...props} />,
10
- toggle: jest.fn(),
11
- radio: jest.fn(),
12
- dropdown: jest.fn(),
13
- },
14
- layout: {
15
- ConfigLayout: (props) => <div>{props.children}</div>,
16
- },
17
- InputContainer: (props) => <div {...props}>{props.children}</div>,
18
- }));
19
-
20
- jest.mock('@pie-lib/editable-html-tip-tap', () => (props) => <div {...props} />);
21
-
22
- jest.mock('@mui/material/Typography', () => (props) => <div {...props}>{props.children}</div>);
23
-
24
- jest.mock('../image-container', () => (props) => <div {...props} />);
25
-
26
- const model = () => ({
27
- promptEnabled: true,
28
- prompt: 'This is the question prompt',
29
- imageUrl: '',
30
- imageDimensions: {
31
- height: 0,
32
- width: 0,
33
- },
34
- });
35
-
36
- const mockRender = jest.fn();
37
- const mockUnmount = jest.fn();
38
- jest.mock('react-dom/client', () => ({
39
- createRoot: jest.fn(() => ({
40
- render: mockRender,
41
- unmount: mockUnmount,
42
- })),
43
- }));
44
-
45
- describe('index', () => {
46
- let Def;
47
- let el;
48
- let onModelChanged = jest.fn();
49
- let initialModel = model();
50
-
51
- beforeAll(() => {
52
- Def = require('../index').default;
53
- // Register the custom element if not already registered
54
- if (!customElements.get('drawing-response-configure')) {
55
- customElements.define('drawing-response-configure', Def);
56
- }
57
- });
58
-
59
- beforeEach(() => {
60
- // Create custom element using document.createElement to properly initialize
61
- el = document.createElement('drawing-response-configure');
62
- el.model = initialModel;
63
- el.onModelChanged = onModelChanged;
64
- });
65
-
66
- describe('set model', () => {
67
- it('calls ReactDOM.render', () => {
68
- expect(createRoot).toHaveBeenCalled();
69
- expect(mockRender).toHaveBeenCalled();
70
- });
71
- });
72
- });