@hapticjs/core 0.2.0 → 0.3.0

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.
@@ -5,15 +5,15 @@ var ui = {
5
5
  /** Light button tap */
6
6
  tap: {
7
7
  name: "ui.tap",
8
- steps: [{ type: "vibrate", duration: 10, intensity: 0.6 }]
8
+ steps: [{ type: "vibrate", duration: 30, intensity: 0.6 }]
9
9
  },
10
10
  /** Double tap */
11
11
  doubleTap: {
12
12
  name: "ui.doubleTap",
13
13
  steps: [
14
- { type: "vibrate", duration: 10, intensity: 0.6 },
14
+ { type: "vibrate", duration: 25, intensity: 0.6 },
15
15
  { type: "pause", duration: 80, intensity: 0 },
16
- { type: "vibrate", duration: 10, intensity: 0.6 }
16
+ { type: "vibrate", duration: 25, intensity: 0.6 }
17
17
  ]
18
18
  },
19
19
  /** Long press acknowledgment */
@@ -24,58 +24,58 @@ var ui = {
24
24
  /** Toggle switch on */
25
25
  toggleOn: {
26
26
  name: "ui.toggleOn",
27
- steps: [{ type: "vibrate", duration: 15, intensity: 0.6 }]
27
+ steps: [{ type: "vibrate", duration: 30, intensity: 0.6 }]
28
28
  },
29
29
  /** Toggle switch off */
30
30
  toggleOff: {
31
31
  name: "ui.toggleOff",
32
- steps: [{ type: "vibrate", duration: 10, intensity: 0.3 }]
32
+ steps: [{ type: "vibrate", duration: 25, intensity: 0.4 }]
33
33
  },
34
34
  /** Slider snap to value */
35
35
  sliderSnap: {
36
36
  name: "ui.sliderSnap",
37
- steps: [{ type: "vibrate", duration: 5, intensity: 0.4 }]
37
+ steps: [{ type: "vibrate", duration: 25, intensity: 0.5 }]
38
38
  },
39
39
  /** Selection changed */
40
40
  selection: {
41
41
  name: "ui.selection",
42
- steps: [{ type: "vibrate", duration: 8, intensity: 0.4 }]
42
+ steps: [{ type: "vibrate", duration: 25, intensity: 0.5 }]
43
43
  },
44
44
  /** Pull to refresh threshold reached */
45
45
  pullToRefresh: {
46
46
  name: "ui.pullToRefresh",
47
47
  steps: [
48
- { type: "vibrate", duration: 20, intensity: 0.5 },
48
+ { type: "vibrate", duration: 30, intensity: 0.5 },
49
49
  { type: "pause", duration: 40, intensity: 0 },
50
- { type: "vibrate", duration: 30, intensity: 0.7 }
50
+ { type: "vibrate", duration: 40, intensity: 0.7 }
51
51
  ]
52
52
  },
53
53
  /** Swipe action triggered */
54
54
  swipe: {
55
55
  name: "ui.swipe",
56
56
  steps: [
57
- { type: "vibrate", duration: 12, intensity: 0.4 },
57
+ { type: "vibrate", duration: 30, intensity: 0.5 },
58
58
  { type: "pause", duration: 30, intensity: 0 },
59
- { type: "vibrate", duration: 8, intensity: 0.3 }
59
+ { type: "vibrate", duration: 25, intensity: 0.4 }
60
60
  ]
61
61
  },
62
62
  /** Context menu appearance */
63
63
  contextMenu: {
64
64
  name: "ui.contextMenu",
65
- steps: [{ type: "vibrate", duration: 20, intensity: 0.7 }]
65
+ steps: [{ type: "vibrate", duration: 35, intensity: 0.7 }]
66
66
  },
67
67
  /** Drag start */
68
68
  dragStart: {
69
69
  name: "ui.dragStart",
70
- steps: [{ type: "vibrate", duration: 12, intensity: 0.5 }]
70
+ steps: [{ type: "vibrate", duration: 30, intensity: 0.5 }]
71
71
  },
72
72
  /** Drag drop */
73
73
  drop: {
74
74
  name: "ui.drop",
75
75
  steps: [
76
- { type: "vibrate", duration: 20, intensity: 0.8 },
76
+ { type: "vibrate", duration: 30, intensity: 0.8 },
77
77
  { type: "pause", duration: 30, intensity: 0 },
78
- { type: "vibrate", duration: 10, intensity: 0.4 }
78
+ { type: "vibrate", duration: 25, intensity: 0.5 }
79
79
  ]
80
80
  }
81
81
  };
@@ -86,9 +86,9 @@ var notifications = {
86
86
  success: {
87
87
  name: "notifications.success",
88
88
  steps: [
89
- { type: "vibrate", duration: 30, intensity: 0.5 },
89
+ { type: "vibrate", duration: 35, intensity: 0.5 },
90
90
  { type: "pause", duration: 60, intensity: 0 },
91
- { type: "vibrate", duration: 40, intensity: 0.8 }
91
+ { type: "vibrate", duration: 45, intensity: 0.8 }
92
92
  ]
93
93
  },
94
94
  /** Warning — three even pulses */
@@ -115,16 +115,16 @@ var notifications = {
115
115
  info: {
116
116
  name: "notifications.info",
117
117
  steps: [
118
- { type: "vibrate", duration: 20, intensity: 0.4 }
118
+ { type: "vibrate", duration: 35, intensity: 0.5 }
119
119
  ]
120
120
  },
121
121
  /** Message received */
122
122
  messageReceived: {
123
123
  name: "notifications.messageReceived",
124
124
  steps: [
125
- { type: "vibrate", duration: 15, intensity: 0.5 },
125
+ { type: "vibrate", duration: 30, intensity: 0.5 },
126
126
  { type: "pause", duration: 100, intensity: 0 },
127
- { type: "vibrate", duration: 15, intensity: 0.5 }
127
+ { type: "vibrate", duration: 30, intensity: 0.5 }
128
128
  ]
129
129
  },
130
130
  /** Alarm — urgent repeating pattern */
@@ -148,9 +148,9 @@ var notifications = {
148
148
  reminder: {
149
149
  name: "notifications.reminder",
150
150
  steps: [
151
- { type: "vibrate", duration: 25, intensity: 0.5 },
151
+ { type: "vibrate", duration: 30, intensity: 0.5 },
152
152
  { type: "pause", duration: 150, intensity: 0 },
153
- { type: "vibrate", duration: 25, intensity: 0.5 }
153
+ { type: "vibrate", duration: 30, intensity: 0.5 }
154
154
  ]
155
155
  }
156
156
  };
@@ -164,26 +164,25 @@ var gaming = {
164
164
  { type: "vibrate", duration: 100, intensity: 1 },
165
165
  { type: "vibrate", duration: 80, intensity: 0.8 },
166
166
  { type: "vibrate", duration: 60, intensity: 0.5 },
167
- { type: "vibrate", duration: 40, intensity: 0.3 },
168
- { type: "vibrate", duration: 30, intensity: 0.1 }
167
+ { type: "vibrate", duration: 40, intensity: 0.3 }
169
168
  ]
170
169
  },
171
170
  /** Collision — sharp impact */
172
171
  collision: {
173
172
  name: "gaming.collision",
174
173
  steps: [
175
- { type: "vibrate", duration: 30, intensity: 1 },
176
- { type: "pause", duration: 20, intensity: 0 },
177
- { type: "vibrate", duration: 15, intensity: 0.5 }
174
+ { type: "vibrate", duration: 40, intensity: 1 },
175
+ { type: "pause", duration: 30, intensity: 0 },
176
+ { type: "vibrate", duration: 25, intensity: 0.5 }
178
177
  ]
179
178
  },
180
179
  /** Heartbeat — rhythmic pulse */
181
180
  heartbeat: {
182
181
  name: "gaming.heartbeat",
183
182
  steps: [
184
- { type: "vibrate", duration: 20, intensity: 0.8 },
183
+ { type: "vibrate", duration: 30, intensity: 0.8 },
185
184
  { type: "pause", duration: 80, intensity: 0 },
186
- { type: "vibrate", duration: 30, intensity: 1 },
185
+ { type: "vibrate", duration: 40, intensity: 1 },
187
186
  { type: "pause", duration: 400, intensity: 0 }
188
187
  ]
189
188
  },
@@ -191,17 +190,17 @@ var gaming = {
191
190
  gunshot: {
192
191
  name: "gaming.gunshot",
193
192
  steps: [
194
- { type: "vibrate", duration: 15, intensity: 1 },
195
- { type: "vibrate", duration: 30, intensity: 0.4 }
193
+ { type: "vibrate", duration: 30, intensity: 1 },
194
+ { type: "vibrate", duration: 40, intensity: 0.4 }
196
195
  ]
197
196
  },
198
197
  /** Sword clash — metallic ring */
199
198
  swordClash: {
200
199
  name: "gaming.swordClash",
201
200
  steps: [
202
- { type: "vibrate", duration: 10, intensity: 1 },
203
- { type: "pause", duration: 10, intensity: 0 },
204
- { type: "vibrate", duration: 30, intensity: 0.6 },
201
+ { type: "vibrate", duration: 25, intensity: 1 },
202
+ { type: "pause", duration: 20, intensity: 0 },
203
+ { type: "vibrate", duration: 40, intensity: 0.6 },
205
204
  { type: "vibrate", duration: 50, intensity: 0.3 }
206
205
  ]
207
206
  },
@@ -209,10 +208,10 @@ var gaming = {
209
208
  powerUp: {
210
209
  name: "gaming.powerUp",
211
210
  steps: [
212
- { type: "vibrate", duration: 40, intensity: 0.2 },
213
- { type: "vibrate", duration: 40, intensity: 0.4 },
214
- { type: "vibrate", duration: 40, intensity: 0.6 },
215
- { type: "vibrate", duration: 40, intensity: 0.8 },
211
+ { type: "vibrate", duration: 40, intensity: 0.3 },
212
+ { type: "vibrate", duration: 40, intensity: 0.5 },
213
+ { type: "vibrate", duration: 40, intensity: 0.7 },
214
+ { type: "vibrate", duration: 40, intensity: 0.9 },
216
215
  { type: "vibrate", duration: 60, intensity: 1 }
217
216
  ]
218
217
  },
@@ -220,46 +219,46 @@ var gaming = {
220
219
  damage: {
221
220
  name: "gaming.damage",
222
221
  steps: [
223
- { type: "vibrate", duration: 40, intensity: 0.9 },
224
- { type: "pause", duration: 20, intensity: 0 },
225
- { type: "vibrate", duration: 30, intensity: 0.6 },
226
- { type: "pause", duration: 20, intensity: 0 },
227
- { type: "vibrate", duration: 20, intensity: 0.3 }
222
+ { type: "vibrate", duration: 50, intensity: 0.9 },
223
+ { type: "pause", duration: 25, intensity: 0 },
224
+ { type: "vibrate", duration: 40, intensity: 0.6 },
225
+ { type: "pause", duration: 25, intensity: 0 },
226
+ { type: "vibrate", duration: 30, intensity: 0.4 }
228
227
  ]
229
228
  },
230
229
  /** Item pickup — light cheerful */
231
230
  pickup: {
232
231
  name: "gaming.pickup",
233
232
  steps: [
234
- { type: "vibrate", duration: 10, intensity: 0.3 },
233
+ { type: "vibrate", duration: 25, intensity: 0.4 },
235
234
  { type: "pause", duration: 40, intensity: 0 },
236
- { type: "vibrate", duration: 15, intensity: 0.6 }
235
+ { type: "vibrate", duration: 30, intensity: 0.7 }
237
236
  ]
238
237
  },
239
238
  /** Level complete — celebratory */
240
239
  levelComplete: {
241
240
  name: "gaming.levelComplete",
242
241
  steps: [
243
- { type: "vibrate", duration: 20, intensity: 0.5 },
242
+ { type: "vibrate", duration: 30, intensity: 0.5 },
244
243
  { type: "pause", duration: 60, intensity: 0 },
245
- { type: "vibrate", duration: 20, intensity: 0.5 },
244
+ { type: "vibrate", duration: 30, intensity: 0.5 },
246
245
  { type: "pause", duration: 60, intensity: 0 },
247
- { type: "vibrate", duration: 30, intensity: 0.7 },
246
+ { type: "vibrate", duration: 40, intensity: 0.7 },
248
247
  { type: "pause", duration: 60, intensity: 0 },
249
- { type: "vibrate", duration: 50, intensity: 1 }
248
+ { type: "vibrate", duration: 60, intensity: 1 }
250
249
  ]
251
250
  },
252
251
  /** Engine rumble — continuous vibration */
253
252
  engineRumble: {
254
253
  name: "gaming.engineRumble",
255
254
  steps: [
256
- { type: "vibrate", duration: 30, intensity: 0.4 },
257
- { type: "pause", duration: 10, intensity: 0 },
258
- { type: "vibrate", duration: 30, intensity: 0.5 },
259
- { type: "pause", duration: 10, intensity: 0 },
260
- { type: "vibrate", duration: 30, intensity: 0.4 },
261
- { type: "pause", duration: 10, intensity: 0 },
262
- { type: "vibrate", duration: 30, intensity: 0.5 }
255
+ { type: "vibrate", duration: 40, intensity: 0.5 },
256
+ { type: "pause", duration: 15, intensity: 0 },
257
+ { type: "vibrate", duration: 40, intensity: 0.6 },
258
+ { type: "pause", duration: 15, intensity: 0 },
259
+ { type: "vibrate", duration: 40, intensity: 0.5 },
260
+ { type: "pause", duration: 15, intensity: 0 },
261
+ { type: "vibrate", duration: 40, intensity: 0.6 }
263
262
  ]
264
263
  }
265
264
  };
@@ -270,9 +269,9 @@ var accessibility = {
270
269
  confirm: {
271
270
  name: "accessibility.confirm",
272
271
  steps: [
273
- { type: "vibrate", duration: 30, intensity: 0.7 },
272
+ { type: "vibrate", duration: 35, intensity: 0.7 },
274
273
  { type: "pause", duration: 100, intensity: 0 },
275
- { type: "vibrate", duration: 30, intensity: 0.7 }
274
+ { type: "vibrate", duration: 35, intensity: 0.7 }
276
275
  ]
277
276
  },
278
277
  /** Deny/reject — long single buzz */
@@ -286,41 +285,41 @@ var accessibility = {
286
285
  boundary: {
287
286
  name: "accessibility.boundary",
288
287
  steps: [
289
- { type: "vibrate", duration: 15, intensity: 1 }
288
+ { type: "vibrate", duration: 30, intensity: 1 }
290
289
  ]
291
290
  },
292
291
  /** Focus change — subtle tick */
293
292
  focusChange: {
294
293
  name: "accessibility.focusChange",
295
294
  steps: [
296
- { type: "vibrate", duration: 5, intensity: 0.3 }
295
+ { type: "vibrate", duration: 25, intensity: 0.5 }
297
296
  ]
298
297
  },
299
298
  /** Counting rhythm — one tick per count */
300
299
  countTick: {
301
300
  name: "accessibility.countTick",
302
301
  steps: [
303
- { type: "vibrate", duration: 8, intensity: 0.5 }
302
+ { type: "vibrate", duration: 25, intensity: 0.5 }
304
303
  ]
305
304
  },
306
305
  /** Navigation landmark reached */
307
306
  landmark: {
308
307
  name: "accessibility.landmark",
309
308
  steps: [
310
- { type: "vibrate", duration: 15, intensity: 0.6 },
309
+ { type: "vibrate", duration: 25, intensity: 0.6 },
311
310
  { type: "pause", duration: 40, intensity: 0 },
312
- { type: "vibrate", duration: 15, intensity: 0.6 },
311
+ { type: "vibrate", duration: 25, intensity: 0.6 },
313
312
  { type: "pause", duration: 40, intensity: 0 },
314
- { type: "vibrate", duration: 15, intensity: 0.6 }
313
+ { type: "vibrate", duration: 25, intensity: 0.6 }
315
314
  ]
316
315
  },
317
316
  /** Progress checkpoint — escalating feedback */
318
317
  progressCheckpoint: {
319
318
  name: "accessibility.progressCheckpoint",
320
319
  steps: [
321
- { type: "vibrate", duration: 20, intensity: 0.4 },
320
+ { type: "vibrate", duration: 30, intensity: 0.5 },
322
321
  { type: "pause", duration: 60, intensity: 0 },
323
- { type: "vibrate", duration: 25, intensity: 0.7 }
322
+ { type: "vibrate", duration: 35, intensity: 0.7 }
324
323
  ]
325
324
  }
326
325
  };
@@ -330,51 +329,229 @@ var system = {
330
329
  /** Keyboard key press */
331
330
  keyPress: {
332
331
  name: "system.keyPress",
333
- steps: [{ type: "vibrate", duration: 5, intensity: 0.3 }]
332
+ steps: [{ type: "vibrate", duration: 25, intensity: 0.5 }]
334
333
  },
335
334
  /** Scroll tick (detent-like) */
336
335
  scrollTick: {
337
336
  name: "system.scrollTick",
338
- steps: [{ type: "vibrate", duration: 3, intensity: 0.2 }]
337
+ steps: [{ type: "vibrate", duration: 20, intensity: 0.4 }]
339
338
  },
340
339
  /** Scroll boundary reached */
341
340
  scrollBounce: {
342
341
  name: "system.scrollBounce",
343
342
  steps: [
344
- { type: "vibrate", duration: 10, intensity: 0.5 },
345
- { type: "vibrate", duration: 20, intensity: 0.3 }
343
+ { type: "vibrate", duration: 25, intensity: 0.6 },
344
+ { type: "vibrate", duration: 30, intensity: 0.4 }
346
345
  ]
347
346
  },
348
347
  /** Delete action */
349
348
  delete: {
350
349
  name: "system.delete",
351
350
  steps: [
352
- { type: "vibrate", duration: 15, intensity: 0.5 },
351
+ { type: "vibrate", duration: 30, intensity: 0.5 },
353
352
  { type: "pause", duration: 50, intensity: 0 },
354
- { type: "vibrate", duration: 25, intensity: 0.8 }
353
+ { type: "vibrate", duration: 40, intensity: 0.8 }
355
354
  ]
356
355
  },
357
356
  /** Undo action */
358
357
  undo: {
359
358
  name: "system.undo",
360
359
  steps: [
361
- { type: "vibrate", duration: 20, intensity: 0.5 },
360
+ { type: "vibrate", duration: 30, intensity: 0.5 },
362
361
  { type: "pause", duration: 80, intensity: 0 },
363
- { type: "vibrate", duration: 10, intensity: 0.3 }
362
+ { type: "vibrate", duration: 25, intensity: 0.4 }
364
363
  ]
365
364
  },
366
365
  /** Copy to clipboard */
367
366
  copy: {
368
367
  name: "system.copy",
369
- steps: [{ type: "vibrate", duration: 12, intensity: 0.4 }]
368
+ steps: [{ type: "vibrate", duration: 30, intensity: 0.5 }]
370
369
  },
371
370
  /** Paste from clipboard */
372
371
  paste: {
373
372
  name: "system.paste",
374
373
  steps: [
375
- { type: "vibrate", duration: 8, intensity: 0.3 },
374
+ { type: "vibrate", duration: 25, intensity: 0.4 },
375
+ { type: "pause", duration: 30, intensity: 0 },
376
+ { type: "vibrate", duration: 30, intensity: 0.6 }
377
+ ]
378
+ }
379
+ };
380
+
381
+ // src/presets/emotions.ts
382
+ var emotions = {
383
+ /** Excited — fast, energetic pulses building up */
384
+ excited: {
385
+ name: "emotions.excited",
386
+ steps: [
387
+ { type: "vibrate", duration: 30, intensity: 0.5 },
388
+ { type: "pause", duration: 30, intensity: 0 },
389
+ { type: "vibrate", duration: 30, intensity: 0.6 },
390
+ { type: "pause", duration: 25, intensity: 0 },
391
+ { type: "vibrate", duration: 35, intensity: 0.7 },
392
+ { type: "pause", duration: 25, intensity: 0 },
393
+ { type: "vibrate", duration: 35, intensity: 0.8 },
394
+ { type: "pause", duration: 25, intensity: 0 },
395
+ { type: "vibrate", duration: 40, intensity: 0.9 },
396
+ { type: "vibrate", duration: 50, intensity: 1 }
397
+ ]
398
+ },
399
+ /** Calm — slow, gentle wave with soft sustained vibrations */
400
+ calm: {
401
+ name: "emotions.calm",
402
+ steps: [
403
+ { type: "vibrate", duration: 80, intensity: 0.2 },
404
+ { type: "pause", duration: 200, intensity: 0 },
405
+ { type: "vibrate", duration: 100, intensity: 0.25 },
406
+ { type: "pause", duration: 250, intensity: 0 },
407
+ { type: "vibrate", duration: 80, intensity: 0.2 },
408
+ { type: "pause", duration: 200, intensity: 0 },
409
+ { type: "vibrate", duration: 100, intensity: 0.15 }
410
+ ]
411
+ },
412
+ /** Tense — tight, irregular short heavy bursts */
413
+ tense: {
414
+ name: "emotions.tense",
415
+ steps: [
416
+ { type: "vibrate", duration: 35, intensity: 0.8 },
417
+ { type: "pause", duration: 40, intensity: 0 },
418
+ { type: "vibrate", duration: 30, intensity: 0.9 },
419
+ { type: "pause", duration: 30, intensity: 0 },
420
+ { type: "vibrate", duration: 40, intensity: 0.85 },
421
+ { type: "pause", duration: 35, intensity: 0 },
422
+ { type: "vibrate", duration: 30, intensity: 0.9 },
423
+ { type: "pause", duration: 45, intensity: 0 },
424
+ { type: "vibrate", duration: 35, intensity: 0.8 }
425
+ ]
426
+ },
427
+ /** Happy — bouncy, playful ascending rhythm */
428
+ happy: {
429
+ name: "emotions.happy",
430
+ steps: [
431
+ { type: "vibrate", duration: 30, intensity: 0.4 },
432
+ { type: "pause", duration: 50, intensity: 0 },
433
+ { type: "vibrate", duration: 35, intensity: 0.5 },
434
+ { type: "pause", duration: 50, intensity: 0 },
435
+ { type: "vibrate", duration: 35, intensity: 0.6 },
436
+ { type: "pause", duration: 40, intensity: 0 },
437
+ { type: "vibrate", duration: 40, intensity: 0.7 },
438
+ { type: "pause", duration: 40, intensity: 0 },
439
+ { type: "vibrate", duration: 45, intensity: 0.8 }
440
+ ]
441
+ },
442
+ /** Sad — slow, heavy, descending vibrations that fade */
443
+ sad: {
444
+ name: "emotions.sad",
445
+ steps: [
446
+ { type: "vibrate", duration: 100, intensity: 0.8 },
447
+ { type: "pause", duration: 120, intensity: 0 },
448
+ { type: "vibrate", duration: 90, intensity: 0.6 },
449
+ { type: "pause", duration: 140, intensity: 0 },
450
+ { type: "vibrate", duration: 80, intensity: 0.4 },
451
+ { type: "pause", duration: 160, intensity: 0 },
452
+ { type: "vibrate", duration: 70, intensity: 0.25 }
453
+ ]
454
+ },
455
+ /** Angry — aggressive, chaotic heavy rapid hits */
456
+ angry: {
457
+ name: "emotions.angry",
458
+ steps: [
459
+ { type: "vibrate", duration: 40, intensity: 1 },
460
+ { type: "pause", duration: 25, intensity: 0 },
461
+ { type: "vibrate", duration: 35, intensity: 0.9 },
462
+ { type: "pause", duration: 25, intensity: 0 },
463
+ { type: "vibrate", duration: 45, intensity: 1 },
376
464
  { type: "pause", duration: 30, intensity: 0 },
377
- { type: "vibrate", duration: 12, intensity: 0.5 }
465
+ { type: "vibrate", duration: 40, intensity: 0.95 },
466
+ { type: "vibrate", duration: 50, intensity: 1 },
467
+ { type: "pause", duration: 25, intensity: 0 },
468
+ { type: "vibrate", duration: 45, intensity: 0.9 }
469
+ ]
470
+ },
471
+ /** Surprised — sharp sudden hit, silence, then lighter hit */
472
+ surprised: {
473
+ name: "emotions.surprised",
474
+ steps: [
475
+ { type: "vibrate", duration: 40, intensity: 1 },
476
+ { type: "pause", duration: 200, intensity: 0 },
477
+ { type: "vibrate", duration: 30, intensity: 0.4 }
478
+ ]
479
+ },
480
+ /** Anxious — fast irregular heartbeat with inconsistent spacing */
481
+ anxious: {
482
+ name: "emotions.anxious",
483
+ steps: [
484
+ { type: "vibrate", duration: 30, intensity: 0.7 },
485
+ { type: "pause", duration: 60, intensity: 0 },
486
+ { type: "vibrate", duration: 35, intensity: 0.8 },
487
+ { type: "pause", duration: 40, intensity: 0 },
488
+ { type: "vibrate", duration: 25, intensity: 0.6 },
489
+ { type: "pause", duration: 80, intensity: 0 },
490
+ { type: "vibrate", duration: 30, intensity: 0.75 },
491
+ { type: "pause", duration: 50, intensity: 0 },
492
+ { type: "vibrate", duration: 35, intensity: 0.85 },
493
+ { type: "pause", duration: 35, intensity: 0 },
494
+ { type: "vibrate", duration: 30, intensity: 0.7 }
495
+ ]
496
+ },
497
+ /** Confident — strong, steady, measured even pulses */
498
+ confident: {
499
+ name: "emotions.confident",
500
+ steps: [
501
+ { type: "vibrate", duration: 50, intensity: 0.8 },
502
+ { type: "pause", duration: 80, intensity: 0 },
503
+ { type: "vibrate", duration: 50, intensity: 0.8 },
504
+ { type: "pause", duration: 80, intensity: 0 },
505
+ { type: "vibrate", duration: 50, intensity: 0.8 },
506
+ { type: "pause", duration: 80, intensity: 0 },
507
+ { type: "vibrate", duration: 50, intensity: 0.8 }
508
+ ]
509
+ },
510
+ /** Playful — alternating light-heavy in bouncy rhythm */
511
+ playful: {
512
+ name: "emotions.playful",
513
+ steps: [
514
+ { type: "vibrate", duration: 25, intensity: 0.3 },
515
+ { type: "pause", duration: 40, intensity: 0 },
516
+ { type: "vibrate", duration: 40, intensity: 0.7 },
517
+ { type: "pause", duration: 50, intensity: 0 },
518
+ { type: "vibrate", duration: 25, intensity: 0.35 },
519
+ { type: "pause", duration: 40, intensity: 0 },
520
+ { type: "vibrate", duration: 40, intensity: 0.75 },
521
+ { type: "pause", duration: 50, intensity: 0 },
522
+ { type: "vibrate", duration: 25, intensity: 0.3 },
523
+ { type: "pause", duration: 40, intensity: 0 },
524
+ { type: "vibrate", duration: 45, intensity: 0.8 }
525
+ ]
526
+ },
527
+ /** Romantic — gentle heartbeat rhythm, two soft pulses, long pause, repeat */
528
+ romantic: {
529
+ name: "emotions.romantic",
530
+ steps: [
531
+ { type: "vibrate", duration: 35, intensity: 0.4 },
532
+ { type: "pause", duration: 60, intensity: 0 },
533
+ { type: "vibrate", duration: 45, intensity: 0.5 },
534
+ { type: "pause", duration: 300, intensity: 0 },
535
+ { type: "vibrate", duration: 35, intensity: 0.4 },
536
+ { type: "pause", duration: 60, intensity: 0 },
537
+ { type: "vibrate", duration: 45, intensity: 0.5 },
538
+ { type: "pause", duration: 300, intensity: 0 },
539
+ { type: "vibrate", duration: 35, intensity: 0.4 },
540
+ { type: "pause", duration: 60, intensity: 0 },
541
+ { type: "vibrate", duration: 45, intensity: 0.5 }
542
+ ]
543
+ },
544
+ /** Peaceful — very subtle, barely-there ultra-light slow pulses */
545
+ peaceful: {
546
+ name: "emotions.peaceful",
547
+ steps: [
548
+ { type: "vibrate", duration: 60, intensity: 0.1 },
549
+ { type: "pause", duration: 300, intensity: 0 },
550
+ { type: "vibrate", duration: 70, intensity: 0.12 },
551
+ { type: "pause", duration: 350, intensity: 0 },
552
+ { type: "vibrate", duration: 60, intensity: 0.1 },
553
+ { type: "pause", duration: 300, intensity: 0 },
554
+ { type: "vibrate", duration: 70, intensity: 0.08 }
378
555
  ]
379
556
  }
380
557
  };
@@ -385,10 +562,12 @@ var presets = {
385
562
  notifications,
386
563
  gaming,
387
564
  accessibility,
388
- system
565
+ system,
566
+ emotions
389
567
  };
390
568
 
391
569
  exports.accessibility = accessibility;
570
+ exports.emotions = emotions;
392
571
  exports.gaming = gaming;
393
572
  exports.notifications = notifications;
394
573
  exports.presets = presets;