@storybook/csf 0.0.2--canary.51.768ca23.0 → 0.0.2--canary.51.23af5af.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +325 -9
- package/dist/index.js +88 -117
- package/dist/index.mjs +73 -0
- package/package.json +12 -11
- package/.babelrc.js +0 -6
- package/dist/SBType.d.ts +0 -33
- package/dist/SBType.js +0 -1
- package/dist/includeConditionalArg.d.ts +0 -3
- package/dist/includeConditionalArg.js +0 -74
- package/dist/includeConditionalArg.test.js +0 -325
- package/dist/index.test.js +0 -142
- package/dist/story.d.ts +0 -164
- package/dist/story.js +0 -17
- package/dist/story.test.js +0 -236
package/dist/index.d.ts
CHANGED
@@ -1,19 +1,335 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
import { Simplify, UnionToIntersection } from 'type-fest';
|
2
|
+
|
3
|
+
interface SBBaseType {
|
4
|
+
required?: boolean;
|
5
|
+
raw?: string;
|
6
|
+
}
|
7
|
+
declare type SBScalarType = SBBaseType & {
|
8
|
+
name: 'boolean' | 'string' | 'number' | 'function' | 'symbol';
|
9
|
+
};
|
10
|
+
declare type SBArrayType = SBBaseType & {
|
11
|
+
name: 'array';
|
12
|
+
value: SBType;
|
13
|
+
};
|
14
|
+
declare type SBObjectType = SBBaseType & {
|
15
|
+
name: 'object';
|
16
|
+
value: Record<string, SBType>;
|
17
|
+
};
|
18
|
+
declare type SBEnumType = SBBaseType & {
|
19
|
+
name: 'enum';
|
20
|
+
value: (string | number)[];
|
21
|
+
};
|
22
|
+
declare type SBIntersectionType = SBBaseType & {
|
23
|
+
name: 'intersection';
|
24
|
+
value: SBType[];
|
25
|
+
};
|
26
|
+
declare type SBUnionType = SBBaseType & {
|
27
|
+
name: 'union';
|
28
|
+
value: SBType[];
|
29
|
+
};
|
30
|
+
declare type SBOtherType = SBBaseType & {
|
31
|
+
name: 'other';
|
32
|
+
value: string;
|
33
|
+
};
|
34
|
+
declare type SBType = SBScalarType | SBEnumType | SBArrayType | SBObjectType | SBIntersectionType | SBUnionType | SBOtherType;
|
35
|
+
|
36
|
+
declare type StoryId = string;
|
37
|
+
declare type ComponentId = string;
|
38
|
+
declare type ComponentTitle = string;
|
39
|
+
declare type StoryName = string;
|
40
|
+
/** @deprecated */
|
41
|
+
declare type StoryKind = ComponentTitle;
|
42
|
+
interface StoryIdentifier {
|
43
|
+
componentId: ComponentId;
|
44
|
+
title: ComponentTitle;
|
45
|
+
/** @deprecated */
|
46
|
+
kind: ComponentTitle;
|
47
|
+
id: StoryId;
|
48
|
+
name: StoryName;
|
49
|
+
/** @deprecated */
|
50
|
+
story: StoryName;
|
51
|
+
}
|
52
|
+
declare type Parameters = {
|
53
|
+
[name: string]: any;
|
54
|
+
};
|
55
|
+
declare type ConditionalTest = {
|
56
|
+
truthy?: boolean;
|
57
|
+
} | {
|
58
|
+
exists: boolean;
|
59
|
+
} | {
|
60
|
+
eq: any;
|
61
|
+
} | {
|
62
|
+
neq: any;
|
63
|
+
};
|
64
|
+
declare type ConditionalValue = {
|
65
|
+
arg: string;
|
66
|
+
} | {
|
67
|
+
global: string;
|
68
|
+
};
|
69
|
+
declare type Conditional = ConditionalValue & ConditionalTest;
|
70
|
+
interface InputType {
|
71
|
+
name?: string;
|
72
|
+
description?: string;
|
73
|
+
defaultValue?: any;
|
74
|
+
type?: SBType | SBScalarType['name'];
|
75
|
+
if?: Conditional;
|
76
|
+
[key: string]: any;
|
77
|
+
}
|
78
|
+
interface StrictInputType extends InputType {
|
79
|
+
name: string;
|
80
|
+
type?: SBType;
|
81
|
+
}
|
82
|
+
declare type Args = {
|
83
|
+
[name: string]: any;
|
84
|
+
};
|
85
|
+
declare type ArgTypes<TArgs = Args> = {
|
86
|
+
[name in keyof TArgs]: InputType;
|
87
|
+
};
|
88
|
+
declare type StrictArgTypes<TArgs = Args> = {
|
89
|
+
[name in keyof TArgs]: StrictInputType;
|
90
|
+
};
|
91
|
+
declare type Globals = {
|
92
|
+
[name: string]: any;
|
93
|
+
};
|
94
|
+
declare type GlobalTypes = {
|
95
|
+
[name: string]: InputType;
|
96
|
+
};
|
97
|
+
declare type StrictGlobalTypes = {
|
98
|
+
[name: string]: StrictInputType;
|
99
|
+
};
|
100
|
+
declare type AnyFramework = {
|
101
|
+
component: unknown;
|
102
|
+
storyResult: unknown;
|
103
|
+
T?: unknown;
|
104
|
+
};
|
105
|
+
declare type StoryContextForEnhancers<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = StoryIdentifier & {
|
106
|
+
component?: (TFramework & {
|
107
|
+
T: any;
|
108
|
+
})['component'];
|
109
|
+
subcomponents?: Record<string, (TFramework & {
|
110
|
+
T: any;
|
111
|
+
})['component']>;
|
112
|
+
parameters: Parameters;
|
113
|
+
initialArgs: TArgs;
|
114
|
+
argTypes: StrictArgTypes<TArgs>;
|
115
|
+
};
|
116
|
+
declare type ArgsEnhancer<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = (context: StoryContextForEnhancers<TFramework, TArgs>) => TArgs;
|
117
|
+
declare type ArgTypesEnhancer<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = ((context: StoryContextForEnhancers<TFramework, TArgs>) => StrictArgTypes<TArgs>) & {
|
118
|
+
secondPass?: boolean;
|
119
|
+
};
|
120
|
+
declare type StoryContextUpdate<TArgs = Args> = {
|
121
|
+
args?: TArgs;
|
122
|
+
globals?: Globals;
|
123
|
+
[key: string]: any;
|
124
|
+
};
|
125
|
+
declare type ViewMode = 'story' | 'docs';
|
126
|
+
declare type StoryContextForLoaders<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = StoryContextForEnhancers<TFramework, TArgs> & Required<StoryContextUpdate<TArgs>> & {
|
127
|
+
hooks: unknown;
|
128
|
+
viewMode: ViewMode;
|
129
|
+
originalStoryFn: StoryFn<TFramework>;
|
130
|
+
};
|
131
|
+
declare type LoaderFunction<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = (context: StoryContextForLoaders<TFramework, TArgs>) => Promise<Record<string, any>>;
|
132
|
+
declare type StoryContext<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = StoryContextForLoaders<TFramework, TArgs> & {
|
133
|
+
loaded: Record<string, any>;
|
134
|
+
abortSignal: AbortSignal;
|
135
|
+
canvasElement: HTMLElement;
|
136
|
+
};
|
137
|
+
declare type StepLabel = string;
|
138
|
+
declare type StepFunction<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = (label: StepLabel, play: PlayFunction<TFramework, TArgs>) => Promise<void> | void;
|
139
|
+
declare type PlayFunctionContext<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = StoryContext<TFramework, TArgs> & {
|
140
|
+
step: StepFunction<TFramework, TArgs>;
|
141
|
+
};
|
142
|
+
declare type PlayFunction<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = (context: PlayFunctionContext<TFramework, TArgs>) => Promise<void> | void;
|
143
|
+
declare type PartialStoryFn<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = (update?: StoryContextUpdate<Partial<TArgs>>) => TFramework['storyResult'];
|
144
|
+
declare type LegacyStoryFn<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = (context: StoryContext<TFramework, TArgs>) => TFramework['storyResult'];
|
145
|
+
declare type ArgsStoryFn<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = (args: TArgs, context: StoryContext<TFramework, TArgs>) => (TFramework & {
|
146
|
+
T: TArgs;
|
147
|
+
})['storyResult'];
|
148
|
+
declare type StoryFn<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = LegacyStoryFn<TFramework, TArgs> | ArgsStoryFn<TFramework, TArgs>;
|
149
|
+
declare type DecoratorFunction<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = (fn: PartialStoryFn<TFramework, TArgs>, c: StoryContext<TFramework, TArgs>) => TFramework['storyResult'];
|
150
|
+
declare type DecoratorApplicator<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = (storyFn: LegacyStoryFn<TFramework, TArgs>, decorators: DecoratorFunction<TFramework, TArgs>[]) => LegacyStoryFn<TFramework, TArgs>;
|
151
|
+
declare type StepRunner<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = (label: StepLabel, play: PlayFunction<TFramework, TArgs>, context: PlayFunctionContext<TFramework, TArgs>) => Promise<void>;
|
152
|
+
declare type BaseAnnotations<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = {
|
153
|
+
/**
|
154
|
+
* Wrapper components or Storybook decorators that wrap a story.
|
155
|
+
*
|
156
|
+
* Decorators defined in Meta will be applied to every story variation.
|
157
|
+
* @see [Decorators](https://storybook.js.org/docs/addons/introduction/#1-decorators)
|
158
|
+
*/
|
159
|
+
decorators?: DecoratorFunction<TFramework, TArgs>[];
|
160
|
+
/**
|
161
|
+
* Custom metadata for a story.
|
162
|
+
* @see [Parameters](https://storybook.js.org/docs/basics/writing-stories/#parameters)
|
163
|
+
*/
|
164
|
+
parameters?: Parameters;
|
165
|
+
/**
|
166
|
+
* Dynamic data that are provided (and possibly updated by) Storybook and its addons.
|
167
|
+
* @see [Arg story inputs](https://storybook.js.org/docs/react/api/csf#args-story-inputs)
|
168
|
+
*/
|
169
|
+
args?: Partial<TArgs>;
|
170
|
+
/**
|
171
|
+
* ArgTypes encode basic metadata for args, such as `name`, `description`, `defaultValue` for an arg. These get automatically filled in by Storybook Docs.
|
172
|
+
* @see [Control annotations](https://github.com/storybookjs/storybook/blob/91e9dee33faa8eff0b342a366845de7100415367/addons/controls/README.md#control-annotations)
|
173
|
+
*/
|
174
|
+
argTypes?: Partial<ArgTypes<TArgs>>;
|
175
|
+
/**
|
176
|
+
* Asynchronous functions which provide data for a story.
|
177
|
+
* @see [Loaders](https://storybook.js.org/docs/react/writing-stories/loaders)
|
178
|
+
*/
|
179
|
+
loaders?: LoaderFunction<TFramework, TArgs>[];
|
180
|
+
/**
|
181
|
+
* Define a custom render function for the story(ies). If not passed, a default render function by the framework will be used.
|
182
|
+
*/
|
183
|
+
render?: ArgsStoryFn<TFramework, TArgs>;
|
184
|
+
};
|
185
|
+
declare type ProjectAnnotations<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = BaseAnnotations<TFramework, TArgs> & {
|
186
|
+
argsEnhancers?: ArgsEnhancer<TFramework, Args>[];
|
187
|
+
argTypesEnhancers?: ArgTypesEnhancer<TFramework, Args>[];
|
188
|
+
globals?: Globals;
|
189
|
+
globalTypes?: GlobalTypes;
|
190
|
+
applyDecorators?: DecoratorApplicator<TFramework, Args>;
|
191
|
+
runStep?: StepRunner<TFramework, TArgs>;
|
192
|
+
};
|
193
|
+
declare type StoryDescriptor$1 = string[] | RegExp;
|
194
|
+
interface ComponentAnnotations<TFramework extends AnyFramework = AnyFramework, TArgs = Args> extends BaseAnnotations<TFramework, TArgs> {
|
195
|
+
/**
|
196
|
+
* Title of the component which will be presented in the navigation. **Should be unique.**
|
197
|
+
*
|
198
|
+
* Components can be organized in a nested structure using "/" as a separator.
|
199
|
+
*
|
200
|
+
* Since CSF 3.0 this property is optional -- it can be inferred from the filesystem path
|
201
|
+
*
|
202
|
+
* @example
|
203
|
+
* export default {
|
204
|
+
* ...
|
205
|
+
* title: 'Design System/Atoms/Button'
|
206
|
+
* }
|
207
|
+
*
|
208
|
+
* @see [Story Hierarchy](https://storybook.js.org/docs/basics/writing-stories/#story-hierarchy)
|
209
|
+
*/
|
210
|
+
title?: ComponentTitle;
|
211
|
+
/**
|
212
|
+
* Id of the component (prefix of the story id) which is used for URLs.
|
213
|
+
*
|
214
|
+
* By default is inferred from sanitizing the title
|
215
|
+
*
|
216
|
+
* @see [Story Hierarchy](https://storybook.js.org/docs/basics/writing-stories/#story-hierarchy)
|
217
|
+
*/
|
218
|
+
id?: ComponentId;
|
219
|
+
/**
|
220
|
+
* Used to only include certain named exports as stories. Useful when you want to have non-story exports such as mock data or ignore a few stories.
|
221
|
+
* @example
|
222
|
+
* includeStories: ['SimpleStory', 'ComplexStory']
|
223
|
+
* includeStories: /.*Story$/
|
224
|
+
*
|
225
|
+
* @see [Non-story exports](https://storybook.js.org/docs/formats/component-story-format/#non-story-exports)
|
226
|
+
*/
|
227
|
+
includeStories?: StoryDescriptor$1;
|
228
|
+
/**
|
229
|
+
* Used to exclude certain named exports. Useful when you want to have non-story exports such as mock data or ignore a few stories.
|
230
|
+
* @example
|
231
|
+
* excludeStories: ['simpleData', 'complexData']
|
232
|
+
* excludeStories: /.*Data$/
|
233
|
+
*
|
234
|
+
* @see [Non-story exports](https://storybook.js.org/docs/formats/component-story-format/#non-story-exports)
|
235
|
+
*/
|
236
|
+
excludeStories?: StoryDescriptor$1;
|
237
|
+
/**
|
238
|
+
* The primary component for your story.
|
239
|
+
*
|
240
|
+
* Used by addons for automatic prop table generation and display of other component metadata.
|
241
|
+
*/
|
242
|
+
component?: (TFramework & {
|
243
|
+
T: Args extends TArgs ? any : TArgs;
|
244
|
+
})['component'];
|
245
|
+
/**
|
246
|
+
* Auxiliary subcomponents that are part of the stories.
|
247
|
+
*
|
248
|
+
* Used by addons for automatic prop table generation and display of other component metadata.
|
249
|
+
*
|
250
|
+
* @example
|
251
|
+
* import { Button, ButtonGroup } from './components';
|
252
|
+
*
|
253
|
+
* export default {
|
254
|
+
* ...
|
255
|
+
* subcomponents: { Button, ButtonGroup }
|
256
|
+
* }
|
257
|
+
*
|
258
|
+
* By defining them each component will have its tab in the args table.
|
259
|
+
*/
|
260
|
+
subcomponents?: Record<string, TFramework['component']>;
|
261
|
+
}
|
262
|
+
declare type StoryAnnotations<TFramework extends AnyFramework = AnyFramework, TArgs = Args, TRequiredArgs = Partial<TArgs>> = BaseAnnotations<TFramework, TArgs> & {
|
263
|
+
/**
|
264
|
+
* Override the display name in the UI (CSF v3)
|
265
|
+
*/
|
266
|
+
name?: StoryName;
|
267
|
+
/**
|
268
|
+
* Override the display name in the UI (CSF v2)
|
269
|
+
*/
|
270
|
+
storyName?: StoryName;
|
271
|
+
/**
|
272
|
+
* Function that is executed after the story is rendered.
|
273
|
+
*/
|
274
|
+
play?: PlayFunction<TFramework, TArgs>;
|
275
|
+
/** @deprecated */
|
276
|
+
story?: Omit<StoryAnnotations<TFramework, TArgs>, 'story'>;
|
277
|
+
} & ({} extends TRequiredArgs ? {
|
278
|
+
args?: TRequiredArgs;
|
279
|
+
} : {
|
280
|
+
args: TRequiredArgs;
|
281
|
+
});
|
282
|
+
declare type LegacyAnnotatedStoryFn<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = StoryFn<TFramework, TArgs> & StoryAnnotations<TFramework, TArgs>;
|
283
|
+
declare type LegacyStoryAnnotationsOrFn<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = LegacyAnnotatedStoryFn<TFramework, TArgs> | StoryAnnotations<TFramework, TArgs>;
|
284
|
+
declare type AnnotatedStoryFn<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = ArgsStoryFn<TFramework, TArgs> & StoryAnnotations<TFramework, TArgs>;
|
285
|
+
declare type StoryAnnotationsOrFn<TFramework extends AnyFramework = AnyFramework, TArgs = Args> = AnnotatedStoryFn<TFramework, TArgs> | StoryAnnotations<TFramework, TArgs>;
|
286
|
+
declare type ArgsFromMeta<TFramework extends AnyFramework, Meta> = Meta extends {
|
287
|
+
render?: ArgsStoryFn<TFramework, infer RArgs>;
|
288
|
+
loaders?: (infer Loaders)[];
|
289
|
+
decorators?: (infer Decorators)[];
|
290
|
+
} ? Simplify<RArgs & DecoratorsArgs<TFramework, Decorators> & LoaderArgs<TFramework, Loaders>> : unknown;
|
291
|
+
declare type DecoratorsArgs<TFramework extends AnyFramework, Decorators> = UnionToIntersection<Decorators extends DecoratorFunction<TFramework, infer TArgs> ? TArgs : unknown>;
|
292
|
+
declare type LoaderArgs<TFramework extends AnyFramework, Loaders> = UnionToIntersection<Loaders extends LoaderFunction<TFramework, infer TArgs> ? TArgs : unknown>;
|
293
|
+
|
294
|
+
/**
|
295
|
+
* Helper function to include/exclude an arg based on the value of other other args
|
296
|
+
* aka "conditional args"
|
297
|
+
*/
|
298
|
+
declare const includeConditionalArg: (argType: InputType, args: Args, globals: Globals) => boolean;
|
299
|
+
|
300
|
+
/**
|
301
|
+
* Remove punctuation and illegal characters from a story ID.
|
302
|
+
*
|
303
|
+
* See https://gist.github.com/davidjrice/9d2af51100e41c6c4b4a
|
304
|
+
*/
|
305
|
+
declare const sanitize: (string: string) => string;
|
306
|
+
/**
|
307
|
+
* Generate a storybook ID from a component/kind and story name.
|
308
|
+
*/
|
309
|
+
declare const toId: (kind: string, name?: string) => string;
|
310
|
+
/**
|
311
|
+
* Transform a CSF named export into a readable story name
|
312
|
+
*/
|
313
|
+
declare const storyNameFromExport: (key: string) => string;
|
4
314
|
declare type StoryDescriptor = string[] | RegExp;
|
5
|
-
|
315
|
+
interface IncludeExcludeOptions {
|
6
316
|
includeStories?: StoryDescriptor;
|
7
317
|
excludeStories?: StoryDescriptor;
|
8
318
|
}
|
9
|
-
|
10
|
-
export
|
319
|
+
/**
|
320
|
+
* Does a named export match CSF inclusion/exclusion options?
|
321
|
+
*/
|
322
|
+
declare function isExportStory(key: string, { includeStories, excludeStories }: IncludeExcludeOptions): boolean | null;
|
323
|
+
interface SeparatorOptions {
|
11
324
|
rootSeparator: string | RegExp;
|
12
325
|
groupSeparator: string | RegExp;
|
13
326
|
}
|
14
|
-
|
327
|
+
/**
|
328
|
+
* Parse out the component/kind name from a path, using the given separator config.
|
329
|
+
*/
|
330
|
+
declare const parseKind: (kind: string, { rootSeparator, groupSeparator }: SeparatorOptions) => {
|
15
331
|
root: string | null;
|
16
332
|
groups: string[];
|
17
333
|
};
|
18
|
-
|
19
|
-
export
|
334
|
+
|
335
|
+
export { AnnotatedStoryFn, AnyFramework, ArgTypes, ArgTypesEnhancer, Args, ArgsEnhancer, ArgsFromMeta, ArgsStoryFn, BaseAnnotations, ComponentAnnotations, ComponentId, ComponentTitle, Conditional, DecoratorApplicator, DecoratorFunction, GlobalTypes, Globals, IncludeExcludeOptions, InputType, LegacyAnnotatedStoryFn, LegacyStoryAnnotationsOrFn, LegacyStoryFn, LoaderFunction, Parameters, PartialStoryFn, PlayFunction, PlayFunctionContext, ProjectAnnotations, SBArrayType, SBEnumType, SBIntersectionType, SBObjectType, SBOtherType, SBScalarType, SBType, SBUnionType, SeparatorOptions, StepFunction, StepLabel, StepRunner, StoryAnnotations, StoryAnnotationsOrFn, StoryContext, StoryContextForEnhancers, StoryContextForLoaders, StoryContextUpdate, StoryFn, StoryId, StoryIdentifier, StoryKind, StoryName, StrictArgTypes, StrictGlobalTypes, StrictInputType, ViewMode, includeConditionalArg, isExportStory, parseKind, sanitize, storyNameFromExport, toId };
|
package/dist/index.js
CHANGED
@@ -1,138 +1,109 @@
|
|
1
1
|
"use strict";
|
2
|
-
|
3
|
-
Object.defineProperty
|
4
|
-
|
5
|
-
|
6
|
-
var
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
parseKind: true,
|
12
|
-
includeConditionalArg: true
|
2
|
+
var __create = Object.create;
|
3
|
+
var __defProp = Object.defineProperty;
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
8
|
+
var __export = (target, all) => {
|
9
|
+
for (var name in all)
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
13
11
|
};
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
14
|
+
for (let key of __getOwnPropNames(from))
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
19
17
|
}
|
18
|
+
return to;
|
19
|
+
};
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
21
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
22
|
+
mod
|
23
|
+
));
|
24
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
25
|
+
|
26
|
+
// src/index.ts
|
27
|
+
var src_exports = {};
|
28
|
+
__export(src_exports, {
|
29
|
+
includeConditionalArg: () => includeConditionalArg,
|
30
|
+
isExportStory: () => isExportStory,
|
31
|
+
parseKind: () => parseKind,
|
32
|
+
sanitize: () => sanitize,
|
33
|
+
storyNameFromExport: () => storyNameFromExport,
|
34
|
+
toId: () => toId
|
20
35
|
});
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
var
|
26
|
-
|
27
|
-
var
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
}
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
45
|
-
|
46
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
47
|
-
|
48
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
49
|
-
|
50
|
-
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
51
|
-
|
52
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
53
|
-
|
54
|
-
/**
|
55
|
-
* Remove punctuation and illegal characters from a story ID.
|
56
|
-
*
|
57
|
-
* See https://gist.github.com/davidjrice/9d2af51100e41c6c4b4a
|
58
|
-
*/
|
59
|
-
var sanitize = function sanitize(string) {
|
60
|
-
return string.toLowerCase() // eslint-disable-next-line no-useless-escape
|
61
|
-
.replace(/[ ’–—―′¿'`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '-').replace(/-+/g, '-').replace(/^-+/, '').replace(/-+$/, '');
|
36
|
+
module.exports = __toCommonJS(src_exports);
|
37
|
+
var import_startCase = __toESM(require("lodash/startCase"));
|
38
|
+
|
39
|
+
// src/includeConditionalArg.ts
|
40
|
+
var import_isEqual = __toESM(require("lodash/isEqual"));
|
41
|
+
var count = (vals) => vals.map((v) => typeof v !== "undefined").filter(Boolean).length;
|
42
|
+
var testValue = (cond, value) => {
|
43
|
+
const { exists, eq, neq, truthy } = cond;
|
44
|
+
if (count([exists, eq, neq, truthy]) > 1) {
|
45
|
+
throw new Error(`Invalid conditional test ${JSON.stringify({ exists, eq, neq })}`);
|
46
|
+
}
|
47
|
+
if (typeof eq !== "undefined") {
|
48
|
+
return (0, import_isEqual.default)(value, eq);
|
49
|
+
}
|
50
|
+
if (typeof neq !== "undefined") {
|
51
|
+
return !(0, import_isEqual.default)(value, neq);
|
52
|
+
}
|
53
|
+
if (typeof exists !== "undefined") {
|
54
|
+
const valueExists = typeof value !== "undefined";
|
55
|
+
return exists ? valueExists : !valueExists;
|
56
|
+
}
|
57
|
+
const shouldBeTruthy = typeof truthy === "undefined" ? true : truthy;
|
58
|
+
return shouldBeTruthy ? !!value : !value;
|
62
59
|
};
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
if (sanitized === '') {
|
70
|
-
throw new Error("Invalid ".concat(part, " '").concat(string, "', must include alphanumeric characters"));
|
60
|
+
var includeConditionalArg = (argType, args, globals) => {
|
61
|
+
if (!argType.if)
|
62
|
+
return true;
|
63
|
+
const { arg, global } = argType.if;
|
64
|
+
if (count([arg, global]) !== 1) {
|
65
|
+
throw new Error(`Invalid conditional value ${JSON.stringify({ arg, global })}`);
|
71
66
|
}
|
72
|
-
|
73
|
-
return
|
67
|
+
const value = arg ? args[arg] : globals[global];
|
68
|
+
return testValue(argType.if, value);
|
74
69
|
};
|
75
|
-
/**
|
76
|
-
* Generate a storybook ID from a component/kind and story name.
|
77
|
-
*/
|
78
|
-
|
79
70
|
|
80
|
-
|
81
|
-
|
71
|
+
// src/index.ts
|
72
|
+
var sanitize = (string) => {
|
73
|
+
return string.toLowerCase().replace(/[ ’–—―′¿'`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, "-").replace(/-+/g, "-").replace(/^-+/, "").replace(/-+$/, "");
|
82
74
|
};
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
var storyNameFromExport = function storyNameFromExport(key) {
|
91
|
-
return (0, _startCase["default"])(key);
|
75
|
+
var sanitizeSafe = (string, part) => {
|
76
|
+
const sanitized = sanitize(string);
|
77
|
+
if (sanitized === "") {
|
78
|
+
throw new Error(`Invalid ${part} '${string}', must include alphanumeric characters`);
|
79
|
+
}
|
80
|
+
return sanitized;
|
92
81
|
};
|
93
|
-
|
94
|
-
|
95
|
-
|
82
|
+
var toId = (kind, name) => `${sanitizeSafe(kind, "kind")}${name ? `--${sanitizeSafe(name, "name")}` : ""}`;
|
83
|
+
var storyNameFromExport = (key) => (0, import_startCase.default)(key);
|
96
84
|
function matches(storyKey, arrayOrRegex) {
|
97
85
|
if (Array.isArray(arrayOrRegex)) {
|
98
86
|
return arrayOrRegex.includes(storyKey);
|
99
87
|
}
|
100
|
-
|
101
88
|
return storyKey.match(arrayOrRegex);
|
102
89
|
}
|
103
|
-
|
104
|
-
|
105
|
-
*/
|
106
|
-
|
107
|
-
|
108
|
-
function isExportStory(key, _ref) {
|
109
|
-
var includeStories = _ref.includeStories,
|
110
|
-
excludeStories = _ref.excludeStories;
|
111
|
-
return (// https://babeljs.io/docs/en/babel-plugin-transform-modules-commonjs
|
112
|
-
key !== '__esModule' && (!includeStories || matches(key, includeStories)) && (!excludeStories || !matches(key, excludeStories))
|
113
|
-
);
|
90
|
+
function isExportStory(key, { includeStories, excludeStories }) {
|
91
|
+
return key !== "__esModule" && (!includeStories || matches(key, includeStories)) && (!excludeStories || !matches(key, excludeStories));
|
114
92
|
}
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
*/
|
119
|
-
var parseKind = function parseKind(kind, _ref2) {
|
120
|
-
var rootSeparator = _ref2.rootSeparator,
|
121
|
-
groupSeparator = _ref2.groupSeparator;
|
122
|
-
|
123
|
-
var _kind$split = kind.split(rootSeparator, 2),
|
124
|
-
_kind$split2 = _slicedToArray(_kind$split, 2),
|
125
|
-
root = _kind$split2[0],
|
126
|
-
remainder = _kind$split2[1];
|
127
|
-
|
128
|
-
var groups = (remainder || kind).split(groupSeparator).filter(function (i) {
|
129
|
-
return !!i;
|
130
|
-
}); // when there's no remainder, it means the root wasn't found/split
|
131
|
-
|
93
|
+
var parseKind = (kind, { rootSeparator, groupSeparator }) => {
|
94
|
+
const [root, remainder] = kind.split(rootSeparator, 2);
|
95
|
+
const groups = (remainder || kind).split(groupSeparator).filter((i) => !!i);
|
132
96
|
return {
|
133
97
|
root: remainder ? root : null,
|
134
|
-
groups
|
98
|
+
groups
|
135
99
|
};
|
136
100
|
};
|
137
|
-
|
138
|
-
exports
|
101
|
+
// Annotate the CommonJS export names for ESM import in node:
|
102
|
+
0 && (module.exports = {
|
103
|
+
includeConditionalArg,
|
104
|
+
isExportStory,
|
105
|
+
parseKind,
|
106
|
+
sanitize,
|
107
|
+
storyNameFromExport,
|
108
|
+
toId
|
109
|
+
});
|
package/dist/index.mjs
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
// src/index.ts
|
2
|
+
import startCase from "lodash/startCase";
|
3
|
+
|
4
|
+
// src/includeConditionalArg.ts
|
5
|
+
import isEqual from "lodash/isEqual";
|
6
|
+
var count = (vals) => vals.map((v) => typeof v !== "undefined").filter(Boolean).length;
|
7
|
+
var testValue = (cond, value) => {
|
8
|
+
const { exists, eq, neq, truthy } = cond;
|
9
|
+
if (count([exists, eq, neq, truthy]) > 1) {
|
10
|
+
throw new Error(`Invalid conditional test ${JSON.stringify({ exists, eq, neq })}`);
|
11
|
+
}
|
12
|
+
if (typeof eq !== "undefined") {
|
13
|
+
return isEqual(value, eq);
|
14
|
+
}
|
15
|
+
if (typeof neq !== "undefined") {
|
16
|
+
return !isEqual(value, neq);
|
17
|
+
}
|
18
|
+
if (typeof exists !== "undefined") {
|
19
|
+
const valueExists = typeof value !== "undefined";
|
20
|
+
return exists ? valueExists : !valueExists;
|
21
|
+
}
|
22
|
+
const shouldBeTruthy = typeof truthy === "undefined" ? true : truthy;
|
23
|
+
return shouldBeTruthy ? !!value : !value;
|
24
|
+
};
|
25
|
+
var includeConditionalArg = (argType, args, globals) => {
|
26
|
+
if (!argType.if)
|
27
|
+
return true;
|
28
|
+
const { arg, global } = argType.if;
|
29
|
+
if (count([arg, global]) !== 1) {
|
30
|
+
throw new Error(`Invalid conditional value ${JSON.stringify({ arg, global })}`);
|
31
|
+
}
|
32
|
+
const value = arg ? args[arg] : globals[global];
|
33
|
+
return testValue(argType.if, value);
|
34
|
+
};
|
35
|
+
|
36
|
+
// src/index.ts
|
37
|
+
var sanitize = (string) => {
|
38
|
+
return string.toLowerCase().replace(/[ ’–—―′¿'`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, "-").replace(/-+/g, "-").replace(/^-+/, "").replace(/-+$/, "");
|
39
|
+
};
|
40
|
+
var sanitizeSafe = (string, part) => {
|
41
|
+
const sanitized = sanitize(string);
|
42
|
+
if (sanitized === "") {
|
43
|
+
throw new Error(`Invalid ${part} '${string}', must include alphanumeric characters`);
|
44
|
+
}
|
45
|
+
return sanitized;
|
46
|
+
};
|
47
|
+
var toId = (kind, name) => `${sanitizeSafe(kind, "kind")}${name ? `--${sanitizeSafe(name, "name")}` : ""}`;
|
48
|
+
var storyNameFromExport = (key) => startCase(key);
|
49
|
+
function matches(storyKey, arrayOrRegex) {
|
50
|
+
if (Array.isArray(arrayOrRegex)) {
|
51
|
+
return arrayOrRegex.includes(storyKey);
|
52
|
+
}
|
53
|
+
return storyKey.match(arrayOrRegex);
|
54
|
+
}
|
55
|
+
function isExportStory(key, { includeStories, excludeStories }) {
|
56
|
+
return key !== "__esModule" && (!includeStories || matches(key, includeStories)) && (!excludeStories || !matches(key, excludeStories));
|
57
|
+
}
|
58
|
+
var parseKind = (kind, { rootSeparator, groupSeparator }) => {
|
59
|
+
const [root, remainder] = kind.split(rootSeparator, 2);
|
60
|
+
const groups = (remainder || kind).split(groupSeparator).filter((i) => !!i);
|
61
|
+
return {
|
62
|
+
root: remainder ? root : null,
|
63
|
+
groups
|
64
|
+
};
|
65
|
+
};
|
66
|
+
export {
|
67
|
+
includeConditionalArg,
|
68
|
+
isExportStory,
|
69
|
+
parseKind,
|
70
|
+
sanitize,
|
71
|
+
storyNameFromExport,
|
72
|
+
toId
|
73
|
+
};
|