@apexnative/navigation 1.0.0-alpha.1 → 1.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +147 -51
  3. package/android/CLAUDE.md +10 -4
  4. package/android/CORE.md +4 -1
  5. package/android/RECIPES.md +4 -3
  6. package/android/src/main/java/dev/apexnative/navigation/react/ArrangementStates.kt +5 -4
  7. package/android/src/main/java/dev/apexnative/navigation/react/ErrorTexts.kt +75 -60
  8. package/android/src/main/java/dev/apexnative/navigation/react/Hinge.kt +3 -2
  9. package/android/src/main/java/dev/apexnative/navigation/react/OptionsCommands.kt +1 -1
  10. package/android/src/main/java/dev/apexnative/navigation/react/ScreenInsets.kt +5 -4
  11. package/android/src/main/java/dev/apexnative/navigation/react/ScreenRegions.kt +7 -6
  12. package/android/src/main/java/dev/apexnative/navigation/react/events/AppearanceDispatcher.kt +3 -35
  13. package/android/src/main/java/dev/apexnative/navigation/react/events/EventContract.kt +226 -0
  14. package/android/src/main/java/dev/apexnative/navigation/react/events/EventEmitter.kt +101 -87
  15. package/android/src/main/java/dev/apexnative/navigation/react/events/ScreenAppearance.kt +0 -6
  16. package/android/src/main/java/dev/apexnative/navigation/utils/UiUtils.kt +3 -3
  17. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabItems.kt +3 -3
  18. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalCoordinator.kt +12 -8
  19. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalSheet.kt +12 -11
  20. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalViews.kt +2 -2
  21. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/SheetStops.kt +25 -0
  22. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/Navigator.kt +1 -1
  23. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuController.kt +1 -3
  24. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuMotion.kt +4 -7
  25. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuPresenter.kt +16 -7
  26. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuRules.kt +8 -1
  27. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitViewController.kt +2 -1
  28. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarPresenter.kt +2 -1
  29. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabs.kt +5 -5
  30. package/android/src/main/java/dev/apexnative/navigation/views/element/ElementStep.kt +31 -0
  31. package/android/src/main/java/dev/apexnative/navigation/views/element/ElementTransitions.kt +85 -27
  32. package/android/src/main/java/dev/apexnative/navigation/views/element/TargetsWait.kt +5 -4
  33. package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionTargets.kt +9 -6
  34. package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionViews.kt +100 -0
  35. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ElementPictures.kt +45 -1
  36. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ImageMatrixAnimator.kt +3 -5
  37. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/PlainViewAnimator.kt +3 -5
  38. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ReactImageAnimator.kt +3 -5
  39. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/SharedAnimatorFactory.kt +2 -0
  40. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/TextChangeAnimator.kt +4 -6
  41. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ViewChangeAnimator.kt +4 -6
  42. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/ButtonBar.kt +4 -3
  43. package/cli/app.js +1 -1
  44. package/cli/project.js +6 -2
  45. package/cli/setup/index.js +13 -0
  46. package/cli/setup/steps/appDelegate.js +66 -11
  47. package/cli/setup/steps/sceneDelegate.js +108 -0
  48. package/docs-md/architecture/transitions.md +1 -1
  49. package/docs-md/guides/deep-links.md +15 -33
  50. package/docs-md/start/installation.md +1 -0
  51. package/ios/Animations/ANNTransitionAnimator.mm +13 -11
  52. package/ios/Animations/ANNTransitionWait.mm +6 -7
  53. package/ios/Animations/Elements/ANNElementFinder.h +57 -0
  54. package/ios/Animations/Elements/ANNElementFinder.mm +174 -2
  55. package/ios/Animations/Elements/ANNElementTransition.h +7 -5
  56. package/ios/Animations/Elements/ANNElementTransition.mm +17 -19
  57. package/ios/Animations/Elements/ANNSharedElementFlight.h +13 -8
  58. package/ios/Animations/Elements/ANNSharedElementFlight.mm +59 -24
  59. package/ios/CLAUDE.md +10 -2
  60. package/ios/CORE.md +3 -2
  61. package/ios/Contract/ANNCommandAnswer.h +4 -3
  62. package/ios/Contract/ANNCommandAnswer.mm +12 -2
  63. package/ios/Contract/ANNCommandRunner.h +2 -2
  64. package/ios/Contract/ANNCommandRunner.mm +1 -1
  65. package/ios/Contract/ANNErrorTexts.h +6 -2
  66. package/ios/Contract/ANNErrorTexts.mm +18 -10
  67. package/ios/Core/ANNDeepLinkQueue.h +20 -1
  68. package/ios/Core/ANNDeepLinkQueue.mm +107 -12
  69. package/ios/Core/ANNErrorHandler.h +8 -3
  70. package/ios/Core/ANNErrorHandler.mm +17 -1
  71. package/ios/Core/ANNEventContract.h +246 -0
  72. package/ios/Core/ANNEventContract.mm +225 -0
  73. package/ios/Core/ANNEventEmitter.h +5 -1
  74. package/ios/Core/ANNEventEmitter.mm +117 -80
  75. package/ios/Core/ANNHinge.mm +6 -4
  76. package/ios/Core/ANNSceneDelegate.mm +25 -15
  77. package/ios/Core/ANNSystemUI.h +3 -2
  78. package/ios/Core/ANNSystemUI.mm +7 -0
  79. package/ios/Layouts/Arrangement/ANNArrangementViewController.mm +6 -4
  80. package/ios/Layouts/Modal/ANNModalCoordinator.mm +1 -1
  81. package/ios/Layouts/Modal/ANNModalPresentation.h +8 -5
  82. package/ios/Layouts/Modal/ANNModalPresentation.mm +12 -12
  83. package/ios/Layouts/Modal/ANNSheetPresenter.mm +83 -1
  84. package/ios/Layouts/Root/ANNRootCoordinator.mm +12 -3
  85. package/ios/Layouts/Screen/ANNComponentPresenter.h +11 -3
  86. package/ios/Layouts/Screen/ANNComponentPresenter.mm +34 -6
  87. package/ios/Layouts/Screen/ANNComponentViewController.mm +28 -7
  88. package/ios/Layouts/Screen/ANNNativeScreenContext.mm +7 -5
  89. package/ios/Layouts/Screen/ANNScreenInsets.mm +6 -4
  90. package/ios/Layouts/Screen/ANNScreenRegions.mm +9 -6
  91. package/ios/Layouts/SplitView/ANNSplitViewController.mm +4 -7
  92. package/ios/Options/ANNSheetOptions.h +4 -1
  93. package/ios/Public/ApexNavigation/ANNSceneDelegate.h +3 -0
  94. package/ios/RECIPES.md +2 -1
  95. package/ios/TurboModules/ANNTurboEventEmitter.mm +4 -35
  96. package/ios/TurboModules/ANNTurboModule.mm +5 -2
  97. package/lib/module/ARCHITECTURE.md +7 -4
  98. package/lib/module/api/app/createNavigation.js +2 -0
  99. package/lib/module/api/app/createNavigation.js.map +1 -1
  100. package/lib/module/api/linking/dispatchedLinks.js +23 -0
  101. package/lib/module/api/linking/dispatchedLinks.js.map +1 -0
  102. package/lib/module/interfaces/contract/errors.json +275 -0
  103. package/lib/typescript/api/app/createNavigation.d.ts.map +1 -1
  104. package/lib/typescript/api/linking/dispatchedLinks.d.ts +7 -0
  105. package/lib/typescript/api/linking/dispatchedLinks.d.ts.map +1 -0
  106. package/lib/typescript/interfaces/Events.d.ts +9 -0
  107. package/lib/typescript/interfaces/Events.d.ts.map +1 -1
  108. package/lib/typescript/interfaces/options/animations.d.ts +17 -13
  109. package/lib/typescript/interfaces/options/animations.d.ts.map +1 -1
  110. package/lib/typescript/interfaces/options/modals.d.ts +15 -11
  111. package/lib/typescript/interfaces/options/modals.d.ts.map +1 -1
  112. package/lib/typescript/interfaces/options/sideMenu.d.ts +7 -6
  113. package/lib/typescript/interfaces/options/sideMenu.d.ts.map +1 -1
  114. package/lib/typescript/interfaces/options/system.d.ts +4 -3
  115. package/lib/typescript/interfaces/options/system.d.ts.map +1 -1
  116. package/package.json +1 -1
  117. package/src/ARCHITECTURE.md +7 -4
  118. package/src/api/app/createNavigation.ts +2 -0
  119. package/src/api/linking/dispatchedLinks.ts +18 -0
  120. package/src/interfaces/Events.ts +10 -0
  121. package/src/interfaces/contract/errors.json +275 -0
  122. package/src/interfaces/options/animations.ts +17 -13
  123. package/src/interfaces/options/modals.ts +15 -11
  124. package/src/interfaces/options/sideMenu.ts +7 -6
  125. package/src/interfaces/options/system.ts +4 -3
