使い方ブロック
HowToUseコンポーネントは、ReactとTypeScriptで構築された完全にカスタマイズ可能でアクセシブルなステップバイステップガイドコンポーネントです。プロセスフロー、使用方法の説明、コールトゥアクションセクションを表示するための完全なインターフェースを、モダンなデザインパターンと柔軟なカスタマイズオプションとともに提供します。一貫したスタイリングのためにMUIコンポーネント上に構築されています。
🚀 インストール
npm install @nodeblocks/frontend-how-to-use-block@0.3.0
📖 使用法
import {HowToUse} from '@nodeblocks/frontend-how-to-use-block';
- 基本的な使用法
- 高度な使用法
function SimpleHowToUse() { return ( <HowToUse subtitle="仕組み" headerContent="ステップ" message="わずか1分で始められます!" linkHref="#sign-up" linkContent="無料サインアップ" > <HowToUse.Header subtitle="仕組み"> <span>はじめにガイド</span> </HowToUse.Header> <HowToUse.CardList> <HowToUse.Card icon={undefined} headerContent="プロファイル作成"> サインアップして、スキルと経験を含むプロフェッショナルなプロファイルを作成します。 </HowToUse.Card> <HowToUse.Card icon={undefined} headerContent="プロジェクト検索"> 利用可能なプロジェクトを検索し、興味のあるものを見つけます。 </HowToUse.Card> <HowToUse.Card icon={undefined} headerContent="つながりを作る"> プロジェクトに応募し、潜在的な雇用主とつながります。 </HowToUse.Card> </HowToUse.CardList> <HowToUse.Footer message="わずか1分で始められます!" linkHref="#sign-up" linkContent="無料サインアップ" /> </HowToUse> ); }
function AdvancedHowToUse() { const steps = [ { number: '01', title: 'アカウント作成', description: '数秒でサインアップし、プロフェッショナルなプロファイルを設定します。', color: '#3b82f6', bgColor: '#eff6ff', }, { number: '02', title: 'オプションを探索', description: 'スキルと目標に合わせた機会を閲覧します。', color: '#8b5cf6', bgColor: '#f5f3ff', }, { number: '03', title: '成長を始める', description: '雇用主とつながり、キャリアを加速させます。', color: '#10b981', bgColor: '#ecfdf5', }, ]; return ( <HowToUse subtitle="成功への3つのシンプルなステップ" headerContent="仕組み" message="キャリアを変革する準備はできましたか?" linkHref="#get-started" linkContent="無料で始める" sx={{ bgcolor: '#ffffff', py: 10, px: 4, }} > {({defaultBlocks}) => { const customCardList = ( <div style={{ display: 'flex', gap: '24px', justifyContent: 'center', flexWrap: 'wrap', padding: '0 16px', }} > {steps.map((step, index) => ( <div key={index} style={{ width: '320px', padding: '32px 28px', borderRadius: '20px', background: '#ffffff', border: `2px solid ${step.bgColor}`, position: 'relative', transition: 'all 0.3s ease', }} > <div style={{ width: '56px', height: '56px', borderRadius: '16px', background: step.bgColor, display: 'flex', alignItems: 'center', justifyContent: 'center', marginBottom: '20px', }} > <span style={{ fontSize: '20px', fontWeight: '800', color: step.color, fontFamily: 'monospace', }} > {step.number} </span> </div> <div style={{ fontSize: '20px', fontWeight: '700', color: '#1e293b', marginBottom: '12px', marginTop: 0, }} > {step.title} </div> <p style={{ fontSize: '15px', color: '#64748b', lineHeight: '1.6', margin: 0, }} > {step.description} </p> <div style={{ position: 'absolute', top: '24px', right: '24px', width: '8px', height: '8px', borderRadius: '50%', background: step.color, }} /> </div> ))} </div> ); return { blocks: { ...defaultBlocks, header: ( <HowToUse.Header subtitle="成功への3つのシンプルなステップ" sx={{ mb: 2, '& .MuiTypography-h4': { color: '#3b82f6', fontWeight: 700, letterSpacing: '0.15em', fontSize: '0.8rem', }, '& .MuiTypography-h1': { color: '#0f172a', fontWeight: 800, fontSize: {xs: '1.75rem', lg: '2.5rem'}, }, }} > <span>仕組み</span> </HowToUse.Header> ), cardList: customCardList, footer: ( <HowToUse.Footer message="キャリアを変革する準備はできましたか?" linkHref="#get-started" linkContent="無料で始める" sx={{ mt: 4, '& .MuiTypography-body2': { color: '#64748b', fontWeight: 500, fontSize: '1rem', }, '& .MuiButton-root': { bgcolor: '#3b82f6', borderRadius: '12px', px: 5, py: 1.75, fontSize: '1rem', fontWeight: 600, textTransform: 'none', boxShadow: '0 4px 14px rgba(59, 130, 246, 0.35)', '&:hover': { bgcolor: '#2563eb', boxShadow: '0 6px 20px rgba(59, 130, 246, 0.45)', }, }, }} /> ), }, blockOrder: defaultBlockOrder, }; }} </HowToUse> ); }
🔧 プロパティリファレンス
メインコンポーネントプロパティ
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
subtitle | ReactNode | 必須 | ヘッダーに表示されるサブタイトルテキスト(大きいテキスト) |
headerContent | ReactNode | 必須 | メインヘッダーテキストコンテンツ(サブタイトルの上の小さいテキスト) |
message | ReactNode | 必須 | フッターボタンの上に表示されるメッセージテキスト |
linkHref | string | 必須 | コールトゥアクションボタンのURL |
linkContent | ReactNode | 必須 | コールトゥアクションボタンのテキストコンテンツ |
spacing | ResponsiveValue | { xs: 5, lg: 6 } | 子要素間のスペーシング |
className | string | undefined | コンテナのスタイリング用の追加CSSクラス名 |
sx | SxProps<Theme> | { backgroundColor: 'background.default', py: { xs: 5, lg: 10 }, px: { xs: 2, lg: 'unset' } } | カスタムスタイリング用のMUIシステムプロパティ |
children | BlocksOverride | undefined | 高度なカスタマイゼーション用のカスタムブロックオーバーライド |
注意: このコンポーネントはすべてのMUI Stackコンポーネントプロパティを継承します。すべてのコンテキスト値(subtitle、headerContent、message、linkHref、linkContent)はサブコンポーネントに渡されます。
サブコンポーネント
HowToUseコンポーネントは複数のサブコンポーネントを提供します。すべてのサブコンポーネントは、メインコンポーネントのコンテキストからデフォルト値を受け取り、プロパティを通じてこれらの値をオーバーライドできます。
HowToUse.Header
2つのTypography要素を持つMUI Stackを使用してヘッダーセクションをレンダリングします。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
subtitle | ReactNode | コンテキスト値 | サブタイトルテキスト(大きい、ヘッダーの下に表示) |
children | ReactNode | コンテキスト headerContent | メインヘッダーテキスト(小さい、サブタイトルの上に表示) |
spacing | ResponsiveValue | { xs: 0.5, lg: 1 } | ヘッダーとサブタイトル間のスペーシング |
className | string | undefined | スタイリング用の追加CSSクラス名 |
sx | SxProps<Theme> | { textAlign: 'center' } | カスタムスタイリング用のMUIシステムプロパティ |
注意: このコンポーネントはすべてのMUI Stackコンポーネントプロパティを継承します。ヘッダーテキストはh4バリアントでprimary.mainカラーを使用し、サブタイトルはh1バリアントを使用します。
HowToUse.CardList
カード間に矢印インジケーター付きのレスポンシブカードリストをレンダリングします。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
children | ReactNode | 必須 | 表示するCardコンポーネントの配列 |
direction | ResponsiveValue | { xs: 'column', lg: 'row' } | Stack方向 |
className | string | undefined | スタイリング用の追加CSSクラス名 |
sx | SxProps<Theme> | { alignItems: { xs: 'center', lg: 'stretch' }, justifyContent: 'center' } | カスタムスタイリング用のMUIシステムプロパティ |
注意: このコンポーネントはすべてのMUI Stackコンポーネントプロパティを継承します。デスクトップではカード間にArrowRightアイコンを、モバイルではArrowDropDownアイコンを自動的に追加します。
HowToUse.Card
MUI Cardを使用して個々のステップカードをレンダリングします。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
icon | SvgIconComponent | 必須 | プロパティを受け付けるアイコンコンポーネント(@mui/icons-materialからのMUIアイコンまたはカスタムSVGコンポーネント) |
headerContent | ReactNode | コンテキスト値 | カードのタイトルテキスト |
children | ReactNode | 必須 | カードの説明コンテンツ |
className | string | undefined | スタイリング用の追加CSSクラス名 |
sx | SxProps<Theme> | { width: '100%', maxWidth: 360 } | カスタムスタイリング用のMUIシステムプロパティ |
注意: このコンポーネントはすべてのMUI Cardコンポーネントプロパティを継承します。component="article"とelevation={0}でレンダリングされます。アイコンは要素ではなくコンポーネントである必要があります - @mui/icons-materialからのものまたはプロパティを受け付けるカスタムSVGコンポーネント。
HowToUse.Footer
メッセージとコールトゥアクションボタン付きのフッターセクションをレンダリングします。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
message | ReactNode | コンテキスト値 | ボタンの上に表示されるメッセージテキスト |
linkHref | string | コンテキスト値 | ボタンのURL |
linkContent | ReactNode | コンテキスト値 | ボタンのテキストコンテンツ |
children | ReactNode | undefined | 追加コンテンツ |
spacing | number | 1.5 | メッセージとボタン間のスペーシング |
className | string | undefined | スタイリング用の追加CSSクラス名 |
sx | SxProps<Theme> | { alignItems: 'center' } | カスタムスタイリング用のMUIシステムプロパティ |
注意: このコンポーネントはすべてのMUI Stackコンポーネントプロパティを継承します。MUI Buttonをvariant="contained"とsize="large"で使用します。
🎨 設定例
カスタムヘッダースタイリング
<HowToUse.Header
subtitle="はじめに"
sx={{
textAlign: 'left',
'& .MuiTypography-h4': {
color: 'secondary.main',
fontSize: 16,
},
'& .MuiTypography-h1': {
fontSize: 32,
fontWeight: 700,
},
}}
>
<span>仕組み</span>
</HowToUse.Header>
カスタムカードスタイリング
<HowToUse.Card
icon={undefined}
headerContent="登録"
sx={{
maxWidth: 400,
bgcolor: 'grey.50',
borderRadius: 3,
border: '1px solid',
borderColor: 'grey.200',
}}
>
アカウントを作成
</HowToUse.Card>
カスタムフッターボタンスタイリング
<HowToUse.Footer
sx={{
'& .MuiButton-root': {
bgcolor: 'success.main',
borderRadius: 8,
px: 6,
py: 2,
'&:hover': {
bgcolor: 'success.dark',
},
},
}}
/>
🔧 TypeScriptサポート
包括的な型定義による完全なTypeScriptサポート:
import {HowToUse} from '@nodeblocks/frontend-how-to-use-block';
import {StackProps, CardProps} from '@mui/material';
import {SvgIconComponent} from '@mui/icons-material';
import {ReactNode} from 'react';
// メインコンポーネントプロパティはMUI StackPropsを拡張
interface HowToUseProps extends Omit<StackProps, 'children'> {
subtitle: ReactNode;
headerContent: ReactNode;
message: ReactNode;
linkHref: string;
linkContent: ReactNode;
children?: BlocksOverride;
}
// コンテキストタイプ(すべてのサブコンポーネントに渡される値)
interface HowToUseContextValue {
subtitle: ReactNode;
headerContent: ReactNode;
message: ReactNode;
linkHref: string;
linkContent: ReactNode;
}
// カードプロパティ - iconはSvgIconComponentであることに注意
interface CardProps extends MuiCardProps {
icon: SvgIconComponent;
headerContent: ReactNode;
children: ReactNode;
}
// 型付きプロパティの例
function CustomStyledHowToUse() {
return (
<HowToUse
subtitle="はじめに"
headerContent="仕組み"
message="始める準備はできましたか?"
linkHref="#signup"
linkContent="始める"
sx={{py: 8}}
>
<HowToUse.Header
subtitle="はじめに"
sx={{
textAlign: 'left',
'& .MuiTypography-h4': {
color: 'secondary.main',
fontSize: 16,
},
'& .MuiTypography-h1': {
fontSize: 32,
fontWeight: 700,
},
}}
>
<span>仕組み</span>
</HowToUse.Header>
<HowToUse.CardList>
<HowToUse.Card
icon={undefined}
headerContent="登録"
sx={{
maxWidth: 400,
bgcolor: 'grey.50',
borderRadius: 3,
border: '1px solid',
borderColor: 'grey.200',
}}
>
アカウントを作成
</HowToUse.Card>
<HowToUse.Card
icon={undefined}
headerContent="探索"
sx={{
maxWidth: 400,
bgcolor: 'grey.50',
borderRadius: 3,
border: '1px solid',
borderColor: 'grey.200',
}}
>
機会を見つける
</HowToUse.Card>
<HowToUse.Card
icon={undefined}
headerContent="つながる"
sx={{
maxWidth: 400,
bgcolor: 'grey.50',
borderRadius: 3,
border: '1px solid',
borderColor: 'grey.200',
}}
>
関係を構築
</HowToUse.Card>
</HowToUse.CardList>
<HowToUse.Footer
message="始める準備はできましたか?"
linkHref="#signup"
linkContent="始める"
sx={{
'& .MuiButton-root': {
bgcolor: 'success.main',
borderRadius: 8,
px: 6,
py: 2,
'&:hover': {
bgcolor: 'success.dark',
},
},
}}
/>
</HowToUse>
);
}
📝 注意事項
- コンポーネントはルートコンテナとしてMUIの
Stackをレスポンシブパディングで使用します - デフォルトの背景色は
theme.palette.background.defaultです - HowToUse.Headerは2つのTypography要素を表示します:ヘッダーテキスト(h4)とサブタイトル(h1)
- HowToUse.CardListはカード間に矢印アイコンを自動的に追加します(デスクトップではArrowRight、モバイルではArrowDropDown)
- HowToUse.CardはMUI Cardを
elevation={0}とcomponent="article"で使用します - HowToUse.Cardのアイコンは
SvgIconComponentである必要があり、ReactNode要素ではありません - HowToUse.FooterはMUI Buttonを
variant="contained"とsize="large"で使用します - すべてのサブコンポーネントはMUIシステムスタイリング用の
sxプロパティをサポートします - ブロックオーバーライドパターンにより、カスタムブロックの挿入と並べ替えが可能です
React、TypeScript、MUIを使用して❤️で構築されました。