@symbiote-native/navigation 2.1.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/README.md +89 -14
  2. package/build/angular/drawer/index.js +23 -9
  3. package/build/angular/index.d.ts +4 -4
  4. package/build/angular/index.js +1 -1
  5. package/build/angular/injectors/inject-navigation.js +1 -1
  6. package/build/angular/navigation-scope.directive.js +1 -1
  7. package/build/angular/search-bar-ref.directive.js +1 -1
  8. package/build/angular/stack/index.js +20 -6
  9. package/build/angular/tabs/index.js +21 -7
  10. package/build/core/drawer-options/index.js +19 -5
  11. package/build/core/drawer-router-state/index.js +8 -2
  12. package/build/core/guards.js +3 -1
  13. package/build/core/header-bar-buttons.js +14 -4
  14. package/build/core/index.d.ts +4 -4
  15. package/build/core/index.js +2 -2
  16. package/build/core/navigator-state/index.js +12 -4
  17. package/build/core/render-drawer.js +4 -1
  18. package/build/core/render-stack.js +13 -4
  19. package/build/core/screen-options.js +1 -1
  20. package/build/core/search-bar-commands.js +1 -1
  21. package/build/core/state-persistence/index.js +6 -2
  22. package/build/core/tab-router-state/index.js +8 -2
  23. package/build/react/drawer/index.js +36 -13
  24. package/build/react/index.d.ts +7 -7
  25. package/build/react/index.js +3 -3
  26. package/build/react/stack/index.js +34 -8
  27. package/build/react/tabs/index.js +14 -4
  28. package/build/solid/drawer/index.d.ts +22 -0
  29. package/build/solid/drawer/index.js +394 -0
  30. package/build/solid/drawer-screen-props.d.ts +13 -0
  31. package/build/solid/drawer-screen-props.js +2 -0
  32. package/build/solid/host.d.ts +2 -0
  33. package/build/solid/host.js +23 -0
  34. package/build/solid/index.d.ts +19 -0
  35. package/build/solid/index.js +24 -0
  36. package/build/solid/linking.d.ts +3 -0
  37. package/build/solid/linking.js +55 -0
  38. package/build/solid/navigation-context.d.ts +13 -0
  39. package/build/solid/navigation-context.js +37 -0
  40. package/build/solid/primitives/create-focus-effect.d.ts +1 -0
  41. package/build/solid/primitives/create-focus-effect.js +30 -0
  42. package/build/solid/primitives/create-is-focused.d.ts +2 -0
  43. package/build/solid/primitives/create-is-focused.js +31 -0
  44. package/build/solid/primitives/create-navigation-state.d.ts +3 -0
  45. package/build/solid/primitives/create-navigation-state.js +30 -0
  46. package/build/solid/primitives/index.d.ts +12 -0
  47. package/build/solid/primitives/index.js +8 -0
  48. package/build/solid/primitives/use-drawer-navigation.d.ts +5 -0
  49. package/build/solid/primitives/use-drawer-navigation.js +15 -0
  50. package/build/solid/primitives/use-navigation.d.ts +8 -0
  51. package/build/solid/primitives/use-navigation.js +23 -0
  52. package/build/solid/primitives/use-route.d.ts +3 -0
  53. package/build/solid/primitives/use-route.js +14 -0
  54. package/build/solid/primitives/use-stack-navigation.d.ts +5 -0
  55. package/build/solid/primitives/use-stack-navigation.js +19 -0
  56. package/build/solid/primitives/use-tab-navigation.d.ts +5 -0
  57. package/build/solid/primitives/use-tab-navigation.js +15 -0
  58. package/build/solid/screen-props.d.ts +19 -0
  59. package/build/solid/screen-props.js +9 -0
  60. package/build/solid/screen-registry.d.ts +31 -0
  61. package/build/solid/screen-registry.js +86 -0
  62. package/build/solid/screen.d.ts +6 -0
  63. package/build/solid/screen.js +69 -0
  64. package/build/solid/stack/index.d.ts +15 -0
  65. package/build/solid/stack/index.js +348 -0
  66. package/build/solid/tab-screen-props.d.ts +13 -0
  67. package/build/solid/tab-screen-props.js +3 -0
  68. package/build/solid/tabs/index.d.ts +14 -0
  69. package/build/solid/tabs/index.js +228 -0
  70. package/build/svelte/descriptor-subtree.js +3 -1
  71. package/build/svelte/drawer/index.svelte +163 -25
  72. package/build/svelte/drawer-screen.svelte +2 -1
  73. package/build/svelte/index.d.ts +3 -3
  74. package/build/svelte/index.js +1 -1
  75. package/build/svelte/navigation-scope.svelte +4 -1
  76. package/build/svelte/runes/use-navigation.svelte.js +5 -1
  77. package/build/svelte/stack/index.svelte +43 -6
  78. package/build/svelte/stack/stack-screen.svelte +66 -9
  79. package/build/svelte/tabs/index.svelte +42 -20
  80. package/build/vue/composables/use-navigation.js +5 -1
  81. package/build/vue/drawer/index.js +30 -8
  82. package/build/vue/index.d.ts +3 -3
  83. package/build/vue/index.js +1 -1
  84. package/build/vue/navigation-context.js +1 -1
  85. package/build/vue/stack/index.js +17 -6
  86. package/build/vue/tabs/index.js +18 -5
  87. package/build-ngc/angular/drawer/index.js +31 -11
  88. package/build-ngc/angular/drawer/index.js.map +1 -1
  89. package/build-ngc/angular/index.d.ts +4 -4
  90. package/build-ngc/angular/index.js.map +1 -1
  91. package/build-ngc/angular/injectors/inject-focus-effect.js.map +1 -1
  92. package/build-ngc/angular/injectors/inject-is-focused.js.map +1 -1
  93. package/build-ngc/angular/injectors/inject-navigation-state.js.map +1 -1
  94. package/build-ngc/angular/injectors/inject-navigation.js +1 -1
  95. package/build-ngc/angular/injectors/inject-navigation.js.map +1 -1
  96. package/build-ngc/angular/linking.js.map +1 -1
  97. package/build-ngc/angular/navigation-context.service.js.map +1 -1
  98. package/build-ngc/angular/navigation-scope.directive.js +1 -1
  99. package/build-ngc/angular/navigation-scope.directive.js.map +1 -1
  100. package/build-ngc/angular/screen.directive.js.map +1 -1
  101. package/build-ngc/angular/search-bar-ref.directive.js +1 -1
  102. package/build-ngc/angular/search-bar-ref.directive.js.map +1 -1
  103. package/build-ngc/angular/stack/index.js +26 -8
  104. package/build-ngc/angular/stack/index.js.map +1 -1
  105. package/build-ngc/angular/tab-screen.directive.js.map +1 -1
  106. package/build-ngc/angular/tabs/index.js +21 -7
  107. package/build-ngc/angular/tabs/index.js.map +1 -1
  108. package/build-ngc/core/constants.js.map +1 -1
  109. package/build-ngc/core/drawer-options/index.js +19 -5
  110. package/build-ngc/core/drawer-options/index.js.map +1 -1
  111. package/build-ngc/core/drawer-router-state/index.js +8 -2
  112. package/build-ngc/core/drawer-router-state/index.js.map +1 -1
  113. package/build-ngc/core/guards.js +3 -1
  114. package/build-ngc/core/guards.js.map +1 -1
  115. package/build-ngc/core/header-bar-buttons.js +14 -4
  116. package/build-ngc/core/header-bar-buttons.js.map +1 -1
  117. package/build-ngc/core/index.d.ts +4 -4
  118. package/build-ngc/core/index.js +2 -2
  119. package/build-ngc/core/index.js.map +1 -1
  120. package/build-ngc/core/linking-config/index.js.map +1 -1
  121. package/build-ngc/core/navigation-events/index.js.map +1 -1
  122. package/build-ngc/core/navigator-handles/index.js.map +1 -1
  123. package/build-ngc/core/navigator-state/index.js +12 -4
  124. package/build-ngc/core/navigator-state/index.js.map +1 -1
  125. package/build-ngc/core/render-drawer.js +4 -1
  126. package/build-ngc/core/render-drawer.js.map +1 -1
  127. package/build-ngc/core/render-stack.js +13 -4
  128. package/build-ngc/core/render-stack.js.map +1 -1
  129. package/build-ngc/core/render-tabs.js.map +1 -1
  130. package/build-ngc/core/screen-options.js +1 -1
  131. package/build-ngc/core/screen-options.js.map +1 -1
  132. package/build-ngc/core/search-bar-commands.js +1 -1
  133. package/build-ngc/core/search-bar-commands.js.map +1 -1
  134. package/build-ngc/core/stack-router-state/index.js.map +1 -1
  135. package/build-ngc/core/state-persistence/index.js +6 -2
  136. package/build-ngc/core/state-persistence/index.js.map +1 -1
  137. package/build-ngc/core/tab-router-state/index.js +8 -2
  138. package/build-ngc/core/tab-router-state/index.js.map +1 -1
  139. package/package.json +40 -15
  140. package/src/angular/drawer/index.ts +69 -25
  141. package/src/angular/index.ts +20 -4
  142. package/src/angular/injectors/inject-focus-effect.ts +8 -2
  143. package/src/angular/injectors/inject-is-focused.ts +6 -4
  144. package/src/angular/injectors/inject-navigation-state.ts +7 -4
  145. package/src/angular/injectors/inject-navigation.ts +12 -3
  146. package/src/angular/linking.ts +4 -1
  147. package/src/angular/navigation-context.service.ts +5 -2
  148. package/src/angular/navigation-scope.directive.ts +6 -2
  149. package/src/angular/screen.directive.ts +13 -3
  150. package/src/angular/search-bar-ref.directive.ts +10 -2
  151. package/src/angular/stack/index.ts +68 -22
  152. package/src/angular/tab-screen.directive.ts +3 -1
  153. package/src/angular/tabs/index.ts +36 -12
  154. package/src/core/constants.ts +6 -3
  155. package/src/core/drawer-options/index.ts +40 -13
  156. package/src/core/drawer-router-state/index.ts +11 -3
  157. package/src/core/guards.ts +3 -1
  158. package/src/core/header-bar-buttons.ts +41 -12
  159. package/src/core/index.ts +18 -4
  160. package/src/core/linking-config/index.ts +31 -10
  161. package/src/core/navigation-events/index.ts +8 -2
  162. package/src/core/navigator-handles/index.ts +8 -3
  163. package/src/core/navigator-props.ts +13 -4
  164. package/src/core/navigator-state/index.ts +24 -7
  165. package/src/core/render-drawer.ts +24 -9
  166. package/src/core/render-stack.ts +52 -13
  167. package/src/core/render-tabs.ts +24 -6
  168. package/src/core/screen-options.ts +15 -5
  169. package/src/core/search-bar-commands.ts +12 -3
  170. package/src/core/stack-router-state/index.ts +5 -2
  171. package/src/core/state-persistence/index.ts +13 -3
  172. package/src/core/tab-router-state/index.ts +10 -3
  173. package/src/react/drawer/index.ts +408 -344
  174. package/src/react/drawer-screen.ts +8 -2
  175. package/src/react/hooks/use-focus-effect.ts +8 -2
  176. package/src/react/hooks/use-is-focused.ts +6 -2
  177. package/src/react/hooks/use-navigation.ts +8 -2
  178. package/src/react/index.ts +37 -7
  179. package/src/react/linking.ts +4 -1
  180. package/src/react/navigation-context.ts +6 -2
  181. package/src/react/screen.ts +12 -3
  182. package/src/react/stack/index.ts +294 -231
  183. package/src/react/tab-screen.ts +3 -1
  184. package/src/react/tabs/index.ts +188 -158
  185. package/src/solid/drawer/index.ts +570 -0
  186. package/src/solid/drawer-screen-props.ts +24 -0
  187. package/src/solid/host.ts +29 -0
  188. package/src/solid/index.ts +87 -0
  189. package/src/solid/linking.ts +74 -0
  190. package/src/solid/navigation-context.ts +56 -0
  191. package/src/solid/primitives/create-focus-effect.ts +41 -0
  192. package/src/solid/primitives/create-is-focused.ts +41 -0
  193. package/src/solid/primitives/create-navigation-state.ts +44 -0
  194. package/src/solid/primitives/index.ts +12 -0
  195. package/src/solid/primitives/use-drawer-navigation.ts +25 -0
  196. package/src/solid/primitives/use-navigation.ts +44 -0
  197. package/src/solid/primitives/use-route.ts +18 -0
  198. package/src/solid/primitives/use-stack-navigation.ts +29 -0
  199. package/src/solid/primitives/use-tab-navigation.ts +25 -0
  200. package/src/solid/screen-props.ts +51 -0
  201. package/src/solid/screen-registry.ts +159 -0
  202. package/src/solid/screen.ts +80 -0
  203. package/src/solid/stack/index.ts +528 -0
  204. package/src/solid/tab-screen-props.ts +21 -0
  205. package/src/solid/tabs/index.ts +327 -0
  206. package/src/svelte/attachments.ts +3 -1
  207. package/src/svelte/descriptor-subtree.ts +3 -1
  208. package/src/svelte/drawer/index.svelte +163 -25
  209. package/src/svelte/drawer-screen-props.ts +8 -2
  210. package/src/svelte/drawer-screen.svelte +2 -1
  211. package/src/svelte/fabric-tree.test-helper.ts +37 -3
  212. package/src/svelte/index.ts +15 -3
  213. package/src/svelte/linking.svelte.ts +11 -5
  214. package/src/svelte/navigation-scope.svelte +4 -1
  215. package/src/svelte/runes/use-drawer-navigation.svelte.ts +3 -1
  216. package/src/svelte/runes/use-focus-effect.svelte.ts +8 -2
  217. package/src/svelte/runes/use-navigation-state.svelte.ts +3 -1
  218. package/src/svelte/runes/use-navigation.svelte.ts +13 -3
  219. package/src/svelte/runes/use-stack-navigation.svelte.ts +3 -1
  220. package/src/svelte/screen-props.ts +7 -2
  221. package/src/svelte/screen-registry.ts +9 -3
  222. package/src/svelte/stack/index.svelte +43 -6
  223. package/src/svelte/stack/stack-screen.svelte +66 -9
  224. package/src/svelte/svelte-compile.test-helper.ts +16 -12
  225. package/src/svelte/tab-screen-props.ts +3 -1
  226. package/src/svelte/tabs/index.svelte +42 -20
  227. package/src/vue/composables/use-navigation-state.ts +7 -4
  228. package/src/vue/composables/use-navigation.ts +13 -3
  229. package/src/vue/drawer/index.ts +122 -36
  230. package/src/vue/drawer-screen.ts +12 -5
  231. package/src/vue/index.ts +15 -3
  232. package/src/vue/linking.ts +7 -2
  233. package/src/vue/navigation-context.ts +17 -5
  234. package/src/vue/screen.ts +7 -2
  235. package/src/vue/stack/index.ts +82 -34
  236. package/src/vue/tab-screen.ts +3 -1
  237. package/src/vue/tabs/index.ts +51 -13
