ba062e92d0
- App.tsx: wrappers de padding (p-4/md:p-8) e max-w-7xl/mx-auto agora só se aplicam quando não é tela standalone; login/landing/public renderizam full-bleed - OnboardingChat.tsx: classe ob-noscroll esconde a barra de rolagem do slide intro (mantém scroll), substituindo a custom-scrollbar indefinida no fluxo de login Inclui também demais alterações pendentes do working tree (snapshot do estado atual de dev). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
export const ACTIVE_PLUGINS_KEY = 'SCOREODONTO_ACTIVE_PLUGINS';
|
|
export const PLUGIN_CONFIG_KEY = 'SCOREODONTO_PLUGIN_CONFIG';
|
|
|
|
export const getActivePlugins = (): string[] => {
|
|
try { return JSON.parse(localStorage.getItem(ACTIVE_PLUGINS_KEY) || '[]'); }
|
|
catch { return []; }
|
|
};
|
|
|
|
export const isPluginActive = (id: string): boolean => getActivePlugins().includes(id);
|
|
|
|
export const togglePlugin = (id: string): boolean => {
|
|
const active = getActivePlugins();
|
|
const wasActive = active.includes(id);
|
|
const next = wasActive ? active.filter(p => p !== id) : [...active, id];
|
|
localStorage.setItem(ACTIVE_PLUGINS_KEY, JSON.stringify(next));
|
|
return !wasActive;
|
|
};
|
|
|
|
export const getPluginConfig = (id: string): Record<string, string> => {
|
|
try {
|
|
const all = JSON.parse(localStorage.getItem(PLUGIN_CONFIG_KEY) || '{}');
|
|
return all[id] || {};
|
|
} catch { return {}; }
|
|
};
|
|
|
|
export const savePluginConfig = (id: string, config: Record<string, string>) => {
|
|
try {
|
|
const all = JSON.parse(localStorage.getItem(PLUGIN_CONFIG_KEY) || '{}');
|
|
localStorage.setItem(PLUGIN_CONFIG_KEY, JSON.stringify({ ...all, [id]: config }));
|
|
} catch {}
|
|
};
|