@pie-element/image-cloze-association 10.1.2-next.2 → 10.1.2

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 (130) hide show
  1. package/CHANGELOG.json +437 -0
  2. package/CHANGELOG.md +1997 -0
  3. package/LICENSE.md +5 -0
  4. package/README.md +1 -0
  5. package/configure/CHANGELOG.json +197 -0
  6. package/configure/CHANGELOG.md +1600 -0
  7. package/configure/lib/defaults.js +86 -0
  8. package/configure/lib/defaults.js.map +1 -0
  9. package/configure/lib/index.js +99 -0
  10. package/configure/lib/index.js.map +1 -0
  11. package/configure/lib/root.js +135 -0
  12. package/configure/lib/root.js.map +1 -0
  13. package/configure/package.json +23 -0
  14. package/configure/src/__tests__/index.test.js +155 -0
  15. package/configure/src/defaults.js +59 -0
  16. package/configure/src/index.js +114 -0
  17. package/configure/src/root.jsx +116 -0
  18. package/controller/CHANGELOG.json +137 -0
  19. package/controller/CHANGELOG.md +1149 -0
  20. package/controller/lib/defaults.js +14 -0
  21. package/controller/lib/defaults.js.map +1 -0
  22. package/controller/lib/index.js +304 -0
  23. package/controller/lib/index.js.map +1 -0
  24. package/controller/lib/utils.js +70 -0
  25. package/controller/lib/utils.js.map +1 -0
  26. package/controller/package.json +19 -0
  27. package/controller/src/__tests__/index.test.js +711 -0
  28. package/controller/src/defaults.js +7 -0
  29. package/controller/src/index.js +322 -0
  30. package/controller/src/utils.js +72 -0
  31. package/docs/config-schema.json +1382 -0
  32. package/docs/config-schema.json.md +1021 -0
  33. package/docs/demo/config.js +8 -0
  34. package/docs/demo/generate.js +74 -0
  35. package/docs/demo/index.html +1 -0
  36. package/docs/demo/session.js +16 -0
  37. package/docs/pie-schema.json +1085 -0
  38. package/docs/pie-schema.json.md +810 -0
  39. package/lib/constants.js +12 -0
  40. package/lib/constants.js.map +1 -0
  41. package/lib/evaluation-icon.js +60 -0
  42. package/lib/evaluation-icon.js.map +1 -0
  43. package/lib/image-container.js +94 -0
  44. package/lib/image-container.js.map +1 -0
  45. package/lib/image-drop-target.js +130 -0
  46. package/lib/image-drop-target.js.map +1 -0
  47. package/lib/index.js +220 -0
  48. package/lib/index.js.map +1 -0
  49. package/lib/interactive-section.js +104 -0
  50. package/lib/interactive-section.js.map +1 -0
  51. package/lib/possible-response.js +161 -0
  52. package/lib/possible-response.js.map +1 -0
  53. package/lib/possible-responses.js +58 -0
  54. package/lib/possible-responses.js.map +1 -0
  55. package/lib/root.js +491 -0
  56. package/lib/root.js.map +1 -0
  57. package/lib/static-html-span.js +35 -0
  58. package/lib/static-html-span.js.map +1 -0
  59. package/lib/utils-correctness.js +89 -0
  60. package/lib/utils-correctness.js.map +1 -0
  61. package/package.json +21 -86
  62. package/src/__tests__/index.test.js +174 -0
  63. package/src/__tests__/root.test.jsx +99 -0
  64. package/src/__tests__/utils.test.js +207 -0
  65. package/src/constants.js +5 -0
  66. package/src/evaluation-icon.jsx +54 -0
  67. package/src/image-container.jsx +90 -0
  68. package/src/image-drop-target.jsx +140 -0
  69. package/src/index.js +245 -0
  70. package/src/interactive-section.jsx +94 -0
  71. package/src/possible-response.jsx +152 -0
  72. package/src/possible-responses.jsx +52 -0
  73. package/src/root.jsx +490 -0
  74. package/src/static-html-span.jsx +30 -0
  75. package/src/utils-correctness.js +95 -0
  76. package/configure.js +0 -2
  77. package/controller.js +0 -1
  78. package/dist/author/defaults.d.ts +0 -88
  79. package/dist/author/defaults.js +0 -58
  80. package/dist/author/index.d.ts +0 -34
  81. package/dist/author/index.js +0 -71
  82. package/dist/author/root.d.ts +0 -14
  83. package/dist/author/root.js +0 -80
  84. package/dist/browser/Check-DL1c-mLM.js +0 -10708
  85. package/dist/browser/Check-DL1c-mLM.js.map +0 -1
  86. package/dist/browser/author/index.js +0 -38597
  87. package/dist/browser/author/index.js.map +0 -1
  88. package/dist/browser/controller/index.js +0 -171
  89. package/dist/browser/controller/index.js.map +0 -1
  90. package/dist/browser/delivery/index.js +0 -2699
  91. package/dist/browser/delivery/index.js.map +0 -1
  92. package/dist/browser/dist-BphSS14E.js +0 -346
  93. package/dist/browser/dist-BphSS14E.js.map +0 -1
  94. package/dist/browser/humps-CZ4RCLab.js +0 -67
  95. package/dist/browser/humps-CZ4RCLab.js.map +0 -1
  96. package/dist/browser/image-cloze-association.css +0 -2
  97. package/dist/controller/defaults.d.ts +0 -16
  98. package/dist/controller/defaults.js +0 -10
  99. package/dist/controller/index.d.ts +0 -23
  100. package/dist/controller/index.js +0 -122
  101. package/dist/controller/utils.d.ts +0 -14
  102. package/dist/controller/utils.js +0 -36
  103. package/dist/delivery/constants.d.ts +0 -14
  104. package/dist/delivery/evaluation-icon.d.ts +0 -28
  105. package/dist/delivery/evaluation-icon.js +0 -38
  106. package/dist/delivery/image-container.d.ts +0 -13
  107. package/dist/delivery/image-container.js +0 -61
  108. package/dist/delivery/image-drop-target.d.ts +0 -45
  109. package/dist/delivery/image-drop-target.js +0 -90
  110. package/dist/delivery/index.d.ts +0 -20
  111. package/dist/delivery/index.js +0 -110
  112. package/dist/delivery/interactive-section.d.ts +0 -15
  113. package/dist/delivery/interactive-section.js +0 -72
  114. package/dist/delivery/possible-response.d.ts +0 -34
  115. package/dist/delivery/possible-response.js +0 -100
  116. package/dist/delivery/possible-responses.d.ts +0 -31
  117. package/dist/delivery/possible-responses.js +0 -41
  118. package/dist/delivery/root.d.ts +0 -21
  119. package/dist/delivery/root.js +0 -278
  120. package/dist/delivery/static-html-span.d.ts +0 -14
  121. package/dist/delivery/static-html-span.js +0 -22
  122. package/dist/delivery/utils-correctness.d.ts +0 -10
  123. package/dist/delivery/utils-correctness.js +0 -43
  124. package/dist/index.d.ts +0 -1
  125. package/dist/index.iife.d.ts +0 -8
  126. package/dist/index.iife.js +0 -152
  127. package/dist/index.js +0 -2
  128. package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js +0 -16
  129. package/dist/runtime-support.d.ts +0 -12
  130. package/dist/runtime-support.js +0 -12
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _default = exports.default = {
8
+ model: {
9
+ rationale: '',
10
+ rationaleEnabled: true,
11
+ studentInstructionsEnabled: true,
12
+ teacherInstructions: '',
13
+ teacherInstructionsEnabled: true
14
+ },
15
+ configuration: {
16
+ baseInputConfiguration: {
17
+ h3: {
18
+ disabled: true
19
+ },
20
+ audio: {
21
+ disabled: false
22
+ },
23
+ video: {
24
+ disabled: false
25
+ },
26
+ image: {
27
+ disabled: false
28
+ },
29
+ textAlign: {
30
+ disabled: true
31
+ },
32
+ showParagraphs: {
33
+ disabled: false
34
+ },
35
+ separateParagraphs: {
36
+ disabled: true
37
+ }
38
+ },
39
+ maxImageWidth: {
40
+ teacherInstructions: 300
41
+ },
42
+ maxImageHeight: {
43
+ teacherInstructions: 300
44
+ },
45
+ settingsPanelDisabled: false,
46
+ spellCheck: {
47
+ label: 'Spellcheck',
48
+ settings: false,
49
+ enabled: true
50
+ },
51
+ teacherInstructions: {
52
+ settings: true,
53
+ label: 'Teacher Instructions',
54
+ inputConfiguration: {
55
+ audio: {
56
+ disabled: false
57
+ },
58
+ video: {
59
+ disabled: false
60
+ },
61
+ image: {
62
+ disabled: false
63
+ }
64
+ },
65
+ required: false
66
+ },
67
+ withRubric: {
68
+ settings: false,
69
+ label: 'Add Rubric'
70
+ },
71
+ mathMlOptions: {
72
+ mmlOutput: false,
73
+ mmlEditing: false
74
+ },
75
+ language: {
76
+ settings: false,
77
+ label: 'Specify Language',
78
+ enabled: false
79
+ },
80
+ languageChoices: {
81
+ label: 'Language Choices',
82
+ options: []
83
+ }
84
+ }
85
+ };
86
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","names":["model","rationale","rationaleEnabled","studentInstructionsEnabled","teacherInstructions","teacherInstructionsEnabled","configuration","baseInputConfiguration","h3","disabled","audio","video","image","textAlign","showParagraphs","separateParagraphs","maxImageWidth","maxImageHeight","settingsPanelDisabled","spellCheck","label","settings","enabled","inputConfiguration","required","withRubric","mathMlOptions","mmlOutput","mmlEditing","language","languageChoices","options"],"sources":["../src/defaults.js"],"sourcesContent":["export default {\n model: {\n rationale: '',\n rationaleEnabled: true,\n studentInstructionsEnabled: true,\n teacherInstructions: '',\n teacherInstructionsEnabled: true,\n },\n configuration: {\n baseInputConfiguration: {\n h3: { disabled: true },\n audio: { disabled: false },\n video: { disabled: false },\n image: { disabled: false },\n textAlign: { disabled: true },\n showParagraphs: { disabled: false },\n separateParagraphs: { disabled: true },\n },\n maxImageWidth: {\n teacherInstructions: 300,\n },\n maxImageHeight: {\n teacherInstructions: 300,\n },\n settingsPanelDisabled: false,\n spellCheck: {\n label: 'Spellcheck',\n settings: false,\n enabled: true,\n },\n teacherInstructions: {\n settings: true,\n label: 'Teacher Instructions',\n inputConfiguration: {\n audio: { disabled: false },\n video: { disabled: false },\n image: { disabled: false },\n },\n required: false,\n },\n withRubric: {\n settings: false,\n label: 'Add Rubric',\n },\n mathMlOptions: {\n mmlOutput: false,\n mmlEditing: false,\n },\n language: {\n settings: false,\n label: 'Specify Language',\n enabled: false,\n },\n languageChoices: {\n label: 'Language Choices',\n options: [],\n },\n },\n};\n"],"mappings":";;;;;;iCAAe;EACbA,KAAK,EAAE;IACLC,SAAS,EAAE,EAAE;IACbC,gBAAgB,EAAE,IAAI;IACtBC,0BAA0B,EAAE,IAAI;IAChCC,mBAAmB,EAAE,EAAE;IACvBC,0BAA0B,EAAE;EAC9B,CAAC;EACDC,aAAa,EAAE;IACbC,sBAAsB,EAAE;MACtBC,EAAE,EAAE;QAAEC,QAAQ,EAAE;MAAK,CAAC;MACtBC,KAAK,EAAE;QAAED,QAAQ,EAAE;MAAM,CAAC;MAC1BE,KAAK,EAAE;QAAEF,QAAQ,EAAE;MAAM,CAAC;MAC1BG,KAAK,EAAE;QAAEH,QAAQ,EAAE;MAAM,CAAC;MAC1BI,SAAS,EAAE;QAAEJ,QAAQ,EAAE;MAAK,CAAC;MAC7BK,cAAc,EAAE;QAAEL,QAAQ,EAAE;MAAM,CAAC;MACnCM,kBAAkB,EAAE;QAAEN,QAAQ,EAAE;MAAK;IACvC,CAAC;IACDO,aAAa,EAAE;MACbZ,mBAAmB,EAAE;IACvB,CAAC;IACDa,cAAc,EAAE;MACdb,mBAAmB,EAAE;IACvB,CAAC;IACDc,qBAAqB,EAAE,KAAK;IAC5BC,UAAU,EAAE;MACVC,KAAK,EAAE,YAAY;MACnBC,QAAQ,EAAE,KAAK;MACfC,OAAO,EAAE;IACX,CAAC;IACDlB,mBAAmB,EAAE;MACnBiB,QAAQ,EAAE,IAAI;MACdD,KAAK,EAAE,sBAAsB;MAC7BG,kBAAkB,EAAE;QAClBb,KAAK,EAAE;UAAED,QAAQ,EAAE;QAAM,CAAC;QAC1BE,KAAK,EAAE;UAAEF,QAAQ,EAAE;QAAM,CAAC;QAC1BG,KAAK,EAAE;UAAEH,QAAQ,EAAE;QAAM;MAC3B,CAAC;MACDe,QAAQ,EAAE;IACZ,CAAC;IACDC,UAAU,EAAE;MACVJ,QAAQ,EAAE,KAAK;MACfD,KAAK,EAAE;IACT,CAAC;IACDM,aAAa,EAAE;MACbC,SAAS,EAAE,KAAK;MAChBC,UAAU,EAAE;IACd,CAAC;IACDC,QAAQ,EAAE;MACRR,QAAQ,EAAE,KAAK;MACfD,KAAK,EAAE,kBAAkB;MACzBE,OAAO,EAAE;IACX,CAAC;IACDQ,eAAe,EAAE;MACfV,KAAK,EAAE,kBAAkB;MACzBW,OAAO,EAAE;IACX;EACF;AACF,CAAC","ignoreList":[]}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _pieConfigureEvents = require("@pie-framework/pie-configure-events");
10
+ var _react = _interopRequireDefault(require("react"));
11
+ var _client = require("react-dom/client");
12
+ var _debug = _interopRequireDefault(require("debug"));
13
+ var _root = _interopRequireDefault(require("./root"));
14
+ var _defaults = _interopRequireDefault(require("./defaults"));
15
+ const log = (0, _debug.default)('image-cloze-association:configure');
16
+ class ImageClozeAssociationConfigure extends HTMLElement {
17
+ constructor() {
18
+ super();
19
+ this._root = null;
20
+ this._model = ImageClozeAssociationConfigure.createDefaultModel();
21
+ this.onModelChanged = this.onModelChanged.bind(this);
22
+ this._configuration = _defaults.default.configuration;
23
+ }
24
+ set model(s) {
25
+ this._model = ImageClozeAssociationConfigure.createDefaultModel(s);
26
+ this._render();
27
+ }
28
+ set configuration(c) {
29
+ this._configuration = c;
30
+ this._render();
31
+ }
32
+ set disableSidePanel(s) {
33
+ this._disableSidePanel = s;
34
+ this._render();
35
+ }
36
+ dispatchModelUpdated(reset) {
37
+ const resetValue = !!reset;
38
+ this.dispatchEvent(new _pieConfigureEvents.ModelUpdatedEvent(this._model, resetValue));
39
+ }
40
+ onModelChanged(m, reset) {
41
+ this._model = m;
42
+ this.dispatchModelUpdated(reset);
43
+ this._render();
44
+ }
45
+ onConfigurationChanged(config) {
46
+ this._configuration = config;
47
+ this._render();
48
+ }
49
+
50
+ /**
51
+ *
52
+ * @param {done, progress, file} handler
53
+ */
54
+ insertImage(handler) {
55
+ this.dispatchEvent(new _pieConfigureEvents.InsertImageEvent(handler));
56
+ }
57
+ onDeleteImage(src, done) {
58
+ this.dispatchEvent(new _pieConfigureEvents.DeleteImageEvent(src, done));
59
+ }
60
+ insertSound(handler) {
61
+ this.dispatchEvent(new _pieConfigureEvents.InsertSoundEvent(handler));
62
+ }
63
+ onDeleteSound(src, done) {
64
+ this.dispatchEvent(new _pieConfigureEvents.DeleteSoundEvent(src, done));
65
+ }
66
+ _render() {
67
+ log('_render');
68
+ let element = /*#__PURE__*/_react.default.createElement(_root.default, {
69
+ disableSidePanel: this._disableSidePanel,
70
+ model: this._model,
71
+ configuration: this._configuration,
72
+ onModelChanged: this.onModelChanged.bind(this),
73
+ onConfigurationChanged: this.onConfigurationChanged.bind(this),
74
+ imageSupport: {
75
+ add: this.insertImage.bind(this),
76
+ delete: this.onDeleteImage.bind(this)
77
+ },
78
+ uploadSoundSupport: {
79
+ add: this.insertSound.bind(this),
80
+ delete: this.onDeleteSound.bind(this)
81
+ }
82
+ });
83
+ if (!this._root) {
84
+ this._root = (0, _client.createRoot)(this);
85
+ }
86
+ this._root.render(element);
87
+ }
88
+ disconnectedCallback() {
89
+ if (this._root) {
90
+ this._root.unmount();
91
+ }
92
+ }
93
+ }
94
+ exports.default = ImageClozeAssociationConfigure;
95
+ (0, _defineProperty2.default)(ImageClozeAssociationConfigure, "createDefaultModel", (model = {}) => ({
96
+ ..._defaults.default.model,
97
+ ...model
98
+ }));
99
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_pieConfigureEvents","require","_react","_interopRequireDefault","_client","_debug","_root","_defaults","log","debug","ImageClozeAssociationConfigure","HTMLElement","constructor","_model","createDefaultModel","onModelChanged","bind","_configuration","sensibleDefaults","configuration","model","s","_render","c","disableSidePanel","_disableSidePanel","dispatchModelUpdated","reset","resetValue","dispatchEvent","ModelUpdatedEvent","m","onConfigurationChanged","config","insertImage","handler","InsertImageEvent","onDeleteImage","src","done","DeleteImageEvent","insertSound","InsertSoundEvent","onDeleteSound","DeleteSoundEvent","element","React","createElement","Root","imageSupport","add","delete","uploadSoundSupport","createRoot","render","disconnectedCallback","unmount","exports","default","_defineProperty2"],"sources":["../src/index.js"],"sourcesContent":["import {\n ModelUpdatedEvent,\n DeleteImageEvent,\n InsertImageEvent,\n InsertSoundEvent,\n DeleteSoundEvent,\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('image-cloze-association:configure');\n\nexport default class ImageClozeAssociationConfigure extends HTMLElement {\n static createDefaultModel = (model = {}) => ({\n ...sensibleDefaults.model,\n ...model,\n });\n\n constructor() {\n super();\n this._root = null;\n this._model = ImageClozeAssociationConfigure.createDefaultModel();\n this.onModelChanged = this.onModelChanged.bind(this);\n this._configuration = sensibleDefaults.configuration;\n }\n\n set model(s) {\n this._model = ImageClozeAssociationConfigure.createDefaultModel(s);\n this._render();\n }\n\n set configuration(c) {\n this._configuration = c;\n this._render();\n }\n\n set disableSidePanel(s) {\n this._disableSidePanel = s;\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(config) {\n this._configuration = config;\n this._render();\n }\n\n /**\n *\n * @param {done, progress, file} handler\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 disableSidePanel: this._disableSidePanel,\n model: this._model,\n configuration: this._configuration,\n onModelChanged: this.onModelChanged.bind(this),\n onConfigurationChanged: this.onConfigurationChanged.bind(this),\n imageSupport: {\n add: this.insertImage.bind(this),\n delete: this.onDeleteImage.bind(this),\n },\n uploadSoundSupport: {\n add: this.insertSound.bind(this),\n delete: this.onDeleteSound.bind(this),\n },\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":[]}
@@ -0,0 +1,135 @@
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 _propTypes = _interopRequireDefault(require("prop-types"));
11
+ var _configUi = require("@pie-lib/config-ui");
12
+ var _editableHtmlTipTap = _interopRequireDefault(require("@pie-lib/editable-html-tip-tap"));
13
+ var _styles = require("@mui/material/styles");
14
+ const {
15
+ Panel,
16
+ toggle,
17
+ dropdown
18
+ } = _configUi.settings;
19
+ const StyledInputContainer = (0, _styles.styled)(_configUi.InputContainer)(({
20
+ theme
21
+ }) => ({
22
+ width: '100%',
23
+ paddingTop: theme.spacing(2),
24
+ marginBottom: theme.spacing(2)
25
+ }));
26
+ const ErrorText = (0, _styles.styled)('div')(({
27
+ theme
28
+ }) => ({
29
+ fontSize: theme.typography.fontSize - 2,
30
+ color: theme.palette.error.main,
31
+ paddingTop: theme.spacing(1)
32
+ }));
33
+ class Root extends _react.default.Component {
34
+ constructor(...args) {
35
+ super(...args);
36
+ (0, _defineProperty2.default)(this, "onTeacherInstructionsChanged", teacherInstructions => {
37
+ this.props.onModelChanged({
38
+ ...this.props.model,
39
+ teacherInstructions
40
+ });
41
+ });
42
+ }
43
+ render() {
44
+ const {
45
+ model,
46
+ configuration,
47
+ onModelChanged,
48
+ onConfigurationChanged,
49
+ imageSupport,
50
+ uploadSoundSupport
51
+ } = this.props;
52
+ const {
53
+ baseInputConfiguration = {},
54
+ contentDimensions = {},
55
+ maxImageWidth = {},
56
+ maxImageHeight = {},
57
+ settingsPanelDisabled,
58
+ spellCheck = {},
59
+ teacherInstructions = {},
60
+ withRubric = {},
61
+ mathMlOptions = {},
62
+ language = {},
63
+ languageChoices = {}
64
+ } = configuration || {};
65
+ const {
66
+ errors = {},
67
+ extraCSSRules,
68
+ spellCheckEnabled
69
+ } = model || {};
70
+ const {
71
+ teacherInstructions: teacherInstructionsError
72
+ } = errors;
73
+ const panelProperties = {
74
+ teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
75
+ spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),
76
+ rubricEnabled: withRubric?.settings && toggle(withRubric?.label),
77
+ 'language.enabled': language.settings && toggle(language.label, true),
78
+ language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options)
79
+ };
80
+ const getPluginProps = (props = {}) => ({
81
+ ...baseInputConfiguration,
82
+ ...props
83
+ });
84
+ return /*#__PURE__*/_react.default.createElement(_configUi.layout.ConfigLayout, {
85
+ extraCSSRules: extraCSSRules,
86
+ dimensions: contentDimensions,
87
+ hideSettings: settingsPanelDisabled,
88
+ settings: /*#__PURE__*/_react.default.createElement(Panel, {
89
+ model: model,
90
+ configuration: configuration,
91
+ onChangeModel: model => onModelChanged(model),
92
+ onChangeConfiguration: config => onConfigurationChanged(config),
93
+ groups: {
94
+ Properties: panelProperties
95
+ }
96
+ })
97
+ }, model && model.teacherInstructionsEnabled && /*#__PURE__*/_react.default.createElement(StyledInputContainer, {
98
+ label: teacherInstructions.label
99
+ }, /*#__PURE__*/_react.default.createElement(_editableHtmlTipTap.default, {
100
+ markup: model.teacherInstructions || '',
101
+ onChange: this.onTeacherInstructionsChanged,
102
+ imageSupport: imageSupport,
103
+ nonEmpty: false,
104
+ error: teacherInstructionsError,
105
+ spellCheck: spellCheckEnabled,
106
+ pluginProps: getPluginProps(teacherInstructions?.inputConfiguration),
107
+ maxImageWidth: maxImageWidth && maxImageWidth.teacherInstructions,
108
+ maxImageHeight: maxImageHeight && maxImageHeight.teacherInstructions,
109
+ uploadSoundSupport: uploadSoundSupport,
110
+ languageCharactersProps: [{
111
+ language: 'spanish'
112
+ }, {
113
+ language: 'special'
114
+ }],
115
+ mathMlOptions: mathMlOptions
116
+ }), teacherInstructionsError && /*#__PURE__*/_react.default.createElement(ErrorText, null, teacherInstructionsError)), /*#__PURE__*/_react.default.createElement("div", null, "Image cloze association"));
117
+ }
118
+ }
119
+ exports.Root = Root;
120
+ Root.propTypes = {
121
+ onModelChanged: _propTypes.default.func,
122
+ onConfigurationChanged: _propTypes.default.func,
123
+ model: _propTypes.default.object.isRequired,
124
+ configuration: _propTypes.default.object.isRequired,
125
+ imageSupport: _propTypes.default.shape({
126
+ add: _propTypes.default.func.isRequired,
127
+ delete: _propTypes.default.func.isRequired
128
+ }),
129
+ uploadSoundSupport: _propTypes.default.shape({
130
+ add: _propTypes.default.func.isRequired,
131
+ delete: _propTypes.default.func.isRequired
132
+ })
133
+ };
134
+ var _default = exports.default = Root;
135
+ //# sourceMappingURL=root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root.js","names":["_react","_interopRequireDefault","require","_propTypes","_configUi","_editableHtmlTipTap","_styles","Panel","toggle","dropdown","settings","StyledInputContainer","styled","InputContainer","theme","width","paddingTop","spacing","marginBottom","ErrorText","fontSize","typography","color","palette","error","main","Root","React","Component","constructor","args","_defineProperty2","default","teacherInstructions","props","onModelChanged","model","render","configuration","onConfigurationChanged","imageSupport","uploadSoundSupport","baseInputConfiguration","contentDimensions","maxImageWidth","maxImageHeight","settingsPanelDisabled","spellCheck","withRubric","mathMlOptions","language","languageChoices","errors","extraCSSRules","spellCheckEnabled","teacherInstructionsError","panelProperties","teacherInstructionsEnabled","label","rubricEnabled","enabled","options","getPluginProps","createElement","layout","ConfigLayout","dimensions","hideSettings","onChangeModel","onChangeConfiguration","config","groups","Properties","markup","onChange","onTeacherInstructionsChanged","nonEmpty","pluginProps","inputConfiguration","languageCharactersProps","exports","propTypes","PropTypes","func","object","isRequired","shape","add","delete","_default"],"sources":["../src/root.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { settings, layout, InputContainer } from '@pie-lib/config-ui';\nimport EditableHtml from '@pie-lib/editable-html-tip-tap';\nimport { styled } from '@mui/material/styles';\n\nconst { Panel, toggle, dropdown } = settings;\n\nconst StyledInputContainer = styled(InputContainer)(({ theme }) => ({\n width: '100%',\n paddingTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\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 onTeacherInstructionsChanged = (teacherInstructions) => {\n this.props.onModelChanged({ ...this.props.model, teacherInstructions });\n };\n\n render() {\n const { model, configuration, onModelChanged, onConfigurationChanged, imageSupport, uploadSoundSupport } =\n this.props;\n const {\n baseInputConfiguration = {},\n contentDimensions = {},\n maxImageWidth = {},\n maxImageHeight = {},\n settingsPanelDisabled,\n spellCheck = {},\n teacherInstructions = {},\n withRubric = {},\n mathMlOptions = {},\n language = {},\n languageChoices = {},\n } = configuration || {};\n const { errors = {}, extraCSSRules, spellCheckEnabled } = model || {};\n const { teacherInstructions: teacherInstructionsError } = errors;\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 'language.enabled': language.settings && toggle(language.label, true),\n language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),\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 configuration={configuration}\n onChangeModel={(model) => onModelChanged(model)}\n onChangeConfiguration={(config) => onConfigurationChanged(config)}\n groups={{\n Properties: panelProperties,\n }}\n />\n }\n >\n {model && model.teacherInstructionsEnabled && (\n <StyledInputContainer label={teacherInstructions.label}>\n <EditableHtml\n markup={model.teacherInstructions || ''}\n onChange={this.onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={teacherInstructionsError}\n spellCheck={spellCheckEnabled}\n pluginProps={getPluginProps(teacherInstructions?.inputConfiguration)}\n maxImageWidth={maxImageWidth && maxImageWidth.teacherInstructions}\n maxImageHeight={maxImageHeight && maxImageHeight.teacherInstructions}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {teacherInstructionsError && <ErrorText>{teacherInstructionsError}</ErrorText>}\n </StyledInputContainer>\n )}\n\n <div>Image cloze association</div>\n </layout.ConfigLayout>\n );\n }\n}\n\nRoot.propTypes = {\n onModelChanged: PropTypes.func,\n onConfigurationChanged: PropTypes.func,\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n};\n\nexport default Root;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@pie-element/image-cloze-association-configure",
3
+ "private": true,
4
+ "version": "9.1.2",
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.6",
16
+ "@pie-lib/editable-html-tip-tap": "2.1.4",
17
+ "debug": "^4.1.1",
18
+ "prop-types": "^15.8.1",
19
+ "react": "18.3.1",
20
+ "react-dom": "18.3.1"
21
+ },
22
+ "license": "ISC"
23
+ }
@@ -0,0 +1,155 @@
1
+ import { createRoot } from 'react-dom/client';
2
+ import { render } from '@testing-library/react';
3
+
4
+ import * as React from 'react';
5
+ import defaultValues from '../defaults';
6
+ import { Root } from '../root';
7
+
8
+ const mockRender = jest.fn();
9
+ const mockUnmount = jest.fn();
10
+ const mockCreateRoot = jest.fn(() => ({
11
+ render: mockRender,
12
+ unmount: mockUnmount,
13
+ }));
14
+
15
+ jest.mock('react-dom/client', () => ({
16
+ createRoot: (...args) => mockCreateRoot(...args),
17
+ }));
18
+
19
+ jest.mock('@pie-lib/config-ui', () => ({
20
+ FeedbackConfig: (props) => <div />,
21
+ InputCheckbox: (props) => <div />,
22
+ InputContainer: (props) => <div {...props}>{props.children}</div>,
23
+ layout: {
24
+ ConfigLayout: (props) => <div>{props.children}</div>,
25
+ },
26
+ settings: {
27
+ Panel: (props) => <div onChange={props.onChange} />,
28
+ toggle: jest.fn(),
29
+ dropdown: jest.fn(),
30
+ },
31
+ }));
32
+
33
+ jest.mock('../index', () => {
34
+ const sensibleDefaults = require('../defaults').default;
35
+ const { ModelUpdatedEvent } = require('@pie-framework/pie-configure-events');
36
+
37
+ class MockHTMLElement {
38
+ constructor() {
39
+ this._root = null;
40
+ this._model = null;
41
+ this._configuration = sensibleDefaults.configuration;
42
+ this.dispatchEvent = jest.fn();
43
+ this.onModelChanged = this.onModelChanged.bind(this);
44
+ }
45
+ }
46
+
47
+ return {
48
+ __esModule: true,
49
+ default: class ImageClozeAssociationConfigure extends MockHTMLElement {
50
+ static createDefaultModel = (model = {}) => ({
51
+ ...sensibleDefaults.model,
52
+ ...model,
53
+ });
54
+
55
+ constructor() {
56
+ super();
57
+ this._model = ImageClozeAssociationConfigure.createDefaultModel();
58
+ }
59
+
60
+ set model(s) {
61
+ this._model = ImageClozeAssociationConfigure.createDefaultModel(s);
62
+ this._render();
63
+ }
64
+
65
+ set configuration(c) {
66
+ this._configuration = c;
67
+ this._render();
68
+ }
69
+
70
+ _render() {
71
+ if (!this._root) {
72
+ this._root = mockCreateRoot(global.document.createElement('div'));
73
+ }
74
+ this._root.render(null);
75
+ }
76
+
77
+ onModelChanged(model) {
78
+ this._model = { ...this._model, ...model };
79
+ this.dispatchEvent(new ModelUpdatedEvent(this._model, false));
80
+ }
81
+ },
82
+ };
83
+ });
84
+
85
+ export const defaultProps = {
86
+ classes: {},
87
+ model: {},
88
+ configuration: defaultValues.configuration,
89
+ };
90
+
91
+ const ImageClozeAssociationConfigure = require('../index').default;
92
+
93
+ describe('Root', () => {
94
+ let wrapper;
95
+
96
+ beforeEach(() => {
97
+ wrapper = (props) => {
98
+ const configProps = {
99
+ ...defaultProps,
100
+ ...props,
101
+ };
102
+
103
+ return render(<Root {...configProps} />);
104
+ };
105
+ });
106
+
107
+ it('renders correctly', () => {
108
+ const { container } = wrapper();
109
+ expect(container).toBeDefined();
110
+ });
111
+
112
+ it('updates teacher instructions correctly', () => {
113
+ let onModelChanged = jest.fn();
114
+ const { container } = wrapper({
115
+ onModelChanged,
116
+ model: { teacherInstructionsEnabled: true },
117
+ });
118
+
119
+ // Find the Root component and call the method directly
120
+ // Since we're using RTL, we need to test the component behavior differently
121
+ const rootComponent = new Root({
122
+ ...defaultProps,
123
+ onModelChanged,
124
+ model: { teacherInstructionsEnabled: true },
125
+ });
126
+
127
+ rootComponent.onTeacherInstructionsChanged('New Teacher Instructions');
128
+
129
+ expect(onModelChanged).toBeCalledWith(
130
+ expect.objectContaining({ teacherInstructions: 'New Teacher Instructions' }),
131
+ );
132
+ });
133
+ });
134
+
135
+ describe('index', () => {
136
+ let el;
137
+ let onModelChanged = jest.fn();
138
+ let initialModel = {};
139
+
140
+ beforeEach(() => {
141
+ mockRender.mockClear();
142
+ mockCreateRoot.mockClear();
143
+ el = new ImageClozeAssociationConfigure();
144
+ el.model = initialModel;
145
+ el.onModelChanged = onModelChanged;
146
+ });
147
+
148
+ describe('set model', () => {
149
+ it('calls createRoot and render', () => {
150
+ const rootInstance = mockCreateRoot.mock.results[0].value;
151
+ expect(mockCreateRoot).toHaveBeenCalled();
152
+ expect(rootInstance.render).toHaveBeenCalled();
153
+ });
154
+ });
155
+ });
@@ -0,0 +1,59 @@
1
+ export default {
2
+ model: {
3
+ rationale: '',
4
+ rationaleEnabled: true,
5
+ studentInstructionsEnabled: true,
6
+ teacherInstructions: '',
7
+ teacherInstructionsEnabled: true,
8
+ },
9
+ configuration: {
10
+ baseInputConfiguration: {
11
+ h3: { disabled: true },
12
+ audio: { disabled: false },
13
+ video: { disabled: false },
14
+ image: { disabled: false },
15
+ textAlign: { disabled: true },
16
+ showParagraphs: { disabled: false },
17
+ separateParagraphs: { disabled: true },
18
+ },
19
+ maxImageWidth: {
20
+ teacherInstructions: 300,
21
+ },
22
+ maxImageHeight: {
23
+ teacherInstructions: 300,
24
+ },
25
+ settingsPanelDisabled: false,
26
+ spellCheck: {
27
+ label: 'Spellcheck',
28
+ settings: false,
29
+ enabled: true,
30
+ },
31
+ teacherInstructions: {
32
+ settings: true,
33
+ label: 'Teacher Instructions',
34
+ inputConfiguration: {
35
+ audio: { disabled: false },
36
+ video: { disabled: false },
37
+ image: { disabled: false },
38
+ },
39
+ required: false,
40
+ },
41
+ withRubric: {
42
+ settings: false,
43
+ label: 'Add Rubric',
44
+ },
45
+ mathMlOptions: {
46
+ mmlOutput: false,
47
+ mmlEditing: false,
48
+ },
49
+ language: {
50
+ settings: false,
51
+ label: 'Specify Language',
52
+ enabled: false,
53
+ },
54
+ languageChoices: {
55
+ label: 'Language Choices',
56
+ options: [],
57
+ },
58
+ },
59
+ };