@@ -0,0 +1,159 @@
1
+ // How a navigator learns about its `<Stack.Screen>` / `<Tab.Screen>` / `<Drawer.Screen>` markers.
2
+ //
3
+ // React reads `children` as an inspectable array; Vue scans the default slot's vnodes
4
+ // (`vnode.type === Screen`); Angular queries `@ContentChildren`. Solid can do NONE of those:
5
+ // `props.children` is a getter that CREATES the children when read, and what comes back is
6
+ // already-built host nodes (or, for a marker that paints nothing, `undefined`) - there is no
7
+ // element description left to inspect. So registration is INVERTED here, exactly as on Svelte:
8
+ // the navigator publishes a collector on the context, each marker registers ITSELF from its own
9
+ // body, and the navigator's route list derives from what came back.
10
+ //
11
+ // The consequence that shapes every navigator in this folder: the registry is EMPTY while the
12
+ // navigator's own body runs. Solid's Provider evaluates its children inside a render effect, i.e.
13
+ // after the body returned, so nothing may be computed eagerly from the registry. Route lists,
14
+ // seeds and options folds are all memos over `screens()` instead.
15
+ //
16
+ // ONE context key, not one per navigator kind: nearest-navigator-wins shadowing falls out of
17
+ // Solid's own owner-chain context lookup, so a Stack nested inside a Tab screen captures its own
18
+ // markers. The `kind` tag then rejects a MISMATCHED marker (a `<Tab.Screen>` written inside a
19
+ // `<Stack>`) instead of letting it register with some far-away ancestor Tab - the failure mode a
20
+ // per-kind key would have.
21
+ //
22
+ // Narrowing back out of the context is done by the three `collect*Screen` functions rather than by
23
+ // a generic one taking `kind` as a parameter: a literal comparison is what lets TypeScript
24
+ // discriminate the union, and a generic parameter would force a cast the project bans.
25
+
26
+ import { createContext, createSignal, onCleanup, useContext } from 'solid-js';
27
+ import type { Accessor, Component } from 'solid-js';
28
+ import { dlog } from '@symbiote-native/engine';
29
+ import type { IScreenProps } from './screen-props';
30
+ import type { ITabScreenProps } from './tab-screen-props';
31
+ import type { IDrawerScreenProps } from './drawer-screen-props';
32
+
33
+ export type INavigatorKind = 'stack' | 'tab' | 'drawer';
34
+
35
+ // Every field is a GETTER over the marker's own `props`, so an app that changes `options` or
36
+ // `component` on an already-mounted marker keeps the navigator's view of it live - Solid props are
37
+ // getters, and snapshotting them here would freeze the marker at its mount-time values, which is
38
+ // this adapter's whole hazard class. `name` is read live too, so renaming a screen re-keys it.
39
+ export type IRegisteredScreen<TOptions> = {
40
+ readonly name: string;
41
+ readonly component: Component;
42
+ readonly options: TOptions;
43
+ readonly initialParams: unknown;
44
+ };
45
+
46
+ type IScreenCollector<TKind extends INavigatorKind, TOptions> = {
47
+ readonly kind: TKind;
48
+ register(screen: IRegisteredScreen<TOptions>): void;
49
+ unregister(screen: IRegisteredScreen<TOptions>): void;
50
+ };
51
+
52
+ export type IStackScreenCollector = IScreenCollector<
53
+ 'stack',
54
+ IScreenProps['options']
55
+ >;
56
+ export type ITabScreenCollector = IScreenCollector<
57
+ 'tab',
58
+ ITabScreenProps['options']
59
+ >;
60
+ export type IDrawerScreenCollector = IScreenCollector<
61
+ 'drawer',
62
+ IDrawerScreenProps['options']
63
+ >;
64
+
65
+ export type IAnyScreenCollector =
66
+ IStackScreenCollector | ITabScreenCollector | IDrawerScreenCollector;
67
+
68
+ const ScreenCollectorContext = createContext<IAnyScreenCollector>();
69
+
70
+ export const ScreenCollectorProvider = ScreenCollectorContext.Provider;
71
+
72
+ function collectorFor(
73
+ kind: INavigatorKind,
74
+ name: string,
75
+ ): IAnyScreenCollector | undefined {
76
+ const collector = useContext(ScreenCollectorContext);
77
+ if (collector === undefined) {
78
+ dlog(
79
+ `navigation: <${kind} screen "${name}"> rendered outside any navigator, ignored`,
80
+ );
81
+ return undefined;
82
+ }
83
+ if (collector.kind !== kind) {
84
+ dlog(
85
+ `navigation: a ${kind} screen marker ("${name}") was rendered inside a ` +
86
+ `${collector.kind} navigator, ignored`,
87
+ );
88
+ return undefined;
89
+ }
90
+ return collector;
91
+ }
92
+
93
+ // Registration is undone on cleanup, so a marker behind a `<Show>` disappears from the registry
94
+ // exactly like a removed Vue slot vnode stops being scanned.
95
+ function bind<TKind extends INavigatorKind, TOptions>(
96
+ collector: IScreenCollector<TKind, TOptions>,
97
+ screen: IRegisteredScreen<TOptions>,
98
+ ): void {
99
+ collector.register(screen);
100
+ onCleanup(() => collector.unregister(screen));
101
+ }
102
+
103
+ export function collectStackScreen(
104
+ screen: IRegisteredScreen<IScreenProps['options']>,
105
+ ): void {
106
+ const collector = collectorFor('stack', screen.name);
107
+ if (collector === undefined || collector.kind !== 'stack') return;
108
+ bind(collector, screen);
109
+ }
110
+
111
+ export function collectTabScreen(
112
+ screen: IRegisteredScreen<ITabScreenProps['options']>,
113
+ ): void {
114
+ const collector = collectorFor('tab', screen.name);
115
+ if (collector === undefined || collector.kind !== 'tab') return;
116
+ bind(collector, screen);
117
+ }
118
+
119
+ export function collectDrawerScreen(
120
+ screen: IRegisteredScreen<IDrawerScreenProps['options']>,
121
+ ): void {
122
+ const collector = collectorFor('drawer', screen.name);
123
+ if (collector === undefined || collector.kind !== 'drawer') return;
124
+ bind(collector, screen);
125
+ }
126
+
127
+ // name -> entry, last registration wins, exactly like Vue's collectRegistry Map.
128
+ export function toRegistry<TOptions>(
129
+ screens: readonly IRegisteredScreen<TOptions>[],
130
+ ): Map<string, IRegisteredScreen<TOptions>> {
131
+ const registry = new Map<string, IRegisteredScreen<TOptions>>();
132
+ for (const screen of screens) registry.set(screen.name, screen);
133
+ return registry;
134
+ }
135
+
136
+ export type IScreenSignal<TKind extends INavigatorKind, TOptions> = {
137
+ screens: Accessor<readonly IRegisteredScreen<TOptions>[]>;
138
+ collector: IScreenCollector<TKind, TOptions>;
139
+ };
140
+
141
+ // The navigator half: the signal every navigator derives its route list from, plus the collector
142
+ // it publishes on the context. `unregister` filters by IDENTITY, never by name - two markers can
143
+ // briefly share a name while one is being replaced, and dropping by name would evict the survivor.
144
+ export function createScreenSignal<TKind extends INavigatorKind, TOptions>(
145
+ kind: TKind,
146
+ ): IScreenSignal<TKind, TOptions> {
147
+ const [screens, setScreens] = createSignal<
148
+ readonly IRegisteredScreen<TOptions>[]
149
+ >([]);
150
+ return {
151
+ screens,
152
+ collector: {
153
+ kind,
154
+ register: screen => setScreens(list => [...list, screen]),
155
+ unregister: screen =>
156
+ setScreens(list => list.filter(candidate => candidate !== screen)),
157
+ },
158
+ };
159
+ }
@@ -0,0 +1,80 @@
1
+ // Stack.Screen / Tab.Screen / Drawer.Screen: declarative markers that paint nothing. The navigator
2
+ // reads them through the context collector (screen-registry.ts) rather than by scanning children
3
+ // the way React and Vue can, then mounts the registered component itself.
4
+ //
5
+ // Every field is handed over as a GETTER over this component's own props, never a snapshot: a Solid
6
+ // component body runs ONCE, so `{ name: props.name }` would freeze the marker at its mount-time
7
+ // values and an app that swaps `options` on a live marker would silently keep the old header.
8
+ //
9
+ // The three live in one file because they differ only in which collector they call - three
10
+ // near-identical files would drift the way the two descriptor-shape guards did before they were
11
+ // lifted into @symbiote-native/components.
12
+ //
13
+ // Returning `undefined` (not an empty host element) is what keeps a marker free: Solid inserts
14
+ // nothing for it, and where a following sibling forces a position placeholder the renderer emits an
15
+ // engine ANCHOR, which the commit walk skips. Svelte needed a hidden zero-size host for its markers
16
+ // because its compiler turns the whitespace BETWEEN them into real text nodes; Solid's JSX drops
17
+ // that whitespace, so the hazard does not exist here.
18
+
19
+ import {
20
+ collectDrawerScreen,
21
+ collectStackScreen,
22
+ collectTabScreen,
23
+ } from './screen-registry';
24
+ import type { IScreenProps } from './screen-props';
25
+ import type { ITabScreenProps } from './tab-screen-props';
26
+ import type { IDrawerScreenProps } from './drawer-screen-props';
27
+
28
+ export function Screen(props: IScreenProps): undefined {
29
+ collectStackScreen({
30
+ get name() {
31
+ return props.name;
32
+ },
33
+ get component() {
34
+ return props.component;
35
+ },
36
+ get options() {
37
+ return props.options;
38
+ },
39
+ get initialParams() {
40
+ return props.initialParams;
41
+ },
42
+ });
43
+ return undefined;
44
+ }
45
+
46
+ export function TabScreen(props: ITabScreenProps): undefined {
47
+ collectTabScreen({
48
+ get name() {
49
+ return props.name;
50
+ },
51
+ get component() {
52
+ return props.component;
53
+ },
54
+ get options() {
55
+ return props.options;
56
+ },
57
+ get initialParams() {
58
+ return props.initialParams;
59
+ },
60
+ });
61
+ return undefined;
62
+ }
63
+
64
+ export function DrawerScreen(props: IDrawerScreenProps): undefined {
65
+ collectDrawerScreen({
66
+ get name() {
67
+ return props.name;
68
+ },
69
+ get component() {
70
+ return props.component;
71
+ },
72
+ get options() {
73
+ return props.options;
74
+ },
75
+ get initialParams() {
76
+ return props.initialParams;
77
+ },
78
+ });
79
+ return undefined;
80
+ }