jspsych-tangram 0.0.8 → 0.0.9
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 +41 -2
- package/dist/construct/index.browser.js.map +1 -1
- package/dist/construct/index.browser.min.js +14 -11
- package/dist/construct/index.browser.min.js.map +1 -1
- package/dist/construct/index.cjs +41 -2
- package/dist/construct/index.cjs.map +1 -1
- package/dist/construct/index.js +41 -2
- package/dist/construct/index.js.map +1 -1
- package/dist/index.cjs +41 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +41 -2
- package/dist/index.js.map +1 -1
- package/dist/prep/index.browser.js +41 -2
- package/dist/prep/index.browser.js.map +1 -1
- package/dist/prep/index.browser.min.js +16 -13
- package/dist/prep/index.browser.min.js.map +1 -1
- package/dist/prep/index.cjs +41 -2
- package/dist/prep/index.cjs.map +1 -1
- package/dist/prep/index.js +41 -2
- package/dist/prep/index.js.map +1 -1
- package/package.json +1 -1
- package/src/assets/README.md +6 -0
- package/src/assets/images.d.ts +19 -0
- package/src/assets/locked.png +0 -0
- package/src/assets/unlocked.png +0 -0
- package/src/core/components/board/BoardView.tsx +72 -29
- package/src/core/io/InteractionTracker.ts +16 -8
- package/src/core/io/data-tracking.ts +3 -0
- package/tangram-construct.min.js +14 -11
- package/tangram-prep.min.js +16 -13
package/dist/index.cjs
CHANGED
|
@@ -825,6 +825,10 @@ function shouldUseSelectiveBorders(blueprintId) {
|
|
|
825
825
|
return CONFIG.game.showBorders;
|
|
826
826
|
}
|
|
827
827
|
|
|
828
|
+
var lockedIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABaCAYAAAA4qEECAAAACXBIWXMAAAsSAAALEgHS3X78AAAFY0lEQVR4nO2d7XXrNgyGH/r0f7zB9QbXnaDqBt6gvhM0I2SE3A2UDXwnqLKBPEHdDewJ0B+kYieWZEoiQfrjPQcnjqOI0GuYAAFQMiJCLjDGLIEFsHQyB/7w/Pd397MCamAnInVgFUfDpCTaGLMACmDlfj4FHuKAJX4DVCKyC3x+b6gTbYyZA2sn31UHhy1QAqWI7FVHFhEVwVpsCUgmUgKF2vUrEVxlQGyXVBqE3zPBqoTHIHhOXlPEUCmBedZEY6OHfQZkTZU9sMqO6Buw4ujWHYLkJXaBkJqUWFIDy6REYx3eLUwVl2TPREc5heR1BgRoy1qV6DsleRLZD5KVyH6QrET2UMeX+uJyE28H6UvykvuILobKHs/Qz4fkObcdJ0+VGo9FzcV8tDGmBP7qPSg+DtgLqrFWBLYSs8C/AhMTbyKy7j3igjWvSPu1LPH4ajo9y4S6ChdyI5emjFTz8isjcgxYC98kNIxOnfuUTmEhk5e6Tvd1IiMpBxFNmlDOy6kMIDtVpNRqKK3O0BhToetk/sPOxZ0FU1cxX2CNAGxFZCc9lW3XvlARvrreh3cRKc7ezcSaOx0e1tH1hZc1PY6INA79zKrbFKuUlXrpccZDdKnomHqwzlXzmqpeotG35l0PyWMWSa3zPGkiqKKP6FJZmXUH0VVIa0pk1WUr0e5T11REaLe+dYwPEOtIk13fqSLPykp0Wd4uwLm7piTtnM1zM/aMI9boovr6hgvHvgU49zdjTNHyvnZ36bp5MYOPGFW74bDtoouA52871y7g+X3w3XH7YdGFsgJwzMKdYh55zCry+dtQwJHoVQIF7gUrSGvR94ICYOYckGYu4N7wZIxZzLDx5QNxsZxh04kPxMUS9JNINfBChB7kS4KNal4JsygaIhtNooNUTwKS/oxeoqky7kVsbB3JujuhLkCzMKBF9O+S0ebKU7il+j+xx5ldPmQyfuZKMoCIVMCv2ONoEP2qMMZUlLEHiD11HEQkdv4iCIwxUafQ2Bad7ZShjd9SK+CLkz3kTQJsQ4o93RMQNX4MFPN2NcN4t816jBE1ltZwhpPgLLmiPdZ9Aip3TNbInmjsdNG3oHhCvww3GDOOd27JFT5FidwLF+8z2ktKD4TFfkb+Idgm0DEpUV8L0Yeevx94ED0dYttyC9rJPmCzgjtFlcagnjkl+ywmOVxSasHn5M8vYJFzwsrhICK7JryrUmriA7cCPCW1vpJVYQXHODr3Oe6asYEj0VU6PW4eFTii3Ty9TajMrWLbOOrTJXiZRJXbRtm8eBAdF2Xz4oNo58HfUmhzo3g7jYq+Zu9KXV0Go+54nSPKT7+1JMArwiW86wiNL2sm3ERKKfF/VvA42zkbus9BREyoc8WC68r/N+Ap/3RtDB84S/y7A4LlqI0xueeKIWx/+PtXkoHzqeOkRpdV3TCmELbpsbWG2Td4yA2QwefUgCS/BLzO185xehSYB/6ksyObsLeX2zHmxihOkdB3Biixqc3UBC8If6eaom9Mn5tXvQJ/9x40HFtsGKmd5pxjHV/oPZU/ReS57wCvp1YYY2r0N3xeC7YicnF7im9fx4rMqzCJcMCz1cGLaDnW7R74jEI865XenUpia3M/xmp0g/ghQ+qViUOia5XBoWoO8ee1yaj1QC7B/rXIKJK94ug+JLqvXAo0jTqjc+CT2nbdwEtuu7C7xSaKphUaAi1pm62/qb/aoWXUzWiDztEdhD8e4aRB9I1YdzArjkr0CeGNo0xNnK9UBNp4pEr0CeFF5oRXXPODIzsILzMgtpFSg+BGHg/3VcLjcdVKSEr0Vzjil4x/AHvTrF5jm3d2wZUcif8BqSLxz8FiAOgAAAAASUVORK5CYII=";
|
|
829
|
+
|
|
830
|
+
var unlockedIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABaCAYAAAA4qEECAAAACXBIWXMAAAsSAAALEgHS3X78AAAFYklEQVR4nO1d0ZGjOBB9ct3/+iJYMlg2giODcwjeDCYEbwbeDNgMvBloIjgmAyYDHEHfh4SHsQUIaLVk7FfVNTblkZpHq1u0GqGICKlAKZUDyADkVrYA/vH891f7VwOoANREVDGrOBsqJtFKqQxAAWBn/35h7uIMQ/wJgCaimrl9b4gTrZTaAthb+SbaOfAGoARQElEj2jMRiQiMxZYAKBEpARRi5y9EsE6A2D7REoQ/MsGihIcgeIu0XMRUKQFskyYaZvbQJEDWUmkA7JIjegVWHNy6OUjOYW4QYpMSSioAeVSiYQLeGlzFmDRYGCiXkLxPgABp2YsS/aAkLyL7SbIQ2U+ShcieGvhin1xq4h0gvbJ3Nk+swZ/G9MEZZooFmKlkDB36cIYhezzv7WHJW8jOkxsAR5i7TOfNAszoOgKoBfXqk6pPz0muA3J3fDXmBBkTN2ITXi4i2lqVhKJHH6sYGXXHyGQP5kbGlJe465tsxSPWHYvoZshYYrsMNpITIbvXhfQpWwgo9eJB2AmfR1Vjjw1eoMhkF1OI1oGV0SNxofZoo8aAX7QXJAbRznOLZc1ZDzlzAtqxp60sEtEEh1XHsGanHwNwWNCm0w0h3mLEjVUnYc1M/d4k55GQVUtbQBUwJpx62q4jEV06iYaZN4fu/MafgtfqXKMlFtGEzrx6gw/sER6u5MuOsf1D94tS6gXAV8b2p2J/+dS58hKJo9tovCwIukTbNrXA+YxJ9cl1QC5ouIiONd+VkqzrOgrEQzI1zIFQALgQzeknh5AJ9ZMSdgDELTpzHDsJ9R0LRfshR4TgkNAUTMRPbyA7nL/ZxymuoQV1iIF8A2PRknDFg7W7j3wD+RnHTX9EdIJZUV4r8r8idPqvUmpLtw/rHBH+oscqV9gCskGhgblrY6+o9xWYmHSAfBWsWEenmAQ7CN9C9q5UpJMyNrEDhGsJDlTLdkC8wyTlZR+g9IR9wLRGYN+9Gf/JYhxSJRkArG7H0P1IWPTfKRMNXIo4/wvaB8IS/U5EWcD22aCUCmpwoV1HHbj9u4GEj2aBUmqnlKqUUmSlUkpJpXdZEHJao5mmYEOFNc4Cmhl9BJ9H65SJhl/NR5E40XoDcyuaMnzcwz60EgvRbJD+mp1PGjcLrcRCVPdAtM+IS31U3gXRPosCqS8cVG0gCJUy5Jp1DBX3ONchEwqGDdFHXYdmuGohUQD44zj+B3FrUnyggY8blqSHHhE1RLQD8LNz+CcR7VLPo8Byey8Wfc/QgCWazA6HbxGVWSveLLefch1lFFXWjbL98CQ6LMr2w4VoG1R+x9BmpfjdDdTXadJSVpdVo+x++UQ0EWl87MP8xHy8Wi4vcCX+DyKqzENbOnZG2nP/w/UB5w40SikN/53Ih8C+ZmgXUkHMu50zrhm+ElFx034P0Zyrwo+2Cv7dZQTONUP7w19MHd/Duh6Xjr96R9pANqut4FmavaqRUM1dz3lyZC8Hz7N3FdwO95cJV7MPXyFQCbQAJ/CUg+0HXaTHFefaq6hEQpYN3mrS0ZV4X6W4nqqtYRZS11Qf7bXw4LvBYGbJ5qy4fId8JRN3xf8ZplK2Hvuh93tYJAoB7xDOqZwL3iVhtsEfs1VaH374kgzAz0df+bg9eHzbPct+Mm8zA8ojkz2Z5NlEPzDZs0j2nnX0IfJ2x5Lw3764B4vqo23HOda9sPsGM4Vbli1kuglIYbfbELJoF2AWH91D+PMVThJEr8S62aw4KNEdwttAGZs4X9FgeFWTONEdwovECde45xdH9hBeJkBsK6UEwa08X+4rhOfrqoUQlehrWOJzzH8BewOTN69gEvI1u5Iz8T+TOcUtjzRRXwAAAABJRU5ErkJggg==";
|
|
831
|
+
|
|
828
832
|
function pathD(poly) {
|
|
829
833
|
return `M ${poly.map((pt) => `${pt.x} ${pt.y}`).join(" L ")} Z`;
|
|
830
834
|
}
|
|
@@ -995,10 +999,20 @@ function BoardView(props) {
|
|
|
995
999
|
}
|
|
996
1000
|
)));
|
|
997
1001
|
}),
|
|
1002
|
+
/* @__PURE__ */ React.createElement("defs", null, /* @__PURE__ */ React.createElement("filter", { id: "invert-to-white" }, /* @__PURE__ */ React.createElement(
|
|
1003
|
+
"feColorMatrix",
|
|
1004
|
+
{
|
|
1005
|
+
type: "matrix",
|
|
1006
|
+
values: "-1 0 0 0 1\n 0 -1 0 0 1\n 0 0 -1 0 1\n 0 0 0 1 0"
|
|
1007
|
+
}
|
|
1008
|
+
))),
|
|
998
1009
|
(() => {
|
|
999
1010
|
const isPrep = controller.state.cfg.mode === "prep";
|
|
1000
1011
|
const isSubmitEnabled = isPrep ? controller.isSubmitEnabled() : true;
|
|
1001
1012
|
const isClickable = !draggingId && (!isPrep || isSubmitEnabled);
|
|
1013
|
+
const [imageError, setImageError] = React.useState(false);
|
|
1014
|
+
const iconSize = badgeR * 1.6;
|
|
1015
|
+
const iconOffset = iconSize / 2;
|
|
1002
1016
|
return /* @__PURE__ */ React.createElement(
|
|
1003
1017
|
"g",
|
|
1004
1018
|
{
|
|
@@ -1014,7 +1028,7 @@ function BoardView(props) {
|
|
|
1014
1028
|
opacity: isSubmitEnabled ? 1 : 0.5
|
|
1015
1029
|
}
|
|
1016
1030
|
),
|
|
1017
|
-
/* @__PURE__ */ React.createElement(
|
|
1031
|
+
isPrep ? /* @__PURE__ */ React.createElement(
|
|
1018
1032
|
"text",
|
|
1019
1033
|
{
|
|
1020
1034
|
textAnchor: "middle",
|
|
@@ -1023,7 +1037,29 @@ function BoardView(props) {
|
|
|
1023
1037
|
fill: isSubmitEnabled ? CONFIG.color.blueprint.labelFill : "#888",
|
|
1024
1038
|
pointerEvents: "none"
|
|
1025
1039
|
},
|
|
1026
|
-
|
|
1040
|
+
"Submit"
|
|
1041
|
+
) : imageError ? /* @__PURE__ */ React.createElement(
|
|
1042
|
+
"text",
|
|
1043
|
+
{
|
|
1044
|
+
textAnchor: "middle",
|
|
1045
|
+
dominantBaseline: "middle",
|
|
1046
|
+
fontSize: CONFIG.size.badgeFontPx,
|
|
1047
|
+
fill: CONFIG.color.blueprint.labelFill,
|
|
1048
|
+
pointerEvents: "none"
|
|
1049
|
+
},
|
|
1050
|
+
"inventory"
|
|
1051
|
+
) : /* @__PURE__ */ React.createElement(
|
|
1052
|
+
"image",
|
|
1053
|
+
{
|
|
1054
|
+
href: controller.state.blueprintView === "quickstash" ? lockedIcon : unlockedIcon,
|
|
1055
|
+
x: -iconOffset,
|
|
1056
|
+
y: -iconOffset,
|
|
1057
|
+
width: iconSize,
|
|
1058
|
+
height: iconSize,
|
|
1059
|
+
pointerEvents: "none",
|
|
1060
|
+
onError: () => setImageError(true),
|
|
1061
|
+
filter: "url(#invert-to-white)"
|
|
1062
|
+
}
|
|
1027
1063
|
)
|
|
1028
1064
|
);
|
|
1029
1065
|
})(),
|
|
@@ -2611,6 +2647,7 @@ class InteractionTracker {
|
|
|
2611
2647
|
const trialEndTime = Date.now();
|
|
2612
2648
|
const totalDuration = trialEndTime - this.trialStartTime;
|
|
2613
2649
|
const finalSnapshot = this.buildStateSnapshot();
|
|
2650
|
+
const anchorToStimuliRatio = CONFIG.layout.grid.stepPx / CONFIG.layout.grid.unitPx;
|
|
2614
2651
|
const mode = this.controller.state.cfg.mode;
|
|
2615
2652
|
if (mode === "construction") {
|
|
2616
2653
|
const finalBlueprintState = this.buildFinalBlueprintState(finalSnapshot);
|
|
@@ -2625,6 +2662,7 @@ class InteractionTracker {
|
|
|
2625
2662
|
trialStartTime: this.trialStartTime,
|
|
2626
2663
|
trialEndTime,
|
|
2627
2664
|
totalDuration,
|
|
2665
|
+
anchorToStimuliRatio,
|
|
2628
2666
|
trialParams: this.trialParams,
|
|
2629
2667
|
endReason,
|
|
2630
2668
|
completionTimes: this.completionTimes,
|
|
@@ -2647,6 +2685,7 @@ class InteractionTracker {
|
|
|
2647
2685
|
trialStartTime: this.trialStartTime,
|
|
2648
2686
|
trialEndTime,
|
|
2649
2687
|
totalDuration,
|
|
2688
|
+
anchorToStimuliRatio,
|
|
2650
2689
|
trialParams: this.trialParams,
|
|
2651
2690
|
endReason: "submit",
|
|
2652
2691
|
createdMacros: finalMacros,
|