expo-router 6.0.0-beta.5 → 6.0.0-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/build/native-tabs/NativeBottomTabs/NativeTabTrigger.d.ts +7 -2
  2. package/build/native-tabs/NativeBottomTabs/NativeTabTrigger.d.ts.map +1 -1
  3. package/build/native-tabs/NativeBottomTabs/NativeTabTrigger.js +123 -50
  4. package/build/native-tabs/NativeBottomTabs/NativeTabTrigger.js.map +1 -1
  5. package/build/native-tabs/NativeBottomTabs/NativeTabs.d.ts +3 -2
  6. package/build/native-tabs/NativeBottomTabs/NativeTabs.d.ts.map +1 -1
  7. package/build/native-tabs/NativeBottomTabs/NativeTabsTriggerTabBar.d.ts +24 -0
  8. package/build/native-tabs/NativeBottomTabs/NativeTabsTriggerTabBar.d.ts.map +1 -0
  9. package/build/native-tabs/NativeBottomTabs/NativeTabsTriggerTabBar.js +28 -0
  10. package/build/native-tabs/NativeBottomTabs/NativeTabsTriggerTabBar.js.map +1 -0
  11. package/build/native-tabs/NativeBottomTabs/NativeTabsView.d.ts.map +1 -1
  12. package/build/native-tabs/NativeBottomTabs/NativeTabsView.js +78 -18
  13. package/build/native-tabs/NativeBottomTabs/NativeTabsView.js.map +1 -1
  14. package/build/native-tabs/NativeBottomTabs/NativeTabsView.web.d.ts.map +1 -1
  15. package/build/native-tabs/NativeBottomTabs/NativeTabsView.web.js +57 -27
  16. package/build/native-tabs/NativeBottomTabs/NativeTabsView.web.js.map +1 -1
  17. package/build/native-tabs/NativeBottomTabs/appearance.d.ts +20 -0
  18. package/build/native-tabs/NativeBottomTabs/appearance.d.ts.map +1 -0
  19. package/build/native-tabs/NativeBottomTabs/appearance.js +131 -0
  20. package/build/native-tabs/NativeBottomTabs/appearance.js.map +1 -0
  21. package/build/native-tabs/NativeBottomTabs/types.d.ts +238 -77
  22. package/build/native-tabs/NativeBottomTabs/types.d.ts.map +1 -1
  23. package/build/native-tabs/NativeBottomTabs/types.js +14 -0
  24. package/build/native-tabs/NativeBottomTabs/types.js.map +1 -1
  25. package/build/native-tabs/NativeBottomTabs/utils.d.ts +2 -1
  26. package/build/native-tabs/NativeBottomTabs/utils.d.ts.map +1 -1
  27. package/build/native-tabs/NativeBottomTabs/utils.js +7 -0
  28. package/build/native-tabs/NativeBottomTabs/utils.js.map +1 -1
  29. package/build/native-tabs/common/elements.d.ts +41 -21
  30. package/build/native-tabs/common/elements.d.ts.map +1 -1
  31. package/build/native-tabs/common/elements.js.map +1 -1
  32. package/build/native-tabs/index.d.ts +2 -1
  33. package/build/native-tabs/index.d.ts.map +1 -1
  34. package/build/native-tabs/index.js +3 -1
  35. package/build/native-tabs/index.js.map +1 -1
  36. package/ios/ExpoHead.podspec +2 -0
  37. package/package.json +5 -5
  38. package/plugin/tsconfig.tsbuildinfo +0 -1
@@ -47,6 +47,7 @@ function NativeTabsView(props) {
47
47
  const { routes } = state;
48
48
  const defaultTabName = (0, react_1.useMemo)(() => state.routes[focusedIndex]?.name ?? state.routes[0].name, []);
49
49
  const value = state.routes[focusedIndex]?.name ?? state.routes[0].name;
50
+ const currentTabKey = state.routes[focusedIndex]?.key ?? state.routes[0].key;
50
51
  const items = routes
51
52
  .filter(({ key }) => (0, utils_1.shouldTabBeVisible)(descriptors[key].options))
52
53
  .map((route) => (<TabItem key={route.key} route={route} title={descriptors[route.key].options.title ?? route.name} badgeValue={descriptors[route.key].options.badgeValue}/>));
@@ -65,7 +66,7 @@ function NativeTabsView(props) {
65
66
  name: value,
66
67
  },
67
68
  });
68
- }} style={convertNativeTabsPropsToStyleVars(props.style)}>
69
+ }} style={convertNativeTabsPropsToStyleVars(props, descriptors[currentTabKey]?.options)}>
69
70
  <react_tabs_1.TabsList aria-label="Main" className={native_tabs_module_css_1.default.navigationMenuRoot}>
70
71
  {items}
71
72
  </react_tabs_1.TabsList>
@@ -82,46 +83,75 @@ function TabItem(props) {
82
83
  </div>)}
83
84
  </react_tabs_1.TabsTrigger>);
