@storybook-astro/framework 0.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/chunk-G3PMV62Z.js +36 -0
  2. package/dist/chunk-G3PMV62Z.js.map +1 -0
  3. package/dist/chunk-LLYYQI75.js +555 -0
  4. package/dist/chunk-LLYYQI75.js.map +1 -0
  5. package/dist/index.js +76 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/integrations/index.js +206 -0
  8. package/dist/integrations/index.js.map +1 -0
  9. package/dist/magic-string.es-T6PTLUGX.js +1309 -0
  10. package/dist/magic-string.es-T6PTLUGX.js.map +1 -0
  11. package/dist/preset.js +10 -0
  12. package/dist/preset.js.map +1 -0
  13. package/dist/testing.js +15620 -0
  14. package/dist/testing.js.map +1 -0
  15. package/package.json +148 -0
  16. package/preset.ts +1 -0
  17. package/src/index.ts +21 -0
  18. package/src/integrations/alpine.ts +25 -0
  19. package/src/integrations/base.ts +23 -0
  20. package/src/integrations/index.ts +33 -0
  21. package/src/integrations/preact.ts +41 -0
  22. package/src/integrations/react.ts +38 -0
  23. package/src/integrations/solid.ts +37 -0
  24. package/src/integrations/svelte.ts +43 -0
  25. package/src/integrations/vue.ts +45 -0
  26. package/src/middleware.ts +148 -0
  27. package/src/portable-stories.ts +185 -0
  28. package/src/preset.ts +53 -0
  29. package/src/testing.ts +254 -0
  30. package/src/types.ts +25 -0
  31. package/src/virtual.d.ts +7 -0
  32. package/src/viteAstroContainerRenderersPlugin.ts +84 -0
  33. package/src/vitePluginAstro.ts +59 -0
  34. package/src/vitePluginAstroBuildPrerender.ts +252 -0
  35. package/src/vitePluginAstroComponentMarker.ts +145 -0
  36. package/src/vitePluginAstroFontsFallback.ts +69 -0
  37. package/src/viteStorybookAstroMiddlewarePlugin.ts +123 -0
  38. package/src/viteStorybookRendererFallbackPlugin.ts +29 -0
