jspsych 6.3.1 → 7.1.2

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 (401) hide show
  1. package/README.md +36 -37
  2. package/css/jspsych.css +39 -39
  3. package/dist/JsPsych.d.ts +112 -0
  4. package/dist/TimelineNode.d.ts +34 -0
  5. package/dist/index.browser.js +3171 -0
  6. package/dist/index.browser.js.map +1 -0
  7. package/dist/index.browser.min.js +2 -0
  8. package/dist/index.browser.min.js.map +1 -0
  9. package/dist/index.cjs +3165 -0
  10. package/dist/index.cjs.map +1 -0
  11. package/dist/index.d.ts +11 -0
  12. package/dist/index.js +3159 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/migration.d.ts +3 -0
  15. package/dist/modules/data/DataCollection.d.ts +45 -0
  16. package/dist/modules/data/DataColumn.d.ts +15 -0
  17. package/dist/modules/data/index.d.ts +25 -0
  18. package/dist/modules/data/utils.d.ts +3 -0
  19. package/dist/modules/extensions.d.ts +22 -0
  20. package/dist/modules/plugin-api/HardwareAPI.d.ts +15 -0
  21. package/dist/modules/plugin-api/KeyboardListenerAPI.d.ts +34 -0
  22. package/dist/modules/plugin-api/MediaAPI.d.ts +27 -0
  23. package/dist/modules/plugin-api/SimulationAPI.d.ts +41 -0
  24. package/dist/modules/plugin-api/TimeoutAPI.d.ts +5 -0
  25. package/dist/modules/plugin-api/index.d.ts +8 -0
  26. package/dist/modules/plugins.d.ts +136 -0
  27. package/dist/modules/randomization.d.ts +35 -0
  28. package/dist/modules/turk.d.ts +40 -0
  29. package/dist/modules/utils.d.ts +7 -0
  30. package/package.json +32 -15
  31. package/src/JsPsych.ts +884 -0
  32. package/src/TimelineNode.ts +536 -0
  33. package/src/index.ts +71 -0
  34. package/src/migration.ts +37 -0
  35. package/src/modules/data/DataCollection.ts +198 -0
  36. package/src/modules/data/DataColumn.ts +86 -0
  37. package/src/modules/data/index.ts +174 -0
  38. package/src/modules/data/utils.ts +75 -0
  39. package/src/modules/extensions.ts +23 -0
  40. package/src/modules/plugin-api/HardwareAPI.ts +32 -0
  41. package/src/modules/plugin-api/KeyboardListenerAPI.ts +165 -0
  42. package/src/modules/plugin-api/MediaAPI.ts +337 -0
  43. package/src/modules/plugin-api/SimulationAPI.ts +181 -0
  44. package/src/modules/plugin-api/TimeoutAPI.ts +16 -0
  45. package/src/modules/plugin-api/index.ts +28 -0
  46. package/src/modules/plugins.ts +165 -0
  47. package/src/modules/randomization.ts +327 -0
  48. package/src/modules/turk.ts +99 -0
  49. package/src/modules/utils.ts +30 -0
  50. package/.github/workflows/jest.yml +0 -20
  51. package/code-of-conduct.md +0 -56
  52. package/contributors.md +0 -61
  53. package/docs/CNAME +0 -1
  54. package/docs/about/about.md +0 -18
  55. package/docs/about/contributing.md +0 -43
  56. package/docs/about/license.md +0 -25
  57. package/docs/about/support.md +0 -7
  58. package/docs/core_library/jspsych-core.md +0 -719
  59. package/docs/core_library/jspsych-data.md +0 -587
  60. package/docs/core_library/jspsych-pluginAPI.md +0 -624
  61. package/docs/core_library/jspsych-randomization.md +0 -389
  62. package/docs/core_library/jspsych-turk.md +0 -98
  63. package/docs/extensions/extensions.md +0 -83
  64. package/docs/extensions/jspsych-ext-webgazer.md +0 -137
  65. package/docs/img/blue.png +0 -0
  66. package/docs/img/devtools-change-css.png +0 -0
  67. package/docs/img/devtools-css-errors.png +0 -0
  68. package/docs/img/devtools-inspect-element.png +0 -0
  69. package/docs/img/folder-setup.png +0 -0
  70. package/docs/img/folder-with-html.png +0 -0
  71. package/docs/img/githubreleases.jpg +0 -0
  72. package/docs/img/jspsych-favicon.png +0 -0
  73. package/docs/img/jspsych-logo-no-text-mono.svg +0 -493
  74. package/docs/img/jspsych-logo.jpg +0 -0
  75. package/docs/img/orange.png +0 -0
  76. package/docs/img/palmer_stim.png +0 -0
  77. package/docs/img/progress_bar.png +0 -0
  78. package/docs/img/prolific-study-completion.png +0 -0
  79. package/docs/img/prolific-study-link.png +0 -0
  80. package/docs/img/visual_search_example.jpg +0 -0
  81. package/docs/index.md +0 -9
  82. package/docs/overview/browser-device-support.md +0 -35
  83. package/docs/overview/callbacks.md +0 -180
  84. package/docs/overview/data.md +0 -281
  85. package/docs/overview/dynamic-parameters.md +0 -147
  86. package/docs/overview/exclude-browser.md +0 -32
  87. package/docs/overview/experiment-options.md +0 -149
  88. package/docs/overview/eye-tracking.md +0 -271
  89. package/docs/overview/fullscreen.md +0 -36
  90. package/docs/overview/media-preloading.md +0 -369
  91. package/docs/overview/mturk.md +0 -77
  92. package/docs/overview/plugins.md +0 -320
  93. package/docs/overview/progress-bar.md +0 -110
  94. package/docs/overview/prolific.md +0 -78
  95. package/docs/overview/record-browser-interactions.md +0 -23
  96. package/docs/overview/running-experiments.md +0 -95
  97. package/docs/overview/style.md +0 -293
  98. package/docs/overview/timeline.md +0 -457
  99. package/docs/plugins/jspsych-animation.md +0 -40
  100. package/docs/plugins/jspsych-audio-button-response.md +0 -60
  101. package/docs/plugins/jspsych-audio-keyboard-response.md +0 -58
  102. package/docs/plugins/jspsych-audio-slider-response.md +0 -53
  103. package/docs/plugins/jspsych-call-function.md +0 -81
  104. package/docs/plugins/jspsych-canvas-button-response.md +0 -66
  105. package/docs/plugins/jspsych-canvas-keyboard-response.md +0 -68
  106. package/docs/plugins/jspsych-canvas-slider-response.md +0 -89
  107. package/docs/plugins/jspsych-categorize-animation.md +0 -60
  108. package/docs/plugins/jspsych-categorize-html.md +0 -53
  109. package/docs/plugins/jspsych-categorize-image.md +0 -53
  110. package/docs/plugins/jspsych-cloze.md +0 -45
  111. package/docs/plugins/jspsych-external-html.md +0 -70
  112. package/docs/plugins/jspsych-free-sort.md +0 -56
  113. package/docs/plugins/jspsych-fullscreen.md +0 -57
  114. package/docs/plugins/jspsych-html-button-response.md +0 -42
  115. package/docs/plugins/jspsych-html-keyboard-response.md +0 -51
  116. package/docs/plugins/jspsych-html-slider-response.md +0 -45
  117. package/docs/plugins/jspsych-iat-html.md +0 -64
  118. package/docs/plugins/jspsych-iat-image.md +0 -64
  119. package/docs/plugins/jspsych-image-button-response.md +0 -48
  120. package/docs/plugins/jspsych-image-keyboard-response.md +0 -58
  121. package/docs/plugins/jspsych-image-slider-response.md +0 -54
  122. package/docs/plugins/jspsych-instructions.md +0 -58
  123. package/docs/plugins/jspsych-maxdiff.md +0 -41
  124. package/docs/plugins/jspsych-preload.md +0 -128
  125. package/docs/plugins/jspsych-rdk.md +0 -119
  126. package/docs/plugins/jspsych-reconstruction.md +0 -48
  127. package/docs/plugins/jspsych-resize.md +0 -39
  128. package/docs/plugins/jspsych-same-different-html.md +0 -53
  129. package/docs/plugins/jspsych-same-different-image.md +0 -66
  130. package/docs/plugins/jspsych-serial-reaction-time-mouse.md +0 -52
  131. package/docs/plugins/jspsych-serial-reaction-time.md +0 -57
  132. package/docs/plugins/jspsych-survey-html-form.md +0 -50
  133. package/docs/plugins/jspsych-survey-likert.md +0 -70
  134. package/docs/plugins/jspsych-survey-multi-choice.md +0 -48
  135. package/docs/plugins/jspsych-survey-multi-select.md +0 -53
  136. package/docs/plugins/jspsych-survey-text.md +0 -63
  137. package/docs/plugins/jspsych-video-button-response.md +0 -54
  138. package/docs/plugins/jspsych-video-keyboard-response.md +0 -50
  139. package/docs/plugins/jspsych-video-slider-response.md +0 -60
  140. package/docs/plugins/jspsych-virtual-chinrest.md +0 -105
  141. package/docs/plugins/jspsych-visual-search-circle.md +0 -52
  142. package/docs/plugins/jspsych-vsl-animate-occlusion.md +0 -55
  143. package/docs/plugins/jspsych-vsl-grid-scene.md +0 -62
  144. package/docs/plugins/jspsych-webgazer-calibrate.md +0 -61
  145. package/docs/plugins/jspsych-webgazer-init-camera.md +0 -30
  146. package/docs/plugins/jspsych-webgazer-validate.md +0 -44
  147. package/docs/plugins/list-of-plugins.md +0 -54
  148. package/docs/tutorials/hello-world.md +0 -162
  149. package/docs/tutorials/rt-task.md +0 -1334
  150. package/docs/tutorials/video-tutorials.md +0 -11
  151. package/examples/add-to-end-of-timeline.html +0 -38
  152. package/examples/case-sensitive-responses.html +0 -45
  153. package/examples/conditional-and-loop-functions.html +0 -64
  154. package/examples/css/jquery-ui.css +0 -1225
  155. package/examples/css-classes-parameter.html +0 -145
  156. package/examples/data-add-properties.html +0 -44
  157. package/examples/data-as-function.html +0 -39
  158. package/examples/data-from-timeline.html +0 -52
  159. package/examples/data-from-url.html +0 -21
  160. package/examples/demo-flanker.html +0 -117
  161. package/examples/demo-simple-rt-task.html +0 -120
  162. package/examples/demos/demo_1.html +0 -35
  163. package/examples/demos/demo_2.html +0 -50
  164. package/examples/demos/demo_3.html +0 -63
  165. package/examples/display-element-to-embed-experiment.html +0 -79
  166. package/examples/end-active-node.html +0 -52
  167. package/examples/end-experiment.html +0 -45
  168. package/examples/exclusions.html +0 -32
  169. package/examples/external_html/simple_consent.html +0 -4
  170. package/examples/img/1.gif +0 -0
  171. package/examples/img/10.gif +0 -0
  172. package/examples/img/11.gif +0 -0
  173. package/examples/img/12.gif +0 -0
  174. package/examples/img/2.gif +0 -0
  175. package/examples/img/3.gif +0 -0
  176. package/examples/img/4.gif +0 -0
  177. package/examples/img/5.gif +0 -0
  178. package/examples/img/6.gif +0 -0
  179. package/examples/img/7.gif +0 -0
  180. package/examples/img/8.gif +0 -0
  181. package/examples/img/9.gif +0 -0
  182. package/examples/img/age/of1.jpg +0 -0
  183. package/examples/img/age/of2.jpg +0 -0
  184. package/examples/img/age/of3.jpg +0 -0
  185. package/examples/img/age/om1.jpg +0 -0
  186. package/examples/img/age/om2.jpg +0 -0
  187. package/examples/img/age/om3.jpg +0 -0
  188. package/examples/img/age/yf1.jpg +0 -0
  189. package/examples/img/age/yf4.jpg +0 -0
  190. package/examples/img/age/yf5.jpg +0 -0
  191. package/examples/img/age/ym2.jpg +0 -0
  192. package/examples/img/age/ym3.jpg +0 -0
  193. package/examples/img/age/ym5.jpg +0 -0
  194. package/examples/img/backwardN.gif +0 -0
  195. package/examples/img/blue.png +0 -0
  196. package/examples/img/card.png +0 -0
  197. package/examples/img/con1.png +0 -0
  198. package/examples/img/con2.png +0 -0
  199. package/examples/img/fixation.gif +0 -0
  200. package/examples/img/happy_face_1.jpg +0 -0
  201. package/examples/img/happy_face_2.jpg +0 -0
  202. package/examples/img/happy_face_3.jpg +0 -0
  203. package/examples/img/happy_face_4.jpg +0 -0
  204. package/examples/img/inc1.png +0 -0
  205. package/examples/img/inc2.png +0 -0
  206. package/examples/img/normalN.gif +0 -0
  207. package/examples/img/orange.png +0 -0
  208. package/examples/img/redX.png +0 -0
  209. package/examples/img/ribbon.jpg +0 -0
  210. package/examples/img/sad_face_1.jpg +0 -0
  211. package/examples/img/sad_face_2.jpg +0 -0
  212. package/examples/img/sad_face_3.jpg +0 -0
  213. package/examples/img/sad_face_4.jpg +0 -0
  214. package/examples/js/snap.svg-min.js +0 -21
  215. package/examples/js/webgazer/ridgeWorker.mjs +0 -135
  216. package/examples/js/webgazer/webgazer.js +0 -88909
  217. package/examples/js/webgazer/worker_scripts/mat.js +0 -306
  218. package/examples/js/webgazer/worker_scripts/util.js +0 -398
  219. package/examples/jspsych-RDK.html +0 -58
  220. package/examples/jspsych-animation.html +0 -39
  221. package/examples/jspsych-audio-button-response.html +0 -58
  222. package/examples/jspsych-audio-keyboard-response.html +0 -68
  223. package/examples/jspsych-audio-slider-response.html +0 -61
  224. package/examples/jspsych-call-function.html +0 -32
  225. package/examples/jspsych-canvas-button-response.html +0 -95
  226. package/examples/jspsych-canvas-keyboard-response.html +0 -78
  227. package/examples/jspsych-canvas-slider-response.html +0 -67
  228. package/examples/jspsych-categorize-animation.html +0 -49
  229. package/examples/jspsych-categorize-html.html +0 -33
  230. package/examples/jspsych-categorize-image.html +0 -44
  231. package/examples/jspsych-cloze.html +0 -37
  232. package/examples/jspsych-free-sort.html +0 -109
  233. package/examples/jspsych-fullscreen.html +0 -45
  234. package/examples/jspsych-html-button-response.html +0 -43
  235. package/examples/jspsych-html-keyboard-response.html +0 -42
  236. package/examples/jspsych-html-slider-response.html +0 -53
  237. package/examples/jspsych-iat.html +0 -520
  238. package/examples/jspsych-image-button-response.html +0 -91
  239. package/examples/jspsych-image-keyboard-response.html +0 -85
  240. package/examples/jspsych-image-slider-response.html +0 -85
  241. package/examples/jspsych-instructions.html +0 -37
  242. package/examples/jspsych-maxdiff.html +0 -33
  243. package/examples/jspsych-preload.html +0 -140
  244. package/examples/jspsych-reconstruction.html +0 -43
  245. package/examples/jspsych-resize.html +0 -34
  246. package/examples/jspsych-same-different-html.html +0 -28
  247. package/examples/jspsych-same-different-image.html +0 -39
  248. package/examples/jspsych-serial-reaction-time-mouse.html +0 -98
  249. package/examples/jspsych-serial-reaction-time.html +0 -54
  250. package/examples/jspsych-survey-html-form.html +0 -33
  251. package/examples/jspsych-survey-likert.html +0 -42
  252. package/examples/jspsych-survey-multi-choice.html +0 -40
  253. package/examples/jspsych-survey-multi-select.html +0 -42
  254. package/examples/jspsych-survey-text.html +0 -34
  255. package/examples/jspsych-video-button-response.html +0 -65
  256. package/examples/jspsych-video-keyboard-response.html +0 -61
  257. package/examples/jspsych-video-slider-response.html +0 -63
  258. package/examples/jspsych-virtual-chinrest.html +0 -69
  259. package/examples/jspsych-visual-search-circle.html +0 -64
  260. package/examples/jspsych-vsl-animate-occlusion.html +0 -35
  261. package/examples/jspsych-vsl-grid-scene.html +0 -47
  262. package/examples/lexical-decision.html +0 -134
  263. package/examples/manual-preloading.html +0 -59
  264. package/examples/pause-unpause.html +0 -33
  265. package/examples/progress-bar.html +0 -68
  266. package/examples/save-trial-parameters.html +0 -98
  267. package/examples/sound/hammer.mp3 +0 -0
  268. package/examples/sound/sound.mp3 +0 -0
  269. package/examples/sound/speech_blue.mp3 +0 -0
  270. package/examples/sound/speech_green.mp3 +0 -0
  271. package/examples/sound/speech_joke.mp3 +0 -0
  272. package/examples/sound/speech_red.mp3 +0 -0
  273. package/examples/sound/tone.mp3 +0 -0
  274. package/examples/timeline-variables-sampling.html +0 -50
  275. package/examples/timeline-variables.html +0 -64
  276. package/examples/video/sample_video.mp4 +0 -0
  277. package/examples/webgazer.html +0 -174
  278. package/examples/webgazer_audio.html +0 -90
  279. package/examples/webgazer_image.html +0 -60
  280. package/extensions/jspsych-ext-webgazer.js +0 -265
  281. package/jspsych.js +0 -3023
  282. package/license.txt +0 -21
  283. package/mkdocs.yml +0 -118
  284. package/plugins/jspsych-animation.js +0 -189
  285. package/plugins/jspsych-audio-button-response.js +0 -269
  286. package/plugins/jspsych-audio-keyboard-response.js +0 -209
  287. package/plugins/jspsych-audio-slider-response.js +0 -278
  288. package/plugins/jspsych-call-function.js +0 -58
  289. package/plugins/jspsych-canvas-button-response.js +0 -199
  290. package/plugins/jspsych-canvas-keyboard-response.js +0 -155
  291. package/plugins/jspsych-canvas-slider-response.js +0 -207
  292. package/plugins/jspsych-categorize-animation.js +0 -266
  293. package/plugins/jspsych-categorize-html.js +0 -220
  294. package/plugins/jspsych-categorize-image.js +0 -222
  295. package/plugins/jspsych-cloze.js +0 -112
  296. package/plugins/jspsych-external-html.js +0 -112
  297. package/plugins/jspsych-free-sort.js +0 -478
  298. package/plugins/jspsych-fullscreen.js +0 -106
  299. package/plugins/jspsych-html-button-response.js +0 -188
  300. package/plugins/jspsych-html-keyboard-response.js +0 -149
  301. package/plugins/jspsych-html-slider-response.js +0 -202
  302. package/plugins/jspsych-iat-html.js +0 -284
  303. package/plugins/jspsych-iat-image.js +0 -286
  304. package/plugins/jspsych-image-button-response.js +0 -327
  305. package/plugins/jspsych-image-keyboard-response.js +0 -263
  306. package/plugins/jspsych-image-slider-response.js +0 -369
  307. package/plugins/jspsych-instructions.js +0 -237
  308. package/plugins/jspsych-maxdiff.js +0 -173
  309. package/plugins/jspsych-preload.js +0 -345
  310. package/plugins/jspsych-rdk.js +0 -1373
  311. package/plugins/jspsych-reconstruction.js +0 -134
  312. package/plugins/jspsych-resize.js +0 -166
  313. package/plugins/jspsych-same-different-html.js +0 -168
  314. package/plugins/jspsych-same-different-image.js +0 -169
  315. package/plugins/jspsych-serial-reaction-time-mouse.js +0 -212
  316. package/plugins/jspsych-serial-reaction-time.js +0 -247
  317. package/plugins/jspsych-survey-html-form.js +0 -171
  318. package/plugins/jspsych-survey-likert.js +0 -195
  319. package/plugins/jspsych-survey-multi-choice.js +0 -208
  320. package/plugins/jspsych-survey-multi-select.js +0 -232
  321. package/plugins/jspsych-survey-text.js +0 -185
  322. package/plugins/jspsych-video-button-response.js +0 -335
  323. package/plugins/jspsych-video-keyboard-response.js +0 -279
  324. package/plugins/jspsych-video-slider-response.js +0 -351
  325. package/plugins/jspsych-virtual-chinrest.js +0 -471
  326. package/plugins/jspsych-visual-search-circle.js +0 -259
  327. package/plugins/jspsych-vsl-animate-occlusion.js +0 -196
  328. package/plugins/jspsych-vsl-grid-scene.js +0 -103
  329. package/plugins/jspsych-webgazer-calibrate.js +0 -161
  330. package/plugins/jspsych-webgazer-init-camera.js +0 -139
  331. package/plugins/jspsych-webgazer-validate.js +0 -314
  332. package/plugins/template/jspsych-plugin-template.js +0 -35
  333. package/tests/README.md +0 -7
  334. package/tests/jsPsych/case-sensitive-responses.test.js +0 -53
  335. package/tests/jsPsych/css-classes-parameter.test.js +0 -107
  336. package/tests/jsPsych/default-iti.test.js +0 -51
  337. package/tests/jsPsych/default-parameters.test.js +0 -58
  338. package/tests/jsPsych/endexperiment.test.js +0 -49
  339. package/tests/jsPsych/events.test.js +0 -606
  340. package/tests/jsPsych/functions-as-parameters.test.js +0 -210
  341. package/tests/jsPsych/init.test.js +0 -48
  342. package/tests/jsPsych/loads.test.js +0 -7
  343. package/tests/jsPsych/min-rt.test.js +0 -58
  344. package/tests/jsPsych/progressbar.test.js +0 -202
  345. package/tests/jsPsych/timeline-variables.test.js +0 -531
  346. package/tests/jsPsych/timelines.test.js +0 -569
  347. package/tests/jsPsych.data/data-csv-conversion.test.js +0 -85
  348. package/tests/jsPsych.data/data-json-conversion.test.js +0 -120
  349. package/tests/jsPsych.data/datacollection.test.js +0 -117
  350. package/tests/jsPsych.data/datacolumn.test.js +0 -50
  351. package/tests/jsPsych.data/datamodule.test.js +0 -152
  352. package/tests/jsPsych.data/dataparameter.test.js +0 -251
  353. package/tests/jsPsych.data/interactions.test.js +0 -109
  354. package/tests/jsPsych.data/trialparameters.test.js +0 -175
  355. package/tests/jsPsych.extensions/extensions.test.js +0 -207
  356. package/tests/jsPsych.extensions/test-extension.js +0 -42
  357. package/tests/jsPsych.pluginAPI/pluginapi.test.js +0 -365
  358. package/tests/jsPsych.pluginAPI/preloads.test.js +0 -43
  359. package/tests/jsPsych.randomization/randomziation.test.js +0 -27
  360. package/tests/jsPsych.utils/utils.test.js +0 -58
  361. package/tests/plugins/plugin-animation.test.js +0 -34
  362. package/tests/plugins/plugin-audio-button-response.test.js +0 -15
  363. package/tests/plugins/plugin-audio-keyboard-response.test.js +0 -15
  364. package/tests/plugins/plugin-audio-slider-response.test.js +0 -15
  365. package/tests/plugins/plugin-call-function.test.js +0 -49
  366. package/tests/plugins/plugin-categorize-animation.test.js +0 -263
  367. package/tests/plugins/plugin-categorize-html.test.js +0 -17
  368. package/tests/plugins/plugin-categorize-image.test.js +0 -17
  369. package/tests/plugins/plugin-cloze.test.js +0 -157
  370. package/tests/plugins/plugin-free-sort.test.js +0 -106
  371. package/tests/plugins/plugin-fullscreen.test.js +0 -41
  372. package/tests/plugins/plugin-html-button-response.test.js +0 -161
  373. package/tests/plugins/plugin-html-keyboard-response.test.js +0 -139
  374. package/tests/plugins/plugin-html-slider-response.test.js +0 -155
  375. package/tests/plugins/plugin-iat-html.test.js +0 -299
  376. package/tests/plugins/plugin-iat-image.test.js +0 -298
  377. package/tests/plugins/plugin-image-button-response.test.js +0 -174
  378. package/tests/plugins/plugin-image-keyboard-response.test.js +0 -147
  379. package/tests/plugins/plugin-image-slider-response.test.js +0 -174
  380. package/tests/plugins/plugin-instructions.test.js +0 -85
  381. package/tests/plugins/plugin-maxdiff.test.js +0 -39
  382. package/tests/plugins/plugin-preload.test.js +0 -916
  383. package/tests/plugins/plugin-rdk.test.js +0 -61
  384. package/tests/plugins/plugin-reconstruction.test.js +0 -16
  385. package/tests/plugins/plugin-resize.test.js +0 -16
  386. package/tests/plugins/plugin-same-different-html.test.js +0 -17
  387. package/tests/plugins/plugin-same-different-image.test.js +0 -17
  388. package/tests/plugins/plugin-serial-reaction-time-mouse.test.js +0 -42
  389. package/tests/plugins/plugin-serial-reaction-time.test.js +0 -109
  390. package/tests/plugins/plugin-survey-html-form.test.js +0 -44
  391. package/tests/plugins/plugin-survey-likert.test.js +0 -48
  392. package/tests/plugins/plugin-survey-multi-choice.test.js +0 -47
  393. package/tests/plugins/plugin-survey-multi-select.test.js +0 -71
  394. package/tests/plugins/plugin-survey-text.test.js +0 -115
  395. package/tests/plugins/plugin-video-button-response.test.js +0 -32
  396. package/tests/plugins/plugin-video-keyboard-response.test.js +0 -32
  397. package/tests/plugins/plugin-video-slider-response.test.js +0 -31
  398. package/tests/plugins/plugin-visual-search-circle.test.js +0 -16
  399. package/tests/plugins/plugin-vsl-animate-occlusion.test.js +0 -16
  400. package/tests/plugins/plugin-vsl-grid-scene.test.js +0 -16
  401. package/tests/testing-utils.js +0 -13
