Editable
Editableは、インラインで編集可能なテキスト入力を取得するために使用されるコンポーネントです。
<Editable.Root defaultValue="なんとかなれーッ!">
<Editable.Preview />
<Editable.Input />
</Editable.Root>
使い方
import { Editable } from "@yamada-ui/react"
import { Editable } from "@/components/ui"
import { Editable } from "@workspaces/ui"
<Editable.Root>
<Editable.Preview />
<Editable.Input />
<Editable.Textarea />
<Editable.Control>
<Editable.EditTrigger />
<Editable.SubmitTrigger />
<Editable.CancelTrigger />
</Editable.Control>
</Editable.Root>
テキストエリアを使う
<Editable.Root defaultValue={`おやつ…って事!?\nそれって最高じゃん!!`}>
<Editable.Preview />
<Editable.Textarea />
</Editable.Root>
編集モードをデフォルトにする
編集モードをデフォルトにする場合は、startWithEditViewをtrueに設定します。
<Editable.Root defaultValue="なんとかなれーッ!" startWithEditView>
<Editable.Preview />
<Editable.Input />
</Editable.Root>
フォーカスが外れた場合に変更を確定しない
フォーカスが外れた場合に変更を確定しない場合は、submitOnBlurをfalseに設定します。
<Editable.Root defaultValue="なんとかなれーッ!" submitOnBlur={false}>
<Editable.Preview />
<Editable.Input />
</Editable.Root>
フォーカス時に選択しない
フォーカス時にテキストを選択しない場合は、selectAllOnFocusをfalseに設定します。
<Editable.Root defaultValue="なんとかなれーッ!" selectAllOnFocus={false}>
<Editable.Preview />
<Editable.Input />
</Editable.Root>
ボーダーの色を変更する
ボーダーの色を変更する場合は、focusBorderColorまたはerrorBorderColorに値を設定します。
<VStack>
<Editable.Root
defaultValue="Custom focus border color"
focusBorderColor="green.500"
>
<Editable.Preview />
<Editable.Input />
</Editable.Root>
<Editable.Root
defaultValue="Custom error border color"
errorBorderColor="orange.500"
invalid
>
<Editable.Preview />
<Editable.Input />
</Editable.Root>
</VStack>
無効にする
無効にする場合は、disabledをtrueに設定します。
<VStack>
<Editable.Root defaultValue="Your email address" disabled>
<Editable.Preview />
<Editable.Input />
</Editable.Root>
<Field.Root
disabled
helperMessage="We'll never share your email."
label="Email address"
>
<Editable.Root defaultValue="Your email address">
<Editable.Preview />
<Editable.Input />
</Editable.Root>
</Field.Root>
</VStack>
読み取り専用にする
読み取り専用にする場合は、readOnlyをtrueに設定します。
<VStack>
<Editable.Root defaultValue="Your email address" readOnly>
<Editable.Preview />
<Editable.Input />
</Editable.Root>
<Field.Root
readOnly
helperMessage="We'll never share your email."
label="Email address"
>
<Editable.Root defaultValue="Your email address">
<Editable.Preview />
<Editable.Input />
</Editable.Root>
</Field.Root>
</VStack>
無効な入力にする
無効な入力にする場合は、invalidをtrueに設定します。
<VStack>
<Editable.Root defaultValue="Your email address" invalid>
<Editable.Preview />
<Editable.Input />
</Editable.Root>
<Field.Root
invalid
helperMessage="We'll never share your email."
label="Email address"
>
<Editable.Root defaultValue="Your email address">
<Editable.Preview />
<Editable.Input />
</Editable.Root>
</Field.Root>
</VStack>
制御する
<Editable.Root defaultValue="なんとかなれーッ!">
<Editable.Preview />
<Editable.Input />
<Editable.Control>
<Editable.EditTrigger>
<IconButton
size="xs"
variant="ghost"
aria-label="Edit"
icon={<PencilIcon />}
/>
</Editable.EditTrigger>
<Editable.SubmitTrigger>
<IconButton
size="xs"
variant="outline"
aria-label="Submit"
icon={<CheckIcon />}
/>
</Editable.SubmitTrigger>
<Editable.CancelTrigger>
<IconButton
size="xs"
variant="outline"
aria-label="Cancel"
icon={<XIcon />}
/>
</Editable.CancelTrigger>
</Editable.Control>
</Editable.Root>
制御をカスタマイズする
const CustomControls = () => {
const { getCancelProps, getEditProps, getSubmitProps } = Editable.useContext()
return (
<ButtonGroup.Root size="xs">
<ButtonGroup.IconItem
icon={<PencilIcon />}
{...getEditProps()}
variant="ghost"
aria-label="Edit"
/>
<ButtonGroup.IconItem
icon={<CheckIcon />}
{...getSubmitProps()}
variant="outline"
aria-label="Submit"
/>
<ButtonGroup.IconItem
icon={<XIcon />}
{...getCancelProps()}
variant="outline"
aria-label="Cancel"
/>
</ButtonGroup.Root>
)
}
return (
<Editable.Root defaultValue="なんとかなれーッ!" previewFocusable={false}>
<Editable.Preview />
<Editable.Input />
<CustomControls />
</Editable.Root>
)
"use client"をファイルの上部に追加する必要があります。Props
アクセシビリティ
Field.Rootを使用しない場合は、Editable.Rootにaria-labelまたはaria-labelledbyを設定します。
<Editable.Root defaultValue="なんとかなれーッ!" aria-label="Feedback">
<Editable.Preview />
<Editable.Input />
</Editable.Root>
<VStack gap="sm">
<Text as="h3" id="label">
Feedback
</Text>
<Editable.Root defaultValue="なんとかなれーッ!" aria-labelledby="label">
<Editable.Preview />
<Editable.Input />
</Editable.Root>
</VStack>
キーボード操作
| キー | 説明 | 状態 |
|---|---|---|
Enter | Editable.Inputの場合、編集内容を確定します。 | - |
Escape | 編集モードをキャンセルします。 | - |
ARIAロールと属性
| コンポーネント | ロールと属性 | 使い方 |
|---|---|---|
Editable.Input | aria-describedby | Editable.RootがField.Root内にあり、Field.RootにerrorMessageまたはhelperMessage、もしくはField.ErrorMessageまたはField.HelperMessageが設定されている場合は、そのidを設定します。 |
aria-disabled | disabledが設定されている場合は"true"を設定します。 | |
aria-invalid | invalidが設定されている場合は"true"を設定します。 | |
aria-readonly | readOnlyが設定されている場合は"true"を設定します。 | |
aria-required | requiredが設定されている場合は"true"を設定します。 | |
Editable.Textarea | aria-describedby | Editable.RootがField.Root内にあり、Field.RootにerrorMessageまたはhelperMessage、もしくはField.ErrorMessageまたはField.HelperMessageが設定されている場合は、そのidを設定します。 |
aria-disabled | disabledが設定されている場合は"true"を設定します。 | |
aria-invalid | invalidが設定されている場合は"true"を設定します。 | |
aria-readonly | readOnlyが設定されている場合は"true"を設定します。 | |
aria-required | requiredが設定されている場合は"true"を設定します。 | |
Editable.Control | role="group" | グループであることを示します。 |
類似のコンポーネント
Textarea
Textareaは、複数行のテキスト入力を取得するために使用されるコンポーネントです。
PinInput
PinInputは、ピンコードやOTP(ワンタイムパスワード)の入力を取得するために使用されるコンポーネントです。
PasswordInput
PasswordInputは、表示・非表示の切り替えができるパスワード入力用のコンポーネントです。
NumberInput
NumberInputは、ユーザーからの数値入力を取得するために使用されるコンポーネントです。
Input
Inputは、ユーザーからのテキスト入力を取得するために使用されるコンポーネントです。
FileInput
FileInputは、ユーザーがファイルを選択するために使用されるコンポーネントです。
Autocomplete
Autocompleteは、ユーザーのテキスト入力に応じて候補を表示するために使用されるコンポーネントです。
Switch
Switchは、オンとオフの状態を切り替えるために使用されるコンポーネントです。