@pie-element/drawing-response 12.1.2-next.2 → 12.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/CHANGELOG.json +547 -0
  2. package/CHANGELOG.md +1966 -0
  3. package/LICENSE.md +5 -0
  4. package/README.md +1 -0
  5. package/configure/CHANGELOG.json +367 -0
  6. package/configure/CHANGELOG.md +1766 -0
  7. package/configure/lib/button.js +37 -0
  8. package/configure/lib/button.js.map +1 -0
  9. package/configure/lib/defaults.js +116 -0
  10. package/configure/lib/defaults.js.map +1 -0
  11. package/configure/lib/image-container.js +307 -0
  12. package/configure/lib/image-container.js.map +1 -0
  13. package/configure/lib/index.js +147 -0
  14. package/configure/lib/index.js.map +1 -0
  15. package/configure/lib/root.js +219 -0
  16. package/configure/lib/root.js.map +1 -0
  17. package/configure/package.json +24 -0
  18. package/configure/src/__tests__/image-container.test.jsx +231 -0
  19. package/configure/src/__tests__/index.test.js +72 -0
  20. package/configure/src/__tests__/root.test.jsx +110 -0
  21. package/configure/src/button.jsx +33 -0
  22. package/configure/src/defaults.js +80 -0
  23. package/configure/src/image-container.jsx +316 -0
  24. package/configure/src/index.js +167 -0
  25. package/configure/src/root.jsx +198 -0
  26. package/controller/CHANGELOG.json +52 -0
  27. package/controller/CHANGELOG.md +261 -0
  28. package/controller/lib/defaults.js +22 -0
  29. package/controller/lib/defaults.js.map +1 -0
  30. package/controller/lib/index.js +84 -0
  31. package/controller/lib/index.js.map +1 -0
  32. package/controller/package.json +16 -0
  33. package/controller/src/__tests__/index.test.js +172 -0
  34. package/controller/src/defaults.js +12 -0
  35. package/controller/src/index.js +71 -0
  36. package/docs/config-schema.json +1766 -0
  37. package/docs/config-schema.json.md +1313 -0
  38. package/docs/demo/config.js +8 -0
  39. package/docs/demo/generate.js +14 -0
  40. package/docs/demo/index.html +1 -0
  41. package/docs/demo/session.js +37 -0
  42. package/docs/pie-schema.json +823 -0
  43. package/docs/pie-schema.json.md +606 -0
  44. package/lib/drawing-response/button.js +49 -0
  45. package/lib/drawing-response/button.js.map +1 -0
  46. package/lib/drawing-response/constants.js +43 -0
  47. package/lib/drawing-response/constants.js.map +1 -0
  48. package/lib/drawing-response/container.js +327 -0
  49. package/lib/drawing-response/container.js.map +1 -0
  50. package/lib/drawing-response/drawable-circle.js +80 -0
  51. package/lib/drawing-response/drawable-circle.js.map +1 -0
  52. package/lib/drawing-response/drawable-eraser.js +64 -0
  53. package/lib/drawing-response/drawable-eraser.js.map +1 -0
  54. package/lib/drawing-response/drawable-free-path.js +71 -0
  55. package/lib/drawing-response/drawable-free-path.js.map +1 -0
  56. package/lib/drawing-response/drawable-helper.js +34 -0
  57. package/lib/drawing-response/drawable-helper.js.map +1 -0
  58. package/lib/drawing-response/drawable-image.js +41 -0
  59. package/lib/drawing-response/drawable-image.js.map +1 -0
  60. package/lib/drawing-response/drawable-line.js +75 -0
  61. package/lib/drawing-response/drawable-line.js.map +1 -0
  62. package/lib/drawing-response/drawable-main.js +345 -0
  63. package/lib/drawing-response/drawable-main.js.map +1 -0
  64. package/lib/drawing-response/drawable-palette.js +140 -0
  65. package/lib/drawing-response/drawable-palette.js.map +1 -0
  66. package/lib/drawing-response/drawable-rectangle.js +80 -0
  67. package/lib/drawing-response/drawable-rectangle.js.map +1 -0
  68. package/lib/drawing-response/drawable-text.js +295 -0
  69. package/lib/drawing-response/drawable-text.js.map +1 -0
  70. package/lib/drawing-response/drawable-transformer.js +52 -0
  71. package/lib/drawing-response/drawable-transformer.js.map +1 -0
  72. package/lib/drawing-response/factory.js +22 -0
  73. package/lib/drawing-response/factory.js.map +1 -0
  74. package/lib/drawing-response/icon.js +55 -0
  75. package/lib/drawing-response/icon.js.map +1 -0
  76. package/lib/drawing-response/index.js +91 -0
  77. package/lib/drawing-response/index.js.map +1 -0
  78. package/lib/index.js +68 -0
  79. package/lib/index.js.map +1 -0
  80. package/package.json +19 -82
  81. package/src/__tests__/drawing-index-test.jsx +103 -0
  82. package/src/drawing-response/__tests__/container.test.jsx +82 -0
  83. package/src/drawing-response/__tests__/drawable-helper.test.jsx +24 -0
  84. package/src/drawing-response/__tests__/drawing-main.test.jsx +855 -0
  85. package/src/drawing-response/__tests__/factory.test.js +13 -0
  86. package/src/drawing-response/button.jsx +45 -0
  87. package/src/drawing-response/constants.js +44 -0
  88. package/src/drawing-response/container.jsx +301 -0
  89. package/src/drawing-response/drawable-circle.jsx +74 -0
  90. package/src/drawing-response/drawable-eraser.jsx +53 -0
  91. package/src/drawing-response/drawable-free-path.jsx +59 -0
  92. package/src/drawing-response/drawable-helper.jsx +21 -0
  93. package/src/drawing-response/drawable-image.jsx +36 -0
  94. package/src/drawing-response/drawable-line.jsx +62 -0
  95. package/src/drawing-response/drawable-main.jsx +333 -0
  96. package/src/drawing-response/drawable-palette.jsx +99 -0
  97. package/src/drawing-response/drawable-rectangle.jsx +69 -0
  98. package/src/drawing-response/drawable-text.jsx +318 -0
  99. package/src/drawing-response/drawable-transformer.jsx +52 -0
  100. package/src/drawing-response/factory.js +17 -0
  101. package/src/drawing-response/icon.jsx +52 -0
  102. package/src/drawing-response/index.jsx +92 -0
  103. package/src/index.js +72 -0
  104. package/configure.js +0 -2
  105. package/controller.js +0 -1
  106. package/dist/author/button.d.ts +0 -29
  107. package/dist/author/button.js +0 -25
  108. package/dist/author/defaults.d.ts +0 -118
  109. package/dist/author/defaults.js +0 -86
  110. package/dist/author/image-container.d.ts +0 -42
  111. package/dist/author/image-container.js +0 -183
  112. package/dist/author/index.d.ts +0 -37
  113. package/dist/author/index.js +0 -79
  114. package/dist/author/root.d.ts +0 -17
  115. package/dist/author/root.js +0 -142
  116. package/dist/browser/MenuItem-N0xdzWSs.js +0 -10483
  117. package/dist/browser/MenuItem-N0xdzWSs.js.map +0 -1
  118. package/dist/browser/author/index.js +0 -37837
  119. package/dist/browser/author/index.js.map +0 -1
  120. package/dist/browser/browser-kkT1XVKw.js +0 -219
  121. package/dist/browser/browser-kkT1XVKw.js.map +0 -1
  122. package/dist/browser/controller/index.js +0 -61
  123. package/dist/browser/controller/index.js.map +0 -1
  124. package/dist/browser/delivery/index.js +0 -13560
  125. package/dist/browser/delivery/index.js.map +0 -1
  126. package/dist/browser/drawing-response.css +0 -2
  127. package/dist/controller/defaults.d.ts +0 -24
  128. package/dist/controller/defaults.js +0 -18
  129. package/dist/controller/index.d.ts +0 -13
  130. package/dist/controller/index.js +0 -46
  131. package/dist/delivery/drawing-response/button.d.ts +0 -31
  132. package/dist/delivery/drawing-response/button.js +0 -36
  133. package/dist/delivery/drawing-response/constants.d.ts +0 -16
  134. package/dist/delivery/drawing-response/constants.js +0 -40
  135. package/dist/delivery/drawing-response/container.d.ts +0 -32
  136. package/dist/delivery/drawing-response/container.js +0 -212
  137. package/dist/delivery/drawing-response/drawable-circle.d.ts +0 -18
  138. package/dist/delivery/drawing-response/drawable-circle.js +0 -51
  139. package/dist/delivery/drawing-response/drawable-eraser.d.ts +0 -17
  140. package/dist/delivery/drawing-response/drawable-eraser.js +0 -52
  141. package/dist/delivery/drawing-response/drawable-free-path.d.ts +0 -18
  142. package/dist/delivery/drawing-response/drawable-free-path.js +0 -52
  143. package/dist/delivery/drawing-response/drawable-helper.d.ts +0 -17
  144. package/dist/delivery/drawing-response/drawable-helper.js +0 -12
  145. package/dist/delivery/drawing-response/drawable-image.d.ts +0 -24
  146. package/dist/delivery/drawing-response/drawable-image.js +0 -28
  147. package/dist/delivery/drawing-response/drawable-line.d.ts +0 -18
  148. package/dist/delivery/drawing-response/drawable-line.js +0 -53
  149. package/dist/delivery/drawing-response/drawable-main.d.ts +0 -25
  150. package/dist/delivery/drawing-response/drawable-main.js +0 -210
  151. package/dist/delivery/drawing-response/drawable-palette.d.ts +0 -14
  152. package/dist/delivery/drawing-response/drawable-palette.js +0 -89
  153. package/dist/delivery/drawing-response/drawable-rectangle.d.ts +0 -18
  154. package/dist/delivery/drawing-response/drawable-rectangle.js +0 -49
  155. package/dist/delivery/drawing-response/drawable-text.d.ts +0 -30
  156. package/dist/delivery/drawing-response/drawable-text.js +0 -189
  157. package/dist/delivery/drawing-response/drawable-transformer.d.ts +0 -16
  158. package/dist/delivery/drawing-response/drawable-transformer.js +0 -35
  159. package/dist/delivery/drawing-response/factory.d.ts +0 -11
  160. package/dist/delivery/drawing-response/factory.js +0 -19
  161. package/dist/delivery/drawing-response/icon.d.ts +0 -19
  162. package/dist/delivery/drawing-response/icon.js +0 -52
  163. package/dist/delivery/drawing-response/index.d.ts +0 -18
  164. package/dist/delivery/drawing-response/index.js +0 -70
  165. package/dist/delivery/index.d.ts +0 -19
  166. package/dist/delivery/index.js +0 -47
  167. package/dist/index.d.ts +0 -1
  168. package/dist/index.iife.d.ts +0 -8
  169. package/dist/index.iife.js +0 -165
  170. package/dist/index.js +0 -2
  171. package/dist/runtime-support.d.ts +0 -12
  172. package/dist/runtime-support.js +0 -12
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _renderUi = require("@pie-lib/render-ui");
11
+ var _styles = require("@mui/material/styles");
12
+ var _container = _interopRequireDefault(require("./container"));
13
+ const StyledUiLayout = (0, _styles.styled)(_renderUi.UiLayout)({
14
+ color: _renderUi.color.text(),
15
+ backgroundColor: _renderUi.color.background()
16
+ });
17
+ const StyledCollapsible = (0, _styles.styled)(_renderUi.Collapsible)(({
18
+ theme
19
+ }) => ({
20
+ marginBottom: theme.spacing(2)
21
+ }));
22
+ const ErrorDiv = (0, _styles.styled)('div')({
23
+ color: _renderUi.color.text(),
24
+ backgroundColor: _renderUi.color.background()
25
+ });
26
+ class DrawingResponseComponent extends _react.default.Component {
27
+ constructor(props) {
28
+ super(props);
29
+ this.state = {
30
+ showCorrect: false,
31
+ hasError: false
32
+ };
33
+ }
34
+ static getDerivedStateFromError(error) {
35
+ return {
36
+ hasError: true,
37
+ errorMessage: error.message
38
+ };
39
+ }
40
+ render() {
41
+ const {
42
+ model: {
43
+ extraCSSRules,
44
+ disabled,
45
+ imageDimensions,
46
+ imageUrl,
47
+ prompt,
48
+ mode,
49
+ teacherInstructions,
50
+ backgroundImageEnabled,
51
+ language
52
+ },
53
+ session,
54
+ onSessionChange
55
+ } = this.props;
56
+ const {
57
+ hasError,
58
+ errorMessage
59
+ } = this.state;
60
+ const isEvaluateMode = mode === 'evaluate';
61
+ return hasError ? /*#__PURE__*/_react.default.createElement(ErrorDiv, null, "An error occured: ", errorMessage) : /*#__PURE__*/_react.default.createElement(StyledUiLayout, {
62
+ extraCSSRules: extraCSSRules
63
+ }, teacherInstructions && /*#__PURE__*/_react.default.createElement(StyledCollapsible, {
64
+ labels: {
65
+ hidden: 'Show Teacher Instructions',
66
+ visible: 'Hide Teacher Instructions'
67
+ }
68
+ }, /*#__PURE__*/_react.default.createElement(_renderUi.PreviewPrompt, {
69
+ prompt: teacherInstructions
70
+ })), prompt && /*#__PURE__*/_react.default.createElement(_renderUi.PreviewPrompt, {
71
+ tagName: "span",
72
+ prompt: prompt
73
+ }), /*#__PURE__*/_react.default.createElement(_container.default, {
74
+ session: session,
75
+ onSessionChange: onSessionChange,
76
+ isEvaluateMode: isEvaluateMode,
77
+ imageDimensions: imageDimensions,
78
+ imageUrl: imageUrl,
79
+ backgroundImageEnabled: backgroundImageEnabled,
80
+ disabled: disabled,
81
+ language: language
82
+ }));
83
+ }
84
+ }
85
+ DrawingResponseComponent.propTypes = {
86
+ model: _propTypes.default.object.isRequired,
87
+ onSessionChange: _propTypes.default.func.isRequired,
88
+ session: _propTypes.default.object.isRequired
89
+ };
90
+ var _default = exports.default = DrawingResponseComponent;
91
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_propTypes","_renderUi","_styles","_container","StyledUiLayout","styled","UiLayout","color","text","backgroundColor","background","StyledCollapsible","Collapsible","theme","marginBottom","spacing","ErrorDiv","DrawingResponseComponent","React","Component","constructor","props","state","showCorrect","hasError","getDerivedStateFromError","error","errorMessage","message","render","model","extraCSSRules","disabled","imageDimensions","imageUrl","prompt","mode","teacherInstructions","backgroundImageEnabled","language","session","onSessionChange","isEvaluateMode","default","createElement","labels","hidden","visible","PreviewPrompt","tagName","propTypes","PropTypes","object","isRequired","func","_default","exports"],"sources":["../../src/drawing-response/index.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { color, Collapsible, PreviewPrompt, UiLayout } from '@pie-lib/render-ui';\nimport { styled } from '@mui/material/styles';\n\nimport Container from './container';\n\nconst StyledUiLayout = styled(UiLayout)({\n color: color.text(),\n backgroundColor: color.background(),\n});\n\nconst StyledCollapsible = styled(Collapsible)(({ theme }) => ({\n marginBottom: theme.spacing(2),\n}));\n\nconst ErrorDiv = styled('div')({\n color: color.text(),\n backgroundColor: color.background(),\n});\n\nclass DrawingResponseComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showCorrect: false,\n hasError: false,\n };\n }\n\n static getDerivedStateFromError(error) {\n return { hasError: true, errorMessage: error.message };\n }\n\n render() {\n const {\n model: {\n extraCSSRules,\n disabled,\n imageDimensions,\n imageUrl,\n prompt,\n mode,\n teacherInstructions,\n backgroundImageEnabled,\n language,\n },\n session,\n onSessionChange,\n } = this.props;\n const { hasError, errorMessage } = this.state;\n const isEvaluateMode = mode === 'evaluate';\n\n return hasError ? (\n <ErrorDiv>An error occured: {errorMessage}</ErrorDiv>\n ) : (\n <StyledUiLayout extraCSSRules={extraCSSRules}>\n {teacherInstructions && (\n <StyledCollapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n >\n <PreviewPrompt prompt={teacherInstructions} />\n </StyledCollapsible>\n )}\n\n {prompt && <PreviewPrompt tagName=\"span\" prompt={prompt} />}\n\n <Container\n session={session}\n onSessionChange={onSessionChange}\n isEvaluateMode={isEvaluateMode}\n imageDimensions={imageDimensions}\n imageUrl={imageUrl}\n backgroundImageEnabled={backgroundImageEnabled}\n disabled={disabled}\n language={language}\n />\n </StyledUiLayout>\n );\n }\n}\n\nDrawingResponseComponent.propTypes = {\n model: PropTypes.object.isRequired,\n onSessionChange: PropTypes.func.isRequired,\n session: PropTypes.object.isRequired,\n};\n\nexport default DrawingResponseComponent;\n"],"mappings":"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","ignoreList":[]}
package/lib/index.js ADDED
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _client = require("react-dom/client");
11
+ var _lodashEs = require("lodash-es");
12
+ var _mathRendering = require("@pie-lib/math-rendering");
13
+ var _piePlayerEvents = require("@pie-framework/pie-player-events");
14
+ var _drawingResponse = _interopRequireDefault(require("./drawing-response"));
15
+ class DrawingResponse extends HTMLElement {
16
+ constructor() {
17
+ super();
18
+ (0, _defineProperty2.default)(this, "sessionChanged", update => {
19
+ this._session.drawables = update.drawables;
20
+ this._session.texts = update.texts;
21
+ this._session.width = update.width;
22
+ this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));
23
+ this._render();
24
+ });
25
+ this._root = null;
26
+ }
27
+ set model(m) {
28
+ this._model = m;
29
+ this.dispatchEvent(new _piePlayerEvents.ModelSetEvent(this.tagName.toLowerCase(), this.isComplete(), !!this._model));
30
+ this._render();
31
+ }
32
+ isComplete() {
33
+ return this._session && (!(0, _lodashEs.isEmpty)(this._session.drawables) || !(0, _lodashEs.isEmpty)(this._session.texts));
34
+ }
35
+ set session(s) {
36
+ this._session = s;
37
+ this._render();
38
+ }
39
+ get session() {
40
+ return this._session;
41
+ }
42
+ connectedCallback() {
43
+ this._render();
44
+ }
45
+ _render() {
46
+ if (this._model && this._session) {
47
+ const el = /*#__PURE__*/_react.default.createElement(_drawingResponse.default, {
48
+ model: this._model,
49
+ session: this._session,
50
+ onSessionChange: this.sessionChanged
51
+ });
52
+ if (!this._root) {
53
+ this._root = (0, _client.createRoot)(this);
54
+ }
55
+ this._root.render(el);
56
+ queueMicrotask(() => {
57
+ (0, _mathRendering.renderMath)(this);
58
+ });
59
+ }
60
+ }
61
+ disconnectedCallback() {
62
+ if (this._root) {
63
+ this._root.unmount();
64
+ }
65
+ }
66
+ }
67
+ exports.default = DrawingResponse;
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_lodashEs","_mathRendering","_piePlayerEvents","_drawingResponse","DrawingResponse","HTMLElement","constructor","_defineProperty2","default","update","_session","drawables","texts","width","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","isComplete","_render","_root","model","m","_model","ModelSetEvent","isEmpty","session","s","connectedCallback","el","React","createElement","DrawingResponseComponent","onSessionChange","sessionChanged","createRoot","render","queueMicrotask","renderMath","disconnectedCallback","unmount","exports"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { isEmpty } from 'lodash-es';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-framework/pie-player-events';\n\nimport DrawingResponseComponent from './drawing-response';\n\nexport default class DrawingResponse extends HTMLElement {\n constructor() {\n super();\n this._root = null;\n }\n\n set model(m) {\n this._model = m;\n\n this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), this.isComplete(), !!this._model));\n this._render();\n }\n\n isComplete() {\n return this._session && (!isEmpty(this._session.drawables) || !isEmpty(this._session.texts));\n }\n\n sessionChanged = (update) => {\n this._session.drawables = update.drawables;\n this._session.texts = update.texts;\n this._session.width = update.width;\n\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));\n\n this._render();\n };\n\n set session(s) {\n this._session = s;\n this._render();\n }\n\n get session() {\n return this._session;\n }\n\n connectedCallback() {\n this._render();\n }\n\n _render() {\n if (this._model && this._session) {\n const el = React.createElement(DrawingResponseComponent, {\n model: this._model,\n session: this._session,\n onSessionChange: this.sessionChanged,\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(el);\n queueMicrotask(() => {\n renderMath(this);\n });\n }\n }\n\n disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n }\n }\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AACA,IAAAI,gBAAA,GAAAJ,OAAA;AAEA,IAAAK,gBAAA,GAAAN,sBAAA,CAAAC,OAAA;AAEe,MAAMM,eAAe,SAASC,WAAW,CAAC;EACvDC,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAAC,IAAAC,gBAAA,CAAAC,OAAA,0BAeQC,MAAM,IAAK;MAC3B,IAAI,CAACC,QAAQ,CAACC,SAAS,GAAGF,MAAM,CAACE,SAAS;MAC1C,IAAI,CAACD,QAAQ,CAACE,KAAK,GAAGH,MAAM,CAACG,KAAK;MAClC,IAAI,CAACF,QAAQ,CAACG,KAAK,GAAGJ,MAAM,CAACI,KAAK;MAElC,IAAI,CAACC,aAAa,CAAC,IAAIC,oCAAmB,CAAC,IAAI,CAACC,OAAO,CAACC,WAAW,CAAC,CAAC,EAAE,IAAI,CAACC,UAAU,CAAC,CAAC,CAAC,CAAC;MAE1F,IAAI,CAACC,OAAO,CAAC,CAAC;IAChB,CAAC;IAtBC,IAAI,CAACC,KAAK,GAAG,IAAI;EACnB;EAEA,IAAIC,KAAKA,CAACC,CAAC,EAAE;IACX,IAAI,CAACC,MAAM,GAAGD,CAAC;IAEf,IAAI,CAACR,aAAa,CAAC,IAAIU,8BAAa,CAAC,IAAI,CAACR,OAAO,CAACC,WAAW,CAAC,CAAC,EAAE,IAAI,CAACC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAACK,MAAM,CAAC,CAAC;IACnG,IAAI,CAACJ,OAAO,CAAC,CAAC;EAChB;EAEAD,UAAUA,CAAA,EAAG;IACX,OAAO,IAAI,CAACR,QAAQ,KAAK,CAAC,IAAAe,iBAAO,EAAC,IAAI,CAACf,QAAQ,CAACC,SAAS,CAAC,IAAI,CAAC,IAAAc,iBAAO,EAAC,IAAI,CAACf,QAAQ,CAACE,KAAK,CAAC,CAAC;EAC9F;EAYA,IAAIc,OAAOA,CAACC,CAAC,EAAE;IACb,IAAI,CAACjB,QAAQ,GAAGiB,CAAC;IACjB,IAAI,CAACR,OAAO,CAAC,CAAC;EAChB;EAEA,IAAIO,OAAOA,CAAA,EAAG;IACZ,OAAO,IAAI,CAAChB,QAAQ;EACtB;EAEAkB,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAACT,OAAO,CAAC,CAAC;EAChB;EAEAA,OAAOA,CAAA,EAAG;IACR,IAAI,IAAI,CAACI,MAAM,IAAI,IAAI,CAACb,QAAQ,EAAE;MAChC,MAAMmB,EAAE,gBAAGC,cAAK,CAACC,aAAa,CAACC,wBAAwB,EAAE;QACvDX,KAAK,EAAE,IAAI,CAACE,MAAM;QAClBG,OAAO,EAAE,IAAI,CAAChB,QAAQ;QACtBuB,eAAe,EAAE,IAAI,CAACC;MACxB,CAAC,CAAC;MAEF,IAAI,CAAC,IAAI,CAACd,KAAK,EAAE;QACf,IAAI,CAACA,KAAK,GAAG,IAAAe,kBAAU,EAAC,IAAI,CAAC;MAC/B;MACA,IAAI,CAACf,KAAK,CAACgB,MAAM,CAACP,EAAE,CAAC;MACrBQ,cAAc,CAAC,MAAM;QACnB,IAAAC,yBAAU,EAAC,IAAI,CAAC;MAClB,CAAC,CAAC;IACJ;EACF;EAEAC,oBAAoBA,CAAA,EAAG;IACrB,IAAI,IAAI,CAACnB,KAAK,EAAE;MACd,IAAI,CAACA,KAAK,CAACoB,OAAO,CAAC,CAAC;IACtB;EACF;AACF;AAACC,OAAA,CAAAjC,OAAA,GAAAJ,eAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,7 +1,11 @@
1
1
  {
2
2
  "name": "@pie-element/drawing-response",
3
- "version": "12.1.2-next.2",
3
+ "repository": "pie-framework/pie-elements",
4
+ "version": "12.1.2",
4
5
  "description": "",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
5
9
  "dependencies": {
6
10
  "@emotion/react": "^11.14.0",
7
11
  "@emotion/style": "^0.8.0",
@@ -9,90 +13,23 @@
9
13
  "@mdi/react": "^1.1.1",
10
14
  "@mui/icons-material": "^7.3.4",
11
15
  "@mui/material": "^7.3.4",
12
- "@pie-lib/render-ui": "6.1.1-next.37",
13
- "@pie-lib/translator": "4.0.3-next.0",
16
+ "@pie-framework/pie-player-events": "^0.1.0",
17
+ "@pie-lib/math-rendering": "5.0.2",
18
+ "@pie-lib/render-ui": "6.1.1",
19
+ "@pie-lib/translator": "4.0.2",
14
20
  "konva": "8.3.0",
21
+ "lodash-es": "^4.17.23",
15
22
  "prop-types": "^15.8.1",
16
- "react-konva": "^18.2.14",
17
- "@pie-element/shared-configure-events": "0.1.0",
18
- "debug": "^4.4.3",
19
- "@pie-lib/config-ui": "13.0.4-next.30",
20
- "@pie-lib/editable-html-tip-tap": "2.1.2-next.30",
21
- "@pie-element/shared-lodash": "0.1.1-next.0",
22
- "@pie-element/shared-math-rendering-mathjax": "0.1.1-next.0",
23
- "@pie-element/shared-player-events": "0.1.0"
24
- },
25
- "peerDependencies": {
26
- "react": "^18.0.0",
27
- "react-dom": "^18.0.0"
28
- },
29
- "exports": {
30
- ".": {
31
- "types": "./dist/index.d.ts",
32
- "default": "./dist/index.js"
33
- },
34
- "./delivery": {
35
- "types": "./dist/delivery/index.d.ts",
36
- "default": "./dist/delivery/index.js"
37
- },
38
- "./browser/delivery": {
39
- "default": "./dist/browser/delivery/index.js"
40
- },
41
- "./author": {
42
- "types": "./dist/author/index.d.ts",
43
- "default": "./dist/author/index.js"
44
- },
45
- "./browser/author": {
46
- "default": "./dist/browser/author/index.js"
47
- },
48
- "./configure": {
49
- "types": "./dist/author/index.d.ts",
50
- "default": "./dist/author/index.js"
51
- },
52
- "./controller": {
53
- "types": "./dist/controller/index.d.ts",
54
- "default": "./dist/controller/index.js"
55
- },
56
- "./controller.js": {
57
- "types": "./dist/controller/index.d.ts",
58
- "default": "./dist/controller/index.js"
59
- },
60
- "./browser/controller": {
61
- "default": "./dist/browser/controller/index.js"
62
- },
63
- "./runtime-support": {
64
- "types": "./dist/runtime-support.d.ts",
65
- "default": "./dist/runtime-support.js"
66
- }
67
- },
68
- "type": "module",
69
- "main": "./dist/index.js",
70
- "types": "./dist/index.d.ts",
71
- "files": [
72
- "configure.js",
73
- "controller.js",
74
- "dist"
75
- ],
76
- "sideEffects": false,
77
- "devDependencies": {
78
- "vite": "^8.0.1",
79
- "typescript": "^5.9.3",
80
- "@vitejs/plugin-react": "^6.0.1",
81
- "@types/react": "^18.2.0",
82
- "@types/react-dom": "^18.2.0"
23
+ "react": "18.3.1",
24
+ "react-dom": "18.3.1",
25
+ "react-konva": "^18.2.14"
83
26
  },
27
+ "author": "pie framework developers",
28
+ "license": "ISC",
29
+ "gitHead": "206ff17a94e8e197744d059f97ad2b9a1bc9145d",
84
30
  "scripts": {
85
- "build": "bun x vite build && bun x vite build --config ../../../tools/vite/element-browser.config.ts && bun x vite build --config vite.config.iife.ts && bun x tsc --emitDeclarationOnly",
86
- "dev": "bun x vite",
87
- "demo": "bun x vite --mode demo",
88
- "test": "bun x vitest run"
31
+ "postpublish": "../../scripts/postpublish"
89
32
  },
90
- "pie": {
91
- "controller": "@pie-element/drawing-response/controller",
92
- "configure": "@pie-element/drawing-response/configure",
93
- "browserSharedDependencies": {
94
- "react": "18.2.0",
95
- "react-dom": "18.2.0"
96
- }
97
- }
33
+ "main": "lib/index.js",
34
+ "module": "src/index.js"
98
35
  }
