@pie-element/match-list 7.1.2-next.5 → 7.1.3

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 (65) hide show
  1. package/CHANGELOG.json +572 -0
  2. package/CHANGELOG.md +1499 -0
  3. package/LICENSE.md +5 -0
  4. package/README.md +1 -0
  5. package/controller/CHANGELOG.json +242 -0
  6. package/controller/CHANGELOG.md +1047 -0
  7. package/controller/lib/defaults.js +15 -0
  8. package/controller/lib/defaults.js.map +1 -0
  9. package/controller/lib/index.js +246 -0
  10. package/controller/lib/index.js.map +1 -0
  11. package/controller/package.json +25 -0
  12. package/docs/config-schema.json +70 -0
  13. package/docs/config-schema.json.md +55 -0
  14. package/docs/demo/config.js +34 -0
  15. package/docs/demo/generate.js +54 -0
  16. package/docs/demo/index.html +1 -0
  17. package/docs/demo/session.js +6 -0
  18. package/docs/pie-schema.json +170 -0
  19. package/docs/pie-schema.json.md +104 -0
  20. package/lib/answer-area.js +168 -0
  21. package/lib/answer-area.js.map +1 -0
  22. package/lib/answer.js +267 -0
  23. package/lib/answer.js.map +1 -0
  24. package/lib/arrow.js +57 -0
  25. package/lib/arrow.js.map +1 -0
  26. package/lib/choices-list.js +60 -0
  27. package/lib/choices-list.js.map +1 -0
  28. package/lib/droppable-placeholder.js +60 -0
  29. package/lib/droppable-placeholder.js.map +1 -0
  30. package/lib/index.js +86 -0
  31. package/lib/index.js.map +1 -0
  32. package/lib/main.js +220 -0
  33. package/lib/main.js.map +1 -0
  34. package/package.json +22 -69
  35. package/controller.js +0 -1
  36. package/dist/browser/controller/index.js +0 -201
  37. package/dist/browser/controller/index.js.map +0 -1
  38. package/dist/browser/delivery/index.js +0 -13062
  39. package/dist/browser/delivery/index.js.map +0 -1
  40. package/dist/browser/dist-DksDR3d3.js +0 -278
  41. package/dist/browser/dist-DksDR3d3.js.map +0 -1
  42. package/dist/controller/defaults.d.ts +0 -17
  43. package/dist/controller/defaults.js +0 -9
  44. package/dist/controller/index.d.ts +0 -38
  45. package/dist/controller/index.js +0 -105
  46. package/dist/delivery/answer-area.d.ts +0 -27
  47. package/dist/delivery/answer-area.js +0 -92
  48. package/dist/delivery/answer.d.ts +0 -40
  49. package/dist/delivery/answer.js +0 -176
  50. package/dist/delivery/arrow.d.ts +0 -17
  51. package/dist/delivery/arrow.js +0 -35
  52. package/dist/delivery/choices-list.d.ts +0 -21
  53. package/dist/delivery/choices-list.js +0 -35
  54. package/dist/delivery/droppable-placeholder.d.ts +0 -24
  55. package/dist/delivery/droppable-placeholder.js +0 -42
  56. package/dist/delivery/index.d.ts +0 -21
  57. package/dist/delivery/index.js +0 -49
  58. package/dist/delivery/main.d.ts +0 -26
  59. package/dist/delivery/main.js +0 -147
  60. package/dist/index.d.ts +0 -1
  61. package/dist/index.iife.d.ts +0 -8
  62. package/dist/index.iife.js +0 -152
  63. package/dist/index.js +0 -2
  64. package/dist/runtime-support.d.ts +0 -12
  65. package/dist/runtime-support.js +0 -12