@@ -1,12 +1,28 @@
1
1
  #import "ANNErrorHandler.h"
2
+ #import "ANNErrorTexts.h"
2
3
  #import <React/RCTLog.h>
3
4
 
4
5
  @implementation ANNErrorHandler
5
6
 
6
- + (void)reject:(RCTPromiseRejectBlock)reject text:(NSString *)text {
7
+ // Calling a nil block ends the app (`EXC_BAD_ACCESS` at 0x10, its invoke field): JavaScript always passes both blocks,
8
+ // so a nil one comes from a caller in native code, and the answer goes to the log.
9
+ + (void)reject:(RCTPromiseRejectBlock)reject of:(NSString *)method text:(NSString *)text {
10
+ if (!reject) {
11
+ [self logFailureOf:method text:text];
12
+ return;
13
+ }
7
14
  reject(nil, text, nil);
8
15
  }
9
16
 
17
+ + (void)resolve:(RCTPromiseResolveBlock)resolve of:(NSString *)method value:(id)value {
18
+ if (!resolve) {
19
+ [self logFailureOf:method
20
+ text:[ANNErrorTexts couldNot:@"resolve its promise" reason:@"the command came without one"]];
21
+ return;
22
+ }
23
+ resolve(value);
24
+ }
25
+
10
26
  + (void)logFailureOf:(NSString *)method text:(NSString *)text {
11
27
  RCTLogError(@"[ApexNavigation] %@: %@", method, text);
12
28
  }
@@ -0,0 +1,246 @@
1
+ // Made by scripts/contract.mjs from the event types of src/interfaces/: change them and run the script again.
2
+
3
+ #import <Foundation/Foundation.h>
4
+
5
+ NS_ASSUME_NONNULL_BEGIN
6
+
7
+ /// The names of the events `ANN.<Name>` (`event`) and the keys of their payloads, as the types of `src/interfaces/`
8
+ /// give them; what each field means is its JSDoc there. The object types a field holds have keys of their own. The
9
+ /// senders take every name and key from here: `ANNEventContract.CommandCompleted.commandId`.
10
+ FOUNDATION_EXPORT const struct ANNEventContractTable {
11
+ /// `ANN.AppLaunched`.
12
+ struct {
13
+ __unsafe_unretained NSString *event;
14
+ } AppLaunched;
15
+ /// `ANN.ArrangementChanged`.
16
+ struct {
17
+ __unsafe_unretained NSString *event;
18
+ __unsafe_unretained NSString *componentId;
19
+ __unsafe_unretained NSString *placement;
20
+ __unsafe_unretained NSString *layout;
21
+ __unsafe_unretained NSString *front;
22
+ __unsafe_unretained NSString *hidden;
23
+ } ArrangementChanged;
24
+ /// `ANN.BottomAccessoryPlacementChanged` (iOS).
25
+ struct {
26
+ __unsafe_unretained NSString *event;
27
+ __unsafe_unretained NSString *componentId;
28
+ __unsafe_unretained NSString *placement;
29
+ } BottomAccessoryPlacementChanged;
30
+ /// `ANN.BottomTabLongPressed`.
31
+ struct {
32
+ __unsafe_unretained NSString *event;
33
+ __unsafe_unretained NSString *selectedTabIndex;
34
+ __unsafe_unretained NSString *bottomTabsId;
35
+ } BottomTabLongPressed;
36
+ /// `ANN.BottomTabPressed`.
37
+ struct {
38
+ __unsafe_unretained NSString *event;
39
+ __unsafe_unretained NSString *tabIndex;
40
+ __unsafe_unretained NSString *bottomTabsId;
41
+ /// Optional.
42
+ __unsafe_unretained NSString *screenId;
43
+ __unsafe_unretained NSString *wasSelected;
44
+ } BottomTabPressed;
45
+ /// `ANN.BottomTabSelected`.
46
+ struct {
47
+ __unsafe_unretained NSString *event;
48
+ __unsafe_unretained NSString *selectedTabIndex;
49
+ __unsafe_unretained NSString *unselectedTabIndex;
50
+ __unsafe_unretained NSString *bottomTabsId;
51
+ } BottomTabSelected;
52
+ /// `ANN.CommandCompleted`.
53
+ struct {
54
+ __unsafe_unretained NSString *event;
55
+ __unsafe_unretained NSString *commandName;
56
+ __unsafe_unretained NSString *commandId;
57
+ __unsafe_unretained NSString *completionTime;
58
+ } CommandCompleted;
59
+ /// `ANN.ComponentDidAppear`.
60
+ struct {
61
+ __unsafe_unretained NSString *event;
62
+ __unsafe_unretained NSString *componentId;
63
+ __unsafe_unretained NSString *componentName;
64
+ __unsafe_unretained NSString *componentType;
65
+ } ComponentDidAppear;
66
+ /// `ANN.ComponentDidDisappear`.
67
+ struct {
68
+ __unsafe_unretained NSString *event;
69
+ __unsafe_unretained NSString *componentId;
70
+ __unsafe_unretained NSString *componentName;
71
+ __unsafe_unretained NSString *componentType;
72
+ } ComponentDidDisappear;
73
+ /// `ANN.ComponentWillAppear`.
74
+ struct {
75
+ __unsafe_unretained NSString *event;
76
+ __unsafe_unretained NSString *componentId;
77
+ __unsafe_unretained NSString *componentName;
78
+ __unsafe_unretained NSString *componentType;
79
+ } ComponentWillAppear;
80
+ /// `ANN.DeepLinkDispatched` (iOS).
81
+ struct {
82
+ __unsafe_unretained NSString *event;
83
+ __unsafe_unretained NSString *url;
84
+ } DeepLinkDispatched;
85
+ /// `ANN.HingeChanged`.
86
+ struct {
87
+ __unsafe_unretained NSString *event;
88
+ /// Optional.
89
+ __unsafe_unretained NSString *state;
90
+ /// Optional.
91
+ __unsafe_unretained NSString *angle;
92
+ } HingeChanged;
93
+ /// `ANN.KeyCommandPressed` (iOS).
94
+ struct {
95
+ __unsafe_unretained NSString *event;
96
+ __unsafe_unretained NSString *componentId;
97
+ __unsafe_unretained NSString *keyCommandId;
98
+ } KeyCommandPressed;
99
+ /// `ANN.ModalAttemptedToDismiss`.
100
+ struct {
101
+ __unsafe_unretained NSString *event;
102
+ __unsafe_unretained NSString *componentId;
103
+ } ModalAttemptedToDismiss;
104
+ /// `ANN.ModalDismissed`.
105
+ struct {
106
+ __unsafe_unretained NSString *event;
107
+ __unsafe_unretained NSString *componentId;
108
+ __unsafe_unretained NSString *componentName;
109
+ __unsafe_unretained NSString *modalsDismissed;
110
+ } ModalDismissed;
111
+ /// `ANN.NativeScreenCall`.
112
+ struct {
113
+ __unsafe_unretained NSString *event;
114
+ __unsafe_unretained NSString *componentId;
115
+ __unsafe_unretained NSString *callId;
116
+ __unsafe_unretained NSString *kind;
117
+ __unsafe_unretained NSString *name;
118
+ __unsafe_unretained NSString *args;
119
+ } NativeScreenCall;
120
+ /// `ANN.NativeScreenReleased`.
121
+ struct {
122
+ __unsafe_unretained NSString *event;
123
+ __unsafe_unretained NSString *componentId;
124
+ } NativeScreenReleased;
125
+ /// `ANN.NavigationButtonPressed`.
126
+ struct {
127
+ __unsafe_unretained NSString *event;
128
+ __unsafe_unretained NSString *componentId;
129
+ __unsafe_unretained NSString *buttonId;
130
+ /// Optional, iOS only.
131
+ __unsafe_unretained NSString *selected;
132
+ } NavigationButtonPressed;
133
+ /// `ANN.NavigationStateChanged`.
134
+ struct {
135
+ __unsafe_unretained NSString *event;
136
+ __unsafe_unretained NSString *screen;
137
+ __unsafe_unretained NSString *tab;
138
+ } NavigationStateChanged;
139
+ /// The object of `ANN.NavigationStateChanged.screen`.
140
+ struct {
141
+ __unsafe_unretained NSString *id;
142
+ __unsafe_unretained NSString *name;
143
+ } NavigationStateChangedScreen;
144
+ /// `ANN.PreviewCompleted` (iOS).
145
+ struct {
146
+ __unsafe_unretained NSString *event;
147
+ __unsafe_unretained NSString *componentId;
148
+ __unsafe_unretained NSString *previewComponentId;
149
+ } PreviewCompleted;
150
+ /// `ANN.ScreenInsetsChanged`.
151
+ struct {
152
+ __unsafe_unretained NSString *event;
153
+ __unsafe_unretained NSString *componentId;
154
+ __unsafe_unretained NSString *top;
155
+ __unsafe_unretained NSString *right;
156
+ __unsafe_unretained NSString *bottom;
157
+ __unsafe_unretained NSString *left;
158
+ } ScreenInsetsChanged;
159
+ /// `ANN.ScreenPopped`.
160
+ struct {
161
+ __unsafe_unretained NSString *event;
162
+ __unsafe_unretained NSString *componentId;
163
+ } ScreenPopped;
164
+ /// The object of `ANN.ScreenRegionsChanged.division`.
165
+ struct {
166
+ __unsafe_unretained NSString *x;
167
+ __unsafe_unretained NSString *y;
168
+ __unsafe_unretained NSString *width;
169
+ __unsafe_unretained NSString *height;
170
+ } ScreenRegionRect;
171
+ /// `ANN.ScreenRegionsChanged`.
172
+ struct {
173
+ __unsafe_unretained NSString *event;
174
+ __unsafe_unretained NSString *componentId;
175
+ __unsafe_unretained NSString *division;
176
+ __unsafe_unretained NSString *occlusion;
177
+ } ScreenRegionsChanged;
178
+ /// `ANN.SearchBarCancelPressed`.
179
+ struct {
180
+ __unsafe_unretained NSString *event;
181
+ __unsafe_unretained NSString *componentId;
182
+ } SearchBarCancelPressed;
183
+ /// `ANN.SearchBarSubmitted`.
184
+ struct {
185
+ __unsafe_unretained NSString *event;
186
+ __unsafe_unretained NSString *componentId;
187
+ __unsafe_unretained NSString *text;
188
+ /// Optional.
189
+ __unsafe_unretained NSString *scope;
190
+ /// Optional, iOS only.
191
+ __unsafe_unretained NSString *tokens;
192
+ } SearchBarSubmitted;
193
+ /// `ANN.SearchBarUpdated`.
194
+ struct {
195
+ __unsafe_unretained NSString *event;
196
+ __unsafe_unretained NSString *componentId;
197
+ __unsafe_unretained NSString *text;
198
+ __unsafe_unretained NSString *isFocused;
199
+ /// Optional.
200
+ __unsafe_unretained NSString *scope;
201
+ /// Optional, iOS only.
202
+ __unsafe_unretained NSString *tokens;
203
+ } SearchBarUpdated;
204
+ /// `ANN.SearchSuggestionPicked`.
205
+ struct {
206
+ __unsafe_unretained NSString *event;
207
+ __unsafe_unretained NSString *componentId;
208
+ __unsafe_unretained NSString *suggestionId;
209
+ } SearchSuggestionPicked;
210
+ /// `ANN.SheetDetentChanged`.
211
+ struct {
212
+ __unsafe_unretained NSString *event;
213
+ __unsafe_unretained NSString *componentId;
214
+ __unsafe_unretained NSString *detent;
215
+ } SheetDetentChanged;
216
+ /// `ANN.SlotDestroyed`.
217
+ struct {
218
+ __unsafe_unretained NSString *event;
219
+ __unsafe_unretained NSString *componentId;
220
+ } SlotDestroyed;
221
+ /// `ANN.SplitViewColumnsStacked`.
222
+ struct {
223
+ __unsafe_unretained NSString *event;
224
+ __unsafe_unretained NSString *componentId;
225
+ __unsafe_unretained NSString *stacked;
226
+ } SplitViewColumnsStacked;
227
+ /// `ANN.SplitViewDisplayModeChanged` (iOS).
228
+ struct {
229
+ __unsafe_unretained NSString *event;
230
+ __unsafe_unretained NSString *componentId;
231
+ __unsafe_unretained NSString *displayMode;
232
+ /// Optional.
233
+ __unsafe_unretained NSString *inspectorVisible;
234
+ } SplitViewDisplayModeChanged;
235
+ /// `ANN.TitleRenamed` (iOS).
236
+ struct {
237
+ __unsafe_unretained NSString *event;
238
+ __unsafe_unretained NSString *componentId;
239
+ __unsafe_unretained NSString *text;
240
+ } TitleRenamed;
241
+ } ANNEventContract;
242
+
243
+ /// The name of every event, `ANN.<Name>`.
244
+ FOUNDATION_EXPORT NSArray<NSString *> *ANNEventContractNames(void);
245
+
246
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,225 @@
1
+ // Made by scripts/contract.mjs from the event types of src/interfaces/: change them and run the script again.
2
+
3
+ #import "ANNEventContract.h"
4
+
5
+ const struct ANNEventContractTable ANNEventContract = {
6
+ .AppLaunched = {.event = @"ANN.AppLaunched"},
7
+ .ArrangementChanged =
8
+ {
9
+ .event = @"ANN.ArrangementChanged",
10
+ .componentId = @"componentId",
11
+ .placement = @"placement",
12
+ .layout = @"layout",
13
+ .front = @"front",
14
+ .hidden = @"hidden",
15
+ },
16
+ .BottomAccessoryPlacementChanged =
17
+ {
18
+ .event = @"ANN.BottomAccessoryPlacementChanged",
19
+ .componentId = @"componentId",
20
+ .placement = @"placement",
21
+ },
22
+ .BottomTabLongPressed =
23
+ {
24
+ .event = @"ANN.BottomTabLongPressed",
25
+ .selectedTabIndex = @"selectedTabIndex",
26
+ .bottomTabsId = @"bottomTabsId",
27
+ },
28
+ .BottomTabPressed =
29
+ {
30
+ .event = @"ANN.BottomTabPressed",
31
+ .tabIndex = @"tabIndex",
32
+ .bottomTabsId = @"bottomTabsId",
33
+ .screenId = @"screenId",
34
+ .wasSelected = @"wasSelected",
35
+ },
36
+ .BottomTabSelected =
37
+ {
38
+ .event = @"ANN.BottomTabSelected",
39
+ .selectedTabIndex = @"selectedTabIndex",
40
+ .unselectedTabIndex = @"unselectedTabIndex",
41
+ .bottomTabsId = @"bottomTabsId",
42
+ },
43
+ .CommandCompleted =
44
+ {
45
+ .event = @"ANN.CommandCompleted",
46
+ .commandName = @"commandName",
47
+ .commandId = @"commandId",
48
+ .completionTime = @"completionTime",
49
+ },
50
+ .ComponentDidAppear =
51
+ {
52
+ .event = @"ANN.ComponentDidAppear",
53
+ .componentId = @"componentId",
54
+ .componentName = @"componentName",
55
+ .componentType = @"componentType",
56
+ },
57
+ .ComponentDidDisappear =
58
+ {
59
+ .event = @"ANN.ComponentDidDisappear",
60
+ .componentId = @"componentId",
61
+ .componentName = @"componentName",
62
+ .componentType = @"componentType",
63
+ },
64
+ .ComponentWillAppear =
65
+ {
66
+ .event = @"ANN.ComponentWillAppear",
67
+ .componentId = @"componentId",
68
+ .componentName = @"componentName",
69
+ .componentType = @"componentType",
70
+ },
71
+ .DeepLinkDispatched = {.event = @"ANN.DeepLinkDispatched", .url = @"url"},
72
+ .HingeChanged = {.event = @"ANN.HingeChanged", .state = @"state", .angle = @"angle"},
73
+ .KeyCommandPressed =
74
+ {
75
+ .event = @"ANN.KeyCommandPressed",
76
+ .componentId = @"componentId",
77
+ .keyCommandId = @"keyCommandId",
78
+ },
79
+ .ModalAttemptedToDismiss =
80
+ {
81
+ .event = @"ANN.ModalAttemptedToDismiss",
82
+ .componentId = @"componentId",
83
+ },
84
+ .ModalDismissed =
85
+ {
86
+ .event = @"ANN.ModalDismissed",
87
+ .componentId = @"componentId",
88
+ .componentName = @"componentName",
89
+ .modalsDismissed = @"modalsDismissed",
90
+ },
91
+ .NativeScreenCall =
92
+ {
93
+ .event = @"ANN.NativeScreenCall",
94
+ .componentId = @"componentId",
95
+ .callId = @"callId",
96
+ .kind = @"kind",
97
+ .name = @"name",
98
+ .args = @"args",
99
+ },
100
+ .NativeScreenReleased = {.event = @"ANN.NativeScreenReleased", .componentId = @"componentId"},
101
+ .NavigationButtonPressed =
102
+ {
103
+ .event = @"ANN.NavigationButtonPressed",
104
+ .componentId = @"componentId",
105
+ .buttonId = @"buttonId",
106
+ .selected = @"selected",
107
+ },
108
+ .NavigationStateChanged =
109
+ {
110
+ .event = @"ANN.NavigationStateChanged",
111
+ .screen = @"screen",
112
+ .tab = @"tab",
113
+ },
114
+ .NavigationStateChangedScreen = {.id = @"id", .name = @"name"},
115
+ .PreviewCompleted =
116
+ {
117
+ .event = @"ANN.PreviewCompleted",
118
+ .componentId = @"componentId",
119
+ .previewComponentId = @"previewComponentId",
120
+ },
121
+ .ScreenInsetsChanged =
122
+ {
123
+ .event = @"ANN.ScreenInsetsChanged",
124
+ .componentId = @"componentId",
125
+ .top = @"top",
126
+ .right = @"right",
127
+ .bottom = @"bottom",
128
+ .left = @"left",
129
+ },
130
+ .ScreenPopped = {.event = @"ANN.ScreenPopped", .componentId = @"componentId"},
131
+ .ScreenRegionRect = {.x = @"x", .y = @"y", .width = @"width", .height = @"height"},
132
+ .ScreenRegionsChanged =
133
+ {
134
+ .event = @"ANN.ScreenRegionsChanged",
135
+ .componentId = @"componentId",
136
+ .division = @"division",
137
+ .occlusion = @"occlusion",
138
+ },
139
+ .SearchBarCancelPressed =
140
+ {
141
+ .event = @"ANN.SearchBarCancelPressed",
142
+ .componentId = @"componentId",
143
+ },
144
+ .SearchBarSubmitted =
145
+ {
146
+ .event = @"ANN.SearchBarSubmitted",
147
+ .componentId = @"componentId",
148
+ .text = @"text",
149
+ .scope = @"scope",
150
+ .tokens = @"tokens",
151
+ },
152
+ .SearchBarUpdated =
153
+ {
154
+ .event = @"ANN.SearchBarUpdated",
155
+ .componentId = @"componentId",
156
+ .text = @"text",
157
+ .isFocused = @"isFocused",
158
+ .scope = @"scope",
159
+ .tokens = @"tokens",
160
+ },
161
+ .SearchSuggestionPicked =
162
+ {
163
+ .event = @"ANN.SearchSuggestionPicked",
164
+ .componentId = @"componentId",
165
+ .suggestionId = @"suggestionId",
166
+ },
167
+ .SheetDetentChanged =
168
+ {
169
+ .event = @"ANN.SheetDetentChanged",
170
+ .componentId = @"componentId",
171
+ .detent = @"detent",
172
+ },
173
+ .SlotDestroyed = {.event = @"ANN.SlotDestroyed", .componentId = @"componentId"},
174
+ .SplitViewColumnsStacked =
175
+ {
176
+ .event = @"ANN.SplitViewColumnsStacked",
177
+ .componentId = @"componentId",
178
+ .stacked = @"stacked",
179
+ },
180
+ .SplitViewDisplayModeChanged =
181
+ {
182
+ .event = @"ANN.SplitViewDisplayModeChanged",
183
+ .componentId = @"componentId",
184
+ .displayMode = @"displayMode",
185
+ .inspectorVisible = @"inspectorVisible",
186
+ },
187
+ .TitleRenamed = {.event = @"ANN.TitleRenamed", .componentId = @"componentId", .text = @"text"},
188
+ };
189
+
190
+ NSArray<NSString *> *ANNEventContractNames(void) {
191
+ return @[
192
+ ANNEventContract.AppLaunched.event,
193
+ ANNEventContract.ArrangementChanged.event,
194
+ ANNEventContract.BottomAccessoryPlacementChanged.event,
195
+ ANNEventContract.BottomTabLongPressed.event,
196
+ ANNEventContract.BottomTabPressed.event,
197
+ ANNEventContract.BottomTabSelected.event,
198
+ ANNEventContract.CommandCompleted.event,
199
+ ANNEventContract.ComponentDidAppear.event,
200
+ ANNEventContract.ComponentDidDisappear.event,
201
+ ANNEventContract.ComponentWillAppear.event,
202
+ ANNEventContract.DeepLinkDispatched.event,
203
+ ANNEventContract.HingeChanged.event,
204
+ ANNEventContract.KeyCommandPressed.event,
205
+ ANNEventContract.ModalAttemptedToDismiss.event,
206
+ ANNEventContract.ModalDismissed.event,
207
+ ANNEventContract.NativeScreenCall.event,
208
+ ANNEventContract.NativeScreenReleased.event,
209
+ ANNEventContract.NavigationButtonPressed.event,
210
+ ANNEventContract.NavigationStateChanged.event,
211
+ ANNEventContract.PreviewCompleted.event,
212
+ ANNEventContract.ScreenInsetsChanged.event,
213
+ ANNEventContract.ScreenPopped.event,
214
+ ANNEventContract.ScreenRegionsChanged.event,
215
+ ANNEventContract.SearchBarCancelPressed.event,
216
+ ANNEventContract.SearchBarSubmitted.event,
217
+ ANNEventContract.SearchBarUpdated.event,
218
+ ANNEventContract.SearchSuggestionPicked.event,
219
+ ANNEventContract.SheetDetentChanged.event,
220
+ ANNEventContract.SlotDestroyed.event,
221
+ ANNEventContract.SplitViewColumnsStacked.event,
222
+ ANNEventContract.SplitViewDisplayModeChanged.event,
223
+ ANNEventContract.TitleRenamed.event,
224
+ ];
225
+ }
@@ -22,7 +22,8 @@ NS_ASSUME_NONNULL_BEGIN
22
22
  /// Whether the JavaScript of this emitter still runs: its events go only then. Any thread.
23
23
  @property(nonatomic, readonly) BOOL isCurrent;
24
24
 
25
- /// Sends `ANN.<name>` with the payload as it is. From another queue it moves to the main queue first.
25
+ /// Sends the event `name` (`ANNEventContract.<Event>.event`, `ANN.<Event>`) with the payload as it is, its keys from
26
+ /// `ANNEventContract` too. From another queue it moves to the main queue first.
26
27
  - (void)sendEvent:(NSString *)name body:(nullable NSDictionary<NSString *, id> *)body;
27
28
 
28
29
  #pragma mark - The contract
@@ -85,6 +86,9 @@ NS_ASSUME_NONNULL_BEGIN
85
86
 
86
87
  - (void)sendSlotDestroyed:(NSString *)componentId;
87
88
 
89
+ /// `ANN.DeepLinkDispatched { url }` (iOS only): a link React Native's `Linking` didn't take, for JavaScript to hand it.
90
+ - (void)sendDeepLinkDispatched:(NSURL *)url;
91
+
88
92
  /// `ANN.TitleRenamed { componentId, text }` (EVT-TitleRenamed).
89
93
  - (void)sendTitleRenamed:(NSString *)componentId text:(NSString *)text;
90
94