@@ -0,0 +1,3 @@
1
+ export declare class MigrationError extends Error {
2
+ constructor(message?: string);
3
+ }
@@ -0,0 +1,45 @@
1
+ import { DataColumn } from "./DataColumn";
2
+ export declare class DataCollection {
3
+ private trials;
4
+ constructor(data?: any[]);
5
+ push(new_data: any): this;
6
+ join(other_data_collection: DataCollection): this;
7
+ top(): DataCollection;
8
+ /**
9
+ * Queries the first n elements in a collection of trials.
10
+ *
11
+ * @param n A positive integer of elements to return. A value of
12
+ * n that is less than 1 will throw an error.
13
+ *
14
+ * @return First n objects of a collection of trials. If fewer than
15
+ * n trials are available, the trials.length elements will
16
+ * be returned.
17
+ *
18
+ */
19
+ first(n?: number): DataCollection;
20
+ /**
21
+ * Queries the last n elements in a collection of trials.
22
+ *
23
+ * @param n A positive integer of elements to return. A value of
24
+ * n that is less than 1 will throw an error.
25
+ *
26
+ * @return Last n objects of a collection of trials. If fewer than
27
+ * n trials are available, the trials.length elements will
28
+ * be returned.
29
+ *
30
+ */
31
+ last(n?: number): DataCollection;
32
+ values(): any[];
33
+ count(): number;
34
+ readOnly(): DataCollection;
35
+ addToAll(properties: any): this;
36
+ addToLast(properties: any): this;
37
+ filter(filters: any): DataCollection;
38
+ filterCustom(fn: any): DataCollection;
39
+ select(column: any): DataColumn;
40
+ ignore(columns: any): DataCollection;
41
+ uniqueNames(): any[];
42
+ csv(): string;
43
+ json(pretty?: boolean): string;
44
+ localSave(format: any, filename: any): void;
45
+ }
@@ -0,0 +1,15 @@
1
+ export declare class DataColumn {
2
+ values: any[];
3
+ constructor(values?: any[]);
4
+ sum(): number;
5
+ mean(): number;
6
+ median(): any;
7
+ min(): any;
8
+ max(): any;
9
+ count(): number;
10
+ variance(): number;
11
+ sd(): number;
12
+ frequencies(): {};
13
+ all(eval_fn: any): boolean;
14
+ subset(eval_fn: any): DataColumn;
15
+ }
@@ -0,0 +1,25 @@
1
+ import { JsPsych } from "../../JsPsych";
2
+ import { DataCollection } from "./DataCollection";
3
+ export declare class JsPsychData {
4
+ private jsPsych;
5
+ private allData;
6
+ private interactionData;
7
+ private dataProperties;
8
+ private query_string;
9
+ constructor(jsPsych: JsPsych);
10
+ reset(): void;
11
+ get(): DataCollection;
12
+ getInteractionData(): DataCollection;
13
+ write(data_object: any): void;
14
+ addProperties(properties: any): void;
15
+ addDataToLastTrial(data: any): void;
16
+ getDataByTimelineNode(node_id: any): DataCollection;
17
+ getLastTrialData(): DataCollection;
18
+ getLastTimelineData(): DataCollection;
19
+ displayData(format?: string): void;
20
+ urlVariables(): any;
21
+ getURLVariable(whichvar: any): any;
22
+ createInteractionListeners(): void;
23
+ _customInsert(data: any): void;
24
+ _fullreset(): void;
25
+ }
@@ -0,0 +1,3 @@
1
+ export declare function saveTextToFile(textstr: string, filename: string): void;
2
+ export declare function JSON2CSV(objArray: any): string;
3
+ export declare function getQueryString(): {};
@@ -0,0 +1,22 @@
1
+ export interface JsPsychExtensionInfo {
2
+ name: string;
3
+ }
4
+ export interface JsPsychExtension {
5
+ /**
6
+ * Called once at the start of the experiment to initialize the extension
7
+ */
8
+ initialize(params?: Record<string, any>): Promise<void>;
9
+ /**
10
+ * Called at the start of a trial, prior to invoking the plugin's trial method.
11
+ */
12
+ on_start(params?: Record<string, any>): void;
13
+ /**
14
+ * Called during a trial, after the plugin makes initial changes to the DOM.
15
+ */
16
+ on_load(params?: Record<string, any>): void;
17
+ /**
18
+ * Called at the end of the trial.
19
+ * @returns Data to append to the trial's data object.
20
+ */
21
+ on_finish(params?: Record<string, any>): Record<string, any>;
22
+ }
@@ -0,0 +1,15 @@
1
+ export declare class HardwareAPI {
2
+ /**
3
+ * Indicates whether this instance of jspsych has opened a hardware connection through our browser
4
+ * extension
5
+ **/
6
+ hardwareConnected: boolean;
7
+ constructor();
8
+ /**
9
+ * Allows communication with user hardware through our custom Google Chrome extension + native C++ program
10
+ * @param mess The message to be passed to our extension, see its documentation for the expected members of this object.
11
+ * @author Daniel Rivas
12
+ *
13
+ */
14
+ hardware(mess: any): void;
15
+ }
@@ -0,0 +1,34 @@
1
+ export declare type KeyboardListener = (e: KeyboardEvent) => void;
2
+ export declare type ValidResponses = string[] | "ALL_KEYS" | "NO_KEYS";
3
+ export interface GetKeyboardResponseOptions {
4
+ callback_function: any;
5
+ valid_responses?: ValidResponses;
6
+ rt_method?: "performance" | "audio";
7
+ persist?: boolean;
8
+ audio_context?: AudioContext;
9
+ audio_context_start_time?: number;
10
+ allow_held_key?: boolean;
11
+ minimum_valid_rt?: number;
12
+ }
13
+ export declare class KeyboardListenerAPI {
14
+ private getRootElement;
15
+ private areResponsesCaseSensitive;
16
+ private minimumValidRt;
17
+ constructor(getRootElement: () => Element | undefined, areResponsesCaseSensitive?: boolean, minimumValidRt?: number);
18
+ private listeners;
19
+ private heldKeys;
20
+ private areRootListenersRegistered;
21
+ /**
22
+ * If not previously done and `this.getRootElement()` returns an element, adds the root key
23
+ * listeners to that element.
24
+ */
25
+ private registerRootListeners;
26
+ private rootKeydownListener;
27
+ private toLowerCaseIfInsensitive;
28
+ private rootKeyupListener;
29
+ private isResponseValid;
30
+ getKeyboardResponse({ callback_function, valid_responses, rt_method, persist, audio_context, audio_context_start_time, allow_held_key, minimum_valid_rt, }: GetKeyboardResponseOptions): KeyboardListener;
31
+ cancelKeyboardResponse(listener: KeyboardListener): void;
32
+ cancelAllKeyboardResponses(): void;
33
+ compareKeys(key1: string | null, key2: string | null): boolean;
34
+ }
@@ -0,0 +1,27 @@
1
+ export declare class MediaAPI {
2
+ private useWebaudio;
3
+ private webaudioContext?;
4
+ constructor(useWebaudio: boolean, webaudioContext?: AudioContext);
5
+ private video_buffers;
6
+ getVideoBuffer(videoID: any): any;
7
+ private context;
8
+ private audio_buffers;
9
+ initAudio(): void;
10
+ audioContext(): any;
11
+ getAudioBuffer(audioID: any): Promise<unknown>;
12
+ private preload_requests;
13
+ private img_cache;
14
+ preloadAudio(files: any, callback_complete?: () => void, callback_load?: (filepath: any) => void, callback_error?: (error_msg: any) => void): void;
15
+ preloadImages(images: any, callback_complete?: () => void, callback_load?: (filepath: any) => void, callback_error?: (error_msg: any) => void): void;
16
+ preloadVideo(videos: any, callback_complete?: () => void, callback_load?: (filepath: any) => void, callback_error?: (error_msg: any) => void): void;
17
+ private preloadMap;
18
+ getAutoPreloadList(timeline_description: any[]): {
19
+ images: string[];
20
+ audio: string[];
21
+ video: string[];
22
+ };
23
+ cancelPreloads(): void;
24
+ private microphone_recorder;
25
+ initializeMicrophoneRecorder(stream: MediaStream): void;
26
+ getMicrophoneRecorder(): MediaRecorder;
27
+ }
@@ -0,0 +1,41 @@
1
+ export declare class SimulationAPI {
2
+ dispatchEvent(event: Event): void;
3
+ /**
4
+ * Dispatches a `keydown` event for the specified key
5
+ * @param key Character code (`.key` property) for the key to press.
6
+ */
7
+ keyDown(key: string): void;
8
+ /**
9
+ * Dispatches a `keyup` event for the specified key
10
+ * @param key Character code (`.key` property) for the key to press.
11
+ */
12
+ keyUp(key: string): void;
13
+ /**
14
+ * Dispatches a `keydown` and `keyup` event in sequence to simulate pressing a key.
15
+ * @param key Character code (`.key` property) for the key to press.
16
+ * @param delay Length of time to wait (ms) before executing action
17
+ */
18
+ pressKey(key: string, delay?: number): void;
19
+ /**
20
+ * Dispatches `mousedown`, `mouseup`, and `click` events on the target element
21
+ * @param target The element to click
22
+ * @param delay Length of time to wait (ms) before executing action
23
+ */
24
+ clickTarget(target: Element, delay?: number): void;
25
+ /**
26
+ * Sets the value of a target text input
27
+ * @param target A text input element to fill in
28
+ * @param text Text to input
29
+ * @param delay Length of time to wait (ms) before executing action
30
+ */
31
+ fillTextInput(target: HTMLInputElement, text: string, delay?: number): void;
32
+ /**
33
+ * Picks a valid key from `choices`, taking into account jsPsych-specific
34
+ * identifiers like "NO_KEYS" and "ALL_KEYS".
35
+ * @param choices Which keys are valid.
36
+ * @returns A key selected at random from the valid keys.
37
+ */
38
+ getValidKey(choices: "NO_KEYS" | "ALL_KEYS" | Array<string> | Array<Array<string>>): any;
39
+ mergeSimulationData(default_data: any, simulation_options: any): any;
40
+ ensureSimulationDataConsistency(trial: any, data: any): void;
41
+ }
@@ -0,0 +1,5 @@
1
+ export declare class TimeoutAPI {
2
+ private timeout_handlers;
3
+ setTimeout(callback: any, delay: any): number;
4
+ clearAllTimeouts(): void;
5
+ }
@@ -0,0 +1,8 @@
1
+ import { JsPsych } from "../../JsPsych";
2
+ import { HardwareAPI } from "./HardwareAPI";
3
+ import { KeyboardListenerAPI } from "./KeyboardListenerAPI";
4
+ import { MediaAPI } from "./MediaAPI";
5
+ import { SimulationAPI } from "./SimulationAPI";
6
+ import { TimeoutAPI } from "./TimeoutAPI";
7
+ export declare function createJointPluginAPIObject(jsPsych: JsPsych): KeyboardListenerAPI & TimeoutAPI & MediaAPI & HardwareAPI & SimulationAPI;
8
+ export declare type PluginAPI = ReturnType<typeof createJointPluginAPIObject>;
@@ -0,0 +1,136 @@
1
+ /**
2
+ Flatten the type output to improve type hints shown in editors.
3
+ Borrowed from type-fest
4
+ */
5
+ declare type Simplify<T> = {
6
+ [KeyType in keyof T]: T[KeyType];
7
+ };
8
+ /**
9
+ Create a type that makes the given keys required. The remaining keys are kept as is.
10
+ Borrowed from type-fest
11
+ */
12
+ declare type SetRequired<BaseType, Keys extends keyof BaseType> = Simplify<Omit<BaseType, Keys> & Required<Pick<BaseType, Keys>>>;
13
+ /**
14
+ * Parameter types for plugins
15
+ */
16
+ export declare enum ParameterType {
17
+ BOOL = 0,
18
+ STRING = 1,
19
+ INT = 2,
20
+ FLOAT = 3,
21
+ FUNCTION = 4,
22
+ KEY = 5,
23
+ KEYS = 6,
24
+ SELECT = 7,
25
+ HTML_STRING = 8,
26
+ IMAGE = 9,
27
+ AUDIO = 10,
28
+ VIDEO = 11,
29
+ OBJECT = 12,
30
+ COMPLEX = 13,
31
+ TIMELINE = 14
32
+ }
33
+ declare type ParameterTypeMap = {
34
+ [ParameterType.BOOL]: boolean;
35
+ [ParameterType.STRING]: string;
36
+ [ParameterType.INT]: number;
37
+ [ParameterType.FLOAT]: number;
38
+ [ParameterType.FUNCTION]: (...args: any[]) => any;
39
+ [ParameterType.KEY]: string;
40
+ [ParameterType.KEYS]: string[] | "ALL_KEYS" | "NO_KEYS";
41
+ [ParameterType.SELECT]: any;
42
+ [ParameterType.HTML_STRING]: string;
43
+ [ParameterType.IMAGE]: string;
44
+ [ParameterType.AUDIO]: string;
45
+ [ParameterType.VIDEO]: string;
46
+ [ParameterType.OBJECT]: object;
47
+ [ParameterType.COMPLEX]: any;
48
+ [ParameterType.TIMELINE]: any;
49
+ };
50
+ export interface ParameterInfo {
51
+ type: ParameterType;
52
+ array?: boolean;
53
+ pretty_name?: string;
54
+ default?: any;
55
+ preload?: boolean;
56
+ }
57
+ export interface ParameterInfos {
58
+ [key: string]: ParameterInfo;
59
+ }
60
+ declare type InferredParameter<I extends ParameterInfo> = I["array"] extends true ? Array<ParameterTypeMap[I["type"]]> : ParameterTypeMap[I["type"]];
61
+ declare type RequiredParameterNames<I extends ParameterInfos> = {
62
+ [K in keyof I]: I[K]["default"] extends undefined ? K : never;
63
+ }[keyof I];
64
+ declare type InferredParameters<I extends ParameterInfos> = SetRequired<{
65
+ [Property in keyof I]?: InferredParameter<I[Property]>;
66
+ }, RequiredParameterNames<I>>;
67
+ export declare const universalPluginParameters: {
68
+ /**
69
+ * Data to add to this trial (key-value pairs)
70
+ */
71
+ readonly data: {
72
+ readonly type: ParameterType.OBJECT;
73
+ readonly pretty_name: "Data";
74
+ readonly default: {};
75
+ };
76
+ /**
77
+ * Function to execute when trial begins
78
+ */
79
+ readonly on_start: {
80
+ readonly type: ParameterType.FUNCTION;
81
+ readonly pretty_name: "On start";
82
+ readonly default: () => void;
83
+ };
84
+ /**
85
+ * Function to execute when trial is finished
86
+ */
87
+ readonly on_finish: {
88
+ readonly type: ParameterType.FUNCTION;
89
+ readonly pretty_name: "On finish";
90
+ readonly default: () => void;
91
+ };
92
+ /**
93
+ * Function to execute after the trial has loaded
94
+ */
95
+ readonly on_load: {
96
+ readonly type: ParameterType.FUNCTION;
97
+ readonly pretty_name: "On load";
98
+ readonly default: () => void;
99
+ };
100
+ /**
101
+ * Length of gap between the end of this trial and the start of the next trial
102
+ */
103
+ readonly post_trial_gap: {
104
+ readonly type: ParameterType.INT;
105
+ readonly pretty_name: "Post trial gap";
106
+ readonly default: any;
107
+ };
108
+ /**
109
+ * A list of CSS classes to add to the jsPsych display element for the duration of this trial
110
+ */
111
+ readonly css_classes: {
112
+ readonly type: ParameterType.STRING;
113
+ readonly pretty_name: "Custom CSS classes";
114
+ readonly default: any;
115
+ };
116
+ /**
117
+ * Options to control simulation mode for the trial.
118
+ */
119
+ readonly simulation_options: {
120
+ readonly type: ParameterType.COMPLEX;
121
+ readonly default: any;
122
+ };
123
+ };
124
+ export declare type UniversalPluginParameters = InferredParameters<typeof universalPluginParameters>;
125
+ export interface PluginInfo {
126
+ name: string;
127
+ parameters: {
128
+ [key: string]: ParameterInfo;
129
+ };
130
+ }
131
+ export interface JsPsychPlugin<I extends PluginInfo> {
132
+ trial(display_element: HTMLElement, trial: TrialType<I>, on_load?: () => void): void | Promise<any>;
133
+ }
134
+ export declare type TrialType<I extends PluginInfo> = InferredParameters<I["parameters"]> & UniversalPluginParameters;
135
+ export declare type PluginParameters<I extends PluginInfo> = InferredParameters<I["parameters"]>;
136
+ export {};
@@ -0,0 +1,35 @@
1
+ export declare function repeat(array: any, repetitions: any, unpack?: boolean): any;
2
+ export declare function shuffle(array: Array<any>): any[];
3
+ export declare function shuffleNoRepeats(arr: Array<any>, equalityTest: (a: any, b: any) => boolean): any[];
4
+ export declare function shuffleAlternateGroups(arr_groups: any, random_group_order?: boolean): any[];
5
+ export declare function sampleWithoutReplacement(arr: any, size: any): any[];
6
+ export declare function sampleWithReplacement(arr: any, size: any, weights?: any): any[];
7
+ export declare function factorial(factors: Record<string, any>, repetitions?: number, unpack?: boolean): any;
8
+ export declare function randomID(length?: number): string;
9
+ /**
10
+ * Generate a random integer from `lower` to `upper`, inclusive of both end points.
11
+ * @param lower The lowest value it is possible to generate
12
+ * @param upper The highest value it is possible to generate
13
+ * @returns A random integer
14
+ */
15
+ export declare function randomInt(lower: number, upper: number): number;
16
+ /**
17
+ * Generates a random sample from a Bernoulli distribution.
18
+ * @param p The probability of sampling 1.
19
+ * @returns 0, with probability 1-p, or 1, with probability p.
20
+ */
21
+ export declare function sampleBernoulli(p: number): 0 | 1;
22
+ export declare function sampleNormal(mean: number, standard_deviation: number): number;
23
+ export declare function sampleExponential(rate: number): number;
24
+ export declare function sampleExGaussian(mean: number, standard_deviation: number, rate: number, positive?: boolean): number;
25
+ /**
26
+ * Generate one or more random words.
27
+ *
28
+ * This is a wrapper function for the {@link https://www.npmjs.com/package/random-words `random-words` npm package}.
29
+ *
30
+ * @param opts An object with optional properties `min`, `max`, `exactly`,
31
+ * `join`, `maxLength`, `wordsPerString`, `separator`, and `formatter`.
32
+ *
33
+ * @returns An array of words or a single string, depending on parameter choices.
34
+ */
35
+ export declare function randomWords(opts: any): any;
@@ -0,0 +1,40 @@
1
+ interface turkInformation {
2
+ /**
3
+ * Is the experiment being loaded in preview mode on Mechanical Turk?
4
+ */
5
+ previewMode: boolean;
6
+ /**
7
+ * Is the experiment being loaded outside of the Mechanical Turk environment?
8
+ */
9
+ outsideTurk: boolean;
10
+ /**
11
+ * The HIT ID.
12
+ */
13
+ hitId: string;
14
+ /**
15
+ * The Assignment ID.
16
+ */
17
+ assignmentId: string;
18
+ /**
19
+ * The worker ID.
20
+ */
21
+ workerId: string;
22
+ /**
23
+ * URL for submission of the HIT.
24
+ */
25
+ turkSubmitTo: string;
26
+ }
27
+ /**
28
+ * Gets information about the Mechanical Turk Environment, HIT, Assignment, and Worker
29
+ * by parsing the URL variables that Mechanical Turk generates.
30
+ * @returns An object containing information about the Mechanical Turk Environment, HIT, Assignment, and Worker.
31
+ */
32
+ export declare function turkInfo(): turkInformation;
33
+ /**
34
+ * Send data to Mechnical Turk for storage.
35
+ * @param data An object containing `key:value` pairs to send to Mechanical Turk. Values
36
+ * cannot contain nested objects, arrays, or functions.
37
+ * @returns Nothing
38
+ */
39
+ export declare function submitToTurk(data: any): void;
40
+ export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Finds all of the unique items in an array.
3
+ * @param arr The array to extract unique values from
4
+ * @returns An array with one copy of each unique item in `arr`
5
+ */
6
+ export declare function unique(arr: Array<any>): any[];
7
+ export declare function deepCopy(obj: any): any;
package/package.json CHANGED
@@ -1,17 +1,36 @@
1
1
  {
2
2
  "name": "jspsych",
3
- "version": "6.3.1",
3
+ "version": "7.1.2",
4
4
  "description": "Behavioral experiments in a browser",
5
- "main": "jspsych.js",
6
- "directories": {
7
- "doc": "docs"
5
+ "type": "module",
6
+ "main": "dist/index.cjs",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "require": "./dist/index.cjs"
11
+ },
12
+ "./css/*": "./css/*"
8
13
  },