package/lib/answer.js ADDED
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.Answer = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _core = require("@dnd-kit/core");
11
+ var _propTypes = _interopRequireDefault(require("prop-types"));
12
+ var _react = _interopRequireDefault(require("react"));
13
+ var _debug = _interopRequireDefault(require("debug"));
14
+ var _styles = require("@mui/material/styles");
15
+ var _drag = require("@pie-lib/drag");
16
+ var _lodashEs = require("lodash-es");
17
+ var _renderUi = require("@pie-lib/render-ui");
18
+ const log = (0, _debug.default)('pie-elements:match-title:answer');
19
+ const HolderNumber = (0, _styles.styled)('div')(({
20
+ theme
21
+ }) => ({
22
+ width: '100%',
23
+ fontSize: '18px',
24
+ textAlign: 'center',
25
+ color: `rgba(${theme.palette.common.black}, 0.6)`
26
+ }));
27
+ const Holder = ({
28
+ index,
29
+ isOver,
30
+ disabled,
31
+ type
32
+ }) => /*#__PURE__*/_react.default.createElement(_drag.PlaceHolder, {
33
+ extraStyles: {
34
+ display: 'flex',
35
+ padding: '0',
36
+ alignItems: 'center',
37
+ justifyContent: 'center',
38
+ height: '40px'
39
+ },
40
+ disabled: disabled,
41
+ isOver: isOver,
42
+ type: type
43
+ }, index !== undefined && /*#__PURE__*/_react.default.createElement(HolderNumber, null, index));
44
+ Holder.propTypes = {
45
+ index: _propTypes.default.number,
46
+ isOver: _propTypes.default.bool,
47
+ disabled: _propTypes.default.bool,
48
+ type: _propTypes.default.string
49
+ };
50
+ const AnswerContentContainer = (0, _styles.styled)('div')(({
51
+ theme,
52
+ isDragging,
53
+ isOver,
54
+ disabled,
55
+ outcome
56
+ }) => ({
57
+ color: _renderUi.color.text(),
58
+ backgroundColor: _renderUi.color.white(),
59
+ border: `1px solid ${outcome === 'correct' ? _renderUi.color.correct() : outcome === 'incorrect' ? _renderUi.color.incorrect() : theme.palette.grey[400]}`,
60
+ cursor: disabled ? 'not-allowed' : 'pointer',
61
+ width: '100%',
62
+ padding: '10px',
63
+ boxSizing: 'border-box',
64
+ overflow: 'hidden',
65
+ transition: 'opacity 200ms linear',
66
+ wordBreak: 'break-word',
67
+ opacity: isDragging && !disabled ? 0.5 : isOver && !disabled ? 0.2 : 1,
68
+ touchAction: 'none'
69
+ }));
70
+ const AnswerContent = props => {
71
+ const {
72
+ isDragging,
73
+ isOver,
74
+ title,
75
+ disabled,
76
+ empty,
77
+ outcome,
78
+ guideIndex,
79
+ type
80
+ } = props;
81
+ if (empty) {
82
+ return /*#__PURE__*/_react.default.createElement(Holder, {
83
+ index: guideIndex,
84
+ isOver: isOver,
85
+ disabled: disabled,
86
+ type: type
87
+ });
88
+ } else {
89
+ return /*#__PURE__*/_react.default.createElement(AnswerContentContainer, {
90
+ isDragging: isDragging,
91
+ isOver: isOver,
92
+ disabled: disabled,
93
+ outcome: outcome,
94
+ dangerouslySetInnerHTML: {
95
+ __html: title
96
+ }
97
+ });
98
+ }
99
+ };
100
+ const AnswerContainer = (0, _styles.styled)('div')(({
101
+ correct,
102
+ theme
103
+ }) => ({
104
+ boxSizing: 'border-box',
105
+ minHeight: 40,
106
+ minWidth: '200px',
107
+ overflow: 'hidden',
108
+ margin: theme.spacing(0.5),
109
+ padding: '0px',
110
+ textAlign: 'center',
111
+ height: 'initial',
112
+ border: correct === true ? `1px solid var(--feedback-correct-bg-color, ${_renderUi.color.correct()})` : correct === false ? `1px solid var(--feedback-incorrect-bg-color, ${_renderUi.color.incorrect()})` : 'none'
113
+ }));
114
+ class Answer extends _react.default.Component {
115
+ constructor(...args) {
116
+ super(...args);
117
+ (0, _defineProperty2.default)(this, "handleTouchStart", e => {
118
+ // do NOT call e.preventDefault() here — it prevents pointer events necessary for dnd-kit.
119
+ // Keep this handler empty or remove it if you don't need it.
120
+ // e.preventDefault();
121
+ });
122
+ }
123
+ componentDidMount() {
124
+ if (this.ref) {
125
+ // NOTE: preventing default on touchstart can block dnd-kit pointer handling on some devices.
126
+ // Consider removing this if you have issues on touch devices.
127
+ this.ref.addEventListener('touchstart', this.handleTouchStart, {
128
+ passive: true
129
+ });
130
+ }
131
+ }
132
+ componentWillUnmount() {
133
+ if (this.ref) {
134
+ this.ref.removeEventListener('touchstart', this.handleTouchStart);
135
+ }
136
+ }
137
+ render() {
138
+ const {
139
+ id,
140
+ title,
141
+ isDragging = false,
142
+ className,
143
+ disabled,
144
+ isOver = false,
145
+ type,
146
+ correct
147
+ } = this.props;
148
+ log('[render], props: ', this.props);
149
+ return /*#__PURE__*/_react.default.createElement(AnswerContainer, {
150
+ correct: correct,
151
+ className: className,
152
+ ref: ref => this.ref = ref
153
+ }, /*#__PURE__*/_react.default.createElement(AnswerContent, {
154
+ title: title,
155
+ id: id,
156
+ isOver: isOver,
157
+ empty: (0, _lodashEs.isEmpty)(title),
158
+ isDragging: isDragging,
159
+ disabled: disabled,
160
+ type: type
161
+ }));
162
+ }
163
+ }
164
+ exports.Answer = Answer;
165
+ (0, _defineProperty2.default)(Answer, "propTypes", {
166
+ className: _propTypes.default.string,
167
+ isDragging: _propTypes.default.bool,
168
+ id: _propTypes.default.any,
169
+ title: _propTypes.default.string,
170
+ isOver: _propTypes.default.bool,
171
+ empty: _propTypes.default.bool,
172
+ type: _propTypes.default.string,
173
+ disabled: _propTypes.default.bool,
174
+ correct: _propTypes.default.bool
175
+ });
176
+ function DragAndDropAnswer(props) {
177
+ const {
178
+ id,
179
+ instanceId,
180
+ promptId,
181
+ draggable = true,
182
+ disabled = false,
183
+ type
184
+ } = props;
185
+ const dragId = `${type || 'answer'}-${id}`;
186
+ // droppable only if promptId exists
187
+ const dropId = promptId !== undefined && promptId !== null ? `drop-${promptId}` : undefined;
188
+ const {
189
+ attributes,
190
+ listeners,
191
+ setNodeRef: setDragRef,
192
+ transform,
193
+ transition,
194
+ isDragging
195
+ } = (0, _core.useDraggable)({
196
+ id: dragId,
197
+ data: {
198
+ type: type || 'answer',
199
+ id,
200
+ instanceId,
201
+ value: props.title,
202
+ promptId
203
+ },
204
+ disabled: !draggable || disabled
205
+ });
206
+ const droppable = (0, _core.useDroppable)({
207
+ id: dropId,
208
+ data: dropId ? {
209
+ type: 'drop-zone',
210
+ promptId,
211
+ instanceId
212
+ } : undefined,
213
+ disabled: disabled || !dropId
214
+ });
215
+ const setDropRef = droppable.setNodeRef;
216
+ const isOver = droppable.isOver;
217
+
218
+ // compute style: apply transform to the element that actually moves
219
+ const transformStyle = transform ? `translate3d(${transform.x}px, ${transform.y}px, 0)` : undefined;
220
+
221
+ // If this item is a drop-zone (prompt slot), we render an outer droppable wrapper.
222
+ // For droppable wrapper we apply style to the outer wrapper
223
+ if (dropId) {
224
+ return /*#__PURE__*/_react.default.createElement("div", {
225
+ ref: setDropRef,
226
+ style: {
227
+ flex: 1,
228
+ transform: transformStyle,
229
+ transition,
230
+ opacity: isDragging ? 0.5 : 1,
231
+ backgroundColor: isOver ? 'rgba(0,0,0,0.05)' : 'transparent'
232
+ }
233
+ }, /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
234
+ ref: setDragRef
235
+ }, listeners, attributes), /*#__PURE__*/_react.default.createElement(Answer, (0, _extends2.default)({}, props, {
236
+ isDragging: isDragging,
237
+ isOver: isOver
238
+ }))));
239
+ }
240
+
241
+ // if there is NO dropId (this is a choice / draggable-only), render only draggable node and apply transform to it.
242
+ return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
243
+ ref: setDragRef
244
+ }, listeners, attributes, {
245
+ style: {
246
+ transform: transformStyle,
247
+ transition,
248
+ cursor: disabled ? 'not-allowed' : 'grab',
249
+ opacity: isDragging ? 0.5 : 1,
250
+ touchAction: draggable && !disabled ? 'none' : 'auto'
251
+ }
252
+ }), /*#__PURE__*/_react.default.createElement(Answer, (0, _extends2.default)({}, props, {
253
+ isDragging: isDragging,
254
+ isOver: false
255
+ })));
256
+ }
257
+ DragAndDropAnswer.propTypes = {
258
+ id: _propTypes.default.any,
259
+ instanceId: _propTypes.default.string,
260
+ promptId: _propTypes.default.any,
261
+ title: _propTypes.default.string,
262
+ draggable: _propTypes.default.bool,
263
+ disabled: _propTypes.default.bool,
264
+ type: _propTypes.default.string
265
+ };
266
+ var _default = exports.default = DragAndDropAnswer;
267
+ //# sourceMappingURL=answer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answer.js","names":["_core","require","_propTypes","_interopRequireDefault","_react","_debug","_styles","_drag","_lodashEs","_renderUi","log","debug","HolderNumber","styled","theme","width","fontSize","textAlign","color","palette","common","black","Holder","index","isOver","disabled","type","default","createElement","PlaceHolder","extraStyles","display","padding","alignItems","justifyContent","height","undefined","propTypes","PropTypes","number","bool","string","AnswerContentContainer","isDragging","outcome","text","backgroundColor","white","border","correct","incorrect","grey","cursor","boxSizing","overflow","transition","wordBreak","opacity","touchAction","AnswerContent","props","title","empty","guideIndex","dangerouslySetInnerHTML","__html","AnswerContainer","minHeight","minWidth","margin","spacing","Answer","React","Component","constructor","args","_defineProperty2","e","componentDidMount","ref","addEventListener","handleTouchStart","passive","componentWillUnmount","removeEventListener","render","id","className","isEmpty","exports","any","DragAndDropAnswer","instanceId","promptId","draggable","dragId","dropId","attributes","listeners","setNodeRef","setDragRef","transform","useDraggable","data","value","droppable","useDroppable","setDropRef","transformStyle","x","y","style","flex","_extends2","_default"],"sources":["../src/answer.jsx"],"sourcesContent":["import { useDraggable, useDroppable } from '@dnd-kit/core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport debug from 'debug';\nimport { styled } from '@mui/material/styles';\nimport { PlaceHolder } from '@pie-lib/drag';\nimport { isEmpty } from 'lodash-es';\nimport { color } from '@pie-lib/render-ui';\n\nconst log = debug('pie-elements:match-title:answer');\n\nconst HolderNumber = styled('div')(({ theme }) => ({\n width: '100%',\n fontSize: '18px',\n textAlign: 'center',\n color: `rgba(${theme.palette.common.black}, 0.6)`,\n}));\n\nconst Holder = ({ index, isOver, disabled, type }) => (\n <PlaceHolder\n extraStyles={{\n display: 'flex',\n padding: '0',\n alignItems: 'center',\n justifyContent: 'center',\n height: '40px',\n }}\n disabled={disabled}\n isOver={isOver}\n type={type}\n >\n {index !== undefined && <HolderNumber>{index}</HolderNumber>}\n </PlaceHolder>\n);\n\nHolder.propTypes = {\n index: PropTypes.number,\n isOver: PropTypes.bool,\n disabled: PropTypes.bool,\n type: PropTypes.string,\n};\n\nconst AnswerContentContainer = styled('div')(({ theme, isDragging, isOver, disabled, outcome }) => ({\n color: color.text(),\n backgroundColor: color.white(),\n border: `1px solid ${outcome === 'correct' ? color.correct() :\n outcome === 'incorrect' ? color.incorrect() :\n theme.palette.grey[400]\n }`,\n cursor: disabled ? 'not-allowed' : 'pointer',\n width: '100%',\n padding: '10px',\n boxSizing: 'border-box',\n overflow: 'hidden',\n transition: 'opacity 200ms linear',\n wordBreak: 'break-word',\n opacity: isDragging && !disabled ? 0.5 : isOver && !disabled ? 0.2 : 1,\n touchAction: 'none'\n}));\n\nconst AnswerContent = (props) => {\n const { isDragging, isOver, title, disabled, empty, outcome, guideIndex, type } = props;\n\n if (empty) {\n return <Holder\n index={guideIndex}\n isOver={isOver}\n disabled={disabled}\n type={type}\n\n />;\n } else {\n return (\n <AnswerContentContainer\n isDragging={isDragging}\n isOver={isOver}\n disabled={disabled}\n outcome={outcome}\n dangerouslySetInnerHTML={{ __html: title }}\n />\n );\n }\n};\n\nconst AnswerContainer = styled('div')(({ correct, theme }) => ({\n boxSizing: 'border-box',\n minHeight: 40,\n minWidth: '200px',\n overflow: 'hidden',\n margin: theme.spacing(0.5),\n padding: '0px',\n textAlign: 'center',\n height: 'initial',\n border: correct === true ? `1px solid var(--feedback-correct-bg-color, ${color.correct()})` :\n correct === false ? `1px solid var(--feedback-incorrect-bg-color, ${color.incorrect()})` :\n 'none',\n}));\n\nexport class Answer extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n isDragging: PropTypes.bool,\n id: PropTypes.any,\n title: PropTypes.string,\n isOver: PropTypes.bool,\n empty: PropTypes.bool,\n type: PropTypes.string,\n disabled: PropTypes.bool,\n correct: PropTypes.bool,\n };\n\n componentDidMount() {\n if (this.ref) {\n // NOTE: preventing default on touchstart can block dnd-kit pointer handling on some devices.\n // Consider removing this if you have issues on touch devices.\n this.ref.addEventListener('touchstart', this.handleTouchStart, { passive: true });\n }\n }\n\n componentWillUnmount() {\n if (this.ref) {\n this.ref.removeEventListener('touchstart', this.handleTouchStart);\n }\n }\n\n handleTouchStart = (e) => {\n // do NOT call e.preventDefault() here — it prevents pointer events necessary for dnd-kit.\n // Keep this handler empty or remove it if you don't need it.\n // e.preventDefault();\n };\n\n render() {\n const {\n id,\n title,\n isDragging = false,\n className,\n disabled,\n isOver = false,\n type,\n correct,\n } = this.props;\n\n log('[render], props: ', this.props);\n\n return (\n <AnswerContainer correct={correct} className={className} ref={(ref) => (this.ref = ref)}>\n <AnswerContent\n title={title}\n id={id}\n isOver={isOver}\n empty={isEmpty(title)}\n isDragging={isDragging}\n disabled={disabled}\n type={type}\n />\n </AnswerContainer>\n );\n }\n}\n\nfunction DragAndDropAnswer(props) {\n const { id, instanceId, promptId, draggable = true, disabled = false, type } = props;\n\n const dragId = `${type || 'answer'}-${id}`;\n // droppable only if promptId exists\n const dropId = promptId !== undefined && promptId !== null ? `drop-${promptId}` : undefined;\n\n const {\n attributes,\n listeners,\n setNodeRef: setDragRef,\n transform,\n transition,\n isDragging,\n } = useDraggable({\n id: dragId,\n data: {\n type: type || 'answer',\n id,\n instanceId,\n value: props.title,\n promptId,\n },\n disabled: !draggable || disabled,\n });\n\n const droppable = useDroppable({\n id: dropId,\n data: dropId ? { type: 'drop-zone', promptId, instanceId } : undefined,\n disabled: disabled || !dropId,\n });\n\n const setDropRef = droppable.setNodeRef;\n const isOver = droppable.isOver;\n\n // compute style: apply transform to the element that actually moves\n const transformStyle = transform\n ? `translate3d(${transform.x}px, ${transform.y}px, 0)`\n : undefined;\n\n // If this item is a drop-zone (prompt slot), we render an outer droppable wrapper.\n // For droppable wrapper we apply style to the outer wrapper\n if (dropId) {\n return (\n <div\n ref={setDropRef}\n style={{\n flex: 1,\n transform: transformStyle,\n transition,\n opacity: isDragging ? 0.5 : 1,\n backgroundColor: isOver ? 'rgba(0,0,0,0.05)' : 'transparent',\n }}\n >\n <div ref={setDragRef} {...listeners} {...attributes}>\n <Answer {...props} isDragging={isDragging} isOver={isOver} />\n </div>\n </div>\n );\n }\n\n // if there is NO dropId (this is a choice / draggable-only), render only draggable node and apply transform to it.\n return (\n <div\n ref={setDragRef}\n {...listeners}\n {...attributes}\n style={{\n transform: transformStyle,\n transition,\n cursor: disabled ? 'not-allowed' : 'grab',\n opacity: isDragging ? 0.5 : 1,\n touchAction: draggable && !disabled ? 'none' : 'auto',\n }}\n >\n <Answer {...props} isDragging={isDragging} isOver={false} />\n </div>\n );\n}\n\nDragAndDropAnswer.propTypes = {\n id: PropTypes.any,\n instanceId: PropTypes.string,\n promptId: PropTypes.any,\n title: PropTypes.string,\n draggable: PropTypes.bool,\n disabled: PropTypes.bool,\n type: PropTypes.string,\n};\n\nexport default DragAndDropAnswer;\n"],"mappings":"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","ignoreList":[]}
package/lib/arrow.js ADDED
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.Arrow = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+ var _ArrowDropDown = _interopRequireDefault(require("@mui/icons-material/ArrowDropDown"));
12
+ var _styles = require("@mui/material/styles");
13
+ const ArrowContainer = (0, _styles.styled)('div')({
14
+ display: 'inline-block',
15
+ position: 'relative',
16
+ width: '100%'
17
+ });
18
+ const Line = (0, _styles.styled)('span')(({
19
+ theme,
20
+ isRight
21
+ }) => ({
22
+ backgroundColor: theme.palette.grey[500],
23
+ bottom: isRight ? 20 : 19,
24
+ content: '""',
25
+ display: 'block',
26
+ height: 1,
27
+ left: 20,
28
+ position: 'absolute',
29
+ width: '100%'
30
+ }));
31
+ class Arrow extends _react.default.Component {
32
+ render() {
33
+ const {
34
+ direction
35
+ } = this.props;
36
+ const extraStyle = direction === 'left' ? {} : {
37
+ transform: 'rotate(180deg)'
38
+ };
39
+ return /*#__PURE__*/_react.default.createElement(ArrowContainer, {
40
+ style: extraStyle
41
+ }, /*#__PURE__*/_react.default.createElement(_ArrowDropDown.default, {
42
+ style: {
43
+ transform: 'rotate(90deg)',
44
+ color: '#979797',
45
+ fontSize: 40
46
+ }
47
+ }), /*#__PURE__*/_react.default.createElement(Line, {
48
+ isRight: direction !== 'left'
49
+ }));
50
+ }
51
+ }
52
+ exports.Arrow = Arrow;
53
+ (0, _defineProperty2.default)(Arrow, "propTypes", {
54
+ direction: _propTypes.default.string
55
+ });
56
+ var _default = exports.default = Arrow;
57
+ //# sourceMappingURL=arrow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrow.js","names":["_react","_interopRequireDefault","require","_propTypes","_ArrowDropDown","_styles","ArrowContainer","styled","display","position","width","Line","theme","isRight","backgroundColor","palette","grey","bottom","content","height","left","Arrow","React","Component","render","direction","props","extraStyle","transform","default","createElement","style","color","fontSize","exports","_defineProperty2","PropTypes","string","_default"],"sources":["../src/arrow.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ArrowHead from '@mui/icons-material/ArrowDropDown';\nimport { styled } from '@mui/material/styles';\n\nconst ArrowContainer = styled('div')({\n display: 'inline-block',\n position: 'relative',\n width: '100%',\n});\n\nconst Line = styled('span')(({ theme, isRight }) => ({\n backgroundColor: theme.palette.grey[500],\n bottom: isRight ? 20 : 19,\n content: '\"\"',\n display: 'block',\n height: 1,\n left: 20,\n position: 'absolute',\n width: '100%',\n}));\n\nexport class Arrow extends React.Component {\n static propTypes = {\n direction: PropTypes.string,\n };\n\n render() {\n const { direction } = this.props;\n\n const extraStyle =\n direction === 'left'\n ? {}\n : {\n transform: 'rotate(180deg)',\n };\n\n return (\n <ArrowContainer style={extraStyle}>\n <ArrowHead\n style={{\n transform: 'rotate(90deg)',\n color: '#979797',\n fontSize: 40,\n }}\n />\n <Line isRight={direction !== 'left'} />\n </ArrowContainer>\n );\n }\n}\n\nexport default Arrow;\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,cAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AAEA,MAAMI,cAAc,GAAG,IAAAC,cAAM,EAAC,KAAK,CAAC,CAAC;EACnCC,OAAO,EAAE,cAAc;EACvBC,QAAQ,EAAE,UAAU;EACpBC,KAAK,EAAE;AACT,CAAC,CAAC;AAEF,MAAMC,IAAI,GAAG,IAAAJ,cAAM,EAAC,MAAM,CAAC,CAAC,CAAC;EAAEK,KAAK;EAAEC;AAAQ,CAAC,MAAM;EACnDC,eAAe,EAAEF,KAAK,CAACG,OAAO,CAACC,IAAI,CAAC,GAAG,CAAC;EACxCC,MAAM,EAAEJ,OAAO,GAAG,EAAE,GAAG,EAAE;EACzBK,OAAO,EAAE,IAAI;EACbV,OAAO,EAAE,OAAO;EAChBW,MAAM,EAAE,CAAC;EACTC,IAAI,EAAE,EAAE;EACRX,QAAQ,EAAE,UAAU;EACpBC,KAAK,EAAE;AACT,CAAC,CAAC,CAAC;AAEI,MAAMW,KAAK,SAASC,cAAK,CAACC,SAAS,CAAC;EAKzCC,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC;IAAU,CAAC,GAAG,IAAI,CAACC,KAAK;IAEhC,MAAMC,UAAU,GACdF,SAAS,KAAK,MAAM,GAChB,CAAC,CAAC,GACF;MACEG,SAAS,EAAE;IACb,CAAC;IAEP,oBACE5B,MAAA,CAAA6B,OAAA,CAAAC,aAAA,CAACxB,cAAc;MAACyB,KAAK,EAAEJ;IAAW,gBAChC3B,MAAA,CAAA6B,OAAA,CAAAC,aAAA,CAAC1B,cAAA,CAAAyB,OAAS;MACRE,KAAK,EAAE;QACLH,SAAS,EAAE,eAAe;QAC1BI,KAAK,EAAE,SAAS;QAChBC,QAAQ,EAAE;MACZ;IAAE,CACH,CAAC,eACFjC,MAAA,CAAA6B,OAAA,CAAAC,aAAA,CAACnB,IAAI;MAACE,OAAO,EAAEY,SAAS,KAAK;IAAO,CAAE,CACxB,CAAC;EAErB;AACF;AAACS,OAAA,CAAAb,KAAA,GAAAA,KAAA;AAAA,IAAAc,gBAAA,CAAAN,OAAA,EA5BYR,KAAK,eACG;EACjBI,SAAS,EAAEW,kBAAS,CAACC;AACvB,CAAC;AAAA,IAAAC,QAAA,GAAAJ,OAAA,CAAAL,OAAA,GA2BYR,KAAK","ignoreList":[]}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.ChoicesList = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _react = _interopRequireDefault(require("react"));
11
+ var _propTypes = _interopRequireDefault(require("prop-types"));
12
+ var _styles = require("@mui/material/styles");
13
+ var _lodashEs = require("lodash-es");
14
+ var _answer = _interopRequireDefault(require("./answer"));
15
+ var _droppablePlaceholder = require("./droppable-placeholder");
16
+ const ChoicesContainer = (0, _styles.styled)('div')(({
17
+ theme
18
+ }) => ({
19
+ marginBottom: theme.spacing(2)
20
+ }));
21
+ class ChoicesList extends _react.default.Component {
22
+ render() {
23
+ const {
24
+ model,
25
+ disabled,
26
+ session,
27
+ instanceId,
28
+ onRemoveAnswer
29
+ } = this.props;
30
+ const {
31
+ config
32
+ } = model;
33
+ const {
34
+ duplicates
35
+ } = config;
36
+ const filteredAnswers = config.answers.filter(answer => duplicates || (0, _lodashEs.isEmpty)(session) || !session.value || (0, _lodashEs.isUndefined)((0, _lodashEs.find)(session.value, val => val === answer.id))).map(answer => /*#__PURE__*/_react.default.createElement(_answer.default, (0, _extends2.default)({
37
+ key: answer.id,
38
+ instanceId: instanceId,
39
+ draggable: true,
40
+ disabled: disabled,
41
+ session: session,
42
+ type: "choice"
43
+ }, answer)));
44
+ return /*#__PURE__*/_react.default.createElement(ChoicesContainer, null, /*#__PURE__*/_react.default.createElement(_droppablePlaceholder.DroppablePlaceholder, {
45
+ id: "choices-pool",
46
+ disabled: disabled,
47
+ onRemoveAnswer: onRemoveAnswer
48
+ }, filteredAnswers));
49
+ }
50
+ }
51
+ exports.ChoicesList = ChoicesList;
52
+ (0, _defineProperty2.default)(ChoicesList, "propTypes", {
53
+ session: _propTypes.default.object.isRequired,
54
+ instanceId: _propTypes.default.string.isRequired,
55
+ model: _propTypes.default.object.isRequired,
56
+ disabled: _propTypes.default.bool.isRequired,
57
+ onRemoveAnswer: _propTypes.default.func
58
+ });
59
+ var _default = exports.default = ChoicesList;
60
+ //# sourceMappingURL=choices-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"choices-list.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_lodashEs","_answer","_droppablePlaceholder","ChoicesContainer","styled","theme","marginBottom","spacing","ChoicesList","React","Component","render","model","disabled","session","instanceId","onRemoveAnswer","props","config","duplicates","filteredAnswers","answers","filter","answer","isEmpty","value","isUndefined","find","val","id","map","default","createElement","_extends2","key","draggable","type","DroppablePlaceholder","exports","_defineProperty2","PropTypes","object","isRequired","string","bool","func","_default"],"sources":["../src/choices-list.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport { find, isEmpty, isUndefined } from 'lodash-es';\nimport DragAndDropAnswer from './answer';\nimport { DroppablePlaceholder } from './droppable-placeholder';\n\nconst ChoicesContainer = styled('div')(({ theme }) => ({\n marginBottom: theme.spacing(2),\n}));\n\nexport class ChoicesList extends React.Component {\n static propTypes = {\n session: PropTypes.object.isRequired,\n instanceId: PropTypes.string.isRequired,\n model: PropTypes.object.isRequired,\n disabled: PropTypes.bool.isRequired,\n onRemoveAnswer: PropTypes.func,\n };\n\n render() {\n const { model, disabled, session, instanceId, onRemoveAnswer } = this.props;\n const { config } = model;\n const { duplicates } = config;\n\n const filteredAnswers = config.answers\n .filter(\n (answer) =>\n duplicates ||\n isEmpty(session) ||\n !session.value ||\n isUndefined(find(session.value, (val) => val === answer.id)),\n )\n .map((answer) => (\n <DragAndDropAnswer\n key={answer.id}\n instanceId={instanceId}\n draggable={true}\n disabled={disabled}\n session={session}\n type=\"choice\"\n {...answer}\n />\n ));\n\n return (\n <ChoicesContainer>\n <DroppablePlaceholder id=\"choices-pool\" disabled={disabled} onRemoveAnswer={onRemoveAnswer}>\n {filteredAnswers}\n </DroppablePlaceholder>\n </ChoicesContainer>\n );\n }\n}\n\nexport default ChoicesList;\n"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,SAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,qBAAA,GAAAL,OAAA;AAEA,MAAMM,gBAAgB,GAAG,IAAAC,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC;EAAEC;AAAM,CAAC,MAAM;EACrDC,YAAY,EAAED,KAAK,CAACE,OAAO,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEI,MAAMC,WAAW,SAASC,cAAK,CAACC,SAAS,CAAC;EAS/CC,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,KAAK;MAAEC,QAAQ;MAAEC,OAAO;MAAEC,UAAU;MAAEC;IAAe,CAAC,GAAG,IAAI,CAACC,KAAK;IAC3E,MAAM;MAAEC;IAAO,CAAC,GAAGN,KAAK;IACxB,MAAM;MAAEO;IAAW,CAAC,GAAGD,MAAM;IAE7B,MAAME,eAAe,GAAGF,MAAM,CAACG,OAAO,CACnCC,MAAM,CACJC,MAAM,IACLJ,UAAU,IACV,IAAAK,iBAAO,EAACV,OAAO,CAAC,IAChB,CAACA,OAAO,CAACW,KAAK,IACd,IAAAC,qBAAW,EAAC,IAAAC,cAAI,EAACb,OAAO,CAACW,KAAK,EAAGG,GAAG,IAAKA,GAAG,KAAKL,MAAM,CAACM,EAAE,CAAC,CAC/D,CAAC,CACAC,GAAG,CAAEP,MAAM,iBACV5B,MAAA,CAAAoC,OAAA,CAAAC,aAAA,CAAC/B,OAAA,CAAA8B,OAAiB,MAAAE,SAAA,CAAAF,OAAA;MAChBG,GAAG,EAAEX,MAAM,CAACM,EAAG;MACfd,UAAU,EAAEA,UAAW;MACvBoB,SAAS,EAAE,IAAK;MAChBtB,QAAQ,EAAEA,QAAS;MACnBC,OAAO,EAAEA,OAAQ;MACjBsB,IAAI,EAAC;IAAQ,GACTb,MAAM,CACX,CACF,CAAC;IAEJ,oBACE5B,MAAA,CAAAoC,OAAA,CAAAC,aAAA,CAAC7B,gBAAgB,qBACfR,MAAA,CAAAoC,OAAA,CAAAC,aAAA,CAAC9B,qBAAA,CAAAmC,oBAAoB;MAACR,EAAE,EAAC,cAAc;MAAChB,QAAQ,EAAEA,QAAS;MAACG,cAAc,EAAEA;IAAe,GACxFI,eACmB,CACN,CAAC;EAEvB;AACF;AAACkB,OAAA,CAAA9B,WAAA,GAAAA,WAAA;AAAA,IAAA+B,gBAAA,CAAAR,OAAA,EA1CYvB,WAAW,eACH;EACjBM,OAAO,EAAE0B,kBAAS,CAACC,MAAM,CAACC,UAAU;EACpC3B,UAAU,EAAEyB,kBAAS,CAACG,MAAM,CAACD,UAAU;EACvC9B,KAAK,EAAE4B,kBAAS,CAACC,MAAM,CAACC,UAAU;EAClC7B,QAAQ,EAAE2B,kBAAS,CAACI,IAAI,CAACF,UAAU;EACnC1B,cAAc,EAAEwB,kBAAS,CAACK;AAC5B,CAAC;AAAA,IAAAC,QAAA,GAAAR,OAAA,CAAAP,OAAA,GAqCYvB,WAAW","ignoreList":[]}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.DroppablePlaceholder = DroppablePlaceholder;
8
+ exports.default = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _react = _interopRequireDefault(require("react"));
11
+ var _propTypes = _interopRequireDefault(require("prop-types"));
12
+ var _core = require("@dnd-kit/core");
13
+ var _styles = require("@mui/material/styles");
14
+ var _drag = require("@pie-lib/drag");
15
+ const Container = (0, _styles.styled)('div')(({
16
+ theme
17
+ }) => ({
18
+ alignItems: 'center',
19
+ display: 'flex',
20
+ flexDirection: 'row',
21
+ flexWrap: 'wrap',
22
+ justifyContent: 'space-between',
23
+ marginTop: theme.spacing(1),
24
+ marginBottom: theme.spacing(1),
25
+ minHeight: 50,
26
+ transition: 'background-color 200ms ease'
27
+ }));
28
+ function DroppablePlaceholder({
29
+ id,
30
+ disabled,
31
+ children,
32
+ ...rest
33
+ }) {
34
+ const {
35
+ setNodeRef,
36
+ isOver
37
+ } = (0, _core.useDroppable)({
38
+ id: id || 'choices-pool',
39
+ data: {
40
+ type: 'choices-pool'
41
+ },
42
+ disabled
43
+ });
44
+ return /*#__PURE__*/_react.default.createElement(Container, (0, _extends2.default)({
45
+ ref: setNodeRef,
46
+ style: {
47
+ backgroundColor: isOver ? 'rgba(0,0,0,0.05)' : 'transparent'
48
+ }
49
+ }, rest), /*#__PURE__*/_react.default.createElement(_drag.MatchDroppablePlaceholder, {
50
+ id: id,
51
+ disabled: disabled
52
+ }, children));
53
+ }
54
+ DroppablePlaceholder.propTypes = {
55
+ id: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),
56
+ disabled: _propTypes.default.bool,
57
+ children: _propTypes.default.node
58
+ };
59
+ var _default = exports.default = DroppablePlaceholder;
60
+ //# sourceMappingURL=droppable-placeholder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"droppable-placeholder.js","names":["_react","_interopRequireDefault","require","_propTypes","_core","_styles","_drag","Container","styled","theme","alignItems","display","flexDirection","flexWrap","justifyContent","marginTop","spacing","marginBottom","minHeight","transition","DroppablePlaceholder","id","disabled","children","rest","setNodeRef","isOver","useDroppable","data","type","default","createElement","_extends2","ref","style","backgroundColor","MatchDroppablePlaceholder","propTypes","PropTypes","oneOfType","string","number","bool","node","_default","exports"],"sources":["../src/droppable-placeholder.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDroppable } from '@dnd-kit/core';\nimport { styled } from '@mui/material/styles';\nimport { MatchDroppablePlaceholder } from '@pie-lib/drag';\n\nconst Container = styled('div')(({ theme }) => ({\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n minHeight: 50,\n transition: 'background-color 200ms ease',\n}));\n\nexport function DroppablePlaceholder({ id, disabled, children, ...rest }) {\n const { setNodeRef, isOver } = useDroppable({\n id: id || 'choices-pool',\n data: { type: 'choices-pool' },\n disabled,\n });\n\n return (\n <Container\n ref={setNodeRef}\n style={{ backgroundColor: isOver ? 'rgba(0,0,0,0.05)' : 'transparent' }}\n {...rest}\n >\n <MatchDroppablePlaceholder id={id} disabled={disabled}>\n {children}\n </MatchDroppablePlaceholder>\n </Container>\n );\n}\n\nDroppablePlaceholder.propTypes = {\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n disabled: PropTypes.bool,\n children: PropTypes.node,\n};\n\nexport default DroppablePlaceholder;\n"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AAEA,MAAMK,SAAS,GAAG,IAAAC,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC;EAAEC;AAAM,CAAC,MAAM;EAC5CC,UAAU,EAAE,QAAQ;EACpBC,OAAO,EAAE,MAAM;EACfC,aAAa,EAAE,KAAK;EACpBC,QAAQ,EAAE,MAAM;EAChBC,cAAc,EAAE,eAAe;EAC/BC,SAAS,EAAEN,KAAK,CAACO,OAAO,CAAC,CAAC,CAAC;EAC3BC,YAAY,EAAER,KAAK,CAACO,OAAO,CAAC,CAAC,CAAC;EAC9BE,SAAS,EAAE,EAAE;EACbC,UAAU,EAAE;AAChB,CAAC,CAAC,CAAC;AAEI,SAASC,oBAAoBA,CAAC;EAAEC,EAAE;EAAEC,QAAQ;EAAEC,QAAQ;EAAE,GAAGC;AAAK,CAAC,EAAE;EACtE,MAAM;IAAEC,UAAU;IAAEC;EAAO,CAAC,GAAG,IAAAC,kBAAY,EAAC;IACxCN,EAAE,EAAEA,EAAE,IAAI,cAAc;IACxBO,IAAI,EAAE;MAAEC,IAAI,EAAE;IAAe,CAAC;IAC9BP;EACJ,CAAC,CAAC;EAEF,oBACItB,MAAA,CAAA8B,OAAA,CAAAC,aAAA,CAACxB,SAAS,MAAAyB,SAAA,CAAAF,OAAA;IACNG,GAAG,EAAER,UAAW;IAChBS,KAAK,EAAE;MAAEC,eAAe,EAAET,MAAM,GAAG,kBAAkB,GAAG;IAAc;EAAE,GACpEF,IAAI,gBAERxB,MAAA,CAAA8B,OAAA,CAAAC,aAAA,CAACzB,KAAA,CAAA8B,yBAAyB;IAACf,EAAE,EAAEA,EAAG;IAACC,QAAQ,EAAEA;EAAS,GACjDC,QACsB,CACpB,CAAC;AAEpB;AAEAH,oBAAoB,CAACiB,SAAS,GAAG;EAC7BhB,EAAE,EAAEiB,kBAAS,CAACC,SAAS,CAAC,CAACD,kBAAS,CAACE,MAAM,EAAEF,kBAAS,CAACG,MAAM,CAAC,CAAC;EAC7DnB,QAAQ,EAAEgB,kBAAS,CAACI,IAAI;EACxBnB,QAAQ,EAAEe,kBAAS,CAACK;AACxB,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAf,OAAA,GAEaV,oBAAoB","ignoreList":[]}
package/lib/index.js ADDED
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "Component", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _main.default;
11
+ }
12
+ });
13
+ exports.isComplete = exports.default = void 0;
14
+ var _react = _interopRequireDefault(require("react"));
15
+ var _client = require("react-dom/client");
16
+ var _debug = _interopRequireDefault(require("debug"));
17
+ var _main = _interopRequireDefault(require("./main"));
18
+ var _piePlayerEvents = require("@pie-framework/pie-player-events");
19
+ var _mathRendering = require("@pie-lib/math-rendering");
20
+ const log = (0, _debug.default)('pie-ui:graph-lines');
21
+ const isComplete = (session, model) => {
22
+ if (!session) {
23
+ return false;
24
+ }
25
+ const value = session.value;
26
+ let complete = true;
27
+ if (value) {
28
+ (model.config.prompts || []).forEach(prompt => {
29
+ if (!Number.isFinite(value[prompt.id])) {
30
+ complete = false;
31
+ }
32
+ });
33
+ }
34
+ return complete;
35
+ };
36
+ exports.isComplete = isComplete;
37
+ class MatchList extends HTMLElement {
38
+ constructor() {
39
+ super();
40
+ this._root = null;
41
+ }
42
+ set model(m) {
43
+ this._model = m;
44
+ this._render();
45
+ }
46
+ set session(s) {
47
+ this._session = s;
48
+ this._render();
49
+ }
50
+ get session() {
51
+ return this._session;
52
+ }
53
+ sessionChanged(s) {
54
+ this._session.value = s.value;
55
+ this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(this.tagName.toLowerCase(), isComplete(this._session, this._model)));
56
+ log('session: ', this._session);
57
+ this._render();
58
+ }
59
+ connectedCallback() {
60
+ this._render();
61
+ }
62
+ _render() {
63
+ if (!this._model || !this._session) {
64
+ return;
65
+ }
66
+ const el = /*#__PURE__*/_react.default.createElement(_main.default, {
67
+ model: this._model,
68
+ session: this._session,
69
+ onSessionChange: this.sessionChanged.bind(this)
70
+ });
71
+ if (!this._root) {
72
+ this._root = (0, _client.createRoot)(this);
73
+ }
74
+ this._root.render(el);
75
+ queueMicrotask(() => {
76
+ (0, _mathRendering.renderMath)(this);
77
+ });
78
+ }
79
+ disconnectedCallback() {
80
+ if (this._root) {
81
+ this._root.unmount();
82
+ }
83
+ }
84
+ }
85
+ exports.default = MatchList;
86
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_debug","_main","_piePlayerEvents","_mathRendering","log","debug","isComplete","session","model","value","complete","config","prompts","forEach","prompt","Number","isFinite","id","exports","MatchList","HTMLElement","constructor","_root","m","_model","_render","s","_session","sessionChanged","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","connectedCallback","el","React","createElement","Main","onSessionChange","bind","createRoot","render","queueMicrotask","renderMath","disconnectedCallback","unmount","default"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport debug from 'debug';\nimport Main from './main';\n\nimport { SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport { renderMath } from '@pie-lib/math-rendering';\n\nconst log = debug('pie-ui:graph-lines');\n\nexport { Main as Component };\n\nexport const isComplete = (session, model) => {\n if (!session) {\n return false;\n }\n\n const value = session.value;\n let complete = true;\n\n if (value) {\n (model.config.prompts || []).forEach((prompt) => {\n if (!Number.isFinite(value[prompt.id])) {\n complete = false;\n }\n });\n }\n\n return complete;\n};\n\nexport default class MatchList extends HTMLElement {\n constructor() {\n super();\n this._root = null;\n }\n\n set model(m) {\n this._model = m;\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 sessionChanged(s) {\n this._session.value = s.value;\n\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), isComplete(this._session, this._model)));\n\n log('session: ', this._session);\n this._render();\n }\n\n connectedCallback() {\n this._render();\n }\n\n _render() {\n if (!this._model || !this._session) {\n return;\n }\n\n const el = React.createElement(Main, {\n model: this._model,\n session: this._session,\n onSessionChange: this.sessionChanged.bind(this),\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 disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}