@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.
- package/README.md +89 -14
- package/build/angular/drawer/index.js +23 -9
- package/build/angular/index.d.ts +4 -4
- package/build/angular/index.js +1 -1
- package/build/angular/injectors/inject-navigation.js +1 -1
- package/build/angular/navigation-scope.directive.js +1 -1
- package/build/angular/search-bar-ref.directive.js +1 -1
- package/build/angular/stack/index.js +20 -6
- package/build/angular/tabs/index.js +21 -7
- package/build/core/drawer-options/index.js +19 -5
- package/build/core/drawer-router-state/index.js +8 -2
- package/build/core/guards.js +3 -1
- package/build/core/header-bar-buttons.js +14 -4
- package/build/core/index.d.ts +4 -4
- package/build/core/index.js +2 -2
- package/build/core/navigator-state/index.js +12 -4
- package/build/core/render-drawer.js +4 -1
- package/build/core/render-stack.js +13 -4
- package/build/core/screen-options.js +1 -1
- package/build/core/search-bar-commands.js +1 -1
- package/build/core/state-persistence/index.js +6 -2
- package/build/core/tab-router-state/index.js +8 -2
- package/build/react/drawer/index.js +36 -13
- package/build/react/index.d.ts +7 -7
- package/build/react/index.js +3 -3
- package/build/react/stack/index.js +34 -8
- package/build/react/tabs/index.js +14 -4
- package/build/solid/drawer/index.d.ts +22 -0
- package/build/solid/drawer/index.js +394 -0
- package/build/solid/drawer-screen-props.d.ts +13 -0
- package/build/solid/drawer-screen-props.js +2 -0
- package/build/solid/host.d.ts +2 -0
- package/build/solid/host.js +23 -0
- package/build/solid/index.d.ts +19 -0
- package/build/solid/index.js +24 -0
- package/build/solid/linking.d.ts +3 -0
- package/build/solid/linking.js +55 -0
- package/build/solid/navigation-context.d.ts +13 -0
- package/build/solid/navigation-context.js +37 -0
- package/build/solid/primitives/create-focus-effect.d.ts +1 -0
- package/build/solid/primitives/create-focus-effect.js +30 -0
- package/build/solid/primitives/create-is-focused.d.ts +2 -0
- package/build/solid/primitives/create-is-focused.js +31 -0
- package/build/solid/primitives/create-navigation-state.d.ts +3 -0
- package/build/solid/primitives/create-navigation-state.js +30 -0
- package/build/solid/primitives/index.d.ts +12 -0
- package/build/solid/primitives/index.js +8 -0
- package/build/solid/primitives/use-drawer-navigation.d.ts +5 -0
- package/build/solid/primitives/use-drawer-navigation.js +15 -0
- package/build/solid/primitives/use-navigation.d.ts +8 -0
- package/build/solid/primitives/use-navigation.js +23 -0
- package/build/solid/primitives/use-route.d.ts +3 -0
- package/build/solid/primitives/use-route.js +14 -0
- package/build/solid/primitives/use-stack-navigation.d.ts +5 -0
- package/build/solid/primitives/use-stack-navigation.js +19 -0
- package/build/solid/primitives/use-tab-navigation.d.ts +5 -0
- package/build/solid/primitives/use-tab-navigation.js +15 -0
- package/build/solid/screen-props.d.ts +19 -0
- package/build/solid/screen-props.js +9 -0
- package/build/solid/screen-registry.d.ts +31 -0
- package/build/solid/screen-registry.js +86 -0
- package/build/solid/screen.d.ts +6 -0
- package/build/solid/screen.js +69 -0
- package/build/solid/stack/index.d.ts +15 -0
- package/build/solid/stack/index.js +348 -0
- package/build/solid/tab-screen-props.d.ts +13 -0
- package/build/solid/tab-screen-props.js +3 -0
- package/build/solid/tabs/index.d.ts +14 -0
- package/build/solid/tabs/index.js +228 -0
- package/build/svelte/descriptor-subtree.js +3 -1
- package/build/svelte/drawer/index.svelte +163 -25
- package/build/svelte/drawer-screen.svelte +2 -1
- package/build/svelte/index.d.ts +3 -3
- package/build/svelte/index.js +1 -1
- package/build/svelte/navigation-scope.svelte +4 -1
- package/build/svelte/runes/use-navigation.svelte.js +5 -1
- package/build/svelte/stack/index.svelte +43 -6
- package/build/svelte/stack/stack-screen.svelte +66 -9
- package/build/svelte/tabs/index.svelte +42 -20
- package/build/vue/composables/use-navigation.js +5 -1
- package/build/vue/drawer/index.js +30 -8
- package/build/vue/index.d.ts +3 -3
- package/build/vue/index.js +1 -1
- package/build/vue/navigation-context.js +1 -1
- package/build/vue/stack/index.js +17 -6
- package/build/vue/tabs/index.js +18 -5
- package/build-ngc/angular/drawer/index.js +31 -11
- package/build-ngc/angular/drawer/index.js.map +1 -1
- package/build-ngc/angular/index.d.ts +4 -4
- package/build-ngc/angular/index.js.map +1 -1
- package/build-ngc/angular/injectors/inject-focus-effect.js.map +1 -1
- package/build-ngc/angular/injectors/inject-is-focused.js.map +1 -1
- package/build-ngc/angular/injectors/inject-navigation-state.js.map +1 -1
- package/build-ngc/angular/injectors/inject-navigation.js +1 -1
- package/build-ngc/angular/injectors/inject-navigation.js.map +1 -1
- package/build-ngc/angular/linking.js.map +1 -1
- package/build-ngc/angular/navigation-context.service.js.map +1 -1
- package/build-ngc/angular/navigation-scope.directive.js +1 -1
- package/build-ngc/angular/navigation-scope.directive.js.map +1 -1
- package/build-ngc/angular/screen.directive.js.map +1 -1
- package/build-ngc/angular/search-bar-ref.directive.js +1 -1
- package/build-ngc/angular/search-bar-ref.directive.js.map +1 -1
- package/build-ngc/angular/stack/index.js +26 -8
- package/build-ngc/angular/stack/index.js.map +1 -1
- package/build-ngc/angular/tab-screen.directive.js.map +1 -1
- package/build-ngc/angular/tabs/index.js +21 -7
- package/build-ngc/angular/tabs/index.js.map +1 -1
- package/build-ngc/core/constants.js.map +1 -1
- package/build-ngc/core/drawer-options/index.js +19 -5
- package/build-ngc/core/drawer-options/index.js.map +1 -1
- package/build-ngc/core/drawer-router-state/index.js +8 -2
- package/build-ngc/core/drawer-router-state/index.js.map +1 -1
- package/build-ngc/core/guards.js +3 -1
- package/build-ngc/core/guards.js.map +1 -1
- package/build-ngc/core/header-bar-buttons.js +14 -4
- package/build-ngc/core/header-bar-buttons.js.map +1 -1
- package/build-ngc/core/index.d.ts +4 -4
- package/build-ngc/core/index.js +2 -2
- package/build-ngc/core/index.js.map +1 -1
- package/build-ngc/core/linking-config/index.js.map +1 -1
- package/build-ngc/core/navigation-events/index.js.map +1 -1
- package/build-ngc/core/navigator-handles/index.js.map +1 -1
- package/build-ngc/core/navigator-state/index.js +12 -4
- package/build-ngc/core/navigator-state/index.js.map +1 -1
- package/build-ngc/core/render-drawer.js +4 -1
- package/build-ngc/core/render-drawer.js.map +1 -1
- package/build-ngc/core/render-stack.js +13 -4
- package/build-ngc/core/render-stack.js.map +1 -1
- package/build-ngc/core/render-tabs.js.map +1 -1
- package/build-ngc/core/screen-options.js +1 -1
- package/build-ngc/core/screen-options.js.map +1 -1
- package/build-ngc/core/search-bar-commands.js +1 -1
- package/build-ngc/core/search-bar-commands.js.map +1 -1
- package/build-ngc/core/stack-router-state/index.js.map +1 -1
- package/build-ngc/core/state-persistence/index.js +6 -2
- package/build-ngc/core/state-persistence/index.js.map +1 -1
- package/build-ngc/core/tab-router-state/index.js +8 -2
- package/build-ngc/core/tab-router-state/index.js.map +1 -1
- package/package.json +40 -15
- package/src/angular/drawer/index.ts +69 -25
- package/src/angular/index.ts +20 -4
- package/src/angular/injectors/inject-focus-effect.ts +8 -2
- package/src/angular/injectors/inject-is-focused.ts +6 -4
- package/src/angular/injectors/inject-navigation-state.ts +7 -4
- package/src/angular/injectors/inject-navigation.ts +12 -3
- package/src/angular/linking.ts +4 -1
- package/src/angular/navigation-context.service.ts +5 -2
- package/src/angular/navigation-scope.directive.ts +6 -2
- package/src/angular/screen.directive.ts +13 -3
- package/src/angular/search-bar-ref.directive.ts +10 -2
- package/src/angular/stack/index.ts +68 -22
- package/src/angular/tab-screen.directive.ts +3 -1
- package/src/angular/tabs/index.ts +36 -12
- package/src/core/constants.ts +6 -3
- package/src/core/drawer-options/index.ts +40 -13
- package/src/core/drawer-router-state/index.ts +11 -3
- package/src/core/guards.ts +3 -1
- package/src/core/header-bar-buttons.ts +41 -12
- package/src/core/index.ts +18 -4
- package/src/core/linking-config/index.ts +31 -10
- package/src/core/navigation-events/index.ts +8 -2
- package/src/core/navigator-handles/index.ts +8 -3
- package/src/core/navigator-props.ts +13 -4
- package/src/core/navigator-state/index.ts +24 -7
- package/src/core/render-drawer.ts +24 -9
- package/src/core/render-stack.ts +52 -13
- package/src/core/render-tabs.ts +24 -6
- package/src/core/screen-options.ts +15 -5
- package/src/core/search-bar-commands.ts +12 -3
- package/src/core/stack-router-state/index.ts +5 -2
- package/src/core/state-persistence/index.ts +13 -3
- package/src/core/tab-router-state/index.ts +10 -3
- package/src/react/drawer/index.ts +408 -344
- package/src/react/drawer-screen.ts +8 -2
- package/src/react/hooks/use-focus-effect.ts +8 -2
- package/src/react/hooks/use-is-focused.ts +6 -2
- package/src/react/hooks/use-navigation.ts +8 -2
- package/src/react/index.ts +37 -7
- package/src/react/linking.ts +4 -1
- package/src/react/navigation-context.ts +6 -2
- package/src/react/screen.ts +12 -3
- package/src/react/stack/index.ts +294 -231
- package/src/react/tab-screen.ts +3 -1
- package/src/react/tabs/index.ts +188 -158
- package/src/solid/drawer/index.ts +570 -0
- package/src/solid/drawer-screen-props.ts +24 -0
- package/src/solid/host.ts +29 -0
- package/src/solid/index.ts +87 -0
- package/src/solid/linking.ts +74 -0
- package/src/solid/navigation-context.ts +56 -0
- package/src/solid/primitives/create-focus-effect.ts +41 -0
- package/src/solid/primitives/create-is-focused.ts +41 -0
- package/src/solid/primitives/create-navigation-state.ts +44 -0
- package/src/solid/primitives/index.ts +12 -0
- package/src/solid/primitives/use-drawer-navigation.ts +25 -0
- package/src/solid/primitives/use-navigation.ts +44 -0
- package/src/solid/primitives/use-route.ts +18 -0
- package/src/solid/primitives/use-stack-navigation.ts +29 -0
- package/src/solid/primitives/use-tab-navigation.ts +25 -0
- package/src/solid/screen-props.ts +51 -0
- package/src/solid/screen-registry.ts +159 -0
- package/src/solid/screen.ts +80 -0
- package/src/solid/stack/index.ts +528 -0
- package/src/solid/tab-screen-props.ts +21 -0
- package/src/solid/tabs/index.ts +327 -0
- package/src/svelte/attachments.ts +3 -1
- package/src/svelte/descriptor-subtree.ts +3 -1
- package/src/svelte/drawer/index.svelte +163 -25
- package/src/svelte/drawer-screen-props.ts +8 -2
- package/src/svelte/drawer-screen.svelte +2 -1
- package/src/svelte/fabric-tree.test-helper.ts +37 -3
- package/src/svelte/index.ts +15 -3
- package/src/svelte/linking.svelte.ts +11 -5
- package/src/svelte/navigation-scope.svelte +4 -1
- package/src/svelte/runes/use-drawer-navigation.svelte.ts +3 -1
- package/src/svelte/runes/use-focus-effect.svelte.ts +8 -2
- package/src/svelte/runes/use-navigation-state.svelte.ts +3 -1
- package/src/svelte/runes/use-navigation.svelte.ts +13 -3
- package/src/svelte/runes/use-stack-navigation.svelte.ts +3 -1
- package/src/svelte/screen-props.ts +7 -2
- package/src/svelte/screen-registry.ts +9 -3
- package/src/svelte/stack/index.svelte +43 -6
- package/src/svelte/stack/stack-screen.svelte +66 -9
- package/src/svelte/svelte-compile.test-helper.ts +16 -12
- package/src/svelte/tab-screen-props.ts +3 -1
- package/src/svelte/tabs/index.svelte +42 -20
- package/src/vue/composables/use-navigation-state.ts +7 -4
- package/src/vue/composables/use-navigation.ts +13 -3
- package/src/vue/drawer/index.ts +122 -36
- package/src/vue/drawer-screen.ts +12 -5
- package/src/vue/index.ts +15 -3
- package/src/vue/linking.ts +7 -2
- package/src/vue/navigation-context.ts +17 -5
- package/src/vue/screen.ts +7 -2
- package/src/vue/stack/index.ts +82 -34
- package/src/vue/tab-screen.ts +3 -1
- package/src/vue/tabs/index.ts +51 -13
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
A native stack/tab/drawer navigator for [SymbioteNative](../../README.md), built directly on
|
|
4
4
|
[`react-native-screens`](https://github.com/software-mansion/react-native-screens)' native view
|
|
5
5
|
primitives (`RNSScreen`/`RNSScreenStack`/`RNSScreenStackHeaderConfig`/`RNSSearchBar`) — reachable
|
|
6
|
-
from **every** adapter: React, Vue, and Angular. Unlike the third-party-view wrappers
|
|
6
|
+
from **every** adapter: React, Vue, Svelte, Solid, and Angular. Unlike the third-party-view wrappers
|
|
7
7
|
([`@symbiote-native/slider`](../slider), [`@symbiote-native/splash-screen`](../splash-screen)),
|
|
8
8
|
there is no upstream React component to route around here at all — `react-navigation`'s own
|
|
9
9
|
navigator UI is itself React-only (it calls hooks off the React dispatcher), so wrapping it was
|
|
@@ -38,14 +38,16 @@ src/
|
|
|
38
38
|
│ react-native-screens' own React components)
|
|
39
39
|
├── react/ @symbiote-native/navigation/react — Stack/Tab/Drawer + hooks
|
|
40
40
|
├── vue/ @symbiote-native/navigation/vue — Stack/Tab/Drawer + composables
|
|
41
|
+
├── svelte/ @symbiote-native/navigation/svelte — Stack/Tab/Drawer + runes
|
|
42
|
+
├── solid/ @symbiote-native/navigation/solid — Stack/Tab/Drawer + primitives
|
|
41
43
|
└── angular/ @symbiote-native/navigation/angular — Stack/Tab/Drawer + directives + inject*
|
|
42
44
|
```
|
|
43
45
|
|
|
44
46
|
Each adapter entry imports `../register` first (so every native view's `ViewConfig` is registered
|
|
45
47
|
before a screen ever mounts), then exposes `Stack`, `Tab`, and `Drawer`. The router/reducer logic
|
|
46
48
|
and every `react-native-screens` prop fold are written once in `core/` and shared verbatim; each
|
|
47
|
-
adapter supplies only its own lifecycle (hooks / composables / `inject*`
|
|
48
|
-
descriptor bridge.
|
|
49
|
+
adapter supplies only its own lifecycle (hooks / composables / runes / primitives / `inject*`
|
|
50
|
+
functions) and the descriptor bridge.
|
|
49
51
|
|
|
50
52
|
## Use it
|
|
51
53
|
|
|
@@ -65,8 +67,16 @@ function App() {
|
|
|
65
67
|
|
|
66
68
|
return (
|
|
67
69
|
<Stack ref={setStackHandle} initialRouteName="Menu">
|
|
68
|
-
<Stack.Screen
|
|
69
|
-
|
|
70
|
+
<Stack.Screen
|
|
71
|
+
name="Menu"
|
|
72
|
+
component={MenuScreen}
|
|
73
|
+
options={{ title: 'Navigation Demos' }}
|
|
74
|
+
/>
|
|
75
|
+
<Stack.Screen
|
|
76
|
+
name="Details"
|
|
77
|
+
component={DetailsScreen}
|
|
78
|
+
options={{ title: 'Details' }}
|
|
79
|
+
/>
|
|
70
80
|
</Stack>
|
|
71
81
|
);
|
|
72
82
|
}
|
|
@@ -84,8 +94,16 @@ const stackHandle = ref<INavigatorHandle | null>(null);
|
|
|
84
94
|
|
|
85
95
|
<template>
|
|
86
96
|
<Stack ref="stackHandle" initial-route-name="Menu">
|
|
87
|
-
<Screen
|
|
88
|
-
|
|
97
|
+
<Screen
|
|
98
|
+
name="Menu"
|
|
99
|
+
:component="MenuScreen"
|
|
100
|
+
:options="{ title: 'Navigation Demos' }"
|
|
101
|
+
/>
|
|
102
|
+
<Screen
|
|
103
|
+
name="Details"
|
|
104
|
+
:component="DetailsScreen"
|
|
105
|
+
:options="{ title: 'Details' }"
|
|
106
|
+
/>
|
|
89
107
|
</Stack>
|
|
90
108
|
</template>
|
|
91
109
|
```
|
|
@@ -100,8 +118,18 @@ import { Stack, ScreenDirective } from '@symbiote-native/navigation/angular';
|
|
|
100
118
|
imports: [Stack, ScreenDirective],
|
|
101
119
|
template: `
|
|
102
120
|
<Stack #nav initialRouteName="Menu">
|
|
103
|
-
<ng-template
|
|
104
|
-
|
|
121
|
+
<ng-template
|
|
122
|
+
symbioteScreen
|
|
123
|
+
name="Menu"
|
|
124
|
+
[component]="menuScreen"
|
|
125
|
+
[options]="menuOptions"
|
|
126
|
+
></ng-template>
|
|
127
|
+
<ng-template
|
|
128
|
+
symbioteScreen
|
|
129
|
+
name="Details"
|
|
130
|
+
[component]="detailsScreen"
|
|
131
|
+
[options]="detailsOptions"
|
|
132
|
+
></ng-template>
|
|
105
133
|
</Stack>
|
|
106
134
|
`,
|
|
107
135
|
})
|
|
@@ -114,9 +142,54 @@ export class AppComponent {
|
|
|
114
142
|
}
|
|
115
143
|
```
|
|
116
144
|
|
|
145
|
+
```svelte
|
|
146
|
+
<!-- Svelte — examples/svelte/App.svelte -->
|
|
147
|
+
<script lang="ts">
|
|
148
|
+
import { Screen, Stack } from '@symbiote-native/navigation/svelte';
|
|
149
|
+
import type { INavigatorHandle } from '@symbiote-native/navigation/svelte';
|
|
150
|
+
|
|
151
|
+
let stackInstance = $state.raw<INavigatorHandle | null>(null);
|
|
152
|
+
</script>
|
|
153
|
+
|
|
154
|
+
<Stack bind:this={stackInstance} initialRouteName="Menu">
|
|
155
|
+
<Screen name="Menu" component={MenuScreen} options={{ title: 'Navigation Demos' }} />
|
|
156
|
+
<Screen name="Details" component={DetailsScreen} options={{ title: 'Details' }} />
|
|
157
|
+
</Stack>
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
```tsx
|
|
161
|
+
// Solid — examples/solid/App.tsx
|
|
162
|
+
import { createSignal } from 'solid-js';
|
|
163
|
+
import { Stack } from '@symbiote-native/navigation/solid';
|
|
164
|
+
import type { INavigatorHandle } from '@symbiote-native/navigation/solid';
|
|
165
|
+
|
|
166
|
+
export default function App() {
|
|
167
|
+
const [stackHandle, setStackHandle] = createSignal<INavigatorHandle | null>(
|
|
168
|
+
null,
|
|
169
|
+
);
|
|
170
|
+
|
|
171
|
+
return (
|
|
172
|
+
<Stack ref={handle => setStackHandle(handle)} initialRouteName="Menu">
|
|
173
|
+
<Stack.Screen
|
|
174
|
+
name="Menu"
|
|
175
|
+
component={MenuScreen}
|
|
176
|
+
options={{ title: 'Navigation Demos' }}
|
|
177
|
+
/>
|
|
178
|
+
<Stack.Screen
|
|
179
|
+
name="Details"
|
|
180
|
+
component={DetailsScreen}
|
|
181
|
+
options={{ title: 'Details' }}
|
|
182
|
+
/>
|
|
183
|
+
</Stack>
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
117
188
|
`Stack` itself implements `INavigatorHandle` in Angular — `@ViewChild` gives you the handle
|
|
118
|
-
directly, no separate ref callback. In React/Vue, the ref only attaches during
|
|
119
|
-
needs the handle (e.g. `useLinkingIntegration` below) must gate on it being
|
|
189
|
+
directly, no separate ref callback. In React/Vue/Svelte/Solid, the ref only attaches during
|
|
190
|
+
commit — code that needs the handle (e.g. `useLinkingIntegration` below) must gate on it being
|
|
191
|
+
non-null first (Svelte's `bind:this` binds during mount, so `$effect`-gate on it; Solid's `ref`
|
|
192
|
+
callback fires during creation, strictly before any effect runs).
|
|
120
193
|
|
|
121
194
|
### Tabs, Drawer, hooks, deep linking, and state persistence
|
|
122
195
|
|
|
@@ -125,8 +198,10 @@ swipeable drawer navigator (`Drawer`/`Drawer.Screen`, built on `PanResponder`/`A
|
|
|
125
198
|
codebase doesn't depend on `react-native-gesture-handler`/`react-native-reanimated` — see
|
|
126
199
|
[Known gaps](#known-gaps-drawer-parity) below), the full `useNavigation`/`useRoute`/
|
|
127
200
|
`useIsFocused`/`useFocusEffect`/`useNavigationState` hook family (narrowed per navigator as
|
|
128
|
-
`useStackNavigation`/`useTabNavigation`/`useDrawerNavigation`, with Vue composable
|
|
129
|
-
`inject*` twins of all of them
|
|
201
|
+
`useStackNavigation`/`useTabNavigation`/`useDrawerNavigation`, with Vue composable, Svelte rune,
|
|
202
|
+
Solid primitive and Angular `inject*` twins of all of them — Solid spells the three that own state
|
|
203
|
+
`createIsFocused`/`createFocusEffect`/`createNavigationState`, since it reserves `use*` for reading
|
|
204
|
+
an existing context), header/search-bar screen options (bar buttons, menus,
|
|
130
205
|
`formSheet`/modal presentation, `sheetAllowedDetents`), a `resolveRouteFromUrl`/
|
|
131
206
|
`useLinkingIntegration` deep-linking layer, and `serializeNavigatorState`/
|
|
132
207
|
`deserializeNavigatorState` for state persistence. See the docs-site navigation section
|
|
@@ -153,7 +228,7 @@ horizontal `ScrollView` hijacking the swipe), `useDrawerProgress` as a UI-thread
|
|
|
153
228
|
## Test it
|
|
154
229
|
|
|
155
230
|
Headless tests live next to each adapter entry and the shared core
|
|
156
|
-
(`src/{core,react,vue,angular}/**/*.test.{ts,tsx}`) and drive the same reducers/prop folds every
|
|
231
|
+
(`src/{core,react,vue,svelte,solid,angular}/**/*.test.{ts,tsx}`) and drive the same reducers/prop folds every
|
|
157
232
|
adapter shares, plus per-adapter component tests against a fake `nativeFabricUIManager` slot.
|
|
158
233
|
Native rendering (the real `RNSScreenStack` push/pop transitions, header/search-bar chrome,
|
|
159
234
|
`formSheet` detents) is verified on-device (see the parent [README](../../README.md) for the
|
|
@@ -92,7 +92,10 @@ let Drawer = (() => {
|
|
|
92
92
|
@for (slot of slotOrder(); track slot) {
|
|
93
93
|
@switch (slot) {
|
|
94
94
|
@case ('content') {
|
|
95
|
-
<AnimatedView
|
|
95
|
+
<AnimatedView
|
|
96
|
+
[style]="contentStyle()"
|
|
97
|
+
[animatedProps]="slotAnimatedProps('content')"
|
|
98
|
+
>
|
|
96
99
|
@if (focusedRoute(); as route) {
|
|
97
100
|
@if (componentForRoute(route); as component) {
|
|
98
101
|
<ng-container
|
|
@@ -113,7 +116,10 @@ let Drawer = (() => {
|
|
|
113
116
|
/>
|
|
114
117
|
}
|
|
115
118
|
@case ('panel') {
|
|
116
|
-
<AnimatedView
|
|
119
|
+
<AnimatedView
|
|
120
|
+
[style]="panelStyle()"
|
|
121
|
+
[animatedProps]="slotAnimatedProps('panel')"
|
|
122
|
+
>
|
|
117
123
|
@if (drawerContentTemplate) {
|
|
118
124
|
<ng-container
|
|
119
125
|
*ngTemplateOutlet="
|
|
@@ -214,7 +220,8 @@ let Drawer = (() => {
|
|
|
214
220
|
swipeEdgeWidth = (__runInitializers(this, _swipeEnabled_extraInitializers), __runInitializers(this, _swipeEdgeWidth_initializers, void 0));
|
|
215
221
|
swipeMinDistance = (__runInitializers(this, _swipeEdgeWidth_extraInitializers), __runInitializers(this, _swipeMinDistance_initializers, void 0));
|
|
216
222
|
swipeMinVelocity = (__runInitializers(this, _swipeMinDistance_extraInitializers), __runInitializers(this, _swipeMinVelocity_initializers, void 0));
|
|
217
|
-
windowDimensions = (__runInitializers(this, _swipeMinVelocity_extraInitializers), inject(WindowDimensionsService)
|
|
223
|
+
windowDimensions = (__runInitializers(this, _swipeMinVelocity_extraInitializers), inject(WindowDimensionsService)
|
|
224
|
+
.dimensions);
|
|
218
225
|
routeIdPrefix = `drawer-${(drawerInstanceCounter += 1)}`;
|
|
219
226
|
// Keyed by name -> the LIVE DrawerScreenDirective instance - see stack.ts's matching comment
|
|
220
227
|
// for why a snapshot copy would go stale on an in-place `[options]`/`[component]` change.
|
|
@@ -278,9 +285,10 @@ let Drawer = (() => {
|
|
|
278
285
|
ngAfterContentInit() {
|
|
279
286
|
this.rebuildRegistry();
|
|
280
287
|
this.initializeState();
|
|
281
|
-
this.drawerScreenChildrenSubscription =
|
|
282
|
-
this.
|
|
283
|
-
|
|
288
|
+
this.drawerScreenChildrenSubscription =
|
|
289
|
+
this.drawerScreenChildren.changes.subscribe(() => {
|
|
290
|
+
this.rebuildRegistry();
|
|
291
|
+
});
|
|
284
292
|
}
|
|
285
293
|
ngOnDestroy() {
|
|
286
294
|
this.drawerScreenChildrenSubscription?.unsubscribe();
|
|
@@ -365,7 +373,9 @@ let Drawer = (() => {
|
|
|
365
373
|
overlayColor: this.optionsSnapshot().overlayColor ?? DRAWER_DEFAULT_OVERLAY_COLOR,
|
|
366
374
|
drawerStyle: this.drawerStyleSnapshot(),
|
|
367
375
|
contentPassthrough: {},
|
|
368
|
-
overlayPassthrough: this.isAnimated()
|
|
376
|
+
overlayPassthrough: this.isAnimated()
|
|
377
|
+
? this.overlayResponderPassthrough()
|
|
378
|
+
: {},
|
|
369
379
|
panelPassthrough: {},
|
|
370
380
|
}, this.optionsSnapshot()));
|
|
371
381
|
slotsMap = computed(() => {
|
|
@@ -400,7 +410,9 @@ let Drawer = (() => {
|
|
|
400
410
|
}
|
|
401
411
|
slotStyle(slot, animatedStyle) {
|
|
402
412
|
const base = this.slotsMap().get(slot)?.props.style;
|
|
403
|
-
return this.isAnimated()
|
|
413
|
+
return this.isAnimated()
|
|
414
|
+
? flattenStyle([base, animatedStyle()])
|
|
415
|
+
: flattenStyle(base);
|
|
404
416
|
}
|
|
405
417
|
contentStyle() {
|
|
406
418
|
return this.slotStyle('content', () => {
|
|
@@ -502,7 +514,9 @@ let Drawer = (() => {
|
|
|
502
514
|
navigation: this,
|
|
503
515
|
};
|
|
504
516
|
}
|
|
505
|
-
return {
|
|
517
|
+
return {
|
|
518
|
+
$implicit: { state: currentState, descriptors, navigation: this },
|
|
519
|
+
};
|
|
506
520
|
}
|
|
507
521
|
};
|
|
508
522
|
return Drawer = _classThis;
|
package/build/angular/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export { Stack } from './stack';
|
|
|
3
3
|
export type { INavigatorHandle } from './stack';
|
|
4
4
|
export { ScreenDirective } from './screen.directive';
|
|
5
5
|
export type { IAngularScreenOptions, IAngularSearchBarOptions, IScreenOptionsArgs, IScreenOptionsResolver, } from './screen.directive';
|
|
6
|
-
export type { IScreenOptions, IStackAnimation, IStackPresentation } from '../core';
|
|
6
|
+
export type { IScreenOptions, IStackAnimation, IStackPresentation, } from '../core';
|
|
7
7
|
export { injectNavigation, injectStackNavigation, injectTabNavigation, injectDrawerNavigation, injectRoute, injectIsFocused, injectFocusEffect, injectNavigationState, } from './injectors';
|
|
8
8
|
export type { INavigationHandle, IStackNavigationHandle, ITabNavigationHandle, IDrawerNavigationHandle, IFocusEffectCallback, } from './injectors';
|
|
9
9
|
export { NavigationContextService } from './navigation-context.service';
|
|
@@ -14,10 +14,10 @@ export type { ILinkingConfig, IScreenLinkingConfig } from '../core';
|
|
|
14
14
|
export { Tab } from './tabs';
|
|
15
15
|
export type { ITabNavigatorHandle } from './tabs';
|
|
16
16
|
export { TabScreenDirective } from './tab-screen.directive';
|
|
17
|
-
export type { ITabScreenOptionsArgs, ITabScreenOptionsResolver } from './tab-screen.directive';
|
|
17
|
+
export type { ITabScreenOptionsArgs, ITabScreenOptionsResolver, } from './tab-screen.directive';
|
|
18
18
|
export type { ITabOptions, ITabBarIcon } from '../core';
|
|
19
19
|
export { Drawer } from './drawer';
|
|
20
|
-
export type { IDrawerNavigatorHandle, IDrawerDescriptorMap, IDrawerContentContext } from './drawer';
|
|
20
|
+
export type { IDrawerNavigatorHandle, IDrawerDescriptorMap, IDrawerContentContext, } from './drawer';
|
|
21
21
|
export { DrawerScreenDirective } from './drawer-screen.directive';
|
|
22
22
|
export type { IDrawerScreenOptionsArgs, IDrawerScreenOptionsResolver, } from './drawer-screen.directive';
|
|
23
|
-
export type { IDrawerOptions, IDrawerScreenOptions, IDrawerType, IDrawerPosition } from '../core';
|
|
23
|
+
export type { IDrawerOptions, IDrawerScreenOptions, IDrawerType, IDrawerPosition, } from '../core';
|
package/build/angular/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// views' ViewConfigs (../register, a side-effect import of the three codegen specs - never
|
|
4
4
|
// react-native-screens' own React components), then exposes Stack/Tab/Drawer with their Screen
|
|
5
5
|
// directives and navigator handles. Mirrors react/index.ts's barrel shape.
|
|
6
|
-
import '../register';
|
|
6
|
+
import '../register.js';
|
|
7
7
|
export { Stack } from './stack/index.js';
|
|
8
8
|
export { ScreenDirective } from './screen.directive.js';
|
|
9
9
|
export { injectNavigation, injectStackNavigation, injectTabNavigation, injectDrawerNavigation, injectRoute, injectIsFocused, injectFocusEffect, injectNavigationState, } from './injectors/index.js';
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// that route's own emitter - mirrors @react-navigation's `navigation.addListener('focus', cb)`
|
|
6
6
|
// surface. All pub/sub logic lives in ../../core/navigation-events; this function only reads
|
|
7
7
|
// NavigationContextService and binds identity.
|
|
8
|
-
import { requireNavigationContext } from '../navigation-context.service.js';
|
|
8
|
+
import { requireNavigationContext, } from '../navigation-context.service.js';
|
|
9
9
|
export function injectNavigation() {
|
|
10
10
|
const context = requireNavigationContext('injectNavigation');
|
|
11
11
|
return {
|
|
@@ -41,7 +41,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
41
41
|
return useValue ? value : void 0;
|
|
42
42
|
};
|
|
43
43
|
import { Directive, Input, inject } from '@angular/core';
|
|
44
|
-
import { NavigationContextService } from './navigation-context.service.js';
|
|
44
|
+
import { NavigationContextService, } from './navigation-context.service.js';
|
|
45
45
|
let NavigationScopeDirective = (() => {
|
|
46
46
|
let _classDecorators = [Directive({
|
|
47
47
|
selector: '[symbioteNavigationScope]',
|
|
@@ -40,7 +40,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
40
40
|
}
|
|
41
41
|
return useValue ? value : void 0;
|
|
42
42
|
};
|
|
43
|
-
import { Directive, Input, inject, ElementRef } from '@angular/core';
|
|
43
|
+
import { Directive, Input, inject, ElementRef, } from '@angular/core';
|
|
44
44
|
import { isSymbioteNode, dlog, debugNodeId } from '@symbiote-native/engine';
|
|
45
45
|
import { buildSearchBarHandle } from '../core/index.js';
|
|
46
46
|
let SearchBarRefDirective = (() => {
|
|
@@ -87,7 +87,9 @@ import { SearchBarRefDirective } from '../search-bar-ref.directive.js';
|
|
|
87
87
|
import { ScreenDirective } from '../screen.directive.js';
|
|
88
88
|
// backTitleVisible defaults to `true` on both platforms per the codegen spec's own default - no
|
|
89
89
|
// ios/android divergence in v1 scope (mirrors react/stack.ts's own constant exactly).
|
|
90
|
-
const NAVIGATOR_PLATFORM = {
|
|
90
|
+
const NAVIGATOR_PLATFORM = {
|
|
91
|
+
defaultHeaderBackTitleVisible: true,
|
|
92
|
+
};
|
|
91
93
|
let stackInstanceCounter = 0;
|
|
92
94
|
let Stack = (() => {
|
|
93
95
|
let _classDecorators = [Component({
|
|
@@ -151,7 +153,9 @@ let Stack = (() => {
|
|
|
151
153
|
</ng-template>
|
|
152
154
|
|
|
153
155
|
<ng-template #headerAndContentTpl let-route let-index="index">
|
|
154
|
-
<RNSScreenStackHeaderConfig
|
|
156
|
+
<RNSScreenStackHeaderConfig
|
|
157
|
+
[symbioteHostProps]="headerConfigProps(route, index)"
|
|
158
|
+
>
|
|
155
159
|
@if (hasSearchBar(route)) {
|
|
156
160
|
<RNSScreenStackHeaderSubview [symbioteHostProps]="headerSubviewProps">
|
|
157
161
|
<RNSSearchBar
|
|
@@ -161,7 +165,9 @@ let Stack = (() => {
|
|
|
161
165
|
</RNSScreenStackHeaderSubview>
|
|
162
166
|
}
|
|
163
167
|
</RNSScreenStackHeaderConfig>
|
|
164
|
-
<RNSScreenContentWrapper
|
|
168
|
+
<RNSScreenContentWrapper
|
|
169
|
+
[symbioteHostProps]="contentWrapperProps(route, index)"
|
|
170
|
+
>
|
|
165
171
|
<ng-container
|
|
166
172
|
[symbioteNavigationScope]="route"
|
|
167
173
|
[navigation]="this"
|
|
@@ -268,14 +274,22 @@ let Stack = (() => {
|
|
|
268
274
|
const initialRouteName = this.initialRouteName ?? this.registry.keys().next().value;
|
|
269
275
|
if (initialRouteName === undefined) {
|
|
270
276
|
dlog('Stack: no <ng-template symbioteScreen> children registered');
|
|
271
|
-
this.stateSignal.set(createInitialNavigatorState({
|
|
277
|
+
this.stateSignal.set(createInitialNavigatorState({
|
|
278
|
+
key: this.routeIdPrefix,
|
|
279
|
+
name: '',
|
|
280
|
+
params: undefined,
|
|
281
|
+
}));
|
|
272
282
|
return;
|
|
273
283
|
}
|
|
274
284
|
this.stateSignal.set(createInitialNavigatorState(this.createRoute(initialRouteName, this.registry.get(initialRouteName)?.initialParams)));
|
|
275
285
|
}
|
|
276
286
|
createRoute(name, params) {
|
|
277
287
|
this.routeSequence += 1;
|
|
278
|
-
return {
|
|
288
|
+
return {
|
|
289
|
+
key: `${this.routeIdPrefix}-${name}-${this.routeSequence}`,
|
|
290
|
+
name,
|
|
291
|
+
params,
|
|
292
|
+
};
|
|
279
293
|
}
|
|
280
294
|
dispatch(action) {
|
|
281
295
|
const current = this.stateSignal();
|
|
@@ -370,7 +384,7 @@ let Stack = (() => {
|
|
|
370
384
|
return plan;
|
|
371
385
|
}
|
|
372
386
|
outerScreenIsModal(route, index) {
|
|
373
|
-
return this.planFor(route, index).screenViewName === RNS_MODAL_SCREEN_VIEW_NAME;
|
|
387
|
+
return (this.planFor(route, index).screenViewName === RNS_MODAL_SCREEN_VIEW_NAME);
|
|
374
388
|
}
|
|
375
389
|
isInModal(route, index) {
|
|
376
390
|
return this.planFor(route, index).inModal;
|
|
@@ -63,7 +63,12 @@ let Tab = (() => {
|
|
|
63
63
|
let _classDecorators = [Component({
|
|
64
64
|
selector: 'Tab',
|
|
65
65
|
standalone: true,
|
|
66
|
-
imports: [
|
|
66
|
+
imports: [
|
|
67
|
+
NgComponentOutlet,
|
|
68
|
+
NavigationScopeDirective,
|
|
69
|
+
DescriptorOutlet,
|
|
70
|
+
View,
|
|
71
|
+
],
|
|
67
72
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
68
73
|
template: `
|
|
69
74
|
<View [style]="rootStyle">
|
|
@@ -129,9 +134,10 @@ let Tab = (() => {
|
|
|
129
134
|
setParams = (params, key) => this.dispatch({ type: 'setParams', key, params });
|
|
130
135
|
ngAfterContentInit() {
|
|
131
136
|
this.syncRegistry();
|
|
132
|
-
this.tabScreenChildrenSubscription =
|
|
133
|
-
this.
|
|
134
|
-
|
|
137
|
+
this.tabScreenChildrenSubscription =
|
|
138
|
+
this.tabScreenChildren.changes.subscribe(() => {
|
|
139
|
+
this.syncRegistry();
|
|
140
|
+
});
|
|
135
141
|
}
|
|
136
142
|
ngOnDestroy() {
|
|
137
143
|
this.tabScreenChildrenSubscription?.unsubscribe();
|
|
@@ -181,7 +187,9 @@ let Tab = (() => {
|
|
|
181
187
|
}
|
|
182
188
|
resolveTabOptions(entry, route) {
|
|
183
189
|
const props = { route, navigation: this };
|
|
184
|
-
const own = typeof entry.options === 'function'
|
|
190
|
+
const own = typeof entry.options === 'function'
|
|
191
|
+
? entry.options(props)
|
|
192
|
+
: entry.options;
|
|
185
193
|
return { ...this.screenOptions, ...own };
|
|
186
194
|
}
|
|
187
195
|
focusedRoute() {
|
|
@@ -264,11 +272,17 @@ let Tab = (() => {
|
|
|
264
272
|
};
|
|
265
273
|
});
|
|
266
274
|
const focusedRoute = this.focusedRoute();
|
|
267
|
-
const focusedEntry = focusedRoute
|
|
275
|
+
const focusedEntry = focusedRoute
|
|
276
|
+
? this.registry.get(focusedRoute.name)
|
|
277
|
+
: undefined;
|
|
268
278
|
const focusedOptions = focusedEntry && focusedRoute
|
|
269
279
|
? this.resolveTabOptions(focusedEntry, focusedRoute)
|
|
270
280
|
: this.screenOptions;
|
|
271
|
-
return renderTabBar({
|
|
281
|
+
return renderTabBar({
|
|
282
|
+
items,
|
|
283
|
+
style: focusedOptions?.tabBarStyle,
|
|
284
|
+
passthrough: {},
|
|
285
|
+
});
|
|
272
286
|
}
|
|
273
287
|
};
|
|
274
288
|
return Tab = _classThis;
|
|
@@ -85,25 +85,37 @@ export function resolveDrawerSlotInterpolation(geometry, slot) {
|
|
|
85
85
|
return {
|
|
86
86
|
translateX: {
|
|
87
87
|
inputRange: DRAWER_PROGRESS_INPUT_RANGE,
|
|
88
|
-
outputRange: [
|
|
88
|
+
outputRange: [
|
|
89
|
+
geometry.contentTranslateXClosed,
|
|
90
|
+
geometry.contentTranslateXOpen,
|
|
91
|
+
],
|
|
89
92
|
},
|
|
90
93
|
};
|
|
91
94
|
case 'overlay':
|
|
92
95
|
return {
|
|
93
96
|
opacity: {
|
|
94
97
|
inputRange: DRAWER_PROGRESS_INPUT_RANGE,
|
|
95
|
-
outputRange: [
|
|
98
|
+
outputRange: [
|
|
99
|
+
geometry.overlayOpacityClosed,
|
|
100
|
+
geometry.overlayOpacityOpen,
|
|
101
|
+
],
|
|
96
102
|
},
|
|
97
103
|
translateX: {
|
|
98
104
|
inputRange: DRAWER_PROGRESS_INPUT_RANGE,
|
|
99
|
-
outputRange: [
|
|
105
|
+
outputRange: [
|
|
106
|
+
geometry.contentTranslateXClosed,
|
|
107
|
+
geometry.contentTranslateXOpen,
|
|
108
|
+
],
|
|
100
109
|
},
|
|
101
110
|
};
|
|
102
111
|
case 'panel':
|
|
103
112
|
return {
|
|
104
113
|
translateX: {
|
|
105
114
|
inputRange: DRAWER_PROGRESS_INPUT_RANGE,
|
|
106
|
-
outputRange: [
|
|
115
|
+
outputRange: [
|
|
116
|
+
geometry.panelTranslateXClosed,
|
|
117
|
+
geometry.panelTranslateXOpen,
|
|
118
|
+
],
|
|
107
119
|
},
|
|
108
120
|
};
|
|
109
121
|
}
|
|
@@ -154,7 +166,9 @@ export function clamp01(value) {
|
|
|
154
166
|
return Math.min(1, Math.max(0, value));
|
|
155
167
|
}
|
|
156
168
|
function toFiniteNumber(value) {
|
|
157
|
-
return typeof value === 'number' && Number.isFinite(value)
|
|
169
|
+
return typeof value === 'number' && Number.isFinite(value)
|
|
170
|
+
? value
|
|
171
|
+
: undefined;
|
|
158
172
|
}
|
|
159
173
|
// The touch's real starting page-X, read off the raw event rather than gestureState.x0: the
|
|
160
174
|
// engine's capture phase (core/engine/src/pan-responder/index.ts's
|
|
@@ -11,7 +11,11 @@ export function createInitialDrawerRouterState(routes, initialRouteName) {
|
|
|
11
11
|
return { routes, index: INITIAL_FOCUSED_INDEX, isOpen: false };
|
|
12
12
|
}
|
|
13
13
|
const index = routes.findIndex(route => route.name === initialRouteName);
|
|
14
|
-
return {
|
|
14
|
+
return {
|
|
15
|
+
routes,
|
|
16
|
+
index: index === -1 ? INITIAL_FOCUSED_INDEX : index,
|
|
17
|
+
isOpen: false,
|
|
18
|
+
};
|
|
15
19
|
}
|
|
16
20
|
// Mirrors @react-navigation/drawer's DrawerActions: jumpTo focuses a route by NAME (TabRouter's
|
|
17
21
|
// own convention, not the stack's by-key popTo) AND closes the drawer - selecting a destination
|
|
@@ -23,7 +27,9 @@ export function drawerRouterReducer(state, action) {
|
|
|
23
27
|
const index = state.routes.findIndex(route => route.name === action.name);
|
|
24
28
|
if (index === -1)
|
|
25
29
|
return state;
|
|
26
|
-
return index === state.index && !state.isOpen
|
|
30
|
+
return index === state.index && !state.isOpen
|
|
31
|
+
? state
|
|
32
|
+
: { ...state, index, isOpen: false };
|
|
27
33
|
}
|
|
28
34
|
case 'openDrawer':
|
|
29
35
|
return state.isOpen ? state : { ...state, isOpen: true };
|
package/build/core/guards.js
CHANGED
|
@@ -18,5 +18,7 @@ export function isRecord(value) {
|
|
|
18
18
|
// navigator-state.ts (Stack) and tab-router-state.ts (Tabs) so the two reducers can't drift on
|
|
19
19
|
// this rule independently.
|
|
20
20
|
export function mergeParams(current, incoming) {
|
|
21
|
-
return isRecord(current) && isRecord(incoming)
|
|
21
|
+
return isRecord(current) && isRecord(incoming)
|
|
22
|
+
? { ...current, ...incoming }
|
|
23
|
+
: incoming;
|
|
22
24
|
}
|
|
@@ -21,7 +21,9 @@ function prepareIcon(icon) {
|
|
|
21
21
|
case 'imageSource':
|
|
22
22
|
return { imageSource: imageStatics.resolveAssetSource(icon.imageSource) };
|
|
23
23
|
case 'templateSource':
|
|
24
|
-
return {
|
|
24
|
+
return {
|
|
25
|
+
templateSource: imageStatics.resolveAssetSource(icon.templateSource),
|
|
26
|
+
};
|
|
25
27
|
}
|
|
26
28
|
}
|
|
27
29
|
// The one id algorithm both the payload tagger (prepareMenuItems/prepareHeaderBarButtonItems)
|
|
@@ -38,7 +40,9 @@ function prepareTitleStyle(titleStyle) {
|
|
|
38
40
|
return undefined;
|
|
39
41
|
return {
|
|
40
42
|
...titleStyle,
|
|
41
|
-
color: titleStyle.color === undefined
|
|
43
|
+
color: titleStyle.color === undefined
|
|
44
|
+
? undefined
|
|
45
|
+
: processColor(titleStyle.color),
|
|
42
46
|
};
|
|
43
47
|
}
|
|
44
48
|
function prepareBadge(badge) {
|
|
@@ -49,7 +53,9 @@ function prepareBadge(badge) {
|
|
|
49
53
|
style: badge.style
|
|
50
54
|
? {
|
|
51
55
|
...badge.style,
|
|
52
|
-
color: badge.style.color === undefined
|
|
56
|
+
color: badge.style.color === undefined
|
|
57
|
+
? undefined
|
|
58
|
+
: processColor(badge.style.color),
|
|
53
59
|
backgroundColor: badge.style.backgroundColor === undefined
|
|
54
60
|
? undefined
|
|
55
61
|
: processColor(badge.style.backgroundColor),
|
|
@@ -88,7 +94,11 @@ function prepareMenuItems(menuLike, index, side, path = '') {
|
|
|
88
94
|
const currentPath = path ? `${path}.${menuIndex}` : `${menuIndex}`;
|
|
89
95
|
const icon = prepareIcon(menuItem.icon);
|
|
90
96
|
if (menuItem.type === 'submenu') {
|
|
91
|
-
return {
|
|
97
|
+
return {
|
|
98
|
+
...menuItem,
|
|
99
|
+
...icon,
|
|
100
|
+
...prepareMenuItems(menuItem, index, side, currentPath),
|
|
101
|
+
};
|
|
92
102
|
}
|
|
93
103
|
return {
|
|
94
104
|
...excludeOnPress(menuItem),
|
package/build/core/index.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
export * from './constants';
|
|
2
2
|
export { createInitialNavigatorState, navigatorReducer, computeActivityState, isTopRoute, } from './navigator-state';
|
|
3
|
-
export type { IRoute, INavigatorState, INavigatorAction } from './navigator-state';
|
|
3
|
+
export type { IRoute, INavigatorState, INavigatorAction, } from './navigator-state';
|
|
4
4
|
export { reconcileStackRoutes } from './stack-router-state';
|
|
5
5
|
export type { IStackAnimation, IStackPresentation, IHeaderBackButtonDisplayMode, IHeaderUserInterfaceStyle, IOptionalBooleanNativeProp, ISheetAllowedDetents, ISheetLargestUndimmedDetent, ISheetInitialDetent, IHeaderBarButtonIcon, IHeaderBarButtonItemBadge, IHeaderBarButtonItemAction, IHeaderBarButtonMenuAction, IHeaderBarButtonSubmenu, IHeaderBarButtonItemMenu, IHeaderBarButtonItemSpacing, IHeaderBarButtonItem, ISearchBarAutoCapitalize, ISearchBarPlacement, ISearchBarOptions, IScreenOrientation, IScreenOptions, INavigatorPlatform, IScreenViewProps, IHeaderConfigViewProps, IStackViewProps, ISearchBarViewProps, } from './navigator-props';
|
|
6
|
-
export { resolveHeaderConfigView, resolveScreenView, resolveSearchBarView } from './screen-options';
|
|
6
|
+
export { resolveHeaderConfigView, resolveScreenView, resolveSearchBarView, } from './screen-options';
|
|
7
7
|
export { buildSearchBarHandle } from './search-bar-commands';
|
|
8
8
|
export type { ISearchBarCommands } from './search-bar-commands';
|
|
9
9
|
export { resolveScreenProps, resolveStackProps, renderHeaderConfig, resolveSearchBarProps, resolveScreenContentWrapperStyle, resolveScreenViewName, isHeaderInModal, resolveHeaderInModalStackStyle, resolveHeaderInModalScreenStyle, buildSearchBarPassthrough, resolveScreenRenderPlan, } from './render-stack';
|
|
10
10
|
export type { IScreenRenderPlanInput, IScreenRenderPlan } from './render-stack';
|
|
11
|
-
export { serializeNavigatorState, deserializeNavigatorState } from './state-persistence';
|
|
11
|
+
export { serializeNavigatorState, deserializeNavigatorState, } from './state-persistence';
|
|
12
12
|
export { createNavigationEmitter, diffFocusedRoute, NAVIGATION_EVENT_FOCUS, NAVIGATION_EVENT_BLUR, NAVIGATION_EVENT_STATE, NAVIGATION_EVENT_BEFORE_REMOVE, } from './navigation-events';
|
|
13
13
|
export type { INavigationEmitter, INavigationEventListener, INavigationEventName, IFocusTransition, } from './navigation-events';
|
|
14
14
|
export { isRecord } from './guards';
|
|
@@ -20,7 +20,7 @@ export type { ITabBarItemView, ITabBarViewProps } from './render-tabs';
|
|
|
20
20
|
export { resolveRouteFromUrl, resolveUrlFromRoute } from './linking-config';
|
|
21
21
|
export type { ILinkingConfig, IScreenLinkingConfig } from './linking-config';
|
|
22
22
|
export { createInitialDrawerRouterState, drawerRouterReducer, focusedDrawerRoute, } from './drawer-router-state';
|
|
23
|
-
export type { IDrawerRouterState, IDrawerRouterAction } from './drawer-router-state';
|
|
23
|
+
export type { IDrawerRouterState, IDrawerRouterAction, } from './drawer-router-state';
|
|
24
24
|
export type { IDrawerType, IDrawerPosition, IDrawerOptions, IDrawerScreenOptions, IDrawerGeometry, ISwipeIntent, } from './drawer-options';
|
|
25
25
|
export { DRAWER_DEFAULT_TYPE, DRAWER_DEFAULT_POSITION, DRAWER_DEFAULT_WIDTH, DRAWER_DEFAULT_OVERLAY_COLOR, DRAWER_DEFAULT_SWIPE_ENABLED, DRAWER_DEFAULT_SWIPE_EDGE_WIDTH, DRAWER_DEFAULT_SWIPE_MIN_DISTANCE, DRAWER_DEFAULT_SWIPE_MIN_VELOCITY, resolveDrawerType, resolveDrawerPosition, resolveDrawerWidth, isDrawerAnimated, isDrawerOverlayVisible, resolveDrawerGeometry, isSwipeStartInEdge, isHorizontalDrag, resolveSwipeIntent, clamp01, startPageXOf, resolveDragProgress, shouldClaimDrawerSwipe, resolveDrawerSlotInterpolation, } from './drawer-options';
|
|
26
26
|
export type { IDrawerInterpolationRange, IDrawerContentSlotInterpolation, IDrawerOverlaySlotInterpolation, IDrawerPanelSlotInterpolation, } from './drawer-options';
|
package/build/core/index.js
CHANGED
|
@@ -11,10 +11,10 @@ export { createInitialNavigatorState, navigatorReducer, computeActivityState, is
|
|
|
11
11
|
// stack-router-state.ts's header for why the Stack's history needs this and the Tab's projection
|
|
12
12
|
// does not.
|
|
13
13
|
export { reconcileStackRoutes } from './stack-router-state/index.js';
|
|
14
|
-
export { resolveHeaderConfigView, resolveScreenView, resolveSearchBarView } from './screen-options.js';
|
|
14
|
+
export { resolveHeaderConfigView, resolveScreenView, resolveSearchBarView, } from './screen-options.js';
|
|
15
15
|
export { buildSearchBarHandle } from './search-bar-commands.js';
|
|
16
16
|
export { resolveScreenProps, resolveStackProps, renderHeaderConfig, resolveSearchBarProps, resolveScreenContentWrapperStyle, resolveScreenViewName, isHeaderInModal, resolveHeaderInModalStackStyle, resolveHeaderInModalScreenStyle, buildSearchBarPassthrough, resolveScreenRenderPlan, } from './render-stack.js';
|
|
17
|
-
export { serializeNavigatorState, deserializeNavigatorState } from './state-persistence/index.js';
|
|
17
|
+
export { serializeNavigatorState, deserializeNavigatorState, } from './state-persistence/index.js';
|
|
18
18
|
export { createNavigationEmitter, diffFocusedRoute, NAVIGATION_EVENT_FOCUS, NAVIGATION_EVENT_BLUR, NAVIGATION_EVENT_STATE, NAVIGATION_EVENT_BEFORE_REMOVE, } from './navigation-events/index.js';
|
|
19
19
|
// Runtime guards shared across core (and re-exported for adapters narrowing their own untyped
|
|
20
20
|
// inputs - vnode props, gesture/event data, persisted JSON) - see guards.ts's header for which
|