@pie-element/match-list 7.1.1-next.1 → 7.1.1-next.29

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 (192) hide show
  1. package/CHANGELOG.json +572 -0
  2. package/CHANGELOG.md +1485 -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 +1043 -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 +21 -50
  35. package/dist/controller/defaults.d.ts +0 -17
  36. package/dist/controller/defaults.js +0 -9
  37. package/dist/controller/index.d.ts +0 -38
  38. package/dist/controller/index.js +0 -105
  39. package/dist/delivery/answer-area.d.ts +0 -27
  40. package/dist/delivery/answer-area.js +0 -94
  41. package/dist/delivery/answer.d.ts +0 -40
  42. package/dist/delivery/answer.js +0 -176
  43. package/dist/delivery/arrow.d.ts +0 -17
  44. package/dist/delivery/arrow.js +0 -35
  45. package/dist/delivery/choices-list.d.ts +0 -21
  46. package/dist/delivery/choices-list.js +0 -37
  47. package/dist/delivery/droppable-placeholder.d.ts +0 -24
  48. package/dist/delivery/droppable-placeholder.js +0 -42
  49. package/dist/delivery/index.d.ts +0 -21
  50. package/dist/delivery/index.js +0 -49
  51. package/dist/delivery/main.d.ts +0 -26
  52. package/dist/delivery/main.js +0 -149
  53. package/dist/index.d.ts +0 -1
  54. package/dist/index.iife.d.ts +0 -8
  55. package/dist/index.iife.js +0 -152
  56. package/dist/index.js +0 -2
  57. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_DataView.js +0 -6
  58. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Hash.js +0 -16
  59. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_ListCache.js +0 -16
  60. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Map.js +0 -6
  61. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_MapCache.js +0 -16
  62. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Promise.js +0 -6
  63. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Set.js +0 -6
  64. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_SetCache.js +0 -11
  65. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Stack.js +0 -14
  66. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Symbol.js +0 -5
  67. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Uint8Array.js +0 -5
  68. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_WeakMap.js +0 -6
  69. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayFilter.js +0 -10
  70. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayLikeKeys.js +0 -15
  71. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayMap.js +0 -7
  72. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayPush.js +0 -7
  73. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayReduce.js +0 -8
  74. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arraySome.js +0 -7
  75. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_assocIndexOf.js +0 -8
  76. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseEach.js +0 -6
  77. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseFindIndex.js +0 -7
  78. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseFindKey.js +0 -9
  79. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseFor.js +0 -5
  80. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseForOwn.js +0 -8
  81. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseGet.js +0 -10
  82. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseGetAllKeys.js +0 -9
  83. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseGetTag.js +0 -10
  84. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseHasIn.js +0 -6
  85. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsArguments.js +0 -9
  86. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqual.js +0 -8
  87. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqualDeep.js +0 -30
  88. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsMatch.js +0 -26
  89. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsNative.js +0 -11
  90. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsTypedArray.js +0 -11
  91. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIteratee.js +0 -11
  92. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseKeys.js +0 -12
  93. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseMatches.js +0 -12
  94. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseMatchesProperty.js +0 -17
  95. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseProperty.js +0 -8
  96. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_basePropertyDeep.js +0 -9
  97. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseReduce.js +0 -8
  98. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseTimes.js +0 -7
  99. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseToString.js +0 -15
  100. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseTrim.js +0 -8
  101. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseUnary.js +0 -8
  102. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cacheHas.js +0 -6
  103. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_castPath.js +0 -10
  104. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_coreJsData.js +0 -5
  105. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_createBaseEach.js +0 -12
  106. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_createBaseFor.js +0 -12
  107. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_createFind.js +0 -19
  108. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalArrays.js +0 -35
  109. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalByTag.js +0 -35
  110. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalObjects.js +0 -32
  111. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_freeGlobal.js +0 -4
  112. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeys.js +0 -9
  113. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getMapData.js +0 -8
  114. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getMatchData.js +0 -16
  115. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getNative.js +0 -9
  116. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getRawTag.js +0 -14
  117. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getSymbols.js +0 -10
  118. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getTag.js +0 -23
  119. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getValue.js +0 -6
  120. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hasPath.js +0 -18
  121. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashClear.js +0 -7
  122. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashDelete.js +0 -7
  123. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashGet.js +0 -13
  124. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashHas.js +0 -9
  125. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashSet.js +0 -9
  126. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isIndex.js +0 -8
  127. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isKey.js +0 -11
  128. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isKeyable.js +0 -7
  129. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isMasked.js +0 -11
  130. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isPrototype.js +0 -8
  131. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isStrictComparable.js +0 -7
  132. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheClear.js +0 -6
  133. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheDelete.js +0 -9
  134. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheGet.js +0 -8
  135. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheHas.js +0 -7
  136. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheSet.js +0 -8
  137. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheClear.js +0 -13
  138. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheDelete.js +0 -8
  139. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheGet.js +0 -7
  140. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheHas.js +0 -7
  141. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheSet.js +0 -8
  142. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapToArray.js +0 -9
  143. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_matchesStrictComparable.js +0 -8
  144. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_memoizeCapped.js +0 -11
  145. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nativeCreate.js +0 -5
  146. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeys.js +0 -5
  147. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nodeUtil.js +0 -9
  148. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_objectToString.js +0 -7
  149. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_overArg.js +0 -8
  150. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_root.js +0 -5
  151. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setCacheAdd.js +0 -7
  152. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setCacheHas.js +0 -6
  153. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setToArray.js +0 -9
  154. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackClear.js +0 -7
  155. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackDelete.js +0 -7
  156. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackGet.js +0 -6
  157. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackHas.js +0 -6
  158. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackSet.js +0 -16
  159. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stringToPath.js +0 -10
  160. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_toKey.js +0 -10
  161. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_toSource.js +0 -15
  162. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_trimmedEndIndex.js +0 -8
  163. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/eq.js +0 -6
  164. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/find.js +0 -6
  165. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/findIndex.js +0 -13
  166. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/findKey.js +0 -9
  167. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/get.js +0 -8
  168. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/hasIn.js +0 -8
  169. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/identity.js +0 -6
  170. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArguments.js +0 -10
  171. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArray.js +0 -4
  172. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArrayLike.js +0 -8
  173. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isBuffer.js +0 -6
  174. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isEmpty.js +0 -21
  175. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isFunction.js +0 -11
  176. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isLength.js +0 -7
  177. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isObject.js +0 -7
  178. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isObjectLike.js +0 -6
  179. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isSymbol.js +0 -9
  180. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isTypedArray.js +0 -7
  181. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isUndefined.js +0 -6
  182. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/keys.js +0 -9
  183. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/memoize.js +0 -16
  184. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/property.js +0 -10
  185. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/reduce.js +0 -12
  186. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/stubArray.js +0 -6
  187. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/stubFalse.js +0 -6
  188. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/toFinite.js +0 -8
  189. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/toInteger.js +0 -8
  190. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/toNumber.js +0 -19
  191. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/toString.js +0 -7
  192. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/uniqueId.js +0 -9
