@ankhorage/navigator 1.0.0 → 1.1.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/CHANGELOG.md +6 -0
- package/README.md +3 -2
- package/dist/definitions/NavigatorPlan.d.ts +11 -0
- package/dist/definitions/NavigatorPlan.d.ts.map +1 -1
- package/dist/expo-router/createNavigatorPlan.d.ts.map +1 -1
- package/dist/expo-router/createNavigatorPlan.js +12 -10
- package/dist/expo-router/createNavigatorPlan.js.map +1 -1
- package/dist/expo-router/resolveTabsNavigatorPlan.d.ts.map +1 -1
- package/dist/expo-router/resolveTabsNavigatorPlan.js +17 -4
- package/dist/expo-router/resolveTabsNavigatorPlan.js.map +1 -1
- package/dist/generation/generateNavigatorFiles.d.ts.map +1 -1
- package/dist/generation/generateNavigatorFiles.js +5 -15
- package/dist/generation/generateNavigatorFiles.js.map +1 -1
- package/dist/generation/generateTabsLayoutFile.d.ts +4 -0
- package/dist/generation/generateTabsLayoutFile.d.ts.map +1 -0
- package/dist/generation/generateTabsLayoutFile.js +137 -0
- package/dist/generation/generateTabsLayoutFile.js.map +1 -0
- package/dist/generation/generationSafety.d.ts +6 -0
- package/dist/generation/generationSafety.d.ts.map +1 -0
- package/dist/generation/generationSafety.js +18 -0
- package/dist/generation/generationSafety.js.map +1 -0
- package/dist/metadata/index.d.ts +14 -1
- package/dist/metadata/index.d.ts.map +1 -1
- package/dist/metadata/index.js +6 -1
- package/dist/metadata/index.js.map +1 -1
- package/dist/tabs/CustomTabsLayout.d.ts +39 -0
- package/dist/tabs/CustomTabsLayout.d.ts.map +1 -0
- package/dist/tabs/CustomTabsLayout.js +122 -0
- package/dist/tabs/CustomTabsLayout.js.map +1 -0
- package/dist/tabs/index.d.ts +3 -0
- package/dist/tabs/index.d.ts.map +1 -0
- package/dist/tabs/index.js +2 -0
- package/dist/tabs/index.js.map +1 -0
- package/dist/tabs/nativeIconFamilies.d.ts +16 -0
- package/dist/tabs/nativeIconFamilies.d.ts.map +1 -0
- package/dist/tabs/nativeIconFamilies.js +24 -0
- package/dist/tabs/nativeIconFamilies.js.map +1 -0
- package/dist/validation/validateNavigatorManifest.d.ts.map +1 -1
- package/dist/validation/validateNavigatorManifest.js +2 -36
- package/dist/validation/validateNavigatorManifest.js.map +1 -1
- package/dist/validation/validateTabsNavigator.d.ts +5 -0
- package/dist/validation/validateTabsNavigator.d.ts.map +1 -0
- package/dist/validation/validateTabsNavigator.js +140 -0
- package/dist/validation/validateTabsNavigator.js.map +1 -0
- package/package.json +34 -1
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
|
|
4
4
|
# NAVIGATOR
|
|
5
5
|
|
|
6
|
-
         