84
85
  }
85
- function convertNativeTabsPropsToStyleVars(style) {
86
+ function convertNativeTabsPropsToStyleVars(props, currentTabOptions) {
86
87
  const vars = {};
87
- if (!style) {
88
+ if (!props) {
88
89
  return vars;
89
90
  }
90
- if (style.fontFamily) {
91
- vars['--expo-router-tabs-font-family'] = String(style.fontFamily);
91
+ const { labelStyle } = props;
92
+ const optionsLabelStyle = currentTabOptions?.labelStyle;
93
+ if (optionsLabelStyle?.fontFamily) {
94
+ vars['--expo-router-tabs-font-family'] = String(optionsLabelStyle.fontFamily);
92
95
  }
93
- if (style.fontSize) {
94
- vars['--expo-router-tabs-font-size'] = String(style.fontSize);
96
+ else if (labelStyle?.fontFamily) {
97
+ vars['--expo-router-tabs-font-family'] = String(labelStyle.fontFamily);
95
98
  }
96
- if (style.fontWeight) {
97
- vars['--expo-router-tabs-font-weight'] = String(style.fontWeight);
99
+ if (optionsLabelStyle?.fontSize) {
100
+ vars['--expo-router-tabs-font-size'] = String(optionsLabelStyle.fontSize);
98
101
  }
99
- if (style.fontStyle) {
100
- vars['--expo-router-tabs-font-style'] = String(style.fontStyle);
102
+ else if (labelStyle?.fontSize) {
103
+ vars['--expo-router-tabs-font-size'] = String(labelStyle.fontSize);
101
104
  }
102
- if (style.color) {
103
- vars['--expo-router-tabs-text-color'] = String(style.color);
105
+ if (optionsLabelStyle?.fontWeight) {
106
+ vars['--expo-router-tabs-font-weight'] = String(optionsLabelStyle.fontWeight);
104
107
  }
105
- if (style['&:active']?.color) {
106
- vars['--expo-router-tabs-active-text-color'] = String(style['&:active'].color);
108
+ else if (labelStyle?.fontWeight) {
109
+ vars['--expo-router-tabs-font-weight'] = String(labelStyle.fontWeight);
107
110
  }
108
- else if (style.tintColor) {
109
- vars['--expo-router-tabs-active-text-color'] = String(style.tintColor);
111
+ if (optionsLabelStyle?.fontStyle) {
112
+ vars['--expo-router-tabs-font-style'] = String(optionsLabelStyle.fontStyle);
110
113
  }
111
- if (style['&:active']?.fontSize) {
112
- vars['--expo-router-tabs-active-font-size'] = String(style['&:active'].fontSize);
114
+ else if (labelStyle?.fontStyle) {
115
+ vars['--expo-router-tabs-font-style'] = String(labelStyle.fontStyle);
113
116
  }
114
- if (style['&:active']?.indicatorColor) {
115
- vars['--expo-router-tabs-active-background-color'] = String(style['&:active'].indicatorColor);
117
+ if (optionsLabelStyle?.color) {
118
+ vars['--expo-router-tabs-text-color'] = String(optionsLabelStyle.color);
116
119
  }
117
- if (style.backgroundColor) {
118
- vars['--expo-router-tabs-background-color'] = String(style.backgroundColor);
120
+ else if (labelStyle?.color) {
121
+ vars['--expo-router-tabs-text-color'] = String(labelStyle.color);
119
122
  }
120
- if (style.badgeBackgroundColor) {
121
- vars['--expo-router-tabs-badge-background-color'] = String(style.badgeBackgroundColor);
123
+ if (currentTabOptions?.selectedLabelStyle?.color) {
124
+ vars['--expo-router-tabs-active-text-color'] = String(currentTabOptions.selectedLabelStyle.color);
122
125
  }
123
- if (style.badgeTextColor) {
124
- vars['--expo-router-tabs-badge-text-color'] = String(style.badgeTextColor);
126
+ else if (props.tintColor) {
127
+ vars['--expo-router-tabs-active-text-color'] = String(props.tintColor);
128
+ }
129
+ if (currentTabOptions?.selectedLabelStyle?.fontSize) {
130
+ vars['--expo-router-tabs-active-font-size'] = String(currentTabOptions.selectedLabelStyle.fontSize);
131
+ }
132
+ if (currentTabOptions?.indicatorColor) {
133
+ vars['--expo-router-tabs-active-background-color'] = String(currentTabOptions.indicatorColor);
134
+ }
135
+ else if (props.indicatorColor) {
136
+ vars['--expo-router-tabs-active-background-color'] = String(props.indicatorColor);
137
+ }
138
+ if (currentTabOptions?.backgroundColor) {
139
+ vars['--expo-router-tabs-background-color'] = String(currentTabOptions.backgroundColor);
140
+ }
141
+ else if (props.backgroundColor) {
142
+ vars['--expo-router-tabs-background-color'] = String(props.backgroundColor);
143
+ }
144
+ if (currentTabOptions?.badgeBackgroundColor) {
145
+ vars['--expo-router-tabs-badge-background-color'] = String(currentTabOptions.badgeBackgroundColor);
146
+ }
147
+ else if (props.badgeBackgroundColor) {
148
+ vars['--expo-router-tabs-badge-background-color'] = String(props.badgeBackgroundColor);
149
+ }
150
+ if (currentTabOptions?.badgeTextColor) {
151
+ vars['--expo-router-tabs-badge-text-color'] = String(currentTabOptions.badgeTextColor);
152
+ }
153
+ else if (props.badgeTextColor) {
154
+ vars['--expo-router-tabs-badge-text-color'] = String(props.badgeTextColor);
125
155
  }
126
156
  return vars;
127
157
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NativeTabsView.web.js","sourceRoot":"","sources":["../../../src/native-tabs/NativeBottomTabs/NativeTabsView.web.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Tabs, TabsContent, TabsList, TabsTrigger } from '@radix-ui/react-tabs';\nimport React, { useMemo } from 'react';\n\nimport type { NativeTabsViewProps } from './types';\nimport { shouldTabBeVisible } from './utils';\nimport nativeTabsStyles from '../../../assets/native-tabs.module.css';\n\nexport function NativeTabsView(props: NativeTabsViewProps) {\n const { builder, focusedIndex } = props;\n const { state, descriptors, navigation } = builder;\n const { routes } = state;\n const defaultTabName = useMemo(\n () => state.routes[focusedIndex]?.name ?? state.routes[0].name,\n []\n );\n const value = state.routes[focusedIndex]?.name ?? state.routes[0].name;\n\n const items = routes\n .filter(({ key }) => shouldTabBeVisible(descriptors[key].options))\n .map((route) => (\n <TabItem\n key={route.key}\n route={route}\n title={descriptors[route.key].options.title ?? route.name}\n badgeValue={descriptors[route.key].options.badgeValue}\n />\n ));\n const children = routes\n .filter(({ key }) => shouldTabBeVisible(descriptors[key].options))\n .map((route) => {\n return (\n <TabsContent\n key={route.name}\n value={route.name}\n className={nativeTabsStyles.tabContent}\n forceMount>\n {descriptors[route.key].render()}\n </TabsContent>\n );\n });\n\n return (\n <Tabs\n className={nativeTabsStyles.nativeTabsContainer}\n defaultValue={defaultTabName}\n value={value}\n onValueChange={(value) => {\n navigation.dispatch({\n type: 'JUMP_TO',\n target: state.key,\n payload: {\n name: value,\n },\n });\n }}\n style={convertNativeTabsPropsToStyleVars(props.style)}>\n <TabsList aria-label=\"Main\" className={nativeTabsStyles.navigationMenuRoot}>\n {items}\n </TabsList>\n {children}\n </Tabs>\n );\n}\n\ninterface TabItemProps {\n title: string;\n badgeValue?: string;\n route: { name: string };\n}\n\nfunction TabItem(props: TabItemProps) {\n const { title, badgeValue, route } = props;\n const isBadgeEmpty = badgeValue === ' ';\n\n return (\n <TabsTrigger value={route.name} className={nativeTabsStyles.navigationMenuTrigger}>\n <span className={nativeTabsStyles.tabText}>{title}</span>\n {badgeValue && (\n <div\n className={`${nativeTabsStyles.tabBadge} ${isBadgeEmpty ? nativeTabsStyles.emptyTabBadge : ''}`}>\n {badgeValue}\n </div>\n )}\n </TabsTrigger>\n );\n}\n\nfunction convertNativeTabsPropsToStyleVars(\n style: NativeTabsViewProps['style'] | undefined\n): Record<string, string | undefined> {\n const vars: Record<`--expo-router-tabs-${string}`, string | undefined> = {};\n if (!style) {\n return vars;\n }\n if (style.fontFamily) {\n vars['--expo-router-tabs-font-family'] = String(style.fontFamily);\n }\n if (style.fontSize) {\n vars['--expo-router-tabs-font-size'] = String(style.fontSize);\n }\n if (style.fontWeight) {\n vars['--expo-router-tabs-font-weight'] = String(style.fontWeight);\n }\n if (style.fontStyle) {\n vars['--expo-router-tabs-font-style'] = String(style.fontStyle);\n }\n if (style.color) {\n vars['--expo-router-tabs-text-color'] = String(style.color);\n }\n if (style['&:active']?.color) {\n vars['--expo-router-tabs-active-text-color'] = String(style['&:active'].color);\n } else if (style.tintColor) {\n vars['--expo-router-tabs-active-text-color'] = String(style.tintColor);\n }\n if (style['&:active']?.fontSize) {\n vars['--expo-router-tabs-active-font-size'] = String(style['&:active'].fontSize);\n }\n if (style['&:active']?.indicatorColor) {\n vars['--expo-router-tabs-active-background-color'] = String(style['&:active'].indicatorColor);\n }\n if (style.backgroundColor) {\n vars['--expo-router-tabs-background-color'] = String(style.backgroundColor);\n }\n if (style.badgeBackgroundColor) {\n vars['--expo-router-tabs-badge-background-color'] = String(style.badgeBackgroundColor);\n }\n if (style.badgeTextColor) {\n vars['--expo-router-tabs-badge-text-color'] = String(style.badgeTextColor);\n }\n return vars;\n}\n"]}
1
+ {"version":3,"file":"NativeTabsView.web.js","sourceRoot":"","sources":["../../../src/native-tabs/NativeBottomTabs/NativeTabsView.web.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Tabs, TabsContent, TabsList, TabsTrigger } from '@radix-ui/react-tabs';\nimport React, { useMemo } from 'react';\n\nimport type { NativeTabOptions, NativeTabsViewProps } from './types';\nimport { shouldTabBeVisible } from './utils';\nimport nativeTabsStyles from '../../../assets/native-tabs.module.css';\n\nexport function NativeTabsView(props: NativeTabsViewProps) {\n const { builder, focusedIndex } = props;\n const { state, descriptors, navigation } = builder;\n const { routes } = state;\n const defaultTabName = useMemo(\n () => state.routes[focusedIndex]?.name ?? state.routes[0].name,\n []\n );\n const value = state.routes[focusedIndex]?.name ?? state.routes[0].name;\n const currentTabKey = state.routes[focusedIndex]?.key ?? state.routes[0].key;\n\n const items = routes\n .filter(({ key }) => shouldTabBeVisible(descriptors[key].options))\n .map((route) => (\n <TabItem\n key={route.key}\n route={route}\n title={descriptors[route.key].options.title ?? route.name}\n badgeValue={descriptors[route.key].options.badgeValue}\n />\n ));\n const children = routes\n .filter(({ key }) => shouldTabBeVisible(descriptors[key].options))\n .map((route) => {\n return (\n <TabsContent\n key={route.name}\n value={route.name}\n className={nativeTabsStyles.tabContent}\n forceMount>\n {descriptors[route.key].render()}\n </TabsContent>\n );\n });\n\n return (\n <Tabs\n className={nativeTabsStyles.nativeTabsContainer}\n defaultValue={defaultTabName}\n value={value}\n onValueChange={(value) => {\n navigation.dispatch({\n type: 'JUMP_TO',\n target: state.key,\n payload: {\n name: value,\n },\n });\n }}\n style={convertNativeTabsPropsToStyleVars(props, descriptors[currentTabKey]?.options)}>\n <TabsList aria-label=\"Main\" className={nativeTabsStyles.navigationMenuRoot}>\n {items}\n </TabsList>\n {children}\n </Tabs>\n );\n}\n\ninterface TabItemProps {\n title: string;\n badgeValue?: string;\n route: { name: string };\n}\n\nfunction TabItem(props: TabItemProps) {\n const { title, badgeValue, route } = props;\n const isBadgeEmpty = badgeValue === ' ';\n\n return (\n <TabsTrigger value={route.name} className={nativeTabsStyles.navigationMenuTrigger}>\n <span className={nativeTabsStyles.tabText}>{title}</span>\n {badgeValue && (\n <div\n className={`${nativeTabsStyles.tabBadge} ${isBadgeEmpty ? nativeTabsStyles.emptyTabBadge : ''}`}>\n {badgeValue}\n </div>\n )}\n </TabsTrigger>\n );\n}\n\nfunction convertNativeTabsPropsToStyleVars(\n props: NativeTabsViewProps | undefined,\n currentTabOptions: NativeTabOptions | undefined\n): Record<string, string | undefined> {\n const vars: Record<`--expo-router-tabs-${string}`, string | undefined> = {};\n if (!props) {\n return vars;\n }\n const { labelStyle } = props;\n const optionsLabelStyle = currentTabOptions?.labelStyle;\n if (optionsLabelStyle?.fontFamily) {\n vars['--expo-router-tabs-font-family'] = String(optionsLabelStyle.fontFamily);\n } else if (labelStyle?.fontFamily) {\n vars['--expo-router-tabs-font-family'] = String(labelStyle.fontFamily);\n }\n if (optionsLabelStyle?.fontSize) {\n vars['--expo-router-tabs-font-size'] = String(optionsLabelStyle.fontSize);\n } else if (labelStyle?.fontSize) {\n vars['--expo-router-tabs-font-size'] = String(labelStyle.fontSize);\n }\n if (optionsLabelStyle?.fontWeight) {\n vars['--expo-router-tabs-font-weight'] = String(optionsLabelStyle.fontWeight);\n } else if (labelStyle?.fontWeight) {\n vars['--expo-router-tabs-font-weight'] = String(labelStyle.fontWeight);\n }\n if (optionsLabelStyle?.fontStyle) {\n vars['--expo-router-tabs-font-style'] = String(optionsLabelStyle.fontStyle);\n } else if (labelStyle?.fontStyle) {\n vars['--expo-router-tabs-font-style'] = String(labelStyle.fontStyle);\n }\n if (optionsLabelStyle?.color) {\n vars['--expo-router-tabs-text-color'] = String(optionsLabelStyle.color);\n } else if (labelStyle?.color) {\n vars['--expo-router-tabs-text-color'] = String(labelStyle.color);\n }\n if (currentTabOptions?.selectedLabelStyle?.color) {\n vars['--expo-router-tabs-active-text-color'] = String(\n currentTabOptions.selectedLabelStyle.color\n );\n } else if (props.tintColor) {\n vars['--expo-router-tabs-active-text-color'] = String(props.tintColor);\n }\n if (currentTabOptions?.selectedLabelStyle?.fontSize) {\n vars['--expo-router-tabs-active-font-size'] = String(\n currentTabOptions.selectedLabelStyle.fontSize\n );\n }\n if (currentTabOptions?.indicatorColor) {\n vars['--expo-router-tabs-active-background-color'] = String(currentTabOptions.indicatorColor);\n } else if (props.indicatorColor) {\n vars['--expo-router-tabs-active-background-color'] = String(props.indicatorColor);\n }\n if (currentTabOptions?.backgroundColor) {\n vars['--expo-router-tabs-background-color'] = String(currentTabOptions.backgroundColor);\n } else if (props.backgroundColor) {\n vars['--expo-router-tabs-background-color'] = String(props.backgroundColor);\n }\n if (currentTabOptions?.badgeBackgroundColor) {\n vars['--expo-router-tabs-badge-background-color'] = String(\n currentTabOptions.badgeBackgroundColor\n );\n } else if (props.badgeBackgroundColor) {\n vars['--expo-router-tabs-badge-background-color'] = String(props.badgeBackgroundColor);\n }\n if (currentTabOptions?.badgeTextColor) {\n vars['--expo-router-tabs-badge-text-color'] = String(currentTabOptions.badgeTextColor);\n } else if (props.badgeTextColor) {\n vars['--expo-router-tabs-badge-text-color'] = String(props.badgeTextColor);\n }\n return vars;\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import type { ColorValue } from 'react-native';
2
+ import type { BottomTabsScreenAppearance, BottomTabsScreenItemStateAppearance } from 'react-native-screens';
3
+ import { type NativeTabOptions, type NativeTabsBlurEffect, type NativeTabsLabelStyle } from './types';
4
+ export declare function createStandardAppearanceFromOptions(options: NativeTabOptions, baseStandardAppearance: BottomTabsScreenAppearance): BottomTabsScreenAppearance;
5
+ export declare function createScrollEdgeAppearanceFromOptions(options: NativeTabOptions, baseScrollEdgeAppearance: BottomTabsScreenAppearance): BottomTabsScreenAppearance;
6
+ export interface AppearanceStyle extends NativeTabsLabelStyle {
7
+ iconColor?: ColorValue;
8
+ backgroundColor?: ColorValue | null;
9
+ blurEffect?: NativeTabsBlurEffect;
10
+ badgeBackgroundColor?: ColorValue;
11
+ titlePositionAdjustment?: {
12
+ horizontal?: number;
13
+ vertical?: number;
14
+ };
15
+ }
16
+ export declare function appendSelectedStyleToAppearance(selectedStyle: AppearanceStyle, appearance: BottomTabsScreenAppearance): BottomTabsScreenAppearance;
17
+ export declare function appendStyleToAppearance(style: AppearanceStyle, appearance: BottomTabsScreenAppearance, states: ('selected' | 'focused' | 'disabled' | 'normal')[]): BottomTabsScreenAppearance;
18
+ export declare function convertStyleToAppearance(style: AppearanceStyle | undefined): BottomTabsScreenAppearance;
19
+ export declare function convertStyleToItemStateAppearance(style: AppearanceStyle | undefined): BottomTabsScreenItemStateAppearance;
20
+ //# sourceMappingURL=appearance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appearance.d.ts","sourceRoot":"","sources":["../../../src/native-tabs/NativeBottomTabs/appearance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EACV,0BAA0B,EAE1B,mCAAmC,EACpC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAC1B,MAAM,SAAS,CAAC;AAEjB,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,gBAAgB,EACzB,sBAAsB,EAAE,0BAA0B,GACjD,0BAA0B,CAsB5B;AAED,wBAAgB,qCAAqC,CACnD,OAAO,EAAE,gBAAgB,EACzB,wBAAwB,EAAE,0BAA0B,GACnD,0BAA0B,CAsB5B;AAED,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;IAC3D,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,eAAe,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,oBAAoB,CAAC,EAAE,UAAU,CAAC;IAClC,uBAAuB,CAAC,EAAE;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,wBAAgB,+BAA+B,CAC7C,aAAa,EAAE,eAAe,EAC9B,UAAU,EAAE,0BAA0B,GACrC,0BAA0B,CAE5B;AASD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,0BAA0B,EACtC,MAAM,EAAE,CAAC,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC,EAAE,GACzD,0BAA0B,CAoC5B;AAID,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,eAAe,GAAG,SAAS,GACjC,0BAA0B,CA2B5B;AAED,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,eAAe,GAAG,SAAS,GACjC,mCAAmC,CAyBrC"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createStandardAppearanceFromOptions = createStandardAppearanceFromOptions;
4
+ exports.createScrollEdgeAppearanceFromOptions = createScrollEdgeAppearanceFromOptions;
5
+ exports.appendSelectedStyleToAppearance = appendSelectedStyleToAppearance;
6
+ exports.appendStyleToAppearance = appendStyleToAppearance;
7
+ exports.convertStyleToAppearance = convertStyleToAppearance;
8
+ exports.convertStyleToItemStateAppearance = convertStyleToItemStateAppearance;
9
+ const types_1 = require("./types");
10
+ function createStandardAppearanceFromOptions(options, baseStandardAppearance) {
11
+ const appearance = appendStyleToAppearance({
12
+ ...options.labelStyle,
13
+ iconColor: options.iconColor,
14
+ backgroundColor: options.backgroundColor,
15
+ blurEffect: options.blurEffect,
16
+ badgeBackgroundColor: options.badgeBackgroundColor,
17
+ titlePositionAdjustment: options.titlePositionAdjustment,
18
+ }, baseStandardAppearance, ['normal', 'focused', 'selected']);
19
+ return appendSelectedStyleToAppearance({
20
+ ...(options.selectedLabelStyle ?? {}),
21
+ iconColor: options.selectedIconColor,
22
+ badgeBackgroundColor: options.selectedBadgeBackgroundColor,
23
+ titlePositionAdjustment: options.selectedTitlePositionAdjustment,
24
+ }, appearance);
25
+ }
26
+ function createScrollEdgeAppearanceFromOptions(options, baseScrollEdgeAppearance) {
27
+ const appearance = appendStyleToAppearance({
28
+ ...options.labelStyle,
29
+ iconColor: options.iconColor,
30
+ blurEffect: options.disableTransparentOnScrollEdge ? options.blurEffect : 'none',
31
+ backgroundColor: options.disableTransparentOnScrollEdge ? options.backgroundColor : null,
32
+ badgeBackgroundColor: options.badgeBackgroundColor,
33
+ titlePositionAdjustment: options.titlePositionAdjustment,
34
+ }, baseScrollEdgeAppearance, ['normal', 'focused', 'selected']);
35
+ return appendSelectedStyleToAppearance({
36
+ ...(options.selectedLabelStyle ?? {}),
37
+ iconColor: options.selectedIconColor,
38
+ badgeBackgroundColor: options.selectedBadgeBackgroundColor,
39
+ titlePositionAdjustment: options.selectedTitlePositionAdjustment,
40
+ }, appearance);
41
+ }
42
+ function appendSelectedStyleToAppearance(selectedStyle, appearance) {
43
+ return appendStyleToAppearance(selectedStyle, appearance, ['selected', 'focused']);
44
+ }
45
+ const EMPTY_APPEARANCE_ITEM = {
46
+ normal: {},
47
+ selected: {},
48
+ focused: {},
49
+ disabled: {},
50
+ };
51
+ function appendStyleToAppearance(style, appearance, states) {
52
+ let tabBarBlurEffect = style?.blurEffect;
53
+ if (tabBarBlurEffect && !supportedBlurEffectsSet.has(tabBarBlurEffect)) {
54
+ console.warn(`Unsupported blurEffect: ${tabBarBlurEffect}. Supported values are: ${types_1.SUPPORTED_BLUR_EFFECTS.map((effect) => `"${effect}"`).join(', ')}`);
55
+ tabBarBlurEffect = undefined;
56
+ }
57
+ const baseItemAppearance = appearance.stacked || appearance.inline || appearance.compactInline || {};
58
+ const styleAppearance = convertStyleToAppearance(style);
59
+ const newAppearances = states.map((state) => ({
60
+ key: state,
61
+ appearance: {
62
+ ...baseItemAppearance.normal,
63
+ ...baseItemAppearance[state],
64
+ ...styleAppearance.stacked?.normal,
65
+ },
66
+ }));
67
+ const itemAppearance = {
68
+ ...EMPTY_APPEARANCE_ITEM,
69
+ ...baseItemAppearance,
70
+ ...Object.fromEntries(newAppearances.map(({ key, appearance }) => [key, appearance])),
71
+ };
72
+ return {
73
+ stacked: itemAppearance,
74
+ inline: itemAppearance,
75
+ compactInline: itemAppearance,
76
+ tabBarBackgroundColor: style.backgroundColor === null
77
+ ? undefined
78
+ : (style.backgroundColor ?? appearance.tabBarBackgroundColor),
79
+ tabBarBlurEffect: tabBarBlurEffect ?? appearance.tabBarBlurEffect,
80
+ };
81
+ }
82
+ const supportedBlurEffectsSet = new Set(types_1.SUPPORTED_BLUR_EFFECTS);
83
+ function convertStyleToAppearance(style) {
84
+ if (!style) {
85
+ return {};
86
+ }
87
+ let blurEffect = style.blurEffect;
88
+ if (style.blurEffect && !supportedBlurEffectsSet.has(style.blurEffect)) {
89
+ console.warn(`Unsupported blurEffect: ${style.blurEffect}. Supported values are: ${types_1.SUPPORTED_BLUR_EFFECTS.map((effect) => `"${effect}"`).join(', ')}`);
90
+ blurEffect = undefined;
91
+ }
92
+ const stateAppearance = convertStyleToItemStateAppearance(style);
93
+ const itemAppearance = {
94
+ normal: stateAppearance,
95
+ selected: stateAppearance,
96
+ focused: stateAppearance,
97
+ disabled: {},
98
+ };
99
+ return {
100
+ inline: itemAppearance,
101
+ stacked: itemAppearance,
102
+ compactInline: itemAppearance,
103
+ tabBarBackgroundColor: style?.backgroundColor ?? undefined,
104
+ tabBarBlurEffect: blurEffect,
105
+ };
106
+ }
107
+ function convertStyleToItemStateAppearance(style) {
108
+ if (!style) {
109
+ return {};
110
+ }
111
+ const stateAppearance = {
112
+ tabBarItemBadgeBackgroundColor: style.badgeBackgroundColor,
113
+ tabBarItemTitlePositionAdjustment: style.titlePositionAdjustment,
114
+ tabBarItemIconColor: style.iconColor,
115
+ tabBarItemTitleFontFamily: style.fontFamily,
116
+ tabBarItemTitleFontSize: style.fontSize,
117
+ // Only string values are accepted by rn-screens
118
+ tabBarItemTitleFontWeight: style?.fontWeight
119
+ ? String(style.fontWeight)
120
+ : undefined,
121
+ tabBarItemTitleFontStyle: style.fontStyle,
122
+ tabBarItemTitleFontColor: style.color,
123
+ };
124
+ Object.keys(stateAppearance).forEach((key) => {
125
+ if (stateAppearance[key] === undefined) {
126
+ delete stateAppearance[key];
127
+ }
128
+ });
129
+ return stateAppearance;
130
+ }
131
+ //# sourceMappingURL=appearance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appearance.js","sourceRoot":"","sources":["../../../src/native-tabs/NativeBottomTabs/appearance.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ColorValue } from 'react-native';\nimport type {\n BottomTabsScreenAppearance,\n BottomTabsScreenItemAppearance,\n BottomTabsScreenItemStateAppearance,\n} from 'react-native-screens';\n\nimport {\n SUPPORTED_BLUR_EFFECTS,\n type NativeTabOptions,\n type NativeTabsBlurEffect,\n type NativeTabsLabelStyle,\n} from './types';\n\nexport function createStandardAppearanceFromOptions(\n options: NativeTabOptions,\n baseStandardAppearance: BottomTabsScreenAppearance\n): BottomTabsScreenAppearance {\n const appearance = appendStyleToAppearance(\n {\n ...options.labelStyle,\n iconColor: options.iconColor,\n backgroundColor: options.backgroundColor,\n blurEffect: options.blurEffect,\n badgeBackgroundColor: options.badgeBackgroundColor,\n titlePositionAdjustment: options.titlePositionAdjustment,\n },\n baseStandardAppearance,\n ['normal', 'focused', 'selected']\n );\n return appendSelectedStyleToAppearance(\n {\n ...(options.selectedLabelStyle ?? {}),\n iconColor: options.selectedIconColor,\n badgeBackgroundColor: options.selectedBadgeBackgroundColor,\n titlePositionAdjustment: options.selectedTitlePositionAdjustment,\n },\n appearance\n );\n}\n\nexport function createScrollEdgeAppearanceFromOptions(\n options: NativeTabOptions,\n baseScrollEdgeAppearance: BottomTabsScreenAppearance\n): BottomTabsScreenAppearance {\n const appearance = appendStyleToAppearance(\n {\n ...options.labelStyle,\n iconColor: options.iconColor,\n blurEffect: options.disableTransparentOnScrollEdge ? options.blurEffect : 'none',\n backgroundColor: options.disableTransparentOnScrollEdge ? options.backgroundColor : null,\n badgeBackgroundColor: options.badgeBackgroundColor,\n titlePositionAdjustment: options.titlePositionAdjustment,\n },\n baseScrollEdgeAppearance,\n ['normal', 'focused', 'selected']\n );\n return appendSelectedStyleToAppearance(\n {\n ...(options.selectedLabelStyle ?? {}),\n iconColor: options.selectedIconColor,\n badgeBackgroundColor: options.selectedBadgeBackgroundColor,\n titlePositionAdjustment: options.selectedTitlePositionAdjustment,\n },\n appearance\n );\n}\n\nexport interface AppearanceStyle extends NativeTabsLabelStyle {\n iconColor?: ColorValue;\n backgroundColor?: ColorValue | null;\n blurEffect?: NativeTabsBlurEffect;\n badgeBackgroundColor?: ColorValue;\n titlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n}\n\nexport function appendSelectedStyleToAppearance(\n selectedStyle: AppearanceStyle,\n appearance: BottomTabsScreenAppearance\n): BottomTabsScreenAppearance {\n return appendStyleToAppearance(selectedStyle, appearance, ['selected', 'focused']);\n}\n\nconst EMPTY_APPEARANCE_ITEM: BottomTabsScreenItemAppearance = {\n normal: {},\n selected: {},\n focused: {},\n disabled: {},\n};\n\nexport function appendStyleToAppearance(\n style: AppearanceStyle,\n appearance: BottomTabsScreenAppearance,\n states: ('selected' | 'focused' | 'disabled' | 'normal')[]\n): BottomTabsScreenAppearance {\n let tabBarBlurEffect = style?.blurEffect;\n if (tabBarBlurEffect && !supportedBlurEffectsSet.has(tabBarBlurEffect)) {\n console.warn(\n `Unsupported blurEffect: ${tabBarBlurEffect}. Supported values are: ${SUPPORTED_BLUR_EFFECTS.map((effect) => `\"${effect}\"`).join(', ')}`\n );\n tabBarBlurEffect = undefined;\n }\n const baseItemAppearance =\n appearance.stacked || appearance.inline || appearance.compactInline || {};\n\n const styleAppearance = convertStyleToAppearance(style);\n const newAppearances = states.map((state) => ({\n key: state,\n appearance: {\n ...baseItemAppearance.normal,\n ...baseItemAppearance[state],\n ...styleAppearance.stacked?.normal,\n },\n }));\n\n const itemAppearance: BottomTabsScreenItemAppearance = {\n ...EMPTY_APPEARANCE_ITEM,\n ...baseItemAppearance,\n ...Object.fromEntries(newAppearances.map(({ key, appearance }) => [key, appearance])),\n };\n return {\n stacked: itemAppearance,\n inline: itemAppearance,\n compactInline: itemAppearance,\n tabBarBackgroundColor:\n style.backgroundColor === null\n ? undefined\n : (style.backgroundColor ?? appearance.tabBarBackgroundColor),\n tabBarBlurEffect: tabBarBlurEffect ?? appearance.tabBarBlurEffect,\n };\n}\n\nconst supportedBlurEffectsSet = new Set<string>(SUPPORTED_BLUR_EFFECTS);\n\nexport function convertStyleToAppearance(\n style: AppearanceStyle | undefined\n): BottomTabsScreenAppearance {\n if (!style) {\n return {};\n }\n let blurEffect = style.blurEffect;\n if (style.blurEffect && !supportedBlurEffectsSet.has(style.blurEffect)) {\n console.warn(\n `Unsupported blurEffect: ${style.blurEffect}. Supported values are: ${SUPPORTED_BLUR_EFFECTS.map(\n (effect) => `\"${effect}\"`\n ).join(', ')}`\n );\n blurEffect = undefined;\n }\n const stateAppearance = convertStyleToItemStateAppearance(style);\n const itemAppearance: BottomTabsScreenItemAppearance = {\n normal: stateAppearance,\n selected: stateAppearance,\n focused: stateAppearance,\n disabled: {},\n };\n return {\n inline: itemAppearance,\n stacked: itemAppearance,\n compactInline: itemAppearance,\n tabBarBackgroundColor: style?.backgroundColor ?? undefined,\n tabBarBlurEffect: blurEffect,\n };\n}\n\nexport function convertStyleToItemStateAppearance(\n style: AppearanceStyle | undefined\n): BottomTabsScreenItemStateAppearance {\n if (!style) {\n return {};\n }\n const stateAppearance: BottomTabsScreenItemStateAppearance = {\n tabBarItemBadgeBackgroundColor: style.badgeBackgroundColor,\n tabBarItemTitlePositionAdjustment: style.titlePositionAdjustment,\n tabBarItemIconColor: style.iconColor,\n tabBarItemTitleFontFamily: style.fontFamily,\n tabBarItemTitleFontSize: style.fontSize,\n // Only string values are accepted by rn-screens\n tabBarItemTitleFontWeight: style?.fontWeight\n ? (String(style.fontWeight) as `${NonNullable<(typeof style)['fontWeight']>}`)\n : undefined,\n tabBarItemTitleFontStyle: style.fontStyle,\n tabBarItemTitleFontColor: style.color,\n };\n\n (Object.keys(stateAppearance) as (keyof BottomTabsScreenItemStateAppearance)[]).forEach((key) => {\n if (stateAppearance[key] === undefined) {\n delete stateAppearance[key];\n }\n });\n\n return stateAppearance;\n}\n"]}