14
+ "typings": "dist/index.d.ts",
15
+ "unpkg": "dist/index.browser.min.js",
16
+ "files": [
17
+ "src",
18
+ "dist",
19
+ "css"
20
+ ],
21
+ "source": "src/index.ts",
9
22
  "scripts": {
10
- "test": "jest"
23
+ "test": "jest",
24
+ "test:watch": "npm test -- --watch",
25
+ "tsc": "tsc",
26
+ "build": "rollup --config",
27
+ "build:watch": "npm run build -- --watch",
28
+ "prepack": "cp ../../README.md ."
11
29
  },
12
30
  "repository": {
13
31
  "type": "git",
14
- "url": "git+https://github.com/jspsych/jsPsych.git"
32
+ "url": "git+https://github.com/jspsych/jsPsych.git",
33
+ "directory": "packages/jspsych"
15
34
  },
16
35
  "author": "Josh de Leeuw",
17
36
  "license": "MIT",
@@ -19,15 +38,13 @@
19
38
  "url": "https://github.com/jspsych/jsPsych/issues"
20
39
  },
21
40
  "homepage": "https://www.jspsych.org",
22
- "devDependencies": {
23
- "jest": "^26.6"
41
+ "dependencies": {
42
+ "auto-bind": "^4.0.0",
43
+ "random-words": "^1.1.1"
24
44
  },
25
- "jest": {
26
- "resetModules": true,
27
- "testEnvironmentOptions": {
28
- "fetchExternalResources": true,
29
- "pretendToBeVisual": true
30
- },
31
- "testURL": "http://localhost/"
45
+ "devDependencies": {
46
+ "@jspsych/config": "^1.1.0",
47
+ "@jspsych/test-utils": "^1.1.1",
48
+ "@types/dom-mediacapture-record": "^1.0.11"
32
49
  }
33
50
  }