@storybook/vue3 9.2.0-alpha.3 → 10.0.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.
@@ -1,16 +1,372 @@
1
- "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var entry_preview_docs_exports={};__export(entry_preview_docs_exports,{decorators:()=>decorators});module.exports=__toCommonJS(entry_preview_docs_exports);var import_docs_tools=require("storybook/internal/docs-tools"),import_preview_api=require("storybook/preview-api"),import_vue=require("vue"),TRACKING_SYMBOL=Symbol("DEEP_ACCESS_SYMBOL"),isProxy=obj=>!!(obj&&typeof obj=="object"&&TRACKING_SYMBOL in obj),sourceDecorator=(storyFn,ctx)=>{let story=storyFn();return(0,import_preview_api.useEffect)(()=>{let sourceCode=generateSourceCode(ctx);shouldSkipSourceCodeGeneration(ctx)||(0,import_preview_api.emitTransformCode)(sourceCode,ctx)}),story},generateSourceCode=ctx=>{let sourceCodeContext={imports:{},scriptVariables:{}},{displayName,slotNames,eventNames}=parseDocgenInfo(ctx.component),props=generatePropsSourceCode(ctx.args,slotNames,eventNames,sourceCodeContext),slotSourceCode=generateSlotSourceCode(ctx.args,slotNames,sourceCodeContext),componentName=displayName||ctx.title.split("/").at(-1),templateCode=slotSourceCode?`<${componentName} ${props}> ${slotSourceCode} </${componentName}>`:`<${componentName} ${props} />`,variablesCode=Object.entries(sourceCodeContext.scriptVariables).map(([name,value])=>`const ${name} = ${value};`).join(`
1
+ import {
2
+ __name
3
+ } from "./_browser-chunks/chunk-JFJ5UJ7Q.js";
2
4
 
