@pie-element/select-text 6.4.0 → 6.4.1-beta.587

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.
@@ -2,10 +2,23 @@ module.exports = [
2
2
  {
3
3
  id: '1',
4
4
  element: 'select-text',
5
- // selectedTokens: [
6
- // { start: 0, end: 36 },
7
- // { start: 37, end: 74 },
8
- // { start: 117, end: 177 }
9
- // ]
10
- }
5
+ selectedTokens: [
6
+ // { start: 0, end: 36 },
7
+ // { start: 37, end: 74 },
8
+ // { start: 117, end: 177 }
9
+ // {
10
+ // // "correct": true,
11
+ // "start": 1088,
12
+ // "end": 1225,
13
+ // "text": "Taking a deep breath, Natasha made her graceful, yet powerful approach, mounted the beam flawlessly, and...executed her first perfect 10."
14
+ // },
15
+ // {
16
+ // "start": 1082,
17
+ // "end": 1219,
18
+ // "text": "Taking a deep breath, Natasha made her graceful, yet powerful approach, mounted the beam flawlessly, and...executed her first perfect 10.",
19
+ // "oldStart": 1088,
20
+ // "oldEnd": 1225
21
+ // }
22
+ ],
23
+ },
11
24
  ];
@@ -289,6 +289,26 @@
289
289
  "type": "boolean",
290
290
  "title": "teacherInstructionsEnabled"
291
291
  },
292
+ "spellCheckEnabled": {
293
+ "description": "Indicates if spellcheck is enabled",
294
+ "type": "boolean",
295
+ "title": "spellCheckEnabled"
296
+ },
297
+ "toolbarEditorPosition": {
298
+ "description": "Indicates the editor's toolbar position which can be 'bottom' or 'top'",
299
+ "default": ": 'bottom'",
300
+ "enum": [
301
+ "bottom",
302
+ "top"
303
+ ],
304
+ "type": "string",
305
+ "title": "toolbarEditorPosition"
306
+ },
307
+ "rubricEnabled": {
308
+ "description": "Indicates if Rubric is enabled",
309
+ "type": "boolean",
310
+ "title": "rubricEnabled"
311
+ },
292
312
  "id": {
293
313
  "description": "Identifier to identify the Pie Element in html markup, Must be unique within a pie item config.",
294
314
  "type": "string",
@@ -306,6 +326,8 @@
306
326
  "id",
307
327
  "prompt",
308
328
  "rationaleEnabled",
329
+ "rubricEnabled",
330
+ "spellCheckEnabled",
309
331
  "studentInstructionsEnabled",
310
332
  "teacherInstructionsEnabled",
311
333
  "text",
@@ -328,6 +350,27 @@
328
350
  }
329
351
  }
330
352
  },