package/lib/main.js ADDED
@@ -0,0 +1,220 @@
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.Main = 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 _drag = require("@pie-lib/drag");
12
+ var _core = require("@dnd-kit/core");
13
+ var _modifiers = require("@dnd-kit/modifiers");
14
+ var _correctAnswerToggle = _interopRequireDefault(require("@pie-lib/correct-answer-toggle"));
15
+ var _renderUi = require("@pie-lib/render-ui");
16
+ var _styles = require("@mui/material/styles");
17
+ var _lodashEs = require("lodash-es");
18
+ var _answerArea = _interopRequireDefault(require("./answer-area"));
19
+ var _choicesList = _interopRequireDefault(require("./choices-list"));
20
+ var _answer = require("./answer");
21
+ const MainContainer = (0, _styles.styled)('div')({
22
+ display: 'flex',
23
+ flexDirection: 'column',
24
+ justifyContent: 'center',
25
+ color: _renderUi.color.text(),
26
+ backgroundColor: _renderUi.color.background()
27
+ });
28
+ class Main extends _react.default.Component {
29
+ constructor(props) {
30
+ super(props);
31
+ (0, _defineProperty2.default)(this, "onDragStart", event => {
32
+ const {
33
+ active
34
+ } = event;
35
+ if (active?.data?.current) {
36
+ let rect = null;
37
+ const node = active.node?.current;
38
+ if (node) {
39
+ const {
40
+ width,
41
+ height
42
+ } = node.getBoundingClientRect();
43
+ rect = {
44
+ width,
45
+ height
46
+ };
47
+ }
48
+ this.setState({
49
+ draggingElement: {
50
+ ...active.data.current,
51
+ rect
52
+ }
53
+ });
54
+ }
55
+ });
56
+ (0, _defineProperty2.default)(this, "onPlaceAnswer", event => {
57
+ this.setState({
58
+ draggingElement: null
59
+ });
60
+ const {
61
+ active,
62
+ over
63
+ } = event;
64
+ if (!active) {
65
+ return;
66
+ }
67
+ const activeData = active.data.current;
68
+ const overData = over?.data.current;
69
+ if (!activeData) {
70
+ return;
71
+ }
72
+ const {
73
+ session,
74
+ onSessionChange,
75
+ model
76
+ } = this.props;
77
+ const {
78
+ config: {
79
+ duplicates
80
+ }
81
+ } = model;
82
+ if ((0, _lodashEs.isUndefined)(session.value)) {
83
+ session.value = {};
84
+ }
85
+
86
+ // dropping a placed answer back to the choices pool = remove it
87
+ if (overData.type === 'choices-pool' && activeData.promptId !== undefined) {
88
+ session.value[activeData.promptId] = undefined;
89
+ onSessionChange(session);
90
+ return;
91
+ }
92
+ const answerId = activeData.id;
93
+ const sourcePromptId = activeData.promptId;
94
+
95
+ // Handle dropping onto a drop zone
96
+ if (overData && overData.type === 'drop-zone' && overData.promptId != null) {
97
+ const targetPromptId = overData.promptId;
98
+ if (activeData.type === 'choice' && overData.type === 'drop-zone' && targetPromptId !== undefined) {
99
+ // check if this choice is already placed somewhere
100
+ const existingPlacement = (0, _lodashEs.findKey)(session.value, val => val === answerId);
101
+ if (existingPlacement && !duplicates) {
102
+ // swap if duplicates not allowed
103
+ session.value = (0, _drag.swap)(session.value, existingPlacement, targetPromptId);
104
+ } else {
105
+ // place answer
106
+ session.value[targetPromptId] = answerId;
107
+ }
108
+ }
109
+ // Handle moving a placed item (target) to another drop zone
110
+ else if (activeData.type === 'target' && sourcePromptId != null) {
111
+ // If moving to a different placeholder
112
+ if (sourcePromptId !== targetPromptId) {
113
+ const targetHasItem = session.value[targetPromptId] != null;
114
+ if (targetHasItem && !duplicates) {
115
+ // swap items between placeholders
116
+ const temp = session.value[targetPromptId];
117
+ session.value[targetPromptId] = answerId;
118
+ session.value[sourcePromptId] = temp;
119
+ } else if (!targetHasItem) {
120
+ // move item to empty placeholder
121
+ session.value[targetPromptId] = answerId;
122
+ delete session.value[sourcePromptId];
123
+ }
124
+ }
125
+ }
126
+ onSessionChange(session);
127
+ }
128
+ });
129
+ (0, _defineProperty2.default)(this, "toggleShowCorrect", () => {
130
+ this.setState({
131
+ showCorrectAnswer: !this.state.showCorrectAnswer
132
+ });
133
+ });
134
+ (0, _defineProperty2.default)(this, "renderDragOverlay", () => {
135
+ const {
136
+ draggingElement
137
+ } = this.state;
138
+ if (!draggingElement) return null;
139
+ return /*#__PURE__*/_react.default.createElement(_answer.Answer, {
140
+ id: draggingElement.id,
141
+ title: draggingElement.value,
142
+ disabled: false,
143
+ isDragging: false,
144
+ style: draggingElement.rect ? {
145
+ width: draggingElement.rect.width,
146
+ height: draggingElement.rect.height,
147
+ boxSizing: 'border-box'
148
+ } : {}
149
+ });
150
+ });
151
+ this.instanceId = (0, _lodashEs.uniqueId)();
152
+ this.state = {
153
+ showCorrectAnswer: false,
154
+ draggingElement: null
155
+ };
156
+ }
157
+ onRemoveAnswer(id) {
158
+ const {
159
+ session,
160
+ onSessionChange
161
+ } = this.props;
162
+ session.value[id] = undefined;
163
+ onSessionChange(session);
164
+ }
165
+ render() {
166
+ const {
167
+ showCorrectAnswer
168
+ } = this.state;
169
+ const {
170
+ model,
171
+ session
172
+ } = this.props;
173
+ const {
174
+ config,
175
+ mode
176
+ } = model;
177
+ const {
178
+ prompt,
179
+ language
180
+ } = config;
181
+ return /*#__PURE__*/_react.default.createElement(_core.DndContext, {
182
+ onDragStart: this.onDragStart,
183
+ onDragEnd: this.onPlaceAnswer,
184
+ modifiers: [_modifiers.restrictToFirstScrollableAncestor]
185
+ }, /*#__PURE__*/_react.default.createElement(MainContainer, null, /*#__PURE__*/_react.default.createElement(_renderUi.PreviewPrompt, {
186
+ className: "prompt",
187
+ prompt: prompt
188
+ }), /*#__PURE__*/_react.default.createElement(_correctAnswerToggle.default, {
189
+ show: mode === 'evaluate',
190
+ toggled: showCorrectAnswer,
191
+ onToggle: this.toggleShowCorrect,
192
+ language: language
193
+ }), /*#__PURE__*/_react.default.createElement(_answerArea.default, {
194
+ instanceId: this.instanceId,
195
+ model: model,
196
+ session: session,
197
+ onRemoveAnswer: id => this.onRemoveAnswer(id),
198
+ disabled: mode !== 'gather',
199
+ showCorrect: showCorrectAnswer
200
+ }), /*#__PURE__*/_react.default.createElement(_choicesList.default, {
201
+ instanceId: this.instanceId,
202
+ model: model,
203
+ session: session,
204
+ disabled: mode !== 'gather',
205
+ onRemoveAnswer: id => this.onRemoveAnswer(id)
206
+ }), model.correctness && model.feedback && !showCorrectAnswer && /*#__PURE__*/_react.default.createElement(_renderUi.Feedback, {
207
+ correctness: model.correctness.correctness,
208
+ feedback: model.feedback
209
+ })), /*#__PURE__*/_react.default.createElement(_core.DragOverlay, null, this.renderDragOverlay()));
210
+ }
211
+ }
212
+ exports.Main = Main;
213
+ (0, _defineProperty2.default)(Main, "propTypes", {
214
+ session: _propTypes.default.object.isRequired,
215
+ onSessionChange: _propTypes.default.func,
216
+ model: _propTypes.default.object.isRequired,
217
+ prompt: _propTypes.default.string
218
+ });
219
+ var _default = exports.default = Main;
220
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","names":["_react","_interopRequireDefault","require","_propTypes","_drag","_core","_modifiers","_correctAnswerToggle","_renderUi","_styles","_lodashEs","_answerArea","_choicesList","_answer","MainContainer","styled","display","flexDirection","justifyContent","color","text","backgroundColor","background","Main","React","Component","constructor","props","_defineProperty2","default","event","active","data","current","rect","node","width","height","getBoundingClientRect","setState","draggingElement","over","activeData","overData","session","onSessionChange","model","config","duplicates","isUndefined","value","type","promptId","undefined","answerId","id","sourcePromptId","targetPromptId","existingPlacement","findKey","val","swap","targetHasItem","temp","showCorrectAnswer","state","createElement","Answer","title","disabled","isDragging","style","boxSizing","instanceId","uniqueId","onRemoveAnswer","render","mode","prompt","language","DndContext","onDragStart","onDragEnd","onPlaceAnswer","modifiers","restrictToFirstScrollableAncestor","PreviewPrompt","className","show","toggled","onToggle","toggleShowCorrect","showCorrect","correctness","feedback","Feedback","DragOverlay","renderDragOverlay","exports","PropTypes","object","isRequired","func","string","_default"],"sources":["../src/main.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { swap } from '@pie-lib/drag';\nimport { DndContext, DragOverlay } from '@dnd-kit/core';\nimport { restrictToFirstScrollableAncestor } from '@dnd-kit/modifiers';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport { color, Feedback, PreviewPrompt } from '@pie-lib/render-ui';\nimport { styled } from '@mui/material/styles';\nimport { findKey, isUndefined, uniqueId } from 'lodash-es';\nimport AnswerArea from './answer-area';\nimport ChoicesList from './choices-list';\nimport { Answer } from './answer';\n\nconst MainContainer = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n color: color.text(),\n backgroundColor: color.background(),\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 prompt: PropTypes.string,\n };\n\n constructor(props) {\n super(props);\n\n this.instanceId = uniqueId();\n this.state = {\n showCorrectAnswer: false,\n draggingElement: null,\n };\n }\n\n onRemoveAnswer(id) {\n const { session, onSessionChange } = this.props;\n\n session.value[id] = undefined;\n\n onSessionChange(session);\n }\n\n onDragStart = (event) => {\n const { active } = event;\n\n if (active?.data?.current) {\n let rect = null;\n const node = active.node?.current;\n\n if (node) {\n const { width, height } = node.getBoundingClientRect();\n rect = { width, height };\n }\n\n this.setState({\n draggingElement: { ...active.data.current, rect },\n });\n }\n };\n\n onPlaceAnswer = (event) => {\n this.setState({ draggingElement: null });\n const { active, over } = event;\n\n if (!active) {\n return;\n }\n\n const activeData = active.data.current;\n const overData = over?.data.current;\n\n if (!activeData) {\n return;\n }\n\n const { session, onSessionChange, model } = this.props;\n const {\n config: { duplicates },\n } = model;\n\n if (isUndefined(session.value)) {\n session.value = {};\n }\n\n // dropping a placed answer back to the choices pool = remove it\n if (overData.type === 'choices-pool' && activeData.promptId !== undefined) {\n session.value[activeData.promptId] = undefined;\n onSessionChange(session);\n return;\n }\n\n const answerId = activeData.id;\n const sourcePromptId = activeData.promptId;\n\n // Handle dropping onto a drop zone\n if (overData && overData.type === 'drop-zone' && overData.promptId != null) {\n const targetPromptId = overData.promptId;\n\n if (activeData.type === 'choice' && overData.type === 'drop-zone' && targetPromptId !== undefined) {\n // check if this choice is already placed somewhere\n const existingPlacement = findKey(session.value, (val) => val === answerId);\n\n if (existingPlacement && !duplicates) {\n // swap if duplicates not allowed\n session.value = swap(session.value, existingPlacement, targetPromptId);\n } else {\n // place answer\n session.value[targetPromptId] = answerId;\n }\n }\n // Handle moving a placed item (target) to another drop zone\n else if (activeData.type === 'target' && sourcePromptId != null) {\n // If moving to a different placeholder\n if (sourcePromptId !== targetPromptId) {\n const targetHasItem = session.value[targetPromptId] != null;\n\n if (targetHasItem && !duplicates) {\n // swap items between placeholders\n const temp = session.value[targetPromptId];\n session.value[targetPromptId] = answerId;\n session.value[sourcePromptId] = temp;\n } else if (!targetHasItem) {\n // move item to empty placeholder\n session.value[targetPromptId] = answerId;\n delete session.value[sourcePromptId];\n }\n }\n }\n\n onSessionChange(session);\n }\n };\n\n toggleShowCorrect = () => {\n this.setState({ showCorrectAnswer: !this.state.showCorrectAnswer });\n };\n\n renderDragOverlay = () => {\n const { draggingElement } = this.state;\n\n if (!draggingElement) return null;\n\n return (\n <Answer\n id={draggingElement.id}\n title={draggingElement.value}\n disabled={false}\n isDragging={false}\n style={\n draggingElement.rect\n ? { width: draggingElement.rect.width, height: draggingElement.rect.height, boxSizing: 'border-box' }\n : {}\n }\n />\n );\n };\n\n render() {\n const { showCorrectAnswer } = this.state;\n const { model, session } = this.props;\n const { config, mode } = model;\n const { prompt, language } = config;\n\n return (\n <DndContext\n onDragStart={this.onDragStart}\n onDragEnd={this.onPlaceAnswer}\n modifiers={[restrictToFirstScrollableAncestor]}\n >\n <MainContainer>\n <PreviewPrompt className=\"prompt\" prompt={prompt} />\n\n <CorrectAnswerToggle\n show={mode === 'evaluate'}\n toggled={showCorrectAnswer}\n onToggle={this.toggleShowCorrect}\n language={language}\n />\n\n <AnswerArea\n instanceId={this.instanceId}\n model={model}\n session={session}\n onRemoveAnswer={(id) => this.onRemoveAnswer(id)}\n disabled={mode !== 'gather'}\n showCorrect={showCorrectAnswer}\n />\n\n <ChoicesList\n instanceId={this.instanceId}\n model={model}\n session={session}\n disabled={mode !== 'gather'}\n onRemoveAnswer={(id) => this.onRemoveAnswer(id)}\n />\n\n {model.correctness && model.feedback && !showCorrectAnswer && (\n <Feedback correctness={model.correctness.correctness} feedback={model.feedback} />\n )}\n </MainContainer>\n <DragOverlay>{this.renderDragOverlay()}</DragOverlay>\n </DndContext>\n );\n }\n}\n\nexport default Main;\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,7 +1,15 @@
1
1
  {
2
2
  "name": "@pie-element/match-list",
3
- "version": "7.1.1-next.1",
3
+ "repository": "pie-framework/pie-elements",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
7
+ "version": "7.1.1-next.29+863eb8c67",
4
8
  "description": "",
9
+ "scripts": {
10
+ "test": "echo \"Error: no test specified\" && exit 1",
11
+ "postpublish": "../../scripts/postpublish"
12
+ },
5
13
  "dependencies": {
6
14
  "@dnd-kit/core": "6.3.1",
7
15
  "@dnd-kit/modifiers": "9.0.0",
@@ -9,57 +17,20 @@
9
17
  "@emotion/style": "^0.8.0",
10
18
  "@mui/icons-material": "^7.3.4",
11
19
  "@mui/material": "^7.3.4",
12
- "@pie-lib/correct-answer-toggle": "4.0.2",
13
- "@pie-lib/drag": "4.0.2",
14
- "@pie-lib/render-ui": "6.1.0",
20
+ "@pie-framework/pie-player-events": "^0.1.0",
21
+ "@pie-lib/correct-answer-toggle": "4.0.4",
22
+ "@pie-lib/drag": "4.0.4",
23
+ "@pie-lib/math-rendering": "5.0.2",
24
+ "@pie-lib/render-ui": "6.1.2",
15
25
  "debug": "^4.1.1",
16
26
  "lodash-es": "^4.17.23",
17
27
  "prop-types": "^15.8.1",
18
- "@pie-element/shared-feedback": "0.1.0",
19
- "@pie-element/shared-controller-utils": "0.1.1-next.1",
20
- "@pie-element/shared-player-events": "0.1.0",
21
- "@pie-element/shared-math-rendering-mathjax": "0.1.0"
22
- },
23
- "peerDependencies": {
24
- "react": "^18.0.0",
25
- "react-dom": "^18.0.0"
28
+ "react": "18.3.1",
29
+ "react-dom": "18.3.1"
26
30
  },
27
- "exports": {
28
- ".": {
29
- "types": "./dist/index.d.ts",
30
- "default": "./dist/index.js"
31
- },
32
- "./delivery": {
33
- "types": "./dist/delivery/index.d.ts",
34
- "default": "./dist/delivery/index.js"
35
- },
36
- "./controller": {
37
- "types": "./dist/controller/index.d.ts",
38
- "default": "./dist/controller/index.js"
39
- },
40
- "./controller.js": {
41
- "types": "./dist/controller/index.d.ts",
42
- "default": "./dist/controller/index.js"
43
- }
44
- },
45
- "type": "module",
46
- "main": "./dist/index.js",
47
- "types": "./dist/index.d.ts",
48
- "files": [
49
- "dist"
50
- ],
51
- "sideEffects": false,
52
- "devDependencies": {
53
- "vite": "^8.0.1",
54
- "typescript": "^5.9.3",
55
- "@vitejs/plugin-react": "^6.0.1",
56
- "@types/react": "^18.2.0",
57
- "@types/react-dom": "^18.2.0"
58
- },
59
- "scripts": {
60
- "build": "bun x vite build && bun x vite build --config vite.config.iife.ts && bun x tsc --emitDeclarationOnly",
61
- "dev": "bun x vite",
62
- "demo": "bun x vite --mode demo",
63
- "test": "bun x vitest run"
64
- }
31
+ "author": "",
32
+ "license": "ISC",
33
+ "gitHead": "863eb8c673c7375c2b6bb481c36e50c3a54e73d0",
34
+ "main": "lib/index.js",
35
+ "module": "src/index.js"
65
36
  }
@@ -1,17 +0,0 @@
1
- /**
2
- * @synced-from pie-elements/packages/match-list/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
- config: {
11
- answers: never[];
12
- prompt: string;
13
- prompts: never[];
14
- shuffled: boolean;
15
- };
16
- };
17
- export default _default;
@@ -1,9 +0,0 @@
1
- //#region src/controller/defaults.ts
2
- var e = { config: {
3
- answers: [],
4
- prompt: "",
5
- prompts: [],
6
- shuffled: !1
7
- } };
8
- //#endregion
9
- export { e as default };
@@ -1,38 +0,0 @@
1
- /**
2
- * @synced-from pie-elements/packages/match-list/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
- /**
10
- * Generates detailed trace log for match-list scoring evaluation
11
- * @param {Object} question
12
- * @param {Object} session
13
- * @param {Object} env
14
- * @returns {Array<string>} traceLog
15
- */
16
- export declare const getLogTrace: (question: any, session: any, env: any) => string[];
17
- export declare const outcome: (question: any, session: any, env: any) => Promise<unknown>;
18
- export declare function createDefaultModel(model?: {}): Promise<unknown>;
19
- export declare const normalize: (model: any) => any;
20
- /**
21
- *
22
- * @param {*} question
23
- * @param {*} session
24
- * @param {*} env
25
- * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.
26
- */
27
- export declare function model(question: any, session: any, env: any, updateSession: any): Promise<{
28
- config: any;
29
- correctness: {
30
- score: string;
31
- correctness: string | undefined;
32
- };
33
- feedback: string | undefined;
34
- mode: any;
35
- } & {
36
- correctResponse: {};
37
- }>;
38
- export declare const createCorrectResponseSession: (question: any, env: any) => Promise<unknown>;
@@ -1,105 +0,0 @@
1
- import e from "../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isEmpty.js";
2
- import t from "./defaults.js";
3
- import n from "debug";
4
- import { getFeedbackForCorrectness as r } from "@pie-element/shared-feedback";
5
- import { getShuffledChoices as i, lockChoices as a, partialScoring as o } from "@pie-element/shared-controller-utils";
6
- //#region src/controller/index.ts
7
- var s = n("@pie-element:match-list:controller"), c = (e, t, n) => {
8
- let r = o.enabled(e, n), i = e.prompts;
9
- if (!t || Object.keys(t).length === 0) return "unanswered";
10
- let a = d(e), s = u(i, t);
11
- return a === s ? "correct" : s === 0 ? "incorrect" : r ? "partial" : "incorrect";
12
- }, l = (e, t, n) => {
13
- if (t.mode === "evaluate") return c(e, n, t);
14
- }, u = (e = [], t) => {
15
- let n = 0;
16
- return e.forEach((e) => {
17
- e.relatedAnswer === t[e.id] && (n += 1);
18
- }), n;
19
- }, d = (e) => e && e.prompts ? e.prompts.length : 0, f = (e, t) => {
20
- let n = u(e && e.prompts, t), r = d(e);
21
- return parseFloat((n / r).toFixed(2));
22
- }, p = (e, t, n) => {
23
- let r = l(e, t, n);
24
- return r === "correct" ? 1 : r === "partial" ? f(e, n) : 0;
25
- }, m = (e, t, n) => {
26
- let r = [], i = e?.prompts || [], a = t?.value || {};
27
- if (!a || Object.keys(a).length === 0) return r.push("Student did not provide any answer."), r;
28
- let s = i.length;
29
- r.push(`Match-list item contains ${s} question(s).`);
30
- let c = 0, l = 0;
31
- i.forEach((e) => {
32
- let t = e.relatedAnswer, n = a[e.id];
33
- n === void 0 ? r.push(`Question ${e.id}: no answer provided.`) : (l += 1, n === t ? (c += 1, r.push(`Question ${e.id}: correctly matched.`)) : r.push(`Question ${e.id}: incorrectly matched (selected '${n}', expected '${t}').`));
34
- }), r.push(`Student correctly matched ${c} out of ${s} question(s).`);
35
- let u = o.enabled(e, n);
36
- u ? (r.push("Score calculated using partial scoring."), r.push("Score is the number of correct matches divided by the total number of questions.")) : (r.push("Score calculated using all-or-nothing scoring."), r.push("Student must match all questions correctly to receive full credit."));
37
- let d = p(e, n, a), f = u ? d : +(d === 1);
38
- return r.push(`Final score: ${f}.`), r;
39
- }, h = (t, n, r) => new Promise((i) => {
40
- r.mode === "evaluate" ? !n || e(n) ? i({
41
- score: 0,
42
- empty: !0,
43
- logTrace: ["Student did not provide any answer."]
44
- }) : i({
45
- score: p(t, r, n.value),
46
- empty: !1,
47
- logTrace: m(t, n, r)
48
- }) : i({
49
- score: void 0,
50
- completed: void 0,
51
- logTrace: []
52
- });
53
- });
54
- function g(e = {}) {
55
- return new Promise((n) => {
56
- n({
57
- ...t,
58
- ...e
59
- });
60
- });
61
- }
62
- var _ = (e) => ({
63
- ...t,
64
- ...e
65
- });
66
- async function v(t, n, o, c) {
67
- t = _(t);
68
- let u = l(t, o, n && n.value), d = {}, f = {
69
- score: `${p(t, o, n && n.value) * 100}%`,
70
- correctness: u
71
- }, m = {}, h = t.prompts, g = t.answers, v = (e) => (t, n, r) => new Promise((t) => {
72
- m[e] = r.shuffledValues, t();
73
- });
74
- a(t, n, o) || (h = await i(h, { shuffledValues: (n && n.shuffledValues || {}).prompts }, v("prompts"), "id"), g = await i(g, { shuffledValues: (n && n.shuffledValues || {}).answers }, v("answers"), "id")), e(m) || c && typeof c == "function" && c(n.id, n.element, { shuffledValues: m }).catch((e) => {
75
- console.error("update session failed", e);
76
- }), t && h && h.forEach((e) => {
77
- d[e.id] = e.relatedAnswer;
78
- });
79
- let y = o.mode === "evaluate" ? await r(f.correctness, t.feedback) : void 0, b = {
80
- config: {
81
- ...t,
82
- prompts: h,
83
- answers: g
84
- },
85
- correctness: f,
86
- feedback: y,
87
- mode: o.mode
88
- };
89
- o.role === "instructor" && (o.mode === "view" || o.mode === "evaluate") ? b.rationale = t.rationale : b.rationale = null;
90
- let x = Object.assign(b, { correctResponse: d });
91
- return s("out: ", x), x;
92
- }
93
- var y = (e, t) => new Promise((n) => {
94
- if (t.mode !== "evaluate" && t.role === "instructor") {
95
- let { prompts: t, answers: r } = e, i = {};
96
- t.forEach((e) => {
97
- r.filter((t) => t.id === e.relatedAnswer).length && (i[e.id] = e.relatedAnswer);
98
- }), n({
99
- value: i,
100
- id: "1"
101
- });
102
- } else n(null);
103
- });
104
- //#endregion
105
- export { y as createCorrectResponseSession, g as createDefaultModel, m as getLogTrace, v as model, _ as normalize, h as outcome };
@@ -1,27 +0,0 @@
1
- /**
2
- * @synced-from pie-elements/packages/match-list/src/answer-area.jsx
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 React from 'react';
10
- import PropTypes from 'prop-types';
11
- export declare class AnswerArea extends React.Component {
12
- static propTypes: {
13
- session: PropTypes.Validator<object>;
14
- showCorrect: PropTypes.Validator<boolean>;
15
- disabled: PropTypes.Validator<boolean>;
16
- onSessionChange: PropTypes.Requireable<(...args: any[]) => any>;
17
- onRemoveAnswer: PropTypes.Requireable<(...args: any[]) => any>;
18
- instanceId: PropTypes.Validator<string>;
19
- model: PropTypes.Validator<object>;
20
- prompt: PropTypes.Requireable<string>;
21
- };
22
- getAnswerFromSession: any;
23
- getCorrectOrIncorrectMap: any;
24
- buildRows: any;
25
- render(): React.JSX.Element;
26
- }
27
- export default AnswerArea;
@@ -1,94 +0,0 @@
1
- import e from "../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isEmpty.js";
2
- import t from "../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isUndefined.js";
3
- import n from "../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/reduce.js";
4
- import r from "./arrow.js";
5
- import i from "./answer.js";
6
- import a from "react";
7
- import o from "prop-types";
8
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
9
- import { styled as l } from "@mui/material/styles";
10
- //#region src/delivery/answer-area.tsx
11
- var u = l("div")({
12
- alignItems: "normal",
13
- display: "flex",
14
- height: 40,
15
- margin: "10px 20px"
16
- }), d = l("div")(({ theme: e }) => ({
17
- alignItems: "flex-start",
18
- display: "flex",
19
- flex: 1,
20
- flexDirection: "column",
21
- justifyContent: "space-between",
22
- marginTop: e.spacing(2),
23
- marginBottom: e.spacing(2)
24
- })), f = l("div")(({ theme: e }) => ({
25
- border: `1px solid ${e.palette.grey[400]}`,
26
- boxSizing: "border-box",
27
- flex: 1,
28
- margin: "10px 0",
29
- minHeight: 40,
30
- overflow: "hidden",
31
- padding: 10,
32
- textAlign: "center",
33
- width: "100%",
34
- wordBreak: "break-word"
35
- })), p = l("div")({
36
- alignItems: "center",
37
- display: "flex",
38
- justifyContent: "space-between",
39
- width: "100%"
40
- }), m = class extends a.Component {
41
- static propTypes = {
42
- session: o.object.isRequired,
43
- showCorrect: o.bool.isRequired,
44
- disabled: o.bool.isRequired,
45
- onSessionChange: o.func,
46
- onRemoveAnswer: o.func,
47
- instanceId: o.string.isRequired,
48
- model: o.object.isRequired,
49
- prompt: o.string
50
- };
51
- getAnswerFromSession = (e) => {
52
- let { model: t, session: n, showCorrect: r } = this.props, { config: i } = t, a = r ? i.prompts.find((t) => t.id === e).relatedAnswer : n.value && n.value[e];
53
- return i.answers.find((e) => e.id === a) || {};
54
- };
55
- getCorrectOrIncorrectMap = () => {
56
- let { model: e, session: r, showCorrect: i } = this.props, { config: a } = e, o = r.value || a.prompts.reduce((e, t) => (e[t.id] = void 0, e), {});
57
- if (e.mode !== "evaluate") return {};
58
- if (i) return a.prompts.reduce((e, t) => (e[t.id] = !0, e), {});
59
- let s = a.prompts.reduce((e, n) => (t(n.relatedAnswer) || (e[n.id] = n.relatedAnswer), e), {});
60
- return n(o, (e, t, n) => (e[n] = s[n] === o[n], e), {});
61
- };
62
- buildRows = () => {
63
- let { model: e } = this.props, { config: t } = e;
64
- return (t.prompts || []).map((e) => {
65
- let t = this.getAnswerFromSession(e.id);
66
- return {
67
- ...e,
68
- sessionAnswer: t
69
- };
70
- });
71
- };
72
- render() {
73
- let { disabled: t, instanceId: n, onRemoveAnswer: a } = this.props, o = this.buildRows(), l = this.getCorrectOrIncorrectMap();
74
- return /* @__PURE__ */ s(d, { children: o.map(({ sessionAnswer: o, title: d, id: m }, h) => /* @__PURE__ */ c(p, { children: [
75
- /* @__PURE__ */ s(f, { dangerouslySetInnerHTML: { __html: d } }),
76
- /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ s(r, { direction: "left" }), /* @__PURE__ */ s(r, {})] }),
77
- /* @__PURE__ */ s(i, {
78
- className: "answer",
79
- index: h,
80
- promptId: m,
81
- correct: l[m],
82
- draggable: !e(o),
83
- disabled: t,
84
- instanceId: n,
85
- id: o.id,
86
- title: o.title,
87
- type: "target",
88
- onRemoveChoice: () => a(m)
89
- }, h)
90
- ] }, h)) });
91
- }
92
- };
93
- //#endregion
94
- export { m as default };
@@ -1,40 +0,0 @@
1
- /**
2
- * @synced-from pie-elements/packages/match-list/src/answer.jsx
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 PropTypes from 'prop-types';
10
- import React from 'react';
11
- export declare class Answer extends React.Component {
12
- static propTypes: {
13
- className: PropTypes.Requireable<string>;
14
- isDragging: PropTypes.Requireable<boolean>;
15
- id: PropTypes.Requireable<any>;
16
- title: PropTypes.Requireable<string>;
17
- isOver: PropTypes.Requireable<boolean>;
18
- empty: PropTypes.Requireable<boolean>;
19
- type: PropTypes.Requireable<string>;
20
- disabled: PropTypes.Requireable<boolean>;
21
- correct: PropTypes.Requireable<boolean>;
22
- };
23
- componentDidMount(): void;
24
- componentWillUnmount(): void;
25
- handleTouchStart: any;
26
- render(): React.JSX.Element;
27
- }
28
- declare function DragAndDropAnswer(props: any): React.JSX.Element;
29
- declare namespace DragAndDropAnswer {
30
- var propTypes: {
31
- id: PropTypes.Requireable<any>;
32
- instanceId: PropTypes.Requireable<string>;
33
- promptId: PropTypes.Requireable<any>;
34
- title: PropTypes.Requireable<string>;
35
- draggable: PropTypes.Requireable<boolean>;
36
- disabled: PropTypes.Requireable<boolean>;
37
- type: PropTypes.Requireable<string>;
38
- };
39
- }
40
- export default DragAndDropAnswer;