jspsych-tangram 0.0.5 → 0.0.6
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.
- package/dist/construct/index.browser.js +10 -2
- package/dist/construct/index.browser.js.map +1 -1
- package/dist/construct/index.browser.min.js +11 -11
- package/dist/construct/index.browser.min.js.map +1 -1
- package/dist/construct/index.cjs +10 -2
- package/dist/construct/index.cjs.map +1 -1
- package/dist/construct/index.d.ts +12 -0
- package/dist/construct/index.js +10 -2
- package/dist/construct/index.js.map +1 -1
- package/dist/index.cjs +21 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +24 -0
- package/dist/index.js +21 -4
- package/dist/index.js.map +1 -1
- package/dist/prep/index.browser.js +11 -2
- package/dist/prep/index.browser.js.map +1 -1
- package/dist/prep/index.browser.min.js +11 -11
- package/dist/prep/index.browser.min.js.map +1 -1
- package/dist/prep/index.cjs +11 -2
- package/dist/prep/index.cjs.map +1 -1
- package/dist/prep/index.d.ts +12 -0
- package/dist/prep/index.js +11 -2
- package/dist/prep/index.js.map +1 -1
- package/package.json +1 -1
- package/src/plugins/tangram-construct/ConstructionApp.tsx +6 -2
- package/src/plugins/tangram-construct/index.ts +7 -0
- package/src/plugins/tangram-prep/PrepApp.tsx +8 -2
- package/src/plugins/tangram-prep/index.ts +7 -0
- package/tangram-construct.min.js +11 -11
- package/tangram-prep.min.js +11 -11
package/package.json
CHANGED
|
@@ -25,6 +25,7 @@ import { CONFIG } from "../../core/config/config";
|
|
|
25
25
|
export interface StartConstructionTrialParams {
|
|
26
26
|
tangrams: any[];
|
|
27
27
|
quickstash_macros?: Blueprint[] | AnchorComposite[];
|
|
28
|
+
primitiveOrder: string[];
|
|
28
29
|
target?: PlacementTarget;
|
|
29
30
|
input?: InputMode;
|
|
30
31
|
layout?: LayoutMode;
|
|
@@ -57,6 +58,9 @@ export function startConstructionTrial(
|
|
|
57
58
|
"largetriangle",
|
|
58
59
|
]);
|
|
59
60
|
|
|
61
|
+
// make copy of PRIMITIVE_BLUEPRINTS sorted by primitiveOrder
|
|
62
|
+
const PRIMITIVE_BLUEPRINTS_ORDERED = [...PRIMITIVE_BLUEPRINTS].sort((a, b) => params.primitiveOrder.indexOf(a.kind) - params.primitiveOrder.indexOf(b.kind));
|
|
63
|
+
|
|
60
64
|
// Convert JSON plugin parameters to internal Sector[] format
|
|
61
65
|
const sectors: Sector[] = params.tangrams.map((tangramSpec, index) => {
|
|
62
66
|
|
|
@@ -99,7 +103,7 @@ export function startConstructionTrial(
|
|
|
99
103
|
|
|
100
104
|
// Create primitive map for conversion
|
|
101
105
|
const primsByKind = new Map<TanKind, PrimitiveBlueprint>();
|
|
102
|
-
|
|
106
|
+
PRIMITIVE_BLUEPRINTS_ORDERED.forEach(p => primsByKind.set(p.kind, p));
|
|
103
107
|
|
|
104
108
|
// Convert each anchor composite to pixel-based blueprint
|
|
105
109
|
quickstash = (params.quickstash_macros as AnchorComposite[]).map(anchorComposite =>
|
|
@@ -116,7 +120,7 @@ export function startConstructionTrial(
|
|
|
116
120
|
const gameBoardProps = {
|
|
117
121
|
sectors,
|
|
118
122
|
quickstash,
|
|
119
|
-
primitives:
|
|
123
|
+
primitives: PRIMITIVE_BLUEPRINTS_ORDERED,
|
|
120
124
|
layout: params.layout as LayoutMode,
|
|
121
125
|
target: params.target as PlacementTarget,
|
|
122
126
|
input: params.input as InputMode,
|
|
@@ -17,6 +17,12 @@ const info = {
|
|
|
17
17
|
default: [],
|
|
18
18
|
description: "Array of MacroSpec objects created in prep trial"
|
|
19
19
|
},
|
|
20
|
+
/** Array of primitive names in the order they should be displayed */
|
|
21
|
+
primitive_order: {
|
|
22
|
+
type: ParameterType.OBJECT,
|
|
23
|
+
default: ["square", "smalltriangle", "parallelogram", "medtriangle", "largetriangle"],
|
|
24
|
+
description: "Array of primitive names in the order they should be displayed"
|
|
25
|
+
},
|
|
20
26
|
/** Whether to place pieces in workspace or directly on silhouette */
|
|
21
27
|
target: {
|
|
22
28
|
type: ParameterType.SELECT,
|
|
@@ -137,6 +143,7 @@ class TangramConstructPlugin implements JsPsychPlugin<Info> {
|
|
|
137
143
|
const params: StartConstructionTrialParams = {
|
|
138
144
|
tangrams: trial.tangrams,
|
|
139
145
|
quickstash_macros: trial.quickstash_macros,
|
|
146
|
+
primitiveOrder: trial.primitive_order,
|
|
140
147
|
target: trial.target,
|
|
141
148
|
input: trial.input,
|
|
142
149
|
layout: trial.layout,
|
|
@@ -32,6 +32,7 @@ export interface StartPrepTrialParams {
|
|
|
32
32
|
layoutMode: "circle" | "semicircle";
|
|
33
33
|
requireAllSlots: boolean;
|
|
34
34
|
quickstashMacros?: AnchorComposite[];
|
|
35
|
+
primitiveOrder: string[];
|
|
35
36
|
onInteraction?: (event: any) => void;
|
|
36
37
|
onTrialEnd?: (data: any) => void;
|
|
37
38
|
}
|
|
@@ -53,10 +54,14 @@ export function startPrepTrial(
|
|
|
53
54
|
layoutMode,
|
|
54
55
|
requireAllSlots,
|
|
55
56
|
quickstashMacros,
|
|
57
|
+
primitiveOrder,
|
|
56
58
|
onInteraction,
|
|
57
59
|
onTrialEnd,
|
|
58
60
|
} = params;
|
|
59
61
|
|
|
62
|
+
// make copy of PRIMITIVE_BLUEPRINTS sorted by primitiveOrder
|
|
63
|
+
const PRIMITIVE_BLUEPRINTS_ORDERED = [...PRIMITIVE_BLUEPRINTS].sort((a, b) => primitiveOrder.indexOf(a.kind) - primitiveOrder.indexOf(b.kind));
|
|
64
|
+
|
|
60
65
|
// Create blank prep sectors (no silhouettes)
|
|
61
66
|
const prepSectors: Sector[] = Array.from({ length: numQuickstashSlots }, (_, i) => ({
|
|
62
67
|
id: `prep-sector-${i}`,
|
|
@@ -75,7 +80,8 @@ export function startPrepTrial(
|
|
|
75
80
|
if (quickstashMacros && quickstashMacros.length > 0 && layout) {
|
|
76
81
|
// Spawn pieces immediately when controller and layout are ready
|
|
77
82
|
const primsByKind = new Map<TanKind, PrimitiveBlueprint>();
|
|
78
|
-
|
|
83
|
+
|
|
84
|
+
PRIMITIVE_BLUEPRINTS_ORDERED.forEach(p => primsByKind.set(p.kind, p));
|
|
79
85
|
|
|
80
86
|
quickstashMacros.forEach((anchorComposite, macroIndex) => {
|
|
81
87
|
const sectorId = `prep-sector-${macroIndex}`;
|
|
@@ -164,7 +170,7 @@ export function startPrepTrial(
|
|
|
164
170
|
root.render(React.createElement(GameBoard, {
|
|
165
171
|
sectors: prepSectors,
|
|
166
172
|
quickstash: [], // No pre-made macros
|
|
167
|
-
primitives:
|
|
173
|
+
primitives: PRIMITIVE_BLUEPRINTS_ORDERED,
|
|
168
174
|
layout: layoutMode,
|
|
169
175
|
target: 'workspace', // Pieces go in sectors
|
|
170
176
|
input: inputMode,
|
|
@@ -41,6 +41,12 @@ const info = {
|
|
|
41
41
|
default: [],
|
|
42
42
|
description: "Array of AnchorComposite objects to edit as primitive pieces"
|
|
43
43
|
},
|
|
44
|
+
/** Array of primitive names in the order they should be displayed */
|
|
45
|
+
primitive_order: {
|
|
46
|
+
type: ParameterType.OBJECT,
|
|
47
|
+
default: ["square", "smalltriangle", "parallelogram", "medtriangle", "largetriangle"],
|
|
48
|
+
description: "Array of primitive names in the order they should be displayed"
|
|
49
|
+
},
|
|
44
50
|
/** Callback fired after each interaction (optional analytics hook) */
|
|
45
51
|
onInteraction: {
|
|
46
52
|
type: ParameterType.FUNCTION,
|
|
@@ -108,6 +114,7 @@ class TangramPrepPlugin implements JsPsychPlugin<Info> {
|
|
|
108
114
|
layoutMode: trial.layout as "circle" | "semicircle",
|
|
109
115
|
requireAllSlots: trial.require_all_slots,
|
|
110
116
|
quickstashMacros: trial.quickstash_macros,
|
|
117
|
+
primitiveOrder: trial.primitive_order,
|
|
111
118
|
onInteraction: trial.onInteraction,
|
|
112
119
|
onTrialEnd: wrappedOnTrialEnd,
|
|
113
120
|
};
|