3
- `),importsCode=Object.entries(sourceCodeContext.imports).map(([packageName,imports])=>`import { ${Array.from(imports.values()).sort().join(", ")} } from "${packageName}";`).join(`
4
- `),template=`<template>
5
+ // src/docs/sourceDecorator.ts
6
+ import { SourceType } from "storybook/internal/docs-tools";
7
+ import { emitTransformCode, useEffect } from "storybook/preview-api";
8
+ import { isVNode } from "vue";
9
+ var TRACKING_SYMBOL = Symbol("DEEP_ACCESS_SYMBOL");
10
+ var isProxy = /* @__PURE__ */ __name((obj) => !!(obj && typeof obj === "object" && TRACKING_SYMBOL in obj), "isProxy");
11
+ var sourceDecorator = /* @__PURE__ */ __name((storyFn, ctx) => {
12
+ const story = storyFn();
13
+ useEffect(() => {
14
+ const sourceCode = generateSourceCode(ctx);
15
+ if (shouldSkipSourceCodeGeneration(ctx)) {
16
+ return;
17
+ }
18
+ emitTransformCode(sourceCode, ctx);
19
+ });
20
+ return story;
21
+ }, "sourceDecorator");
22
+ var generateSourceCode = /* @__PURE__ */ __name((ctx) => {
23
+ const sourceCodeContext = {
24
+ imports: {},
25
+ scriptVariables: {}
26
+ };
27
+ const { displayName, slotNames, eventNames } = parseDocgenInfo(ctx.component);
28
+ const props = generatePropsSourceCode(ctx.args, slotNames, eventNames, sourceCodeContext);
29
+ const slotSourceCode = generateSlotSourceCode(ctx.args, slotNames, sourceCodeContext);
30
+ const componentName = displayName || ctx.title.split("/").at(-1);
31
+ const templateCode = slotSourceCode ? `<${componentName} ${props}> ${slotSourceCode} </${componentName}>` : `<${componentName} ${props} />`;
32
+ const variablesCode = Object.entries(sourceCodeContext.scriptVariables).map(([name, value]) => `const ${name} = ${value};`).join("\n\n");
33
+ const importsCode = Object.entries(sourceCodeContext.imports).map(([packageName, imports]) => {
34
+ return `import { ${Array.from(imports.values()).sort().join(", ")} } from "${packageName}";`;
35
+ }).join("\n");
36
+ const template = `<template>
5
37
  ${templateCode}
6
- </template>`;return!importsCode&&!variablesCode?template:`<script lang="ts" setup>
7
- ${importsCode?`${importsCode}
38
+ </template>`;
39
+ if (!importsCode && !variablesCode) {
40
+ return template;
41
+ }
42
+ return `<script lang="ts" setup>
43
+ ${importsCode ? `${importsCode}
8
44
 
9
- ${variablesCode}`:variablesCode}
10
- </script>
45
+ ${variablesCode}` : variablesCode}
46
+ <\/script>
11
47
 
12
- ${template}`},shouldSkipSourceCodeGeneration=context=>{let sourceParams=context?.parameters.docs?.source;return sourceParams?.type===import_docs_tools.SourceType.DYNAMIC?!1:!context?.parameters.__isArgsStory||sourceParams?.code||sourceParams?.type===import_docs_tools.SourceType.CODE},parseDocgenInfo=component=>{if(!component||!("__docgenInfo"in component)||!component.__docgenInfo||typeof component.__docgenInfo!="object")return{displayName:component?.__name,eventNames:[],slotNames:[]};let docgenInfo=component.__docgenInfo,displayName="displayName"in docgenInfo&&typeof docgenInfo.displayName=="string"?docgenInfo.displayName:void 0,parseNames=key=>!(key in docgenInfo)||!Array.isArray(docgenInfo[key])?[]:docgenInfo[key].map(i=>i&&typeof i=="object"&&"name"in i?i.name:void 0).filter(i=>typeof i=="string");return{displayName:displayName||component.__name,slotNames:parseNames("slots").sort((a,b)=>a==="default"?-1:b==="default"?1:a.localeCompare(b)),eventNames:parseNames("events")}},generatePropsSourceCode=(args,slotNames,eventNames,ctx)=>{let properties=[];Object.entries(args).forEach(([propName,value])=>{if(!slotNames.includes(propName)&&value!=null)switch(isProxy(value)&&(value=value.toString()),typeof value){case"string":if(value==="")return;properties.push({name:propName,value:value.includes('"')?`'${value}'`:`"${value}"`,templateFn:(name,propValue)=>`${name}=${propValue}`});break;case"number":properties.push({name:propName,value:value.toString(),templateFn:(name,propValue)=>`:${name}="${propValue}"`});break;case"bigint":properties.push({name:propName,value:`BigInt(${value.toString()})`,templateFn:(name,propValue)=>`:${name}="${propValue}"`});break;case"boolean":properties.push({name:propName,value:value?"true":"false",templateFn:(name,propValue)=>propValue==="true"?name:`:${name}="false"`});break;case"symbol":properties.push({name:propName,value:`Symbol(${value.description?`'${value.description}'`:""})`,templateFn:(name,propValue)=>`:${name}="${propValue}"`});break;case"object":{properties.push({name:propName,value:formatObject(value??{}),templateFn:void 0});break}case"function":break}}),properties.sort((a,b)=>a.name.localeCompare(b.name));let props=[];return properties.forEach(prop=>{let isVModel=eventNames.includes(`update:${prop.name}`);if(!isVModel&&prop.templateFn){props.push(prop.templateFn(prop.name,prop.value));return}let variableName=prop.name;if(variableName in ctx.scriptVariables){let index=1;do variableName=`${prop.name}${index}`,index++;while(variableName in ctx.scriptVariables)}if(!isVModel){ctx.scriptVariables[variableName]=prop.value,props.push(`:${prop.name}="${variableName}"`);return}ctx.scriptVariables[variableName]=`ref(${prop.value})`,ctx.imports.vue||(ctx.imports.vue=new Set),ctx.imports.vue.add("ref"),prop.name==="modelValue"?props.push(`v-model="${variableName}"`):props.push(`v-model:${prop.name}="${variableName}"`)}),props.join(" ")},generateSlotSourceCode=(args,slotNames,ctx)=>{let slotSourceCodes=[];return slotNames.forEach(slotName=>{let arg=args[slotName];if(!arg)return;let slotContent=generateSlotChildrenSourceCode([arg],ctx);if(!slotContent)return;let slotBindings=typeof arg=="function"?getFunctionParamNames(arg):[];slotName==="default"&&!slotBindings.length?slotSourceCodes.push(slotContent):slotSourceCodes.push(`<template ${slotBindingsToString(slotName,slotBindings)}>${slotContent}</template>`)}),slotSourceCodes.join(`
48
+ ${template}`;
49
+ }, "generateSourceCode");
50
+ var shouldSkipSourceCodeGeneration = /* @__PURE__ */ __name((context) => {
51
+ const sourceParams = context?.parameters.docs?.source;
52
+ if (sourceParams?.type === SourceType.DYNAMIC) {
53
+ return false;
54
+ }
55
+ const isArgsStory = context?.parameters.__isArgsStory;
56
+ return !isArgsStory || sourceParams?.code || sourceParams?.type === SourceType.CODE;
57
+ }, "shouldSkipSourceCodeGeneration");
58
+ var parseDocgenInfo = /* @__PURE__ */ __name((component) => {
59
+ if (!component || !("__docgenInfo" in component) || !component.__docgenInfo || typeof component.__docgenInfo !== "object") {
60
+ return {
61
+ displayName: component?.__name,
62
+ eventNames: [],
63
+ slotNames: []
64
+ };
65
+ }
66
+ const docgenInfo = component.__docgenInfo;
67
+ const displayName = "displayName" in docgenInfo && typeof docgenInfo.displayName === "string" ? docgenInfo.displayName : void 0;
68
+ const parseNames = /* @__PURE__ */ __name((key) => {
69
+ if (!(key in docgenInfo) || !Array.isArray(docgenInfo[key])) {
70
+ return [];
71
+ }
72
+ const values = docgenInfo[key];
73
+ return values.map((i) => i && typeof i === "object" && "name" in i ? i.name : void 0).filter((i) => typeof i === "string");
74
+ }, "parseNames");
75
+ return {
76
+ displayName: displayName || component.__name,
77
+ slotNames: parseNames("slots").sort((a, b) => {
78
+ if (a === "default") {
79
+ return -1;
80
+ }
81
+ if (b === "default") {
82
+ return 1;
83
+ }
84
+ return a.localeCompare(b);
85
+ }),
86
+ eventNames: parseNames("events")
87
+ };
88
+ }, "parseDocgenInfo");
89
+ var generatePropsSourceCode = /* @__PURE__ */ __name((args, slotNames, eventNames, ctx) => {
90
+ const properties = [];
91
+ Object.entries(args).forEach(([propName, value]) => {
92
+ if (slotNames.includes(propName)) {
93
+ return;
94
+ }
95
+ if (value == void 0) {
96
+ return;
97
+ }
98
+ if (isProxy(value)) {
99
+ value = value.toString();
100
+ }
101
+ switch (typeof value) {
102
+ case "string":
103
+ if (value === "") {
104
+ return;
105
+ }
106
+ properties.push({
107
+ name: propName,
108
+ value: value.includes('"') ? `'${value}'` : `"${value}"`,
109
+ templateFn: /* @__PURE__ */ __name((name, propValue) => `${name}=${propValue}`, "templateFn")
110
+ });
111
+ break;
112
+ case "number":
113
+ properties.push({
114
+ name: propName,
115
+ value: value.toString(),
116
+ templateFn: /* @__PURE__ */ __name((name, propValue) => `:${name}="${propValue}"`, "templateFn")
117
+ });
118
+ break;
119
+ case "bigint":
120
+ properties.push({
121
+ name: propName,
122
+ value: `BigInt(${value.toString()})`,
123
+ templateFn: /* @__PURE__ */ __name((name, propValue) => `:${name}="${propValue}"`, "templateFn")
124
+ });
125
+ break;
126
+ case "boolean":
127
+ properties.push({
128
+ name: propName,
129
+ value: value ? "true" : "false",
130
+ templateFn: /* @__PURE__ */ __name((name, propValue) => propValue === "true" ? name : `:${name}="false"`, "templateFn")
131
+ });
132
+ break;
133
+ case "symbol":
134
+ properties.push({
135
+ name: propName,
136
+ value: `Symbol(${value.description ? `'${value.description}'` : ""})`,
137
+ templateFn: /* @__PURE__ */ __name((name, propValue) => `:${name}="${propValue}"`, "templateFn")
138
+ });
139
+ break;
140
+ case "object": {
141
+ properties.push({
142
+ name: propName,
143
+ value: formatObject(value ?? {}),
144
+ // to follow Vue best practices, complex values like object and arrays are
145
+ // usually placed inside the <script setup> block instead of inlining them in the <template>
146
+ templateFn: void 0
147
+ });
148
+ break;
149
+ }
150
+ case "function":
151
+ break;
152
+ }
153
+ });
154
+ properties.sort((a, b) => a.name.localeCompare(b.name));
155
+ const props = [];
156
+ properties.forEach((prop) => {
157
+ const isVModel = eventNames.includes(`update:${prop.name}`);
158
+ if (!isVModel && prop.templateFn) {
159
+ props.push(prop.templateFn(prop.name, prop.value));
160
+ return;
161
+ }
162
+ let variableName = prop.name;
163
+ if (variableName in ctx.scriptVariables) {
164
+ let index = 1;
165
+ do {
166
+ variableName = `${prop.name}${index}`;
167
+ index++;
168
+ } while (variableName in ctx.scriptVariables);
169
+ }
170
+ if (!isVModel) {
171
+ ctx.scriptVariables[variableName] = prop.value;
172
+ props.push(`:${prop.name}="${variableName}"`);
173
+ return;
174
+ }
175
+ ctx.scriptVariables[variableName] = `ref(${prop.value})`;
176
+ if (!ctx.imports.vue) {
177
+ ctx.imports.vue = /* @__PURE__ */ new Set();
178
+ }
179
+ ctx.imports.vue.add("ref");
180
+ if (prop.name === "modelValue") {
181
+ props.push(`v-model="${variableName}"`);
182
+ } else {
183
+ props.push(`v-model:${prop.name}="${variableName}"`);
184
+ }
185
+ });
186
+ return props.join(" ");
187
+ }, "generatePropsSourceCode");
188
+ var generateSlotSourceCode = /* @__PURE__ */ __name((args, slotNames, ctx) => {
189
+ const slotSourceCodes = [];
190
+ slotNames.forEach((slotName) => {
191
+ const arg = args[slotName];
192
+ if (!arg) {
193
+ return;
194
+ }
195
+ const slotContent = generateSlotChildrenSourceCode([arg], ctx);
196
+ if (!slotContent) {
197
+ return;
198
+ }
199
+ const slotBindings = typeof arg === "function" ? getFunctionParamNames(arg) : [];
200
+ if (slotName === "default" && !slotBindings.length) {
201
+ slotSourceCodes.push(slotContent);
202
+ } else {
203
+ slotSourceCodes.push(
204
+ `<template ${slotBindingsToString(slotName, slotBindings)}>${slotContent}</template>`
205
+ );
206
+ }
207
+ });
208
+ return slotSourceCodes.join("\n\n");
209
+ }, "generateSlotSourceCode");
210
+ var generateSlotChildrenSourceCode = /* @__PURE__ */ __name((children, ctx) => {
211
+ const slotChildrenSourceCodes = [];
212
+ const generateSingleChildSourceCode = /* @__PURE__ */ __name((child) => {
213
+ if (isVNode(child)) {
214
+ return generateVNodeSourceCode(child, ctx);
215
+ }
216
+ switch (typeof child) {
217
+ case "string":
218
+ case "number":
219
+ case "boolean":
220
+ return child.toString();
221
+ case "object":
222
+ if (child === null) {
223
+ return "";
224
+ }
225
+ if (Array.isArray(child)) {
226
+ return child.map(generateSingleChildSourceCode).filter((code) => code !== "").join("\n");
227
+ }
228
+ return JSON.stringify(child);
229
+ case "function": {
230
+ const paramNames = getFunctionParamNames(child).filter(
231
+ (param) => !["{", "}"].includes(param)
232
+ );
233
+ const parameters = {};
234
+ const proxied = {};
235
+ paramNames.forEach((param) => {
236
+ parameters[param] = `{{ ${param} }}`;
237
+ proxied[param] = new Proxy(
238
+ {
239
+ // we use the symbol to identify the proxy
240
+ [TRACKING_SYMBOL]: true
241
+ },
242
+ {
243
+ // getter is called when any prop of the parameter is read
244
+ get: /* @__PURE__ */ __name((t, key) => {
245
+ if (key === TRACKING_SYMBOL) {
246
+ return t[TRACKING_SYMBOL];
247
+ }
248
+ if ([Symbol.toPrimitive, Symbol.toStringTag, "toString"].includes(key)) {
249
+ return () => `{{ ${param} }}`;
250
+ }
251
+ if (key === "v-bind") {
252
+ return `${param}`;
253
+ }
254
+ return `{{ ${param}.${key.toString()} }}`;
255
+ }, "get"),
256
+ // ownKeys is called, among other uses, when an object is destructured
257
+ // in this case we assume the parameter is supposed to be bound using "v-bind"
258
+ // Therefore we only return one special key "v-bind" and the getter will be called afterwards with it
259
+ ownKeys: /* @__PURE__ */ __name(() => {
260
+ return [`v-bind`];
261
+ }, "ownKeys"),
262
+ /** Called when destructured */
263
+ getOwnPropertyDescriptor: /* @__PURE__ */ __name(() => ({
264
+ configurable: true,
265
+ enumerable: true,
266
+ value: param,
267
+ writable: true
268
+ }), "getOwnPropertyDescriptor")
269
+ }
270
+ );
271
+ });
272
+ const returnValue = child(proxied);
273
+ const slotSourceCode = generateSlotChildrenSourceCode([returnValue], ctx);
274
+ return slotSourceCode.replaceAll(/ (\S+)="{{ (\S+) }}"/g, ` :$1="$2"`);
275
+ }
276
+ case "bigint":
277
+ return `{{ BigInt(${child.toString()}) }}`;
278
+ // the only missing case here is "symbol"
279
+ // because rendering a symbol as slot / HTML does not make sense and is not supported by Vue
280
+ default:
281
+ return "";
282
+ }
283
+ }, "generateSingleChildSourceCode");
284
+ children.forEach((child) => {
285
+ const sourceCode = generateSingleChildSourceCode(child);
286
+ if (sourceCode !== "") {
287
+ slotChildrenSourceCodes.push(sourceCode);
288
+ }
289
+ });
290
+ return slotChildrenSourceCodes.join("\n");
291
+ }, "generateSlotChildrenSourceCode");
292
+ var generateVNodeSourceCode = /* @__PURE__ */ __name((vnode, ctx) => {
293
+ const componentName = getVNodeName(vnode);
294
+ let childrenCode = "";
295
+ if (typeof vnode.children === "string") {
296
+ childrenCode = vnode.children;
297
+ } else if (Array.isArray(vnode.children)) {
298
+ childrenCode = generateSlotChildrenSourceCode(vnode.children, ctx);
299
+ } else if (vnode.children) {
300
+ childrenCode = generateSlotSourceCode(
301
+ vnode.children,
302
+ // $stable is a default property in vnode.children so we need to filter it out
303
+ // to not generate source code for it
304
+ Object.keys(vnode.children).filter((i) => i !== "$stable"),
305
+ ctx
306
+ );
307
+ }
308
+ const props = vnode.props ? generatePropsSourceCode(vnode.props, [], [], ctx) : "";
309
+ if (childrenCode) {
310
+ return `<${componentName}${props ? ` ${props}` : ""}>${childrenCode}</${componentName}>`;
311
+ }
312
+ return `<${componentName}${props ? ` ${props}` : ""} />`;
313
+ }, "generateVNodeSourceCode");
314
+ var getVNodeName = /* @__PURE__ */ __name((vnode) => {
315
+ if (typeof vnode.type === "string") {
316
+ return vnode.type;
317
+ }
318
+ if (typeof vnode.type === "object") {
319
+ if ("name" in vnode.type && vnode.type.name) {
320
+ return vnode.type.name;
321
+ } else if ("__name" in vnode.type && vnode.type.__name) {
322
+ return vnode.type.__name;
323
+ }
324
+ }
325
+ return "component";
326
+ }, "getVNodeName");
327
+ var getFunctionParamNames = /* @__PURE__ */ __name((func) => {
328
+ const STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;
329
+ const ARGUMENT_NAMES = /([^\s,]+)/g;
330
+ const fnStr = func.toString().replace(STRIP_COMMENTS, "");
331
+ const result = fnStr.slice(fnStr.indexOf("(") + 1, fnStr.indexOf(")")).match(ARGUMENT_NAMES);
332
+ if (!result) {
333
+ return [];
334
+ }
335
+ return result.flatMap((param) => {
336
+ if (["{", "}"].includes(param)) {
337
+ return param;
338
+ }
339
+ const nonMinifiedName = param.split(":")[0].trim();
340
+ if (nonMinifiedName.startsWith("{")) {
341
+ return ["{", nonMinifiedName.substring(1)];
342
+ }
343
+ if (param.endsWith("}") && !nonMinifiedName.endsWith("}")) {
344
+ return [nonMinifiedName, "}"];
345
+ }
346
+ return nonMinifiedName;
347
+ });
348
+ }, "getFunctionParamNames");
349
+ var slotBindingsToString = /* @__PURE__ */ __name((slotName, params) => {
350
+ if (!params.length) {
351
+ return `#${slotName}`;
352
+ }
353
+ if (params.length === 1) {
354
+ return `#${slotName}="${params[0]}"`;
355
+ }
356
+ return `#${slotName}="{ ${params.filter((i) => !["{", "}"].includes(i)).join(", ")} }"`;
357
+ }, "slotBindingsToString");
358
+ var formatObject = /* @__PURE__ */ __name((obj) => {
359
+ const isPrimitive = Object.values(obj).every(
360
+ (value) => value == null || typeof value !== "object"
361
+ );
362
+ if (isPrimitive) {
363
+ return JSON.stringify(obj);
364
+ }
365
+ return JSON.stringify(obj, null, 2);
366
+ }, "formatObject");
13
367
 
14
- `)},generateSlotChildrenSourceCode=(children,ctx)=>{let slotChildrenSourceCodes=[],generateSingleChildSourceCode=child=>{if((0,import_vue.isVNode)(child))return generateVNodeSourceCode(child,ctx);switch(typeof child){case"string":case"number":case"boolean":return child.toString();case"object":return child===null?"":Array.isArray(child)?child.map(generateSingleChildSourceCode).filter(code=>code!=="").join(`
15
- `):JSON.stringify(child);case"function":{let paramNames=getFunctionParamNames(child).filter(param=>!["{","}"].includes(param)),parameters={},proxied={};paramNames.forEach(param=>{parameters[param]=`{{ ${param} }}`,proxied[param]=new Proxy({[TRACKING_SYMBOL]:!0},{get:(t,key)=>key===TRACKING_SYMBOL?t[TRACKING_SYMBOL]:[Symbol.toPrimitive,Symbol.toStringTag,"toString"].includes(key)?()=>`{{ ${param} }}`:key==="v-bind"?`${param}`:`{{ ${param}.${key.toString()} }}`,ownKeys:()=>["v-bind"],getOwnPropertyDescriptor:()=>({configurable:!0,enumerable:!0,value:param,writable:!0})})});let returnValue=child(proxied);return generateSlotChildrenSourceCode([returnValue],ctx).replaceAll(/ (\S+)="{{ (\S+) }}"/g,' :$1="$2"')}case"bigint":return`{{ BigInt(${child.toString()}) }}`;default:return""}};return children.forEach(child=>{let sourceCode=generateSingleChildSourceCode(child);sourceCode!==""&&slotChildrenSourceCodes.push(sourceCode)}),slotChildrenSourceCodes.join(`
16
- `)},generateVNodeSourceCode=(vnode,ctx)=>{let componentName=getVNodeName(vnode),childrenCode="";typeof vnode.children=="string"?childrenCode=vnode.children:Array.isArray(vnode.children)?childrenCode=generateSlotChildrenSourceCode(vnode.children,ctx):vnode.children&&(childrenCode=generateSlotSourceCode(vnode.children,Object.keys(vnode.children).filter(i=>i!=="$stable"),ctx));let props=vnode.props?generatePropsSourceCode(vnode.props,[],[],ctx):"";return childrenCode?`<${componentName}${props?` ${props}`:""}>${childrenCode}</${componentName}>`:`<${componentName}${props?` ${props}`:""} />`},getVNodeName=vnode=>{if(typeof vnode.type=="string")return vnode.type;if(typeof vnode.type=="object"){if("name"in vnode.type&&vnode.type.name)return vnode.type.name;if("__name"in vnode.type&&vnode.type.__name)return vnode.type.__name}return"component"},getFunctionParamNames=func=>{let STRIP_COMMENTS=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,ARGUMENT_NAMES=/([^\s,]+)/g,fnStr=func.toString().replace(STRIP_COMMENTS,""),result=fnStr.slice(fnStr.indexOf("(")+1,fnStr.indexOf(")")).match(ARGUMENT_NAMES);return result?result.flatMap(param=>{if(["{","}"].includes(param))return param;let nonMinifiedName=param.split(":")[0].trim();return nonMinifiedName.startsWith("{")?["{",nonMinifiedName.substring(1)]:param.endsWith("}")&&!nonMinifiedName.endsWith("}")?[nonMinifiedName,"}"]:nonMinifiedName}):[]},slotBindingsToString=(slotName,params)=>params.length?params.length===1?`#${slotName}="${params[0]}"`:`#${slotName}="{ ${params.filter(i=>!["{","}"].includes(i)).join(", ")} }"`:`#${slotName}`,formatObject=obj=>Object.values(obj).every(value=>value==null||typeof value!="object")?JSON.stringify(obj):JSON.stringify(obj,null,2);var decorators=[sourceDecorator];0&&(module.exports={decorators});
368
+ // src/entry-preview-docs.ts
369
+ var decorators = [sourceDecorator];
370
+ export {
371
+ decorators
372
+ };
@@ -1 +1,17 @@
1
- "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var entry_preview_exports={};__export(entry_preview_exports,{applyDecorators:()=>decorateStory,argTypesEnhancers:()=>argTypesEnhancers,mount:()=>mount,parameters:()=>parameters,render:()=>render,renderToCanvas:()=>renderToCanvas});module.exports=__toCommonJS(entry_preview_exports);var import_docs_tools2=require("storybook/internal/docs-tools");var import_docs_tools=require("storybook/internal/docs-tools"),ARG_TYPE_SECTIONS=["props","events","slots","exposed","expose"],extractArgTypes=component=>{if(!(0,import_docs_tools.hasDocgen)(component))return null;let usedDocgenPlugin="exposed"in component.__docgenInfo?"vue-component-meta":"vue-docgen-api",argTypes={};return ARG_TYPE_SECTIONS.forEach(section=>{(0,import_docs_tools.extractComponentProps)(component,section).forEach(extractedProp=>{let argType;if(usedDocgenPlugin==="vue-docgen-api"){let docgenInfo=extractedProp.docgenInfo;argType=extractFromVueDocgenApi(docgenInfo,section,extractedProp)}else{let docgenInfo=extractedProp.docgenInfo;argType=extractFromVueComponentMeta(docgenInfo,section)}if(!argType||argTypes[argType.name])return;["events","expose","exposed"].includes(section)&&(argType.control={disable:!0}),argTypes[argType.name]=argType})}),argTypes},extractFromVueDocgenApi=(docgenInfo,section,extractedProp)=>{let type,sbType;if(section==="events"&&(type=docgenInfo.type?.names.join(),sbType={name:"other",value:type??"",required:!1}),section==="slots"){let slotBindings=docgenInfo.bindings?.filter(binding=>!!binding.name).map(binding=>`${binding.name}: ${binding.type?.name??"unknown"}`).join("; ");type=slotBindings?`{ ${slotBindings} }`:void 0,sbType={name:"other",value:type??"",required:!1}}if(section==="props"){let propInfo=docgenInfo;if(type=propInfo.type?.name,sbType=extractedProp?(0,import_docs_tools.convert)(extractedProp.docgenInfo):{name:"other",value:type},propInfo.type&&"elements"in propInfo.type&&Array.isArray(propInfo.type.elements)&&propInfo.type.elements.length>0){let elements=propInfo.type.elements.map(i=>i.name);type==="Array"&&(type=`${elements.length===1?elements[0]:`(${elements.join(" | ")})`}[]`),type==="union"?type=elements.join(" | "):type==="intersection"&&(type=elements.join(" & "))}}let required="required"in docgenInfo?docgenInfo.required??!1:!1;return{name:docgenInfo.name,description:docgenInfo.description,type:sbType?{...sbType,required}:{name:"other",value:type??""},table:{type:type?{summary:type}:void 0,defaultValue:extractedProp?.propDef.defaultValue??void 0,jsDocTags:extractedProp?.propDef.jsDocTags,category:section}}},extractFromVueComponentMeta=(docgenInfo,section)=>{if("global"in docgenInfo&&docgenInfo.global)return;let tableType={summary:docgenInfo.type.replace(" | undefined","")};if(section==="props"){let propInfo=docgenInfo,defaultValue=propInfo.default?{summary:propInfo.default}:void 0;return{name:propInfo.name,description:formatDescriptionWithTags(propInfo.description,propInfo.tags),defaultValue,type:convertVueComponentMetaProp(propInfo),table:{type:tableType,defaultValue,category:section}}}else return{name:docgenInfo.name,description:"description"in docgenInfo?docgenInfo.description:"",type:{name:"other",value:docgenInfo.type},table:{type:tableType,category:section}}},convertVueComponentMetaProp=propInfo=>{let schema=propInfo.schema,required=propInfo.required,fallbackSbType={name:"other",value:propInfo.type,required},KNOWN_SCHEMAS=["string","number","function","boolean","symbol"];if(typeof schema=="string")return KNOWN_SCHEMAS.includes(schema)?{name:schema,required}:fallbackSbType;switch(schema.kind){case"enum":{let definedSchemas=schema.schema?.filter(item=>item!=="undefined")??[];return isBooleanSchema(definedSchemas)?{name:"boolean",required}:isLiteralUnionSchema(definedSchemas)||isEnumSchema(definedSchemas)?{name:"enum",value:definedSchemas.map(literal=>literal.replace(/"/g,"")),required}:definedSchemas.length===1?convertVueComponentMetaProp({schema:definedSchemas[0],type:propInfo.type,required}):(definedSchemas.length>2&&definedSchemas.includes("true")&&definedSchemas.includes("false")&&(definedSchemas=definedSchemas.filter(i=>i!=="true"&&i!=="false"),definedSchemas.push("boolean")),{name:"union",value:definedSchemas.map(i=>convertVueComponentMetaProp(typeof i=="object"?{schema:i,type:i.type,required:!1}:{schema:i,type:i,required:!1})),required})}case"array":{let definedSchemas=schema.schema?.filter(item=>item!=="undefined")??[];return definedSchemas.length===0?fallbackSbType:definedSchemas.length===1?{name:"array",value:convertVueComponentMetaProp({schema:definedSchemas[0],type:propInfo.type,required:!1}),required}:{name:"union",value:definedSchemas.map(i=>convertVueComponentMetaProp(typeof i=="object"?{schema:i,type:i.type,required:!1}:{schema:i,type:i,required:!1})),required}}case"object":return{name:"object",value:{},required};default:return fallbackSbType}},formatDescriptionWithTags=(description,tags)=>!tags?.length||!description?description??"":`${tags.map(tag=>`@${tag.name}: ${tag.text}`).join("<br>")}<br><br>${description}`,isLiteralUnionSchema=schemas=>schemas.every(schema=>typeof schema=="string"&&schema.startsWith('"')&&schema.endsWith('"')),isEnumSchema=schemas=>schemas.every(schema=>typeof schema=="string"&&schema.includes(".")),isBooleanSchema=schemas=>schemas.length===2&&schemas.includes("true")&&schemas.includes("false");var import_vue=require("vue"),render=(props,context)=>{let{id,component:Component}=context;if(!Component)throw new Error(`Unable to render story ${id} as the component annotation is missing from the default export`);return()=>(0,import_vue.h)(Component,props,getSlots(props,context))};var runSetupFunctions=async(app,storyContext)=>{globalThis&&globalThis.PLUGINS_SETUP_FUNCTIONS&&await Promise.all([...globalThis.PLUGINS_SETUP_FUNCTIONS].map(fn=>fn(app,storyContext)))},map=new Map;async function renderToCanvas({storyFn,forceRemount,showMain,showException,storyContext,id},canvasElement){let existingApp=map.get(canvasElement);if(existingApp&&!forceRemount){let element=storyFn(),args=getArgs(element,storyContext);return updateArgs(existingApp.reactiveArgs,args),()=>{teardown(existingApp.vueApp,canvasElement)}}existingApp&&forceRemount&&teardown(existingApp.vueApp,canvasElement);let vueApp=(0,import_vue.createApp)({setup(){storyContext.args=(0,import_vue.reactive)(storyContext.args);let rootElement=storyFn(),args=getArgs(rootElement,storyContext),appState={vueApp,reactiveArgs:(0,import_vue.reactive)(args)};return map.set(canvasElement,appState),()=>(0,import_vue.h)(rootElement)}});return vueApp.config.errorHandler=(e,instance,info)=>{window.__STORYBOOK_PREVIEW__?.storyRenders.some(renderer=>renderer.id===id&&renderer.phase==="playing")?setTimeout(()=>{throw e},0):showException(e)},await runSetupFunctions(vueApp,storyContext),vueApp.mount(canvasElement),showMain(),()=>{teardown(vueApp,canvasElement)}}function getSlots(props,context){let{argTypes}=context,slots=Object.entries(props).filter(([key])=>argTypes[key]?.table?.category==="slots").map(([key,value])=>[key,typeof value=="function"?value:()=>value]);return Object.fromEntries(slots)}function getArgs(element,storyContext){return element.props&&(0,import_vue.isVNode)(element)?element.props:storyContext.args}function updateArgs(reactiveArgs,nextArgs){if(Object.keys(nextArgs).length===0)return;let currentArgs=(0,import_vue.isReactive)(reactiveArgs)?reactiveArgs:(0,import_vue.reactive)(reactiveArgs);Object.keys(currentArgs).forEach(key=>{key in nextArgs||delete currentArgs[key]}),Object.assign(currentArgs,nextArgs)}function teardown(storybookApp,canvasElement){storybookApp?.unmount(),map.has(canvasElement)&&map.delete(canvasElement)}var import_preview_api=require("storybook/preview-api"),import_vue2=require("vue");function normalizeFunctionalComponent(options){return typeof options=="function"?{render:options,name:options.name}:options}function prepare(rawStory,innerStory){let story=rawStory;return story===null?null:typeof story=="function"?story:innerStory?{...normalizeFunctionalComponent(story),components:{...story.components||{},story:innerStory}}:{render(){return(0,import_vue2.h)(story)}}}function decorateStory(storyFn,decorators){return decorators.reduce((decorated,decorator)=>context=>{let story,decoratedStory=decorator(update=>{let sanitizedUpdate=(0,import_preview_api.sanitizeStoryContextUpdate)(update);return update&&(sanitizedUpdate.args=Object.assign(context.args,sanitizedUpdate.args)),story=decorated({...context,...sanitizedUpdate}),story},context);return story||(story=decorated(context)),decoratedStory===story?story:prepare(decoratedStory,()=>(0,import_vue2.h)(story))},context=>prepare(storyFn(context)))}var import_vue3=require("vue"),mount=context=>async(Component,options)=>(Component&&(context.originalStoryFn=()=>()=>(0,import_vue3.h)(Component,options?.props,options?.slots)),await context.renderToCanvas(),context.canvas);var parameters={renderer:"vue3",docs:{story:{inline:!0},extractArgTypes,extractComponentDescription:import_docs_tools2.extractComponentDescription}},argTypesEnhancers=[import_docs_tools2.enhanceArgTypes];0&&(module.exports={applyDecorators,argTypesEnhancers,mount,parameters,render,renderToCanvas});
1
+ import {
2
+ argTypesEnhancers,
3
+ decorateStory,
4
+ mount,
5
+ parameters,
6
+ render,
7
+ renderToCanvas
8
+ } from "./_browser-chunks/chunk-GZHEVVQL.js";
9
+ import "./_browser-chunks/chunk-JFJ5UJ7Q.js";
10
+ export {
11
+ decorateStory as applyDecorators,
12
+ argTypesEnhancers,
13
+ mount,
14
+ parameters,
15
+ render,
16
+ renderToCanvas
17
+ };
package/dist/index.d.ts CHANGED
@@ -1,12 +1,53 @@
1
- export { s as setup } from './render-0377a2e9.js';
2
- import { M as Meta } from './public-types-e4ebb831.js';
3
- export { C as ComponentPropsAndSlots, D as Decorator, L as Loader, P as Preview, b as StoryContext, S as StoryFn, a as StoryObj } from './public-types-e4ebb831.js';
4
- import { NamedOrDefaultProjectAnnotations, NormalizedProjectAnnotations, ProjectAnnotations, Args, StoryAnnotationsOrFn, ComposedStoryFn, Store_CSFExports, StoriesWithPartialProps } from 'storybook/internal/types';
1
+ import { WebRenderer, Canvas, StoryContext as StoryContext$1, Args, ComponentAnnotations, AnnotatedStoryFn, ArgsStoryFn, ArgsFromMeta, StoryAnnotations, StrictArgs, DecoratorFunction, LoaderFunction, ProjectAnnotations, NamedOrDefaultProjectAnnotations, NormalizedProjectAnnotations, StoryAnnotationsOrFn, ComposedStoryFn, Store_CSFExports, StoriesWithPartialProps } from 'storybook/internal/types';
5
2
  export { ArgTypes, Args, Parameters, StrictArgs } from 'storybook/internal/types';
