メインコンテンツまでスキップ

サインインブロック

SignInコンポーネントは、ReactとTypeScriptで構築された完全にカスタマイズ可能でアクセシブルなサインインフォームです。モダンなデザインパターン、フォームバリデーション、柔軟なカスタマイズオプションを備えた完全な認証インターフェースを提供します。


🚀 インストール

npm install @nodeblocks/frontend-signin-block

📖 使用方法

import {SignIn} from '@nodeblocks/frontend-signin-block';
ライブエディター
function BasicSignIn() {
  return (
    <SignIn
      onChange={(setError, getValues, clearErrors) => {
        console.log('フォーム値:', getValues());
        const values = getValues();
        if (!values.email) {
          setError('email', {message: 'メールアドレスは必須です', type: 'required'});
        } else {
          clearErrors('email');
        }
      }}
      onSubmit={formData => {
        console.log('フォームが送信されました:', formData);
      }}
      style={{display: 'flex', flexDirection: 'column', gap: '16px'}}>
      <SignIn.SignInTitle>おかえりなさい</SignIn.SignInTitle>
      <SignIn.EmailField label="メールアドレス" placeholder="メールアドレスを入力してください" />
      <SignIn.PasswordField label="パスワード" placeholder="パスワードを入力してください" />
      <SignIn.SignInButton>サインイン</SignIn.SignInButton>
      <SignIn.GotoSignUp>
        <a href="#signup">アカウントを作成</a>
      </SignIn.GotoSignUp>
      <SignIn.ResetPassword>
        <a href="#reset-password">パスワードをお忘れですか?</a>
      </SignIn.ResetPassword>
    </SignIn>
  );
}
結果
Loading...

🔧 プロパティリファレンス

メインコンポーネントのプロパティ

プロパティデフォルト説明
onSubmitSubmitHandler<T>必須有効なデータでフォームが送信されたときにトリガーされるコールバック関数
onChange(setError, getValues, clearErrors) => void必須フォーム値が変更されたときにトリガーされるコールバック関数。バリデーション用のフォーム制御関数を提供
defaultDataDefaultValues<T>undefined初期レンダリング時にフィールドに設定するデフォルトフォーム値
dataTundefined制御されたフォーム値 - 外部フォーム状態管理に使用
childrenBlocksOverrideundefinedデフォルトレンダリングをオーバーライドするカスタムブロックコンポーネント
classNamestringundefinedフォームコンテナスタイリング用の追加CSSクラス名

注意: このコンポーネントは追加で一般的なHTML form 要素プロパティを継承します。

サブコンポーネント

SignInコンポーネントは複数のサブコンポーネントを提供します。すべてのサブコンポーネントは、メインコンポーネントのコンテキストからデフォルト値を受け取り、プロパティを通じてこれらの値をオーバーライドできます。

SignIn.SignInTitle

プロパティデフォルト説明
childrenReactNode"Sign In to App"タイトルコンテンツ
sizeenum"2XL"タイトルのタイポグラフィサイズ
typeenum"heading"タイポグラフィタイプ
colorenum"low-emphasis"タイトルのカラーテーマ
weightenum"bold"タイトルの太さ
classNamestringundefinedスタイリング用の追加CSSクラス名

SignIn.EmailField

プロパティデフォルト説明
namestring"email"フォームデータとバリデーションに使用されるフィールド名
labelstring"Email"入力の上に表示されるフィールドラベル
placeholderstring"Please enter your email"フィールドが空のときに表示されるプレースホルダーテキスト
inputTypestring"email"入力タイプ - 通常「email」または「text」
isRequiredbooleantrueフィールドが必須かどうか(赤いアスタリスクを表示)
isDisabledbooleanundefined入力が無効かどうか
errorTextstringundefined入力のエラーテキスト
classNamestringundefinedスタイリング用の追加CSSクラス名

注意: このコンポーネントは追加で一般的なHTML input 要素プロパティを継承します。

SignIn.PasswordField

