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

サインアップブロック

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


🚀 インストール

npm install @nodeblocks/frontend-signup-block

📖 使用方法

import {SignUp} from '@nodeblocks/frontend-signup-block';
ライブエディター
function BasicSignUp() {
  return (
    <SignUp
      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'}}>
      <SignUp.SignUpTitle>アカウントを作成</SignUp.SignUpTitle>
      <SignUp.EmailField label="メールアドレス" placeholder="メールアドレスを入力してください" />
      <SignUp.PasswordField label="パスワード" placeholder="パスワードを入力してください" />
      <SignUp.TermsOfUse name="agreesUserAgreement" label="利用規約に同意します" />
      <SignUp.PrivacyPolicy name="agreesPrivacyPolicy" label="プライバシーポリシーに同意します" />
      <SignUp.SignUpButton>サインアップ</SignUp.SignUpButton>
      <SignUp.GotoSignIn>
        <span>既にアカウントをお持ちですか? <a href="#signin">サインイン</a></span>
      </SignUp.GotoSignIn>
    </SignUp>
  );
}
結果
Loading...

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

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

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

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

サブコンポーネント

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

SignUp.SignUpTitle

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

SignUp.EmailField

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

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

SignUp.PasswordField

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

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

SignUp.TermsOfUse

HTML input要素のすべてのプロパティを継承し、以下を追加します:

プロパティデフォルト説明
namestring"agreesUserAgreement"フォームデータとバリデーションに使用されるフィールド名
labelReactNodeデフォルト利用規約リンク利用規約チェックボックスラベルのコンテンツ - 通常リンクを含む
isRequiredbooleantrueフィールドが必須かどうか(赤いアスタリスクを表示)
isDisabledbooleanundefined入力が無効かどうか
errorTextstringundefined入力のエラーテキスト
classNamestringundefinedスタイリング用の追加CSSクラス名

SignUp.PrivacyPolicy

HTML input要素のすべてのプロパティを継承し、以下を追加します:

プロパティデフォルト説明
namestring"agreesPrivacyPolicy"フォームデータとバリデーションに使用されるフィールド名
labelReactNodeデフォルトプライバシーポリシーリンクプライバシーポリシーチェックボックスラベルのコンテンツ - 通常リンクを含む
isRequiredbooleantrueフィールドが必須かどうか(赤いアスタリスクを表示)
isDisabledbooleanundefined入力が無効かどうか
errorTextstringundefined入力のエラーテキスト
classNamestringundefinedスタイリング用の追加CSSクラス名

SignUp.SignUpButton

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

SignUp.GotoSignIn

HTML div要素のすべてのプロパティを継承し(childrenを除く)、以下を追加します:

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

🔧 TypeScript サポート

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

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

// デフォルトフォームデータ構造
interface DefaultSignUpFormData {
email?: string;
password?: string;
agreesPrivacyPolicy?: boolean;
agreesUserAgreement?: boolean;
}

// カスタムフィールドで拡張
interface CustomSignUpFormData extends DefaultSignUpFormData {
firstName?: string;
lastName?: string;
phone?: string;
}

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

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

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

return (
<SignUp<DefaultSignUpFormData>
onSubmit={handleSubmit}
onChange={handleChange}
defaultData={{email: 'user@example.com'}}>
<SignUp.SignUpTitle>アカウント作成</SignUp.SignUpTitle>
<SignUp.EmailField />
<SignUp.PasswordField />
<SignUp.TermsOfUse
name="agreesUserAgreement"
label={
<span>
<a href="/terms">利用規約</a>に同意します
</span>
}
/>
<SignUp.PrivacyPolicy
name="agreesPrivacyPolicy"
label={
<span>
<a href="/privacy">プライバシーポリシー</a>に同意します
</span>
}
/>
<SignUp.SignUpButton>登録</SignUp.SignUpButton>
<SignUp.GotoSignIn>
<span>
既にアカウントをお持ちですか? <a href="/signin">サインイン</a>
</span>
</SignUp.GotoSignIn>
</SignUp>
);
};

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