本文へ移動

UIコンポーネント

@seams/wallet/reactが提供する既製のReactコンポーネント、それぞれが表示する内容、プロパティと実装例の参照先。

UIコンポーネント ​

@seams/wallet/reactは、サインイン、ウォレット設定、デバイスのリンク、取引の確認に使う既製のコンポーネントを提供します。 スタイルシートを一度だけインポートします。モック以外のコンポーネントは、すべてSeamsWebProvider内に配置します。

tsx
import { SeamsWebProvider, HostedSeamsAuthMenu, AccountMenuButton } from '@seams/wallet/react';
import '@seams/wallet/react/styles';

コンポーネントの一覧 ​

コンポーネント表示する内容プロバイダー
HostedSeamsAuthMenuウォレットオリジン上の、サインイン、登録、復旧の完全なメニュー。必要
SeamsAuthMenuMock操作できない、認証メニューの静的なプレビュー。不要
AccountMenuButtonウォレット設定をドロップダウン、モーダル、ドロワーで開くアカウントボタン。必要
ProfileSettingsButtonAccountMenuButtonと同じコンポーネントの別名。必要
AccountMenuButtonMockサンプルデータを使う、操作できるアカウントメニューのプレビュー。不要
WalletSettingsPageページ全体のウォレット設定。未サインインの場合はホストする認証を表示。必要
ShowQRCode新しいデバイスのリンクコード。開始から期限切れまでを処理。必要
QRCodeScanner既存デバイスのカメラスキャナーとリンクの承認。必要
TransactionReviewHostウォレットの承認前に独自の確認内容を表示するダイアログ。必要
ExternalEvmWalletPickerブラウザーに注入されたEVMウォレットのセレクター。不要
Theme配下のすべてのコンポーネントにテーマトークンを提供。不要

独自のコントロールに使う小さなアイコンとして、TouchIcon、QRCodeIcon、SunIcon、MoonIconも提供します。

インポートを小さくする場合や、SSRで使う場合は、個別のエントリーポイントを使います。

  • @seams/wallet/react/hosted-seams-auth-menu:認証メニューとそのモック。
  • @seams/wallet/react/profile:アカウントメニュー、そのモック、設定ページ。
  • @seams/wallet/react/provider:SeamsWebProvider。
  • @seams/wallet/react/external-near:外部NEARウォレットのセレクター(開発プレビュー)。

サインイン ​

HostedSeamsAuthMenuは、認証体験全体をウォレットオリジン上に表示します。 アプリのページは、マウントしたセッションごとに1つの結果をonOutcomeで受け取ります。 主な任意のプロパティは次のとおりです。

  • initialMode:最初の画面を選択します。既定はサインインです。
  • walletAlternatives:外部のNEARウォレットとEVMウォレットをメニューに追加します。
  • recoveryOptions:復旧とデバイスのリンクを表示、折りたたみ、非表示にします。
  • footerBrand:「Secured by seams」の行をアプリのロゴに置き換えます。
  • copy:メニューの文言を変更します。
  • placeholder:メニューの読み込み中に、操作できない独自の内容を表示します。

各プロパティはホストする認証メニューを、サインインの流れは認証を参照してください。

ウォレット設定 ​

AccountMenuButtonは、アカウント、認証方式、復旧コード、リンク済みデバイス、エクスポート、取引の設定を開きます。 nearAccountIdが必要です。既定のpresentation="dropdown"は、SDKのトリガーボタンを含みます。 "modal"または"drawer"の場合は、isMenuOpenとonMenuOpenChangeを使い、アプリ独自のボタンから設定を開きます。

WalletSettingsPageは、同じ設定をページ全体に表示します。ウォレットのリージョン設定も表示します。 表示方法、ドロワーの動作、リージョン設定はReactコンポーネントを参照してください。

デバイスのリンク ​

デバイスのリンクには、各デバイスに1つずつ、2つのコンポーネントを使います。

  1. 新しいデバイスでは、ShowQRCodeがリンクセッションを開始し、コードを表示します。
  2. 既存のデバイスでは、QRCodeScannerがコードを読み取り、承認を実行します。
tsx
import { useState } from 'react';
import { QRCodeScanner } from '@seams/wallet/react';
import type { LinkDeviceFlowEvent } from '@seams/wallet';

function logLinkEvent(event: LinkDeviceFlowEvent): void {
  console.log(event.phase, event.status, event.message);
}

// Device 1: `QRCodeScanner` opens the camera, reads the code that `ShowQRCode`
// displays on Device 2, and runs the approval. Mount it inside SeamsWebProvider.
export function ScanLinkCode() {
  const [isOpen, setIsOpen] = useState(false);

  return (
    <>
      <button onClick={() => setIsOpen(true)}>Link a new device</button>
      {isOpen && (
        <QRCodeScanner
          isOpen={isOpen}
          onQRCodeScanned={(qrData) => console.log('Linked device', qrData)}
          onEvent={logLinkEvent}
          onError={(error) => console.error('Device link failed', error)}
          onClose={() => setIsOpen(false)}
        />
      )}
    </>
  );
}

QRCodeScannerは、新しいデバイスが有効になった後にonQRCodeScannedを呼び出し、その後onCloseを呼び出します。 onEventは、リンクの進行イベントを1つずつ受け取ります。 セッションが期限切れになると、スキャナーは期限切れの画面を表示します。 リンクの途中でスキャナーを閉じると、スキャナーはリンクを取り消します。

プロパティ目的
isOpenカメラを開始・停止します。既定はtrueです。
presentationダイアログには"modal"(既定)、ページ内表示には"embedded"。
cameraIdカメラを選択します。既定ではブラウザーが選択します。
showCamerafalseにすると、カメラを停止したままにします。
onQRCodeScannedリンクの成功後に、読み取ったペイロードを受け取ります。
onEvent各LinkDeviceFlowEventを受け取ります。
onErrorカメラとリンクの失敗を受け取ります。
onCloseスキャナーが閉じたときに一度だけ実行します。

アカウントメニューには、スキャナーがすでに含まれています。 そのイベントを受け取るには、AccountMenuButtonのdeviceLinkingScannerParamsを使います。 流れはリンク済みデバイスを、ShowQRCodeの実装例はウォレットの高度な操作を参照してください。

外部ウォレット ​

ExternalEvmWalletPickerは、useExternalEvmが検出した、ブラウザーに注入されたEVMウォレットを表示します。 コントローラーとそのスナップショットを受け取ります。外部EVMウォレットを参照してください。

取引の確認 ​

TransactionReviewHostは、ウォレットの承認前にアプリ独自のReactの内容を表示します。 useSeams().walletの署名メソッドにreviewを渡します。独自の確認コンポーネントを参照してください。

ウォレットなしのプレビュー ​

SeamsAuthMenuMockとAccountMenuButtonMockには、プロバイダーが不要です。 セッションの作成、署名、鍵のエクスポート、ウォレットストレージの読み取りは行いません。 デザインの確認、読み込み中の表示、マーケティングページに使います。

tsx
import { AccountMenuButtonMock } from '@seams/wallet/react/profile';
import '@seams/wallet/react/styles';

<AccountMenuButtonMock username="Alex Chen" walletId="alex.near" theme="light" />;

外観 ​

すべてのコンポーネントはThemeのトークンを使います。 認証メニューや取引の確認画面などのウォレットオリジン側の画面は、SDKに送った外観の設定を使います。 両方を同じプリセットから設定します。テーマの設定とUIのカスタマイズを参照してください。