@pie-element/math-inline 12.1.1-next.29 → 12.1.1-next.30

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 (106) hide show
  1. package/author.js +2 -0
  2. package/configure.js +2 -0
  3. package/controller.js +1 -0
  4. package/dist/author/configure.d.ts +25 -0
  5. package/dist/author/configure.js +114 -0
  6. package/dist/author/defaults.d.ts +186 -0
  7. package/dist/author/defaults.js +145 -0
  8. package/dist/author/general-config-block.d.ts +35 -0
  9. package/dist/author/general-config-block.js +390 -0
  10. package/dist/author/index.d.ts +61 -0
  11. package/dist/author/index.js +80 -0
  12. package/dist/author/response.d.ts +40 -0
  13. package/dist/author/response.js +238 -0
  14. package/dist/author/utils.d.ts +14 -0
  15. package/dist/author/utils.js +13 -0
  16. package/dist/browser/assets/Symbola-4c507403.woff2 +0 -0
  17. package/dist/browser/author/index.js +28211 -0
  18. package/dist/browser/author/index.js.map +1 -0
  19. package/dist/browser/controller/index.js +37791 -0
  20. package/dist/browser/controller/index.js.map +1 -0
  21. package/dist/browser/delivery/index.js +134 -0
  22. package/dist/browser/delivery/index.js.map +1 -0
  23. package/dist/browser/dist--pvq7WNe.js +324 -0
  24. package/dist/browser/dist--pvq7WNe.js.map +1 -0
  25. package/dist/browser/dist-BvAYH2DS.js +16774 -0
  26. package/dist/browser/dist-BvAYH2DS.js.map +1 -0
  27. package/dist/browser/dist-DCmVXYeO.js +1528 -0
  28. package/dist/browser/dist-DCmVXYeO.js.map +1 -0
  29. package/dist/browser/main-CmzEG2JL.js +973 -0
  30. package/dist/browser/main-CmzEG2JL.js.map +1 -0
  31. package/dist/browser/print/index.js +50 -0
  32. package/dist/browser/print/index.js.map +1 -0
  33. package/dist/controller/defaults.d.ts +44 -0
  34. package/dist/controller/defaults.js +39 -0
  35. package/dist/controller/index.d.ts +22 -0
  36. package/dist/controller/index.js +171 -0
  37. package/dist/controller/utils.d.ts +12 -0
  38. package/dist/controller/utils.js +7 -0
  39. package/dist/delivery/index.d.ts +22 -0
  40. package/dist/delivery/index.js +54 -0
  41. package/dist/delivery/main.d.ts +44 -0
  42. package/dist/delivery/main.js +606 -0
  43. package/dist/delivery/simple-question-block.d.ts +27 -0
  44. package/dist/delivery/simple-question-block.js +94 -0
  45. package/dist/delivery/utils.d.ts +12 -0
  46. package/dist/delivery/utils.js +7 -0
  47. package/dist/index.d.ts +1 -0
  48. package/dist/index.iife.d.ts +8 -0
  49. package/dist/index.iife.js +224 -0
  50. package/dist/index.js +2 -0
  51. package/dist/math-inline.css +2 -0
  52. package/dist/print/index.d.ts +15 -0
  53. package/dist/print/index.js +50 -0
  54. package/dist/runtime-support.d.ts +12 -0
  55. package/dist/runtime-support.js +12 -0
  56. package/module/assets/Symbola-4c507403.woff2 +0 -0
  57. package/module/print.js +25409 -0
  58. package/module/print.js.map +1 -0
  59. package/package.json +100 -26
  60. package/print.js +2 -0
  61. package/CHANGELOG.json +0 -2627
  62. package/CHANGELOG.md +0 -2473
  63. package/LICENSE.md +0 -5
  64. package/README.md +0 -3
  65. package/configure/CHANGELOG.json +0 -1652
  66. package/configure/CHANGELOG.md +0 -2101
  67. package/configure/lib/configure.js +0 -186
  68. package/configure/lib/configure.js.map +0 -1
  69. package/configure/lib/defaults.js +0 -185
  70. package/configure/lib/defaults.js.map +0 -1
  71. package/configure/lib/general-config-block.js +0 -525
  72. package/configure/lib/general-config-block.js.map +0 -1
  73. package/configure/lib/index.js +0 -136
  74. package/configure/lib/index.js.map +0 -1
  75. package/configure/lib/response.js +0 -369
  76. package/configure/lib/response.js.map +0 -1
  77. package/configure/lib/utils.js +0 -31
  78. package/configure/lib/utils.js.map +0 -1
  79. package/configure/package.json +0 -29
  80. package/controller/CHANGELOG.json +0 -1002
  81. package/controller/CHANGELOG.md +0 -1536
  82. package/controller/lib/defaults.js +0 -43
  83. package/controller/lib/defaults.js.map +0 -1
  84. package/controller/lib/index.js +0 -383
  85. package/controller/lib/index.js.map +0 -1
  86. package/controller/lib/utils.js +0 -11
  87. package/controller/lib/utils.js.map +0 -1
  88. package/controller/package.json +0 -26
  89. package/docs/config-schema.json +0 -2071
  90. package/docs/config-schema.json.md +0 -1533
  91. package/docs/demo/config.js +0 -8
  92. package/docs/demo/generate.js +0 -41
  93. package/docs/demo/index.html +0 -1
  94. package/docs/demo/session.js +0 -11
  95. package/docs/pie-schema.json +0 -1472
  96. package/docs/pie-schema.json.md +0 -845
  97. package/lib/index.js +0 -93
  98. package/lib/index.js.map +0 -1
  99. package/lib/main.js +0 -1030
  100. package/lib/main.js.map +0 -1
  101. package/lib/print.js +0 -92
  102. package/lib/print.js.map +0 -1
  103. package/lib/simple-question-block.js +0 -148
  104. package/lib/simple-question-block.js.map +0 -1
  105. package/lib/utils.js +0 -11
  106. package/lib/utils.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-CmzEG2JL.js","names":[],"sources":["../../../../lib-react/correct-answer-toggle/dist/expander.js","../../../../lib-react/icons/dist/correct-response-icon.js","../../../../lib-react/correct-answer-toggle/dist/index.js","../../src/delivery/utils.ts","../../src/delivery/simple-question-block.tsx","../../src/delivery/main.tsx"],"sourcesContent":["import { styled as e } from \"@mui/material/styles\";\nimport { CSSTransition as t } from \"react-transition-group\";\nimport { jsx as n } from \"react/jsx-runtime\";\nimport { useRef as r } from \"react\";\nimport i from \"prop-types\";\n//#region src/expander.tsx\nvar a = \"height ease-in 300ms, opacity ease-in 300ms\", o = e(\"div\")(() => ({\n\tposition: \"relative\",\n\theight: 0,\n\toverflow: \"hidden\",\n\tdisplay: \"flex\",\n\tvisibility: \"hidden\",\n\twidth: 0,\n\t\"&.enter\": {\n\t\ttransition: a,\n\t\topacity: 1,\n\t\theight: \"auto\",\n\t\twidth: \"auto\",\n\t\tvisibility: \"visible\",\n\t\tminHeight: \"25px\"\n\t},\n\t\"&.enter-done\": {\n\t\theight: \"auto\",\n\t\tvisibility: \"visible\",\n\t\twidth: \"auto\",\n\t\tminHeight: \"25px\"\n\t},\n\t\"&.exit\": {\n\t\ttransition: a,\n\t\topacity: 0,\n\t\theight: 0,\n\t\tvisibility: \"visible\",\n\t\twidth: 0\n\t},\n\t\"&.exit-done\": {\n\t\topacity: 0,\n\t\tvisibility: \"hidden\",\n\t\theight: 0,\n\t\twidth: 0\n\t}\n})), s = (e) => {\n\tlet { show: i, children: a, className: s } = e, c = r(null);\n\treturn /* @__PURE__ */ n(t, {\n\t\tnodeRef: c,\n\t\tin: i,\n\t\tappear: !0,\n\t\tmountOnEnter: !1,\n\t\ttimeout: 300,\n\t\tclassNames: {\n\t\t\tenter: \"enter\",\n\t\t\tenterDone: \"enter-done\",\n\t\t\texit: \"exit\",\n\t\t\texitDone: \"exit-done\"\n\t\t},\n\t\tchildren: /* @__PURE__ */ n(o, {\n\t\t\tref: c,\n\t\t\tclassName: s,\n\t\t\tchildren: a\n\t\t})\n\t});\n};\ns.propTypes = {\n\tshow: i.bool.isRequired,\n\tclassName: i.string,\n\tchildren: i.oneOfType([i.arrayOf(i.node), i.node]).isRequired\n};\n//#endregion\nexport { s as default };\n","import \"react\";\nimport e from \"prop-types\";\nimport { jsx as t, jsxs as n } from \"react/jsx-runtime\";\nimport { styled as r } from \"@mui/material/styles\";\n//#region src/correct-response-icon.tsx\nvar i = ({ bgFill: e, fgFill: r }) => /* @__PURE__ */ n(\"svg\", {\n\tpreserveAspectRatio: \"xMinYMin meet\",\n\tversion: \"1.1\",\n\tviewBox: \"-283 359 34 35\",\n\tstyle: { enableBackground: \"new -283 359 34 35\" },\n\tchildren: [\n\t\t/* @__PURE__ */ t(\"circle\", {\n\t\t\tcx: \"-266\",\n\t\t\tcy: \"375.9\",\n\t\t\tr: \"14\",\n\t\t\tfill: e\n\t\t}),\n\t\t/* @__PURE__ */ t(\"path\", {\n\t\t\td: \"M-280.5,375.9c0-8,6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5s-6.5,14.5-14.5,14.5S-280.5,383.9-280.5,375.9z\\n M-279.5,375.9c0,7.4,6.1,13.5,13.5,13.5c7.4,0,13.5-6.1,13.5-13.5s-6.1-13.5-13.5-13.5C-273.4,362.4-279.5,368.5-279.5,375.9z\",\n\t\t\tfill: e\n\t\t}),\n\t\t/* @__PURE__ */ t(\"polygon\", {\n\t\t\tpoints: \"-265.4,383.1 -258.6,377.2 -261.2,374.2 -264.3,376.9 -268.9,368.7 -272.4,370.6\",\n\t\t\tfill: r\n\t\t})\n\t]\n});\ni.propTypes = {\n\tbgFill: e.string.isRequired,\n\tfgFill: e.string.isRequired\n};\nvar a = ({ bgFill: e, fgFill: r, borderFill: i }) => /* @__PURE__ */ n(\"svg\", {\n\tpreserveAspectRatio: \"xMinYMin meet\",\n\tversion: \"1.1\",\n\tviewBox: \"-129.5 127 34 35\",\n\tstyle: { enableBackground: \"new -129.5 127 34 35\" },\n\tchildren: [\n\t\t/* @__PURE__ */ t(\"path\", {\n\t\t\tstyle: {\n\t\t\t\tfill: \"#D0CAC5\",\n\t\t\t\tstroke: \"#E6E3E0\",\n\t\t\t\tstrokeWidth: .75,\n\t\t\t\tstrokeMiterlimit: 10\n\t\t\t},\n\t\t\td: \"M-112.9,160.4c-8.5,0-15.5-6.9-15.5-15.5c0-8.5,6.9-15.5,15.5-15.5s15.5,6.9,15.5,15.5\\n C-97.4,153.5-104.3,160.4-112.9,160.4z\"\n\t\t}),\n\t\t/* @__PURE__ */ t(\"path\", {\n\t\t\tstyle: {\n\t\t\t\tfill: \"#B3ABA4\",\n\t\t\t\tstroke: \"#CDC7C2\",\n\t\t\t\tstrokeWidth: .5,\n\t\t\t\tstrokeMiterlimit: 10\n\t\t\t},\n\t\t\td: \"M-113.2,159c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-105.2,159-113.2,159z\"\n\t\t}),\n\t\t/* @__PURE__ */ t(\"circle\", {\n\t\t\tcx: \"-114.2\",\n\t\t\tcy: \"143.5\",\n\t\t\tr: \"14\",\n\t\t\tfill: e\n\t\t}),\n\t\t/* @__PURE__ */ t(\"path\", {\n\t\t\td: \"M-114.2,158c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-106.2,158-114.2,158z\\n M-114.2,130c-7.4,0-13.5,6.1-13.5,13.5s6.1,13.5,13.5,13.5s13.5-6.1,13.5-13.5S-106.8,130-114.2,130z\",\n\t\t\tfill: i\n\t\t}),\n\t\t/* @__PURE__ */ t(\"polygon\", {\n\t\t\tpoints: \"-114.8,150.7 -121.6,144.8 -119,141.8 -115.9,144.5 -111.3,136.3 -107.8,138.2\",\n\t\t\tfill: r\n\t\t})\n\t]\n});\na.propTypes = {\n\tbgFill: e.string.isRequired,\n\tfgFill: e.string.isRequired,\n\tborderFill: e.string.isRequired\n};\nvar o = r(\"div\")(({ size: e }) => ({\n\twidth: e || \"25px\",\n\theight: e || \"25px\"\n})), s = ({ open: e, size: n }) => /* @__PURE__ */ t(o, {\n\tsize: n,\n\tchildren: e ? /* @__PURE__ */ t(i, {\n\t\tbgFill: \"#bce2ff\",\n\t\tfgFill: \"#1a9cff\"\n\t}) : /* @__PURE__ */ t(a, {\n\t\tbgFill: \"white\",\n\t\tfgFill: \"#1a9cff\",\n\t\tborderFill: \"#bce2ff\"\n\t})\n});\ns.propTypes = {\n\topen: e.bool,\n\tsize: e.string\n}, s.defaultProps = { open: !1 };\n//#endregion\nexport { s as default };\n","import e from \"./expander.js\";\nimport { styled as t } from \"@mui/material/styles\";\nimport { CSSTransition as n } from \"react-transition-group\";\nimport { CorrectResponse as r } from \"@pie-lib/icons\";\nimport * as i from \"@pie-lib/render-ui\";\nimport { Readable as a, color as o } from \"@pie-lib/render-ui\";\nimport { jsx as s, jsxs as c } from \"react/jsx-runtime\";\nimport l from \"react\";\nimport u from \"prop-types\";\nimport d from \"@pie-lib/translator\";\n//#region src/index.tsx\nfunction f(e) {\n\treturn typeof e == \"function\" || typeof e == \"object\" && !!e && typeof e.$$typeof == \"symbol\";\n}\nfunction p(e, t) {\n\treturn !e || f(e) ? e : f(e.default) ? e.default : t && f(e[t]) ? e[t] : t && f(e[t]?.default) ? e[t].default : e;\n}\nvar m = p(a, \"Readable\") || p(_.Readable, \"Readable\"), h = i, g = h.default, _ = g && typeof g == \"object\" ? g : h, { translator: v } = d, y = {\n\tWebkitTouchCallout: \"none\",\n\tWebkitUserSelect: \"none\",\n\tKhtmlUserSelect: \"none\",\n\tMozUserSelect: \"none\",\n\tmsUserSelect: \"none\",\n\tuserSelect: \"none\"\n}, b = t(\"div\")(() => ({\n\twidth: \"100%\",\n\tcursor: \"pointer\"\n})), x = t(\"div\")(() => ({\n\tmargin: \"0 auto\",\n\ttextAlign: \"center\",\n\tdisplay: \"flex\"\n})), S = t(\"div\")(() => ({\n\twidth: \"fit-content\",\n\tminWidth: \"140px\",\n\talignSelf: \"center\",\n\tverticalAlign: \"middle\",\n\tcolor: `var(--correct-answer-toggle-label-color, ${o.text()})`,\n\tfontWeight: \"normal\",\n\t...y\n})), C = t(\"div\")(() => ({\n\tposition: \"absolute\",\n\twidth: \"25px\",\n\t\"&.enter\": { opacity: \"0\" },\n\t\"&.enter-active\": {\n\t\topacity: \"1\",\n\t\ttransition: \"opacity 0.3s ease-in\"\n\t},\n\t\"&.exit\": { opacity: \"1\" },\n\t\"&.exit-active\": {\n\t\topacity: \"0\",\n\t\ttransition: \"opacity 0.3s ease-in\"\n\t}\n})), w = t(\"div\")(() => ({\n\twidth: \"25px\",\n\tmarginRight: \"5px\",\n\tdisplay: \"flex\",\n\talignItems: \"center\"\n})), T = class t extends l.Component {\n\tstatic propTypes = {\n\t\tonToggle: u.func,\n\t\ttoggled: u.bool,\n\t\tshow: u.bool,\n\t\thideMessage: u.string,\n\t\tshowMessage: u.string,\n\t\tclassName: u.string,\n\t\tlanguage: u.string\n\t};\n\tstatic defaultProps = {\n\t\tshowMessage: \"Show correct answer\",\n\t\thideMessage: \"Hide correct answer\",\n\t\tshow: !1,\n\t\ttoggled: !1\n\t};\n\tconstructor(e) {\n\t\tsuper(e), this.state = { show: e.show }, this.openIconRef = l.createRef(), this.closedIconRef = l.createRef(), t.defaultProps = {\n\t\t\t...t.defaultProps,\n\t\t\tshowMessage: v.t(\"common:showCorrectAnswer\", { lng: e.language }),\n\t\t\thideMessage: v.t(\"common:hideCorrectAnswer\", { lng: e.language })\n\t\t};\n\t}\n\tonClick() {\n\t\tthis.props.onToggle(!this.props.toggled);\n\t}\n\tonTouch(e) {\n\t\te.preventDefault(), this.props.onToggle(!this.props.toggled);\n\t}\n\tUNSAFE_componentWillReceiveProps(e) {\n\t\tthis.setState({ show: e.show }), e.language !== this.props?.language && (t.defaultProps = {\n\t\t\t...t.defaultProps,\n\t\t\tshowMessage: v.t(\"common:showCorrectAnswer\", { lng: e.language }),\n\t\t\thideMessage: v.t(\"common:hideCorrectAnswer\", { lng: e.language })\n\t\t});\n\t}\n\trender() {\n\t\tlet { className: t, toggled: i, hideMessage: a, showMessage: o } = this.props;\n\t\treturn /* @__PURE__ */ s(b, {\n\t\t\tclassName: t,\n\t\t\tchildren: /* @__PURE__ */ s(e, {\n\t\t\t\tshow: this.state.show,\n\t\t\t\tchildren: /* @__PURE__ */ c(x, {\n\t\t\t\t\tonClick: this.onClick.bind(this),\n\t\t\t\t\tonTouchEnd: this.onTouch.bind(this),\n\t\t\t\t\tchildren: [/* @__PURE__ */ c(w, { children: [/* @__PURE__ */ s(n, {\n\t\t\t\t\t\tnodeRef: this.openIconRef,\n\t\t\t\t\t\ttimeout: 400,\n\t\t\t\t\t\tin: i,\n\t\t\t\t\t\texit: !i,\n\t\t\t\t\t\tclassNames: {\n\t\t\t\t\t\t\tenter: \"enter\",\n\t\t\t\t\t\t\tenterActive: \"enter-active\",\n\t\t\t\t\t\t\texit: \"exit\",\n\t\t\t\t\t\t\texitActive: \"exit-active\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildren: /* @__PURE__ */ s(C, {\n\t\t\t\t\t\t\tref: this.openIconRef,\n\t\t\t\t\t\t\tchildren: /* @__PURE__ */ s(r, { open: i }, \"correct-open\")\n\t\t\t\t\t\t})\n\t\t\t\t\t}), /* @__PURE__ */ s(n, {\n\t\t\t\t\t\tnodeRef: this.closedIconRef,\n\t\t\t\t\t\ttimeout: 5e3,\n\t\t\t\t\t\tin: !i,\n\t\t\t\t\t\texit: i,\n\t\t\t\t\t\tclassNames: {\n\t\t\t\t\t\t\tenter: \"enter\",\n\t\t\t\t\t\t\tenterActive: \"enter-active\",\n\t\t\t\t\t\t\texit: \"exit\",\n\t\t\t\t\t\t\texitActive: \"exit-active\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildren: /* @__PURE__ */ s(C, {\n\t\t\t\t\t\t\tref: this.closedIconRef,\n\t\t\t\t\t\t\tchildren: /* @__PURE__ */ s(r, { open: i }, \"correct-closed\")\n\t\t\t\t\t\t})\n\t\t\t\t\t})] }), /* @__PURE__ */ s(m, {\n\t\t\t\t\t\tfalse: !0,\n\t\t\t\t\t\tchildren: /* @__PURE__ */ s(S, {\n\t\t\t\t\t\t\t\"aria-hidden\": !this.state.show,\n\t\t\t\t\t\t\tchildren: i ? a : o\n\t\t\t\t\t\t})\n\t\t\t\t\t})]\n\t\t\t\t})\n\t\t\t})\n\t\t});\n\t}\n};\n//#endregion\nexport { T as CorrectAnswerToggle, T as default };\n","// @ts-nocheck\n/**\n * @synced-from pie-elements/packages/math-inline/src/utils.js\n * @auto-generated\n *\n * This file is automatically synced from pie-elements and converted to TypeScript.\n * Manual edits will be overwritten on next sync.\n * To make changes, edit the upstream JavaScript file and run sync again.\n */\n\nexport const ResponseTypes = {\n advanced: 'Advanced Multi',\n simple: 'Simple',\n};\n","// @ts-nocheck\n/**\n * @synced-from pie-elements/packages/math-inline/src/simple-question-block.jsx\n * @auto-generated\n *\n * This file is automatically synced from pie-elements and converted to TypeScript.\n * Manual edits will be overwritten on next sync.\n * To make changes, edit the upstream JavaScript file and run sync again.\n */\n\nimport React from 'react';\nimport { MathToolbar } from '@pie-lib/math-toolbar';\nimport { mq } from '@pie-lib/math-input';\nimport { styled } from '@mui/material/styles';\nimport PropTypes from 'prop-types';\nimport { color } from '@pie-lib/render-ui';\n\nconst Expression: any = styled('div')(({ theme }) => ({\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n padding: theme.spacing(1),\n}));\n\nconst Static: any = styled('div', {\n shouldForwardProp: (prop) => !['isCorrect', 'isIncorrect'].includes(prop),\n})(({ theme, isCorrect, isIncorrect }) => ({\n color: color.text(),\n background: color.background(),\n border: isCorrect\n ? `2px solid ${color.correct()} !important`\n : isIncorrect\n ? `2px solid ${color.incorrect()} !important`\n : `1px solid ${color.primaryLight()}`,\n width: 'fit-content',\n fontSize: '1rem',\n padding: isCorrect || isIncorrect ? theme.spacing(1) : theme.spacing(0.5),\n letterSpacing: (isCorrect || isIncorrect) ? '0.5px' : 'normal',\n '& > .mq-math-mode': {\n '& > .mq-hasCursor': {\n '& > .mq-cursor': {\n display: 'none',\n },\n },\n },\n}));\n\n// CSS for MathToolbar classNames (used as strings)\nif (typeof document !== 'undefined') {\n const styleId = 'math-inline-simple-question-styles';\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = `\n .response-editor {\n display: flex;\n justify-content: center;\n width: auto;\n max-width: fit-content;\n height: auto;\n text-align: left;\n padding: 8px;\n }\n .response-editor.mq-math-mode {\n border: 1px solid ${color.primaryLight()};\n }\n `;\n document.head.appendChild(style);\n }\n}\n\nexport class SimpleQuestionBlock extends React.Component {\n static propTypes = {\n onSimpleResponseChange: PropTypes.func,\n model: PropTypes.object.isRequired,\n emptyResponse: PropTypes.bool,\n session: PropTypes.object.isRequired,\n showCorrect: PropTypes.bool,\n onSubFieldFocus: PropTypes.func.isRequired,\n showKeypad: PropTypes.bool.isRequired,\n };\n\n constructor(props) {\n super(props);\n\n this.mathToolBarId = `math-toolbar-${new Date().getTime()}`;\n }\n\n mathToolBarContainsTarget = (e) => document.getElementById(this.mathToolBarId).contains(e.target);\n\n handleClick: any = (e) => {\n try {\n if (!this.mathToolBarContainsTarget(e)) {\n this.setState({ showKeypad: false });\n }\n } catch (e) {\n // console.log(e.toString());\n }\n };\n\n onFocus: any = () => {\n const { onSubFieldFocus } = this.props;\n\n onSubFieldFocus(this.mathToolBarId);\n };\n\n render() {\n const { model, showCorrect, session, emptyResponse,onSimpleResponseChange, showKeypad } = this.props;\n const { config, disabled, correctness } = model || {};\n\n if (!config) {\n return;\n }\n\n const correct = correctness && correctness.correct;\n const { responses, equationEditor } = config;\n\n return (\n <Expression data-keypad={true}>\n {showCorrect || disabled ? (\n <Static\n isIncorrect={!emptyResponse && !correct && !showCorrect}\n isCorrect={!emptyResponse && (correct || showCorrect)}\n >\n <mq.Static\n latex={showCorrect ? responses && responses.length && responses[0].answer : session.response || ''}\n />\n </Static>\n ) : (\n <div id={this.mathToolBarId}>\n <MathToolbar\n classNames={{ editor: 'response-editor' }}\n latex={session.response}\n keypadMode={equationEditor}\n onChange={onSimpleResponseChange}\n onDone={() => {}}\n onFocus={this.onFocus}\n controlledKeypad={true}\n showKeypad={showKeypad}\n hideDoneButton={true}\n />\n </div>\n )}\n </Expression>\n );\n }\n}\n\nexport default SimpleQuestionBlock;\n","// @ts-nocheck\n/**\n * @synced-from pie-elements/packages/math-inline/src/main.jsx\n * @auto-generated\n *\n * This file is automatically synced from pie-elements and converted to TypeScript.\n * Manual edits will be overwritten on next sync.\n * To make changes, edit the upstream JavaScript file and run sync again.\n */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport { mq, HorizontalKeypad, updateSpans, registerEmbed, applyStaticMath } from '@pie-lib/math-input';\nimport { Feedback as FeedbackImport, Collapsible as CollapsibleImport, Readable as ReadableImport, hasText, hasMedia, PreviewPrompt as PreviewPromptImport, UiLayout as UiLayoutImport } from '@pie-lib/render-ui';\n\nfunction isRenderableReactInteropType(value: any) {\n return (\n typeof value === 'function' ||\n (typeof value === 'object' && value !== null && typeof value.$$typeof === 'symbol')\n );\n}\n\nfunction unwrapReactInteropSymbol(maybeSymbol: any, namedExport?: string) {\n if (!maybeSymbol) return maybeSymbol;\n if (isRenderableReactInteropType(maybeSymbol)) return maybeSymbol;\n if (isRenderableReactInteropType(maybeSymbol.default)) return maybeSymbol.default;\n if (namedExport && isRenderableReactInteropType(maybeSymbol[namedExport])) {\n return maybeSymbol[namedExport];\n }\n if (namedExport && isRenderableReactInteropType(maybeSymbol[namedExport]?.default)) {\n return maybeSymbol[namedExport].default;\n }\n return maybeSymbol;\n}\nconst UiLayout = unwrapReactInteropSymbol(UiLayoutImport, 'UiLayout') || unwrapReactInteropSymbol(renderUi.UiLayout, 'UiLayout');\nconst PreviewPrompt = unwrapReactInteropSymbol(PreviewPromptImport, 'PreviewPrompt') || unwrapReactInteropSymbol(renderUi.PreviewPrompt, 'PreviewPrompt');\nconst Readable = unwrapReactInteropSymbol(ReadableImport, 'Readable') || unwrapReactInteropSymbol(renderUi.Readable, 'Readable');\nconst Collapsible = unwrapReactInteropSymbol(CollapsibleImport, 'Collapsible') || unwrapReactInteropSymbol(renderUi.Collapsible, 'Collapsible');\nconst Feedback = unwrapReactInteropSymbol(FeedbackImport, 'Feedback') || unwrapReactInteropSymbol(renderUi.Feedback, 'Feedback');\nimport * as RenderUiNamespace from '@pie-lib/render-ui';\nconst renderUiNamespaceAny = RenderUiNamespace as any;\nconst renderUiDefaultMaybe = renderUiNamespaceAny['default'];\nconst renderUi =\n renderUiDefaultMaybe && typeof renderUiDefaultMaybe === 'object'\n ? renderUiDefaultMaybe\n : renderUiNamespaceAny;\nimport { renderMath } from '@pie-element/shared-math-rendering-mathjax';\nimport { styled } from '@mui/material/styles';\nimport Tooltip from '@mui/material/Tooltip';\nimport { ResponseTypes } from './utils.js';\nimport { isEmpty, isEqual } from '@pie-element/shared-lodash';\nimport SimpleQuestionBlock from './simple-question-block.js';\nimport { color } from '@pie-lib/render-ui';\nimport Translator from '@pie-lib/translator';\nimport ReactDOM from 'react-dom';\nconst { translator } = Translator;\nlet registered = false;\n\nconst NEWLINE_LATEX = /\\\\newline/g;\nconst REGEX = /{{response}}/gm;\nconst DEFAULT_KEYPAD_VARIANT = 6;\n\n// !!! If you're using Chrome but have selected the \"iPad\" device in Chrome Developer Tools, the navigator.userAgent string may still report as\n// Safari because Chrome on iOS actually uses the Safari rendering engine under the hood due to Apple's restrictions on third-party browser engines.\n// When you select the \"iPad\" device in Chrome Developer Tools, you're essentially emulating the behavior of Safari on an iPad, including the user agent string.\n// Therefore, even though you're using Chrome, the user agent string will resemble that of Safari on an iPad.\n// Since the regular expression /^((?!chrome|android).)*safari/i checks for the presence of \"safari\" in the user agent string while excluding \"chrome\" and \"android\",\n// it will return true in this case because \"safari\" is present in the user agent string emulated by Chrome when in iPad mode.\nconst IS_SAFARI = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\nfunction generateAdditionalKeys(keyData = []) {\n return keyData.map((key) => ({\n name: key,\n latex: key,\n write: key,\n label: key,\n }));\n}\n\nfunction isChildOfCurrentPieElement(child, parent) {\n let node = child;\n while (node !== null) {\n if (parent && node === parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\nfunction getKeyPadWidth(additionalKeys = [], equationEditor) {\n return Math.floor(additionalKeys.length / 5) * 30 + (equationEditor === 'miscellaneous' ? 600 : 500);\n}\n\nfunction prepareForStatic(model, state) {\n const { config, disabled } = model || {};\n const { expression, responses, printMode, alwaysShowCorrect } = config || {};\n\n if (config && expression) {\n const modelExpression = expression;\n\n if (state.showCorrect) {\n return responses && responses.length && responses[0].answer;\n }\n\n let answerBlocks = 1; // assume one at least\n // build out local state model using responses declared in expression\n\n return (modelExpression || '')\n .replace(REGEX, function () {\n const answer = state.session.answers[`r${answerBlocks}`];\n\n if (printMode && !alwaysShowCorrect) {\n const blankSpace = '\\\\ \\\\ '.repeat(30) + '\\\\newline ';\n\n return `\\\\MathQuillMathField[r${answerBlocks++}]{${blankSpace.repeat(3)}}`;\n }\n\n if (disabled) {\n return `\\\\embed{answerBlock}[r${answerBlocks++}]`;\n }\n\n return `\\\\MathQuillMathField[r${answerBlocks++}]{${(answer && answer.value) || ''}}`;\n })\n .replace(NEWLINE_LATEX, '\\\\embed{newLine}[]');\n }\n}\n\nfunction parseAnswers(session, model) {\n const answers = {};\n\n if (model.config && model.config.expression) {\n let answerBlocks = 1; // assume one at least\n // build out local state model using responses declared in expression\n\n (model.config.expression || '').replace(REGEX, () => {\n answers[`r${answerBlocks}`] = {\n value:\n (session &&\n session.answers &&\n session.answers[`r${answerBlocks}`] &&\n session.answers[`r${answerBlocks}`].value) ||\n '',\n };\n\n answerBlocks += 1;\n });\n }\n return answers;\n}\n\nexport class Main extends React.Component {\n static propTypes = {\n session: PropTypes.object.isRequired,\n onSessionChange: PropTypes.func,\n model: PropTypes.object.isRequired,\n };\n\n constructor(props) {\n super(props);\n const { model, session } = props;\n const answers = parseAnswers(session, model);\n\n this.state = {\n session: { ...props.session, answers },\n activeAnswerBlock: '',\n showCorrect: this.props.model.config.alwaysShowCorrect || false,\n tooltipContainerRef: React.createRef(),\n };\n }\n\n UNSAFE_componentWillMount() {\n if (typeof window !== 'undefined') {\n if (!registered) {\n registerEmbed('answerBlock', (data) => {\n const classNames = getBlockClassNames();\n return {\n htmlString: `<div class=\"${classNames.blockContainer}\">\n <div class=\"${classNames.blockResponse}\" id=\"${data}Index\">R</div>\n <div class=\"${classNames.blockMath}\">\n <span id=\"${data}\"></span>\n </div>\n </div>`,\n text: () => 'text',\n latex: () => `\\\\embed{answerBlock}[${data}]`,\n };\n });\n\n registered = true;\n }\n }\n }\n\n handleAnswerBlockDomUpdate: any = () => {\n const { model } = this.props;\n const { session, showCorrect } = this.state;\n const answers = session.answers;\n\n if (this.root && model.disabled && !showCorrect) {\n Object.keys(answers).forEach((answerId) => {\n const el = this.root.querySelector(`#${answerId}`);\n const indexEl = this.root.querySelector(`#${answerId}Index`);\n // const correct = model.correctness && model.correctness.correct;\n\n if (el) {\n const answer = answers[answerId];\n\n applyStaticMath(el, (answer && answer.value) || '');\n\n if (!model.view) {\n // for now, we're not going to be showing individual response correctness\n // TODO re-attach the classes once we are\n // el.parentElement.parentElement.classList.add(\n // correct ? 'correct' : 'incorrect'\n // );\n } else {\n el.parentElement.parentElement.classList.remove('correct');\n el.parentElement.parentElement.classList.remove('incorrect');\n }\n\n // For now, we're not going to be indexing response blocks\n // TODO go back to indexing once we support individual response correctness\n // indexEl.textContent = `R${idx + 1}`;\n indexEl.textContent = 'R';\n }\n });\n }\n\n renderMath(this.root);\n };\n\n countResponseOccurrences(expression) {\n const pattern = /\\{\\{response\\}\\}/g;\n const matches = expression?.match(pattern);\n\n return matches ? matches.length : 0;\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { config } = this.props.model;\n const { config: nextConfig = {} } = nextProps.model || {};\n\n const { session } = this.props;\n const { session: nextSession = {} } = nextProps || {};\n\n // in case session props changed in parent, we need to catch this and update local state\n // example: when env is changing in pieoneer\n if (session && nextSession && !isEqual(session.answers, nextSession.answers)) {\n this.setState({\n session: { ...nextSession, answers: parseAnswers(nextSession, this.props.model) },\n });\n }\n\n // check if the note is the default one for prev language and change to the default one for new language\n // this check is necessary in order to diferanciate between default and authour defined note\n // and only change between languages for default ones\n if (\n config.note &&\n config.language &&\n config.language !== nextConfig.language &&\n config.note === translator.t('mathInline.primaryCorrectWithAlternates', { lng: config.language })\n ) {\n config.note = translator.t('mathInline.primaryCorrectWithAlternates', { lng: nextConfig.language });\n }\n\n if ((config.env && config.env.mode !== 'evaluate') || (nextConfig.env && nextConfig.env.mode !== 'evaluate')) {\n this.setState({ ...this.state.session, showCorrect: false });\n }\n\n if (nextConfig.alwaysShowCorrect) {\n this.setState({ showCorrect: true });\n }\n\n if (this.countResponseOccurrences(config.expression) < this.countResponseOccurrences(nextConfig.expression)) {\n setTimeout(() => this.updateAria(), 100);\n }\n\n if (\n (config && config.responses && config.responses.length !== nextConfig.responses.length) ||\n (!config && nextConfig && nextConfig.responses) ||\n (config && nextConfig && config.expression !== nextConfig.expression)\n ) {\n const newAnswers = {};\n const answers = this.state.session.answers;\n\n let answerBlocks = 1; // assume one at least\n\n // build out local state model using responses declared in expression\n (nextConfig.expression || '').replace(REGEX, () => {\n newAnswers[`r${answerBlocks}`] = {\n value: (answers && answers[`r${answerBlocks}`] && answers[`r${answerBlocks}`].value) || '',\n };\n answerBlocks++;\n });\n\n this.setState(\n (state) => ({\n session: {\n ...state.session,\n completeAnswer: this.mqStatic && this.mqStatic.mathField.latex(),\n answers: newAnswers,\n },\n }),\n this.handleAnswerBlockDomUpdate,\n );\n }\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n const sameModel = isEqual(this.props.model, nextProps.model);\n const sameState = isEqual(this.state, nextState);\n\n return !sameModel || !sameState;\n }\n\n componentDidMount() {\n this.handleAnswerBlockDomUpdate();\n this.updateAria();\n setTimeout(() => renderMath(this.root), 100);\n }\n\n componentDidUpdate(prevProps, prevState) {\n this.handleAnswerBlockDomUpdate();\n\n const prevResponseType = prevProps.model?.config?.responseType;\n const currentResponseType = this.props.model?.config?.responseType;\n\n if (prevResponseType !== currentResponseType) {\n this.updateAria();\n }\n }\n\n updateAria: any = () => {\n if (this.root) {\n // Update aria-hidden for .mq-selectable elements\n const selectableElements = this.root.querySelectorAll('.mq-selectable');\n selectableElements.forEach((elem) => elem.setAttribute('aria-hidden', 'true'));\n\n // Update aria-label for textarea elements and add aria-describedby\n const textareaElements = this.root.querySelectorAll('textarea');\n textareaElements.forEach((elem, index) => {\n elem.setAttribute('aria-label', 'Enter answer.');\n\n // Create a unique id for each instructions element\n const instructionsId = `instructions-${index}`;\n\n // Find the parent element that contains the textarea\n const parent = elem.closest('.mq-textarea');\n\n if (parent) {\n // Create or find the instructions element within the parent\n let instructionsElement = parent.querySelector(`#${instructionsId}`);\n\n if (!instructionsElement) {\n instructionsElement = document.createElement('span');\n instructionsElement.id = instructionsId;\n instructionsElement.className = 'sr-only';\n instructionsElement.textContent =\n 'This field supports both keypad and keyboard input. Use the keyboard to access and interact with the on-screen math keypad, which accepts LaTeX markup. Use the down arrow key to open the keypad and navigate its buttons. Use the escape key to close the keypad and return to the input field.';\n parent.insertBefore(instructionsElement, elem);\n }\n\n elem.setAttribute('aria-describedby', instructionsId);\n }\n });\n }\n };\n\n focusFirstKeypadElement: any = () => {\n setTimeout(() => {\n const keypadElement = document.querySelector('[data-keypad]');\n\n if (keypadElement) {\n const firstButton = keypadElement.querySelector(\"button, [role='button']\");\n\n if (firstButton) {\n firstButton.focus();\n }\n }\n }, 0);\n };\n\n handleKeyDown: any = (event, id) => {\n const isTrigerredFromActualPieElement = isChildOfCurrentPieElement(event.target, this.root);\n const isAnswerInputFocused =\n this.mqStatic && this.mqStatic.inputRef?.current\n ? this.mqStatic.inputRef?.current.contains(document.activeElement)\n : document.activeElement?.getAttribute('aria-label') === 'Enter answer.';\n const { key, type } = event;\n const isClickOrTouchEvent = type === 'click' || type === 'touchstart';\n\n if (isAnswerInputFocused && (key === 'ArrowDown' || isClickOrTouchEvent)) {\n if (this.state.activeAnswerBlock !== id && isTrigerredFromActualPieElement) {\n this.cleanupKeyDownListener();\n this.setState({ activeAnswerBlock: id }, () => {\n this.onSubFieldFocus(id);\n if (key === 'ArrowDown') {\n this.focusFirstKeypadElement();\n }\n });\n }\n } else if (event.key === 'Escape') {\n this.setState({ activeAnswerBlock: '' });\n }\n };\n\n onSubFieldFocus: any = (id) => {\n if (!this.handleEvent) {\n this.handleEvent = (event) => {\n this.handleKeyDown(event, id);\n };\n\n document.addEventListener('keydown', this.handleEvent);\n document.addEventListener('click', this.handleEvent);\n document.addEventListener('touchstart', this.handleEvent);\n }\n };\n\n cleanupKeyDownListener: any = () => {\n if (this.handleEvent) {\n document.removeEventListener('keydown', this.handleEvent);\n document.removeEventListener('click', this.handleEvent);\n document.removeEventListener('touchstart', this.handleEvent);\n this.handleEvent = null;\n }\n };\n\n componentWillUnmount() {\n if (this.cleanupKeyDownListener) {\n this.cleanupKeyDownListener();\n }\n }\n\n onDone: any = () => {};\n\n onSimpleResponseChange: any = (response) => {\n this.setState((state) => ({ session: { ...state.session, response } }), this.callOnSessionChange);\n };\n\n toNodeData: any = (data) => {\n if (!data) {\n return;\n }\n\n const { type, value } = data;\n\n if (type === 'command' || type === 'cursor') {\n return data;\n } else if (type === 'answer') {\n return { type: 'answer', ...data };\n } else if (value === 'clear') {\n return { type: 'clear' };\n } else {\n return { type: 'write', value };\n }\n };\n\n setInput: any = (input) => {\n this.input = input;\n };\n\n onClick: any = (data) => {\n const scrollX = window.scrollX;\n const scrollY = window.scrollY;\n const c = this.toNodeData(data);\n\n if (c.type === 'clear') {\n this.input.clear();\n } else if (c.type === 'command') {\n if (Array.isArray(c.value)) {\n c.value.forEach((vv) => {\n this.input.cmd(vv);\n });\n } else {\n this.input.cmd(c.value);\n }\n } else if (c.type === 'cursor') {\n this.input.keystroke(c.value);\n } else {\n this.input.write(c.value);\n }\n\n this.input.focus();\n requestAnimationFrame(() => {\n window.scrollTo(scrollX, scrollY);\n requestAnimationFrame(() => window.scrollTo(scrollX, scrollY));\n });\n };\n\n callOnSessionChange: any = () => {\n const { onSessionChange } = this.props;\n\n if (onSessionChange) {\n onSessionChange(this.state.session);\n }\n };\n\n toggleShowCorrect: any = (show) => {\n this.setState({ showCorrect: show }, this.handleAnswerBlockDomUpdate);\n };\n\n subFieldChanged: any = (name, subfieldValue) => {\n updateSpans();\n\n if (name) {\n const scrollX = window.scrollX;\n const scrollY = window.scrollY;\n this.setState(\n (state) => ({\n session: {\n ...state.session,\n completeAnswer: this.mqStatic && this.mqStatic.mathField.latex(),\n answers: {\n ...state.session.answers,\n [name]: { value: subfieldValue },\n },\n },\n }),\n () => {\n this.callOnSessionChange();\n requestAnimationFrame(() => {\n window.scrollTo(scrollX, scrollY);\n });\n },\n );\n }\n };\n\n getFieldName: any = (changeField, fields) => {\n const { answers } = this.state.session;\n\n if (Object.keys(answers || {}).length) {\n const keys = Object.keys(answers);\n\n return keys.find((k) => {\n const tf = fields[k];\n\n return tf && tf.id == changeField.id;\n });\n }\n };\n\n onBlur: any = (e) => {\n const { relatedTarget, currentTarget } = e || {};\n\n // our keypad is in tooltip\n // in this way we see if event was triggered from the keypad\n const isKeypadOpen = currentTarget && currentTarget.closest('[role=tooltip]');\n\n function getParentWithRoleTooltip(element, depth = 0) {\n // only run this max 16 times\n if (!element || depth >= 16) return null;\n\n const parent = element.offsetParent;\n\n if (!parent) return null;\n\n if (parent.getAttribute('role') === 'tooltip') {\n return parent;\n }\n\n return getParentWithRoleTooltip(parent, depth + 1);\n }\n\n function getDeepChildDataKeypad(element, depth = 0) {\n // only run this max 4 times\n if (!element || depth >= 4) return null;\n\n const child = element?.children?.[0];\n\n if (!child) return null;\n\n if (child.attributes && child.attributes['data-keypad']) {\n return child;\n }\n\n return getDeepChildDataKeypad(child, depth + 1);\n }\n\n const parentWithTooltipRole = getParentWithRoleTooltip(relatedTarget);\n const childWithDataKeypad = parentWithTooltipRole ? getDeepChildDataKeypad(parentWithTooltipRole) : null;\n\n if (!relatedTarget || !currentTarget || !childWithDataKeypad?.attributes['data-keypad']) {\n // if event was trigered from the keypad, avoid closing the keypad\n if (!isKeypadOpen) {\n this.setState({ activeAnswerBlock: '' });\n }\n }\n // else {\n // // Just for debugging purpose:\n // console.log('\\n\\nNew childWithDataKeypad', childWithDataKeypad);\n //\n // if (IS_SAFARI) {\n // // (IS_SAFARI && !relatedTarget?.offsetParent?.children[0]?.children[0]?.attributes?.['data-keypad'])\n // console.log('What was being used', relatedTarget?.offsetParent?.children[0]?.children[0]);\n // } else {\n // // (!IS_SAFARI && !relatedTarget?.offsetParent?.children[0]?.attributes?.['data-keypad']) ||\n // console.log('What was being used', relatedTarget?.offsetParent?.children[0]);\n // }\n // }\n };\n\n setTooltipRef(ref) {\n // Safari Hack: https://stackoverflow.com/a/42764495/5757635\n setTimeout(() => {\n if (ref && IS_SAFARI) {\n const div = document.querySelector(\"[role='tooltip']\");\n\n if (div) {\n const el = div.firstChild;\n el.setAttribute('tabindex', '-1');\n }\n }\n }, 1);\n }\n\n render() {\n const { model } = this.props;\n const { activeAnswerBlock, showCorrect, session, tooltipContainerRef } = this.state;\n const {\n config,\n correctness,\n disabled,\n extraCSSRules,\n view,\n teacherInstructions,\n rationale,\n feedback,\n animationsDisabled,\n printMode,\n alwaysShowCorrect,\n language,\n } = model || {};\n\n if (!config) {\n return null;\n }\n\n const {\n showNote,\n note,\n prompt,\n responses,\n responseType,\n equationEditor,\n customKeys,\n id,\n env: { mode, role } = {},\n } = config || {};\n const displayNote = (showCorrect || (mode === 'view' && role === 'instructor')) && showNote && note;\n const emptyResponse = isEmpty(responses);\n const showCorrectAnswerToggle = !emptyResponse && correctness && correctness.correctness !== 'correct';\n const tooltipModeEnabled = disabled && correctness;\n const additionalKeys = generateAdditionalKeys(customKeys);\n const correct = correctness && correctness.correct;\n const staticLatex = prepareForStatic(model, this.state) || '';\n const viewMode = disabled && !correctness;\n const studentPrintMode = printMode && !alwaysShowCorrect;\n const showRationale = rationale && (hasText(rationale) || hasMedia(rationale));\n const showTeacherInstructions =\n teacherInstructions && (hasText(teacherInstructions) || hasMedia(teacherInstructions));\n\n const printView = (\n <PrintContainer>\n <mq.Static\n className=\"static-math\"\n ref={(mqStatic) => {\n if (mqStatic) this.mqStatic = mqStatic;\n }}\n latex={staticLatex}\n onSubFieldChange={this.subFieldChanged}\n getFieldName={this.getFieldName}\n setInput={this.setInput}\n onSubFieldFocus={this.onSubFieldFocus}\n onBlur={this.onBlur}\n />\n </PrintContainer>\n );\n\n const midContent = (\n <MainContent>\n {mode === 'gather' && <SrOnly>Math Equation Response Question</SrOnly>}\n\n {viewMode &&\n showTeacherInstructions &&\n (!animationsDisabled ? (\n <StyledCollapsible labels={{ hidden: 'Show Teacher Instructions', visible: 'Hide Teacher Instructions' }}>\n <div dangerouslySetInnerHTML={{ __html: teacherInstructions }} />\n </StyledCollapsible>\n ) : (\n <div dangerouslySetInnerHTML={{ __html: teacherInstructions }} />\n ))}\n\n {prompt && (\n <PromptContainer>\n <PreviewPrompt prompt={prompt} />\n </PromptContainer>\n )}\n\n {studentPrintMode ? (\n printView\n ) : (\n <Readable false>\n <InputAndKeypadContainer tabIndex={0}>\n {responseType === ResponseTypes.simple && (\n <SimpleQuestionBlock\n onSimpleResponseChange={this.onSimpleResponseChange}\n showCorrect={showCorrect}\n emptyResponse={emptyResponse}\n model={model}\n session={session}\n onSubFieldFocus={this.onSubFieldFocus}\n showKeypad={!!activeAnswerBlock}\n />\n )}\n\n {responseType === ResponseTypes.advanced && (\n <Expression\n ref={tooltipContainerRef}\n isIncorrect={!emptyResponse && !correct && !showCorrect}\n isCorrect={!emptyResponse && (correct || showCorrect)}\n showCorrectness={!emptyResponse && disabled && correctness && !view}\n correctAnswerShown={showCorrect}\n printCorrect={printMode && alwaysShowCorrect}\n >\n <Tooltip\n ref={(ref) => this.setTooltipRef(ref)}\n enterTouchDelay={0}\n interactive\n open={!!activeAnswerBlock}\n slotProps={{\n popper: {\n container: tooltipContainerRef?.current || undefined,\n placement: 'bottom-start',\n sx: {\n backgroundColor: 'transparent',\n width: '650px',\n opacity: 1,\n '& .MuiTooltip-arrow': {\n display: 'none',\n },\n },\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: [0, 8],\n },\n },\n {\n name: 'preventOverflow',\n enabled: true,\n options: {\n boundary: 'viewport',\n padding: 8,\n },\n },\n {\n name: 'computeStyles',\n options: {\n adaptive: true,\n gpuAcceleration: true,\n },\n },\n {\n name: 'flip',\n enabled: false,\n },\n ],\n },\n tooltip: {\n sx: {\n fontSize: 'initial',\n backgroundColor: 'transparent',\n width: '600px',\n marginTop: 0,\n paddingTop: 0,\n boxShadow: 'none',\n },\n },\n }}\n title={Object.keys(session.answers).map(\n (answerId) =>\n (answerId === activeAnswerBlock && !(showCorrect || disabled) && (\n <ResponseContainer\n data-keypad={true}\n key={answerId}\n style={{\n // marginTop: this.mqStatic && this.mqStatic.input.offsetHeight - 20,\n width: getKeyPadWidth(additionalKeys, equationEditor),\n }}\n >\n <HorizontalKeypad\n additionalKeys={additionalKeys}\n mode={equationEditor || DEFAULT_KEYPAD_VARIANT}\n onClick={this.onClick}\n />\n </ResponseContainer>\n )) ||\n null,\n )}\n >\n <div>\n <mq.Static\n className=\"static-math\"\n ref={(mqStatic) => {\n if (mqStatic) this.mqStatic = mqStatic;\n }}\n latex={staticLatex}\n onSubFieldChange={this.subFieldChanged}\n getFieldName={this.getFieldName}\n setInput={this.setInput}\n onSubFieldFocus={this.onSubFieldFocus}\n onBlur={this.onBlur}\n />\n </div>\n </Tooltip>\n </Expression>\n )}\n </InputAndKeypadContainer>\n </Readable>\n )}\n\n {viewMode && displayNote && <Note dangerouslySetInnerHTML={{ __html: `<strong>Note:</strong> ${note}` }} />}\n\n {viewMode &&\n showRationale &&\n (!animationsDisabled ? (\n <Collapsible labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }}>\n <div dangerouslySetInnerHTML={{ __html: rationale }} />\n </Collapsible>\n ) : (\n <div dangerouslySetInnerHTML={{ __html: rationale }} />\n ))}\n </MainContent>\n );\n\n if (tooltipModeEnabled && (showCorrectAnswerToggle || showTeacherInstructions || showRationale || feedback)) {\n return (\n <StyledUiLayout\n extraCSSRules={extraCSSRules}\n ref={(r) => {\n // eslint-disable-next-line react/no-find-dom-node\n const domNode = ReactDOM.findDOMNode(r);\n\n this.root = domNode || this.root;\n }}\n >\n <StyledTooltip\n interactive\n enterTouchDelay={0}\n placement=\"bottom-start\"\n slotProps={{\n tooltip: {\n sx: (theme) => ({\n background: `${color.primaryLight()} !important`,\n color: color.text(),\n padding: theme.spacing(2),\n border: `1px solid ${color.secondary()}`,\n fontSize: '16px',\n '& :not(.MathJax) > table tr': {\n '&:nth-child(2n)': {\n backgroundColor: 'unset !important',\n },\n },\n }),\n },\n popper: {\n sx: {\n opacity: 1,\n },\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: [0, 2],\n },\n },\n ],\n },\n }}\n title={\n <div>\n <MainContent>\n {showCorrectAnswerToggle && (\n <StyledCorrectAnswerToggle\n language={language}\n show\n toggled={showCorrect}\n onToggle={this.toggleShowCorrect}\n />\n )}\n </MainContent>\n\n {showTeacherInstructions && (\n <StyledCollapsible\n key=\"collapsible-teacher-instructions\"\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n >\n <PreviewPrompt prompt={teacherInstructions} />\n </StyledCollapsible>\n )}\n {displayNote && hasText(note) && (\n <StyledCollapsible\n key=\"collapsible-note\"\n labels={{\n hidden: translator.t('common:showNote', { lng: language }),\n visible: translator.t('common:hideNote', { lng: language }),\n }}\n >\n <PreviewPrompt prompt={note} />\n </StyledCollapsible>\n )}\n\n {showRationale && (\n <StyledCollapsible\n key=\"collapsible-rationale\"\n labels={{\n hidden: 'Show Rationale',\n visible: 'Hide Rationale',\n }}\n >\n <PreviewPrompt prompt={rationale} />\n </StyledCollapsible>\n )}\n\n {feedback && <Feedback correctness={correctness.correctness} feedback={feedback} />}\n </div>\n }\n >\n {midContent}\n </StyledTooltip>\n </StyledUiLayout>\n );\n }\n\n return (\n <StyledUiLayout\n id={id}\n extraCSSRules={extraCSSRules}\n ref={(r) => {\n // eslint-disable-next-line react/no-find-dom-node\n const domNode = ReactDOM.findDOMNode(r);\n\n this.root = domNode || this.root;\n }}\n >\n {midContent}\n </StyledUiLayout>\n );\n }\n}\n\n// Helper function to get class names for HTML string generation\nconst getBlockClassNames = () => {\n return {\n blockContainer: 'block-container',\n blockResponse: 'block-response',\n blockMath: 'block-math',\n };\n};\n\n// CSS for block classes used in HTML string generation\nif (typeof document !== 'undefined') {\n const styleId = 'math-inline-block-styles';\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = `\n .block-container {\n margin: 8px !important;\n display: inline-flex;\n border: 2px solid grey !important;\n }\n .block-response {\n color: grey;\n background: #f5f5f5;\n font-size: 0.8rem !important;\n padding: 4px !important;\n display: flex;\n align-items: center;\n justify-content: center;\n border-right: 2px solid #bdbdbd !important;\n flex-shrink: 0;\n flex-grow: 0;\n flex-basis: auto;\n }\n .block-math {\n color: ${color.text()};\n background-color: ${color.background()};\n padding: 4px !important;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-grow: 1;\n }\n .block-math > .mq-math-mode > .mq-hasCursor > .mq-cursor {\n display: none;\n }\n .sr-only {\n position: absolute;\n left: -10000px;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n }\n .static-math > .mq-root-block > .mq-editable-field {\n border-color: ${color.text()};\n }\n `;\n document.head.appendChild(style);\n }\n}\n\nconst StyledUiLayout: any = styled(UiLayout)(() => ({\n color: color.text(),\n backgroundColor: color.background(),\n display: 'inline-block',\n}));\n\nconst StyledTooltip: any = styled(Tooltip)({\n // Styles applied via slotProps.sx below\n});\n\nconst PromptContainer: any = styled('div')(({ theme }) => ({\n marginBottom: theme.spacing(2),\n}));\n\nconst MainContent: any = styled('div')({\n width: '100%',\n position: 'relative',\n backgroundColor: color.background(),\n color: color.text(),\n});\n\nconst Note: any = styled('div')(({ theme }) => ({\n paddingBottom: theme.spacing(2),\n}));\n\nconst StyledCollapsible: any = styled(Collapsible)(({ theme }) => ({\n marginBottom: theme.spacing(2),\n}));\n\nconst ResponseContainer: any = styled('div')(({ theme }) => ({\n zIndex: 10,\n minWidth: '400px',\n marginTop: theme.spacing(2),\n}));\n\nconst Expression: any = styled('div', {\n shouldForwardProp: (prop) =>\n !['isIncorrect', 'isCorrect', 'showCorrectness', 'correctAnswerShown', 'printCorrect'].includes(prop),\n})(({ theme, isIncorrect, isCorrect, showCorrectness, correctAnswerShown, printCorrect }) => {\n const borderColor = isIncorrect ? color.incorrect() : isCorrect ? color.correct() : undefined;\n\n return {\n maxWidth: 'fit-content',\n padding: theme.spacing(0.25),\n ...(showCorrectness && {\n border: borderColor ? `2px solid ${borderColor} !important` : '2px solid',\n }),\n ...(!showCorrectness &&\n borderColor && {\n borderColor: `${borderColor} !important`,\n }),\n ...(correctAnswerShown && {\n padding: theme.spacing(1),\n letterSpacing: '0.5px',\n }),\n ...(printCorrect && {\n border: `2px solid ${color.correct()} !important`,\n }),\n '& .mq-math-mode': {\n '& .mq-root-block': {\n paddingRight: '0 !important',\n paddingLeft: '0 !important',\n '& .mq-editable-field': {\n minWidth: '10px',\n padding: theme.spacing(0.4),\n },\n },\n '& sup': {\n top: 0,\n },\n },\n };\n});\n\nconst InputAndKeypadContainer: any = styled('div')({\n position: 'relative',\n '& .mq-overarrow-inner': {\n border: 'none !important',\n padding: '0 !important',\n },\n '& .mq-overarrow-inner-right': {\n display: 'none !important',\n },\n '& .mq-overarrow-inner-left': {\n display: 'none !important',\n },\n '& .mq-overarrow.mq-arrow-both': {\n minWidth: '1.23em',\n '& *': {\n lineHeight: '1 !important',\n },\n '&:before': {\n top: '-0.4em',\n left: '-1px',\n },\n '&:after': {\n top: '-2.4em',\n right: '-1px',\n },\n '&.mq-empty:after': {\n top: '-0.45em',\n },\n },\n '& .mq-overarrow.mq-arrow-right': {\n '&:before': {\n top: '-0.4em',\n right: '-1px',\n },\n },\n '& .mq-longdiv-inner': {\n borderTop: '1px solid !important',\n paddingTop: '1.5px !important',\n },\n '& .mq-parallelogram': {\n lineHeight: 0.85,\n },\n});\n\nconst PrintContainer: any = styled('div')(({ theme }) => ({\n marginBottom: theme.spacing(1),\n pointerEvents: 'none',\n}));\n\nconst SrOnly: any = styled('h2')({\n position: 'absolute',\n left: '-10000px',\n top: 'auto',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n});\n\nconst StyledCorrectAnswerToggle: any = styled(CorrectAnswerToggle)(({ theme }) => ({\n color: color.text(),\n marginBottom: theme.spacing(2),\n}));\n\nexport default Main;\n"],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { p as e, s as t, y as n } from "../dist--pvq7WNe.js";