353
+ "ConfigureMaxImageDimensionsProp": {
354
+ "title": "ConfigureMaxImageDimensionsProp",
355
+ "type": "object",
356
+ "properties": {
357
+ "teacherInstructions": {
358
+ "description": "Indicates the max dimension for images in teacher instructions",
359
+ "type": "number",
360
+ "title": "teacherInstructions"
361
+ },
362
+ "prompt": {
363
+ "description": "Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified",
364
+ "type": "number",
365
+ "title": "prompt"
366
+ },
367
+ "rationale": {
368
+ "description": "Indicates the max dimension for images in rationale",
369
+ "type": "number",
370
+ "title": "rationale"
371
+ }
372
+ }
373
+ },
331
374
  "ComplexFeedbackType": {
332
375
  "title": "ComplexFeedbackType",
333
376
  "type": "object",
@@ -117,6 +117,25 @@ Indicates if Student Instructions are enabled
117
117
 
118
118
  Indicates if Teacher Instructions are enabled
119
119
 
120
+ # `spellCheckEnabled` (boolean, required)
121
+
122
+ Indicates if spellcheck is enabled
123
+
124
+ # `toolbarEditorPosition` (string, enum)
125
+
126
+ Indicates the editor's toolbar position which can be 'bottom' or 'top'
127
+
128
+ This element must be one of the following enum values:
129
+
130
+ * `bottom`
131
+ * `top`
132
+
133
+ Default: `": 'bottom'"`
134
+
135
+ # `rubricEnabled` (boolean, required)
136
+
137
+ Indicates if Rubric is enabled
138
+
120
139
  # `id` (string, required)
121
140
 
122
141
  Identifier to identify the Pie Element in html markup, Must be unique within a pie item config.
@@ -143,6 +162,22 @@ Indicates if the item has to be displayed in the Settings Panel
143
162
 
144
163
  Indicates the label for the item that has to be displayed in the Settings Panel
145
164
 
165
+ ## `ConfigureMaxImageDimensionsProp` (object)
166
+
167
+ Properties of the `ConfigureMaxImageDimensionsProp` object:
168
+
169
+ ### `teacherInstructions` (number)
170
+
171
+ Indicates the max dimension for images in teacher instructions
172
+
173
+ ### `prompt` (number)
174
+
175
+ Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified
176
+
177
+ ### `rationale` (number)
178
+
179
+ Indicates the max dimension for images in rationale
180
+
146
181
  ## `ComplexFeedbackType` (object)
147
182
 
148
183
  Properties of the `ComplexFeedbackType` object:
package/lib/index.js CHANGED
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports["default"] = void 0;
9
9
 
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
10
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
13
 
12
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -29,9 +31,15 @@ var _main = _interopRequireDefault(require("./main"));
29
31
 
30
32
  var _mathRendering = require("@pie-lib/math-rendering");
31
33
 
34
+ var _utils = _interopRequireDefault(require("./utils"));
35
+
36
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
37
+
38
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
39
+
32
40
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
33
41
 
34
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
42
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
35
43
 
36
44
  var SelectText = /*#__PURE__*/function (_HTMLElement) {
37
45
  (0, _inherits2["default"])(SelectText, _HTMLElement);
@@ -52,9 +60,49 @@ var SelectText = /*#__PURE__*/function (_HTMLElement) {
52
60
  }
53
61
  }, {
54
62
  key: "session",
63
+ get: function get() {
64
+ return this._session;
65
+ },
55
66
  set: function set(s) {
56
67
  this._session = s;
57
68
 
69
+ if (this._model) {
70
+ var generatedModel = (0, _utils["default"])(this._model) || {};
71
+ var tokens = generatedModel.tokens;
72
+
73
+ var _ref = s || {},
74
+ selectedTokens = _ref.selectedTokens;
75
+
76
+ selectedTokens = selectedTokens || []; // This case was introduced mostly for createCorrectSession:
77
+ // make sure initial session tokens are parsed and have correct start and end (according to the regenerated model)
78
+
79
+ var selectedTokenExistsInGeneratedTokens = function selectedTokenExistsInGeneratedTokens(s) {
80
+ return tokens.find(function (_ref2) {
81
+ var tStart = _ref2.start,
82
+ tEnd = _ref2.end;
83
+ return s.start === tStart && s.end === tEnd;
84
+ });
85
+ }; // check if ALL the selectedTokens have the correct start and end
86
+
87
+
88
+ var allAreCorrect = selectedTokens.reduce(function (acc, selectedToken) {
89
+ return acc && selectedTokenExistsInGeneratedTokens(selectedToken);
90
+ }, true);
91
+
92
+ if (!allAreCorrect) {
93
+ // otherwise, make sure to parse selectedTokens as well
94
+ var _generatedModel = (0, _utils["default"])(_objectSpread(_objectSpread({}, this._model), {}, {
95
+ tokens: selectedTokens
96
+ })) || {};
97
+
98
+ var _tokens = _generatedModel.tokens;
99
+
100
+ if (_tokens) {
101
+ this._session.selectedTokens = _tokens;
102
+ }
103
+ }
104
+ }
105
+
58
106
  if (!Array.isArray(this._session.selectedTokens)) {
59
107
  this._session.selectedTokens = [];
60
108
  }
@@ -64,8 +112,8 @@ var SelectText = /*#__PURE__*/function (_HTMLElement) {
64
112
  }, {
65
113
  key: "isSessionComplete",
66
114
  value: function isSessionComplete() {
67
- var _ref = this._session || {},
68
- selectedTokens = _ref.selectedTokens;
115
+ var _ref3 = this._session || {},
116
+ selectedTokens = _ref3.selectedTokens;
69
117
 
70
118
  return Array.isArray(selectedTokens) && selectedTokens.length > 0;
71
119
  }
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["SelectText","m","_model","render","dispatchEvent","ModelSetEvent","tagName","toLowerCase","isSessionComplete","undefined","s","_session","Array","isArray","selectedTokens","length","selection","SessionChangedEvent","el","React","createElement","Main","model","session","onSelectionChange","selectionChanged","bind","ReactDOM","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAIA;;AACA;;;;;;IAEqBA,U;;;;;AACnB,wBAAc;AAAA;AAAA;AAEb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKC,MAAL,GAAcD,CAAd;AAEA,WAAKE,MAAL;AACA,WAAKC,aAAL,CACE,IAAIC,8BAAJ,CACE,KAAKC,OAAL,CAAaC,WAAb,EADF,EAEE,KAAKC,iBAAL,EAFF,EAGE,KAAKN,MAAL,KAAgBO,SAHlB,CADF;AAOD;;;SAED,aAAYC,CAAZ,EAAe;AACb,WAAKC,QAAL,GAAgBD,CAAhB;;AACA,UAAI,CAACE,KAAK,CAACC,OAAN,CAAc,KAAKF,QAAL,CAAcG,cAA5B,CAAL,EAAkD;AAChD,aAAKH,QAAL,CAAcG,cAAd,GAA+B,EAA/B;AACD;;AACD,WAAKX,MAAL;AACD;;;WAED,6BAAoB;AAAA,iBACS,KAAKQ,QAAL,IAAiB,EAD1B;AAAA,UACVG,cADU,QACVA,cADU;;AAElB,aAAOF,KAAK,CAACC,OAAN,CAAcC,cAAd,KAAiCA,cAAc,CAACC,MAAf,GAAwB,CAAhE;AACD;;;WAED,0BAAiBC,SAAjB,EAA4B;AAC1B,WAAKL,QAAL,CAAcG,cAAd,GAA+BE,SAA/B;AAEA,WAAKZ,aAAL,CACE,IAAIa,oCAAJ,CACE,KAAKX,OAAL,CAAaC,WAAb,EADF,EAEE,KAAKC,iBAAL,EAFF,CADF;AAMD;;;WAED,6BAAoB;AAClB,WAAKL,MAAL;AACD;;;WAED,kBAAS;AAAA;;AACP,UAAI,KAAKD,MAAL,IAAe,KAAKS,QAAxB,EAAkC;AAChC,YAAMO,EAAE,gBAAGC,kBAAMC,aAAN,CAAoBC,gBAApB,EAA0B;AACnCC,UAAAA,KAAK,EAAE,KAAKpB,MADuB;AAEnCqB,UAAAA,OAAO,EAAE,KAAKZ,QAFqB;AAGnCa,UAAAA,iBAAiB,EAAE,KAAKC,gBAAL,CAAsBC,IAAtB,CAA2B,IAA3B;AAHgB,SAA1B,CAAX;;AAMAC,6BAASxB,MAAT,CAAgBe,EAAhB,EAAoB,IAApB,EAA0B,YAAM;AAC9B,yCAAW,KAAX;AACD,SAFD;AAGD;AACF;;;kDA1DqCU,W","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n SessionChangedEvent,\n ModelSetEvent\n} from '@pie-framework/pie-player-events';\nimport Main from './main';\nimport { renderMath } from '@pie-lib/math-rendering';\n\nexport default class SelectText extends HTMLElement {\n constructor() {\n super();\n }\n\n set model(m) {\n this._model = m;\n\n this.render();\n this.dispatchEvent(\n new ModelSetEvent(\n this.tagName.toLowerCase(),\n this.isSessionComplete(),\n this._model !== undefined\n )\n );\n }\n\n set session(s) {\n this._session = s;\n if (!Array.isArray(this._session.selectedTokens)) {\n this._session.selectedTokens = [];\n }\n this.render();\n }\n\n isSessionComplete() {\n const { selectedTokens } = this._session || {};\n return Array.isArray(selectedTokens) && selectedTokens.length > 0;\n }\n\n selectionChanged(selection) {\n this._session.selectedTokens = selection;\n\n this.dispatchEvent(\n new SessionChangedEvent(\n this.tagName.toLowerCase(),\n this.isSessionComplete()\n )\n );\n }\n\n connectedCallback() {\n this.render();\n }\n\n render() {\n if (this._model && this._session) {\n const el = React.createElement(Main, {\n model: this._model,\n session: this._session,\n onSelectionChange: this.selectionChanged.bind(this)\n });\n\n ReactDOM.render(el, this, () => {\n renderMath(this);\n });\n }\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["SelectText","m","_model","render","dispatchEvent","ModelSetEvent","tagName","toLowerCase","isSessionComplete","undefined","_session","s","generatedModel","tokens","selectedTokens","selectedTokenExistsInGeneratedTokens","find","tStart","start","tEnd","end","allAreCorrect","reduce","acc","selectedToken","Array","isArray","length","selection","SessionChangedEvent","el","React","createElement","Main","model","session","onSelectionChange","selectionChanged","bind","ReactDOM","HTMLElement"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { SessionChangedEvent, ModelSetEvent } from '@pie-framework/pie-player-events';\nimport Main from './main';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport generateModel from './utils';\n\nexport default class SelectText extends HTMLElement {\n constructor() {\n super();\n }\n\n set model(m) {\n this._model = m;\n\n this.render();\n this.dispatchEvent(\n new ModelSetEvent(this.tagName.toLowerCase(), this.isSessionComplete(), this._model !== undefined),\n );\n }\n\n set session(s) {\n this._session = s;\n\n if (this._model) {\n const generatedModel = generateModel(this._model) || {};\n const { tokens } = generatedModel;\n let { selectedTokens } = s || {};\n\n selectedTokens = selectedTokens || [];\n\n // This case was introduced mostly for createCorrectSession:\n // make sure initial session tokens are parsed and have correct start and end (according to the regenerated model)\n const selectedTokenExistsInGeneratedTokens = (s) =>\n tokens.find(({ start: tStart, end: tEnd }) => s.start === tStart && s.end === tEnd);\n\n // check if ALL the selectedTokens have the correct start and end\n const allAreCorrect = selectedTokens.reduce(\n (acc, selectedToken) => acc && selectedTokenExistsInGeneratedTokens(selectedToken),\n true,\n );\n\n if (!allAreCorrect) {\n // otherwise, make sure to parse selectedTokens as well\n const generatedModel = generateModel({ ...this._model, tokens: selectedTokens }) || {};\n const { tokens } = generatedModel;\n\n if (tokens) {\n this._session.selectedTokens = tokens;\n }\n }\n }\n\n if (!Array.isArray(this._session.selectedTokens)) {\n this._session.selectedTokens = [];\n }\n this.render();\n }\n\n get session() {\n return this._session;\n }\n\n isSessionComplete() {\n const { selectedTokens } = this._session || {};\n return Array.isArray(selectedTokens) && selectedTokens.length > 0;\n }\n\n selectionChanged(selection) {\n this._session.selectedTokens = selection;\n\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isSessionComplete()));\n }\n\n connectedCallback() {\n this.render();\n }\n\n render() {\n if (this._model && this._session) {\n const el = React.createElement(Main, {\n model: this._model,\n session: this._session,\n onSelectionChange: this.selectionChanged.bind(this),\n });\n\n ReactDOM.render(el, this, () => {\n renderMath(this);\n });\n }\n }\n}\n"],"file":"index.js"}
package/lib/main.js CHANGED
@@ -33,15 +33,17 @@ var _renderUi = require("@pie-lib/render-ui");
33
33
 
34
34
  var _styles = require("@material-ui/core/styles");
35
35
 
36
+ var _utils = _interopRequireDefault(require("./utils"));
37
+
36
38
  var _debug = _interopRequireDefault(require("debug"));
37
39
 
38
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
40
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
39
41
 
40
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
42
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
41
43
 
42
44
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
43
45
 
44
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
46
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
45
47
 
46
48
  var log = (0, _debug["default"])('@pie-ui:select-text');
47
49
  var Types = {
@@ -66,53 +68,55 @@ var Main = /*#__PURE__*/function (_React$Component) {
66
68
  });
67
69
  });
68
70
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "correctAnswer", function () {
69
- var model = _this.props.model;
71
+ var model = _this.state.model;
70
72
  return model.tokens.filter(function (t) {
71
73
  return t.correct;
72
74
  });
73
75
  });
