@storybook/react-native 10.1.0 → 10.1.2-alpha.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/dist/index.js CHANGED
@@ -813,17 +813,25 @@ var errorContainerStyle = {
813
813
  alignItems: "center",
814
814
  justifyContent: "center"
815
815
  };
816
+ var layoutStyles = {
817
+ padded: { padding: 8 },
818
+ centered: { alignItems: "center", justifyContent: "center" },
819
+ fullscreen: {}
820
+ };
816
821
  var StoryView = ({ useWrapper = true }) => {
817
822
  const context = useStoryContext();
818
823
  const id = context?.id;
819
824
  const theme3 = (0, import_react_native_theming.useTheme)();
820
825
  const containerStyle = (0, import_react3.useMemo)(() => {
826
+ const layout = context?.parameters?.layout;
827
+ const layoutStyle = layout ? layoutStyles[layout] : {};
821
828
  return {
822
829
  flex: 1,
823
830
  backgroundColor: theme3.background?.content,
824
- overflow: "hidden"
831
+ overflow: "hidden",
832
+ ...layoutStyle
825
833
  };
826
- }, [theme3.background?.content]);
834
+ }, [theme3.background?.content, context?.parameters?.layout]);
827
835
  const onError = (0, import_react3.useCallback)(() => {
828
836
  console.log(`Error rendering story for ${context?.title} ${context?.name}`);
829
837
  }, [context?.title, context?.name]);
@@ -845,7 +853,7 @@ var StoryView = ({ useWrapper = true }) => {
845
853
  }
846
854
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ErrorBoundary, { onError, children: StoryComponent && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(StoryComponent, { ...context }) });
847
855
  }
848
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_native2.View, { style: errorContainerStyle, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Text2, { children: "Please open the sidebar and select a story to preview." }) });
856
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_native2.View, { style: errorContainerStyle, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Text2, { children: "Please select a story to preview." }) });
849
857
  };
850
858
  var StoryView_default = import_react3.default.memo(StoryView);
851
859
 
@@ -105,6 +105,38 @@ var require_common = __commonJS({
105
105
  }
106
106
  });
107
107
 
108
+ // scripts/require-interop.js
109
+ var require_require_interop = __commonJS({
110
+ "scripts/require-interop.js"(exports2, module2) {
111
+ var registered = false;
112
+ function interopRequireDefault(filePath) {
113
+ const hasEsbuildBeenRegistered = !!require("module")._extensions[".ts"];
114
+ if (registered === false && !hasEsbuildBeenRegistered) {
115
+ const { register } = require("esbuild-register/dist/node");
116
+ registered = true;
117
+ register({
118
+ target: `node${process.version.slice(1)}`,
119
+ format: "cjs",
120
+ hookIgnoreNodeModules: true,
121
+ // Some frameworks, like Stylus, rely on the 'name' property of classes or functions
122
+ // https://github.com/storybookjs/storybook/issues/19049
123
+ keepNames: true,
124
+ tsconfigRaw: `{
125
+ "compilerOptions": {
126
+ "strict": false,
127
+ "skipLibCheck": true,
128
+ },
129
+ }`
130
+ });
131
+ }
132
+ const result = require(filePath);
133
+ const isES6DefaultExported = typeof result === "object" && result !== null && typeof result.default !== "undefined";
134
+ return isES6DefaultExported ? result.default : result;
135
+ }
136
+ module2.exports = { interopRequireDefault };
137
+ }
138
+ });
139
+
108
140
  // scripts/generate.js
