Gestos
Estado: BetaDeslizar para reservar
En vez de un clic que se da sin querer, la reserva (o cancelar, o pagar) pide arrastrar el pulgar hasta el final. Si se suelta antes, regresa con resorte. Al confirmar envía su formulario, así que funciona con Turbo sin código extra.
- Arrastre
- Resorte
- Formularios
app/views/… (la demo de arriba)
<div class="flex w-full max-w-sm flex-col items-center gap-4">
<%= render Ui::SlideToConfirmComponent.new(label: "Desliza para reservar", confirmed_label: "¡Lugar reservado!", reset_after: 2500) %>
<%= render Ui::SlideToConfirmComponent.new(label: "Desliza para cancelar", confirmed_label: "Reserva cancelada", tone: :danger, size: :sm, reset_after: 2500) %>
</div>Qué hace
- Envía el formulario que lo contiene con requestSubmit (Turbo incluido).
- Dispara slide-to-confirm:confirm (y el nombre anterior, :confirmed, mientras se migra) para conectar cualquier otra reacción.
- Umbral de 85% y regreso con el resorte "responsive".
- Vibración breve en teléfonos que la soportan.
Props
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| label | String | "Desliza para confirmar" | Texto del carril y nombre accesible del pulgar. |
| confirmed_label | String | "Listo" | Lo que aparece (y se anuncia) al confirmar. |
| size | :sm | :md | :lg | :md | Alto del carril y tamaño del pulgar. |
| tone | :neutral | :danger | :neutral | :danger para cancelar o borrar (:default y :destructive siguen sirviendo). |
| reset_after | Integer (ms) | 0 | Vuelve al inicio tras confirmar; 0 = se queda confirmado. |
| disabled | Boolean | false | Deshabilita el gesto y el teclado. |
Accesibilidad
- El pulgar es un <button>; Enter o Espacio confirma sin arrastrar.
- La confirmación se anuncia con una región aria-live.
- Con movimiento reducido el pulgar salta en lugar de deslizarse.