componente · @solu30/ui-kit/input
InlineText
Valor de texto que se vuelve campo al tocarlo, con guardado asincrónico y modo multilínea.
Seguir leyendo — 1 párrafo más
InlineText renders a tappable value that becomes a text input on click. Commit with Enter (single-line) or the save button. Escape cancels. Supports async onSave — shows a pending state during the call.
3 sitios de import en 1 de 15 verticales — un archivo que la importa cuenta una vez, monte una instancia o veinte.
- gestorsalon
El componente, montado
Cargando el espécimen…
export function InlineEditMatrix() {
const [salonName, setSalonName] = useState('Salón Jardín')
const [capacity, setCapacity] = useState<number | null>(180)
const [flavorName, setFlavorName] = useState('Dulce de leche granizado')
const [brandColor, setBrandColor] = useState<string | null>('#2563eb')
return (
<Stage label="Edición en línea · nueve componentes, ninguno con error" tall wide>
<div className="grid w-full grid-cols-1 gap-4 sm:grid-cols-2">
<EditableField label="Nombre del salón" value={salonName} onSave={setSalonName} />
<EditableField
label="Capacidad máxima"
value={String(capacity ?? '')}
onSave={(v) => setCapacity(Number(v))}
type="number"
required
/>
<div className="flex flex-col gap-1.5">
<span className="text-xs text-content/50">InlineText</span>
<InlineText value={flavorName} onSave={setFlavorName} placeholder="Nombre del sabor" />
</div>
<div className="flex flex-col gap-1.5">
<span className="text-xs text-content/50">InlineText · disabled</span>
<InlineText value="Sabor de temporada — cerrado" onSave={() => {}} disabled />
</div>
<div className="flex flex-col gap-1.5">
<span className="text-xs text-content/50">InlineTextField (celda de tabla)</span>
<InlineTextField initial="EVT-2026-0148" onSave={() => {}} mono plain />
</div>
<div className="flex flex-col gap-1.5">
<span className="text-xs text-content/50">InlineNumberField · con sufijo (celda de tabla)</span>
<InlineNumberField initial={148} onSave={() => {}} suffix=" pers." plain />
</div>
<InlineColor label="Color de marca" value={brandColor} onSave={setBrandColor} />
</div>
</Stage>
)
}De specimens/input.tsx · InlineEditMatrix: el espécimen del Muestrario, no un ejemplo oficial del paquete. Muestra cómo se usa la pieza de verdad, montada contra los tipos instalados —eso es lo que vale— pero no es documentación del kit.
Cómo se usa
import { InlineText } from '@solu30/ui-kit/input'Props
| Prop | Requerida | Tipo | Qué hace |
|---|---|---|---|
| value | sí | string | Current text value |
| onSave | sí | (value: string) => void | Promise<void> | Called with the trimmed new value when the user commits |
| placeholder | opcional | string | Placeholder shown in display mode when value is empty |
| multiline | opcional | boolean | When true renders a Textarea instead of an Input |
| className | opcional | string | Extra class names applied to the outer wrapper |
| disabled | opcional | boolean | Disables interaction entirely |
| emptyText | opcional | string | Text shown when value is empty in display mode (defaults to placeholder or "—") |