Mantén pequeñas las partes de la interfaz que requieren el cliente.
Los paquetes Liquidify usan ESM. Los controles interactivos y los proveedores de materiales son componentes de cliente. Las páginas, la carga de datos y los layouts pueden permanecer en el servidor.
En Next.js, añade la directiva de cliente al módulo más pequeño que gestione la interacción:
// app/account/save-button.tsx
"use client"
import { Button } from "@liquidify/react"
export function SaveButton() {
return <Button onPress={() => console.log("save")}>Guardar</Button>
}Un componente de servidor puede renderizar ese componente y pasarle datos serializables. No pases callbacks, nodos DOM ni otros valores no serializables.
Importa @liquidify/react/styles.css en la entrada global de estilos o en el layout raíz. Mantén los valores controlados iniciales iguales en ambos entornos. Coloca la lógica del navegador en efectos o eventos, no al evaluar el módulo.
Sheet, Dialog, Alert, ActionSheet, Popover, Tooltip, Menu y ContextMenu usan un portal a document.body para su contenido flotante. Solo lo montan cuando están abiertos y no generan ese contenido en el servidor.
Un control inicialmente cerrado produce la misma estructura inicial en el servidor y el cliente. Usa un estado open determinista o deja que el componente lo gestione. No leas window ni document al evaluar el módulo.
Los identificadores internos usan useId de React para mantener estables las asociaciones entre etiquetas y atributos ARIA.