diff --git a/.storybook/main.js b/.storybook/main.js
new file mode 100644
index 0000000..1240c76
--- /dev/null
+++ b/.storybook/main.js
@@ -0,0 +1,16 @@
+module.exports = {
+ "stories": [
+ "../src/**/*.stories.mdx",
+ "../src/**/*.stories.@(js|jsx|ts|tsx)"
+ ],
+ "addons": [
+ "@storybook/addon-links",
+ "@storybook/addon-essentials",
+ "@storybook/addon-interactions",
+ "@storybook/preset-create-react-app"
+ ],
+ "framework": "@storybook/react",
+ "core": {
+ "builder": "@storybook/builder-webpack5"
+ }
+}
\ No newline at end of file
diff --git a/.storybook/preview.js b/.storybook/preview.js
new file mode 100644
index 0000000..48afd56
--- /dev/null
+++ b/.storybook/preview.js
@@ -0,0 +1,9 @@
+export const parameters = {
+ actions: { argTypesRegex: "^on[A-Z].*" },
+ controls: {
+ matchers: {
+ color: /(background|color)$/i,
+ date: /Date$/,
+ },
+ },
+}
\ No newline at end of file
diff --git a/src/.storybook/main.js b/src/.storybook/main.js
new file mode 100644
index 0000000..d9d81a8
--- /dev/null
+++ b/src/.storybook/main.js
@@ -0,0 +1,23 @@
+module.exports = {
+ stories: ['../**/*.stories.mdx', '../**/*.stories.@(js|jsx|ts|tsx)'],
+ /** Expose public folder to storybook as static */
+ staticDirs: ['../public'],
+ addons: [
+ '@storybook/addon-links',
+ '@storybook/addon-essentials',
+ '@storybook/addon-interactions',
+ 'storybook-css-modules-preset',
+ {
+ name: '@storybook/addon-postcss',
+ options: {
+ postcssLoaderOptions: {
+ implementation: require('postcss'),
+ },
+ },
+ },
+ ],
+ framework: '@storybook/react',
+ core: {
+ builder: '@storybook/builder-webpack5',
+ },
+ };
\ No newline at end of file
diff --git a/src/.storybook/preview.js b/src/.storybook/preview.js
new file mode 100644
index 0000000..1aada3d
--- /dev/null
+++ b/src/.storybook/preview.js
@@ -0,0 +1,3 @@
+export const parameters = {
+ actions: { argTypesRegex: "^on[A-Z].*" },
+ }
\ No newline at end of file
diff --git a/src/App.tsx b/src/App.tsx
index 4e529cc..69002fa 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -10,9 +10,7 @@ import React from "react";
* @return {JSX.Element}
*/
function App() {
- return (
-
Hello world!
- );
+ return Hello world!
;
}
-export default App;
\ No newline at end of file
+export default App;
diff --git a/src/components/Avatar.tsx b/src/components/Avatar.tsx
new file mode 100644
index 0000000..32ce50b
--- /dev/null
+++ b/src/components/Avatar.tsx
@@ -0,0 +1,49 @@
+import React from "react";
+import classNames from "classnames";
+
+export type Props = {
+ /**
+ * The style avatar
+ */
+ className?: string;
+ /**
+ * The path of image
+ */
+ src?: string;
+ /**
+ * The alternative text in case the image is not valid
+ */
+ alt?: string;
+ /**
+ * The text inside avatar as a child
+ */
+ children?: React.ReactNode;
+};
+
+const Avatar = ({ className, src, alt, children }: Props) => {
+ return (
+
+ {/* In case the src is valid, it will show the image */}
+ {src && (
+
+ )}
+ {/* The text will be shown in case it is valid */}
+ {children && (
+
+ {children}
+
+ )}
+
+ );
+};
+
+export default Avatar;
diff --git a/src/components/Checkbox.stories.tsx b/src/components/Checkbox.stories.tsx
index 0b90e2c..b5ba94b 100644
--- a/src/components/Checkbox.stories.tsx
+++ b/src/components/Checkbox.stories.tsx
@@ -1,58 +1,43 @@
-import React from 'react';
+import React, { useState } from "react";
+import { Meta, Story, ComponentStory, ComponentMeta } from "@storybook/react";
-import { ComponentMeta, ComponentStory } from '@storybook/react';
-
-import Checkbox from './Checkbox';
+import Checkbox from "./Checkbox";
export default {
- // Title inside navigation bar
- title: 'Checkbox',
- // Component to test
+ title: "Checkbox",
component: Checkbox,
- // Clarifying the way how to process specific
- // properties of your component and which values
- // it can accept.
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
argTypes: {
- checked: {
- options: [true, false],
- control: { type: 'radio' },
+ isChecked: {
+ type: "boolean",
+ },
+ children: {
+ type: "string",
+ defaultValue: "Use light theme",
+ },
+ disabled: {
+ type: "boolean",
+ defaultValue: "false",
},
},
} as ComponentMeta;
-/**
- * This is a way to define a tempalte for your component.
- *
- * This template should cover all the states.
- *
- * In most cases you should just distruct args attribute
- * on a returning component.
- */
const Template: ComponentStory = (args) => (
);
-/* -------------------------------------------------------------------------- */
-/* States of your component */
-/* -------------------------------------------------------------------------- */
+export const Checked = Template.bind({});
+Checked.args = {
+ isChecked: true,
+ children: "This is custom checkbox",
+};
export const Unchecked = Template.bind({});
Unchecked.args = {
- label: "On/off lights",
- checked: false,
- children: undefined,
-}
-export const Checked = Template.bind({});
-Checked.args = {
- children: "On/off lights",
- checked: true,
- label: undefined,
-}
+ isChecked: false,
+};
-export const EitherLabelChildren = Template.bind({});
-EitherLabelChildren.args = {
- children: "On/off lights",
- checked: true,
- label: "Label!",
-}
-// GO Further
\ No newline at end of file
+export const Disabled = Template.bind({});
+Disabled.args = {
+ disabled: true,
+};
diff --git a/src/components/Checkbox.tsx b/src/components/Checkbox.tsx
index ae987d3..dbf3fd7 100644
--- a/src/components/Checkbox.tsx
+++ b/src/components/Checkbox.tsx
@@ -1,38 +1,47 @@
-import classNames from "classnames";
import React from "react";
+import classNames from "classnames";
+import { ReactComponent as Checkmark } from "assets/svg/check.svg";
-type Props = {
+export type Props = {
/**
- * The way to provide `children` inside a component
- * via attribute instead of enclosed tag
+ * Control the state of checkbox
*/
- label?: React.ReactNode;
+ isChecked: boolean;
/**
- * When you will have both `children` and `label`
- * defined on a component it will choose `children`
- * to display
+ * An Element next to the checkbox
*/
children?: React.ReactNode;
-} & Omit, "type">;
-
-/**
- * Customized `input[type="checkbox"]` component with label
- *
- * All common input properties are inherited.
- *
- * To define a label content either provide `label` attribute
- * or use common `children` property
- */
-const Checkbox = ({label, children, className, ...props}: Props) => {
-
- if(label && !children) {
- children = label;
- }
+} & Omit, "type">;
+const Checkbox = ({ children, className, isChecked, ...props }: Props) => {
return (
-
-
- {children !== undefined && {children} }
+
+
+ {children}
);
};
diff --git a/src/components/Tooltip.tsx b/src/components/Tooltip.tsx
new file mode 100644
index 0000000..d611691
--- /dev/null
+++ b/src/components/Tooltip.tsx
@@ -0,0 +1,40 @@
+import { ReactNode } from "react";
+
+export interface TooltipProps {
+ /**
+ * Tooltip text - can be string or another component
+ */
+ tooltipMessage: ReactNode;
+ /**
+ * The targeted component
+ */
+ children: ReactNode;
+}
+
+const Tooltip = ({ tooltipMessage, children }: TooltipProps) => {
+ return (
+
+ {/* Tooltip will be shown under the component(children) when the children is onHover */}
+ {children}
+ {/* Creating the tooltip and give it a postion */}
+
+ {tooltipMessage}
+
+
+ );
+};
+
+export default Tooltip;
diff --git a/src/components/icons.tsx b/src/components/icons.tsx
index 0a835e1..0e22b92 100644
--- a/src/components/icons.tsx
+++ b/src/components/icons.tsx
@@ -1,33 +1,33 @@
-export {ReactComponent as SVGArrowBigRight} from "@assets/svg/arrow-big-right.svg";
-export {ReactComponent as SVGArrowDown} from "@assets/svg/arrow-down.svg";
-export {ReactComponent as SVGArrowLeft} from "@assets/svg/arrow-left.svg";
-export {ReactComponent as SVGArrowRight} from "@assets/svg/arrow-right.svg";
-export {ReactComponent as SVGBookmark} from "@assets/svg/bookmark.svg";
-export {ReactComponent as SVGCaretDown} from "@assets/svg/caret-down.svg"
-export {ReactComponent as SVGCaretLeft} from "@assets/svg/caret-left.svg"
-export {ReactComponent as SVGCaretRight} from "@assets/svg/caret-right.svg"
-export {ReactComponent as SVGCaretUp} from "@assets/svg/caret-up.svg";
-export {ReactComponent as SVGChevronesLeft} from "@assets/svg/chevrones-left.svg";
-export {ReactComponent as SVGChevronesRight} from "@assets/svg/chevrones-right.svg";
-export {ReactComponent as SVGCite} from "@assets/svg/cite.svg";
-export {ReactComponent as SVGCopy} from "@assets/svg/copy.svg";
-export {ReactComponent as SVGDelete} from "@assets/svg/delete.svg";
-export {ReactComponent as SVGDownload} from "@assets/svg/download.svg";
-export {ReactComponent as SVGEdit1} from "@assets/svg/edit1.svg";
-export {ReactComponent as SVGEdit2} from "@assets/svg/edit2.svg";
-export {ReactComponent as SVGError} from "@assets/svg/error.svg";
-export {ReactComponent as SVGEye} from "@assets/svg/eye.svg";
-export {ReactComponent as SVGFavorite} from "@assets/svg/favorite.svg";
-export {ReactComponent as SVGFiletext} from "@assets/svg/filetext.svg";
-export {ReactComponent as SVGFolder} from "@assets/svg/folder.svg";
-export {ReactComponent as SVGKey} from "@assets/svg/key.svg";
-export {ReactComponent as SVGList} from "@assets/svg/list.svg";
-export {ReactComponent as SVGMinus} from "@assets/svg/minus.svg";
-export {ReactComponent as SVGMore} from "@assets/svg/more.svg";
-export {ReactComponent as SVGPlus} from "@assets/svg/plus.svg";
-export {ReactComponent as SVGPrinter} from "@assets/svg/printer.svg";
-export {ReactComponent as SVGSearch} from "@assets/svg/search.svg";
-export {ReactComponent as SVGShare} from "@assets/svg/share.svg";
-export {ReactComponent as SVGUser} from "@assets/svg/user.svg";
-export {ReactComponent as SVGXMark} from "@assets/svg/xmark.svg";
-
+export { ReactComponent as SVGArrowBigRight } from "assets/svg/arrow-big-right.svg";
+export { ReactComponent as SVGArrowDown } from "assets/svg/arrow-down.svg";
+export { ReactComponent as SVGArrowLeft } from "assets/svg/arrow-left.svg";
+export { ReactComponent as SVGArrowRight } from "assets/svg/arrow-right.svg";
+export { ReactComponent as SVGBookmark } from "assets/svg/bookmark.svg";
+export { ReactComponent as SVGCaretDown } from "assets/svg/caret-down.svg";
+export { ReactComponent as SVGCaretLeft } from "assets/svg/caret-left.svg";
+export { ReactComponent as SVGCaretRight } from "assets/svg/caret-right.svg";
+export { ReactComponent as SVGCaretUp } from "assets/svg/caret-up.svg";
+export { ReactComponent as SVGChevronesLeft } from "assets/svg/chevrones-left.svg";
+export { ReactComponent as SVGChevronesRight } from "assets/svg/chevrones-right.svg";
+export { ReactComponent as SVGCite } from "assets/svg/cite.svg";
+export { ReactComponent as SVGCopy } from "assets/svg/copy.svg";
+export { ReactComponent as SVGDelete } from "assets/svg/delete.svg";
+export { ReactComponent as SVGDownload } from "assets/svg/download.svg";
+export { ReactComponent as SVGEdit1 } from "assets/svg/edit1.svg";
+export { ReactComponent as SVGEdit2 } from "assets/svg/edit2.svg";
+export { ReactComponent as SVGError } from "assets/svg/error.svg";
+export { ReactComponent as SVGEye } from "assets/svg/eye.svg";
+export { ReactComponent as SVGFavorite } from "assets/svg/favorite.svg";
+export { ReactComponent as SVGFiletext } from "assets/svg/filetext.svg";
+export { ReactComponent as SVGFolder } from "assets/svg/folder.svg";
+export { ReactComponent as SVGKey } from "assets/svg/key.svg";
+export { ReactComponent as SVGList } from "assets/svg/list.svg";
+export { ReactComponent as SVGMinus } from "assets/svg/minus.svg";
+export { ReactComponent as SVGMore } from "assets/svg/more.svg";
+export { ReactComponent as SVGPlus } from "assets/svg/plus.svg";
+export { ReactComponent as SVGPrinter } from "assets/svg/printer.svg";
+export { ReactComponent as SVGSearch } from "assets/svg/search.svg";
+export { ReactComponent as SVGShare } from "assets/svg/share.svg";
+export { ReactComponent as SVGUser } from "assets/svg/user.svg";
+export { ReactComponent as SVGXMark } from "assets/svg/xmark.svg";
+export { ReactComponent as SVGCheckmark } from "assets/svg/checkmark.svg";
diff --git a/src/components/typography/Typography.stories.tsx b/src/components/typography/Typography.stories.tsx
new file mode 100644
index 0000000..259e9d6
--- /dev/null
+++ b/src/components/typography/Typography.stories.tsx
@@ -0,0 +1,17 @@
+
+import { ComponentMeta, ComponentStory } from '@storybook/react';
+import Typography from './Typography';
+
+export default {
+ title: 'Typography',
+ component: Typography,
+ } as ComponentMeta;
+
+ const Template: ComponentStory = (args) => (
+
+ );
+
+export const TypographyExample = Template.bind({});
+TypographyExample.args = {
+ children: ''
+};
diff --git a/src/components/typography/Typography.tsx b/src/components/typography/Typography.tsx
new file mode 100644
index 0000000..9aa3fed
--- /dev/null
+++ b/src/components/typography/Typography.tsx
@@ -0,0 +1,47 @@
+import React from 'react';
+import classNames from 'classnames';
+import {
+ FontWeightVariants,
+ TypographyHtmlTagVariants,
+ TypographyFontWeightVariantsMap
+} from 'core/_variants'
+
+
+interface Props extends React.ComponentPropsWithoutRef<"div"> {
+ htmlTag?: TypographyHtmlTagVariants | undefined;
+ fontWeightVariant?: FontWeightVariants;
+};
+
+const typographyFontWeightVariants: TypographyFontWeightVariantsMap = {
+ thin: 'font-thin',
+ extralight: 'font-extralight',
+ light: 'font-light',
+ normal: 'font-normal',
+ medium: 'font-medium',
+ semibold: 'font-semibold',
+ bold: 'font-bold',
+ extrabold: 'font-extrabold',
+ black: 'font-black'
+
+}
+
+const Typography = ({
+ children,
+ htmlTag,
+ fontWeightVariant='normal',
+ className
+ }: Props) => {
+ const As = htmlTag || 'div' ;
+ return (
+
+ {children}
+
+ );
+}
+
+export default Typography
diff --git a/src/core/_variants.ts b/src/core/_variants.ts
index 6f94d40..8043324 100644
--- a/src/core/_variants.ts
+++ b/src/core/_variants.ts
@@ -10,4 +10,12 @@ export type StyleColorVariantsMap = {
export type StyleGlobalVarinatsMap = {
[Property in StyleGlobalVariants]: T;
+}
+
+export type FontWeightVariants = 'thin' | 'extralight' | 'light' | 'normal' | 'medium' | 'semibold' | 'bold' | 'extrabold' | 'black'
+
+export type TypographyHtmlTagVariants = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p";
+
+export type TypographyFontWeightVariantsMap = {
+ [Property in FontWeightVariants]: T;
}
\ No newline at end of file
diff --git a/src/index.css b/src/index.css
index c19fdf4..34ea437 100644
--- a/src/index.css
+++ b/src/index.css
@@ -17,7 +17,8 @@
@font-face {
font-family: "Poppins";
src: url("assets/fonts/Poppins-Medium.eot");
- src: url("assets/fonts/Poppins-Medium.eot?#iefix") format("embedded-opentype"),
+ src: url("assets/fonts/Poppins-Medium.eot?#iefix")
+ format("embedded-opentype"),
url("assets/fonts/Poppins-Medium.woff2") format("woff2"),
url("assets/fonts/Poppins-Medium.ttf") format("truetype");
font-weight: 500;
@@ -28,7 +29,8 @@
@font-face {
font-family: "Poppins";
src: url("assets/fonts/Poppins-Regular.eot");
- src: url("assets/fonts/Poppins-Regular.eot?#iefix") format("embedded-opentype"),
+ src: url("assets/fonts/Poppins-Regular.eot?#iefix")
+ format("embedded-opentype"),
url("assets/fonts/Poppins-Regular.woff2") format("woff2"),
url("assets/fonts/Poppins-Regular.ttf") format("truetype");
font-weight: normal;
@@ -90,7 +92,6 @@
--color-gray-50: 250 250 250;
--color-gray-75: 240 240 240;
--color-gray-100: 235 235 235;
- ;
--color-gray-200: 214 214 214;
--color-gray-300: 191 191 191;
--color-gray-400: 166 166 166;
@@ -120,7 +121,7 @@
.separate::after,
.separate::before {
- content: '';
+ content: "";
@apply border-b border-gray-300 flex-1;
}
@@ -131,4 +132,4 @@
.separate:not(:empty)::before {
@apply mr-2;
}
-}
\ No newline at end of file
+}
diff --git a/src/stories/Button.tsx b/src/stories/Button.tsx
new file mode 100644
index 0000000..c33be6e
--- /dev/null
+++ b/src/stories/Button.tsx
@@ -0,0 +1,48 @@
+import React from 'react';
+import './button.css';
+
+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 (
+
+ {label}
+
+ );
+};
diff --git a/src/stories/Header.stories.tsx b/src/stories/Header.stories.tsx
new file mode 100644
index 0000000..7e9283e
--- /dev/null
+++ b/src/stories/Header.stories.tsx
@@ -0,0 +1,25 @@
+import React from 'react';
+import { ComponentStory, ComponentMeta } from '@storybook/react';
+
+import { Header } from './Header';
+
+export default {
+ title: 'Example/Header',
+ component: Header,
+ parameters: {
+ // More on Story layout: https://storybook.js.org/docs/react/configure/story-layout
+ layout: 'fullscreen',
+ },
+} as ComponentMeta;
+
+const Template: ComponentStory = (args) => ;
+
+export const LoggedIn = Template.bind({});
+LoggedIn.args = {
+ user: {
+ name: 'Jane Doe',
+ },
+};
+
+export const LoggedOut = Template.bind({});
+LoggedOut.args = {};
diff --git a/src/stories/Header.tsx b/src/stories/Header.tsx
new file mode 100644
index 0000000..dc3f3c1
--- /dev/null
+++ b/src/stories/Header.tsx
@@ -0,0 +1,56 @@
+import React from 'react';
+
+import { Button } from './Button';
+import './header.css';
+
+type User = {
+ name: string;
+};
+
+interface HeaderProps {
+ user?: User;
+ onLogin: () => void;
+ onLogout: () => void;
+ onCreateAccount: () => void;
+}
+
+export const Header = ({ user, onLogin, onLogout, onCreateAccount }: HeaderProps) => (
+
+);
diff --git a/src/stories/Introduction.stories.mdx b/src/stories/Introduction.stories.mdx
new file mode 100644
index 0000000..edc33ed
--- /dev/null
+++ b/src/stories/Introduction.stories.mdx
@@ -0,0 +1,211 @@
+import { Meta } from '@storybook/addon-docs';
+import Code from './assets/code-brackets.svg';
+import Colors from './assets/colors.svg';
+import Comments from './assets/comments.svg';
+import Direction from './assets/direction.svg';
+import Flow from './assets/flow.svg';
+import Plugin from './assets/plugin.svg';
+import Repo from './assets/repo.svg';
+import StackAlt from './assets/stackalt.svg';
+
+
+
+
+
+# Welcome to Storybook
+
+Storybook helps you build UI components in isolation from your app's business logic, data, and context.
+That makes it easy to develop hard-to-reach states. Save these UI states as **stories** to revisit during development, testing, or QA.
+
+Browse example stories now by navigating to them in the sidebar.
+View their code in the `stories` directory to learn how they work.
+We recommend building UIs with a [**component-driven**](https://componentdriven.org) process starting with atomic components and ending with pages.
+
+Configure
+
+
+
+Learn
+
+
+
+
+ Tip Edit the Markdown in{' '}
+ stories/Introduction.stories.mdx
+
diff --git a/src/stories/Page.stories.tsx b/src/stories/Page.stories.tsx
new file mode 100644
index 0000000..a0ea79f
--- /dev/null
+++ b/src/stories/Page.stories.tsx
@@ -0,0 +1,26 @@
+import React from 'react';
+import { ComponentStory, ComponentMeta } from '@storybook/react';
+import { within, userEvent } from '@storybook/testing-library';
+import { Page } from './Page';
+
+export default {
+ title: 'Example/Page',
+ component: Page,
+ parameters: {
+ // More on Story layout: https://storybook.js.org/docs/react/configure/story-layout
+ layout: 'fullscreen',
+ },
+} as ComponentMeta;
+
+const Template: ComponentStory = (args) => ;
+
+export const LoggedOut = Template.bind({});
+
+export const LoggedIn = Template.bind({});
+
+// More on interaction testing: https://storybook.js.org/docs/react/writing-tests/interaction-testing
+LoggedIn.play = async ({ canvasElement }) => {
+ const canvas = within(canvasElement);
+ const loginButton = await canvas.getByRole('button', { name: /Log in/i });
+ await userEvent.click(loginButton);
+};
diff --git a/src/stories/Page.tsx b/src/stories/Page.tsx
new file mode 100644
index 0000000..522d342
--- /dev/null
+++ b/src/stories/Page.tsx
@@ -0,0 +1,73 @@
+import React from 'react';
+
+import { Header } from './Header';
+import './page.css';
+
+type User = {
+ name: string;
+};
+
+export const Page: React.VFC = () => {
+ const [user, setUser] = React.useState();
+
+ return (
+
+ setUser({ name: 'Jane Doe' })}
+ onLogout={() => setUser(undefined)}
+ onCreateAccount={() => setUser({ name: 'Jane Doe' })}
+ />
+
+
+ Pages in Storybook
+
+ We recommend building UIs with a{' '}
+
+ component-driven
+ {' '}
+ process starting with atomic components and ending with pages.
+
+
+ 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:
+
+
+
+ Use a higher-level connected component. Storybook helps you compose such data from the
+ "args" of child component stories
+
+
+ Assemble data in the page component from your services. You can mock these services out
+ using Storybook.
+
+
+
+ Get a guided tutorial on component-driven development at{' '}
+
+ Storybook tutorials
+
+ . Read more in the{' '}
+
+ docs
+
+ .
+
+
+
Tip Adjust the width of the canvas with the{' '}
+
+
+
+
+
+ Viewports addon in the toolbar
+
+
+
+ );
+};
diff --git a/src/stories/assets/code-brackets.svg b/src/stories/assets/code-brackets.svg
new file mode 100644
index 0000000..73de947
--- /dev/null
+++ b/src/stories/assets/code-brackets.svg
@@ -0,0 +1 @@
+illustration/code-brackets
\ No newline at end of file
diff --git a/src/stories/assets/colors.svg b/src/stories/assets/colors.svg
new file mode 100644
index 0000000..17d58d5
--- /dev/null
+++ b/src/stories/assets/colors.svg
@@ -0,0 +1 @@
+illustration/colors
\ No newline at end of file
diff --git a/src/stories/assets/comments.svg b/src/stories/assets/comments.svg
new file mode 100644
index 0000000..6493a13
--- /dev/null
+++ b/src/stories/assets/comments.svg
@@ -0,0 +1 @@
+illustration/comments
\ No newline at end of file
diff --git a/src/stories/assets/direction.svg b/src/stories/assets/direction.svg
new file mode 100644
index 0000000..65676ac
--- /dev/null
+++ b/src/stories/assets/direction.svg
@@ -0,0 +1 @@
+illustration/direction
\ No newline at end of file
diff --git a/src/stories/assets/flow.svg b/src/stories/assets/flow.svg
new file mode 100644
index 0000000..8ac27db
--- /dev/null
+++ b/src/stories/assets/flow.svg
@@ -0,0 +1 @@
+illustration/flow
\ No newline at end of file
diff --git a/src/stories/assets/plugin.svg b/src/stories/assets/plugin.svg
new file mode 100644
index 0000000..29e5c69
--- /dev/null
+++ b/src/stories/assets/plugin.svg
@@ -0,0 +1 @@
+illustration/plugin
\ No newline at end of file
diff --git a/src/stories/assets/repo.svg b/src/stories/assets/repo.svg
new file mode 100644
index 0000000..f386ee9
--- /dev/null
+++ b/src/stories/assets/repo.svg
@@ -0,0 +1 @@
+illustration/repo
\ No newline at end of file
diff --git a/src/stories/assets/stackalt.svg b/src/stories/assets/stackalt.svg
new file mode 100644
index 0000000..9b7ad27
--- /dev/null
+++ b/src/stories/assets/stackalt.svg
@@ -0,0 +1 @@
+illustration/stackalt
\ No newline at end of file
diff --git a/src/stories/button.css b/src/stories/button.css
new file mode 100644
index 0000000..dc91dc7
--- /dev/null
+++ b/src/stories/button.css
@@ -0,0 +1,30 @@
+.storybook-button {
+ font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
+ font-weight: 700;
+ border: 0;
+ border-radius: 3em;
+ cursor: pointer;
+ display: inline-block;
+ line-height: 1;
+}
+.storybook-button--primary {
+ color: white;
+ background-color: #1ea7fd;
+}
+.storybook-button--secondary {
+ color: #333;
+ background-color: transparent;
+ box-shadow: rgba(0, 0, 0, 0.15) 0px 0px 0px 1px inset;
+}
+.storybook-button--small {
+ font-size: 12px;
+ padding: 10px 16px;
+}
+.storybook-button--medium {
+ font-size: 14px;
+ padding: 11px 20px;
+}
+.storybook-button--large {
+ font-size: 16px;
+ padding: 12px 24px;
+}
diff --git a/src/stories/header.css b/src/stories/header.css
new file mode 100644
index 0000000..830610e
--- /dev/null
+++ b/src/stories/header.css
@@ -0,0 +1,32 @@
+.wrapper {
+ font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+ padding: 15px 20px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+
+svg {
+ display: inline-block;
+ vertical-align: top;
+}
+
+h1 {
+ font-weight: 900;
+ font-size: 20px;
+ line-height: 1;
+ margin: 6px 0 6px 10px;
+ display: inline-block;
+ vertical-align: top;
+}
+
+button + button {
+ margin-left: 10px;
+}
+
+.welcome {
+ color: #333;
+ font-size: 14px;
+ margin-right: 10px;
+}
diff --git a/src/stories/page.css b/src/stories/page.css
new file mode 100644
index 0000000..fbc32ae
--- /dev/null
+++ b/src/stories/page.css
@@ -0,0 +1,69 @@
+section {
+ font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 24px;
+ padding: 48px 20px;
+ margin: 0 auto;
+ max-width: 600px;
+ color: #333;
+}
+
+section h2 {
+ font-weight: 900;
+ font-size: 32px;
+ line-height: 1;
+ margin: 0 0 4px;
+ display: inline-block;
+ vertical-align: top;
+}
+
+section p {
+ margin: 1em 0;
+}
+
+section a {
+ text-decoration: none;
+ color: #1ea7fd;
+}
+
+section ul {
+ padding-left: 30px;
+ margin: 1em 0;
+}
+
+section li {
+ margin-bottom: 8px;
+}
+
+section .tip {
+ display: inline-block;
+ border-radius: 1em;
+ font-size: 11px;
+ line-height: 12px;
+ font-weight: 700;
+ background: #e7fdd8;
+ color: #66bf3c;
+ padding: 4px 12px;
+ margin-right: 10px;
+ vertical-align: top;
+}
+
+section .tip-wrapper {
+ font-size: 13px;
+ line-height: 20px;
+ margin-top: 40px;
+ margin-bottom: 40px;
+}
+
+section .tip-wrapper svg {
+ display: inline-block;
+ height: 12px;
+ width: 12px;
+ margin-right: 4px;
+ vertical-align: top;
+ margin-top: 3px;
+}
+
+section .tip-wrapper svg path {
+ fill: #1ea7fd;
+}
diff --git a/storybook-static/112.19495400.iframe.bundle.js b/storybook-static/112.19495400.iframe.bundle.js
new file mode 100644
index 0000000..0317297
--- /dev/null
+++ b/storybook-static/112.19495400.iframe.bundle.js
@@ -0,0 +1,2 @@
+/*! For license information please see 112.19495400.iframe.bundle.js.LICENSE.txt */
+(self.webpackChunktest=self.webpackChunktest||[]).push([[112],{"./node_modules/@babel/runtime/regenerator/index.js":function(module,__unused_webpack_exports,__webpack_require__){module.exports=__webpack_require__("./node_modules/regenerator-runtime/runtime.js")},"./node_modules/@base2/pretty-print-object/dist/index.js":function(__unused_webpack_module,exports){"use strict";var __assign=this&&this.__assign||function(){return __assign=Object.assign||function(t){for(var s,i=1,n=arguments.length;i=0||(target[key]=source[key]);return target}(source,excluded);if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(source,key)&&(target[key]=source[key])}return target}var MDXContext=react__WEBPACK_IMPORTED_MODULE_0__.createContext({}),useMDXComponents=function useMDXComponents(components){var contextComponents=react__WEBPACK_IMPORTED_MODULE_0__.useContext(MDXContext),allComponents=contextComponents;return components&&(allComponents=function isFunction(obj){return"function"==typeof obj}(components)?components(contextComponents):_objectSpread2(_objectSpread2({},contextComponents),components)),allComponents},MDXProvider=function MDXProvider(props){var allComponents=useMDXComponents(props.components);return react__WEBPACK_IMPORTED_MODULE_0__.createElement(MDXContext.Provider,{value:allComponents},props.children)},DEFAULTS={inlineCode:"code",wrapper:function wrapper(_ref){var children=_ref.children;return react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,{},children)}},MDXCreateElement=react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((function(props,ref){var propComponents=props.components,mdxType=props.mdxType,originalType=props.originalType,parentName=props.parentName,etc=_objectWithoutProperties(props,["components","mdxType","originalType","parentName"]),components=useMDXComponents(propComponents),type=mdxType,Component=components["".concat(parentName,".").concat(type)]||components[type]||DEFAULTS[type]||originalType;return propComponents?react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component,_objectSpread2(_objectSpread2({ref:ref},etc),{},{components:propComponents})):react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component,_objectSpread2({ref:ref},etc))}));function createElement(type,props){var args=arguments,mdxType=props&&props.mdxType;if("string"==typeof type||mdxType){var argsLength=args.length,createElementArgArray=new Array(argsLength);createElementArgArray[0]=MDXCreateElement;var newProps={};for(var key in props)hasOwnProperty.call(props,key)&&(newProps[key]=props[key]);newProps.originalType=type,newProps.mdxType="string"==typeof type?type:mdxType,createElementArgArray[1]=newProps;for(var i=2;i1&&void 0!==arguments[1]?arguments[1]:{},actionOptions=Object.assign({},config,options),handler=function actionHandler(){for(var channel=esm.KP.getChannel(),id=v4_default()(),minDepth=5,_len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];var serializedArgs=args.map(serializeArg),normalizedArgs=args.length>1?serializedArgs:serializedArgs[0],actionDisplayToEmit={id:id,count:0,data:{name:name,args:normalizedArgs},options:Object.assign({},actionOptions,{maxDepth:minDepth+(actionOptions.depth||3),allowFunction:actionOptions.allowFunction||!1})};channel.emit(EVENT_ID,actionDisplayToEmit)};return handler}__webpack_require__("./node_modules/core-js/modules/web.dom-collections.for-each.js"),__webpack_require__("./node_modules/core-js/modules/es.object.keys.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js");function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null==_i)return;var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr,i)||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.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);iarr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i1?_len-1:0),_key=1;_key<_len;_key++)handles[_key-1]=arguments[_key];var actionsObject=actionsFn.apply(void 0,handles);return Object.entries(actionsObject).map((function(_ref){var _ref2=withActions_slicedToArray(_ref,2),key=_ref2[0],action=_ref2[1],_key$match2=withActions_slicedToArray(key.match(delegateEventSplitter),3),eventName=(_key$match2[0],_key$match2[1]),selector=_key$match2[2];return{eventName:eventName,handler:function handler(e){selector&&!hasMatchInAncestry(e.target,selector)||action(e)}}}))},applyEventHandlers=browser_default()((function(actionsFn){for(var _len2=arguments.length,handles=new Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++)handles[_key2-1]=arguments[_key2];(0,hooks.d4)((function(){if(null!=root){var handlers=createHandlers.apply(void 0,[actionsFn].concat(handles));return handlers.forEach((function(_ref3){var eventName=_ref3.eventName,handler=_ref3.handler;return root.addEventListener(eventName,handler)})),function(){return handlers.forEach((function(_ref4){var eventName=_ref4.eventName,handler=_ref4.handler;return root.removeEventListener(eventName,handler)}))}}}),[root,actionsFn,handles])}),(0,ts_dedent_esm.C)(withActions_templateObject||(withActions_templateObject=function withActions_taggedTemplateLiteral(strings,raw){return raw||(raw=strings.slice(0)),Object.freeze(Object.defineProperties(strings,{raw:{value:Object.freeze(raw)}}))}(["\n withActions(options) is deprecated, please configure addon-actions using the addParameter api:\n\n addParameters({\n actions: {\n handles: options\n },\n });\n "])))),withActions=(0,make_decorator.h)({name:"withActions",parameterName:"actions",skipIfNoParametersOrOptions:!0,wrapper:function wrapper(getStory,context,_ref5){var parameters=_ref5.parameters,options=_ref5.options;return function applyDeprecatedOptions(actionsFn,options){options&&applyEventHandlers(actionsFn,options)}(actions,options),parameters&¶meters.handles&&applyEventHandlers.apply(void 0,[actions].concat(_toConsumableArray(parameters.handles))),getStory(context)}});(module=__webpack_require__.hmd(module))&&module.hot},"./node_modules/@storybook/addon-actions/dist/esm/models/DecoratorFunction.js":function(){},"./node_modules/@storybook/addon-actions/dist/esm/models/HandlerFunction.js":function(){},"./node_modules/@storybook/addon-actions/dist/esm/models/index.js":function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";var _DecoratorFunction__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/@storybook/addon-actions/dist/esm/models/DecoratorFunction.js");__webpack_require__.o(_DecoratorFunction__WEBPACK_IMPORTED_MODULE_0__,"action")&&__webpack_require__.d(__webpack_exports__,{action:function(){return _DecoratorFunction__WEBPACK_IMPORTED_MODULE_0__.action}}),__webpack_require__.o(_DecoratorFunction__WEBPACK_IMPORTED_MODULE_0__,"withActions")&&__webpack_require__.d(__webpack_exports__,{withActions:function(){return _DecoratorFunction__WEBPACK_IMPORTED_MODULE_0__.withActions}});var _HandlerFunction__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/@storybook/addon-actions/dist/esm/models/HandlerFunction.js");__webpack_require__.o(_HandlerFunction__WEBPACK_IMPORTED_MODULE_1__,"action")&&__webpack_require__.d(__webpack_exports__,{action:function(){return _HandlerFunction__WEBPACK_IMPORTED_MODULE_1__.action}}),__webpack_require__.o(_HandlerFunction__WEBPACK_IMPORTED_MODULE_1__,"withActions")&&__webpack_require__.d(__webpack_exports__,{withActions:function(){return _HandlerFunction__WEBPACK_IMPORTED_MODULE_1__.withActions}})},"./node_modules/@storybook/addon-actions/preview.js-generated-config-entry.js":function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";var addon_actions_preview_namespaceObject={};__webpack_require__.r(addon_actions_preview_namespaceObject),__webpack_require__.d(addon_actions_preview_namespaceObject,{argsEnhancers:function(){return argsEnhancers},decorators:function(){return decorators}});var ClientApi=__webpack_require__("./node_modules/@storybook/client-api/dist/esm/ClientApi.js"),esm=__webpack_require__("./node_modules/@storybook/addon-actions/dist/esm/index.js"),decorators=[esm.withActions];__webpack_require__("./node_modules/core-js/modules/es.regexp.constructor.js"),__webpack_require__("./node_modules/core-js/modules/es.regexp.exec.js"),__webpack_require__("./node_modules/core-js/modules/es.regexp.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.array.filter.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.object.entries.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js");function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null==_i)return;var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr,i)||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.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i1&&void 0!==arguments[1]?arguments[1]:[],defaultName=arguments.length>2?arguments[2]:void 0;if("transparent"===currentSelectedValue)return"transparent";if(backgrounds.find((function(background){return background.value===currentSelectedValue})))return currentSelectedValue;var defaultBackground=backgrounds.find((function(background){return background.name===defaultName}));if(defaultBackground)return defaultBackground.value;if(defaultName){var availableColors=backgrounds.map((function(background){return background.name})).join(", ");dist_esm.kg.warn((0,esm.C)(_templateObject||(_templateObject=_taggedTemplateLiteral(['\n Backgrounds Addon: could not find the default color "','".\n These are the available colors for your story based on your configuration:\n ',".\n "])),defaultName,availableColors))}return"transparent"}(globalsBackgroundColor,backgroundsConfig.values,backgroundsConfig.default)}),[backgroundsConfig,globalsBackgroundColor]),isActive=(0,hooks.Ye)((function(){return selectedBackgroundColor&&"transparent"!==selectedBackgroundColor}),[selectedBackgroundColor]),selector="docs"===context.viewMode?"#anchor--".concat(context.id," .docs-story"):".sb-show-main",backgroundStyles=(0,hooks.Ye)((function(){return"\n ".concat(selector," {\n background: ").concat(selectedBackgroundColor," !important;\n ").concat(function isReduceMotionEnabled(){return helpers_window.matchMedia("(prefers-reduced-motion: reduce)").matches}()?"":"transition: background-color 0.3s;","\n }\n ")}),[selectedBackgroundColor,selector]);return(0,hooks.d4)((function(){var selectorId="docs"===context.viewMode?"addon-backgrounds-docs-".concat(context.id):"addon-backgrounds-color";isActive?function addBackgroundStyle(selector,css,storyId){var existingStyle=helpers_document.getElementById(selector);if(existingStyle)existingStyle.innerHTML!==css&&(existingStyle.innerHTML=css);else{var style=helpers_document.createElement("style");style.setAttribute("id",selector),style.innerHTML=css;var gridStyleSelector="addon-backgrounds-grid".concat(storyId?"-docs-".concat(storyId):""),existingGridStyle=helpers_document.getElementById(gridStyleSelector);existingGridStyle?existingGridStyle.parentElement.insertBefore(style,existingGridStyle):helpers_document.head.appendChild(style)}}(selectorId,backgroundStyles,"docs"===context.viewMode?context.id:null):clearStyles(selectorId)}),[isActive,backgroundStyles,context]),StoryFn()}],parameters={backgrounds:{grid:{cellSize:20,opacity:.5,cellAmount:5},values:[{name:"light",value:"#F8F8F8"},{name:"dark",value:"#333333"}]}};function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.keys(addon_backgrounds_preview_namespaceObject).forEach((function(key){var value=addon_backgrounds_preview_namespaceObject[key];switch(key){case"args":return(0,ClientApi.uc)(value);case"argTypes":return(0,ClientApi.v9)(value);case"decorators":return value.forEach((function(decorator){return(0,ClientApi.$9)(decorator,!1)}));case"loaders":return value.forEach((function(loader){return(0,ClientApi.HZ)(loader,!1)}));case"parameters":return(0,ClientApi.h1)(function _objectSpread(target){for(var i=1;i1&&void 0!==arguments[1]?arguments[1]:"start";element.scrollIntoView({behavior:"smooth",block:block,inline:"nearest"})}__webpack_require__("./node_modules/core-js/modules/es.promise.js"),__webpack_require__("./node_modules/core-js/modules/es.array.concat.js");var react_dist_esm=__webpack_require__("./node_modules/@mdx-js/react/dist/esm.js"),dist=__webpack_require__("./node_modules/@storybook/csf/dist/index.js");__webpack_require__("./node_modules/regenerator-runtime/runtime.js");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg),value=info.value}catch(error){return void reject(error)}info.done?resolve(value):Promise.resolve(value).then(_next,_throw)}function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null==_i)return;var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr,i)||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.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);iarr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i"}})))}Promise.all([storyFnRan,rendered]).then((function(){channel.emit(dist_esm.default.STORY_RENDERED,storyId)}))}return react.createElement("div",{id:storyBlockIdFromId(story.id)},react.createElement(react_dist_esm.Zo,{components:index_681e4b07.C},react.createElement(index_681e4b07.aL,storyProps)))};function _extends(){return _extends=Object.assign||function(target){for(var i=1;iarr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i