Files
scoreodonto.com/frontend/views/plugins/pluginRegistry.ts
T
VPS 4 Builder ba062e92d0 fix(login): render standalone views edge-to-edge e esconde scrollbar do carrossel de onboarding
- 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>
2026-06-13 13:23:19 +02:00

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 {}
};