@pie-element/fraction-model 6.1.2-next.2 → 6.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 (85) hide show
  1. package/CHANGELOG.json +1 -0
  2. package/CHANGELOG.md +594 -0
  3. package/LICENSE.md +5 -0
  4. package/README.md +18 -0
  5. package/configure/CHANGELOG.json +1 -0
  6. package/configure/CHANGELOG.md +559 -0
  7. package/configure/lib/card-bar.js +57 -0
  8. package/configure/lib/card-bar.js.map +1 -0
  9. package/configure/lib/defaults.js +114 -0
  10. package/configure/lib/defaults.js.map +1 -0
  11. package/configure/lib/index.js +163 -0
  12. package/configure/lib/index.js.map +1 -0
  13. package/configure/lib/main.js +253 -0
  14. package/configure/lib/main.js.map +1 -0
  15. package/configure/lib/model-options.js +144 -0
  16. package/configure/lib/model-options.js.map +1 -0
  17. package/configure/lib/number-text-field.js +47 -0
  18. package/configure/lib/number-text-field.js.map +1 -0
  19. package/configure/package.json +24 -0
  20. package/controller/CHANGELOG.json +1 -0
  21. package/controller/CHANGELOG.md +484 -0
  22. package/controller/lib/defaults.js +20 -0
  23. package/controller/lib/defaults.js.map +1 -0
  24. package/controller/lib/index.js +215 -0
  25. package/controller/lib/index.js.map +1 -0
  26. package/controller/package.json +15 -0
  27. package/docs/config-schema.json +1796 -0
  28. package/docs/config-schema.json.md +1318 -0
  29. package/docs/demo/config.js +8 -0
  30. package/docs/demo/generate.js +6 -0
  31. package/docs/demo/index.html +1 -0
  32. package/docs/demo/session.js +6 -0
  33. package/docs/pie-schema.json +873 -0
  34. package/docs/pie-schema.json.md +639 -0
  35. package/lib/answer-fraction.js +109 -0
  36. package/lib/answer-fraction.js.map +1 -0
  37. package/lib/fraction-model-chart.js +279 -0
  38. package/lib/fraction-model-chart.js.map +1 -0
  39. package/lib/index.js +91 -0
  40. package/lib/index.js.map +1 -0
  41. package/lib/main.js +203 -0
  42. package/lib/main.js.map +1 -0
  43. package/package.json +19 -82
  44. package/configure.js +0 -2
  45. package/controller.js +0 -1
  46. package/dist/author/card-bar.d.ts +0 -20
  47. package/dist/author/card-bar.js +0 -40
  48. package/dist/author/defaults.d.ts +0 -113
  49. package/dist/author/defaults.js +0 -84
  50. package/dist/author/index.d.ts +0 -44
  51. package/dist/author/index.js +0 -88
  52. package/dist/author/main.d.ts +0 -25
  53. package/dist/author/main.js +0 -156
  54. package/dist/author/model-options.d.ts +0 -32
  55. package/dist/author/model-options.js +0 -85
  56. package/dist/author/number-text-field.d.ts +0 -15
  57. package/dist/author/number-text-field.js +0 -24
  58. package/dist/browser/author/index.js +0 -36733
  59. package/dist/browser/author/index.js.map +0 -1
  60. package/dist/browser/controller/index.js +0 -78
  61. package/dist/browser/controller/index.js.map +0 -1
  62. package/dist/browser/delivery/index.js +0 -2
  63. package/dist/browser/delivery-Dop7B493.js +0 -27732
  64. package/dist/browser/delivery-Dop7B493.js.map +0 -1
  65. package/dist/browser/dist-DSzihwLW.js +0 -85
  66. package/dist/browser/dist-DSzihwLW.js.map +0 -1
  67. package/dist/browser/fraction-model.css +0 -2
  68. package/dist/controller/defaults.d.ts +0 -21
  69. package/dist/controller/defaults.js +0 -13
  70. package/dist/controller/index.d.ts +0 -23
  71. package/dist/controller/index.js +0 -68
  72. package/dist/delivery/answer-fraction.d.ts +0 -27
  73. package/dist/delivery/answer-fraction.js +0 -69
  74. package/dist/delivery/fraction-model-chart.d.ts +0 -11
  75. package/dist/delivery/fraction-model-chart.js +0 -154
  76. package/dist/delivery/index.d.ts +0 -22
  77. package/dist/delivery/index.js +0 -54
  78. package/dist/delivery/main.d.ts +0 -38
  79. package/dist/delivery/main.js +0 -136
  80. package/dist/index.d.ts +0 -1
  81. package/dist/index.iife.d.ts +0 -8
  82. package/dist/index.iife.js +0 -179
  83. package/dist/index.js +0 -2
  84. package/dist/runtime-support.d.ts +0 -12
  85. package/dist/runtime-support.js +0 -12
