@pie-element/match-list 7.1.1-next.0 → 7.1.1-next.109

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 (194) 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 +274 -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 +87 -0
  31. package/lib/index.js.map +1 -0
  32. package/lib/keyboard-coordinates.js +147 -0
  33. package/lib/keyboard-coordinates.js.map +1 -0
  34. package/lib/main.js +304 -0
  35. package/lib/main.js.map +1 -0
  36. package/package.json +21 -50
  37. package/dist/controller/defaults.d.ts +0 -17
  38. package/dist/controller/defaults.js +0 -9
  39. package/dist/controller/index.d.ts +0 -38
  40. package/dist/controller/index.js +0 -105
  41. package/dist/delivery/answer-area.d.ts +0 -27
  42. package/dist/delivery/answer-area.js +0 -94
  43. package/dist/delivery/answer.d.ts +0 -40
  44. package/dist/delivery/answer.js +0 -176
  45. package/dist/delivery/arrow.d.ts +0 -17
  46. package/dist/delivery/arrow.js +0 -35
  47. package/dist/delivery/choices-list.d.ts +0 -21
  48. package/dist/delivery/choices-list.js +0 -37
  49. package/dist/delivery/droppable-placeholder.d.ts +0 -24
  50. package/dist/delivery/droppable-placeholder.js +0 -42
  51. package/dist/delivery/index.d.ts +0 -21
  52. package/dist/delivery/index.js +0 -49
  53. package/dist/delivery/main.d.ts +0 -26
  54. package/dist/delivery/main.js +0 -149
  55. package/dist/index.d.ts +0 -1
  56. package/dist/index.iife.d.ts +0 -8
  57. package/dist/index.iife.js +0 -152
  58. package/dist/index.js +0 -2
  59. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_DataView.js +0 -6
  60. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Hash.js +0 -16
  61. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_ListCache.js +0 -16
  62. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Map.js +0 -6
  63. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_MapCache.js +0 -16
  64. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Promise.js +0 -6
  65. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Set.js +0 -6
  66. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_SetCache.js +0 -11
  67. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Stack.js +0 -14
  68. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Symbol.js +0 -5
  69. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Uint8Array.js +0 -5
  70. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_WeakMap.js +0 -6
  71. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayFilter.js +0 -10
  72. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayLikeKeys.js +0 -15
  73. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayMap.js +0 -7
  74. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayPush.js +0 -7
  75. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayReduce.js +0 -8
  76. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arraySome.js +0 -7
  77. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_assocIndexOf.js +0 -8
  78. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseEach.js +0 -6
  79. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseFindIndex.js +0 -7
  80. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseFindKey.js +0 -9
  81. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseFor.js +0 -5
  82. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseForOwn.js +0 -8
  83. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseGet.js +0 -10
  84. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseGetAllKeys.js +0 -9
  85. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseGetTag.js +0 -10
  86. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseHasIn.js +0 -6
  87. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsArguments.js +0 -9
  88. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqual.js +0 -8
  89. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqualDeep.js +0 -30
  90. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsMatch.js +0 -26
  91. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsNative.js +0 -11
  92. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIsTypedArray.js +0 -11
  93. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseIteratee.js +0 -11
  94. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseKeys.js +0 -12
  95. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseMatches.js +0 -12
  96. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseMatchesProperty.js +0 -17
  97. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseProperty.js +0 -8
  98. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_basePropertyDeep.js +0 -9
  99. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseReduce.js +0 -8
  100. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseTimes.js +0 -7
  101. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseToString.js +0 -15
  102. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseTrim.js +0 -8
  103. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseUnary.js +0 -8
  104. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_cacheHas.js +0 -6
  105. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_castPath.js +0 -10
  106. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_coreJsData.js +0 -5
  107. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_createBaseEach.js +0 -12
  108. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_createBaseFor.js +0 -12
  109. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_createFind.js +0 -19
  110. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalArrays.js +0 -35
  111. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalByTag.js +0 -35
  112. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_equalObjects.js +0 -32
  113. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_freeGlobal.js +0 -4
  114. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeys.js +0 -9
  115. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getMapData.js +0 -8
  116. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getMatchData.js +0 -16
  117. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getNative.js +0 -9
  118. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getRawTag.js +0 -14
  119. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getSymbols.js +0 -10
  120. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getTag.js +0 -23
  121. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getValue.js +0 -6
  122. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hasPath.js +0 -18
  123. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashClear.js +0 -7
  124. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashDelete.js +0 -7
  125. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashGet.js +0 -13
  126. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashHas.js +0 -9
  127. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hashSet.js +0 -9
  128. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isIndex.js +0 -8
  129. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isKey.js +0 -11
  130. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isKeyable.js +0 -7
  131. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isMasked.js +0 -11
  132. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isPrototype.js +0 -8
  133. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_isStrictComparable.js +0 -7
  134. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheClear.js +0 -6
  135. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheDelete.js +0 -9
  136. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheGet.js +0 -8
  137. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheHas.js +0 -7
  138. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_listCacheSet.js +0 -8
  139. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheClear.js +0 -13
  140. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheDelete.js +0 -8
  141. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheGet.js +0 -7
  142. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheHas.js +0 -7
  143. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheSet.js +0 -8
  144. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_mapToArray.js +0 -9
  145. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_matchesStrictComparable.js +0 -8
  146. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_memoizeCapped.js +0 -11
  147. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nativeCreate.js +0 -5
  148. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeys.js +0 -5
  149. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_nodeUtil.js +0 -9
  150. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_objectToString.js +0 -7
  151. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_overArg.js +0 -8
  152. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_root.js +0 -5
  153. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setCacheAdd.js +0 -7
  154. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setCacheHas.js +0 -6
  155. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_setToArray.js +0 -9
  156. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackClear.js +0 -7
  157. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackDelete.js +0 -7
  158. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackGet.js +0 -6
  159. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackHas.js +0 -6
  160. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stackSet.js +0 -16
  161. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stringToPath.js +0 -10
  162. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_toKey.js +0 -10
  163. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_toSource.js +0 -15
  164. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_trimmedEndIndex.js +0 -8
  165. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/eq.js +0 -6
  166. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/find.js +0 -6
  167. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/findIndex.js +0 -13
  168. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/findKey.js +0 -9
  169. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/get.js +0 -8
  170. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/hasIn.js +0 -8
  171. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/identity.js +0 -6
  172. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArguments.js +0 -10
  173. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArray.js +0 -4
  174. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArrayLike.js +0 -8
  175. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isBuffer.js +0 -6
  176. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isEmpty.js +0 -21
  177. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isFunction.js +0 -11
  178. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isLength.js +0 -7
  179. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isObject.js +0 -7
  180. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isObjectLike.js +0 -6
  181. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isSymbol.js +0 -9
  182. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isTypedArray.js +0 -7
  183. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isUndefined.js +0 -6
  184. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/keys.js +0 -9
  185. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/memoize.js +0 -16
  186. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/property.js +0 -10
  187. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/reduce.js +0 -12
  188. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/stubArray.js +0 -6
  189. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/stubFalse.js +0 -6
  190. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/toFinite.js +0 -8
  191. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/toInteger.js +0 -8
  192. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/toNumber.js +0 -19
  193. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/toString.js +0 -7
  194. package/dist/node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/uniqueId.js +0 -9
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.closestDroppableKeyboardCoordinates = void 0;
7
+ var _core = require("@dnd-kit/core");
8
+ const ARROW_STEP = 25;
9
+
10
+ /**
11
+ * Custom keyboard coordinate getter for non-sortable drag-and-drop.
12
+ *
13
+ * Tab/Shift+Tab cycle the dragged item directly onto the next/previous droppable
14
+ * (response area or the choices pool), in DOM order, placing the dragged item's own
15
+ * top-left corner at the target's center-left point. Arrow keys are left doing plain
16
+ * free-form movement (nudging the dragged item by a fixed step, same as dnd-kit's own
17
+ * default keyboard behavior) rather than jumping between droppables — collision
18
+ * detection (rectIntersection) still picks up whatever the item ends up actually
19
+ * overlapping.
20
+ */
21
+ const closestDroppableKeyboardCoordinates = (event, {
22
+ active,
23
+ context,
24
+ currentCoordinates
25
+ }) => {
26
+ const {
27
+ code
28
+ } = event;
29
+ const isTab = code === 'Tab';
30
+ const isArrow = code === _core.KeyboardCode.Down || code === _core.KeyboardCode.Up || code === _core.KeyboardCode.Left || code === _core.KeyboardCode.Right;
31
+ if (!isTab && !isArrow) {
32
+ return undefined;
33
+ }
34
+ event.preventDefault();
35
+ if (isArrow) {
36
+ switch (code) {
37
+ case _core.KeyboardCode.Down:
38
+ return {
39
+ ...currentCoordinates,
40
+ y: currentCoordinates.y + ARROW_STEP
41
+ };
42
+ case _core.KeyboardCode.Up:
43
+ return {
44
+ ...currentCoordinates,
45
+ y: currentCoordinates.y - ARROW_STEP
46
+ };
47
+ case _core.KeyboardCode.Right:
48
+ return {
49
+ ...currentCoordinates,
50
+ x: currentCoordinates.x + ARROW_STEP
51
+ };
52
+ case _core.KeyboardCode.Left:
53
+ return {
54
+ ...currentCoordinates,
55
+ x: currentCoordinates.x - ARROW_STEP
56
+ };
57
+ default:
58
+ return currentCoordinates;
59
+ }
60
+ }
61
+ const {
62
+ droppableRects,
63
+ droppableContainers,
64
+ collisionRect
65
+ } = context;
66
+ if (!droppableRects || droppableRects.size === 0) {
67
+ return currentCoordinates;
68
+ }
69
+
70
+ // `currentCoordinates` is the top-left of the dragged item's collision rect (not its
71
+ // center), so derive the dragged item's center in the same frame before comparing it
72
+ // against droppable centers below. Returning a droppable's *center* as the next
73
+ // coordinates (as opposed to its top-left) would shift the dragged item's top-left to
74
+ // that center, overshooting the target by roughly half its size and causing
75
+ // dnd-kit to resolve collisions against a neighboring droppable instead.
76
+ const draggedHalfSize = {
77
+ x: (collisionRect?.width || 0) / 2,
78
+ y: (collisionRect?.height || 0) / 2
79
+ };
80
+ const currentCenter = {
81
+ x: currentCoordinates.x + draggedHalfSize.x,
82
+ y: currentCoordinates.y + draggedHalfSize.y
83
+ };
84
+
85
+ // A placed answer ("target") is itself a droppable for its own prompt slot
86
+ // ("drop-{promptId}"). That self drop-zone must never be treated as a navigable
87
+ // target: it sits under the dragged item, so a tiny (even sub-pixel) discrepancy
88
+ // between its measured rect and the dragged item's own rect is enough to make it
89
+ // register as the "closest" candidate, which reads as the drag being stuck.
90
+ // Exclude it outright rather than relying on a distance threshold.
91
+ const activeData = active?.data?.current;
92
+ const ownDropId = activeData?.promptId != null ? `drop-${activeData.promptId}` : undefined;
93
+
94
+ // Collect top-left and center of all enabled droppable containers
95
+ const targets = [];
96
+ for (const [id, container] of droppableContainers) {
97
+ if (container?.disabled) continue;
98
+ if (id === ownDropId) continue;
99
+ const rect = droppableRects.get(id);
100
+ if (!rect) continue;
101
+ const center = {
102
+ x: rect.left + rect.width / 2,
103
+ y: rect.top + rect.height / 2
104
+ };
105
+ // Land the dragged item's own top-left corner at the target's center-left point,
106
+ // rather than at the target's own top-left corner.
107
+ const dropPosition = {
108
+ x: rect.left,
109
+ y: rect.top + rect.height / 2
110
+ };
111
+ targets.push({
112
+ id,
113
+ dropPosition,
114
+ center
115
+ });
116
+ }
117
+ if (targets.length === 0) {
118
+ return currentCoordinates;
119
+ }
120
+
121
+ // Tab/Shift+Tab: cycle through targets in DOM order (sorted top-to-bottom, left-to-right)
122
+ const reverse = event.shiftKey;
123
+
124
+ // Sort targets by position (top to bottom, then left to right)
125
+ targets.sort((a, b) => {
126
+ if (Math.abs(a.center.y - b.center.y) > 10) return a.center.y - b.center.y;
127
+ return a.center.x - b.center.x;
128
+ });
129
+
130
+ // Find the current target (closest to current coordinates)
131
+ let currentIndex = 0;
132
+ let minDist = Infinity;
133
+ for (let i = 0; i < targets.length; i++) {
134
+ const dist = distance(currentCenter, targets[i].center);
135
+ if (dist < minDist) {
136
+ minDist = dist;
137
+ currentIndex = i;
138
+ }
139
+ }
140
+
141
+ // Move to next/previous
142
+ const nextIndex = reverse ? (currentIndex - 1 + targets.length) % targets.length : (currentIndex + 1) % targets.length;
143
+ return targets[nextIndex].dropPosition;
144
+ };
145
+ exports.closestDroppableKeyboardCoordinates = closestDroppableKeyboardCoordinates;
146
+ const distance = (a, b) => Math.sqrt((a.x - b.x) ** 2 + (a.y - b.y) ** 2);
147
+ //# sourceMappingURL=keyboard-coordinates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard-coordinates.js","names":["_core","require","ARROW_STEP","closestDroppableKeyboardCoordinates","event","active","context","currentCoordinates","code","isTab","isArrow","KeyboardCode","Down","Up","Left","Right","undefined","preventDefault","y","x","droppableRects","droppableContainers","collisionRect","size","draggedHalfSize","width","height","currentCenter","activeData","data","current","ownDropId","promptId","targets","id","container","disabled","rect","get","center","left","top","dropPosition","push","length","reverse","shiftKey","sort","a","b","Math","abs","currentIndex","minDist","Infinity","i","dist","distance","nextIndex","exports","sqrt"],"sources":["../src/keyboard-coordinates.js"],"sourcesContent":["import { KeyboardCode } from '@dnd-kit/core';\n\nconst ARROW_STEP = 25;\n\n/**\n * Custom keyboard coordinate getter for non-sortable drag-and-drop.\n *\n * Tab/Shift+Tab cycle the dragged item directly onto the next/previous droppable\n * (response area or the choices pool), in DOM order, placing the dragged item's own\n * top-left corner at the target's center-left point. Arrow keys are left doing plain\n * free-form movement (nudging the dragged item by a fixed step, same as dnd-kit's own\n * default keyboard behavior) rather than jumping between droppables — collision\n * detection (rectIntersection) still picks up whatever the item ends up actually\n * overlapping.\n */\nexport const closestDroppableKeyboardCoordinates = (event, { active, context, currentCoordinates }) => {\n const { code } = event;\n const isTab = code === 'Tab';\n const isArrow =\n code === KeyboardCode.Down || code === KeyboardCode.Up || code === KeyboardCode.Left || code === KeyboardCode.Right;\n\n if (!isTab && !isArrow) {\n return undefined;\n }\n\n event.preventDefault();\n\n if (isArrow) {\n switch (code) {\n case KeyboardCode.Down:\n return { ...currentCoordinates, y: currentCoordinates.y + ARROW_STEP };\n\n case KeyboardCode.Up:\n return { ...currentCoordinates, y: currentCoordinates.y - ARROW_STEP };\n\n case KeyboardCode.Right:\n return { ...currentCoordinates, x: currentCoordinates.x + ARROW_STEP };\n\n case KeyboardCode.Left:\n return { ...currentCoordinates, x: currentCoordinates.x - ARROW_STEP };\n\n default:\n return currentCoordinates;\n }\n }\n\n const { droppableRects, droppableContainers, collisionRect } = context;\n\n if (!droppableRects || droppableRects.size === 0) {\n return currentCoordinates;\n }\n\n // `currentCoordinates` is the top-left of the dragged item's collision rect (not its\n // center), so derive the dragged item's center in the same frame before comparing it\n // against droppable centers below. Returning a droppable's *center* as the next\n // coordinates (as opposed to its top-left) would shift the dragged item's top-left to\n // that center, overshooting the target by roughly half its size and causing\n // dnd-kit to resolve collisions against a neighboring droppable instead.\n const draggedHalfSize = {\n x: (collisionRect?.width || 0) / 2,\n y: (collisionRect?.height || 0) / 2,\n };\n const currentCenter = {\n x: currentCoordinates.x + draggedHalfSize.x,\n y: currentCoordinates.y + draggedHalfSize.y,\n };\n\n // A placed answer (\"target\") is itself a droppable for its own prompt slot\n // (\"drop-{promptId}\"). That self drop-zone must never be treated as a navigable\n // target: it sits under the dragged item, so a tiny (even sub-pixel) discrepancy\n // between its measured rect and the dragged item's own rect is enough to make it\n // register as the \"closest\" candidate, which reads as the drag being stuck.\n // Exclude it outright rather than relying on a distance threshold.\n const activeData = active?.data?.current;\n const ownDropId = activeData?.promptId != null ? `drop-${activeData.promptId}` : undefined;\n\n // Collect top-left and center of all enabled droppable containers\n const targets = [];\n\n for (const [id, container] of droppableContainers) {\n if (container?.disabled) continue;\n\n if (id === ownDropId) continue;\n\n const rect = droppableRects.get(id);\n\n if (!rect) continue;\n\n const center = {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2,\n };\n // Land the dragged item's own top-left corner at the target's center-left point,\n // rather than at the target's own top-left corner.\n const dropPosition = {\n x: rect.left,\n y: rect.top + rect.height / 2,\n };\n\n targets.push({ id, dropPosition, center });\n }\n\n if (targets.length === 0) {\n return currentCoordinates;\n }\n\n // Tab/Shift+Tab: cycle through targets in DOM order (sorted top-to-bottom, left-to-right)\n const reverse = event.shiftKey;\n\n // Sort targets by position (top to bottom, then left to right)\n targets.sort((a, b) => {\n if (Math.abs(a.center.y - b.center.y) > 10) return a.center.y - b.center.y;\n return a.center.x - b.center.x;\n });\n\n // Find the current target (closest to current coordinates)\n let currentIndex = 0;\n let minDist = Infinity;\n\n for (let i = 0; i < targets.length; i++) {\n const dist = distance(currentCenter, targets[i].center);\n\n if (dist < minDist) {\n minDist = dist;\n currentIndex = i;\n }\n }\n\n // Move to next/previous\n const nextIndex = reverse\n ? (currentIndex - 1 + targets.length) % targets.length\n : (currentIndex + 1) % targets.length;\n\n return targets[nextIndex].dropPosition;\n};\n\nconst distance = (a, b) => Math.sqrt((a.x - b.x) ** 2 + (a.y - b.y) ** 2);\n"],"mappings":"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","ignoreList":[]}
package/lib/main.js ADDED
@@ -0,0 +1,304 @@
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 _keyboardCoordinates = require("./keyboard-coordinates");
15
+ var _correctAnswerToggle = _interopRequireDefault(require("@pie-lib/correct-answer-toggle"));
16
+ var _renderUi = require("@pie-lib/render-ui");
17
+ var _styles = require("@mui/material/styles");
18
+ var _lodashEs = require("lodash-es");
19
+ var _answerArea = _interopRequireDefault(require("./answer-area"));
20
+ var _choicesList = _interopRequireDefault(require("./choices-list"));
21
+ var _answer = require("./answer");
22
+ const sensors = [{
23
+ sensor: _core.PointerSensor,
24
+ options: {}
25
+ }, {
26
+ sensor: _core.KeyboardSensor,
27
+ options: {
28
+ coordinateGetter: _keyboardCoordinates.closestDroppableKeyboardCoordinates,
29
+ keyboardCodes: {
30
+ start: [_core.KeyboardCode.Space, _core.KeyboardCode.Enter],
31
+ cancel: [_core.KeyboardCode.Esc],
32
+ end: [_core.KeyboardCode.Space, _core.KeyboardCode.Enter]
33
+ }
34
+ }
35
+ }];
36
+ const MainContainer = (0, _styles.styled)('div')({
37
+ display: 'flex',
38
+ flexDirection: 'column',
39
+ justifyContent: 'center',
40
+ color: _renderUi.color.text(),
41
+ backgroundColor: _renderUi.color.background()
42
+ });
43
+ class Main extends _react.default.Component {
44
+ constructor(props) {
45
+ super(props);
46
+ (0, _defineProperty2.default)(this, "onDragStart", event => {
47
+ const {
48
+ active
49
+ } = event;
50
+ if (active?.data?.current) {
51
+ let rect = null;
52
+ const node = active.node?.current;
53
+ if (node) {
54
+ const {
55
+ width,
56
+ height
57
+ } = node.getBoundingClientRect();
58
+ rect = {
59
+ width,
60
+ height
61
+ };
62
+ }
63
+ this.setState({
64
+ draggingElement: {
65
+ ...active.data.current,
66
+ rect
67
+ }
68
+ });
69
+ }
70
+ });
71
+ (0, _defineProperty2.default)(this, "onPlaceAnswer", event => {
72
+ this.setState({
73
+ draggingElement: null
74
+ });
75
+ const {
76
+ active,
77
+ over
78
+ } = event;
79
+ if (!active) {
80
+ return;
81
+ }
82
+ const activeData = active.data.current;
83
+ const overData = over?.data.current;
84
+ if (!activeData) {
85
+ return;
86
+ }
87
+ const {
88
+ session,
89
+ onSessionChange,
90
+ model
91
+ } = this.props;
92
+ const {
93
+ config: {
94
+ duplicates
95
+ }
96
+ } = model;
97
+ if ((0, _lodashEs.isUndefined)(session.value)) {
98
+ session.value = {};
99
+ }
100
+
101
+ // dropping a placed answer back to the choices pool = remove it
102
+ if (overData.type === 'choices-pool' && activeData.promptId !== undefined) {
103
+ session.value[activeData.promptId] = undefined;
104
+ onSessionChange(session);
105
+ return;
106
+ }
107
+ const answerId = activeData.id;
108
+ const sourcePromptId = activeData.promptId;
109
+
110
+ // Handle dropping onto a drop zone
111
+ if (overData && overData.type === 'drop-zone' && overData.promptId != null) {
112
+ const targetPromptId = overData.promptId;
113
+ if (activeData.type === 'choice' && overData.type === 'drop-zone' && targetPromptId !== undefined) {
114
+ // check if this choice is already placed somewhere
115
+ const existingPlacement = (0, _lodashEs.findKey)(session.value, val => val === answerId);
116
+ if (existingPlacement && !duplicates) {
117
+ // swap if duplicates not allowed
118
+ session.value = (0, _drag.swap)(session.value, existingPlacement, targetPromptId);
119
+ } else {
120
+ // place answer
121
+ session.value[targetPromptId] = answerId;
122
+ }
123
+ }
124
+ // Handle moving a placed item (target) to another drop zone
125
+ else if (activeData.type === 'target' && sourcePromptId != null) {
126
+ // If moving to a different placeholder
127
+ if (sourcePromptId !== targetPromptId) {
128
+ const targetHasItem = session.value[targetPromptId] != null;
129
+ if (targetHasItem && !duplicates) {
130
+ // swap items between placeholders
131
+ const temp = session.value[targetPromptId];
132
+ session.value[targetPromptId] = answerId;
133
+ session.value[sourcePromptId] = temp;
134
+ } else if (!targetHasItem) {
135
+ // move item to empty placeholder
136
+ session.value[targetPromptId] = answerId;
137
+ delete session.value[sourcePromptId];
138
+ }
139
+ }
140
+ }
141
+ onSessionChange(session);
142
+ }
143
+ });
144
+ (0, _defineProperty2.default)(this, "toggleShowCorrect", () => {
145
+ this.setState({
146
+ showCorrectAnswer: !this.state.showCorrectAnswer
147
+ });
148
+ });
149
+ (0, _defineProperty2.default)(this, "renderDragOverlay", () => {
150
+ const {
151
+ draggingElement
152
+ } = this.state;
153
+ if (!draggingElement) return null;
154
+ return /*#__PURE__*/_react.default.createElement(_answer.Answer, {
155
+ id: draggingElement.id,
156
+ title: draggingElement.value,
157
+ disabled: false,
158
+ isDragging: false,
159
+ style: draggingElement.rect ? {
160
+ width: draggingElement.rect.width,
161
+ height: draggingElement.rect.height,
162
+ boxSizing: 'border-box'
163
+ } : {}
164
+ });
165
+ });
166
+ this.instanceId = (0, _lodashEs.uniqueId)();
167
+ this.state = {
168
+ showCorrectAnswer: false,
169
+ draggingElement: null
170
+ };
171
+ }
172
+ onRemoveAnswer(id) {
173
+ const {
174
+ session,
175
+ onSessionChange
176
+ } = this.props;
177
+ session.value[id] = undefined;
178
+ onSessionChange(session);
179
+ }
180
+ render() {
181
+ const {
182
+ showCorrectAnswer
183
+ } = this.state;
184
+ const {
185
+ model,
186
+ session
187
+ } = this.props;
188
+ const {
189
+ config,
190
+ mode
191
+ } = model;
192
+ const {
193
+ prompt,
194
+ language
195
+ } = config;
196
+
197
+ // Helpers for accessible announcements
198
+ const getChoiceLabel = dragId => {
199
+ // dragId is like "choice-123" or "target-123"
200
+ const answerId = String(dragId).replace(/^(choice|target)-/, '');
201
+ const answer = config.answers.find(a => String(a.id) === answerId);
202
+ if (answer?.title) {
203
+ // Strip HTML tags for screen reader
204
+ const text = answer.title.replace(/<[^>]*>/g, '').trim();
205
+ return text || `Answer ${answerId}`;
206
+ }
207
+ return `Answer ${answerId}`;
208
+ };
209
+ const getDropTargetLabel = dropId => {
210
+ // dropId is like "drop-456" or "choices-pool"
211
+ if (dropId === 'choices-pool') {
212
+ return {
213
+ label: 'Choices list',
214
+ choiceId: null
215
+ };
216
+ }
217
+ const promptId = String(dropId).replace(/^drop-/, '');
218
+ const promptItem = config.prompts.find(p => String(p.id) === promptId);
219
+ const label = promptItem?.title ? `Response area for ${promptItem.title.replace(/<[^>]*>/g, '').trim()}` : `Response area ${promptId}`;
220
+ const choiceId = session.value?.[promptId];
221
+ return {
222
+ label,
223
+ choiceId: choiceId || null
224
+ };
225
+ };
226
+ const announcements = {
227
+ onDragStart({
228
+ active
229
+ }) {
230
+ return `Picked up ${getChoiceLabel(active.id)}. Use Tab to move between response areas, then press Space or Enter to drop.`;
231
+ },
232
+ onDragOver({
233
+ active,
234
+ over
235
+ }) {
236
+ if (!over) {
237
+ return `${getChoiceLabel(active.id)} is not over a response area.`;
238
+ }
239
+ const target = getDropTargetLabel(over.id);
240
+ const content = target.choiceId ? `Currently contains ${getChoiceLabel(target.choiceId)}.` : 'Currently empty.';
241
+ return `Over ${target.label}. ${content}`;
242
+ },
243
+ onDragEnd({
244
+ active,
245
+ over
246
+ }) {
247
+ if (!over) {
248
+ return `${getChoiceLabel(active.id)} was returned to its original position.`;
249
+ }
250
+ return `Dropped ${getChoiceLabel(active.id)} in ${getDropTargetLabel(over.id).label}.`;
251
+ },
252
+ onDragCancel({
253
+ active
254
+ }) {
255
+ return `Cancelled. ${getChoiceLabel(active.id)} was returned to its original position.`;
256
+ }
257
+ };
258
+ return /*#__PURE__*/_react.default.createElement(_core.DndContext, {
259
+ sensors: sensors,
260
+ collisionDetection: _core.rectIntersection,
261
+ onDragStart: this.onDragStart,
262
+ onDragEnd: this.onPlaceAnswer,
263
+ modifiers: [_modifiers.restrictToFirstScrollableAncestor],
264
+ accessibility: {
265
+ screenReaderInstructions: {
266
+ draggable: 'Press Space or Enter to pick up this answer choice. Once picked up, use Tab or Shift+Tab to cycle through response areas, or use arrow keys to move it freely. Press Space or Enter to drop, or Escape to cancel.'
267
+ }
268
+ }
269
+ }, /*#__PURE__*/_react.default.createElement(MainContainer, null, /*#__PURE__*/_react.default.createElement(_renderUi.PreviewPrompt, {
270
+ className: "prompt",
271
+ prompt: prompt
272
+ }), /*#__PURE__*/_react.default.createElement(_correctAnswerToggle.default, {
273
+ show: mode === 'evaluate',
274
+ toggled: showCorrectAnswer,
275
+ onToggle: this.toggleShowCorrect,
276
+ language: language
277
+ }), /*#__PURE__*/_react.default.createElement(_answerArea.default, {
278
+ instanceId: this.instanceId,
279
+ model: model,
280
+ session: session,
281
+ onRemoveAnswer: id => this.onRemoveAnswer(id),
282
+ disabled: mode !== 'gather',
283
+ showCorrect: showCorrectAnswer
284
+ }), /*#__PURE__*/_react.default.createElement(_choicesList.default, {
285
+ instanceId: this.instanceId,
286
+ model: model,
287
+ session: session,
288
+ disabled: mode !== 'gather',
289
+ onRemoveAnswer: id => this.onRemoveAnswer(id)
290
+ }), model.correctness && model.feedback && !showCorrectAnswer && /*#__PURE__*/_react.default.createElement(_renderUi.Feedback, {
291
+ correctness: model.correctness.correctness,
292
+ feedback: model.feedback
293
+ })), /*#__PURE__*/_react.default.createElement(_core.DragOverlay, null, this.renderDragOverlay()));
294
+ }
295
+ }
296
+ exports.Main = Main;
297
+ (0, _defineProperty2.default)(Main, "propTypes", {
298
+ session: _propTypes.default.object.isRequired,
299
+ onSessionChange: _propTypes.default.func,
300
+ model: _propTypes.default.object.isRequired,
301
+ prompt: _propTypes.default.string
302
+ });
303
+ var _default = exports.default = Main;
304
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","names":["_react","_interopRequireDefault","require","_propTypes","_drag","_core","_modifiers","_keyboardCoordinates","_correctAnswerToggle","_renderUi","_styles","_lodashEs","_answerArea","_choicesList","_answer","sensors","sensor","PointerSensor","options","KeyboardSensor","coordinateGetter","closestDroppableKeyboardCoordinates","keyboardCodes","start","KeyboardCode","Space","Enter","cancel","Esc","end","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","getChoiceLabel","dragId","String","replace","answer","answers","find","a","trim","getDropTargetLabel","dropId","label","choiceId","promptItem","prompts","p","announcements","onDragStart","onDragOver","target","content","onDragEnd","onDragCancel","DndContext","collisionDetection","rectIntersection","onPlaceAnswer","modifiers","restrictToFirstScrollableAncestor","accessibility","screenReaderInstructions","draggable","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, PointerSensor, KeyboardSensor, KeyboardCode, rectIntersection } from '@dnd-kit/core';\nimport { restrictToFirstScrollableAncestor } from '@dnd-kit/modifiers';\nimport { closestDroppableKeyboardCoordinates } from './keyboard-coordinates';\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 sensors = [\n { sensor: PointerSensor, options: {} },\n {\n sensor: KeyboardSensor,\n options: {\n coordinateGetter: closestDroppableKeyboardCoordinates,\n keyboardCodes: {\n start: [KeyboardCode.Space, KeyboardCode.Enter],\n cancel: [KeyboardCode.Esc],\n end: [KeyboardCode.Space, KeyboardCode.Enter],\n },\n },\n },\n];\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 // Helpers for accessible announcements\n const getChoiceLabel = (dragId) => {\n // dragId is like \"choice-123\" or \"target-123\"\n const answerId = String(dragId).replace(/^(choice|target)-/, '');\n const answer = config.answers.find((a) => String(a.id) === answerId);\n\n if (answer?.title) {\n // Strip HTML tags for screen reader\n const text = answer.title.replace(/<[^>]*>/g, '').trim();\n return text || `Answer ${answerId}`;\n }\n\n return `Answer ${answerId}`;\n };\n\n const getDropTargetLabel = (dropId) => {\n // dropId is like \"drop-456\" or \"choices-pool\"\n if (dropId === 'choices-pool') {\n return { label: 'Choices list', choiceId: null };\n }\n\n const promptId = String(dropId).replace(/^drop-/, '');\n const promptItem = config.prompts.find((p) => String(p.id) === promptId);\n const label = promptItem?.title\n ? `Response area for ${promptItem.title.replace(/<[^>]*>/g, '').trim()}`\n : `Response area ${promptId}`;\n const choiceId = session.value?.[promptId];\n\n return { label, choiceId: choiceId || null };\n };\n\n const announcements = {\n onDragStart({ active }) {\n return `Picked up ${getChoiceLabel(active.id)}. Use Tab to move between response areas, then press Space or Enter to drop.`;\n },\n\n onDragOver({ active, over }) {\n if (!over) {\n return `${getChoiceLabel(active.id)} is not over a response area.`;\n }\n\n const target = getDropTargetLabel(over.id);\n const content = target.choiceId ? `Currently contains ${getChoiceLabel(target.choiceId)}.` : 'Currently empty.';\n\n return `Over ${target.label}. ${content}`;\n },\n\n onDragEnd({ active, over }) {\n if (!over) {\n return `${getChoiceLabel(active.id)} was returned to its original position.`;\n }\n\n return `Dropped ${getChoiceLabel(active.id)} in ${getDropTargetLabel(over.id).label}.`;\n },\n\n onDragCancel({ active }) {\n return `Cancelled. ${getChoiceLabel(active.id)} was returned to its original position.`;\n },\n };\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={rectIntersection}\n onDragStart={this.onDragStart}\n onDragEnd={this.onPlaceAnswer}\n modifiers={[restrictToFirstScrollableAncestor]}\n accessibility={{\n screenReaderInstructions: {\n draggable:\n 'Press Space or Enter to pick up this answer choice. Once picked up, use Tab or Shift+Tab to cycle through response areas, or use arrow keys to move it freely. Press Space or Enter to drop, or Escape to cancel.',\n },\n }}\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.0",
3
+ "repository": "pie-framework/pie-elements",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
7
+ "version": "7.1.1-next.109+d47f74af0",
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.3-next.0",
13
- "@pie-lib/drag": "4.0.3-next.0",
14
- "@pie-lib/render-ui": "6.1.1-next.0",
20
+ "@pie-framework/pie-player-events": "^0.1.0",
21
+ "@pie-lib/correct-answer-toggle": "4.0.5",
22
+ "@pie-lib/drag": "4.0.6",
23
+ "@pie-lib/math-rendering": "5.1.0",
24
+ "@pie-lib/render-ui": "6.1.3",
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": "d47f74af0cb00ef22eff381b059b3767e4c3ef84",
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 };