@@ -0,0 +1,103 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import DrawingResponse from '../drawing-response';
4
+
5
+ // Mock @pie-lib/render-ui
6
+ jest.mock('@pie-lib/render-ui', () => ({
7
+ color: {
8
+ text: () => '#000',
9
+ background: () => '#fff',
10
+ },
11
+ Collapsible: ({ children, labels }) => (
12
+ <div data-testid="collapsible">
13
+ <button>{labels.hidden}</button>
14
+ {children}
15
+ </div>
16
+ ),
17
+ PreviewPrompt: ({ prompt }) => <span data-testid="preview-prompt">{prompt}</span>,
18
+ UiLayout: ({ children }) => <div data-testid="ui-layout">{children}</div>,
19
+ }));
20
+
21
+ // Mock the Container component since it has complex dependencies
22
+ jest.mock('../drawing-response/container', () => {
23
+ return function MockContainer() {
24
+ return <div data-testid="drawing-container">Drawing Container</div>;
25
+ };
26
+ });
27
+
28
+ describe('DrawingResponse', () => {
29
+ const defaultProps = {
30
+ model: {
31
+ disabled: false,
32
+ imageDimensions: {
33
+ height: 400,
34
+ width: 600,
35
+ },
36
+ imageUrl: 'http://example.com/image.png',
37
+ mode: 'gather',
38
+ prompt: 'Draw your response',
39
+ backgroundImageEnabled: true,
40
+ },
41
+ session: {},
42
+ onSessionChange: jest.fn(),
43
+ };
44
+
45
+ const renderDrawingResponse = (propsOverrides = {}) => {
46
+ const props = { ...defaultProps, ...propsOverrides };
47
+ return render(<DrawingResponse {...props} />);
48
+ };
49
+
50
+ describe('prompt', () => {
51
+ it('displays the prompt', () => {
52
+ renderDrawingResponse();
53
+ expect(screen.getByText('Draw your response')).toBeInTheDocument();
54
+ });
55
+
56
+ it('does not render prompt when not provided', () => {
57
+ renderDrawingResponse({
58
+ model: { ...defaultProps.model, prompt: '' },
59
+ });
60
+ // PreviewPrompt should not be in the document when prompt is empty
61
+ const prompts = screen.queryAllByTestId('preview-prompt');
62
+ expect(prompts.every(p => p.textContent !== 'Draw your response')).toBe(true);
63
+ });
64
+ });
65
+
66
+ describe('teacher instructions', () => {
67
+ it('does not show collapsible when teacherInstructions is not provided', () => {
68
+ renderDrawingResponse();
69
+ expect(screen.queryByTestId('collapsible')).not.toBeInTheDocument();
70
+ });
71
+
72
+ it('shows collapsible when teacherInstructions is provided', () => {
73
+ renderDrawingResponse({
74
+ model: { ...defaultProps.model, teacherInstructions: 'Grade based on creativity' },
75
+ });
76
+ expect(screen.getByTestId('collapsible')).toBeInTheDocument();
77
+ expect(screen.getByText('Grade based on creativity')).toBeInTheDocument();
78
+ });
79
+ });
80
+
81
+ describe('container', () => {
82
+ it('renders the drawing container', () => {
83
+ renderDrawingResponse();
84
+ expect(screen.getByTestId('drawing-container')).toBeInTheDocument();
85
+ });
86
+ });
87
+
88
+ describe('modes', () => {
89
+ it('renders in gather mode', () => {
90
+ renderDrawingResponse({
91
+ model: { ...defaultProps.model, mode: 'gather' },
92
+ });
93
+ expect(screen.getByTestId('ui-layout')).toBeInTheDocument();
94
+ });
95
+
96
+ it('renders in evaluate mode', () => {
97
+ renderDrawingResponse({
98
+ model: { ...defaultProps.model, mode: 'evaluate' },
99
+ });
100
+ expect(screen.getByTestId('ui-layout')).toBeInTheDocument();
101
+ });
102
+ });
103
+ });
@@ -0,0 +1,82 @@
1
+ import { render } from '@testing-library/react';
2
+ import React from 'react';
3
+ import { ThemeProvider, createTheme } from '@mui/material/styles';
4
+
5
+ import { Container } from '../container';
6
+
7
+ jest.mock('../drawable-palette', () => (props) => <div data-testid="drawable-palette" {...props} />);
8
+ jest.mock('../drawable-main', () => (props) => <div data-testid="drawable-main" {...props} />);
9
+ jest.mock('../drawable-text', () =>
10
+ jest.fn().mockImplementation(() => ({
11
+ removeEventListeners: jest.fn(),
12
+ }))
13
+ );
14
+ jest.mock('../button', () => (props) => <button {...props}>{props.label}</button>);
15
+ jest.mock('../icon', () => (props) => <span {...props} />);
16
+
17
+ const theme = createTheme();
18
+
19
+ beforeEach(() => {
20
+ jest.useFakeTimers();
21
+ });
22
+
23
+ afterEach(() => {
24
+ jest.useRealTimers();
25
+ });
26
+
27
+ describe('Container', () => {
28
+ let onSessionChange = jest.fn();
29
+
30
+ beforeEach(() => {
31
+ jest.clearAllMocks();
32
+ });
33
+
34
+ const renderContainer = (props = {}) => {
35
+ const defaultProps = {
36
+ className: 'className',
37
+ onSessionChange,
38
+ imageDimensions: {},
39
+ imageUrl: 'url',
40
+ session: {},
41
+ backgroundImageEnabled: true,
42
+ ...props,
43
+ };
44
+ return render(
45
+ <ThemeProvider theme={theme}>
46
+ <Container {...defaultProps} />
47
+ </ThemeProvider>
48
+ );
49
+ };
50
+
51
+ describe('logic', () => {
52
+ describe('setDimensions', () => {
53
+ it('handles errors and clears interval', () => {
54
+ // Create a container instance directly to test the setDimensions method
55
+ const testInstance = new Container({
56
+ onSessionChange,
57
+ imageDimensions: {},
58
+ imageUrl: 'url',
59
+ session: {},
60
+ backgroundImageEnabled: true,
61
+ });
62
+
63
+ // Set drawable to undefined to trigger error handling
64
+ testInstance.drawable = undefined;
65
+
66
+ // Spy on clearInterval
67
+ const clearIntervalSpy = jest.spyOn(global, 'clearInterval');
68
+
69
+ // Call setDimensions which should handle the error and clear the interval
70
+ testInstance.setDimensions();
71
+
72
+ // Run all timers to execute the setInterval callback
73
+ jest.runAllTimers();
74
+
75
+ // Verify clearInterval was called
76
+ expect(clearIntervalSpy).toHaveBeenCalled();
77
+
78
+ clearIntervalSpy.mockRestore();
79
+ });
80
+ });
81
+ });
82
+ });
@@ -0,0 +1,24 @@
1
+ import DrawableHelper from '../drawable-helper';
2
+
3
+ describe('DrawableHelper', () => {
4
+ describe('toJson', () => {
5
+ it('emits json', () => {
6
+ class Foo extends DrawableHelper {
7
+ constructor(props) {
8
+ super(props, 'FOO_TYPE');
9
+
10
+ this.foo = 'bar';
11
+ }
12
+ }
13
+
14
+ const foo = new Foo({});
15
+
16
+ const o = foo.toJson();
17
+
18
+ expect(o).toEqual({
19
+ type: 'FOO_TYPE',
20
+ foo: 'bar',
21
+ });
22
+ });
23
+ });
24
+ });