UNPKG

analytica-frontend-lib

Version:

Repositório público dos componentes utilizados nas plataformas da Analytica Ensino

1 lines 3.4 kB
{"version":3,"sources":["../src/hooks/useTheme.ts"],"sourcesContent":["import { useEffect, useMemo } from 'react';\nimport { useThemeStore, ThemeMode } from '../store/themeStore';\n\nexport type { ThemeMode };\n\n/**\n * Hook para gerenciar temas e branding institucional\n * Este hook permite alternar entre temas light, dark e automático baseado nas preferências do sistema\n * e fornece acesso aos dados de branding lidos diretamente das meta tags HTML\n * Utiliza Zustand para persistir o estado de tema entre múltiplos arquivos e sessões\n */\nexport const useTheme = () => {\n const {\n themeMode,\n isDark,\n toggleTheme,\n setTheme,\n initializeTheme,\n handleSystemThemeChange,\n } = useThemeStore();\n\n // Read branding data from meta tags\n const branding = useMemo(() => {\n if (typeof document === 'undefined') {\n return {\n theme: null,\n favicon: null,\n icon: null,\n mainLogo: null,\n internalLogo: null,\n loginImage: null,\n };\n }\n\n return {\n theme:\n document.querySelector('meta[name=\"theme\"]')?.getAttribute('content') ??\n null,\n favicon:\n document.querySelector('link[rel=\"icon\"]')?.getAttribute('href') ??\n null,\n icon:\n document\n .querySelector('link[rel=\"apple-touch-icon\"]')\n ?.getAttribute('href') ?? null,\n mainLogo:\n document\n .querySelector('meta[name=\"main-logo\"]')\n ?.getAttribute('content') ?? null,\n internalLogo:\n document\n .querySelector('meta[name=\"internal-logo\"]')\n ?.getAttribute('content') ?? null,\n loginImage:\n document\n .querySelector('meta[name=\"login-image\"]')\n ?.getAttribute('content') ?? null,\n };\n }, []);\n\n useEffect(() => {\n // Initialize theme on first render\n initializeTheme();\n\n // Listener para mudanças nas preferências do sistema (apenas quando mode é 'system')\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n mediaQuery.addEventListener('change', handleSystemThemeChange);\n\n return () => {\n mediaQuery.removeEventListener('change', handleSystemThemeChange);\n };\n }, [initializeTheme, handleSystemThemeChange]);\n\n return {\n themeMode,\n isDark,\n toggleTheme,\n setTheme,\n branding,\n };\n};\n"],"mappings":";;;;;AAAA,SAAS,WAAW,eAAe;AAW5B,IAAM,WAAW,MAAM;AAC5B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,cAAc;AAGlB,QAAM,WAAW,QAAQ,MAAM;AAC7B,QAAI,OAAO,aAAa,aAAa;AACnC,aAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,UAAU;AAAA,QACV,cAAc;AAAA,QACd,YAAY;AAAA,MACd;AAAA,IACF;AAEA,WAAO;AAAA,MACL,OACE,SAAS,cAAc,oBAAoB,GAAG,aAAa,SAAS,KACpE;AAAA,MACF,SACE,SAAS,cAAc,kBAAkB,GAAG,aAAa,MAAM,KAC/D;AAAA,MACF,MACE,SACG,cAAc,8BAA8B,GAC3C,aAAa,MAAM,KAAK;AAAA,MAC9B,UACE,SACG,cAAc,wBAAwB,GACrC,aAAa,SAAS,KAAK;AAAA,MACjC,cACE,SACG,cAAc,4BAA4B,GACzC,aAAa,SAAS,KAAK;AAAA,MACjC,YACE,SACG,cAAc,0BAA0B,GACvC,aAAa,SAAS,KAAK;AAAA,IACnC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AAEd,oBAAgB;AAGhB,UAAM,aAAa,OAAO,WAAW,8BAA8B;AAEnE,eAAW,iBAAiB,UAAU,uBAAuB;AAE7D,WAAO,MAAM;AACX,iBAAW,oBAAoB,UAAU,uBAAuB;AAAA,IAClE;AAAA,EACF,GAAG,CAAC,iBAAiB,uBAAuB,CAAC;AAE7C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}