Skip to content

Commit 1695965

Browse files
authored
Feat/v8 UI (#564)
1 parent f4a1516 commit 1695965

File tree

102 files changed

+32309
-5212
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+32309
-5212
lines changed

ROADMAP.md

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
# Roadmap
22

3-
Now that V6.5 is ready, we're looking to the future. Here's what we're working on next:
4-
5-
- Firstly stablise the V6.5 release
6-
- Version 7
7-
- Support story categorisation for more organisation in the story list sidebar
8-
- Experiment with use of metro’s experimental `require.context` to simplify story imports
9-
- Better testing support, potentially support interaction tests with the play function
10-
- Better integration with `@storybook/addon-react-native-web`
11-
- Better way to display addons to avoid shrinking the preview
12-
- … and more
3+
- [x] Create a roadmap
4+
- [ ] UI overhaul
5+
- [ ] Redo theming
6+
- [ ] integrate reanimated and gorhom as new dependencies
7+
- [ ] New storybook/react-native-ui library for ondevice ui components
8+
- [ ] implement new ondevice ui based on storybook v8 mobile design
9+
- [ ] improve controls api implementation to match more closely web api

examples/expo-example/.storybook/main.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { StorybookConfig } from '@storybook/react-native';
33
const main: StorybookConfig = {
44
stories: [
55
'../components/**/*.stories.?(ts|tsx|js|jsx)',
6+
'../../../packages/react-native-ui/**/*.stories.?(ts|tsx|js|jsx)',
67
{
78
directory: '../other_components',
89
files: '**/*.stories.?(ts|tsx|js|jsx)',
@@ -16,10 +17,10 @@ const main: StorybookConfig = {
1617
// '../components/**/*.storiesof.?(ts|tsx|js|jsx)',
1718
],
1819
addons: [
19-
'@storybook/addon-ondevice-notes',
2020
'@storybook/addon-ondevice-controls',
2121
'@storybook/addon-ondevice-backgrounds',
2222
'@storybook/addon-ondevice-actions',
23+
'@storybook/addon-ondevice-notes',
2324
],
2425
};
2526

examples/expo-example/.storybook/storybook.requires.ts

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
/* do not change this file, it is auto generated by storybook. */
22

3-
import {
4-
start,
5-
prepareStories,
6-
getProjectAnnotations,
7-
} from "@storybook/react-native";
3+
import { start, updateView } from "@storybook/react-native";
84

9-
import "@storybook/addon-ondevice-notes/register";
105
import "@storybook/addon-ondevice-controls/register";
116
import "@storybook/addon-ondevice-backgrounds/register";
127
import "@storybook/addon-ondevice-actions/register";
8+
import "@storybook/addon-ondevice-notes/register";
139

1410
const normalizedStories = [
1511
{
@@ -25,6 +21,19 @@ const normalizedStories = [
2521
/^\.(?:(?:^|\/|(?:(?:(?!(?:^|\/)\.).)*?)\/)(?!\.)(?=.)[^/]*?\.stories\.(?:ts|tsx|js|jsx)?)$/
2622
),
2723
},
24+
{
25+
titlePrefix: "",
26+
directory: "../../packages/react-native-ui",
27+
files: "**/*.stories.?(ts|tsx|js|jsx)",
28+
importPathMatcher:
29+
/^\.(?:(?:^|\/|(?:(?:(?!(?:^|\/)\.).)*?)\/)(?!\.)(?=.)[^/]*?\.stories\.(?:ts|tsx|js|jsx)?)$/,
30+
// @ts-ignore
31+
req: require.context(
32+
"../../../packages/react-native-ui",
33+
true,
34+
/^\.(?:(?:^|\/|(?:(?:(?!(?:^|\/)\.).)*?)\/)(?!\.)(?=.)[^/]*?\.stories\.(?:ts|tsx|js|jsx)?)$/
35+
),
36+
},
2837
{
2938
titlePrefix: "OtherComponents",
3039
directory: "./other_components",
@@ -62,15 +71,7 @@ if (!global.view) {
6271
storyEntries: normalizedStories,
6372
});
6473
} else {
65-
const { importMap } = prepareStories({ storyEntries: normalizedStories });
66-
67-
global.view._preview.onStoriesChanged({
68-
importFn: async (importPath: string) => importMap[importPath],
69-
});
70-
71-
global.view._preview.onGetProjectAnnotationsChanged({
72-
getProjectAnnotations: getProjectAnnotations(global.view, annotations),
73-
});
74+
updateView(global.view, annotations, normalizedStories);
7475
}
7576

7677
export const view = global.view;

examples/expo-example/components/ActionExample/Actions.stories.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import type { Meta, StoryObj } from '@storybook/react';
2+
23
import { ActionButton } from './Actions';
34

45
const meta = {
56
title: 'ActionButton',
67
component: ActionButton,
78
argTypes: {
8-
onPress: { action: 'pressed the button' },
9+
onPress: { action: 'pressed' },
910
},
1011
args: {
1112
text: 'Press me!',

examples/expo-example/components/ActionExample/Actions.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import React from 'react';
21
import { TouchableOpacity, Text, StyleSheet } from 'react-native';
32

43
interface ActionButtonProps {
5-
onPress: () => void;
4+
onPress?: () => void;
65
text: string;
76
}
87

examples/expo-example/metro.config.js

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,19 @@
11
// Learn more https://docs.expo.io/guides/customizing-metro
22
const { getDefaultConfig } = require('expo/metro-config');
3-
const { mergeConfig } = require('metro-config');
43
const path = require('path');
54
const defaultConfig = getDefaultConfig(__dirname);
65

7-
// const { writeRequires } = require('@storybook/react-native/scripts/loader');
86
const { generate } = require('@storybook/react-native/scripts/generate');
97

108
generate({
119
configPath: path.resolve(__dirname, './.storybook'),
1210
});
1311

14-
// writeRequires({
15-
// configPath: path.resolve(__dirname, './.storybook'),
16-
// unstable_useRequireContext: false,
17-
// });
12+
defaultConfig.transformer.unstable_allowRequireContext = true;
1813

19-
module.exports = (async () => {
20-
return mergeConfig(defaultConfig, {
21-
resolver: {
22-
// unstable_enablePackageExports: true,
23-
disableHierarchicalLookup: true,
24-
unstable_enableSymlinks: true,
25-
resolveRequest: (context, moduleName, platform) => {
26-
const defaultResolveResult = context.resolveRequest(context, moduleName, platform);
14+
defaultConfig.watchFolders.push('../../packages/react-native-ui');
2715

28-
if (
29-
process.env.STORYBOOK_ENABLED !== 'true' &&
30-
defaultResolveResult?.filePath?.includes?.('.storybook/')
31-
) {
32-
return {
33-
type: 'empty',
34-
};
35-
}
16+
// causing breakage :(
17+
// defaultConfig.resolver.disableHierarchicalLookup = true;
3618

37-
return defaultResolveResult;
38-
},
39-
},
40-
transformer: {
41-
unstable_allowRequireContext: true,
42-
},
43-
});
44-
})();
19+
module.exports = defaultConfig;

examples/expo-example/package.json

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "expo-example",
3-
"version": "8.0.0-alpha.2",
3+
"version": "8.0.0-alpha.4",
44
"private": true,
55
"main": "index.js",
66
"scripts": {
@@ -19,36 +19,41 @@
1919
"test:ci": "jest --runInBand"
2020
},
2121
"dependencies": {
22-
"@expo/metro-runtime": "^3.1.1",
22+
"@expo/metro-runtime": "~3.1.3",
23+
"@gorhom/bottom-sheet": "^4",
2324
"@react-native-async-storage/async-storage": "1.21.0",
2425
"@react-native-community/datetimepicker": "7.6.1",
2526
"@react-native-community/slider": "4.4.2",
26-
"@storybook/addon-essentials": "8.0.0-rc.3",
27-
"@storybook/addon-interactions": "8.0.0-rc.3",
28-
"@storybook/addon-links": "8.0.0-rc.3",
29-
"@storybook/addon-ondevice-actions": "^8.0.0-alpha.2",
30-
"@storybook/addon-ondevice-backgrounds": "^8.0.0-alpha.2",
31-
"@storybook/addon-ondevice-controls": "^8.0.0-alpha.2",
32-
"@storybook/addon-ondevice-notes": "^8.0.0-alpha.2",
27+
"@storybook/addon-essentials": "^8",
28+
"@storybook/addon-interactions": "^8",
29+
"@storybook/addon-links": "^8",
30+
"@storybook/addon-ondevice-actions": "^8.0.0-alpha.4",
31+
"@storybook/addon-ondevice-backgrounds": "^8.0.0-alpha.4",
32+
"@storybook/addon-ondevice-controls": "^8.0.0-alpha.4",
33+
"@storybook/addon-ondevice-notes": "^8.0.0-alpha.4",
3334
"@storybook/addon-react-native-server": "0.0.5",
3435
"@storybook/addon-react-native-web": "^0.0.22",
35-
"@storybook/blocks": "8.0.0-rc.3",
36-
"@storybook/builder-webpack5": "8.0.0-rc.3",
37-
"@storybook/core-common": "8.0.0-rc.3",
38-
"@storybook/docs-tools": "8.0.0-rc.3",
36+
"@storybook/blocks": "^8",
37+
"@storybook/builder-webpack5": "^8",
38+
"@storybook/core-common": "^8",
39+
"@storybook/docs-tools": "^8",
3940
"@storybook/global": "^5.0.0",
40-
"@storybook/react": "8.0.0-rc.3",
41-
"@storybook/react-native": "^8.0.0-alpha.2",
42-
"@storybook/react-webpack5": "8.0.0-rc.3",
43-
"@storybook/test": "8.0.0-rc.3",
44-
"expo": "^50.0.2",
41+
"@storybook/react": "^8",
42+
"@storybook/react-native": "^8.0.0-alpha.4",
43+
"@storybook/react-native-theming": "^8.0.0-alpha.4",
44+
"@storybook/react-webpack5": "^8",
45+
"@storybook/test": "^8",
46+
"expo": "~50.0.14",
4547
"querystring": "^0.2.1",
4648
"react": "18.2.0",
4749
"react-dom": "18.2.0",
48-
"react-native": "0.73.2",
50+
"react-native": "0.73.6",
51+
"react-native-gesture-handler": "~2.14.1",
52+
"react-native-reanimated": "~3.6.2",
4953
"react-native-safe-area-context": "4.8.2",
54+
"react-native-svg": "14.1.0",
5055
"react-native-web": "~0.19.6",
51-
"storybook": "8.0.0-rc.3",
56+
"storybook": "^8",
5257
"ws": "^8.16.0"
5358
},
5459
"devDependencies": {
@@ -61,10 +66,9 @@
6166
"@types/ws": "^8.5.10",
6267
"babel-loader": "^9.1.3",
6368
"babel-plugin-react-docgen-typescript": "^1.5.1",
64-
"jest": "29.7.0",
65-
"jest-expo": "50.0.1",
69+
"jest": "^29.7.0",
70+
"jest-expo": "~50.0.4",
6671
"metro-react-native-babel-preset": "^0.77.0",
67-
"ts-node": "^10.9.1",
6872
"typescript": "^5.3.3"
6973
},
7074
"jest": {

lerna.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"npmClient": "yarn",
33
"registry": "https://registry.npmjs.org",
4-
"version": "8.0.0-alpha.2"
4+
"version": "8.0.0-alpha.4"
55
}

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,13 @@
4242
"publish:next": "lerna publish from-git --dist-tag next",
4343
"test:ci": "lerna run test:ci",
4444
"test": "lerna run test",
45-
"check-mismatched-deps": "ts-node ./check-matching-deps.ts"
45+
"check-mismatched-deps": "npx tsx ./check-matching-deps.ts"
4646
},
4747
"devDependencies": {
4848
"@react-native/eslint-config": "^0.72.1",
4949
"cross-env": "^7.0.3",
5050
"eslint": "8.24.0",
5151
"lerna": "^8.1.2",
52-
"ts-node": "^10.9.1",
5352
"typescript": "^5.3.3"
5453
},
5554
"resolutions": {

packages/ondevice-actions/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@storybook/addon-ondevice-actions",
3-
"version": "8.0.0-alpha.2",
3+
"version": "8.0.0-alpha.4",
44
"description": "Action Logger addon for react-native storybook",
55
"keywords": [
66
"storybook"
@@ -27,10 +27,10 @@
2727
"prepare": "tsc"
2828
},
2929
"dependencies": {
30-
"@storybook/addon-actions": "8.0.0-rc.3",
31-
"@storybook/core-events": "8.0.0-rc.3",
30+
"@storybook/addon-actions": "^8",
31+
"@storybook/core-events": "^8",
3232
"@storybook/global": "^5.0.0",
33-
"@storybook/manager-api": "8.0.0-rc.3",
33+
"@storybook/manager-api": "^8",
3434
"fast-deep-equal": "^2.0.1"
3535
},
3636
"devDependencies": {

packages/ondevice-backgrounds/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@storybook/addon-ondevice-backgrounds",
3-
"version": "8.0.0-alpha.2",
3+
"version": "8.0.0-alpha.4",
44
"description": "A react-native storybook addon to show different backgrounds for your preview",
55
"keywords": [
66
"addon",
@@ -32,9 +32,9 @@
3232
"dev": "tsc --watch"
3333
},
3434
"dependencies": {
35-
"@storybook/manager-api": "8.0.0-rc.3",
36-
"@storybook/preview-api": "8.0.0-rc.3",
37-
"@storybook/react-native-theming": "^8.0.0-alpha.2"
35+
"@storybook/manager-api": "^8",
36+
"@storybook/preview-api": "^8",
37+
"@storybook/react-native-theming": "^8.0.0-alpha.4"
3838
},
3939
"devDependencies": {
4040
"typescript": "^5.3.3"

packages/ondevice-controls/package.json

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@storybook/addon-ondevice-controls",
3-
"version": "8.0.0-alpha.2",
3+
"version": "8.0.0-alpha.4",
44
"description": "Display storybook controls on your device.",
55
"keywords": [
66
"addon",
@@ -30,12 +30,12 @@
3030
"copyimages": "cross-env-shell cp -r src/components/color-picker/resources dist/components/color-picker/resources"
3131
},
3232
"dependencies": {
33-
"@storybook/addon-controls": "8.0.0-rc.3",
34-
"@storybook/channels": "8.0.0-rc.3",
35-
"@storybook/client-logger": "8.0.0-rc.3",
36-
"@storybook/core-events": "8.0.0-rc.3",
37-
"@storybook/manager-api": "8.0.0-rc.3",
38-
"@storybook/react-native-theming": "^8.0.0-alpha.2",
33+
"@storybook/addon-controls": "^8",
34+
"@storybook/channels": "^8",
35+
"@storybook/client-logger": "^8",
36+
"@storybook/core-events": "^8",
37+
"@storybook/manager-api": "^8",
38+
"@storybook/react-native-theming": "^8.0.0-alpha.4",
3939
"deep-equal": "^1.0.1",
4040
"prop-types": "^15.7.2",
4141
"react-native-modal-datetime-picker": "^14.0.0",
@@ -47,6 +47,7 @@
4747
"typescript": "^5.3.3"
4848
},
4949
"peerDependencies": {
50+
"@gorhom/bottom-sheet": ">=4",
5051
"@react-native-community/datetimepicker": "*",
5152
"@react-native-community/slider": "*",
5253
"react": "*",

packages/ondevice-controls/src/types/Array.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ import { styled } from '@storybook/react-native-theming';
33

44
import { inputStyle } from './common';
55
import { useResyncValue } from './useResyncValue';
6+
import { BottomSheetTextInput } from '@gorhom/bottom-sheet';
67

7-
const Input = styled.TextInput(({ theme }) => ({
8+
const Input = styled(BottomSheetTextInput)(({ theme }) => ({
89
...inputStyle(theme),
910
}));
1011

packages/ondevice-controls/src/types/Number.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ import { View } from 'react-native';
55

66
import { inputStyle } from './common';
77
import { useResyncValue } from './useResyncValue';
8+
import { BottomSheetTextInput } from '@gorhom/bottom-sheet';
89

9-
const Input = styled.TextInput<{ showError: boolean }>(({ theme, showError }) => {
10+
const Input = styled(BottomSheetTextInput)<{ showError: boolean }>(({ theme, showError }) => {
1011
const style = inputStyle(theme);
1112
return {
1213
...style,

packages/ondevice-controls/src/types/Object.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { ViewStyle } from 'react-native';
44

55
import { useResyncValue } from './useResyncValue';
66
import { inputStyle } from './common';
7+
import { BottomSheetTextInput } from '@gorhom/bottom-sheet';
78

89
export interface ObjectProps {
910
arg: {
@@ -14,7 +15,7 @@ export interface ObjectProps {
1415
isPristine: boolean;
1516
}
1617

17-
const Input = styled.TextInput(({ theme }) => ({
18+
const Input = styled(BottomSheetTextInput)(({ theme }) => ({
1819
...inputStyle(theme, false),
1920
minHeight: 60,
2021
}));

0 commit comments

Comments
 (0)