|
|
7
7
|
|
|
8
|
-
Standalone
|
|
8
|
+
Standalone Navigator capability with topology configured independently from platform implementation and visual presentation. Adaptive tabs use Native Tabs on Android/iOS and one stable Expo Router headless topology with Surface-owned responsive presentation on Web.
|
|
9
9
|
|
|
10
10
|
## Generated documentation
|
|
11
11
|
|
|
@@ -15,5 +15,6 @@ Standalone manifest-driven navigator capability for Expo Router across React Nat
|
|
|
15
15
|
- [Architecture overview](././paradox/diagrams/architecture-overview.mmd)
|
|
16
16
|
- [Module relationships](././paradox/diagrams/module-relationships.mmd)
|
|
17
17
|
- [Export graph](././paradox/diagrams/export-graph.mmd)
|
|
18
|
+
- [CustomTabsLayout sequence](././paradox/diagrams/sequences/custom-tabs-layout.mmd)
|
|
18
19
|
- [resolveCustomTabsPresentation sequence](././paradox/diagrams/sequences/resolve-custom-tabs-presentation.mmd)
|
|
19
20
|
- [resolveTabsNavigatorPlan sequence](././paradox/diagrams/sequences/resolve-tabs-navigator-plan.mmd)
|
|
@@ -25,13 +25,22 @@ export interface NavigatorAdapterPlan {
|
|
|
25
25
|
}
|
|
26
26
|
export type ResolvedTabsImplementation = 'custom' | 'javascript' | 'native';
|
|
27
27
|
export type ResolvedTabsPresentation = 'bottom' | 'top' | 'rail' | 'sidebar' | 'custom';
|
|
28
|
+
/**
|
|
29
|
+
* Disposable adapter plan for a `tabs` topology.
|
|
30
|
+
*
|
|
31
|
+
* The implementation selects the Router runtime. Presentation only selects its visual chrome and
|
|
32
|
+
* never creates another route topology.
|
|
33
|
+
*/
|
|
28
34
|
export interface TabsNavigatorPlan {
|
|
29
35
|
implementation: ResolvedTabsImplementation;
|
|
30
36
|
module: ExpoRouterNavigatorModule;
|
|
31
37
|
exportName: string;
|
|
32
38
|
stability: NavigatorApiStability;
|
|
33
39
|
presentation?: ResolvedTabsPresentation;
|
|
40
|
+
presentations?: Readonly<Record<NavigatorResponsiveSize, ResolvedTabsPresentation>>;
|
|
34
41
|
customPresentationId?: string;
|
|
42
|
+
minimizeBehavior?: 'automatic' | 'never' | 'onScrollDown' | 'onScrollUp';
|
|
43
|
+
bottomAccessoryScreenId?: string;
|
|
35
44
|
}
|
|
36
45
|
export interface NavigatorRoutePlan {
|
|
37
46
|
name: string;
|
|
@@ -88,10 +97,12 @@ export interface NavigatorScreenModule {
|
|
|
88
97
|
export interface NavigatorGenerationBindings {
|
|
89
98
|
screens: Readonly<Record<string, NavigatorScreenModule>>;
|
|
90
99
|
guards: Readonly<Record<string, NavigatorScreenModule>>;
|
|
100
|
+
iconSourceResolver?: NavigatorScreenModule;
|
|
91
101
|
flows?: {
|
|
92
102
|
onboardingRoute?: string;
|
|
93
103
|
authenticationRoute?: string;
|
|
94
104
|
};
|
|
105
|
+
tabPresentations?: Readonly<Record<string, NavigatorScreenModule>>;
|
|
95
106
|
}
|
|
96
107
|
export interface NavigatorGeneratedFile {
|
|
97
108
|
path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavigatorPlan.d.ts","sourceRoot":"","sources":["../../src/definitions/NavigatorPlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,gCAAgC,CAAC;AAExC,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;AACjE,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AACxE,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,OAAO,CAAC;AACvD,MAAM,MAAM,sBAAsB,GAAG,WAAW,GAAG,aAAa,CAAC;AAEjE,MAAM,MAAM,yBAAyB,GACjC,aAAa,GACb,oBAAoB,GACpB,sBAAsB,GACtB,qBAAqB,GACrB,yBAAyB,GACzB,gBAAgB,GAChB,kCAAkC,CAAC;AAEvC,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,cAAc,GACd,kBAAkB,GAClB,oBAAoB,GACpB,QAAQ,GACR,aAAa,GACb,iBAAiB,GACjB,aAAa,GACb,YAAY,GACZ,QAAQ,CAAC;AAEb,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,wBAAwB,CAAC;IACnC,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,kBAAkB,CAAC;IACvB,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,sBAAsB,CAAC;IAChC,SAAS,EAAE,qBAAqB,CAAC;IACjC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,CAAC;AAC5E,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAExF,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,0BAA0B,CAAC;IAC3C,MAAM,EAAE,yBAAyB,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,qBAAqB,CAAC;IACjC,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC,oBAAoB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"NavigatorPlan.d.ts","sourceRoot":"","sources":["../../src/definitions/NavigatorPlan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createNavigatorPlan.d.ts","sourceRoot":"","sources":["../../src/expo-router/createNavigatorPlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAIrB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAGV,aAAa,EACb,uBAAuB,EAEvB,wBAAwB,EAEzB,MAAM,8BAA8B,CAAC;AAStC,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,wBAAwB,CAAC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,uBAAuB,CAAC;CAC1C;
|
|
1
|
+
{"version":3,"file":"createNavigatorPlan.d.ts","sourceRoot":"","sources":["../../src/expo-router/createNavigatorPlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAIrB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAGV,aAAa,EACb,uBAAuB,EAEvB,wBAAwB,EAEzB,MAAM,8BAA8B,CAAC;AAStC,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,wBAAwB,CAAC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,uBAAuB,CAAC;CAC1C;AAkPD,6FAA6F;AAC7F,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,0BAA0B,GAClC,aAAa,CAmBf"}
|
|
@@ -30,22 +30,24 @@ function createStackAdapter(stack, routerMajor) {
|
|
|
30
30
|
limitations: [],
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
|
-
function createTabsAdapter(tabs) {
|
|
33
|
+
function createTabsAdapter(tabs, platform, routerMajor) {
|
|
34
|
+
const nativeUnavailable = tabs.implementation === 'native' &&
|
|
35
|
+
(platform === 'web' || routerMajor === undefined || routerMajor < 54);
|
|
36
|
+
const customUnavailable = tabs.implementation === 'custom' && platform !== 'web';
|
|
34
37
|
return {
|
|
35
38
|
id: `tabs.${tabs.implementation}`,
|
|
36
39
|
module: tabs.module,
|
|
37
40
|
exportName: tabs.exportName,
|
|
38
|
-
support: 'unavailable',
|
|
41
|
+
support: nativeUnavailable || customUnavailable ? 'unavailable' : 'supported',
|
|
39
42
|
stability: tabs.stability,
|
|
40
43
|
limitations: tabs.implementation === 'native'
|
|
41
|
-
? [
|
|
42
|
-
|
|
43
|
-
'
|
|
44
|
-
|
|
45
|
-
: ['Owned by the optional Tabs adapter.'],
|
|
44
|
+
? ['Alpha API; unavailable on web and requires Expo Router 54.0.0 or newer.']
|
|
45
|
+
: tabs.implementation === 'custom'
|
|
46
|
+
? ['Web-only Surface presentation over Expo Router headless tabs.']
|
|
47
|
+
: [],
|
|
46
48
|
};
|
|
47
49
|
}
|
|
48
|
-
function createAdapter(node, stack, tabs, routerMajor) {
|
|
50
|
+
function createAdapter(node, stack, tabs, platform, routerMajor) {
|
|
49
51
|
switch (node.type) {
|
|
50
52
|
case 'slot':
|
|
51
53
|
return {
|
|
@@ -70,7 +72,7 @@ function createAdapter(node, stack, tabs, routerMajor) {
|
|
|
70
72
|
case 'tabs':
|
|
71
73
|
if (tabs === undefined)
|
|
72
74
|
throw new Error('Tabs planning did not resolve an adapter.');
|
|
73
|
-
return createTabsAdapter(tabs);
|
|
75
|
+
return createTabsAdapter(tabs, platform, routerMajor);
|
|
74
76
|
case 'split-view':
|
|
75
77
|
return {
|
|
76
78
|
id: 'split-view',
|
|
@@ -167,7 +169,7 @@ function createNodePlan(manifest, node, pointer, options, responsiveSize) {
|
|
|
167
169
|
return {
|
|
168
170
|
type: node.type,
|
|
169
171
|
pointer,
|
|
170
|
-
adapter: createAdapter(node, stack, tabs, parseExpoRouterMajor(options.expoRouterVersion)),
|
|
172
|
+
adapter: createAdapter(node, stack, tabs, options.platform, parseExpoRouterMajor(options.expoRouterVersion)),
|
|
171
173
|
...(node.initialRouteName === undefined ? {} : { initialRouteName: node.initialRouteName }),
|
|
172
174
|
routes,
|
|
173
175
|
...createNodeDetails(node, stack, tabs),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createNavigatorPlan.js","sourceRoot":"","sources":["../../src/expo-router/createNavigatorPlan.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAQtE,SAAS,kBAAkB,CACzB,KAA4C,EAC5C,WAA+B;IAE/B,MAAM,cAAc,GAAG,KAAK,EAAE,cAAc,IAAI,QAAQ,CAAC;IACzD,IAAI,cAAc,KAAK,YAAY,EAAE,CAAC;QACpC,OAAO;YACL,EAAE,EAAE,kBAAkB;YACtB,MAAM,EAAE,sBAAsB;YAC9B,UAAU,EAAE,OAAO;YACnB,OAAO,EAAE,WAAW,KAAK,SAAS,IAAI,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa;YACrF,SAAS,EAAE,QAAQ;YACnB,WAAW,EAAE,CAAC,uCAAuC,CAAC;SACvD,CAAC;IACJ,CAAC;IACD,IAAI,cAAc,KAAK,cAAc,EAAE,CAAC;QACtC,OAAO;YACL,EAAE,EAAE,oBAAoB;YACxB,OAAO,EAAE,aAAa;YACtB,SAAS,EAAE,OAAO;YAClB,WAAW,EAAE,CAAC,mDAAmD,CAAC;SACnE,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,cAAc;QAClB,MAAM,EAAE,aAAa;QACrB,UAAU,EAAE,OAAO;QACnB,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,QAAQ;QACnB,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,
|
|
1
|
+
{"version":3,"file":"createNavigatorPlan.js","sourceRoot":"","sources":["../../src/expo-router/createNavigatorPlan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveTabsNavigatorPlan.d.ts","sourceRoot":"","sources":["../../src/expo-router/resolveTabsNavigatorPlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,wBAAwB,EACzB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"resolveTabsNavigatorPlan.d.ts","sourceRoot":"","sources":["../../src/expo-router/resolveTabsNavigatorPlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,wBAAwB,EACzB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,8BAA8B,CAAC;AAsFtC,2FAA2F;AAC3F,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,GAAG,SAAS,EAC5C,QAAQ,EAAE,wBAAwB,EAClC,IAAI,EAAE,uBAAuB,GAC5B,iBAAiB,CAcnB"}
|
|
@@ -11,7 +11,7 @@ function resolveAdaptiveConfig(config) {
|
|
|
11
11
|
: undefined;
|
|
12
12
|
}
|
|
13
13
|
/*** Create the alpha native-tabs plan and reject unsupported Web usage. */
|
|
14
|
-
function createNativeTabsPlan(platform) {
|
|
14
|
+
function createNativeTabsPlan(platform, config) {
|
|
15
15
|
if (platform === 'web') {
|
|
16
16
|
throw new Error('Native tabs are not available for the Web navigator plan.');
|
|
17
17
|
}
|
|
@@ -20,6 +20,12 @@ function createNativeTabsPlan(platform) {
|
|
|
20
20
|
module: 'expo-router/unstable-native-tabs',
|
|
21
21
|
exportName: 'NativeTabs',
|
|
22
22
|
stability: 'alpha',
|
|
23
|
+
...(config?.minimizeBehavior === undefined
|
|
24
|
+
? {}
|
|
25
|
+
: { minimizeBehavior: config.minimizeBehavior }),
|
|
26
|
+
...(config?.bottomAccessory === undefined
|
|
27
|
+
? {}
|
|
28
|
+
: { bottomAccessoryScreenId: config.bottomAccessory.screenId }),
|
|
23
29
|
};
|
|
24
30
|
}
|
|
25
31
|
/*** Create the stable JavaScript tabs plan for bottom or top presentation. */
|
|
@@ -35,18 +41,25 @@ function createJavaScriptTabsPlan(config) {
|
|
|
35
41
|
}
|
|
36
42
|
/*** Create the stable headless custom-tabs plan for Web or explicit custom use. */
|
|
37
43
|
function createCustomTabsPlan(config, size) {
|
|
44
|
+
const resolved = resolveCustomTabsPresentation(config, size);
|
|
45
|
+
const presentations = {
|
|
46
|
+
compact: resolveCustomTabsPresentation(config, 'compact').presentation,
|
|
47
|
+
medium: resolveCustomTabsPresentation(config, 'medium').presentation,
|
|
48
|
+
expanded: resolveCustomTabsPresentation(config, 'expanded').presentation,
|
|
49
|
+
};
|
|
38
50
|
return {
|
|
39
51
|
implementation: 'custom',
|
|
40
52
|
module: 'expo-router/ui',
|
|
41
53
|
exportName: 'Tabs',
|
|
42
54
|
stability: 'stable',
|
|
43
|
-
...
|
|
55
|
+
...resolved,
|
|
56
|
+
presentations,
|
|
44
57
|
};
|
|
45
58
|
}
|
|
46
59
|
/*** Resolve the adaptive tabs plan for the selected runtime platform. */
|
|
47
60
|
function createAdaptiveTabsPlan(config, platform, size) {
|
|
48
61
|
if (platform !== 'web')
|
|
49
|
-
return createNativeTabsPlan(platform);
|
|
62
|
+
return createNativeTabsPlan(platform, resolveAdaptiveConfig(config)?.native);
|
|
50
63
|
return createCustomTabsPlan(resolveAdaptiveConfig(config)?.web ?? DEFAULT_WEB_CUSTOM_TABS, size);
|
|
51
64
|
}
|
|
52
65
|
/*** Resolve the Expo Router module/export and presentation for one tabs implementation. */
|
|
@@ -58,7 +71,7 @@ export function resolveTabsNavigatorPlan(config, platform, size) {
|
|
|
58
71
|
case 'adaptive':
|
|
59
72
|
return createAdaptiveTabsPlan(config, platform, size);
|
|
60
73
|
case 'native':
|
|
61
|
-
return createNativeTabsPlan(platform);
|
|
74
|
+
return createNativeTabsPlan(platform, config);
|
|
62
75
|
case 'javascript':
|
|
63
76
|
return createJavaScriptTabsPlan(config);
|
|
64
77
|
case 'custom':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveTabsNavigatorPlan.js","sourceRoot":"","sources":["../../src/expo-router/resolveTabsNavigatorPlan.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,6BAA6B,EAAE,MAAM,+CAA+C,CAAC;AAE9F,MAAM,uBAAuB,GAAG;IAC9B,YAAY,EAAE,YAAY;CAClB,CAAC;AAEX,mFAAmF;AACnF,SAAS,qBAAqB,CAC5B,MAA4C;IAE5C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,cAAc,KAAK,UAAU;QAChF,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,2EAA2E;AAC3E,SAAS,oBAAoB,
|
|
1
|
+
{"version":3,"file":"resolveTabsNavigatorPlan.js","sourceRoot":"","sources":["../../src/expo-router/resolveTabsNavigatorPlan.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,6BAA6B,EAAE,MAAM,+CAA+C,CAAC;AAE9F,MAAM,uBAAuB,GAAG;IAC9B,YAAY,EAAE,YAAY;CAClB,CAAC;AAEX,mFAAmF;AACnF,SAAS,qBAAqB,CAC5B,MAA4C;IAE5C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,cAAc,KAAK,UAAU;QAChF,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,2EAA2E;AAC3E,SAAS,oBAAoB,CAC3B,QAAkC,EAClC,MAGC;IAED,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO;QACL,cAAc,EAAE,QAAQ;QACxB,MAAM,EAAE,kCAAkC;QAC1C,UAAU,EAAE,YAAY;QACxB,SAAS,EAAE,OAAO;QAClB,GAAG,CAAC,MAAM,EAAE,gBAAgB,KAAK,SAAS;YACxC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAClD,GAAG,CAAC,MAAM,EAAE,eAAe,KAAK,SAAS;YACvC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,uBAAuB,EAAE,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS,wBAAwB,CAAC,MAA4B;IAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,KAAK,KAAK,CAAC;IAC1C,OAAO;QACL,cAAc,EAAE,YAAY;QAC5B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,qBAAqB;QAC/D,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;QACpC,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;KACrC,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,SAAS,oBAAoB,CAC3B,MAAgD,EAChD,IAA6B;IAE7B,MAAM,QAAQ,GAAG,6BAA6B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG;QACpB,OAAO,EAAE,6BAA6B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,YAAY;QACtE,MAAM,EAAE,6BAA6B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,YAAY;QACpE,QAAQ,EAAE,6BAA6B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,YAAY;KACzE,CAAC;IACF,OAAO;QACL,cAAc,EAAE,QAAQ;QACxB,MAAM,EAAE,gBAAgB;QACxB,UAAU,EAAE,MAAM;QAClB,SAAS,EAAE,QAAQ;QACnB,GAAG,QAAQ;QACX,aAAa;KACd,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,SAAS,sBAAsB,CAC7B,MAA4C,EAC5C,QAAkC,EAClC,IAA6B;IAE7B,IAAI,QAAQ,KAAK,KAAK;QACpB,OAAO,oBAAoB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/E,OAAO,oBAAoB,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,uBAAuB,EAAE,IAAI,CAAC,CAAC;AACnG,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,wBAAwB,CACtC,MAA4C,EAC5C,QAAkC,EAClC,IAA6B;IAE7B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAEhF,QAAQ,MAAM,CAAC,cAAc,EAAE,CAAC;QAC9B,KAAK,SAAS,CAAC;QACf,KAAK,UAAU;YACb,OAAO,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxD,KAAK,QAAQ;YACX,OAAO,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,KAAK,YAAY;YACf,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC1C,KAAK,QAAQ;YACX,OAAO,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateNavigatorFiles.d.ts","sourceRoot":"","sources":["../../src/generation/generateNavigatorFiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,2BAA2B,EAE3B,aAAa,EAGd,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"generateNavigatorFiles.d.ts","sourceRoot":"","sources":["../../src/generation/generateNavigatorFiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,2BAA2B,EAE3B,aAAa,EAGd,MAAM,8BAA8B,CAAC;AAwMtC,sGAAsG;AACtG,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,aAAa,EACnB,QAAQ,EAAE,2BAA2B,GACpC,SAAS,sBAAsB,EAAE,CAkBnC"}
|
|
@@ -1,20 +1,7 @@
|
|
|
1
1
|
const APP_DIRECTORY = 'src/app';
|
|
2
|
-
const SAFE_EXPORT_NAME = /^[A-Za-z_$][A-Za-z0-9_$]*$/u;
|
|
3
2
|
const SAFE_ROUTE_NAME = /^[A-Za-z0-9_.()[\]-]+$/u;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
if (!SAFE_MODULE.test(binding.module) ||
|
|
7
|
-
binding.module.includes('\\') ||
|
|
8
|
-
binding.module.split('/').slice(1).includes('..')) {
|
|
9
|
-
throw new Error(`${description} has an unsafe module specifier.`);
|
|
10
|
-
}
|
|
11
|
-
if (!SAFE_EXPORT_NAME.test(binding.exportName)) {
|
|
12
|
-
throw new Error(`${description} has an invalid exported symbol.`);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
function quote(value) {
|
|
16
|
-
return JSON.stringify(value);
|
|
17
|
-
}
|
|
3
|
+
import { generateTabsLayoutFile } from './generateTabsLayoutFile';
|
|
4
|
+
import { assertModuleBinding, quote } from './generationSafety';
|
|
18
5
|
function assertRouteName(name) {
|
|
19
6
|
if (!SAFE_ROUTE_NAME.test(name) || name === '.' || name === '..') {
|
|
20
7
|
throw new Error(`Route name ${JSON.stringify(name)} is not a safe generated file segment.`);
|
|
@@ -91,6 +78,9 @@ function createLayoutFile(node, directory, bindings) {
|
|
|
91
78
|
node.adapter.exportName === undefined) {
|
|
92
79
|
throw new Error(`Cannot generate unavailable navigator adapter ${JSON.stringify(node.adapter.id)} at ${node.pointer || '/'}.`);
|
|
93
80
|
}
|
|
81
|
+
const tabsLayout = generateTabsLayoutFile(node, directory, bindings);
|
|
82
|
+
if (tabsLayout !== undefined)
|
|
83
|
+
return tabsLayout;
|
|
94
84
|
const componentName = node.adapter.exportName;
|
|
95
85
|
assertModuleBinding({ module: node.adapter.module, exportName: componentName }, `Adapter ${JSON.stringify(node.adapter.id)}`);
|
|
96
86
|
const guardAliases = new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateNavigatorFiles.js","sourceRoot":"","sources":["../../src/generation/generateNavigatorFiles.ts"],"names":[],"mappings":"AASA,MAAM,aAAa,GAAG,SAAS,CAAC;AAChC,MAAM,
|
|
1
|
+
{"version":3,"file":"generateNavigatorFiles.js","sourceRoot":"","sources":["../../src/generation/generateNavigatorFiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { NavigatorGeneratedFile, NavigatorGenerationBindings, NavigatorNodePlan } from '../definitions/NavigatorPlan';
|
|
2
|
+
/*** Generate the specialized layout file for a supported tabs implementation. */
|
|
3
|
+
export declare function generateTabsLayoutFile(node: NavigatorNodePlan, directory: string, bindings: NavigatorGenerationBindings): NavigatorGeneratedFile | undefined;
|
|
4
|
+
//# sourceMappingURL=generateTabsLayoutFile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateTabsLayoutFile.d.ts","sourceRoot":"","sources":["../../src/generation/generateTabsLayoutFile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,2BAA2B,EAC3B,iBAAiB,EAGlB,MAAM,8BAA8B,CAAC;AAoKtC,iFAAiF;AACjF,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,2BAA2B,GACpC,sBAAsB,GAAG,SAAS,CASpC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { assertModuleBinding, quote } from './generationSafety';
|
|
2
|
+
/*** Resolve and validate the native vector-icon provider for one planned route icon. */
|
|
3
|
+
function nativeIconProvider(icon) {
|
|
4
|
+
if (icon === undefined || 'source' in icon) {
|
|
5
|
+
throw new Error('Native Tabs require a supported named icon.');
|
|
6
|
+
}
|
|
7
|
+
const provider = icon.provider ?? 'Ionicons';
|
|
8
|
+
switch (provider) {
|
|
9
|
+
case 'FontAwesome':
|
|
10
|
+
case 'FontAwesome5':
|
|
11
|
+
case 'FontAwesome6':
|
|
12
|
+
case 'Ionicons':
|
|
13
|
+
case 'MaterialDesignIcons':
|
|
14
|
+
return provider;
|
|
15
|
+
default:
|
|
16
|
+
throw new Error(`Native Tabs icon provider ${JSON.stringify(provider)} is unsupported.`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/*** Read the required native vector-icon name from one planned route icon. */
|
|
20
|
+
function nativeIconName(icon) {
|
|
21
|
+
if (icon === undefined || 'source' in icon) {
|
|
22
|
+
throw new Error('Native Tabs require a supported named icon.');
|
|
23
|
+
}
|
|
24
|
+
return icon.name;
|
|
25
|
+
}
|
|
26
|
+
/*** Map a supported provider to the Navigator-owned Native Tabs family export. */
|
|
27
|
+
function nativeIconFamily(provider) {
|
|
28
|
+
switch (provider) {
|
|
29
|
+
case 'FontAwesome':
|
|
30
|
+
return 'NativeFontAwesomeFamily';
|
|
31
|
+
case 'FontAwesome5':
|
|
32
|
+
return 'NativeFontAwesome5Family';
|
|
33
|
+
case 'FontAwesome6':
|
|
34
|
+
return 'NativeFontAwesome6Family';
|
|
35
|
+
case 'Ionicons':
|
|
36
|
+
return 'NativeIoniconsFamily';
|
|
37
|
+
case 'MaterialDesignIcons':
|
|
38
|
+
return 'NativeMaterialDesignIconsFamily';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/*** Render a complete Native Tabs layout module from one validated node plan. */
|
|
42
|
+
function createNativeTabsContents(node, componentName, imports, accessoryName) {
|
|
43
|
+
const initialRoute = node.initialRouteName === undefined
|
|
44
|
+
? ''
|
|
45
|
+
: `\n\nexport const unstable_settings = { initialRouteName: ${quote(node.initialRouteName)} };`;
|
|
46
|
+
const minimize = node.tabs?.minimizeBehavior === undefined
|
|
47
|
+
? ''
|
|
48
|
+
: ` minimizeBehavior=${quote(node.tabs.minimizeBehavior)}`;
|
|
49
|
+
const triggers = node.routes
|
|
50
|
+
.map((route) => {
|
|
51
|
+
const label = route.label ?? route.name;
|
|
52
|
+
const icon = route.icon === undefined
|
|
53
|
+
? ''
|
|
54
|
+
: `\n <${componentName}.Trigger.Icon src={<${componentName}.Trigger.VectorIcon family={${nativeIconFamily(nativeIconProvider(route.icon))}} name=${quote(nativeIconName(route.icon))} />} />`;
|
|
55
|
+
return ` <${componentName}.Trigger name=${quote(route.name)}>\n <${componentName}.Trigger.Label>{${quote(label)}}</${componentName}.Trigger.Label>${icon}\n </${componentName}.Trigger>`;
|
|
56
|
+
})
|
|
57
|
+
.join('\n');
|
|
58
|
+
const accessory = accessoryName === undefined
|
|
59
|
+
? ''
|
|
60
|
+
: `\n <${componentName}.BottomAccessory>\n <${accessoryName} />\n </${componentName}.BottomAccessory>`;
|
|
61
|
+
return `${imports}${initialRoute}\n\nexport default function NavigatorLayout() {\n return (\n <${componentName}${minimize}>\n${triggers}${accessory}\n </${componentName}>\n );\n}\n`;
|
|
62
|
+
}
|
|
63
|
+
/*** Create the generated Native Tabs layout file and its narrow runtime imports. */
|
|
64
|
+
function createNativeTabsFile(node, directory, bindings) {
|
|
65
|
+
const componentName = node.adapter.exportName ?? 'NativeTabs';
|
|
66
|
+
const imports = [`import { ${componentName} } from ${quote(node.adapter.module ?? '')};`];
|
|
67
|
+
const iconFamilies = [
|
|
68
|
+
...new Set(node.routes.flatMap((route) => route.icon === undefined ? [] : [nativeIconFamily(nativeIconProvider(route.icon))])),
|
|
69
|
+
].sort();
|
|
70
|
+
if (iconFamilies.length > 0) {
|
|
71
|
+
imports.push(`import { ${iconFamilies.join(', ')} } from "@ankhorage/navigator/tabs/native-icons";`);
|
|
72
|
+
}
|
|
73
|
+
let accessoryName;
|
|
74
|
+
if (node.tabs?.bottomAccessoryScreenId !== undefined) {
|
|
75
|
+
const binding = Reflect.get(bindings.screens, node.tabs.bottomAccessoryScreenId);
|
|
76
|
+
if (binding === undefined)
|
|
77
|
+
throw new Error('Missing Native Tabs bottom-accessory binding.');
|
|
78
|
+
assertModuleBinding(binding, 'Native Tabs bottom accessory');
|
|
79
|
+
accessoryName = 'NavigatorBottomAccessory';
|
|
80
|
+
imports.push(`import { ${binding.exportName} as ${accessoryName} } from ${quote(binding.module)};`);
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
path: `${directory}/_layout.tsx`,
|
|
84
|
+
contents: createNativeTabsContents(node, componentName, imports.join('\n'), accessoryName),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/*** Create the generated Web custom-tabs layout file and registered integration imports. */
|
|
88
|
+
function createCustomTabsFile(node, directory, bindings) {
|
|
89
|
+
const { tabs } = node;
|
|
90
|
+
if (tabs?.presentations === undefined) {
|
|
91
|
+
throw new Error('Custom Tabs planning did not preserve responsive presentations.');
|
|
92
|
+
}
|
|
93
|
+
const imports = ['import { CustomTabsLayout } from "@ankhorage/navigator/tabs";'];
|
|
94
|
+
let customPresentation = '';
|
|
95
|
+
let iconSourceResolver = '';
|
|
96
|
+
if (tabs.customPresentationId !== undefined) {
|
|
97
|
+
const binding = Reflect.get(bindings.tabPresentations ?? {}, tabs.customPresentationId);
|
|
98
|
+
if (binding === undefined)
|
|
99
|
+
throw new Error('Missing registered custom Tabs presentation.');
|
|
100
|
+
assertModuleBinding(binding, 'Custom Tabs presentation');
|
|
101
|
+
customPresentation = ' customPresentation={NavigatorCustomTabsPresentation}';
|
|
102
|
+
imports.push(`import { ${binding.exportName} as NavigatorCustomTabsPresentation } from ${quote(binding.module)};`);
|
|
103
|
+
}
|
|
104
|
+
if (node.routes.some((route) => route.icon !== undefined && 'source' in route.icon)) {
|
|
105
|
+
const binding = bindings.iconSourceResolver;
|
|
106
|
+
if (binding === undefined)
|
|
107
|
+
throw new Error('Missing registered Tabs icon-source resolver.');
|
|
108
|
+
assertModuleBinding(binding, 'Tabs icon-source resolver');
|
|
109
|
+
iconSourceResolver = ' resolveIconSource={NavigatorResolveTabsIconSource}';
|
|
110
|
+
imports.push(`import { ${binding.exportName} as NavigatorResolveTabsIconSource } from ${quote(binding.module)};`);
|
|
111
|
+
}
|
|
112
|
+
const routes = node.routes.map((route) => ({
|
|
113
|
+
name: route.name,
|
|
114
|
+
href: route.path,
|
|
115
|
+
label: route.label ?? route.name,
|
|
116
|
+
...(route.icon === undefined ? {} : { icon: route.icon }),
|
|
117
|
+
visible: route.showInPrimaryNavigation !== false,
|
|
118
|
+
}));
|
|
119
|
+
const initialRoute = node.initialRouteName === undefined ? '' : ` initialRouteName=${quote(node.initialRouteName)}`;
|
|
120
|
+
return {
|
|
121
|
+
path: `${directory}/_layout.tsx`,
|
|
122
|
+
contents: `${imports.join('\n')}\n\nconst routes = ${JSON.stringify(routes)} as const;\nconst presentations = ${JSON.stringify(tabs.presentations)} as const;\n\nexport default function NavigatorLayout() {\n return <CustomTabsLayout${customPresentation}${initialRoute} presentations={presentations}${iconSourceResolver} routes={routes} />;\n}\n`,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/*** Generate the specialized layout file for a supported tabs implementation. */
|
|
126
|
+
export function generateTabsLayoutFile(node, directory, bindings) {
|
|
127
|
+
if (node.type !== 'tabs')
|
|
128
|
+
return undefined;
|
|
129
|
+
if (node.tabs?.implementation === 'native') {
|
|
130
|
+
return createNativeTabsFile(node, directory, bindings);
|
|
131
|
+
}
|
|
132
|
+
if (node.tabs?.implementation === 'custom') {
|
|
133
|
+
return createCustomTabsFile(node, directory, bindings);
|
|
134
|
+
}
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=generateTabsLayoutFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateTabsLayoutFile.js","sourceRoot":"","sources":["../../src/generation/generateTabsLayoutFile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { NavigatorScreenModule } from '../definitions/NavigatorPlan';
|
|
2
|
+
/*** Reject module and export bindings that cannot be emitted as safe static imports. */
|
|
3
|
+
export declare function assertModuleBinding(binding: NavigatorScreenModule, description: string): void;
|
|
4
|
+
/*** Serialize a generated string literal with JSON escaping. */
|
|
5
|
+
export declare function quote(value: string): string;
|
|
6
|
+
//# sourceMappingURL=generationSafety.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generationSafety.d.ts","sourceRoot":"","sources":["../../src/generation/generationSafety.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAM1E,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAW7F;AAED,gEAAgE;AAChE,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3C"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const SAFE_EXPORT_NAME = /^[A-Za-z_$][A-Za-z0-9_$]*$/u;
|
|
2
|
+
const SAFE_MODULE = /^(?:@\/[A-Za-z0-9_./-]+|\.{1,2}\/[A-Za-z0-9_./-]+|@?[A-Za-z0-9][A-Za-z0-9._-]*(?:\/[A-Za-z0-9._-]+)*)$/u;
|
|
3
|
+
/*** Reject module and export bindings that cannot be emitted as safe static imports. */
|
|
4
|
+
export function assertModuleBinding(binding, description) {
|
|
5
|
+
if (!SAFE_MODULE.test(binding.module) ||
|
|
6
|
+
binding.module.includes('\\') ||
|
|
7
|
+
binding.module.split('/').slice(1).includes('..')) {
|
|
8
|
+
throw new Error(`${description} has an unsafe module specifier.`);
|
|
9
|
+
}
|
|
10
|
+
if (!SAFE_EXPORT_NAME.test(binding.exportName)) {
|
|
11
|
+
throw new Error(`${description} has an invalid exported symbol.`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/*** Serialize a generated string literal with JSON escaping. */
|
|
15
|
+
export function quote(value) {
|
|
16
|
+
return JSON.stringify(value);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=generationSafety.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generationSafety.js","sourceRoot":"","sources":["../../src/generation/generationSafety.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;AACvD,MAAM,WAAW,GACf,yGAAyG,CAAC;AAE5G,wFAAwF;AACxF,MAAM,UAAU,mBAAmB,CAAC,OAA8B,EAAE,WAAmB;IACrF,IACE,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EACjD,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,kCAAkC,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,kCAAkC,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,KAAK,CAAC,KAAa;IACjC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
|
package/dist/metadata/index.d.ts
CHANGED
|
@@ -30,7 +30,20 @@ export declare const NAVIGATOR_PACKAGE_METADATA: {
|
|
|
30
30
|
};
|
|
31
31
|
readonly optionalAdapters: {
|
|
32
32
|
readonly tabs: {
|
|
33
|
-
readonly support: "
|
|
33
|
+
readonly support: "supported";
|
|
34
|
+
readonly native: {
|
|
35
|
+
readonly platforms: readonly ["android", "ios"];
|
|
36
|
+
readonly stability: "alpha";
|
|
37
|
+
};
|
|
38
|
+
readonly javascript: {
|
|
39
|
+
readonly platforms: readonly ["android", "ios", "web"];
|
|
40
|
+
readonly stability: "stable";
|
|
41
|
+
};
|
|
42
|
+
readonly custom: {
|
|
43
|
+
readonly platforms: readonly ["web"];
|
|
44
|
+
readonly stability: "stable";
|
|
45
|
+
readonly presentationOwner: "@ankhorage/surface";
|
|
46
|
+
};
|
|
34
47
|
};
|
|
35
48
|
readonly experimentalStack: {
|
|
36
49
|
readonly support: "unavailable";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metadata/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,0BAA0B
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metadata/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmD7B,CAAC"}
|
package/dist/metadata/index.js
CHANGED
|
@@ -18,7 +18,12 @@ export const NAVIGATOR_PACKAGE_METADATA = {
|
|
|
18
18
|
drawer: { support: 'supported', stability: 'stable', module: 'expo-router/drawer' },
|
|
19
19
|
},
|
|
20
20
|
optionalAdapters: {
|
|
21
|
-
tabs: {
|
|
21
|
+
tabs: {
|
|
22
|
+
support: 'supported',
|
|
23
|
+
native: { platforms: ['android', 'ios'], stability: 'alpha' },
|
|
24
|
+
javascript: { platforms: ['android', 'ios', 'web'], stability: 'stable' },
|
|
25
|
+
custom: { platforms: ['web'], stability: 'stable', presentationOwner: '@ankhorage/surface' },
|
|
26
|
+
},
|
|
22
27
|
experimentalStack: { support: 'unavailable', stability: 'alpha' },
|
|
23
28
|
splitView: { support: 'unavailable', stability: 'alpha' },
|
|
24
29
|
custom: { support: 'unavailable' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,iBAAiB,EACjB,eAAe,GAChB,MAAM,gCAAgC,CAAC;AAExC,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,WAAW,EAAE,sBAAsB;IACnC,gBAAgB,EAAE,WAAW;IAC7B,eAAe,EAAE,gCAAgC;IACjD,cAAc,EAAE,eAAe;IAC/B,OAAO,EAAE,iBAAiB;IAC1B,UAAU,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,gBAAgB,CAAC;IAC7F,YAAY,EAAE;QACZ,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE;QAC1E,WAAW,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE;QACjF,eAAe,EAAE;YACf,OAAO,EAAE,WAAW;YACpB,SAAS,EAAE,QAAQ;YACnB,MAAM,EAAE,sBAAsB;YAC9B,wBAAwB,EAAE,QAAQ;SACnC;QACD,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,oBAAoB,EAAE;KACpF;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,iBAAiB,EACjB,eAAe,GAChB,MAAM,gCAAgC,CAAC;AAExC,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,WAAW,EAAE,sBAAsB;IACnC,gBAAgB,EAAE,WAAW;IAC7B,eAAe,EAAE,gCAAgC;IACjD,cAAc,EAAE,eAAe;IAC/B,OAAO,EAAE,iBAAiB;IAC1B,UAAU,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,gBAAgB,CAAC;IAC7F,YAAY,EAAE;QACZ,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE;QAC1E,WAAW,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE;QACjF,eAAe,EAAE;YACf,OAAO,EAAE,WAAW;YACpB,SAAS,EAAE,QAAQ;YACnB,MAAM,EAAE,sBAAsB;YAC9B,wBAAwB,EAAE,QAAQ;SACnC;QACD,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,oBAAoB,EAAE;KACpF;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE;YACJ,OAAO,EAAE,WAAW;YACpB,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE;YAC7D,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;YACzE,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,oBAAoB,EAAE;SAC7F;QACD,iBAAiB,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE;QACjE,SAAS,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE;QACzD,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;KACnC;IACD,IAAI,EAAE;QACJ,eAAe,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAC/D,mBAAmB,EAAE,yBAAyB;QAC9C,wBAAwB,EAAE,+BAA+B;QACzD,eAAe,EAAE;YACf,OAAO,EAAE,QAAQ;YACjB,GAAG,EAAE,QAAQ;YACb,GAAG,EAAE,QAAQ;YACb,aAAa,EAAE;gBACb,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,SAAS;aACpB;SACF;QACD,UAAU,EAAE;YACV,gBAAgB,EAAE,qBAAqB;YACvC,aAAa,EAAE,yBAAyB;YACxC,MAAM,EAAE,gBAAgB;YACxB,MAAM,EAAE,kCAAkC;YAC1C,eAAe,EAAE,OAAO;SACzB;KACF;CACO,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { RouteDefinition } from '@ankhorage/contracts/navigator';
|
|
2
|
+
import { type NavigationItemIcon } from '@ankhorage/surface';
|
|
3
|
+
import { type ComponentType, type ReactNode } from 'react';
|
|
4
|
+
import type { NavigatorResponsiveSize, ResolvedTabsPresentation } from '../definitions/NavigatorPlan';
|
|
5
|
+
/** One explicit Expo Router tab registration plus optional Surface-owned presentation metadata. */
|
|
6
|
+
export interface CustomTabsRoute {
|
|
7
|
+
name: string;
|
|
8
|
+
href: string;
|
|
9
|
+
label: string;
|
|
10
|
+
icon?: RouteDefinition['icon'];
|
|
11
|
+
badge?: ReactNode;
|
|
12
|
+
visible: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface CustomTabsPresentationProps {
|
|
15
|
+
routes: readonly CustomTabsRoute[];
|
|
16
|
+
renderItem: (route: CustomTabsRoute, compact?: boolean) => ReactNode;
|
|
17
|
+
}
|
|
18
|
+
type IconMediaReference = Extract<NonNullable<RouteDefinition['icon']>, {
|
|
19
|
+
source: unknown;
|
|
20
|
+
}>['source'];
|
|
21
|
+
type ResolvedSvgSource = Extract<NavigationItemIcon, {
|
|
22
|
+
source: unknown;
|
|
23
|
+
}>['source'];
|
|
24
|
+
export type CustomTabsIconSourceResolver = (source: IconMediaReference) => ResolvedSvgSource;
|
|
25
|
+
/**
|
|
26
|
+
* Runtime inputs for the Web custom-tabs adapter. Routes remain mounted in one headless Router
|
|
27
|
+
* topology while Surface selects bottom, top, rail, sidebar, or registered custom chrome.
|
|
28
|
+
*/
|
|
29
|
+
export interface CustomTabsLayoutProps {
|
|
30
|
+
routes: readonly CustomTabsRoute[];
|
|
31
|
+
presentations: Readonly<Record<NavigatorResponsiveSize, ResolvedTabsPresentation>>;
|
|
32
|
+
initialRouteName?: string;
|
|
33
|
+
resolveIconSource?: CustomTabsIconSourceResolver;
|
|
34
|
+
customPresentation?: ComponentType<CustomTabsPresentationProps>;
|
|
35
|
+
}
|
|
36
|
+
/*** Render one stable headless Expo Router tab topology with Surface-owned presentations. */
|
|
37
|
+
export declare function CustomTabsLayout({ routes, presentations, initialRouteName, resolveIconSource, customPresentation: CustomPresentation, }: CustomTabsLayoutProps): import("react").JSX.Element;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=CustomTabsLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomTabsLayout.d.ts","sourceRoot":"","sources":["../../src/tabs/CustomTabsLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAEL,KAAK,kBAAkB,EAIxB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAwB,MAAM,OAAO,CAAC;AAIjF,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,8BAA8B,CAAC;AAEtC,mGAAmG;AACnG,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IACnC,UAAU,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,SAAS,CAAC;CACtE;AAED,KAAK,kBAAkB,GAAG,OAAO,CAC/B,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EACpC;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CACpB,CAAC,QAAQ,CAAC,CAAC;AACZ,KAAK,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;AACpF,MAAM,MAAM,4BAA4B,GAAG,CAAC,MAAM,EAAE,kBAAkB,KAAK,iBAAiB,CAAC;AAE7F;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IACnC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,uBAAuB,EAAE,wBAAwB,CAAC,CAAC,CAAC;IACnF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,4BAA4B,CAAC;IACjD,kBAAkB,CAAC,EAAE,aAAa,CAAC,2BAA2B,CAAC,CAAC;CACjE;AAqKD,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAAE,kBAAkB,GACvC,EAAE,qBAAqB,+BAyCvB"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { NavigationItem, TabBarItem, useBreakpoint, } from '@ankhorage/surface';
|
|
3
|
+
import { TabList, Tabs, TabSlot, TabTrigger, useTabTrigger } from 'expo-router/ui';
|
|
4
|
+
import { useSyncExternalStore } from 'react';
|
|
5
|
+
import { StyleSheet, View } from 'react-native';
|
|
6
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
7
|
+
const ICON_PROVIDERS = new Set([
|
|
8
|
+
'Ionicons',
|
|
9
|
+
'FontAwesome',
|
|
10
|
+
'FontAwesome5',
|
|
11
|
+
'FontAwesome6',
|
|
12
|
+
'MaterialDesignIcons',
|
|
13
|
+
]);
|
|
14
|
+
/*** Convert portable route icon metadata to the Surface navigation icon contract. */
|
|
15
|
+
function resolveIcon(icon, resolveIconSource) {
|
|
16
|
+
if (icon === undefined)
|
|
17
|
+
return undefined;
|
|
18
|
+
if ('source' in icon) {
|
|
19
|
+
return resolveIconSource === undefined || icon.source === undefined
|
|
20
|
+
? undefined
|
|
21
|
+
: { source: resolveIconSource(icon.source) };
|
|
22
|
+
}
|
|
23
|
+
const provider = icon.provider ?? 'Ionicons';
|
|
24
|
+
if (!ICON_PROVIDERS.has(provider))
|
|
25
|
+
return undefined;
|
|
26
|
+
const variant = provider === 'FontAwesome5' || provider === 'FontAwesome6' ? 'regular' : undefined;
|
|
27
|
+
return { name: icon.name, provider, variant };
|
|
28
|
+
}
|
|
29
|
+
/*** Render one Surface navigation control bound to Expo Router's headless tab trigger. */
|
|
30
|
+
function SurfaceTabTrigger({ route, presentation, compact, resolveIconSource, }) {
|
|
31
|
+
const { switchTab, trigger } = useTabTrigger({ name: route.name });
|
|
32
|
+
const item = {
|
|
33
|
+
id: route.name,
|
|
34
|
+
label: route.label,
|
|
35
|
+
active: trigger?.isFocused ?? false,
|
|
36
|
+
onPress: () => switchTab(route.name, {}),
|
|
37
|
+
accessibilityLabel: route.label,
|
|
38
|
+
accessibilityRole: 'tab',
|
|
39
|
+
icon: resolveIcon(route.icon, resolveIconSource),
|
|
40
|
+
badge: route.badge,
|
|
41
|
+
};
|
|
42
|
+
return presentation === 'horizontal' ? (_jsx(TabBarItem, { compact: compact, item: item, testID: "navigator-tabs" })) : (_jsx(NavigationItem, { compact: compact, item: item, testID: "navigator-tabs" }));
|
|
43
|
+
}
|
|
44
|
+
/*** Resolve a hydration-safe semantic size from the Surface breakpoint owner. */
|
|
45
|
+
function useHydrationSafeSize() {
|
|
46
|
+
const breakpoint = useBreakpoint();
|
|
47
|
+
const hydrated = useSyncExternalStore(subscribeToHydration, getClientHydration, getServerHydration);
|
|
48
|
+
if (!hydrated)
|
|
49
|
+
return 'compact';
|
|
50
|
+
if (breakpoint === 'base' || breakpoint === 'sm')
|
|
51
|
+
return 'compact';
|
|
52
|
+
return breakpoint === 'md' ? 'medium' : 'expanded';
|
|
53
|
+
}
|
|
54
|
+
/*** Provide the stable no-op subscription required for the hydration snapshot boundary. */
|
|
55
|
+
function subscribeToHydration() {
|
|
56
|
+
return () => undefined;
|
|
57
|
+
}
|
|
58
|
+
/*** Report that client rendering can consume the live responsive breakpoint. */
|
|
59
|
+
function getClientHydration() {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
/*** Keep server output deterministic at the compact presentation. */
|
|
63
|
+
function getServerHydration() {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
/*** Select one fixed presentation without altering the Router-owned topology. */
|
|
67
|
+
function selectPresentation(presentations, size) {
|
|
68
|
+
switch (size) {
|
|
69
|
+
case 'compact':
|
|
70
|
+
return presentations.compact;
|
|
71
|
+
case 'medium':
|
|
72
|
+
return presentations.medium;
|
|
73
|
+
case 'expanded':
|
|
74
|
+
return presentations.expanded;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/*** Render Surface-owned bottom, top, rail, or sidebar tab chrome. */
|
|
78
|
+
function BuiltInPresentation({ presentation, routes, resolveIconSource, }) {
|
|
79
|
+
const horizontal = presentation === 'bottom' || presentation === 'top';
|
|
80
|
+
const compact = presentation === 'rail';
|
|
81
|
+
const style = horizontal ? styles.horizontalNavigation : styles.verticalNavigation;
|
|
82
|
+
return (_jsx(View, { accessibilityRole: "tablist", style: style, testID: `navigator-tabs-${presentation}`, children: routes.map((route) => (_jsx(SurfaceTabTrigger, { compact: compact, presentation: horizontal ? 'horizontal' : 'vertical', resolveIconSource: resolveIconSource, route: route }, route.name))) }));
|
|
83
|
+
}
|
|
84
|
+
/*** Select built-in or registered custom chrome for the currently visible routes. */
|
|
85
|
+
function TabsNavigation({ CustomPresentation, presentation, resolveIconSource, routes, }) {
|
|
86
|
+
const visibleRoutes = routes.filter((route) => route.visible);
|
|
87
|
+
const renderItem = (route, compact = false) => (_jsx(SurfaceTabTrigger, { compact: compact, presentation: "vertical", resolveIconSource: resolveIconSource, route: route }, route.name));
|
|
88
|
+
if (presentation === 'custom') {
|
|
89
|
+
return CustomPresentation === undefined ? null : (_jsx(CustomPresentation, { renderItem: renderItem, routes: visibleRoutes }));
|
|
90
|
+
}
|
|
91
|
+
return (_jsx(BuiltInPresentation, { presentation: presentation, resolveIconSource: resolveIconSource, routes: visibleRoutes }));
|
|
92
|
+
}
|
|
93
|
+
/*** Render one stable headless Expo Router tab topology with Surface-owned presentations. */
|
|
94
|
+
export function CustomTabsLayout({ routes, presentations, initialRouteName, resolveIconSource, customPresentation: CustomPresentation, }) {
|
|
95
|
+
const size = useHydrationSafeSize();
|
|
96
|
+
const presentation = selectPresentation(presentations, size);
|
|
97
|
+
const insets = useSafeAreaInsets();
|
|
98
|
+
const navigation = (_jsx(TabsNavigation, { CustomPresentation: CustomPresentation, presentation: presentation, resolveIconSource: resolveIconSource, routes: routes }));
|
|
99
|
+
const vertical = presentation === 'rail' || presentation === 'sidebar';
|
|
100
|
+
const navigationFirst = vertical || presentation === 'top' || presentation === 'custom';
|
|
101
|
+
const navigationInsets = presentation === 'top'
|
|
102
|
+
? { paddingTop: insets.top }
|
|
103
|
+
: vertical
|
|
104
|
+
? { paddingLeft: insets.left, paddingRight: insets.right }
|
|
105
|
+
: undefined;
|
|
106
|
+
const layoutStyle = vertical ? styles.row : styles.column;
|
|
107
|
+
const bottomNavigationStyle = StyleSheet.compose(styles.bottomNavigation, {
|
|
108
|
+
paddingBottom: insets.bottom,
|
|
109
|
+
});
|
|
110
|
+
return (_jsxs(Tabs, { options: { initialRouteName }, style: styles.root, children: [_jsxs(View, { style: layoutStyle, children: [navigationFirst ? _jsx(View, { style: navigationInsets, children: navigation }) : null, _jsx(View, { style: styles.screen, children: _jsx(TabSlot, {}) }), !navigationFirst ? _jsx(View, { style: bottomNavigationStyle, children: navigation }) : null] }), _jsx(TabList, { style: styles.hidden, children: routes.map((route) => (_jsx(TabTrigger, { href: route.href, name: route.name }, route.name))) })] }));
|
|
111
|
+
}
|
|
112
|
+
const styles = StyleSheet.create({
|
|
113
|
+
bottomNavigation: {},
|
|
114
|
+
column: { flex: 1, flexDirection: 'column' },
|
|
115
|
+
hidden: { display: 'none' },
|
|
116
|
+
horizontalNavigation: { flexDirection: 'row' },
|
|
117
|
+
root: { flex: 1 },
|
|
118
|
+
row: { flex: 1, flexDirection: 'row' },
|
|
119
|
+
screen: { flex: 1 },
|
|
120
|
+
verticalNavigation: { flexDirection: 'column' },
|
|
121
|
+
});
|
|
122
|
+
//# sourceMappingURL=CustomTabsLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomTabsLayout.js","sourceRoot":"","sources":["../../src/tabs/CustomTabsLayout.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tabs/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,4BAA4B,EAC5B,qBAAqB,EACrB,2BAA2B,EAC3B,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tabs/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ColorValue, ImageSourcePropType } from 'react-native';
|
|
2
|
+
interface NativeVectorIconFamily {
|
|
3
|
+
getImageSource(name: string, size: number, color: ColorValue): Promise<ImageSourcePropType | null>;
|
|
4
|
+
}
|
|
5
|
+
/*** Ionicons-compatible Font Awesome family adapter for Expo Native Tabs. */
|
|
6
|
+
export declare const NativeFontAwesomeFamily: NativeVectorIconFamily;
|
|
7
|
+
/*** Ionicons family adapter for Expo Native Tabs. */
|
|
8
|
+
export declare const NativeIoniconsFamily: NativeVectorIconFamily;
|
|
9
|
+
/*** Material Design Icons family adapter for Expo Native Tabs. */
|
|
10
|
+
export declare const NativeMaterialDesignIconsFamily: NativeVectorIconFamily;
|
|
11
|
+
/*** Regular-style Font Awesome 5 family adapter for Expo Native Tabs. */
|
|
12
|
+
export declare const NativeFontAwesome5Family: NativeVectorIconFamily;
|
|
13
|
+
/*** Regular-style Font Awesome 6 family adapter for Expo Native Tabs. */
|
|
14
|
+
export declare const NativeFontAwesome6Family: NativeVectorIconFamily;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=nativeIconFamilies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nativeIconFamilies.d.ts","sourceRoot":"","sources":["../../src/tabs/nativeIconFamilies.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEpE,UAAU,sBAAsB;IAC9B,cAAc,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;CACxC;AAED,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB,EAA6B,sBAAsB,CAAC;AACxF,qDAAqD;AACrD,eAAO,MAAM,oBAAoB,EAA0B,sBAAsB,CAAC;AAClF,kEAAkE;AAClE,eAAO,MAAM,+BAA+B,EACR,sBAAsB,CAAC;AAE3D,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,EAAE,sBAItC,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,EAAE,sBAQtC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { FontAwesome } from '@react-native-vector-icons/fontawesome/static';
|
|
2
|
+
import { FontAwesome5, } from '@react-native-vector-icons/fontawesome5/static';
|
|
3
|
+
import { FontAwesome6, } from '@react-native-vector-icons/fontawesome6/static';
|
|
4
|
+
import { Ionicons } from '@react-native-vector-icons/ionicons/static';
|
|
5
|
+
import { MaterialDesignIcons } from '@react-native-vector-icons/material-design-icons/static';
|
|
6
|
+
/*** Ionicons-compatible Font Awesome family adapter for Expo Native Tabs. */
|
|
7
|
+
export const NativeFontAwesomeFamily = FontAwesome;
|
|
8
|
+
/*** Ionicons family adapter for Expo Native Tabs. */
|
|
9
|
+
export const NativeIoniconsFamily = Ionicons;
|
|
10
|
+
/*** Material Design Icons family adapter for Expo Native Tabs. */
|
|
11
|
+
export const NativeMaterialDesignIconsFamily = MaterialDesignIcons;
|
|
12
|
+
/*** Regular-style Font Awesome 5 family adapter for Expo Native Tabs. */
|
|
13
|
+
export const NativeFontAwesome5Family = {
|
|
14
|
+
getImageSource(name, size, color) {
|
|
15
|
+
return FontAwesome5.getImageSource('regular', name, size, color);
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
/*** Regular-style Font Awesome 6 family adapter for Expo Native Tabs. */
|
|
19
|
+
export const NativeFontAwesome6Family = {
|
|
20
|
+
getImageSource(name, size, color) {
|
|
21
|
+
return FontAwesome6.getImageSource('regular', name, size, color);
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=nativeIconFamilies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nativeIconFamilies.js","sourceRoot":"","sources":["../../src/tabs/nativeIconFamilies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EACL,YAAY,GAEb,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACL,YAAY,GAEb,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yDAAyD,CAAC;AAW9F,6EAA6E;AAC7E,MAAM,CAAC,MAAM,uBAAuB,GAAG,WAAgD,CAAC;AACxF,qDAAqD;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAA6C,CAAC;AAClF,kEAAkE;AAClE,MAAM,CAAC,MAAM,+BAA+B,GAC1C,mBAAwD,CAAC;AAE3D,yEAAyE;AACzE,MAAM,CAAC,MAAM,wBAAwB,GAA2B;IAC9D,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK;QAC9B,OAAO,YAAY,CAAC,cAAc,CAAC,SAAS,EAAE,IAAmC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAClG,CAAC;CACF,CAAC;AAEF,yEAAyE;AACzE,MAAM,CAAC,MAAM,wBAAwB,GAA2B;IAC9D,cAAc,CACZ,IAAY,EACZ,IAAY,EACZ,KAAiB;QAEjB,OAAO,YAAY,CAAC,cAAc,CAAC,SAAS,EAAE,IAAmC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAClG,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateNavigatorManifest.d.ts","sourceRoot":"","sources":["../../src/validation/validateNavigatorManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,
|
|
1
|
+
{"version":3,"file":"validateNavigatorManifest.d.ts","sourceRoot":"","sources":["../../src/validation/validateNavigatorManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAIrB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAqOpG,qFAAqF;AACrF,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,0BAA0B,GAClC,SAAS,mBAAmB,EAAE,CAmBhC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { parseExpoRouterMajor, resolveEffectiveStackConfig,
|
|
1
|
+
import { parseExpoRouterMajor, resolveEffectiveStackConfig, } from '../expo-router/resolveNavigatorConfig';
|
|
2
2
|
import { validatePresetTopology } from './validatePresetTopology';
|
|
3
|
+
import { addTabsAdapterDiagnostics } from './validateTabsNavigator';
|
|
3
4
|
function addStackAdapterDiagnostics(diagnostics, manifest, node, pointer, context, routerMajor) {
|
|
4
5
|
const config = resolveEffectiveStackConfig(manifest, node, context.platform);
|
|
5
6
|
const implementation = config.implementation ?? 'native';
|
|
@@ -20,41 +21,6 @@ function addStackAdapterDiagnostics(diagnostics, manifest, node, pointer, contex
|
|
|
20
21
|
});
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
|
-
function addTabsAdapterDiagnostics(diagnostics, manifest, node, pointer, context, routerMajor) {
|
|
24
|
-
const config = resolveEffectiveTabsConfig(manifest, node, context.platform);
|
|
25
|
-
const implementation = config?.implementation ?? 'adaptive';
|
|
26
|
-
const native = implementation === 'native' || (implementation === 'adaptive' && context.platform !== 'web');
|
|
27
|
-
if (native && context.platform === 'web') {
|
|
28
|
-
diagnostics.push({
|
|
29
|
-
code: 'unsupported-platform',
|
|
30
|
-
severity: 'error',
|
|
31
|
-
path: pointer,
|
|
32
|
-
message: 'Native Tabs are not available on web.',
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
if (native && routerMajor !== undefined && routerMajor < 54) {
|
|
36
|
-
diagnostics.push({
|
|
37
|
-
code: 'unsupported-expo-router-version',
|
|
38
|
-
severity: 'error',
|
|
39
|
-
path: pointer,
|
|
40
|
-
message: 'Native Tabs require Expo Router 54.0.0 or newer.',
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
if (native) {
|
|
44
|
-
diagnostics.push({
|
|
45
|
-
code: 'alpha-adapter',
|
|
46
|
-
severity: 'warning',
|
|
47
|
-
path: pointer,
|
|
48
|
-
message: 'Native Tabs are an alpha Expo Router API.',
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
diagnostics.push({
|
|
52
|
-
code: 'adapter-unavailable',
|
|
53
|
-
severity: 'error',
|
|
54
|
-
path: pointer,
|
|
55
|
-
message: 'Tabs generation is owned by the optional Tabs adapter and is not available in the core release.',
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
24
|
function addUnsupportedAdapterDiagnostics(diagnostics, manifest, node, pointer, context, routerMajor) {
|
|
59
25
|
if (node.type === 'stack') {
|
|
60
26
|
addStackAdapterDiagnostics(diagnostics, manifest, node, pointer, context, routerMajor);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateNavigatorManifest.js","sourceRoot":"","sources":["../../src/validation/validateNavigatorManifest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validateNavigatorManifest.js","sourceRoot":"","sources":["../../src/validation/validateNavigatorManifest.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,SAAS,0BAA0B,CACjC,WAAkC,EAClC,QAA8B,EAC9B,IAAwB,EACxB,OAAe,EACf,OAAmC,EACnC,WAA+B;IAE/B,MAAM,MAAM,GAAG,2BAA2B,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7E,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,QAAQ,CAAC;IAEzD,IAAI,cAAc,KAAK,YAAY,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC;QACrF,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,iCAAiC;YACvC,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,GAAG,OAAO,iBAAiB;YACjC,OAAO,EAAE,wEAAwE;SAClF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,cAAc,KAAK,cAAc,EAAE,CAAC;QACtC,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,qBAAqB;YAC3B,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,GAAG,OAAO,iBAAiB;YACjC,OAAO,EAAE,oEAAoE;SAC9E,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,gCAAgC,CACvC,WAAkC,EAClC,QAA8B,EAC9B,IAAmB,EACnB,OAAe,EACf,OAAmC,EACnC,WAA+B;IAE/B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,0BAA0B,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,yBAAyB,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACxF,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzD,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,qBAAqB;YAC3B,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,kDAAkD;SAC7H,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,WAAkC,EAClC,IAAmB,EACnB,OAAe;IAEf,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAChE,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,gCAAgC;YACtC,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,GAAG,OAAO,mBAAmB;YACnC,OAAO,EAAE,oFAAoF;SAC9F,CAAC,CAAC;IACL,CAAC;IACD,IACE,IAAI,CAAC,gBAAgB,KAAK,SAAS;QACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,CAAC,EACjE,CAAC;QACD,OAAO;IACT,CAAC;IACD,WAAW,CAAC,IAAI,CAAC;QACf,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,GAAG,OAAO,mBAAmB;QACnC,OAAO,EAAE,iBAAiB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,oCAAoC;KACpG,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CACxB,WAAkC,EAClC,KAAsC,EACtC,YAAoB,EACpB,UAAuB;IAEvB,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,GAAG,YAAY,OAAO;YAC5B,OAAO,EAAE,cAAc,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAmC;SACrF,CAAC,CAAC;IACL,CAAC;IACD,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC7F,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,oBAAoB;YAC1B,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,GAAG,YAAY,OAAO;YAC5B,OAAO,EAAE,qDAAqD;SAC/D,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,WAAkC,EAClC,KAAsC,EACtC,YAAoB;IAEpB,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE,CAAC;QACvE,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,gEAAgE;SAC1E,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,WAAkC,EAClC,IAAmB,EACnB,KAAsC,EACtC,YAAoB;IAEpB,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QACrE,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,uBAAuB;YAC7B,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,GAAG,YAAY,SAAS;YAC9B,OAAO,EAAE,yDAAyD;SACnE,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,wBAAwB;YAC9B,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,GAAG,YAAY,SAAS;YAC9B,OAAO,EAAE,6EAA6E;SACvF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAChC,WAAkC,EAClC,KAAsC,EACtC,YAAoB,EACpB,mBAAoD;IAEpD,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAC/B,IAAI,mBAAmB,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QACpE,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,GAAG,YAAY,eAAe;YACpC,OAAO,EAAE,wEAAwE;SAClF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,YAAY,GAAG,YAAY,EAAE,YAAY,CAAC;IAChD,IACE,mBAAmB,KAAK,YAAY;QACpC,YAAY,KAAK,SAAS;QAC1B,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC7D,CAAC;QACD,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,0BAA0B;YAChC,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,GAAG,YAAY,eAAe;YACpC,OAAO,EAAE,+EAA+E;SACzF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,WAAkC,EAClC,IAAmB,EACnB,KAAsC,EACtC,YAAoB,EACpB,UAAuB,EACvB,mBAAoD;IAEpD,iBAAiB,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAChE,mBAAmB,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IACtD,mBAAmB,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IAC5D,yBAAyB,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,YAAY,CACnB,WAAkC,EAClC,QAA8B,EAC9B,IAAmB,EACnB,OAAe,EACf,OAAmC,EACnC,WAA+B;IAE/B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,mBAAmB,GACvB,IAAI,CAAC,IAAI,KAAK,OAAO;QACnB,CAAC,CAAC,CAAC,2BAA2B,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,cAAc,IAAI,QAAQ,CAAC;QAC5F,CAAC,CAAC,SAAS,CAAC;IAChB,gCAAgC,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC7F,oBAAoB,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAEjD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACnD,MAAM,YAAY,GAAG,GAAG,OAAO,WAAW,KAAK,EAAE,CAAC;QAClD,kBAAkB,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;QAC5F,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAClC,YAAY,CACV,WAAW,EACX,QAAQ,EACR,KAAK,CAAC,SAAS,EACf,GAAG,YAAY,YAAY,EAC3B,OAAO,EACP,WAAW,CACZ,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,yBAAyB,CACvC,QAA8B,EAC9B,OAAmC;IAEnC,MAAM,WAAW,GAA0B,EAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,6BAA6B;YACnC,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,qEAAqE;SAC/E,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC9C,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACxE,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACtC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CACzD,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CACjD,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { AppNavigatorManifest, TabsNavigatorNode } from '@ankhorage/contracts/navigator';
|
|
2
|
+
import type { NavigatorDiagnostic, NavigatorValidationContext } from '../definitions/NavigatorPlan';
|
|
3
|
+
/*** Add tabs-specific semantic diagnostics for one manifest navigator node. */
|
|
4
|
+
export declare function addTabsAdapterDiagnostics(diagnostics: NavigatorDiagnostic[], manifest: AppNavigatorManifest, node: TabsNavigatorNode, pointer: string, validationContext: NavigatorValidationContext, routerMajor: number | undefined): void;
|
|
5
|
+
//# sourceMappingURL=validateTabsNavigator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateTabsNavigator.d.ts","sourceRoot":"","sources":["../../src/validation/validateTabsNavigator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAE9F,OAAO,KAAK,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAsKpG,+EAA+E;AAC/E,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,mBAAmB,EAAE,EAClC,QAAQ,EAAE,oBAAoB,EAC9B,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,0BAA0B,EAC7C,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,IAAI,CAeN"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { resolveEffectiveTabsConfig } from '../expo-router/resolveNavigatorConfig';
|
|
2
|
+
const SURFACE_ICON_PROVIDERS = new Set([
|
|
3
|
+
'Ionicons',
|
|
4
|
+
'FontAwesome',
|
|
5
|
+
'FontAwesome5',
|
|
6
|
+
'FontAwesome6',
|
|
7
|
+
'MaterialDesignIcons',
|
|
8
|
+
]);
|
|
9
|
+
/*** Add platform and stability diagnostics for the resolved tabs implementation. */
|
|
10
|
+
function addTabsPlatformDiagnostics(diagnostics, pointer, context, routerMajor) {
|
|
11
|
+
if (context.native && context.platform === 'web') {
|
|
12
|
+
diagnostics.push({
|
|
13
|
+
code: 'unsupported-platform',
|
|
14
|
+
severity: 'error',
|
|
15
|
+
path: pointer,
|
|
16
|
+
message: 'Native Tabs are not available on web.',
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
if (context.native && routerMajor !== undefined && routerMajor < 54) {
|
|
20
|
+
diagnostics.push({
|
|
21
|
+
code: 'unsupported-expo-router-version',
|
|
22
|
+
severity: 'error',
|
|
23
|
+
path: pointer,
|
|
24
|
+
message: 'Native Tabs require Expo Router 54.0.0 or newer.',
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
if (context.native) {
|
|
28
|
+
diagnostics.push({
|
|
29
|
+
code: 'alpha-adapter',
|
|
30
|
+
severity: 'warning',
|
|
31
|
+
path: pointer,
|
|
32
|
+
message: 'Native Tabs are an alpha Expo Router API.',
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
if (context.custom && context.platform !== 'web') {
|
|
36
|
+
diagnostics.push({
|
|
37
|
+
code: 'unsupported-platform',
|
|
38
|
+
severity: 'error',
|
|
39
|
+
path: pointer,
|
|
40
|
+
message: 'Surface custom Tabs are only available on web.',
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/*** Validate route icon compatibility for native and Surface-backed tabs. */
|
|
45
|
+
function addTabsIconDiagnostics(diagnostics, route, routePointer, context) {
|
|
46
|
+
if (context.native && route.icon !== undefined && 'source' in route.icon) {
|
|
47
|
+
diagnostics.push({
|
|
48
|
+
code: 'unsupported-native-tabs-icon-source',
|
|
49
|
+
severity: 'error',
|
|
50
|
+
path: `${routePointer}/icon/source`,
|
|
51
|
+
message: 'Expo Native Tabs cannot render arbitrary SVG sources; use a named icon or platform-native image asset.',
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
if (route.icon !== undefined &&
|
|
55
|
+
'name' in route.icon &&
|
|
56
|
+
route.icon.provider !== undefined &&
|
|
57
|
+
(context.native || context.custom) &&
|
|
58
|
+
!SURFACE_ICON_PROVIDERS.has(route.icon.provider)) {
|
|
59
|
+
diagnostics.push({
|
|
60
|
+
code: 'unsupported-tabs-icon-provider',
|
|
61
|
+
severity: 'error',
|
|
62
|
+
path: `${routePointer}/icon/provider`,
|
|
63
|
+
message: `Tabs do not support the icon provider ${JSON.stringify(route.icon.provider)}.`,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/*** Validate route reachability, guards, paths, counts, and icons for tabs. */
|
|
68
|
+
function addTabsRouteDiagnostics(diagnostics, node, pointer, context) {
|
|
69
|
+
if (context.native && context.platform === 'android' && node.routes.length > 5) {
|
|
70
|
+
diagnostics.push({
|
|
71
|
+
code: 'native-tabs-route-limit',
|
|
72
|
+
severity: 'error',
|
|
73
|
+
path: `${pointer}/routes`,
|
|
74
|
+
message: 'Android Native Tabs support at most five visible routes.',
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
for (const [index, route] of node.routes.entries()) {
|
|
78
|
+
const routePointer = `${pointer}/routes/${index}`;
|
|
79
|
+
if (context.native && route.showInPrimaryNavigation === false) {
|
|
80
|
+
diagnostics.push({
|
|
81
|
+
code: 'native-tabs-hidden-route',
|
|
82
|
+
severity: 'error',
|
|
83
|
+
path: `${routePointer}/showInPrimaryNavigation`,
|
|
84
|
+
message: 'Hiding a Native Tabs trigger makes the route unreachable; use an owning stack.',
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
if ((context.native || context.custom) && (route.guards ?? []).length > 0) {
|
|
88
|
+
diagnostics.push({
|
|
89
|
+
code: 'unsupported-tabs-guard',
|
|
90
|
+
severity: 'error',
|
|
91
|
+
path: `${routePointer}/guards`,
|
|
92
|
+
message: 'This Tabs implementation cannot register protected Screen entries.',
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (context.custom && route.path === undefined) {
|
|
96
|
+
diagnostics.push({
|
|
97
|
+
code: 'missing-tabs-path',
|
|
98
|
+
severity: 'error',
|
|
99
|
+
path: `${routePointer}/path`,
|
|
100
|
+
message: 'Headless custom Tabs require an explicit route path; Navigator never infers URLs.',
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
addTabsIconDiagnostics(diagnostics, route, routePointer, context);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/*** Gate newer Native Tabs options on the Expo Router version that supports them. */
|
|
107
|
+
function addNativeVersionDiagnostics(diagnostics, config, pointer, native, routerMajor) {
|
|
108
|
+
const nativeConfig = config?.implementation === 'native'
|
|
109
|
+
? config
|
|
110
|
+
: config?.implementation === undefined || config.implementation === 'adaptive'
|
|
111
|
+
? config?.native
|
|
112
|
+
: undefined;
|
|
113
|
+
if (native &&
|
|
114
|
+
routerMajor !== undefined &&
|
|
115
|
+
routerMajor < 55 &&
|
|
116
|
+
(nativeConfig?.minimizeBehavior !== undefined || nativeConfig?.bottomAccessory !== undefined)) {
|
|
117
|
+
diagnostics.push({
|
|
118
|
+
code: 'unsupported-expo-router-version',
|
|
119
|
+
severity: 'error',
|
|
120
|
+
path: pointer,
|
|
121
|
+
message: 'Native Tabs minimize behavior and bottom accessory require Expo Router 55 or newer.',
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/*** Add tabs-specific semantic diagnostics for one manifest navigator node. */
|
|
126
|
+
export function addTabsAdapterDiagnostics(diagnostics, manifest, node, pointer, validationContext, routerMajor) {
|
|
127
|
+
const config = resolveEffectiveTabsConfig(manifest, node, validationContext.platform);
|
|
128
|
+
const implementation = config?.implementation ?? 'adaptive';
|
|
129
|
+
const context = {
|
|
130
|
+
native: implementation === 'native' ||
|
|
131
|
+
(implementation === 'adaptive' && validationContext.platform !== 'web'),
|
|
132
|
+
custom: implementation === 'custom' ||
|
|
133
|
+
(implementation === 'adaptive' && validationContext.platform === 'web'),
|
|
134
|
+
platform: validationContext.platform,
|
|
135
|
+
};
|
|
136
|
+
addTabsPlatformDiagnostics(diagnostics, pointer, context, routerMajor);
|
|
137
|
+
addTabsRouteDiagnostics(diagnostics, node, pointer, context);
|
|
138
|
+
addNativeVersionDiagnostics(diagnostics, config, pointer, context.native, routerMajor);
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=validateTabsNavigator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateTabsNavigator.js","sourceRoot":"","sources":["../../src/validation/validateTabsNavigator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AAEnF,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IACrC,UAAU;IACV,aAAa;IACb,cAAc;IACd,cAAc;IACd,qBAAqB;CACtB,CAAC,CAAC;AAQH,oFAAoF;AACpF,SAAS,0BAA0B,CACjC,WAAkC,EAClC,OAAe,EACf,OAA8B,EAC9B,WAA+B;IAE/B,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QACjD,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,uCAAuC;SACjD,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC;QACpE,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,iCAAiC;YACvC,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,kDAAkD;SAC5D,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,2CAA2C;SACrD,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QACjD,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,gDAAgD;SAC1D,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,SAAS,sBAAsB,CAC7B,WAAkC,EAClC,KAA0C,EAC1C,YAAoB,EACpB,OAA8B;IAE9B,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACzE,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,qCAAqC;YAC3C,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,GAAG,YAAY,cAAc;YACnC,OAAO,EACL,wGAAwG;SAC3G,CAAC,CAAC;IACL,CAAC;IACD,IACE,KAAK,CAAC,IAAI,KAAK,SAAS;QACxB,MAAM,IAAI,KAAK,CAAC,IAAI;QACpB,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS;QACjC,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;QAClC,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAChD,CAAC;QACD,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,gCAAgC;YACtC,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,GAAG,YAAY,gBAAgB;YACrC,OAAO,EAAE,yCAAyC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG;SACzF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,SAAS,uBAAuB,CAC9B,WAAkC,EAClC,IAAuB,EACvB,OAAe,EACf,OAA8B;IAE9B,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/E,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,GAAG,OAAO,SAAS;YACzB,OAAO,EAAE,0DAA0D;SACpE,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACnD,MAAM,YAAY,GAAG,GAAG,OAAO,WAAW,KAAK,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,KAAK,EAAE,CAAC;YAC9D,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,0BAA0B;gBAChC,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,GAAG,YAAY,0BAA0B;gBAC/C,OAAO,EAAE,gFAAgF;aAC1F,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1E,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,wBAAwB;gBAC9B,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,GAAG,YAAY,SAAS;gBAC9B,OAAO,EAAE,oEAAoE;aAC9E,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/C,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,mBAAmB;gBACzB,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,GAAG,YAAY,OAAO;gBAC5B,OAAO,EACL,mFAAmF;aACtF,CAAC,CAAC;QACL,CAAC;QACD,sBAAsB,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,qFAAqF;AACrF,SAAS,2BAA2B,CAClC,WAAkC,EAClC,MAAqD,EACrD,OAAe,EACf,MAAe,EACf,WAA+B;IAE/B,MAAM,YAAY,GAChB,MAAM,EAAE,cAAc,KAAK,QAAQ;QACjC,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,MAAM,EAAE,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,cAAc,KAAK,UAAU;YAC5E,CAAC,CAAC,MAAM,EAAE,MAAM;YAChB,CAAC,CAAC,SAAS,CAAC;IAClB,IACE,MAAM;QACN,WAAW,KAAK,SAAS;QACzB,WAAW,GAAG,EAAE;QAChB,CAAC,YAAY,EAAE,gBAAgB,KAAK,SAAS,IAAI,YAAY,EAAE,eAAe,KAAK,SAAS,CAAC,EAC7F,CAAC;QACD,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,iCAAiC;YACvC,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,OAAO;YACb,OAAO,EACL,qFAAqF;SACxF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,yBAAyB,CACvC,WAAkC,EAClC,QAA8B,EAC9B,IAAuB,EACvB,OAAe,EACf,iBAA6C,EAC7C,WAA+B;IAE/B,MAAM,MAAM,GAAG,0BAA0B,CAAC,QAAQ,EAAE,IAAI,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACtF,MAAM,cAAc,GAAG,MAAM,EAAE,cAAc,IAAI,UAAU,CAAC;IAC5D,MAAM,OAAO,GAA0B;QACrC,MAAM,EACJ,cAAc,KAAK,QAAQ;YAC3B,CAAC,cAAc,KAAK,UAAU,IAAI,iBAAiB,CAAC,QAAQ,KAAK,KAAK,CAAC;QACzE,MAAM,EACJ,cAAc,KAAK,QAAQ;YAC3B,CAAC,cAAc,KAAK,UAAU,IAAI,iBAAiB,CAAC,QAAQ,KAAK,KAAK,CAAC;QACzE,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;KACrC,CAAC;IACF,0BAA0B,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACvE,uBAAuB,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7D,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACzF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ankhorage/navigator",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Standalone manifest-driven navigator capability for Expo Router across React Native and React Native Web.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -43,6 +43,14 @@
|
|
|
43
43
|
"types": "./dist/metadata/index.d.ts",
|
|
44
44
|
"default": "./dist/metadata/index.js"
|
|
45
45
|
},
|
|
46
|
+
"./tabs": {
|
|
47
|
+
"types": "./dist/tabs/index.d.ts",
|
|
48
|
+
"default": "./dist/tabs/index.js"
|
|
49
|
+
},
|
|
50
|
+
"./tabs/native-icons": {
|
|
51
|
+
"types": "./dist/tabs/nativeIconFamilies.d.ts",
|
|
52
|
+
"default": "./dist/tabs/nativeIconFamilies.js"
|
|
53
|
+
},
|
|
46
54
|
"./package.json": "./package.json"
|
|
47
55
|
},
|
|
48
56
|
"publishConfig": {
|
|
@@ -65,11 +73,36 @@
|
|
|
65
73
|
"dependencies": {
|
|
66
74
|
"@ankhorage/contracts": "^11.0.0"
|
|
67
75
|
},
|
|
76
|
+
"peerDependencies": {
|
|
77
|
+
"@ankhorage/surface": "^3.4.1",
|
|
78
|
+
"@react-native-vector-icons/fontawesome": "^13.1.3",
|
|
79
|
+
"@react-native-vector-icons/fontawesome5": "^13.1.3",
|
|
80
|
+
"@react-native-vector-icons/fontawesome6": "^13.1.3",
|
|
81
|
+
"@react-native-vector-icons/ionicons": "^13.1.3",
|
|
82
|
+
"@react-native-vector-icons/material-design-icons": "^13.1.3",
|
|
83
|
+
"expo-router": ">=57.0.0 <58.0.0",
|
|
84
|
+
"react": "19.2.3",
|
|
85
|
+
"react-native": "0.86.x",
|
|
86
|
+
"react-native-safe-area-context": ">=5.6.0 <6.0.0",
|
|
87
|
+
"react-native-web": "~0.21.0"
|
|
88
|
+
},
|
|
68
89
|
"devDependencies": {
|
|
90
|
+
"@ankhorage/surface": "^3.4.1",
|
|
69
91
|
"@ankhorage/devtools": "^1.11.0",
|
|
70
92
|
"@ankhorage/paradox": "^0.1.24",
|
|
93
|
+
"@react-native-vector-icons/fontawesome": "^13.1.3",
|
|
94
|
+
"@react-native-vector-icons/fontawesome5": "^13.1.3",
|
|
95
|
+
"@react-native-vector-icons/fontawesome6": "^13.1.3",
|
|
96
|
+
"@react-native-vector-icons/ionicons": "^13.1.3",
|
|
97
|
+
"@react-native-vector-icons/material-design-icons": "^13.1.3",
|
|
71
98
|
"@types/bun": "^1.4.1",
|
|
72
99
|
"@types/node": "^24.13.3",
|
|
100
|
+
"@types/react": "^19.2.18",
|
|
101
|
+
"expo-router": "57.0.18",
|
|
102
|
+
"react": "19.2.3",
|
|
103
|
+
"react-native": "0.86.3",
|
|
104
|
+
"react-native-safe-area-context": "~5.7.0",
|
|
105
|
+
"react-native-web": "~0.21.0",
|
|
73
106
|
"typescript": "~6.0.3"
|
|
74
107
|
},
|
|
75
108
|
"packageManager": "bun@1.4.1"
|