onehook-api-client 1.0.18 → 1.0.20

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.
@@ -0,0 +1,4137 @@
1
+ {
2
+ "version": "1.3.0",
3
+ "screens": {
4
+ "NAV": {
5
+ "viewable": false,
6
+ "description": "Global navigation chrome (tab bar / sidebar / top bar)."
7
+ },
8
+ "LANDING": {
9
+ "viewable": true,
10
+ "description": "Signed-out marketing/landing screen."
11
+ },
12
+ "LOGIN": {
13
+ "viewable": true,
14
+ "description": "Sign-in (phone/email OTP, password, social, passkey)."
15
+ },
16
+ "REDEEM_INVITE": {
17
+ "viewable": true,
18
+ "description": "Invite redemption + account creation."
19
+ },
20
+ "ONBOARDING": {
21
+ "viewable": true,
22
+ "description": "First-run profile wizard."
23
+ },
24
+ "DISCOVER": {
25
+ "viewable": true,
26
+ "description": "Discovery deck of candidate profiles."
27
+ },
28
+ "LIKE_COMPOSER": {
29
+ "viewable": true,
30
+ "description": "Comment-to-like / rose composer sheet."
31
+ },
32
+ "LIKES_YOU": {
33
+ "viewable": true,
34
+ "description": "Received likes (\"Likes You\")."
35
+ },
36
+ "CHAT": {
37
+ "viewable": true,
38
+ "description": "Conversation surface (match list/switcher + thread)."
39
+ },
40
+ "CHAT_SETTINGS": {
41
+ "viewable": true,
42
+ "description": "Per-user chat privacy settings."
43
+ },
44
+ "NOTIFICATIONS": {
45
+ "viewable": true,
46
+ "description": "In-app notification center."
47
+ },
48
+ "PROFILE": {
49
+ "viewable": true,
50
+ "description": "The user's own profile hub."
51
+ },
52
+ "PROFILE_EDIT": {
53
+ "viewable": true,
54
+ "description": "Editing photos, prompts, voice and details."
55
+ },
56
+ "PROFILE_PREVIEW": {
57
+ "viewable": true,
58
+ "description": "Preview of the own profile as others see it."
59
+ },
60
+ "PREFERENCES": {
61
+ "viewable": true,
62
+ "description": "Matching / discovery preferences."
63
+ },
64
+ "SETTINGS": {
65
+ "viewable": true,
66
+ "description": "Account, security, appearance and danger-zone settings."
67
+ },
68
+ "PAYWALL": {
69
+ "viewable": true,
70
+ "description": "Membership comparison / upgrade."
71
+ },
72
+ "LIVENESS": {
73
+ "viewable": true,
74
+ "description": "Identity (liveness) verification."
75
+ },
76
+ "PHOTO_VIEWER": {
77
+ "viewable": true,
78
+ "description": "Full-screen photo viewer."
79
+ },
80
+ "SEARCH": {
81
+ "viewable": true,
82
+ "description": "Search / explore people."
83
+ },
84
+ "CREATE": {
85
+ "viewable": true,
86
+ "description": "Create menu (shortcuts to add a photo / prompt / voice note)."
87
+ },
88
+ "SHARED": {
89
+ "viewable": false,
90
+ "description": "Shared components hosted by many screens (alerts, toasts, phone field, voice recorder). Pair with `context` = host screen."
91
+ }
92
+ },
93
+ "tabs": [
94
+ "DISCOVER",
95
+ "LIKES_YOU",
96
+ "CHAT",
97
+ "PROFILE"
98
+ ],
99
+ "enums": {
100
+ "Platform": {
101
+ "description": "Client platform (from the X-OneHook-Platform header).",
102
+ "values": [
103
+ "web",
104
+ "ios",
105
+ "android"
106
+ ]
107
+ },
108
+ "Screen": {
109
+ "description": "Any product surface (incl. non-viewable chrome).",
110
+ "values": [
111
+ "NAV",
112
+ "LANDING",
113
+ "LOGIN",
114
+ "REDEEM_INVITE",
115
+ "ONBOARDING",
116
+ "DISCOVER",
117
+ "LIKE_COMPOSER",
118
+ "LIKES_YOU",
119
+ "CHAT",
120
+ "CHAT_SETTINGS",
121
+ "NOTIFICATIONS",
122
+ "PROFILE",
123
+ "PROFILE_EDIT",
124
+ "PROFILE_PREVIEW",
125
+ "PREFERENCES",
126
+ "SETTINGS",
127
+ "PAYWALL",
128
+ "LIVENESS",
129
+ "PHOTO_VIEWER",
130
+ "SEARCH",
131
+ "CREATE",
132
+ "SHARED"
133
+ ],
134
+ "aliases": {
135
+ "DISCOVERY": "DISCOVER",
136
+ "MATCHES": "CHAT",
137
+ "LIKES": "LIKES_YOU"
138
+ }
139
+ },
140
+ "ViewableScreen": {
141
+ "description": "A surface that can be the subject of screen_view, or the `context` of another signal.",
142
+ "values": [
143
+ "LANDING",
144
+ "LOGIN",
145
+ "REDEEM_INVITE",
146
+ "ONBOARDING",
147
+ "DISCOVER",
148
+ "LIKE_COMPOSER",
149
+ "LIKES_YOU",
150
+ "CHAT",
151
+ "CHAT_SETTINGS",
152
+ "NOTIFICATIONS",
153
+ "PROFILE",
154
+ "PROFILE_EDIT",
155
+ "PROFILE_PREVIEW",
156
+ "PREFERENCES",
157
+ "SETTINGS",
158
+ "PAYWALL",
159
+ "LIVENESS",
160
+ "PHOTO_VIEWER",
161
+ "SEARCH",
162
+ "CREATE"
163
+ ],
164
+ "aliases": {
165
+ "DISCOVERY": "DISCOVER",
166
+ "MATCHES": "CHAT",
167
+ "LIKES": "LIKES_YOU"
168
+ }
169
+ },
170
+ "TabScreen": {
171
+ "description": "Main-shell tabs.",
172
+ "values": [
173
+ "DISCOVER",
174
+ "LIKES_YOU",
175
+ "CHAT",
176
+ "PROFILE"
177
+ ],
178
+ "aliases": {
179
+ "DISCOVERY": "DISCOVER",
180
+ "MATCHES": "CHAT",
181
+ "LIKES": "LIKES_YOU"
182
+ }
183
+ },
184
+ "UiAction": {
185
+ "description": "The standard verbs for a UI interaction. Every platform uses these and only these.",
186
+ "values": [
187
+ "tap",
188
+ "long_press",
189
+ "submit",
190
+ "toggle",
191
+ "select",
192
+ "dismiss"
193
+ ],
194
+ "aliases": {
195
+ "click": "tap",
196
+ "press": "tap",
197
+ "touch_up_inside": "tap",
198
+ "longpress": "long_press"
199
+ }
200
+ },
201
+ "UiElementKind": {
202
+ "description": "Kind of control (informational; drives the default action).",
203
+ "values": [
204
+ "button",
205
+ "tab",
206
+ "toggle",
207
+ "link",
208
+ "list_item",
209
+ "menu_item",
210
+ "dialog_button",
211
+ "gesture",
212
+ "segmented"
213
+ ]
214
+ },
215
+ "SwipeDirection": {
216
+ "description": "Discovery decision direction: left = pass, right = like, up = rose/super.",
217
+ "values": [
218
+ "left",
219
+ "right",
220
+ "up"
221
+ ],
222
+ "aliases": {
223
+ "pass": "left",
224
+ "like": "right",
225
+ "rose": "up",
226
+ "super": "up"
227
+ }
228
+ },
229
+ "MediaType": {
230
+ "description": "Media element type.",
231
+ "values": [
232
+ "image",
233
+ "video",
234
+ "voice"
235
+ ],
236
+ "aliases": {
237
+ "photo": "image",
238
+ "audio": "voice"
239
+ }
240
+ },
241
+ "ProfileSection": {
242
+ "description": "Profile sections a viewer can dwell on.",
243
+ "values": [
244
+ "PHOTOS",
245
+ "BIO",
246
+ "INTERESTS",
247
+ "PROMPTS",
248
+ "VOICE"
249
+ ],
250
+ "aliases": {
251
+ "ABOUT": "BIO"
252
+ }
253
+ },
254
+ "LikeTargetType": {
255
+ "description": "Profile element a comment-to-like targets.",
256
+ "values": [
257
+ "PHOTO",
258
+ "VIDEO",
259
+ "VOICE",
260
+ "PROMPT",
261
+ "INTEREST",
262
+ "BIO"
263
+ ]
264
+ },
265
+ "SafetyAction": {
266
+ "description": "Safety UI intents (the action itself is server-authoritative).",
267
+ "values": [
268
+ "unmatch",
269
+ "block",
270
+ "report"
271
+ ]
272
+ },
273
+ "CardVariant": {
274
+ "description": "Which discovery card design produced the signal (segment metrics by design).",
275
+ "values": [
276
+ "interleaved",
277
+ "swipe",
278
+ "feed"
279
+ ]
280
+ },
281
+ "NotificationType": {
282
+ "description": "Kind of notification that was opened.",
283
+ "values": [
284
+ "new_match",
285
+ "new_like",
286
+ "new_message",
287
+ "reengagement",
288
+ "other"
289
+ ],
290
+ "aliases": {
291
+ "MUTUAL_MATCH": "new_match",
292
+ "PROFILE_LIKED": "new_like",
293
+ "SOMETHING_NEW": "reengagement",
294
+ "unknown": "other"
295
+ }
296
+ },
297
+ "NotificationChannel": {
298
+ "description": "Delivery channel of an opened notification.",
299
+ "values": [
300
+ "push",
301
+ "in_app"
302
+ ]
303
+ },
304
+ "HookedStateAction": {
305
+ "description": "Reaction to the \"one connection at a time\" (hooked) overlay.",
306
+ "values": [
307
+ "shown",
308
+ "go_to_chat",
309
+ "dismiss"
310
+ ]
311
+ }
312
+ },
313
+ "uiElements": {
314
+ "nav.tab_select": {
315
+ "screen": "NAV",
316
+ "kind": "tab",
317
+ "description": "Switch main tab. value = destination tab screen.",
318
+ "actions": [
319
+ "select"
320
+ ],
321
+ "values": [
322
+ "DISCOVER",
323
+ "LIKES_YOU",
324
+ "CHAT",
325
+ "PROFILE"
326
+ ],
327
+ "platforms": [
328
+ "web",
329
+ "ios",
330
+ "android"
331
+ ],
332
+ "deprecated": null
333
+ },
334
+ "nav.search_open": {
335
+ "screen": "NAV",
336
+ "kind": "button",
337
+ "description": "Open search / explore.",
338
+ "actions": [
339
+ "tap",
340
+ "dismiss"
341
+ ],
342
+ "values": null,
343
+ "platforms": [
344
+ "web"
345
+ ],
346
+ "deprecated": null
347
+ },
348
+ "nav.menu_open": {
349
+ "screen": "NAV",
350
+ "kind": "button",
351
+ "description": "Open the \"more\" / hamburger menu.",
352
+ "actions": [
353
+ "tap",
354
+ "dismiss"
355
+ ],
356
+ "values": null,
357
+ "platforms": [
358
+ "web"
359
+ ],
360
+ "deprecated": null
361
+ },
362
+ "nav.back": {
363
+ "screen": "NAV",
364
+ "kind": "button",
365
+ "description": "In-app back navigation (top bar back arrow).",
366
+ "actions": [
367
+ "tap"
368
+ ],
369
+ "values": null,
370
+ "platforms": [
371
+ "web"
372
+ ],
373
+ "deprecated": null
374
+ },
375
+ "nav.home_logo": {
376
+ "screen": "NAV",
377
+ "kind": "link",
378
+ "description": "Tap the in-app wordmark / logo (go home).",
379
+ "actions": [
380
+ "tap"
381
+ ],
382
+ "values": null,
383
+ "platforms": [
384
+ "web"
385
+ ],
386
+ "deprecated": null
387
+ },
388
+ "nav.hooked_go_to_chat": {
389
+ "screen": "NAV",
390
+ "kind": "button",
391
+ "description": "Hooked (one connection at a time) overlay: go to the conversation.",
392
+ "actions": [
393
+ "tap"
394
+ ],
395
+ "values": null,
396
+ "platforms": [
397
+ "web",
398
+ "ios"
399
+ ],
400
+ "deprecated": null
401
+ },
402
+ "nav.hooked_dismiss": {
403
+ "screen": "NAV",
404
+ "kind": "button",
405
+ "description": "Hooked overlay: dismiss / keep browsing.",
406
+ "actions": [
407
+ "tap",
408
+ "dismiss"
409
+ ],
410
+ "values": null,
411
+ "platforms": [
412
+ "ios"
413
+ ],
414
+ "deprecated": null
415
+ },
416
+ "landing.get_started": {
417
+ "screen": "LANDING",
418
+ "kind": "button",
419
+ "description": "Get started (start invite redemption / sign-up).",
420
+ "actions": [
421
+ "tap"
422
+ ],
423
+ "values": null,
424
+ "platforms": [
425
+ "web",
426
+ "ios",
427
+ "android"
428
+ ],
429
+ "deprecated": null
430
+ },
431
+ "landing.login": {
432
+ "screen": "LANDING",
433
+ "kind": "button",
434
+ "description": "Go to sign-in.",
435
+ "actions": [
436
+ "tap"
437
+ ],
438
+ "values": null,
439
+ "platforms": [
440
+ "web",
441
+ "ios",
442
+ "android"
443
+ ],
444
+ "deprecated": null
445
+ },
446
+ "landing.policy_link": {
447
+ "screen": "LANDING",
448
+ "kind": "link",
449
+ "description": "Open terms / privacy / cookie policy.",
450
+ "actions": [
451
+ "tap"
452
+ ],
453
+ "values": null,
454
+ "platforms": [
455
+ "web",
456
+ "ios",
457
+ "android"
458
+ ],
459
+ "deprecated": null
460
+ },
461
+ "landing.home_link": {
462
+ "screen": "LANDING",
463
+ "kind": "link",
464
+ "description": "Signed-out site header wordmark / close (back to the landing page).",
465
+ "actions": [
466
+ "tap"
467
+ ],
468
+ "values": null,
469
+ "platforms": [
470
+ "web"
471
+ ],
472
+ "deprecated": null
473
+ },
474
+ "landing.open_in_app": {
475
+ "screen": "LANDING",
476
+ "kind": "link",
477
+ "description": "Open in app / app-store link.",
478
+ "actions": [
479
+ "tap"
480
+ ],
481
+ "values": null,
482
+ "platforms": [
483
+ "web"
484
+ ],
485
+ "deprecated": null
486
+ },
487
+ "landing.nav_link": {
488
+ "screen": "LANDING",
489
+ "kind": "link",
490
+ "description": "Marketing navigation link. value = destination.",
491
+ "actions": [
492
+ "tap"
493
+ ],
494
+ "values": [
495
+ "philosophy",
496
+ "how_it_works",
497
+ "pricing",
498
+ "contact",
499
+ "careers",
500
+ "science"
501
+ ],
502
+ "platforms": [
503
+ "web"
504
+ ],
505
+ "deprecated": null
506
+ },
507
+ "landing.social_link": {
508
+ "screen": "LANDING",
509
+ "kind": "link",
510
+ "description": "Social channel link. value = network.",
511
+ "actions": [
512
+ "tap"
513
+ ],
514
+ "values": [
515
+ "instagram",
516
+ "facebook",
517
+ "x",
518
+ "youtube",
519
+ "linkedin",
520
+ "tiktok",
521
+ "threads",
522
+ "other"
523
+ ],
524
+ "platforms": [
525
+ "web",
526
+ "ios"
527
+ ],
528
+ "deprecated": null
529
+ },
530
+ "landing.mobile_menu_toggle": {
531
+ "screen": "LANDING",
532
+ "kind": "toggle",
533
+ "description": "Open/close the marketing mobile nav. value = new state.",
534
+ "actions": [
535
+ "toggle"
536
+ ],
537
+ "values": [
538
+ "open",
539
+ "closed"
540
+ ],
541
+ "platforms": [
542
+ "web"
543
+ ],
544
+ "deprecated": null
545
+ },
546
+ "landing.section_nav": {
547
+ "screen": "LANDING",
548
+ "kind": "link",
549
+ "description": "Jump to an in-page landing section. value = section.",
550
+ "actions": [
551
+ "tap"
552
+ ],
553
+ "values": [
554
+ "philosophy",
555
+ "features",
556
+ "under_the_hood",
557
+ "get_app"
558
+ ],
559
+ "platforms": [
560
+ "web"
561
+ ],
562
+ "deprecated": null
563
+ },
564
+ "landing.email_link": {
565
+ "screen": "LANDING",
566
+ "kind": "link",
567
+ "description": "Mailto link on a public page. value = mailbox.",
568
+ "actions": [
569
+ "tap"
570
+ ],
571
+ "values": [
572
+ "privacy",
573
+ "security",
574
+ "support",
575
+ "legal",
576
+ "careers",
577
+ "other"
578
+ ],
579
+ "platforms": [
580
+ "web"
581
+ ],
582
+ "deprecated": null
583
+ },
584
+ "landing.pricing_period_select": {
585
+ "screen": "LANDING",
586
+ "kind": "segmented",
587
+ "description": "Public pricing page: choose billing period.",
588
+ "actions": [
589
+ "select",
590
+ "tap"
591
+ ],
592
+ "values": null,
593
+ "platforms": [
594
+ "web"
595
+ ],
596
+ "deprecated": null
597
+ },
598
+ "landing.careers_apply": {
599
+ "screen": "LANDING",
600
+ "kind": "button",
601
+ "description": "Careers: apply (optionally for a role; targetId = role id).",
602
+ "actions": [
603
+ "tap"
604
+ ],
605
+ "values": null,
606
+ "platforms": [
607
+ "web"
608
+ ],
609
+ "deprecated": null
610
+ },
611
+ "landing.demo_interact": {
612
+ "screen": "LANDING",
613
+ "kind": "button",
614
+ "description": "Interact with a public-page demo / explainer. value = demo control.",
615
+ "actions": [
616
+ "tap"
617
+ ],
618
+ "values": [
619
+ "opener_shuffle",
620
+ "relationship_mode",
621
+ "how_it_works_prev",
622
+ "how_it_works_next",
623
+ "how_it_works_step",
624
+ "mascot_video",
625
+ "mascot",
626
+ "science_chapter",
627
+ "science_signal_kind",
628
+ "science_signal_send",
629
+ "science_tab",
630
+ "science_swipe",
631
+ "science_erasure"
632
+ ],
633
+ "platforms": [
634
+ "web"
635
+ ],
636
+ "deprecated": null
637
+ },
638
+ "landing.chatbot_widget": {
639
+ "screen": "LANDING",
640
+ "kind": "button",
641
+ "description": "Public chatbot widget. value = control.",
642
+ "actions": [
643
+ "tap"
644
+ ],
645
+ "values": [
646
+ "open",
647
+ "close",
648
+ "fullscreen",
649
+ "start",
650
+ "send"
651
+ ],
652
+ "platforms": [
653
+ "web"
654
+ ],
655
+ "deprecated": null
656
+ },
657
+ "landing.notice_retry": {
658
+ "screen": "LANDING",
659
+ "kind": "button",
660
+ "description": "\"Finish in app\" notice: retry.",
661
+ "actions": [
662
+ "tap"
663
+ ],
664
+ "values": null,
665
+ "platforms": [
666
+ "web"
667
+ ],
668
+ "deprecated": null
669
+ },
670
+ "login.submit": {
671
+ "screen": "LOGIN",
672
+ "kind": "button",
673
+ "description": "Primary action. value = step performed.",
674
+ "actions": [
675
+ "submit"
676
+ ],
677
+ "values": [
678
+ "request_otp",
679
+ "verify_otp",
680
+ "password",
681
+ "reset_password"
682
+ ],
683
+ "platforms": [
684
+ "web",
685
+ "ios",
686
+ "android"
687
+ ],
688
+ "deprecated": null
689
+ },
690
+ "login.google": {
691
+ "screen": "LOGIN",
692
+ "kind": "button",
693
+ "description": "Continue with Google.",
694
+ "actions": [
695
+ "tap"
696
+ ],
697
+ "values": null,
698
+ "platforms": [
699
+ "web",
700
+ "ios",
701
+ "android"
702
+ ],
703
+ "deprecated": null
704
+ },
705
+ "login.apple": {
706
+ "screen": "LOGIN",
707
+ "kind": "button",
708
+ "description": "Continue with Apple.",
709
+ "actions": [
710
+ "tap"
711
+ ],
712
+ "values": null,
713
+ "platforms": [
714
+ "web",
715
+ "ios"
716
+ ],
717
+ "deprecated": null
718
+ },
719
+ "login.passkey": {
720
+ "screen": "LOGIN",
721
+ "kind": "button",
722
+ "description": "Sign in with a passkey.",
723
+ "actions": [
724
+ "tap"
725
+ ],
726
+ "values": null,
727
+ "platforms": [
728
+ "ios"
729
+ ],
730
+ "deprecated": null
731
+ },
732
+ "login.identifier_mode": {
733
+ "screen": "LOGIN",
734
+ "kind": "toggle",
735
+ "description": "Switch phone/email identifier. value = new mode.",
736
+ "actions": [
737
+ "toggle"
738
+ ],
739
+ "values": [
740
+ "phone",
741
+ "email"
742
+ ],
743
+ "platforms": [
744
+ "web",
745
+ "ios",
746
+ "android"
747
+ ],
748
+ "deprecated": null
749
+ },
750
+ "login.password_mode": {
751
+ "screen": "LOGIN",
752
+ "kind": "toggle",
753
+ "description": "Switch password/OTP. value = new mode.",
754
+ "actions": [
755
+ "toggle"
756
+ ],
757
+ "values": [
758
+ "password",
759
+ "otp"
760
+ ],
761
+ "platforms": [
762
+ "web",
763
+ "ios",
764
+ "android"
765
+ ],
766
+ "deprecated": null
767
+ },
768
+ "login.forgot_password": {
769
+ "screen": "LOGIN",
770
+ "kind": "link",
771
+ "description": "Forgot password.",
772
+ "actions": [
773
+ "tap"
774
+ ],
775
+ "values": null,
776
+ "platforms": [
777
+ "web",
778
+ "ios",
779
+ "android"
780
+ ],
781
+ "deprecated": null
782
+ },
783
+ "login.resend_code": {
784
+ "screen": "LOGIN",
785
+ "kind": "link",
786
+ "description": "Resend the one-time code.",
787
+ "actions": [
788
+ "tap"
789
+ ],
790
+ "values": null,
791
+ "platforms": [
792
+ "web",
793
+ "ios"
794
+ ],
795
+ "deprecated": null
796
+ },
797
+ "login.redeem_invite": {
798
+ "screen": "LOGIN",
799
+ "kind": "link",
800
+ "description": "I have an invite (go to redemption).",
801
+ "actions": [
802
+ "tap"
803
+ ],
804
+ "values": null,
805
+ "platforms": [
806
+ "web",
807
+ "ios"
808
+ ],
809
+ "deprecated": null
810
+ },
811
+ "login.close": {
812
+ "screen": "LOGIN",
813
+ "kind": "button",
814
+ "description": "Close / back out of sign-in.",
815
+ "actions": [
816
+ "tap"
817
+ ],
818
+ "values": null,
819
+ "platforms": [
820
+ "web",
821
+ "ios",
822
+ "android"
823
+ ],
824
+ "deprecated": null
825
+ },
826
+ "login.passkey_setup": {
827
+ "screen": "LOGIN",
828
+ "kind": "button",
829
+ "description": "Post-sign-in account setup step. value = step action.",
830
+ "actions": [
831
+ "tap"
832
+ ],
833
+ "values": [
834
+ "email_submit",
835
+ "code_submit",
836
+ "change_email",
837
+ "skip_to_passkey",
838
+ "passkey_create",
839
+ "skip_to_app"
840
+ ],
841
+ "platforms": [
842
+ "web"
843
+ ],
844
+ "deprecated": null
845
+ },
846
+ "redeem_invite.submit": {
847
+ "screen": "REDEEM_INVITE",
848
+ "kind": "button",
849
+ "description": "Primary step action. value = step performed.",
850
+ "actions": [
851
+ "submit"
852
+ ],
853
+ "values": [
854
+ "validate_invite",
855
+ "send_otp",
856
+ "create_account",
857
+ "verify_sign_in_otp"
858
+ ],
859
+ "platforms": [
860
+ "web",
861
+ "ios",
862
+ "android"
863
+ ],
864
+ "deprecated": null
865
+ },
866
+ "redeem_invite.back": {
867
+ "screen": "REDEEM_INVITE",
868
+ "kind": "button",
869
+ "description": "Previous step.",
870
+ "actions": [
871
+ "tap"
872
+ ],
873
+ "values": null,
874
+ "platforms": [
875
+ "web",
876
+ "android"
877
+ ],
878
+ "deprecated": null
879
+ },
880
+ "redeem_invite.login": {
881
+ "screen": "REDEEM_INVITE",
882
+ "kind": "link",
883
+ "description": "I already have an account (go to sign-in).",
884
+ "actions": [
885
+ "tap"
886
+ ],
887
+ "values": null,
888
+ "platforms": [
889
+ "web",
890
+ "ios",
891
+ "android"
892
+ ],
893
+ "deprecated": null
894
+ },
895
+ "redeem_invite.close": {
896
+ "screen": "REDEEM_INVITE",
897
+ "kind": "button",
898
+ "description": "Close the redemption flow.",
899
+ "actions": [
900
+ "tap"
901
+ ],
902
+ "values": null,
903
+ "platforms": [
904
+ "ios",
905
+ "android"
906
+ ],
907
+ "deprecated": null
908
+ },
909
+ "redeem_invite.resend_code": {
910
+ "screen": "REDEEM_INVITE",
911
+ "kind": "link",
912
+ "description": "Resend the one-time code during redemption.",
913
+ "actions": [
914
+ "tap"
915
+ ],
916
+ "values": null,
917
+ "platforms": [
918
+ "web",
919
+ "ios"
920
+ ],
921
+ "deprecated": null
922
+ },
923
+ "onboarding.next": {
924
+ "screen": "ONBOARDING",
925
+ "kind": "button",
926
+ "description": "Advance the wizard. value = step being completed.",
927
+ "actions": [
928
+ "submit"
929
+ ],
930
+ "values": [
931
+ "basics",
932
+ "photos",
933
+ "media",
934
+ "prompts",
935
+ "details"
936
+ ],
937
+ "platforms": [
938
+ "web",
939
+ "ios"
940
+ ],
941
+ "deprecated": null
942
+ },
943
+ "onboarding.back": {
944
+ "screen": "ONBOARDING",
945
+ "kind": "button",
946
+ "description": "Previous wizard step.",
947
+ "actions": [
948
+ "tap"
949
+ ],
950
+ "values": null,
951
+ "platforms": [
952
+ "web",
953
+ "ios"
954
+ ],
955
+ "deprecated": null
956
+ },
957
+ "onboarding.finish": {
958
+ "screen": "ONBOARDING",
959
+ "kind": "button",
960
+ "description": "Complete onboarding.",
961
+ "actions": [
962
+ "submit"
963
+ ],
964
+ "values": null,
965
+ "platforms": [
966
+ "web",
967
+ "ios",
968
+ "android"
969
+ ],
970
+ "deprecated": null
971
+ },
972
+ "onboarding.skip_sign_out": {
973
+ "screen": "ONBOARDING",
974
+ "kind": "button",
975
+ "description": "Skip onboarding and sign out.",
976
+ "actions": [
977
+ "tap"
978
+ ],
979
+ "values": null,
980
+ "platforms": [
981
+ "web",
982
+ "ios",
983
+ "android"
984
+ ],
985
+ "deprecated": null
986
+ },
987
+ "onboarding.skip_sign_out_confirm": {
988
+ "screen": "ONBOARDING",
989
+ "kind": "dialog_button",
990
+ "description": "Confirm skipping onboarding and signing out.",
991
+ "actions": [
992
+ "submit",
993
+ "dismiss"
994
+ ],
995
+ "values": null,
996
+ "platforms": [
997
+ "ios",
998
+ "android"
999
+ ],
1000
+ "deprecated": null
1001
+ },
1002
+ "onboarding.photo_add": {
1003
+ "screen": "ONBOARDING",
1004
+ "kind": "button",
1005
+ "description": "Add a photo.",
1006
+ "actions": [
1007
+ "tap"
1008
+ ],
1009
+ "values": null,
1010
+ "platforms": [
1011
+ "web",
1012
+ "ios"
1013
+ ],
1014
+ "deprecated": null
1015
+ },
1016
+ "onboarding.photo_remove": {
1017
+ "screen": "ONBOARDING",
1018
+ "kind": "button",
1019
+ "description": "Remove a photo.",
1020
+ "actions": [
1021
+ "tap"
1022
+ ],
1023
+ "values": null,
1024
+ "platforms": [
1025
+ "web",
1026
+ "ios"
1027
+ ],
1028
+ "deprecated": null
1029
+ },
1030
+ "onboarding.photo_remove_confirm": {
1031
+ "screen": "ONBOARDING",
1032
+ "kind": "dialog_button",
1033
+ "description": "Confirm removing a photo.",
1034
+ "actions": [
1035
+ "submit",
1036
+ "dismiss"
1037
+ ],
1038
+ "values": null,
1039
+ "platforms": [
1040
+ "web"
1041
+ ],
1042
+ "deprecated": null
1043
+ },
1044
+ "onboarding.prompt_add": {
1045
+ "screen": "ONBOARDING",
1046
+ "kind": "button",
1047
+ "description": "Add a written prompt.",
1048
+ "actions": [
1049
+ "tap"
1050
+ ],
1051
+ "values": null,
1052
+ "platforms": [
1053
+ "web",
1054
+ "ios"
1055
+ ],
1056
+ "deprecated": null
1057
+ },
1058
+ "onboarding.prompt_remove": {
1059
+ "screen": "ONBOARDING",
1060
+ "kind": "button",
1061
+ "description": "Remove a written prompt.",
1062
+ "actions": [
1063
+ "tap"
1064
+ ],
1065
+ "values": null,
1066
+ "platforms": [
1067
+ "web",
1068
+ "ios"
1069
+ ],
1070
+ "deprecated": null
1071
+ },
1072
+ "onboarding.voice_add": {
1073
+ "screen": "ONBOARDING",
1074
+ "kind": "button",
1075
+ "description": "Record / upload a voice prompt.",
1076
+ "actions": [
1077
+ "tap"
1078
+ ],
1079
+ "values": null,
1080
+ "platforms": [
1081
+ "web",
1082
+ "ios"
1083
+ ],
1084
+ "deprecated": null
1085
+ },
1086
+ "onboarding.voice_remove": {
1087
+ "screen": "ONBOARDING",
1088
+ "kind": "button",
1089
+ "description": "Remove the voice prompt.",
1090
+ "actions": [
1091
+ "tap"
1092
+ ],
1093
+ "values": null,
1094
+ "platforms": [
1095
+ "web",
1096
+ "ios"
1097
+ ],
1098
+ "deprecated": null
1099
+ },
1100
+ "onboarding.choice_select": {
1101
+ "screen": "ONBOARDING",
1102
+ "kind": "segmented",
1103
+ "description": "Pick an option (gender, interests, etc.).",
1104
+ "actions": [
1105
+ "select",
1106
+ "tap"
1107
+ ],
1108
+ "values": null,
1109
+ "platforms": [
1110
+ "web",
1111
+ "ios",
1112
+ "android"
1113
+ ],
1114
+ "deprecated": null
1115
+ },
1116
+ "discover.pass_button": {
1117
+ "screen": "DISCOVER",
1118
+ "kind": "button",
1119
+ "description": "Pass on the current candidate.",
1120
+ "actions": [
1121
+ "tap"
1122
+ ],
1123
+ "values": null,
1124
+ "platforms": [
1125
+ "web",
1126
+ "ios",
1127
+ "android"
1128
+ ],
1129
+ "deprecated": null
1130
+ },
1131
+ "discover.like_button": {
1132
+ "screen": "DISCOVER",
1133
+ "kind": "button",
1134
+ "description": "Like the current candidate (no comment).",
1135
+ "actions": [
1136
+ "tap"
1137
+ ],
1138
+ "values": null,
1139
+ "platforms": [
1140
+ "android"
1141
+ ],
1142
+ "deprecated": null
1143
+ },
1144
+ "discover.rose_button": {
1145
+ "screen": "DISCOVER",
1146
+ "kind": "button",
1147
+ "description": "Send a rose / super-like.",
1148
+ "actions": [
1149
+ "tap"
1150
+ ],
1151
+ "values": null,
1152
+ "platforms": [
1153
+ "web",
1154
+ "ios",
1155
+ "android"
1156
+ ],
1157
+ "deprecated": null
1158
+ },
1159
+ "discover.undo_button": {
1160
+ "screen": "DISCOVER",
1161
+ "kind": "button",
1162
+ "description": "Undo the last decision.",
1163
+ "actions": [
1164
+ "tap"
1165
+ ],
1166
+ "values": null,
1167
+ "platforms": [
1168
+ "ios"
1169
+ ],
1170
+ "deprecated": null
1171
+ },
1172
+ "discover.element_like": {
1173
+ "screen": "DISCOVER",
1174
+ "kind": "button",
1175
+ "description": "Like a specific profile element (opens composer). value = target type.",
1176
+ "actions": [
1177
+ "tap"
1178
+ ],
1179
+ "values": [
1180
+ "PHOTO",
1181
+ "VIDEO",
1182
+ "VOICE",
1183
+ "PROMPT",
1184
+ "INTEREST",
1185
+ "BIO"
1186
+ ],
1187
+ "platforms": [
1188
+ "web",
1189
+ "ios"
1190
+ ],
1191
+ "deprecated": null
1192
+ },
1193
+ "discover.photo_open": {
1194
+ "screen": "DISCOVER",
1195
+ "kind": "gesture",
1196
+ "description": "Open a candidate's photo full screen.",
1197
+ "actions": [
1198
+ "tap"
1199
+ ],
1200
+ "values": null,
1201
+ "platforms": [
1202
+ "web",
1203
+ "ios",
1204
+ "android"
1205
+ ],
1206
+ "deprecated": null
1207
+ },
1208
+ "discover.voice_play": {
1209
+ "screen": "DISCOVER",
1210
+ "kind": "toggle",
1211
+ "description": "Play/pause the voice prompt. value = new state.",
1212
+ "actions": [
1213
+ "toggle"
1214
+ ],
1215
+ "values": [
1216
+ "play",
1217
+ "pause"
1218
+ ],
1219
+ "platforms": [
1220
+ "web",
1221
+ "ios"
1222
+ ],
1223
+ "deprecated": null
1224
+ },
1225
+ "discover.preferences_open": {
1226
+ "screen": "DISCOVER",
1227
+ "kind": "button",
1228
+ "description": "Open discovery preferences.",
1229
+ "actions": [
1230
+ "tap",
1231
+ "dismiss"
1232
+ ],
1233
+ "values": null,
1234
+ "platforms": [
1235
+ "ios"
1236
+ ],
1237
+ "deprecated": null
1238
+ },
1239
+ "discover.likes_you_open": {
1240
+ "screen": "DISCOVER",
1241
+ "kind": "button",
1242
+ "description": "Open Likes You.",
1243
+ "actions": [
1244
+ "tap",
1245
+ "dismiss"
1246
+ ],
1247
+ "values": null,
1248
+ "platforms": [
1249
+ "ios",
1250
+ "android"
1251
+ ],
1252
+ "deprecated": null
1253
+ },
1254
+ "discover.add_hook_open": {
1255
+ "screen": "DISCOVER",
1256
+ "kind": "button",
1257
+ "description": "Add a connection by username / invite.",
1258
+ "actions": [
1259
+ "tap",
1260
+ "dismiss"
1261
+ ],
1262
+ "values": null,
1263
+ "platforms": [
1264
+ "ios"
1265
+ ],
1266
+ "deprecated": null
1267
+ },
1268
+ "discover.retry": {
1269
+ "screen": "DISCOVER",
1270
+ "kind": "button",
1271
+ "description": "Retry loading the deck.",
1272
+ "actions": [
1273
+ "tap"
1274
+ ],
1275
+ "values": null,
1276
+ "platforms": [
1277
+ "web",
1278
+ "ios",
1279
+ "android"
1280
+ ],
1281
+ "deprecated": null
1282
+ },
1283
+ "discover.add_hook_submit": {
1284
+ "screen": "DISCOVER",
1285
+ "kind": "button",
1286
+ "description": "Submit an add-by-username / invite connection request.",
1287
+ "actions": [
1288
+ "submit"
1289
+ ],
1290
+ "values": null,
1291
+ "platforms": [
1292
+ "web",
1293
+ "ios"
1294
+ ],
1295
+ "deprecated": null
1296
+ },
1297
+ "discover.upgrade_open": {
1298
+ "screen": "DISCOVER",
1299
+ "kind": "button",
1300
+ "description": "Upgrade prompt shown in discovery (e.g. undo upsell \"See plans\").",
1301
+ "actions": [
1302
+ "tap",
1303
+ "dismiss"
1304
+ ],
1305
+ "values": null,
1306
+ "platforms": [
1307
+ "ios"
1308
+ ],
1309
+ "deprecated": null
1310
+ },
1311
+ "like_composer.send": {
1312
+ "screen": "LIKE_COMPOSER",
1313
+ "kind": "button",
1314
+ "description": "Send the like with a comment.",
1315
+ "actions": [
1316
+ "submit"
1317
+ ],
1318
+ "values": null,
1319
+ "platforms": [
1320
+ "web",
1321
+ "ios",
1322
+ "android"
1323
+ ],
1324
+ "deprecated": null
1325
+ },
1326
+ "like_composer.send_without_comment": {
1327
+ "screen": "LIKE_COMPOSER",
1328
+ "kind": "button",
1329
+ "description": "Send the like without a comment.",
1330
+ "actions": [
1331
+ "submit"
1332
+ ],
1333
+ "values": null,
1334
+ "platforms": [
1335
+ "ios"
1336
+ ],
1337
+ "deprecated": null
1338
+ },
1339
+ "like_composer.cancel": {
1340
+ "screen": "LIKE_COMPOSER",
1341
+ "kind": "button",
1342
+ "description": "Close the composer without sending.",
1343
+ "actions": [
1344
+ "tap",
1345
+ "dismiss"
1346
+ ],
1347
+ "values": null,
1348
+ "platforms": [
1349
+ "web",
1350
+ "ios",
1351
+ "android"
1352
+ ],
1353
+ "deprecated": null
1354
+ },
1355
+ "like_composer.upgrade": {
1356
+ "screen": "LIKE_COMPOSER",
1357
+ "kind": "button",
1358
+ "description": "Upgrade prompt shown inside the composer.",
1359
+ "actions": [
1360
+ "tap",
1361
+ "dismiss"
1362
+ ],
1363
+ "values": null,
1364
+ "platforms": [
1365
+ "ios"
1366
+ ],
1367
+ "deprecated": null
1368
+ },
1369
+ "likes_you.profile_open": {
1370
+ "screen": "LIKES_YOU",
1371
+ "kind": "list_item",
1372
+ "description": "Open a liker profile. index = row, targetId = liker.",
1373
+ "actions": [
1374
+ "tap"
1375
+ ],
1376
+ "values": null,
1377
+ "platforms": [
1378
+ "web",
1379
+ "ios",
1380
+ "android"
1381
+ ],
1382
+ "deprecated": null
1383
+ },
1384
+ "likes_you.liked_item_open": {
1385
+ "screen": "LIKES_YOU",
1386
+ "kind": "gesture",
1387
+ "description": "Open the element of your profile they liked.",
1388
+ "actions": [
1389
+ "tap"
1390
+ ],
1391
+ "values": null,
1392
+ "platforms": [
1393
+ "web"
1394
+ ],
1395
+ "deprecated": null
1396
+ },
1397
+ "likes_you.refresh": {
1398
+ "screen": "LIKES_YOU",
1399
+ "kind": "button",
1400
+ "description": "Refresh the list.",
1401
+ "actions": [
1402
+ "tap"
1403
+ ],
1404
+ "values": null,
1405
+ "platforms": [
1406
+ "web",
1407
+ "android"
1408
+ ],
1409
+ "deprecated": null
1410
+ },
1411
+ "likes_you.retry": {
1412
+ "screen": "LIKES_YOU",
1413
+ "kind": "button",
1414
+ "description": "Retry after a load error.",
1415
+ "actions": [
1416
+ "tap"
1417
+ ],
1418
+ "values": null,
1419
+ "platforms": [
1420
+ "web",
1421
+ "ios",
1422
+ "android"
1423
+ ],
1424
+ "deprecated": null
1425
+ },
1426
+ "likes_you.close": {
1427
+ "screen": "LIKES_YOU",
1428
+ "kind": "button",
1429
+ "description": "Close / back out of Likes You (when presented modally).",
1430
+ "actions": [
1431
+ "tap",
1432
+ "dismiss"
1433
+ ],
1434
+ "values": null,
1435
+ "platforms": [
1436
+ "ios",
1437
+ "android"
1438
+ ],
1439
+ "deprecated": null
1440
+ },
1441
+ "chat.send_button": {
1442
+ "screen": "CHAT",
1443
+ "kind": "button",
1444
+ "description": "Send a message.",
1445
+ "actions": [
1446
+ "submit"
1447
+ ],
1448
+ "values": null,
1449
+ "platforms": [
1450
+ "web",
1451
+ "ios",
1452
+ "android"
1453
+ ],
1454
+ "deprecated": null
1455
+ },
1456
+ "chat.attach_button": {
1457
+ "screen": "CHAT",
1458
+ "kind": "button",
1459
+ "description": "Open the attachment chooser.",
1460
+ "actions": [
1461
+ "tap",
1462
+ "dismiss"
1463
+ ],
1464
+ "values": null,
1465
+ "platforms": [
1466
+ "web",
1467
+ "ios",
1468
+ "android"
1469
+ ],
1470
+ "deprecated": null
1471
+ },
1472
+ "chat.attach_option": {
1473
+ "screen": "CHAT",
1474
+ "kind": "menu_item",
1475
+ "description": "Pick an attachment source. value = source.",
1476
+ "actions": [
1477
+ "tap"
1478
+ ],
1479
+ "values": [
1480
+ "photo_video",
1481
+ "camera",
1482
+ "file",
1483
+ "voice"
1484
+ ],
1485
+ "platforms": [
1486
+ "web",
1487
+ "ios",
1488
+ "android"
1489
+ ],
1490
+ "deprecated": null
1491
+ },
1492
+ "chat.capture_option": {
1493
+ "screen": "CHAT",
1494
+ "kind": "menu_item",
1495
+ "description": "Camera capture kind. value = kind.",
1496
+ "actions": [
1497
+ "tap"
1498
+ ],
1499
+ "values": [
1500
+ "photo",
1501
+ "video"
1502
+ ],
1503
+ "platforms": [
1504
+ "android"
1505
+ ],
1506
+ "deprecated": null
1507
+ },
1508
+ "chat.voice_record_start": {
1509
+ "screen": "CHAT",
1510
+ "kind": "button",
1511
+ "description": "Start recording a voice note.",
1512
+ "actions": [
1513
+ "tap",
1514
+ "long_press"
1515
+ ],
1516
+ "values": null,
1517
+ "platforms": [
1518
+ "web",
1519
+ "ios",
1520
+ "android"
1521
+ ],
1522
+ "deprecated": null
1523
+ },
1524
+ "chat.voice_record_stop": {
1525
+ "screen": "CHAT",
1526
+ "kind": "button",
1527
+ "description": "Stop recording.",
1528
+ "actions": [
1529
+ "tap"
1530
+ ],
1531
+ "values": null,
1532
+ "platforms": [
1533
+ "ios",
1534
+ "android"
1535
+ ],
1536
+ "deprecated": null
1537
+ },
1538
+ "chat.voice_record_cancel": {
1539
+ "screen": "CHAT",
1540
+ "kind": "button",
1541
+ "description": "Discard the recording.",
1542
+ "actions": [
1543
+ "tap"
1544
+ ],
1545
+ "values": null,
1546
+ "platforms": [
1547
+ "web",
1548
+ "ios",
1549
+ "android"
1550
+ ],
1551
+ "deprecated": null
1552
+ },
1553
+ "chat.voice_send": {
1554
+ "screen": "CHAT",
1555
+ "kind": "button",
1556
+ "description": "Send the recorded voice note.",
1557
+ "actions": [
1558
+ "submit"
1559
+ ],
1560
+ "values": null,
1561
+ "platforms": [
1562
+ "web",
1563
+ "ios"
1564
+ ],
1565
+ "deprecated": null
1566
+ },
1567
+ "chat.conversation_switch": {
1568
+ "screen": "CHAT",
1569
+ "kind": "list_item",
1570
+ "description": "Switch to another conversation. index = position.",
1571
+ "actions": [
1572
+ "tap"
1573
+ ],
1574
+ "values": null,
1575
+ "platforms": [
1576
+ "web",
1577
+ "ios",
1578
+ "android"
1579
+ ],
1580
+ "deprecated": null
1581
+ },
1582
+ "chat.conversation_sort": {
1583
+ "screen": "CHAT",
1584
+ "kind": "menu_item",
1585
+ "description": "Change conversation ordering.",
1586
+ "actions": [
1587
+ "tap"
1588
+ ],
1589
+ "values": null,
1590
+ "platforms": [
1591
+ "web",
1592
+ "ios"
1593
+ ],
1594
+ "deprecated": null
1595
+ },
1596
+ "chat.conversation_sort_open": {
1597
+ "screen": "CHAT",
1598
+ "kind": "button",
1599
+ "description": "Open the conversation-ordering menu.",
1600
+ "actions": [
1601
+ "tap",
1602
+ "dismiss"
1603
+ ],
1604
+ "values": null,
1605
+ "platforms": [
1606
+ "web",
1607
+ "ios"
1608
+ ],
1609
+ "deprecated": null
1610
+ },
1611
+ "chat.conversation_switcher_open": {
1612
+ "screen": "CHAT",
1613
+ "kind": "button",
1614
+ "description": "Open the conversation switcher / picker.",
1615
+ "actions": [
1616
+ "tap",
1617
+ "dismiss"
1618
+ ],
1619
+ "values": null,
1620
+ "platforms": [
1621
+ "web",
1622
+ "ios"
1623
+ ],
1624
+ "deprecated": null
1625
+ },
1626
+ "chat.profile_open": {
1627
+ "screen": "CHAT",
1628
+ "kind": "button",
1629
+ "description": "Open the peer's profile (avatar / name).",
1630
+ "actions": [
1631
+ "tap",
1632
+ "dismiss"
1633
+ ],
1634
+ "values": null,
1635
+ "platforms": [
1636
+ "web",
1637
+ "ios",
1638
+ "android"
1639
+ ],
1640
+ "deprecated": null
1641
+ },
1642
+ "chat.safety_menu_open": {
1643
+ "screen": "CHAT",
1644
+ "kind": "button",
1645
+ "description": "Open the safety / options menu.",
1646
+ "actions": [
1647
+ "tap",
1648
+ "dismiss"
1649
+ ],
1650
+ "values": null,
1651
+ "platforms": [
1652
+ "web",
1653
+ "ios",
1654
+ "android"
1655
+ ],
1656
+ "deprecated": null
1657
+ },
1658
+ "chat.unmatch": {
1659
+ "screen": "CHAT",
1660
+ "kind": "menu_item",
1661
+ "description": "Unmatch (opens confirmation).",
1662
+ "actions": [
1663
+ "tap"
1664
+ ],
1665
+ "values": null,
1666
+ "platforms": [
1667
+ "ios",
1668
+ "android"
1669
+ ],
1670
+ "deprecated": null
1671
+ },
1672
+ "chat.report_spam": {
1673
+ "screen": "CHAT",
1674
+ "kind": "menu_item",
1675
+ "description": "Report as spam.",
1676
+ "actions": [
1677
+ "tap"
1678
+ ],
1679
+ "values": null,
1680
+ "platforms": [
1681
+ "web",
1682
+ "ios",
1683
+ "android"
1684
+ ],
1685
+ "deprecated": null
1686
+ },
1687
+ "chat.report_block": {
1688
+ "screen": "CHAT",
1689
+ "kind": "menu_item",
1690
+ "description": "Report and block.",
1691
+ "actions": [
1692
+ "tap"
1693
+ ],
1694
+ "values": null,
1695
+ "platforms": [
1696
+ "web",
1697
+ "ios",
1698
+ "android"
1699
+ ],
1700
+ "deprecated": null
1701
+ },
1702
+ "chat.block_confirm": {
1703
+ "screen": "CHAT",
1704
+ "kind": "dialog_button",
1705
+ "description": "Confirm block.",
1706
+ "actions": [
1707
+ "tap",
1708
+ "dismiss"
1709
+ ],
1710
+ "values": null,
1711
+ "platforms": [
1712
+ "web",
1713
+ "ios",
1714
+ "android"
1715
+ ],
1716
+ "deprecated": null
1717
+ },
1718
+ "chat.settings_open": {
1719
+ "screen": "CHAT",
1720
+ "kind": "button",
1721
+ "description": "Open chat settings.",
1722
+ "actions": [
1723
+ "tap",
1724
+ "dismiss"
1725
+ ],
1726
+ "values": null,
1727
+ "platforms": [
1728
+ "web",
1729
+ "ios"
1730
+ ],
1731
+ "deprecated": null
1732
+ },
1733
+ "chat.wallpaper_open": {
1734
+ "screen": "CHAT",
1735
+ "kind": "menu_item",
1736
+ "description": "Change chat wallpaper.",
1737
+ "actions": [
1738
+ "tap",
1739
+ "dismiss"
1740
+ ],
1741
+ "values": null,
1742
+ "platforms": [
1743
+ "web"
1744
+ ],
1745
+ "deprecated": null
1746
+ },
1747
+ "chat.add_hook_open": {
1748
+ "screen": "CHAT",
1749
+ "kind": "button",
1750
+ "description": "Add another connection.",
1751
+ "actions": [
1752
+ "tap",
1753
+ "dismiss"
1754
+ ],
1755
+ "values": null,
1756
+ "platforms": [
1757
+ "web",
1758
+ "ios"
1759
+ ],
1760
+ "deprecated": null
1761
+ },
1762
+ "chat.privacy_toggle": {
1763
+ "screen": "CHAT",
1764
+ "kind": "toggle",
1765
+ "description": "Hide/reveal the conversation (eye). value = new state.",
1766
+ "actions": [
1767
+ "toggle"
1768
+ ],
1769
+ "values": [
1770
+ "hidden",
1771
+ "visible"
1772
+ ],
1773
+ "platforms": [],
1774
+ "deprecated": "Never shipped on any platform (per-conversation hide was not built); kept so the id is never reused."
1775
+ },
1776
+ "chat.call": {
1777
+ "screen": "CHAT",
1778
+ "kind": "button",
1779
+ "description": "Start a voice call.",
1780
+ "actions": [
1781
+ "tap"
1782
+ ],
1783
+ "values": null,
1784
+ "platforms": [
1785
+ "ios"
1786
+ ],
1787
+ "deprecated": null
1788
+ },
1789
+ "chat.video_call": {
1790
+ "screen": "CHAT",
1791
+ "kind": "button",
1792
+ "description": "Start a video call.",
1793
+ "actions": [
1794
+ "tap"
1795
+ ],
1796
+ "values": null,
1797
+ "platforms": [
1798
+ "ios"
1799
+ ],
1800
+ "deprecated": null
1801
+ },
1802
+ "chat.media_open": {
1803
+ "screen": "CHAT",
1804
+ "kind": "gesture",
1805
+ "description": "Reveal / open an image or video attachment.",
1806
+ "actions": [
1807
+ "tap"
1808
+ ],
1809
+ "values": null,
1810
+ "platforms": [
1811
+ "web",
1812
+ "ios",
1813
+ "android"
1814
+ ],
1815
+ "deprecated": null
1816
+ },
1817
+ "chat.audio_play": {
1818
+ "screen": "CHAT",
1819
+ "kind": "toggle",
1820
+ "description": "Play/pause a voice note. value = new state.",
1821
+ "actions": [
1822
+ "toggle"
1823
+ ],
1824
+ "values": [
1825
+ "play",
1826
+ "pause"
1827
+ ],
1828
+ "platforms": [
1829
+ "web",
1830
+ "ios",
1831
+ "android"
1832
+ ],
1833
+ "deprecated": null
1834
+ },
1835
+ "chat.file_open": {
1836
+ "screen": "CHAT",
1837
+ "kind": "list_item",
1838
+ "description": "Open a file attachment.",
1839
+ "actions": [
1840
+ "tap"
1841
+ ],
1842
+ "values": null,
1843
+ "platforms": [
1844
+ "web",
1845
+ "ios",
1846
+ "android"
1847
+ ],
1848
+ "deprecated": null
1849
+ },
1850
+ "chat.message_delete": {
1851
+ "screen": "CHAT",
1852
+ "kind": "dialog_button",
1853
+ "description": "Delete a message.",
1854
+ "actions": [
1855
+ "tap",
1856
+ "dismiss"
1857
+ ],
1858
+ "values": null,
1859
+ "platforms": [
1860
+ "ios",
1861
+ "android"
1862
+ ],
1863
+ "deprecated": null
1864
+ },
1865
+ "chat.message_menu_open": {
1866
+ "screen": "CHAT",
1867
+ "kind": "gesture",
1868
+ "description": "Open the per-message actions (long-press).",
1869
+ "actions": [
1870
+ "long_press",
1871
+ "dismiss"
1872
+ ],
1873
+ "values": null,
1874
+ "platforms": [
1875
+ "ios",
1876
+ "android"
1877
+ ],
1878
+ "deprecated": null
1879
+ },
1880
+ "chat.report_reason_select": {
1881
+ "screen": "CHAT",
1882
+ "kind": "menu_item",
1883
+ "description": "Pick a report reason.",
1884
+ "actions": [
1885
+ "tap"
1886
+ ],
1887
+ "values": null,
1888
+ "platforms": [
1889
+ "web",
1890
+ "ios",
1891
+ "android"
1892
+ ],
1893
+ "deprecated": null
1894
+ },
1895
+ "chat.sensitive_reveal_confirm": {
1896
+ "screen": "CHAT",
1897
+ "kind": "dialog_button",
1898
+ "description": "Confirm revealing sensitive media.",
1899
+ "actions": [
1900
+ "submit",
1901
+ "dismiss"
1902
+ ],
1903
+ "values": null,
1904
+ "platforms": [
1905
+ "web",
1906
+ "ios"
1907
+ ],
1908
+ "deprecated": null
1909
+ },
1910
+ "chat.attachment_retry": {
1911
+ "screen": "CHAT",
1912
+ "kind": "button",
1913
+ "description": "Retry an attachment transfer. value = direction.",
1914
+ "actions": [
1915
+ "tap"
1916
+ ],
1917
+ "values": [
1918
+ "upload",
1919
+ "download"
1920
+ ],
1921
+ "platforms": [
1922
+ "web",
1923
+ "ios",
1924
+ "android"
1925
+ ],
1926
+ "deprecated": null
1927
+ },
1928
+ "chat.history_recover": {
1929
+ "screen": "CHAT",
1930
+ "kind": "button",
1931
+ "description": "Recover earlier message history.",
1932
+ "actions": [
1933
+ "tap",
1934
+ "dismiss"
1935
+ ],
1936
+ "values": null,
1937
+ "platforms": [
1938
+ "web",
1939
+ "ios",
1940
+ "android"
1941
+ ],
1942
+ "deprecated": null
1943
+ },
1944
+ "chat.mr_onehook_open": {
1945
+ "screen": "CHAT",
1946
+ "kind": "button",
1947
+ "description": "Open Mr OneHook (AI).",
1948
+ "actions": [
1949
+ "tap"
1950
+ ],
1951
+ "values": null,
1952
+ "platforms": [
1953
+ "web",
1954
+ "android"
1955
+ ],
1956
+ "deprecated": null
1957
+ },
1958
+ "chat.mr_onehook_close": {
1959
+ "screen": "CHAT",
1960
+ "kind": "button",
1961
+ "description": "Leave Mr OneHook.",
1962
+ "actions": [
1963
+ "tap"
1964
+ ],
1965
+ "values": null,
1966
+ "platforms": [
1967
+ "android"
1968
+ ],
1969
+ "deprecated": null
1970
+ },
1971
+ "chat.retry": {
1972
+ "screen": "CHAT",
1973
+ "kind": "button",
1974
+ "description": "Retry loading chat.",
1975
+ "actions": [
1976
+ "tap"
1977
+ ],
1978
+ "values": null,
1979
+ "platforms": [
1980
+ "web",
1981
+ "android"
1982
+ ],
1983
+ "deprecated": null
1984
+ },
1985
+ "chat.unmatch_confirm": {
1986
+ "screen": "CHAT",
1987
+ "kind": "dialog_button",
1988
+ "description": "Confirm unmatch / unhook from the confirmation dialog.",
1989
+ "actions": [
1990
+ "submit",
1991
+ "dismiss"
1992
+ ],
1993
+ "values": null,
1994
+ "platforms": [
1995
+ "ios",
1996
+ "android"
1997
+ ],
1998
+ "deprecated": null
1999
+ },
2000
+ "chat.profile_close": {
2001
+ "screen": "CHAT",
2002
+ "kind": "button",
2003
+ "description": "Close the peer's profile sheet / panel.",
2004
+ "actions": [
2005
+ "tap",
2006
+ "dismiss"
2007
+ ],
2008
+ "values": null,
2009
+ "platforms": [
2010
+ "ios",
2011
+ "android"
2012
+ ],
2013
+ "deprecated": null
2014
+ },
2015
+ "chat.mr_onehook_context_share": {
2016
+ "screen": "CHAT",
2017
+ "kind": "dialog_button",
2018
+ "description": "Confirm sharing local conversation excerpts with Mr OneHook.",
2019
+ "actions": [
2020
+ "submit",
2021
+ "dismiss"
2022
+ ],
2023
+ "values": null,
2024
+ "platforms": [
2025
+ "web",
2026
+ "ios",
2027
+ "android"
2028
+ ],
2029
+ "deprecated": null
2030
+ },
2031
+ "chat.mr_onehook_scope_open": {
2032
+ "screen": "CHAT",
2033
+ "kind": "button",
2034
+ "description": "Open the Mr OneHook scope picker.",
2035
+ "actions": [
2036
+ "tap",
2037
+ "dismiss"
2038
+ ],
2039
+ "values": null,
2040
+ "platforms": [
2041
+ "web"
2042
+ ],
2043
+ "deprecated": null
2044
+ },
2045
+ "chat.mr_onehook_scope_select": {
2046
+ "screen": "CHAT",
2047
+ "kind": "menu_item",
2048
+ "description": "Choose what Mr OneHook may use (product only / a match).",
2049
+ "actions": [
2050
+ "tap"
2051
+ ],
2052
+ "values": null,
2053
+ "platforms": [
2054
+ "web"
2055
+ ],
2056
+ "deprecated": null
2057
+ },
2058
+ "chat.intro_tour_open": {
2059
+ "screen": "CHAT",
2060
+ "kind": "button",
2061
+ "description": "Start the chat intro tour from the in-chat invitation.",
2062
+ "actions": [
2063
+ "tap"
2064
+ ],
2065
+ "values": null,
2066
+ "platforms": [
2067
+ "ios"
2068
+ ],
2069
+ "deprecated": null
2070
+ },
2071
+ "chat.intro_dismiss": {
2072
+ "screen": "CHAT",
2073
+ "kind": "button",
2074
+ "description": "Dismiss the chat intro invitation / stories.",
2075
+ "actions": [
2076
+ "tap",
2077
+ "dismiss"
2078
+ ],
2079
+ "values": null,
2080
+ "platforms": [
2081
+ "ios"
2082
+ ],
2083
+ "deprecated": null
2084
+ },
2085
+ "chat.intro_get_started": {
2086
+ "screen": "CHAT",
2087
+ "kind": "button",
2088
+ "description": "Final chat-intro CTA (go to Discover).",
2089
+ "actions": [
2090
+ "tap"
2091
+ ],
2092
+ "values": null,
2093
+ "platforms": [
2094
+ "ios"
2095
+ ],
2096
+ "deprecated": null
2097
+ },
2098
+ "chat.history_recover_method": {
2099
+ "screen": "CHAT",
2100
+ "kind": "menu_item",
2101
+ "description": "Pick how to recover message history. value = method.",
2102
+ "actions": [
2103
+ "tap",
2104
+ "dismiss"
2105
+ ],
2106
+ "values": [
2107
+ "device",
2108
+ "qr_scan",
2109
+ "qr_import",
2110
+ "passkey"
2111
+ ],
2112
+ "platforms": [
2113
+ "web",
2114
+ "ios",
2115
+ "android"
2116
+ ],
2117
+ "deprecated": null
2118
+ },
2119
+ "chat.history_recover_step": {
2120
+ "screen": "CHAT",
2121
+ "kind": "menu_item",
2122
+ "description": "Step inside the history-recovery flow. value = step.",
2123
+ "actions": [
2124
+ "tap"
2125
+ ],
2126
+ "values": [
2127
+ "retry",
2128
+ "qr_retry",
2129
+ "done",
2130
+ "reset_open",
2131
+ "cancel"
2132
+ ],
2133
+ "platforms": [
2134
+ "web",
2135
+ "ios",
2136
+ "android"
2137
+ ],
2138
+ "deprecated": null
2139
+ },
2140
+ "chat.history_reset_confirm": {
2141
+ "screen": "CHAT",
2142
+ "kind": "dialog_button",
2143
+ "description": "Confirm the last-resort history reset.",
2144
+ "actions": [
2145
+ "submit",
2146
+ "dismiss"
2147
+ ],
2148
+ "values": null,
2149
+ "platforms": [
2150
+ "web"
2151
+ ],
2152
+ "deprecated": null
2153
+ },
2154
+ "chat_settings.last_seen_select": {
2155
+ "screen": "CHAT_SETTINGS",
2156
+ "kind": "segmented",
2157
+ "description": "Choose last-seen visibility.",
2158
+ "actions": [
2159
+ "select",
2160
+ "tap"
2161
+ ],
2162
+ "values": null,
2163
+ "platforms": [
2164
+ "web",
2165
+ "ios"
2166
+ ],
2167
+ "deprecated": null
2168
+ },
2169
+ "chat_settings.disappearing_select": {
2170
+ "screen": "CHAT_SETTINGS",
2171
+ "kind": "segmented",
2172
+ "description": "Choose disappearing-message timer.",
2173
+ "actions": [
2174
+ "select",
2175
+ "tap"
2176
+ ],
2177
+ "values": null,
2178
+ "platforms": [
2179
+ "web",
2180
+ "ios"
2181
+ ],
2182
+ "deprecated": null
2183
+ },
2184
+ "chat_settings.notification_toggle": {
2185
+ "screen": "CHAT_SETTINGS",
2186
+ "kind": "toggle",
2187
+ "description": "Toggle a notification setting. value = new state, targetId = setting key.",
2188
+ "actions": [
2189
+ "toggle"
2190
+ ],
2191
+ "values": [
2192
+ "on",
2193
+ "off"
2194
+ ],
2195
+ "platforms": [
2196
+ "web",
2197
+ "ios"
2198
+ ],
2199
+ "deprecated": null
2200
+ },
2201
+ "chat_settings.privacy_toggle": {
2202
+ "screen": "CHAT_SETTINGS",
2203
+ "kind": "toggle",
2204
+ "description": "Toggle a privacy setting (read receipts, typing, ...). value = new state, targetId = setting key.",
2205
+ "actions": [
2206
+ "toggle"
2207
+ ],
2208
+ "values": [
2209
+ "on",
2210
+ "off"
2211
+ ],
2212
+ "platforms": [
2213
+ "web",
2214
+ "ios"
2215
+ ],
2216
+ "deprecated": null
2217
+ },
2218
+ "chat_settings.font_size_select": {
2219
+ "screen": "CHAT_SETTINGS",
2220
+ "kind": "segmented",
2221
+ "description": "Choose chat font size.",
2222
+ "actions": [
2223
+ "select",
2224
+ "tap"
2225
+ ],
2226
+ "values": null,
2227
+ "platforms": [
2228
+ "ios"
2229
+ ],
2230
+ "deprecated": null
2231
+ },
2232
+ "chat_settings.wallpaper_select": {
2233
+ "screen": "CHAT_SETTINGS",
2234
+ "kind": "segmented",
2235
+ "description": "Choose a chat wallpaper.",
2236
+ "actions": [
2237
+ "select",
2238
+ "tap"
2239
+ ],
2240
+ "values": null,
2241
+ "platforms": [
2242
+ "web",
2243
+ "ios"
2244
+ ],
2245
+ "deprecated": null
2246
+ },
2247
+ "chat_settings.export_chat": {
2248
+ "screen": "CHAT_SETTINGS",
2249
+ "kind": "button",
2250
+ "description": "Export a transcript. tap = open export; select = conversation chosen (targetId = match).",
2251
+ "actions": [
2252
+ "tap",
2253
+ "select",
2254
+ "dismiss"
2255
+ ],
2256
+ "values": null,
2257
+ "platforms": [
2258
+ "ios"
2259
+ ],
2260
+ "deprecated": null
2261
+ },
2262
+ "chat_settings.clear_cache": {
2263
+ "screen": "CHAT_SETTINGS",
2264
+ "kind": "button",
2265
+ "description": "Clear device-local chat media cache.",
2266
+ "actions": [
2267
+ "tap"
2268
+ ],
2269
+ "values": null,
2270
+ "platforms": [
2271
+ "ios"
2272
+ ],
2273
+ "deprecated": null
2274
+ },
2275
+ "notifications.item_open": {
2276
+ "screen": "NOTIFICATIONS",
2277
+ "kind": "list_item",
2278
+ "description": "Open a notification.",
2279
+ "actions": [
2280
+ "tap"
2281
+ ],
2282
+ "values": null,
2283
+ "platforms": [
2284
+ "ios"
2285
+ ],
2286
+ "deprecated": null
2287
+ },
2288
+ "notifications.item_dismiss": {
2289
+ "screen": "NOTIFICATIONS",
2290
+ "kind": "gesture",
2291
+ "description": "Dismiss a notification.",
2292
+ "actions": [
2293
+ "dismiss"
2294
+ ],
2295
+ "values": null,
2296
+ "platforms": [
2297
+ "ios"
2298
+ ],
2299
+ "deprecated": null
2300
+ },
2301
+ "profile.edit_open": {
2302
+ "screen": "PROFILE",
2303
+ "kind": "button",
2304
+ "description": "Open the profile editor.",
2305
+ "actions": [
2306
+ "tap",
2307
+ "dismiss"
2308
+ ],
2309
+ "values": null,
2310
+ "platforms": [
2311
+ "ios",
2312
+ "android"
2313
+ ],
2314
+ "deprecated": null
2315
+ },
2316
+ "profile.preview_open": {
2317
+ "screen": "PROFILE",
2318
+ "kind": "button",
2319
+ "description": "Preview own profile.",
2320
+ "actions": [
2321
+ "tap",
2322
+ "dismiss"
2323
+ ],
2324
+ "values": null,
2325
+ "platforms": [
2326
+ "web",
2327
+ "ios"
2328
+ ],
2329
+ "deprecated": null
2330
+ },
2331
+ "profile.preferences_open": {
2332
+ "screen": "PROFILE",
2333
+ "kind": "button",
2334
+ "description": "Open matching preferences.",
2335
+ "actions": [
2336
+ "tap"
2337
+ ],
2338
+ "values": null,
2339
+ "platforms": [
2340
+ "ios",
2341
+ "android"
2342
+ ],
2343
+ "deprecated": null
2344
+ },
2345
+ "profile.settings_open": {
2346
+ "screen": "PROFILE",
2347
+ "kind": "button",
2348
+ "description": "Open account settings.",
2349
+ "actions": [
2350
+ "tap"
2351
+ ],
2352
+ "values": null,
2353
+ "platforms": [
2354
+ "web"
2355
+ ],
2356
+ "deprecated": null
2357
+ },
2358
+ "profile.chat_settings_open": {
2359
+ "screen": "PROFILE",
2360
+ "kind": "button",
2361
+ "description": "Open chat settings.",
2362
+ "actions": [
2363
+ "tap",
2364
+ "dismiss"
2365
+ ],
2366
+ "values": null,
2367
+ "platforms": [
2368
+ "ios"
2369
+ ],
2370
+ "deprecated": null
2371
+ },
2372
+ "profile.chat_tour_open": {
2373
+ "screen": "PROFILE",
2374
+ "kind": "button",
2375
+ "description": "Replay the chat intro tour.",
2376
+ "actions": [
2377
+ "tap"
2378
+ ],
2379
+ "values": null,
2380
+ "platforms": [
2381
+ "ios"
2382
+ ],
2383
+ "deprecated": null
2384
+ },
2385
+ "profile.photo_open": {
2386
+ "screen": "PROFILE",
2387
+ "kind": "gesture",
2388
+ "description": "Open own photo full screen (with stats).",
2389
+ "actions": [
2390
+ "tap"
2391
+ ],
2392
+ "values": null,
2393
+ "platforms": [
2394
+ "web",
2395
+ "ios",
2396
+ "android"
2397
+ ],
2398
+ "deprecated": null
2399
+ },
2400
+ "profile.verify_identity": {
2401
+ "screen": "PROFILE",
2402
+ "kind": "button",
2403
+ "description": "Start identity verification.",
2404
+ "actions": [
2405
+ "tap"
2406
+ ],
2407
+ "values": null,
2408
+ "platforms": [
2409
+ "ios",
2410
+ "android"
2411
+ ],
2412
+ "deprecated": null
2413
+ },
2414
+ "profile.share_invite": {
2415
+ "screen": "PROFILE",
2416
+ "kind": "button",
2417
+ "description": "Generate / share an invite.",
2418
+ "actions": [
2419
+ "tap",
2420
+ "dismiss"
2421
+ ],
2422
+ "values": null,
2423
+ "platforms": [
2424
+ "ios",
2425
+ "android"
2426
+ ],
2427
+ "deprecated": null
2428
+ },
2429
+ "profile.invite_code_copy": {
2430
+ "screen": "PROFILE",
2431
+ "kind": "button",
2432
+ "description": "Copy a generated invite code.",
2433
+ "actions": [
2434
+ "tap"
2435
+ ],
2436
+ "values": null,
2437
+ "platforms": [
2438
+ "ios"
2439
+ ],
2440
+ "deprecated": null
2441
+ },
2442
+ "profile.invite_code_share": {
2443
+ "screen": "PROFILE",
2444
+ "kind": "button",
2445
+ "description": "Share a generated invite code (system share sheet).",
2446
+ "actions": [
2447
+ "tap"
2448
+ ],
2449
+ "values": null,
2450
+ "platforms": [
2451
+ "ios"
2452
+ ],
2453
+ "deprecated": null
2454
+ },
2455
+ "profile.upgrade_open": {
2456
+ "screen": "PROFILE",
2457
+ "kind": "button",
2458
+ "description": "Open membership upgrade.",
2459
+ "actions": [
2460
+ "tap",
2461
+ "dismiss"
2462
+ ],
2463
+ "values": null,
2464
+ "platforms": [
2465
+ "web",
2466
+ "ios",
2467
+ "android"
2468
+ ],
2469
+ "deprecated": null
2470
+ },
2471
+ "profile.unhook": {
2472
+ "screen": "PROFILE",
2473
+ "kind": "button",
2474
+ "description": "Release the current connection (opens confirmation).",
2475
+ "actions": [
2476
+ "tap"
2477
+ ],
2478
+ "values": null,
2479
+ "platforms": [
2480
+ "android"
2481
+ ],
2482
+ "deprecated": null
2483
+ },
2484
+ "profile.unhook_confirm": {
2485
+ "screen": "PROFILE",
2486
+ "kind": "dialog_button",
2487
+ "description": "Confirm releasing the connection.",
2488
+ "actions": [
2489
+ "tap",
2490
+ "dismiss"
2491
+ ],
2492
+ "values": null,
2493
+ "platforms": [
2494
+ "android"
2495
+ ],
2496
+ "deprecated": null
2497
+ },
2498
+ "profile.tab_select": {
2499
+ "screen": "PROFILE",
2500
+ "kind": "segmented",
2501
+ "description": "Switch profile sub-section.",
2502
+ "actions": [
2503
+ "select",
2504
+ "tap"
2505
+ ],
2506
+ "values": null,
2507
+ "platforms": [
2508
+ "ios"
2509
+ ],
2510
+ "deprecated": null
2511
+ },
2512
+ "profile.retry": {
2513
+ "screen": "PROFILE",
2514
+ "kind": "button",
2515
+ "description": "Retry loading the profile.",
2516
+ "actions": [
2517
+ "tap"
2518
+ ],
2519
+ "values": null,
2520
+ "platforms": [
2521
+ "web",
2522
+ "ios",
2523
+ "android"
2524
+ ],
2525
+ "deprecated": null
2526
+ },
2527
+ "profile.voice_play": {
2528
+ "screen": "PROFILE",
2529
+ "kind": "toggle",
2530
+ "description": "Play/pause own voice prompt. value = new state.",
2531
+ "actions": [
2532
+ "toggle"
2533
+ ],
2534
+ "values": [
2535
+ "play",
2536
+ "pause"
2537
+ ],
2538
+ "platforms": [
2539
+ "web"
2540
+ ],
2541
+ "deprecated": null
2542
+ },
2543
+ "profile_edit.save": {
2544
+ "screen": "PROFILE_EDIT",
2545
+ "kind": "button",
2546
+ "description": "Save profile changes.",
2547
+ "actions": [
2548
+ "submit"
2549
+ ],
2550
+ "values": null,
2551
+ "platforms": [
2552
+ "web",
2553
+ "ios",
2554
+ "android"
2555
+ ],
2556
+ "deprecated": null
2557
+ },
2558
+ "profile_edit.preview": {
2559
+ "screen": "PROFILE_EDIT",
2560
+ "kind": "button",
2561
+ "description": "Preview while editing.",
2562
+ "actions": [
2563
+ "tap"
2564
+ ],
2565
+ "values": null,
2566
+ "platforms": [
2567
+ "ios"
2568
+ ],
2569
+ "deprecated": null
2570
+ },
2571
+ "profile_edit.photo_add": {
2572
+ "screen": "PROFILE_EDIT",
2573
+ "kind": "button",
2574
+ "description": "Add a photo / video.",
2575
+ "actions": [
2576
+ "tap"
2577
+ ],
2578
+ "values": null,
2579
+ "platforms": [
2580
+ "web",
2581
+ "ios",
2582
+ "android"
2583
+ ],
2584
+ "deprecated": null
2585
+ },
2586
+ "profile_edit.photo_remove": {
2587
+ "screen": "PROFILE_EDIT",
2588
+ "kind": "button",
2589
+ "description": "Remove a photo.",
2590
+ "actions": [
2591
+ "tap"
2592
+ ],
2593
+ "values": null,
2594
+ "platforms": [
2595
+ "web",
2596
+ "ios"
2597
+ ],
2598
+ "deprecated": null
2599
+ },
2600
+ "profile_edit.photo_remove_confirm": {
2601
+ "screen": "PROFILE_EDIT",
2602
+ "kind": "dialog_button",
2603
+ "description": "Confirm removing a photo.",
2604
+ "actions": [
2605
+ "submit",
2606
+ "dismiss"
2607
+ ],
2608
+ "values": null,
2609
+ "platforms": [
2610
+ "ios"
2611
+ ],
2612
+ "deprecated": null
2613
+ },
2614
+ "profile_edit.photo_set_primary": {
2615
+ "screen": "PROFILE_EDIT",
2616
+ "kind": "button",
2617
+ "description": "Make a photo primary.",
2618
+ "actions": [
2619
+ "tap"
2620
+ ],
2621
+ "values": null,
2622
+ "platforms": [
2623
+ "web",
2624
+ "ios"
2625
+ ],
2626
+ "deprecated": null
2627
+ },
2628
+ "profile_edit.photo_adjust": {
2629
+ "screen": "PROFILE_EDIT",
2630
+ "kind": "button",
2631
+ "description": "Adjust / crop a photo.",
2632
+ "actions": [
2633
+ "tap"
2634
+ ],
2635
+ "values": null,
2636
+ "platforms": [
2637
+ "ios"
2638
+ ],
2639
+ "deprecated": null
2640
+ },
2641
+ "profile_edit.photo_reorder": {
2642
+ "screen": "PROFILE_EDIT",
2643
+ "kind": "gesture",
2644
+ "description": "Reorder photos.",
2645
+ "actions": [
2646
+ "long_press"
2647
+ ],
2648
+ "values": null,
2649
+ "platforms": [
2650
+ "ios"
2651
+ ],
2652
+ "deprecated": null
2653
+ },
2654
+ "profile_edit.prompt_add": {
2655
+ "screen": "PROFILE_EDIT",
2656
+ "kind": "button",
2657
+ "description": "Add a prompt.",
2658
+ "actions": [
2659
+ "tap"
2660
+ ],
2661
+ "values": null,
2662
+ "platforms": [
2663
+ "web",
2664
+ "ios"
2665
+ ],
2666
+ "deprecated": null
2667
+ },
2668
+ "profile_edit.prompt_remove": {
2669
+ "screen": "PROFILE_EDIT",
2670
+ "kind": "button",
2671
+ "description": "Remove a prompt.",
2672
+ "actions": [
2673
+ "tap"
2674
+ ],
2675
+ "values": null,
2676
+ "platforms": [
2677
+ "web",
2678
+ "ios"
2679
+ ],
2680
+ "deprecated": null
2681
+ },
2682
+ "profile_edit.voice_add": {
2683
+ "screen": "PROFILE_EDIT",
2684
+ "kind": "button",
2685
+ "description": "Record / add a voice prompt.",
2686
+ "actions": [
2687
+ "tap"
2688
+ ],
2689
+ "values": null,
2690
+ "platforms": [
2691
+ "web",
2692
+ "ios"
2693
+ ],
2694
+ "deprecated": null
2695
+ },
2696
+ "profile_edit.voice_remove": {
2697
+ "screen": "PROFILE_EDIT",
2698
+ "kind": "button",
2699
+ "description": "Remove the voice prompt.",
2700
+ "actions": [
2701
+ "tap"
2702
+ ],
2703
+ "values": null,
2704
+ "platforms": [
2705
+ "web",
2706
+ "ios"
2707
+ ],
2708
+ "deprecated": null
2709
+ },
2710
+ "profile_edit.choice_select": {
2711
+ "screen": "PROFILE_EDIT",
2712
+ "kind": "segmented",
2713
+ "description": "Pick an option while editing (gender, interested in, interests, ...).",
2714
+ "actions": [
2715
+ "select",
2716
+ "tap"
2717
+ ],
2718
+ "values": null,
2719
+ "platforms": [
2720
+ "web",
2721
+ "ios"
2722
+ ],
2723
+ "deprecated": null
2724
+ },
2725
+ "preferences.save": {
2726
+ "screen": "PREFERENCES",
2727
+ "kind": "button",
2728
+ "description": "Save matching preferences.",
2729
+ "actions": [
2730
+ "submit"
2731
+ ],
2732
+ "values": null,
2733
+ "platforms": [
2734
+ "ios",
2735
+ "android"
2736
+ ],
2737
+ "deprecated": null
2738
+ },
2739
+ "preferences.upgrade_open": {
2740
+ "screen": "PREFERENCES",
2741
+ "kind": "button",
2742
+ "description": "Upgrade prompt for a locked (premium) filter.",
2743
+ "actions": [
2744
+ "tap",
2745
+ "dismiss"
2746
+ ],
2747
+ "values": null,
2748
+ "platforms": [
2749
+ "ios"
2750
+ ],
2751
+ "deprecated": null
2752
+ },
2753
+ "preferences.locked_filter_tap": {
2754
+ "screen": "PREFERENCES",
2755
+ "kind": "button",
2756
+ "description": "Tap a locked (premium) filter.",
2757
+ "actions": [
2758
+ "tap"
2759
+ ],
2760
+ "values": null,
2761
+ "platforms": [
2762
+ "ios"
2763
+ ],
2764
+ "deprecated": null
2765
+ },
2766
+ "settings.email_manage": {
2767
+ "screen": "SETTINGS",
2768
+ "kind": "button",
2769
+ "description": "Add / verify / change email.",
2770
+ "actions": [
2771
+ "tap",
2772
+ "dismiss"
2773
+ ],
2774
+ "values": null,
2775
+ "platforms": [
2776
+ "web",
2777
+ "ios",
2778
+ "android"
2779
+ ],
2780
+ "deprecated": null
2781
+ },
2782
+ "settings.phone_update": {
2783
+ "screen": "SETTINGS",
2784
+ "kind": "button",
2785
+ "description": "Change phone number.",
2786
+ "actions": [
2787
+ "tap",
2788
+ "dismiss"
2789
+ ],
2790
+ "values": null,
2791
+ "platforms": [
2792
+ "ios",
2793
+ "android"
2794
+ ],
2795
+ "deprecated": null
2796
+ },
2797
+ "settings.google_link": {
2798
+ "screen": "SETTINGS",
2799
+ "kind": "toggle",
2800
+ "description": "Link/unlink Google. value = new state.",
2801
+ "actions": [
2802
+ "toggle"
2803
+ ],
2804
+ "values": [
2805
+ "link",
2806
+ "unlink"
2807
+ ],
2808
+ "platforms": [
2809
+ "web",
2810
+ "ios",
2811
+ "android"
2812
+ ],
2813
+ "deprecated": null
2814
+ },
2815
+ "settings.apple_link": {
2816
+ "screen": "SETTINGS",
2817
+ "kind": "toggle",
2818
+ "description": "Link/unlink Apple. value = new state.",
2819
+ "actions": [
2820
+ "toggle"
2821
+ ],
2822
+ "values": [
2823
+ "link",
2824
+ "unlink"
2825
+ ],
2826
+ "platforms": [
2827
+ "web",
2828
+ "ios"
2829
+ ],
2830
+ "deprecated": null
2831
+ },
2832
+ "settings.passkey_add": {
2833
+ "screen": "SETTINGS",
2834
+ "kind": "button",
2835
+ "description": "Enrol a passkey.",
2836
+ "actions": [
2837
+ "tap",
2838
+ "dismiss"
2839
+ ],
2840
+ "values": null,
2841
+ "platforms": [
2842
+ "web",
2843
+ "ios"
2844
+ ],
2845
+ "deprecated": null
2846
+ },
2847
+ "settings.password_set": {
2848
+ "screen": "SETTINGS",
2849
+ "kind": "button",
2850
+ "description": "Set / change password.",
2851
+ "actions": [
2852
+ "tap",
2853
+ "dismiss"
2854
+ ],
2855
+ "values": null,
2856
+ "platforms": [
2857
+ "web",
2858
+ "ios"
2859
+ ],
2860
+ "deprecated": null
2861
+ },
2862
+ "settings.recovery_setup": {
2863
+ "screen": "SETTINGS",
2864
+ "kind": "button",
2865
+ "description": "Set up message-history recovery.",
2866
+ "actions": [
2867
+ "tap",
2868
+ "dismiss"
2869
+ ],
2870
+ "values": null,
2871
+ "platforms": [
2872
+ "web",
2873
+ "ios",
2874
+ "android"
2875
+ ],
2876
+ "deprecated": null
2877
+ },
2878
+ "settings.device_revoke": {
2879
+ "screen": "SETTINGS",
2880
+ "kind": "button",
2881
+ "description": "Remove a linked device.",
2882
+ "actions": [
2883
+ "tap"
2884
+ ],
2885
+ "values": null,
2886
+ "platforms": [
2887
+ "web",
2888
+ "ios",
2889
+ "android"
2890
+ ],
2891
+ "deprecated": null
2892
+ },
2893
+ "settings.device_revoke_confirm": {
2894
+ "screen": "SETTINGS",
2895
+ "kind": "dialog_button",
2896
+ "description": "Confirm removing a linked device.",
2897
+ "actions": [
2898
+ "submit",
2899
+ "dismiss"
2900
+ ],
2901
+ "values": null,
2902
+ "platforms": [
2903
+ "ios",
2904
+ "android"
2905
+ ],
2906
+ "deprecated": null
2907
+ },
2908
+ "settings.safety_open": {
2909
+ "screen": "SETTINGS",
2910
+ "kind": "button",
2911
+ "description": "Open safety centre / blocked users.",
2912
+ "actions": [
2913
+ "tap",
2914
+ "dismiss"
2915
+ ],
2916
+ "values": null,
2917
+ "platforms": [
2918
+ "ios"
2919
+ ],
2920
+ "deprecated": null
2921
+ },
2922
+ "settings.theme_select": {
2923
+ "screen": "SETTINGS",
2924
+ "kind": "segmented",
2925
+ "description": "Change appearance. value = theme.",
2926
+ "actions": [
2927
+ "select",
2928
+ "tap"
2929
+ ],
2930
+ "values": [
2931
+ "light",
2932
+ "dark",
2933
+ "system"
2934
+ ],
2935
+ "platforms": [
2936
+ "web",
2937
+ "ios",
2938
+ "android"
2939
+ ],
2940
+ "deprecated": null
2941
+ },
2942
+ "settings.theme_open": {
2943
+ "screen": "SETTINGS",
2944
+ "kind": "button",
2945
+ "description": "Open the appearance chooser.",
2946
+ "actions": [
2947
+ "tap",
2948
+ "dismiss"
2949
+ ],
2950
+ "values": null,
2951
+ "platforms": [
2952
+ "web",
2953
+ "ios",
2954
+ "android"
2955
+ ],
2956
+ "deprecated": null
2957
+ },
2958
+ "settings.sign_out": {
2959
+ "screen": "SETTINGS",
2960
+ "kind": "button",
2961
+ "description": "Sign out.",
2962
+ "actions": [
2963
+ "tap"
2964
+ ],
2965
+ "values": null,
2966
+ "platforms": [
2967
+ "web",
2968
+ "ios",
2969
+ "android"
2970
+ ],
2971
+ "deprecated": null
2972
+ },
2973
+ "settings.sign_out_confirm": {
2974
+ "screen": "SETTINGS",
2975
+ "kind": "dialog_button",
2976
+ "description": "Confirm signing out.",
2977
+ "actions": [
2978
+ "submit",
2979
+ "dismiss"
2980
+ ],
2981
+ "values": null,
2982
+ "platforms": [
2983
+ "ios"
2984
+ ],
2985
+ "deprecated": null
2986
+ },
2987
+ "settings.delete_account_open": {
2988
+ "screen": "SETTINGS",
2989
+ "kind": "button",
2990
+ "description": "Start account deletion.",
2991
+ "actions": [
2992
+ "tap"
2993
+ ],
2994
+ "values": null,
2995
+ "platforms": [
2996
+ "web",
2997
+ "ios",
2998
+ "android"
2999
+ ],
3000
+ "deprecated": null
3001
+ },
3002
+ "settings.delete_account_confirm": {
3003
+ "screen": "SETTINGS",
3004
+ "kind": "dialog_button",
3005
+ "description": "Confirm account deletion.",
3006
+ "actions": [
3007
+ "submit",
3008
+ "dismiss"
3009
+ ],
3010
+ "values": null,
3011
+ "platforms": [
3012
+ "web",
3013
+ "ios",
3014
+ "android"
3015
+ ],
3016
+ "deprecated": null
3017
+ },
3018
+ "settings.unblock_user": {
3019
+ "screen": "SETTINGS",
3020
+ "kind": "button",
3021
+ "description": "Unblock a previously blocked user.",
3022
+ "actions": [
3023
+ "tap"
3024
+ ],
3025
+ "values": null,
3026
+ "platforms": [
3027
+ "ios"
3028
+ ],
3029
+ "deprecated": null
3030
+ },
3031
+ "settings.unblock_confirm": {
3032
+ "screen": "SETTINGS",
3033
+ "kind": "dialog_button",
3034
+ "description": "Confirm unblocking a user.",
3035
+ "actions": [
3036
+ "submit",
3037
+ "dismiss"
3038
+ ],
3039
+ "values": null,
3040
+ "platforms": [
3041
+ "ios"
3042
+ ],
3043
+ "deprecated": null
3044
+ },
3045
+ "settings.verify_code_submit": {
3046
+ "screen": "SETTINGS",
3047
+ "kind": "button",
3048
+ "description": "Submit a verification code for a contact change. value = channel.",
3049
+ "actions": [
3050
+ "submit",
3051
+ "dismiss"
3052
+ ],
3053
+ "values": [
3054
+ "email",
3055
+ "phone"
3056
+ ],
3057
+ "platforms": [
3058
+ "ios",
3059
+ "android"
3060
+ ],
3061
+ "deprecated": null
3062
+ },
3063
+ "settings.password_set_confirm": {
3064
+ "screen": "SETTINGS",
3065
+ "kind": "dialog_button",
3066
+ "description": "Confirm going to sign-in to set a password.",
3067
+ "actions": [
3068
+ "submit",
3069
+ "dismiss"
3070
+ ],
3071
+ "values": null,
3072
+ "platforms": [
3073
+ "ios"
3074
+ ],
3075
+ "deprecated": null
3076
+ },
3077
+ "settings.help_link": {
3078
+ "screen": "SETTINGS",
3079
+ "kind": "link",
3080
+ "description": "Open a help / support / legal page from settings. value = destination.",
3081
+ "actions": [
3082
+ "tap"
3083
+ ],
3084
+ "values": [
3085
+ "help_center",
3086
+ "faq",
3087
+ "contact",
3088
+ "safety",
3089
+ "privacy",
3090
+ "terms",
3091
+ "other"
3092
+ ],
3093
+ "platforms": [
3094
+ "ios"
3095
+ ],
3096
+ "deprecated": null
3097
+ },
3098
+ "settings.recovery_approve": {
3099
+ "screen": "SETTINGS",
3100
+ "kind": "dialog_button",
3101
+ "description": "Approve a history-recovery request from another device.",
3102
+ "actions": [
3103
+ "submit",
3104
+ "dismiss"
3105
+ ],
3106
+ "values": null,
3107
+ "platforms": [
3108
+ "web",
3109
+ "ios"
3110
+ ],
3111
+ "deprecated": null
3112
+ },
3113
+ "settings.recovery_qr_save": {
3114
+ "screen": "SETTINGS",
3115
+ "kind": "button",
3116
+ "description": "Save the recovery QR code.",
3117
+ "actions": [
3118
+ "tap"
3119
+ ],
3120
+ "values": null,
3121
+ "platforms": [
3122
+ "web",
3123
+ "ios",
3124
+ "android"
3125
+ ],
3126
+ "deprecated": null
3127
+ },
3128
+ "settings.recovery_qr_share": {
3129
+ "screen": "SETTINGS",
3130
+ "kind": "button",
3131
+ "description": "Share the recovery QR code.",
3132
+ "actions": [
3133
+ "tap"
3134
+ ],
3135
+ "values": null,
3136
+ "platforms": [
3137
+ "ios",
3138
+ "android"
3139
+ ],
3140
+ "deprecated": null
3141
+ },
3142
+ "paywall.purchase": {
3143
+ "screen": "PAYWALL",
3144
+ "kind": "button",
3145
+ "description": "Choose / buy a membership tier.",
3146
+ "actions": [
3147
+ "tap"
3148
+ ],
3149
+ "values": null,
3150
+ "platforms": [
3151
+ "ios"
3152
+ ],
3153
+ "deprecated": null
3154
+ },
3155
+ "paywall.restore": {
3156
+ "screen": "PAYWALL",
3157
+ "kind": "button",
3158
+ "description": "Refresh / sync / restore membership.",
3159
+ "actions": [
3160
+ "tap"
3161
+ ],
3162
+ "values": null,
3163
+ "platforms": [
3164
+ "ios",
3165
+ "android"
3166
+ ],
3167
+ "deprecated": null
3168
+ },
3169
+ "paywall.features_expand": {
3170
+ "screen": "PAYWALL",
3171
+ "kind": "button",
3172
+ "description": "Show all features in the membership comparison.",
3173
+ "actions": [
3174
+ "tap"
3175
+ ],
3176
+ "values": null,
3177
+ "platforms": [
3178
+ "ios"
3179
+ ],
3180
+ "deprecated": null
3181
+ },
3182
+ "photo_viewer.close": {
3183
+ "screen": "PHOTO_VIEWER",
3184
+ "kind": "button",
3185
+ "description": "Close the full-screen photo viewer.",
3186
+ "actions": [
3187
+ "tap",
3188
+ "dismiss"
3189
+ ],
3190
+ "values": null,
3191
+ "platforms": [
3192
+ "web",
3193
+ "ios",
3194
+ "android"
3195
+ ],
3196
+ "deprecated": null
3197
+ },
3198
+ "photo_viewer.previous": {
3199
+ "screen": "PHOTO_VIEWER",
3200
+ "kind": "button",
3201
+ "description": "Previous photo (explicit control, not a swipe).",
3202
+ "actions": [
3203
+ "tap"
3204
+ ],
3205
+ "values": null,
3206
+ "platforms": [
3207
+ "web"
3208
+ ],
3209
+ "deprecated": null
3210
+ },
3211
+ "photo_viewer.next": {
3212
+ "screen": "PHOTO_VIEWER",
3213
+ "kind": "button",
3214
+ "description": "Next photo (explicit control, not a swipe).",
3215
+ "actions": [
3216
+ "tap"
3217
+ ],
3218
+ "values": null,
3219
+ "platforms": [
3220
+ "web"
3221
+ ],
3222
+ "deprecated": null
3223
+ },
3224
+ "search.close": {
3225
+ "screen": "SEARCH",
3226
+ "kind": "button",
3227
+ "description": "Close search.",
3228
+ "actions": [
3229
+ "tap",
3230
+ "dismiss"
3231
+ ],
3232
+ "values": null,
3233
+ "platforms": [
3234
+ "web"
3235
+ ],
3236
+ "deprecated": null
3237
+ },
3238
+ "search.query_clear": {
3239
+ "screen": "SEARCH",
3240
+ "kind": "button",
3241
+ "description": "Clear the search query.",
3242
+ "actions": [
3243
+ "tap"
3244
+ ],
3245
+ "values": null,
3246
+ "platforms": [
3247
+ "web"
3248
+ ],
3249
+ "deprecated": null
3250
+ },
3251
+ "search.filter_select": {
3252
+ "screen": "SEARCH",
3253
+ "kind": "segmented",
3254
+ "description": "Choose a search filter.",
3255
+ "actions": [
3256
+ "select",
3257
+ "tap"
3258
+ ],
3259
+ "values": null,
3260
+ "platforms": [
3261
+ "web"
3262
+ ],
3263
+ "deprecated": null
3264
+ },
3265
+ "search.result_open": {
3266
+ "screen": "SEARCH",
3267
+ "kind": "list_item",
3268
+ "description": "Open a search result. index = row, targetId = user.",
3269
+ "actions": [
3270
+ "tap"
3271
+ ],
3272
+ "values": null,
3273
+ "platforms": [
3274
+ "web"
3275
+ ],
3276
+ "deprecated": null
3277
+ },
3278
+ "create.close": {
3279
+ "screen": "CREATE",
3280
+ "kind": "button",
3281
+ "description": "Close the create menu.",
3282
+ "actions": [
3283
+ "tap",
3284
+ "dismiss"
3285
+ ],
3286
+ "values": null,
3287
+ "platforms": [
3288
+ "web"
3289
+ ],
3290
+ "deprecated": null
3291
+ },
3292
+ "create.option_select": {
3293
+ "screen": "CREATE",
3294
+ "kind": "menu_item",
3295
+ "description": "Pick what to create. value = kind.",
3296
+ "actions": [
3297
+ "tap"
3298
+ ],
3299
+ "values": [
3300
+ "photo",
3301
+ "prompt",
3302
+ "voice"
3303
+ ],
3304
+ "platforms": [
3305
+ "web"
3306
+ ],
3307
+ "deprecated": null
3308
+ },
3309
+ "shared.alert_dismiss": {
3310
+ "screen": "SHARED",
3311
+ "kind": "dialog_button",
3312
+ "description": "Acknowledge / close an informational, error or success alert or toast.",
3313
+ "actions": [
3314
+ "tap",
3315
+ "dismiss"
3316
+ ],
3317
+ "values": null,
3318
+ "platforms": [
3319
+ "web",
3320
+ "ios",
3321
+ "android"
3322
+ ],
3323
+ "deprecated": null
3324
+ },
3325
+ "shared.error_recover": {
3326
+ "screen": "SHARED",
3327
+ "kind": "button",
3328
+ "description": "Crash / error screen recovery. value = choice.",
3329
+ "actions": [
3330
+ "tap"
3331
+ ],
3332
+ "values": [
3333
+ "retry",
3334
+ "home"
3335
+ ],
3336
+ "platforms": [
3337
+ "web"
3338
+ ],
3339
+ "deprecated": null
3340
+ },
3341
+ "shared.country_code_open": {
3342
+ "screen": "SHARED",
3343
+ "kind": "button",
3344
+ "description": "Open the phone dial-code picker.",
3345
+ "actions": [
3346
+ "tap",
3347
+ "dismiss"
3348
+ ],
3349
+ "values": null,
3350
+ "platforms": [
3351
+ "web",
3352
+ "ios",
3353
+ "android"
3354
+ ],
3355
+ "deprecated": null
3356
+ },
3357
+ "shared.country_code_select": {
3358
+ "screen": "SHARED",
3359
+ "kind": "segmented",
3360
+ "description": "Choose a phone dial code.",
3361
+ "actions": [
3362
+ "select",
3363
+ "tap"
3364
+ ],
3365
+ "values": null,
3366
+ "platforms": [
3367
+ "web",
3368
+ "ios",
3369
+ "android"
3370
+ ],
3371
+ "deprecated": null
3372
+ },
3373
+ "shared.voice_recorder": {
3374
+ "screen": "SHARED",
3375
+ "kind": "button",
3376
+ "description": "Voice recorder / preview control. value = control.",
3377
+ "actions": [
3378
+ "tap"
3379
+ ],
3380
+ "values": [
3381
+ "record",
3382
+ "stop",
3383
+ "play",
3384
+ "pause",
3385
+ "save",
3386
+ "discard",
3387
+ "cancel",
3388
+ "open_settings"
3389
+ ],
3390
+ "platforms": [
3391
+ "web",
3392
+ "ios"
3393
+ ],
3394
+ "deprecated": null
3395
+ },
3396
+ "shared.prompt_preset_select": {
3397
+ "screen": "SHARED",
3398
+ "kind": "segmented",
3399
+ "description": "Choose a prompt question from the presets.",
3400
+ "actions": [
3401
+ "select",
3402
+ "tap"
3403
+ ],
3404
+ "values": null,
3405
+ "platforms": [
3406
+ "web",
3407
+ "ios"
3408
+ ],
3409
+ "deprecated": null
3410
+ },
3411
+ "liveness.begin": {
3412
+ "screen": "LIVENESS",
3413
+ "kind": "button",
3414
+ "description": "Begin the liveness check.",
3415
+ "actions": [
3416
+ "tap"
3417
+ ],
3418
+ "values": null,
3419
+ "platforms": [
3420
+ "web",
3421
+ "ios",
3422
+ "android"
3423
+ ],
3424
+ "deprecated": null
3425
+ },
3426
+ "liveness.dismiss": {
3427
+ "screen": "LIVENESS",
3428
+ "kind": "button",
3429
+ "description": "Not now / back.",
3430
+ "actions": [
3431
+ "tap",
3432
+ "dismiss"
3433
+ ],
3434
+ "values": null,
3435
+ "platforms": [
3436
+ "ios",
3437
+ "android"
3438
+ ],
3439
+ "deprecated": null
3440
+ },
3441
+ "liveness.retry": {
3442
+ "screen": "LIVENESS",
3443
+ "kind": "button",
3444
+ "description": "Try again after an error.",
3445
+ "actions": [
3446
+ "tap"
3447
+ ],
3448
+ "values": null,
3449
+ "platforms": [
3450
+ "web",
3451
+ "ios",
3452
+ "android"
3453
+ ],
3454
+ "deprecated": null
3455
+ },
3456
+ "liveness.open_settings": {
3457
+ "screen": "LIVENESS",
3458
+ "kind": "button",
3459
+ "description": "Open system settings (camera permission).",
3460
+ "actions": [
3461
+ "tap"
3462
+ ],
3463
+ "values": null,
3464
+ "platforms": [
3465
+ "ios",
3466
+ "android"
3467
+ ],
3468
+ "deprecated": null
3469
+ },
3470
+ "liveness.close": {
3471
+ "screen": "LIVENESS",
3472
+ "kind": "button",
3473
+ "description": "Close the flow / back to profile.",
3474
+ "actions": [
3475
+ "tap"
3476
+ ],
3477
+ "values": null,
3478
+ "platforms": [
3479
+ "android"
3480
+ ],
3481
+ "deprecated": null
3482
+ }
3483
+ },
3484
+ "platformGaps": {
3485
+ "web": {
3486
+ "chat.call": "Not built on Web: no in-app voice calling.",
3487
+ "chat.capture_option": "No in-app camera capture on Web; attachments use the OS file picker.",
3488
+ "chat.intro_dismiss": "Not built on Web: there is no in-chat intro tour / stories invitation.",
3489
+ "chat.intro_get_started": "Not built on Web: there is no in-chat intro tour / stories invitation.",
3490
+ "chat.intro_tour_open": "Not built on Web: there is no in-chat intro tour / stories invitation.",
3491
+ "chat.message_delete": "Not built on Web: messages cannot be deleted from the Web chat.",
3492
+ "chat.message_menu_open": "Web chat has no per-message long-press/context menu; there is no delete (chat.message_delete is gapped) or reaction menu to open.",
3493
+ "chat.mr_onehook_close": "Web leaves Mr OneHook via the standard conversation back navigation (nav.back); there is no distinct leave-AI button.",
3494
+ "chat.profile_close": "Web toggles the peer profile panel with a single control (chat.profile_open); there is no separate close button.",
3495
+ "chat.unmatch": "Web ends a connection through Report & block (chat.report_block); the shipped chat has no neutral unmatch control (the standalone MatchesView unmatch UI is not mounted).",
3496
+ "chat.unmatch_confirm": "No neutral unmatch flow in the shipped Web chat; ending a connection goes through Report & block (chat.block_confirm).",
3497
+ "chat.video_call": "Not built on Web: no in-app video calling.",
3498
+ "chat.voice_record_stop": "Web combines stop and send into one control (chat.voice_send); there is no separate stop.",
3499
+ "chat_settings.clear_cache": "No clear-cache control in the Web chat settings sheet; the browser manages its own storage.",
3500
+ "chat_settings.export_chat": "Not built on Web: no chat-export control in the settings sheet.",
3501
+ "chat_settings.font_size_select": "Not built on Web: no chat font-size control in the settings sheet.",
3502
+ "discover.add_hook_open": "Add-a-connection lives in Chat on Web (chat.add_hook_open), not in discovery.",
3503
+ "discover.like_button": "Web likes via the comment composer (discover.element_like); there is no bare like button.",
3504
+ "discover.likes_you_open": "Likes You is a main navigation tab on Web (nav.tab_select), not a discovery button.",
3505
+ "discover.preferences_open": "Match preferences are edited in the profile editor on Web; discovery has no preferences button.",
3506
+ "discover.undo_button": "Web discovery has no undo; acting on a card removes it and cannot be reversed.",
3507
+ "discover.upgrade_open": "No discovery upgrade upsell on Web.",
3508
+ "like_composer.send_without_comment": "The Web like composer requires a comment to send; there is no send-without-comment action.",
3509
+ "like_composer.upgrade": "No upgrade upsell inside the Web like composer.",
3510
+ "likes_you.close": "Likes You is a full navigation tab on Web, not a modal with a close control.",
3511
+ "liveness.close": "Web liveness is an embedded profile card; there is no close/back-to-profile control.",
3512
+ "liveness.dismiss": "No not-now/dismiss control in the Web liveness card.",
3513
+ "liveness.open_settings": "Web cannot open OS settings for camera permission.",
3514
+ "login.passkey": "Web sign-in offers Google/Apple/OTP/password; passkeys are enrolled in settings, not as a sign-in button.",
3515
+ "nav.hooked_dismiss": "The Web hooked overlay is a hard guard with only a go-to-chat action; it cannot be dismissed.",
3516
+ "notifications.item_dismiss": "No in-app notification center on Web.",
3517
+ "notifications.item_open": "No in-app notification center on Web.",
3518
+ "onboarding.skip_sign_out_confirm": "Skip-for-now signs the user out immediately on Web; there is no confirmation dialog.",
3519
+ "paywall.features_expand": "No in-app paywall on Web; the upgrade links to the marketing pricing page.",
3520
+ "paywall.purchase": "No in-app paywall/purchase on Web; the upgrade links to the marketing pricing page.",
3521
+ "paywall.restore": "No in-app membership restore on Web.",
3522
+ "preferences.locked_filter_tap": "No premium-locked match filters on Web; the profile shows a single Upgrade button (profile.upgrade_open).",
3523
+ "preferences.save": "Match preferences are saved inline via the profile editor (profile_edit.save); the standalone PreferencesPanel is not mounted.",
3524
+ "preferences.upgrade_open": "No premium-locked filter upsell in Web preferences.",
3525
+ "profile.chat_settings_open": "Web opens chat settings from the chat shield menu (chat.settings_open), not from the profile.",
3526
+ "profile.chat_tour_open": "Not built on Web: no replay-chat-intro control in the profile.",
3527
+ "profile.edit_open": "The Web profile is edited inline; there is no separate editor-open control.",
3528
+ "profile.invite_code_copy": "No invite-code copy control in the Web profile.",
3529
+ "profile.invite_code_share": "No invite-code share control in the Web profile.",
3530
+ "profile.preferences_open": "Match preferences are edited inline in the Web profile editor; there is no separate open control.",
3531
+ "profile.share_invite": "No share-invite control in the Web profile.",
3532
+ "profile.tab_select": "The Web profile is a single scrolling page; it has no sub-section tabs.",
3533
+ "profile.unhook": "Connection release lives in Chat on Web (chat.unmatch).",
3534
+ "profile.unhook_confirm": "Connection release is confirmed in Chat on Web (chat.unmatch_confirm).",
3535
+ "profile.verify_identity": "Identity verification is embedded in the Web profile; the start control is liveness.begin.",
3536
+ "profile_edit.photo_adjust": "No crop/adjust control in the Web photo editor.",
3537
+ "profile_edit.photo_remove_confirm": "Profile photo removal is immediate on Web; there is no confirmation dialog.",
3538
+ "profile_edit.photo_reorder": "No drag-reorder gesture in the Web photo grid; the primary photo is set explicitly.",
3539
+ "profile_edit.preview": "Web previews via profile.preview_open; there is no separate editor-preview control.",
3540
+ "redeem_invite.close": "The Web redeem flow closes via the site-header home link, not a dedicated close button.",
3541
+ "settings.device_revoke_confirm": "Device revoke is immediate on Web; there is no confirmation dialog.",
3542
+ "settings.help_link": "No help-centre link in Web settings.",
3543
+ "settings.password_set_confirm": "Setting a password on Web signs the user out to use Forgot Password; there is no confirmation dialog.",
3544
+ "settings.phone_update": "No phone-number change control in Web settings.",
3545
+ "settings.recovery_qr_share": "Web offers Save QR (download); there is no native share action.",
3546
+ "settings.safety_open": "No safety-centre / blocked-users screen in Web settings.",
3547
+ "settings.sign_out_confirm": "Sign out is immediate on Web; there is no confirmation dialog.",
3548
+ "settings.unblock_confirm": "No blocked-users management on Web (settings.unblock_user is gapped), so there is no unblock confirmation.",
3549
+ "settings.unblock_user": "No blocked-users management in Web settings.",
3550
+ "settings.verify_code_submit": "Web verifies a new email inline via settings.email_manage; there is no separate verify-code control, and phone updates are not offered (settings.phone_update is gapped)."
3551
+ },
3552
+ "ios": {
3553
+ "chat.capture_option": "iOS captures via the system UIImagePickerController camera; photo vs video is chosen in the system camera UI, not an app control.",
3554
+ "chat.history_reset_confirm": "iOS message-history recovery has no last-resort reset flow; recovery is via a source device + QR (chat.history_recover / chat.history_recover_method / chat.history_recover_step), so there is no reset to confirm.",
3555
+ "chat.mr_onehook_close": "No explicit leave-Mr-OneHook control on iOS; the user switches away via the conversation switcher (chat.conversation_switch).",
3556
+ "chat.mr_onehook_open": "Mr OneHook is entered by selecting its row in the conversation switcher (tracked as chat.conversation_switch); there is no dedicated open control.",
3557
+ "chat.mr_onehook_scope_open": "iOS Mr OneHook sharing is a single Share & Ask confirmation (chat.mr_onehook_context_share) that previews the exact bounded excerpts; there is no product-only/match scope picker, so there is no scope-picker opener to tap.",
3558
+ "chat.mr_onehook_scope_select": "iOS Mr OneHook sharing is a single Share & Ask confirmation (chat.mr_onehook_context_share); there is no product-only/match scope picker.",
3559
+ "chat.retry": "The chat thread has no load-retry control on iOS; transient failures reload automatically from the live subscription.",
3560
+ "chat.wallpaper_open": "iOS changes chat wallpaper via the chat settings picker (chat_settings.wallpaper_select); there is no in-thread wallpaper menu.",
3561
+ "create.close": "iOS has no global create menu; a photo/prompt/voice is added directly inside the profile editor and onboarding (profile_edit.* / onboarding.*), so there is no create surface to close.",
3562
+ "create.option_select": "iOS has no global create menu; adding a photo/prompt/voice is done directly in the profile editor and onboarding (profile_edit.photo_add / prompt_add / voice_add, onboarding.photo_add / prompt_add / voice_add), not via a create shortcut.",
3563
+ "discover.like_button": "iOS likes are per element (discover.element_like); the iOS card has no whole-candidate like button or right-swipe.",
3564
+ "landing.careers_apply": "Careers / apply lives only on the public marketing website; the iOS landing screen is just the hero + Get started / Login.",
3565
+ "landing.chatbot_widget": "The public marketing chatbot widget is web-only; iOS has no signed-out chatbot (Mr OneHook is an in-chat member feature).",
3566
+ "landing.demo_interact": "The signed-out interactive marketing demos / explainers exist only on the web landing site.",
3567
+ "landing.email_link": "Mailto links on public pages are web-only; the iOS landing screen exposes no support/legal mailboxes.",
3568
+ "landing.home_link": "The signed-out site-header wordmark is web-only; iOS launches straight into the native app shell.",
3569
+ "landing.mobile_menu_toggle": "The marketing mobile nav drawer is web-only; the iOS landing screen has no site navigation to open or close.",
3570
+ "landing.nav_link": "Marketing navigation links exist only on the web landing site.",
3571
+ "landing.notice_retry": "The \"finish in app\" notice is a web hand-off prompt; iOS is the app, so there is no such notice to retry.",
3572
+ "landing.open_in_app": "iOS is the app; there is no open-in-app / app-store smart-banner link.",
3573
+ "landing.pricing_period_select": "The public pricing page (and its billing-period chooser) is web-only; iOS surfaces membership only in the in-app paywall.",
3574
+ "landing.section_nav": "In-page landing section jumps belong to the scrollable web marketing site; the iOS landing screen is a single hero.",
3575
+ "likes_you.liked_item_open": "iOS opens the liker's full profile; it does not deep-link to the specific liked profile element.",
3576
+ "likes_you.refresh": "The Likes You list refreshes automatically from its live subscription; there is no manual pull-to-refresh control.",
3577
+ "liveness.close": "iOS liveness uses liveness.dismiss (Not now / back); the hosted flow has no separate close control.",
3578
+ "login.passkey_setup": "iOS has no post-sign-in account-setup wizard; passkeys are enrolled from Settings (settings.passkey_add) and passkey sign-in uses login.passkey.",
3579
+ "nav.back": "Back navigation is the system UINavigationController back button, not an app-owned control.",
3580
+ "nav.home_logo": "iOS has no tappable in-app wordmark / logo home control.",
3581
+ "nav.menu_open": "iOS navigates via the bottom tab bar; there is no hamburger / more menu.",
3582
+ "nav.search_open": "iOS has no global search / explore entry point.",
3583
+ "onboarding.photo_remove_confirm": "During onboarding nothing is saved yet, so removing a pending photo is immediate with no confirmation dialog (onboarding.photo_remove); the confirm exists only in the profile editor (profile_edit.photo_remove_confirm).",
3584
+ "photo_viewer.next": "The iOS photo viewer navigates by swipe; there is no explicit next-photo button.",
3585
+ "photo_viewer.previous": "The iOS photo viewer navigates by swipe; there is no explicit previous-photo button.",
3586
+ "profile.settings_open": "iOS presents settings inside the profile tab's segmented control; there is no separate settings entry point.",
3587
+ "profile.unhook": "On iOS, releasing a connection happens from the chat thread (chat.unmatch / chat.unmatch_confirm), not from the user's own profile hub.",
3588
+ "profile.unhook_confirm": "On iOS, the unhook confirmation is the chat-thread dialog (chat.unmatch_confirm); the profile hub has no unhook flow.",
3589
+ "profile.voice_play": "The iOS profile hub does not play the user's own voice prompt; playback lives in the profile editor's voice section.",
3590
+ "redeem_invite.back": "iOS redemption has no separate back control; the flow uses redeem_invite.close.",
3591
+ "search.close": "iOS has no search / explore surface (see nav.search_open).",
3592
+ "search.filter_select": "iOS has no search / explore surface (see nav.search_open).",
3593
+ "search.query_clear": "iOS has no search / explore surface (see nav.search_open).",
3594
+ "search.result_open": "iOS has no search / explore surface (see nav.search_open).",
3595
+ "shared.error_recover": "iOS surfaces load errors per-screen via the OHStateView retry control (discover.retry / likes_you.retry / profile.retry); there is no global crash/error screen offering retry|home choices."
3596
+ },
3597
+ "android": {
3598
+ "chat.add_hook_open": "Not built on Android: no add-another-connection entry inside chat.",
3599
+ "chat.call": "Not built on Android: no in-app voice calling.",
3600
+ "chat.conversation_sort": "Not built on Android: the conversation list has no sort control.",
3601
+ "chat.conversation_sort_open": "Not built on Android: the conversation list has no sort control/menu to open.",
3602
+ "chat.conversation_switcher_open": "Not built on Android: conversations are cycled with a next button, with no switcher/picker.",
3603
+ "chat.history_reset_confirm": "Not built on Android: recovery is device/QR/passkey based with no last-resort history-reset flow.",
3604
+ "chat.intro_dismiss": "Not built on Android: there is no in-chat intro tour/stories to dismiss.",
3605
+ "chat.intro_get_started": "Not built on Android: there is no in-chat intro tour final CTA.",
3606
+ "chat.intro_tour_open": "Not built on Android: there is no in-chat intro tour invitation.",
3607
+ "chat.mr_onehook_scope_open": "Not built on Android: Mr OneHook auto-scopes to the open match (shown as a status label), with no scope picker to open.",
3608
+ "chat.mr_onehook_scope_select": "Not built on Android: Mr OneHook auto-scopes to the open match, with no scope picker.",
3609
+ "chat.sensitive_reveal_confirm": "Not built on Android: peer media is blanket-blurred with single-tap reveal (tracked as chat.media_open); there is no reveal confirmation dialog.",
3610
+ "chat.settings_open": "Not built on Android: no per-conversation chat settings screen.",
3611
+ "chat.video_call": "Not built on Android: no in-app video calling.",
3612
+ "chat.voice_send": "Not built on Android: a recorded voice note is sent automatically on stop, with no separate send button.",
3613
+ "chat.wallpaper_open": "Not built on Android: no change-chat-wallpaper option.",
3614
+ "chat_settings.clear_cache": "Not built on Android: no per-user chat settings screen, so no clear-media-cache control.",
3615
+ "chat_settings.disappearing_select": "Not built on Android: no per-user chat settings screen.",
3616
+ "chat_settings.export_chat": "Not built on Android: no per-user chat settings screen.",
3617
+ "chat_settings.font_size_select": "Not built on Android: no per-user chat settings screen.",
3618
+ "chat_settings.last_seen_select": "Not built on Android: no per-user chat settings screen.",
3619
+ "chat_settings.notification_toggle": "Not built on Android: no per-user chat settings screen.",
3620
+ "chat_settings.privacy_toggle": "Not built on Android: no per-user chat settings screen.",
3621
+ "chat_settings.wallpaper_select": "Not built on Android: no per-user chat settings screen.",
3622
+ "create.close": "Not built on Android: no create menu (add photo/prompt/voice shortcuts), so nothing to close.",
3623
+ "create.option_select": "Not built on Android: no create menu (shortcuts to add a photo/prompt/voice).",
3624
+ "discover.add_hook_open": "Not built on Android: no add-by-username/invite entry in discovery.",
3625
+ "discover.add_hook_submit": "Not built on Android: no add-by-username/invite flow in discovery.",
3626
+ "discover.element_like": "Not built on Android: the swipe-only deck has no per-element (comment-to-like) affordance.",
3627
+ "discover.preferences_open": "Not built on Android: discovery preferences are opened from Profile, not the deck header.",
3628
+ "discover.undo_button": "Not built on Android: no undo-last-decision control in the deck.",
3629
+ "discover.upgrade_open": "Not built on Android: no in-deck upgrade/upsell prompt.",
3630
+ "discover.voice_play": "Not built on Android: discovery cards render no voice-prompt player.",
3631
+ "landing.careers_apply": "Web-only: careers/apply lives on the public marketing site, not the native landing.",
3632
+ "landing.chatbot_widget": "Web-only: the public chatbot widget is a marketing-site feature, absent in the app.",
3633
+ "landing.demo_interact": "Web-only: interactive public-page demos/explainers are not part of the native landing.",
3634
+ "landing.email_link": "Web-only: mailto links live on public marketing pages, not the native landing.",
3635
+ "landing.home_link": "Web-only: signed-out site header wordmark; the native landing has no site header.",
3636
+ "landing.mobile_menu_toggle": "Web-only: the marketing mobile nav menu does not exist in the native app.",
3637
+ "landing.nav_link": "Web-only: marketing navigation links do not exist in the native app.",
3638
+ "landing.notice_retry": "Web-only: the \"finish in app\" notice is a web handoff prompt, absent in the app.",
3639
+ "landing.open_in_app": "Web-only: open-in-app/app-store links are not shown inside the app.",
3640
+ "landing.pricing_period_select": "Web-only: the public pricing page billing-period chooser is not in the native app.",
3641
+ "landing.section_nav": "Web-only: in-page landing section jump links do not exist in the native app.",
3642
+ "landing.social_link": "Not built on Android: the native landing shows no social-channel links.",
3643
+ "like_composer.send_without_comment": "Not built on Android: a rose requires a note, so there is no send-without-comment path.",
3644
+ "like_composer.upgrade": "Not built on Android: no upgrade prompt inside the like composer.",
3645
+ "likes_you.liked_item_open": "Not built on Android: a liker row opens the full profile; the liked element is not separately tappable.",
3646
+ "login.apple": "Not built on Android: Sign in with Apple is not offered.",
3647
+ "login.passkey": "Not built on Android: passkey sign-in is not offered on the login screen.",
3648
+ "login.passkey_setup": "Not built on Android: no post-sign-in account/passkey setup step (passkeys are not offered).",
3649
+ "login.redeem_invite": "Not built on Android: the login screen has no invite link; redemption is launched from the landing screen.",
3650
+ "login.resend_code": "Not built on Android: the login OTP step has no resend-code link.",
3651
+ "nav.back": "Platform-provided: back navigation uses the system back gesture/button, not an in-app top-bar arrow.",
3652
+ "nav.home_logo": "Not built on Android: the main shell shows no tappable wordmark/logo.",
3653
+ "nav.hooked_dismiss": "Not built on Android: a mutual match shows a transient toast, not a dismissible hooked overlay.",
3654
+ "nav.hooked_go_to_chat": "Not built on Android: a mutual match shows a transient toast, not an interactive hooked overlay with a go-to-chat button.",
3655
+ "nav.menu_open": "Not built on Android: navigation uses a bottom tab bar, with no hamburger/more menu.",
3656
+ "nav.search_open": "Not built on Android: there is no global search/explore entry.",
3657
+ "notifications.item_dismiss": "Not built on Android: no in-app notification center; system notifications are dismissed by the OS.",
3658
+ "notifications.item_open": "Not built on Android: no in-app notification center; push opens are reported via notification_opened.",
3659
+ "onboarding.back": "Not built on Android: onboarding is a single page, with no per-step back control.",
3660
+ "onboarding.next": "Not built on Android: onboarding is a single page completed at once, with no per-step next.",
3661
+ "onboarding.photo_add": "Not built on Android: onboarding collects no photos (added later in profile editing).",
3662
+ "onboarding.photo_remove": "Not built on Android: onboarding collects no photos.",
3663
+ "onboarding.photo_remove_confirm": "Not built on Android: onboarding collects no photos, so there is no photo-remove confirmation.",
3664
+ "onboarding.prompt_add": "Not built on Android: onboarding collects no written prompts.",
3665
+ "onboarding.prompt_remove": "Not built on Android: onboarding collects no written prompts.",
3666
+ "onboarding.voice_add": "Not built on Android: onboarding collects no voice prompt.",
3667
+ "onboarding.voice_remove": "Not built on Android: onboarding collects no voice prompt.",
3668
+ "paywall.features_expand": "Not built on Android: the membership screen has no expandable feature comparison.",
3669
+ "paywall.purchase": "Not built on Android: membership is reconciled from billing (restore), with no in-app purchase/tier picker.",
3670
+ "photo_viewer.next": "Not built on Android: the photo viewer shows a single photo with no next control.",
3671
+ "photo_viewer.previous": "Not built on Android: the photo viewer shows a single photo with no previous control.",
3672
+ "preferences.locked_filter_tap": "Not built on Android: preferences have no locked/premium filters to tap.",
3673
+ "preferences.upgrade_open": "Not built on Android: preferences have no locked/premium filter upsell.",
3674
+ "profile.chat_settings_open": "Not built on Android: no chat-settings entry on the profile.",
3675
+ "profile.chat_tour_open": "Not built on Android: no replay-chat-intro entry (the chat intro tour is not built).",
3676
+ "profile.invite_code_copy": "Not built on Android: invites are generated and shared in one step via the system share sheet (profile.share_invite); no generated-code screen with a copy control.",
3677
+ "profile.invite_code_share": "Not built on Android: profile.share_invite launches the system share sheet directly; there is no separate share-generated-code control.",
3678
+ "profile.preview_open": "Not built on Android: no preview-my-profile-as-others-see-it entry.",
3679
+ "profile.settings_open": "Web-only: Android shows settings inline on the profile, with no separate settings entry button.",
3680
+ "profile.tab_select": "Not built on Android: the profile is a single scrolling screen with no sub-section tabs.",
3681
+ "profile.voice_play": "Not built on Android: the profile shows no own-voice-prompt player.",
3682
+ "profile_edit.choice_select": "Not built on Android: profile editing uses free-text fields, not segmented choice chips.",
3683
+ "profile_edit.photo_adjust": "Not built on Android: no in-app photo crop/adjust control.",
3684
+ "profile_edit.photo_remove": "Not built on Android: profile editing cannot remove individual photos.",
3685
+ "profile_edit.photo_remove_confirm": "Not built on Android: profile editing cannot remove individual photos, so there is no confirmation.",
3686
+ "profile_edit.photo_reorder": "Not built on Android: photos cannot be drag-reordered.",
3687
+ "profile_edit.photo_set_primary": "Not built on Android: no make-a-photo-primary control.",
3688
+ "profile_edit.preview": "Not built on Android: no preview-while-editing control.",
3689
+ "profile_edit.prompt_add": "Not built on Android: profile editing has no written-prompt management.",
3690
+ "profile_edit.prompt_remove": "Not built on Android: profile editing has no written-prompt management.",
3691
+ "profile_edit.voice_add": "Not built on Android: profile editing has no voice-prompt recording.",
3692
+ "profile_edit.voice_remove": "Not built on Android: profile editing has no voice-prompt management.",
3693
+ "redeem_invite.resend_code": "Not built on Android: the redemption OTP step has no resend-code control.",
3694
+ "search.close": "Not built on Android: there is no search/explore surface.",
3695
+ "search.filter_select": "Not built on Android: there is no search/explore surface.",
3696
+ "search.query_clear": "Not built on Android: there is no search/explore surface.",
3697
+ "search.result_open": "Not built on Android: there is no search/explore surface.",
3698
+ "settings.apple_link": "Not built on Android: linking/unlinking Apple is not offered.",
3699
+ "settings.help_link": "Not built on Android: settings/profile show no help/support/legal links (policy links live on the landing screen).",
3700
+ "settings.passkey_add": "Not built on Android: passkey enrolment is not offered in settings.",
3701
+ "settings.password_set": "Not built on Android: setting/changing a password is only available via the login reset flow.",
3702
+ "settings.password_set_confirm": "Not built on Android: setting a password is only via the login reset flow, with no go-to-sign-in confirmation dialog.",
3703
+ "settings.recovery_approve": "Platform-provided: a history-recovery request is approved via the system BiometricPrompt, not an in-app dialog button.",
3704
+ "settings.safety_open": "Not built on Android: no safety-centre/blocked-users entry in settings.",
3705
+ "settings.sign_out_confirm": "Not built on Android: sign out is immediate with no confirmation dialog.",
3706
+ "settings.unblock_confirm": "Not built on Android: no unblock control (there is no in-app blocked-users list), so no confirmation.",
3707
+ "settings.unblock_user": "Not built on Android: no unblock control (there is no in-app blocked-users list).",
3708
+ "shared.error_recover": "Not built on Android: no global crash/error recovery screen; load errors use screen-specific retries (discover.retry, chat.retry, profile.retry).",
3709
+ "shared.prompt_preset_select": "Not built on Android: profile/onboarding prompts are not built, so there is no prompt-preset chooser.",
3710
+ "shared.voice_recorder": "Not built on Android: the only recorder is the chat voice note (chat.voice_record_*); no profile/shared voice-prompt recorder."
3711
+ }
3712
+ },
3713
+ "exemptCategories": {
3714
+ "duplicate": "The same press is already emitted by another site (wrapper / forwarder / dispatcher / emitted in the callee).",
3715
+ "backdrop": "Click-away backdrop or modal container that only closes a surface or stops propagation (not a control).",
3716
+ "gesture": "Non-press gesture: keyboard dismiss, pinch/double-tap zoom, paging, hold-to-pause, scroll.",
3717
+ "continuous": "Continuous value stream (slider drag, text input); the committed value is tracked elsewhere.",
3718
+ "disabled": "Never interactive (permanently disabled / decorative)."
3719
+ },
3720
+ "signals": {
3721
+ "screen_view": {
3722
+ "description": "A screen was shown.",
3723
+ "attributes": {
3724
+ "screen": {
3725
+ "type": "string",
3726
+ "enum": "ViewableScreen",
3727
+ "required": true,
3728
+ "description": "Canonical screen.",
3729
+ "invalidReason": "bad_screen",
3730
+ "missingReason": "missing_screen"
3731
+ }
3732
+ }
3733
+ },
3734
+ "ui_interaction": {
3735
+ "description": "A registered UI element was interacted with. The standard way to track every click.",
3736
+ "attributes": {
3737
+ "elementId": {
3738
+ "type": "string",
3739
+ "enum": "UiElement",
3740
+ "required": true,
3741
+ "description": "Registered UI element id.",
3742
+ "invalidReason": "unknown_element"
3743
+ },
3744
+ "action": {
3745
+ "type": "string",
3746
+ "enum": "UiAction",
3747
+ "description": "Standard verb (defaults to the element's first action)."
3748
+ },
3749
+ "value": {
3750
+ "type": "string",
3751
+ "maxLength": 64,
3752
+ "description": "Element-specific value from its declared value set."
3753
+ },
3754
+ "index": {
3755
+ "type": "number",
3756
+ "description": "Position in a list / gallery.",
3757
+ "min": 0
3758
+ },
3759
+ "targetId": {
3760
+ "type": "string",
3761
+ "description": "Opaque id of the entity acted on (user / match / media).",
3762
+ "required": false,
3763
+ "maxLength": 256
3764
+ },
3765
+ "screen": {
3766
+ "type": "string",
3767
+ "enum": "Screen",
3768
+ "description": "SERVER-STAMPED from the element's home screen; clients need not send it."
3769
+ },
3770
+ "context": {
3771
+ "type": "string",
3772
+ "enum": "ViewableScreen",
3773
+ "dropInvalid": true,
3774
+ "description": "Host screen. Recommended for SHARED elements (and any element presented away from its home screen)."
3775
+ }
3776
+ }
3777
+ },
3778
+ "card_impression": {
3779
+ "description": "A discovery card was shown.",
3780
+ "attributes": {
3781
+ "candidateId": {
3782
+ "type": "string",
3783
+ "description": "Opaque candidate user id.",
3784
+ "required": false,
3785
+ "maxLength": 100
3786
+ },
3787
+ "index": {
3788
+ "type": "number",
3789
+ "description": "Deck position.",
3790
+ "min": 0
3791
+ },
3792
+ "dwellMs": {
3793
+ "type": "number",
3794
+ "description": "Milliseconds on screen.",
3795
+ "min": 0,
3796
+ "max": 3600000,
3797
+ "invalidReason": "dwell_out_of_range"
3798
+ }
3799
+ }
3800
+ },
3801
+ "card_swipe_ui": {
3802
+ "description": "A discovery decision UI action.",
3803
+ "attributes": {
3804
+ "direction": {
3805
+ "type": "string",
3806
+ "enum": "SwipeDirection",
3807
+ "description": "left = pass, right = like, up = rose.",
3808
+ "invalidReason": "bad_swipe_direction"
3809
+ },
3810
+ "candidateId": {
3811
+ "type": "string",
3812
+ "description": "Opaque candidate user id.",
3813
+ "required": false,
3814
+ "maxLength": 100
3815
+ }
3816
+ }
3817
+ },
3818
+ "prompt_view": {
3819
+ "description": "A written prompt was viewed.",
3820
+ "attributes": {
3821
+ "promptId": {
3822
+ "type": "string",
3823
+ "description": "Opaque prompt id.",
3824
+ "required": true,
3825
+ "maxLength": 256
3826
+ },
3827
+ "viewedUserId": {
3828
+ "type": "string",
3829
+ "description": "Opaque id of the profile being viewed.",
3830
+ "required": false,
3831
+ "maxLength": 256
3832
+ },
3833
+ "cardVariant": {
3834
+ "type": "string",
3835
+ "enum": "CardVariant",
3836
+ "dropInvalid": true,
3837
+ "description": "Discovery card design."
3838
+ }
3839
+ }
3840
+ },
3841
+ "media_view": {
3842
+ "description": "A photo / video / voice element was viewed.",
3843
+ "attributes": {
3844
+ "mediaId": {
3845
+ "type": "string",
3846
+ "description": "Opaque media key.",
3847
+ "required": true,
3848
+ "maxLength": 512
3849
+ },
3850
+ "mediaType": {
3851
+ "type": "string",
3852
+ "enum": "MediaType",
3853
+ "required": true,
3854
+ "description": "Media type."
3855
+ },
3856
+ "dwellMs": {
3857
+ "type": "number",
3858
+ "description": "Milliseconds on screen.",
3859
+ "min": 0,
3860
+ "max": 3600000,
3861
+ "invalidReason": "dwell_out_of_range"
3862
+ },
3863
+ "index": {
3864
+ "type": "number",
3865
+ "description": "Gallery position.",
3866
+ "min": 0
3867
+ },
3868
+ "viewedUserId": {
3869
+ "type": "string",
3870
+ "description": "Opaque id of the profile being viewed.",
3871
+ "required": false,
3872
+ "maxLength": 256
3873
+ },
3874
+ "context": {
3875
+ "type": "string",
3876
+ "enum": "ViewableScreen",
3877
+ "dropInvalid": true,
3878
+ "description": "Screen the signal happened on."
3879
+ },
3880
+ "cardVariant": {
3881
+ "type": "string",
3882
+ "enum": "CardVariant",
3883
+ "dropInvalid": true,
3884
+ "description": "Discovery card design."
3885
+ },
3886
+ "playedToCompletion": {
3887
+ "type": "boolean",
3888
+ "description": "A voice/video clip played to the end."
3889
+ }
3890
+ }
3891
+ },
3892
+ "media_fullscreen_open": {
3893
+ "description": "A photo was opened full screen.",
3894
+ "attributes": {
3895
+ "mediaId": {
3896
+ "type": "string",
3897
+ "description": "Opaque media key.",
3898
+ "required": true,
3899
+ "maxLength": 512
3900
+ },
3901
+ "mediaType": {
3902
+ "type": "string",
3903
+ "enum": "MediaType",
3904
+ "required": true,
3905
+ "description": "Media type (image)."
3906
+ },
3907
+ "index": {
3908
+ "type": "number",
3909
+ "description": "Gallery position.",
3910
+ "min": 0
3911
+ },
3912
+ "viewedUserId": {
3913
+ "type": "string",
3914
+ "description": "Opaque id of the profile being viewed.",
3915
+ "required": false,
3916
+ "maxLength": 256
3917
+ },
3918
+ "context": {
3919
+ "type": "string",
3920
+ "enum": "ViewableScreen",
3921
+ "dropInvalid": true,
3922
+ "description": "Screen the signal happened on."
3923
+ }
3924
+ }
3925
+ },
3926
+ "section_view": {
3927
+ "description": "A profile section was viewed.",
3928
+ "attributes": {
3929
+ "sectionId": {
3930
+ "type": "string",
3931
+ "enum": "ProfileSection",
3932
+ "required": true,
3933
+ "description": "Profile section."
3934
+ },
3935
+ "viewedUserId": {
3936
+ "type": "string",
3937
+ "description": "Opaque id of the profile being viewed.",
3938
+ "required": false,
3939
+ "maxLength": 256
3940
+ },
3941
+ "dwellMs": {
3942
+ "type": "number",
3943
+ "description": "Milliseconds on screen.",
3944
+ "min": 0,
3945
+ "max": 3600000,
3946
+ "invalidReason": "dwell_out_of_range"
3947
+ },
3948
+ "context": {
3949
+ "type": "string",
3950
+ "enum": "ViewableScreen",
3951
+ "dropInvalid": true,
3952
+ "description": "Screen the signal happened on."
3953
+ },
3954
+ "cardVariant": {
3955
+ "type": "string",
3956
+ "enum": "CardVariant",
3957
+ "dropInvalid": true,
3958
+ "description": "Discovery card design."
3959
+ }
3960
+ }
3961
+ },
3962
+ "notification_opened": {
3963
+ "description": "A notification was opened.",
3964
+ "attributes": {
3965
+ "notifType": {
3966
+ "type": "string",
3967
+ "enum": "NotificationType",
3968
+ "required": true,
3969
+ "description": "Notification kind."
3970
+ },
3971
+ "matchId": {
3972
+ "type": "string",
3973
+ "description": "Opaque match id.",
3974
+ "required": false,
3975
+ "maxLength": 256
3976
+ },
3977
+ "openLatencyMs": {
3978
+ "type": "number",
3979
+ "description": "Delivery-to-open latency.",
3980
+ "min": 0
3981
+ },
3982
+ "channel": {
3983
+ "type": "string",
3984
+ "enum": "NotificationChannel",
3985
+ "dropInvalid": true,
3986
+ "description": "push | in_app."
3987
+ }
3988
+ }
3989
+ },
3990
+ "session_heartbeat": {
3991
+ "description": "Periodic foreground heartbeat.",
3992
+ "attributes": {}
3993
+ },
3994
+ "like_composer_open": {
3995
+ "description": "The comment-to-like composer was opened.",
3996
+ "attributes": {
3997
+ "likeTargetType": {
3998
+ "type": "string",
3999
+ "enum": "LikeTargetType",
4000
+ "description": "Targeted element type."
4001
+ },
4002
+ "likeTargetRef": {
4003
+ "type": "string",
4004
+ "description": "Opaque element ref (never text).",
4005
+ "required": false,
4006
+ "maxLength": 256
4007
+ }
4008
+ }
4009
+ },
4010
+ "like_comment_abandoned": {
4011
+ "description": "The like composer was closed without sending.",
4012
+ "attributes": {
4013
+ "likeTargetType": {
4014
+ "type": "string",
4015
+ "enum": "LikeTargetType",
4016
+ "description": "Targeted element type."
4017
+ },
4018
+ "composeDurationMs": {
4019
+ "type": "number",
4020
+ "description": "Milliseconds the composer was open.",
4021
+ "min": 0,
4022
+ "max": 3600000,
4023
+ "invalidReason": "compose_duration_out_of_range"
4024
+ },
4025
+ "hadDraft": {
4026
+ "type": "boolean",
4027
+ "description": "Whether any text had been entered."
4028
+ }
4029
+ }
4030
+ },
4031
+ "conversation_opened": {
4032
+ "description": "A match's conversation was opened (metadata only).",
4033
+ "attributes": {
4034
+ "matchId": {
4035
+ "type": "string",
4036
+ "description": "Opaque match id.",
4037
+ "required": true,
4038
+ "maxLength": 256
4039
+ },
4040
+ "unreadCount": {
4041
+ "type": "number",
4042
+ "description": "Unread messages at open.",
4043
+ "min": 0
4044
+ },
4045
+ "msSinceLastMessage": {
4046
+ "type": "number",
4047
+ "description": "Ms since the last message.",
4048
+ "min": 0
4049
+ }
4050
+ }
4051
+ },
4052
+ "compose_abandoned": {
4053
+ "description": "The message composer was left without sending.",
4054
+ "attributes": {
4055
+ "matchId": {
4056
+ "type": "string",
4057
+ "description": "Opaque match id.",
4058
+ "required": true,
4059
+ "maxLength": 256
4060
+ },
4061
+ "composeDurationMs": {
4062
+ "type": "number",
4063
+ "description": "Milliseconds the composer was open.",
4064
+ "min": 0,
4065
+ "max": 3600000,
4066
+ "invalidReason": "compose_duration_out_of_range"
4067
+ },
4068
+ "hadDraft": {
4069
+ "type": "boolean",
4070
+ "description": "Whether any text had been entered."
4071
+ }
4072
+ }
4073
+ },
4074
+ "profile_revisit": {
4075
+ "description": "A candidate's / match's profile was re-opened.",
4076
+ "attributes": {
4077
+ "viewedUserId": {
4078
+ "type": "string",
4079
+ "description": "Opaque profile id.",
4080
+ "required": true,
4081
+ "maxLength": 256
4082
+ },
4083
+ "context": {
4084
+ "type": "string",
4085
+ "enum": "ViewableScreen",
4086
+ "dropInvalid": true,
4087
+ "description": "Screen the signal happened on."
4088
+ }
4089
+ }
4090
+ },
4091
+ "hooked_state_view": {
4092
+ "description": "Reaction to the hooked (one connection at a time) overlay.",
4093
+ "attributes": {
4094
+ "action": {
4095
+ "type": "string",
4096
+ "enum": "HookedStateAction",
4097
+ "dropInvalid": true,
4098
+ "description": "Reaction.",
4099
+ "invalidReason": "bad_action"
4100
+ }
4101
+ }
4102
+ },
4103
+ "likes_you_view": {
4104
+ "description": "Engagement with Likes You.",
4105
+ "attributes": {
4106
+ "count": {
4107
+ "type": "number",
4108
+ "description": "Likes shown.",
4109
+ "min": 0
4110
+ },
4111
+ "index": {
4112
+ "type": "number",
4113
+ "description": "Position engaged with.",
4114
+ "min": 0
4115
+ }
4116
+ }
4117
+ },
4118
+ "safety_ui_open": {
4119
+ "description": "Unmatch / block / report UI opened (intent only).",
4120
+ "attributes": {
4121
+ "action": {
4122
+ "type": "string",
4123
+ "enum": "SafetyAction",
4124
+ "required": true,
4125
+ "description": "Safety intent.",
4126
+ "missingReason": "bad_safety_action",
4127
+ "invalidReason": "bad_safety_action"
4128
+ },
4129
+ "abandoned": {
4130
+ "type": "boolean",
4131
+ "description": "Closed without completing."
4132
+ }
4133
+ }
4134
+ }
4135
+ },
4136
+ "hash": "25955dd2f9856888"
4137
+ }