diff --git a/docs/content/components/editable.md b/docs/content/components/editable.md
index b115ce59c..9ef8d09ad 100644
--- a/docs/content/components/editable.md
+++ b/docs/content/components/editable.md
@@ -146,6 +146,27 @@ Contains the cancel trigger of the editable component.
+## Examples
+
+### Change only on submit
+
+By default the component will submit when `blur` event triggers. We can modify the `submit-mode` prop to alter this behavior.
+In this case, we want to submit only when user click on `EditableSubmitTrigger`, so we change the submit mode to `none`.
+
+```vue line=2,8
+
+
+
+
+
+
+
+
+
+
+
+```
+
## Accessibility
### Keyboard Interactions
diff --git a/packages/radix-vue/src/Editable/Editable.test.ts b/packages/radix-vue/src/Editable/Editable.test.ts
index 35d4035ae..d6ee4fc77 100644
--- a/packages/radix-vue/src/Editable/Editable.test.ts
+++ b/packages/radix-vue/src/Editable/Editable.test.ts
@@ -83,7 +83,7 @@ describe('editable', () => {
})
it('submits the value when pressing enter', async () => {
- const { input, preview, rerender } = setup({ editableProps: { modelValue: '' }, emits: { 'onUpdate:modelValue': (data: string) => rerender({ modelValue: data }) } })
+ const { input, preview, rerender } = setup({ editableProps: { modelValue: '', submitMode: 'enter' }, emits: { 'onUpdate:modelValue': (data: string) => rerender({ modelValue: data }) } })
await userEvent.type(input, 'New Value')
await userEvent.keyboard(kbd.ENTER)
@@ -94,8 +94,10 @@ describe('editable', () => {
it('submits the value on blur', async () => {
const { input, preview, rerender } = setup({ editableProps: { modelValue: '', submitMode: 'blur' }, emits: { 'onUpdate:modelValue': (data: string) => rerender({ modelValue: data, submitMode: 'blur' }) } })
+ await userEvent.dblClick(preview)
await userEvent.type(input, 'New Value')
- await userEvent.tab()
+ await userEvent.click(document.children[0])
+
expect(preview).toBeVisible()
expect(preview).toHaveTextContent('New Value')
})
@@ -112,8 +114,10 @@ describe('editable', () => {
it('submits the value on blur if submitMode is both', async () => {
const { input, preview, rerender } = setup({ editableProps: { modelValue: '', submitMode: 'both' }, emits: { 'onUpdate:modelValue': (data: string) => rerender({ modelValue: data, submitMode: 'blur' }) } })
+ await userEvent.dblClick(preview)
await userEvent.type(input, 'New Value')
- await userEvent.tab()
+ await userEvent.click(document.children[0])
+
expect(preview).toBeVisible()
expect(preview).toHaveTextContent('New Value')
})
diff --git a/packages/radix-vue/src/Editable/EditableInput.vue b/packages/radix-vue/src/Editable/EditableInput.vue
index c1e276a21..a4a898d49 100644
--- a/packages/radix-vue/src/Editable/EditableInput.vue
+++ b/packages/radix-vue/src/Editable/EditableInput.vue
@@ -53,7 +53,7 @@ function handleSubmitKeyDown(event: KeyboardEvent) {
diff --git a/packages/radix-vue/src/Editable/EditableRoot.vue b/packages/radix-vue/src/Editable/EditableRoot.vue
index 1b445be9f..a005356e4 100644
--- a/packages/radix-vue/src/Editable/EditableRoot.vue
+++ b/packages/radix-vue/src/Editable/EditableRoot.vue
@@ -13,6 +13,7 @@ type EditableRootContext = {
maxLength: Ref
disabled: Ref
modelValue: Ref
+ inputValue: Ref
placeholder: Ref<{ edit: string, preview: string }>
isEditing: Ref
submitMode: Ref
@@ -75,7 +76,7 @@ export const [injectEditableRootContext, provideEditableRootContext]