import { MutableRefObject } from 'react'; type AnyFn = (...args: any[]) => any; type Slot = MutableRefObject | MutableRefObject; type Slots = Slot | Array>; /** * Lie durablement un handler à un/des slot(s) ref du modèle, pour toute la vie du composant. * * Le slot reçoit un wrapper d'identité stable qui appelle TOUJOURS la dernière version du handler : * on garde donc la sémantique du hack (`slot.current = handler` réassigné à chaque render, closure * fraîche sur les props) sans son défaut (slot laissé pendant après le démontage). * * À utiliser quand le handler fait autre chose que forcer un re-render (ex. re-synchroniser un * état local avant de rafraîchir) ; pour un simple re-render, préférer {@link useModelBinding}. */ export declare function useModelSlot void>(slot: Slots, handler: F): void; /** * #247 — Lie un composant React au modèle (hors-React) via un ou plusieurs « slots » ref pilotés * par lui. Remplace le hack répété ~60× : * * const [, setCount] = useState(0) * const refresh = () => setCount(a => a + 1) * model.ref_to_x_updater.current = refresh // assignation en render-body, sans cleanup * useEffect(() => model.addMainZoneListener(refresh), []) * * par : * * const refresh = useModelBinding(model.ref_to_x_updater, * r => model.addMainZoneListener(r)) * * Ce que le helper garantit et que le hack ne garantissait PAS : * - un re-render forcé d'identité STABLE (useReducer) ; * - le slot est **nettoyé au démontage** (remis à un no-op) : plus de ref périmée qui déclenche * un setState sur un composant démonté (notifications perdues / warning React) ; * - un abonnement optionnel (`subscribe`) désabonné au démontage. * * @param slot un slot ref `MutableRefObject<() => void>` (ou un tableau de slots) que le modèle * appelle pour forcer le re-render du composant. `undefined` pour un abonnement seul * (cas `addMainZoneListener` sans slot ref propre). * @param subscribe optionnel : reçoit la fonction de re-render, renvoie éventuellement une * fonction de désabonnement (ex. valeur de retour d'`addMainZoneListener`). * @returns la fonction de re-render forcé (stable), utilisable pour un abonnement custom. */ export declare function useModelBinding void>(slot?: Slots, subscribe?: (rerender: () => void) => (() => void) | void): () => void; export {};