@pie-element/passage 2.3.2-next.9 → 2.4.1-next.0

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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,21 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [2.4.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage@2.3.1...@pie-element/passage@2.4.0) (2024-03-04)
7
+
8
+
9
+ ### Features
10
+
11
+ * add support for teacher instructions on passage PD-3445 ([54d5f94](https://github.com/pie-framework/pie-elements/commit/54d5f94b927068585eb7666e1f5ef23e0daad9eb))
12
+ * add support for teacher instructions on passage PD-3445 ([ce478a4](https://github.com/pie-framework/pie-elements/commit/ce478a45d0a55d879a284b6eac8850e2cb49154b))
13
+ * add support for teacher instructions on passage PD-3445 ([f69452e](https://github.com/pie-framework/pie-elements/commit/f69452e920300bd67cd714e298d8c0fc96cf40c4))
14
+ * remove teacher instructions for student PD-3445 ([f763cd5](https://github.com/pie-framework/pie-elements/commit/f763cd576a8503807722a91a9ab4f0d24c4623e7))
15
+ * update pie-lib/pie-toolbox version PD-1870 and PD-3501 ([8df1d8d](https://github.com/pie-framework/pie-elements/commit/8df1d8d281a0d6023d5a9c0e6fdd29fea71b6ac1))
16
+
17
+
18
+
19
+
20
+
6
21
  ## [2.3.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage@2.3.0...@pie-element/passage@2.3.1) (2024-02-20)
7
22
 
8
23
 
@@ -3,6 +3,19 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [1.2.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage-controller@1.1.0...@pie-element/passage-controller@1.2.0) (2024-03-04)
7
+
8
+
9
+ ### Features
10
+
11
+ * add support for teacher instructions on passage PD-3445 ([54d5f94](https://github.com/pie-framework/pie-elements/commit/54d5f94b927068585eb7666e1f5ef23e0daad9eb))
12
+ * add support for teacher instructions on passage PD-3445 ([f69452e](https://github.com/pie-framework/pie-elements/commit/f69452e920300bd67cd714e298d8c0fc96cf40c4))
13
+ * remove teacher instructions for student PD-3445 ([f763cd5](https://github.com/pie-framework/pie-elements/commit/f763cd576a8503807722a91a9ab4f0d24c4623e7))
14
+
15
+
16
+
17
+
18
+
6
19
  # 1.1.0 (2024-02-14)
7
20
 
8
21
 
@@ -11,31 +11,39 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
11
11
 
12
12
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
13
 
14
+ var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
15
+
14
16
  /**
15
17
  *
16
18
  * @param {*} question
17
19
  * @param {*} session
18
20
  * @param {*} env
19
- * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.
20
21
  */
21
- function model(_x, _x2, _x3, _x4) {
22
+ function model(_x, _x2, _x3) {
22
23
  return _model.apply(this, arguments);
23
24
  }
24
25
 
25
26
  function _model() {
26
- _model = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(question, session, env, updateSession) {
27
+ _model = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(question, session, env) {
28
+ var _ref, role, mode, response;
29
+
27
30
  return _regenerator["default"].wrap(function _callee$(_context) {
28
31
  while (1) {
29
32
  switch (_context.prev = _context.next) {
30
33
  case 0:
31
- // TODO use env to send teacherInstructions
32
- console.log({
33
- question: question,
34
- env: env
35
- });
36
- return _context.abrupt("return", question);
37
-
38
- case 2:
34
+ _ref = env || {}, role = _ref.role, mode = _ref.mode;
35
+ response = (0, _cloneDeep["default"])(question);
36
+ response.showTeacherInstructions = role === 'instructor' && (mode === 'view' || mode === 'evaluate'); // if we don't show the teacher instructions don't pass them on
37
+
38
+ if (!response.showTeacherInstructions) {
39
+ response.passages.forEach(function (passage) {
40
+ delete passage.teacherInstructions;
41
+ });
42
+ }
43
+
44
+ return _context.abrupt("return", response);
45
+
46
+ case 5:
39
47
  case "end":
40
48
  return _context.stop();
41
49
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["model","question","session","env","updateSession","console","log"],"mappings":";;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;SACsBA,K;;;;;yFAAf,iBAAqBC,QAArB,EAA+BC,OAA/B,EAAwCC,GAAxC,EAA6CC,aAA7C;AAAA;AAAA;AAAA;AAAA;AACL;AACAC,YAAAA,OAAO,CAACC,GAAR,CAAY;AAAEL,cAAAA,QAAQ,EAARA,QAAF;AAAYE,cAAAA,GAAG,EAAHA;AAAZ,aAAZ;AAFK,6CAIEF,QAJF;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G","sourcesContent":["/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport async function model(question, session, env, updateSession) {\n // TODO use env to send teacherInstructions\n console.log({ question, env });\n\n return question;\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["model","question","session","env","role","mode","response","showTeacherInstructions","passages","forEach","passage","teacherInstructions"],"mappings":";;;;;;;;;;;;;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;SACsBA,K;;;;;yFAAf,iBAAqBC,QAArB,EAA+BC,OAA/B,EAAwCC,GAAxC;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,mBACkBA,GAAG,IAAI,EADzB,EACGC,IADH,QACGA,IADH,EACSC,IADT,QACSA,IADT;AAECC,YAAAA,QAFD,GAEY,2BAAUL,QAAV,CAFZ;AAILK,YAAAA,QAAQ,CAACC,uBAAT,GAAmCH,IAAI,KAAK,YAAT,KAA0BC,IAAI,KAAK,MAAT,IAAmBA,IAAI,KAAK,UAAtD,CAAnC,CAJK,CAML;;AACA,gBAAI,CAACC,QAAQ,CAACC,uBAAd,EAAuC;AACrCD,cAAAA,QAAQ,CAACE,QAAT,CAAkBC,OAAlB,CAA0B,UAACC,OAAD,EAAa;AACrC,uBAAOA,OAAO,CAACC,mBAAf;AACD,eAFD;AAGD;;AAXI,6CAaEL,QAbF;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G","sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n */\nexport async function model(question, session, env) {\n const { role, mode } = env || {};\n const response = cloneDeep(question);\n\n response.showTeacherInstructions = role === 'instructor' && (mode === 'view' || mode === 'evaluate');\n\n // if we don't show the teacher instructions don't pass them on\n if (!response.showTeacherInstructions) {\n response.passages.forEach((passage) => {\n delete passage.teacherInstructions;\n });\n }\n\n return response;\n}\n"],"file":"index.js"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/passage-controller",
3
3
  "private": true,
4
- "version": "1.1.0",
4
+ "version": "1.2.0",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -3,6 +3,7 @@ exports.model = (id, element) => ({
3
3
  element,
4
4
  passages: [
5
5
  {
6
+ teacherInstructions: 'Teacher instructions tab 1',
6
7
  title: 'Hope Is the Thing with Feathers',
7
8
  text: '<p><font style="visibility:hidden">00000</font>Hope is the thing with feathers<br /><font style="visibility:hidden">00000</font>That perches in the soul,<br /><font style="visibility:hidden">00000</font>And sings the tune without the words,<br /><font style="visibility:hidden">00000</font>And never stops at all,</p><p>5<font style="visibility:hidden">0000</font>And sweetest in the gale is heard;<br /><font style="visibility:hidden">00000</font>And sore must be the storm<br /><font style="visibility:hidden">00000</font>That could abash the little bird<br /><font style="visibility:hidden">00000</font>That kept so many warm.</p><p><font style="visibility:hidden">00000</font>I&#8217;ve heard it in the chillest land,<br />10<font style="visibility:hidden">000</font>And on the strangest sea;<br /><font style="visibility:hidden">00000</font>Yet, never, in extremity,<br /><font style="visibility:hidden">00000</font>It asked a crumb of me.</p><p><span class="no-number">&#34;Hope is the Thing With Feathers&#34; by Emily Dickinson, from <em>The Complete Poems of Emily Dickinson</em>. In the public domain.</span></p>',
8
9
  },
package/lib/index.js CHANGED
@@ -72,17 +72,22 @@ var PiePassage = /*#__PURE__*/function (_HTMLElement) {
72
72
  }, {
73
73
  key: "_render",
74
74
  value: function _render() {
75
+ var _this$_model$showTeac = this._model.showTeacherInstructions,
76
+ showTeacherInstructions = _this$_model$showTeac === void 0 ? false : _this$_model$showTeac;
77
+
75
78
  if (this._model.passages.length > 0) {
76
79
  var passagesTabs = this._model.passages.map(function (passage, index) {
77
80
  return {
78
81
  id: index,
79
82
  title: passage.title,
80
- text: passage.text
83
+ text: passage.text,
84
+ teacherInstructions: passage.teacherInstructions || ''
81
85
  };
82
86
  });
83
87
 
84
88
  var elem = /*#__PURE__*/_react["default"].createElement(_stimulusTabs["default"], {
85
- tabs: passagesTabs
89
+ tabs: passagesTabs,
90
+ showTeacherInstructions: showTeacherInstructions
86
91
  });
87
92
 
88
93
  _reactDom["default"].render(elem, this);
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["PiePassage","_model","passages","_session","s","dispatchEvent","ModelSetEvent","tagName","toLowerCase","_render","setAttribute","length","passagesTabs","map","passage","index","id","title","text","elem","React","createElement","StimulusTabs","tabs","ReactDOM","render","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;IACqBA,U;;;;;AACnB,wBAAc;AAAA;;AAAA;AACZ;AACA,UAAKC,MAAL,GAAc;AACZC,MAAAA,QAAQ,EAAE;AADE,KAAd;AAGA,UAAKC,QAAL,GAAgB,IAAhB;AALY;AAMb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKH,MAAL,GAAcG,CAAd;AACA,WAAKC,aAAL,CAAmB,IAAIC,8BAAJ,CAAkB,KAAKC,OAAL,CAAaC,WAAb,EAAlB,EAA8C,KAAKL,QAAnD,EAA6D,CAAC,CAAC,KAAKF,MAApE,CAAnB;;AAEA,WAAKQ,OAAL;AACD;;;SAED,aAAYL,CAAZ,EAAe;AACb,WAAKD,QAAL,GAAgBC,CAAhB;AACD;;;WAED,6BAAoB;AAClB,WAAKM,YAAL,CAAkB,YAAlB,EAAgC,SAAhC;AACA,WAAKA,YAAL,CAAkB,MAAlB,EAA0B,QAA1B;;AACA,WAAKD,OAAL;AACD;;;WAED,mBAAU;AACR,UAAI,KAAKR,MAAL,CAAYC,QAAZ,CAAqBS,MAArB,GAA8B,CAAlC,EAAqC;AACnC,YAAMC,YAAY,GAAG,KAAKX,MAAL,CAAYC,QAAZ,CAAqBW,GAArB,CAAyB,UAACC,OAAD,EAAUC,KAAV,EAAoB;AAChE,iBAAO;AACLC,YAAAA,EAAE,EAAED,KADC;AAELE,YAAAA,KAAK,EAAEH,OAAO,CAACG,KAFV;AAGLC,YAAAA,IAAI,EAAEJ,OAAO,CAACI;AAHT,WAAP;AAKD,SANoB,CAArB;;AAOA,YAAIC,IAAI,gBAAGC,kBAAMC,aAAN,CAAoBC,wBAApB,EAAkC;AAAEC,UAAAA,IAAI,EAAEX;AAAR,SAAlC,CAAX;;AACAY,6BAASC,MAAT,CAAgBN,IAAhB,EAAsB,IAAtB;AACD;AACF;;;kDAtCqCO,W","sourcesContent":["import { ModelSetEvent } from '@pie-framework/pie-player-events';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport StimulusTabs from './stimulus-tabs';\nexport default class PiePassage extends HTMLElement {\n constructor() {\n super();\n this._model = {\n passages: [],\n };\n this._session = null;\n }\n\n set model(s) {\n this._model = s;\n this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), this._session, !!this._model));\n\n this._render();\n }\n\n set session(s) {\n this._session = s;\n }\n\n connectedCallback() {\n this.setAttribute('aria-label', 'Passage'); \n this.setAttribute('role', 'region');\n this._render();\n }\n\n _render() {\n if (this._model.passages.length > 0) {\n const passagesTabs = this._model.passages.map((passage, index) => {\n return {\n id: index,\n title: passage.title,\n text: passage.text,\n };\n });\n let elem = React.createElement(StimulusTabs, { tabs: passagesTabs });\n ReactDOM.render(elem, this);\n }\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["PiePassage","_model","passages","_session","s","dispatchEvent","ModelSetEvent","tagName","toLowerCase","_render","setAttribute","showTeacherInstructions","length","passagesTabs","map","passage","index","id","title","text","teacherInstructions","elem","React","createElement","StimulusTabs","tabs","ReactDOM","render","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;IACqBA,U;;;;;AACnB,wBAAc;AAAA;;AAAA;AACZ;AACA,UAAKC,MAAL,GAAc;AACZC,MAAAA,QAAQ,EAAE;AADE,KAAd;AAGA,UAAKC,QAAL,GAAgB,IAAhB;AALY;AAMb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKH,MAAL,GAAcG,CAAd;AACA,WAAKC,aAAL,CAAmB,IAAIC,8BAAJ,CAAkB,KAAKC,OAAL,CAAaC,WAAb,EAAlB,EAA8C,KAAKL,QAAnD,EAA6D,CAAC,CAAC,KAAKF,MAApE,CAAnB;;AAEA,WAAKQ,OAAL;AACD;;;SAED,aAAYL,CAAZ,EAAe;AACb,WAAKD,QAAL,GAAgBC,CAAhB;AACD;;;WAED,6BAAoB;AAClB,WAAKM,YAAL,CAAkB,YAAlB,EAAgC,SAAhC;AACA,WAAKA,YAAL,CAAkB,MAAlB,EAA0B,QAA1B;;AACA,WAAKD,OAAL;AACD;;;WAED,mBAAU;AACR,kCAA4C,KAAKR,MAAjD,CAAQU,uBAAR;AAAA,UAAQA,uBAAR,sCAAkC,KAAlC;;AAEA,UAAI,KAAKV,MAAL,CAAYC,QAAZ,CAAqBU,MAArB,GAA8B,CAAlC,EAAqC;AACnC,YAAMC,YAAY,GAAG,KAAKZ,MAAL,CAAYC,QAAZ,CAAqBY,GAArB,CAAyB,UAACC,OAAD,EAAUC,KAAV,EAAoB;AAChE,iBAAO;AACLC,YAAAA,EAAE,EAAED,KADC;AAELE,YAAAA,KAAK,EAAEH,OAAO,CAACG,KAFV;AAGLC,YAAAA,IAAI,EAAEJ,OAAO,CAACI,IAHT;AAILC,YAAAA,mBAAmB,EAAEL,OAAO,CAACK,mBAAR,IAA+B;AAJ/C,WAAP;AAMD,SAPoB,CAArB;;AAQA,YAAIC,IAAI,gBAAGC,kBAAMC,aAAN,CAAoBC,wBAApB,EAAkC;AAC3CC,UAAAA,IAAI,EAAEZ,YADqC;AAE3CF,UAAAA,uBAAuB,EAAvBA;AAF2C,SAAlC,CAAX;;AAIAe,6BAASC,MAAT,CAAgBN,IAAhB,EAAsB,IAAtB;AACD;AACF;;;kDA5CqCO,W","sourcesContent":["import { ModelSetEvent } from '@pie-framework/pie-player-events';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport StimulusTabs from './stimulus-tabs';\nexport default class PiePassage extends HTMLElement {\n constructor() {\n super();\n this._model = {\n passages: [],\n };\n this._session = null;\n }\n\n set model(s) {\n this._model = s;\n this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), this._session, !!this._model));\n\n this._render();\n }\n\n set session(s) {\n this._session = s;\n }\n\n connectedCallback() {\n this.setAttribute('aria-label', 'Passage');\n this.setAttribute('role', 'region');\n this._render();\n }\n\n _render() {\n const { showTeacherInstructions = false } = this._model;\n\n if (this._model.passages.length > 0) {\n const passagesTabs = this._model.passages.map((passage, index) => {\n return {\n id: index,\n title: passage.title,\n text: passage.text,\n teacherInstructions: passage.teacherInstructions || '',\n };\n });\n let elem = React.createElement(StimulusTabs, {\n tabs: passagesTabs,\n showTeacherInstructions,\n });\n ReactDOM.render(elem, this);\n }\n }\n}\n"],"file":"index.js"}
package/lib/print.js CHANGED
@@ -37,12 +37,14 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
37
37
 
38
38
  var log = (0, _debug["default"])('pie-element:passage:print');
39
39
 
40
- var preparePrintPassage = function preparePrintPassage(model) {
40
+ var preparePrintPassage = function preparePrintPassage(model, opts) {
41
+ var instr = opts.role === 'instructor';
41
42
  return model.passages.map(function (passage, index) {
42
43
  return {
43
44
  id: index,
44
45
  title: passage.title,
45
- text: passage.text
46
+ text: passage.text,
47
+ teacherInstructions: instr && passage.teacherInstructions
46
48
  };
47
49
  });
48
50
  };
@@ -58,15 +60,17 @@ var PassagePrint = /*#__PURE__*/function (_HTMLElement) {
58
60
  (0, _classCallCheck2["default"])(this, PassagePrint);
59
61
  _this = _super.call(this);
60
62
  _this._model = null;
63
+ _this._options = null;
61
64
  _this._session = [];
62
65
  _this._rerender = (0, _debounce["default"])(function () {
63
66
  if (_this._model && _this._session) {
64
67
  if (_this._model.passages && _this._model.passages.length > 0) {
65
- var printPassage = preparePrintPassage(_this._model);
68
+ var printPassage = preparePrintPassage(_this._model, _this._options);
66
69
 
67
70
  var element = /*#__PURE__*/_react["default"].createElement(_stimulusTabs["default"], {
68
71
  tabs: printPassage,
69
- disabledTabs: true
72
+ disabledTabs: true,
73
+ showTeacherInstructions: _this._options.role === 'instructor'
70
74
  });
71
75
 
72
76
  _reactDom["default"].render(element, (0, _assertThisInitialized2["default"])(_this));
@@ -88,6 +92,11 @@ var PassagePrint = /*#__PURE__*/function (_HTMLElement) {
88
92
 
89
93
  this._rerender();
90
94
  }
95
+ }, {
96
+ key: "options",
97
+ set: function set(o) {
98
+ this._options = o;
99
+ }
91
100
  }, {
92
101
  key: "connectedCallback",
93
102
  value: function connectedCallback() {}
package/lib/print.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/print.js"],"names":["log","preparePrintPassage","model","passages","map","passage","index","id","title","text","PassagePrint","_model","_session","_rerender","length","printPassage","element","React","createElement","StimulusTabs","tabs","disabledTabs","ReactDOM","render","leading","trailing","s","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,2BAAN,CAAZ;;AAEA,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACC,KAAD;AAAA,SAC1BA,KAAK,CAACC,QAAN,CAAeC,GAAf,CAAmB,UAACC,OAAD,EAAUC,KAAV,EAAoB;AACrC,WAAO;AACLC,MAAAA,EAAE,EAAED,KADC;AAELE,MAAAA,KAAK,EAAEH,OAAO,CAACG,KAFV;AAGLC,MAAAA,IAAI,EAAEJ,OAAO,CAACI;AAHT,KAAP;AAKD,GAND,CAD0B;AAAA,CAA5B;;IASqBC,Y;;;;;AACnB,0BAAc;AAAA;;AAAA;AACZ;AACA,UAAKC,MAAL,GAAc,IAAd;AACA,UAAKC,QAAL,GAAgB,EAAhB;AAEA,UAAKC,SAAL,GAAiB,0BACf,YAAM;AACJ,UAAI,MAAKF,MAAL,IAAe,MAAKC,QAAxB,EAAkC;AAChC,YAAI,MAAKD,MAAL,CAAYR,QAAZ,IAAwB,MAAKQ,MAAL,CAAYR,QAAZ,CAAqBW,MAArB,GAA8B,CAA1D,EAA6D;AAC3D,cAAMC,YAAY,GAAGd,mBAAmB,CAAC,MAAKU,MAAN,CAAxC;;AAEA,cAAMK,OAAO,gBAAGC,kBAAMC,aAAN,CAAoBC,wBAApB,EAAkC;AAAEC,YAAAA,IAAI,EAAEL,YAAR;AAAsBM,YAAAA,YAAY,EAAE;AAApC,WAAlC,CAAhB;;AAEAC,+BAASC,MAAT,CAAgBP,OAAhB;AACD;AACF,OARD,MAQO;AACLhB,QAAAA,GAAG,CAAC,MAAD,CAAH;AACD;AACF,KAbc,EAcf,EAde,EAef;AAAEwB,MAAAA,OAAO,EAAE,KAAX;AAAkBC,MAAAA,QAAQ,EAAE;AAA5B,KAfe,CAAjB;AALY;AAsBb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKf,MAAL,GAAce,CAAd;;AACA,WAAKb,SAAL;AACD;;;WAED,6BAAoB,CAAE;;;kDA9BkBc,W","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport debounce from 'lodash/debounce';\nimport StimulusTabs from './stimulus-tabs';\nimport debug from 'debug';\n\nconst log = debug('pie-element:passage:print');\n\nconst preparePrintPassage = (model) =>\n model.passages.map((passage, index) => {\n return {\n id: index,\n title: passage.title,\n text: passage.text,\n };\n });\n\nexport default class PassagePrint extends HTMLElement {\n constructor() {\n super();\n this._model = null;\n this._session = [];\n\n this._rerender = debounce(\n () => {\n if (this._model && this._session) {\n if (this._model.passages && this._model.passages.length > 0) {\n const printPassage = preparePrintPassage(this._model);\n\n const element = React.createElement(StimulusTabs, { tabs: printPassage, disabledTabs: true });\n\n ReactDOM.render(element, this);\n }\n } else {\n log('skip');\n }\n },\n 50,\n { leading: false, trailing: true },\n );\n }\n\n set model(s) {\n this._model = s;\n this._rerender();\n }\n\n connectedCallback() {}\n}\n"],"file":"print.js"}
1
+ {"version":3,"sources":["../src/print.js"],"names":["log","preparePrintPassage","model","opts","instr","role","passages","map","passage","index","id","title","text","teacherInstructions","PassagePrint","_model","_options","_session","_rerender","length","printPassage","element","React","createElement","StimulusTabs","tabs","disabledTabs","showTeacherInstructions","ReactDOM","render","leading","trailing","s","o","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,2BAAN,CAAZ;;AAEA,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACC,KAAD,EAAQC,IAAR,EAAiB;AAC3C,MAAMC,KAAK,GAAGD,IAAI,CAACE,IAAL,KAAc,YAA5B;AAEA,SAAOH,KAAK,CAACI,QAAN,CAAeC,GAAf,CAAmB,UAACC,OAAD,EAAUC,KAAV,EAAoB;AAC5C,WAAO;AACLC,MAAAA,EAAE,EAAED,KADC;AAELE,MAAAA,KAAK,EAAEH,OAAO,CAACG,KAFV;AAGLC,MAAAA,IAAI,EAAEJ,OAAO,CAACI,IAHT;AAILC,MAAAA,mBAAmB,EAAET,KAAK,IAAII,OAAO,CAACK;AAJjC,KAAP;AAMD,GAPM,CAAP;AAQD,CAXD;;IAaqBC,Y;;;;;AACnB,0BAAc;AAAA;;AAAA;AACZ;AACA,UAAKC,MAAL,GAAc,IAAd;AACA,UAAKC,QAAL,GAAgB,IAAhB;AACA,UAAKC,QAAL,GAAgB,EAAhB;AAEA,UAAKC,SAAL,GAAiB,0BACf,YAAM;AACJ,UAAI,MAAKH,MAAL,IAAe,MAAKE,QAAxB,EAAkC;AAChC,YAAI,MAAKF,MAAL,CAAYT,QAAZ,IAAwB,MAAKS,MAAL,CAAYT,QAAZ,CAAqBa,MAArB,GAA8B,CAA1D,EAA6D;AAC3D,cAAMC,YAAY,GAAGnB,mBAAmB,CAAC,MAAKc,MAAN,EAAc,MAAKC,QAAnB,CAAxC;;AAEA,cAAMK,OAAO,gBAAGC,kBAAMC,aAAN,CAAoBC,wBAApB,EAAkC;AAChDC,YAAAA,IAAI,EAAEL,YAD0C;AAEhDM,YAAAA,YAAY,EAAE,IAFkC;AAGhDC,YAAAA,uBAAuB,EAAE,MAAKX,QAAL,CAAcX,IAAd,KAAuB;AAHA,WAAlC,CAAhB;;AAMAuB,+BAASC,MAAT,CAAgBR,OAAhB;AACD;AACF,OAZD,MAYO;AACLrB,QAAAA,GAAG,CAAC,MAAD,CAAH;AACD;AACF,KAjBc,EAkBf,EAlBe,EAmBf;AAAE8B,MAAAA,OAAO,EAAE,KAAX;AAAkBC,MAAAA,QAAQ,EAAE;AAA5B,KAnBe,CAAjB;AANY;AA2Bb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKjB,MAAL,GAAciB,CAAd;;AACA,WAAKd,SAAL;AACD;;;SAED,aAAYe,CAAZ,EAAe;AACb,WAAKjB,QAAL,GAAgBiB,CAAhB;AACD;;;WAED,6BAAoB,CAAE;;;kDAvCkBC,W","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport debounce from 'lodash/debounce';\nimport StimulusTabs from './stimulus-tabs';\nimport debug from 'debug';\n\nconst log = debug('pie-element:passage:print');\n\nconst preparePrintPassage = (model, opts) => {\n const instr = opts.role === 'instructor';\n\n return model.passages.map((passage, index) => {\n return {\n id: index,\n title: passage.title,\n text: passage.text,\n teacherInstructions: instr && passage.teacherInstructions,\n };\n });\n};\n\nexport default class PassagePrint extends HTMLElement {\n constructor() {\n super();\n this._model = null;\n this._options = null;\n this._session = [];\n\n this._rerender = debounce(\n () => {\n if (this._model && this._session) {\n if (this._model.passages && this._model.passages.length > 0) {\n const printPassage = preparePrintPassage(this._model, this._options);\n\n const element = React.createElement(StimulusTabs, {\n tabs: printPassage,\n disabledTabs: true,\n showTeacherInstructions: this._options.role === 'instructor',\n });\n\n ReactDOM.render(element, this);\n }\n } else {\n log('skip');\n }\n },\n 50,\n { leading: false, trailing: true },\n );\n }\n\n set model(s) {\n this._model = s;\n this._rerender();\n }\n\n set options(o) {\n this._options = o;\n }\n\n connectedCallback() {}\n}\n"],"file":"print.js"}
@@ -72,6 +72,9 @@ var styles = function styles(theme) {
72
72
  },
73
73
  breakSpaces: {
74
74
  whiteSpace: 'break-spaces'
75
+ },
76
+ teacherInstructions: {
77
+ marginBottom: theme.spacing.unit * 2
75
78
  }
76
79
  };
77
80
  };
@@ -172,6 +175,33 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
172
175
  }
173
176
 
174
177
  (0, _createClass2["default"])(StimulusTabs, [{
178
+ key: "renderInstructions",
179
+ value: function renderInstructions(showTeacherInstructions, teacherInstructions) {
180
+ var disabledTabs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
181
+
182
+ if (!showTeacherInstructions || !teacherInstructions) {
183
+ return;
184
+ }
185
+
186
+ var teacherInstructionsDiv = /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
187
+ tagName: "div",
188
+ className: "prompt",
189
+ defaultClassName: "teacher-instructions",
190
+ prompt: teacherInstructions
191
+ });
192
+
193
+ if (disabledTabs) {
194
+ return teacherInstructionsDiv;
195
+ }
196
+
197
+ return /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
198
+ labels: {
199
+ hidden: 'Show Teacher Instructions',
200
+ visible: 'Hide Teacher Instructions'
201
+ }
202
+ }, teacherInstructionsDiv);
203
+ }
204
+ }, {
175
205
  key: "render",
176
206
  value: function render() {
177
207
  var _this2 = this;
@@ -179,7 +209,8 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
179
209
  var _this$props = this.props,
180
210
  classes = _this$props.classes,
181
211
  tabs = _this$props.tabs,
182
- disabledTabs = _this$props.disabledTabs;
212
+ disabledTabs = _this$props.disabledTabs,
213
+ showTeacherInstructions = _this$props.showTeacherInstructions;
183
214
  var activeTab = this.state.activeTab;
184
215
 
185
216
  if (tabs && tabs.length > 1) {
@@ -203,7 +234,7 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
203
234
  dangerouslySetInnerHTML: {
204
235
  __html: _this2.parsedText(tab.title)
205
236
  }
206
- }), /*#__PURE__*/_react["default"].createElement(_renderUi.Purpose, {
237
+ }), _this2.renderInstructions(showTeacherInstructions, tab.teacherInstructions, disabledTabs), /*#__PURE__*/_react["default"].createElement(_renderUi.Purpose, {
207
238
  purpose: "passage-text"
208
239
  }, /*#__PURE__*/_react["default"].createElement("div", {
209
240
  className: "text",
@@ -251,7 +282,7 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
251
282
  id: "tabpanel-".concat(tab.id),
252
283
  role: "tabpanel",
253
284
  "aria-labelledby": "button-".concat(tab.id)
254
- }, /*#__PURE__*/_react["default"].createElement(_renderUi.Purpose, {
285
+ }, _this2.renderInstructions(showTeacherInstructions, tab.teacherInstructions), /*#__PURE__*/_react["default"].createElement(_renderUi.Purpose, {
255
286
  purpose: "passage-text"
256
287
  }, /*#__PURE__*/_react["default"].createElement("div", {
257
288
  key: tab.id,
@@ -261,14 +292,14 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
261
292
  }))) : null;
262
293
  }));
263
294
  } else if (tabs && tabs[0]) {
264
- return /*#__PURE__*/_react["default"].createElement("div", {
295
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, this.renderInstructions(showTeacherInstructions, tabs[0].teacherInstructions, disabledTabs), /*#__PURE__*/_react["default"].createElement("div", {
265
296
  className: (0, _classnames["default"])(classes.root, classes.tabContainer, classes.breakSpaces, 'passage')
266
297
  }, /*#__PURE__*/_react["default"].createElement("div", {
267
298
  className: "text",
268
299
  dangerouslySetInnerHTML: {
269
300
  __html: this.parsedText(tabs[0].text)
270
301
  }
271
- }));
302
+ })));
272
303
  }
273
304
  }
274
305
  }]);
@@ -280,9 +311,11 @@ StimulusTabs.propTypes = {
280
311
  tabs: _propTypes["default"].arrayOf(_propTypes["default"].shape({
281
312
  id: _propTypes["default"].number.isRequired,
282
313
  title: _propTypes["default"].string.isRequired,
283
- text: _propTypes["default"].string.isRequired
314
+ text: _propTypes["default"].string.isRequired,
315
+ teacherInstructions: _propTypes["default"].string
284
316
  }).isRequired).isRequired,
285
- disabledTabs: _propTypes["default"].bool
317
+ disabledTabs: _propTypes["default"].bool,
318
+ showTeacherInstructions: _propTypes["default"].bool
286
319
  };
287
320
 
288
321
  var _default = (0, _styles.withStyles)(styles)(StimulusTabs);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/stimulus-tabs.jsx"],"names":["styles","theme","root","flexGrow","backgroundColor","color","background","text","tab","fontSize","stickyTabs","position","top","title","textTransform","padding","spacing","unit","borderBottom","secondary","width","marginBottom","buttonContainer","tabContainer","breakSpaces","whiteSpace","StimulusTabs","activeTab","event","setState","setTimeout","tabChangeEvent","CustomEvent","detail","window","dispatchEvent","currentTabId","key","tabs","props","newTabIndex","currentIndex","findIndex","id","length","preventDefault","handleChange","div","document","createElement","innerHTML","replace","audio","querySelector","source","setAttribute","getAttribute","removeAttribute","appendChild","classes","disabledTabs","state","map","__html","parsedText","flexContainer","handleKeyDown","React","Component","propTypes","PropTypes","object","isRequired","arrayOf","shape","number","string","bool"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport { withStyles } from '@material-ui/core/styles';\nimport { color, Purpose } from '@pie-lib/pie-toolbox/render-ui';\nimport classNames from 'classnames';\n\nconst styles = (theme) => ({\n root: {\n flexGrow: 1,\n backgroundColor: color.background(),\n color: color.text(),\n },\n tab: {\n backgroundColor: color.background(),\n fontSize: 'inherit',\n },\n stickyTabs: {\n background: color.background(),\n position: 'sticky',\n top: 0,\n },\n title: {\n textTransform: 'uppercase',\n padding: `${theme.spacing.unit}px ${theme.spacing.unit * 3}px`,\n borderBottom: `2px solid ${color.secondary()}`,\n width: 'fit-content',\n marginBottom: theme.spacing.unit,\n },\n buttonContainer: {\n background: color.background(),\n },\n tabContainer: {\n backgroundColor: color.background(),\n color: color.text(),\n padding: theme.spacing.unit * 2,\n },\n breakSpaces: {\n whiteSpace: 'break-spaces',\n },\n});\n\nclass StimulusTabs extends React.Component {\n state = {\n activeTab: 0,\n };\n\n handleChange = (event, activeTab) => {\n this.setState(() => ({ activeTab }));\n setTimeout(() => {\n const tabChangeEvent = new CustomEvent('pie-ui-passage-tabChanged', {\n detail: {\n tab: activeTab,\n },\n });\n\n window.dispatchEvent(tabChangeEvent);\n });\n };\n\n handleKeyDown = (event, currentTabId) => {\n const { key } = event;\n const { tabs } = this.props;\n\n let newTabIndex = -1;\n const currentIndex = tabs.findIndex((tab) => tab.id === currentTabId);\n\n switch (key) {\n case 'ArrowRight':\n case 'ArrowDown':\n newTabIndex = (currentIndex + 1) % tabs.length;\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n newTabIndex = (currentIndex - 1 + tabs.length) % tabs.length;\n break;\n case 'Home':\n newTabIndex = 0;\n break;\n case 'End':\n newTabIndex = tabs.length - 1;\n break;\n case 'Enter':\n case ' ':\n newTabIndex = currentIndex;\n break;\n default:\n break;\n }\n\n if (newTabIndex !== -1) {\n event.preventDefault();\n this.handleChange(event, tabs[newTabIndex].id);\n }\n };\n\n parsedText = (text) => {\n // fix imported audio content for Safari PD-1391\n const div = document.createElement('div');\n div.innerHTML = text.replace(/(<br\\/>\\n)/g, '<br/>');\n\n const audio = div.querySelector('audio');\n if (audio) {\n const source = document.createElement('source');\n\n source.setAttribute('type', 'audio/mp3');\n source.setAttribute('src', audio.getAttribute('src'));\n\n audio.removeAttribute('src');\n audio.appendChild(source);\n }\n\n return div.innerHTML;\n };\n\n render() {\n const { classes, tabs, disabledTabs } = this.props;\n const { activeTab } = this.state;\n\n if (tabs && tabs.length > 1) {\n return disabledTabs ? (\n <div className={classNames(classes.root, 'passages')}>\n {tabs.map((tab) => (\n <div\n key={tab.id}\n className={`passage-${tab.id}`}\n id={`tabpanel-${tab.id}`}\n aria-labelledby={`tab-${tab.id}`}\n aria-controls={`tabpanel-${tab.id}`}\n tabIndex=\"0\"\n >\n <div\n className={classes.tabContainer}\n id={`tabpanel-${tab.id}`}\n role=\"tabpanel\"\n aria-labelledby={`button-${tab.id}`}\n >\n <div\n className={classNames(classes.title, 'title')}\n dangerouslySetInnerHTML={{ __html: this.parsedText(tab.title) }}\n />\n <Purpose purpose=\"passage-text\">\n <div className=\"text\" key={tab.id} dangerouslySetInnerHTML={{ __html: this.parsedText(tab.text) }} />\n </Purpose>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div className={classNames(classes.root, 'passages')}>\n <Tabs\n classes={{\n root: classes.stickyTabs,\n flexContainer: classes.buttonContainer,\n }}\n value={activeTab}\n onChange={this.handleChange}\n >\n {tabs.map((tab) => (\n <Tab\n className={classes.tab}\n key={tab.id}\n id={`button-${tab.id}`}\n label={\n <Purpose purpose=\"passage-title\">\n <span dangerouslySetInnerHTML={{ __html: this.parsedText(tab.title) }} />\n </Purpose>\n }\n value={tab.id}\n tabIndex={activeTab === tab.id ? 0 : -1}\n aria-controls={`tabpanel-${tab.id}`}\n aria-selected={activeTab === tab.id}\n onFocus={() => this.handleChange(null, tab.id)}\n onKeyDown={(event) => this.handleKeyDown(event, tab.id)}\n />\n ))}\n </Tabs>\n\n {tabs.map((tab) =>\n activeTab === tab.id ? (\n <div\n className={classes.tabContainer}\n key={tab.id}\n id={`tabpanel-${tab.id}`}\n role=\"tabpanel\"\n aria-labelledby={`button-${tab.id}`}\n >\n <Purpose purpose=\"passage-text\">\n <div key={tab.id} dangerouslySetInnerHTML={{ __html: this.parsedText(tab.text) }} />\n </Purpose>\n </div>\n ) : null,\n )}\n </div>\n );\n } else if (tabs && tabs[0]) {\n return (\n <div className={classNames(classes.root, classes.tabContainer, classes.breakSpaces, 'passage')}>\n <div className=\"text\" dangerouslySetInnerHTML={{ __html: this.parsedText(tabs[0].text) }} />\n </div>\n );\n }\n }\n}\n\nStimulusTabs.propTypes = {\n classes: PropTypes.object.isRequired,\n tabs: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired,\n }).isRequired,\n ).isRequired,\n disabledTabs: PropTypes.bool,\n};\n\nexport default withStyles(styles)(StimulusTabs);\n"],"file":"stimulus-tabs.js"}
1
+ {"version":3,"sources":["../src/stimulus-tabs.jsx"],"names":["styles","theme","root","flexGrow","backgroundColor","color","background","text","tab","fontSize","stickyTabs","position","top","title","textTransform","padding","spacing","unit","borderBottom","secondary","width","marginBottom","buttonContainer","tabContainer","breakSpaces","whiteSpace","teacherInstructions","StimulusTabs","activeTab","event","setState","setTimeout","tabChangeEvent","CustomEvent","detail","window","dispatchEvent","currentTabId","key","tabs","props","newTabIndex","currentIndex","findIndex","id","length","preventDefault","handleChange","div","document","createElement","innerHTML","replace","audio","querySelector","source","setAttribute","getAttribute","removeAttribute","appendChild","showTeacherInstructions","disabledTabs","teacherInstructionsDiv","hidden","visible","classes","state","map","__html","parsedText","renderInstructions","flexContainer","handleKeyDown","React","Component","propTypes","PropTypes","object","isRequired","arrayOf","shape","number","string","bool"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Collapsible, color, PreviewPrompt, Purpose } from '@pie-lib/pie-toolbox/render-ui';\nimport classNames from 'classnames';\n\nconst styles = (theme) => ({\n root: {\n flexGrow: 1,\n backgroundColor: color.background(),\n color: color.text(),\n },\n tab: {\n backgroundColor: color.background(),\n fontSize: 'inherit',\n },\n stickyTabs: {\n background: color.background(),\n position: 'sticky',\n top: 0,\n },\n title: {\n textTransform: 'uppercase',\n padding: `${theme.spacing.unit}px ${theme.spacing.unit * 3}px`,\n borderBottom: `2px solid ${color.secondary()}`,\n width: 'fit-content',\n marginBottom: theme.spacing.unit,\n },\n buttonContainer: {\n background: color.background(),\n },\n tabContainer: {\n backgroundColor: color.background(),\n color: color.text(),\n padding: theme.spacing.unit * 2,\n },\n breakSpaces: {\n whiteSpace: 'break-spaces',\n },\n teacherInstructions: {\n marginBottom: theme.spacing.unit * 2,\n },\n});\n\nclass StimulusTabs extends React.Component {\n state = {\n activeTab: 0,\n };\n\n handleChange = (event, activeTab) => {\n this.setState(() => ({ activeTab }));\n setTimeout(() => {\n const tabChangeEvent = new CustomEvent('pie-ui-passage-tabChanged', {\n detail: {\n tab: activeTab,\n },\n });\n\n window.dispatchEvent(tabChangeEvent);\n });\n };\n\n handleKeyDown = (event, currentTabId) => {\n const { key } = event;\n const { tabs } = this.props;\n\n let newTabIndex = -1;\n const currentIndex = tabs.findIndex((tab) => tab.id === currentTabId);\n\n switch (key) {\n case 'ArrowRight':\n case 'ArrowDown':\n newTabIndex = (currentIndex + 1) % tabs.length;\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n newTabIndex = (currentIndex - 1 + tabs.length) % tabs.length;\n break;\n case 'Home':\n newTabIndex = 0;\n break;\n case 'End':\n newTabIndex = tabs.length - 1;\n break;\n case 'Enter':\n case ' ':\n newTabIndex = currentIndex;\n break;\n default:\n break;\n }\n\n if (newTabIndex !== -1) {\n event.preventDefault();\n this.handleChange(event, tabs[newTabIndex].id);\n }\n };\n\n parsedText = (text) => {\n // fix imported audio content for Safari PD-1391\n const div = document.createElement('div');\n div.innerHTML = text.replace(/(<br\\/>\\n)/g, '<br/>');\n\n const audio = div.querySelector('audio');\n if (audio) {\n const source = document.createElement('source');\n\n source.setAttribute('type', 'audio/mp3');\n source.setAttribute('src', audio.getAttribute('src'));\n\n audio.removeAttribute('src');\n audio.appendChild(source);\n }\n\n return div.innerHTML;\n };\n\n renderInstructions(showTeacherInstructions, teacherInstructions, disabledTabs = false) {\n if (!showTeacherInstructions || !teacherInstructions) {\n return;\n }\n\n const teacherInstructionsDiv = (\n <PreviewPrompt\n tagName=\"div\"\n className=\"prompt\"\n defaultClassName=\"teacher-instructions\"\n prompt={teacherInstructions}\n />\n );\n\n if (disabledTabs) {\n return teacherInstructionsDiv;\n }\n\n return (\n <Collapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n >\n {teacherInstructionsDiv}\n </Collapsible>\n );\n }\n\n render() {\n const { classes, tabs, disabledTabs, showTeacherInstructions } = this.props;\n const { activeTab } = this.state;\n\n if (tabs && tabs.length > 1) {\n return disabledTabs ? (\n <div className={classNames(classes.root, 'passages')}>\n {tabs.map((tab) => (\n <div\n key={tab.id}\n className={`passage-${tab.id}`}\n id={`tabpanel-${tab.id}`}\n aria-labelledby={`tab-${tab.id}`}\n aria-controls={`tabpanel-${tab.id}`}\n tabIndex=\"0\"\n >\n <div\n className={classes.tabContainer}\n id={`tabpanel-${tab.id}`}\n role=\"tabpanel\"\n aria-labelledby={`button-${tab.id}`}\n >\n <div\n className={classNames(classes.title, 'title')}\n dangerouslySetInnerHTML={{ __html: this.parsedText(tab.title) }}\n />\n {this.renderInstructions(showTeacherInstructions, tab.teacherInstructions, disabledTabs)}\n <Purpose purpose=\"passage-text\">\n <div className=\"text\" key={tab.id} dangerouslySetInnerHTML={{ __html: this.parsedText(tab.text) }} />\n </Purpose>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div className={classNames(classes.root, 'passages')}>\n <Tabs\n classes={{\n root: classes.stickyTabs,\n flexContainer: classes.buttonContainer,\n }}\n value={activeTab}\n onChange={this.handleChange}\n >\n {tabs.map((tab) => (\n <Tab\n className={classes.tab}\n key={tab.id}\n id={`button-${tab.id}`}\n label={\n <Purpose purpose=\"passage-title\">\n <span dangerouslySetInnerHTML={{ __html: this.parsedText(tab.title) }} />\n </Purpose>\n }\n value={tab.id}\n tabIndex={activeTab === tab.id ? 0 : -1}\n aria-controls={`tabpanel-${tab.id}`}\n aria-selected={activeTab === tab.id}\n onFocus={() => this.handleChange(null, tab.id)}\n onKeyDown={(event) => this.handleKeyDown(event, tab.id)}\n />\n ))}\n </Tabs>\n\n {tabs.map((tab) =>\n activeTab === tab.id ? (\n <div\n className={classes.tabContainer}\n key={tab.id}\n id={`tabpanel-${tab.id}`}\n role=\"tabpanel\"\n aria-labelledby={`button-${tab.id}`}\n >\n {this.renderInstructions(showTeacherInstructions, tab.teacherInstructions)}\n\n <Purpose purpose=\"passage-text\">\n <div key={tab.id} dangerouslySetInnerHTML={{ __html: this.parsedText(tab.text) }} />\n </Purpose>\n </div>\n ) : null,\n )}\n </div>\n );\n } else if (tabs && tabs[0]) {\n return (\n <>\n {this.renderInstructions(showTeacherInstructions, tabs[0].teacherInstructions, disabledTabs)}\n <div className={classNames(classes.root, classes.tabContainer, classes.breakSpaces, 'passage')}>\n <div className=\"text\" dangerouslySetInnerHTML={{ __html: this.parsedText(tabs[0].text) }} />\n </div>\n </>\n );\n }\n }\n}\n\nStimulusTabs.propTypes = {\n classes: PropTypes.object.isRequired,\n tabs: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired,\n teacherInstructions: PropTypes.string,\n }).isRequired,\n ).isRequired,\n disabledTabs: PropTypes.bool,\n showTeacherInstructions: PropTypes.bool,\n};\n\nexport default withStyles(styles)(StimulusTabs);\n"],"file":"stimulus-tabs.js"}