6
- import { V as VueRenderer } from './types-1ede6954.js';
7
- import 'vue';
8
- import 'type-fest';
9
- import 'vue-component-type-helpers';
3
+ import { ConcreteComponent, App, VNodeChild, FunctionalComponent } from 'vue';
4
+ import { Constructor, RemoveIndexSignature, Simplify, SetOptional } from 'type-fest';
5
+ import { ComponentProps, ComponentSlots } from 'vue-component-type-helpers';
6
+
7
+ type StoryFnVueReturnType = ConcreteComponent<any>;
8
+ interface VueRenderer extends WebRenderer {
9
+ component: Omit<ConcreteComponent<this['T']>, 'props'>;
10
+ storyResult: StoryFnVueReturnType;
11
+ mount: (Component?: StoryFnVueReturnType, options?: {
12
+ props?: Record<string, any>;
13
+ slots?: Record<string, any>;
14
+ }) => Promise<Canvas>;
15
+ }
16
+
17
+ declare const setup: (fn: (app: App, storyContext?: StoryContext$1<VueRenderer>) => unknown) => void;
18
+
19
+ /**
20
+ * Metadata to configure the stories for a component.
21
+ *
22
+ * @see [Default export](https://storybook.js.org/docs/api/csf#default-export)
23
+ */
24
+ type Meta<TCmpOrArgs = Args> = ComponentAnnotations<VueRenderer, ComponentPropsOrProps<TCmpOrArgs>>;
25
+ /**
26
+ * Story function that represents a CSFv2 component example.
27
+ *
28
+ * @see [Named Story exports](https://storybook.js.org/docs/api/csf#named-story-exports)
29
+ */
30
+ type StoryFn<TCmpOrArgs = Args> = AnnotatedStoryFn<VueRenderer, ComponentPropsOrProps<TCmpOrArgs>>;
31
+ /**
32
+ * Story object that represents a CSFv3 component example.
33
+ *
34
+ * @see [Named Story exports](https://storybook.js.org/docs/api/csf#named-story-exports)
35
+ */
36
+ type StoryObj<TMetaOrCmpOrArgs = Args> = TMetaOrCmpOrArgs extends {
37
+ render?: ArgsStoryFn<VueRenderer, any>;
38
+ component?: infer Component;
39
+ args?: infer DefaultArgs;
40
+ } ? Simplify<ComponentPropsAndSlots<Component> & ArgsFromMeta<VueRenderer, TMetaOrCmpOrArgs>> extends infer TArgs ? StoryAnnotations<VueRenderer, TArgs, SetOptional<TArgs, Extract<keyof TArgs, keyof DefaultArgs>>> : never : StoryAnnotations<VueRenderer, ComponentPropsOrProps<TMetaOrCmpOrArgs>>;
41
+ type ExtractSlots<C> = AllowNonFunctionSlots<Partial<RemoveIndexSignature<ComponentSlots<C>>>>;
42
+ type AllowNonFunctionSlots<Slots> = {
43
+ [K in keyof Slots]: Slots[K] | VNodeChild;
44
+ };
45
+ type ComponentPropsAndSlots<C> = ComponentProps<C> & ExtractSlots<C>;
46
+ type ComponentPropsOrProps<TCmpOrArgs> = TCmpOrArgs extends Constructor<any> ? ComponentPropsAndSlots<TCmpOrArgs> : TCmpOrArgs extends FunctionalComponent<any> ? ComponentPropsAndSlots<TCmpOrArgs> : TCmpOrArgs;
47
+ type Decorator<TArgs = StrictArgs> = DecoratorFunction<VueRenderer, TArgs>;
48
+ type Loader<TArgs = StrictArgs> = LoaderFunction<VueRenderer, TArgs>;
49
+ type StoryContext<TArgs = StrictArgs> = StoryContext$1<VueRenderer, TArgs>;
50
+ type Preview = ProjectAnnotations<VueRenderer>;
10
51
 
