@jspsych/plugin-tobii-calibration 0.1.1

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/src/index.js ADDED
@@ -0,0 +1,597 @@
1
+ /**
2
+ * @title Tobii Calibration
3
+ * @description jsPsych plugin for Tobii eye tracker calibration. Provides a visual
4
+ * calibration procedure with animated points and real-time feedback.
5
+ * @version 1.0.0
6
+ * @author jsPsych Team
7
+ * @see {@link https://github.com/jspsych/jspsych-tobii/tree/main/packages/plugin-tobii-calibration#readme Documentation}
8
+ */
9
+ import { ParameterType } from 'jspsych';
10
+ import { version } from '../package.json';
11
+ import { CalibrationDisplay } from './calibration-display';
12
+ const info = {
13
+ name: 'tobii-calibration',
14
+ version: version,
15
+ parameters: {
16
+ /** Number of calibration points (5 or 9) */
17
+ calibration_points: {
18
+ type: ParameterType.INT,
19
+ default: 9,
20
+ },
21
+ /** Calibration mode: click or view */
22
+ calibration_mode: {
23
+ type: ParameterType.STRING,
24
+ default: 'view',
25
+ },
26
+ /** Size of calibration points in pixels */
27
+ point_size: {
28
+ type: ParameterType.INT,
29
+ default: 20,
30
+ },
31
+ /** Color of calibration points */
32
+ point_color: {
33
+ type: ParameterType.STRING,
34
+ default: '#ff0000',
35
+ },
36
+ /** Duration to show each point before data collection (ms) - allows user to fixate */
37
+ point_duration: {
38
+ type: ParameterType.INT,
39
+ default: 500,
40
+ },
41
+ /** Show progress indicator */
42
+ show_progress: {
43
+ type: ParameterType.BOOL,
44
+ default: true,
45
+ },
46
+ /** Custom calibration points */
47
+ custom_points: {
48
+ type: ParameterType.COMPLEX,
49
+ default: null,
50
+ },
51
+ /** Instructions text */
52
+ instructions: {
53
+ type: ParameterType.STRING,
54
+ default: 'Look at each point as it appears on the screen. Keep your gaze fixed on each point until it disappears.',
55
+ },
56
+ /** Button text for click mode */
57
+ button_text: {
58
+ type: ParameterType.STRING,
59
+ default: 'Start Calibration',
60
+ },
61
+ /** Background color of the calibration container */
62
+ background_color: {
63
+ type: ParameterType.STRING,
64
+ default: '#808080',
65
+ },
66
+ /** Primary button color */
67
+ button_color: {
68
+ type: ParameterType.STRING,
69
+ default: '#007bff',
70
+ },
71
+ /** Primary button hover color */
72
+ button_hover_color: {
73
+ type: ParameterType.STRING,
74
+ default: '#0056b3',
75
+ },
76
+ /** Retry button color */
77
+ retry_button_color: {
78
+ type: ParameterType.STRING,
79
+ default: '#dc3545',
80
+ },
81
+ /** Retry button hover color */
82
+ retry_button_hover_color: {
83
+ type: ParameterType.STRING,
84
+ default: '#c82333',
85
+ },
86
+ /** Success message color */
87
+ success_color: {
88
+ type: ParameterType.STRING,
89
+ default: '#28a745',
90
+ },
91
+ /** Error message color */
92
+ error_color: {
93
+ type: ParameterType.STRING,
94
+ default: '#dc3545',
95
+ },
96
+ /** Maximum number of retry attempts allowed on calibration failure */
97
+ max_retries: {
98
+ type: ParameterType.INT,
99
+ default: 1,
100
+ },
101
+ /** Duration of zoom in/out animations in ms */
102
+ zoom_duration: {
103
+ type: ParameterType.INT,
104
+ default: 300,
105
+ },
106
+ /** Duration of explosion animation in ms */
107
+ explosion_duration: {
108
+ type: ParameterType.INT,
109
+ default: 400,
110
+ },
111
+ /** Duration to show success result before auto-advancing in ms */
112
+ success_display_duration: {
113
+ type: ParameterType.INT,
114
+ default: 2000,
115
+ },
116
+ /** Duration to show instructions before auto-advancing in view mode in ms */
117
+ instruction_display_duration: {
118
+ type: ParameterType.INT,
119
+ default: 3000,
120
+ },
121
+ },
122
+ data: {
123
+ /** Calibration success status */
124
+ calibration_success: {
125
+ type: ParameterType.BOOL,
126
+ },
127
+ /** Number of calibration points used */
128
+ num_points: {
129
+ type: ParameterType.INT,
130
+ },
131
+ /** Calibration mode used */
132
+ mode: {
133
+ type: ParameterType.STRING,
134
+ },
135
+ /** Full calibration result data */
136
+ calibration_data: {
137
+ type: ParameterType.COMPLEX,
138
+ },
139
+ /** Number of calibration attempts made */
140
+ num_attempts: {
141
+ type: ParameterType.INT,
142
+ },
143
+ },
144
+ };
145
+ class TobiiCalibrationPlugin {
146
+ constructor(jsPsych) {
147
+ this.jsPsych = jsPsych;
148
+ }
149
+ static removeStyles() {
150
+ const el = document.getElementById('tobii-calibration-styles');
151
+ if (el) {
152
+ el.remove();
153
+ }
154
+ }
155
+ injectStyles(trial) {
156
+ // Remove existing styles so each trial gets its own colors
157
+ TobiiCalibrationPlugin.removeStyles();
158
+ const css = `
159
+ .tobii-calibration-container {
160
+ position: fixed;
161
+ top: 0;
162
+ left: 0;
163
+ width: 100%;
164
+ height: 100%;
165
+ background-color: ${trial.background_color};
166
+ font-family: 'Open Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
167
+ z-index: 9999;
168
+ }
169
+
170
+ .tobii-calibration-instructions {
171
+ position: absolute;
172
+ top: 50%;
173
+ left: 50%;
174
+ transform: translate(-50%, -50%);
175
+ background-color: white;
176
+ padding: 40px;
177
+ border-radius: 10px;
178
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
179
+ text-align: center;
180
+ max-width: 600px;
181
+ }
182
+
183
+ .tobii-calibration-instructions h2 {
184
+ margin-top: 0;
185
+ margin-bottom: 20px;
186
+ font-size: 24px;
187
+ color: #333;
188
+ }
189
+
190
+ .tobii-calibration-instructions p {
191
+ margin-bottom: 20px;
192
+ font-size: 16px;
193
+ line-height: 1.5;
194
+ color: #666;
195
+ }
196
+
197
+ .calibration-start-btn,
198
+ .calibration-continue-btn,
199
+ .calibration-retry-btn {
200
+ background-color: ${trial.button_color};
201
+ color: white;
202
+ border: none;
203
+ padding: 12px 30px;
204
+ font-size: 16px;
205
+ border-radius: 5px;
206
+ cursor: pointer;
207
+ transition: background-color 0.3s;
208
+ }
209
+
210
+ .calibration-start-btn:hover,
211
+ .calibration-continue-btn:hover {
212
+ background-color: ${trial.button_hover_color};
213
+ }
214
+
215
+ .calibration-retry-btn {
216
+ background-color: ${trial.retry_button_color};
217
+ }
218
+
219
+ .calibration-retry-btn:hover {
220
+ background-color: ${trial.retry_button_hover_color};
221
+ }
222
+
223
+ .tobii-calibration-point {
224
+ position: absolute;
225
+ border-radius: 50%;
226
+ transform: translate(-50%, -50%);
227
+ cursor: pointer;
228
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
229
+ }
230
+
231
+ .tobii-calibration-point.animation-pulse {
232
+ animation: tobii-calibration-pulse 1s infinite;
233
+ }
234
+
235
+ @keyframes tobii-calibration-pulse {
236
+ 0%, 100% {
237
+ transform: translate(-50%, -50%) scale(1);
238
+ opacity: 1;
239
+ }
240
+ 50% {
241
+ transform: translate(-50%, -50%) scale(1.2);
242
+ opacity: 0.8;
243
+ }
244
+ }
245
+
246
+ .tobii-calibration-point.animation-shrink {
247
+ animation: tobii-calibration-shrink 1s ease-out;
248
+ }
249
+
250
+ @keyframes tobii-calibration-shrink {
251
+ 0% {
252
+ transform: translate(-50%, -50%) scale(3);
253
+ opacity: 0.5;
254
+ }
255
+ 100% {
256
+ transform: translate(-50%, -50%) scale(1);
257
+ opacity: 1;
258
+ }
259
+ }
260
+
261
+ .tobii-calibration-point.animation-explosion {
262
+ animation: tobii-calibration-explosion ${trial.explosion_duration / 1000}s ease-out forwards;
263
+ }
264
+
265
+ @keyframes tobii-calibration-explosion {
266
+ 0% {
267
+ transform: translate(-50%, -50%) scale(1);
268
+ opacity: 1;
269
+ }
270
+ 50% {
271
+ transform: translate(-50%, -50%) scale(2);
272
+ opacity: 0.8;
273
+ }
274
+ 100% {
275
+ transform: translate(-50%, -50%) scale(0);
276
+ opacity: 0;
277
+ }
278
+ }
279
+
280
+ .tobii-calibration-point.animation-zoom-out {
281
+ animation: tobii-calibration-zoom-out ${trial.zoom_duration / 1000}s ease-out forwards;
282
+ }
283
+
284
+ @keyframes tobii-calibration-zoom-out {
285
+ 0% {
286
+ transform: translate(-50%, -50%) scale(1);
287
+ }
288
+ 100% {
289
+ transform: translate(-50%, -50%) scale(2.5);
290
+ }
291
+ }
292
+
293
+ .tobii-calibration-point.animation-zoom-in {
294
+ animation: tobii-calibration-zoom-in ${trial.zoom_duration / 1000}s ease-out forwards;
295
+ }
296
+
297
+ @keyframes tobii-calibration-zoom-in {
298
+ 0% {
299
+ transform: translate(-50%, -50%) scale(2.5);
300
+ }
301
+ 100% {
302
+ transform: translate(-50%, -50%) scale(1);
303
+ }
304
+ }
305
+
306
+ .tobii-calibration-progress {
307
+ position: fixed;
308
+ top: 20px;
309
+ left: 50%;
310
+ transform: translateX(-50%);
311
+ background-color: rgba(0, 0, 0, 0.7);
312
+ color: white;
313
+ padding: 10px 20px;
314
+ border-radius: 5px;
315
+ font-size: 14px;
316
+ z-index: 10000;
317
+ }
318
+
319
+ .tobii-calibration-result {
320
+ position: absolute;
321
+ top: 50%;
322
+ left: 50%;
323
+ transform: translate(-50%, -50%);
324
+ background-color: white;
325
+ padding: 40px;
326
+ border-radius: 10px;
327
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
328
+ text-align: center;
329
+ }
330
+
331
+ .tobii-calibration-result-content h2 {
332
+ margin-top: 0;
333
+ margin-bottom: 20px;
334
+ font-size: 24px;
335
+ }
336
+
337
+ .tobii-calibration-result-content.success h2 {
338
+ color: ${trial.success_color};
339
+ }
340
+
341
+ .tobii-calibration-result-content.error h2 {
342
+ color: ${trial.error_color};
343
+ }
344
+
345
+ .tobii-calibration-result-content p {
346
+ margin-bottom: 20px;
347
+ font-size: 16px;
348
+ color: #666;
349
+ }
350
+ `;
351
+ const styleElement = document.createElement('style');
352
+ styleElement.id = 'tobii-calibration-styles';
353
+ styleElement.textContent = css;
354
+ document.head.appendChild(styleElement);
355
+ }
356
+ async trial(display_element, trial) {
357
+ // Inject styles
358
+ this.injectStyles(trial);
359
+ // Get extension instance
360
+ const tobiiExt = this.jsPsych.extensions.tobii;
361
+ if (!tobiiExt) {
362
+ throw new Error('Tobii extension not initialized');
363
+ }
364
+ // Check connection
365
+ if (!tobiiExt.isConnected()) {
366
+ throw new Error('Not connected to Tobii server');
367
+ }
368
+ // Create calibration display
369
+ const calibrationDisplay = new CalibrationDisplay(display_element, trial);
370
+ // Show instructions (only once, before retry loop)
371
+ await calibrationDisplay.showInstructions();
372
+ // Get calibration points and validate custom points
373
+ let points;
374
+ if (trial.custom_points) {
375
+ points = this.validateCustomPoints(trial.custom_points);
376
+ }
377
+ else {
378
+ points = this.getCalibrationPoints(trial.calibration_points);
379
+ }
380
+ const maxAttempts = 1 + trial.max_retries;
381
+ let attempt = 0;
382
+ let calibrationResult = { success: false };
383
+ try {
384
+ // Retry loop
385
+ while (attempt < maxAttempts) {
386
+ attempt++;
387
+ const retriesRemaining = maxAttempts - attempt;
388
+ // Start calibration on server (resets server-side state on each call)
389
+ await tobiiExt.startCalibration();
390
+ // Initialize point at screen center (with brief pause)
391
+ await calibrationDisplay.initializePoint();
392
+ // Show each point and collect calibration data with smooth path animation
393
+ for (let i = 0; i < points.length; i++) {
394
+ const point = points[i];
395
+ // Travel to the point location (smooth animation from current position)
396
+ await calibrationDisplay.travelToPoint(point, i, points.length);
397
+ // Zoom out (point grows larger to attract attention)
398
+ await calibrationDisplay.playZoomOut();
399
+ // Zoom in (point shrinks to fixation size)
400
+ await calibrationDisplay.playZoomIn();
401
+ if (trial.calibration_mode === 'click') {
402
+ // Wait for user to click
403
+ await calibrationDisplay.waitForClick();
404
+ }
405
+ else {
406
+ // Wait for user to fixate on the point
407
+ await this.delay(trial.point_duration);
408
+ }
409
+ // Collect calibration data for this point (blocks until SDK finishes)
410
+ const result = await tobiiExt.collectCalibrationPoint(point.x, point.y);
411
+ // Play explosion animation based on result
412
+ await calibrationDisplay.playExplosion(result.success);
413
+ // Reset point for next travel (don't remove element)
414
+ if (i < points.length - 1) {
415
+ await calibrationDisplay.resetPointAfterExplosion();
416
+ }
417
+ }
418
+ // Hide point after final explosion
419
+ await calibrationDisplay.hidePoint();
420
+ // Compute calibration on server
421
+ calibrationResult = await tobiiExt.computeCalibration();
422
+ // Show result with retry option if retries remain
423
+ const userChoice = await calibrationDisplay.showResult(calibrationResult.success, retriesRemaining > 0);
424
+ if (userChoice === 'continue') {
425
+ break;
426
+ }
427
+ // User chose retry — reset display for next attempt
428
+ calibrationDisplay.resetForRetry();
429
+ }
430
+ }
431
+ finally {
432
+ // Clear display and remove injected styles
433
+ calibrationDisplay.clear();
434
+ display_element.innerHTML = '';
435
+ TobiiCalibrationPlugin.removeStyles();
436
+ }
437
+ // Finish trial
438
+ const trial_data = {
439
+ calibration_success: calibrationResult.success,
440
+ num_points: points.length,
441
+ mode: trial.calibration_mode,
442
+ calibration_data: calibrationResult,
443
+ num_attempts: attempt,
444
+ };
445
+ this.jsPsych.finishTrial(trial_data);
446
+ }
447
+ /**
448
+ * Validate custom calibration points
449
+ */
450
+ validateCustomPoints(points) {
451
+ if (!Array.isArray(points) || points.length === 0) {
452
+ throw new Error('custom_points must be a non-empty array');
453
+ }
454
+ const validated = [];
455
+ for (let i = 0; i < points.length; i++) {
456
+ const point = points[i];
457
+ if (typeof point !== 'object' || point === null) {
458
+ throw new Error(`Invalid calibration point at index ${i}: must have numeric x and y`);
459
+ }
460
+ const p = point;
461
+ if (typeof p.x !== 'number' || typeof p.y !== 'number') {
462
+ throw new Error(`Invalid calibration point at index ${i}: must have numeric x and y`);
463
+ }
464
+ if (p.x < 0 || p.x > 1 || p.y < 0 || p.y > 1) {
465
+ throw new Error(`Calibration point at index ${i} out of range: x and y must be between 0 and 1`);
466
+ }
467
+ validated.push({ x: p.x, y: p.y });
468
+ }
469
+ return validated;
470
+ }
471
+ /**
472
+ * Get standard calibration points for the given grid size
473
+ */
474
+ getCalibrationPoints(count) {
475
+ switch (count) {
476
+ case 5:
477
+ return [
478
+ { x: 0.1, y: 0.1 },
479
+ { x: 0.9, y: 0.1 },
480
+ { x: 0.5, y: 0.5 },
481
+ { x: 0.1, y: 0.9 },
482
+ { x: 0.9, y: 0.9 },
483
+ ];
484
+ case 9:
485
+ return [
486
+ { x: 0.1, y: 0.1 },
487
+ { x: 0.5, y: 0.1 },
488
+ { x: 0.9, y: 0.1 },
489
+ { x: 0.1, y: 0.5 },
490
+ { x: 0.5, y: 0.5 },
491
+ { x: 0.9, y: 0.5 },
492
+ { x: 0.1, y: 0.9 },
493
+ { x: 0.5, y: 0.9 },
494
+ { x: 0.9, y: 0.9 },
495
+ ];
496
+ case 13:
497
+ // 3x3 outer grid + 4 diagonal midpoints
498
+ return [
499
+ { x: 0.1, y: 0.1 },
500
+ { x: 0.5, y: 0.1 },
501
+ { x: 0.9, y: 0.1 },
502
+ { x: 0.3, y: 0.3 },
503
+ { x: 0.7, y: 0.3 },
504
+ { x: 0.1, y: 0.5 },
505
+ { x: 0.5, y: 0.5 },
506
+ { x: 0.9, y: 0.5 },
507
+ { x: 0.3, y: 0.7 },
508
+ { x: 0.7, y: 0.7 },
509
+ { x: 0.1, y: 0.9 },
510
+ { x: 0.5, y: 0.9 },
511
+ { x: 0.9, y: 0.9 },
512
+ ];
513
+ case 15:
514
+ // 5 rows x 3 columns
515
+ return [
516
+ { x: 0.1, y: 0.1 },
517
+ { x: 0.5, y: 0.1 },
518
+ { x: 0.9, y: 0.1 },
519
+ { x: 0.1, y: 0.3 },
520
+ { x: 0.5, y: 0.3 },
521
+ { x: 0.9, y: 0.3 },
522
+ { x: 0.1, y: 0.5 },
523
+ { x: 0.5, y: 0.5 },
524
+ { x: 0.9, y: 0.5 },
525
+ { x: 0.1, y: 0.7 },
526
+ { x: 0.5, y: 0.7 },
527
+ { x: 0.9, y: 0.7 },
528
+ { x: 0.1, y: 0.9 },
529
+ { x: 0.5, y: 0.9 },
530
+ { x: 0.9, y: 0.9 },
531
+ ];
532
+ case 19:
533
+ // Symmetric 3-5-3-5-3 pattern
534
+ return [
535
+ { x: 0.1, y: 0.1 },
536
+ { x: 0.5, y: 0.1 },
537
+ { x: 0.9, y: 0.1 },
538
+ { x: 0.1, y: 0.3 },
539
+ { x: 0.3, y: 0.3 },
540
+ { x: 0.5, y: 0.3 },
541
+ { x: 0.7, y: 0.3 },
542
+ { x: 0.9, y: 0.3 },
543
+ { x: 0.1, y: 0.5 },
544
+ { x: 0.5, y: 0.5 },
545
+ { x: 0.9, y: 0.5 },
546
+ { x: 0.1, y: 0.7 },
547
+ { x: 0.3, y: 0.7 },
548
+ { x: 0.5, y: 0.7 },
549
+ { x: 0.7, y: 0.7 },
550
+ { x: 0.9, y: 0.7 },
551
+ { x: 0.1, y: 0.9 },
552
+ { x: 0.5, y: 0.9 },
553
+ { x: 0.9, y: 0.9 },
554
+ ];
555
+ case 25:
556
+ // 5x5 full grid
557
+ return [
558
+ { x: 0.1, y: 0.1 },
559
+ { x: 0.3, y: 0.1 },
560
+ { x: 0.5, y: 0.1 },
561
+ { x: 0.7, y: 0.1 },
562
+ { x: 0.9, y: 0.1 },
563
+ { x: 0.1, y: 0.3 },
564
+ { x: 0.3, y: 0.3 },
565
+ { x: 0.5, y: 0.3 },
566
+ { x: 0.7, y: 0.3 },
567
+ { x: 0.9, y: 0.3 },
568
+ { x: 0.1, y: 0.5 },
569
+ { x: 0.3, y: 0.5 },
570
+ { x: 0.5, y: 0.5 },
571
+ { x: 0.7, y: 0.5 },
572
+ { x: 0.9, y: 0.5 },
573
+ { x: 0.1, y: 0.7 },
574
+ { x: 0.3, y: 0.7 },
575
+ { x: 0.5, y: 0.7 },
576
+ { x: 0.7, y: 0.7 },
577
+ { x: 0.9, y: 0.7 },
578
+ { x: 0.1, y: 0.9 },
579
+ { x: 0.3, y: 0.9 },
580
+ { x: 0.5, y: 0.9 },
581
+ { x: 0.7, y: 0.9 },
582
+ { x: 0.9, y: 0.9 },
583
+ ];
584
+ default:
585
+ throw new Error(`Unsupported calibration_points value: ${count}. Use 5, 9, 13, 15, 19, or 25, or provide custom_points.`);
586
+ }
587
+ }
588
+ /**
589
+ * Delay helper
590
+ */
591
+ delay(ms) {
592
+ return new Promise((resolve) => setTimeout(resolve, ms));
593
+ }
594
+ }
595
+ TobiiCalibrationPlugin.info = info;
596
+ export default TobiiCalibrationPlugin;
597
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.spec.d.ts","sourceRoot":"","sources":["index.spec.ts"],"names":[],"mappings":""}