// import '../src/index.css' // This has to be imported as early as possible import { type Preview } from '@storybook/react-vite' import React from 'react' import { Container } from '../src/components' import { StylesheetProvider } from '../src/providers' const radiusMap = { none: 0, sm: 0.5, md: 1, lg: 2, xl: 4, } const colorMap = { red: '#dc2626', orange: '#ea580c', amber: '#d97706', yellow: '#eab308', lime: '#a3e635', green: '#22c55e', emerald: '#10b981', teal: '#14b8a6', cyan: '#06b6d4', sky: '#0ea5e9', blue: '#3b82f6', indigo: '#6366f1', violet: '#8b5cf6', purple: '#9333ea', fuchsia: '#d946ef', pink: '#ec4899', } /** @type { import('@storybook/react-vite').Preview } */ const preview: Preview = { initialGlobals: { themeMode: 'light', radius: 'md', variant: 'solid', color: 'blue', }, globalTypes: { themeMode: { toolbar: { dynamicTitle: true, title: 'Theme', icon: 'mirror', items: ['light', 'dark'], }, }, radius: { toolbar: { title: 'Radius', dynamicTitle: true, icon: 'button', items: Object.keys(radiusMap), }, }, variant: { toolbar: { title: 'Variant', dynamicTitle: true, icon: 'expandalt', items: ['solid', 'soft'], }, }, color: { toolbar: { title: 'Color', dynamicTitle: true, icon: 'paintbrush', items: Object.keys(colorMap), }, }, }, parameters: { controls: { matchers: { color: /(background|color)$/i, date: /Date$/i, }, }, }, decorators: [ (Story, context) => { // Full-surface stories (e.g. the whole Chat) render their own Container + // providers, so the sub-component wrapper below would double-nest them // (two Containers / LazyMotion / ModalProvider) and break rendering. Let // those stories opt out and supply their own frame. if (context.parameters?.fullSurface) { return } const { themeMode, variant, radius, color } = context.globals return ( // TODO: These css hacks should not be required ) }, ], } export default preview