11
52
  type JSXAble<TElement> = TElement & {
12
53
  new (...args: any[]): any;
@@ -94,4 +135,4 @@ declare function composeStory<TArgs extends Args = Args>(story: StoryAnnotations
94
135
  */
95
136
  declare function composeStories<TModule extends Store_CSFExports<VueRenderer, any>>(csfExports: TModule, projectAnnotations?: ProjectAnnotations<VueRenderer>): MapToJSXAble<Omit<StoriesWithPartialProps<VueRenderer, TModule>, keyof Store_CSFExports>>;
96
137
 
97
- export { Meta, VueRenderer, composeStories, composeStory, setProjectAnnotations, vueProjectAnnotations };
138
+ export { type ComponentPropsAndSlots, type Decorator, type Loader, type Meta, type Preview, type StoryContext, type StoryFn, type StoryObj, type VueRenderer, composeStories, composeStory, setProjectAnnotations, setup, vueProjectAnnotations };
package/dist/index.js CHANGED
@@ -1 +1,70 @@
1
- "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var index_exports={};__export(index_exports,{composeStories:()=>composeStories,composeStory:()=>composeStory,setProjectAnnotations:()=>setProjectAnnotations,setup:()=>setup,vueProjectAnnotations:()=>vueProjectAnnotations});module.exports=__toCommonJS(index_exports);var import_global=require("@storybook/global"),{window:globalWindow}=import_global.global;globalWindow.STORYBOOK_ENV="vue3";globalWindow.PLUGINS_SETUP_FUNCTIONS||=new Set;var import_vue=require("vue"),render=(props,context)=>{let{id,component:Component}=context;if(!Component)throw new Error(`Unable to render story ${id} as the component annotation is missing from the default export`);return()=>(0,import_vue.h)(Component,props,getSlots(props,context))},setup=fn=>{globalThis.PLUGINS_SETUP_FUNCTIONS??=new Set,globalThis.PLUGINS_SETUP_FUNCTIONS.add(fn)},runSetupFunctions=async(app,storyContext)=>{globalThis&&globalThis.PLUGINS_SETUP_FUNCTIONS&&await Promise.all([...globalThis.PLUGINS_SETUP_FUNCTIONS].map(fn=>fn(app,storyContext)))},map=new Map;async function renderToCanvas({storyFn,forceRemount,showMain,showException,storyContext,id},canvasElement){let existingApp=map.get(canvasElement);if(existingApp&&!forceRemount){let element=storyFn(),args=getArgs(element,storyContext);return updateArgs(existingApp.reactiveArgs,args),()=>{teardown(existingApp.vueApp,canvasElement)}}existingApp&&forceRemount&&teardown(existingApp.vueApp,canvasElement);let vueApp=(0,import_vue.createApp)({setup(){storyContext.args=(0,import_vue.reactive)(storyContext.args);let rootElement=storyFn(),args=getArgs(rootElement,storyContext),appState={vueApp,reactiveArgs:(0,import_vue.reactive)(args)};return map.set(canvasElement,appState),()=>(0,import_vue.h)(rootElement)}});return vueApp.config.errorHandler=(e,instance,info)=>{window.__STORYBOOK_PREVIEW__?.storyRenders.some(renderer=>renderer.id===id&&renderer.phase==="playing")?setTimeout(()=>{throw e},0):showException(e)},await runSetupFunctions(vueApp,storyContext),vueApp.mount(canvasElement),showMain(),()=>{teardown(vueApp,canvasElement)}}function getSlots(props,context){let{argTypes}=context,slots=Object.entries(props).filter(([key])=>argTypes[key]?.table?.category==="slots").map(([key,value])=>[key,typeof value=="function"?value:()=>value]);return Object.fromEntries(slots)}function getArgs(element,storyContext){return element.props&&(0,import_vue.isVNode)(element)?element.props:storyContext.args}function updateArgs(reactiveArgs,nextArgs){if(Object.keys(nextArgs).length===0)return;let currentArgs=(0,import_vue.isReactive)(reactiveArgs)?reactiveArgs:(0,import_vue.reactive)(reactiveArgs);Object.keys(currentArgs).forEach(key=>{key in nextArgs||delete currentArgs[key]}),Object.assign(currentArgs,nextArgs)}function teardown(storybookApp,canvasElement){storybookApp?.unmount(),map.has(canvasElement)&&map.delete(canvasElement)}var import_preview_api2=require("storybook/preview-api"),import_vue4=require("vue");var entry_preview_exports={};__export(entry_preview_exports,{applyDecorators:()=>decorateStory,argTypesEnhancers:()=>argTypesEnhancers,mount:()=>mount,parameters:()=>parameters,render:()=>render,renderToCanvas:()=>renderToCanvas});var import_docs_tools2=require("storybook/internal/docs-tools");var import_docs_tools=require("storybook/internal/docs-tools"),ARG_TYPE_SECTIONS=["props","events","slots","exposed","expose"],extractArgTypes=component=>{if(!(0,import_docs_tools.hasDocgen)(component))return null;let usedDocgenPlugin="exposed"in component.__docgenInfo?"vue-component-meta":"vue-docgen-api",argTypes={};return ARG_TYPE_SECTIONS.forEach(section=>{(0,import_docs_tools.extractComponentProps)(component,section).forEach(extractedProp=>{let argType;if(usedDocgenPlugin==="vue-docgen-api"){let docgenInfo=extractedProp.docgenInfo;argType=extractFromVueDocgenApi(docgenInfo,section,extractedProp)}else{let docgenInfo=extractedProp.docgenInfo;argType=extractFromVueComponentMeta(docgenInfo,section)}if(!argType||argTypes[argType.name])return;["events","expose","exposed"].includes(section)&&(argType.control={disable:!0}),argTypes[argType.name]=argType})}),argTypes},extractFromVueDocgenApi=(docgenInfo,section,extractedProp)=>{let type,sbType;if(section==="events"&&(type=docgenInfo.type?.names.join(),sbType={name:"other",value:type??"",required:!1}),section==="slots"){let slotBindings=docgenInfo.bindings?.filter(binding=>!!binding.name).map(binding=>`${binding.name}: ${binding.type?.name??"unknown"}`).join("; ");type=slotBindings?`{ ${slotBindings} }`:void 0,sbType={name:"other",value:type??"",required:!1}}if(section==="props"){let propInfo=docgenInfo;if(type=propInfo.type?.name,sbType=extractedProp?(0,import_docs_tools.convert)(extractedProp.docgenInfo):{name:"other",value:type},propInfo.type&&"elements"in propInfo.type&&Array.isArray(propInfo.type.elements)&&propInfo.type.elements.length>0){let elements=propInfo.type.elements.map(i=>i.name);type==="Array"&&(type=`${elements.length===1?elements[0]:`(${elements.join(" | ")})`}[]`),type==="union"?type=elements.join(" | "):type==="intersection"&&(type=elements.join(" & "))}}let required="required"in docgenInfo?docgenInfo.required??!1:!1;return{name:docgenInfo.name,description:docgenInfo.description,type:sbType?{...sbType,required}:{name:"other",value:type??""},table:{type:type?{summary:type}:void 0,defaultValue:extractedProp?.propDef.defaultValue??void 0,jsDocTags:extractedProp?.propDef.jsDocTags,category:section}}},extractFromVueComponentMeta=(docgenInfo,section)=>{if("global"in docgenInfo&&docgenInfo.global)return;let tableType={summary:docgenInfo.type.replace(" | undefined","")};if(section==="props"){let propInfo=docgenInfo,defaultValue=propInfo.default?{summary:propInfo.default}:void 0;return{name:propInfo.name,description:formatDescriptionWithTags(propInfo.description,propInfo.tags),defaultValue,type:convertVueComponentMetaProp(propInfo),table:{type:tableType,defaultValue,category:section}}}else return{name:docgenInfo.name,description:"description"in docgenInfo?docgenInfo.description:"",type:{name:"other",value:docgenInfo.type},table:{type:tableType,category:section}}},convertVueComponentMetaProp=propInfo=>{let schema=propInfo.schema,required=propInfo.required,fallbackSbType={name:"other",value:propInfo.type,required},KNOWN_SCHEMAS=["string","number","function","boolean","symbol"];if(typeof schema=="string")return KNOWN_SCHEMAS.includes(schema)?{name:schema,required}:fallbackSbType;switch(schema.kind){case"enum":{let definedSchemas=schema.schema?.filter(item=>item!=="undefined")??[];return isBooleanSchema(definedSchemas)?{name:"boolean",required}:isLiteralUnionSchema(definedSchemas)||isEnumSchema(definedSchemas)?{name:"enum",value:definedSchemas.map(literal=>literal.replace(/"/g,"")),required}:definedSchemas.length===1?convertVueComponentMetaProp({schema:definedSchemas[0],type:propInfo.type,required}):(definedSchemas.length>2&&definedSchemas.includes("true")&&definedSchemas.includes("false")&&(definedSchemas=definedSchemas.filter(i=>i!=="true"&&i!=="false"),definedSchemas.push("boolean")),{name:"union",value:definedSchemas.map(i=>convertVueComponentMetaProp(typeof i=="object"?{schema:i,type:i.type,required:!1}:{schema:i,type:i,required:!1})),required})}case"array":{let definedSchemas=schema.schema?.filter(item=>item!=="undefined")??[];return definedSchemas.length===0?fallbackSbType:definedSchemas.length===1?{name:"array",value:convertVueComponentMetaProp({schema:definedSchemas[0],type:propInfo.type,required:!1}),required}:{name:"union",value:definedSchemas.map(i=>convertVueComponentMetaProp(typeof i=="object"?{schema:i,type:i.type,required:!1}:{schema:i,type:i,required:!1})),required}}case"object":return{name:"object",value:{},required};default:return fallbackSbType}},formatDescriptionWithTags=(description,tags)=>!tags?.length||!description?description??"":`${tags.map(tag=>`@${tag.name}: ${tag.text}`).join("<br>")}<br><br>${description}`,isLiteralUnionSchema=schemas=>schemas.every(schema=>typeof schema=="string"&&schema.startsWith('"')&&schema.endsWith('"')),isEnumSchema=schemas=>schemas.every(schema=>typeof schema=="string"&&schema.includes(".")),isBooleanSchema=schemas=>schemas.length===2&&schemas.includes("true")&&schemas.includes("false");var import_preview_api=require("storybook/preview-api"),import_vue2=require("vue");function normalizeFunctionalComponent(options){return typeof options=="function"?{render:options,name:options.name}:options}function prepare(rawStory,innerStory){let story=rawStory;return story===null?null:typeof story=="function"?story:innerStory?{...normalizeFunctionalComponent(story),components:{...story.components||{},story:innerStory}}:{render(){return(0,import_vue2.h)(story)}}}function decorateStory(storyFn,decorators){return decorators.reduce((decorated,decorator)=>context=>{let story,decoratedStory=decorator(update=>{let sanitizedUpdate=(0,import_preview_api.sanitizeStoryContextUpdate)(update);return update&&(sanitizedUpdate.args=Object.assign(context.args,sanitizedUpdate.args)),story=decorated({...context,...sanitizedUpdate}),story},context);return story||(story=decorated(context)),decoratedStory===story?story:prepare(decoratedStory,()=>(0,import_vue2.h)(story))},context=>prepare(storyFn(context)))}var import_vue3=require("vue"),mount=context=>async(Component,options)=>(Component&&(context.originalStoryFn=()=>()=>(0,import_vue3.h)(Component,options?.props,options?.slots)),await context.renderToCanvas(),context.canvas);var parameters={renderer:"vue3",docs:{story:{inline:!0},extractArgTypes,extractComponentDescription:import_docs_tools2.extractComponentDescription}},argTypesEnhancers=[import_docs_tools2.enhanceArgTypes];function setProjectAnnotations(projectAnnotations){return(0,import_preview_api2.setDefaultProjectAnnotations)(vueProjectAnnotations),(0,import_preview_api2.setProjectAnnotations)(projectAnnotations)}var vueProjectAnnotations={...entry_preview_exports,renderToCanvas:(renderContext,canvasElement)=>{if(renderContext.storyContext.testingLibraryRender==null)return renderToCanvas(renderContext,canvasElement);let{storyFn,storyContext:{testingLibraryRender:render2}}=renderContext,{unmount}=render2(storyFn(),{container:canvasElement});return unmount}};function composeStory(story,componentAnnotations,projectAnnotations,exportsName){let composedStory=(0,import_preview_api2.composeStory)(story,componentAnnotations,projectAnnotations,globalThis.globalProjectAnnotations??vueProjectAnnotations,exportsName),renderable=(...args)=>(0,import_vue4.h)(composedStory(...args));return Object.assign(renderable,composedStory),renderable}function composeStories(csfExports,projectAnnotations){return(0,import_preview_api2.composeStories)(csfExports,projectAnnotations,composeStory)}0&&(module.exports={composeStories,composeStory,setProjectAnnotations,setup,vueProjectAnnotations});
1
+ import {
2
+ entry_preview_exports,
3
+ renderToCanvas,
4
+ setup
5
+ } from "./_browser-chunks/chunk-GZHEVVQL.js";
6
+ import {
7
+ __name
8
+ } from "./_browser-chunks/chunk-JFJ5UJ7Q.js";
9
+
10
+ // src/globals.ts
11
+ import { global } from "@storybook/global";
12
+ var { window: globalWindow } = global;
13
+ globalWindow.STORYBOOK_ENV = "vue3";
14
+ globalWindow.PLUGINS_SETUP_FUNCTIONS ||= /* @__PURE__ */ new Set();
15
+
16
+ // src/portable-stories.ts
17
+ import {
18
+ composeStories as originalComposeStories,
19
+ composeStory as originalComposeStory,
20
+ setProjectAnnotations as originalSetProjectAnnotations,
21
+ setDefaultProjectAnnotations
22
+ } from "storybook/preview-api";
23
+ import { h } from "vue";
24
+ function setProjectAnnotations(projectAnnotations) {
25
+ setDefaultProjectAnnotations(vueProjectAnnotations);
26
+ return originalSetProjectAnnotations(
27
+ projectAnnotations
28
+ );
29
+ }
30
+ __name(setProjectAnnotations, "setProjectAnnotations");
31
+ var vueProjectAnnotations = {
32
+ ...entry_preview_exports,
33
+ /** @deprecated */
34
+ renderToCanvas: /* @__PURE__ */ __name((renderContext, canvasElement) => {
35
+ if (renderContext.storyContext.testingLibraryRender == null) {
36
+ return renderToCanvas(renderContext, canvasElement);
37
+ }
38
+ const {
39
+ storyFn,
40
+ storyContext: { testingLibraryRender: render }
41
+ } = renderContext;
42
+ const { unmount } = render(storyFn(), { container: canvasElement });
43
+ return unmount;
44
+ }, "renderToCanvas")
45
+ };
46
+ function composeStory(story, componentAnnotations, projectAnnotations, exportsName) {
47
+ const composedStory = originalComposeStory(
48
+ story,
49
+ componentAnnotations,
50
+ projectAnnotations,
51
+ globalThis.globalProjectAnnotations ?? vueProjectAnnotations,
52
+ exportsName
53
+ );
54
+ const renderable = /* @__PURE__ */ __name((...args) => h(composedStory(...args)), "renderable");
55
+ Object.assign(renderable, composedStory);
56
+ return renderable;
57
+ }
58
+ __name(composeStory, "composeStory");
59
+ function composeStories(csfExports, projectAnnotations) {
60
+ const composedStories = originalComposeStories(csfExports, projectAnnotations, composeStory);
61
+ return composedStories;
62
+ }
63
+ __name(composeStories, "composeStories");
64
+ export {
65
+ composeStories,
66
+ composeStory,
67
+ setProjectAnnotations,
68
+ setup,
69
+ vueProjectAnnotations
70
+ };
@@ -1 +1,7 @@
1
- "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var playwright_exports={};__export(playwright_exports,{createTest:()=>import_preview_api.createPlaywrightTest});module.exports=__toCommonJS(playwright_exports);var import_preview_api=require("storybook/preview-api");0&&(module.exports={createTest});
1
+ import "./_browser-chunks/chunk-JFJ5UJ7Q.js";
2
+
3
+ // src/playwright.ts
4
+ import { createPlaywrightTest } from "storybook/preview-api";
5
+ export {
6
+ createPlaywrightTest as createTest
7
+ };
package/dist/preset.js CHANGED
@@ -1 +1,26 @@
1
- "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var preset_exports={};__export(preset_exports,{previewAnnotations:()=>previewAnnotations});module.exports=__toCommonJS(preset_exports);var import_node_path=require("path"),previewAnnotations=async(input=[],options)=>{let docsEnabled=Object.keys(await options.presets.apply("docs",{},options)).length>0;return[].concat(input).concat([(0,import_node_path.join)(__dirname,"entry-preview.mjs")]).concat(docsEnabled?[(0,import_node_path.join)(__dirname,"entry-preview-docs.mjs")]:[])};0&&(module.exports={previewAnnotations});
1
+ import CJS_COMPAT_NODE_URL_0td4x23qd0mq from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_0td4x23qd0mq from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_0td4x23qd0mq from "node:module";
4
+
5
+ var __filename = CJS_COMPAT_NODE_URL_0td4x23qd0mq.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_0td4x23qd0mq.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_0td4x23qd0mq.createRequire(import.meta.url);
8
+
9
+ // ------------------------------------------------------------
10
+ // end of CJS compatibility banner, injected by Storybook's esbuild configuration
11
+ // ------------------------------------------------------------
12
+ var __defProp = Object.defineProperty;
13
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
14
+
15
+ // src/preset.ts
16
+ import { fileURLToPath } from "node:url";
17
+ var previewAnnotations = /* @__PURE__ */ __name(async (input = [], options) => {
18
+ const docsEnabled = Object.keys(await options.presets.apply("docs", {}, options)).length > 0;
19
+ const result = [];
20
+ return result.concat(input).concat([fileURLToPath(import.meta.resolve("@storybook/vue3/entry-preview"))]).concat(
21
+ docsEnabled ? [fileURLToPath(import.meta.resolve("@storybook/vue3/entry-preview-docs"))] : []
22
+ );
23
+ }, "previewAnnotations");
24
+ export {
25
+ previewAnnotations
26
+ };