storybook-solidjs-vite 10.2.0 → 10.4.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/README.md +65 -60
- package/dist/{SolidComponentMetaManager-KXVARPHU.js → SolidComponentMetaManager-4SWET2OG.js} +3 -3
- package/dist/{SolidComponentMetaManager-KXVARPHU.js.map → SolidComponentMetaManager-4SWET2OG.js.map} +1 -1
- package/dist/before-all-MeQv4iKF.d.ts +4 -0
- package/dist/{chunk-D5AOR3VU.js → chunk-4R2BK5SE.js} +83 -24
- package/dist/chunk-4R2BK5SE.js.map +1 -0
- package/dist/chunk-FGS26NTB.js +68 -0
- package/dist/chunk-FGS26NTB.js.map +1 -0
- package/dist/{chunk-QRPXDQGQ.js → chunk-KZXNQC4Q.js} +10 -10
- package/dist/chunk-KZXNQC4Q.js.map +1 -0
- package/dist/{chunk-FGHVLJAL.js → chunk-LKTA6WTO.js} +14 -7
- package/dist/chunk-LKTA6WTO.js.map +1 -0
- package/dist/chunk-NOGINBE3.js +8 -0
- package/dist/chunk-NOGINBE3.js.map +1 -0
- package/dist/{chunk-GZ3XWUGK.js → chunk-OHDHM5OZ.js} +20 -16
- package/dist/chunk-OHDHM5OZ.js.map +1 -0
- package/dist/chunk-QCGKL2ZI.js +70 -0
- package/dist/chunk-QCGKL2ZI.js.map +1 -0
- package/dist/{chunk-6566KBHG.js → chunk-TKOWB3JL.js} +6 -6
- package/dist/chunk-TKOWB3JL.js.map +1 -0
- package/dist/{chunk-H7QHQTFU.js → chunk-UQOUKQDU.js} +6 -6
- package/dist/chunk-UQOUKQDU.js.map +1 -0
- package/dist/define-preview-eX4EepPY.d.ts +41 -0
- package/dist/framework/preset.d.ts +2 -83
- package/dist/framework/preset.js +17 -348
- package/dist/framework/preset.js.map +1 -1
- package/dist/index.d.ts +10 -49
- package/dist/index.js +9 -19
- package/dist/index.js.map +1 -1
- package/dist/next.d.ts +10 -49
- package/dist/next.js +9 -19
- package/dist/next.js.map +1 -1
- package/dist/node.d.ts +8 -0
- package/dist/node.js +4 -0
- package/dist/{renderer/playwright.js → playwright.js} +1 -1
- package/dist/{public-types-BZgbgZlw.d.ts → public-api-CJkmyX7u.d.ts} +5 -1
- package/dist/{entry-preview → renderer}/argtypes.d.ts +1 -1
- package/dist/renderer/argtypes.js +4 -0
- package/dist/{entry-preview → renderer}/docs.d.ts +1 -1
- package/dist/{entry-preview → renderer}/docs.js +1 -1
- package/dist/renderer/solid-1.d.ts +16 -0
- package/dist/renderer/solid-1.js +5 -0
- package/dist/renderer/solid-2.d.ts +16 -0
- package/dist/renderer/solid-2.js +5 -0
- package/dist/renderer.d.ts +109 -2
- package/dist/renderer.js +948 -5
- package/dist/renderer.js.map +1 -1
- package/dist/toDocgenInfo-LDHSOTP4.js +4 -0
- package/dist/{toDocgenInfo-PQOQHVB2.js.map → toDocgenInfo-LDHSOTP4.js.map} +1 -1
- package/dist/{types-3qJHo3rN.d.ts → types-DkyU_XEU.d.ts} +1 -2
- package/package.json +28 -28
- package/src/framework/preset.ts +16 -4
- package/src/framework/{node.ts → public-api.ts} +2 -0
- package/src/framework/types.ts +0 -2
- package/src/index.ts +6 -4
- package/src/internal/codeExamples/enrichCsf.ts +106 -0
- package/src/internal/codeExamples/generateCodeSnippet.test.ts +235 -0
- package/src/internal/codeExamples/generateCodeSnippet.ts +728 -0
- package/src/internal/codeExamples/invariant.ts +11 -0
- package/src/{componentManifest → internal/componentManifest}/manifests.ts +31 -12
- package/src/internal/componentManifest/toDocgenInfo.test.ts +39 -0
- package/src/{componentManifest → internal/componentManifest}/toDocgenInfo.ts +20 -5
- package/src/{framework → internal}/solidVersion.ts +4 -19
- package/src/next.ts +6 -7
- package/src/node.ts +2 -0
- package/src/{renderer/v2 → preview}/define-preview.ts +46 -8
- package/src/{renderer/shared/public-types.ts → preview/public-api.ts} +24 -1
- package/src/renderer/{docs/entry-preview-argtypes.ts → argtypes.ts} +18 -13
- package/src/renderer/{docs/entry-preview.ts → docs.ts} +1 -1
- package/src/renderer/index.ts +17 -14
- package/src/renderer/shared/apply-decorators.ts +10 -16
- package/src/renderer/shared/{preview-annotations.ts → before-all.ts} +0 -25
- package/src/renderer/shared/default-render.ts +16 -0
- package/src/renderer/shared/mount.ts +37 -0
- package/src/renderer/shared/render-to-canvas.ts +72 -0
- package/src/renderer/shared/story-store.ts +1 -1
- package/src/renderer/solid-1.ts +90 -0
- package/src/renderer/solid-2.ts +94 -0
- package/dist/chunk-6566KBHG.js.map +0 -1
- package/dist/chunk-7IQZHF5A.js +0 -87
- package/dist/chunk-7IQZHF5A.js.map +0 -1
- package/dist/chunk-D5AOR3VU.js.map +0 -1
- package/dist/chunk-FGHVLJAL.js.map +0 -1
- package/dist/chunk-GF3JOYAC.js +0 -89
- package/dist/chunk-GF3JOYAC.js.map +0 -1
- package/dist/chunk-GZ3XWUGK.js.map +0 -1
- package/dist/chunk-H7QHQTFU.js.map +0 -1
- package/dist/chunk-NNSMHFZY.js +0 -42
- package/dist/chunk-NNSMHFZY.js.map +0 -1
- package/dist/chunk-QRPXDQGQ.js.map +0 -1
- package/dist/chunk-T3EBLI6L.js +0 -8
- package/dist/chunk-T3EBLI6L.js.map +0 -1
- package/dist/entry-preview/argtypes.js +0 -4
- package/dist/entry-preview/solid-1.d.ts +0 -14
- package/dist/entry-preview/solid-1.js +0 -5
- package/dist/entry-preview/solid-2.d.ts +0 -14
- package/dist/entry-preview/solid-2.js +0 -5
- package/dist/framework/node.d.ts +0 -7
- package/dist/framework/node.js +0 -4
- package/dist/preview-annotations-CYD5LX4X.d.ts +0 -13
- package/dist/toDocgenInfo-PQOQHVB2.js +0 -4
- package/src/renderer/shared/create-define-preview.ts +0 -45
- package/src/renderer/v1/define-preview.ts +0 -101
- package/src/renderer/v1/entry-preview.ts +0 -115
- package/src/renderer/v1/index.ts +0 -5
- package/src/renderer/v1/public-api.ts +0 -29
- package/src/renderer/v2/entry-preview.ts +0 -116
- package/src/renderer/v2/index.ts +0 -5
- package/src/renderer/v2/public-api.ts +0 -29
- /package/dist/{framework/node.js.map → node.js.map} +0 -0
- /package/dist/{renderer/playwright.d.ts → playwright.d.ts} +0 -0
- /package/dist/{renderer/playwright.js.map → playwright.js.map} +0 -0
- /package/dist/{entry-preview → renderer}/argtypes.js.map +0 -0
- /package/dist/{entry-preview → renderer}/docs.js.map +0 -0
- /package/dist/{entry-preview → renderer}/solid-1.js.map +0 -0
- /package/dist/{entry-preview → renderer}/solid-2.js.map +0 -0
- /package/src/{componentManifest → internal/componentManifest}/getComponents.ts +0 -0
- /package/src/{componentManifest → internal/componentManifest}/solidComponentMeta/SolidComponentMetaManager.ts +0 -0
- /package/src/{componentManifest → internal/componentManifest}/solidComponentMeta/SolidComponentMetaProject.ts +0 -0
- /package/src/{componentManifest → internal/componentManifest}/solidComponentMeta/resolveProps.ts +0 -0
- /package/src/{componentManifest → internal/componentManifest}/solidComponentMetaPlugin.ts +0 -0
- /package/src/{componentManifest → internal/componentManifest}/types.ts +0 -0
- /package/src/{renderer/playwright.ts → playwright.ts} +0 -0
package/README.md
CHANGED
|
@@ -9,16 +9,16 @@
|
|
|
9
9
|
[](./LICENSE)
|
|
10
10
|
[](https://github.com/solidjs-community/storybook/pulls)
|
|
11
11
|
|
|
12
|
-
[Storybook](https://storybook.js.org/)
|
|
13
|
-
|
|
14
|
-
Adds SolidJS support to Storybook.
|
|
12
|
+
[Storybook](https://storybook.js.org/) framework adapter for [SolidJS](https://solidjs.com/) on Vite.
|
|
15
13
|
|
|
16
14
|
## ✨ Features
|
|
17
15
|
|
|
18
16
|
- [Solid 1](#solid-1) and [Solid 2](#solid-2) support
|
|
19
17
|
- [Vite-powered builder](https://storybook.js.org/docs/builders/vite)
|
|
20
18
|
- [TypeScript-first setup](https://storybook.js.org/docs/configure/integration/typescript)
|
|
21
|
-
-
|
|
19
|
+
- Automatic props in [Controls and Docs](#docgen)
|
|
20
|
+
- [Autodocs code snippets](#autodocs-code-snippets) — static JSX **Show code** blocks from story source (CSF Next + CSF3, enabled by default)
|
|
21
|
+
- [Components manifest](https://storybook.js.org/docs/ai/manifests) for AI agents ([debugger](#components-manifest-debugger))
|
|
22
22
|
- [Storybook MCP](https://storybook.js.org/docs/ai/mcp/overview) support ([setup](#storybook-mcp))
|
|
23
23
|
- [CSF Next](https://storybook.js.org/docs/api/csf/csf-next) factory API ([setup](#csf-next), optional)
|
|
24
24
|
- [Integrated testing](https://storybook.js.org/docs/writing-tests) (Vitest, Playwright)
|
|
@@ -30,26 +30,18 @@ Run in your project:
|
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
32
|
npx create-storybook --type=solid
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Then start Storybook:
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
bun run storybook
|
|
33
|
+
npm run storybook
|
|
39
34
|
```
|
|
40
35
|
|
|
41
36
|
Open the URL shown in the terminal.
|
|
42
37
|
|
|
43
38
|
## ⚙️ Configuration
|
|
44
39
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
- Add stories in `src/**/*.stories.tsx` or `src/**/*.stories.js`
|
|
48
|
-
- Use Storybook addons for additional functionality
|
|
40
|
+
Customize Vite and Storybook as usual. Add stories in `src/**/*.stories.{tsx,js}` and install addons as needed.
|
|
49
41
|
|
|
50
42
|
### Solid 1
|
|
51
43
|
|
|
52
|
-
|
|
44
|
+
Import from `storybook-solidjs-vite` in config, preview, and stories:
|
|
53
45
|
|
|
54
46
|
```ts
|
|
55
47
|
// .storybook/main.ts
|
|
@@ -69,21 +61,19 @@ import type { Preview, Meta, StoryObj } from 'storybook-solidjs-vite';
|
|
|
69
61
|
|
|
70
62
|
### Solid 2
|
|
71
63
|
|
|
72
|
-
|
|
64
|
+
Use `storybook-solidjs-vite/next` in preview and stories:
|
|
73
65
|
|
|
74
66
|
```ts
|
|
75
67
|
import type { Preview, Meta, StoryObj } from 'storybook-solidjs-vite/next';
|
|
76
68
|
```
|
|
77
69
|
|
|
78
|
-
Imports without `/next`
|
|
70
|
+
Imports without `/next` may still run, but TypeScript can complain.
|
|
79
71
|
|
|
80
|
-
In `main.ts
|
|
72
|
+
In `main.ts`, either framework name works: `storybook-solidjs-vite` reads the major version from `solid-js`; `storybook-solidjs-vite/next` forces Solid 2.
|
|
81
73
|
|
|
82
74
|
```ts
|
|
83
|
-
// Solid
|
|
84
|
-
framework: 'storybook-solidjs-vite'
|
|
85
|
-
// Solid 2
|
|
86
|
-
framework: 'storybook-solidjs-vite/next'
|
|
75
|
+
framework: 'storybook-solidjs-vite' // Solid auto-detect
|
|
76
|
+
framework: 'storybook-solidjs-vite/next' // Solid 2 only
|
|
87
77
|
```
|
|
88
78
|
|
|
89
79
|
### CSF Next
|
|
@@ -92,7 +82,7 @@ framework: 'storybook-solidjs-vite/next'
|
|
|
92
82
|
|
|
93
83
|
```ts
|
|
94
84
|
// .storybook/main.ts
|
|
95
|
-
import { defineMain } from 'storybook-solidjs-vite
|
|
85
|
+
import { defineMain } from 'storybook-solidjs-vite';
|
|
96
86
|
|
|
97
87
|
export default defineMain({
|
|
98
88
|
framework: { name: 'storybook-solidjs-vite' },
|
|
@@ -101,9 +91,14 @@ export default defineMain({
|
|
|
101
91
|
|
|
102
92
|
```ts
|
|
103
93
|
// .storybook/preview.tsx
|
|
94
|
+
import addonDocs from '@storybook/addon-docs';
|
|
104
95
|
import { definePreview } from 'storybook-solidjs-vite';
|
|
105
96
|
// for Solid 2, use:
|
|
106
|
-
import { definePreview } from 'storybook-solidjs-vite/next';
|
|
97
|
+
// import { definePreview } from 'storybook-solidjs-vite/next';
|
|
98
|
+
|
|
99
|
+
export default definePreview({
|
|
100
|
+
addons: [addonDocs()],
|
|
101
|
+
});
|
|
107
102
|
```
|
|
108
103
|
|
|
109
104
|
```ts
|
|
@@ -122,13 +117,11 @@ export const Primary = meta.story({
|
|
|
122
117
|
|
|
123
118
|
### Docgen
|
|
124
119
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
Docgen is **enabled by default**. The components manifest debugger is also enabled at:
|
|
120
|
+
Props for **Controls**, **Docs**, and the **components manifest** come from a TypeScript LanguageService extractor aligned with Storybook's `react-component-meta` format.
|
|
128
121
|
|
|
129
|
-
|
|
122
|
+
Enabled by default. Inspect output in the [manifest debugger](#components-manifest-debugger).
|
|
130
123
|
|
|
131
|
-
To disable
|
|
124
|
+
To disable:
|
|
132
125
|
|
|
133
126
|
```ts
|
|
134
127
|
import type { StorybookConfig } from 'storybook-solidjs-vite';
|
|
@@ -136,9 +129,25 @@ import type { StorybookConfig } from 'storybook-solidjs-vite';
|
|
|
136
129
|
const config: StorybookConfig = {
|
|
137
130
|
framework: {
|
|
138
131
|
name: 'storybook-solidjs-vite',
|
|
139
|
-
options: {
|
|
140
|
-
|
|
141
|
-
|
|
132
|
+
options: { docgen: false },
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
export default config;
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Autodocs code snippets
|
|
140
|
+
|
|
141
|
+
**Show code** blocks are static snippets generated from story source at index time (`experimentalCodeExamples`). Enabled by default.
|
|
142
|
+
|
|
143
|
+
To disable:
|
|
144
|
+
|
|
145
|
+
```ts
|
|
146
|
+
import type { StorybookConfig } from 'storybook-solidjs-vite';
|
|
147
|
+
|
|
148
|
+
const config: StorybookConfig = {
|
|
149
|
+
features: {
|
|
150
|
+
experimentalCodeExamples: false
|
|
142
151
|
},
|
|
143
152
|
};
|
|
144
153
|
|
|
@@ -153,61 +162,57 @@ Solid projects can use [Storybook MCP](https://storybook.js.org/docs/ai/mcp/over
|
|
|
153
162
|
npx storybook add @storybook/addon-mcp
|
|
154
163
|
```
|
|
155
164
|
|
|
156
|
-
|
|
165
|
+
See [Storybook MCP docs](https://storybook.js.org/docs/ai/mcp/overview#2-add-the-mcp-server-to-your-agent) for agent setup.
|
|
157
166
|
|
|
158
|
-
|
|
167
|
+
### Components manifest debugger
|
|
159
168
|
|
|
160
|
-
|
|
169
|
+
Storybook builds [JSON manifests](https://storybook.js.org/docs/ai/manifests) from CSF stories and component source — names, props, JSDoc, story ids, and more. Enabled by default (`features.componentsManifest`). Prop data comes from [docgen](#docgen); story snippets use the same [code generator](#autodocs-code-snippets).
|
|
170
|
+
|
|
171
|
+
While Storybook runs (or in a static build):
|
|
172
|
+
|
|
173
|
+
- **Debugger UI:** `http://localhost:6006/manifests/components.html` — browse manifests and generation errors/warnings
|
|
174
|
+
- **Components JSON:** `http://localhost:6006/manifests/components.json`
|
|
175
|
+
- **Docs JSON:** `http://localhost:6006/manifests/docs.json` (when MDX docs are present)
|
|
176
|
+
|
|
177
|
+
## 🎨 Decorators
|
|
161
178
|
|
|
162
|
-
|
|
179
|
+
On args or globals changes, Storybook re-runs decorators and stories functions follows React reactivity model. Solid updates via fine-grained signals and usually doesn't need that. JSX decorators re-run can leave duplicate DOM nodes. To avoid this, use `createJSXDecorator` function to define decorators that return JSX.
|
|
163
180
|
|
|
164
181
|
### createJSXDecorator
|
|
165
182
|
|
|
166
|
-
|
|
183
|
+
For decorators that return JSX. Runs once per story mount — `context.globals` and `context.args` are reactive stores, so bindings in JSX still update without re-running the decorator:
|
|
167
184
|
|
|
168
185
|
```tsx
|
|
169
186
|
import { createJSXDecorator } from 'storybook-solidjs-vite';
|
|
170
187
|
|
|
171
|
-
export const
|
|
172
|
-
|
|
173
|
-
<
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
);
|
|
177
|
-
});
|
|
188
|
+
export const withLayout = createJSXDecorator((Story, context) => (
|
|
189
|
+
<main data-theme={context.globals.theme}>
|
|
190
|
+
<Story />
|
|
191
|
+
</main>
|
|
192
|
+
));
|
|
178
193
|
```
|
|
179
194
|
|
|
180
195
|
### createDecorator
|
|
181
196
|
|
|
182
|
-
|
|
197
|
+
For side effects that should run on every story update — e.g. sync `document.body` when globals change:
|
|
183
198
|
|
|
184
199
|
```tsx
|
|
185
200
|
import { createDecorator } from 'storybook-solidjs-vite';
|
|
186
201
|
|
|
187
|
-
export const
|
|
202
|
+
export const withTheme = createDecorator((Story, context) => {
|
|
203
|
+
// Will run on every story update
|
|
204
|
+
document.body.setAttribute('data-theme', context.globals.theme);
|
|
188
205
|
return Story();
|
|
189
206
|
});
|
|
190
207
|
```
|
|
191
208
|
|
|
192
|
-
### Manual flag
|
|
193
|
-
|
|
194
|
-
```tsx
|
|
195
|
-
import { IS_SOLID_JSX_FLAG } from 'storybook-solidjs-vite';
|
|
196
|
-
|
|
197
|
-
export const decorator = (Story) => {
|
|
198
|
-
return <div><Story /></div>;
|
|
199
|
-
};
|
|
200
|
-
|
|
201
|
-
decorator[IS_SOLID_JSX_FLAG] = true;
|
|
202
|
-
```
|
|
203
|
-
|
|
204
209
|
## 🔄 Migration from v9
|
|
205
210
|
|
|
206
|
-
|
|
211
|
+
See [Migration Guide](./MIGRATION.md) for breaking changes.
|
|
207
212
|
|
|
208
213
|
## 🤝 Contributing
|
|
209
214
|
|
|
210
|
-
|
|
215
|
+
Issues and PRs welcome — [open an issue](https://github.com/solidjs-community/storybook/issues) or submit a pull request.
|
|
211
216
|
|
|
212
217
|
## 📖 License
|
|
213
218
|
|
package/dist/{SolidComponentMetaManager-KXVARPHU.js → SolidComponentMetaManager-4SWET2OG.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { DOCGEN_ENGINE, MANIFEST_DOCGEN_ENGINE, SolidComponentMetaManager, getOrCreateSolidComponentMetaManager } from './chunk-
|
|
1
|
+
export { DOCGEN_ENGINE, MANIFEST_DOCGEN_ENGINE, SolidComponentMetaManager, getOrCreateSolidComponentMetaManager } from './chunk-TKOWB3JL.js';
|
|
2
2
|
import './chunk-PZ5AY32C.js';
|
|
3
|
-
//# sourceMappingURL=SolidComponentMetaManager-
|
|
4
|
-
//# sourceMappingURL=SolidComponentMetaManager-
|
|
3
|
+
//# sourceMappingURL=SolidComponentMetaManager-4SWET2OG.js.map
|
|
4
|
+
//# sourceMappingURL=SolidComponentMetaManager-4SWET2OG.js.map
|
package/dist/{SolidComponentMetaManager-KXVARPHU.js.map → SolidComponentMetaManager-4SWET2OG.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"SolidComponentMetaManager-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"SolidComponentMetaManager-4SWET2OG.js"}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { defaultDecorateStory } from 'storybook/preview-api';
|
|
2
|
-
import { global } from '@storybook/global';
|
|
3
|
-
import { createComponent } from 'solid-js';
|
|
4
2
|
import { configure } from 'storybook/test';
|
|
5
3
|
|
|
6
|
-
// src/
|
|
4
|
+
// src/preview/public-api.ts
|
|
7
5
|
var IS_SOLID_JSX_FLAG = "__isJSX";
|
|
6
|
+
var createDecorator = (decorator) => {
|
|
7
|
+
return decorator;
|
|
8
|
+
};
|
|
9
|
+
var createJSXDecorator = (decorator) => {
|
|
10
|
+
decorator[IS_SOLID_JSX_FLAG] = true;
|
|
11
|
+
return decorator;
|
|
12
|
+
};
|
|
8
13
|
|
|
9
14
|
// src/renderer/shared/story-store.ts
|
|
10
15
|
var getStoryId = (context) => {
|
|
@@ -67,7 +72,9 @@ function createStoryState(createStore) {
|
|
|
67
72
|
}
|
|
68
73
|
};
|
|
69
74
|
}
|
|
70
|
-
function createApplyDecorators(
|
|
75
|
+
function createApplyDecorators({
|
|
76
|
+
storyStore
|
|
77
|
+
}) {
|
|
71
78
|
return (storyFn, rawDecorators) => {
|
|
72
79
|
const decorators = rawDecorators.map(
|
|
73
80
|
(decorator) => {
|
|
@@ -78,7 +85,7 @@ function createApplyDecorators(store, createComponent2) {
|
|
|
78
85
|
return (StoryFn, context) => {
|
|
79
86
|
if (isJSX) {
|
|
80
87
|
const storyId = getStoryId(context);
|
|
81
|
-
if (storyId &&
|
|
88
|
+
if (storyId && storyStore.isStoryRendered(storyId)) {
|
|
82
89
|
return StoryFn(context);
|
|
83
90
|
}
|
|
84
91
|
}
|
|
@@ -88,27 +95,13 @@ function createApplyDecorators(store, createComponent2) {
|
|
|
88
95
|
);
|
|
89
96
|
return defaultDecorateStory((context) => {
|
|
90
97
|
const storyId = getStoryId(context);
|
|
91
|
-
if (storyId &&
|
|
98
|
+
if (storyId && storyStore.isStoryRendered(storyId)) {
|
|
92
99
|
return null;
|
|
93
100
|
}
|
|
94
|
-
return
|
|
101
|
+
return storyFn(context);
|
|
95
102
|
}, decorators);
|
|
96
103
|
};
|
|
97
104
|
}
|
|
98
|
-
if (global.window) {
|
|
99
|
-
global.window.STORYBOOK_ENV = "solid";
|
|
100
|
-
}
|
|
101
|
-
var parameters = {
|
|
102
|
-
renderer: "solid"
|
|
103
|
-
};
|
|
104
|
-
var render = (_, context) => {
|
|
105
|
-
if (!context.component) {
|
|
106
|
-
throw new Error(
|
|
107
|
-
`Unable to render story ${context.id} as the component annotation is missing from the default export`
|
|
108
|
-
);
|
|
109
|
-
}
|
|
110
|
-
return createComponent(context.component, context.args);
|
|
111
|
-
};
|
|
112
105
|
var beforeAll = async () => {
|
|
113
106
|
try {
|
|
114
107
|
configure({
|
|
@@ -129,6 +122,72 @@ var beforeAll = async () => {
|
|
|
129
122
|
}
|
|
130
123
|
};
|
|
131
124
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
125
|
+
// src/renderer/shared/default-render.ts
|
|
126
|
+
function createDefaultRender(createComponent) {
|
|
127
|
+
return (_, context) => {
|
|
128
|
+
if (!context.component) {
|
|
129
|
+
throw new Error(
|
|
130
|
+
`Unable to render story ${context.id} as the component annotation is missing from the default export`
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
return createComponent(context.component, context.args);
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// src/renderer/shared/mount.ts
|
|
138
|
+
function createMount({ storyStore }) {
|
|
139
|
+
return (context) => {
|
|
140
|
+
const storyId = getStoryId(context);
|
|
141
|
+
const { forceRemount } = context;
|
|
142
|
+
if (!storyId) {
|
|
143
|
+
throw new Error("Story ID is required");
|
|
144
|
+
}
|
|
145
|
+
return async (ui) => {
|
|
146
|
+
if (ui != null) {
|
|
147
|
+
context.originalStoryFn = () => ui;
|
|
148
|
+
}
|
|
149
|
+
if (forceRemount) {
|
|
150
|
+
storyStore.disposeStory(storyId);
|
|
151
|
+
}
|
|
152
|
+
if (!storyStore.isStoryRendered(storyId) || forceRemount) {
|
|
153
|
+
storyStore.resetStory(storyId);
|
|
154
|
+
}
|
|
155
|
+
storyStore.makeContextReactive(context);
|
|
156
|
+
await context.renderToCanvas();
|
|
157
|
+
return context.canvas;
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// src/renderer/shared/render-to-canvas.ts
|
|
163
|
+
function createRenderToCanvas(options) {
|
|
164
|
+
const { storyStore, createComponent, render, createStoryApp } = options;
|
|
165
|
+
return async (renderContext, canvasElement) => {
|
|
166
|
+
const storyId = getStoryId({ ...renderContext, canvasElement });
|
|
167
|
+
if (!storyId) {
|
|
168
|
+
throw new Error("Story ID is required");
|
|
169
|
+
}
|
|
170
|
+
const { storyContext, storyFn: StoryFn, showMain, showException } = renderContext;
|
|
171
|
+
if (!storyStore.isStoryRendered(storyId)) {
|
|
172
|
+
const App = createStoryApp({
|
|
173
|
+
Story: StoryFn,
|
|
174
|
+
storyContext,
|
|
175
|
+
showMain,
|
|
176
|
+
showException,
|
|
177
|
+
storyId
|
|
178
|
+
});
|
|
179
|
+
const disposeFn = render(() => createComponent(App, {}), canvasElement);
|
|
180
|
+
storyStore.setDisposeFn(storyId, disposeFn);
|
|
181
|
+
} else {
|
|
182
|
+
StoryFn();
|
|
183
|
+
}
|
|
184
|
+
return () => {
|
|
185
|
+
storyStore.disposeStory(storyId);
|
|
186
|
+
storyStore.resetStory(storyId);
|
|
187
|
+
};
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export { IS_SOLID_JSX_FLAG, beforeAll, createApplyDecorators, createDecorator, createDefaultRender, createJSXDecorator, createMount, createRenderToCanvas, createStoryState };
|
|
192
|
+
//# sourceMappingURL=chunk-4R2BK5SE.js.map
|
|
193
|
+
//# sourceMappingURL=chunk-4R2BK5SE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/preview/public-api.ts","../src/renderer/shared/story-store.ts","../src/renderer/shared/apply-decorators.ts","../src/renderer/shared/before-all.ts","../src/renderer/shared/default-render.ts","../src/renderer/shared/mount.ts","../src/renderer/shared/render-to-canvas.ts"],"names":[],"mappings":"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","file":"chunk-4R2BK5SE.js","sourcesContent":["import type { Component, ComponentProps } from 'solid-js';\nimport type {\n AnnotatedStoryFn,\n Args,\n ArgsFromMeta,\n ArgsStoryFn,\n Canvas,\n ComponentAnnotations,\n DecoratorFunction,\n RenderContext as GenericRenderContext,\n StoryContext as GenericStoryContext,\n LoaderFunction,\n ProjectAnnotations,\n StoryAnnotations,\n StrictArgs,\n WebRenderer,\n} from 'storybook/internal/types';\nimport type { SetOptional, Simplify } from 'type-fest';\n\nexport type {\n DefinePreviewInput,\n SolidMeta,\n SolidPreview,\n SolidStory,\n} from './define-preview';\n\n/**\n * Marks decorators that return JSX so they are not re-run on every Storybook update.\n * Prefer `createJSXDecorator` over setting this flag manually.\n */\nexport const IS_SOLID_JSX_FLAG = '__isJSX';\n\n/**\n * Meta `args` when `preview.meta()` omits `args`. Matches `@storybook/react`'s `{}` sentinel:\n * `keyof` is `never`, so `AddMocks` does not match every component prop key.\n */\nexport type EmptyMetaArgs = { [Key in never]: never };\n\n// This performs a downcast to function types that are mocks, when a mock fn is given to meta args.\nexport type AddMocks<TArgs, DefaultArgs> = Simplify<{\n [T in keyof TArgs]: T extends keyof DefaultArgs\n ? DefaultArgs[T] extends (...args: any) => any & { mock: object }\n ? DefaultArgs[T]\n : TArgs[T]\n : TArgs[T];\n}>;\n\nexport type SolidComponent<P extends Record<string, any> = Record<string, any>> = Component<P>;\nexport type SolidComponentProps<T extends SolidComponent> = ComponentProps<T>;\n\nexport type StoryFnReturnType = ReturnType<SolidComponent>;\n\nexport interface SolidRenderer extends WebRenderer {\n component: SolidComponent<any>;\n storyResult: StoryFnReturnType;\n mount: (ui?: StoryFnReturnType) => Promise<Canvas>;\n}\n\nexport interface SolidParameters {\n /** Solid renderer configuration */\n solid?: Record<string, never>;\n}\n\n/** Mirroring React's `ReactTypes`. */\nexport interface SolidTypes extends SolidRenderer {\n parameters: SolidParameters;\n}\n\nexport type Meta<TCmpOrArgs = Args> = [TCmpOrArgs] extends [SolidComponent<any>]\n ? ComponentAnnotations<SolidRenderer, SolidComponentProps<TCmpOrArgs>>\n : ComponentAnnotations<SolidRenderer, TCmpOrArgs>;\n\nexport type StoryFn<TCmpOrArgs = Args> = [TCmpOrArgs] extends [SolidComponent<any>]\n ? AnnotatedStoryFn<SolidRenderer, SolidComponentProps<TCmpOrArgs>>\n : AnnotatedStoryFn<SolidRenderer, TCmpOrArgs>;\n\nexport type StoryObj<TMetaOrCmpOrArgs = Args> = [TMetaOrCmpOrArgs] extends [\n {\n render?: ArgsStoryFn<SolidRenderer, any>;\n component?: infer Cmp;\n args?: infer DefaultArgs;\n }\n]\n ? Simplify<\n (Cmp extends SolidComponent<any> ? SolidComponentProps<Cmp> : unknown)\n & ArgsFromMeta<SolidRenderer, TMetaOrCmpOrArgs>\n > extends infer TArgs\n ? StoryAnnotations<\n SolidRenderer,\n AddMocks<TArgs, DefaultArgs>,\n SetOptional<TArgs, keyof TArgs & keyof DefaultArgs>\n >\n : never\n : [TMetaOrCmpOrArgs] extends [SolidComponent<any>]\n ? StoryAnnotations<SolidRenderer, SolidComponentProps<TMetaOrCmpOrArgs>>\n : StoryAnnotations<SolidRenderer, TMetaOrCmpOrArgs>;\n\nexport type Decorator<TArgs = StrictArgs> = DecoratorFunction<SolidRenderer, TArgs> & {\n [IS_SOLID_JSX_FLAG]?: boolean;\n};\n\nexport type Loader<TArgs = StrictArgs> = LoaderFunction<SolidRenderer, TArgs>;\nexport type Preview = ProjectAnnotations<SolidRenderer>;\nexport type StoryContext<TArgs = StrictArgs> = GenericStoryContext<SolidRenderer, TArgs> & {\n renderToCanvas: () => Promise<void>;\n};\n\nexport type RenderContext = GenericRenderContext<SolidRenderer>;\n\n/** Use for decorators that do not return JSX (e.g. they only call `Story()`). */\nexport const createDecorator = (\n decorator: DecoratorFunction<SolidRenderer>\n): Decorator => {\n return decorator as Decorator;\n};\n\n/** Use for decorators that return JSX. Ensures they run only once per story mount. */\nexport const createJSXDecorator = (\n decorator: DecoratorFunction<SolidRenderer>\n): Decorator => {\n (decorator as Decorator)[IS_SOLID_JSX_FLAG] = true;\n\n return decorator as Decorator;\n};\n\nexport type { Args, ArgTypes, Parameters, StrictArgs } from 'storybook/internal/types';\n","import type { Args, Globals, StoryContext as InternalStoryContext } from 'storybook/internal/types';\nimport type { SolidRenderer } from '../../preview/public-api';\n\n/** Update store via `(prev) => next` (version layer applies reconcile/draft setter). */\ntype SetStoreFn<T extends object> = (update: (prev: T) => T) => void;\n\n/** Reactive store tuple returned by `createStore` (state + setter). */\ntype SolidStore<T extends object> = readonly [\n state: T,\n setState: SetStoreFn<T>\n];\n\ntype CreateStoreFn = <T extends object>(initial: T) => SolidStore<T>;\n\nexport interface StoryStateStore {\n isStoryRendered: (storyId: string) => boolean;\n resetStory: (storyId: string) => void;\n setRendered: (storyId: string, rendered: boolean) => void;\n setDisposeFn: (storyId: string, disposeFn: (() => void) | null) => void;\n makeContextReactive: (context: InternalStoryContext<SolidRenderer, Args>) => void;\n disposeStory: (storyId: string) => void;\n}\n\nexport const getStoryId = (context: { id?: string; canvasElement?: { id?: string } }): string | undefined => {\n const canvasId = context.canvasElement?.id;\n\n if (!canvasId || canvasId === 'storybook-root') {\n return context.id;\n }\n\n return canvasId;\n};\n\nexport function createStoryState(createStore: CreateStoreFn): StoryStateStore {\n const [globals, setGlobals] = createStore<Globals>({});\n const renderedStories = new Set<string>();\n const argsStores = new Map<string, SolidStore<Args>>();\n const disposers = new Map<string, () => void>();\n\n const getArgsStore = (storyId: string): SolidStore<Args> => {\n let store = argsStores.get(storyId);\n\n if (!store) {\n store = createStore({} as Args);\n argsStores.set(storyId, store);\n }\n\n return store;\n };\n\n return {\n isStoryRendered(storyId) {\n return renderedStories.has(storyId);\n },\n\n resetStory(storyId) {\n renderedStories.delete(storyId);\n disposers.delete(storyId);\n argsStores.delete(storyId);\n },\n\n setRendered(storyId, isRendered) {\n if (isRendered) {\n renderedStories.add(storyId);\n }\n else {\n renderedStories.delete(storyId);\n }\n },\n\n setDisposeFn(storyId, disposeFn) {\n if (disposeFn) {\n disposers.set(storyId, disposeFn);\n }\n else {\n disposers.delete(storyId);\n }\n },\n\n makeContextReactive(context) {\n const storyId = getStoryId(context);\n\n if (!storyId) {\n throw new Error('Story ID is required');\n }\n\n const [args, setArgs] = getArgsStore(storyId);\n\n // Update reactive stores with the new values\n setArgs(() => context.args);\n setGlobals(() => context.globals);\n\n // Sync the reactive stores to the context\n context.args = args;\n context.globals = globals;\n },\n\n disposeStory(storyId) {\n disposers.get(storyId)?.();\n disposers.delete(storyId);\n },\n };\n}\n","import { defaultDecorateStory } from 'storybook/preview-api';\n\nimport { IS_SOLID_JSX_FLAG, type Decorator, type SolidRenderer } from '../../preview/public-api';\nimport { getStoryId } from './story-store';\n\nimport type { LegacyStoryFn } from 'storybook/internal/types';\nimport type { StoryStateStore } from './story-store';\n\nexport function createApplyDecorators({\n storyStore,\n}: {\n storyStore: StoryStateStore;\n}): (\n storyFn: LegacyStoryFn<SolidRenderer>,\n rawDecorators: Decorator[]\n) => LegacyStoryFn<SolidRenderer> {\n return (storyFn, rawDecorators) => {\n const decorators = rawDecorators.map(\n (decorator): Decorator => {\n const originalFn = (decorator as Decorator & { originalFn?: Decorator }).originalFn;\n const isJSX = Boolean(\n decorator[IS_SOLID_JSX_FLAG] || originalFn?.[IS_SOLID_JSX_FLAG]\n );\n\n return (StoryFn, context) => {\n if (isJSX) {\n const storyId = getStoryId(context);\n\n if (storyId && storyStore.isStoryRendered(storyId)) {\n return StoryFn(context);\n }\n }\n\n return decorator(StoryFn, context);\n };\n }\n );\n\n return defaultDecorateStory((context) => {\n const storyId = getStoryId(context);\n\n if (storyId && storyStore.isStoryRendered(storyId)) {\n return null;\n }\n\n return storyFn(context);\n }, decorators);\n };\n}\n","import { configure } from 'storybook/test';\n\n/** Configures `storybook/test` wrappers so Solid updates flush after async play steps. */\nexport const beforeAll = async() => {\n try {\n configure({\n unstable_advanceTimersWrapper: (cb: () => any) => cb(),\n asyncWrapper: async(cb: () => any) => {\n const result = await cb();\n\n await new Promise<void>((resolve) => {\n setTimeout(() => resolve(), 0);\n\n // @ts-expect-error global jest\n if (typeof jest !== 'undefined' && jest != null && ((setTimeout as any)._isMockFunction === true || Object.prototype.hasOwnProperty.call(setTimeout, 'clock'))) {\n // @ts-expect-error global jest\n jest!.advanceTimersByTime(0);\n }\n });\n\n return result;\n },\n eventWrapper: (cb: () => any) => cb(),\n });\n }\n catch {\n // storybook/test might not be available; noop\n }\n};\n","import type { ArgsStoryFn } from 'storybook/internal/types';\nimport type { SolidRenderer } from '../../preview/public-api';\nimport type { SolidRuntimeCreateComponent } from './render-to-canvas';\n\n/** Default render for meta/stories with `component` + `args` and no custom `render` (CSF 3+). */\nexport function createDefaultRender(createComponent: SolidRuntimeCreateComponent): ArgsStoryFn<SolidRenderer> {\n return (_, context) => {\n if (!context.component) {\n throw new Error(\n `Unable to render story ${ context.id } as the component annotation is missing from the default export`\n );\n }\n\n return createComponent(context.component, context.args);\n };\n}\n","import { getStoryId } from './story-store';\n\nimport type { Args } from 'storybook/internal/types';\nimport type { StoryContext, StoryFnReturnType } from '../../preview/public-api';\nimport type { StoryStateStore } from './story-store';\n\n/** Play/mount API: sync reactive args and globals, then render via `renderToCanvas`. */\nexport function createMount({ storyStore }: { storyStore: StoryStateStore }) {\n return (context: StoryContext<Args>) => {\n const storyId = getStoryId(context);\n const { forceRemount } = context;\n\n if (!storyId) {\n throw new Error('Story ID is required');\n }\n\n return async(ui: StoryFnReturnType) => {\n if (ui != null) {\n context.originalStoryFn = () => ui;\n }\n\n if (forceRemount) {\n storyStore.disposeStory(storyId);\n }\n\n if (!storyStore.isStoryRendered(storyId) || forceRemount) {\n storyStore.resetStory(storyId);\n }\n\n storyStore.makeContextReactive(context);\n\n await context.renderToCanvas();\n\n return context.canvas;\n };\n };\n}\n","import { getStoryId } from './story-store';\n\nimport type { RenderContext, SolidComponent, SolidRenderer } from '../../preview/public-api';\nimport type { StoryStateStore } from './story-store';\n\nexport type SolidRuntimeCreateComponent = (\n component: SolidComponent,\n props: object\n) => SolidRenderer['storyResult'];\n\nexport type SolidRendererRuntime = {\n storyStore: StoryStateStore;\n createComponent: SolidRuntimeCreateComponent;\n render: (\n renderFn: () => SolidRenderer['storyResult'],\n canvasElement: SolidRenderer['canvasElement']\n ) => () => void;\n};\n\nexport type StoryThunk = () => SolidRenderer['storyResult'];\n\nexport type StoryAppContext = {\n Story: StoryThunk;\n storyContext: RenderContext['storyContext'];\n showMain: RenderContext['showMain'];\n showException: RenderContext['showException'];\n storyId: string;\n};\n\ntype RenderToCanvasOptions = SolidRendererRuntime & {\n createStoryApp: (context: StoryAppContext) => SolidComponent;\n};\n\n/** Mounts or updates the story in the preview canvas. Returns cleanup when the story changes. */\nexport function createRenderToCanvas(options: RenderToCanvasOptions) {\n const { storyStore, createComponent, render, createStoryApp } = options;\n\n return async(\n renderContext: RenderContext,\n canvasElement: SolidRenderer['canvasElement']\n ) => {\n const storyId = getStoryId({ ...renderContext, canvasElement });\n\n if (!storyId) {\n throw new Error('Story ID is required');\n }\n\n const { storyContext, storyFn: StoryFn, showMain, showException } = renderContext;\n\n if (!storyStore.isStoryRendered(storyId)) {\n const App = createStoryApp({\n Story: StoryFn,\n storyContext,\n showMain,\n showException,\n storyId,\n });\n\n const disposeFn = render(() => createComponent(App, {}), canvasElement);\n\n storyStore.setDisposeFn(storyId, disposeFn);\n }\n else {\n StoryFn();\n }\n\n return () => {\n storyStore.disposeStory(storyId);\n storyStore.resetStory(storyId);\n };\n };\n}\n"]}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { createRenderToCanvas, createDefaultRender, createMount, beforeAll, createApplyDecorators, createStoryState } from './chunk-4R2BK5SE.js';
|
|
2
|
+
import { __export } from './chunk-PZ5AY32C.js';
|
|
3
|
+
import { global } from '@storybook/global';
|
|
4
|
+
import { createComponent, onMount, onCleanup, ErrorBoundary } from 'solid-js';
|
|
5
|
+
import { createStore as createStore$1, reconcile } from 'solid-js/store';
|
|
6
|
+
import { render as render$1 } from 'solid-js/web';
|
|
7
|
+
|
|
8
|
+
// src/renderer/solid-1.ts
|
|
9
|
+
var solid_1_exports = {};
|
|
10
|
+
__export(solid_1_exports, {
|
|
11
|
+
applyDecorators: () => applyDecorators,
|
|
12
|
+
beforeAll: () => beforeAll,
|
|
13
|
+
mount: () => mount,
|
|
14
|
+
parameters: () => parameters,
|
|
15
|
+
render: () => render,
|
|
16
|
+
renderToCanvas: () => renderToCanvas
|
|
17
|
+
});
|
|
18
|
+
if (global.window) {
|
|
19
|
+
global.window.STORYBOOK_ENV = "solid";
|
|
20
|
+
}
|
|
21
|
+
var createStore = (initial) => {
|
|
22
|
+
const [state, setStore] = createStore$1(initial);
|
|
23
|
+
const setState = (update) => {
|
|
24
|
+
setStore(reconcile(update(state)));
|
|
25
|
+
};
|
|
26
|
+
return [state, setState];
|
|
27
|
+
};
|
|
28
|
+
var storyStore = createStoryState(createStore);
|
|
29
|
+
var runtime = {
|
|
30
|
+
storyStore,
|
|
31
|
+
createComponent,
|
|
32
|
+
render: render$1
|
|
33
|
+
};
|
|
34
|
+
var applyDecorators = createApplyDecorators({ storyStore });
|
|
35
|
+
var mount = createMount(runtime);
|
|
36
|
+
var render = createDefaultRender(runtime.createComponent);
|
|
37
|
+
var renderToCanvas = createRenderToCanvas({
|
|
38
|
+
...runtime,
|
|
39
|
+
createStoryApp: ({ Story, storyContext, showMain, showException, storyId }) => {
|
|
40
|
+
const App = () => {
|
|
41
|
+
onMount(() => {
|
|
42
|
+
showMain();
|
|
43
|
+
storyStore.setRendered(storyId, true);
|
|
44
|
+
});
|
|
45
|
+
onCleanup(() => {
|
|
46
|
+
storyStore.setRendered(storyId, false);
|
|
47
|
+
});
|
|
48
|
+
if (storyContext?.parameters?.["__isPortableStory"]) {
|
|
49
|
+
return createComponent(() => Story(), {});
|
|
50
|
+
}
|
|
51
|
+
return createComponent(ErrorBoundary, {
|
|
52
|
+
fallback: (err) => {
|
|
53
|
+
showException(err);
|
|
54
|
+
return err;
|
|
55
|
+
},
|
|
56
|
+
children: createComponent(() => Story(), {})
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
return App;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
var parameters = {
|
|
63
|
+
renderer: "solid"
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export { applyDecorators, mount, parameters, render, renderToCanvas, solid_1_exports };
|
|
67
|
+
//# sourceMappingURL=chunk-FGS26NTB.js.map
|
|
68
|
+
//# sourceMappingURL=chunk-FGS26NTB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/renderer/solid-1.ts"],"names":["solidCreateStore","solidRender"],"mappings":";;;;;;;;AAAA,IAAA,eAAA,GAAA;AAAA,QAAA,CAAA,eAAA,EAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAoBA,IAAI,OAAO,MAAA,EAAQ;AACf,EAAA,MAAA,CAAO,OAAO,aAAA,GAAgB,OAAA;AAClC;AAEA,IAAM,WAAA,GAAc,CAAmB,OAAA,KAAe;AAClD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,cAAoB,OAAO,CAAA;AAErD,EAAA,MAAM,QAAA,GAAW,CAAC,MAAA,KAA2B;AACzC,IAAA,QAAA,CAAS,SAAA,CAAU,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AAAA,EACrC,CAAA;AAEA,EAAA,OAAO,CAAC,OAAO,QAAQ,CAAA;AAC3B,CAAA;AAEA,IAAM,UAAA,GAAa,iBAAiB,WAAW,CAAA;AAE/C,IAAM,OAAA,GAAgC;AAAA,EAClC,UAAA;AAAA,EACA,eAAA;AAAA,EACA,MAAA,EAAQC;AACZ,CAAA;AAEA,IAAM,eAAA,GAAkB,qBAAA,CAAsB,EAAE,UAAA,EAAY;AAC5D,IAAM,KAAA,GAAQ,YAAY,OAAO;AACjC,IAAM,MAAA,GAAS,mBAAA,CAAoB,OAAA,CAAQ,eAAe;AAC1D,IAAM,iBAAiB,oBAAA,CAAqB;AAAA,EACxC,GAAG,OAAA;AAAA,EACH,cAAA,EAAgB,CAAC,EAAE,KAAA,EAAO,cAAc,QAAA,EAAU,aAAA,EAAe,SAAQ,KAAM;AAC3E,IAAA,MAAM,MAAsB,MAAM;AAC9B,MAAA,OAAA,CAAQ,MAAM;AACV,QAAA,QAAA,EAAS;AACT,QAAA,UAAA,CAAW,WAAA,CAAY,SAAS,IAAI,CAAA;AAAA,MACxC,CAAC,CAAA;AAED,MAAA,SAAA,CAAU,MAAM;AACZ,QAAA,UAAA,CAAW,WAAA,CAAY,SAAS,KAAK,CAAA;AAAA,MACzC,CAAC,CAAA;AAGD,MAAA,IAAI,YAAA,EAAc,UAAA,GAAa,mBAAmB,CAAA,EAAG;AACjD,QAAA,OAAO,eAAA,CAAgB,MAAM,KAAA,EAAM,EAAG,EAAE,CAAA;AAAA,MAC5C;AAEA,MAAA,OAAO,gBAAgB,aAAA,EAAe;AAAA,QAClC,QAAA,EAAU,CAAC,GAAA,KAAe;AACtB,UAAA,aAAA,CAAc,GAAG,CAAA;AAEjB,UAAA,OAAO,GAAA;AAAA,QACX,CAAA;AAAA,QACA,UAAU,eAAA,CAAgB,MAAM,KAAA,EAAM,EAAG,EAAE;AAAA,OAC9C,CAAA;AAAA,IACL,CAAA;AAEA,IAAA,OAAO,GAAA;AAAA,EACX;AACJ,CAAC;AAGD,IAAM,UAAA,GAAa;AAAA,EACf,QAAA,EAAU;AACd","file":"chunk-FGS26NTB.js","sourcesContent":["import { global } from '@storybook/global';\nimport {\n createComponent,\n ErrorBoundary,\n onCleanup,\n onMount,\n} from 'solid-js';\nimport { reconcile, createStore as solidCreateStore } from 'solid-js/store';\nimport { render as solidRender } from 'solid-js/web';\n\nimport { createApplyDecorators } from './shared/apply-decorators';\nimport { beforeAll } from './shared/before-all';\nimport { createDefaultRender } from './shared/default-render';\nimport { createMount } from './shared/mount';\nimport { createRenderToCanvas } from './shared/render-to-canvas';\nimport { createStoryState } from './shared/story-store';\n\nimport type { SolidComponent } from '../preview/public-api';\nimport type { SolidRendererRuntime } from './shared/render-to-canvas';\n\nif (global.window) {\n global.window.STORYBOOK_ENV = 'solid';\n}\n\nconst createStore = <T extends object>(initial: T) => {\n const [state, setStore] = solidCreateStore<T>(initial);\n\n const setState = (update: (prev: T) => T) => {\n setStore(reconcile(update(state)));\n };\n\n return [state, setState] as const;\n};\n\nconst storyStore = createStoryState(createStore);\n\nconst runtime: SolidRendererRuntime = {\n storyStore,\n createComponent,\n render: solidRender,\n};\n\nconst applyDecorators = createApplyDecorators({ storyStore });\nconst mount = createMount(runtime);\nconst render = createDefaultRender(runtime.createComponent);\nconst renderToCanvas = createRenderToCanvas({\n ...runtime,\n createStoryApp: ({ Story, storyContext, showMain, showException, storyId }) => {\n const App: SolidComponent = () => {\n onMount(() => {\n showMain();\n storyStore.setRendered(storyId, true);\n });\n\n onCleanup(() => {\n storyStore.setRendered(storyId, false);\n });\n\n\n if (storyContext?.parameters?.['__isPortableStory']) {\n return createComponent(() => Story(), {});\n }\n\n return createComponent(ErrorBoundary, {\n fallback: (err: Error) => {\n showException(err);\n\n return err as any;\n },\n children: createComponent(() => Story(), {}),\n });\n };\n\n return App;\n },\n});\n\n/** Preview-wide parameters for the Solid renderer. */\nconst parameters = {\n renderer: 'solid',\n};\n\nexport {\n applyDecorators,\n beforeAll,\n mount,\n parameters,\n render,\n renderToCanvas,\n};\n"]}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { argtypes_exports } from './chunk-OHDHM5OZ.js';
|
|
2
|
+
import { docs_exports } from './chunk-UQOUKQDU.js';
|
|
3
3
|
import { definePreview } from 'storybook/internal/csf';
|
|
4
4
|
|
|
5
|
-
function
|
|
6
|
-
return
|
|
5
|
+
function createSolidDefinePreview(solidAnnotations) {
|
|
6
|
+
return ((input) => {
|
|
7
7
|
const { addons, ...projectAnnotations } = input;
|
|
8
8
|
const preview = definePreview({
|
|
9
9
|
...projectAnnotations,
|
|
10
10
|
addons: [
|
|
11
11
|
solidAnnotations,
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
argtypes_exports,
|
|
13
|
+
docs_exports,
|
|
14
14
|
...addons ?? []
|
|
15
15
|
]
|
|
16
16
|
});
|
|
@@ -26,9 +26,9 @@ function createDefinePreview(solidAnnotations) {
|
|
|
26
26
|
return meta;
|
|
27
27
|
};
|
|
28
28
|
return preview;
|
|
29
|
-
};
|
|
29
|
+
});
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
export {
|
|
33
|
-
//# sourceMappingURL=chunk-
|
|
34
|
-
//# sourceMappingURL=chunk-
|
|
32
|
+
export { createSolidDefinePreview };
|
|
33
|
+
//# sourceMappingURL=chunk-KZXNQC4Q.js.map
|
|
34
|
+
//# sourceMappingURL=chunk-KZXNQC4Q.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/preview/define-preview.ts"],"names":["definePreviewBase"],"mappings":";;;;AAkGO,SAAS,yBAAyB,gBAAA,EAAuC;AAC5E,EAAA,QAAQ,CACJ,KAAA,KACC;AACD,IAAA,MAAM,EAAE,MAAA,EAAQ,GAAG,kBAAA,EAAmB,GAAI,KAAA;AAE1C,IAAA,MAAM,UAAUA,aAAA,CAAkB;AAAA,MAC9B,GAAG,kBAAA;AAAA,MACH,MAAA,EAAQ;AAAA,QACJ,gBAAA;AAAA,QACA,gBAAA;AAAA,QACA,YAAA;AAAA,QACA,GAAI,UAAU;AAAC;AACnB,KACH,CAAA;AAED,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA;AAE5C,IAAA,OAAA,CAAQ,IAAA,GAAO,CAAC,MAAA,KAAW;AACvB,MAAA,MAAM,IAAA,GAAO,WAAW,MAAM,CAAA;AAC9B,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAExC,MAAA,IAAA,CAAK,KAAA,GAAQ,CAAC,OAAA,KAAiB;AAC3B,QAAA,MAAM,KAAA,GAAQ,YAAY,OAAO,CAAA;AAGjC,QAAA,KAAA,CAAM,SAAA,GAAY,MAAM,SAAA,EAAU;AAElC,QAAA,OAAO,KAAA;AAAA,MACX,CAAA;AAEA,MAAA,OAAO,IAAA;AAAA,IACX,CAAA;AAEA,IAAA,OAAO,OAAA;AAAA,EACX,CAAA;AAKJ","file":"chunk-KZXNQC4Q.js","sourcesContent":["import { definePreview as definePreviewBase } from 'storybook/internal/csf';\n\nimport * as solidArgTypesAnnotations from '../renderer/argtypes';\nimport * as solidDocsAnnotations from '../renderer/docs';\n\nimport type { AddonTypes, InferTypes, Meta, Preview, PreviewAddon, Story } from 'storybook/internal/csf';\nimport type {\n Args,\n ArgsStoryFn,\n ComponentAnnotations,\n DecoratorFunction,\n ProjectAnnotations,\n Renderer,\n StoryAnnotations,\n} from 'storybook/internal/types';\nimport type { OmitIndexSignature, SetOptional, Simplify, UnionToIntersection } from 'type-fest';\nimport type { AddMocks, EmptyMetaArgs, SolidComponent, SolidTypes } from './public-api';\n\n/** Extracts and unions all args types from an array of decorators. */\ntype DecoratorsArgs<TRenderer extends Renderer, Decorators> = UnionToIntersection<\n Decorators extends DecoratorFunction<TRenderer, infer TArgs> ? TArgs : unknown\n>;\n\ntype InferArgs<TArgs, T, Decorators> = Simplify<\n TArgs & Simplify<OmitIndexSignature<DecoratorsArgs<SolidTypes & T, Decorators>>>\n>;\n\ntype InferSolidTypes<T, TArgs, Decorators> = SolidTypes & T & {\n args: Simplify<InferArgs<TArgs, T, Decorators>>;\n};\n\nexport type DefinePreviewInput<Addons extends PreviewAddon<never>[] = []> = {\n addons?: Addons;\n} & ProjectAnnotations<SolidTypes & InferTypes<Addons>>;\n\n/** @ts-expect-error We cannot implement the meta faithfully here, but that is okay. */\nexport interface SolidPreview<T extends AddonTypes> extends Preview<SolidTypes & T> {\n type: <R>() => SolidPreview<T & R>;\n\n meta: <\n TArgs extends Args,\n Decorators extends DecoratorFunction<SolidTypes & T, any>,\n TMetaArgs extends Partial<TArgs & T['args']>\n >(\n meta: {\n render?: ArgsStoryFn<SolidTypes & T, TArgs & T['args']>;\n component?: SolidComponent<TArgs>;\n decorators?: Decorators | Decorators[];\n args?: TMetaArgs;\n } & Omit<\n ComponentAnnotations<SolidTypes & T, TArgs>,\n 'decorators' | 'component' | 'args' | 'render'\n >\n ) => SolidMeta<\n InferSolidTypes<T, TArgs, Decorators>,\n Omit<ComponentAnnotations<InferSolidTypes<T, TArgs, Decorators>>, 'args'> & {\n args: Partial<TArgs> extends TMetaArgs ? EmptyMetaArgs : TMetaArgs;\n }\n >;\n}\n\nexport interface SolidMeta<T extends SolidTypes, MetaInput extends ComponentAnnotations<T>>\n /** @ts-expect-error SolidMeta requires two type parameters, but Meta's constraints differ */\n extends Meta<T, MetaInput> {\n story: (<\n TInput extends\n | (() => SolidTypes['storyResult'])\n | (StoryAnnotations<T, T['args']> & {\n render: () => SolidTypes['storyResult'];\n })\n >(\n story: TInput\n ) => SolidStory<T, TInput extends () => SolidTypes['storyResult'] ? { render: TInput } : TInput>) & (<\n TInput extends Simplify<\n StoryAnnotations<\n T,\n AddMocks<T['args'], MetaInput['args']>,\n SetOptional<T['args'], keyof T['args'] & keyof MetaInput['args']>\n >\n >\n >(\n story: TInput\n /** @ts-expect-error hard */\n ) => SolidStory<T, TInput>) & ((\n ..._args: Partial<T['args']> extends SetOptional<\n T['args'],\n keyof T['args'] & keyof MetaInput['args']\n >\n ? []\n : [never]\n ) => SolidStory<T, EmptyMetaArgs>);\n}\n\nexport interface SolidStory<T extends SolidTypes, TInput extends StoryAnnotations<T, T['args']>>\n extends Story<T, TInput> {\n Component: SolidComponent<Partial<T['args']>>;\n}\n\nexport function createSolidDefinePreview(solidAnnotations: PreviewAddon<never>) {\n return (<Addons extends PreviewAddon<never>[] = []>(\n input: DefinePreviewInput<Addons>\n ) => {\n const { addons, ...projectAnnotations } = input;\n\n const preview = definePreviewBase({\n ...projectAnnotations,\n addons: [\n solidAnnotations,\n solidArgTypesAnnotations,\n solidDocsAnnotations,\n ...(addons ?? []),\n ],\n });\n\n const defineMeta = preview.meta.bind(preview);\n\n preview.meta = (_input) => {\n const meta = defineMeta(_input);\n const defineStory = meta.story.bind(meta);\n\n meta.story = (__input: any) => {\n const story = defineStory(__input);\n\n // @ts-ignore this is a private property used only here\n story.Component = story.__compose();\n\n return story;\n };\n\n return meta;\n };\n\n return preview;\n }) as unknown as <\n Addons extends PreviewAddon<never>[] = []\n >(\n input: DefinePreviewInput<Addons>\n ) => SolidPreview<SolidTypes & InferTypes<Addons>>;\n}\n"]}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
|
-
// src/componentManifest/toDocgenInfo.ts
|
|
1
|
+
// src/internal/componentManifest/toDocgenInfo.ts
|
|
2
|
+
function serializeDocgenPropType(type) {
|
|
3
|
+
const docgenType = {
|
|
4
|
+
name: type.name,
|
|
5
|
+
raw: type.raw ?? type.name
|
|
6
|
+
};
|
|
7
|
+
if (type.value != null) {
|
|
8
|
+
docgenType.value = type.value;
|
|
9
|
+
}
|
|
10
|
+
return docgenType;
|
|
11
|
+
}
|
|
2
12
|
function solidComponentDocToDocgenInfo(doc) {
|
|
3
13
|
return {
|
|
4
14
|
...doc.displayName !== void 0 ? { displayName: doc.displayName } : {},
|
|
@@ -8,10 +18,7 @@ function solidComponentDocToDocgenInfo(doc) {
|
|
|
8
18
|
const entry = {
|
|
9
19
|
name: prop.name,
|
|
10
20
|
required: prop.required,
|
|
11
|
-
type:
|
|
12
|
-
name: prop.type.name,
|
|
13
|
-
raw: prop.type.raw ?? prop.type.name
|
|
14
|
-
},
|
|
21
|
+
type: serializeDocgenPropType(prop.type),
|
|
15
22
|
defaultValue: prop.defaultValue ?? null
|
|
16
23
|
};
|
|
17
24
|
if (prop.description !== void 0) {
|
|
@@ -38,5 +45,5 @@ function solidComponentDocToArgTypesData(doc) {
|
|
|
38
45
|
}
|
|
39
46
|
|
|
40
47
|
export { solidComponentDocToArgTypesData, solidComponentDocToDocgenInfo };
|
|
41
|
-
//# sourceMappingURL=chunk-
|
|
42
|
-
//# sourceMappingURL=chunk-
|
|
48
|
+
//# sourceMappingURL=chunk-LKTA6WTO.js.map
|
|
49
|
+
//# sourceMappingURL=chunk-LKTA6WTO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/componentManifest/toDocgenInfo.ts"],"names":[],"mappings":";AAqBA,SAAS,wBAAwB,IAAA,EAAkD;AAC/E,EAAA,MAAM,UAAA,GAAkD;AAAA,IACpD,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,GAAA,EAAK,IAAA,CAAK,GAAA,IAAO,IAAA,CAAK;AAAA,GAC1B;AAEA,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACpB,IAAA,UAAA,CAAW,QAAQ,IAAA,CAAK,KAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,UAAA;AACX;AAEO,SAAS,8BAA8B,GAAA,EAAoC;AAC9E,EAAA,OAAO;AAAA,IACH,GAAI,IAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,GAAA,CAAI,WAAA,EAAY,GAAI,EAAC;AAAA,IACxE,GAAI,IAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,GAAA,CAAI,WAAA,EAAY,GAAI,EAAC;AAAA,IACxE,OAAO,MAAA,CAAO,WAAA;AAAA,MACV,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAM;AAC5C,QAAA,MAAM,KAAA,GAAqC;AAAA,UACvC,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,IAAA,EAAM,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAA;AAAA,UACvC,YAAA,EAAc,KAAK,YAAA,IAAgB;AAAA,SACvC;AAEA,QAAA,IAAI,IAAA,CAAK,gBAAgB,MAAA,EAAW;AAChC,UAAA,KAAA,CAAM,cAAc,IAAA,CAAK,WAAA;AAAA,QAC7B;AAEA,QAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAAA,MACvB,CAAC;AAAA;AACL,GACJ;AACJ;AAEO,SAAS,gCAAgC,GAAA,EAAiD;AAC7F,EAAA,MAAM,UAAA,GAAa,8BAA8B,GAAG,CAAA;AAEpD,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACV,MAAA,CAAO,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAM;AAAA,MACnD,IAAA;AAAA,MACA;AAAA,QACI,IAAA;AAAA,QACA,IAAA,EAAM,KAAK,IAAA,CAAK,IAAA;AAAA,QAChB,QAAA,EAAU,KAAK,QAAA,IAAY,KAAA;AAAA,QAC3B,aAAa,IAAA,CAAK;AAAA;AACtB,KACH;AAAA,GACL;AACJ","file":"chunk-LKTA6WTO.js","sourcesContent":["import type { SolidComponentDoc } from './types';\n\n/** Maps Solid component-meta (RCM) output to the `__docgenInfo` shape consumed by `storybook/internal/docs-tools`. */\nexport type DocgenInfo = {\n displayName?: string;\n description?: string;\n props: Record<string, {\n name: string;\n description?: string;\n required?: boolean;\n type: {\n name: string;\n raw?: string;\n value?: unknown;\n computed?: boolean;\n };\n defaultValue?: { value: string } | null;\n parent?: { name: string; fileName: string };\n }>;\n};\n\nfunction serializeDocgenPropType(type: SolidComponentDoc['props'][string]['type']) {\n const docgenType: DocgenInfo['props'][string]['type'] = {\n name: type.name,\n raw: type.raw ?? type.name,\n };\n\n if (type.value != null) {\n docgenType.value = type.value;\n }\n\n return docgenType;\n}\n\nexport function solidComponentDocToDocgenInfo(doc: SolidComponentDoc): DocgenInfo {\n return {\n ...(doc.displayName !== undefined ? { displayName: doc.displayName } : {}),\n ...(doc.description !== undefined ? { description: doc.description } : {}),\n props: Object.fromEntries(\n Object.entries(doc.props).map(([name, prop]) => {\n const entry: DocgenInfo['props'][string] = {\n name: prop.name,\n required: prop.required,\n type: serializeDocgenPropType(prop.type),\n defaultValue: prop.defaultValue ?? null,\n };\n\n if (prop.description !== undefined) {\n entry.description = prop.description;\n }\n\n return [name, entry];\n })\n ),\n };\n}\n\nexport function solidComponentDocToArgTypesData(doc: SolidComponentDoc): Record<string, unknown> {\n const docgenInfo = solidComponentDocToDocgenInfo(doc);\n\n return Object.fromEntries(\n Object.entries(docgenInfo.props).map(([name, prop]) => [\n name,\n {\n name,\n type: prop.type.name,\n required: prop.required ?? false,\n description: prop.description,\n },\n ])\n );\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/framework/public-api.ts"],"names":[],"mappings":";AAEO,SAAS,WAAW,MAAA,EAAyB;AAChD,EAAA,OAAO,MAAA;AACX","file":"chunk-NOGINBE3.js","sourcesContent":["import type { StorybookConfig } from './types';\n\nexport function defineMain(config: StorybookConfig) {\n return config;\n}\n\nexport type * from './types';\n"]}
|