tfrere's picture
tfrere HF Staff
feat: FontCLIP pipeline, category colors, and updated How It Works
2fc4361
import React from 'react';
import { useControls } from 'leva';
import { useDebugUMAPStore } from '../store';
import { getConfig } from '../config/mapConfig.js';
const getStore = () => useDebugUMAPStore.getState();
/**
* Hook pour gérer l'interface Leva avec Zustand.
* All onChange callbacks read the store via getState() to avoid stale closures.
*/
export function useLeva({ onResetZoom }) {
const configs = useDebugUMAPStore((state) => state.configs);
const resetToDefaults = useDebugUMAPStore((state) => state.resetToDefaults);
const maxConfig = Math.max(0, configs.length - 1);
// eslint-disable-next-line react-hooks/exhaustive-deps
const [controls, setLeva] = useControls(() => ({
Configuration: {
value: Math.min(getStore().currentConfigIndex, maxConfig),
min: 0,
max: maxConfig,
step: 1,
onChange: (v) => {
const s = getStore();
const upperBound = s.configs.length - 1;
const clamped = Math.max(0, Math.min(v, upperBound));
s.setCurrentConfigIndex(clamped);
},
},
'Category Colors': {
value: getStore().useCategoryColors,
onChange: (v) => { getStore().setUseCategoryColors(v); },
},
'Glyph Size': {
value: getStore().baseGlyphSize,
min: getConfig('glyph.size.min', 0.05),
max: getConfig('glyph.size.max', 1.0),
step: getConfig('glyph.size.step', 0.05),
onChange: (v) => { getStore().setBaseGlyphSize(v); },
},
'Dark Mode': {
value: getStore().darkMode,
onChange: (v) => { getStore().setDarkMode(v); },
},
'Show Centroids': {
value: getStore().showCentroids,
onChange: (v) => { getStore().setShowCentroids(v); },
},
'Reset Zoom': { button: true },
'Reset Defaults': { button: true },
}), [maxConfig]);
const resetZoomFlag = controls['Reset Zoom'];
const resetDefaultsFlag = controls['Reset Defaults'];
React.useEffect(() => {
if (resetZoomFlag) onResetZoom();
}, [resetZoomFlag, onResetZoom]);
React.useEffect(() => {
if (resetDefaultsFlag) {
resetToDefaults();
if (setLeva) {
setLeva({
Configuration: 0,
'Category Colors': true,
'Glyph Size': 0.25,
'Dark Mode': false,
'Show Centroids': true,
});
}
}
}, [resetDefaultsFlag, resetToDefaults, setLeva]);
return {};
}