# Editable
URL: https://ark-ui.com/docs/components/editable
Source: https://raw.githubusercontent.com/chakra-ui/ark/refs/heads/main/website/src/content/pages/components/editable.mdx
A component that allows users to edit text in place.
---
## Anatomy
To set up the editable correctly, you'll need to understand its anatomy and how we name its parts.
> Each part includes a `data-part` attribute to help identify them in the DOM.
## Examples
Learn how to use the `Editable` component in your project. Let's take a look at the most basic example:
**Example: basic**
#### React
```tsx
import { Editable } from '@ark-ui/react/editable'
export const Basic = () => (
Label
)
```
#### Solid
```tsx
import { Editable } from '@ark-ui/solid/editable'
export const Basic = () => (
Label
)
```
#### Vue
```vue
Label
```
#### Svelte
```svelte
Label
```
### Custom controls
In some cases, you might need to use custom controls to toggle the edit and read mode. We use the render prop pattern to
provide access to the internal state of the component.
**Example: custom-controls**
#### React
```tsx
import { Editable } from '@ark-ui/react/editable'
export const CustomControls = () => (
Label
{(editable) => (
{editable.editing ? (
<>
SaveCancel
>
) : (
Edit
)}
)}
)
```
#### Solid
```tsx
import { Editable } from '@ark-ui/solid/editable'
import { Show } from 'solid-js'
export const CustomControls = () => (
Label
{(editable) => (
Edit}>
SaveCanvel
)}
)
```
#### Vue
```vue
LabelSaveCancelEdit
```
#### Svelte
```svelte
Label
{#snippet render(editable)}
{#if editable().editing}
SaveCancel
{:else}
Edit
{/if}
{/snippet}
```
### Field
The `Field` component helps manage form-related state and accessibility attributes of an editable. It includes handling
ARIA labels, helper text, and error text to ensure proper accessibility.
**Example: with-field**
#### React
```tsx
import { Editable } from '@ark-ui/react/editable'
import { Field } from '@ark-ui/react/field'
export const WithField = (props: Field.RootProps) => (
LabelAdditional InfoError Info
)
```
#### Solid
```tsx
import { Editable } from '@ark-ui/solid/editable'
import { Field } from '@ark-ui/solid/field'
export const WithField = (props: Field.RootProps) => (
LabelAdditional InfoError Info
)
```
#### Vue
```vue
LabelAdditional InfoError Info
```
#### Svelte
```svelte
LabelAdditional InfoError Info
```
### Root Provider
Use the `useEditable` hook to create the editable store and pass it to the `Editable.RootProvider` component. This
allows you to have maximum control over the editable programmatically.
**Example: root-provider**
#### React
```tsx
import { Editable, useEditable } from '@ark-ui/react/editable'
export const RootProvider = () => {
const editable = useEditable({ placeholder: 'Placeholder' })
return (
<>
Label
>
)
}
```
#### Solid
```tsx
import { Editable, useEditable } from '@ark-ui/solid/editable'
export const RootProvider = () => {
const editable = useEditable({ placeholder: 'Placeholder' })
return (
<>
Label
>
)
}
```
#### Vue
```vue
Label
```
#### Svelte
```svelte
Label
```
> If you're using the `Editable.RootProvider` component, you don't need to use the `Editable.Root` component.
## Guides
### Auto-resizing
To auto-grow the editable as the content changes, set the `autoResize` prop to `true`.
```tsx
{/*...*/}
```
### Max Length
Use the `maxLength` prop to set a maximum number of characters that can be entered into the editable.
```tsx
{/*...*/}
```
### Double click activation
The editable supports two modes of activating the "edit" state:
- when the preview part is focused (with pointer or keyboard).
- when the preview part is double-clicked.
To change the mode to double-click, pass the prop `activationMode="dblclick"`.
```tsx
{/*...*/}
```
## API Reference
### Props
**Component API Reference**
#### React
**Root Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `activationMode` | `ActivationMode` | No | The activation mode for the preview element.
- "focus" - Enter edit mode when the preview is focused
- "dblclick" - Enter edit mode when the preview is double-clicked
- "click" - Enter edit mode when the preview is clicked
- "none" - Edit can be triggered programmatically only |
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `autoResize` | `boolean` | No | Whether the editable should auto-resize to fit the content. |
| `defaultEdit` | `boolean` | No | Whether the editable is in edit mode by default. |
| `defaultValue` | `string` | No | The initial value of the editable when rendered.
Use when you don't need to control the value of the editable. |
| `disabled` | `boolean` | No | Whether the editable is disabled. |
| `edit` | `boolean` | No | Whether the editable is in edit mode. |
| `finalFocusEl` | `() => HTMLElement | null` | No | The element to receive focus when the editable is closed. |
| `form` | `string` | No | The associate form of the underlying input. |
| `id` | `string` | No | The unique identifier of the machine. |
| `ids` | `Partial<{
root: string
area: string
label: string
preview: string
input: string
control: string
submitTrigger: string
cancelTrigger: string
editTrigger: string
}>` | No | The ids of the elements in the editable. Useful for composition. |
| `invalid` | `boolean` | No | Whether the input's value is invalid. |
| `maxLength` | `number` | No | The maximum number of characters allowed in the editable |
| `name` | `string` | No | The name attribute of the editable component. Used for form submission. |
| `onEditChange` | `(details: EditChangeDetails) => void` | No | Function to call when the edit mode changes. |
| `onFocusOutside` | `(event: FocusOutsideEvent) => void` | No | Function called when the focus is moved outside the component |
| `onInteractOutside` | `(event: InteractOutsideEvent) => void` | No | Function called when an interaction happens outside the component |
| `onPointerDownOutside` | `(event: PointerDownOutsideEvent) => void` | No | Function called when the pointer is pressed down outside the component |
| `onValueChange` | `(details: ValueChangeDetails) => void` | No | Function to call when the value changes. |
| `onValueCommit` | `(details: ValueChangeDetails) => void` | No | Function to call when the value is committed. |
| `onValueRevert` | `(details: ValueChangeDetails) => void` | No | Function to call when the value is reverted. |
| `placeholder` | `string | { edit: string; preview: string }` | No | The placeholder text for the editable. |
| `readOnly` | `boolean` | No | Whether the editable is read-only. |
| `required` | `boolean` | No | Whether the editable is required. |
| `selectOnFocus` | `boolean` | No | Whether to select the text in the input when it is focused. |
| `submitMode` | `SubmitMode` | No | The action that triggers submit in the edit mode:
- "enter" - Trigger submit when the enter key is pressed
- "blur" - Trigger submit when the editable is blurred
- "none" - No action will trigger submit. You need to use the submit button
- "both" - Pressing `Enter` and blurring the input will trigger submit |
| `translations` | `IntlTranslations` | No | The translations for the editable. |
| `value` | `string` | No | The controlled value of the editable. |
**Area Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Area Data Attributes:**
| Attribute | Value |
|-----------|-------|
| `[data-scope]` | editable |
| `[data-part]` | area |
| `[data-focus]` | Present when focused |
| `[data-disabled]` | Present when disabled |
| `[data-placeholder-shown]` | Present when placeholder is shown |
**CancelTrigger Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Control Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**EditTrigger Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Input Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Input Data Attributes:**
| Attribute | Value |
|-----------|-------|
| `[data-scope]` | editable |
| `[data-part]` | input |
| `[data-disabled]` | Present when disabled |
| `[data-readonly]` | Present when read-only |
| `[data-invalid]` | Present when invalid |
| `[data-autoresize]` | |
**Label Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Label Data Attributes:**
| Attribute | Value |
|-----------|-------|
| `[data-scope]` | editable |
| `[data-part]` | label |
| `[data-focus]` | Present when focused |
| `[data-invalid]` | Present when invalid |
**Preview Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Preview Data Attributes:**
| Attribute | Value |
|-----------|-------|
| `[data-scope]` | editable |
| `[data-part]` | preview |
| `[data-placeholder-shown]` | Present when placeholder is shown |
| `[data-readonly]` | Present when read-only |
| `[data-disabled]` | Present when disabled |
| `[data-invalid]` | Present when invalid |
| `[data-autoresize]` | |
**RootProvider Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `value` | `UseEditableReturn` | Yes | |
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**SubmitTrigger Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
#### Solid
**Root Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `activationMode` | `ActivationMode` | No | The activation mode for the preview element.
- "focus" - Enter edit mode when the preview is focused
- "dblclick" - Enter edit mode when the preview is double-clicked
- "click" - Enter edit mode when the preview is clicked
- "none" - Edit can be triggered programmatically only |
| `asChild` | `(props: ParentProps<'div'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `autoResize` | `boolean` | No | Whether the editable should auto-resize to fit the content. |
| `defaultEdit` | `boolean` | No | Whether the editable is in edit mode by default. |
| `defaultValue` | `string` | No | The initial value of the editable when rendered.
Use when you don't need to control the value of the editable. |
| `disabled` | `boolean` | No | Whether the editable is disabled. |
| `edit` | `boolean` | No | Whether the editable is in edit mode. |
| `finalFocusEl` | `() => HTMLElement | null` | No | The element to receive focus when the editable is closed. |
| `form` | `string` | No | The associate form of the underlying input. |
| `ids` | `Partial<{
root: string
area: string
label: string
preview: string
input: string
control: string
submitTrigger: string
cancelTrigger: string
editTrigger: string
}>` | No | The ids of the elements in the editable. Useful for composition. |
| `invalid` | `boolean` | No | Whether the input's value is invalid. |
| `maxLength` | `number` | No | The maximum number of characters allowed in the editable |
| `name` | `string` | No | The name attribute of the editable component. Used for form submission. |
| `onEditChange` | `(details: EditChangeDetails) => void` | No | Function to call when the edit mode changes. |
| `onFocusOutside` | `(event: FocusOutsideEvent) => void` | No | Function called when the focus is moved outside the component |
| `onInteractOutside` | `(event: InteractOutsideEvent) => void` | No | Function called when an interaction happens outside the component |
| `onPointerDownOutside` | `(event: PointerDownOutsideEvent) => void` | No | Function called when the pointer is pressed down outside the component |
| `onValueChange` | `(details: ValueChangeDetails) => void` | No | Function to call when the value changes. |
| `onValueCommit` | `(details: ValueChangeDetails) => void` | No | Function to call when the value is committed. |
| `onValueRevert` | `(details: ValueChangeDetails) => void` | No | Function to call when the value is reverted. |
| `placeholder` | `string | { edit: string; preview: string }` | No | The placeholder text for the editable. |
| `readOnly` | `boolean` | No | Whether the editable is read-only. |
| `required` | `boolean` | No | Whether the editable is required. |
| `selectOnFocus` | `boolean` | No | Whether to select the text in the input when it is focused. |
| `submitMode` | `SubmitMode` | No | The action that triggers submit in the edit mode:
- "enter" - Trigger submit when the enter key is pressed
- "blur" - Trigger submit when the editable is blurred
- "none" - No action will trigger submit. You need to use the submit button
- "both" - Pressing `Enter` and blurring the input will trigger submit |
| `translations` | `IntlTranslations` | No | The translations for the editable. |
| `value` | `string` | No | The controlled value of the editable. |
**Area Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `(props: ParentProps<'div'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Area Data Attributes:**
| Attribute | Value |
|-----------|-------|
| `[data-scope]` | editable |
| `[data-part]` | area |
| `[data-focus]` | Present when focused |
| `[data-disabled]` | Present when disabled |
| `[data-placeholder-shown]` | Present when placeholder is shown |
**CancelTrigger Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `(props: ParentProps<'button'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Control Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `(props: ParentProps<'div'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**EditTrigger Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `(props: ParentProps<'button'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Input Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `(props: ParentProps<'input'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Input Data Attributes:**
| Attribute | Value |
|-----------|-------|
| `[data-scope]` | editable |
| `[data-part]` | input |
| `[data-disabled]` | Present when disabled |
| `[data-readonly]` | Present when read-only |
| `[data-invalid]` | Present when invalid |
| `[data-autoresize]` | |
**Label Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `(props: ParentProps<'label'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Label Data Attributes:**
| Attribute | Value |
|-----------|-------|
| `[data-scope]` | editable |
| `[data-part]` | label |
| `[data-focus]` | Present when focused |
| `[data-invalid]` | Present when invalid |
**Preview Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `(props: ParentProps<'span'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Preview Data Attributes:**
| Attribute | Value |
|-----------|-------|
| `[data-scope]` | editable |
| `[data-part]` | preview |
| `[data-placeholder-shown]` | Present when placeholder is shown |
| `[data-readonly]` | Present when read-only |
| `[data-disabled]` | Present when disabled |
| `[data-invalid]` | Present when invalid |
| `[data-autoresize]` | |
**RootProvider Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `value` | `UseEditableReturn` | Yes | |
| `asChild` | `(props: ParentProps<'div'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**SubmitTrigger Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `(props: ParentProps<'button'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
#### Vue
**Root Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `activationMode` | `ActivationMode` | No | The activation mode for the preview element.
- "focus" - Enter edit mode when the preview is focused
- "dblclick" - Enter edit mode when the preview is double-clicked
- "click" - Enter edit mode when the preview is clicked |
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `autoResize` | `boolean` | No | Whether the editable should auto-resize to fit the content. |
| `defaultEdit` | `boolean` | No | Whether the editable is in edit mode by default. |
| `defaultValue` | `string` | No | The initial value of the editable when rendered.
Use when you don't need to control the value of the editable. |
| `disabled` | `boolean` | No | Whether the editable is disabled. |
| `edit` | `boolean` | No | Whether the editable is in edit mode. |
| `finalFocusEl` | `() => HTMLElement | null` | No | The element to receive focus when the editable is closed. |
| `form` | `string` | No | The associate form of the underlying input. |
| `id` | `string` | No | The unique identifier of the machine. |
| `ids` | `Partial<{
root: string
area: string
label: string
preview: string
input: string
control: string
submitTrigger: string
cancelTrigger: string
editTrigger: string
}>` | No | The ids of the elements in the editable. Useful for composition. |
| `invalid` | `boolean` | No | Whether the input's value is invalid. |
| `maxLength` | `number` | No | The maximum number of characters allowed in the editable |
| `modelValue` | `string` | No | The v-model value of the editable |
| `name` | `string` | No | The name attribute of the editable component. Used for form submission. |
| `placeholder` | `string | { edit: string; preview: string }` | No | The placeholder text for the editable. |
| `readOnly` | `boolean` | No | Whether the editable is read-only. |
| `required` | `boolean` | No | Whether the editable is required. |
| `selectOnFocus` | `boolean` | No | Whether to select the text in the input when it is focused. |
| `submitMode` | `SubmitMode` | No | The action that triggers submit in the edit mode:
- "enter" - Trigger submit when the enter key is pressed
- "blur" - Trigger submit when the editable is blurred
- "none" - No action will trigger submit. You need to use the submit button
- "both" - Pressing `Enter` and blurring the input will trigger submit |
| `translations` | `IntlTranslations` | No | The translations for the editable. |
**Area Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Area Data Attributes:**
| Attribute | Value |
|-----------|-------|
| `[data-scope]` | editable |
| `[data-part]` | area |
| `[data-focus]` | Present when focused |
| `[data-disabled]` | Present when disabled |
| `[data-placeholder-shown]` | Present when placeholder is shown |
**CancelTrigger Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Control Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**EditTrigger Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Input Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Input Data Attributes:**
| Attribute | Value |
|-----------|-------|
| `[data-scope]` | editable |
| `[data-part]` | input |
| `[data-disabled]` | Present when disabled |
| `[data-readonly]` | Present when read-only |
| `[data-invalid]` | Present when invalid |
| `[data-autoresize]` | |
**Label Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Label Data Attributes:**
| Attribute | Value |
|-----------|-------|
| `[data-scope]` | editable |
| `[data-part]` | label |
| `[data-focus]` | Present when focused |
| `[data-invalid]` | Present when invalid |
**Preview Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Preview Data Attributes:**
| Attribute | Value |
|-----------|-------|
| `[data-scope]` | editable |
| `[data-part]` | preview |
| `[data-placeholder-shown]` | Present when placeholder is shown |
| `[data-readonly]` | Present when read-only |
| `[data-disabled]` | Present when disabled |
| `[data-invalid]` | Present when invalid |
| `[data-autoresize]` | |
**RootProvider Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `value` | `EditableApi` | Yes | |
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**SubmitTrigger Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
#### Svelte
**Root Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `activationMode` | `ActivationMode` | No | The activation mode for the preview element.
- "focus" - Enter edit mode when the preview is focused
- "dblclick" - Enter edit mode when the preview is double-clicked
- "click" - Enter edit mode when the preview is clicked
- "none" - Edit can be triggered programmatically only |
| `autoResize` | `boolean` | No | Whether the editable should auto-resize to fit the content. |
| `defaultEdit` | `boolean` | No | Whether the editable is in edit mode by default. |
| `defaultValue` | `string` | No | The initial value of the editable when rendered.
Use when you don't need to control the value of the editable. |
| `disabled` | `boolean` | No | Whether the editable is disabled. |
| `edit` | `boolean` | No | Whether the editable is in edit mode. |
| `finalFocusEl` | `() => HTMLElement | null` | No | The element to receive focus when the editable is closed. |
| `form` | `string` | No | The associate form of the underlying input. |
| `id` | `string` | No | The unique identifier of the machine. |
| `ids` | `Partial<{
root: string
area: string
label: string
preview: string
input: string
control: string
submitTrigger: string
cancelTrigger: string
editTrigger: string
}>` | No | The ids of the elements in the editable. Useful for composition. |
| `invalid` | `boolean` | No | Whether the input's value is invalid. |
| `maxLength` | `number` | No | The maximum number of characters allowed in the editable |
| `name` | `string` | No | The name attribute of the editable component. Used for form submission. |
| `onEditChange` | `(details: EditChangeDetails) => void` | No | Function to call when the edit mode changes. |
| `onFocusOutside` | `(event: FocusOutsideEvent) => void` | No | Function called when the focus is moved outside the component |
| `onInteractOutside` | `(event: InteractOutsideEvent) => void` | No | Function called when an interaction happens outside the component |
| `onPointerDownOutside` | `(event: PointerDownOutsideEvent) => void` | No | Function called when the pointer is pressed down outside the component |
| `onValueChange` | `(details: ValueChangeDetails) => void` | No | Function to call when the value changes. |
| `onValueCommit` | `(details: ValueChangeDetails) => void` | No | Function to call when the value is committed. |
| `onValueRevert` | `(details: ValueChangeDetails) => void` | No | Function to call when the value is reverted. |
| `placeholder` | `string | { edit: string; preview: string }` | No | The placeholder text for the editable. |
| `readOnly` | `boolean` | No | Whether the editable is read-only. |
| `ref` | `Element` | No | |
| `required` | `boolean` | No | Whether the editable is required. |
| `selectOnFocus` | `boolean` | No | Whether to select the text in the input when it is focused. |
| `submitMode` | `SubmitMode` | No | The action that triggers submit in the edit mode:
- "enter" - Trigger submit when the enter key is pressed
- "blur" - Trigger submit when the editable is blurred
- "none" - No action will trigger submit. You need to use the submit button
- "both" - Pressing `Enter` and blurring the input will trigger submit |
| `translations` | `IntlTranslations` | No | The translations for the editable. |
| `value` | `string` | No | The controlled value of the editable. |
**Area Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `Snippet<[PropsFn<'div'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `ref` | `Element` | No | |
**Area Data Attributes:**
| Attribute | Value |
|-----------|-------|
| `[data-scope]` | editable |
| `[data-part]` | area |
| `[data-focus]` | Present when focused |
| `[data-disabled]` | Present when disabled |
| `[data-placeholder-shown]` | Present when placeholder is shown |
**CancelTrigger Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `Snippet<[PropsFn<'button'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `ref` | `Element` | No | |
**Context Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `render` | `Snippet<[UseEditableContext]>` | Yes | |
**Control Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `Snippet<[PropsFn<'div'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `ref` | `Element` | No | |
**EditTrigger Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `Snippet<[PropsFn<'button'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `ref` | `Element` | No | |
**Input Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `Snippet<[PropsFn<'input'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `ref` | `Element` | No | |
**Input Data Attributes:**
| Attribute | Value |
|-----------|-------|
| `[data-scope]` | editable |
| `[data-part]` | input |
| `[data-disabled]` | Present when disabled |
| `[data-readonly]` | Present when read-only |
| `[data-invalid]` | Present when invalid |
| `[data-autoresize]` | |
**Label Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `Snippet<[PropsFn<'label'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `ref` | `Element` | No | |
**Label Data Attributes:**
| Attribute | Value |
|-----------|-------|
| `[data-scope]` | editable |
| `[data-part]` | label |
| `[data-focus]` | Present when focused |
| `[data-invalid]` | Present when invalid |
**Preview Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `Snippet<[PropsFn<'span'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `ref` | `Element` | No | |
**Preview Data Attributes:**
| Attribute | Value |
|-----------|-------|
| `[data-scope]` | editable |
| `[data-part]` | preview |
| `[data-placeholder-shown]` | Present when placeholder is shown |
| `[data-readonly]` | Present when read-only |
| `[data-disabled]` | Present when disabled |
| `[data-invalid]` | Present when invalid |
| `[data-autoresize]` | |
**RootProvider Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `value` | `UseEditableReturn` | Yes | |
| `asChild` | `Snippet<[PropsFn<'div'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `ref` | `Element` | No | |
**SubmitTrigger Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `Snippet<[PropsFn<'button'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `ref` | `Element` | No | |
### Context
These are the properties available when using `Editable.Context`, `useEditableContext` hook or `useEditable` hook.
**API:**
| Property | Type | Description |
|----------|------|-------------|
| `editing` | `boolean` | Whether the editable is in edit mode |
| `empty` | `boolean` | Whether the editable value is empty |
| `value` | `string` | The current value of the editable |
| `valueText` | `string` | The current value of the editable, or the placeholder if the value is empty |
| `setValue` | `(value: string) => void` | Function to set the value of the editable |
| `clearValue` | `VoidFunction` | Function to clear the value of the editable |
| `edit` | `VoidFunction` | Function to enter edit mode |
| `cancel` | `VoidFunction` | Function to exit edit mode, and discard any changes |
| `submit` | `VoidFunction` | Function to exit edit mode, and submit any changes |
## Accessibility
### Keyboard Support