Settingsブロック
Settings は、MUI 上に構築された設定メニューレイアウトで、アカウントや設定に関する操作のためのクリック可能な行を備えています。
インストール
- npm
- yarn
- pnpm
- bun
npm install @nodeblocks/frontend-settings-block
yarn add @nodeblocks/frontend-settings-block
pnpm add @nodeblocks/frontend-settings-block
bun add @nodeblocks/frontend-settings-block
必要なもの
| 項目 | 用途 |
|---|---|
settingsTitle | タイトルブロックに表示される見出しで、コンテキスト経由で渡される |
items | レンダリングする行(アイコン、タイトル、任意の value、クリックハンドラー) |
children (任意) | BlocksOverride | ReactNode |
items の各項目は次をサポートします:
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
icon | SvgIconComponent | はい | 行の左側に表示する MUI アイコンコンポーネント |
title | string | はい | 行のプライマリラベル |
value | string | いいえ | タイトル下に表示するセカンダリテキスト |
onClick | () => void | はい | 行がクリックされたときに呼び出される |
MUI アイコンを渡す
@mui/icons-material のアイコンコンポーネントを渡してください(例: PersonOutlined)。
コード例
- クイックスタート
- 複合コンポーネント
- ブロックのオーバーライド
ライブエディター
function Example() { const [lastEvent, setLastEvent] = React.useState('準備完了'); const items = [ { icon: PersonOutlined, title: 'ユーザー名', value: 'johndoe', onClick: () => setLastEvent('ユーザー名がクリックされました'), }, { icon: EmailOutlined, title: 'メール', value: 'john.doe@example.com', onClick: () => setLastEvent('メールがクリックされました'), }, { icon: LockOutlined, title: 'パスワード', value: '••••••••', onClick: () => setLastEvent('パスワードがクリックされました'), }, ]; return ( <> <Settings settingsTitle="アカウント設定" items={items} /> <div style={{marginTop: 8, fontSize: 12, color: '#666'}}>{lastEvent}</div> </> ); }
結果
Loading...
複合コンポーネントを使って、並び順と基盤となるサブコンポーネントの利用を制御します。
ライブエディター
function Example() { const [lastEvent, setLastEvent] = React.useState('準備完了'); const items = [ { icon: PersonOutlined, title: 'ユーザー名', value: 'johndoe', onClick: () => setLastEvent('ユーザー名がクリックされました'), }, { icon: EmailOutlined, title: 'メール', value: 'john.doe@example.com', onClick: () => setLastEvent('メールがクリックされました'), }, { icon: LockOutlined, title: 'パスワード', value: '30日前に変更', onClick: () => setLastEvent('パスワードがクリックされました'), }, { icon: PhoneOutlined, title: '電話番号', value: '+1 (555) 123-4567', onClick: () => setLastEvent('電話番号がクリックされました'), }, { icon: BadgeOutlined, title: '表示名', value: 'John Doe', onClick: () => setLastEvent('表示名がクリックされました'), }, { icon: NotificationsNone, title: '通知', value: 'メールとプッシュが有効', onClick: () => setLastEvent('通知がクリックされました'), }, ]; return ( <> <Settings settingsTitle="アカウント設定" items={items}> <Settings.Title>マイ設定</Settings.Title> <Settings.SettingsRows /> </Settings> <div style={{marginTop: 8, fontSize: 12, color: '#666'}}>{lastEvent}</div> </> ); }
結果
Loading...
関数の children を使ってデフォルトブロックと表示順序をオーバーライドします。
ライブエディター
function Example() { const [lastEvent, setLastEvent] = React.useState('準備完了'); const items = [ { icon: PersonOutlined, title: 'ユーザー名', value: 'johndoe', onClick: () => setLastEvent('ユーザー名がクリックされました'), }, { icon: EmailOutlined, title: 'メール', value: 'john.doe@example.com', onClick: () => setLastEvent('メールがクリックされました'), }, { icon: LockOutlined, title: 'パスワード', value: '30日前に変更', onClick: () => setLastEvent('パスワードがクリックされました'), }, ]; return ( <> <Settings settingsTitle="アカウント設定" items={items}> {({defaultBlocks, defaultBlockOrder}) => ({ blocks: { ...defaultBlocks, accountHeader: ( <div style={{ display: 'flex', alignItems: 'center', gap: 16, padding: 16, background: '#fff', borderRadius: 8, marginBottom: 8, }} > <div style={{ width: 48, height: 48, borderRadius: '50%', background: 'linear-gradient(135deg, #1976d2 0%, #42a5f5 100%)', color: '#fff', display: 'flex', alignItems: 'center', justifyContent: 'center', fontWeight: 600, fontSize: 18, flexShrink: 0, }} > JD </div> <div style={{minWidth: 0}}> <div style={{fontWeight: 600, fontSize: 16, lineHeight: 1.4}}>John Doe</div> <div style={{color: '#666', fontSize: 14, lineHeight: 1.4}}> john.doe@example.com · 2024年1月からメンバー </div> </div> </div> ), }, blockOrder: ['accountHeader', ...defaultBlockOrder], })} </Settings> <div style={{marginTop: 8, fontSize: 12, color: '#666'}}>{lastEvent}</div> </> ); }
結果
Loading...
ブロックのオーバーライドを使うタイミング
ブロックの表示順序を変更したり、デフォルトのタイトルや行を差し替えたり、共有の settingsTitle と items をコンテキストに保ちながらカスタムコンテンツを挿入する必要がある場合にオーバーライドを使います。
主要プロパティ
コアプロパティ
| プロパティ | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
settingsTitle | string | はい | - | 設定セクションのタイトル。children を省略したときに Settings.Title で使用される |
items | SettingsItem[] | はい | - | Settings.SettingsRows でレンダリングされる行(上記の形状を参照) |
レイアウトと構成プロパティ
| プロパティ | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
children | BlocksOverride | ReactNode | いいえ | undefined | 複合サブコンポーネント、またはブロックオーバーライド関数 |
className | string | いいえ | undefined | ルートコンテナのクラス名(nbb-settings も適用されます) |
sx | SxProps | いいえ | パネルのパディングと #F3F3F3 背景 | ルート Stack 用の MUI システムスタイル |
Settings は StackProps(children を除く)を継承するため、ルートでは標準のレイアウトプロパティをサポートします。デフォルトのブロック順序は title → settingsRows → settingsRow です。ルートは settingsRow をデフォルト描画から除外します。これはオーバーライド用のテンプレート行だからです。
サブコンポーネントはコンテキストから値を読み取り、部分的なオーバーライドを受け付けます:
Settings.Title—Typographyのプロパティ。childrenのデフォルトはコンテキストのsettingsTitle(variant="h6"、component="h4")Settings.SettingsRows—Stackのプロパティ。任意のitemsでコンテキストをオーバーライド可能。childrenで自動生成行を置き換え可能Settings.SettingsRow—Buttonのプロパティに加え、必須のicon(SvgIconComponent)とlabel。任意のvalueとchildrenでカスタム行コンテンツを指定可能
デフォルト UI ブロック
| ブロック | ベース | 備考 |
|---|---|---|
Settings (ルート) | Stack | レスポンシブな間隔、パディング、#F3F3F3 背景を持つ設定パネルラッパー |
Settings.Title | Typography | セクション見出し(variant="h6"、component="h4") |
Settings.SettingsRows | Stack | items を Settings.SettingsRow インスタンスにマッピング |
Settings.SettingsRow | Button + Stack + Typography + ChevronRight | アイコン、ラベル、任意の value、末尾のシェブロンを備えたアウトライン行 |
TypeScript
import {Settings} from '@nodeblocks/frontend-settings-block';
import type {SvgIconComponent} from '@mui/icons-material';
type SettingsItem = {
icon: SvgIconComponent;
title: string;
value?: string;
onClick: () => void;
};
function AccountSettingsPanel({rows}: {rows: SettingsItem[]}) {
return <Settings settingsTitle="アカウント設定" items={rows} />;
}