package/dist/index.js ADDED
@@ -0,0 +1,76 @@
1
+ import {
2
+ core,
3
+ viteFinal
4
+ } from "./chunk-LLYYQI75.js";
5
+ import "./chunk-G3PMV62Z.js";
6
+
7
+ // src/portable-stories.ts
8
+ import {
9
+ composeStory as originalComposeStory,
10
+ composeStories as originalComposeStories,
11
+ setProjectAnnotations as originalSetProjectAnnotations
12
+ } from "storybook/internal/preview-api";
13
+ var render = (args, context) => {
14
+ const Component = context?.component;
15
+ const renderer = context?.parameters?.renderer;
16
+ const id = context?.id || "test-story";
17
+ const brokenRenderers = [];
18
+ if (renderer && brokenRenderers.includes(renderer)) {
19
+ throw new Error(`Renderer '${renderer}' not found. Available renderers: react, vue, svelte, solid, preact`);
20
+ }
21
+ if (!Component) {
22
+ throw new Error(`Unable to render story ${id} as the component annotation is missing from the default export`);
23
+ }
24
+ if (typeof Component === "function" && Component.isAstroComponentFactory) {
25
+ return Component;
26
+ }
27
+ if (typeof Component === "function") {
28
+ if (renderer && !brokenRenderers.includes(renderer)) {
29
+ return Component;
30
+ }
31
+ if (!renderer) {
32
+ throw new Error(
33
+ `Component appears to be a framework component but no renderer is specified. Add 'parameters: { renderer: "framework-name" }' to your story configuration.`
34
+ );
35
+ }
36
+ }
37
+ return {
38
+ component: Component,
39
+ args,
40
+ renderer: renderer || "astro"
41
+ };
42
+ };
43
+ function setProjectAnnotations(projectAnnotations) {
44
+ return originalSetProjectAnnotations(projectAnnotations);
45
+ }
46
+ function composeStory(story, componentAnnotations, projectAnnotations, exportsName) {
47
+ const mergedProjectAnnotations = projectAnnotations ? {
48
+ ...projectAnnotations,
49
+ render: projectAnnotations.render || render
50
+ } : {
51
+ render
52
+ };
53
+ return originalComposeStory(
54
+ story,
55
+ componentAnnotations,
56
+ mergedProjectAnnotations,
57
+ exportsName
58
+ );
59
+ }
60
+ function composeStories(storiesImport, projectAnnotations) {
61
+ const mergedProjectAnnotations = projectAnnotations ? {
62
+ ...projectAnnotations,
63
+ render: projectAnnotations.render || render
64
+ } : {
65
+ render
66
+ };
67
+ return originalComposeStories(storiesImport, mergedProjectAnnotations);
68
+ }
69
+ export {
70
+ composeStories,
71
+ composeStory,
72
+ core,
73
+ setProjectAnnotations,
74
+ viteFinal
75
+ };
76
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/portable-stories.ts"],"sourcesContent":["// @ts-ignore - Storybook internal modules have complex module resolution\nimport type {\n Args,\n ComponentAnnotations,\n NamedOrDefaultProjectAnnotations,\n NormalizedProjectAnnotations,\n ProjectAnnotations,\n StoryAnnotationsOrFn,\n WebRenderer,\n} from 'storybook/internal/types';\n// @ts-ignore - Storybook internal modules have complex module resolution\nimport {\n composeStory as originalComposeStory,\n composeStories as originalComposeStories,\n setProjectAnnotations as originalSetProjectAnnotations,\n} from 'storybook/internal/preview-api';\n\n// Define the AstroRenderer type to match other frameworks\nexport interface AstroRenderer extends WebRenderer {\n component: any;\n storyResult: any;\n}\n\n// Create a render function for testing that mimics Storybook's render behavior\nconst render = (args: Args, context?: any) => {\n const Component = context?.component;\n const renderer = context?.parameters?.renderer;\n const id = context?.id || 'test-story';\n \n // Renderers that are known to not work in the current integration\n const brokenRenderers: string[] = [];\n \n // Mimic the renderer detection logic from the main renderer\n if (renderer && brokenRenderers.includes(renderer)) {\n throw new Error(`Renderer '${renderer}' not found. Available renderers: react, vue, svelte, solid, preact`);\n }\n \n // For Astro components and working integrations, return a renderable object\n if (!Component) {\n throw new Error(`Unable to render story ${id} as the component annotation is missing from the default export`);\n }\n \n // Astro components can be identified by isAstroComponentFactory\n if (typeof Component === 'function' && (Component as any).isAstroComponentFactory) {\n // This is an Astro component - return it for server-side rendering\n return Component;\n }\n \n // For framework components that have working integrations\n if (typeof Component === 'function') {\n if (renderer && !brokenRenderers.includes(renderer)) {\n // This would delegate to working framework renderer\n return Component;\n }\n \n // If no renderer specified for function component\n if (!renderer) {\n throw new Error(\n `Component appears to be a framework component but no renderer is specified. ` +\n `Add 'parameters: { renderer: \"framework-name\" }' to your story configuration.`\n );\n }\n }\n \n // Return a basic representation for testing\n return {\n component: Component,\n args: args,\n renderer: renderer || 'astro'\n };\n};\n\n/**\n * Function that sets the globalConfig of your storybook. The global config is the preview module of\n * your .storybook folder.\n *\n * It should be run a single time, so that your global config (e.g. decorators) is applied to your\n * stories when using `composeStories` or `composeStory`.\n *\n * Example:\n *\n * ```jsx\n * // setup-file.js\n * import { setProjectAnnotations } from '@storybook-astro/framework';\n * import projectAnnotations from './.storybook/preview';\n *\n * setProjectAnnotations(projectAnnotations);\n * ```\n *\n * @param projectAnnotations - E.g. (import projectAnnotations from '../.storybook/preview')\n */\nexport function setProjectAnnotations(\n projectAnnotations:\n | NamedOrDefaultProjectAnnotations<AstroRenderer>\n | NamedOrDefaultProjectAnnotations<AstroRenderer>[]\n): NormalizedProjectAnnotations<AstroRenderer> {\n return originalSetProjectAnnotations<AstroRenderer>(projectAnnotations);\n}\n\n/**\n * Function that will receive a story along with meta (e.g. a default export from a .stories file)\n * and optionally projectAnnotations e.g. (import * as projectAnnotations from '../.storybook/preview')\n * and will return a composed component that has all args/parameters/decorators/etc combined and applied to it.\n *\n * It's very useful for reusing a story in scenarios outside of Storybook like unit testing.\n *\n * Example:\n * ```jsx\n * import { render } from '@testing-library/react';\n * import { composeStory } from '@storybook-astro/framework';\n * import meta, { Primary as PrimaryStory } from './Button.stories';\n *\n * const Primary = composeStory(PrimaryStory, meta);\n *\n * test('renders primary button', () => {\n * const { getByRole } = render(<Primary>Hello world</Primary>);\n * expect(getByRole('button')).toBeInTheDocument();\n * });\n * ```\n *\n * @param story - E.g. (import { Primary } from './Button.stories')\n * @param componentAnnotations - E.g. (import meta from './Button.stories')\n * @param projectAnnotations - E.g. (import * as projectAnnotations from '../.storybook/preview') this can be applied automatically if you use `setProjectAnnotations` in your setup files.\n * @param exportsName - In case your story does not contain a name and you want it to have a name.\n */\nexport function composeStory<TArgs extends Args = Args>(\n story: StoryAnnotationsOrFn<AstroRenderer, TArgs>,\n componentAnnotations: ComponentAnnotations<AstroRenderer, TArgs>,\n projectAnnotations?: ProjectAnnotations<AstroRenderer>,\n exportsName?: string\n) {\n // Merge project annotations with Astro renderer\n const mergedProjectAnnotations: any = projectAnnotations ? {\n ...projectAnnotations,\n render: projectAnnotations.render || render\n } : {\n render\n };\n \n return originalComposeStory<AstroRenderer, TArgs>(\n story as any,\n componentAnnotations,\n mergedProjectAnnotations as any,\n exportsName as any\n );\n}\n\n/**\n * Function that will receive a stories import (e.g. `import * as stories from './Button.stories'`)\n * and optionally a globalConfig (e.g. `import * from '../.storybook/preview`)\n * and will return an object containing all the stories passed, but now as a composed component that has all args/parameters/decorators/etc combined and applied to it.\n *\n * It's very useful for reusing stories in scenarios outside of Storybook like unit testing.\n *\n * Example:\n * ```jsx\n * import { render } from '@testing-library/react';\n * import { composeStories } from '@storybook-astro/framework';\n * import * as stories from './Button.stories';\n *\n * const { Primary, Secondary } = composeStories(stories);\n *\n * test('renders primary button', () => {\n * const { getByRole } = render(<Primary>Hello world</Primary>);\n * expect(getByRole('button')).toBeInTheDocument();\n * });\n * ```\n *\n * @param storiesImport - E.g. (import * as stories from './Button.stories')\n * @param projectAnnotations - E.g. (import * as globalConfig from '../.storybook/preview') this can be applied automatically if you use `setProjectAnnotations` in your setup files.\n */\nexport function composeStories<TModule extends Record<string, any>>(\n storiesImport: TModule,\n projectAnnotations?: ProjectAnnotations<AstroRenderer>\n): { [K in keyof Omit<TModule, 'default'>]: any } {\n // Merge project annotations with Astro renderer\n const mergedProjectAnnotations: any = projectAnnotations ? {\n ...projectAnnotations,\n render: projectAnnotations.render || render\n } : {\n render\n };\n \n return originalComposeStories(storiesImport as any, mergedProjectAnnotations as any) as { [K in keyof Omit<TModule, 'default'>]: any };\n}\n"],"mappings":";;;;;;;AAWA;AAAA,EACE,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,yBAAyB;AAAA,OACpB;AASP,IAAM,SAAS,CAAC,MAAY,YAAkB;AAC5C,QAAM,YAAY,SAAS;AAC3B,QAAM,WAAW,SAAS,YAAY;AACtC,QAAM,KAAK,SAAS,MAAM;AAG1B,QAAM,kBAA4B,CAAC;AAGnC,MAAI,YAAY,gBAAgB,SAAS,QAAQ,GAAG;AAClD,UAAM,IAAI,MAAM,aAAa,QAAQ,qEAAqE;AAAA,EAC5G;AAGA,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,0BAA0B,EAAE,iEAAiE;AAAA,EAC/G;AAGA,MAAI,OAAO,cAAc,cAAe,UAAkB,yBAAyB;AAEjF,WAAO;AAAA,EACT;AAGA,MAAI,OAAO,cAAc,YAAY;AACnC,QAAI,YAAY,CAAC,gBAAgB,SAAS,QAAQ,GAAG;AAEnD,aAAO;AAAA,IACT;AAGA,QAAI,CAAC,UAAU;AACb,YAAM,IAAI;AAAA,QACR;AAAA,MAEF;AAAA,IACF;AAAA,EACF;AAGA,SAAO;AAAA,IACL,WAAW;AAAA,IACX;AAAA,IACA,UAAU,YAAY;AAAA,EACxB;AACF;AAqBO,SAAS,sBACd,oBAG6C;AAC7C,SAAO,8BAA6C,kBAAkB;AACxE;AA4BO,SAAS,aACd,OACA,sBACA,oBACA,aACA;AAEA,QAAM,2BAAgC,qBAAqB;AAAA,IACzD,GAAG;AAAA,IACH,QAAQ,mBAAmB,UAAU;AAAA,EACvC,IAAI;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AA0BO,SAAS,eACd,eACA,oBACgD;AAEhD,QAAM,2BAAgC,qBAAqB;AAAA,IACzD,GAAG;AAAA,IACH,QAAQ,mBAAmB,UAAU;AAAA,EACvC,IAAI;AAAA,IACF;AAAA,EACF;AAEA,SAAO,uBAAuB,eAAsB,wBAA+B;AACrF;","names":[]}
@@ -0,0 +1,206 @@
1
+ import "../chunk-G3PMV62Z.js";
2
+
3
+ // src/integrations/alpine.ts
4
+ var AlpineIntegration = class {
5
+ name = "alpine";
6
+ dependencies = [
7
+ "@astrojs/alpinejs",
8
+ "alpinejs"
9
+ ];
10
+ options;
11
+ renderer = {};
12
+ constructor(options = {}) {
13
+ this.options = options;
14
+ }
15
+ resolveClient(_moduleName) {
16
+ }
17
+ async loadIntegration() {
18
+ const framework = await import("@astrojs/alpinejs");
19
+ return framework.default(this.options);
20
+ }
21
+ };
22
+
23
+ // src/integrations/preact.ts
24
+ var PreactIntegration = class {
25
+ name = "preact";
26
+ dependencies = ["@astrojs/preact", "@storybook/preact-vite", "preact"];
27
+ options;
28
+ storybookEntryPreview = "@storybook/preact/entry-preview";
29
+ renderer = {
30
+ server: {
31
+ name: "@astrojs/preact",
32
+ entrypoint: "@astrojs/preact/server.js"
33
+ },
34
+ client: {
35
+ name: "@astrojs/preact",
36
+ entrypoint: "@astrojs/preact/client.js"
37
+ }
38
+ };
39
+ constructor(options = {}) {
40
+ this.options = options;
41
+ }
42
+ resolveClient(moduleName) {
43
+ if (moduleName.startsWith("@astrojs/preact/client")) {
44
+ return `/@id/${moduleName}`;
45
+ }
46
+ }
47
+ async loadIntegration() {
48
+ const framework = await import("@astrojs/preact");
49
+ return framework.default(this.options);
50
+ }
51
+ };
52
+
53
+ // src/integrations/react.ts
54
+ var ReactIntegration = class {
55
+ name = "react";
56
+ dependencies = ["@astrojs/react", "@storybook/react", "react", "react-dom"];
57
+ options;
58
+ storybookEntryPreview = "@storybook/react/entry-preview";
59
+ renderer = {
60
+ server: {
61
+ name: "@astrojs/react",
62
+ entrypoint: "@astrojs/react/server.js"
63
+ },
64
+ client: {
65
+ name: "@astrojs/react",
66
+ entrypoint: "@astrojs/react/client.js"
67
+ }
68
+ };
69
+ constructor(options = {}) {
70
+ this.options = options;
71
+ }
72
+ resolveClient(moduleName) {
73
+ if (moduleName.startsWith("@astrojs/react/client")) {
74
+ return `/@id/${moduleName}`;
75
+ }
76
+ }
77
+ async loadIntegration() {
78
+ const framework = await import("@astrojs/react");
79
+ return framework.default(this.options);
80
+ }
81
+ };
82
+
83
+ // src/integrations/solid.ts
84
+ var SolidIntegration = class {
85
+ name = "solid";
86
+ dependencies = ["@astrojs/solid-js", "storybook-solidjs-vite", "solid-js"];
87
+ options;
88
+ storybookEntryPreview = "storybook-solidjs-vite/renderer/entry-preview";
89
+ renderer = {
90
+ server: {
91
+ name: "@astrojs/solid-js",
92
+ entrypoint: "@astrojs/solid-js/server.js"
93
+ },
94
+ client: {
95
+ name: "@astrojs/solid-js",
96
+ entrypoint: "@astrojs/solid-js/client.js"
97
+ }
98
+ };
99
+ constructor(options = {}) {
100
+ this.options = options;
101
+ }
102
+ resolveClient(moduleName) {
103
+ if (moduleName.startsWith("@astrojs/solid-js/client")) {
104
+ return `/@id/${moduleName}`;
105
+ }
106
+ }
107
+ async loadIntegration() {
108
+ const framework = await import("@astrojs/solid-js");
109
+ return framework.default(this.options);
110
+ }
111
+ };
112
+
113
+ // src/integrations/svelte.ts
114
+ var DEFAULT_OPTIONS = {
115
+ extensions: [".svelte"]
116
+ };
117
+ var SvelteIntegration = class {
118
+ name = "svelte";
119
+ dependencies = ["@astrojs/svelte", "@storybook/svelte", "svelte"];
120
+ options;
121
+ storybookEntryPreview = "@storybook/svelte/entry-preview";
122
+ renderer = {
123
+ server: {
124
+ entrypoint: "@astrojs/svelte/server.js",
125
+ name: "@astrojs/svelte"
126
+ },
127
+ client: {
128
+ name: "@astrojs/svelte",
129
+ entrypoint: "@astrojs/svelte/client.js"
130
+ }
131
+ };
132
+ constructor(options = DEFAULT_OPTIONS) {
133
+ this.options = options;
134
+ }
135
+ resolveClient(moduleName) {
136
+ if (moduleName.startsWith("@astrojs/svelte/client")) {
137
+ return `/@id/${moduleName}`;
138
+ }
139
+ }
140
+ async loadIntegration() {
141
+ const framework = await import("@astrojs/svelte");
142
+ return framework.default(this.options);
143
+ }
144
+ };
145
+
146
+ // src/integrations/vue.ts
147
+ var DEFAULT_OPTIONS2 = {
148
+ include: ["**/*.vue"]
149
+ };
150
+ var VueIntegration = class {
151
+ name = "vue";
152
+ dependencies = ["@astrojs/vue", "@storybook/vue3", "vue"];
153
+ options;
154
+ storybookEntryPreview = "@storybook/vue3/entry-preview";
155
+ renderer = {
156
+ server: {
157
+ name: "@astrojs/vue",
158
+ entrypoint: "@astrojs/vue/server.js"
159
+ },
160
+ client: {
161
+ name: "@astrojs/vue",
162
+ entrypoint: "@astrojs/vue/client.js"
163
+ }
164
+ };
165
+ constructor(options = DEFAULT_OPTIONS2) {
166
+ this.options = options;
167
+ }
168
+ resolveClient(moduleName) {
169
+ if (moduleName.startsWith("@astrojs/vue/client")) {
170
+ return `/@id/${moduleName}`;
171
+ }
172
+ }
173
+ async loadIntegration() {
174
+ const framework = await import("@astrojs/vue");
175
+ return framework.default(this.options);
176
+ }
177
+ };
178
+
179
+ // src/integrations/index.ts
180
+ function alpinejs(options) {
181
+ return new AlpineIntegration(options);
182
+ }
183
+ function preact(options) {
184
+ return new PreactIntegration(options);
185
+ }
186
+ function react(options) {
187
+ return new ReactIntegration(options);
188
+ }
189
+ function solid(options) {
190
+ return new SolidIntegration(options);
191
+ }
192
+ function svelte(options) {
193
+ return new SvelteIntegration(options);
194
+ }
195
+ function vue(options) {
196
+ return new VueIntegration(options);
197
+ }
198
+ export {
199
+ alpinejs,
200
+ preact,
201
+ react,
202
+ solid,
203
+ svelte,
204
+ vue
205
+ };
206
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/integrations/alpine.ts","../../src/integrations/preact.ts","../../src/integrations/react.ts","../../src/integrations/solid.ts","../../src/integrations/svelte.ts","../../src/integrations/vue.ts","../../src/integrations/index.ts"],"sourcesContent":["import type { Integration } from './base.ts';\n\nexport type Options = Record<string, unknown>;\n\nexport class AlpineIntegration implements Integration {\n readonly name = 'alpine';\n readonly dependencies = [\n '@astrojs/alpinejs',\n 'alpinejs'\n ];\n readonly options: Options;\n readonly renderer = {};\n\n constructor(options: Options = {}) {\n this.options = options;\n }\n\n resolveClient(_moduleName: string): undefined {}\n\n async loadIntegration() {\n const framework = await import('@astrojs/alpinejs');\n\n return framework.default(this.options);\n }\n}\n","import type { Integration } from './base.ts';\nimport type { PreactPluginOptions } from '@preact/preset-vite';\n\nexport type Options = Pick<PreactPluginOptions, 'include' | 'exclude'> & {\n compat?: boolean;\n devtools?: boolean;\n};\n\nexport class PreactIntegration implements Integration {\n readonly name = 'preact';\n readonly dependencies = ['@astrojs/preact', '@storybook/preact-vite', 'preact'];\n readonly options: Options;\n readonly storybookEntryPreview = '@storybook/preact/entry-preview';\n \n readonly renderer = {\n server: {\n name: '@astrojs/preact',\n entrypoint: '@astrojs/preact/server.js'\n },\n client: {\n name: '@astrojs/preact',\n entrypoint: '@astrojs/preact/client.js'\n }\n };\n\n constructor(options: Options = {}) {\n this.options = options;\n }\n\n resolveClient(moduleName: string): string | undefined {\n if (moduleName.startsWith('@astrojs/preact/client')) {\n return `/@id/${moduleName}`;\n }\n }\n\n async loadIntegration() {\n const framework = await import('@astrojs/preact');\n\n return framework.default(this.options);\n }\n}\n","import type { Integration } from './base.ts';\nimport type { Options as ViteReactPluginOptions } from '@vitejs/plugin-react';\n\nexport type Options = Pick<ViteReactPluginOptions, 'include' | 'exclude'>;\n\nexport class ReactIntegration implements Integration {\n readonly name = 'react';\n readonly dependencies = ['@astrojs/react', '@storybook/react', 'react', 'react-dom'];\n readonly options: Options;\n readonly storybookEntryPreview = '@storybook/react/entry-preview';\n\n readonly renderer = {\n server: {\n name: '@astrojs/react',\n entrypoint: '@astrojs/react/server.js'\n },\n client: {\n name: '@astrojs/react',\n entrypoint: '@astrojs/react/client.js'\n }\n };\n\n constructor(options: Options = {}) {\n this.options = options;\n }\n\n resolveClient(moduleName: string): string | undefined {\n if (moduleName.startsWith('@astrojs/react/client')) {\n return `/@id/${moduleName}`;\n }\n }\n\n async loadIntegration() {\n const framework = await import('@astrojs/react');\n\n return framework.default(this.options);\n }\n}\n","import type { Integration } from './base.ts';\nimport type { Options as ViteSolidPluginOptions } from 'vite-plugin-solid';\n\nexport type Options = Pick<ViteSolidPluginOptions, 'include' | 'exclude'>;\n\nexport class SolidIntegration implements Integration {\n readonly name = 'solid';\n readonly dependencies = ['@astrojs/solid-js', 'storybook-solidjs-vite', 'solid-js'];\n readonly options: Options;\n readonly storybookEntryPreview = 'storybook-solidjs-vite/renderer/entry-preview';\n readonly renderer = {\n server: {\n name: '@astrojs/solid-js',\n entrypoint: '@astrojs/solid-js/server.js'\n },\n client: {\n name: '@astrojs/solid-js',\n entrypoint: '@astrojs/solid-js/client.js'\n }\n };\n\n constructor(options: Options = {}) {\n this.options = options;\n }\n\n resolveClient(moduleName: string): string | undefined {\n if (moduleName.startsWith('@astrojs/solid-js/client')) {\n return `/@id/${moduleName}`;\n }\n }\n\n async loadIntegration() {\n const framework = await import('@astrojs/solid-js');\n\n return framework.default(this.options);\n }\n}\n","import type { Integration } from './base.ts';\nimport type { Options as _foo, PluginOptions, SvelteConfig } from '@sveltejs/vite-plugin-svelte';\n\n// Using Omit with empty string to preserve index signature\n// capabilities while maintaining the structure of the original types\nexport type Options = Omit<PluginOptions, ''> & Omit<SvelteConfig, 'vitePlugin'>;\n\nconst DEFAULT_OPTIONS: Options = {\n extensions: ['.svelte']\n};\n\nexport class SvelteIntegration implements Integration {\n readonly name = 'svelte';\n readonly dependencies = ['@astrojs/svelte', '@storybook/svelte', 'svelte'];\n readonly options: Options;\n readonly storybookEntryPreview = '@storybook/svelte/entry-preview';\n readonly renderer = {\n server: {\n entrypoint: '@astrojs/svelte/server.js',\n name: '@astrojs/svelte'\n },\n client: {\n name: '@astrojs/svelte',\n entrypoint: '@astrojs/svelte/client.js'\n }\n };\n\n constructor(options: Options = DEFAULT_OPTIONS) {\n this.options = options;\n }\n\n resolveClient(moduleName: string): string | undefined {\n if (moduleName.startsWith('@astrojs/svelte/client')) {\n return `/@id/${moduleName}`;\n }\n }\n\n async loadIntegration() {\n const framework = await import('@astrojs/svelte');\n\n return framework.default(this.options);\n }\n}\n","import type { Integration } from './base.ts';\nimport type { Options as VueOptions } from '@vitejs/plugin-vue';\nimport type { Options as VueJsxOptions } from '@vitejs/plugin-vue-jsx';\n\nexport type Options = Pick<VueOptions, 'include' | 'exclude'> & {\n jsx?: boolean | VueJsxOptions;\n};\n\nconst DEFAULT_OPTIONS: Options = {\n include: ['**/*.vue']\n};\n\nexport class VueIntegration implements Integration {\n readonly name = 'vue';\n readonly dependencies = ['@astrojs/vue', '@storybook/vue3', 'vue'];\n readonly options: Options;\n readonly storybookEntryPreview = '@storybook/vue3/entry-preview';\n\n readonly renderer = {\n server: {\n name: '@astrojs/vue',\n entrypoint: '@astrojs/vue/server.js'\n },\n client: {\n name: '@astrojs/vue',\n entrypoint: '@astrojs/vue/client.js'\n }\n };\n\n constructor(options: Options = DEFAULT_OPTIONS) {\n this.options = options;\n }\n\n resolveClient(moduleName: string): string | undefined {\n if (moduleName.startsWith('@astrojs/vue/client')) {\n return `/@id/${moduleName}`;\n }\n }\n\n async loadIntegration() {\n const framework = await import('@astrojs/vue');\n\n return framework.default(this.options);\n }\n}\n","import { AlpineIntegration, type Options as AlpineOptions } from './alpine.ts';\nimport { PreactIntegration, type Options as PreactOptions } from './preact.ts';\nimport { ReactIntegration, type Options as ReactOptions } from './react.ts';\nimport { SolidIntegration, type Options as SolidOptions } from './solid.ts';\nimport { SvelteIntegration, type Options as SvelteOptions } from './svelte.ts';\nimport { VueIntegration, type Options as VueOptions } from './vue.ts';\n\n\nexport function alpinejs(options?: AlpineOptions) {\n return new AlpineIntegration(options);\n}\n\nexport function preact(options?: PreactOptions) {\n return new PreactIntegration(options);\n}\n\nexport function react(options?: ReactOptions) {\n return new ReactIntegration(options);\n}\n\nexport function solid(options?: SolidOptions) {\n return new SolidIntegration(options);\n}\n\nexport function svelte(options?: SvelteOptions) {\n return new SvelteIntegration(options);\n}\n\nexport function vue(options?: VueOptions) {\n return new VueIntegration(options);\n}\n\nexport type { Integration } from './base.ts';\n"],"mappings":"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","names":["DEFAULT_OPTIONS"]}