74
76
  _this.state = {
75
- showCorrectAnswer: false
77
+ showCorrectAnswer: _this.props.model.alwaysShowCorrect || false,
78
+ model: (0, _utils["default"])(props.model)
76
79
  };
77
80
  return _this;
78
81
  }
79
82
 
80
83
  (0, _createClass2["default"])(Main, [{
81
84
  key: "UNSAFE_componentWillReceiveProps",
82
- value: function UNSAFE_componentWillReceiveProps() {
85
+ value: function UNSAFE_componentWillReceiveProps(nextProps) {
83
86
  this.setState({
84
- showCorrectAnswer: false
87
+ showCorrectAnswer: !!nextProps.model.alwaysShowCorrect,
88
+ model: (0, _utils["default"])(nextProps.model)
85
89
  });
86
90
  }
87
91
  }, {
88
92
  key: "render",
89
93
  value: function render() {
90
94
  var _this$props = this.props,
91
- model = _this$props.model,
92
95
  session = _this$props.session,
93
96
  onSelectionChange = _this$props.onSelectionChange,
94
97
  classes = _this$props.classes;
95
- var showCorrectAnswer = this.state.showCorrectAnswer;
98
+ var _this$state = this.state,
99
+ showCorrectAnswer = _this$state.showCorrectAnswer,
100
+ model = _this$state.model;
96
101
  var selectedTokens = showCorrectAnswer ? this.correctAnswer() : session.selectedTokens;
97
102
  log('[render] selectedTokens:', selectedTokens);
98
103
  return /*#__PURE__*/_react["default"].createElement("div", {
99
104
  className: classes.mainContainer
100
- }, model.teacherInstructions && (0, _renderUi.hasText)(model.teacherInstructions) && /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
105
+ }, model.teacherInstructions && (0, _renderUi.hasText)(model.teacherInstructions) && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !model.animationsDisabled ? /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
101
106
  labels: {
102
107
  hidden: 'Show Teacher Instructions',
103
108
  visible: 'Hide Teacher Instructions'
104
109
  },
105
110
  className: classes.collapsible
106
- }, /*#__PURE__*/_react["default"].createElement("div", {
107
- dangerouslySetInnerHTML: {
108
- __html: model.teacherInstructions
109
- }
110
- })), /*#__PURE__*/_react["default"].createElement("br", null), /*#__PURE__*/_react["default"].createElement("div", {
111
- className: classes.prompt,
112
- dangerouslySetInnerHTML: {
113
- __html: model.prompt
114
- }
115
- }), /*#__PURE__*/_react["default"].createElement(_correctAnswerToggle["default"], {
111
+ }, /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
112
+ prompt: model.teacherInstructions
113
+ })) : /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
114
+ prompt: model.teacherInstructions
115
+ }), /*#__PURE__*/_react["default"].createElement("br", null)), /*#__PURE__*/_react["default"].createElement("div", {
116
+ className: classes.prompt
117
+ }, /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
118
+ prompt: model.prompt
119
+ })), !model.alwaysShowCorrect && /*#__PURE__*/_react["default"].createElement(_correctAnswerToggle["default"], {
116
120
  show: model.disabled && model.incorrect,
117
121
  toggled: showCorrectAnswer,
118
122
  onToggle: this.toggleShowCorrect
@@ -122,19 +126,35 @@ var Main = /*#__PURE__*/function (_React$Component) {
122
126
  text: model.text,
123
127
  tokens: model.tokens,
124
128
  selectedTokens: selectedTokens,
125
- onChange: onSelectionChange,
129
+ onChange: function onChange(selection) {
130
+ var newSelections = selection.map(function (select) {
131
+ var token = model.tokens.find(function (_ref) {
132
+ var start = _ref.start,
133
+ end = _ref.end;
134
+ return select.start === start && select.end === end;
135
+ }); // needed for getScore when tokens position is recalculated, to keep oldStart and oldEnd
136
+
137
+ if (token) {
138
+ return token;
139
+ }
140
+
141
+ return select;
142
+ });
143
+ onSelectionChange(newSelections);
144
+ },
126
145
  highlightChoices: model.highlightChoices,
127
- maxNoOfSelections: model.maxSelections
128
- }), model.rationale && (0, _renderUi.hasText)(model.rationale) && /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
146
+ maxNoOfSelections: model.maxSelections,
147
+ animationsDisabled: model.animationsDisabled
148
+ }), model.rationale && (0, _renderUi.hasText)(model.rationale) && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !model.animationsDisabled ? /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, (0, _defineProperty2["default"])({
129
149
  labels: {
130
150
  hidden: 'Show Rationale',
131
151
  visible: 'Hide Rationale'
132
152
  },
133
153
  className: classes.collapsible
134
- }, /*#__PURE__*/_react["default"].createElement("div", {
135
- dangerouslySetInnerHTML: {
136
- __html: model.rationale
137
- }
154
+ }, "className", classes.collapsible), /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
155
+ prompt: model.rationale
156
+ })) : /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
157
+ prompt: model.rationale
138
158
  })), model.correctness && model.feedback && !showCorrectAnswer && /*#__PURE__*/_react["default"].createElement(_renderUi.Feedback, {
139
159
  correctness: model.correctness,
140
160
  feedback: model.feedback
@@ -213,9 +233,9 @@ var Stateful = /*#__PURE__*/function (_React$Component2) {
213
233
  }, {
214
234
  key: "render",
215
235
  value: function render() {
216
- var _this$state = this.state,
217
- model = _this$state.model,
218
- session = _this$state.session;
236
+ var _this$state2 = this.state,
237
+ model = _this$state2.model,
238
+ session = _this$state2.session;
219
239
  return /*#__PURE__*/_react["default"].createElement(StyledMain, {
220
240
  model: model,
221
241
  session: session,
package/lib/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main.jsx"],"names":["log","Types","model","PropTypes","object","session","onSelectionChange","func","isRequired","Main","props","setState","showCorrectAnswer","state","tokens","filter","t","correct","classes","selectedTokens","correctAnswer","mainContainer","teacherInstructions","hidden","visible","collapsible","__html","prompt","disabled","incorrect","toggleShowCorrect","textSelect","text","highlightChoices","maxSelections","rationale","correctness","feedback","React","Component","StyledMain","theme","paddingLeft","spacing","unit","paddingRight","paddingBottom","color","backgroundColor","background","marginBottom","marginTop","whiteSpace","verticalAlign","paddingTop","Stateful","nextProps","change"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { TextSelect } from '@pie-lib/text-select';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport { color, Feedback, Collapsible, hasText } from '@pie-lib/render-ui';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport debug from 'debug';\n\nconst log = debug('@pie-ui:select-text');\n\nconst Types = {\n model: PropTypes.object,\n session: PropTypes.object,\n onSelectionChange: PropTypes.func.isRequired\n};\n\nexport class Main extends React.Component {\n static propTypes = { ...Types, classes: PropTypes.object.isRequired };\n\n static defaultProps = {};\n\n constructor(props) {\n super(props);\n\n this.state = {\n showCorrectAnswer: false\n };\n }\n\n UNSAFE_componentWillReceiveProps() {\n this.setState({ showCorrectAnswer: false });\n }\n\n toggleShowCorrect = () => {\n this.setState({ showCorrectAnswer: !this.state.showCorrectAnswer });\n };\n\n correctAnswer = () => {\n const { model } = this.props;\n return model.tokens.filter(t => t.correct);\n };\n\n render() {\n const { model, session, onSelectionChange, classes } = this.props;\n const { showCorrectAnswer } = this.state;\n\n const selectedTokens = showCorrectAnswer\n ? this.correctAnswer()\n : session.selectedTokens;\n\n log('[render] selectedTokens:', selectedTokens);\n\n return (\n <div className={classes.mainContainer}>\n {\n model.teacherInstructions && hasText(model.teacherInstructions) && (\n <Collapsible\n labels={{ hidden: 'Show Teacher Instructions', visible: 'Hide Teacher Instructions' }}\n className={classes.collapsible}\n >\n <div dangerouslySetInnerHTML={{ __html: model.teacherInstructions }}/>\n </Collapsible>\n )\n }\n <br />\n <div\n className={classes.prompt}\n dangerouslySetInnerHTML={{ __html: model.prompt }}\n />\n <CorrectAnswerToggle\n show={model.disabled && model.incorrect}\n toggled={showCorrectAnswer}\n onToggle={this.toggleShowCorrect}\n />\n <TextSelect\n className={classes.textSelect}\n disabled={model.disabled}\n text={model.text}\n tokens={model.tokens}\n selectedTokens={selectedTokens}\n onChange={onSelectionChange}\n highlightChoices={model.highlightChoices}\n maxNoOfSelections={model.maxSelections}\n />\n {\n model.rationale && hasText(model.rationale) && (\n <Collapsible\n labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }}\n className={classes.collapsible}\n >\n <div dangerouslySetInnerHTML={{ __html: model.rationale }}/>\n </Collapsible>\n )\n }\n {model.correctness && model.feedback && !showCorrectAnswer && (\n <Feedback correctness={model.correctness} feedback={model.feedback} />\n )}\n </div>\n );\n }\n}\n\nconst StyledMain = withStyles(theme => ({\n mainContainer: {\n paddingLeft: theme.spacing.unit,\n paddingRight: theme.spacing.unit,\n paddingBottom: theme.spacing.unit,\n color: color.text(),\n backgroundColor: color.background()\n },\n textSelect: {\n marginBottom: theme.spacing.unit,\n marginTop: theme.spacing.unit,\n whiteSpace: 'normal'\n },\n prompt: {\n verticalAlign: 'middle',\n marginBottom: theme.spacing.unit\n },\n collapsible: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 3\n }\n}))(Main);\n\nexport default class Stateful extends React.Component {\n static propTypes = Types;\n\n constructor(props) {\n super(props);\n this.state = {\n model: props.model,\n session: props.session\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.setState({ model: nextProps.model, session: nextProps.session });\n }\n\n change = selectedTokens => {\n const session = { ...this.state.session, selectedTokens };\n this.setState({ session }, () => {\n this.props.onSelectionChange(this.state.session.selectedTokens);\n });\n };\n\n render() {\n const { model, session } = this.state;\n return (\n <StyledMain\n model={model}\n session={session}\n onSelectionChange={this.change}\n />\n );\n }\n}\n"],"file":"main.js"}
1
+ {"version":3,"sources":["../src/main.jsx"],"names":["log","Types","model","PropTypes","object","session","onSelectionChange","func","isRequired","Main","props","setState","showCorrectAnswer","state","tokens","filter","t","correct","alwaysShowCorrect","nextProps","classes","selectedTokens","correctAnswer","mainContainer","teacherInstructions","animationsDisabled","hidden","visible","collapsible","prompt","disabled","incorrect","toggleShowCorrect","textSelect","text","selection","newSelections","map","select","token","find","start","end","highlightChoices","maxSelections","rationale","correctness","feedback","React","Component","StyledMain","theme","paddingLeft","spacing","unit","paddingRight","paddingBottom","color","backgroundColor","background","marginBottom","marginTop","whiteSpace","verticalAlign","paddingTop","Stateful","change"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { TextSelect } from '@pie-lib/text-select';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport { color, Feedback, Collapsible, hasText, PreviewPrompt } from '@pie-lib/render-ui';\nimport { withStyles } from '@material-ui/core/styles';\nimport generateModel from './utils';\n\nimport debug from 'debug';\n\nconst log = debug('@pie-ui:select-text');\n\nconst Types = {\n model: PropTypes.object,\n session: PropTypes.object,\n onSelectionChange: PropTypes.func.isRequired,\n};\n\nexport class Main extends React.Component {\n static propTypes = { ...Types, classes: PropTypes.object.isRequired };\n\n static defaultProps = {};\n\n constructor(props) {\n super(props);\n\n this.state = {\n showCorrectAnswer: this.props.model.alwaysShowCorrect || false,\n model: generateModel(props.model),\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.setState({\n showCorrectAnswer: !!nextProps.model.alwaysShowCorrect,\n model: generateModel(nextProps.model),\n });\n }\n\n toggleShowCorrect = () => {\n this.setState({ showCorrectAnswer: !this.state.showCorrectAnswer });\n };\n\n correctAnswer = () => {\n const { model } = this.state;\n\n return model.tokens.filter((t) => t.correct);\n };\n\n render() {\n const { session, onSelectionChange, classes } = this.props;\n const { showCorrectAnswer, model } = this.state;\n\n const selectedTokens = showCorrectAnswer ? this.correctAnswer() : session.selectedTokens;\n\n log('[render] selectedTokens:', selectedTokens);\n\n return (\n <div className={classes.mainContainer}>\n {model.teacherInstructions && hasText(model.teacherInstructions) && (\n <React.Fragment>\n {!model.animationsDisabled ? (\n <Collapsible\n labels={{ hidden: 'Show Teacher Instructions', visible: 'Hide Teacher Instructions' }}\n className={classes.collapsible}\n >\n <PreviewPrompt prompt={model.teacherInstructions} />\n </Collapsible>\n ) : (\n <PreviewPrompt prompt={model.teacherInstructions} />\n )}\n\n <br />\n </React.Fragment>\n )}\n <div className={classes.prompt}>\n <PreviewPrompt prompt={model.prompt} />\n </div>\n {!model.alwaysShowCorrect && (\n <CorrectAnswerToggle\n show={model.disabled && model.incorrect}\n toggled={showCorrectAnswer}\n onToggle={this.toggleShowCorrect}\n />\n )}\n <TextSelect\n className={classes.textSelect}\n disabled={model.disabled}\n text={model.text}\n tokens={model.tokens}\n selectedTokens={selectedTokens}\n onChange={(selection) => {\n const newSelections = selection.map((select) => {\n const token = model.tokens.find(({ start, end }) => select.start === start && select.end === end);\n\n // needed for getScore when tokens position is recalculated, to keep oldStart and oldEnd\n if (token) {\n return token;\n }\n\n return select;\n });\n\n onSelectionChange(newSelections);\n }}\n highlightChoices={model.highlightChoices}\n maxNoOfSelections={model.maxSelections}\n animationsDisabled={model.animationsDisabled}\n />\n {model.rationale && hasText(model.rationale) && (\n <React.Fragment>\n {!model.animationsDisabled ? (\n <Collapsible\n labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }}\n className={classes.collapsible}\n className={classes.collapsible}\n >\n <PreviewPrompt prompt={model.rationale} />\n </Collapsible>\n ) : (\n <PreviewPrompt prompt={model.rationale} />\n )}\n </React.Fragment>\n )}\n {model.correctness && model.feedback && !showCorrectAnswer && (\n <Feedback correctness={model.correctness} feedback={model.feedback} />\n )}\n </div>\n );\n }\n}\n\nconst StyledMain = withStyles((theme) => ({\n mainContainer: {\n paddingLeft: theme.spacing.unit,\n paddingRight: theme.spacing.unit,\n paddingBottom: theme.spacing.unit,\n color: color.text(),\n backgroundColor: color.background(),\n },\n textSelect: {\n marginBottom: theme.spacing.unit,\n marginTop: theme.spacing.unit,\n whiteSpace: 'normal',\n },\n prompt: {\n verticalAlign: 'middle',\n marginBottom: theme.spacing.unit,\n },\n collapsible: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 3,\n },\n}))(Main);\n\nexport default class Stateful extends React.Component {\n static propTypes = Types;\n\n constructor(props) {\n super(props);\n this.state = {\n model: props.model,\n session: props.session,\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.setState({ model: nextProps.model, session: nextProps.session });\n }\n\n change = (selectedTokens) => {\n const session = { ...this.state.session, selectedTokens };\n this.setState({ session }, () => {\n this.props.onSelectionChange(this.state.session.selectedTokens);\n });\n };\n\n render() {\n const { model, session } = this.state;\n return <StyledMain model={model} session={session} onSelectionChange={this.change} />;\n }\n}\n"],"file":"main.js"}
package/lib/print.js ADDED
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
+
16
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
+
18
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
+
20
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
+
22
+ var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
23
+
24
+ var _react = _interopRequireDefault(require("react"));
25
+
26
+ var _reactDom = _interopRequireDefault(require("react-dom"));
27
+
28
+ var _debounce = _interopRequireDefault(require("lodash/debounce"));
29
+
30
+ var _main = _interopRequireDefault(require("./main"));
31
+
32
+ var _mathRendering = require("@pie-lib/math-rendering");
33
+
34
+ var _debug = _interopRequireDefault(require("debug"));
35
+
36
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
37
+
38
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
39
+
40
+ var log = (0, _debug["default"])('pie-element:select-text:print');
41
+ /**
42
+ * Live in same package as main element - so we can access some of the shared comps!
43
+ *
44
+ * - update pslb to build print if src/print.js is there
45
+ * - update demo el
46
+ * - get configure/controller building
47
+ */
48
+
49
+ var preparePrintModel = function preparePrintModel(model, opts) {
50
+ var instr = opts.role === 'instructor';
51
+ model.prompt = model.promptEnabled !== false ? model.prompt : undefined;
52
+ model.teacherInstructions = instr && model.teacherInstructionsEnabled !== false ? model.teacherInstructions : undefined;
53
+ model.rationale = instr && model.rationaleEnabled !== false ? model.rationale : undefined;
54
+ model.showTeacherInstructions = instr;
55
+ model.alwaysShowCorrect = instr;
56
+ model.mode = instr ? 'evaluate' : model.mode;
57
+ model.disabled = true;
58
+ model.animationsDisabled = true;
59
+ model.highlightChoices = true;
60
+ model.feedback = undefined;
61
+ return model;
62
+ };
63
+
64
+ var SelectTextPrint = /*#__PURE__*/function (_HTMLElement) {
65
+ (0, _inherits2["default"])(SelectTextPrint, _HTMLElement);
66
+
67
+ var _super = _createSuper(SelectTextPrint);
68
+
69
+ function SelectTextPrint() {
70
+ var _this;
71
+
72
+ (0, _classCallCheck2["default"])(this, SelectTextPrint);
73
+ _this = _super.call(this);
74
+ _this._options = null;
75
+ _this._model = null;
76
+ _this._session = {};
77
+ _this._session.selectedTokens = [];
78
+ _this._rerender = (0, _debounce["default"])(function () {
79
+ if (_this._model && _this._session) {
80
+ var printModel = preparePrintModel(_this._model, _this._options);
81
+
82
+ var element = _this._options && /*#__PURE__*/_react["default"].createElement(_main["default"], {
83
+ model: printModel,
84
+ session: {
85
+ selectedTokens: []
86
+ },
87
+ onSelectionChange: function onSelectionChange() {}
88
+ });
89
+
90
+ _reactDom["default"].render(element, (0, _assertThisInitialized2["default"])(_this), function () {
91
+ log('render complete - render math');
92
+ (0, _mathRendering.renderMath)((0, _assertThisInitialized2["default"])(_this));
93
+ });
94
+ } else {
95
+ log('skip');
96
+ }
97
+ }, 50, {
98
+ leading: false,
99
+ trailing: true
100
+ });
101
+ return _this;
102
+ }
103
+
104
+ (0, _createClass2["default"])(SelectTextPrint, [{
105
+ key: "options",
106
+ set: function set(o) {
107
+ this._options = o;
108
+ }
109
+ }, {
110
+ key: "model",
111
+ set: function set(s) {
112
+ this._model = s;
113
+
114
+ this._rerender();
115
+ }
116
+ }, {
117
+ key: "connectedCallback",
118
+ value: function connectedCallback() {}
119
+ }]);
120
+ return SelectTextPrint;
121
+ }( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
122
+
123
+ exports["default"] = SelectTextPrint;
124
+ //# sourceMappingURL=print.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/print.js"],"names":["log","preparePrintModel","model","opts","instr","role","prompt","promptEnabled","undefined","teacherInstructions","teacherInstructionsEnabled","rationale","rationaleEnabled","showTeacherInstructions","alwaysShowCorrect","mode","disabled","animationsDisabled","highlightChoices","feedback","SelectTextPrint","_options","_model","_session","selectedTokens","_rerender","printModel","element","React","createElement","Main","session","onSelectionChange","ReactDOM","render","leading","trailing","o","s","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,+BAAN,CAAZ;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,KAAD,EAAQC,IAAR,EAAiB;AACzC,MAAMC,KAAK,GAAGD,IAAI,CAACE,IAAL,KAAc,YAA5B;AAEAH,EAAAA,KAAK,CAACI,MAAN,GAAeJ,KAAK,CAACK,aAAN,KAAwB,KAAxB,GAAgCL,KAAK,CAACI,MAAtC,GAA+CE,SAA9D;AACAN,EAAAA,KAAK,CAACO,mBAAN,GACEL,KAAK,IAAIF,KAAK,CAACQ,0BAAN,KAAqC,KAA9C,GAAsDR,KAAK,CAACO,mBAA5D,GAAkFD,SADpF;AAEAN,EAAAA,KAAK,CAACS,SAAN,GAAkBP,KAAK,IAAIF,KAAK,CAACU,gBAAN,KAA2B,KAApC,GAA4CV,KAAK,CAACS,SAAlD,GAA8DH,SAAhF;AACAN,EAAAA,KAAK,CAACW,uBAAN,GAAgCT,KAAhC;AACAF,EAAAA,KAAK,CAACY,iBAAN,GAA0BV,KAA1B;AACAF,EAAAA,KAAK,CAACa,IAAN,GAAaX,KAAK,GAAG,UAAH,GAAgBF,KAAK,CAACa,IAAxC;AAEAb,EAAAA,KAAK,CAACc,QAAN,GAAiB,IAAjB;AACAd,EAAAA,KAAK,CAACe,kBAAN,GAA2B,IAA3B;AACAf,EAAAA,KAAK,CAACgB,gBAAN,GAAyB,IAAzB;AACAhB,EAAAA,KAAK,CAACiB,QAAN,GAAiBX,SAAjB;AAEA,SAAON,KAAP;AACD,CAjBD;;IAmBqBkB,e;;;;;AACnB,6BAAc;AAAA;;AAAA;AACZ;AACA,UAAKC,QAAL,GAAgB,IAAhB;AACA,UAAKC,MAAL,GAAc,IAAd;AACA,UAAKC,QAAL,GAAgB,EAAhB;AACA,UAAKA,QAAL,CAAcC,cAAd,GAA+B,EAA/B;AACA,UAAKC,SAAL,GAAiB,0BACf,YAAM;AACJ,UAAI,MAAKH,MAAL,IAAe,MAAKC,QAAxB,EAAkC;AAChC,YAAMG,UAAU,GAAGzB,iBAAiB,CAAC,MAAKqB,MAAN,EAAc,MAAKD,QAAnB,CAApC;;AAEA,YAAMM,OAAO,GACX,MAAKN,QAAL,iBACAO,kBAAMC,aAAN,CAAoBC,gBAApB,EAA0B;AACxB5B,UAAAA,KAAK,EAAEwB,UADiB;AAExBK,UAAAA,OAAO,EAAE;AAAEP,YAAAA,cAAc,EAAE;AAAlB,WAFe;AAGxBQ,UAAAA,iBAAiB,EAAE,6BAAM,CAAE;AAHH,SAA1B,CAFF;;AAQAC,6BAASC,MAAT,CAAgBP,OAAhB,kDAA+B,YAAM;AACnC3B,UAAAA,GAAG,CAAC,+BAAD,CAAH;AACA;AACD,SAHD;AAID,OAfD,MAeO;AACLA,QAAAA,GAAG,CAAC,MAAD,CAAH;AACD;AACF,KApBc,EAqBf,EArBe,EAsBf;AAAEmC,MAAAA,OAAO,EAAE,KAAX;AAAkBC,MAAAA,QAAQ,EAAE;AAA5B,KAtBe,CAAjB;AANY;AA8Bb;;;;SACD,aAAYC,CAAZ,EAAe;AACb,WAAKhB,QAAL,GAAgBgB,CAAhB;AACD;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKhB,MAAL,GAAcgB,CAAd;;AACA,WAAKb,SAAL;AACD;;;WAED,6BAAoB,CAAE;;;kDAzCqBc,W","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport debounce from 'lodash/debounce';\nimport Main from './main';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport debug from 'debug';\n\nconst log = debug('pie-element:select-text:print');\n\n/**\n * Live in same package as main element - so we can access some of the shared comps!\n *\n * - update pslb to build print if src/print.js is there\n * - update demo el\n * - get configure/controller building\n */\n\nconst preparePrintModel = (model, opts) => {\n const instr = opts.role === 'instructor';\n\n model.prompt = model.promptEnabled !== false ? model.prompt : undefined;\n model.teacherInstructions =\n instr && model.teacherInstructionsEnabled !== false ? model.teacherInstructions : undefined;\n model.rationale = instr && model.rationaleEnabled !== false ? model.rationale : undefined;\n model.showTeacherInstructions = instr;\n model.alwaysShowCorrect = instr;\n model.mode = instr ? 'evaluate' : model.mode;\n\n model.disabled = true;\n model.animationsDisabled = true;\n model.highlightChoices = true;\n model.feedback = undefined;\n\n return model;\n};\n\nexport default class SelectTextPrint extends HTMLElement {\n constructor() {\n super();\n this._options = null;\n this._model = null;\n this._session = {};\n this._session.selectedTokens = [];\n this._rerender = debounce(\n () => {\n if (this._model && this._session) {\n const printModel = preparePrintModel(this._model, this._options);\n\n const element =\n this._options &&\n React.createElement(Main, {\n model: printModel,\n session: { selectedTokens: [] },\n onSelectionChange: () => {},\n });\n\n ReactDOM.render(element, this, () => {\n log('render complete - render math');\n renderMath(this);\n });\n } else {\n log('skip');\n }\n },\n 50,\n { leading: false, trailing: true },\n );\n }\n set options(o) {\n this._options = o;\n }\n\n set model(s) {\n this._model = s;\n this._rerender();\n }\n\n connectedCallback() {}\n}\n"],"file":"print.js"}