diff --git a/apps/storybook/package.json b/apps/storybook/package.json index d05cf1c..22442ec 100644 --- a/apps/storybook/package.json +++ b/apps/storybook/package.json @@ -16,7 +16,8 @@ "dependencies": { "@fortawesome/free-solid-svg-icons": "^6.4.0", "@fortawesome/react-fontawesome": "^0.2.0", - "@learnn/designn": "workspace:*" + "@learnn/designn": "workspace:*", + "zod": "^3.23.8" }, "devDependencies": { "@babel/core": "7.21.4", diff --git a/apps/storybook/stories/RenderMarkdownWithComponents.stories.tsx b/apps/storybook/stories/RenderMarkdownWithComponents.stories.tsx new file mode 100644 index 0000000..cb73088 --- /dev/null +++ b/apps/storybook/stories/RenderMarkdownWithComponents.stories.tsx @@ -0,0 +1,276 @@ +import { z } from 'zod' +import { + AppShell, + Button, + defaultTheme, + RenderMarkdownWithComponents, + defineMarkdownComponent, + defineMarkdownComponents, +} from '@learnn/designn' +import { ComponentMeta, ComponentStory } from '@storybook/react' +import React from 'react' + +export default { + title: 'Components/RenderMarkdownWithComponents', + component: RenderMarkdownWithComponents, +} as ComponentMeta + +function bind(node: JSX.Element) { + const template: ComponentStory = () => node + return template.bind({}) +} + +const HighlightBox: React.FC<{ color?: string; children?: React.ReactNode }> = ({ + color = 'yellow', + children, +}) => { + return ( +
+ {children} +
+ ) +} + +const MARKDOWN_WITHOUT_COMPONENTS = ` +# Main Title + +This is an example paragraph with **bold** and *italic* text. + +## Subtitle + +- Bullet point +- Another item +- Third item + +\`\`\`javascript +console.log('Example code'); +\`\`\` +` + +export const MarkdownWithoutComponents = bind( + +
+ + {MARKDOWN_WITHOUT_COMPONENTS} + +
+
, +) + +MarkdownWithoutComponents.storyName = 'Markdown without components' + +const buttonComponent = defineMarkdownComponent({ + tag: 'button', + props: z.object({ + variant: z.union([z.literal('primary'), z.literal('secondary'), z.literal('tertiary')]), + }), + component: ({ variant }) => ( +