Add comprehensive development roadmap via GitHub Issues
Created 10 detailed GitHub issues covering: - Project activation and management UI (#1-2) - Worker node coordination and visualization (#3-4) - Automated GitHub repository scanning (#5) - Intelligent model-to-issue matching (#6) - Multi-model task execution system (#7) - N8N workflow integration (#8) - Hive-Bzzz P2P bridge (#9) - Peer assistance protocol (#10) Each issue includes detailed specifications, acceptance criteria, technical implementation notes, and dependency mapping. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
1
frontend/node_modules/@storybook/react/README.md
generated
vendored
Normal file
1
frontend/node_modules/@storybook/react/README.md
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
# Storybook React renderer
|
||||
12
frontend/node_modules/@storybook/react/dist/chunk-AWLHXXSE.mjs
generated
vendored
Normal file
12
frontend/node_modules/@storybook/react/dist/chunk-AWLHXXSE.mjs
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
import { applyDecorators } from './chunk-XLZBPYSH.mjs';
|
||||
import { isForwardRef, isMemo, reactElementToJsxString } from './chunk-CKO6TW2F.mjs';
|
||||
import { __export } from './chunk-XP5HYGXS.mjs';
|
||||
import React, { createElement, isValidElement } from 'react';
|
||||
import { logger } from 'storybook/internal/client-logger';
|
||||
import { getDocgenSection, SourceType } from 'storybook/internal/docs-tools';
|
||||
import { useRef, useEffect, emitTransformCode } from 'storybook/preview-api';
|
||||
|
||||
var entry_preview_docs_exports={};__export(entry_preview_docs_exports,{applyDecorators:()=>applyDecorators2,decorators:()=>decorators,parameters:()=>parameters});var reactElementToJSXString=reactElementToJsxString,toPascalCase=str=>str.charAt(0).toUpperCase()+str.slice(1),getReactSymbolName=elementType=>(elementType.$$typeof||elementType).toString().replace(/^Symbol\((.*)\)$/,"$1").split(".").map(segment=>segment.split("_").map(toPascalCase).join("")).join(".");function simplifyNodeForStringify(node){if(isValidElement(node)){let props=Object.keys(node.props).reduce((acc,cur)=>(acc[cur]=simplifyNodeForStringify(node.props[cur]),acc),{});return {...node,props,_owner:null}}return Array.isArray(node)?node.map(simplifyNodeForStringify):node}var renderJsx=(code,options)=>{if(typeof code>"u")return logger.warn("Too many skip or undefined component"),null;let renderedJSX=code,Type=renderedJSX.type;for(let i=0;i<options?.skip;i+=1){if(typeof renderedJSX>"u")return logger.warn("Cannot skip undefined element"),null;if(React.Children.count(renderedJSX)>1)return logger.warn("Trying to skip an array of elements"),null;typeof renderedJSX.props.children>"u"?(logger.warn("Not enough children to skip elements."),typeof renderedJSX.type=="function"&&renderedJSX.type.name===""&&(renderedJSX=React.createElement(Type,{...renderedJSX.props}))):typeof renderedJSX.props.children=="function"?renderedJSX=renderedJSX.props.children():renderedJSX=renderedJSX.props.children;}let displayNameDefaults;typeof options?.displayName=="string"?displayNameDefaults={showFunctions:!0,displayName:()=>options.displayName}:displayNameDefaults={displayName:el=>el.type.displayName?el.type.displayName:getDocgenSection(el.type,"displayName")?getDocgenSection(el.type,"displayName"):el.type.render?.displayName?el.type.render.displayName:typeof el.type=="symbol"||el.type.$$typeof&&typeof el.type.$$typeof=="symbol"?getReactSymbolName(el.type):el.type.name&&el.type.name!=="_default"?el.type.name:typeof el.type=="function"?"No Display Name":isForwardRef(el.type)?el.type.render.name:isMemo(el.type)?el.type.type.name:el.type};let opts={...displayNameDefaults,...{filterProps:(value,key)=>value!==void 0},...options};return React.Children.map(code,c=>{let child=typeof c=="number"?c.toString():c,string=(typeof reactElementToJSXString=="function"?reactElementToJSXString:reactElementToJSXString.default)(simplifyNodeForStringify(child),opts);if(string.indexOf(""")>-1){let matches=string.match(/\S+=\\"([^"]*)\\"/g);matches&&matches.forEach(match=>{string=string.replace(match,match.replace(/"/g,"'"));});}return string}).join(`
|
||||
`).replace(/function\s+noRefCheck\(\)\s*\{\}/g,"() => {}")},defaultOpts={skip:0,showFunctions:!1,enableBeautify:!0,showDefaultProps:!1},skipJsxRender=context=>{let sourceParams=context?.parameters.docs?.source,isArgsStory=context?.parameters.__isArgsStory;return sourceParams?.type===SourceType.DYNAMIC?!1:!isArgsStory||sourceParams?.code||sourceParams?.type===SourceType.CODE},isMdx=node=>node.type?.displayName==="MDXCreateElement"&&!!node.props?.mdxType,mdxToJsx=node=>{if(!isMdx(node))return node;let{mdxType,originalType,children,...rest}=node.props,jsxChildren=[];return children&&(jsxChildren=(Array.isArray(children)?children:[children]).map(mdxToJsx)),createElement(originalType,rest,...jsxChildren)},jsxDecorator=(storyFn,context)=>{let jsx=useRef(void 0),story=storyFn(),skip=skipJsxRender(context),options={...defaultOpts,...context?.parameters.jsx||{}},storyJsx=context.originalStoryFn(context.args,context);return useEffect(()=>{if(skip)return;let sourceJsx=mdxToJsx(storyJsx),rendered=renderJsx(sourceJsx,options);rendered&&jsx.current!==rendered&&(emitTransformCode(rendered,context),jsx.current=rendered);}),story};var applyDecorators2=(storyFn,decorators2)=>{let jsxIndex=decorators2.findIndex(d=>d.originalFn===jsxDecorator),reorderedDecorators=jsxIndex===-1?decorators2:[...decorators2.splice(jsxIndex,1),...decorators2];return applyDecorators(storyFn,reorderedDecorators)};var decorators=[jsxDecorator],parameters={docs:{story:{inline:!0}}};
|
||||
|
||||
export { applyDecorators2 as applyDecorators, decorators, entry_preview_docs_exports, parameters };
|
||||
22
frontend/node_modules/@storybook/react/dist/chunk-CKO6TW2F.mjs
generated
vendored
Normal file
22
frontend/node_modules/@storybook/react/dist/chunk-CKO6TW2F.mjs
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
9
frontend/node_modules/@storybook/react/dist/chunk-MNKU3DTE.mjs
generated
vendored
Normal file
9
frontend/node_modules/@storybook/react/dist/chunk-MNKU3DTE.mjs
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
36
frontend/node_modules/@storybook/react/dist/chunk-N3U7HZRZ.mjs
generated
vendored
Normal file
36
frontend/node_modules/@storybook/react/dist/chunk-N3U7HZRZ.mjs
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
8
frontend/node_modules/@storybook/react/dist/chunk-XBCHTE6T.mjs
generated
vendored
Normal file
8
frontend/node_modules/@storybook/react/dist/chunk-XBCHTE6T.mjs
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
import { entry_preview_exports } from './chunk-MNKU3DTE.mjs';
|
||||
import { entry_preview_argtypes_exports } from './chunk-N3U7HZRZ.mjs';
|
||||
import { entry_preview_docs_exports } from './chunk-AWLHXXSE.mjs';
|
||||
import { normalizeProjectAnnotations, composeConfigs, getCoreAnnotations } from 'storybook/preview-api';
|
||||
|
||||
function __definePreview(input){let composed,preview={_tag:"Preview",input,get composed(){if(composed)return composed;let{addons,...rest}=input;return composed=normalizeProjectAnnotations(composeConfigs([...getCoreAnnotations(),...addons??[],rest])),composed},meta(meta){return defineMeta(meta,this)}};return globalThis.globalProjectAnnotations=preview.composed,preview}function defineMeta(input,preview){return {_tag:"Meta",input,preview,get composed(){throw new Error("Not implemented")},story(story){return defineStory(story,this)}}}function defineStory(input,meta){return {_tag:"Story",input,meta,get composed(){throw new Error("Not implemented")}}}function __definePreview2(preview){return __definePreview({...preview,addons:[entry_preview_exports,entry_preview_argtypes_exports,entry_preview_docs_exports,...preview.addons??[]]})}
|
||||
|
||||
export { __definePreview2 as __definePreview };
|
||||
6
frontend/node_modules/@storybook/react/dist/chunk-XLZBPYSH.mjs
generated
vendored
Normal file
6
frontend/node_modules/@storybook/react/dist/chunk-XLZBPYSH.mjs
generated
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
import React from 'react';
|
||||
import { defaultDecorateStory } from 'storybook/preview-api';
|
||||
|
||||
var applyDecorators=(storyFn,decorators)=>defaultDecorateStory(context=>React.createElement(storyFn,context),decorators);
|
||||
|
||||
export { applyDecorators };
|
||||
3
frontend/node_modules/@storybook/react/dist/chunk-XP5HYGXS.mjs
generated
vendored
Normal file
3
frontend/node_modules/@storybook/react/dist/chunk-XP5HYGXS.mjs
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __esm=(fn,res)=>function(){return fn&&(res=(0, fn[__getOwnPropNames(fn)[0]])(fn=0)),res};var __commonJS=(cb,mod)=>function(){return mod||(0, cb[__getOwnPropNames(cb)[0]])((mod={exports:{}}).exports,mod),mod.exports};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 __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);
|
||||
|
||||
export { __commonJS, __esm, __export, __toCommonJS, __toESM };
|
||||
15
frontend/node_modules/@storybook/react/dist/entry-preview-argtypes.d.ts
generated
vendored
Normal file
15
frontend/node_modules/@storybook/react/dist/entry-preview-argtypes.d.ts
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
import * as storybook_internal_docs_tools from 'storybook/internal/docs-tools';
|
||||
import { extractComponentDescription } from 'storybook/internal/docs-tools';
|
||||
import { ArgTypesEnhancer } from 'storybook/internal/types';
|
||||
import { R as ReactRenderer } from './types-5617c98e.js';
|
||||
import 'react';
|
||||
|
||||
declare const parameters: {
|
||||
docs: {
|
||||
extractArgTypes: storybook_internal_docs_tools.ArgTypesExtractor;
|
||||
extractComponentDescription: typeof extractComponentDescription;
|
||||
};
|
||||
};
|
||||
declare const argTypesEnhancers: ArgTypesEnhancer<ReactRenderer>[];
|
||||
|
||||
export { argTypesEnhancers, parameters };
|
||||
45
frontend/node_modules/@storybook/react/dist/entry-preview-argtypes.js
generated
vendored
Normal file
45
frontend/node_modules/@storybook/react/dist/entry-preview-argtypes.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
3
frontend/node_modules/@storybook/react/dist/entry-preview-argtypes.mjs
generated
vendored
Normal file
3
frontend/node_modules/@storybook/react/dist/entry-preview-argtypes.mjs
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
export { argTypesEnhancers, parameters } from './chunk-N3U7HZRZ.mjs';
|
||||
import './chunk-CKO6TW2F.mjs';
|
||||
import './chunk-XP5HYGXS.mjs';
|
||||
17
frontend/node_modules/@storybook/react/dist/entry-preview-docs.d.ts
generated
vendored
Normal file
17
frontend/node_modules/@storybook/react/dist/entry-preview-docs.d.ts
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
import { LegacyStoryFn, DecoratorFunction } from 'storybook/internal/types';
|
||||
import { R as ReactRenderer } from './types-5617c98e.js';
|
||||
import 'react';
|
||||
|
||||
declare const applyDecorators: (storyFn: LegacyStoryFn<ReactRenderer>, decorators: DecoratorFunction<ReactRenderer>[]) => LegacyStoryFn<ReactRenderer>;
|
||||
|
||||
declare const decorators: DecoratorFunction<ReactRenderer>[];
|
||||
|
||||
declare const parameters: {
|
||||
docs: {
|
||||
story: {
|
||||
inline: boolean;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
export { applyDecorators, decorators, parameters };
|
||||
17
frontend/node_modules/@storybook/react/dist/entry-preview-docs.js
generated
vendored
Normal file
17
frontend/node_modules/@storybook/react/dist/entry-preview-docs.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
4
frontend/node_modules/@storybook/react/dist/entry-preview-docs.mjs
generated
vendored
Normal file
4
frontend/node_modules/@storybook/react/dist/entry-preview-docs.mjs
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
export { applyDecorators, decorators, parameters } from './chunk-AWLHXXSE.mjs';
|
||||
import './chunk-XLZBPYSH.mjs';
|
||||
import './chunk-CKO6TW2F.mjs';
|
||||
import './chunk-XP5HYGXS.mjs';
|
||||
7
frontend/node_modules/@storybook/react/dist/entry-preview-rsc.d.ts
generated
vendored
Normal file
7
frontend/node_modules/@storybook/react/dist/entry-preview-rsc.d.ts
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
declare const parameters: {
|
||||
react: {
|
||||
rsc: boolean;
|
||||
};
|
||||
};
|
||||
|
||||
export { parameters };
|
||||
1
frontend/node_modules/@storybook/react/dist/entry-preview-rsc.js
generated
vendored
Normal file
1
frontend/node_modules/@storybook/react/dist/entry-preview-rsc.js
generated
vendored
Normal file
@@ -0,0 +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_rsc_exports={};__export(entry_preview_rsc_exports,{parameters:()=>parameters});module.exports=__toCommonJS(entry_preview_rsc_exports);var parameters={react:{rsc:!0}};0&&(module.exports={parameters});
|
||||
5
frontend/node_modules/@storybook/react/dist/entry-preview-rsc.mjs
generated
vendored
Normal file
5
frontend/node_modules/@storybook/react/dist/entry-preview-rsc.mjs
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
import './chunk-XP5HYGXS.mjs';
|
||||
|
||||
var parameters={react:{rsc:!0}};
|
||||
|
||||
export { parameters };
|
||||
20
frontend/node_modules/@storybook/react/dist/entry-preview.d.ts
generated
vendored
Normal file
20
frontend/node_modules/@storybook/react/dist/entry-preview.d.ts
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
import { D as Decorator } from './public-types-f2c70f25.js';
|
||||
import { ArgsStoryFn, RenderContext, BaseAnnotations, LegacyStoryFn, DecoratorFunction } from 'storybook/internal/types';
|
||||
import { R as ReactRenderer } from './types-5617c98e.js';
|
||||
import 'react';
|
||||
|
||||
declare const render: ArgsStoryFn<ReactRenderer>;
|
||||
|
||||
declare function renderToCanvas({ storyContext, unboundStoryFn, showMain, showException, forceRemount, }: RenderContext<ReactRenderer>, canvasElement: ReactRenderer['canvasElement']): Promise<() => Promise<void>>;
|
||||
|
||||
declare const mount: BaseAnnotations<ReactRenderer>['mount'];
|
||||
|
||||
declare const applyDecorators: (storyFn: LegacyStoryFn<ReactRenderer>, decorators: DecoratorFunction<ReactRenderer>[]) => LegacyStoryFn<ReactRenderer>;
|
||||
|
||||
declare const decorators: Decorator[];
|
||||
declare const parameters: {
|
||||
renderer: string;
|
||||
};
|
||||
declare const beforeAll: () => Promise<void>;
|
||||
|
||||
export { applyDecorators, beforeAll, decorators, mount, parameters, render, renderToCanvas };
|
||||
1
frontend/node_modules/@storybook/react/dist/entry-preview.js
generated
vendored
Normal file
1
frontend/node_modules/@storybook/react/dist/entry-preview.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
3
frontend/node_modules/@storybook/react/dist/entry-preview.mjs
generated
vendored
Normal file
3
frontend/node_modules/@storybook/react/dist/entry-preview.mjs
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
export { beforeAll, decorators, mount, parameters, render, renderToCanvas } from './chunk-MNKU3DTE.mjs';
|
||||
export { applyDecorators } from './chunk-XLZBPYSH.mjs';
|
||||
import './chunk-XP5HYGXS.mjs';
|
||||
91
frontend/node_modules/@storybook/react/dist/index.d.ts
generated
vendored
Normal file
91
frontend/node_modules/@storybook/react/dist/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
import { M as Meta } from './public-types-f2c70f25.js';
|
||||
export { A as AddMocks, D as Decorator, L as Loader, P as Preview, b as StoryContext, S as StoryFn, a as StoryObj } from './public-types-f2c70f25.js';
|
||||
import { NamedOrDefaultProjectAnnotations, NormalizedProjectAnnotations, ProjectAnnotations, Args, StoryAnnotationsOrFn, ComposedStoryFn, Store_CSFExports, StoriesWithPartialProps } from 'storybook/internal/types';
|
||||
export { ArgTypes, Args, Parameters, StrictArgs } from 'storybook/internal/types';
|
||||
import { R as ReactRenderer } from './types-5617c98e.js';
|
||||
export { a as ReactParameters } from './types-5617c98e.js';
|
||||
export { ReactPreview, ReactStory, __definePreview } from './preview.js';
|
||||
import 'react';
|
||||
import 'storybook/internal/csf';
|
||||
|
||||
/**
|
||||
* Function that sets the globalConfig of your storybook. The global config is the preview module of
|
||||
* your .storybook folder.
|
||||
*
|
||||
* It should be run a single time, so that your global config (e.g. decorators) is applied to your
|
||||
* stories when using `composeStories` or `composeStory`.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* ```jsx
|
||||
* // setup-file.js
|
||||
* import { setProjectAnnotations } from '@storybook/react';
|
||||
* import projectAnnotations from './.storybook/preview';
|
||||
*
|
||||
* setProjectAnnotations(projectAnnotations);
|
||||
* ```
|
||||
*
|
||||
* @param projectAnnotations - E.g. (import * as projectAnnotations from '../.storybook/preview')
|
||||
*/
|
||||
declare function setProjectAnnotations(projectAnnotations: NamedOrDefaultProjectAnnotations<any> | NamedOrDefaultProjectAnnotations<any>[]): NormalizedProjectAnnotations<ReactRenderer>;
|
||||
declare const INTERNAL_DEFAULT_PROJECT_ANNOTATIONS: ProjectAnnotations<ReactRenderer>;
|
||||
/**
|
||||
* Function that will receive a story along with meta (e.g. a default export from a .stories file)
|
||||
* and optionally projectAnnotations e.g. (import * as projectAnnotations from
|
||||
* '../.storybook/preview) and will return a composed component that has all
|
||||
* args/parameters/decorators/etc combined and applied to it.
|
||||
*
|
||||
* It's very useful for reusing a story in scenarios outside of Storybook like unit testing.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* ```jsx
|
||||
* import { render } from '@testing-library/react';
|
||||
* import { composeStory } from '@storybook/react';
|
||||
* import Meta, { Primary as PrimaryStory } from './Button.stories';
|
||||
*
|
||||
* const Primary = composeStory(PrimaryStory, Meta);
|
||||
*
|
||||
* test('renders primary button with Hello World', () => {
|
||||
* const { getByText } = render(<Primary>Hello world</Primary>);
|
||||
* expect(getByText(/Hello world/i)).not.toBeNull();
|
||||
* });
|
||||
* ```
|
||||
*
|
||||
* @param story
|
||||
* @param componentAnnotations - E.g. (import Meta from './Button.stories')
|
||||
* @param [projectAnnotations] - E.g. (import * as projectAnnotations from '../.storybook/preview')
|
||||
* this can be applied automatically if you use `setProjectAnnotations` in your setup files.
|
||||
* @param [exportsName] - In case your story does not contain a name and you want it to have a name.
|
||||
*/
|
||||
declare function composeStory<TArgs extends Args = Args>(story: StoryAnnotationsOrFn<ReactRenderer, TArgs>, componentAnnotations: Meta<TArgs | any>, projectAnnotations?: ProjectAnnotations<ReactRenderer>, exportsName?: string): ComposedStoryFn<ReactRenderer, Partial<TArgs>>;
|
||||
/**
|
||||
* Function that will receive a stories import (e.g. `import * as stories from './Button.stories'`)
|
||||
* and optionally projectAnnotations (e.g. `import * as projectAnnotations from
|
||||
* '../.storybook/preview`) 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.
|
||||
*
|
||||
* It's very useful for reusing stories in scenarios outside of Storybook like unit testing.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* ```jsx
|
||||
* import { render } from '@testing-library/react';
|
||||
* import { composeStories } from '@storybook/react';
|
||||
* import * as stories from './Button.stories';
|
||||
*
|
||||
* const { Primary, Secondary } = composeStories(stories);
|
||||
*
|
||||
* test('renders primary button with Hello World', () => {
|
||||
* const { getByText } = render(<Primary>Hello world</Primary>);
|
||||
* expect(getByText(/Hello world/i)).not.toBeNull();
|
||||
* });
|
||||
* ```
|
||||
*
|
||||
* @param csfExports - E.g. (import * as stories from './Button.stories')
|
||||
* @param [projectAnnotations] - E.g. (import * as projectAnnotations from '../.storybook/preview')
|
||||
* this can be applied automatically if you use `setProjectAnnotations` in your setup files.
|
||||
*/
|
||||
declare function composeStories<TModule extends Store_CSFExports<ReactRenderer, any>>(csfExports: TModule, projectAnnotations?: ProjectAnnotations<ReactRenderer>): Omit<StoriesWithPartialProps<ReactRenderer, TModule>, keyof Store_CSFExports>;
|
||||
|
||||
export { INTERNAL_DEFAULT_PROJECT_ANNOTATIONS, Meta, ReactRenderer, composeStories, composeStory, setProjectAnnotations };
|
||||
46
frontend/node_modules/@storybook/react/dist/index.js
generated
vendored
Normal file
46
frontend/node_modules/@storybook/react/dist/index.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
14
frontend/node_modules/@storybook/react/dist/index.mjs
generated
vendored
Normal file
14
frontend/node_modules/@storybook/react/dist/index.mjs
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
export { __definePreview } from './chunk-XBCHTE6T.mjs';
|
||||
import { entry_preview_exports, renderToCanvas } from './chunk-MNKU3DTE.mjs';
|
||||
import { entry_preview_argtypes_exports } from './chunk-N3U7HZRZ.mjs';
|
||||
import './chunk-AWLHXXSE.mjs';
|
||||
import './chunk-XLZBPYSH.mjs';
|
||||
import './chunk-CKO6TW2F.mjs';
|
||||
import './chunk-XP5HYGXS.mjs';
|
||||
import { global } from '@storybook/global';
|
||||
import * as React from 'react';
|
||||
import { composeConfigs, setDefaultProjectAnnotations, setProjectAnnotations as setProjectAnnotations$1, composeStory as composeStory$1, composeStories as composeStories$1 } from 'storybook/preview-api';
|
||||
|
||||
var{window:globalWindow}=global;globalWindow&&(globalWindow.STORYBOOK_ENV="react");function setProjectAnnotations(projectAnnotations){return setDefaultProjectAnnotations(INTERNAL_DEFAULT_PROJECT_ANNOTATIONS),setProjectAnnotations$1(projectAnnotations)}var INTERNAL_DEFAULT_PROJECT_ANNOTATIONS=composeConfigs([entry_preview_exports,entry_preview_argtypes_exports,{renderToCanvas:async(renderContext,canvasElement)=>{if(renderContext.storyContext.testingLibraryRender==null)return renderToCanvas(renderContext,canvasElement);let{storyContext:{context,unboundStoryFn:Story,testingLibraryRender:render}}=renderContext,{unmount}=render(React.createElement(Story,{...context}),{container:context.canvasElement});return unmount}}]);function composeStory(story,componentAnnotations,projectAnnotations,exportsName){return composeStory$1(story,componentAnnotations,projectAnnotations,globalThis.globalProjectAnnotations??INTERNAL_DEFAULT_PROJECT_ANNOTATIONS,exportsName)}function composeStories(csfExports,projectAnnotations){return composeStories$1(csfExports,projectAnnotations,composeStory)}typeof module<"u"&&module?.hot?.decline();
|
||||
|
||||
export { INTERNAL_DEFAULT_PROJECT_ANNOTATIONS, composeStories, composeStory, setProjectAnnotations };
|
||||
1
frontend/node_modules/@storybook/react/dist/playwright.d.ts
generated
vendored
Normal file
1
frontend/node_modules/@storybook/react/dist/playwright.d.ts
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
export { createPlaywrightTest as createTest } from 'storybook/preview-api';
|
||||
1
frontend/node_modules/@storybook/react/dist/playwright.js
generated
vendored
Normal file
1
frontend/node_modules/@storybook/react/dist/playwright.js
generated
vendored
Normal file
@@ -0,0 +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});
|
||||
2
frontend/node_modules/@storybook/react/dist/playwright.mjs
generated
vendored
Normal file
2
frontend/node_modules/@storybook/react/dist/playwright.mjs
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
import './chunk-XP5HYGXS.mjs';
|
||||
export { createPlaywrightTest as createTest } from 'storybook/preview-api';
|
||||
19
frontend/node_modules/@storybook/react/dist/preset.d.ts
generated
vendored
Normal file
19
frontend/node_modules/@storybook/react/dist/preset.d.ts
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
import { PresetProperty } from 'storybook/internal/types';
|
||||
|
||||
declare const addons: PresetProperty<'addons'>;
|
||||
declare const previewAnnotations: PresetProperty<'previewAnnotations'>;
|
||||
/**
|
||||
* Try to resolve react and react-dom from the root node_modules of the project addon-docs uses this
|
||||
* to alias react and react-dom to the project's version when possible If the user doesn't have an
|
||||
* explicit dependency on react this will return the existing values Which will be the versions
|
||||
* shipped with addon-docs
|
||||
*
|
||||
* We do the exact same thing in the common preset, but that will fail in Yarn PnP because
|
||||
*
|
||||
* Storybook/internal/core-server doesn't have a peer dependency on react This will make
|
||||
*
|
||||
* @storybook/react projects work in Yarn PnP
|
||||
*/
|
||||
declare const resolvedReact: (existing: any) => Promise<any>;
|
||||
|
||||
export { addons, previewAnnotations, resolvedReact };
|
||||
1
frontend/node_modules/@storybook/react/dist/preset.js
generated
vendored
Normal file
1
frontend/node_modules/@storybook/react/dist/preset.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__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 __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var preset_exports={};__export(preset_exports,{addons:()=>addons,previewAnnotations:()=>previewAnnotations,resolvedReact:()=>resolvedReact});module.exports=__toCommonJS(preset_exports);var import_node_path=require("path"),addons=[require.resolve("@storybook/react-dom-shim/dist/preset")],previewAnnotations=async(input=[],options)=>{let docsConfig=await options.presets.apply("docs",{},options),features=await options.presets.apply("features",{},options),docsEnabled=Object.keys(docsConfig).length>0;return[].concat(input).concat((0,import_node_path.join)(__dirname,"entry-preview.mjs"),(0,import_node_path.join)(__dirname,"entry-preview-argtypes.mjs")).concat(docsEnabled?[(0,import_node_path.join)(__dirname,"entry-preview-docs.mjs")]:[]).concat(features?.experimentalRSC?[(0,import_node_path.join)(__dirname,"entry-preview-rsc.mjs")]:[])},resolvedReact=async existing=>{try{return{...existing,react:(0,import_node_path.dirname)(require.resolve("react/package.json")),reactDom:(0,import_node_path.dirname)(require.resolve("react-dom/package.json"))}}catch{return existing}};0&&(module.exports={addons,previewAnnotations,resolvedReact});
|
||||
199
frontend/node_modules/@storybook/react/dist/preview.d.ts
generated
vendored
Normal file
199
frontend/node_modules/@storybook/react/dist/preview.d.ts
generated
vendored
Normal file
@@ -0,0 +1,199 @@
|
||||
import { ComponentType } from 'react';
|
||||
import { Preview, Meta, Story } from 'storybook/internal/csf';
|
||||
import { Args, DecoratorFunction, ArgsStoryFn, ComponentAnnotations, Renderer, StoryAnnotations } from 'storybook/internal/types';
|
||||
import { c as Simplify, A as AddMocks, d as SetOptional } from './public-types-f2c70f25.js';
|
||||
import { R as ReactRenderer } from './types-5617c98e.js';
|
||||
|
||||
/**
|
||||
Remove any index signatures from the given object type, so that only explicitly defined properties remain.
|
||||
|
||||
Use-cases:
|
||||
- Remove overly permissive signatures from third-party types.
|
||||
|
||||
This type was taken from this [StackOverflow answer](https://stackoverflow.com/a/68261113/420747).
|
||||
|
||||
It relies on the fact that an empty object (`{}`) is assignable to an object with just an index signature, like `Record<string, unknown>`, but not to an object with explicitly defined keys, like `Record<'foo' | 'bar', unknown>`.
|
||||
|
||||
(The actual value type, `unknown`, is irrelevant and could be any type. Only the key type matters.)
|
||||
|
||||
```
|
||||
const indexed: Record<string, unknown> = {}; // Allowed
|
||||
|
||||
const keyed: Record<'foo', unknown> = {}; // Error
|
||||
// => TS2739: Type '{}' is missing the following properties from type 'Record<"foo" | "bar", unknown>': foo, bar
|
||||
```
|
||||
|
||||
Instead of causing a type error like the above, you can also use a [conditional type](https://www.typescriptlang.org/docs/handbook/2/conditional-types.html) to test whether a type is assignable to another:
|
||||
|
||||
```
|
||||
type Indexed = {} extends Record<string, unknown>
|
||||
? '✅ `{}` is assignable to `Record<string, unknown>`'
|
||||
: '❌ `{}` is NOT assignable to `Record<string, unknown>`';
|
||||
// => '✅ `{}` is assignable to `Record<string, unknown>`'
|
||||
|
||||
type Keyed = {} extends Record<'foo' | 'bar', unknown>
|
||||
? "✅ `{}` is assignable to `Record<'foo' | 'bar', unknown>`"
|
||||
: "❌ `{}` is NOT assignable to `Record<'foo' | 'bar', unknown>`";
|
||||
// => "❌ `{}` is NOT assignable to `Record<'foo' | 'bar', unknown>`"
|
||||
```
|
||||
|
||||
Using a [mapped type](https://www.typescriptlang.org/docs/handbook/2/mapped-types.html#further-exploration), you can then check for each `KeyType` of `ObjectType`...
|
||||
|
||||
```
|
||||
import type {RemoveIndexSignature} from 'type-fest';
|
||||
|
||||
type RemoveIndexSignature<ObjectType> = {
|
||||
[KeyType in keyof ObjectType // Map each key of `ObjectType`...
|
||||
]: ObjectType[KeyType]; // ...to its original value, i.e. `RemoveIndexSignature<Foo> == Foo`.
|
||||
};
|
||||
```
|
||||
|
||||
...whether an empty object (`{}`) would be assignable to an object with that `KeyType` (`Record<KeyType, unknown>`)...
|
||||
|
||||
```
|
||||
import type {RemoveIndexSignature} from 'type-fest';
|
||||
|
||||
type RemoveIndexSignature<ObjectType> = {
|
||||
[KeyType in keyof ObjectType
|
||||
// Is `{}` assignable to `Record<KeyType, unknown>`?
|
||||
as {} extends Record<KeyType, unknown>
|
||||
? ... // ✅ `{}` is assignable to `Record<KeyType, unknown>`
|
||||
: ... // ❌ `{}` is NOT assignable to `Record<KeyType, unknown>`
|
||||
]: ObjectType[KeyType];
|
||||
};
|
||||
```
|
||||
|
||||
If `{}` is assignable, it means that `KeyType` is an index signature and we want to remove it. If it is not assignable, `KeyType` is a "real" key and we want to keep it.
|
||||
|
||||
```
|
||||
import type {RemoveIndexSignature} from 'type-fest';
|
||||
|
||||
type RemoveIndexSignature<ObjectType> = {
|
||||
[KeyType in keyof ObjectType
|
||||
as {} extends Record<KeyType, unknown>
|
||||
? never // => Remove this `KeyType`.
|
||||
: KeyType // => Keep this `KeyType` as it is.
|
||||
]: ObjectType[KeyType];
|
||||
};
|
||||
```
|
||||
|
||||
@example
|
||||
```
|
||||
import type {RemoveIndexSignature} from 'type-fest';
|
||||
|
||||
interface Example {
|
||||
// These index signatures will be removed.
|
||||
[x: string]: any
|
||||
[x: number]: any
|
||||
[x: symbol]: any
|
||||
[x: `head-${string}`]: string
|
||||
[x: `${string}-tail`]: string
|
||||
[x: `head-${string}-tail`]: string
|
||||
[x: `${bigint}`]: string
|
||||
[x: `embedded-${number}`]: string
|
||||
|
||||
// These explicitly defined keys will remain.
|
||||
foo: 'bar';
|
||||
qux?: 'baz';
|
||||
}
|
||||
|
||||
type ExampleWithoutIndexSignatures = RemoveIndexSignature<Example>;
|
||||
// => { foo: 'bar'; qux?: 'baz' | undefined; }
|
||||
```
|
||||
|
||||
@category Object
|
||||
*/
|
||||
type RemoveIndexSignature<ObjectType> = {
|
||||
[KeyType in keyof ObjectType as {} extends Record<KeyType, unknown>
|
||||
? never
|
||||
: KeyType]: ObjectType[KeyType];
|
||||
};
|
||||
|
||||
/**
|
||||
Convert a union type to an intersection type using [distributive conditional types](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#distributive-conditional-types).
|
||||
|
||||
Inspired by [this Stack Overflow answer](https://stackoverflow.com/a/50375286/2172153).
|
||||
|
||||
@example
|
||||
```
|
||||
import type {UnionToIntersection} from 'type-fest';
|
||||
|
||||
type Union = {the(): void} | {great(arg: string): void} | {escape: boolean};
|
||||
|
||||
type Intersection = UnionToIntersection<Union>;
|
||||
//=> {the(): void; great(arg: string): void; escape: boolean};
|
||||
```
|
||||
|
||||
A more applicable example which could make its way into your library code follows.
|
||||
|
||||
@example
|
||||
```
|
||||
import type {UnionToIntersection} from 'type-fest';
|
||||
|
||||
class CommandOne {
|
||||
commands: {
|
||||
a1: () => undefined,
|
||||
b1: () => undefined,
|
||||
}
|
||||
}
|
||||
|
||||
class CommandTwo {
|
||||
commands: {
|
||||
a2: (argA: string) => undefined,
|
||||
b2: (argB: string) => undefined,
|
||||
}
|
||||
}
|
||||
|
||||
const union = [new CommandOne(), new CommandTwo()].map(instance => instance.commands);
|
||||
type Union = typeof union;
|
||||
//=> {a1(): void; b1(): void} | {a2(argA: string): void; b2(argB: string): void}
|
||||
|
||||
type Intersection = UnionToIntersection<Union>;
|
||||
//=> {a1(): void; b1(): void; a2(argA: string): void; b2(argB: string): void}
|
||||
```
|
||||
|
||||
@category Type
|
||||
*/
|
||||
type UnionToIntersection<Union> = (
|
||||
// `extends unknown` is always going to be the case and is used to convert the
|
||||
// `Union` into a [distributive conditional
|
||||
// type](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#distributive-conditional-types).
|
||||
Union extends unknown
|
||||
// The union type is used as the only argument to a function since the union
|
||||
// of function arguments is an intersection.
|
||||
? (distributedUnion: Union) => void
|
||||
// This won't happen.
|
||||
: never
|
||||
// Infer the `Intersection` type since TypeScript represents the positional
|
||||
// arguments of unions of functions as an intersection of the union.
|
||||
) extends ((mergedIntersection: infer Intersection) => void)
|
||||
? Intersection
|
||||
: never;
|
||||
|
||||
/** Do not use, use the definePreview exported from the framework instead */
|
||||
declare function __definePreview(preview: ReactPreview['input']): ReactPreview;
|
||||
interface ReactPreview extends Preview<ReactRenderer> {
|
||||
meta<TArgs extends Args, Decorators extends DecoratorFunction<ReactRenderer, any>, TMetaArgs extends Partial<TArgs>>(meta: {
|
||||
render?: ArgsStoryFn<ReactRenderer, TArgs>;
|
||||
component?: ComponentType<TArgs>;
|
||||
decorators?: Decorators | Decorators[];
|
||||
args?: TMetaArgs;
|
||||
} & Omit<ComponentAnnotations<ReactRenderer, TArgs>, 'decorators'>): ReactMeta<{
|
||||
args: Simplify<TArgs & Simplify<RemoveIndexSignature<DecoratorsArgs<ReactRenderer, Decorators>>>>;
|
||||
}, {
|
||||
args: Partial<TArgs> extends TMetaArgs ? {} : TMetaArgs;
|
||||
}>;
|
||||
}
|
||||
type DecoratorsArgs<TRenderer extends Renderer, Decorators> = UnionToIntersection<Decorators extends DecoratorFunction<TRenderer, infer TArgs> ? TArgs : unknown>;
|
||||
interface ReactMeta<Context extends {
|
||||
args: Args;
|
||||
}, MetaInput extends ComponentAnnotations<ReactRenderer>> extends Meta<ReactRenderer, Context['args']> {
|
||||
story<TInput extends StoryAnnotations<ReactRenderer, Context['args']> & {
|
||||
render: () => ReactRenderer['storyResult'];
|
||||
}>(story: TInput): ReactStory;
|
||||
story<TInput extends Simplify<StoryAnnotations<ReactRenderer, AddMocks<Context['args'], MetaInput['args']>, SetOptional<Context['args'], keyof Context['args'] & keyof MetaInput['args']>>>>(story: TInput): ReactStory;
|
||||
}
|
||||
interface ReactStory extends Story<ReactRenderer> {
|
||||
}
|
||||
|
||||
export { ReactPreview, ReactStory, __definePreview };
|
||||
46
frontend/node_modules/@storybook/react/dist/preview.js
generated
vendored
Normal file
46
frontend/node_modules/@storybook/react/dist/preview.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
7
frontend/node_modules/@storybook/react/dist/preview.mjs
generated
vendored
Normal file
7
frontend/node_modules/@storybook/react/dist/preview.mjs
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
export { __definePreview } from './chunk-XBCHTE6T.mjs';
|
||||
import './chunk-MNKU3DTE.mjs';
|
||||
import './chunk-N3U7HZRZ.mjs';
|
||||
import './chunk-AWLHXXSE.mjs';
|
||||
import './chunk-XLZBPYSH.mjs';
|
||||
import './chunk-CKO6TW2F.mjs';
|
||||
import './chunk-XP5HYGXS.mjs';
|
||||
230
frontend/node_modules/@storybook/react/dist/public-types-f2c70f25.d.ts
generated
vendored
Normal file
230
frontend/node_modules/@storybook/react/dist/public-types-f2c70f25.d.ts
generated
vendored
Normal file
@@ -0,0 +1,230 @@
|
||||
import { ComponentType, ComponentProps } from 'react';
|
||||
import { Args, ComponentAnnotations, AnnotatedStoryFn, ArgsStoryFn, ArgsFromMeta, StoryAnnotations, StrictArgs, DecoratorFunction, LoaderFunction, StoryContext as StoryContext$1, ProjectAnnotations } from 'storybook/internal/types';
|
||||
import { R as ReactRenderer } from './types-5617c98e.js';
|
||||
|
||||
declare global {
|
||||
interface SymbolConstructor {
|
||||
readonly observable: symbol;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Returns a boolean for whether the two given types are equal.
|
||||
|
||||
@link https://github.com/microsoft/TypeScript/issues/27024#issuecomment-421529650
|
||||
@link https://stackoverflow.com/questions/68961864/how-does-the-equals-work-in-typescript/68963796#68963796
|
||||
*/
|
||||
type IsEqual<T, U> =
|
||||
(<G>() => G extends T ? 1 : 2) extends
|
||||
(<G>() => G extends U ? 1 : 2)
|
||||
? true
|
||||
: false;
|
||||
|
||||
/**
|
||||
Filter out keys from an object.
|
||||
|
||||
Returns `never` if `Exclude` is strictly equal to `Key`.
|
||||
Returns `never` if `Key` extends `Exclude`.
|
||||
Returns `Key` otherwise.
|
||||
|
||||
@example
|
||||
```
|
||||
type Filtered = Filter<'foo', 'foo'>;
|
||||
//=> never
|
||||
```
|
||||
|
||||
@example
|
||||
```
|
||||
type Filtered = Filter<'bar', string>;
|
||||
//=> never
|
||||
```
|
||||
|
||||
@example
|
||||
```
|
||||
type Filtered = Filter<'bar', 'foo'>;
|
||||
//=> 'bar'
|
||||
```
|
||||
|
||||
@see {Except}
|
||||
*/
|
||||
type Filter<KeyType, ExcludeType> = IsEqual<KeyType, ExcludeType> extends true ? never : (KeyType extends ExcludeType ? never : KeyType);
|
||||
|
||||
/**
|
||||
Create a type from an object type without certain keys.
|
||||
|
||||
This type is a stricter version of [`Omit`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-5.html#the-omit-helper-type). The `Omit` type does not restrict the omitted keys to be keys present on the given type, while `Except` does. The benefits of a stricter type are avoiding typos and allowing the compiler to pick up on rename refactors automatically.
|
||||
|
||||
This type was proposed to the TypeScript team, which declined it, saying they prefer that libraries implement stricter versions of the built-in types ([microsoft/TypeScript#30825](https://github.com/microsoft/TypeScript/issues/30825#issuecomment-523668235)).
|
||||
|
||||
@example
|
||||
```
|
||||
import type {Except} from 'type-fest';
|
||||
|
||||
type Foo = {
|
||||
a: number;
|
||||
b: string;
|
||||
c: boolean;
|
||||
};
|
||||
|
||||
type FooWithoutA = Except<Foo, 'a' | 'c'>;
|
||||
//=> {b: string};
|
||||
```
|
||||
|
||||
@category Object
|
||||
*/
|
||||
type Except<ObjectType, KeysType extends keyof ObjectType> = {
|
||||
[KeyType in keyof ObjectType as Filter<KeyType, KeysType>]: ObjectType[KeyType];
|
||||
};
|
||||
|
||||
/**
|
||||
@see Simplify
|
||||
*/
|
||||
interface SimplifyOptions {
|
||||
/**
|
||||
Do the simplification recursively.
|
||||
|
||||
@default false
|
||||
*/
|
||||
deep?: boolean;
|
||||
}
|
||||
|
||||
// Flatten a type without worrying about the result.
|
||||
type Flatten<
|
||||
AnyType,
|
||||
Options extends SimplifyOptions = {},
|
||||
> = Options['deep'] extends true
|
||||
? {[KeyType in keyof AnyType]: Simplify<AnyType[KeyType], Options>}
|
||||
: {[KeyType in keyof AnyType]: AnyType[KeyType]};
|
||||
|
||||
/**
|
||||
Useful to flatten the type output to improve type hints shown in editors. And also to transform an interface into a type to aide with assignability.
|
||||
|
||||
@example
|
||||
```
|
||||
import type {Simplify} from 'type-fest';
|
||||
|
||||
type PositionProps = {
|
||||
top: number;
|
||||
left: number;
|
||||
};
|
||||
|
||||
type SizeProps = {
|
||||
width: number;
|
||||
height: number;
|
||||
};
|
||||
|
||||
// In your editor, hovering over `Props` will show a flattened object with all the properties.
|
||||
type Props = Simplify<PositionProps & SizeProps>;
|
||||
```
|
||||
|
||||
Sometimes it is desired to pass a value as a function argument that has a different type. At first inspection it may seem assignable, and then you discover it is not because the `value`'s type definition was defined as an interface. In the following example, `fn` requires an argument of type `Record<string, unknown>`. If the value is defined as a literal, then it is assignable. And if the `value` is defined as type using the `Simplify` utility the value is assignable. But if the `value` is defined as an interface, it is not assignable because the interface is not sealed and elsewhere a non-string property could be added to the interface.
|
||||
|
||||
If the type definition must be an interface (perhaps it was defined in a third-party npm package), then the `value` can be defined as `const value: Simplify<SomeInterface> = ...`. Then `value` will be assignable to the `fn` argument. Or the `value` can be cast as `Simplify<SomeInterface>` if you can't re-declare the `value`.
|
||||
|
||||
@example
|
||||
```
|
||||
import type {Simplify} from 'type-fest';
|
||||
|
||||
interface SomeInterface {
|
||||
foo: number;
|
||||
bar?: string;
|
||||
baz: number | undefined;
|
||||
}
|
||||
|
||||
type SomeType = {
|
||||
foo: number;
|
||||
bar?: string;
|
||||
baz: number | undefined;
|
||||
};
|
||||
|
||||
const literal = {foo: 123, bar: 'hello', baz: 456};
|
||||
const someType: SomeType = literal;
|
||||
const someInterface: SomeInterface = literal;
|
||||
|
||||
function fn(object: Record<string, unknown>): void {}
|
||||
|
||||
fn(literal); // Good: literal object type is sealed
|
||||
fn(someType); // Good: type is sealed
|
||||
fn(someInterface); // Error: Index signature for type 'string' is missing in type 'someInterface'. Because `interface` can be re-opened
|
||||
fn(someInterface as Simplify<SomeInterface>); // Good: transform an `interface` into a `type`
|
||||
```
|
||||
|
||||
@link https://github.com/microsoft/TypeScript/issues/15300
|
||||
|
||||
@category Object
|
||||
*/
|
||||
type Simplify<
|
||||
AnyType,
|
||||
Options extends SimplifyOptions = {},
|
||||
> = Flatten<AnyType> extends AnyType
|
||||
? Flatten<AnyType, Options>
|
||||
: AnyType;
|
||||
|
||||
/**
|
||||
Create a type that makes the given keys optional. The remaining keys are kept as is. The sister of the `SetRequired` type.
|
||||
|
||||
Use-case: You want to define a single model where the only thing that changes is whether or not some of the keys are optional.
|
||||
|
||||
@example
|
||||
```
|
||||
import type {SetOptional} from 'type-fest';
|
||||
|
||||
type Foo = {
|
||||
a: number;
|
||||
b?: string;
|
||||
c: boolean;
|
||||
}
|
||||
|
||||
type SomeOptional = SetOptional<Foo, 'b' | 'c'>;
|
||||
// type SomeOptional = {
|
||||
// a: number;
|
||||
// b?: string; // Was already optional and still is.
|
||||
// c?: boolean; // Is now optional.
|
||||
// }
|
||||
```
|
||||
|
||||
@category Object
|
||||
*/
|
||||
type SetOptional<BaseType, Keys extends keyof BaseType> =
|
||||
Simplify<
|
||||
// Pick just the keys that are readonly from the base type.
|
||||
Except<BaseType, Keys> &
|
||||
// Pick the keys that should be mutable from the base type and make them mutable.
|
||||
Partial<Pick<BaseType, Keys>>
|
||||
>;
|
||||
|
||||
/**
|
||||
* Metadata to configure the stories for a component.
|
||||
*
|
||||
* @see [Default export](https://storybook.js.org/docs/api/csf#default-export)
|
||||
*/
|
||||
type Meta<TCmpOrArgs = Args> = [TCmpOrArgs] extends [ComponentType<any>] ? ComponentAnnotations<ReactRenderer, ComponentProps<TCmpOrArgs>> : ComponentAnnotations<ReactRenderer, TCmpOrArgs>;
|
||||
/**
|
||||
* Story function that represents a CSFv2 component example.
|
||||
*
|
||||
* @see [Named Story exports](https://storybook.js.org/docs/api/csf#named-story-exports)
|
||||
*/
|
||||
type StoryFn<TCmpOrArgs = Args> = [TCmpOrArgs] extends [ComponentType<any>] ? AnnotatedStoryFn<ReactRenderer, ComponentProps<TCmpOrArgs>> : AnnotatedStoryFn<ReactRenderer, TCmpOrArgs>;
|
||||
/**
|
||||
* Story object that represents a CSFv3 component example.
|
||||
*
|
||||
* @see [Named Story exports](https://storybook.js.org/docs/api/csf#named-story-exports)
|
||||
*/
|
||||
type StoryObj<TMetaOrCmpOrArgs = Args> = [TMetaOrCmpOrArgs] extends [
|
||||
{
|
||||
render?: ArgsStoryFn<ReactRenderer, any>;
|
||||
component?: infer Component;
|
||||
args?: infer DefaultArgs;
|
||||
}
|
||||
] ? Simplify<(Component extends ComponentType<any> ? ComponentProps<Component> : unknown) & ArgsFromMeta<ReactRenderer, TMetaOrCmpOrArgs>> extends infer TArgs ? StoryAnnotations<ReactRenderer, AddMocks<TArgs, DefaultArgs>, SetOptional<TArgs, keyof TArgs & keyof DefaultArgs>> : never : TMetaOrCmpOrArgs extends ComponentType<any> ? StoryAnnotations<ReactRenderer, ComponentProps<TMetaOrCmpOrArgs>> : StoryAnnotations<ReactRenderer, TMetaOrCmpOrArgs>;
|
||||
type AddMocks<TArgs, DefaultArgs> = Simplify<{
|
||||
[T in keyof TArgs]: T extends keyof DefaultArgs ? DefaultArgs[T] extends (...args: any) => any & {
|
||||
mock: {};
|
||||
} ? DefaultArgs[T] : TArgs[T] : TArgs[T];
|
||||
}>;
|
||||
type Decorator<TArgs = StrictArgs> = DecoratorFunction<ReactRenderer, TArgs>;
|
||||
type Loader<TArgs = StrictArgs> = LoaderFunction<ReactRenderer, TArgs>;
|
||||
type StoryContext<TArgs = StrictArgs> = StoryContext$1<ReactRenderer, TArgs>;
|
||||
type Preview = ProjectAnnotations<ReactRenderer>;
|
||||
|
||||
export { AddMocks as A, Decorator as D, Loader as L, Meta as M, Preview as P, StoryFn as S, StoryObj as a, StoryContext as b, Simplify as c, SetOptional as d };
|
||||
27
frontend/node_modules/@storybook/react/dist/types-5617c98e.d.ts
generated
vendored
Normal file
27
frontend/node_modules/@storybook/react/dist/types-5617c98e.d.ts
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
import { ComponentType, JSX } from 'react';
|
||||
import { WebRenderer, Canvas } from 'storybook/internal/types';
|
||||
|
||||
interface ReactRenderer extends WebRenderer {
|
||||
component: ComponentType<this['T']>;
|
||||
storyResult: StoryFnReactReturnType;
|
||||
mount: (ui?: JSX.Element) => Promise<Canvas>;
|
||||
}
|
||||
interface ReactParameters {
|
||||
/** React renderer configuration */
|
||||
react?: {
|
||||
/**
|
||||
* Whether to enable React Server Components
|
||||
*
|
||||
* @see https://storybook.js.org/docs/get-started/frameworks/nextjs#react-server-components-rsc
|
||||
*/
|
||||
rsc?: boolean;
|
||||
/** Options passed to React root creation */
|
||||
rootOptions?: {
|
||||
/** Custom error handler for caught errors */
|
||||
onCaughtError?: (error: unknown) => void;
|
||||
};
|
||||
};
|
||||
}
|
||||
type StoryFnReactReturnType = JSX.Element;
|
||||
|
||||
export { ReactRenderer as R, ReactParameters as a };
|
||||
129
frontend/node_modules/@storybook/react/package.json
generated
vendored
Normal file
129
frontend/node_modules/@storybook/react/package.json
generated
vendored
Normal file
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"name": "@storybook/react",
|
||||
"version": "9.0.16",
|
||||
"description": "Storybook React renderer",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
],
|
||||
"homepage": "https://github.com/storybookjs/storybook/tree/next/code/renderers/react",
|
||||
"bugs": {
|
||||
"url": "https://github.com/storybookjs/storybook/issues"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/storybookjs/storybook.git",
|
||||
"directory": "code/renderers/react"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/storybook"
|
||||
},
|
||||
"license": "MIT",
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./dist/index.d.ts",
|
||||
"import": "./dist/index.mjs",
|
||||
"require": "./dist/index.js"
|
||||
},
|
||||
"./preview": {
|
||||
"types": "./dist/preview.d.ts",
|
||||
"import": "./dist/preview.mjs",
|
||||
"require": "./dist/preview.js"
|
||||
},
|
||||
"./experimental-playwright": {
|
||||
"types": "./dist/playwright.d.ts",
|
||||
"import": "./dist/playwright.mjs",
|
||||
"require": "./dist/playwright.js"
|
||||
},
|
||||
"./preset": "./preset.js",
|
||||
"./dist/entry-preview.mjs": "./dist/entry-preview.mjs",
|
||||
"./dist/entry-preview-argtypes.mjs": "./dist/entry-preview-argtypes.mjs",
|
||||
"./dist/entry-preview-docs.mjs": "./dist/entry-preview-docs.mjs",
|
||||
"./dist/entry-preview-rsc.mjs": "./dist/entry-preview-rsc.mjs",
|
||||
"./package.json": "./package.json"
|
||||
},
|
||||
"main": "dist/index.js",
|
||||
"module": "dist/index.mjs",
|
||||
"types": "dist/index.d.ts",
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
"dist/index.d.ts"
|
||||
],
|
||||
"preview": [
|
||||
"dist/preview.d.ts"
|
||||
],
|
||||
"experimental-playwright": [
|
||||
"dist/playwright.d.ts"
|
||||
]
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
"dist/**/*",
|
||||
"template/cli/**/*",
|
||||
"README.md",
|
||||
"*.js",
|
||||
"*.d.ts",
|
||||
"!src/**/*"
|
||||
],
|
||||
"scripts": {
|
||||
"check": "jiti ../../../scripts/prepare/check.ts",
|
||||
"prep": "jiti ../../../scripts/prepare/bundle.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/global": "^5.0.0",
|
||||
"@storybook/react-dom-shim": "9.0.16"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/babel-plugin-react-docgen": "^4.2.3",
|
||||
"@types/escodegen": "^0.0.6",
|
||||
"@types/estree": "^1.0.6",
|
||||
"@types/node": "^22.0.0",
|
||||
"@types/semver": "^7.3.4",
|
||||
"acorn": "^7.4.1",
|
||||
"acorn-jsx": "^5.3.1",
|
||||
"acorn-walk": "^7.2.0",
|
||||
"babel-plugin-react-docgen": "^4.2.1",
|
||||
"es-toolkit": "^1.36.0",
|
||||
"escodegen": "^2.1.0",
|
||||
"expect-type": "^0.15.0",
|
||||
"html-tags": "^3.1.0",
|
||||
"prop-types": "^15.7.2",
|
||||
"react-element-to-jsx-string": "^15.0.0",
|
||||
"require-from-string": "^2.0.2",
|
||||
"semver": "^7.3.7",
|
||||
"ts-dedent": "^2.0.0",
|
||||
"type-fest": "~2.19"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta",
|
||||
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta",
|
||||
"storybook": "^9.0.16",
|
||||
"typescript": ">= 4.9.x"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"typescript": {
|
||||
"optional": true
|
||||
}
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.0.0"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"bundler": {
|
||||
"entries": [
|
||||
"./src/index.ts",
|
||||
"./src/preset.ts",
|
||||
"./src/preview.tsx",
|
||||
"./src/entry-preview.tsx",
|
||||
"./src/entry-preview-argtypes.ts",
|
||||
"./src/entry-preview-docs.ts",
|
||||
"./src/entry-preview-rsc.tsx",
|
||||
"./src/playwright.ts"
|
||||
],
|
||||
"platform": "browser"
|
||||
},
|
||||
"gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16"
|
||||
}
|
||||
1
frontend/node_modules/@storybook/react/preset.js
generated
vendored
Normal file
1
frontend/node_modules/@storybook/react/preset.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
module.exports = require('./dist/preset');
|
||||
5
frontend/node_modules/@storybook/react/template/cli/.eslintrc.json
generated
vendored
Normal file
5
frontend/node_modules/@storybook/react/template/cli/.eslintrc.json
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"rules": {
|
||||
"import/extensions": "off"
|
||||
}
|
||||
}
|
||||
39
frontend/node_modules/@storybook/react/template/cli/js/Button.jsx
generated
vendored
Normal file
39
frontend/node_modules/@storybook/react/template/cli/js/Button.jsx
generated
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
import React from 'react';
|
||||
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import './button.css';
|
||||
|
||||
/** Primary UI component for user interaction */
|
||||
export const Button = ({
|
||||
primary = false,
|
||||
backgroundColor = null,
|
||||
size = 'medium',
|
||||
label,
|
||||
...props
|
||||
}) => {
|
||||
const mode = primary ? 'storybook-button--primary' : 'storybook-button--secondary';
|
||||
return (
|
||||
<button
|
||||
type="button"
|
||||
className={['storybook-button', `storybook-button--${size}`, mode].join(' ')}
|
||||
style={backgroundColor && { backgroundColor }}
|
||||
{...props}
|
||||
>
|
||||
{label}
|
||||
</button>
|
||||
);
|
||||
};
|
||||
|
||||
Button.propTypes = {
|
||||
/** Is this the principal call to action on the page? */
|
||||
primary: PropTypes.bool,
|
||||
/** What background color to use */
|
||||
backgroundColor: PropTypes.string,
|
||||
/** How large should the button be? */
|
||||
size: PropTypes.oneOf(['small', 'medium', 'large']),
|
||||
/** Button contents */
|
||||
label: PropTypes.string.isRequired,
|
||||
/** Optional click handler */
|
||||
onClick: PropTypes.func,
|
||||
};
|
||||
49
frontend/node_modules/@storybook/react/template/cli/js/Button.stories.js
generated
vendored
Normal file
49
frontend/node_modules/@storybook/react/template/cli/js/Button.stories.js
generated
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
import { fn } from 'storybook/test';
|
||||
|
||||
import { Button } from './Button';
|
||||
|
||||
// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
|
||||
export default {
|
||||
title: 'Example/Button',
|
||||
component: Button,
|
||||
parameters: {
|
||||
// Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
|
||||
layout: 'centered',
|
||||
},
|
||||
// This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs
|
||||
tags: ['autodocs'],
|
||||
// More on argTypes: https://storybook.js.org/docs/api/argtypes
|
||||
argTypes: {
|
||||
backgroundColor: { control: 'color' },
|
||||
},
|
||||
// Use `fn` to spy on the onClick arg, which will appear in the actions panel once invoked: https://storybook.js.org/docs/essentials/actions#action-args
|
||||
args: { onClick: fn() },
|
||||
};
|
||||
|
||||
// More on writing stories with args: https://storybook.js.org/docs/writing-stories/args
|
||||
export const Primary = {
|
||||
args: {
|
||||
primary: true,
|
||||
label: 'Button',
|
||||
},
|
||||
};
|
||||
|
||||
export const Secondary = {
|
||||
args: {
|
||||
label: 'Button',
|
||||
},
|
||||
};
|
||||
|
||||
export const Large = {
|
||||
args: {
|
||||
size: 'large',
|
||||
label: 'Button',
|
||||
},
|
||||
};
|
||||
|
||||
export const Small = {
|
||||
args: {
|
||||
size: 'small',
|
||||
label: 'Button',
|
||||
},
|
||||
};
|
||||
56
frontend/node_modules/@storybook/react/template/cli/js/Header.jsx
generated
vendored
Normal file
56
frontend/node_modules/@storybook/react/template/cli/js/Header.jsx
generated
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
import React from 'react';
|
||||
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import { Button } from './Button';
|
||||
import './header.css';
|
||||
|
||||
export const Header = ({ user = null, onLogin, onLogout, onCreateAccount }) => (
|
||||
<header>
|
||||
<div className="storybook-header">
|
||||
<div>
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="none" fillRule="evenodd">
|
||||
<path
|
||||
d="M10 0h12a10 10 0 0110 10v12a10 10 0 01-10 10H10A10 10 0 010 22V10A10 10 0 0110 0z"
|
||||
fill="#FFF"
|
||||
/>
|
||||
<path
|
||||
d="M5.3 10.6l10.4 6v11.1l-10.4-6v-11zm11.4-6.2l9.7 5.5-9.7 5.6V4.4z"
|
||||
fill="#555AB9"
|
||||
/>
|
||||
<path
|
||||
d="M27.2 10.6v11.2l-10.5 6V16.5l10.5-6zM15.7 4.4v11L6 10l9.7-5.5z"
|
||||
fill="#91BAF8"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
<h1>Acme</h1>
|
||||
</div>
|
||||
<div>
|
||||
{user ? (
|
||||
<>
|
||||
<span className="welcome">
|
||||
Welcome, <b>{user.name}</b>!
|
||||
</span>
|
||||
<Button size="small" onClick={onLogout} label="Log out" />
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<Button size="small" onClick={onLogin} label="Log in" />
|
||||
<Button primary size="small" onClick={onCreateAccount} label="Sign up" />
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
|
||||
Header.propTypes = {
|
||||
user: PropTypes.shape({
|
||||
name: PropTypes.string.isRequired,
|
||||
}),
|
||||
onLogin: PropTypes.func.isRequired,
|
||||
onLogout: PropTypes.func.isRequired,
|
||||
onCreateAccount: PropTypes.func.isRequired,
|
||||
};
|
||||
29
frontend/node_modules/@storybook/react/template/cli/js/Header.stories.js
generated
vendored
Normal file
29
frontend/node_modules/@storybook/react/template/cli/js/Header.stories.js
generated
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
import { fn } from 'storybook/test';
|
||||
|
||||
import { Header } from './Header';
|
||||
|
||||
export default {
|
||||
title: 'Example/Header',
|
||||
component: Header,
|
||||
// This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs
|
||||
tags: ['autodocs'],
|
||||
parameters: {
|
||||
// More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
|
||||
layout: 'fullscreen',
|
||||
},
|
||||
args: {
|
||||
onLogin: fn(),
|
||||
onLogout: fn(),
|
||||
onCreateAccount: fn(),
|
||||
},
|
||||
};
|
||||
|
||||
export const LoggedIn = {
|
||||
args: {
|
||||
user: {
|
||||
name: 'Jane Doe',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const LoggedOut = {};
|
||||
69
frontend/node_modules/@storybook/react/template/cli/js/Page.jsx
generated
vendored
Normal file
69
frontend/node_modules/@storybook/react/template/cli/js/Page.jsx
generated
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
import React from 'react';
|
||||
|
||||
import { Header } from './Header';
|
||||
import './page.css';
|
||||
|
||||
export const Page = () => {
|
||||
const [user, setUser] = React.useState();
|
||||
|
||||
return (
|
||||
<article>
|
||||
<Header
|
||||
user={user}
|
||||
onLogin={() => setUser({ name: 'Jane Doe' })}
|
||||
onLogout={() => setUser(undefined)}
|
||||
onCreateAccount={() => setUser({ name: 'Jane Doe' })}
|
||||
/>
|
||||
|
||||
<section className="storybook-page">
|
||||
<h2>Pages in Storybook</h2>
|
||||
<p>
|
||||
We recommend building UIs with a{' '}
|
||||
<a href="https://componentdriven.org" target="_blank" rel="noopener noreferrer">
|
||||
<strong>component-driven</strong>
|
||||
</a>{' '}
|
||||
process starting with atomic components and ending with pages.
|
||||
</p>
|
||||
<p>
|
||||
Render pages with mock data. This makes it easy to build and review page states without
|
||||
needing to navigate to them in your app. Here are some handy patterns for managing page
|
||||
data in Storybook:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
Use a higher-level connected component. Storybook helps you compose such data from the
|
||||
"args" of child component stories
|
||||
</li>
|
||||
<li>
|
||||
Assemble data in the page component from your services. You can mock these services out
|
||||
using Storybook.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
Get a guided tutorial on component-driven development at{' '}
|
||||
<a href="https://storybook.js.org/tutorials/" target="_blank" rel="noopener noreferrer">
|
||||
Storybook tutorials
|
||||
</a>
|
||||
. Read more in the{' '}
|
||||
<a href="https://storybook.js.org/docs" target="_blank" rel="noopener noreferrer">
|
||||
docs
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
<div className="tip-wrapper">
|
||||
<span className="tip">Tip</span> Adjust the width of the canvas with the{' '}
|
||||
<svg width="10" height="10" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="none" fillRule="evenodd">
|
||||
<path
|
||||
d="M1.5 5.2h4.8c.3 0 .5.2.5.4v5.1c-.1.2-.3.3-.4.3H1.4a.5.5 0 01-.5-.4V5.7c0-.3.2-.5.5-.5zm0-2.1h6.9c.3 0 .5.2.5.4v7a.5.5 0 01-1 0V4H1.5a.5.5 0 010-1zm0-2.1h9c.3 0 .5.2.5.4v9.1a.5.5 0 01-1 0V2H1.5a.5.5 0 010-1zm4.3 5.2H2V10h3.8V6.2z"
|
||||
id="a"
|
||||
fill="#999"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
Viewports addon in the toolbar
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
);
|
||||
};
|
||||
28
frontend/node_modules/@storybook/react/template/cli/js/Page.stories.js
generated
vendored
Normal file
28
frontend/node_modules/@storybook/react/template/cli/js/Page.stories.js
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
import { expect, userEvent, within } from 'storybook/test';
|
||||
|
||||
import { Page } from './Page';
|
||||
|
||||
export default {
|
||||
title: 'Example/Page',
|
||||
component: Page,
|
||||
parameters: {
|
||||
// More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
|
||||
layout: 'fullscreen',
|
||||
},
|
||||
};
|
||||
|
||||
export const LoggedOut = {};
|
||||
|
||||
// More on component testing: https://storybook.js.org/docs/writing-tests/interaction-testing
|
||||
export const LoggedIn = {
|
||||
play: async ({ canvasElement }) => {
|
||||
const canvas = within(canvasElement);
|
||||
const loginButton = canvas.getByRole('button', { name: /Log in/i });
|
||||
await expect(loginButton).toBeInTheDocument();
|
||||
await userEvent.click(loginButton);
|
||||
await expect(loginButton).not.toBeInTheDocument();
|
||||
|
||||
const logoutButton = canvas.getByRole('button', { name: /Log out/i });
|
||||
await expect(logoutButton).toBeInTheDocument();
|
||||
},
|
||||
};
|
||||
54
frontend/node_modules/@storybook/react/template/cli/ts/Button.stories.ts
generated
vendored
Normal file
54
frontend/node_modules/@storybook/react/template/cli/ts/Button.stories.ts
generated
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
import type { Meta, StoryObj } from '@storybook/react';
|
||||
|
||||
import { fn } from 'storybook/test';
|
||||
|
||||
import { Button } from './Button';
|
||||
|
||||
// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
|
||||
const meta = {
|
||||
title: 'Example/Button',
|
||||
component: Button,
|
||||
parameters: {
|
||||
// Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
|
||||
layout: 'centered',
|
||||
},
|
||||
// This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs
|
||||
tags: ['autodocs'],
|
||||
// More on argTypes: https://storybook.js.org/docs/api/argtypes
|
||||
argTypes: {
|
||||
backgroundColor: { control: 'color' },
|
||||
},
|
||||
// Use `fn` to spy on the onClick arg, which will appear in the actions panel once invoked: https://storybook.js.org/docs/essentials/actions#action-args
|
||||
args: { onClick: fn() },
|
||||
} satisfies Meta<typeof Button>;
|
||||
|
||||
export default meta;
|
||||
type Story = StoryObj<typeof meta>;
|
||||
|
||||
// More on writing stories with args: https://storybook.js.org/docs/writing-stories/args
|
||||
export const Primary: Story = {
|
||||
args: {
|
||||
primary: true,
|
||||
label: 'Button',
|
||||
},
|
||||
};
|
||||
|
||||
export const Secondary: Story = {
|
||||
args: {
|
||||
label: 'Button',
|
||||
},
|
||||
};
|
||||
|
||||
export const Large: Story = {
|
||||
args: {
|
||||
size: 'large',
|
||||
label: 'Button',
|
||||
},
|
||||
};
|
||||
|
||||
export const Small: Story = {
|
||||
args: {
|
||||
size: 'small',
|
||||
label: 'Button',
|
||||
},
|
||||
};
|
||||
37
frontend/node_modules/@storybook/react/template/cli/ts/Button.tsx
generated
vendored
Normal file
37
frontend/node_modules/@storybook/react/template/cli/ts/Button.tsx
generated
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
import React from 'react';
|
||||
|
||||
import './button.css';
|
||||
|
||||
export interface ButtonProps {
|
||||
/** Is this the principal call to action on the page? */
|
||||
primary?: boolean;
|
||||
/** What background color to use */
|
||||
backgroundColor?: string;
|
||||
/** How large should the button be? */
|
||||
size?: 'small' | 'medium' | 'large';
|
||||
/** Button contents */
|
||||
label: string;
|
||||
/** Optional click handler */
|
||||
onClick?: () => void;
|
||||
}
|
||||
|
||||
/** Primary UI component for user interaction */
|
||||
export const Button = ({
|
||||
primary = false,
|
||||
size = 'medium',
|
||||
backgroundColor,
|
||||
label,
|
||||
...props
|
||||
}: ButtonProps) => {
|
||||
const mode = primary ? 'storybook-button--primary' : 'storybook-button--secondary';
|
||||
return (
|
||||
<button
|
||||
type="button"
|
||||
className={['storybook-button', `storybook-button--${size}`, mode].join(' ')}
|
||||
style={{ backgroundColor }}
|
||||
{...props}
|
||||
>
|
||||
{label}
|
||||
</button>
|
||||
);
|
||||
};
|
||||
34
frontend/node_modules/@storybook/react/template/cli/ts/Header.stories.ts
generated
vendored
Normal file
34
frontend/node_modules/@storybook/react/template/cli/ts/Header.stories.ts
generated
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
import type { Meta, StoryObj } from '@storybook/react';
|
||||
|
||||
import { fn } from 'storybook/test';
|
||||
|
||||
import { Header } from './Header';
|
||||
|
||||
const meta = {
|
||||
title: 'Example/Header',
|
||||
component: Header,
|
||||
// This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs
|
||||
tags: ['autodocs'],
|
||||
parameters: {
|
||||
// More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
|
||||
layout: 'fullscreen',
|
||||
},
|
||||
args: {
|
||||
onLogin: fn(),
|
||||
onLogout: fn(),
|
||||
onCreateAccount: fn(),
|
||||
},
|
||||
} satisfies Meta<typeof Header>;
|
||||
|
||||
export default meta;
|
||||
type Story = StoryObj<typeof meta>;
|
||||
|
||||
export const LoggedIn: Story = {
|
||||
args: {
|
||||
user: {
|
||||
name: 'Jane Doe',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const LoggedOut: Story = {};
|
||||
56
frontend/node_modules/@storybook/react/template/cli/ts/Header.tsx
generated
vendored
Normal file
56
frontend/node_modules/@storybook/react/template/cli/ts/Header.tsx
generated
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
import React from 'react';
|
||||
|
||||
import { Button } from './Button';
|
||||
import './header.css';
|
||||
|
||||
type User = {
|
||||
name: string;
|
||||
};
|
||||
|
||||
export interface HeaderProps {
|
||||
user?: User;
|
||||
onLogin?: () => void;
|
||||
onLogout?: () => void;
|
||||
onCreateAccount?: () => void;
|
||||
}
|
||||
|
||||
export const Header = ({ user, onLogin, onLogout, onCreateAccount }: HeaderProps) => (
|
||||
<header>
|
||||
<div className="storybook-header">
|
||||
<div>
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="none" fillRule="evenodd">
|
||||
<path
|
||||
d="M10 0h12a10 10 0 0110 10v12a10 10 0 01-10 10H10A10 10 0 010 22V10A10 10 0 0110 0z"
|
||||
fill="#FFF"
|
||||
/>
|
||||
<path
|
||||
d="M5.3 10.6l10.4 6v11.1l-10.4-6v-11zm11.4-6.2l9.7 5.5-9.7 5.6V4.4z"
|
||||
fill="#555AB9"
|
||||
/>
|
||||
<path
|
||||
d="M27.2 10.6v11.2l-10.5 6V16.5l10.5-6zM15.7 4.4v11L6 10l9.7-5.5z"
|
||||
fill="#91BAF8"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
<h1>Acme</h1>
|
||||
</div>
|
||||
<div>
|
||||
{user ? (
|
||||
<>
|
||||
<span className="welcome">
|
||||
Welcome, <b>{user.name}</b>!
|
||||
</span>
|
||||
<Button size="small" onClick={onLogout} label="Log out" />
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<Button size="small" onClick={onLogin} label="Log in" />
|
||||
<Button primary size="small" onClick={onCreateAccount} label="Sign up" />
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
33
frontend/node_modules/@storybook/react/template/cli/ts/Page.stories.ts
generated
vendored
Normal file
33
frontend/node_modules/@storybook/react/template/cli/ts/Page.stories.ts
generated
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
import type { Meta, StoryObj } from '@storybook/react';
|
||||
|
||||
import { expect, userEvent, within } from 'storybook/test';
|
||||
|
||||
import { Page } from './Page';
|
||||
|
||||
const meta = {
|
||||
title: 'Example/Page',
|
||||
component: Page,
|
||||
parameters: {
|
||||
// More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
|
||||
layout: 'fullscreen',
|
||||
},
|
||||
} satisfies Meta<typeof Page>;
|
||||
|
||||
export default meta;
|
||||
type Story = StoryObj<typeof meta>;
|
||||
|
||||
export const LoggedOut: Story = {};
|
||||
|
||||
// More on component testing: https://storybook.js.org/docs/writing-tests/interaction-testing
|
||||
export const LoggedIn: Story = {
|
||||
play: async ({ canvasElement }) => {
|
||||
const canvas = within(canvasElement);
|
||||
const loginButton = canvas.getByRole('button', { name: /Log in/i });
|
||||
await expect(loginButton).toBeInTheDocument();
|
||||
await userEvent.click(loginButton);
|
||||
await expect(loginButton).not.toBeInTheDocument();
|
||||
|
||||
const logoutButton = canvas.getByRole('button', { name: /Log out/i });
|
||||
await expect(logoutButton).toBeInTheDocument();
|
||||
},
|
||||
};
|
||||
73
frontend/node_modules/@storybook/react/template/cli/ts/Page.tsx
generated
vendored
Normal file
73
frontend/node_modules/@storybook/react/template/cli/ts/Page.tsx
generated
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
import React from 'react';
|
||||
|
||||
import { Header } from './Header';
|
||||
import './page.css';
|
||||
|
||||
type User = {
|
||||
name: string;
|
||||
};
|
||||
|
||||
export const Page: React.FC = () => {
|
||||
const [user, setUser] = React.useState<User>();
|
||||
|
||||
return (
|
||||
<article>
|
||||
<Header
|
||||
user={user}
|
||||
onLogin={() => setUser({ name: 'Jane Doe' })}
|
||||
onLogout={() => setUser(undefined)}
|
||||
onCreateAccount={() => setUser({ name: 'Jane Doe' })}
|
||||
/>
|
||||
|
||||
<section className="storybook-page">
|
||||
<h2>Pages in Storybook</h2>
|
||||
<p>
|
||||
We recommend building UIs with a{' '}
|
||||
<a href="https://componentdriven.org" target="_blank" rel="noopener noreferrer">
|
||||
<strong>component-driven</strong>
|
||||
</a>{' '}
|
||||
process starting with atomic components and ending with pages.
|
||||
</p>
|
||||
<p>
|
||||
Render pages with mock data. This makes it easy to build and review page states without
|
||||
needing to navigate to them in your app. Here are some handy patterns for managing page
|
||||
data in Storybook:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
Use a higher-level connected component. Storybook helps you compose such data from the
|
||||
"args" of child component stories
|
||||
</li>
|
||||
<li>
|
||||
Assemble data in the page component from your services. You can mock these services out
|
||||
using Storybook.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
Get a guided tutorial on component-driven development at{' '}
|
||||
<a href="https://storybook.js.org/tutorials/" target="_blank" rel="noopener noreferrer">
|
||||
Storybook tutorials
|
||||
</a>
|
||||
. Read more in the{' '}
|
||||
<a href="https://storybook.js.org/docs" target="_blank" rel="noopener noreferrer">
|
||||
docs
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
<div className="tip-wrapper">
|
||||
<span className="tip">Tip</span> Adjust the width of the canvas with the{' '}
|
||||
<svg width="10" height="10" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="none" fillRule="evenodd">
|
||||
<path
|
||||
d="M1.5 5.2h4.8c.3 0 .5.2.5.4v5.1c-.1.2-.3.3-.4.3H1.4a.5.5 0 01-.5-.4V5.7c0-.3.2-.5.5-.5zm0-2.1h6.9c.3 0 .5.2.5.4v7a.5.5 0 01-1 0V4H1.5a.5.5 0 010-1zm0-2.1h9c.3 0 .5.2.5.4v9.1a.5.5 0 01-1 0V2H1.5a.5.5 0 010-1zm4.3 5.2H2V10h3.8V6.2z"
|
||||
id="a"
|
||||
fill="#999"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
Viewports addon in the toolbar
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
);
|
||||
};
|
||||
9
frontend/node_modules/@storybook/react/template/components/index.js
generated
vendored
Normal file
9
frontend/node_modules/@storybook/react/template/components/index.js
generated
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
import { global as globalThis } from '@storybook/global';
|
||||
|
||||
import { Button } from './Button.jsx';
|
||||
import { Form } from './Form.jsx';
|
||||
import { Html } from './Html.jsx';
|
||||
import { Pre } from './Pre.jsx';
|
||||
|
||||
globalThis.__TEMPLATE_COMPONENTS__ = { Button, Pre, Form, Html };
|
||||
globalThis.storybookRenderer = 'react';
|
||||
1
frontend/node_modules/@storybook/react/template/stories/docgen-components/imported.js
generated
vendored
Normal file
1
frontend/node_modules/@storybook/react/template/stories/docgen-components/imported.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
export const imported = 'imported-value';
|
||||
13
frontend/node_modules/@storybook/react/template/stories/docgen-components/js-proptypes/ext.js
generated
vendored
Normal file
13
frontend/node_modules/@storybook/react/template/stories/docgen-components/js-proptypes/ext.js
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
// @ts-expect-error (Converted from ts-ignore)
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
export const PRESET_SHAPE = {
|
||||
text: PropTypes.string.isRequired,
|
||||
startDate: PropTypes.object.isRequired,
|
||||
endDate: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
export const SOME_PROP_TYPES = {
|
||||
ext1: PropTypes.string,
|
||||
ext2: PropTypes.number,
|
||||
};
|
||||
Reference in New Issue
Block a user