プロパティデフォルト説明
namestring"password"フォームデータとバリデーションに使用されるフィールド名
labelstring"Password"入力の上に表示されるフィールドラベル
placeholderstring"Please enter your password"フィールドが空のときに表示されるプレースホルダーテキスト
inputTypestring"password"入力タイプ - 通常「password」または「text」
isRequiredbooleantrueフィールドが必須かどうか(赤いアスタリスクを表示)
isDisabledbooleanundefined入力が無効かどうか
errorTextstringundefined入力のエラーテキスト
classNamestringundefinedスタイリング用の追加CSSクラス名

注意: このコンポーネントは追加で一般的なHTML input 要素プロパティを継承します。

SignIn.SignInButton

プロパティデフォルト説明
childrenReactNode"Login"ボタンテキストコンテンツ
classNamestringundefinedスタイリング用の追加CSSクラス名
fillenum"fill"ボタンフィルスタイル
iconenumundefinedボタン左側のオプションアイコン
iconColorenumundefined左側アイコンの色。提供されない場合、フィルタイプのデフォルト色が使用されます。
isDisabledbooleanfalseボタンが無効で使用できないかどうか
onClickfunctionundefinedボタンクリックを処理する関数
sizeenum"M"ボタンの縦サイズ
textAlignenum"center"ボタン内でのアイコンとテキストの位置
textColorenum"default"ボタンテキストの色
textEmphasisbooleanfalseボタンテキストの太さ
textSizeenum"M"ボタンテキストのサイズ
typeenum"submit"ボタンの目的(htmlタイプに影響)

SignIn.GotoSignUp

プロパティデフォルト説明
childrenReactNodeデフォルト登録リンク登録リンクセクションのコンテンツ - 通常アンカータグを含む
classNamestringundefinedスタイリング用の追加CSSクラス名

SignIn.ResetPassword

プロパティデフォルト説明
childrenReactNodeデフォルトリセットリンクパスワードリセットリンクセクションのコンテンツ - 通常アンカータグを含む
classNamestringundefinedスタイリング用の追加CSSクラス名

🔧 TypeScript サポート

包括的な型定義による完全なTypeScriptサポート:

import {SignIn} from '@nodeblocks/frontend-signin-block';
//将来的にはreact-hook-formを使用せず、独自のフォーム処理を使用します
import {UseFormClearErrors, UseFormGetValues, UseFormSetError} from 'react-hook-form';

// デフォルトフォームデータ構造
interface DefaultSignInFormData extends Record<string, unknown> {
email?: string;
password?: string;
}

// カスタムフィールドで拡張
interface CustomSignInFormData extends DefaultSignInFormData {
rememberMe?: boolean;
customField?: string;
}

const MySignInForm = () => {
const handleSubmit = (formData: CustomSignInFormData) => {
console.log('フォームが送信されました:', formData);
// フォーム送信を処理
};

const handleChange = (
setError: UseFormSetError<CustomSignInFormData>,
getValues: UseFormGetValues<CustomSignInFormData>,
clearErrors: UseFormClearErrors<CustomSignInFormData>,
) => {
const values = getValues();

// カスタムバリデーション
if (values.email && !values.email.includes('@')) {
setError('email', {message: '無効なメールアドレス形式です'});
} else {
clearErrors('email');
}
};

return (
<SignIn<CustomSignInFormData>
onSubmit={handleSubmit}
onChange={handleChange}
defaultData={{email: 'user@example.com'}}>
<SignIn.SignInTitle>おかえりなさい</SignIn.SignInTitle>
<SignIn.EmailField />
<SignIn.PasswordField />
<SignIn.SignInButton>ログイン</SignIn.SignInButton>
<SignIn.GotoSignUp>
<span>
アカウントをお持ちでない方は <a href="/signup">サインアップ</a>
</span>
</SignIn.GotoSignUp>
<SignIn.ResetPassword>
<span>
<a href="/reset-password">パスワードをお忘れですか?</a>
</span>
</SignIn.ResetPassword>
</SignIn>
);
};

React、TypeScript、モダンなウェブ標準を使用して❤️で構築されました。