109
141
  var require_generate = __commonJS({
110
142
  "scripts/generate.js"(exports2, module2) {
@@ -116,9 +148,27 @@ var require_generate = __commonJS({
116
148
  getAddonName
117
149
  } = require_common();
118
150
  var { normalizeStories, globToRegexp, loadMainConfig } = require("storybook/internal/common");
151
+ var { interopRequireDefault } = require_require_interop();
119
152
  var fs = require("fs");
120
153
  var path2 = require("path");
121
154
  var cwd = process.cwd();
155
+ var loadMain = async ({ configPath, cwd: cwd2 }) => {
156
+ try {
157
+ const main = await loadMainConfig({ configDir: configPath, cwd: cwd2 });
158
+ return main;
159
+ } catch {
160
+ console.error("Error loading main config, trying fallback");
161
+ }
162
+ const mainPathTs = path2.resolve(cwd2, configPath, `main.ts`);
163
+ const mainPathJs = path2.resolve(cwd2, configPath, `main.js`);
164
+ if (fs.existsSync(mainPathTs)) {
165
+ return interopRequireDefault(mainPathTs);
166
+ } else if (fs.existsSync(mainPathJs)) {
167
+ return interopRequireDefault(mainPathJs);
168
+ } else {
169
+ throw new Error(`Main config file not found at ${mainPathTs} or ${mainPathJs}`);
170
+ }
171
+ };
122
172
  async function generate2({
123
173
  configPath,
124
174
  /* absolute = false, */
@@ -130,7 +180,7 @@ var require_generate = __commonJS({
130
180
  configPath,
131
181
  `storybook.requires.${useJs ? "js" : "ts"}`
132
182
  );
133
- const main = await loadMainConfig({ configDir: configPath, cwd });
183
+ const main = await loadMain({ configPath, cwd });
134
184
  const storiesSpecifiers = normalizeStories(main.stories, {
135
185
  configDir: configPath,
136
186
  workingDir: cwd
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/react-native",
3
- "version": "10.1.0",
3
+ "version": "10.1.2-alpha.0",
4
4
  "description": "A better way to develop React Native Components for your app",
5
5
  "keywords": [
6
6
  "react",
@@ -48,13 +48,14 @@
48
48
  "test:generate:update": "node --test --test-update-snapshots scripts/generate.test.js"
49
49
  },
50
50
  "dependencies": {
51
- "@storybook/react": "^10.1.0",
52
- "@storybook/react-native-theming": "^10.1.0",
53
- "@storybook/react-native-ui": "^10.1.0",
54
- "@storybook/react-native-ui-common": "^10.1.0",
51
+ "@storybook/react": "^10.1.2",
52
+ "@storybook/react-native-theming": "^10.1.2-alpha.0",
53
+ "@storybook/react-native-ui": "^10.1.2-alpha.0",
54
+ "@storybook/react-native-ui-common": "^10.1.2-alpha.0",
55
55
  "commander": "^14.0.2",
56
56
  "dedent": "^1.7.0",
57
57
  "deepmerge": "^4.3.1",
58
+ "esbuild-register": "^3.6.0",
58
59
  "react-native-url-polyfill": "^3.0.0",
59
60
  "setimmediate": "^1.0.5",
60
61
  "ws": "^8.18.3"
@@ -65,11 +66,11 @@
65
66
  "babel-jest": "^29.7.0",
66
67
  "babel-preset-expo": "^54.0.6",
67
68
  "jest": "^29.7.0",
68
- "jest-expo": "~54.0.13",
69
+ "jest-expo": "~54.0.16",
69
70
  "jotai": "^2.6.2",
70
71
  "react": "19.1.0",
71
72
  "react-native": "0.81.5",
72
- "storybook": "^10.1.0",
73
+ "storybook": "^10.1.2",
73
74
  "tsup": "^8.5.0",
74
75
  "typescript": "~5.9.3",
75
76
  "universal-test-renderer": "^0.6.0"
@@ -103,5 +104,5 @@
103
104
  "publishConfig": {
104
105
  "access": "public"
105
106
  },
106
- "gitHead": "af8cee5245b3a91761a4a07ae4bb695192c0a4c0"
107
+ "gitHead": "3c47e12910793c447acdd33e6ce8f9628c63019b"
107
108
  }
@@ -6,12 +6,32 @@ const {
6
6
  getAddonName,
7
7
  } = require('./common');
8
8
  const { normalizeStories, globToRegexp, loadMainConfig } = require('storybook/internal/common');
9
+ const { interopRequireDefault } = require('./require-interop');
9
10
  const fs = require('fs');
10
11
 
11
12
  const path = require('path');
12
13
 
13
14
  const cwd = process.cwd();
14
15
 
16
+ const loadMain = async ({ configPath, cwd }) => {
17
+ try {
18
+ const main = await loadMainConfig({ configDir: configPath, cwd });
19
+ return main;
20
+ } catch {
21
+ console.error('Error loading main config, trying fallback');
22
+ }
23
+
24
+ const mainPathTs = path.resolve(cwd, configPath, `main.ts`);
25
+ const mainPathJs = path.resolve(cwd, configPath, `main.js`);
26
+ if (fs.existsSync(mainPathTs)) {
27
+ return interopRequireDefault(mainPathTs);
28
+ } else if (fs.existsSync(mainPathJs)) {
29
+ return interopRequireDefault(mainPathJs);
30
+ } else {
31
+ throw new Error(`Main config file not found at ${mainPathTs} or ${mainPathJs}`);
32
+ }
33
+ };
34
+
15
35
  async function generate({ configPath, /* absolute = false, */ useJs = false, docTools = true }) {
16
36
  const storybookRequiresLocation = path.resolve(
17
37
  cwd,
@@ -19,9 +39,7 @@ async function generate({ configPath, /* absolute = false, */ useJs = false, doc
19
39
  `storybook.requires.${useJs ? 'js' : 'ts'}`
20
40
  );
21
41
 
22
- const main = await loadMainConfig({ configDir: configPath, cwd });
23
-
24
- // const reactNativeOptions = main.reactNativeOptions;
42
+ const main = await loadMain({ configPath, cwd });
25
43
 
26
44
  const storiesSpecifiers = normalizeStories(main.stories, {
27
45
  configDir: configPath,
@@ -0,0 +1,32 @@
1
+ let registered = false;
2
+ function interopRequireDefault(filePath) {
3
+ const hasEsbuildBeenRegistered = !!require('module')._extensions['.ts'];
4
+
5
+ if (registered === false && !hasEsbuildBeenRegistered) {
6
+ const { register } = require('esbuild-register/dist/node');
7
+ registered = true;
8
+ register({
9
+ target: `node${process.version.slice(1)}`,
10
+ format: 'cjs',
11
+ hookIgnoreNodeModules: true,
12
+ // Some frameworks, like Stylus, rely on the 'name' property of classes or functions
13
+ // https://github.com/storybookjs/storybook/issues/19049
14
+ keepNames: true,
15
+ tsconfigRaw: `{
16
+ "compilerOptions": {
17
+ "strict": false,
18
+ "skipLibCheck": true,
19
+ },
20
+ }`,
21
+ });
22
+ }
23
+
24
+ const result = require(filePath);
25
+
26
+ const isES6DefaultExported =
27
+ typeof result === 'object' && result !== null && typeof result.default !== 'undefined';
28
+
29
+ return isES6DefaultExported ? result.default : result;
30
+ }
31
+
32
+ module.exports = { interopRequireDefault };