one 1.2.34 → 1.2.35
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/dist/cjs/__mocks__/@react-navigation/native-stack.cjs +29 -0
- package/dist/cjs/__mocks__/@react-navigation/native-stack.js +24 -0
- package/dist/cjs/__mocks__/@react-navigation/native-stack.js.map +6 -0
- package/dist/cjs/__mocks__/@react-navigation/native-stack.native.js +38 -0
- package/dist/cjs/__mocks__/@react-navigation/native-stack.native.js.map +1 -0
- package/dist/cjs/__mocks__/@react-navigation/native.js +45 -0
- package/dist/cjs/__mocks__/@react-navigation/native.js.map +1 -0
- package/dist/cjs/__mocks__/expo-linking.cjs +36 -0
- package/dist/cjs/__mocks__/expo-linking.js +25 -0
- package/dist/cjs/__mocks__/expo-linking.js.map +6 -0
- package/dist/cjs/__mocks__/expo-linking.native.js +47 -0
- package/dist/cjs/__mocks__/expo-linking.native.js.map +1 -0
- package/dist/cjs/__mocks__/expo-modules-core.cjs +36 -0
- package/dist/cjs/__mocks__/expo-modules-core.js +31 -0
- package/dist/cjs/__mocks__/expo-modules-core.js.map +6 -0
- package/dist/cjs/__mocks__/expo-modules-core.native.js +67 -0
- package/dist/cjs/__mocks__/expo-modules-core.native.js.map +1 -0
- package/dist/cjs/__mocks__/react-native-screens.cjs +28 -0
- package/dist/cjs/__mocks__/react-native-screens.js +22 -0
- package/dist/cjs/__mocks__/react-native-screens.js.map +6 -0
- package/dist/cjs/__mocks__/react-native-screens.native.js +31 -0
- package/dist/cjs/__mocks__/react-native-screens.native.js.map +1 -0
- package/dist/cjs/__mocks__/react-native.js +49 -0
- package/dist/cjs/__mocks__/react-native.js.map +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/layouts/Stack.cjs +6 -1
- package/dist/cjs/layouts/Stack.js +5 -2
- package/dist/cjs/layouts/Stack.js.map +1 -1
- package/dist/cjs/layouts/Stack.native.js +6 -1
- package/dist/cjs/layouts/Stack.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/StackHeaderBackButton.cjs +40 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderBackButton.js +35 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderBackButton.js.map +6 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderBackButton.native.js +43 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderBackButton.native.js.map +1 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderComponent.cjs +69 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderComponent.js +54 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderComponent.js.map +6 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderComponent.native.js +78 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderComponent.native.js.map +1 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderLeft.cjs +35 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderLeft.js +30 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderLeft.js.map +6 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderLeft.native.js +40 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderLeft.native.js.map +1 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderRight.cjs +35 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderRight.js +30 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderRight.js.map +6 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderRight.native.js +40 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderRight.native.js.map +1 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderSearchBar.cjs +35 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderSearchBar.js +30 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderSearchBar.js.map +6 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderSearchBar.native.js +38 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderSearchBar.native.js.map +1 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderTitle.cjs +53 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderTitle.js +46 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderTitle.js.map +6 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderTitle.native.js +56 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderTitle.native.js.map +1 -0
- package/dist/cjs/layouts/stack-utils/StackScreen.cjs +57 -0
- package/dist/cjs/layouts/stack-utils/StackScreen.js +43 -0
- package/dist/cjs/layouts/stack-utils/StackScreen.js.map +6 -0
- package/dist/cjs/layouts/stack-utils/StackScreen.native.js +64 -0
- package/dist/cjs/layouts/stack-utils/StackScreen.native.js.map +1 -0
- package/dist/cjs/layouts/stack-utils/__tests__/composition.test.cjs +189 -0
- package/dist/cjs/layouts/stack-utils/__tests__/composition.test.js +184 -0
- package/dist/cjs/layouts/stack-utils/__tests__/composition.test.js.map +6 -0
- package/dist/cjs/layouts/stack-utils/__tests__/composition.test.native.js +204 -0
- package/dist/cjs/layouts/stack-utils/__tests__/composition.test.native.js.map +1 -0
- package/dist/cjs/layouts/stack-utils/index.cjs +47 -0
- package/dist/cjs/layouts/stack-utils/index.js +36 -0
- package/dist/cjs/layouts/stack-utils/index.js.map +6 -0
- package/dist/cjs/layouts/stack-utils/index.native.js +50 -0
- package/dist/cjs/layouts/stack-utils/index.native.js.map +1 -0
- package/dist/cjs/utils/children.cjs +38 -0
- package/dist/cjs/utils/children.js +37 -0
- package/dist/cjs/utils/children.js.map +6 -0
- package/dist/cjs/utils/children.native.js +60 -0
- package/dist/cjs/utils/children.native.js.map +1 -0
- package/dist/cjs/utils/style.cjs +28 -0
- package/dist/cjs/utils/style.js +24 -0
- package/dist/cjs/utils/style.js.map +6 -0
- package/dist/cjs/utils/style.native.js +31 -0
- package/dist/cjs/utils/style.native.js.map +1 -0
- package/dist/esm/__mocks__/@react-navigation/native-stack.js +8 -0
- package/dist/esm/__mocks__/@react-navigation/native-stack.js.map +6 -0
- package/dist/esm/__mocks__/@react-navigation/native-stack.mjs +6 -0
- package/dist/esm/__mocks__/@react-navigation/native-stack.mjs.map +1 -0
- package/dist/esm/__mocks__/@react-navigation/native-stack.native.js +12 -0
- package/dist/esm/__mocks__/@react-navigation/native-stack.native.js.map +1 -0
- package/dist/esm/__mocks__/@react-navigation/native.js +18 -0
- package/dist/esm/__mocks__/@react-navigation/native.js.map +1 -0
- package/dist/esm/__mocks__/expo-linking.js +9 -0
- package/dist/esm/__mocks__/expo-linking.js.map +6 -0
- package/dist/esm/__mocks__/expo-linking.mjs +10 -0
- package/dist/esm/__mocks__/expo-linking.mjs.map +1 -0
- package/dist/esm/__mocks__/expo-linking.native.js +18 -0
- package/dist/esm/__mocks__/expo-linking.native.js.map +1 -0
- package/dist/esm/__mocks__/expo-modules-core.js +15 -0
- package/dist/esm/__mocks__/expo-modules-core.js.map +6 -0
- package/dist/esm/__mocks__/expo-modules-core.mjs +10 -0
- package/dist/esm/__mocks__/expo-modules-core.mjs.map +1 -0
- package/dist/esm/__mocks__/expo-modules-core.native.js +38 -0
- package/dist/esm/__mocks__/expo-modules-core.native.js.map +1 -0
- package/dist/esm/__mocks__/react-native-screens.js +6 -0
- package/dist/esm/__mocks__/react-native-screens.js.map +6 -0
- package/dist/esm/__mocks__/react-native-screens.mjs +4 -0
- package/dist/esm/__mocks__/react-native-screens.mjs.map +1 -0
- package/dist/esm/__mocks__/react-native-screens.native.js +4 -0
- package/dist/esm/__mocks__/react-native-screens.native.js.map +1 -0
- package/dist/esm/__mocks__/react-native.js +19 -0
- package/dist/esm/__mocks__/react-native.js.map +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/layouts/Stack.js +5 -1
- package/dist/esm/layouts/Stack.js.map +1 -1
- package/dist/esm/layouts/Stack.mjs +6 -1
- package/dist/esm/layouts/Stack.mjs.map +1 -1
- package/dist/esm/layouts/Stack.native.js +6 -1
- package/dist/esm/layouts/Stack.native.js.map +1 -1
- package/dist/esm/layouts/stack-utils/StackHeaderBackButton.js +19 -0
- package/dist/esm/layouts/stack-utils/StackHeaderBackButton.js.map +6 -0
- package/dist/esm/layouts/stack-utils/StackHeaderBackButton.mjs +16 -0
- package/dist/esm/layouts/stack-utils/StackHeaderBackButton.mjs.map +1 -0
- package/dist/esm/layouts/stack-utils/StackHeaderBackButton.native.js +16 -0
- package/dist/esm/layouts/stack-utils/StackHeaderBackButton.native.js.map +1 -0
- package/dist/esm/layouts/stack-utils/StackHeaderComponent.js +51 -0
- package/dist/esm/layouts/stack-utils/StackHeaderComponent.js.map +6 -0
- package/dist/esm/layouts/stack-utils/StackHeaderComponent.mjs +45 -0
- package/dist/esm/layouts/stack-utils/StackHeaderComponent.mjs.map +1 -0
- package/dist/esm/layouts/stack-utils/StackHeaderComponent.native.js +51 -0
- package/dist/esm/layouts/stack-utils/StackHeaderComponent.native.js.map +1 -0
- package/dist/esm/layouts/stack-utils/StackHeaderLeft.js +14 -0
- package/dist/esm/layouts/stack-utils/StackHeaderLeft.js.map +6 -0
- package/dist/esm/layouts/stack-utils/StackHeaderLeft.mjs +11 -0
- package/dist/esm/layouts/stack-utils/StackHeaderLeft.mjs.map +1 -0
- package/dist/esm/layouts/stack-utils/StackHeaderLeft.native.js +13 -0
- package/dist/esm/layouts/stack-utils/StackHeaderLeft.native.js.map +1 -0
- package/dist/esm/layouts/stack-utils/StackHeaderRight.js +14 -0
- package/dist/esm/layouts/stack-utils/StackHeaderRight.js.map +6 -0
- package/dist/esm/layouts/stack-utils/StackHeaderRight.mjs +11 -0
- package/dist/esm/layouts/stack-utils/StackHeaderRight.mjs.map +1 -0
- package/dist/esm/layouts/stack-utils/StackHeaderRight.native.js +13 -0
- package/dist/esm/layouts/stack-utils/StackHeaderRight.native.js.map +1 -0
- package/dist/esm/layouts/stack-utils/StackHeaderSearchBar.js +14 -0
- package/dist/esm/layouts/stack-utils/StackHeaderSearchBar.js.map +6 -0
- package/dist/esm/layouts/stack-utils/StackHeaderSearchBar.mjs +11 -0
- package/dist/esm/layouts/stack-utils/StackHeaderSearchBar.mjs.map +1 -0
- package/dist/esm/layouts/stack-utils/StackHeaderSearchBar.native.js +11 -0
- package/dist/esm/layouts/stack-utils/StackHeaderSearchBar.native.js.map +1 -0
- package/dist/esm/layouts/stack-utils/StackHeaderTitle.js +31 -0
- package/dist/esm/layouts/stack-utils/StackHeaderTitle.js.map +6 -0
- package/dist/esm/layouts/stack-utils/StackHeaderTitle.mjs +29 -0
- package/dist/esm/layouts/stack-utils/StackHeaderTitle.mjs.map +1 -0
- package/dist/esm/layouts/stack-utils/StackHeaderTitle.native.js +29 -0
- package/dist/esm/layouts/stack-utils/StackHeaderTitle.native.js.map +1 -0
- package/dist/esm/layouts/stack-utils/StackScreen.js +33 -0
- package/dist/esm/layouts/stack-utils/StackScreen.js.map +6 -0
- package/dist/esm/layouts/stack-utils/StackScreen.mjs +33 -0
- package/dist/esm/layouts/stack-utils/StackScreen.mjs.map +1 -0
- package/dist/esm/layouts/stack-utils/StackScreen.native.js +38 -0
- package/dist/esm/layouts/stack-utils/StackScreen.native.js.map +1 -0
- package/dist/esm/layouts/stack-utils/__tests__/composition.test.js +197 -0
- package/dist/esm/layouts/stack-utils/__tests__/composition.test.js.map +6 -0
- package/dist/esm/layouts/stack-utils/__tests__/composition.test.mjs +190 -0
- package/dist/esm/layouts/stack-utils/__tests__/composition.test.mjs.map +1 -0
- package/dist/esm/layouts/stack-utils/__tests__/composition.test.native.js +202 -0
- package/dist/esm/layouts/stack-utils/__tests__/composition.test.native.js.map +1 -0
- package/dist/esm/layouts/stack-utils/index.js +26 -0
- package/dist/esm/layouts/stack-utils/index.js.map +6 -0
- package/dist/esm/layouts/stack-utils/index.mjs +16 -0
- package/dist/esm/layouts/stack-utils/index.mjs.map +1 -0
- package/dist/esm/layouts/stack-utils/index.native.js +16 -0
- package/dist/esm/layouts/stack-utils/index.native.js.map +1 -0
- package/dist/esm/utils/children.js +23 -0
- package/dist/esm/utils/children.js.map +6 -0
- package/dist/esm/utils/children.mjs +13 -0
- package/dist/esm/utils/children.mjs.map +1 -0
- package/dist/esm/utils/children.native.js +32 -0
- package/dist/esm/utils/children.native.js.map +1 -0
- package/dist/esm/utils/style.js +8 -0
- package/dist/esm/utils/style.js.map +6 -0
- package/dist/esm/utils/style.mjs +5 -0
- package/dist/esm/utils/style.mjs.map +1 -0
- package/dist/esm/utils/style.native.js +5 -0
- package/dist/esm/utils/style.native.js.map +1 -0
- package/package.json +9 -9
- package/src/__mocks__/@react-navigation/native-stack.ts +32 -0
- package/src/__mocks__/@react-navigation/native.ts +21 -0
- package/src/__mocks__/expo-linking.ts +6 -0
- package/src/__mocks__/expo-modules-core.ts +11 -0
- package/src/__mocks__/react-native-screens.ts +17 -0
- package/src/__mocks__/react-native.ts +20 -0
- package/src/index.ts +9 -0
- package/src/layouts/Stack.tsx +7 -1
- package/src/layouts/stack-utils/README.md +211 -0
- package/src/layouts/stack-utils/StackHeaderBackButton.tsx +34 -0
- package/src/layouts/stack-utils/StackHeaderComponent.tsx +109 -0
- package/src/layouts/stack-utils/StackHeaderLeft.tsx +29 -0
- package/src/layouts/stack-utils/StackHeaderRight.tsx +29 -0
- package/src/layouts/stack-utils/StackHeaderSearchBar.tsx +21 -0
- package/src/layouts/stack-utils/StackHeaderTitle.tsx +61 -0
- package/src/layouts/stack-utils/StackScreen.tsx +65 -0
- package/src/layouts/stack-utils/__tests__/composition.test.tsx +267 -0
- package/src/layouts/stack-utils/index.tsx +35 -0
- package/src/utils/children.ts +47 -0
- package/src/utils/style.ts +17 -0
- package/types/__mocks__/@react-navigation/native-stack.d.ts +30 -0
- package/types/__mocks__/@react-navigation/native-stack.d.ts.map +1 -0
- package/types/__mocks__/@react-navigation/native.d.ts +17 -0
- package/types/__mocks__/@react-navigation/native.d.ts.map +1 -0
- package/types/__mocks__/expo-linking.d.ts +9 -0
- package/types/__mocks__/expo-linking.d.ts.map +1 -0
- package/types/__mocks__/expo-modules-core.d.ts +11 -0
- package/types/__mocks__/expo-modules-core.d.ts.map +1 -0
- package/types/__mocks__/react-native-screens.d.ts +14 -0
- package/types/__mocks__/react-native-screens.d.ts.map +1 -0
- package/types/__mocks__/react-native.d.ts +12 -0
- package/types/__mocks__/react-native.d.ts.map +1 -0
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/layouts/Stack.d.ts +10 -0
- package/types/layouts/Stack.d.ts.map +1 -1
- package/types/layouts/stack-utils/StackHeaderBackButton.d.ts +17 -0
- package/types/layouts/stack-utils/StackHeaderBackButton.d.ts.map +1 -0
- package/types/layouts/stack-utils/StackHeaderComponent.d.ts +36 -0
- package/types/layouts/stack-utils/StackHeaderComponent.d.ts.map +1 -0
- package/types/layouts/stack-utils/StackHeaderLeft.d.ts +13 -0
- package/types/layouts/stack-utils/StackHeaderLeft.d.ts.map +1 -0
- package/types/layouts/stack-utils/StackHeaderRight.d.ts +13 -0
- package/types/layouts/stack-utils/StackHeaderRight.d.ts.map +1 -0
- package/types/layouts/stack-utils/StackHeaderSearchBar.d.ts +10 -0
- package/types/layouts/stack-utils/StackHeaderSearchBar.d.ts.map +1 -0
- package/types/layouts/stack-utils/StackHeaderTitle.d.ts +26 -0
- package/types/layouts/stack-utils/StackHeaderTitle.d.ts.map +1 -0
- package/types/layouts/stack-utils/StackScreen.d.ts +21 -0
- package/types/layouts/stack-utils/StackScreen.d.ts.map +1 -0
- package/types/layouts/stack-utils/index.d.ts +20 -0
- package/types/layouts/stack-utils/index.d.ts.map +1 -0
- package/types/utils/children.d.ts +15 -0
- package/types/utils/children.d.ts.map +1 -0
- package/types/utils/style.d.ts +7 -0
- package/types/utils/style.d.ts.map +1 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/layouts/stack-utils/index.tsx"],
|
|
4
|
+
"mappings": "AAAA,SAAS,6BAA8D;AACvE,SAAS,4BAAmD;AAC5D,SAAS,uBAAkD;AAC3D,SAAS,wBAAoD;AAC7D,SAAS,4BAA4D;AACrE,SAAS,wBAAoD;AA6B7D,SAAS,aAAa,uCAA8D;AAvB7E,MAAM,cAAc,OAAO,OAAO,sBAAsB;AAAA,EAC7D,MAAM;AAAA,EACN,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,WAAW;AACb,CAAC;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { StackHeaderBackButton } from "./StackHeaderBackButton.mjs";
|
|
2
|
+
import { StackHeaderComponent } from "./StackHeaderComponent.mjs";
|
|
3
|
+
import { StackHeaderLeft } from "./StackHeaderLeft.mjs";
|
|
4
|
+
import { StackHeaderRight } from "./StackHeaderRight.mjs";
|
|
5
|
+
import { StackHeaderSearchBar } from "./StackHeaderSearchBar.mjs";
|
|
6
|
+
import { StackHeaderTitle } from "./StackHeaderTitle.mjs";
|
|
7
|
+
import { StackScreen, appendScreenStackPropsToOptions } from "./StackScreen.mjs";
|
|
8
|
+
const StackHeader = Object.assign(StackHeaderComponent, {
|
|
9
|
+
Left: StackHeaderLeft,
|
|
10
|
+
Right: StackHeaderRight,
|
|
11
|
+
BackButton: StackHeaderBackButton,
|
|
12
|
+
Title: StackHeaderTitle,
|
|
13
|
+
SearchBar: StackHeaderSearchBar
|
|
14
|
+
});
|
|
15
|
+
export { StackHeader, StackHeaderBackButton, StackHeaderComponent, StackHeaderLeft, StackHeaderRight, StackHeaderSearchBar, StackHeaderTitle, StackScreen, appendScreenStackPropsToOptions };
|
|
16
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StackHeaderBackButton","StackHeaderComponent","StackHeaderLeft","StackHeaderRight","StackHeaderSearchBar","StackHeaderTitle","StackScreen","appendScreenStackPropsToOptions","StackHeader","Object","assign","Left","Right","BackButton","Title","SearchBar"],"sources":["../../../../src/layouts/stack-utils/index.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,qBAAA,QAA8D;AACvE,SAASC,oBAAA,QAAmD;AAC5D,SAASC,eAAA,QAAkD;AAC3D,SAASC,gBAAA,QAAoD;AAC7D,SAASC,oBAAA,QAA4D;AACrE,SAASC,gBAAA,QAAoD;AA6B7D,SAASC,WAAA,EAAaC,+BAAA,QAA8D;AAvB7E,MAAMC,WAAA,GAAcC,MAAA,CAAOC,MAAA,CAAOT,oBAAA,EAAsB;EAC7DU,IAAA,EAAMT,eAAA;EACNU,KAAA,EAAOT,gBAAA;EACPU,UAAA,EAAYb,qBAAA;EACZc,KAAA,EAAOT,gBAAA;EACPU,SAAA,EAAWX;AACb,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { StackHeaderBackButton } from "./StackHeaderBackButton.native.js";
|
|
2
|
+
import { StackHeaderComponent } from "./StackHeaderComponent.native.js";
|
|
3
|
+
import { StackHeaderLeft } from "./StackHeaderLeft.native.js";
|
|
4
|
+
import { StackHeaderRight } from "./StackHeaderRight.native.js";
|
|
5
|
+
import { StackHeaderSearchBar } from "./StackHeaderSearchBar.native.js";
|
|
6
|
+
import { StackHeaderTitle } from "./StackHeaderTitle.native.js";
|
|
7
|
+
import { StackScreen, appendScreenStackPropsToOptions } from "./StackScreen.native.js";
|
|
8
|
+
var StackHeader = Object.assign(StackHeaderComponent, {
|
|
9
|
+
Left: StackHeaderLeft,
|
|
10
|
+
Right: StackHeaderRight,
|
|
11
|
+
BackButton: StackHeaderBackButton,
|
|
12
|
+
Title: StackHeaderTitle,
|
|
13
|
+
SearchBar: StackHeaderSearchBar
|
|
14
|
+
});
|
|
15
|
+
export { StackHeader, StackHeaderBackButton, StackHeaderComponent, StackHeaderLeft, StackHeaderRight, StackHeaderSearchBar, StackHeaderTitle, StackScreen, appendScreenStackPropsToOptions };
|
|
16
|
+
//# sourceMappingURL=index.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StackHeaderBackButton","StackHeaderComponent","StackHeaderLeft","StackHeaderRight","StackHeaderSearchBar","StackHeaderTitle","StackScreen","appendScreenStackPropsToOptions","StackHeader","Object","assign","Left","Right","BackButton","Title","SearchBar"],"sources":["../../../../src/layouts/stack-utils/index.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,qBAAA,QAA8D;AACvE,SAASC,oBAAA,QAAmD;AAC5D,SAASC,eAAA,QAAkD;AAC3D,SAASC,gBAAA,QAAoD;AAC7D,SAASC,oBAAA,QAA4D;AACrE,SAASC,gBAAA,QAAoD;AA6B7D,SAASC,WAAA,EAAaC,+BAAA,QAA8D;AAvB7E,IAAAC,WAAM,GAAAC,MAAc,CAAAC,MAAO,CAAAT,oBAAO;EACvCU,IAAA,EAAMT,eAAA;EACNU,KAAA,EAAOT,gBAAA;EACPU,UAAA,EAAYb,qBAAA;EACZc,KAAA,EAAOT,gBAAA;EACPU,SAAA,EAAWX;AACb,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isValidElement
|
|
3
|
+
} from "react";
|
|
4
|
+
function isChildOfType(element, type) {
|
|
5
|
+
return isValidElement(element) && element.type === type;
|
|
6
|
+
}
|
|
7
|
+
function getFirstChildOfType(children, type) {
|
|
8
|
+
const childArray = Array.isArray(children) ? children : [children];
|
|
9
|
+
for (const child of childArray)
|
|
10
|
+
if (isChildOfType(child, type))
|
|
11
|
+
return child;
|
|
12
|
+
}
|
|
13
|
+
function getAllChildrenOfType(children, type) {
|
|
14
|
+
return (Array.isArray(children) ? children : [children]).filter(
|
|
15
|
+
(child) => isChildOfType(child, type)
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
getAllChildrenOfType,
|
|
20
|
+
getFirstChildOfType,
|
|
21
|
+
isChildOfType
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=children.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/utils/children.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA,EACE;AAAA,OAIK;AAMA,SAAS,cACd,SACA,MACuE;AACvE,SAAO,eAAe,OAAO,KAAK,QAAQ,SAAS;AACrD;AAKO,SAAS,oBACd,UACA,MACwE;AACxE,QAAM,aAAa,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ;AACjE,aAAW,SAAS;AAClB,QAAI,cAAc,OAAO,IAAI;AAC3B,aAAO;AAIb;AAKO,SAAS,qBACd,UACA,MAC8D;AAE9D,UADmB,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ,GAC/C;AAAA,IAChB,CAAC,UACC,cAAc,OAAO,IAAI;AAAA,EAC7B;AACF;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { isValidElement } from "react";
|
|
2
|
+
function isChildOfType(element, type) {
|
|
3
|
+
return isValidElement(element) && element.type === type;
|
|
4
|
+
}
|
|
5
|
+
function getFirstChildOfType(children, type) {
|
|
6
|
+
const childArray = Array.isArray(children) ? children : [children];
|
|
7
|
+
for (const child of childArray) if (isChildOfType(child, type)) return child;
|
|
8
|
+
}
|
|
9
|
+
function getAllChildrenOfType(children, type) {
|
|
10
|
+
return (Array.isArray(children) ? children : [children]).filter(child => isChildOfType(child, type));
|
|
11
|
+
}
|
|
12
|
+
export { getAllChildrenOfType, getFirstChildOfType, isChildOfType };
|
|
13
|
+
//# sourceMappingURL=children.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isValidElement","isChildOfType","element","type","getFirstChildOfType","children","childArray","Array","isArray","child","getAllChildrenOfType","filter"],"sources":["../../../src/utils/children.ts"],"sourcesContent":[null],"mappings":"AAAA,SACEA,cAAA,QAIK;AAMA,SAASC,cACdC,OAAA,EACAC,IAAA,EACuE;EACvE,OAAOH,cAAA,CAAeE,OAAO,KAAKA,OAAA,CAAQC,IAAA,KAASA,IAAA;AACrD;AAKO,SAASC,oBACdC,QAAA,EACAF,IAAA,EACwE;EACxE,MAAMG,UAAA,GAAaC,KAAA,CAAMC,OAAA,CAAQH,QAAQ,IAAIA,QAAA,GAAW,CAACA,QAAQ;EACjE,WAAWI,KAAA,IAASH,UAAA,EAClB,IAAIL,aAAA,CAAcQ,KAAA,EAAON,IAAI,GAC3B,OAAOM,KAAA;AAIb;AAKO,SAASC,qBACdL,QAAA,EACAF,IAAA,EAC8D;EAE9D,QADmBI,KAAA,CAAMC,OAAA,CAAQH,QAAQ,IAAIA,QAAA,GAAW,CAACA,QAAQ,GAC/CM,MAAA,CACfF,KAAA,IACCR,aAAA,CAAcQ,KAAA,EAAON,IAAI,CAC7B;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { isValidElement } from "react";
|
|
2
|
+
function isChildOfType(element, type) {
|
|
3
|
+
return isValidElement(element) && element.type === type;
|
|
4
|
+
}
|
|
5
|
+
function getFirstChildOfType(children, type) {
|
|
6
|
+
var childArray = Array.isArray(children) ? children : [children],
|
|
7
|
+
_iteratorNormalCompletion = !0,
|
|
8
|
+
_didIteratorError = !1,
|
|
9
|
+
_iteratorError = void 0;
|
|
10
|
+
try {
|
|
11
|
+
for (var _iterator = childArray[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
|
|
12
|
+
var child = _step.value;
|
|
13
|
+
if (isChildOfType(child, type)) return child;
|
|
14
|
+
}
|
|
15
|
+
} catch (err) {
|
|
16
|
+
_didIteratorError = !0, _iteratorError = err;
|
|
17
|
+
} finally {
|
|
18
|
+
try {
|
|
19
|
+
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
|
|
20
|
+
} finally {
|
|
21
|
+
if (_didIteratorError) throw _iteratorError;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function getAllChildrenOfType(children, type) {
|
|
26
|
+
var childArray = Array.isArray(children) ? children : [children];
|
|
27
|
+
return childArray.filter(function (child) {
|
|
28
|
+
return isChildOfType(child, type);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
export { getAllChildrenOfType, getFirstChildOfType, isChildOfType };
|
|
32
|
+
//# sourceMappingURL=children.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isValidElement","isChildOfType","element","type","getFirstChildOfType","children","childArray","Array","isArray","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","child","value","err"],"sources":["../../../src/utils/children.ts"],"sourcesContent":[null],"mappings":"AAAA,SAAAA,cAAA;AAAA,SACEC,cAAAC,OAAA,EAAAC,IAAA;EAAA,OAIKH,cAAA,CAAAE,OAAA,KAAAA,OAAA,CAAAC,IAAA,KAAAA,IAAA;AAMA;AAIL,SAAOC,mBAAeA,CAAAC,QAAY,EAAAF,IAAA,EAAQ;EAC5C,IAAAG,UAAA,GAAAC,KAAA,CAAAC,OAAA,CAAAH,QAAA,IAAAA,QAAA,IAKOA,QAAS,CAId;IAAAI,yBAAyB,KAAQ;IAAAC,iBAAY,IAAW,CAAC;IAAAC,cAAQ;EACjE;IACE,KAAI,IAAAC,SAAc,GAAAN,UAAW,CAAAO,MAAA,CAAAC,QAAA,KAAAC,KAAA,IAAAN,yBAAA,IAAAM,KAAA,GAAAH,SAAA,CAAAI,IAAA,IAAAC,IAAA,GAAAR,yBAAA;MAC3B,IAAAS,KAAO,GAAAH,KAAA,CAAAI,KAAA;MAIb,IAAAlB,aAAA,CAAAiB,KAAA,EAAAf,IAAA,GAKO,OAASe,KAAA;IAKd;EAAkB,EAChB,OAACE,GAAA,EACC;IACJV,iBAAA,OAAAC,cAAA,GAAAS,GAAA;EACF","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["convertFontWeightToStringFontWeight","fontWeight","String"],"sources":["../../../src/utils/style.ts"],"sourcesContent":[null],"mappings":"AAMO,SAASA,oCACdC,UAAA,EACsD;EACtD,IAAIA,UAAA,KAAe,QAGnB,OAAI,OAAOA,UAAA,IAAe,WACjBC,MAAA,CAAOD,UAAU,IAEnBA,UAAA;AACT","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["convertFontWeightToStringFontWeight","fontWeight","String"],"sources":["../../../src/utils/style.ts"],"sourcesContent":[null],"mappings":"AAMO,SAASA,oCACdC,UAAA,EACsD;EACtD,IAAIA,UAAA,KAAe,QAGnB,OAAI,OAAOA,UAAA,IAAe,WACjBC,MAAA,CAAOD,UAAU,IAEnBA,UAAA;AACT","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "one",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.35",
|
|
4
4
|
"license": "BSD-3-Clause",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"setup.mjs",
|
|
@@ -121,17 +121,17 @@
|
|
|
121
121
|
"@react-navigation/routers": "~7.5.1",
|
|
122
122
|
"@swc/core": "^1.14.0",
|
|
123
123
|
"@ungap/structured-clone": "^1.2.0",
|
|
124
|
-
"@vxrn/color-scheme": "1.2.
|
|
125
|
-
"@vxrn/compiler": "1.2.
|
|
126
|
-
"@vxrn/resolve": "1.2.
|
|
127
|
-
"@vxrn/tslib-lite": "1.2.
|
|
128
|
-
"@vxrn/use-isomorphic-layout-effect": "1.2.
|
|
129
|
-
"@vxrn/vite-plugin-metro": "1.2.
|
|
124
|
+
"@vxrn/color-scheme": "1.2.35",
|
|
125
|
+
"@vxrn/compiler": "1.2.35",
|
|
126
|
+
"@vxrn/resolve": "1.2.35",
|
|
127
|
+
"@vxrn/tslib-lite": "1.2.35",
|
|
128
|
+
"@vxrn/use-isomorphic-layout-effect": "1.2.35",
|
|
129
|
+
"@vxrn/vite-plugin-metro": "1.2.35",
|
|
130
130
|
"babel-dead-code-elimination": "^1.0.10",
|
|
131
131
|
"babel-plugin-module-resolver": "^5.0.2",
|
|
132
132
|
"citty": "^0.1.6",
|
|
133
133
|
"core-js": "^3.38.1",
|
|
134
|
-
"create-vxrn": "1.2.
|
|
134
|
+
"create-vxrn": "1.2.35",
|
|
135
135
|
"escape-string-regexp": "^5.0.0",
|
|
136
136
|
"expo-linking": "~8.0.8",
|
|
137
137
|
"expo-modules-core": "~3.0.24",
|
|
@@ -157,7 +157,7 @@
|
|
|
157
157
|
"vite": "^7.1.12",
|
|
158
158
|
"vite-plugin-barrel": "^0.4.1",
|
|
159
159
|
"vite-tsconfig-paths": "^5.1.4",
|
|
160
|
-
"vxrn": "1.2.
|
|
160
|
+
"vxrn": "1.2.35",
|
|
161
161
|
"ws": "^8.18.0",
|
|
162
162
|
"xxhashjs": "^0.2.2"
|
|
163
163
|
},
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Mock for @react-navigation/native-stack used in vitest tests
|
|
2
|
+
|
|
3
|
+
export type NativeStackNavigationOptions = {
|
|
4
|
+
title?: string
|
|
5
|
+
headerLargeTitle?: boolean
|
|
6
|
+
headerTitleAlign?: 'left' | 'center'
|
|
7
|
+
headerTitleStyle?: any
|
|
8
|
+
headerLargeTitleStyle?: any
|
|
9
|
+
headerBackTitle?: string
|
|
10
|
+
headerBackTitleStyle?: any
|
|
11
|
+
headerBackImageSource?: any
|
|
12
|
+
headerBackButtonDisplayMode?: string
|
|
13
|
+
headerBackButtonMenuEnabled?: boolean
|
|
14
|
+
headerBackVisible?: boolean
|
|
15
|
+
headerSearchBarOptions?: any
|
|
16
|
+
headerShown?: boolean
|
|
17
|
+
headerBlurEffect?: string
|
|
18
|
+
headerStyle?: any
|
|
19
|
+
headerLargeStyle?: any
|
|
20
|
+
headerShadowVisible?: boolean
|
|
21
|
+
headerLargeTitleShadowVisible?: boolean
|
|
22
|
+
headerLeft?: () => any
|
|
23
|
+
headerRight?: () => any
|
|
24
|
+
header?: () => any
|
|
25
|
+
animation?: string
|
|
26
|
+
gestureEnabled?: boolean
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const createNativeStackNavigator = () => ({
|
|
30
|
+
Navigator: () => null,
|
|
31
|
+
Screen: () => null,
|
|
32
|
+
})
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Mock for @react-navigation/native used in vitest tests
|
|
2
|
+
|
|
3
|
+
export const useNavigation = () => ({
|
|
4
|
+
navigate: () => {},
|
|
5
|
+
goBack: () => {},
|
|
6
|
+
setOptions: () => {},
|
|
7
|
+
getParent: () => null,
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
export const NavigationContainer = ({ children }: any) => children
|
|
11
|
+
|
|
12
|
+
export type NavigationProp<T = any> = {
|
|
13
|
+
navigate: (route: string, params?: any) => void
|
|
14
|
+
goBack: () => void
|
|
15
|
+
setOptions: (options: any) => void
|
|
16
|
+
getParent: (id?: string) => any
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type ParamListBase = Record<string, object | undefined>
|
|
20
|
+
export type StackNavigationState<T> = any
|
|
21
|
+
export type EventMapBase = any
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Mock for expo-linking used in vitest tests
|
|
2
|
+
|
|
3
|
+
export const createURL = (path: string) => `exp://localhost/${path}`
|
|
4
|
+
export const parse = (url: string) => ({ path: url })
|
|
5
|
+
export const addEventListener = () => ({ remove: () => {} })
|
|
6
|
+
export const getInitialURL = async () => null
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Mock for expo-modules-core used in vitest tests
|
|
2
|
+
|
|
3
|
+
export const EventEmitter = class EventEmitter {
|
|
4
|
+
addListener() {}
|
|
5
|
+
removeListener() {}
|
|
6
|
+
emit() {}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const NativeModulesProxy = {}
|
|
10
|
+
export const requireNativeModule = () => ({})
|
|
11
|
+
export const requireOptionalNativeModule = () => null
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Mock for react-native-screens used in vitest tests
|
|
2
|
+
|
|
3
|
+
export const Screen = 'Screen'
|
|
4
|
+
export const ScreenContainer = 'ScreenContainer'
|
|
5
|
+
|
|
6
|
+
export type ScreenStackHeaderConfigProps = {
|
|
7
|
+
blurEffect?: string
|
|
8
|
+
backgroundColor?: string
|
|
9
|
+
largeTitleBackgroundColor?: string
|
|
10
|
+
backButtonDisplayMode?: 'default' | 'minimal' | 'generic'
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type SearchBarProps = {
|
|
14
|
+
placeholder?: string
|
|
15
|
+
onChangeText?: (text: string) => void
|
|
16
|
+
autoCapitalize?: 'none' | 'sentences' | 'words' | 'characters'
|
|
17
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Mock for react-native used in vitest tests
|
|
2
|
+
|
|
3
|
+
export const StyleSheet = {
|
|
4
|
+
create: <T extends Record<string, any>>(styles: T): T => styles,
|
|
5
|
+
flatten: (style: any): any => {
|
|
6
|
+
if (Array.isArray(style)) {
|
|
7
|
+
return Object.assign({}, ...style.filter(Boolean))
|
|
8
|
+
}
|
|
9
|
+
return style || {}
|
|
10
|
+
},
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const Platform = {
|
|
14
|
+
OS: 'web',
|
|
15
|
+
select: (obj: any) => obj.web || obj.default,
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const View = 'View'
|
|
19
|
+
export const Text = 'Text'
|
|
20
|
+
export const Pressable = 'Pressable'
|
package/src/index.ts
CHANGED
|
@@ -52,6 +52,15 @@ export {
|
|
|
52
52
|
export { href } from './href'
|
|
53
53
|
// components
|
|
54
54
|
export { Stack } from './layouts/Stack'
|
|
55
|
+
export type {
|
|
56
|
+
StackHeaderProps,
|
|
57
|
+
StackHeaderTitleProps,
|
|
58
|
+
StackHeaderLeftProps,
|
|
59
|
+
StackHeaderRightProps,
|
|
60
|
+
StackHeaderBackButtonProps,
|
|
61
|
+
StackHeaderSearchBarProps,
|
|
62
|
+
StackScreenProps,
|
|
63
|
+
} from './layouts/stack-utils'
|
|
55
64
|
export { Tabs } from './layouts/Tabs'
|
|
56
65
|
// utilities
|
|
57
66
|
export { withLayoutContext } from './layouts/withLayoutContext'
|
package/src/layouts/Stack.tsx
CHANGED
|
@@ -5,15 +5,21 @@ import {
|
|
|
5
5
|
type NativeStackNavigationOptions,
|
|
6
6
|
} from '@react-navigation/native-stack'
|
|
7
7
|
|
|
8
|
+
import { StackScreen, StackHeader } from './stack-utils'
|
|
8
9
|
import { withLayoutContext } from './withLayoutContext'
|
|
9
10
|
|
|
10
11
|
const NativeStackNavigator = createNativeStackNavigator().Navigator
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
const StackBase = withLayoutContext<
|
|
13
14
|
NativeStackNavigationOptions,
|
|
14
15
|
typeof NativeStackNavigator,
|
|
15
16
|
StackNavigationState<ParamListBase>,
|
|
16
17
|
NativeStackNavigationEventMap
|
|
17
18
|
>(NativeStackNavigator)
|
|
18
19
|
|
|
20
|
+
export const Stack = Object.assign(StackBase, {
|
|
21
|
+
Screen: StackScreen,
|
|
22
|
+
Header: StackHeader,
|
|
23
|
+
})
|
|
24
|
+
|
|
19
25
|
export default Stack
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# Stack Header Composition API
|
|
2
|
+
|
|
3
|
+
A declarative JSX API for configuring native stack headers in One.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The Stack Header Composition API provides a more intuitive way to configure stack navigation headers using JSX components instead of the traditional options object. This is particularly useful for complex header configurations like large titles, custom buttons, and search bars.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
The components are available through the main `one` package:
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
import { Stack } from 'one'
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Core Components
|
|
18
|
+
|
|
19
|
+
| Component | Description |
|
|
20
|
+
|-----------|-------------|
|
|
21
|
+
| `Stack.Screen` | Screen wrapper with header composition support |
|
|
22
|
+
| `Stack.Header` | Main header configuration container |
|
|
23
|
+
| `Stack.Header.Title` | Configure title text and large title mode |
|
|
24
|
+
| `Stack.Header.Left` | Custom left header content |
|
|
25
|
+
| `Stack.Header.Right` | Custom right header content |
|
|
26
|
+
| `Stack.Header.BackButton` | Back button configuration |
|
|
27
|
+
| `Stack.Header.SearchBar` | Search bar configuration |
|
|
28
|
+
|
|
29
|
+
## Basic Usage
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { Stack } from 'one'
|
|
33
|
+
|
|
34
|
+
export default function Layout() {
|
|
35
|
+
return (
|
|
36
|
+
<Stack>
|
|
37
|
+
<Stack.Screen name="index">
|
|
38
|
+
<Stack.Header>
|
|
39
|
+
<Stack.Header.Title large>Welcome</Stack.Header.Title>
|
|
40
|
+
</Stack.Header>
|
|
41
|
+
</Stack.Screen>
|
|
42
|
+
</Stack>
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Large Title with Blur Effect (iOS)
|
|
48
|
+
|
|
49
|
+
The classic iOS large title pattern with blur effect:
|
|
50
|
+
|
|
51
|
+
```tsx
|
|
52
|
+
<Stack.Screen name="feed">
|
|
53
|
+
<Stack.Header blurEffect="regular" style={{ backgroundColor: 'transparent' }}>
|
|
54
|
+
<Stack.Header.Title large>Feed</Stack.Header.Title>
|
|
55
|
+
</Stack.Header>
|
|
56
|
+
</Stack.Screen>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Custom Header Buttons
|
|
60
|
+
|
|
61
|
+
Add custom buttons to the left or right side of the header:
|
|
62
|
+
|
|
63
|
+
```tsx
|
|
64
|
+
<Stack.Screen name="profile">
|
|
65
|
+
<Stack.Header>
|
|
66
|
+
<Stack.Header.Title>Profile</Stack.Header.Title>
|
|
67
|
+
<Stack.Header.Left asChild>
|
|
68
|
+
<Button onPress={goBack}>Back</Button>
|
|
69
|
+
</Stack.Header.Left>
|
|
70
|
+
<Stack.Header.Right asChild>
|
|
71
|
+
<Button onPress={openSettings}>Settings</Button>
|
|
72
|
+
</Stack.Header.Right>
|
|
73
|
+
</Stack.Header>
|
|
74
|
+
</Stack.Screen>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Search Bar
|
|
78
|
+
|
|
79
|
+
Add an integrated search bar to the header:
|
|
80
|
+
|
|
81
|
+
```tsx
|
|
82
|
+
<Stack.Screen name="search">
|
|
83
|
+
<Stack.Header>
|
|
84
|
+
<Stack.Header.Title>Search</Stack.Header.Title>
|
|
85
|
+
<Stack.Header.SearchBar
|
|
86
|
+
placeholder="Search..."
|
|
87
|
+
onChangeText={handleSearch}
|
|
88
|
+
/>
|
|
89
|
+
</Stack.Header>
|
|
90
|
+
</Stack.Screen>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Back Button Configuration
|
|
94
|
+
|
|
95
|
+
Customize the back button appearance and behavior:
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
<Stack.Screen name="detail">
|
|
99
|
+
<Stack.Header>
|
|
100
|
+
<Stack.Header.Title>Detail</Stack.Header.Title>
|
|
101
|
+
<Stack.Header.BackButton
|
|
102
|
+
displayMode="minimal"
|
|
103
|
+
hidden={false}
|
|
104
|
+
>
|
|
105
|
+
Back
|
|
106
|
+
</Stack.Header.BackButton>
|
|
107
|
+
</Stack.Header>
|
|
108
|
+
</Stack.Screen>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Custom Header Component
|
|
112
|
+
|
|
113
|
+
Replace the entire header with a custom component:
|
|
114
|
+
|
|
115
|
+
```tsx
|
|
116
|
+
<Stack.Screen name="custom">
|
|
117
|
+
<Stack.Header asChild>
|
|
118
|
+
<CustomHeader />
|
|
119
|
+
</Stack.Header>
|
|
120
|
+
</Stack.Screen>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Combining with Options
|
|
124
|
+
|
|
125
|
+
You can combine the composition API with the traditional options prop:
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
<Stack.Screen
|
|
129
|
+
name="mixed"
|
|
130
|
+
options={{
|
|
131
|
+
animation: 'slide_from_right',
|
|
132
|
+
gestureEnabled: true,
|
|
133
|
+
}}
|
|
134
|
+
>
|
|
135
|
+
<Stack.Header>
|
|
136
|
+
<Stack.Header.Title large>Mixed Config</Stack.Header.Title>
|
|
137
|
+
</Stack.Header>
|
|
138
|
+
</Stack.Screen>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## API Reference
|
|
142
|
+
|
|
143
|
+
### Stack.Header Props
|
|
144
|
+
|
|
145
|
+
| Prop | Type | Description |
|
|
146
|
+
|------|------|-------------|
|
|
147
|
+
| `hidden` | `boolean` | Hide the header entirely |
|
|
148
|
+
| `asChild` | `boolean` | Render children as the entire header |
|
|
149
|
+
| `blurEffect` | `'regular' \| 'prominent' \| ...` | iOS blur effect |
|
|
150
|
+
| `style` | `StyleProp` | Header style (backgroundColor, shadowColor) |
|
|
151
|
+
| `largeStyle` | `StyleProp` | Large title header style |
|
|
152
|
+
|
|
153
|
+
### Stack.Header.Title Props
|
|
154
|
+
|
|
155
|
+
| Prop | Type | Description |
|
|
156
|
+
|------|------|-------------|
|
|
157
|
+
| `children` | `string` | Title text |
|
|
158
|
+
| `large` | `boolean` | Enable large title mode |
|
|
159
|
+
| `style` | `StyleProp` | Title text style |
|
|
160
|
+
| `largeStyle` | `StyleProp` | Large title text style |
|
|
161
|
+
|
|
162
|
+
### Stack.Header.Left / Right Props
|
|
163
|
+
|
|
164
|
+
| Prop | Type | Description |
|
|
165
|
+
|------|------|-------------|
|
|
166
|
+
| `children` | `ReactNode` | Content to render |
|
|
167
|
+
| `asChild` | `boolean` | Required to render custom content |
|
|
168
|
+
|
|
169
|
+
### Stack.Header.BackButton Props
|
|
170
|
+
|
|
171
|
+
| Prop | Type | Description |
|
|
172
|
+
|------|------|-------------|
|
|
173
|
+
| `children` | `string` | Back button title |
|
|
174
|
+
| `hidden` | `boolean` | Hide the back button |
|
|
175
|
+
| `displayMode` | `'default' \| 'minimal' \| 'generic'` | Display mode |
|
|
176
|
+
| `withMenu` | `boolean` | Enable back button menu |
|
|
177
|
+
| `src` | `ImageSourcePropType` | Custom back button image |
|
|
178
|
+
| `style` | `TextStyle` | Back button title style |
|
|
179
|
+
|
|
180
|
+
### Stack.Header.SearchBar Props
|
|
181
|
+
|
|
182
|
+
Accepts all props from `react-native-screens` SearchBarProps.
|
|
183
|
+
|
|
184
|
+
## Comparison with Options API
|
|
185
|
+
|
|
186
|
+
**Traditional options API:**
|
|
187
|
+
```tsx
|
|
188
|
+
<Stack.Screen
|
|
189
|
+
name="index"
|
|
190
|
+
options={{
|
|
191
|
+
title: 'Welcome',
|
|
192
|
+
headerLargeTitle: true,
|
|
193
|
+
headerBlurEffect: 'regular',
|
|
194
|
+
headerRight: () => <Button>Action</Button>,
|
|
195
|
+
}}
|
|
196
|
+
/>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**Composition API:**
|
|
200
|
+
```tsx
|
|
201
|
+
<Stack.Screen name="index">
|
|
202
|
+
<Stack.Header blurEffect="regular">
|
|
203
|
+
<Stack.Header.Title large>Welcome</Stack.Header.Title>
|
|
204
|
+
<Stack.Header.Right asChild>
|
|
205
|
+
<Button>Action</Button>
|
|
206
|
+
</Stack.Header.Right>
|
|
207
|
+
</Stack.Header>
|
|
208
|
+
</Stack.Screen>
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Both approaches work, choose based on your preference. The composition API can be more readable for complex configurations.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { NativeStackNavigationOptions } from '@react-navigation/native-stack'
|
|
2
|
+
import type { ImageSourcePropType } from 'react-native'
|
|
3
|
+
import type { ScreenStackHeaderConfigProps } from 'react-native-screens'
|
|
4
|
+
|
|
5
|
+
export interface StackHeaderBackButtonProps {
|
|
6
|
+
children?: string
|
|
7
|
+
style?: NativeStackNavigationOptions['headerBackTitleStyle']
|
|
8
|
+
withMenu?: boolean
|
|
9
|
+
displayMode?: ScreenStackHeaderConfigProps['backButtonDisplayMode']
|
|
10
|
+
hidden?: boolean
|
|
11
|
+
src?: ImageSourcePropType
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Configuration component for the back button in stack headers.
|
|
16
|
+
*/
|
|
17
|
+
export function StackHeaderBackButton(_props: StackHeaderBackButtonProps) {
|
|
18
|
+
return null
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function appendStackHeaderBackButtonPropsToOptions(
|
|
22
|
+
options: NativeStackNavigationOptions,
|
|
23
|
+
props: StackHeaderBackButtonProps
|
|
24
|
+
): NativeStackNavigationOptions {
|
|
25
|
+
return {
|
|
26
|
+
...options,
|
|
27
|
+
headerBackTitle: props.children,
|
|
28
|
+
headerBackTitleStyle: props.style,
|
|
29
|
+
headerBackImageSource: props.src,
|
|
30
|
+
headerBackButtonDisplayMode: props.displayMode,
|
|
31
|
+
headerBackButtonMenuEnabled: props.withMenu,
|
|
32
|
+
headerBackVisible: props.hidden !== undefined ? !props.hidden : undefined,
|
|
33
|
+
}
|
|
34
|
+
}
|