MenuChevron Down
Editable Texto Editable - Docs - Artefact

Editable Texto Editable

Forms
Detección automática inteligente

Introducción

Un campo de texto en línea que se muestra como texto plano hasta que se activa (mediante foco, clic o doble clic), y entonces cambia a un input editable con controles de enviar/cancelar.

Uso

Artefact UI Suite
Add a description…
import { Editable } from "../components/ui";

export default function MyPage() {
  return (
    <Editable label="Project name" defaultValue="Artefact UI Suite" />
  );
}

Composición personalizada

Pasa children para tener control total sobre el layout de vista previa/input/controles:

import { Editable } from "../components/ui";

export default function MyPage() {
  return (
    <Editable defaultValue="Untitled" activationMode="dblclick">
      <Editable.Label>Title</Editable.Label>
      <Editable.Area>
        <Editable.Preview />
        <Editable.Input />
      </Editable.Area>
      <Editable.Control>
        <Editable.EditTrigger>Edit</Editable.EditTrigger>
        <Editable.SubmitTrigger>Save</Editable.SubmitTrigger>
        <Editable.CancelTrigger>Cancel</Editable.CancelTrigger>
      </Editable.Control>
    </Editable>
  );
}

Constructor de páginas CMS

Este componente está disponible como un bloque editable en el Constructor de páginas (content/pages/*.json):

{
  "type": "editable",
  "label": "Project name",
  "defaultValue": "Artefact UI Suite",
  "placeholder": "Untitled",
  "size": "md",
  "activationMode": "focus",
  "submitMode": "both"
}

Siempre se renderiza como interactive en el Constructor de páginas.

Propiedades

Root

PropTipoDescripción
valuestringEl valor actual (controlado).
defaultValuestringEl valor inicial (no controlado).
editbooleanSi el modo de edición está activo (controlado).
defaultEditbooleanEl estado inicial del modo de edición (no controlado).
activationMode"focus" | "dblclick" | "click" | "none"Cómo entra la vista previa en modo de edición. Por defecto "focus".
submitMode"enter" | "blur" | "both" | "none"Qué interacciones confirman el valor. Por defecto "both".
selectOnFocusbooleanSi el texto del input se selecciona al enfocarse. Por defecto true.
autoResizebooleanMantiene la vista previa visible (ajustada al contenido) mientras se edita, en lugar de ocultarla.
disabledbooleanDeshabilita toda la interacción.
readOnlybooleanImpide entrar en modo de edición mientras sigue permitiendo el foco.
requiredbooleanMarca el input subyacente como obligatorio.
invalidbooleanMarca el campo como inválido.
placeholderstring | { edit: string; preview: string }Texto de marcador de posición, opcionalmente distinto entre el input y la vista previa.
maxLengthnumberLongitud máxima del input.
namestringNombre del input subyacente, para el envío nativo de formulario.
formstringAsocia el input con un <form> mediante id.
translationsPartial<EditableTranslations>Sobrescrituras para las cadenas ARIA de editar/enviar/cancelar/input.
size"2xs" | "xs" | "sm" | "md" | "lg"Tamaño visual. Por defecto "md".
onValueChange(details: { value: string }) => voidSe llama cuando cambia el valor del input.
onValueCommit(details: { value: string }) => voidSe llama cuando se envía el valor.
onValueRevert(details: { value: string }) => voidSe llama cuando se cancela la edición.
onEditChange(details: { edit: boolean }) => voidSe llama cuando se alterna el modo de edición.
interactivebooleanFuerza (o suprime) la hidratación como isla.
classstringClases CSS personalizadas para el elemento raíz.

Composición por defecto

PropTipoDescripción
labelJSX.Element | stringEtiqueta renderizada encima del campo.
childrenJSX.ElementContenido adicional añadido tras la vista previa/input/controles por defecto.

Subcomponentes

ParteDescripción
Editable.Label<label> vinculado al input; hacer clic en él enfoca la vista previa.
Editable.AreaEnvuelve Preview e Input en el mismo slot de layout.
Editable.PreviewLa visualización de solo lectura mostrada cuando no se está editando; role="button", activable con teclado según activationMode.
Editable.InputEl <input> mostrado durante la edición; gestiona Escape para cancelar y Enter/pérdida de foco para enviar según submitMode.
Editable.ControlEnvuelve los disparadores de editar/enviar/cancelar.
Editable.EditTriggerEntra en modo de edición. Oculto mientras ya se está editando.
Editable.SubmitTriggerConfirma el valor y sale del modo de edición. Oculto mientras no se está editando.
Editable.CancelTriggerDescarta los cambios y sale del modo de edición. Oculto mientras no se está editando.
Editable.ContextAcceso mediante render-prop al contexto editable: <Editable.Context>{(ctx) => ...}</Editable.Context>.

Accesibilidad

  • Preview es operable con teclado (tabIndex={0}, Enter/Space) siempre que activationMode sea "click" o "dblclick"; con el modo "focus", simplemente tabular hasta él abre el modo de edición.
  • EditTrigger / SubmitTrigger / CancelTrigger obtienen sus aria-label de translations, y se ocultan (no solo visualmente, mediante el atributo hidden) cuando no son aplicables al modo actual.
  • Input lleva aria-invalid cuando se establece invalid, y aria-label desde translations.input.