@@ -0,0 +1,114 @@
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
+ correctResponse: [],
10
+ title: '',
11
+ prompt: '',
12
+ modelTypeSelected: 'bar',
13
+ maxModelSelected: 1,
14
+ partsPerModel: 5,
15
+ allowedStudentConfig: false,
16
+ showGraphLabels: false
17
+ },
18
+ configuration: {
19
+ baseInputConfiguration: {
20
+ h3: {
21
+ disabled: true
22
+ },
23
+ audio: {
24
+ disabled: false
25
+ },
26
+ video: {
27
+ disabled: false
28
+ },
29
+ image: {
30
+ disabled: false
31
+ },
32
+ textAlign: {
33
+ disabled: true
34
+ },
35
+ showParagraphs: {
36
+ disabled: false
37
+ },
38
+ separateParagraphs: {
39
+ disabled: true
40
+ }
41
+ },
42
+ title: {
43
+ label: 'Title',
44
+ settings: true,
45
+ enabled: true,
46
+ inputConfiguration: {
47
+ audio: {
48
+ disabled: false
49
+ },
50
+ video: {
51
+ disabled: false
52
+ },
53
+ image: {
54
+ disabled: false
55
+ }
56
+ }
57
+ },
58
+ prompt: {
59
+ label: 'Question',
60
+ settings: true,
61
+ enabled: true,
62
+ inputConfiguration: {
63
+ audio: {
64
+ disabled: false
65
+ },
66
+ video: {
67
+ disabled: false
68
+ },
69
+ image: {
70
+ disabled: false
71
+ }
72
+ }
73
+ },
74
+ modelOptions: {
75
+ maxOfModel: {
76
+ min: 1,
77
+ max: 9,
78
+ default: 1
79
+ },
80
+ partsPerModel: {
81
+ min: 1,
82
+ max: 9,
83
+ default: 5
84
+ },
85
+ modelTypeChoices: [{
86
+ value: 'bar',
87
+ label: 'Bar'
88
+ }, {
89
+ value: 'pie',
90
+ label: 'Pie'
91
+ }]
92
+ },
93
+ mathMlOptions: {
94
+ mmlOutput: false,
95
+ mmlEditing: false
96
+ },
97
+ language: {
98
+ settings: false,
99
+ label: 'Specify Language',
100
+ enabled: false
101
+ },
102
+ languageChoices: {
103
+ label: 'Language Choices',
104
+ options: []
105
+ },
106
+ spellCheck: {
107
+ label: 'Spellcheck',
108
+ settings: false,
109
+ enabled: true
110
+ },
111
+ settingsPanelDisabled: true
112
+ }
113
+ };
114
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","names":["model","correctResponse","title","prompt","modelTypeSelected","maxModelSelected","partsPerModel","allowedStudentConfig","showGraphLabels","configuration","baseInputConfiguration","h3","disabled","audio","video","image","textAlign","showParagraphs","separateParagraphs","label","settings","enabled","inputConfiguration","modelOptions","maxOfModel","min","max","default","modelTypeChoices","value","mathMlOptions","mmlOutput","mmlEditing","language","languageChoices","options","spellCheck","settingsPanelDisabled"],"sources":["../src/defaults.js"],"sourcesContent":["export default {\n model: {\n correctResponse: [],\n title: '',\n prompt: '',\n modelTypeSelected: 'bar',\n maxModelSelected: 1,\n partsPerModel: 5,\n allowedStudentConfig: false,\n showGraphLabels: false,\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 title: {\n label: 'Title',\n settings: true,\n enabled: true,\n inputConfiguration: {\n audio: { disabled: false },\n video: { disabled: false },\n image: { disabled: false },\n },\n },\n prompt: {\n label: 'Question',\n settings: true,\n enabled: true,\n inputConfiguration: {\n audio: { disabled: false },\n video: { disabled: false },\n image: { disabled: false },\n },\n },\n modelOptions: {\n maxOfModel: {\n min: 1,\n max: 9,\n default: 1,\n },\n partsPerModel: {\n min: 1,\n max: 9,\n default: 5,\n },\n modelTypeChoices: [\n { value: 'bar', label: 'Bar' },\n { value: 'pie', label: 'Pie' },\n ],\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 spellCheck: {\n label: 'Spellcheck',\n settings: false,\n enabled: true,\n },\n settingsPanelDisabled: true,\n },\n};\n"],"mappings":";;;;;;iCAAe;EACbA,KAAK,EAAE;IACLC,eAAe,EAAE,EAAE;IACnBC,KAAK,EAAE,EAAE;IACTC,MAAM,EAAE,EAAE;IACVC,iBAAiB,EAAE,KAAK;IACxBC,gBAAgB,EAAE,CAAC;IACnBC,aAAa,EAAE,CAAC;IAChBC,oBAAoB,EAAE,KAAK;IAC3BC,eAAe,EAAE;EACnB,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;IACDV,KAAK,EAAE;MACLiB,KAAK,EAAE,OAAO;MACdC,QAAQ,EAAE,IAAI;MACdC,OAAO,EAAE,IAAI;MACbC,kBAAkB,EAAE;QAClBT,KAAK,EAAE;UAAED,QAAQ,EAAE;QAAM,CAAC;QAC1BE,KAAK,EAAE;UAAEF,QAAQ,EAAE;QAAM,CAAC;QAC1BG,KAAK,EAAE;UAAEH,QAAQ,EAAE;QAAM;MAC3B;IACF,CAAC;IACDT,MAAM,EAAE;MACNgB,KAAK,EAAE,UAAU;MACjBC,QAAQ,EAAE,IAAI;MACdC,OAAO,EAAE,IAAI;MACbC,kBAAkB,EAAE;QAClBT,KAAK,EAAE;UAAED,QAAQ,EAAE;QAAM,CAAC;QAC1BE,KAAK,EAAE;UAAEF,QAAQ,EAAE;QAAM,CAAC;QAC1BG,KAAK,EAAE;UAAEH,QAAQ,EAAE;QAAM;MAC3B;IACF,CAAC;IACDW,YAAY,EAAE;MACZC,UAAU,EAAE;QACVC,GAAG,EAAE,CAAC;QACNC,GAAG,EAAE,CAAC;QACNC,OAAO,EAAE;MACX,CAAC;MACDrB,aAAa,EAAE;QACbmB,GAAG,EAAE,CAAC;QACNC,GAAG,EAAE,CAAC;QACNC,OAAO,EAAE;MACX,CAAC;MACDC,gBAAgB,EAAE,CAChB;QAAEC,KAAK,EAAE,KAAK;QAAEV,KAAK,EAAE;MAAM,CAAC,EAC9B;QAAEU,KAAK,EAAE,KAAK;QAAEV,KAAK,EAAE;MAAM,CAAC;IAElC,CAAC;IACDW,aAAa,EAAE;MACbC,SAAS,EAAE,KAAK;MAChBC,UAAU,EAAE;IACd,CAAC;IACDC,QAAQ,EAAE;MACRb,QAAQ,EAAE,KAAK;MACfD,KAAK,EAAE,kBAAkB;MACzBE,OAAO,EAAE;IACX,CAAC;IACDa,eAAe,EAAE;MACff,KAAK,EAAE,kBAAkB;MACzBgB,OAAO,EAAE;IACX,CAAC;IACDC,UAAU,EAAE;MACVjB,KAAK,EAAE,YAAY;MACnBC,QAAQ,EAAE,KAAK;MACfC,OAAO,EAAE;IACX,CAAC;IACDgB,qBAAqB,EAAE;EACzB;AACF,CAAC","ignoreList":[]}
@@ -0,0 +1,163 @@
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 _react = _interopRequireDefault(require("react"));
10
+ var _client = require("react-dom/client");
11
+ var _main = _interopRequireDefault(require("./main"));
12
+ var _pieConfigureEvents = require("@pie-framework/pie-configure-events");
13
+ var _defaults = _interopRequireDefault(require("./defaults"));
14
+ class FractionModelConfigure extends HTMLElement {
15
+ constructor() {
16
+ super();
17
+ (0, _defineProperty2.default)(this, "resetModelAfterConfigurationIsSet", () => {
18
+ // In environments that use pie-player-components, model is set before configuration.
19
+ // This is the reason why sometimes the model gets altered non-reversible
20
+ // (altered using default configuration instead of client configuration, because at that point client configuration was not set yet)
21
+ // Therefore, in such environments, we will make sure to keep a modelCopy (initialised in set model) and use it to reset
22
+ // the model in set configuration (resetModelAfterConfigurationIsSet) if set configuration is ever called
23
+ const pieAuthors = document.querySelectorAll('pie-author');
24
+ this.hasPlayerAsParent = Array.from(pieAuthors).some(author => author.contains(this));
25
+ if (this.hasPlayerAsParent) {
26
+ if (this._modelCopy) {
27
+ this._model = this._modelCopy;
28
+ } else {
29
+ delete this._modelCopy;
30
+ }
31
+ }
32
+ });
33
+ (0, _defineProperty2.default)(this, "onChange", o => {
34
+ this._model = {
35
+ ...this._model,
36
+ ...o
37
+ };
38
+ this.dispatchEvent(new _pieConfigureEvents.ModelUpdatedEvent(this._model));
39
+ this.render();
40
+ });
41
+ this._root = null;
42
+ this._model = FractionModelConfigure.createDefaultModel();
43
+ this._configuration = _defaults.default.configuration;
44
+ }
45
+ set model(m) {
46
+ this._model = FractionModelConfigure.createDefaultModel(m);
47
+ this.render();
48
+ }
49
+ set configuration(c) {
50
+ const newConfiguration = {
51
+ ..._defaults.default.configuration,
52
+ ...c
53
+ };
54
+ this._configuration = newConfiguration;
55
+ this.resetModelAfterConfigurationIsSet();
56
+
57
+ // if language:enabled is true, then the corresponding default item model should include a language value;
58
+ // if it is false, then the language field should be omitted from the item model.
59
+ // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,
60
+ // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).
61
+ if (newConfiguration?.language?.enabled) {
62
+ if (newConfiguration?.languageChoices?.options?.length) {
63
+ this._model.language = newConfiguration?.languageChoices.options[0].value;
64
+ }
65
+ } else if (newConfiguration.language.settings && this._model.language) {
66
+ this._configuration.language.enabled = true;
67
+ if (!this._configuration.languageChoices.options || !this._configuration.languageChoices.options.length) {
68
+ this._configuration.languageChoices.options = [];
69
+ }
70
+
71
+ // check if the language is already included in the languageChoices.options array
72
+ // and if not, then add it.
73
+ if (!this._configuration.languageChoices.options.find(option => option.value === this._model.language)) {
74
+ this._configuration.languageChoices.options.push({
75
+ value: this._model.language,
76
+ label: this._model.language
77
+ });
78
+ }
79
+ } else {
80
+ delete this._model.language;
81
+ }
82
+ this.render();
83
+ }
84
+ connectedCallback() {
85
+ this.render();
86
+ }
87
+ modelChanged(m) {
88
+ this._model = m;
89
+ this.dispatchEvent(new _pieConfigureEvents.ModelUpdatedEvent(this._model), true);
90
+ this.render();
91
+ }
92
+ onConfigurationChanged(c) {
93
+ this._configuration = c;
94
+ this.render();
95
+ }
96
+
97
+ /**
98
+ *
99
+ * @param {done, progress, file} handler
100
+ */
101
+ insertImage(handler) {
102
+ this.dispatchEvent(new _pieConfigureEvents.InsertImageEvent(handler));
103
+ }
104
+ onDeleteImage(src, done) {
105
+ this.dispatchEvent(new _pieConfigureEvents.DeleteImageEvent(src, done));
106
+ }
107
+ insertSound(handler) {
108
+ this.dispatchEvent(new _pieConfigureEvents.InsertSoundEvent(handler));
109
+ }
110
+ onDeleteSound(src, done) {
111
+ this.dispatchEvent(new _pieConfigureEvents.DeleteSoundEvent(src, done));
112
+ }
113
+ render() {
114
+ if (this._model) {
115
+ const el = /*#__PURE__*/_react.default.createElement(_main.default, {
116
+ classes: {},
117
+ model: this._model,
118
+ configuration: this._configuration,
119
+ onConfigurationChanged: this.onConfigurationChanged,
120
+ onChange: this.onChange,
121
+ imageSupport: {
122
+ add: this.insertImage.bind(this),
123
+ delete: this.onDeleteImage.bind(this)
124
+ },
125
+ uploadSoundSupport: {
126
+ add: this.insertSound.bind(this),
127
+ delete: this.onDeleteSound.bind(this)
128
+ }
129
+ });
130
+ if (!this._root) {
131
+ this._root = (0, _client.createRoot)(this);
132
+ }
133
+ this._root.render(el);
134
+ }
135
+ }
136
+ disconnectedCallback() {
137
+ if (this._root) {
138
+ this._root.unmount();
139
+ }
140
+ }
141
+ }
142
+ exports.default = FractionModelConfigure;
143
+ /**
144
+ * This function makes sure you set the default values on the model
145
+ * @param model
146
+ * @returns model
147
+ */
148
+ (0, _defineProperty2.default)(FractionModelConfigure, "createDefaultModel", (model = {}) => {
149
+ const c = _defaults.default.configuration;
150
+ let language = model.language || '';
151
+ if (!language && c.language && c.language.enabled) {
152
+ if (c.languageChoices?.options?.length) {
153
+ language = c.languageChoices.options[0].value;
154
+ }
155
+ }
156
+ const normalizedModel = {
157
+ ..._defaults.default.model,
158
+ ...model,
159
+ language
160
+ };
161
+ return normalizedModel;
162
+ });
163
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_main","_pieConfigureEvents","_defaults","FractionModelConfigure","HTMLElement","constructor","_defineProperty2","default","pieAuthors","document","querySelectorAll","hasPlayerAsParent","Array","from","some","author","contains","_modelCopy","_model","o","dispatchEvent","ModelUpdatedEvent","render","_root","createDefaultModel","_configuration","defaultValues","configuration","model","m","c","newConfiguration","resetModelAfterConfigurationIsSet","language","enabled","languageChoices","options","length","value","settings","find","option","push","label","connectedCallback","modelChanged","onConfigurationChanged","insertImage","handler","InsertImageEvent","onDeleteImage","src","done","DeleteImageEvent","insertSound","InsertSoundEvent","onDeleteSound","DeleteSoundEvent","el","React","createElement","Main","classes","onChange","imageSupport","add","bind","delete","uploadSoundSupport","createRoot","disconnectedCallback","unmount","exports","normalizedModel"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport Main from './main';\nimport {\n ModelUpdatedEvent,\n DeleteImageEvent,\n InsertImageEvent,\n InsertSoundEvent,\n DeleteSoundEvent,\n} from '@pie-framework/pie-configure-events';\nimport defaultValues from './defaults';\n\nexport default class FractionModelConfigure extends HTMLElement {\n /**\n * This function makes sure you set the default values on the model\n * @param model\n * @returns model\n */\n static createDefaultModel = (model = {}) => {\n const c = defaultValues.configuration;\n let language = model.language || '';\n\n if (!language && c.language && c.language.enabled) {\n if (c.languageChoices?.options?.length) {\n language = c.languageChoices.options[0].value;\n }\n }\n\n const normalizedModel = {\n ...defaultValues.model,\n ...model,\n language,\n };\n\n return normalizedModel;\n };\n\n constructor() {\n super();\n this._root = null;\n this._model = FractionModelConfigure.createDefaultModel();\n this._configuration = defaultValues.configuration;\n }\n\n set model(m) {\n this._model = FractionModelConfigure.createDefaultModel(m);\n this.render();\n }\n\n set configuration(c) {\n const newConfiguration = {\n ...defaultValues.configuration,\n ...c,\n };\n this._configuration = newConfiguration;\n\n this.resetModelAfterConfigurationIsSet();\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 this.render();\n }\n\n resetModelAfterConfigurationIsSet = () => {\n // In environments that use pie-player-components, model is set before configuration.\n // This is the reason why sometimes the model gets altered non-reversible\n // (altered using default configuration instead of client configuration, because at that point client configuration was not set yet)\n // Therefore, in such environments, we will make sure to keep a modelCopy (initialised in set model) and use it to reset\n // the model in set configuration (resetModelAfterConfigurationIsSet) if set configuration is ever called\n const pieAuthors = document.querySelectorAll('pie-author');\n this.hasPlayerAsParent = Array.from(pieAuthors).some((author) => author.contains(this));\n\n if (this.hasPlayerAsParent) {\n if (this._modelCopy) {\n this._model = this._modelCopy;\n } else {\n delete this._modelCopy;\n }\n }\n };\n\n connectedCallback() {\n this.render();\n }\n\n modelChanged(m) {\n this._model = m;\n this.dispatchEvent(new ModelUpdatedEvent(this._model), true);\n this.render();\n }\n\n onChange = (o) => {\n this._model = { ...this._model, ...o };\n this.dispatchEvent(new ModelUpdatedEvent(this._model));\n this.render();\n };\n\n onConfigurationChanged(c) {\n this._configuration = c;\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 if (this._model) {\n const el = React.createElement(Main, {\n classes: {},\n model: this._model,\n configuration: this._configuration,\n onConfigurationChanged: this.onConfigurationChanged,\n onChange: this.onChange,\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(el);\n }\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,253 @@
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.Main = 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 _fractionModel = require("@pie-element/fraction-model");
14
+ var _Tooltip = _interopRequireDefault(require("@mui/material/Tooltip"));
15
+ var _Info = _interopRequireDefault(require("@mui/icons-material/Info"));
16
+ var _styles = require("@mui/material/styles");
17
+ var _cardBar = _interopRequireDefault(require("./card-bar"));
18
+ var _modelOptions = _interopRequireDefault(require("./model-options"));
19
+ const StyledFormSection = (0, _styles.styled)(_configUi.FormSection)(({
20
+ theme
21
+ }) => ({
22
+ marginBottom: theme.spacing(4)
23
+ }));
24
+ const StyledTooltip = (0, _styles.styled)(_Tooltip.default)(({
25
+ theme
26
+ }) => ({
27
+ '& .MuiTooltip-tooltip': {
28
+ fontSize: theme.typography.fontSize - 2,
29
+ whiteSpace: 'pre',
30
+ maxWidth: '500px'
31
+ }
32
+ }));
33
+ const ErrorMessage = (0, _styles.styled)('div')(({
34
+ theme
35
+ }) => ({
36
+ fontSize: theme.typography.fontSize - 2,
37
+ color: theme.palette.error.main,
38
+ marginTop: theme.spacing(1)
39
+ }));
40
+ const ModelErrorContainer = (0, _styles.styled)('div')(({
41
+ theme,
42
+ hasError
43
+ }) => ({
44
+ ...(hasError && {
45
+ border: `2px solid ${theme.palette.error.main}`
46
+ })
47
+ }));
48
+ const Label = (0, _styles.styled)('label')(({
49
+ theme
50
+ }) => ({
51
+ marginBottom: theme.spacing(4)
52
+ }));
53
+ class Main extends _react.default.Component {
54
+ constructor(props) {
55
+ super(props);
56
+ /*
57
+ * Method to handle correct answer change
58
+ * @param {array} correctResponse - correct response
59
+ * */
60
+ (0, _defineProperty2.default)(this, "onCorrectAnswerChange", correctResponse => {
61
+ const {
62
+ model,
63
+ onChange
64
+ } = this.props;
65
+ model.correctResponse = correctResponse;
66
+ onChange({
67
+ ...model
68
+ });
69
+ });
70
+ /*
71
+ * Method to handle model options change
72
+ * @param {object} oldModel - old model
73
+ * @param {object} newModel - new model
74
+ * @param {boolean} showDiag - show dialog or not
75
+ * */
76
+ (0, _defineProperty2.default)(this, "onModelOptionsChange", (oldModel, newModel, showDiag) => {
77
+ const {
78
+ onChange
79
+ } = this.props;
80
+ if (showDiag && oldModel.correctResponse.length > 0) {
81
+ this.setState({
82
+ correctAnswerChangeDialog: {
83
+ open: true,
84
+ oldModel: oldModel,
85
+ newModel: newModel,
86
+ text: 'Changing either the Number of Models or Parts per Model will remove added correct answer. Are you sure you want to continue?'
87
+ }
88
+ });
89
+ } else {
90
+ onChange({
91
+ ...newModel
92
+ });
93
+ }
94
+ });
95
+ /*
96
+ * Method to generate random key
97
+ * */
98
+ (0, _defineProperty2.default)(this, "generateRandomKey", () => {
99
+ return Math.floor(Math.random() * 10000);
100
+ });
101
+ this.state = {
102
+ correctAnswerChangeDialog: {
103
+ open: false,
104
+ text: ''
105
+ }
106
+ };
107
+ }
108
+ render() {
109
+ const {
110
+ model,
111
+ onChange,
112
+ configuration,
113
+ imageSupport,
114
+ uploadSoundSupport
115
+ } = this.props;
116
+ const {
117
+ baseInputConfiguration = {},
118
+ contentDimensions = {},
119
+ title = {},
120
+ prompt = {},
121
+ modelOptions = {},
122
+ mathMlOptions = {}
123
+ } = configuration || {};
124
+ const {
125
+ errors = {},
126
+ extraCSSRules,
127
+ spellCheckEnabled,
128
+ toolbarEditorPosition
129
+ } = model || {};
130
+ const {
131
+ correctAnswerChangeDialog
132
+ } = this.state;
133
+ const toolbarOpts = {
134
+ position: toolbarEditorPosition === 'top' ? 'top' : 'bottom'
135
+ };
136
+ const getPluginProps = (props = {}) => ({
137
+ ...baseInputConfiguration,
138
+ ...props
139
+ });
140
+ const fractionModelChartKey = this.generateRandomKey();
141
+ return /*#__PURE__*/_react.default.createElement(_configUi.layout.ConfigLayout, {
142
+ extraCSSRules: extraCSSRules,
143
+ dimensions: contentDimensions,
144
+ hideSettings: true
145
+ }, /*#__PURE__*/_react.default.createElement(_cardBar.default, {
146
+ header: "Set Up"
147
+ }), /*#__PURE__*/_react.default.createElement(StyledFormSection, {
148
+ label: title?.label || 'Title'
149
+ }, /*#__PURE__*/_react.default.createElement(_editableHtmlTipTap.default, {
150
+ markup: model.title || '',
151
+ onChange: title => onChange({
152
+ title
153
+ }),
154
+ toolbarOpts: toolbarOpts,
155
+ activePlugins: ['bold', 'html', 'italic', 'underline', 'strikethrough', 'image', 'math', 'languageCharacters', 'responseArea'],
156
+ pluginProps: getPluginProps(title?.inputConfiguration),
157
+ spellCheck: spellCheckEnabled,
158
+ uploadSoundSupport: uploadSoundSupport,
159
+ languageCharactersProps: [{
160
+ language: 'spanish'
161
+ }, {
162
+ language: 'special'
163
+ }],
164
+ mathMlOptions: mathMlOptions
165
+ })), /*#__PURE__*/_react.default.createElement(StyledFormSection, {
166
+ label: prompt?.label || 'Question'
167
+ }, /*#__PURE__*/_react.default.createElement(_editableHtmlTipTap.default, {
168
+ markup: model.prompt || '',
169
+ minHeight: 60,
170
+ onChange: prompt => onChange({
171
+ prompt
172
+ }),
173
+ toolbarOpts: toolbarOpts,
174
+ pluginProps: getPluginProps(prompt?.inputConfiguration),
175
+ spellCheck: spellCheckEnabled,
176
+ uploadSoundSupport: uploadSoundSupport,
177
+ imageSupport: imageSupport,
178
+ languageCharactersProps: [{
179
+ language: 'spanish'
180
+ }, {
181
+ language: 'special'
182
+ }],
183
+ mathMlOptions: mathMlOptions
184
+ })), /*#__PURE__*/_react.default.createElement(_configUi.FormSection, null, /*#__PURE__*/_react.default.createElement(_modelOptions.default, {
185
+ model: model,
186
+ onChange: this.onModelOptionsChange,
187
+ modelOptions: modelOptions
188
+ })), /*#__PURE__*/_react.default.createElement(_configUi.FormSection, null, " ", /*#__PURE__*/_react.default.createElement(_cardBar.default, {
189
+ header: "Correct Answer",
190
+ info: /*#__PURE__*/_react.default.createElement(StyledTooltip, {
191
+ disableFocusListener: true,
192
+ disableTouchListener: true,
193
+ placement: 'right',
194
+ title: 'The correct answer should include no more than one partially-filled model'
195
+ }, /*#__PURE__*/_react.default.createElement(_Info.default, {
196
+ fontSize: 'small',
197
+ color: 'primary',
198
+ style: {
199
+ marginLeft: '8px'
200
+ }
201
+ }))
202
+ }), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement(Label, null, "Click/touch the number of parts to represent the correct fraction model"), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement(ModelErrorContainer, {
203
+ hasError: !!errors.correctResponse
204
+ }, /*#__PURE__*/_react.default.createElement(_fractionModel.FractionModelChart, {
205
+ key: fractionModelChartKey,
206
+ value: model.correctResponse,
207
+ modelType: model.modelTypeSelected,
208
+ noOfModels: model.maxModelSelected,
209
+ partsPerModel: model.partsPerModel,
210
+ showLabel: model.showGraphLabels,
211
+ onChange: this.onCorrectAnswerChange
212
+ })), errors.correctResponse && /*#__PURE__*/_react.default.createElement(ErrorMessage, null, errors.correctResponse)), /*#__PURE__*/_react.default.createElement(_configUi.AlertDialog, {
213
+ open: correctAnswerChangeDialog.open,
214
+ title: "Warning",
215
+ text: correctAnswerChangeDialog.text,
216
+ onConfirm: () => {
217
+ let newModel = this.state.correctAnswerChangeDialog.newModel;
218
+ newModel.correctResponse = [];
219
+ onChange({
220
+ ...newModel
221
+ });
222
+ this.setState({
223
+ correctAnswerChangeDialog: {
224
+ open: false
225
+ }
226
+ });
227
+ },
228
+ onClose: () => {
229
+ const oldModel = this.state.correctAnswerChangeDialog.oldModel;
230
+ onChange({
231
+ ...oldModel
232
+ });
233
+ this.setState({
234
+ correctAnswerChangeDialog: {
235
+ open: false
236
+ }
237
+ });
238
+ },
239
+ onConfirmText: 'OK',
240
+ onCloseText: 'Cancel'
241
+ }));
242
+ }
243
+ }
244
+ exports.Main = Main;
245
+ (0, _defineProperty2.default)(Main, "propTypes", {
246
+ model: _propTypes.default.object.isRequired,
247
+ configuration: _propTypes.default.object.isRequired,
248
+ onConfigurationChanged: _propTypes.default.func.isRequired,
249
+ onChange: _propTypes.default.func.isRequired,
250
+ uploadSoundSupport: _propTypes.default.object.isRequired
251
+ });
252
+ var _default = exports.default = Main;
253
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","names":["_react","_interopRequireDefault","require","_propTypes","_configUi","_editableHtmlTipTap","_fractionModel","_Tooltip","_Info","_styles","_cardBar","_modelOptions","StyledFormSection","styled","FormSection","theme","marginBottom","spacing","StyledTooltip","Tooltip","fontSize","typography","whiteSpace","maxWidth","ErrorMessage","color","palette","error","main","marginTop","ModelErrorContainer","hasError","border","Label","Main","React","Component","constructor","props","_defineProperty2","default","correctResponse","model","onChange","oldModel","newModel","showDiag","length","setState","correctAnswerChangeDialog","open","text","Math","floor","random","state","render","configuration","imageSupport","uploadSoundSupport","baseInputConfiguration","contentDimensions","title","prompt","modelOptions","mathMlOptions","errors","extraCSSRules","spellCheckEnabled","toolbarEditorPosition","toolbarOpts","position","getPluginProps","fractionModelChartKey","generateRandomKey","createElement","layout","ConfigLayout","dimensions","hideSettings","header","label","markup","activePlugins","pluginProps","inputConfiguration","spellCheck","languageCharactersProps","language","minHeight","onModelOptionsChange","info","disableFocusListener","disableTouchListener","placement","style","marginLeft","FractionModelChart","key","value","modelType","modelTypeSelected","noOfModels","maxModelSelected","partsPerModel","showLabel","showGraphLabels","onCorrectAnswerChange","AlertDialog","onConfirm","onClose","onConfirmText","onCloseText","exports","PropTypes","object","isRequired","onConfigurationChanged","func","_default"],"sources":["../src/main.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormSection, layout, AlertDialog } from '@pie-lib/config-ui';\nimport EditableHtml from '@pie-lib/editable-html-tip-tap';\nimport { FractionModelChart } from '@pie-element/fraction-model';\nimport Tooltip from '@mui/material/Tooltip';\nimport Info from '@mui/icons-material/Info';\nimport { styled } from '@mui/material/styles';\n\nimport CardBar from './card-bar';\nimport ModelOptions from './model-options';\n\nconst StyledFormSection = styled(FormSection)(({ theme }) => ({\n marginBottom: theme.spacing(4),\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 ErrorMessage = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n marginTop: theme.spacing(1),\n}));\n\nconst ModelErrorContainer = styled('div')(({ theme, hasError }) => ({\n ...(hasError && {\n border: `2px solid ${theme.palette.error.main}`,\n }),\n}));\n\nconst Label = styled('label')(({ theme }) => ({\n marginBottom: theme.spacing(4),\n}));\n\nexport class Main extends React.Component {\n static propTypes = {\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n uploadSoundSupport: PropTypes.object.isRequired,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n correctAnswerChangeDialog: {\n open: false,\n text: '',\n },\n };\n }\n\n /*\n * Method to handle correct answer change\n * @param {array} correctResponse - correct response\n * */\n onCorrectAnswerChange = (correctResponse) => {\n const { model, onChange } = this.props;\n model.correctResponse = correctResponse;\n onChange({ ...model });\n };\n\n /*\n * Method to handle model options change\n * @param {object} oldModel - old model\n * @param {object} newModel - new model\n * @param {boolean} showDiag - show dialog or not\n * */\n onModelOptionsChange = (oldModel, newModel, showDiag) => {\n const { onChange } = this.props;\n if (showDiag && oldModel.correctResponse.length > 0) {\n this.setState({\n correctAnswerChangeDialog: {\n open: true,\n oldModel: oldModel,\n newModel: newModel,\n text: 'Changing either the Number of Models or Parts per Model will remove added correct answer. Are you sure you want to continue?',\n },\n });\n } else {\n onChange({ ...newModel });\n }\n };\n\n /*\n * Method to generate random key\n * */\n generateRandomKey = () => {\n return Math.floor(Math.random() * 10000);\n };\n\n render() {\n const { model, onChange, configuration, imageSupport, uploadSoundSupport } = this.props;\n const {\n baseInputConfiguration = {},\n contentDimensions = {},\n title = {},\n prompt = {},\n modelOptions = {},\n mathMlOptions = {},\n } = configuration || {};\n\n const { errors = {}, extraCSSRules, spellCheckEnabled, toolbarEditorPosition } = model || {};\n\n const { correctAnswerChangeDialog } = this.state;\n\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n const getPluginProps = (props = {}) => ({\n ...baseInputConfiguration,\n ...props,\n });\n\n const fractionModelChartKey = this.generateRandomKey();\n\n return (\n <layout.ConfigLayout extraCSSRules={extraCSSRules} dimensions={contentDimensions} hideSettings={true}>\n <CardBar header=\"Set Up\"></CardBar>\n\n <StyledFormSection label={title?.label || 'Title'}>\n <EditableHtml\n markup={model.title || ''}\n onChange={(title) => onChange({ title })}\n toolbarOpts={toolbarOpts}\n activePlugins={[\n 'bold',\n 'html',\n 'italic',\n 'underline',\n 'strikethrough',\n 'image',\n 'math',\n 'languageCharacters',\n 'responseArea',\n ]}\n pluginProps={getPluginProps(title?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n </StyledFormSection>\n\n <StyledFormSection label={prompt?.label || 'Question'}>\n <EditableHtml\n markup={model.prompt || ''}\n minHeight={60}\n onChange={(prompt) => onChange({ prompt })}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(prompt?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n uploadSoundSupport={uploadSoundSupport}\n imageSupport={imageSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n </StyledFormSection>\n\n <FormSection>\n <ModelOptions model={model} onChange={this.onModelOptionsChange} modelOptions={modelOptions} />\n </FormSection>\n\n <FormSection> <CardBar\n header=\"Correct Answer\"\n info={\n <StyledTooltip\n disableFocusListener\n disableTouchListener\n placement={'right'}\n title={'The correct answer should include no more than one partially-filled model'}\n >\n <Info fontSize={'small'} color={'primary'} style={{ marginLeft: '8px' }} />\n </StyledTooltip>\n }\n ></CardBar>\n\n <br />\n <Label>\n Click/touch the number of parts to represent the correct fraction model\n </Label>\n <br />\n\n <ModelErrorContainer hasError={!!errors.correctResponse}>\n <FractionModelChart\n key={fractionModelChartKey}\n value={model.correctResponse}\n modelType={model.modelTypeSelected}\n noOfModels={model.maxModelSelected}\n partsPerModel={model.partsPerModel}\n showLabel={model.showGraphLabels}\n onChange={this.onCorrectAnswerChange}\n ></FractionModelChart>\n </ModelErrorContainer>\n\n {errors.correctResponse && <ErrorMessage>{errors.correctResponse}</ErrorMessage>}\n </FormSection>\n\n <AlertDialog\n open={correctAnswerChangeDialog.open}\n title=\"Warning\"\n text={correctAnswerChangeDialog.text}\n onConfirm={() => {\n let newModel = this.state.correctAnswerChangeDialog.newModel;\n newModel.correctResponse = [];\n onChange({ ...newModel });\n this.setState({\n correctAnswerChangeDialog: { open: false },\n });\n }}\n onClose={() => {\n const oldModel = this.state.correctAnswerChangeDialog.oldModel;\n onChange({ ...oldModel });\n this.setState({ correctAnswerChangeDialog: { open: false } });\n }}\n onConfirmText={'OK'}\n onCloseText={'Cancel'}\n />\n </layout.ConfigLayout>\n );\n }\n}\n\nexport default Main;\n"],"mappings":"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","ignoreList":[]}