2
+ import { R as r } from "../dist-BvAYH2DS.js";
3
+ import { t as i } from "../main-CmzEG2JL.js";
4
+ import a from "react";
5
+ import { createRoot as o } from "react-dom/client";
6
+ var s = (0, (/* @__PURE__ */ n(e(), 1)).default)("pie-element:math-inline:print"), c = (e, t) => {
7
+ let n = t.role === "instructor";
8
+ return e.prompt = e.promptEnabled === !1 ? void 0 : e.prompt, e.teacherInstructions = n && e.teacherInstructionsEnabled !== !1 ? e.teacherInstructions : void 0, e.rationale = n && e.rationaleEnabled !== !1 ? e.rationale : void 0, e.showTeacherInstructions = n, e.alwaysShowCorrect = n, e.printMode = !0, e.feedback = void 0, e.expression = e.expression || "{{response}}", e.animationsDisabled = !0, {
9
+ ...e,
10
+ disabled: !0,
11
+ config: {
12
+ ...e,
13
+ env: {
14
+ mode: n ? "evaluate" : e.mode,
15
+ role: t.role
16
+ }
17
+ }
18
+ };
19
+ }, l = class extends HTMLElement {
20
+ constructor() {
21
+ super(), this._options = null, this._model = null, this._session = [], this._root = null, this._rerender = t(() => {
22
+ if (this._model && this._session) {
23
+ let e = c(this._model, this._options), t = this._options && a.createElement(i, {
24
+ model: e,
25
+ session: {}
26
+ });
27
+ this._root ||= o(this), this._root.render(t), queueMicrotask(() => {
28
+ s("render complete - render math"), r(this);
29
+ });
30
+ } else s("skip");
31
+ }, 50, {
32
+ leading: !1,
33
+ trailing: !0
34
+ });
35
+ }
36
+ set options(e) {
37
+ this._options = e;
38
+ }
39
+ set model(e) {
40
+ this._model = e, this._rerender();
41
+ }
42
+ connectedCallback() {}
43
+ disconnectedCallback() {
44
+ this._root && this._root.unmount();
45
+ }
46
+ };
47
+ //#endregion
48
+ export { l as default };
49
+
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/print/index.tsx"],"sourcesContent":["// @ts-nocheck\n/**\n * @synced-from pie-elements/packages/math-inline/src/print.js\n * @auto-generated\n *\n * This file is automatically synced from pie-elements and converted to TypeScript.\n * Manual edits will be overwritten on next sync.\n * To make changes, edit the upstream JavaScript file and run sync again.\n */\n\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { debounce } from '@pie-element/shared-lodash';\nimport Main from '../delivery/main.js';\nimport { renderMath } from '@pie-element/shared-math-rendering-mathjax';\nimport debug from 'debug';\n\nconst log = debug('pie-element:math-inline: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.printMode = true;\n model.feedback = undefined;\n model.expression = model.expression || '{{response}}';\n\n model.animationsDisabled = true;\n return {\n ...model,\n disabled: true,\n config: {\n ...model,\n env: { mode: instr ? 'evaluate' : model.mode, role: opts.role },\n },\n };\n};\n\nexport default class MathInlinePrint extends HTMLElement {\n constructor() {\n super();\n this._options = null;\n this._model = null;\n this._session = [];\n this._root = null;\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: {},\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(element);\n queueMicrotask(() => {\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 disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n }\n }\n}\n"],"mappings":";;;;;AAiBA,IAAM,KAAA,IAAA,wBAAA,EAAA,CAAA,QAAA,CAAY,+BAA+B,GAU3C,KAAqB,GAAO,MAAS;CACzC,IAAM,IAAQ,EAAK,SAAS;CAa5B,OAXA,EAAM,SAAS,EAAM,kBAAkB,KAAuB,KAAA,IAAf,EAAM,QACrD,EAAM,sBACJ,KAAS,EAAM,+BAA+B,KAAQ,EAAM,sBAAsB,KAAA,GACpF,EAAM,YAAY,KAAS,EAAM,qBAAqB,KAAQ,EAAM,YAAY,KAAA,GAChF,EAAM,0BAA0B,GAChC,EAAM,oBAAoB,GAC1B,EAAM,YAAY,IAClB,EAAM,WAAW,KAAA,GACjB,EAAM,aAAa,EAAM,cAAc,gBAEvC,EAAM,qBAAqB,IACpB;EACL,GAAG;EACH,UAAU;EACV,QAAQ;GACN,GAAG;GACH,KAAK;IAAE,MAAM,IAAQ,aAAa,EAAM;IAAM,MAAM,EAAK;GAAK;EAChE;CACF;AACF,GAEqB,IAArB,cAA6C,YAAY;CACvD,cAAc;EAMZ,AALA,MAAM,GACN,KAAK,WAAW,MAChB,KAAK,SAAS,MACd,KAAK,WAAW,CAAC,GACjB,KAAK,QAAQ,MACb,KAAK,YAAY,QACT;GACJ,IAAI,KAAK,UAAU,KAAK,UAAU;IAChC,IAAM,IAAa,EAAkB,KAAK,QAAQ,KAAK,QAAQ,GAEzD,IACJ,KAAK,YACL,EAAM,cAAc,GAAM;KACxB,OAAO;KACP,SAAS,CAAC;IACZ,CAAC;IAMH,AAJA,AACE,KAAK,UAAQ,EAAW,IAAI,GAE9B,KAAK,MAAM,OAAO,CAAO,GACzB,qBAAqB;KAEnB,AADA,EAAI,+BAA+B,GACnC,EAAW,IAAI;IACjB,CAAC;GACH,OACE,EAAI,MAAM;EAEd,GACA,IACA;GAAE,SAAS;GAAO,UAAU;EAAK,CACnC;CACF;CACA,IAAI,QAAQ,GAAG;EACb,KAAK,WAAW;CAClB;CAEA,IAAI,MAAM,GAAG;EAEX,AADA,KAAK,SAAS,GACd,KAAK,UAAU;CACjB;CAEA,oBAAoB,CAAC;CAErB,uBAAuB;EACrB,AAAI,KAAK,SACP,KAAK,MAAM,QAAQ;CAEvB;AACF"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @synced-from pie-elements/packages/math-inline/controller/src/defaults.js
3
+ * @auto-generated
4
+ *
5
+ * This file is automatically synced from pie-elements and converted to TypeScript.
6
+ * Manual edits will be overwritten on next sync.
7
+ * To make changes, edit the upstream JavaScript file and run sync again.
8
+ */
9
+ declare const _default: {
10
+ allowTrailingZerosDefault: boolean;
11
+ customKeys: never[];
12
+ equationEditor: string;
13
+ expression: string;
14
+ feedback: {
15
+ correct: {
16
+ default: string;
17
+ type: string;
18
+ };
19
+ incorrect: {
20
+ default: string;
21
+ type: string;
22
+ };
23
+ partial: {
24
+ default: string;
25
+ type: string;
26
+ };
27
+ };
28
+ feedbackEnabled: boolean;
29
+ ignoreOrderDefault: boolean;
30
+ partialScoring: boolean;
31
+ prompt: string;
32
+ promptEnabled: boolean;
33
+ rationale: string;
34
+ rationaleEnabled: boolean;
35
+ responseType: string;
36
+ responses: never[];
37
+ scoringType: string;
38
+ studentInstructionsEnabled: boolean;
39
+ teacherInstructions: string;
40
+ teacherInstructionsEnabled: boolean;
41
+ toolbarEditorPosition: string;
42
+ validationDefault: string;
43
+ };
44
+ export default _default;
@@ -0,0 +1,39 @@
1
+ import { ResponseTypes as e } from "./utils.js";
2
+ //#region src/controller/defaults.ts
3
+ var t = {
4
+ allowTrailingZerosDefault: !1,
5
+ customKeys: [],
6
+ equationEditor: "8",
7
+ expression: "",
8
+ feedback: {
9
+ correct: {
10
+ default: "Correct",
11
+ type: "none"
12
+ },
13
+ incorrect: {
14
+ default: "Incorrect",
15
+ type: "none"
16
+ },
17
+ partial: {
18
+ default: "Nearly",
19
+ type: "none"
20
+ }
21
+ },
22
+ feedbackEnabled: !1,
23
+ ignoreOrderDefault: !1,
24
+ partialScoring: !0,
25
+ prompt: "",
26
+ promptEnabled: !0,
27
+ rationale: "",
28
+ rationaleEnabled: !0,
29
+ responseType: e.advanced,
30
+ responses: [],
31
+ scoringType: "auto",
32
+ studentInstructionsEnabled: !0,
33
+ teacherInstructions: "",
34
+ teacherInstructionsEnabled: !0,
35
+ toolbarEditorPosition: "bottom",
36
+ validationDefault: "literal"
37
+ };
38
+ //#endregion
39
+ export { t as default };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @synced-from pie-elements/packages/math-inline/controller/src/index.js
3
+ * @auto-generated
4
+ *
5
+ * This file is automatically synced from pie-elements and converted to TypeScript.
6
+ * Manual edits will be overwritten on next sync.
7
+ * To make changes, edit the upstream JavaScript file and run sync again.
8
+ */
9
+ export declare function createDefaultModel(model?: {}): Promise<unknown>;
10
+ /**
11
+ * Generates detailed trace log for math-inline scoring evaluation
12
+ * @param {Object} question
13
+ * @param {Object} session
14
+ * @param {Object} env
15
+ * @returns {Array<string>} traceLog
16
+ */
17
+ export declare const getLogTrace: (question: any, session: any, env: any) => string[];
18
+ export declare const outcome: (question: any, session: any, env: any) => Promise<unknown>;
19
+ export declare const normalize: (question: any) => any;
20
+ export declare const model: (question: any, session: any, env: any) => Promise<unknown>;
21
+ export declare const createCorrectResponseSession: (question: any, env: any) => Promise<unknown>;
22
+ export declare const validate: (model?: {}, config?: {}) => {};
@@ -0,0 +1,171 @@
1
+ import { ResponseTypes as e } from "./utils.js";
2
+ import t from "./defaults.js";
3
+ import n from "debug";
4
+ import { isEmpty as r } from "@pie-element/shared-lodash";
5
+ import i from "@pie-lib/translator";
6
+ import { getActualFeedbackForCorrectness as a } from "@pie-element/shared-feedback";
7
+ import * as o from "@pie-framework/math-validation";
8
+ //#region src/controller/index.ts
9
+ var { translator: s } = i, c = n("@pie-element:math-inline:controller"), l = (t, n, r) => {
10
+ let i = t.responses, a = t.responseType === e.advanced;
11
+ if (!n) return {
12
+ correctness: "unanswered",
13
+ score: r ? 0 : "0%",
14
+ correct: !1
15
+ };
16
+ let o = u(a ? i : i.slice(0, 1), n), s = {
17
+ correctness: "incorrect",
18
+ score: r ? 0 : "0%",
19
+ correct: !1
20
+ };
21
+ return o && (s.correctness = "correct", s.score = r ? 1 : "100%", s.correct = !0), s;
22
+ };
23
+ function u(e, n) {
24
+ let r = !1;
25
+ return (e || []).forEach((e) => {
26
+ if (r) return;
27
+ let i = { mode: e.validation || t.validationDefault };
28
+ i.mode === "literal" && (i.literal = {
29
+ allowTrailingZeros: e.allowTrailingZeros || !1,
30
+ ignoreOrder: e.ignoreOrder || !1
31
+ });
32
+ let a = [e.answer].concat(Object.keys(e.alternates || {}).map((t) => e.alternates[t]));
33
+ for (let e = 0; e < a.length; e++) try {
34
+ if (o.latexEqual(n, a[e], i)) {
35
+ r = !0;
36
+ break;
37
+ }
38
+ } catch (t) {
39
+ c("Parse failure when evaluating math", a[e], n, t);
40
+ continue;
41
+ }
42
+ }), r;
43
+ }
44
+ var d = (t, n, r, i) => {
45
+ if (n.mode === "evaluate") return l(t, t.responseType === e.advanced ? r && r.completeAnswer || "" : r && r.response, i);
46
+ };
47
+ function f(e = {}) {
48
+ return new Promise((n) => {
49
+ n({ config: {
50
+ ...t,
51
+ ...e
52
+ } });
53
+ });
54
+ }
55
+ var p = (t, n, r) => {
56
+ let i = [];
57
+ if (!n || !n.response && !n.completeAnswer) return i.push("Student did not enter a response."), i;
58
+ let a = t?.responseType === e.advanced, o = a ? n.completeAnswer : n.response, s = o ? o.replace(/\\/g, "") : "";
59
+ if (!s) return i.push("Student entered a response, but then it was removed."), i;
60
+ i.push(`Student entered response: ${s}.`), i.push(`Response type: ${a ? "advanced" : "simple"}.`);
61
+ let c = t.responses || [];
62
+ (a ? c : c.slice(0, 1)).forEach((e, n) => {
63
+ let r = e.validation || t.validationDefault;
64
+ if (i.push(`Response ${n + 1} validation mode: ${r}.`), r === "literal") {
65
+ let t = e.allowTrailingZeros || !1, n = e.ignoreOrder || !1;
66
+ i.push(`Allow trailing zeros: ${t ? "enabled" : "disabled"}.`), i.push(`Ignore order: ${n ? "enabled" : "disabled"}.`);
67
+ }
68
+ let a = [e.answer].concat(Object.keys(e.alternates || {}).map((t) => e.alternates[t]));
69
+ a.length > 1 && i.push(`Accepted answers: ${a.length} (including alternates).`);
70
+ });
71
+ let l = d(t, r, n, !0);
72
+ return l.correctness === "correct" ? i.push("Student answer matches one of the accepted responses.") : l.correctness === "incorrect" ? i.push("Student answer does not match any of the accepted responses.") : i.push("Student answer could not be evaluated."), i.push(`Response evaluated as ${l.correctness}.`), i.push(`Final score: ${l.score}.`), i;
73
+ }, m = (e, t, n) => new Promise((i) => {
74
+ n.mode === "evaluate" ? !t || r(t) ? i({
75
+ score: 0,
76
+ empty: !0,
77
+ logTrace: ["Student did not enter a response."]
78
+ }) : i({
79
+ score: d(e, n, t, !0).score,
80
+ logTrace: p(e, t, n)
81
+ }) : i({
82
+ score: void 0,
83
+ completed: void 0,
84
+ logTrace: []
85
+ });
86
+ }), h = (e) => (r(e.responses) || (e.responses = e.responses.map((t) => ({
87
+ ...t,
88
+ validation: t.validation || e.validationDefault,
89
+ allowTrailingZeros: t.allowTrailingZeros || e.allowTrailingZerosDefault,
90
+ ignoreOrder: t.ignoreOrder || e.ignoreOrderDefault
91
+ }))), {
92
+ ...t,
93
+ ...e
94
+ }), g = (t, n, r) => new Promise((i) => {
95
+ let o = h(t), l = d(o, r, n), { extraCSSRules: u, responses: f, language: p, ...m } = o;
96
+ m.responses = m.responseType === e.simple ? f.slice(0, 1) : f;
97
+ let g = {
98
+ extraCSSRules: u,
99
+ config: m,
100
+ correctness: l,
101
+ feedback: r.mode === "evaluate" && o.feedbackEnabled ? a(l?.correctness, o.feedback) : void 0,
102
+ disabled: r.mode !== "gather",
103
+ view: r.mode === "view"
104
+ }, _ = o.note || s.t("mathInline.primaryCorrectWithAlternates", { lng: p }), v = m?.responses?.length > 1 || (m?.responses || []).some((e) => e.validation === "symbolic" || Object.keys(e.alternates || {}).length > 0);
105
+ r.mode === "evaluate" ? (g.correctResponse = {}, g.config.showNote = v, g.config.note = _) : (g.config.responses = [], g.config.showNote = !1), r.role === "instructor" && (r.mode === "view" || r.mode === "evaluate") ? (g.rationale = o.rationaleEnabled ? o.rationale : null, g.teacherInstructions = o.teacherInstructionsEnabled ? o.teacherInstructions : null) : (g.rationale = null, g.teacherInstructions = null, g.config.rationale = null, g.config.teacherInstructions = null), g.config.env = r, g.config.prompt = o.promptEnabled ? o.prompt : null, g.language = p, c("out: ", g), i(g);
106
+ }), _ = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), v = (e) => new Promise((t) => {
107
+ let { responses: n, id: r } = e, { answer: i } = n && n.length ? n[0] : {};
108
+ t({
109
+ id: r,
110
+ response: i || "",
111
+ completeAnswer: i || ""
112
+ });
113
+ }), y = (e) => e.endsWith("\\") ? e.slice(0, -1) : e, b = (e) => new Promise((t) => {
114
+ let { responses: n, id: r } = e, { answer: i } = n && n.length ? n[0] : {};
115
+ if (!i) {
116
+ t({
117
+ id: r,
118
+ answers: {},
119
+ completeAnswer: ""
120
+ });
121
+ return;
122
+ }
123
+ try {
124
+ let n = e.expression, o = _(n).split(/\\{\\{\s*response\s*\\}\\}/g), s = o.map((e) => e === "" ? e : e.replace(/\s+/g, () => "\\s*")).join("(.*)"), c = i.match(new RegExp(s)), l = o.length - 1;
125
+ if (!c) {
126
+ t({
127
+ id: r,
128
+ answers: {},
129
+ completeAnswer: i
130
+ }), console.log(`can not find match: ${o} in ${i}`);
131
+ return;
132
+ }
133
+ c.shift();
134
+ let u = {};
135
+ for (var a = 0; a < l; a++) u[`r${a + 1}`] = { value: y(c[a].trim()) };
136
+ t({
137
+ id: r,
138
+ answers: u,
139
+ completeAnswer: i
140
+ });
141
+ } catch (e) {
142
+ t({
143
+ id: r,
144
+ answers: {},
145
+ completeAnswer: i
146
+ }), console.error(e.toString());
147
+ }
148
+ }), x = (e, t) => t.mode === "evaluate" || t.role !== "instructor" ? (console.error("can not create correct response session if mode is evaluate or role is not instructor"), Promise.resolve(null)) : (e.responseType || "").toLowerCase() === "simple" ? v(e, t) : b(e, t), S = (e) => (e || "").replace(/(<(?!img|iframe|source)([^>]+)>)/gi, ""), C = (e = {}, t = {}) => {
149
+ let { expression: n = "", responses: i, responseType: a } = e, { maxResponseAreas: o } = t, s = {}, c = {};
150
+ if ([
151
+ "teacherInstructions",
152
+ "prompt",
153
+ "rationale"
154
+ ].forEach((n) => {
155
+ t[n]?.required && !S(e[n]) && (c[n] = "This field is required.");
156
+ }), (i || []).forEach((e, t) => {
157
+ let { answer: n } = e, i = [...Object.entries(e.alternates || {})].reverse(), a = {}, o = {};
158
+ n === "" && (o.answer = "Content should not be empty."), i.forEach(([e, t], r) => {
159
+ t === "" ? a[e] = "Content should not be empty." : (n === t || i.slice(r + 1).some(([, e]) => e === t)) && (a[e] = "Content should be unique.");
160
+ }), (!r(o) || !r(a)) && (s[t] = {
161
+ ...o,
162
+ ...a
163
+ });
164
+ }), a === "Advanced Multi") {
165
+ let e = (n.match(/\{\{response\}\}/g) || []).length;
166
+ e > o ? c.responseAreasError = `No more than ${o} response areas should be defined.` : e < 1 && (c.responseAreasError = "There should be at least 1 response area defined.");
167
+ }
168
+ return r(s) || (c.responsesErrors = s), c;
169
+ };
170
+ //#endregion
171
+ export { x as createCorrectResponseSession, f as createDefaultModel, p as getLogTrace, g as model, h as normalize, m as outcome, C as validate };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @synced-from pie-elements/packages/math-inline/controller/src/utils.js
3
+ * @auto-generated
4
+ *
5
+ * This file is automatically synced from pie-elements and converted to TypeScript.
6
+ * Manual edits will be overwritten on next sync.
7
+ * To make changes, edit the upstream JavaScript file and run sync again.
8
+ */
9
+ export declare const ResponseTypes: {
10
+ advanced: string;
11
+ simple: string;
12
+ };
@@ -0,0 +1,7 @@
1
+ //#region src/controller/utils.ts
2
+ var e = {
3
+ advanced: "Advanced Multi",
4
+ simple: "Simple"
5
+ };
6
+ //#endregion
7
+ export { e as ResponseTypes };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @synced-from pie-elements/packages/math-inline/src/index.js
3
+ * @auto-generated
4
+ *
5
+ * This file is automatically synced from pie-elements and converted to TypeScript.
6
+ * Manual edits will be overwritten on next sync.
7
+ * To make changes, edit the upstream JavaScript file and run sync again.
8
+ */
9
+ import Main from './main.js';
10
+ export { Main as Component };
11
+ export default class MathInline extends HTMLElement {
12
+ constructor();
13
+ setLangAttribute(): void;
14
+ set model(m: any);
15
+ set session(s: any);
16
+ get session(): any;
17
+ set configuration(c: any);
18
+ sessionChanged(s: any): void;
19
+ connectedCallback(): void;
20
+ _render(): void;
21
+ disconnectedCallback(): void;
22
+ }
@@ -0,0 +1,54 @@
1
+ import { Main as e } from "./main.js";
2
+ import t from "react";
3
+ import { createRoot as n } from "react-dom/client";
4
+ import r from "debug";
5
+ import { ModelSetEvent as i, SessionChangedEvent as a, createSessionNotifier as o, flushSessionNotifiers as s } from "@pie-element/shared-player-events";
6
+ //#region src/delivery/index.ts
7
+ var c = { configuration: {} }, l = r("pie-ui:math-inline"), u = class extends HTMLElement {
8
+ constructor() {
9
+ super(), this._root = null, this._configuration = c.configuration, this._sessionNotifier = o(this, () => {
10
+ this.dispatchEvent(new a(this.tagName.toLowerCase(), !0));
11
+ }, { delayMs: 1e3 }), this.sessionChangedEventCaller = () => this._sessionNotifier.notify();
12
+ }
13
+ setLangAttribute() {
14
+ let e = this._model && typeof this._model.language ? this._model.language : "", t = e ? e.slice(0, 2) : "en";
15
+ this.setAttribute("lang", t);
16
+ let n = this.closest(".player-container");
17
+ n && n.setAttribute("lang", t);
18
+ }
19
+ set model(e) {
20
+ this._model = e, this.dispatchEvent(new i(this._model, !0, !!this._model)), this.setLangAttribute(), this._render();
21
+ }
22
+ set session(e) {
23
+ this._session = e, this._render();
24
+ }
25
+ get session() {
26
+ return this._session;
27
+ }
28
+ set configuration(e) {
29
+ this._configuration = e, this._render();
30
+ }
31
+ sessionChanged(e) {
32
+ Object.keys(e).map((t) => {
33
+ this._session[t] = e[t];
34
+ }), this.sessionChangedEventCaller(), l("session: ", this._session);
35
+ }
36
+ connectedCallback() {
37
+ this.setAttribute("aria-label", "Math Response Question"), this.setAttribute("role", "region"), this._render();
38
+ }
39
+ _render() {
40
+ if (!this._model || !this._session) return;
41
+ let r = t.createElement(e, {
42
+ model: this._model,
43
+ session: this._session,
44
+ configuration: this._configuration,
45
+ onSessionChange: this.sessionChanged.bind(this)
46
+ });
47
+ this._root ||= n(this), this._root.render(r);
48
+ }
49
+ disconnectedCallback() {
50
+ s(this), this._root &&= (this._root.unmount(), null);
51
+ }
52
+ };
53
+ //#endregion
54
+ export { e as Component, u as default };