Added storybook__preact (#34341)

* Added storybook__preact

* Use @jsx h
This commit is contained in:
Keisuke Kan
2019-03-29 19:44:10 -07:00
committed by Ron Buckton
parent 0617f9dd7d
commit 41e6217fcd
5 changed files with 133 additions and 0 deletions
+46
View File
@@ -0,0 +1,46 @@
// Type definitions for @storybook/preact 5.0
// Project: https://github.com/storybooks/storybook, https://github.com/storybooks/storybook/tree/master/app/preact
// Definitions by: Keisuke Kan <https://github.com/9renpoto>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 3.3
// Created with the help of storybook__react types
/// <reference types="webpack-env" />
import * as Preact from 'preact';
export type Renderable = Preact.AnyComponent | JSX.Element;
export type RenderFunction = () => Renderable | Renderable[];
export interface DecoratorParameters {
[key: string]: any;
}
export type StoryDecorator = (story: RenderFunction, context: { kind: string, story: string }) => Renderable | null;
export interface Story {
readonly kind: string;
add(storyName: string, callback: RenderFunction, parameters?: DecoratorParameters): this;
addDecorator(decorator: StoryDecorator): this;
addParameters(parameters: DecoratorParameters): this;
}
export function addDecorator(decorator: StoryDecorator): void;
export function addParameters(parameters: DecoratorParameters): void;
export function clearDecorators(): void;
export function configure(fn: () => void, module: NodeModule): void;
export function setAddon(addon: object): void;
export function storiesOf(name: string, module: NodeModule): Story;
export function storiesOf<T>(name: string, module: NodeModule): Story & T;
export function forceReRender(): void;
export interface StoryObject {
name: string;
render: RenderFunction;
}
export interface StoryBucket {
kind: string;
stories: StoryObject[];
}
export function getStorybook(): StoryBucket[];
+6
View File
@@ -0,0 +1,6 @@
{
"private": true,
"dependencies": {
"preact": "^8.4.2"
}
}
@@ -0,0 +1,45 @@
/** @jsx h */
import { h } from 'preact';
import { storiesOf, setAddon, addDecorator, addParameters, configure, getStorybook, RenderFunction, Story, forceReRender, DecoratorParameters, clearDecorators } from '@storybook/preact';
const Decorator = (story: RenderFunction) => <div>{story()}</div>;
const parameters: DecoratorParameters = { parameter: 'foo' };
forceReRender();
storiesOf('Welcome', module)
// local addDecorator
.addDecorator(Decorator)
.add('to Storybook', () => <div/>)
.add('to Storybook as Array', () => [<div />, <div />])
.add('and a story with additional parameters', () => <div/>, parameters);
// global addDecorator
addDecorator(Decorator);
addParameters(parameters);
clearDecorators();
// setAddon
interface AnyAddon {
addWithSideEffect<T>(this: Story & T, storyName: string, storyFn: RenderFunction): Story & T;
}
const AnyAddon: AnyAddon = {
addWithSideEffect<T>(this: Story & T, storyName: string, storyFn: RenderFunction): Story & T {
console.log(this.kind === 'withAnyAddon');
return this.add(storyName, storyFn);
}
};
setAddon(AnyAddon);
storiesOf<AnyAddon>('withAnyAddon', module)
.addWithSideEffect('custom story', () => <div/>)
.addWithSideEffect('more', () => <div/>)
.add('another story', () => <div/>)
.add('to Storybook as Array', () => [<div />, <div />])
.add('and a story with additional parameters', () => <div/>, parameters)
.addWithSideEffect('even more', () => <div/>);
// configure
configure(() => undefined, module);
// getStorybook
getStorybook().forEach(({ kind, stories }) => stories.forEach(({ name, render }) => render()));
+30
View File
@@ -0,0 +1,30 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"dom",
"es6"
],
"noImplicitAny": true,
"noImplicitThis": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"baseUrl": "../",
"jsx": "preserve",
"typeRoots": [
"../"
],
"paths": {
"@storybook/preact": [
"storybook__preact"
]
},
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
},
"files": [
"index.d.ts",
"storybook__preact-tests.tsx"
]
}
+6
View File
@@ -0,0 +1,6 @@
{
"extends": "dtslint/dt.json",
"rules": {
"no-unnecessary-generics": false
}
}