- Accordion new
- ActionSheet new
- Alert new
- Alert Dialog new
- Angle Slider new
- Autocomplete new
- Avatar new
- Badge new
- Breadcrumb new
- Button new
- Button Group new
- Card new
- Carousel new
- Checkbox new
- Clipboard new
- Collapsible new
- Color Picker new
- Date Input new
- Date Picker new
- Dialog new
- DialogCaller new
- Drawer beta
- Editable new
- Empty new
- Field new
- Fieldset new
- File Upload new
- Filters new
- Floating Panel new
- Hover Card new
- Image new
- Image Cropper new
- Input new
- Input Group new
- Json Tree View new
- Kbd new
- Listbox new
- Marquee new
- Menu new
- Number Input new
- Pagination new
- Password Input new
- PhoneField new
- Pin Input new
- Popover new
- Progress Circular new
- Progress Linear new
- Qr Code new
- Radio Group new
- Rating Group new
- Scroll Area new
- ScrollSpy new
- Segment Group new
- Select new
- Separator new
- Sidebar new
- Signature Pad new
- Skeleton new
- Slider new
- Splitter new
- Steps new
- Switch new
- Table new
- Tabs new
- Tags Input new
- Textarea new
- Timeline new
- Timer new
- Toast new
- Toc new
- Toggle new
- Toggle Group new
- Tooltip new
- Tour new
- Tree View new
- Typography new
Editable
Vue editable text field that switches between read and edit modes for inline content updates.
Installation
Install from the Vuzeno registry:
bunx --bun shadcn-vue@latest add https://vuzeno.com/r/editable.json
npx shadcn-vue@latest add https://vuzeno.com/r/editable.json
yarn dlx shadcn-vue@latest add https://vuzeno.com/r/editable.json
pnpm dlx shadcn-vue@latest add https://vuzeno.com/r/editable.json
Usage
Wrap Editable in Field and use Field.Label instead of a dedicated editable label.
<script setup lang="ts">
import { Button } from "@/components/ui/button";
import { Editable } from "@/components/ui/editable";
import { Field } from "@/components/ui/field";
</script>
<template>
<Field.Root>
<Field.Label>Label</Field.Label>
<Editable.Root placeholder="Enter text..." default-value="Hello World">
<Editable.Area>
<Editable.Input />
<Editable.Preview />
</Editable.Area>
<Editable.Control>
<Editable.EditTrigger>
<Button variant="link" size="sm">Edit</Button>
</Editable.EditTrigger>
</Editable.Control>
</Editable.Root>
</Field.Root>
</template>
Examples
Controlled
Use the value and onValueChange props to control the editable state.
Root Provider
An alternative way to control the editable is to use the RootProvider component and the useEditable hook. This way you can access the state and methods from outside the component.
Context
Access the editable's state with Editable.Context or the useEditableContext hook—great for showing keyboard hints when editing.
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.
Textarea
Use the asChild prop on Editable.Input to render a textarea for multi-line editing.
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.
Composition
Field.Root
├── Field.Label
├── Editable.Root
│ ├── Editable.Area
│ │ ├── Editable.Input
│ │ └── Editable.Preview
│ ├── Editable.Control
│ │ ├── Editable.EditTrigger
│ │ ├── Editable.SubmitTrigger
│ │ └── Editable.CancelTrigger
│ └── Editable.Context
└── Field.HelperText / Field.ErrorText
API
See Ark UI Editable docs for full props and examples.