Closed8
Next.js + @radix-ui/themes + Storybookで動くところまで
作業手順
Next.jsのプロジェクト作成
npx create-next-app@latest
@radix-ui/thmes を導入する
npm install @radix-ui/themes
app/global.css
でCSSを読み込む。
layout.tsx
で読み込まないこと
@import '~@radix-ui/themes/styles.css';
Storyookを導入する
npx storybook@latest init
いい感じにNext.jsのプロジェクトであることを判断して設定してくれる
このままだと@radix-ui/themesのCSSを読み込まないので.storybook/preview.ts
でapp/global.css
を読み込む。
import type { Preview } from "@storybook/react";
+import "../app/global.css";
const preview: Preview = {
parameters: {
actions: { argTypesRegex: "^on[A-Z].*" },
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/i,
},
},
},
};
export default preview;
preview.tsx
にリネームしてDecoratorを追加。これでStorybook側はOK
+import React from "react";
import type { Preview } from "@storybook/react";
import "../app/global.css";
+import { Theme } from "@radix-ui/themes";
const preview: Preview = {
parameters: {
actions: { argTypesRegex: "^on[A-Z].*" },
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/i,
},
},
},
+ decorators: [
+ (Story) => {
+ return (
+ <Theme>
+ <Story />
+ </Theme>
+ );
+ },
+ ],
};
export default preview;
app/layout.tsx
にもThemeを追加する。
import type { Metadata } from 'next'
import { Inter } from 'next/font/google'
+import { Theme } from "@radix-ui/themes";
import './globals.css'
const inter = Inter({ subsets: ['latin'] })
export const metadata: Metadata = {
title: 'Create Next App',
description: 'Generated by create next app',
}
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en">
<body className={inter.className}>
- {children}
+ <Theme>{children}</Theme>
</body>
</html>
)
}
このスクラップは2023/11/17にクローズされました