Skip to content

Editable

Inline-editable text: a preview that becomes an input on activation, with submit/cancel.

html
<div
  data-controller="zag-editable"
  data-part="root"
  data-zag-editable-value-value="Ada Lovelace"
  class="max-w-sm"
>
  <div data-part="area" class="flex items-center gap-2">
    <span data-part="preview" class="hover:bg-accent rounded px-2 py-1 text-sm"></span>
    <input
      data-part="input"
      class="border-input focus:ring-ring/50 rounded border px-2 py-1 text-sm focus:outline-none focus:ring-2"
    />
    <div data-part="control" class="flex gap-1">
      <button data-part="edit-trigger" class="text-primary text-sm hover:underline">Edit</button>
      <button data-part="submit-trigger" class="text-success text-sm hover:underline">Save</button>
      <button data-part="cancel-trigger" class="text-muted-foreground text-sm hover:underline">
        Cancel
      </button>
    </div>
  </div>
</div>

Parts

root, label, area, preview, input, control, edit-trigger, submit-trigger, cancel-trigger.

Values

AttributeTypeDefaultDescription
data-zag-editable-value-valueString""Initial value.
data-zag-editable-placeholder-valueString""Placeholder when empty.
data-zag-editable-activation-mode-valueString"click""focus", "dblclick", "click", "none".
data-zag-editable-submit-mode-valueString"both""enter", "blur", "both", "none".
data-zag-editable-select-on-focus-valueBooleantrueSelect text when editing starts.
data-zag-editable-max-length-valueNumber0Max characters (0 = unlimited).
data-zag-editable-name-valueString""name for form submission.
data-zag-editable-disabled-valueBooleanfalseDisable editing.
data-zag-editable-read-only-valueBooleanfalseRead-only.
data-zag-editable-required-valueBooleanfalseMark required.

Events

Emits zag-editable:change (while editing) and zag-editable:commit (on commit) — both { value }.

Programmatic control

value (getter), editing (getter), setValue(v), edit(), submit(), cancel().