@oondemand/oon-core-front 0.7.21 → 0.7.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -793,7 +793,7 @@ function Sidebar({ app, menu, registry }) {
793
793
  // package.json
794
794
  var package_default = {
795
795
  name: "@oondemand/oon-core-front",
796
- version: "0.7.21",
796
+ version: "0.7.22",
797
797
  repository: {
798
798
  type: "git",
799
799
  url: "git+https://github.com/oondemand/oon-platform.git",
@@ -2203,4 +2203,4 @@ export {
2203
2203
  appDefinitionToConfig,
2204
2204
  startOonApp
2205
2205
  };
2206
- //# sourceMappingURL=chunk-LEZVXC3Y.js.map
2206
+ //# sourceMappingURL=chunk-FTUHJZVK.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/security/tenantStorage.ts","../src/start.tsx","../src/app/OonApp.tsx","../src/security/AcceptInviteCentralPage.tsx","../src/security/AcceptInvitePage.tsx","../src/security/OnboardingPage.tsx","../src/app/OonProviders.tsx","../src/config/queryClient.ts","../src/shell/LocalRuntimeBanner.tsx","../src/app/moduleRegistry.tsx","../src/app/createOonRouter.tsx","../src/shell/DefaultShell.tsx","../src/shell/Sidebar.tsx","../package.json","../src/runtime/versionInfo.ts","../src/shell/AuthenticatedLayout.tsx","../src/security/AccessDeniedPage.tsx","../src/security/AppAccessGuard.tsx","../src/security/LoginPage.tsx","../src/security/FirstAccessPage.tsx","../src/security/ActivationPage.tsx","../src/security/RouteGuard.tsx","../src/security/ActivationGuard.tsx","../src/components/internal/pipelineBoardLayout.ts","../src/app/codeFirst.ts"],"sourcesContent":["export interface TenantStorage {\n get(): string | null;\n set(tenantId: string): void;\n clear(): void;\n}\n\nexport interface TenantStorageOptions {\n enabled?: boolean;\n}\n\nfunction normalize(value: unknown): string | null {\n const normalized = String(value ?? \"\").trim();\n return normalized || null;\n}\n\nfunction tenantFromUrl(key: string): string | null {\n if (typeof window === \"undefined\") return null;\n const url = new URL(window.location.href);\n const tenantId = normalize(url.searchParams.get(\"tenant\"));\n if (!tenantId) return null;\n window.sessionStorage.setItem(key, tenantId);\n url.searchParams.delete(\"tenant\");\n window.history.replaceState(window.history.state, \"\", `${url.pathname}${url.search}${url.hash}`);\n return tenantId;\n}\n\n/**\n * Mantém o tenant no escopo da aba. Isso permite abrir Tenant A e Tenant B em\n * janelas diferentes sem uma aba trocar o contexto da outra. O query param\n * `tenant` transporta somente o identificador selecionado; o backend continua\n * validando o membership em todas as requisições.\n */\nexport function createTenantStorage(appId: string, options: TenantStorageOptions = {}): TenantStorage {\n const key = `oon:${appId}:tenant`;\n const enabled = options.enabled !== false;\n const clearStoredTenant = () => {\n if (typeof window === \"undefined\") return;\n window.sessionStorage.removeItem(key);\n window.localStorage.removeItem(key);\n };\n\n if (!enabled) {\n return {\n get() {\n clearStoredTenant();\n return null;\n },\n set() {\n clearStoredTenant();\n },\n clear: clearStoredTenant,\n };\n }\n\n return {\n get() {\n if (typeof window === \"undefined\") return null;\n const incoming = tenantFromUrl(key);\n if (incoming) return incoming;\n // Remove a seleção antiga global criada por versões anteriores do Core.\n window.localStorage.removeItem(key);\n return normalize(window.sessionStorage.getItem(key));\n },\n set(tenantId) {\n if (typeof window === \"undefined\") return;\n const value = normalize(tenantId);\n if (!value) {\n window.sessionStorage.removeItem(key);\n return;\n }\n window.sessionStorage.setItem(key, value);\n },\n clear() {\n if (typeof window !== \"undefined\") window.sessionStorage.removeItem(key);\n },\n };\n}\n\n","import { StrictMode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport type { OonCoreFrontConfig } from \"./types\";\nimport { OonApp } from \"./app/OonApp\";\nimport { installPipelineBoardLayoutStyles } from \"./components/internal/pipelineBoardLayout\";\n\nfunction validateConfig(config: OonCoreFrontConfig) {\n if (!config?.app?.id) throw new Error(\"oonCoreFront.start: config.app.id é obrigatório.\");\n if (!config?.api?.baseUrl) throw new Error(\"oonCoreFront.start: config.api.baseUrl é obrigatório.\");\n}\n\nfunction applyDocumentMeta(config: OonCoreFrontConfig) {\n if (config.app.title) document.title = config.app.title;\n if (config.app.favicon) {\n let link = document.querySelector<HTMLLinkElement>('link[rel=\"icon\"]');\n if (!link) {\n link = document.createElement(\"link\");\n link.rel = \"icon\";\n document.head.appendChild(link);\n }\n link.href = config.app.favicon;\n }\n}\n\nfunction hardenConsole(config: OonCoreFrontConfig) {\n if (config.security?.disableConsoleInProduction && import.meta.env?.PROD) {\n const noop = () => {};\n console.log = noop;\n console.debug = noop;\n console.info = noop;\n }\n}\n\n/**\n * Montagem interna usada por `startOonApp`. Apps consumidores usam somente a\n * API code-first pública e não precisam conhecer providers ou infraestrutura.\n */\nexport function start(config: OonCoreFrontConfig) {\n validateConfig(config);\n applyDocumentMeta(config);\n installPipelineBoardLayoutStyles();\n hardenConsole(config);\n\n const rootId = config.rootElementId ?? \"root\";\n const el = document.getElementById(rootId);\n if (!el) throw new Error(`oonCoreFront.start: elemento #${rootId} não encontrado no DOM.`);\n\n createRoot(el).render(\n <StrictMode>\n <OonApp config={config} />\n </StrictMode>\n );\n}\n\n","import { useMemo } from \"react\";\nimport { RouterProvider } from \"react-router-dom\";\nimport type { OonCoreFrontConfig, OonRoute } from \"../types\";\nimport { createRestClient } from \"../api/createRestClient\";\nimport { createTokenStorage } from \"../security/tokenStorage\";\nimport { createTenantStorage } from \"../security/tenantStorage\";\nimport { AcceptInviteCentralPage } from \"../security/AcceptInviteCentralPage\";\nimport { OnboardingPage } from \"../security/OnboardingPage\";\nimport { OonProviders } from \"./OonProviders\";\nimport { resolveRegistry } from \"./moduleRegistry\";\nimport { createOonRouter } from \"./createOonRouter\";\n\nfunction localLoginUrl(): string {\n const current = `${window.location.pathname}${window.location.search}`;\n return `/login?redirect=${encodeURIComponent(current)}`;\n}\n\n/**\n * Raiz da aplicação Core. Cria o cliente REST, resolve rotas/menu e monta os\n * providers. Respostas 401 seguem para o login; 403 é tratado pelo AuthProvider.\n */\nexport function OonApp({ config }: { config: OonCoreFrontConfig }) {\n const { http, storage, tenantStorage, router } = useMemo(() => {\n const storage = createTokenStorage(config.app.id);\n const tenantStorage = createTenantStorage(config.app.id, {\n enabled: config.app.tenancyModel !== \"none\",\n });\n const externalLoginUrl = config.auth?.loginUrl ?? config.api.meusAppsUrl;\n\n const http = createRestClient({\n api: config.api,\n appId: config.app.id,\n runtimeMode: config.runtimeMode,\n getToken: () => storage.get(),\n getTenantId: () => tenantStorage.get(),\n onUnauthorized: () => {\n storage.clear();\n\n if (config.runtimeMode === \"local\" || window.location.pathname === \"/accept-invite\") return;\n\n if (externalLoginUrl) {\n window.location.href = externalLoginUrl;\n return;\n }\n\n if (window.location.pathname !== \"/login\") {\n window.location.href = localLoginUrl();\n }\n },\n });\n\n const resolved = resolveRegistry(config);\n const routes: OonRoute[] = [...resolved.routes];\n const corePublicRoutes: OonRoute[] = [{\n path: \"/accept-invite\",\n public: true,\n element: <AcceptInviteCentralPage />,\n }];\n\n if (config.api.onboardingBaseUrl) {\n corePublicRoutes.push({ path: \"/cadastro\", public: true, element: <OnboardingPage baseUrl={config.api.onboardingBaseUrl} mode=\"register\" /> });\n corePublicRoutes.push({ path: \"/confirmar-email\", public: true, element: <OnboardingPage baseUrl={config.api.onboardingBaseUrl} mode=\"confirm\" /> });\n }\n\n const router = createOonRouter({\n app: config.app,\n menu: resolved.menu,\n routes,\n corePublicRoutes,\n onboardingEnabled: Boolean(config.api.onboardingBaseUrl),\n security: config.security,\n layout: config.layout ?? config.ui?.layout,\n registry: config.registry ?? config.ui?.registry,\n systemPages: config.systemPages,\n });\n\n return { http, storage, tenantStorage, router };\n }, [config]);\n\n return (\n <OonProviders\n config={config}\n http={http}\n storage={storage}\n tenantStorage={tenantStorage}\n >\n <RouterProvider router={router} />\n </OonProviders>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { Box, Text } from \"@chakra-ui/react\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { AcceptInvitePage } from \"./AcceptInvitePage\";\n\ninterface PublicRbacInfo {\n central?: { appCode: string; name: string };\n}\n\nexport function AcceptInviteCentralPage() {\n const { http } = useOonApi();\n const [centralName, setCentralName] = useState(\"Central Oon\");\n\n useEffect(() => {\n let active = true;\n http.get<PublicRbacInfo>(\"/core/rbac\")\n .then((response) => {\n if (active && response.data.central?.name) setCentralName(response.data.central.name);\n })\n .catch(() => undefined);\n return () => { active = false; };\n }, [http]);\n\n return (\n <Box bg=\"#F5F8FA\" minH=\"100vh\" pt={4}>\n <Box mx=\"auto\" maxW=\"480px\" px={4} textAlign=\"center\">\n <Text fontSize=\"sm\" fontWeight=\"700\">Convite para: {centralName}</Text>\n </Box>\n <AcceptInvitePage />\n </Box>\n );\n}\n","import { useEffect, useState, useRef, type FormEvent } from \"react\";\nimport { Box, Button, Flex, Heading, Input, Text, VStack } from \"@chakra-ui/react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useOonAuth } from \"./AuthProvider\";\nimport { useOonApi } from \"../api/ApiProvider\";\n\ninterface InvitationInfo {\n accountExists: boolean;\n allowedActions?: string[];\n blockedReason?: string | null;\n version?: number;\n registrationRequired?: boolean;\n sessionUser?: { email: string } | null;\n email: string;\n name?: string;\n roleCode: string;\n roleName?: string;\n expiresAt: string;\n}\n\nexport function AcceptInvitePage() {\n const { http } = useOonApi();\n const location = useLocation();\n const auth = useOonAuth();\n const token = new URLSearchParams(location.hash.slice(1)).get(\"token\") || new URLSearchParams(location.search).get(\"token\") || \"\";\n const [invitation, setInvitation] = useState<InvitationInfo | null>(null);\n const [sessionEmail, setSessionEmail] = useState(\"\");\n const operationKey = useRef(crypto.randomUUID());\n const [registration, setRegistration] = useState({ nome: \"\", userDocument: \"\", phone: \"\", termsAccepted: false });\n const [password, setPassword] = useState(\"\");\n const [confirm, setConfirm] = useState(\"\");\n const [message, setMessage] = useState<string | null>(null);\n const [inspectionAttempt, setInspectionAttempt] = useState(0);\n const [submitting, setSubmitting] = useState(false);\n const [done, setDone] = useState(false);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let active = true;\n operationKey.current = crypto.randomUUID();\n setLoading(true); setInvitation(null); setDone(false); setMessage(null); setPassword(\"\"); setConfirm(\"\");\n if (!token) {\n setMessage(\"Link de convite inválido.\");\n setLoading(false);\n return;\n }\n http.post<{ invitation: InvitationInfo }>(\"/core/invitations/inspect\", { token }, { headers: { \"x-oon-tenant-id\": false } })\n .then((response) => { if (active) {\n setInvitation(response.data.invitation);\n setSessionEmail(String(response.data.invitation.sessionUser?.email || \"\").trim().toLowerCase());\n } })\n .catch((error) => { if (active) setMessage(error?.status === 410\n ? \"Este convite é inválido, expirou, foi revogado ou já foi utilizado. Convites anteriores ao corte também podem ter sido invalidados. Solicite um novo convite ao administrador.\"\n : \"Não foi possível validar o convite. Tente novamente.\"); })\n .finally(() => { if (active) setLoading(false); });\n return () => { active = false; };\n }, [http, token, inspectionAttempt]);\n\n function clearSession() { auth.clearSession(); setSessionEmail(\"\"); }\n const sameSession = Boolean(sessionEmail && sessionEmail === invitation?.email.toLowerCase());\n const otherSession = Boolean(sessionEmail && !sameSession);\n const register = invitation?.accountExists === false;\n\n async function submit(event: FormEvent) {\n event.preventDefault();\n if (submitting || otherSession || auth.status === \"loading\") return;\n setMessage(null);\n if (!sameSession && register && password.length < 8) {\n setMessage(\"A senha deve possuir pelo menos 8 caracteres.\");\n return;\n }\n if (!sameSession && register && password !== confirm) {\n setMessage(\"As senhas informadas não conferem.\");\n return;\n }\n setSubmitting(true);\n try {\n await http.post(\"/core/invitations/accept\", {\n token, ...(invitation?.version !== undefined ? { version: invitation.version } : {}),\n ...(register && invitation?.registrationRequired ? { registration: { ...registration, termsVersion: \"2026-08-18\", privacyVersion: \"2026-08-18\" } } : {}),\n intent: sameSession ? \"session\" : register ? \"register\" : \"authenticate\",\n ...(sameSession ? {} : { password }),\n }, { headers: { \"idempotency-key\": operationKey.current, ...(sameSession ? {} : { Authorization: false }), \"x-oon-tenant-id\": false } });\n setDone(true);\n setMessage(\"Convite aceito. Seu acesso está disponível.\");\n } catch (error: any) {\n if (sameSession && error?.status === 401) clearSession();\n setMessage(error?.message || \"Não foi possível concluir o convite.\");\n } finally { setSubmitting(false); }\n }\n\n return (\n <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box width=\"100%\" maxW=\"480px\" bg=\"white\" borderWidth=\"1px\" borderRadius=\"18px\" p={{ base: 6, md: 9 }}>\n <VStack align=\"stretch\" gap={5}>\n <Box>\n <Text color=\"#39BFED\" fontSize=\"xs\" fontWeight=\"700\" textTransform=\"uppercase\">Central Oon</Text>\n <Heading mt={2} size=\"lg\">Aceitar convite</Heading>\n </Box>\n\n {loading ? <Text>Validando convite…</Text> : null}\n {invitation && !done ? (\n <>\n <Box bg=\"gray.50\" borderRadius=\"md\" p={4}>\n <Text fontWeight=\"700\">{invitation.name || invitation.email}</Text>\n <Text fontSize=\"sm\">{invitation.email}</Text>\n <Text fontSize=\"sm\" color=\"gray.600\">Perfil: {invitation.roleName || invitation.roleCode}</Text>\n </Box>\n {otherSession ? <Box>\n <Text>Você está conectado como {sessionEmail}. Este convite é para {invitation.email}.</Text>\n <Button onClick={clearSession}>Trocar de conta</Button>\n </Box> : <form onSubmit={(event) => void submit(event)}>\n <VStack align=\"stretch\" gap={4}>\n {register && invitation.registrationRequired ? <Box>\n <Text>Complete seu cadastro para aceitar este convite. Não será criada outra organização.</Text>\n <Input aria-label=\"Nome completo\" placeholder=\"Nome completo\" required value={registration.nome} onChange={e => setRegistration({ ...registration, nome: e.target.value })} />\n <Input aria-label=\"CPF\" placeholder=\"CPF\" required value={registration.userDocument} onChange={e => setRegistration({ ...registration, userDocument: e.target.value })} />\n <Input aria-label=\"Telefone\" placeholder=\"Telefone com DDD\" required value={registration.phone} onChange={e => setRegistration({ ...registration, phone: e.target.value })} />\n <label><input type=\"checkbox\" required checked={registration.termsAccepted} onChange={e => setRegistration({ ...registration, termsAccepted: e.target.checked })} /> Aceito os termos e a política de privacidade da plataforma (2026-08-18).</label>\n </Box> : null}\n {!sameSession ? <Box>\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">{register ? \"Nova senha\" : \"Senha atual\"}</Text>\n <Input aria-label={register ? \"Nova senha\" : \"Senha atual\"} type=\"password\" autoComplete={register ? \"new-password\" : \"current-password\"} value={password} onChange={(event) => setPassword(event.target.value)} required />\n </Box> : <Text>Você está conectado como {sessionEmail}. Confirme o aceite para liberar este acesso.</Text>}\n {!sameSession && register ? <Box>\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Confirmar senha</Text>\n <Input aria-label=\"Confirmar senha\" type=\"password\" autoComplete=\"new-password\" value={confirm} onChange={(event) => setConfirm(event.target.value)} required />\n </Box> : null}\n {!register && !sameSession ? <Text fontSize=\"sm\">Use a senha atual da sua conta Oon. Se esqueceu a senha, recupere-a pelo login da plataforma e depois reabra este convite.</Text> : null}\n {invitation.blockedReason ? <Text role=\"alert\">O aceite está indisponível ({invitation.blockedReason}). Solicite regularização ao administrador.</Text> : null}\n <Button type=\"submit\" disabled={submitting || auth.status === \"loading\" || Boolean(invitation.allowedActions && !invitation.allowedActions.includes(\"accept\"))}>{submitting ? \"Aceitando…\" : \"Aceitar convite\"}</Button>\n </VStack>\n </form>}\n </>\n ) : null}\n\n {message ? <Box role=\"status\" bg={done ? \"green.50\" : \"red.50\"} borderRadius=\"md\" p={3}><Text fontSize=\"sm\">{message}</Text></Box> : null}\n {!loading && !invitation && token ? <Button onClick={() => setInspectionAttempt(value => value + 1)}>Tentar novamente</Button> : null}\n {done ? <Button asChild><a href={sameSession ? \"/\" : \"/login\"}>{sameSession ? \"Abrir aplicativo\" : \"Ir para o login\"}</a></Button> : null}\n </VStack>\n </Box>\n </Flex>\n );\n}\n","import { useEffect, useRef, useState, type FormEvent } from \"react\";\nimport { Box, Button, Flex, Heading, Input, Text, VStack } from \"@chakra-ui/react\";\nimport { Link, useLocation } from \"react-router-dom\";\n\ntype Props = { baseUrl: string; mode: \"register\" | \"confirm\" };\nconst TERMS_VERSION = \"2026-08-18\";\nconst PRIVACY_VERSION = \"2026-08-18\";\n\nasync function post(baseUrl: string, path: string, body: unknown) {\n const response = await fetch(baseUrl.replace(/\\/$/, \"\") + \"/onboarding/\" + path, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", \"x-correlation-id\": crypto.randomUUID() },\n body: JSON.stringify(body),\n });\n const payload = await response.json().catch(() => ({}));\n if (!response.ok) throw new Error(payload.message || \"Não foi possível concluir a solicitação.\");\n return payload;\n}\n\nexport function OnboardingPage({ baseUrl, mode }: Props) {\n const location = useLocation();\n const [form, setForm] = useState({ nome: \"\", email: \"\", password: \"\", organizationName: \"\", organizationDocument: \"\" });\n const [accepted, setAccepted] = useState(false);\n const [message, setMessage] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const confirmationToken = useRef<string | null>(null);\n\n useEffect(() => {\n if (mode !== \"confirm\") return;\n const token = new URLSearchParams(location.search).get(\"token\");\n if (!token) return setMessage(\"Link de confirmação inválido.\");\n if (confirmationToken.current === token) return;\n confirmationToken.current = token;\n setBusy(true);\n post(baseUrl, \"confirm-email\", { token })\n .then(() => setMessage(\"E-mail confirmado. Seu acesso ao Meus Apps e Workspace está pronto.\"))\n .catch((error) => setMessage(error.message))\n .finally(() => setBusy(false));\n }, [baseUrl, location.search, mode]);\n\n async function submit(event: FormEvent) {\n event.preventDefault();\n setBusy(true);\n setMessage(\"\");\n try {\n const result = await post(baseUrl, \"register\", {\n ...form, termsAccepted: accepted, termsVersion: TERMS_VERSION, privacyVersion: PRIVACY_VERSION,\n });\n setMessage(result.message);\n } catch (error) {\n setMessage((error as Error).message);\n } finally {\n setBusy(false);\n }\n }\n\n return <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box width=\"100%\" maxW=\"520px\" bg=\"white\" borderWidth=\"1px\" borderRadius=\"18px\" p={{ base: 6, md: 9 }}>\n <VStack align=\"stretch\" gap={5}>\n <Box>\n <Text color=\"#39BFED\" fontSize=\"xs\" fontWeight=\"700\" textTransform=\"uppercase\">Plataforma Oon</Text>\n <Heading mt={2} size=\"lg\" color=\"#07262E\">{mode === \"register\" ? \"Crie seu acesso\" : \"Confirmação de e-mail\"}</Heading>\n <Text mt={2} color=\"gray.600\" fontSize=\"sm\">\n {mode === \"register\" ? \"Comece com Meus Apps e Workspace em modo de onboarding.\" : \"Validando seu link seguro de uso único.\"}\n </Text>\n </Box>\n {mode === \"register\" ? <form onSubmit={submit}>\n <VStack align=\"stretch\" gap={3}>\n <Input placeholder=\"Seu nome\" value={form.nome} onChange={(e) => setForm({ ...form, nome: e.target.value })} required />\n <Input type=\"email\" placeholder=\"voce@empresa.com.br\" value={form.email} onChange={(e) => setForm({ ...form, email: e.target.value })} required />\n <Input type=\"password\" minLength={8} placeholder=\"Senha com 8 ou mais caracteres\" value={form.password} onChange={(e) => setForm({ ...form, password: e.target.value })} required />\n <Input placeholder=\"Nome da organização\" value={form.organizationName} onChange={(e) => setForm({ ...form, organizationName: e.target.value })} required />\n <Input placeholder=\"CNPJ/Documento (opcional)\" value={form.organizationDocument} onChange={(e) => setForm({ ...form, organizationDocument: e.target.value })} />\n <label><input type=\"checkbox\" checked={accepted} onChange={(e) => setAccepted(e.target.checked)} /> <Text as=\"span\" fontSize=\"sm\">Aceito os termos e a política de privacidade vigentes.</Text></label>\n <Button type=\"submit\" bg=\"#07262E\" color=\"white\" disabled={busy || !accepted}>{busy ? \"Enviando...\" : \"Criar acesso\"}</Button>\n </VStack>\n </form> : null}\n {message ? <Box role=\"status\" bg=\"blue.50\" color=\"blue.800\" borderRadius=\"10px\" p={4}>{message}</Box> : null}\n <Text fontSize=\"sm\"><Link to=\"/login\">Voltar para o login</Link></Text>\n </VStack>\n </Box>\n </Flex>;\n}\n","import { type ReactNode, useMemo } from \"react\";\nimport { QueryClientProvider } from \"@tanstack/react-query\";\nimport type { AxiosInstance } from \"axios\";\nimport type { OonCoreFrontConfig } from \"../types\";\nimport { createOonQueryClient } from \"../config/queryClient\";\nimport { OonThemeProvider } from \"../config/ThemeProvider\";\nimport { ApiProvider } from \"../api/ApiProvider\";\nimport { AuthProvider } from \"../security/AuthProvider\";\nimport { ActivationProvider } from \"../security/ActivationProvider\";\nimport { TenantProvider } from \"../security/TenantProvider\";\nimport type { TokenStorage } from \"../security/tokenStorage\";\nimport type { TenantStorage } from \"../security/tenantStorage\";\nimport { LocalRuntimeBanner } from \"../shell/LocalRuntimeBanner\";\n\nexport interface OonProvidersProps {\n config: OonCoreFrontConfig;\n http: AxiosInstance;\n storage: TokenStorage;\n tenantStorage: TenantStorage;\n children: ReactNode;\n}\n\n/**\n * Monta, em ordem, todos os providers globais. Nenhuma Central cliente deve\n * montar QueryClient/Chakra/Auth/Api/Tenant manualmente.\n *\n * Ordem: QueryClient -> Chakra -> Api -> Activation -> Tenant -> Auth.\n */\nexport function OonProviders({\n config,\n http,\n storage,\n tenantStorage,\n children,\n}: OonProvidersProps) {\n const queryClient = useMemo(() => createOonQueryClient(), []);\n const loginUrl = config.auth?.loginUrl ?? config.api.meusAppsUrl;\n const authenticatedContent = (\n <AuthProvider\n http={http}\n storage={storage}\n auth={config.auth}\n loginUrl={loginUrl}\n runtimeMode={config.runtimeMode}\n >\n {config.runtimeMode === \"local\"\n ? <LocalRuntimeBanner http={http}>{children}</LocalRuntimeBanner>\n : children}\n </AuthProvider>\n );\n\n return (\n <QueryClientProvider client={queryClient}>\n <OonThemeProvider config={config}>\n <ApiProvider http={http}>\n <ActivationProvider http={http}>\n {config.app.tenancyModel === \"none\"\n ? authenticatedContent\n : <TenantProvider http={http} storage={tenantStorage}>{authenticatedContent}</TenantProvider>}\n </ActivationProvider>\n </ApiProvider>\n </OonThemeProvider>\n </QueryClientProvider>\n );\n}\n","import { QueryClient } from \"@tanstack/react-query\";\n\nconst QUERY_STALE_TIME_MS = 5 * 1000;\nconst QUERY_REFETCH_INTERVAL_MS = 10 * 1000;\n\n/**\n * QueryClient padrão do Core.\n *\n * A Central é uma interface operacional: listas e datagrids precisam refletir\n * rapidamente alterações feitas por automações, webhooks e outros usuários.\n * Por isso, consultas ativas ficam obsoletas em poucos segundos e são\n * revalidadas periodicamente enquanto a aba estiver visível.\n */\nexport function createOonQueryClient(): QueryClient {\n return new QueryClient({\n defaultOptions: {\n queries: {\n retry: 1,\n staleTime: QUERY_STALE_TIME_MS,\n refetchInterval: QUERY_REFETCH_INTERVAL_MS,\n refetchIntervalInBackground: false,\n refetchOnMount: \"always\",\n refetchOnReconnect: \"always\",\n refetchOnWindowFocus: \"always\",\n },\n mutations: {\n retry: 0,\n },\n },\n });\n}\n","import { useEffect, useState, type ReactNode } from \"react\";\nimport type { AxiosInstance } from \"axios\";\nimport { useOonAuth } from \"../security/AuthProvider\";\nimport { useActivation } from \"../security/ActivationProvider\";\n\ntype LocalRole = { code: string; name: string };\n\nexport function LocalRuntimeBanner({ http, children }: { http: AxiosInstance; children: ReactNode }) {\n const auth = useOonAuth();\n const activation = useActivation();\n const [roles, setRoles] = useState<LocalRole[]>([]);\n const roleCode = String((auth.user as { roleCode?: string } | null)?.roleCode || \"\");\n\n useEffect(() => {\n if (!auth.isAuthenticated) return;\n void http.get<{ roles: LocalRole[] }>(\"/auth/local/context\")\n .then((response) => setRoles(response.data.roles || []))\n .catch(() => setRoles([]));\n }, [auth.isAuthenticated, http]);\n\n async function switchRole(nextRole: string) {\n await http.post(\"/auth/local/role\", { roleCode: nextRole });\n await auth.retry();\n }\n\n const expiration = activation.details?.expiresAt\n ? new Intl.DateTimeFormat(\"pt-BR\", { dateStyle: \"short\", timeStyle: \"short\" })\n .format(new Date(activation.details.expiresAt))\n : null;\n\n return (\n <>\n <div\n role=\"status\"\n style={{\n alignItems: \"center\",\n background: \"#172554\",\n color: \"white\",\n display: \"flex\",\n flexWrap: \"wrap\",\n font: \"600 13px system-ui\",\n gap: 12,\n justifyContent: \"center\",\n padding: \"8px 16px\",\n }}\n >\n <span>Desenvolvimento local · desconectado do Ecossistema</span>\n {expiration ? <span>Expira em {expiration}</span> : null}\n {auth.isAuthenticated && roles.length > 1 ? (\n <label>\n Perfil local:{\" \"}\n <select\n aria-label=\"Perfil local\"\n value={roleCode}\n onChange={(event) => void switchRole(event.target.value)}\n style={{ color: \"#111827\" }}\n >\n {roles.map((role) => (\n <option key={role.code} value={role.code}>{role.name}</option>\n ))}\n </select>\n </label>\n ) : null}\n </div>\n {children}\n </>\n );\n}\n","import type { CollectionViewDef, DashboardViewDef, DocumentViewDef, OonCoreFrontConfig, OonMenuItem, OonRoute, OonViewDefinition, OonPageDef } from \"../types\";\nimport type { OonPipelineViewDef } from \"../pipelineTicket\";\nimport { CoreCollection } from \"../components/CoreCollection\";\nimport { CoreDocument } from \"../components/CoreDocument\";\nimport { CorePipeline } from \"../components/CorePipeline\";\nimport { CoreDashboard } from \"../components/CoreDashboard\";\nimport { CoreUsersAccess } from \"../components/CoreUsersAccess\";\nimport { CorePage } from \"../components/ui-v2/CorePage\";\nimport { CoreTransactionalEmail } from \"../components/CoreTransactionalEmail\";\n\nexport interface ResolvedRegistry { routes: OonRoute[]; menu: OonMenuItem[]; }\nfunction slug(value: string): string { return value.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\").toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\"); }\nfunction requiredPermissions(source: { permissions?: string[] }): string[] | undefined { const values = [...(source.permissions ?? [])].filter(Boolean); return values.length ? values : undefined; }\nfunction declaredAppCapabilities(config: OonCoreFrontConfig): string[] | undefined { const capabilities = (config.app as OonCoreFrontConfig[\"app\"] & { capabilities?: string[] }).capabilities; return Array.isArray(capabilities) ? capabilities : undefined; }\nfunction supportsCapabilities(config: OonCoreFrontConfig, source: { capabilities?: string[] }): boolean { const required = (source.capabilities ?? []).filter(Boolean); if (!required.length) return true; const declared = declaredAppCapabilities(config); if (!declared) return true; return required.every((capability) => declared.includes(capability)); }\nfunction viewId(view: OonViewDefinition): string { if (view.id) return view.id; if (view.type === \"dashboard\") return \"dashboard\"; return slug(view.model); }\nfunction viewPath(view: OonViewDefinition): string { if (view.path) return view.path; if (view.type === \"dashboard\") return \"/\"; return `/${viewId(view)}`; }\nfunction viewLabel(view: OonViewDefinition): string { if (view.label) return view.label; if (view.type === \"dashboard\") return \"Dashboard\"; return view.model; }\nfunction renderView(view: OonViewDefinition, registry?: OonCoreFrontConfig[\"registry\"]) {\n switch (view.type) {\n case \"collection\": { const v = view as CollectionViewDef; return <CoreCollection model={v.model} mode={v.mode} columns={v.columns} form={v.form} label={viewLabel(v)} section={v.section} importExport={v.importExport} list={v.list} relations={v.relations} detailModal={v.detailModal} cellRenderers={registry?.cellRenderers} registry={registry} />; }\n case \"document\": { const v = view as DocumentViewDef; return <CoreDocument model={v.model} label={viewLabel(v)} endpoint={v.endpoint} approval={v.approval} attachments={v.attachments} display={v.display} categoryField={v.categoryField} titleField={v.titleField} descriptionField={v.descriptionField} contentField={v.contentField} statusField={v.statusField} updatedAtField={v.updatedAtField} />; }\n case \"pipeline\": { const v = view as OonPipelineViewDef; return <CorePipeline model={v.model} label={viewLabel(v)} stageField={v.stageField} stages={v.stages} titleField={v.titleField} form={v.form} relations={v.relations} ticketModal={v.ticketModal} filters={v.filters} create={v.create} viewModes={v.viewModes} defaultView={v.defaultView} list={v.list} defaultActions={v.defaultActions} ticketActions={v.ticketActions} registry={registry} />; }\n case \"dashboard\": { const v = view as DashboardViewDef; return <CoreDashboard label={viewLabel(v)} widgets={v.widgets} />; }\n default: return null;\n }\n}\nfunction viewToRoute(view: OonViewDefinition, registry?: OonCoreFrontConfig[\"registry\"]): OonRoute { return { path: viewPath(view), element: renderView(view, registry), permissions: requiredPermissions(view), capabilities: \"capabilities\" in view ? view.capabilities : undefined }; }\nfunction pageToRoute(page: OonPageDef, registry: OonCoreFrontConfig[\"registry\"]): OonRoute { return { path: page.path, element: <CorePage page={page} registry={registry} />, public: page.public === true, permissions: requiredPermissions(page), capabilities: page.capabilities }; }\nfunction pageToMenu(page: OonPageDef): OonMenuItem | null { if (!page.label) return null; return { label: page.label, href: page.path, icon: page.icon, section: page.section, permissions: requiredPermissions(page), capabilities: page.capabilities, hidden: page.hidden, order: page.order }; }\nfunction viewToMenu(view: OonViewDefinition): OonMenuItem { const extended = view as OonViewDefinition & { hidden?: boolean; order?: number }; return { label: viewLabel(view), href: viewPath(view), icon: view.icon, section: view.section, permissions: requiredPermissions(view), capabilities: \"capabilities\" in view ? view.capabilities : undefined, hidden: extended.hidden, order: extended.order }; }\n\nexport function resolveRegistry(config: OonCoreFrontConfig): ResolvedRegistry {\n const routes: OonRoute[] = []; const menu: OonMenuItem[] = []; const seenPaths = new Set<string>(); const componentRegistry = config.registry ?? config.ui?.registry;\n const pushRoute = (route: OonRoute) => { if (!supportsCapabilities(config, route) || seenPaths.has(route.path)) return; seenPaths.add(route.path); routes.push({ ...route, permissions: requiredPermissions(route) }); };\n const pushMenu = (item: OonMenuItem) => { if (!supportsCapabilities(config, item)) return; menu.push({ ...item, permissions: requiredPermissions(item) }); };\n for (const mod of config.modules ?? []) { for (const route of mod.routes ?? []) pushRoute(route); for (const item of mod.menu ?? []) pushMenu(item); for (const view of mod.views ?? []) { pushRoute(viewToRoute(view, componentRegistry)); pushMenu(viewToMenu(view)); } }\n if ([\"root-central\", \"member-central\"].includes(String(config.app.kind || \"\"))) { pushRoute({ path: \"/usuarios-acessos\", element: <CoreUsersAccess />, permissions: [\"users.read\"] }); pushMenu({ label: \"Usuários e Acessos\", href: \"/usuarios-acessos\", section: \"Configurações\", order: 900, permissions: [\"users.read\"] }); }\n if (declaredAppCapabilities(config)?.includes(\"core.transactional-email\")) { pushRoute({ path: \"/configuracoes/email-transacional\", element: <CoreTransactionalEmail />, permissions: [\"transactional-email.config.read\"], capabilities: [\"core.transactional-email\"] }); pushMenu({ label: \"E-mail transacional\", href: \"/configuracoes/email-transacional\", section: \"Configurações\", order: 910, permissions: [\"transactional-email.config.read\"], capabilities: [\"core.transactional-email\"] }); }\n const navMode = config.ui?.navigation?.mode ?? \"auto\"; const includeAuto = navMode === \"auto\" || navMode === \"mixed\"; const includeManual = navMode === \"manual\" || navMode === \"mixed\";\n for (const view of config.ui?.views ?? []) { pushRoute(viewToRoute(view, componentRegistry)); if (includeAuto) pushMenu(viewToMenu(view)); }\n for (const page of config.ui?.pages ?? []) { pushRoute(pageToRoute(page, componentRegistry)); if (includeAuto) { const item = pageToMenu(page); if (item) pushMenu(item); } }\n if (includeManual) for (const item of config.ui?.navigation?.items ?? []) pushMenu(item);\n menu.sort((a, b) => (a.order ?? 100) - (b.order ?? 100)); return { routes, menu };\n}\n","import {\n Navigate,\n createBrowserRouter,\n type RouteObject,\n} from \"react-router-dom\";\nimport type {\n OonAppConfig,\n OonMenuItem,\n OonRoute,\n OonLayoutConfig,\n OonComponentRegistry,\n OonSecurityConfig,\n OonSystemPages,\n} from \"../types\";\nimport { AuthenticatedLayout } from \"../shell/AuthenticatedLayout\";\nimport { AccessDeniedPage } from \"../security/AccessDeniedPage\";\nimport { AppAccessGuard } from \"../security/AppAccessGuard\";\nimport { LoginPage } from \"../security/LoginPage\";\nimport { AcceptInvitePage } from \"../security/AcceptInvitePage\";\nimport { FirstAccessPage } from \"../security/FirstAccessPage\";\nimport {\n ActivationPage,\n InstanceBlockedPage,\n} from \"../security/ActivationPage\";\nimport { RouteGuard } from \"../security/RouteGuard\";\nimport { ActivationGuard } from \"../security/ActivationGuard\";\nimport { OON_RESERVED_ROUTES, routeElement } from \"../routing\";\n\nexport interface RouterInput {\n app: OonAppConfig;\n menu: OonMenuItem[];\n routes: OonRoute[];\n corePublicRoutes?: OonRoute[];\n onboardingEnabled?: boolean;\n security?: OonSecurityConfig;\n layout?: OonLayoutConfig;\n registry?: OonComponentRegistry;\n systemPages?: OonSystemPages;\n}\n\nexport function createOonRouter({ app, menu, routes, corePublicRoutes = [], onboardingEnabled, security, layout, registry, systemPages }: RouterInput) {\n const guardEnabled = security?.enableRouteGuard !== false;\n\n const publicRoutes: RouteObject[] = routes\n .filter((route) => route.public)\n .map((route) => ({ path: route.path, element: routeElement(route) }));\n\n const privateSource = routes.filter((route) => !route.public);\n const privateRoutes: RouteObject[] = privateSource.map((route) => {\n const content = routeElement(route);\n const element = guardEnabled ? (\n <RouteGuard permission={route.permissions}>{content}</RouteGuard>\n ) : content;\n return route.path === \"/\"\n ? { index: true, element }\n : { path: route.path.replace(/^\\//, \"\"), element };\n });\n\n const hasIndexRoute = privateSource.some((route) => route.path === \"/\");\n const firstRoute = privateSource.find((route) => route.path !== \"/\");\n if (!hasIndexRoute && firstRoute) {\n privateRoutes.unshift({ index: true, element: <Navigate to={firstRoute.path} replace /> });\n }\n\n const customPaths = new Set(publicRoutes.map((route) => route.path));\n const reservedCollision = [...customPaths].find((path) => OON_RESERVED_ROUTES.includes(String(path)));\n if (reservedCollision) throw new Error(`Rota reservada pelo OonCore: ${reservedCollision}.`);\n\n const coreRouteObjects: RouteObject[] = corePublicRoutes.map((route) => ({\n path: route.path,\n element: routeElement(route),\n }));\n const occupiedPaths = new Set([\n ...customPaths,\n ...corePublicRoutes.map((route) => route.path),\n ]);\n const builtInPublicRoutes: RouteObject[] = [...coreRouteObjects];\n\n if (!occupiedPaths.has(\"/login\")) {\n const Login = systemPages?.login;\n builtInPublicRoutes.push({\n path: \"/login\",\n element: <ActivationGuard>{Login ? <Login /> : <LoginPage app={app} onboardingEnabled={onboardingEnabled} />}</ActivationGuard>,\n });\n }\n if (!occupiedPaths.has(\"/accept-invite\")) {\n builtInPublicRoutes.push({\n path: \"/accept-invite\",\n element: <ActivationGuard><AcceptInvitePage /></ActivationGuard>,\n });\n }\n if (!occupiedPaths.has(\"/first-access\")) {\n builtInPublicRoutes.push({\n path: \"/first-access\",\n element: <ActivationGuard><FirstAccessPage /></ActivationGuard>,\n });\n }\n if (!occupiedPaths.has(\"/ativacao\")) builtInPublicRoutes.push({ path: \"/ativacao\", element: <ActivationPage /> });\n if (!occupiedPaths.has(\"/instancia-suspensa\")) {\n builtInPublicRoutes.push({\n path: \"/instancia-suspensa\",\n element: <InstanceBlockedPage title=\"Instância suspensa\" message=\"Esta Central está suspensa.\" />,\n });\n }\n if (!occupiedPaths.has(\"/instancia-revogada\")) {\n builtInPublicRoutes.push({\n path: \"/instancia-revogada\",\n element: <InstanceBlockedPage title=\"Instância revogada\" message=\"Esta Central foi revogada.\" />,\n });\n }\n if (!occupiedPaths.has(\"/acesso-negado\")) {\n builtInPublicRoutes.push({ path: \"/acesso-negado\", element: <AccessDeniedPage app={app} /> });\n }\n\n const tree: RouteObject[] = [\n ...builtInPublicRoutes,\n ...publicRoutes,\n {\n path: \"/\",\n element: (\n <ActivationGuard>\n <AppAccessGuard>\n <AuthenticatedLayout app={app} menu={menu} layout={layout} registry={registry} />\n </AppAccessGuard>\n </ActivationGuard>\n ),\n children: privateRoutes,\n },\n ];\n\n return createBrowserRouter(tree);\n}\n","import { Box, Button, Drawer, Flex, IconButton, Image, Menu, Portal, Spacer, Text } from \"@chakra-ui/react\";\nimport { useState } from \"react\";\nimport { Outlet, useNavigate } from \"react-router-dom\";\nimport type {\n OonAppConfig,\n OonComponentRegistry,\n OonLayoutConfig,\n OonMenuItem,\n} from \"../types\";\nimport { useOonAuth } from \"../security/AuthProvider\";\nimport { useCoreMetadata } from \"../api/ApiProvider\";\nimport { Sidebar, SidebarNav } from \"./Sidebar\";\nimport { coreInitials } from \"../components/ui-v2/CoreKit\";\nimport { resolveComponent, MissingRenderer } from \"../app/componentRegistry\";\nimport {\n formatRuntimeDate,\n resolveRuntimeVersionInfo,\n shortCommit,\n} from \"../runtime/versionInfo\";\n\nfunction SettingsIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 15.25a3.25 3.25 0 1 0 0-6.5 3.25 3.25 0 0 0 0 6.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n />\n <path\n d=\"M19.43 12.98c.04-.32.07-.65.07-.98s-.03-.66-.08-.98l2.12-1.66-2-3.46-2.5 1a7.64 7.64 0 0 0-1.7-.98L15 3.25h-4l-.35 2.67c-.61.25-1.18.58-1.7.98l-2.5-1-2 3.46 2.12 1.66c-.04.32-.07.65-.07.98s.03.66.08.98l-2.12 1.66 2 3.46 2.5-1c.52.4 1.09.73 1.7.98l.34 2.67h4l.35-2.67a7.64 7.64 0 0 0 1.7-.98l2.5 1 2-3.46-2.12-1.66Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction resolveSettingsHref(menu: OonMenuItem[]): string | null {\n const explicit = menu.find((item) => item.action === \"settings\");\n if (explicit) return explicit.href;\n\n const settingsPage = menu.find((item) => item.href === \"/configuracoes\");\n if (settingsPage) return settingsPage.href;\n\n return null;\n}\n\nfunction MenuIcon() {\n return (\n <svg aria-hidden=\"true\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6h16M4 12h16M4 18h16\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/** Gaveta com o mesmo menu do desktop, para telas pequenas (Onda UX). */\nfunction MobileMenu({ app, menu, registry }: { app: OonAppConfig; menu: OonMenuItem[]; registry?: OonComponentRegistry }) {\n const [open, setOpen] = useState(false);\n return (\n <Box display={{ base: \"block\", lg: \"none\" }} mr={3}>\n <IconButton aria-label=\"Abrir menu\" variant=\"ghost\" onClick={() => setOpen(true)}><MenuIcon /></IconButton>\n <Drawer.Root open={open} onOpenChange={(event: { open: boolean }) => setOpen(event.open)} placement=\"start\" size=\"xs\">\n <Portal>\n <Drawer.Backdrop />\n <Drawer.Positioner>\n <Drawer.Content>\n <Drawer.Header><Drawer.Title>{app.title ?? app.name}</Drawer.Title></Drawer.Header>\n <Drawer.Body px={2}>\n <Box as=\"nav\" aria-label=\"Menu principal\">\n <SidebarNav menu={menu} registry={registry} onNavigate={() => setOpen(false)} />\n </Box>\n </Drawer.Body>\n </Drawer.Content>\n </Drawer.Positioner>\n </Portal>\n </Drawer.Root>\n </Box>\n );\n}\n\nfunction CoreTopbar({ app, menu, registry }: { app: OonAppConfig; menu: OonMenuItem[]; registry?: OonComponentRegistry }) {\n const { user, logout, hasPermission } = useOonAuth();\n const navigate = useNavigate();\n const metadataQuery = useCoreMetadata();\n const runtime = resolveRuntimeVersionInfo(app, metadataQuery.data);\n const centralVersion = runtime.centralVersion ?? \"não informada\";\n const backendVersion = metadataQuery.isLoading\n ? \"carregando\"\n : runtime.coreBackVersion ?? \"indisponível\";\n const updatedAt = formatRuntimeDate(runtime.updatedAt);\n const commit = shortCommit(runtime.commit);\n const versionParts = [\n `Central ${centralVersion}`,\n `Front ${runtime.coreFrontVersion}`,\n `Back ${backendVersion}`,\n updatedAt ? `Atualizado ${updatedAt}` : undefined,\n commit ? `Commit ${commit}` : undefined,\n ].filter(Boolean);\n const details = [\n `Central ${centralVersion}`,\n `OonCore front ${runtime.coreFrontVersion}`,\n `OonCore back ${backendVersion}`,\n runtime.environment ? `Ambiente ${runtime.environment}` : undefined,\n runtime.commit ? `Commit ${runtime.commit}` : undefined,\n runtime.releaseId ? `Release ${runtime.releaseId}` : undefined,\n runtime.startedAt ? `Backend iniciado ${formatRuntimeDate(runtime.startedAt)}` : undefined,\n ].filter(Boolean).join(\" · \");\n const settingsHref = resolveSettingsHref(\n menu.filter((item) => hasPermission(item.permissions)),\n );\n const profileHref = menu.find((item) => item.action === \"profile\")?.href ?? null;\n const OrganizationSlot = registry?.layoutSlots?.organization;\n const avatar = (user as { fotoPerfilUrl?: string } | null)?.fotoPerfilUrl;\n const tenant = user?.tenant as { nome?: string; slug?: string } | undefined;\n const tenantLabel = String(tenant?.nome || tenant?.slug || \"\").trim();\n\n return (\n <Flex\n as=\"header\"\n align=\"center\"\n minH=\"64px\"\n px={{ base: 4, lg: 6 }}\n py={3}\n borderBottomWidth=\"1px\"\n borderColor=\"border.default\"\n bg=\"surface.panel\"\n backdropFilter=\"blur(10px)\"\n position=\"sticky\"\n top={0}\n zIndex={10}\n >\n <MobileMenu app={app} menu={menu} registry={registry} />\n <Box minW={0} title={`${versionParts.join(\" · \")}\\n${details}`}>\n <Text\n fontSize=\"xs\"\n fontWeight=\"600\"\n color=\"brand.500\"\n textTransform=\"uppercase\"\n letterSpacing=\"0.08em\"\n >\n Central Oon\n </Text>\n <Text fontSize=\"sm\" fontWeight=\"600\" color=\"text.primary\">\n {app.title ?? app.name}\n </Text>\n {tenantLabel ? (\n <Text fontSize=\"xs\" fontWeight=\"600\" color=\"brand.fg\" lineHeight=\"1.4\">\n Tenant: {tenantLabel}\n </Text>\n ) : null}\n </Box>\n <Spacer />\n {OrganizationSlot ? <Box mr={3}><OrganizationSlot app={app} menu={menu} /></Box> : null}\n {user ? (\n <Flex align=\"center\" gap={3}>\n <Box textAlign=\"right\" display={{ base: \"none\", md: \"block\" }}>\n <Text fontSize=\"sm\" fontWeight=\"600\" color=\"text.primary\">\n {user.nome}\n </Text>\n {user.email ? <Text fontSize=\"xs\" color=\"text.muted\">{user.email}</Text> : null}\n </Box>\n {settingsHref ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n colorPalette=\"brand\"\n borderRadius=\"8px\"\n minW=\"36px\"\n px={2}\n aria-label=\"Abrir configurações\"\n title=\"Configurações\"\n onClick={() => navigate(settingsHref)}\n >\n <SettingsIcon />\n </Button>\n ) : null}\n <Menu.Root positioning={{ placement: \"bottom-end\" }}>\n <Menu.Trigger asChild>\n <Button size=\"sm\" variant=\"ghost\" borderRadius=\"full\" px={1} aria-label=\"Abrir menu do usuário\">\n {avatar\n ? <Image src={avatar} alt=\"\" boxSize=\"32px\" borderRadius=\"full\" objectFit=\"cover\" />\n : <Flex boxSize=\"32px\" borderRadius=\"full\" bg=\"brand.100\" color=\"brand.700\" align=\"center\" justify=\"center\" fontWeight=\"700\" fontSize=\"xs\">{coreInitials(user.nome)}</Flex>}\n </Button>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content>\n {profileHref ? <Menu.Item value=\"perfil\" onClick={() => navigate(profileHref)}>Meu perfil</Menu.Item> : null}\n <Menu.Item value=\"sair\" onClick={logout}>Sair</Menu.Item>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n </Flex>\n ) : null}\n </Flex>\n );\n}\n\nfunction Slot({\n name,\n slot,\n registry,\n app,\n menu,\n}: {\n name: \"sidebar\" | \"topbar\" | \"header\" | \"footer\";\n slot?: string;\n registry?: OonComponentRegistry;\n app: OonAppConfig;\n menu: OonMenuItem[];\n}) {\n if (slot === \"none\") return null;\n if (slot?.startsWith(\"custom:\")) {\n const Component = resolveComponent(registry, slot, \"layoutSlots\");\n return Component\n ? <Component app={app} menu={menu} />\n : <MissingRenderer renderer={slot} />;\n }\n if (name === \"sidebar\") return <Sidebar app={app} menu={menu} registry={registry} />;\n if (name === \"topbar\") return <CoreTopbar app={app} menu={menu} registry={registry} />;\n if (name === \"footer\" && slot === \"core\") {\n return (\n <Box as=\"footer\" px={6} py={4} color=\"gray.500\" fontSize=\"xs\" borderTopWidth=\"1px\">\n OonCore\n </Box>\n );\n }\n return null;\n}\n\nexport function DefaultShell({\n app,\n menu,\n layout,\n registry,\n}: {\n app: OonAppConfig;\n menu: OonMenuItem[];\n layout?: OonLayoutConfig;\n registry?: OonComponentRegistry;\n}) {\n const portal = layout?.shell === \"portal\" || layout?.shell === \"content-only\";\n const mainPadding = portal ? { base: 4, lg: 10 } : { base: 4, lg: 6 };\n return (\n <Flex align=\"stretch\" minH=\"100vh\" bg={portal ? \"surface.panel\" : \"surface.canvas\"}>\n <Slot\n name=\"sidebar\"\n slot={layout?.sidebar ?? \"core\"}\n registry={registry}\n app={app}\n menu={menu}\n />\n <Flex direction=\"column\" flex=\"1\" minW={0}>\n <Slot\n name=\"topbar\"\n slot={layout?.topbar ?? \"core\"}\n registry={registry}\n app={app}\n menu={menu}\n />\n <Slot name=\"header\" slot={layout?.header} registry={registry} app={app} menu={menu} />\n <Box as=\"main\" flex=\"1\" p={mainPadding} minW={0}>\n <Box maxW={portal ? \"1180px\" : \"1680px\"} mx=\"auto\">\n <Outlet />\n </Box>\n </Box>\n <Slot\n name=\"footer\"\n slot={layout?.footer ?? \"none\"}\n registry={registry}\n app={app}\n menu={menu}\n />\n </Flex>\n </Flex>\n );\n}\n\nexport function PortalShell(props: {\n app: OonAppConfig;\n menu: OonMenuItem[];\n layout?: OonLayoutConfig;\n registry?: OonComponentRegistry;\n}) {\n return <DefaultShell {...props} layout={{ ...props.layout, shell: \"portal\" }} />;\n}\n","import { Box, Flex, Image, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { useState } from \"react\";\nimport { NavLink } from \"react-router-dom\";\nimport type { OonAppConfig, OonComponentRegistry, OonMenuItem } from \"../types\";\nimport { resolveComponent } from \"../app/componentRegistry\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { useOonAuth } from \"../security/AuthProvider\";\n\ntype PortalHome = {\n platformApps: Array<{\n app: { codigo: string; nome?: string };\n action: string;\n deployment: { environment?: string | null };\n }>;\n};\n\nfunction groupBySection(items: OonMenuItem[]): Array<[string, OonMenuItem[]]> {\n const groups = new Map<string, OonMenuItem[]>();\n const ordered = items.map((item, index) => ({ item, index }))\n .sort((a, b) => (a.item.order ?? Number.MAX_SAFE_INTEGER) - (b.item.order ?? Number.MAX_SAFE_INTEGER) || a.index - b.index)\n .map(({ item }) => item);\n for (const item of ordered) {\n const section = item.section ?? \"Geral\";\n if (!groups.has(section)) groups.set(section, []);\n groups.get(section)!.push(item);\n }\n return Array.from(groups.entries());\n}\n\nfunction launchAppCode(action?: string) {\n const match = /^launch-app:([a-z][a-z0-9-]{2,62})$/.exec(String(action || \"\"));\n return match?.[1] || \"\";\n}\n\nfunction errorMessage(error: unknown) {\n const value = error as {\n message?: string;\n response?: { data?: { message?: string; error?: { message?: string } } };\n };\n return value?.response?.data?.error?.message ||\n value?.response?.data?.message ||\n value?.message ||\n \"Não foi possível abrir o App.\";\n}\n\nfunction PlatformAppMenuItem({ item, appCode }: { item: OonMenuItem; appCode: string }) {\n const { http } = useOonApi();\n const [opening, setOpening] = useState(false);\n const [launchError, setLaunchError] = useState(\"\");\n\n async function launch() {\n if (opening) return;\n // A aba precisa nascer durante o gesto do usuário para não ser bloqueada.\n // O handshake continua assíncrono sem alterar a rota da aplicação atual.\n const popup = window.open(\"about:blank\", \"_blank\");\n if (!popup) {\n setLaunchError(\"Permita pop-ups para abrir o App em uma nova aba.\");\n return;\n }\n popup.opener = null;\n setOpening(true);\n setLaunchError(\"\");\n try {\n const home = (await http.get<PortalHome>(\"/portal/home\")).data;\n const target = home.platformApps.find((candidate) => candidate.app.codigo === appCode);\n if (!target || target.action !== \"open\") {\n throw new Error(`${target?.app.nome || item.label} ainda não está disponível.`);\n }\n const response = await http.post<{ openUrl: string }>(\"/portal/launch\", {\n appCode,\n environment: target.deployment.environment,\n });\n if (!response.data.openUrl) {\n throw new Error(\"A autorização de abertura não retornou uma URL.\");\n }\n popup.location.replace(response.data.openUrl);\n } catch (error) {\n popup.close();\n setLaunchError(errorMessage(error));\n } finally {\n setOpening(false);\n }\n }\n\n return (\n <Box width=\"100%\">\n <Flex\n as=\"button\"\n width=\"100%\"\n align=\"center\"\n justify={{ base: \"center\", lg: \"flex-start\" }}\n gap={3}\n px={{ base: 2, lg: 3 }}\n py=\"10px\"\n borderRadius=\"9px\"\n fontSize=\"13px\"\n fontWeight=\"500\"\n color=\"#46545C\"\n cursor={opening ? \"wait\" : \"pointer\"}\n aria-disabled={opening}\n pointerEvents={opening ? \"none\" : \"auto\"}\n title={item.label}\n aria-label={`Abrir ${item.label} em uma nova aba`}\n onClick={() => void launch()}\n _hover={{ bg: \"#F8F9FA\", color: \"brand.700\" }}\n >\n {opening\n ? <Spinner size=\"xs\" />\n : <Box w=\"7px\" h=\"7px\" borderRadius=\"full\" bg=\"gray.300\" />}\n <Text display={{ base: \"none\", lg: \"block\" }} lineClamp={1}>\n {item.label}\n </Text>\n </Flex>\n {launchError ? (\n <Text role=\"alert\" px={3} py={1} fontSize=\"10px\" color=\"red.600\">\n {launchError}\n </Text>\n ) : null}\n </Box>\n );\n}\n\n/** Evaluates every registered menu condition (hooks) in a stable order. */\nfunction useMenuConditions(registry?: OonComponentRegistry): Record<string, boolean | undefined> {\n const entries = Object.entries(registry?.menuConditions ?? {}).sort(([a], [b]) => a.localeCompare(b));\n const result: Record<string, boolean | undefined> = {};\n for (const [name, useCondition] of entries) result[name] = useCondition();\n return result;\n}\n\n/** Itens visíveis: não ocultos, com permissão e com a condição `requires` satisfeita. */\nexport function useVisibleMenu(menu: OonMenuItem[], registry?: OonComponentRegistry): OonMenuItem[] {\n const { hasPermission } = useOonAuth();\n const conditions = useMenuConditions(registry);\n return menu.filter((item) => !item.hidden && hasPermission(item.permissions) && (!item.requires || conditions[item.requires] === true));\n}\n\n/** Lista de seções e itens, usada pelo menu fixo (desktop) e pela gaveta (celular). */\nexport function SidebarNav({ menu, registry, onNavigate, compact = false }: { menu: OonMenuItem[]; registry?: OonComponentRegistry; onNavigate?: () => void; compact?: boolean }) {\n const visible = useVisibleMenu(menu, registry);\n return (\n <Stack gap={5}>\n {groupBySection(visible).map(([section, items]) => (\n <Stack key={section} gap={1} role=\"group\" aria-label={section}>\n <Text\n display={compact ? { base: \"none\", lg: \"block\" } : \"block\"}\n fontSize=\"10px\"\n fontWeight=\"600\"\n color=\"gray.500\"\n textTransform=\"uppercase\"\n letterSpacing=\"0.08em\"\n px={3}\n mb={1}\n >\n {section}\n </Text>\n {items.map((item) => {\n const CustomMenuItem = resolveComponent(registry, item.renderer, \"menuRenderers\");\n if (CustomMenuItem) return <CustomMenuItem key={item.href} item={item} />;\n const appCode = launchAppCode(item.action);\n if (appCode) return <PlatformAppMenuItem key={item.href} item={item} appCode={appCode} />;\n return (\n <NavLink key={item.href} to={item.href} end={item.href === \"/\"} title={item.label} onClick={onNavigate}>\n {({ isActive }) => (\n <Flex\n align=\"center\"\n gap={3}\n px={3}\n py=\"10px\"\n borderRadius=\"9px\"\n fontSize=\"14px\"\n fontWeight={isActive ? \"600\" : \"500\"}\n bg={isActive ? \"brand.50\" : \"transparent\"}\n color={isActive ? \"brand.700\" : \"#374151\"}\n borderLeftWidth=\"3px\"\n borderLeftColor={isActive ? \"brand.500\" : \"transparent\"}\n transition=\"all 0.15s ease\"\n _hover={{ bg: isActive ? \"brand.50\" : \"#F8F9FA\", color: \"brand.700\" }}\n aria-current={isActive ? \"page\" : undefined}\n >\n {item.icon ? <Box flex=\"0 0 auto\">{item.icon}</Box> : null}\n <Text lineClamp={1}>{item.label}</Text>\n {item.badge !== undefined ? <Box ml=\"auto\" fontSize=\"xs\" fontWeight=\"700\" color=\"brand.700\">{item.badge}</Box> : null}\n </Flex>\n )}\n </NavLink>\n );\n })}\n </Stack>\n ))}\n </Stack>\n );\n}\n\n/** Menu lateral agrupado por seção. No celular fica oculto e abre como gaveta pelo topo. */\nexport function Sidebar({ app, menu, registry }: { app: OonAppConfig; menu: OonMenuItem[]; registry?: OonComponentRegistry }) {\n\n return (\n <Box\n as=\"nav\"\n aria-label=\"Menu principal\"\n w=\"248px\"\n display={{ base: \"none\", lg: \"block\" }}\n minH=\"100vh\"\n borderRightWidth=\"1px\"\n borderColor=\"#E8ECEF\"\n px={{ base: 2, lg: 3 }}\n py={4}\n bg=\"white\"\n position=\"sticky\"\n top={0}\n alignSelf=\"flex-start\"\n overflowY=\"auto\"\n >\n <Flex align=\"center\" gap={3} mb={6} px={{ base: 1, lg: 2 }} minH=\"42px\">\n {app.logo ? (\n <Image src={app.logo} alt={app.name} maxH=\"36px\" maxW={{ base: \"44px\", lg: \"150px\" }} objectFit=\"contain\" />\n ) : (\n <Flex\n w=\"38px\"\n h=\"38px\"\n flex=\"0 0 auto\"\n borderRadius=\"12px\"\n align=\"center\"\n justify=\"center\"\n bg=\"brand.500\"\n color=\"white\"\n fontWeight=\"700\"\n fontSize=\"lg\"\n >\n O\n </Flex>\n )}\n <Box minW={0}>\n <Text fontWeight=\"700\" fontSize=\"sm\" color=\"#07262E\" lineClamp={1}>\n {app.name}\n </Text>\n <Text fontSize=\"10px\" color=\"gray.500\" textTransform=\"uppercase\" letterSpacing=\"0.08em\">\n Operação digital\n </Text>\n </Box>\n </Flex>\n\n <SidebarNav menu={menu} registry={registry} />\n </Box>\n );\n}\n","{\n \"name\": \"@oondemand/oon-core-front\",\n \"version\": \"0.7.21\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/oondemand/oon-platform.git\",\n \"directory\": \"packages/oonCore-front\"\n },\n \"description\": \"Core de frontend para Centrais Oon: shell, providers, roteamento por metadata, SDK REST do /core/*, RBAC e componentes Core* (Coleção, Documento, Esteira, Multi-moedas, Assistente, Dashboard).\",\n \"type\": \"module\",\n \"main\": \"dist/index.js\",\n \"module\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n },\n \"./ui\": {\n \"types\": \"./dist/ui.d.ts\",\n \"import\": \"./dist/ui.js\"\n },\n \"./routing\": {\n \"types\": \"./dist/routing.d.ts\",\n \"import\": \"./dist/routing.js\"\n },\n \"./theme\": {\n \"types\": \"./dist/theme.d.ts\",\n \"import\": \"./dist/theme.js\"\n },\n \"./hooks\": {\n \"types\": \"./dist/hooks.d.ts\",\n \"import\": \"./dist/hooks.js\"\n },\n \"./testing\": {\n \"types\": \"./dist/testing.d.ts\",\n \"import\": \"./dist/testing.js\"\n }\n },\n \"bin\": {\n \"oonCore-front\": \"bin/cli.js\"\n },\n \"files\": [\n \"bin\",\n \"dist\",\n \"README.md\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"prepublishOnly\": \"npm run build\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run\"\n },\n \"engines\": {\n \"node\": \">=18\"\n },\n \"keywords\": [\n \"oondemand\",\n \"ooncore\",\n \"central\",\n \"frontend\",\n \"metadata-driven\",\n \"react\",\n \"vite\"\n ],\n \"license\": \"SEE LICENSE IN LICENSE\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"dependencies\": {\n \"axios\": \"^1.7.7\"\n },\n \"peerDependencies\": {\n \"@chakra-ui/react\": \"^3.0.0\",\n \"@tanstack/react-query\": \"^5.0.0\",\n \"@tanstack/react-table\": \"^8.0.0\",\n \"react\": \"^18.0.0\",\n \"react-dom\": \"^18.0.0\",\n \"react-router-dom\": \"^6.0.0\"\n },\n \"devDependencies\": {\n \"@testing-library/dom\": \"^10.4.1\",\n \"@testing-library/react\": \"^16.3.2\",\n \"@types/react\": \"^18.3.18\",\n \"@types/react-dom\": \"^18.3.5\",\n \"happy-dom\": \"^20.10.2\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.5.0\",\n \"vitest\": \"^2.0.0\"\n }\n}\n","import frontPackage from \"../../package.json\";\nimport type { CoreMetadata, OonAppConfig } from \"../types\";\n\nexport interface RuntimeVersionInfo {\n centralVersion?: string;\n coreFrontVersion: string;\n coreBackVersion?: string;\n updatedAt?: string;\n startedAt?: string;\n commit?: string;\n releaseId?: string;\n environment?: string;\n}\n\ninterface RuntimeMetadataExtension {\n runtime?: {\n core?: {\n backendVersion?: string;\n };\n central?: {\n version?: string;\n };\n deployment?: {\n builtAt?: string;\n startedAt?: string;\n commit?: string;\n releaseId?: string;\n environment?: string;\n };\n };\n}\n\ntype RuntimeMetadata = CoreMetadata & RuntimeMetadataExtension;\ntype BuildEnvironment = Record<string, string | undefined>;\n\nfunction value(...candidates: Array<string | undefined>): string | undefined {\n return candidates.find((candidate) => typeof candidate === \"string\" && candidate.trim())?.trim();\n}\n\nfunction browserBuildEnvironment(): BuildEnvironment {\n return (import.meta.env ?? {}) as BuildEnvironment;\n}\n\nexport function resolveRuntimeVersionInfo(\n app: OonAppConfig,\n metadata?: CoreMetadata,\n environment: BuildEnvironment = browserBuildEnvironment(),\n): RuntimeVersionInfo {\n const extended = metadata as RuntimeMetadata | undefined;\n const runtime = extended?.runtime;\n const deployment = runtime?.deployment;\n\n return {\n centralVersion: value(\n environment.VITE_OON_CENTRAL_VERSION,\n app.version,\n runtime?.central?.version,\n ),\n coreFrontVersion: frontPackage.version,\n coreBackVersion: value(runtime?.core?.backendVersion, metadata?.service?.version),\n updatedAt: value(\n environment.VITE_OON_BUILD_TIME,\n deployment?.builtAt,\n deployment?.startedAt,\n ),\n startedAt: deployment?.startedAt,\n commit: value(environment.VITE_OON_BUILD_COMMIT, deployment?.commit),\n releaseId: value(environment.VITE_OON_RELEASE_ID, deployment?.releaseId),\n environment: value(environment.VITE_OON_ENVIRONMENT, deployment?.environment),\n };\n}\n\nexport function formatRuntimeDate(valueToFormat?: string, timeZone?: string): string | undefined {\n if (!valueToFormat) return undefined;\n const date = new Date(valueToFormat);\n if (Number.isNaN(date.getTime())) return valueToFormat;\n return new Intl.DateTimeFormat(\"pt-BR\", {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n // Sem fuso explícito, Intl usa o fuso local do navegador do operador.\n timeZone,\n }).format(date);\n}\n\nexport function shortCommit(commit?: string): string | undefined {\n if (!commit) return undefined;\n return commit.length > 8 ? commit.slice(0, 8) : commit;\n}\n","import type { OonAppConfig, OonComponentRegistry, OonLayoutConfig, OonMenuItem } from \"../types\";\nimport { resolveComponent, MissingRenderer } from \"../app/componentRegistry\";\nimport { DefaultShell, PortalShell } from \"./DefaultShell\";\n\n/** Layout autenticado padrão mantido como wrapper de compatibilidade v1. */\nexport function AuthenticatedLayout({ app, menu, layout, registry }: { app: OonAppConfig; menu: OonMenuItem[]; layout?: OonLayoutConfig; registry?: OonComponentRegistry }) {\n if (layout?.shell?.startsWith(\"custom:\")) {\n const CustomShell = resolveComponent(registry, layout.shell, \"layoutSlots\");\n return CustomShell ? <CustomShell app={app} menu={menu} layout={layout} /> : <MissingRenderer renderer={layout.shell} />;\n }\n if (layout?.shell === \"portal\") return <PortalShell app={app} menu={menu} layout={layout} registry={registry} />;\n return <DefaultShell app={app} menu={menu} layout={layout} registry={registry} />;\n}\n","import { Box, Button, Flex, Heading, Text, VStack } from \"@chakra-ui/react\";\nimport { useNavigate } from \"react-router-dom\";\nimport type { OonAppConfig } from \"../types\";\nimport { useOonAuth } from \"./AuthProvider\";\n\n/** Página exibida quando o usuário está autenticado, mas não possui o app. */\nexport function AccessDeniedPage({ app }: { app: OonAppConfig }) {\n const { logout } = useOonAuth();\n const navigate = useNavigate();\n\n function useAnotherAccount() {\n logout();\n navigate(\"/login\", { replace: true });\n }\n\n return (\n <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box\n width=\"100%\"\n maxW=\"560px\"\n bg=\"white\"\n borderWidth=\"1px\"\n borderColor=\"#E4EBEF\"\n borderRadius=\"18px\"\n boxShadow=\"0 24px 70px rgba(7, 38, 46, 0.10)\"\n p={{ base: 6, md: 10 }}\n >\n <VStack align=\"stretch\" gap={6}>\n <Box\n width=\"56px\"\n height=\"56px\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n borderRadius=\"16px\"\n bg=\"orange.50\"\n color=\"orange.700\"\n fontSize=\"2xl\"\n fontWeight=\"800\"\n aria-hidden=\"true\"\n >\n !\n </Box>\n\n <Box>\n <Text\n color=\"#39BFED\"\n fontSize=\"xs\"\n fontWeight=\"700\"\n letterSpacing=\"0.12em\"\n textTransform=\"uppercase\"\n >\n Acesso negado\n </Text>\n <Heading mt={2} size=\"lg\" color=\"#07262E\">\n Você não possui permissão para este aplicativo\n </Heading>\n <Text mt={3} color=\"gray.600\">\n Seu usuário foi autenticado, mas não existe uma permissão ativa\n para acessar {app.title ?? app.name}. Solicite o acesso ao\n administrador da sua organização.\n </Text>\n </Box>\n\n <Button\n alignSelf=\"flex-start\"\n bg=\"#07262E\"\n color=\"white\"\n _hover={{ bg: \"#0B3843\" }}\n onClick={useAnotherAccount}\n >\n Entrar com outra conta\n </Button>\n </VStack>\n </Box>\n </Flex>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { Navigate, useLocation } from \"react-router-dom\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\nimport { useOonAuth } from \"./AuthProvider\";\n\nfunction loginRedirect(pathname: string, search: string): string {\n const destination = `${pathname}${search}`;\n return `/login?redirect=${encodeURIComponent(destination)}`;\n}\n\nexport function AppAccessGuard({ children }: { children: ReactNode }) {\n const { status, retry } = useOonAuth();\n const location = useLocation();\n\n if (status === \"loading\") return <LoadingScreen />;\n if (status === \"unauthenticated\") {\n return <Navigate to={loginRedirect(location.pathname, location.search)} replace />;\n }\n if (status === \"first-access\") return <Navigate to=\"/first-access\" replace />;\n if (status === \"forbidden\") return <Navigate to=\"/acesso-negado\" replace />;\n if (status === \"error\") {\n return (\n <LoadingScreen\n message=\"Não foi possível validar seu acesso. Tente novamente.\"\n actionLabel=\"Tentar novamente\"\n onAction={() => { void retry().catch(() => undefined); }}\n />\n );\n }\n return <>{children}</>;\n}\n","import { useState, type FormEvent } from \"react\";\nimport { Box, Button, Flex, Heading, Input, SimpleGrid, Text, VStack } from \"@chakra-ui/react\";\nimport { Link, Navigate, useLocation } from \"react-router-dom\";\nimport type { OonAppConfig, OonError } from \"../types\";\nimport { useOonAuth } from \"./AuthProvider\";\n\ntype TenantOption = {\n id: string;\n nome: string;\n slug?: string;\n tipo?: string;\n status?: string;\n};\n\nfunction tenantOptions(error: OonError): TenantOption[] {\n const details = error.details;\n if (!details || typeof details !== \"object\" || Array.isArray(details)) return [];\n const tenants = (details as { tenants?: unknown }).tenants;\n if (!Array.isArray(tenants)) return [];\n return tenants\n .filter((tenant): tenant is Record<string, unknown> => Boolean(tenant) && typeof tenant === \"object\")\n .map((tenant) => ({\n id: String(tenant.id || \"\"),\n nome: String(tenant.nome || tenant.slug || tenant.id || \"\"),\n slug: tenant.slug ? String(tenant.slug) : undefined,\n tipo: tenant.tipo ? String(tenant.tipo) : undefined,\n status: tenant.status ? String(tenant.status) : undefined,\n }))\n .filter((tenant) => tenant.id && tenant.nome);\n}\n\nfunction safeRedirect(search: string): string {\n const value = new URLSearchParams(search).get(\"redirect\") || \"/\";\n if (!value.startsWith(\"/\") || value.startsWith(\"//\")) return \"/\";\n if (value.startsWith(\"/login\") || value.startsWith(\"/acesso-negado\")) return \"/\";\n return value;\n}\n\nfunction tenantUrl(path: string, tenantId: string): string {\n const target = new URL(path, window.location.origin);\n target.searchParams.set(\"tenant\", tenantId);\n return target.toString();\n}\n\n/** Tela de login padrão das Centrais que usam a Central de Ativações. */\nexport function LoginPage({ app, onboardingEnabled = false }: { app: OonAppConfig; onboardingEnabled?: boolean }) {\n const { status, login } = useOonAuth();\n const location = useLocation();\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [submitting, setSubmitting] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n const [tenants, setTenants] = useState<TenantOption[]>([]);\n const [selectorMode, setSelectorMode] = useState(false);\n const [openingTenant, setOpeningTenant] = useState<string | null>(null);\n const redirect = safeRedirect(location.search);\n\n if (status === \"authenticated\" && !selectorMode) return <Navigate to={redirect} replace />;\n if (status === \"forbidden\") return <Navigate to=\"/acesso-negado\" replace />;\n\n async function handleSubmit(event: FormEvent<HTMLFormElement>) {\n event.preventDefault();\n if (tenants.length > 1) return;\n setSubmitting(true);\n setMessage(null);\n try {\n await login(email.trim(), password);\n } catch (error) {\n const authError = error as OonError;\n if (authError.code === \"TENANT_SELECTION_REQUIRED\") {\n const options = tenantOptions(authError);\n if (options.length > 1) {\n setTenants(options);\n setMessage(\"Escolha uma organização. O tenant será aberto em uma nova aba.\");\n return;\n }\n }\n if (authError.status === 403) return;\n setMessage(authError.status === 401 ? \"E-mail ou senha inválidos.\" : authError.message || \"Não foi possível entrar. Tente novamente.\");\n } finally {\n setSubmitting(false);\n }\n }\n\n async function openTenant(tenant: TenantOption) {\n if (openingTenant) return;\n const popup = window.open(\"about:blank\", \"_blank\");\n if (!popup) {\n setMessage(\"Permita pop-ups para abrir o tenant em uma nova aba.\");\n return;\n }\n popup.opener = null;\n setOpeningTenant(tenant.id);\n setSelectorMode(true);\n setMessage(null);\n try {\n if (status !== \"authenticated\") await login(email.trim(), password, tenant.id);\n popup.location.replace(tenantUrl(redirect, tenant.id));\n setPassword(\"\");\n setMessage(`${tenant.nome} foi aberto em uma nova aba. Escolha outro tenant quando precisar.`);\n } catch (error) {\n popup.close();\n const authError = error as OonError;\n setMessage(authError.message || \"Não foi possível abrir o tenant.\");\n } finally {\n setOpeningTenant(null);\n }\n }\n\n return (\n <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box width=\"100%\" maxW={tenants.length > 1 ? \"760px\" : \"440px\"} bg=\"white\" borderWidth=\"1px\" borderColor=\"#E4EBEF\" borderRadius=\"18px\" boxShadow=\"0 24px 70px rgba(7, 38, 46, 0.10)\" p={{ base: 6, md: 9 }}>\n <form onSubmit={handleSubmit}>\n <VStack align=\"stretch\" gap={6}>\n <Box>\n <Text color=\"#39BFED\" fontSize=\"xs\" fontWeight=\"700\" letterSpacing=\"0.12em\" textTransform=\"uppercase\">Central Oon</Text>\n <Heading mt={2} size=\"lg\" color=\"#07262E\">{app.title ?? app.name}</Heading>\n <Text mt={2} color=\"gray.600\" fontSize=\"sm\">\n {tenants.length > 1 ? \"Abra uma ou mais organizações para trabalhar em contextos separados.\" : \"Entre com seu usuário autorizado para acessar este aplicativo.\"}\n </Text>\n </Box>\n\n {tenants.length <= 1 ? (\n <VStack align=\"stretch\" gap={4}>\n <Box>\n <Text mb={2} fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">E-mail</Text>\n <Input type=\"email\" value={email} onChange={(event) => { setEmail(event.target.value); setTenants([]); setSelectorMode(false); }} autoComplete=\"email\" placeholder=\"voce@empresa.com.br\" required />\n </Box>\n <Box>\n <Text mb={2} fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">Senha</Text>\n <Input type=\"password\" value={password} onChange={(event) => setPassword(event.target.value)} autoComplete=\"current-password\" placeholder=\"Sua senha\" required />\n </Box>\n </VStack>\n ) : (\n <Box>\n <Text mb={3} fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">Escolha o tenant para acessar</Text>\n <SimpleGrid columns={{ base: 1, md: 2 }} gap={3}>\n {tenants.map((tenant) => (\n <Button key={tenant.id} type=\"button\" variant=\"outline\" height=\"auto\" minH=\"104px\" justifyContent=\"flex-start\" whiteSpace=\"normal\" textAlign=\"left\" borderWidth=\"2px\" borderColor=\"#D9E2E7\" bg=\"white\" color=\"#24323A\" disabled={Boolean(openingTenant)} aria-label={`Abrir ${tenant.nome} em nova aba`} onClick={() => void openTenant(tenant)} _hover={{ borderColor: \"#39BFED\", bg: \"#F6FCFE\" }}>\n <VStack align=\"start\" gap={1} py={3}>\n <Text fontWeight=\"700\">{tenant.nome}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\">{[tenant.slug, tenant.tipo, tenant.status].filter(Boolean).join(\" · \")}</Text>\n <Text fontSize=\"xs\" color=\"#168EB9\">{openingTenant === tenant.id ? \"Abrindo...\" : \"Abrir em nova aba\"}</Text>\n </VStack>\n </Button>\n ))}\n </SimpleGrid>\n </Box>\n )}\n\n {message ? <Box role=\"status\" borderRadius=\"10px\" bg=\"blue.50\" color=\"blue.800\" px={4} py={3} fontSize=\"sm\">{message}</Box> : null}\n\n {tenants.length <= 1 ? (\n <Button type=\"submit\" bg=\"#07262E\" color=\"white\" _hover={{ bg: \"#0B3843\" }} disabled={submitting || !email.trim() || !password}>\n {submitting ? \"Validando acesso...\" : \"Entrar\"}\n </Button>\n ) : null}\n {app.kind === \"portal-cockpit\" && onboardingEnabled && tenants.length <= 1 ? (\n <Text textAlign=\"center\" fontSize=\"sm\" color=\"gray.600\">Ainda não possui acesso? <Link to=\"/cadastro\">Criar conta</Link></Text>\n ) : null}\n </VStack>\n </form>\n </Box>\n </Flex>\n );\n}\n\n","import { useState, type FormEvent } from \"react\";\nimport { Box, Button, Flex, Heading, Input, Text, VStack } from \"@chakra-ui/react\";\nimport { Navigate } from \"react-router-dom\";\nimport { useOonAuth } from \"./AuthProvider\";\n\nexport function FirstAccessPage() {\n const { status, completeFirstAccess } = useOonAuth();\n const [password, setPassword] = useState(\"\");\n const [confirm, setConfirm] = useState(\"\");\n const [submitting, setSubmitting] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n\n if (status === \"authenticated\") return <Navigate to=\"/\" replace />;\n if (status === \"unauthenticated\") return <Navigate to=\"/login\" replace />;\n if (status === \"forbidden\") return <Navigate to=\"/acesso-negado\" replace />;\n\n async function submit(event: FormEvent) {\n event.preventDefault();\n setMessage(null);\n if (password.length < 8) {\n setMessage(\"A senha deve possuir pelo menos 8 caracteres.\");\n return;\n }\n if (password !== confirm) {\n setMessage(\"As senhas informadas não conferem.\");\n return;\n }\n setSubmitting(true);\n try {\n await completeFirstAccess(password);\n } catch (error: any) {\n setMessage(error?.message || \"Não foi possível definir a nova senha.\");\n } finally {\n setSubmitting(false);\n }\n }\n\n return (\n <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box width=\"100%\" maxW=\"460px\" bg=\"white\" borderWidth=\"1px\" borderRadius=\"18px\" p={{ base: 6, md: 9 }}>\n <form onSubmit={(event) => void submit(event)}>\n <VStack align=\"stretch\" gap={5}>\n <Box>\n <Text color=\"#39BFED\" fontSize=\"xs\" fontWeight=\"700\" textTransform=\"uppercase\">Primeiro acesso</Text>\n <Heading mt={2} size=\"lg\">Defina sua nova senha</Heading>\n <Text mt={2} fontSize=\"sm\" color=\"gray.600\">O acesso à Central só será liberado depois desta etapa.</Text>\n </Box>\n <Box>\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Nova senha</Text>\n <Input type=\"password\" autoComplete=\"new-password\" value={password} onChange={(event) => setPassword(event.target.value)} required />\n </Box>\n <Box>\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Confirmar senha</Text>\n <Input type=\"password\" autoComplete=\"new-password\" value={confirm} onChange={(event) => setConfirm(event.target.value)} required />\n </Box>\n {message ? <Box role=\"alert\" bg=\"red.50\" borderRadius=\"md\" p={3}><Text fontSize=\"sm\">{message}</Text></Box> : null}\n <Button type=\"submit\" disabled={submitting}>{submitting ? \"Salvando…\" : \"Definir nova senha\"}</Button>\n </VStack>\n </form>\n </Box>\n </Flex>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { Box, Button, Heading, Input, Text, VStack } from \"@chakra-ui/react\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { useActivation } from \"./ActivationProvider\";\n\ntype Field = {\n name: string;\n label: string;\n type: string;\n required?: boolean;\n defaultValue?: unknown;\n options?: string[];\n readOnly?: boolean;\n placeholder?: string;\n helpText?: string;\n minLength?: number;\n autoComplete?: string;\n};\n\ntype Preview = {\n tenant?: Record<string, unknown>;\n app?: Record<string, unknown>;\n licenca?: Record<string, unknown>;\n entitlement?: Record<string, unknown>;\n deployment?: Record<string, unknown>;\n binding?: Record<string, unknown>;\n ativacao?: Record<string, unknown>;\n};\n\ntype ActivationConfiguration = {\n mode: \"root-bootstrap\" | \"member-activation\";\n rootFields: Field[];\n globalFields: Field[];\n appFields: Field[];\n defaults: Record<string, unknown>;\n technical: Record<string, string>;\n};\n\ntype DevLocalActivationResult = {\n token?: string;\n appCode?: string;\n usuario?: Record<string, unknown>;\n tenant?: Record<string, unknown>;\n app?: Record<string, unknown>;\n licenca?: Record<string, unknown>;\n entitlement?: Record<string, unknown>;\n deployment?: Record<string, unknown>;\n binding?: Record<string, unknown>;\n instrucoes?: { env?: string; observacao?: string };\n};\n\nfunction encodeBasicCredentials(email: string, password: string): string {\n const bytes = new TextEncoder().encode(`${email}:${password}`);\n let binary = \"\";\n for (const byte of bytes) binary += String.fromCharCode(byte);\n return window.btoa(binary);\n}\n\nexport function ActivationPage() {\n const { http } = useOonApi();\n const activation = useActivation();\n const [step, setStep] = useState(1);\n const [config, setConfig] = useState<ActivationConfiguration | null>(null);\n const [code, setCode] = useState(\"\");\n const [preview, setPreview] = useState<Preview | null>(null);\n const [global, setGlobal] = useState<Record<string, unknown>>({});\n const [app, setApp] = useState<Record<string, unknown>>({});\n const [rootEmail, setRootEmail] = useState(\"\");\n const [rootPassword, setRootPassword] = useState(\"\");\n const [devName, setDevName] = useState(\"\");\n const [devEmail, setDevEmail] = useState(\"\");\n const [devPassword, setDevPassword] = useState(\"\");\n const [showCodeFlow, setShowCodeFlow] = useState(false);\n const [devResult, setDevResult] = useState<DevLocalActivationResult | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [submitting, setSubmitting] = useState(false);\n\n useEffect(() => {\n http\n .get<ActivationConfiguration>(\"/ativacao/configuracao\")\n .then((response) => {\n setConfig(response.data);\n setGlobal(response.data.defaults || {});\n })\n .catch(() =>\n setError(\"Não foi possível carregar a configuração de ativação.\"),\n );\n }, [http]);\n\n useEffect(() => {\n if (activation.status === \"active\") {\n window.location.replace(\"/login\");\n }\n }, [activation.status]);\n\n async function activateRoot() {\n setSubmitting(true);\n setError(null);\n\n try {\n await http.post(\"/ativacao/ativar-root\", {\n email: rootEmail.trim(),\n senha: rootPassword,\n });\n setRootPassword(\"\");\n setStep(6);\n await activation.refresh();\n window.setTimeout(() => window.location.replace(\"/login\"), 900);\n } catch (caught) {\n setRootPassword(\"\");\n setError(\n (caught as Error).message ||\n \"Não foi possível concluir a ativação inicial.\",\n );\n } finally {\n setSubmitting(false);\n }\n }\n\n async function activateDevLocal() {\n setSubmitting(true);\n setError(null);\n\n try {\n const response = await http.post<DevLocalActivationResult>(\n \"/ativacao/ativar-dev-local\",\n {\n nomeUsuario: devName.trim() || undefined,\n nomeCentral: global.nomeInstancia || config?.defaults?.nomeInstancia,\n appName: config?.defaults?.nomeInstancia || config?.technical?.appCode,\n urlPublica: global.urlPublica,\n },\n {\n headers: {\n Authorization: `Basic ${encodeBasicCredentials(\n devEmail.trim().toLowerCase(),\n devPassword,\n )}`,\n },\n },\n );\n\n setDevPassword(\"\");\n setDevResult(response.data);\n setStep(6);\n\n const token = response.data.token;\n window.setTimeout(() => {\n window.location.replace(token ? `/?code=${encodeURIComponent(token)}` : \"/login\");\n }, 900);\n } catch (caught) {\n setDevPassword(\"\");\n setError(\n (caught as Error).message ||\n \"Não foi possível ativar a Central em desenvolvimento.\",\n );\n } finally {\n setSubmitting(false);\n }\n }\n\n async function validateCode() {\n setSubmitting(true);\n setError(null);\n\n try {\n const response = await http.post(\"/ativacao/validar-codigo\", {\n codigoAtivacao: code,\n });\n setPreview(response.data);\n setStep(2);\n } catch (caught) {\n setError((caught as Error).message || \"Código inválido.\");\n } finally {\n setSubmitting(false);\n }\n }\n\n async function completeMemberActivation() {\n setSubmitting(true);\n setError(null);\n\n try {\n await http.post(\"/ativacao/concluir\", {\n codigoAtivacao: code,\n nomeInstancia: global.nomeInstancia,\n parametrosGlobais: global,\n parametrosAplicacao: app,\n });\n setStep(6);\n setCode(\"\");\n await activation.refresh();\n window.setTimeout(() => window.location.replace(\"/login\"), 1200);\n } catch (caught) {\n setError(\n (caught as Error).message ||\n \"Não foi possível concluir a ativação.\",\n );\n } finally {\n setSubmitting(false);\n }\n }\n\n function renderField(\n field: Field,\n values: Record<string, unknown>,\n setValues: (value: Record<string, unknown>) => void,\n ) {\n return (\n <Box key={field.name} w=\"100%\">\n <Text fontWeight=\"medium\">\n {field.label}\n {field.required ? \" *\" : \"\"}\n </Text>\n <Input\n type={\n field.type === \"password\" || field.type === \"secret\"\n ? \"password\"\n : field.type === \"email\"\n ? \"email\"\n : field.type === \"url\"\n ? \"url\"\n : field.type === \"number\" || field.type === \"integer\"\n ? \"number\"\n : \"text\"\n }\n value={String(values[field.name] ?? field.defaultValue ?? \"\")}\n readOnly={field.readOnly}\n placeholder={field.placeholder}\n minLength={field.minLength}\n autoComplete={field.autoComplete}\n onChange={(event) =>\n setValues({ ...values, [field.name]: event.target.value })\n }\n />\n {field.helpText ? (\n <Text fontSize=\"sm\" color=\"gray.500\">\n {field.helpText}\n </Text>\n ) : null}\n </Box>\n );\n }\n\n function renderDevLocalActivation() {\n return (\n <>\n <Text color=\"gray.700\">\n Entre com seu e-mail e senha para ativar esta Central em ambiente de\n desenvolvimento. Se o e-mail ainda não existir na Central de\n Ativações, o usuário será criado automaticamente com perfil de\n desenvolvedor.\n </Text>\n\n <Box w=\"100%\">\n <Text fontWeight=\"medium\">Nome do usuário</Text>\n <Input\n value={devName}\n onChange={(event) => setDevName(event.target.value)}\n placeholder=\"Seu nome\"\n autoComplete=\"name\"\n />\n </Box>\n\n <Box w=\"100%\">\n <Text fontWeight=\"medium\">E-mail *</Text>\n <Input\n type=\"email\"\n value={devEmail}\n onChange={(event) => setDevEmail(event.target.value)}\n placeholder=\"dev@empresa.com.br\"\n autoComplete=\"email\"\n />\n </Box>\n\n <Box w=\"100%\">\n <Text fontWeight=\"medium\">Senha *</Text>\n <Input\n type=\"password\"\n value={devPassword}\n onChange={(event) => setDevPassword(event.target.value)}\n placeholder=\"Mínimo de 8 caracteres\"\n minLength={8}\n autoComplete=\"current-password\"\n />\n </Box>\n\n <Button\n colorPalette=\"blue\"\n onClick={activateDevLocal}\n loading={submitting}\n disabled={\n submitting ||\n !devEmail.trim() ||\n devPassword.length < 8 ||\n !activation.details?.podeAtivar\n }\n >\n Ativar ambiente de desenvolvimento\n </Button>\n\n <Button\n variant=\"outline\"\n onClick={() => setShowCodeFlow(true)}\n disabled={submitting}\n >\n Usar código de ativação manual\n </Button>\n </>\n );\n }\n\n const rootMode =\n config?.mode === \"root-bootstrap\" || activation.details?.role === \"root\";\n const isDevelopmentMember =\n !rootMode && config?.technical?.ambiente === \"desenvolvimento\";\n\n if (activation.status === \"loading\" || !config) {\n return (\n <Box minH=\"100vh\" bg=\"gray.50\" p={8}>\n <VStack\n maxW=\"760px\"\n mx=\"auto\"\n bg=\"white\"\n p={8}\n borderRadius=\"lg\"\n align=\"stretch\"\n gap={5}\n >\n <Heading>Preparando ativação...</Heading>\n {error ? <Text color=\"red.600\">{error}</Text> : null}\n </VStack>\n </Box>\n );\n }\n\n if (rootMode) {\n return (\n <Box minH=\"100vh\" bg=\"gray.50\" p={8}>\n <VStack\n maxW=\"560px\"\n mx=\"auto\"\n bg=\"white\"\n p={8}\n borderRadius=\"lg\"\n align=\"stretch\"\n gap={5}\n >\n <Heading>Ativação inicial do Ecossistema Oon</Heading>\n <Text color=\"gray.600\">\n Esta é a aplicação root do ecossistema. Informe somente o e-mail e\n a senha do primeiro administrador. O Core criará a estrutura mínima\n necessária para liberar o primeiro login.\n </Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n App: {config.technical.appCode} · Ambiente:{\" \"}\n {config.technical.ambiente}\n </Text>\n\n {error ? <Text color=\"red.600\">{error}</Text> : null}\n\n {step !== 6 ? (\n <>\n <Box w=\"100%\">\n <Text fontWeight=\"medium\">E-mail do administrador *</Text>\n <Input\n type=\"email\"\n autoComplete=\"email\"\n value={rootEmail}\n onChange={(event) => setRootEmail(event.target.value)}\n placeholder=\"administrador@empresa.com.br\"\n />\n </Box>\n\n <Box w=\"100%\">\n <Text fontWeight=\"medium\">Senha *</Text>\n <Input\n type=\"password\"\n minLength={8}\n autoComplete=\"new-password\"\n value={rootPassword}\n onChange={(event) => setRootPassword(event.target.value)}\n placeholder=\"Mínimo de 8 caracteres\"\n />\n </Box>\n\n <Button\n colorPalette=\"blue\"\n onClick={activateRoot}\n loading={submitting}\n disabled={\n submitting ||\n !rootEmail.trim() ||\n rootPassword.length < 8 ||\n !activation.details?.podeAtivar\n }\n >\n Criar ecossistema e ativar\n </Button>\n </>\n ) : (\n <>\n <Heading size=\"md\">Ativação concluída</Heading>\n <Text>\n Usuário, acesso do sistema e aplicativo root foram preparados.\n Redirecionando para o primeiro login...\n </Text>\n </>\n )}\n </VStack>\n </Box>\n );\n }\n\n return (\n <Box minH=\"100vh\" bg=\"gray.50\" p={8}>\n <VStack\n maxW=\"760px\"\n mx=\"auto\"\n bg=\"white\"\n p={8}\n borderRadius=\"lg\"\n align=\"stretch\"\n gap={5}\n >\n <Heading>Ativação da Central Oon</Heading>\n <Text>\n App: {config.technical.appCode} · Ambiente:{\" \"}\n {config.technical.ambiente} · Central:{\" \"}\n {config.technical.centralAtivacaoUrl ||\n config.technical.centralAtivacaoHost}\n </Text>\n\n {error ? <Text color=\"red.600\">{error}</Text> : null}\n\n {step === 1 && isDevelopmentMember && !showCodeFlow\n ? renderDevLocalActivation()\n : null}\n\n {step === 1 && (!isDevelopmentMember || showCodeFlow) && (\n <>\n <Text>\n Informe o código de ativação para validar Tenant, App,\n Entitlement e Deployment. A licença será validada somente para\n Apps comerciais.\n </Text>\n <Input\n aria-label=\"Código de ativação\"\n value={code}\n onChange={(event) => setCode(event.target.value)}\n placeholder=\"OON-XXXX\"\n />\n <Button\n onClick={validateCode}\n loading={submitting}\n disabled={!code || submitting}\n >\n Validar código\n </Button>\n {isDevelopmentMember ? (\n <Button\n variant=\"outline\"\n onClick={() => setShowCodeFlow(false)}\n disabled={submitting}\n >\n Voltar para ativação com usuário\n </Button>\n ) : null}\n </>\n )}\n\n {step === 2 && (\n <>\n <Heading size=\"md\">Confirmação</Heading>\n <pre>{JSON.stringify(preview, null, 2)}</pre>\n <Button onClick={() => setStep(3)}>Continuar</Button>\n </>\n )}\n\n {step === 3 && (\n <>\n {config.globalFields.map((field) =>\n renderField(field, global, setGlobal),\n )}\n <Button onClick={() => setStep(4)}>Continuar</Button>\n </>\n )}\n\n {step === 4 && (\n <>\n {config.appFields.length ? (\n config.appFields.map((field) => renderField(field, app, setApp))\n ) : (\n <Text>Nenhum parâmetro adicional declarado.</Text>\n )}\n <Button onClick={() => setStep(5)}>Revisar</Button>\n </>\n )}\n\n {step === 5 && (\n <>\n <Text>\n Ao confirmar, o código será consumido e este runtime será\n vinculado ao Deployment do Ecossistema Oon.\n </Text>\n <Button\n colorPalette=\"blue\"\n onClick={completeMemberActivation}\n loading={submitting}\n disabled={submitting}\n >\n Concluir ativação\n </Button>\n </>\n )}\n\n {step === 6 && (\n <>\n <Heading size=\"md\">Ativação concluída</Heading>\n {devResult?.appCode ? (\n <Text>\n Código do app: {devResult.appCode}. Redirecionando para a\n Central em desenvolvimento...\n </Text>\n ) : (\n <Text>Redirecionando para o login...</Text>\n )}\n {devResult?.instrucoes?.env ? (\n <Text fontSize=\"sm\" color=\"gray.500\">\n {devResult.instrucoes.env}\n </Text>\n ) : null}\n </>\n )}\n </VStack>\n </Box>\n );\n}\n\nexport function InstanceBlockedPage({\n title,\n message,\n}: {\n title: string;\n message: string;\n}) {\n return (\n <Box p={8}>\n <Heading>{title}</Heading>\n <Text>{message}</Text>\n </Box>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { useOonAuth } from \"./AuthProvider\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\n\n/**\n * Protege rotas privadas: enquanto valida o token mostra loading; sem sessão\n * o AuthProvider já redireciona para o login externo, então aqui só seguramos\n * o render. `permission` opcional bloqueia por papel (UX; back valida de novo).\n */\nexport function RouteGuard({\n permission,\n children,\n}: {\n permission?: string | string[];\n children: ReactNode;\n}) {\n const { status, hasPermission } = useOonAuth();\n\n if (status === \"loading\") return <LoadingScreen />;\n if (status === \"unauthenticated\") return <LoadingScreen message=\"Redirecionando para o login...\" />;\n if (!hasPermission(permission)) {\n return <LoadingScreen message=\"Você não tem acesso a esta tela.\" />;\n }\n return <>{children}</>;\n}\n","import { Navigate } from \"react-router-dom\";\nimport { useActivation } from \"./ActivationProvider\";\nexport function ActivationGuard({ children }: { children: JSX.Element }) {\n const { status } = useActivation();\n if (status === \"loading\") return null;\n if (status === \"suspended\") return <Navigate to=\"/instancia-suspensa\" replace />;\n if (status === \"revoked\") return <Navigate to=\"/instancia-revogada\" replace />;\n if (status !== \"active\" && window.location.pathname !== \"/ativacao\") return <Navigate to=\"/ativacao\" replace />;\n return children;\n}\n","const PIPELINE_BOARD_STYLE_ID = \"oon-core-pipeline-board-natural-height\";\n\n/**\n * O quadro mantém a rolagem horizontal no fim do conteúdo e cresce conforme\n * a etapa com mais tickets. As setas continuam acessíveis durante a rolagem\n * vertical sem transformar o quadro em uma área de scroll própria.\n */\nexport const PIPELINE_BOARD_LAYOUT_CSS = `\n:where(*) > [data-oon-pipeline-board=\"true\"] {\n height: auto !important;\n min-height: 420px;\n overflow-y: visible !important;\n align-items: stretch !important;\n}\n\n:where(*) > [data-oon-pipeline-board=\"true\"] > * {\n align-self: stretch;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) {\n display: grid;\n grid-template-areas: \"oon-pipeline-board\";\n align-items: start;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > [data-oon-pipeline-board=\"true\"] {\n grid-area: oon-pipeline-board;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > button[aria-label=\"Deslizar quadro para a esquerda\"],\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > button[aria-label=\"Deslizar quadro para a direita\"] {\n grid-area: oon-pipeline-board;\n position: sticky !important;\n top: calc(50vh - 17px) !important;\n right: auto !important;\n left: auto !important;\n align-self: start;\n transform: none !important;\n z-index: 3;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > button[aria-label=\"Deslizar quadro para a esquerda\"] {\n justify-self: start;\n margin-left: 8px;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > button[aria-label=\"Deslizar quadro para a direita\"] {\n justify-self: end;\n margin-right: 8px;\n}\n`;\n\nexport function installPipelineBoardLayoutStyles(targetDocument: Document = document) {\n if (targetDocument.getElementById(PIPELINE_BOARD_STYLE_ID)) return;\n\n const style = targetDocument.createElement(\"style\");\n style.id = PIPELINE_BOARD_STYLE_ID;\n style.textContent = PIPELINE_BOARD_LAYOUT_CSS;\n targetDocument.head.appendChild(style);\n}\n","import type { OonAppDefinition, OonCoreFrontConfig, OonMenuItem, OonModule, OonNavigationConfig } from \"../types\";\nimport { start } from \"../start\";\nimport { defineOonNavigation, defineOonRoutes } from \"../routing\";\n\nfunction navigationItems(navigation: OonAppDefinition[\"navigation\"]): OonMenuItem[] {\n if (!navigation) return [];\n return Array.isArray(navigation) ? navigation : navigation.items ?? [];\n}\n\nexport function defineOonApp<const T extends OonAppDefinition>(definition: T): T {\n if (!definition?.app?.id) throw new Error(\"defineOonApp: app.id é obrigatório.\");\n if (!definition?.app?.name) throw new Error(\"defineOonApp: app.name é obrigatório.\");\n if (!definition?.api?.baseUrl) throw new Error(\"defineOonApp: api.baseUrl é obrigatório.\");\n if (definition.security?.enableRouteGuard === false || definition.security?.enablePermissionGate === false) {\n throw new Error(\"defineOonApp: guards obrigatórios de rota e permissão não podem ser desabilitados.\");\n }\n defineOonRoutes(definition.routes ?? []);\n defineOonNavigation(navigationItems(definition.navigation));\n return definition;\n}\n\nexport function appDefinitionToConfig(definition: OonAppDefinition): OonCoreFrontConfig {\n const app = defineOonApp(definition);\n const localModule: OonModule = {\n id: \"app.local\",\n label: app.app.name,\n routes: [...(app.routes ?? [])],\n menu: navigationItems(app.navigation),\n };\n const modules = localModule.routes?.length || localModule.menu?.length\n ? [localModule, ...(app.modules ?? [])]\n : [...(app.modules ?? [])];\n const uiNavigation: OonNavigationConfig | undefined = Array.isArray(app.navigation)\n ? { mode: \"manual\", items: app.navigation }\n : app.navigation;\n\n return {\n app: app.app,\n api: app.api,\n runtimeMode: app.runtimeMode,\n auth: app.auth,\n theme: app.theme,\n themes: app.themes,\n defaultThemeId: app.defaultThemeId,\n modules,\n ui: app.ui || app.pages?.length\n ? {\n ...app.ui,\n schemaVersion: 2,\n views: app.ui?.views ?? [],\n navigation: app.ui?.navigation ?? uiNavigation,\n pages: [...(app.ui?.pages ?? []), ...(app.pages ?? [])],\n }\n : undefined,\n layout: app.shell ?? app.ui?.layout,\n registry: {\n ...app.components,\n layoutSlots: { ...app.components?.layoutSlots, ...app.layouts },\n },\n security: {\n enableRouteGuard: true,\n enablePermissionGate: true,\n redactAssistantContext: true,\n disableConsoleInProduction: true,\n ...app.security,\n },\n systemPages: app.systemPages,\n rootElementId: app.rootElementId,\n };\n}\n\nexport function startOonApp(definition: OonAppDefinition): OonCoreFrontConfig {\n const config = appDefinitionToConfig(definition);\n start(config);\n return config;\n}\n"],"mappings":"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","names":["value","useMemo","useEffect","useState","Box","Text","value","jsx","jsxs","useState","useEffect","Box","Text","useEffect","useRef","useState","Box","Button","Flex","Heading","Input","Text","VStack","useLocation","jsx","jsxs","useEffect","useState","Fragment","jsx","jsxs","useState","useEffect","jsx","jsx","value","Navigate","Box","Button","Flex","Image","Text","useState","Box","Flex","Text","useState","jsx","jsxs","value","useState","Box","Flex","Text","jsx","jsxs","useState","Box","Flex","Text","Button","Image","jsx","Box","Button","Flex","Heading","Text","VStack","useNavigate","jsx","jsxs","useNavigate","Flex","Box","VStack","Text","Heading","Button","useLocation","Fragment","jsx","useLocation","useState","Box","Button","Flex","Heading","Input","Text","VStack","Link","Navigate","useLocation","jsx","jsxs","value","useLocation","useState","Navigate","Flex","Box","VStack","Text","Heading","Input","Button","Link","useState","Box","Button","Flex","Heading","Input","Text","VStack","Navigate","jsx","jsxs","useState","Navigate","Flex","Box","VStack","Text","Heading","Input","Button","useEffect","useState","Box","Button","Heading","Input","Text","VStack","Fragment","jsx","jsxs","useState","useEffect","Box","Text","Input","Button","VStack","Heading","Fragment","jsx","Navigate","jsx","Navigate","jsx","Navigate","jsx","useMemo","storage","tenantStorage","http","router","jsx"]}
1
+ {"version":3,"sources":["../src/security/tenantStorage.ts","../src/start.tsx","../src/app/OonApp.tsx","../src/security/AcceptInviteCentralPage.tsx","../src/security/AcceptInvitePage.tsx","../src/security/OnboardingPage.tsx","../src/app/OonProviders.tsx","../src/config/queryClient.ts","../src/shell/LocalRuntimeBanner.tsx","../src/app/moduleRegistry.tsx","../src/app/createOonRouter.tsx","../src/shell/DefaultShell.tsx","../src/shell/Sidebar.tsx","../package.json","../src/runtime/versionInfo.ts","../src/shell/AuthenticatedLayout.tsx","../src/security/AccessDeniedPage.tsx","../src/security/AppAccessGuard.tsx","../src/security/LoginPage.tsx","../src/security/FirstAccessPage.tsx","../src/security/ActivationPage.tsx","../src/security/RouteGuard.tsx","../src/security/ActivationGuard.tsx","../src/components/internal/pipelineBoardLayout.ts","../src/app/codeFirst.ts"],"sourcesContent":["export interface TenantStorage {\n get(): string | null;\n set(tenantId: string): void;\n clear(): void;\n}\n\nexport interface TenantStorageOptions {\n enabled?: boolean;\n}\n\nfunction normalize(value: unknown): string | null {\n const normalized = String(value ?? \"\").trim();\n return normalized || null;\n}\n\nfunction tenantFromUrl(key: string): string | null {\n if (typeof window === \"undefined\") return null;\n const url = new URL(window.location.href);\n const tenantId = normalize(url.searchParams.get(\"tenant\"));\n if (!tenantId) return null;\n window.sessionStorage.setItem(key, tenantId);\n url.searchParams.delete(\"tenant\");\n window.history.replaceState(window.history.state, \"\", `${url.pathname}${url.search}${url.hash}`);\n return tenantId;\n}\n\n/**\n * Mantém o tenant no escopo da aba. Isso permite abrir Tenant A e Tenant B em\n * janelas diferentes sem uma aba trocar o contexto da outra. O query param\n * `tenant` transporta somente o identificador selecionado; o backend continua\n * validando o membership em todas as requisições.\n */\nexport function createTenantStorage(appId: string, options: TenantStorageOptions = {}): TenantStorage {\n const key = `oon:${appId}:tenant`;\n const enabled = options.enabled !== false;\n const clearStoredTenant = () => {\n if (typeof window === \"undefined\") return;\n window.sessionStorage.removeItem(key);\n window.localStorage.removeItem(key);\n };\n\n if (!enabled) {\n return {\n get() {\n clearStoredTenant();\n return null;\n },\n set() {\n clearStoredTenant();\n },\n clear: clearStoredTenant,\n };\n }\n\n return {\n get() {\n if (typeof window === \"undefined\") return null;\n const incoming = tenantFromUrl(key);\n if (incoming) return incoming;\n // Remove a seleção antiga global criada por versões anteriores do Core.\n window.localStorage.removeItem(key);\n return normalize(window.sessionStorage.getItem(key));\n },\n set(tenantId) {\n if (typeof window === \"undefined\") return;\n const value = normalize(tenantId);\n if (!value) {\n window.sessionStorage.removeItem(key);\n return;\n }\n window.sessionStorage.setItem(key, value);\n },\n clear() {\n if (typeof window !== \"undefined\") window.sessionStorage.removeItem(key);\n },\n };\n}\n\n","import { StrictMode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport type { OonCoreFrontConfig } from \"./types\";\nimport { OonApp } from \"./app/OonApp\";\nimport { installPipelineBoardLayoutStyles } from \"./components/internal/pipelineBoardLayout\";\n\nfunction validateConfig(config: OonCoreFrontConfig) {\n if (!config?.app?.id) throw new Error(\"oonCoreFront.start: config.app.id é obrigatório.\");\n if (!config?.api?.baseUrl) throw new Error(\"oonCoreFront.start: config.api.baseUrl é obrigatório.\");\n}\n\nfunction applyDocumentMeta(config: OonCoreFrontConfig) {\n if (config.app.title) document.title = config.app.title;\n if (config.app.favicon) {\n let link = document.querySelector<HTMLLinkElement>('link[rel=\"icon\"]');\n if (!link) {\n link = document.createElement(\"link\");\n link.rel = \"icon\";\n document.head.appendChild(link);\n }\n link.href = config.app.favicon;\n }\n}\n\nfunction hardenConsole(config: OonCoreFrontConfig) {\n if (config.security?.disableConsoleInProduction && import.meta.env?.PROD) {\n const noop = () => {};\n console.log = noop;\n console.debug = noop;\n console.info = noop;\n }\n}\n\n/**\n * Montagem interna usada por `startOonApp`. Apps consumidores usam somente a\n * API code-first pública e não precisam conhecer providers ou infraestrutura.\n */\nexport function start(config: OonCoreFrontConfig) {\n validateConfig(config);\n applyDocumentMeta(config);\n installPipelineBoardLayoutStyles();\n hardenConsole(config);\n\n const rootId = config.rootElementId ?? \"root\";\n const el = document.getElementById(rootId);\n if (!el) throw new Error(`oonCoreFront.start: elemento #${rootId} não encontrado no DOM.`);\n\n createRoot(el).render(\n <StrictMode>\n <OonApp config={config} />\n </StrictMode>\n );\n}\n\n","import { useMemo } from \"react\";\nimport { RouterProvider } from \"react-router-dom\";\nimport type { OonCoreFrontConfig, OonRoute } from \"../types\";\nimport { createRestClient } from \"../api/createRestClient\";\nimport { createTokenStorage } from \"../security/tokenStorage\";\nimport { createTenantStorage } from \"../security/tenantStorage\";\nimport { AcceptInviteCentralPage } from \"../security/AcceptInviteCentralPage\";\nimport { OnboardingPage } from \"../security/OnboardingPage\";\nimport { OonProviders } from \"./OonProviders\";\nimport { resolveRegistry } from \"./moduleRegistry\";\nimport { createOonRouter } from \"./createOonRouter\";\n\nfunction localLoginUrl(): string {\n const current = `${window.location.pathname}${window.location.search}`;\n return `/login?redirect=${encodeURIComponent(current)}`;\n}\n\n/**\n * Raiz da aplicação Core. Cria o cliente REST, resolve rotas/menu e monta os\n * providers. Respostas 401 seguem para o login; 403 é tratado pelo AuthProvider.\n */\nexport function OonApp({ config }: { config: OonCoreFrontConfig }) {\n const { http, storage, tenantStorage, router } = useMemo(() => {\n const storage = createTokenStorage(config.app.id);\n const tenantStorage = createTenantStorage(config.app.id, {\n enabled: config.app.tenancyModel !== \"none\",\n });\n const externalLoginUrl = config.auth?.loginUrl ?? config.api.meusAppsUrl;\n\n const http = createRestClient({\n api: config.api,\n appId: config.app.id,\n runtimeMode: config.runtimeMode,\n getToken: () => storage.get(),\n getTenantId: () => tenantStorage.get(),\n onUnauthorized: () => {\n storage.clear();\n\n if (config.runtimeMode === \"local\" || window.location.pathname === \"/accept-invite\") return;\n\n if (externalLoginUrl) {\n window.location.href = externalLoginUrl;\n return;\n }\n\n if (window.location.pathname !== \"/login\") {\n window.location.href = localLoginUrl();\n }\n },\n });\n\n const resolved = resolveRegistry(config);\n const routes: OonRoute[] = [...resolved.routes];\n const corePublicRoutes: OonRoute[] = [{\n path: \"/accept-invite\",\n public: true,\n element: <AcceptInviteCentralPage />,\n }];\n\n if (config.api.onboardingBaseUrl) {\n corePublicRoutes.push({ path: \"/cadastro\", public: true, element: <OnboardingPage baseUrl={config.api.onboardingBaseUrl} mode=\"register\" /> });\n corePublicRoutes.push({ path: \"/confirmar-email\", public: true, element: <OnboardingPage baseUrl={config.api.onboardingBaseUrl} mode=\"confirm\" /> });\n }\n\n const router = createOonRouter({\n app: config.app,\n menu: resolved.menu,\n routes,\n corePublicRoutes,\n onboardingEnabled: Boolean(config.api.onboardingBaseUrl),\n security: config.security,\n layout: config.layout ?? config.ui?.layout,\n registry: config.registry ?? config.ui?.registry,\n systemPages: config.systemPages,\n });\n\n return { http, storage, tenantStorage, router };\n }, [config]);\n\n return (\n <OonProviders\n config={config}\n http={http}\n storage={storage}\n tenantStorage={tenantStorage}\n >\n <RouterProvider router={router} />\n </OonProviders>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { Box, Text } from \"@chakra-ui/react\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { AcceptInvitePage } from \"./AcceptInvitePage\";\n\ninterface PublicRbacInfo {\n central?: { appCode: string; name: string };\n}\n\nexport function AcceptInviteCentralPage() {\n const { http } = useOonApi();\n const [centralName, setCentralName] = useState(\"Central Oon\");\n\n useEffect(() => {\n let active = true;\n http.get<PublicRbacInfo>(\"/core/rbac\")\n .then((response) => {\n if (active && response.data.central?.name) setCentralName(response.data.central.name);\n })\n .catch(() => undefined);\n return () => { active = false; };\n }, [http]);\n\n return (\n <Box bg=\"#F5F8FA\" minH=\"100vh\" pt={4}>\n <Box mx=\"auto\" maxW=\"480px\" px={4} textAlign=\"center\">\n <Text fontSize=\"sm\" fontWeight=\"700\">Convite para: {centralName}</Text>\n </Box>\n <AcceptInvitePage />\n </Box>\n );\n}\n","import { useEffect, useState, useRef, type FormEvent } from \"react\";\nimport { Box, Button, Flex, Heading, Input, Text, VStack } from \"@chakra-ui/react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useOonAuth } from \"./AuthProvider\";\nimport { useOonApi } from \"../api/ApiProvider\";\n\ninterface InvitationInfo {\n accountExists: boolean;\n allowedActions?: string[];\n blockedReason?: string | null;\n version?: number;\n registrationRequired?: boolean;\n sessionUser?: { email: string } | null;\n email: string;\n name?: string;\n roleCode: string;\n roleName?: string;\n expiresAt: string;\n}\n\nexport function AcceptInvitePage() {\n const { http } = useOonApi();\n const location = useLocation();\n const auth = useOonAuth();\n const token = new URLSearchParams(location.hash.slice(1)).get(\"token\") || new URLSearchParams(location.search).get(\"token\") || \"\";\n const [invitation, setInvitation] = useState<InvitationInfo | null>(null);\n const [sessionEmail, setSessionEmail] = useState(\"\");\n const operationKey = useRef(crypto.randomUUID());\n const [registration, setRegistration] = useState({ nome: \"\", userDocument: \"\", phone: \"\", termsAccepted: false });\n const [password, setPassword] = useState(\"\");\n const [confirm, setConfirm] = useState(\"\");\n const [message, setMessage] = useState<string | null>(null);\n const [inspectionAttempt, setInspectionAttempt] = useState(0);\n const [submitting, setSubmitting] = useState(false);\n const [done, setDone] = useState(false);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let active = true;\n operationKey.current = crypto.randomUUID();\n setLoading(true); setInvitation(null); setDone(false); setMessage(null); setPassword(\"\"); setConfirm(\"\");\n if (!token) {\n setMessage(\"Link de convite inválido.\");\n setLoading(false);\n return;\n }\n http.post<{ invitation: InvitationInfo }>(\"/core/invitations/inspect\", { token }, { headers: { \"x-oon-tenant-id\": false } })\n .then((response) => { if (active) {\n setInvitation(response.data.invitation);\n setSessionEmail(String(response.data.invitation.sessionUser?.email || \"\").trim().toLowerCase());\n } })\n .catch((error) => { if (active) setMessage(error?.status === 410\n ? \"Este convite é inválido, expirou, foi revogado ou já foi utilizado. Convites anteriores ao corte também podem ter sido invalidados. Solicite um novo convite ao administrador.\"\n : \"Não foi possível validar o convite. Tente novamente.\"); })\n .finally(() => { if (active) setLoading(false); });\n return () => { active = false; };\n }, [http, token, inspectionAttempt]);\n\n function clearSession() { auth.clearSession(); setSessionEmail(\"\"); }\n const sameSession = Boolean(sessionEmail && sessionEmail === invitation?.email.toLowerCase());\n const otherSession = Boolean(sessionEmail && !sameSession);\n const register = invitation?.accountExists === false;\n\n async function submit(event: FormEvent) {\n event.preventDefault();\n if (submitting || otherSession || auth.status === \"loading\") return;\n setMessage(null);\n if (!sameSession && register && password.length < 8) {\n setMessage(\"A senha deve possuir pelo menos 8 caracteres.\");\n return;\n }\n if (!sameSession && register && password !== confirm) {\n setMessage(\"As senhas informadas não conferem.\");\n return;\n }\n setSubmitting(true);\n try {\n await http.post(\"/core/invitations/accept\", {\n token, ...(invitation?.version !== undefined ? { version: invitation.version } : {}),\n ...(register && invitation?.registrationRequired ? { registration: { ...registration, termsVersion: \"2026-08-18\", privacyVersion: \"2026-08-18\" } } : {}),\n intent: sameSession ? \"session\" : register ? \"register\" : \"authenticate\",\n ...(sameSession ? {} : { password }),\n }, { headers: { \"idempotency-key\": operationKey.current, ...(sameSession ? {} : { Authorization: false }), \"x-oon-tenant-id\": false } });\n setDone(true);\n setMessage(\"Convite aceito. Seu acesso está disponível.\");\n } catch (error: any) {\n if (sameSession && error?.status === 401) clearSession();\n setMessage(error?.message || \"Não foi possível concluir o convite.\");\n } finally { setSubmitting(false); }\n }\n\n return (\n <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box width=\"100%\" maxW=\"480px\" bg=\"white\" borderWidth=\"1px\" borderRadius=\"18px\" p={{ base: 6, md: 9 }}>\n <VStack align=\"stretch\" gap={5}>\n <Box>\n <Text color=\"#39BFED\" fontSize=\"xs\" fontWeight=\"700\" textTransform=\"uppercase\">Central Oon</Text>\n <Heading mt={2} size=\"lg\">Aceitar convite</Heading>\n </Box>\n\n {loading ? <Text>Validando convite…</Text> : null}\n {invitation && !done ? (\n <>\n <Box bg=\"gray.50\" borderRadius=\"md\" p={4}>\n <Text fontWeight=\"700\">{invitation.name || invitation.email}</Text>\n <Text fontSize=\"sm\">{invitation.email}</Text>\n <Text fontSize=\"sm\" color=\"gray.600\">Perfil: {invitation.roleName || invitation.roleCode}</Text>\n </Box>\n {otherSession ? <Box>\n <Text>Você está conectado como {sessionEmail}. Este convite é para {invitation.email}.</Text>\n <Button onClick={clearSession}>Trocar de conta</Button>\n </Box> : <form onSubmit={(event) => void submit(event)}>\n <VStack align=\"stretch\" gap={4}>\n {register && invitation.registrationRequired ? <Box>\n <Text>Complete seu cadastro para aceitar este convite. Não será criada outra organização.</Text>\n <Input aria-label=\"Nome completo\" placeholder=\"Nome completo\" required value={registration.nome} onChange={e => setRegistration({ ...registration, nome: e.target.value })} />\n <Input aria-label=\"CPF\" placeholder=\"CPF\" required value={registration.userDocument} onChange={e => setRegistration({ ...registration, userDocument: e.target.value })} />\n <Input aria-label=\"Telefone\" placeholder=\"Telefone com DDD\" required value={registration.phone} onChange={e => setRegistration({ ...registration, phone: e.target.value })} />\n <label><input type=\"checkbox\" required checked={registration.termsAccepted} onChange={e => setRegistration({ ...registration, termsAccepted: e.target.checked })} /> Aceito os termos e a política de privacidade da plataforma (2026-08-18).</label>\n </Box> : null}\n {!sameSession ? <Box>\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">{register ? \"Nova senha\" : \"Senha atual\"}</Text>\n <Input aria-label={register ? \"Nova senha\" : \"Senha atual\"} type=\"password\" autoComplete={register ? \"new-password\" : \"current-password\"} value={password} onChange={(event) => setPassword(event.target.value)} required />\n </Box> : <Text>Você está conectado como {sessionEmail}. Confirme o aceite para liberar este acesso.</Text>}\n {!sameSession && register ? <Box>\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Confirmar senha</Text>\n <Input aria-label=\"Confirmar senha\" type=\"password\" autoComplete=\"new-password\" value={confirm} onChange={(event) => setConfirm(event.target.value)} required />\n </Box> : null}\n {!register && !sameSession ? <Text fontSize=\"sm\">Use a senha atual da sua conta Oon. Se esqueceu a senha, recupere-a pelo login da plataforma e depois reabra este convite.</Text> : null}\n {invitation.blockedReason ? <Text role=\"alert\">O aceite está indisponível ({invitation.blockedReason}). Solicite regularização ao administrador.</Text> : null}\n <Button type=\"submit\" disabled={submitting || auth.status === \"loading\" || Boolean(invitation.allowedActions && !invitation.allowedActions.includes(\"accept\"))}>{submitting ? \"Aceitando…\" : \"Aceitar convite\"}</Button>\n </VStack>\n </form>}\n </>\n ) : null}\n\n {message ? <Box role=\"status\" bg={done ? \"green.50\" : \"red.50\"} borderRadius=\"md\" p={3}><Text fontSize=\"sm\">{message}</Text></Box> : null}\n {!loading && !invitation && token ? <Button onClick={() => setInspectionAttempt(value => value + 1)}>Tentar novamente</Button> : null}\n {done ? <Button asChild><a href={sameSession ? \"/\" : \"/login\"}>{sameSession ? \"Abrir aplicativo\" : \"Ir para o login\"}</a></Button> : null}\n </VStack>\n </Box>\n </Flex>\n );\n}\n","import { useEffect, useRef, useState, type FormEvent } from \"react\";\nimport { Box, Button, Flex, Heading, Input, Text, VStack } from \"@chakra-ui/react\";\nimport { Link, useLocation } from \"react-router-dom\";\n\ntype Props = { baseUrl: string; mode: \"register\" | \"confirm\" };\nconst TERMS_VERSION = \"2026-08-18\";\nconst PRIVACY_VERSION = \"2026-08-18\";\n\nasync function post(baseUrl: string, path: string, body: unknown) {\n const response = await fetch(baseUrl.replace(/\\/$/, \"\") + \"/onboarding/\" + path, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", \"x-correlation-id\": crypto.randomUUID() },\n body: JSON.stringify(body),\n });\n const payload = await response.json().catch(() => ({}));\n if (!response.ok) throw new Error(payload.message || \"Não foi possível concluir a solicitação.\");\n return payload;\n}\n\nexport function OnboardingPage({ baseUrl, mode }: Props) {\n const location = useLocation();\n const [form, setForm] = useState({ nome: \"\", email: \"\", password: \"\", organizationName: \"\", organizationDocument: \"\" });\n const [accepted, setAccepted] = useState(false);\n const [message, setMessage] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const confirmationToken = useRef<string | null>(null);\n\n useEffect(() => {\n if (mode !== \"confirm\") return;\n const token = new URLSearchParams(location.search).get(\"token\");\n if (!token) return setMessage(\"Link de confirmação inválido.\");\n if (confirmationToken.current === token) return;\n confirmationToken.current = token;\n setBusy(true);\n post(baseUrl, \"confirm-email\", { token })\n .then(() => setMessage(\"E-mail confirmado. Seu acesso ao Meus Apps e Workspace está pronto.\"))\n .catch((error) => setMessage(error.message))\n .finally(() => setBusy(false));\n }, [baseUrl, location.search, mode]);\n\n async function submit(event: FormEvent) {\n event.preventDefault();\n setBusy(true);\n setMessage(\"\");\n try {\n const result = await post(baseUrl, \"register\", {\n ...form, termsAccepted: accepted, termsVersion: TERMS_VERSION, privacyVersion: PRIVACY_VERSION,\n });\n setMessage(result.message);\n } catch (error) {\n setMessage((error as Error).message);\n } finally {\n setBusy(false);\n }\n }\n\n return <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box width=\"100%\" maxW=\"520px\" bg=\"white\" borderWidth=\"1px\" borderRadius=\"18px\" p={{ base: 6, md: 9 }}>\n <VStack align=\"stretch\" gap={5}>\n <Box>\n <Text color=\"#39BFED\" fontSize=\"xs\" fontWeight=\"700\" textTransform=\"uppercase\">Plataforma Oon</Text>\n <Heading mt={2} size=\"lg\" color=\"#07262E\">{mode === \"register\" ? \"Crie seu acesso\" : \"Confirmação de e-mail\"}</Heading>\n <Text mt={2} color=\"gray.600\" fontSize=\"sm\">\n {mode === \"register\" ? \"Comece com Meus Apps e Workspace em modo de onboarding.\" : \"Validando seu link seguro de uso único.\"}\n </Text>\n </Box>\n {mode === \"register\" ? <form onSubmit={submit}>\n <VStack align=\"stretch\" gap={3}>\n <Input placeholder=\"Seu nome\" value={form.nome} onChange={(e) => setForm({ ...form, nome: e.target.value })} required />\n <Input type=\"email\" placeholder=\"voce@empresa.com.br\" value={form.email} onChange={(e) => setForm({ ...form, email: e.target.value })} required />\n <Input type=\"password\" minLength={8} placeholder=\"Senha com 8 ou mais caracteres\" value={form.password} onChange={(e) => setForm({ ...form, password: e.target.value })} required />\n <Input placeholder=\"Nome da organização\" value={form.organizationName} onChange={(e) => setForm({ ...form, organizationName: e.target.value })} required />\n <Input placeholder=\"CNPJ/Documento (opcional)\" value={form.organizationDocument} onChange={(e) => setForm({ ...form, organizationDocument: e.target.value })} />\n <label><input type=\"checkbox\" checked={accepted} onChange={(e) => setAccepted(e.target.checked)} /> <Text as=\"span\" fontSize=\"sm\">Aceito os termos e a política de privacidade vigentes.</Text></label>\n <Button type=\"submit\" bg=\"#07262E\" color=\"white\" disabled={busy || !accepted}>{busy ? \"Enviando...\" : \"Criar acesso\"}</Button>\n </VStack>\n </form> : null}\n {message ? <Box role=\"status\" bg=\"blue.50\" color=\"blue.800\" borderRadius=\"10px\" p={4}>{message}</Box> : null}\n <Text fontSize=\"sm\"><Link to=\"/login\">Voltar para o login</Link></Text>\n </VStack>\n </Box>\n </Flex>;\n}\n","import { type ReactNode, useMemo } from \"react\";\nimport { QueryClientProvider } from \"@tanstack/react-query\";\nimport type { AxiosInstance } from \"axios\";\nimport type { OonCoreFrontConfig } from \"../types\";\nimport { createOonQueryClient } from \"../config/queryClient\";\nimport { OonThemeProvider } from \"../config/ThemeProvider\";\nimport { ApiProvider } from \"../api/ApiProvider\";\nimport { AuthProvider } from \"../security/AuthProvider\";\nimport { ActivationProvider } from \"../security/ActivationProvider\";\nimport { TenantProvider } from \"../security/TenantProvider\";\nimport type { TokenStorage } from \"../security/tokenStorage\";\nimport type { TenantStorage } from \"../security/tenantStorage\";\nimport { LocalRuntimeBanner } from \"../shell/LocalRuntimeBanner\";\n\nexport interface OonProvidersProps {\n config: OonCoreFrontConfig;\n http: AxiosInstance;\n storage: TokenStorage;\n tenantStorage: TenantStorage;\n children: ReactNode;\n}\n\n/**\n * Monta, em ordem, todos os providers globais. Nenhuma Central cliente deve\n * montar QueryClient/Chakra/Auth/Api/Tenant manualmente.\n *\n * Ordem: QueryClient -> Chakra -> Api -> Activation -> Tenant -> Auth.\n */\nexport function OonProviders({\n config,\n http,\n storage,\n tenantStorage,\n children,\n}: OonProvidersProps) {\n const queryClient = useMemo(() => createOonQueryClient(), []);\n const loginUrl = config.auth?.loginUrl ?? config.api.meusAppsUrl;\n const authenticatedContent = (\n <AuthProvider\n http={http}\n storage={storage}\n auth={config.auth}\n loginUrl={loginUrl}\n runtimeMode={config.runtimeMode}\n >\n {config.runtimeMode === \"local\"\n ? <LocalRuntimeBanner http={http}>{children}</LocalRuntimeBanner>\n : children}\n </AuthProvider>\n );\n\n return (\n <QueryClientProvider client={queryClient}>\n <OonThemeProvider config={config}>\n <ApiProvider http={http}>\n <ActivationProvider http={http}>\n {config.app.tenancyModel === \"none\"\n ? authenticatedContent\n : <TenantProvider http={http} storage={tenantStorage}>{authenticatedContent}</TenantProvider>}\n </ActivationProvider>\n </ApiProvider>\n </OonThemeProvider>\n </QueryClientProvider>\n );\n}\n","import { QueryClient } from \"@tanstack/react-query\";\n\nconst QUERY_STALE_TIME_MS = 5 * 1000;\nconst QUERY_REFETCH_INTERVAL_MS = 10 * 1000;\n\n/**\n * QueryClient padrão do Core.\n *\n * A Central é uma interface operacional: listas e datagrids precisam refletir\n * rapidamente alterações feitas por automações, webhooks e outros usuários.\n * Por isso, consultas ativas ficam obsoletas em poucos segundos e são\n * revalidadas periodicamente enquanto a aba estiver visível.\n */\nexport function createOonQueryClient(): QueryClient {\n return new QueryClient({\n defaultOptions: {\n queries: {\n retry: 1,\n staleTime: QUERY_STALE_TIME_MS,\n refetchInterval: QUERY_REFETCH_INTERVAL_MS,\n refetchIntervalInBackground: false,\n refetchOnMount: \"always\",\n refetchOnReconnect: \"always\",\n refetchOnWindowFocus: \"always\",\n },\n mutations: {\n retry: 0,\n },\n },\n });\n}\n","import { useEffect, useState, type ReactNode } from \"react\";\nimport type { AxiosInstance } from \"axios\";\nimport { useOonAuth } from \"../security/AuthProvider\";\nimport { useActivation } from \"../security/ActivationProvider\";\n\ntype LocalRole = { code: string; name: string };\n\nexport function LocalRuntimeBanner({ http, children }: { http: AxiosInstance; children: ReactNode }) {\n const auth = useOonAuth();\n const activation = useActivation();\n const [roles, setRoles] = useState<LocalRole[]>([]);\n const roleCode = String((auth.user as { roleCode?: string } | null)?.roleCode || \"\");\n\n useEffect(() => {\n if (!auth.isAuthenticated) return;\n void http.get<{ roles: LocalRole[] }>(\"/auth/local/context\")\n .then((response) => setRoles(response.data.roles || []))\n .catch(() => setRoles([]));\n }, [auth.isAuthenticated, http]);\n\n async function switchRole(nextRole: string) {\n await http.post(\"/auth/local/role\", { roleCode: nextRole });\n await auth.retry();\n }\n\n const expiration = activation.details?.expiresAt\n ? new Intl.DateTimeFormat(\"pt-BR\", { dateStyle: \"short\", timeStyle: \"short\" })\n .format(new Date(activation.details.expiresAt))\n : null;\n\n return (\n <>\n <div\n role=\"status\"\n style={{\n alignItems: \"center\",\n background: \"#172554\",\n color: \"white\",\n display: \"flex\",\n flexWrap: \"wrap\",\n font: \"600 13px system-ui\",\n gap: 12,\n justifyContent: \"center\",\n padding: \"8px 16px\",\n }}\n >\n <span>Desenvolvimento local · desconectado do Ecossistema</span>\n {expiration ? <span>Expira em {expiration}</span> : null}\n {auth.isAuthenticated && roles.length > 1 ? (\n <label>\n Perfil local:{\" \"}\n <select\n aria-label=\"Perfil local\"\n value={roleCode}\n onChange={(event) => void switchRole(event.target.value)}\n style={{ color: \"#111827\" }}\n >\n {roles.map((role) => (\n <option key={role.code} value={role.code}>{role.name}</option>\n ))}\n </select>\n </label>\n ) : null}\n </div>\n {children}\n </>\n );\n}\n","import type { CollectionViewDef, DashboardViewDef, DocumentViewDef, OonCoreFrontConfig, OonMenuItem, OonRoute, OonViewDefinition, OonPageDef } from \"../types\";\nimport type { OonPipelineViewDef } from \"../pipelineTicket\";\nimport { CoreCollection } from \"../components/CoreCollection\";\nimport { CoreDocument } from \"../components/CoreDocument\";\nimport { CorePipeline } from \"../components/CorePipeline\";\nimport { CoreDashboard } from \"../components/CoreDashboard\";\nimport { CoreUsersAccess } from \"../components/CoreUsersAccess\";\nimport { CorePage } from \"../components/ui-v2/CorePage\";\nimport { CoreTransactionalEmail } from \"../components/CoreTransactionalEmail\";\n\nexport interface ResolvedRegistry { routes: OonRoute[]; menu: OonMenuItem[]; }\nfunction slug(value: string): string { return value.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\").toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\"); }\nfunction requiredPermissions(source: { permissions?: string[] }): string[] | undefined { const values = [...(source.permissions ?? [])].filter(Boolean); return values.length ? values : undefined; }\nfunction declaredAppCapabilities(config: OonCoreFrontConfig): string[] | undefined { const capabilities = (config.app as OonCoreFrontConfig[\"app\"] & { capabilities?: string[] }).capabilities; return Array.isArray(capabilities) ? capabilities : undefined; }\nfunction supportsCapabilities(config: OonCoreFrontConfig, source: { capabilities?: string[] }): boolean { const required = (source.capabilities ?? []).filter(Boolean); if (!required.length) return true; const declared = declaredAppCapabilities(config); if (!declared) return true; return required.every((capability) => declared.includes(capability)); }\nfunction viewId(view: OonViewDefinition): string { if (view.id) return view.id; if (view.type === \"dashboard\") return \"dashboard\"; return slug(view.model); }\nfunction viewPath(view: OonViewDefinition): string { if (view.path) return view.path; if (view.type === \"dashboard\") return \"/\"; return `/${viewId(view)}`; }\nfunction viewLabel(view: OonViewDefinition): string { if (view.label) return view.label; if (view.type === \"dashboard\") return \"Dashboard\"; return view.model; }\nfunction renderView(view: OonViewDefinition, registry?: OonCoreFrontConfig[\"registry\"]) {\n switch (view.type) {\n case \"collection\": { const v = view as CollectionViewDef; return <CoreCollection model={v.model} mode={v.mode} columns={v.columns} form={v.form} label={viewLabel(v)} section={v.section} importExport={v.importExport} list={v.list} relations={v.relations} detailModal={v.detailModal} cellRenderers={registry?.cellRenderers} registry={registry} />; }\n case \"document\": { const v = view as DocumentViewDef; return <CoreDocument model={v.model} label={viewLabel(v)} endpoint={v.endpoint} approval={v.approval} attachments={v.attachments} display={v.display} categoryField={v.categoryField} titleField={v.titleField} descriptionField={v.descriptionField} contentField={v.contentField} statusField={v.statusField} updatedAtField={v.updatedAtField} />; }\n case \"pipeline\": { const v = view as OonPipelineViewDef; return <CorePipeline model={v.model} label={viewLabel(v)} stageField={v.stageField} stages={v.stages} titleField={v.titleField} form={v.form} relations={v.relations} ticketModal={v.ticketModal} filters={v.filters} create={v.create} viewModes={v.viewModes} defaultView={v.defaultView} list={v.list} defaultActions={v.defaultActions} ticketActions={v.ticketActions} registry={registry} />; }\n case \"dashboard\": { const v = view as DashboardViewDef; return <CoreDashboard label={viewLabel(v)} widgets={v.widgets} />; }\n default: return null;\n }\n}\nfunction viewToRoute(view: OonViewDefinition, registry?: OonCoreFrontConfig[\"registry\"]): OonRoute { return { path: viewPath(view), element: renderView(view, registry), permissions: requiredPermissions(view), capabilities: \"capabilities\" in view ? view.capabilities : undefined }; }\nfunction pageToRoute(page: OonPageDef, registry: OonCoreFrontConfig[\"registry\"]): OonRoute { return { path: page.path, element: <CorePage page={page} registry={registry} />, public: page.public === true, permissions: requiredPermissions(page), capabilities: page.capabilities }; }\nfunction pageToMenu(page: OonPageDef): OonMenuItem | null { if (!page.label) return null; return { label: page.label, href: page.path, icon: page.icon, section: page.section, permissions: requiredPermissions(page), capabilities: page.capabilities, hidden: page.hidden, order: page.order }; }\nfunction viewToMenu(view: OonViewDefinition): OonMenuItem { const extended = view as OonViewDefinition & { hidden?: boolean; order?: number }; return { label: viewLabel(view), href: viewPath(view), icon: view.icon, section: view.section, permissions: requiredPermissions(view), capabilities: \"capabilities\" in view ? view.capabilities : undefined, hidden: extended.hidden, order: extended.order }; }\n\nexport function resolveRegistry(config: OonCoreFrontConfig): ResolvedRegistry {\n const routes: OonRoute[] = []; const menu: OonMenuItem[] = []; const seenPaths = new Set<string>(); const componentRegistry = config.registry ?? config.ui?.registry;\n const pushRoute = (route: OonRoute) => { if (!supportsCapabilities(config, route) || seenPaths.has(route.path)) return; seenPaths.add(route.path); routes.push({ ...route, permissions: requiredPermissions(route) }); };\n const pushMenu = (item: OonMenuItem) => { if (!supportsCapabilities(config, item)) return; menu.push({ ...item, permissions: requiredPermissions(item) }); };\n for (const mod of config.modules ?? []) { for (const route of mod.routes ?? []) pushRoute(route); for (const item of mod.menu ?? []) pushMenu(item); for (const view of mod.views ?? []) { pushRoute(viewToRoute(view, componentRegistry)); pushMenu(viewToMenu(view)); } }\n if ([\"root-central\", \"member-central\"].includes(String(config.app.kind || \"\"))) { pushRoute({ path: \"/usuarios-acessos\", element: <CoreUsersAccess />, permissions: [\"users.read\"] }); pushMenu({ label: \"Usuários e Acessos\", href: \"/usuarios-acessos\", section: \"Configurações\", order: 900, permissions: [\"users.read\"] }); }\n if (declaredAppCapabilities(config)?.includes(\"core.transactional-email\")) { pushRoute({ path: \"/configuracoes/email-transacional\", element: <CoreTransactionalEmail />, permissions: [\"transactional-email.config.read\"], capabilities: [\"core.transactional-email\"] }); pushMenu({ label: \"E-mail transacional\", href: \"/configuracoes/email-transacional\", section: \"Configurações\", order: 910, permissions: [\"transactional-email.config.read\"], capabilities: [\"core.transactional-email\"] }); }\n const navMode = config.ui?.navigation?.mode ?? \"auto\"; const includeAuto = navMode === \"auto\" || navMode === \"mixed\"; const includeManual = navMode === \"manual\" || navMode === \"mixed\";\n for (const view of config.ui?.views ?? []) { pushRoute(viewToRoute(view, componentRegistry)); if (includeAuto) pushMenu(viewToMenu(view)); }\n for (const page of config.ui?.pages ?? []) { pushRoute(pageToRoute(page, componentRegistry)); if (includeAuto) { const item = pageToMenu(page); if (item) pushMenu(item); } }\n if (includeManual) for (const item of config.ui?.navigation?.items ?? []) pushMenu(item);\n menu.sort((a, b) => (a.order ?? 100) - (b.order ?? 100)); return { routes, menu };\n}\n","import {\n Navigate,\n createBrowserRouter,\n type RouteObject,\n} from \"react-router-dom\";\nimport type {\n OonAppConfig,\n OonMenuItem,\n OonRoute,\n OonLayoutConfig,\n OonComponentRegistry,\n OonSecurityConfig,\n OonSystemPages,\n} from \"../types\";\nimport { AuthenticatedLayout } from \"../shell/AuthenticatedLayout\";\nimport { AccessDeniedPage } from \"../security/AccessDeniedPage\";\nimport { AppAccessGuard } from \"../security/AppAccessGuard\";\nimport { LoginPage } from \"../security/LoginPage\";\nimport { AcceptInvitePage } from \"../security/AcceptInvitePage\";\nimport { FirstAccessPage } from \"../security/FirstAccessPage\";\nimport {\n ActivationPage,\n InstanceBlockedPage,\n} from \"../security/ActivationPage\";\nimport { RouteGuard } from \"../security/RouteGuard\";\nimport { ActivationGuard } from \"../security/ActivationGuard\";\nimport { OON_RESERVED_ROUTES, routeElement } from \"../routing\";\n\nexport interface RouterInput {\n app: OonAppConfig;\n menu: OonMenuItem[];\n routes: OonRoute[];\n corePublicRoutes?: OonRoute[];\n onboardingEnabled?: boolean;\n security?: OonSecurityConfig;\n layout?: OonLayoutConfig;\n registry?: OonComponentRegistry;\n systemPages?: OonSystemPages;\n}\n\nexport function createOonRouter({ app, menu, routes, corePublicRoutes = [], onboardingEnabled, security, layout, registry, systemPages }: RouterInput) {\n const guardEnabled = security?.enableRouteGuard !== false;\n\n const publicRoutes: RouteObject[] = routes\n .filter((route) => route.public)\n .map((route) => ({ path: route.path, element: routeElement(route) }));\n\n const privateSource = routes.filter((route) => !route.public);\n const privateRoutes: RouteObject[] = privateSource.map((route) => {\n const content = routeElement(route);\n const element = guardEnabled ? (\n <RouteGuard permission={route.permissions}>{content}</RouteGuard>\n ) : content;\n return route.path === \"/\"\n ? { index: true, element }\n : { path: route.path.replace(/^\\//, \"\"), element };\n });\n\n const hasIndexRoute = privateSource.some((route) => route.path === \"/\");\n const firstRoute = privateSource.find((route) => route.path !== \"/\");\n if (!hasIndexRoute && firstRoute) {\n privateRoutes.unshift({ index: true, element: <Navigate to={firstRoute.path} replace /> });\n }\n\n const customPaths = new Set(publicRoutes.map((route) => route.path));\n const reservedCollision = [...customPaths].find((path) => OON_RESERVED_ROUTES.includes(String(path)));\n if (reservedCollision) throw new Error(`Rota reservada pelo OonCore: ${reservedCollision}.`);\n\n const coreRouteObjects: RouteObject[] = corePublicRoutes.map((route) => ({\n path: route.path,\n element: routeElement(route),\n }));\n const occupiedPaths = new Set([\n ...customPaths,\n ...corePublicRoutes.map((route) => route.path),\n ]);\n const builtInPublicRoutes: RouteObject[] = [...coreRouteObjects];\n\n if (!occupiedPaths.has(\"/login\")) {\n const Login = systemPages?.login;\n builtInPublicRoutes.push({\n path: \"/login\",\n element: <ActivationGuard>{Login ? <Login /> : <LoginPage app={app} onboardingEnabled={onboardingEnabled} />}</ActivationGuard>,\n });\n }\n if (!occupiedPaths.has(\"/accept-invite\")) {\n builtInPublicRoutes.push({\n path: \"/accept-invite\",\n element: <ActivationGuard><AcceptInvitePage /></ActivationGuard>,\n });\n }\n if (!occupiedPaths.has(\"/first-access\")) {\n builtInPublicRoutes.push({\n path: \"/first-access\",\n element: <ActivationGuard><FirstAccessPage /></ActivationGuard>,\n });\n }\n if (!occupiedPaths.has(\"/ativacao\")) builtInPublicRoutes.push({ path: \"/ativacao\", element: <ActivationPage /> });\n if (!occupiedPaths.has(\"/instancia-suspensa\")) {\n builtInPublicRoutes.push({\n path: \"/instancia-suspensa\",\n element: <InstanceBlockedPage title=\"Instância suspensa\" message=\"Esta Central está suspensa.\" />,\n });\n }\n if (!occupiedPaths.has(\"/instancia-revogada\")) {\n builtInPublicRoutes.push({\n path: \"/instancia-revogada\",\n element: <InstanceBlockedPage title=\"Instância revogada\" message=\"Esta Central foi revogada.\" />,\n });\n }\n if (!occupiedPaths.has(\"/acesso-negado\")) {\n builtInPublicRoutes.push({ path: \"/acesso-negado\", element: <AccessDeniedPage app={app} /> });\n }\n\n const tree: RouteObject[] = [\n ...builtInPublicRoutes,\n ...publicRoutes,\n {\n path: \"/\",\n element: (\n <ActivationGuard>\n <AppAccessGuard>\n <AuthenticatedLayout app={app} menu={menu} layout={layout} registry={registry} />\n </AppAccessGuard>\n </ActivationGuard>\n ),\n children: privateRoutes,\n },\n ];\n\n return createBrowserRouter(tree);\n}\n","import { Box, Button, Drawer, Flex, IconButton, Image, Menu, Portal, Spacer, Text } from \"@chakra-ui/react\";\nimport { useState } from \"react\";\nimport { Outlet, useNavigate } from \"react-router-dom\";\nimport type {\n OonAppConfig,\n OonComponentRegistry,\n OonLayoutConfig,\n OonMenuItem,\n} from \"../types\";\nimport { useOonAuth } from \"../security/AuthProvider\";\nimport { useCoreMetadata } from \"../api/ApiProvider\";\nimport { Sidebar, SidebarNav } from \"./Sidebar\";\nimport { coreInitials } from \"../components/ui-v2/CoreKit\";\nimport { resolveComponent, MissingRenderer } from \"../app/componentRegistry\";\nimport {\n formatRuntimeDate,\n resolveRuntimeVersionInfo,\n shortCommit,\n} from \"../runtime/versionInfo\";\n\nfunction SettingsIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 15.25a3.25 3.25 0 1 0 0-6.5 3.25 3.25 0 0 0 0 6.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n />\n <path\n d=\"M19.43 12.98c.04-.32.07-.65.07-.98s-.03-.66-.08-.98l2.12-1.66-2-3.46-2.5 1a7.64 7.64 0 0 0-1.7-.98L15 3.25h-4l-.35 2.67c-.61.25-1.18.58-1.7.98l-2.5-1-2 3.46 2.12 1.66c-.04.32-.07.65-.07.98s.03.66.08.98l-2.12 1.66 2 3.46 2.5-1c.52.4 1.09.73 1.7.98l.34 2.67h4l.35-2.67a7.64 7.64 0 0 0 1.7-.98l2.5 1 2-3.46-2.12-1.66Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction resolveSettingsHref(menu: OonMenuItem[]): string | null {\n const explicit = menu.find((item) => item.action === \"settings\");\n if (explicit) return explicit.href;\n\n const settingsPage = menu.find((item) => item.href === \"/configuracoes\");\n if (settingsPage) return settingsPage.href;\n\n return null;\n}\n\nfunction MenuIcon() {\n return (\n <svg aria-hidden=\"true\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6h16M4 12h16M4 18h16\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/** Gaveta com o mesmo menu do desktop, para telas pequenas (Onda UX). */\nfunction MobileMenu({ app, menu, registry }: { app: OonAppConfig; menu: OonMenuItem[]; registry?: OonComponentRegistry }) {\n const [open, setOpen] = useState(false);\n return (\n <Box display={{ base: \"block\", lg: \"none\" }} mr={3}>\n <IconButton aria-label=\"Abrir menu\" variant=\"ghost\" onClick={() => setOpen(true)}><MenuIcon /></IconButton>\n <Drawer.Root open={open} onOpenChange={(event: { open: boolean }) => setOpen(event.open)} placement=\"start\" size=\"xs\">\n <Portal>\n <Drawer.Backdrop />\n <Drawer.Positioner>\n <Drawer.Content>\n <Drawer.Header><Drawer.Title>{app.title ?? app.name}</Drawer.Title></Drawer.Header>\n <Drawer.Body px={2}>\n <Box as=\"nav\" aria-label=\"Menu principal\">\n <SidebarNav menu={menu} registry={registry} onNavigate={() => setOpen(false)} />\n </Box>\n </Drawer.Body>\n </Drawer.Content>\n </Drawer.Positioner>\n </Portal>\n </Drawer.Root>\n </Box>\n );\n}\n\nfunction CoreTopbar({ app, menu, registry }: { app: OonAppConfig; menu: OonMenuItem[]; registry?: OonComponentRegistry }) {\n const { user, logout, hasPermission } = useOonAuth();\n const navigate = useNavigate();\n const metadataQuery = useCoreMetadata();\n const runtime = resolveRuntimeVersionInfo(app, metadataQuery.data);\n const centralVersion = runtime.centralVersion ?? \"não informada\";\n const backendVersion = metadataQuery.isLoading\n ? \"carregando\"\n : runtime.coreBackVersion ?? \"indisponível\";\n const updatedAt = formatRuntimeDate(runtime.updatedAt);\n const commit = shortCommit(runtime.commit);\n const versionParts = [\n `Central ${centralVersion}`,\n `Front ${runtime.coreFrontVersion}`,\n `Back ${backendVersion}`,\n updatedAt ? `Atualizado ${updatedAt}` : undefined,\n commit ? `Commit ${commit}` : undefined,\n ].filter(Boolean);\n const details = [\n `Central ${centralVersion}`,\n `OonCore front ${runtime.coreFrontVersion}`,\n `OonCore back ${backendVersion}`,\n runtime.environment ? `Ambiente ${runtime.environment}` : undefined,\n runtime.commit ? `Commit ${runtime.commit}` : undefined,\n runtime.releaseId ? `Release ${runtime.releaseId}` : undefined,\n runtime.startedAt ? `Backend iniciado ${formatRuntimeDate(runtime.startedAt)}` : undefined,\n ].filter(Boolean).join(\" · \");\n const settingsHref = resolveSettingsHref(\n menu.filter((item) => hasPermission(item.permissions)),\n );\n const profileHref = menu.find((item) => item.action === \"profile\")?.href ?? null;\n const OrganizationSlot = registry?.layoutSlots?.organization;\n const avatar = (user as { fotoPerfilUrl?: string } | null)?.fotoPerfilUrl;\n const tenant = user?.tenant as { nome?: string; slug?: string } | undefined;\n const tenantLabel = String(tenant?.nome || tenant?.slug || \"\").trim();\n\n return (\n <Flex\n as=\"header\"\n align=\"center\"\n minH=\"64px\"\n px={{ base: 4, lg: 6 }}\n py={3}\n borderBottomWidth=\"1px\"\n borderColor=\"border.default\"\n bg=\"surface.panel\"\n backdropFilter=\"blur(10px)\"\n position=\"sticky\"\n top={0}\n zIndex={10}\n >\n <MobileMenu app={app} menu={menu} registry={registry} />\n <Box minW={0} title={`${versionParts.join(\" · \")}\\n${details}`}>\n <Text\n fontSize=\"xs\"\n fontWeight=\"600\"\n color=\"brand.500\"\n textTransform=\"uppercase\"\n letterSpacing=\"0.08em\"\n >\n Central Oon\n </Text>\n <Text fontSize=\"sm\" fontWeight=\"600\" color=\"text.primary\">\n {app.title ?? app.name}\n </Text>\n {tenantLabel ? (\n <Text fontSize=\"xs\" fontWeight=\"600\" color=\"brand.fg\" lineHeight=\"1.4\">\n Tenant: {tenantLabel}\n </Text>\n ) : null}\n </Box>\n <Spacer />\n {OrganizationSlot ? <Box mr={3}><OrganizationSlot app={app} menu={menu} /></Box> : null}\n {user ? (\n <Flex align=\"center\" gap={3}>\n <Box textAlign=\"right\" display={{ base: \"none\", md: \"block\" }}>\n <Text fontSize=\"sm\" fontWeight=\"600\" color=\"text.primary\">\n {user.nome}\n </Text>\n {user.email ? <Text fontSize=\"xs\" color=\"text.muted\">{user.email}</Text> : null}\n </Box>\n {settingsHref ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n colorPalette=\"brand\"\n borderRadius=\"8px\"\n minW=\"36px\"\n px={2}\n aria-label=\"Abrir configurações\"\n title=\"Configurações\"\n onClick={() => navigate(settingsHref)}\n >\n <SettingsIcon />\n </Button>\n ) : null}\n <Menu.Root positioning={{ placement: \"bottom-end\" }}>\n <Menu.Trigger asChild>\n <Button size=\"sm\" variant=\"ghost\" borderRadius=\"full\" px={1} aria-label=\"Abrir menu do usuário\">\n {avatar\n ? <Image src={avatar} alt=\"\" boxSize=\"32px\" borderRadius=\"full\" objectFit=\"cover\" />\n : <Flex boxSize=\"32px\" borderRadius=\"full\" bg=\"brand.100\" color=\"brand.700\" align=\"center\" justify=\"center\" fontWeight=\"700\" fontSize=\"xs\">{coreInitials(user.nome)}</Flex>}\n </Button>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content>\n {profileHref ? <Menu.Item value=\"perfil\" onClick={() => navigate(profileHref)}>Meu perfil</Menu.Item> : null}\n <Menu.Item value=\"sair\" onClick={logout}>Sair</Menu.Item>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n </Flex>\n ) : null}\n </Flex>\n );\n}\n\nfunction Slot({\n name,\n slot,\n registry,\n app,\n menu,\n}: {\n name: \"sidebar\" | \"topbar\" | \"header\" | \"footer\";\n slot?: string;\n registry?: OonComponentRegistry;\n app: OonAppConfig;\n menu: OonMenuItem[];\n}) {\n if (slot === \"none\") return null;\n if (slot?.startsWith(\"custom:\")) {\n const Component = resolveComponent(registry, slot, \"layoutSlots\");\n return Component\n ? <Component app={app} menu={menu} />\n : <MissingRenderer renderer={slot} />;\n }\n if (name === \"sidebar\") return <Sidebar app={app} menu={menu} registry={registry} />;\n if (name === \"topbar\") return <CoreTopbar app={app} menu={menu} registry={registry} />;\n if (name === \"footer\" && slot === \"core\") {\n return (\n <Box as=\"footer\" px={6} py={4} color=\"gray.500\" fontSize=\"xs\" borderTopWidth=\"1px\">\n OonCore\n </Box>\n );\n }\n return null;\n}\n\nexport function DefaultShell({\n app,\n menu,\n layout,\n registry,\n}: {\n app: OonAppConfig;\n menu: OonMenuItem[];\n layout?: OonLayoutConfig;\n registry?: OonComponentRegistry;\n}) {\n const portal = layout?.shell === \"portal\" || layout?.shell === \"content-only\";\n const mainPadding = portal ? { base: 4, lg: 10 } : { base: 4, lg: 6 };\n return (\n <Flex align=\"stretch\" minH=\"100vh\" bg={portal ? \"surface.panel\" : \"surface.canvas\"}>\n <Slot\n name=\"sidebar\"\n slot={layout?.sidebar ?? \"core\"}\n registry={registry}\n app={app}\n menu={menu}\n />\n <Flex direction=\"column\" flex=\"1\" minW={0}>\n <Slot\n name=\"topbar\"\n slot={layout?.topbar ?? \"core\"}\n registry={registry}\n app={app}\n menu={menu}\n />\n <Slot name=\"header\" slot={layout?.header} registry={registry} app={app} menu={menu} />\n <Box as=\"main\" flex=\"1\" p={mainPadding} minW={0}>\n <Box maxW={portal ? \"1180px\" : \"1680px\"} mx=\"auto\">\n <Outlet />\n </Box>\n </Box>\n <Slot\n name=\"footer\"\n slot={layout?.footer ?? \"none\"}\n registry={registry}\n app={app}\n menu={menu}\n />\n </Flex>\n </Flex>\n );\n}\n\nexport function PortalShell(props: {\n app: OonAppConfig;\n menu: OonMenuItem[];\n layout?: OonLayoutConfig;\n registry?: OonComponentRegistry;\n}) {\n return <DefaultShell {...props} layout={{ ...props.layout, shell: \"portal\" }} />;\n}\n","import { Box, Flex, Image, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { useState } from \"react\";\nimport { NavLink } from \"react-router-dom\";\nimport type { OonAppConfig, OonComponentRegistry, OonMenuItem } from \"../types\";\nimport { resolveComponent } from \"../app/componentRegistry\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { useOonAuth } from \"../security/AuthProvider\";\n\ntype PortalHome = {\n platformApps: Array<{\n app: { codigo: string; nome?: string };\n action: string;\n deployment: { environment?: string | null };\n }>;\n};\n\nfunction groupBySection(items: OonMenuItem[]): Array<[string, OonMenuItem[]]> {\n const groups = new Map<string, OonMenuItem[]>();\n const ordered = items.map((item, index) => ({ item, index }))\n .sort((a, b) => (a.item.order ?? Number.MAX_SAFE_INTEGER) - (b.item.order ?? Number.MAX_SAFE_INTEGER) || a.index - b.index)\n .map(({ item }) => item);\n for (const item of ordered) {\n const section = item.section ?? \"Geral\";\n if (!groups.has(section)) groups.set(section, []);\n groups.get(section)!.push(item);\n }\n return Array.from(groups.entries());\n}\n\nfunction launchAppCode(action?: string) {\n const match = /^launch-app:([a-z][a-z0-9-]{2,62})$/.exec(String(action || \"\"));\n return match?.[1] || \"\";\n}\n\nfunction errorMessage(error: unknown) {\n const value = error as {\n message?: string;\n response?: { data?: { message?: string; error?: { message?: string } } };\n };\n return value?.response?.data?.error?.message ||\n value?.response?.data?.message ||\n value?.message ||\n \"Não foi possível abrir o App.\";\n}\n\nfunction PlatformAppMenuItem({ item, appCode }: { item: OonMenuItem; appCode: string }) {\n const { http } = useOonApi();\n const [opening, setOpening] = useState(false);\n const [launchError, setLaunchError] = useState(\"\");\n\n async function launch() {\n if (opening) return;\n // A aba precisa nascer durante o gesto do usuário para não ser bloqueada.\n // O handshake continua assíncrono sem alterar a rota da aplicação atual.\n const popup = window.open(\"about:blank\", \"_blank\");\n if (!popup) {\n setLaunchError(\"Permita pop-ups para abrir o App em uma nova aba.\");\n return;\n }\n popup.opener = null;\n setOpening(true);\n setLaunchError(\"\");\n try {\n const home = (await http.get<PortalHome>(\"/portal/home\")).data;\n const target = home.platformApps.find((candidate) => candidate.app.codigo === appCode);\n if (!target || target.action !== \"open\") {\n throw new Error(`${target?.app.nome || item.label} ainda não está disponível.`);\n }\n const response = await http.post<{ openUrl: string }>(\"/portal/launch\", {\n appCode,\n environment: target.deployment.environment,\n });\n if (!response.data.openUrl) {\n throw new Error(\"A autorização de abertura não retornou uma URL.\");\n }\n popup.location.replace(response.data.openUrl);\n } catch (error) {\n popup.close();\n setLaunchError(errorMessage(error));\n } finally {\n setOpening(false);\n }\n }\n\n return (\n <Box width=\"100%\">\n <Flex\n as=\"button\"\n width=\"100%\"\n align=\"center\"\n justify={{ base: \"center\", lg: \"flex-start\" }}\n gap={3}\n px={{ base: 2, lg: 3 }}\n py=\"10px\"\n borderRadius=\"9px\"\n fontSize=\"13px\"\n fontWeight=\"500\"\n color=\"#46545C\"\n cursor={opening ? \"wait\" : \"pointer\"}\n aria-disabled={opening}\n pointerEvents={opening ? \"none\" : \"auto\"}\n title={item.label}\n aria-label={`Abrir ${item.label} em uma nova aba`}\n onClick={() => void launch()}\n _hover={{ bg: \"#F8F9FA\", color: \"brand.700\" }}\n >\n {opening\n ? <Spinner size=\"xs\" />\n : <Box w=\"7px\" h=\"7px\" borderRadius=\"full\" bg=\"gray.300\" />}\n <Text display={{ base: \"none\", lg: \"block\" }} lineClamp={1}>\n {item.label}\n </Text>\n </Flex>\n {launchError ? (\n <Text role=\"alert\" px={3} py={1} fontSize=\"10px\" color=\"red.600\">\n {launchError}\n </Text>\n ) : null}\n </Box>\n );\n}\n\n/** Evaluates every registered menu condition (hooks) in a stable order. */\nfunction useMenuConditions(registry?: OonComponentRegistry): Record<string, boolean | undefined> {\n const entries = Object.entries(registry?.menuConditions ?? {}).sort(([a], [b]) => a.localeCompare(b));\n const result: Record<string, boolean | undefined> = {};\n for (const [name, useCondition] of entries) result[name] = useCondition();\n return result;\n}\n\n/** Itens visíveis: não ocultos, com permissão e com a condição `requires` satisfeita. */\nexport function useVisibleMenu(menu: OonMenuItem[], registry?: OonComponentRegistry): OonMenuItem[] {\n const { hasPermission } = useOonAuth();\n const conditions = useMenuConditions(registry);\n return menu.filter((item) => !item.hidden && hasPermission(item.permissions) && (!item.requires || conditions[item.requires] === true));\n}\n\n/** Lista de seções e itens, usada pelo menu fixo (desktop) e pela gaveta (celular). */\nexport function SidebarNav({ menu, registry, onNavigate, compact = false }: { menu: OonMenuItem[]; registry?: OonComponentRegistry; onNavigate?: () => void; compact?: boolean }) {\n const visible = useVisibleMenu(menu, registry);\n return (\n <Stack gap={5}>\n {groupBySection(visible).map(([section, items]) => (\n <Stack key={section} gap={1} role=\"group\" aria-label={section}>\n <Text\n display={compact ? { base: \"none\", lg: \"block\" } : \"block\"}\n fontSize=\"10px\"\n fontWeight=\"600\"\n color=\"gray.500\"\n textTransform=\"uppercase\"\n letterSpacing=\"0.08em\"\n px={3}\n mb={1}\n >\n {section}\n </Text>\n {items.map((item) => {\n const CustomMenuItem = resolveComponent(registry, item.renderer, \"menuRenderers\");\n if (CustomMenuItem) return <CustomMenuItem key={item.href} item={item} />;\n const appCode = launchAppCode(item.action);\n if (appCode) return <PlatformAppMenuItem key={item.href} item={item} appCode={appCode} />;\n return (\n <NavLink key={item.href} to={item.href} end={item.href === \"/\"} title={item.label} onClick={onNavigate}>\n {({ isActive }) => (\n <Flex\n align=\"center\"\n gap={3}\n px={3}\n py=\"10px\"\n borderRadius=\"9px\"\n fontSize=\"14px\"\n fontWeight={isActive ? \"600\" : \"500\"}\n bg={isActive ? \"brand.50\" : \"transparent\"}\n color={isActive ? \"brand.700\" : \"#374151\"}\n borderLeftWidth=\"3px\"\n borderLeftColor={isActive ? \"brand.500\" : \"transparent\"}\n transition=\"all 0.15s ease\"\n _hover={{ bg: isActive ? \"brand.50\" : \"#F8F9FA\", color: \"brand.700\" }}\n aria-current={isActive ? \"page\" : undefined}\n >\n {item.icon ? <Box flex=\"0 0 auto\">{item.icon}</Box> : null}\n <Text lineClamp={1}>{item.label}</Text>\n {item.badge !== undefined ? <Box ml=\"auto\" fontSize=\"xs\" fontWeight=\"700\" color=\"brand.700\">{item.badge}</Box> : null}\n </Flex>\n )}\n </NavLink>\n );\n })}\n </Stack>\n ))}\n </Stack>\n );\n}\n\n/** Menu lateral agrupado por seção. No celular fica oculto e abre como gaveta pelo topo. */\nexport function Sidebar({ app, menu, registry }: { app: OonAppConfig; menu: OonMenuItem[]; registry?: OonComponentRegistry }) {\n\n return (\n <Box\n as=\"nav\"\n aria-label=\"Menu principal\"\n w=\"248px\"\n display={{ base: \"none\", lg: \"block\" }}\n minH=\"100vh\"\n borderRightWidth=\"1px\"\n borderColor=\"#E8ECEF\"\n px={{ base: 2, lg: 3 }}\n py={4}\n bg=\"white\"\n position=\"sticky\"\n top={0}\n alignSelf=\"flex-start\"\n overflowY=\"auto\"\n >\n <Flex align=\"center\" gap={3} mb={6} px={{ base: 1, lg: 2 }} minH=\"42px\">\n {app.logo ? (\n <Image src={app.logo} alt={app.name} maxH=\"36px\" maxW={{ base: \"44px\", lg: \"150px\" }} objectFit=\"contain\" />\n ) : (\n <Flex\n w=\"38px\"\n h=\"38px\"\n flex=\"0 0 auto\"\n borderRadius=\"12px\"\n align=\"center\"\n justify=\"center\"\n bg=\"brand.500\"\n color=\"white\"\n fontWeight=\"700\"\n fontSize=\"lg\"\n >\n O\n </Flex>\n )}\n <Box minW={0}>\n <Text fontWeight=\"700\" fontSize=\"sm\" color=\"#07262E\" lineClamp={1}>\n {app.name}\n </Text>\n <Text fontSize=\"10px\" color=\"gray.500\" textTransform=\"uppercase\" letterSpacing=\"0.08em\">\n Operação digital\n </Text>\n </Box>\n </Flex>\n\n <SidebarNav menu={menu} registry={registry} />\n </Box>\n );\n}\n","{\n \"name\": \"@oondemand/oon-core-front\",\n \"version\": \"0.7.22\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/oondemand/oon-platform.git\",\n \"directory\": \"packages/oonCore-front\"\n },\n \"description\": \"Core de frontend para Centrais Oon: shell, providers, roteamento por metadata, SDK REST do /core/*, RBAC e componentes Core* (Coleção, Documento, Esteira, Multi-moedas, Assistente, Dashboard).\",\n \"type\": \"module\",\n \"main\": \"dist/index.js\",\n \"module\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n },\n \"./ui\": {\n \"types\": \"./dist/ui.d.ts\",\n \"import\": \"./dist/ui.js\"\n },\n \"./routing\": {\n \"types\": \"./dist/routing.d.ts\",\n \"import\": \"./dist/routing.js\"\n },\n \"./theme\": {\n \"types\": \"./dist/theme.d.ts\",\n \"import\": \"./dist/theme.js\"\n },\n \"./hooks\": {\n \"types\": \"./dist/hooks.d.ts\",\n \"import\": \"./dist/hooks.js\"\n },\n \"./testing\": {\n \"types\": \"./dist/testing.d.ts\",\n \"import\": \"./dist/testing.js\"\n }\n },\n \"bin\": {\n \"oonCore-front\": \"bin/cli.js\"\n },\n \"files\": [\n \"bin\",\n \"dist\",\n \"README.md\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"prepublishOnly\": \"npm run build\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run\"\n },\n \"engines\": {\n \"node\": \">=18\"\n },\n \"keywords\": [\n \"oondemand\",\n \"ooncore\",\n \"central\",\n \"frontend\",\n \"metadata-driven\",\n \"react\",\n \"vite\"\n ],\n \"license\": \"SEE LICENSE IN LICENSE\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"dependencies\": {\n \"axios\": \"^1.7.7\"\n },\n \"peerDependencies\": {\n \"@chakra-ui/react\": \"^3.0.0\",\n \"@tanstack/react-query\": \"^5.0.0\",\n \"@tanstack/react-table\": \"^8.0.0\",\n \"react\": \"^18.0.0\",\n \"react-dom\": \"^18.0.0\",\n \"react-router-dom\": \"^6.0.0\"\n },\n \"devDependencies\": {\n \"@testing-library/dom\": \"^10.4.1\",\n \"@testing-library/react\": \"^16.3.2\",\n \"@types/react\": \"^18.3.18\",\n \"@types/react-dom\": \"^18.3.5\",\n \"happy-dom\": \"^20.10.2\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.5.0\",\n \"vitest\": \"^2.0.0\"\n }\n}\n","import frontPackage from \"../../package.json\";\nimport type { CoreMetadata, OonAppConfig } from \"../types\";\n\nexport interface RuntimeVersionInfo {\n centralVersion?: string;\n coreFrontVersion: string;\n coreBackVersion?: string;\n updatedAt?: string;\n startedAt?: string;\n commit?: string;\n releaseId?: string;\n environment?: string;\n}\n\ninterface RuntimeMetadataExtension {\n runtime?: {\n core?: {\n backendVersion?: string;\n };\n central?: {\n version?: string;\n };\n deployment?: {\n builtAt?: string;\n startedAt?: string;\n commit?: string;\n releaseId?: string;\n environment?: string;\n };\n };\n}\n\ntype RuntimeMetadata = CoreMetadata & RuntimeMetadataExtension;\ntype BuildEnvironment = Record<string, string | undefined>;\n\nfunction value(...candidates: Array<string | undefined>): string | undefined {\n return candidates.find((candidate) => typeof candidate === \"string\" && candidate.trim())?.trim();\n}\n\nfunction browserBuildEnvironment(): BuildEnvironment {\n return (import.meta.env ?? {}) as BuildEnvironment;\n}\n\nexport function resolveRuntimeVersionInfo(\n app: OonAppConfig,\n metadata?: CoreMetadata,\n environment: BuildEnvironment = browserBuildEnvironment(),\n): RuntimeVersionInfo {\n const extended = metadata as RuntimeMetadata | undefined;\n const runtime = extended?.runtime;\n const deployment = runtime?.deployment;\n\n return {\n centralVersion: value(\n environment.VITE_OON_CENTRAL_VERSION,\n app.version,\n runtime?.central?.version,\n ),\n coreFrontVersion: frontPackage.version,\n coreBackVersion: value(runtime?.core?.backendVersion, metadata?.service?.version),\n updatedAt: value(\n environment.VITE_OON_BUILD_TIME,\n deployment?.builtAt,\n deployment?.startedAt,\n ),\n startedAt: deployment?.startedAt,\n commit: value(environment.VITE_OON_BUILD_COMMIT, deployment?.commit),\n releaseId: value(environment.VITE_OON_RELEASE_ID, deployment?.releaseId),\n environment: value(environment.VITE_OON_ENVIRONMENT, deployment?.environment),\n };\n}\n\nexport function formatRuntimeDate(valueToFormat?: string, timeZone?: string): string | undefined {\n if (!valueToFormat) return undefined;\n const date = new Date(valueToFormat);\n if (Number.isNaN(date.getTime())) return valueToFormat;\n return new Intl.DateTimeFormat(\"pt-BR\", {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n // Sem fuso explícito, Intl usa o fuso local do navegador do operador.\n timeZone,\n }).format(date);\n}\n\nexport function shortCommit(commit?: string): string | undefined {\n if (!commit) return undefined;\n return commit.length > 8 ? commit.slice(0, 8) : commit;\n}\n","import type { OonAppConfig, OonComponentRegistry, OonLayoutConfig, OonMenuItem } from \"../types\";\nimport { resolveComponent, MissingRenderer } from \"../app/componentRegistry\";\nimport { DefaultShell, PortalShell } from \"./DefaultShell\";\n\n/** Layout autenticado padrão mantido como wrapper de compatibilidade v1. */\nexport function AuthenticatedLayout({ app, menu, layout, registry }: { app: OonAppConfig; menu: OonMenuItem[]; layout?: OonLayoutConfig; registry?: OonComponentRegistry }) {\n if (layout?.shell?.startsWith(\"custom:\")) {\n const CustomShell = resolveComponent(registry, layout.shell, \"layoutSlots\");\n return CustomShell ? <CustomShell app={app} menu={menu} layout={layout} /> : <MissingRenderer renderer={layout.shell} />;\n }\n if (layout?.shell === \"portal\") return <PortalShell app={app} menu={menu} layout={layout} registry={registry} />;\n return <DefaultShell app={app} menu={menu} layout={layout} registry={registry} />;\n}\n","import { Box, Button, Flex, Heading, Text, VStack } from \"@chakra-ui/react\";\nimport { useNavigate } from \"react-router-dom\";\nimport type { OonAppConfig } from \"../types\";\nimport { useOonAuth } from \"./AuthProvider\";\n\n/** Página exibida quando o usuário está autenticado, mas não possui o app. */\nexport function AccessDeniedPage({ app }: { app: OonAppConfig }) {\n const { logout } = useOonAuth();\n const navigate = useNavigate();\n\n function useAnotherAccount() {\n logout();\n navigate(\"/login\", { replace: true });\n }\n\n return (\n <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box\n width=\"100%\"\n maxW=\"560px\"\n bg=\"white\"\n borderWidth=\"1px\"\n borderColor=\"#E4EBEF\"\n borderRadius=\"18px\"\n boxShadow=\"0 24px 70px rgba(7, 38, 46, 0.10)\"\n p={{ base: 6, md: 10 }}\n >\n <VStack align=\"stretch\" gap={6}>\n <Box\n width=\"56px\"\n height=\"56px\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n borderRadius=\"16px\"\n bg=\"orange.50\"\n color=\"orange.700\"\n fontSize=\"2xl\"\n fontWeight=\"800\"\n aria-hidden=\"true\"\n >\n !\n </Box>\n\n <Box>\n <Text\n color=\"#39BFED\"\n fontSize=\"xs\"\n fontWeight=\"700\"\n letterSpacing=\"0.12em\"\n textTransform=\"uppercase\"\n >\n Acesso negado\n </Text>\n <Heading mt={2} size=\"lg\" color=\"#07262E\">\n Você não possui permissão para este aplicativo\n </Heading>\n <Text mt={3} color=\"gray.600\">\n Seu usuário foi autenticado, mas não existe uma permissão ativa\n para acessar {app.title ?? app.name}. Solicite o acesso ao\n administrador da sua organização.\n </Text>\n </Box>\n\n <Button\n alignSelf=\"flex-start\"\n bg=\"#07262E\"\n color=\"white\"\n _hover={{ bg: \"#0B3843\" }}\n onClick={useAnotherAccount}\n >\n Entrar com outra conta\n </Button>\n </VStack>\n </Box>\n </Flex>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { Navigate, useLocation } from \"react-router-dom\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\nimport { useOonAuth } from \"./AuthProvider\";\n\nfunction loginRedirect(pathname: string, search: string): string {\n const destination = `${pathname}${search}`;\n return `/login?redirect=${encodeURIComponent(destination)}`;\n}\n\nexport function AppAccessGuard({ children }: { children: ReactNode }) {\n const { status, retry } = useOonAuth();\n const location = useLocation();\n\n if (status === \"loading\") return <LoadingScreen />;\n if (status === \"unauthenticated\") {\n return <Navigate to={loginRedirect(location.pathname, location.search)} replace />;\n }\n if (status === \"first-access\") return <Navigate to=\"/first-access\" replace />;\n if (status === \"forbidden\") return <Navigate to=\"/acesso-negado\" replace />;\n if (status === \"error\") {\n return (\n <LoadingScreen\n message=\"Não foi possível validar seu acesso. Tente novamente.\"\n actionLabel=\"Tentar novamente\"\n onAction={() => { void retry().catch(() => undefined); }}\n />\n );\n }\n return <>{children}</>;\n}\n","import { useState, type FormEvent } from \"react\";\nimport { Box, Button, Flex, Heading, Input, SimpleGrid, Text, VStack } from \"@chakra-ui/react\";\nimport { Link, Navigate, useLocation } from \"react-router-dom\";\nimport type { OonAppConfig, OonError } from \"../types\";\nimport { useOonAuth } from \"./AuthProvider\";\n\ntype TenantOption = {\n id: string;\n nome: string;\n slug?: string;\n tipo?: string;\n status?: string;\n};\n\nfunction tenantOptions(error: OonError): TenantOption[] {\n const details = error.details;\n if (!details || typeof details !== \"object\" || Array.isArray(details)) return [];\n const tenants = (details as { tenants?: unknown }).tenants;\n if (!Array.isArray(tenants)) return [];\n return tenants\n .filter((tenant): tenant is Record<string, unknown> => Boolean(tenant) && typeof tenant === \"object\")\n .map((tenant) => ({\n id: String(tenant.id || \"\"),\n nome: String(tenant.nome || tenant.slug || tenant.id || \"\"),\n slug: tenant.slug ? String(tenant.slug) : undefined,\n tipo: tenant.tipo ? String(tenant.tipo) : undefined,\n status: tenant.status ? String(tenant.status) : undefined,\n }))\n .filter((tenant) => tenant.id && tenant.nome);\n}\n\nfunction safeRedirect(search: string): string {\n const value = new URLSearchParams(search).get(\"redirect\") || \"/\";\n if (!value.startsWith(\"/\") || value.startsWith(\"//\")) return \"/\";\n if (value.startsWith(\"/login\") || value.startsWith(\"/acesso-negado\")) return \"/\";\n return value;\n}\n\nfunction tenantUrl(path: string, tenantId: string): string {\n const target = new URL(path, window.location.origin);\n target.searchParams.set(\"tenant\", tenantId);\n return target.toString();\n}\n\n/** Tela de login padrão das Centrais que usam a Central de Ativações. */\nexport function LoginPage({ app, onboardingEnabled = false }: { app: OonAppConfig; onboardingEnabled?: boolean }) {\n const { status, login } = useOonAuth();\n const location = useLocation();\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [submitting, setSubmitting] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n const [tenants, setTenants] = useState<TenantOption[]>([]);\n const [selectorMode, setSelectorMode] = useState(false);\n const [openingTenant, setOpeningTenant] = useState<string | null>(null);\n const redirect = safeRedirect(location.search);\n\n if (status === \"authenticated\" && !selectorMode) return <Navigate to={redirect} replace />;\n if (status === \"forbidden\") return <Navigate to=\"/acesso-negado\" replace />;\n\n async function handleSubmit(event: FormEvent<HTMLFormElement>) {\n event.preventDefault();\n if (tenants.length > 1) return;\n setSubmitting(true);\n setMessage(null);\n try {\n await login(email.trim(), password);\n } catch (error) {\n const authError = error as OonError;\n if (authError.code === \"TENANT_SELECTION_REQUIRED\") {\n const options = tenantOptions(authError);\n if (options.length > 1) {\n setTenants(options);\n setMessage(\"Escolha uma organização. O tenant será aberto em uma nova aba.\");\n return;\n }\n }\n if (authError.status === 403) return;\n setMessage(authError.status === 401 ? \"E-mail ou senha inválidos.\" : authError.message || \"Não foi possível entrar. Tente novamente.\");\n } finally {\n setSubmitting(false);\n }\n }\n\n async function openTenant(tenant: TenantOption) {\n if (openingTenant) return;\n const popup = window.open(\"about:blank\", \"_blank\");\n if (!popup) {\n setMessage(\"Permita pop-ups para abrir o tenant em uma nova aba.\");\n return;\n }\n popup.opener = null;\n setOpeningTenant(tenant.id);\n setSelectorMode(true);\n setMessage(null);\n try {\n if (status !== \"authenticated\") await login(email.trim(), password, tenant.id);\n popup.location.replace(tenantUrl(redirect, tenant.id));\n setPassword(\"\");\n setMessage(`${tenant.nome} foi aberto em uma nova aba. Escolha outro tenant quando precisar.`);\n } catch (error) {\n popup.close();\n const authError = error as OonError;\n setMessage(authError.message || \"Não foi possível abrir o tenant.\");\n } finally {\n setOpeningTenant(null);\n }\n }\n\n return (\n <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box width=\"100%\" maxW={tenants.length > 1 ? \"760px\" : \"440px\"} bg=\"white\" borderWidth=\"1px\" borderColor=\"#E4EBEF\" borderRadius=\"18px\" boxShadow=\"0 24px 70px rgba(7, 38, 46, 0.10)\" p={{ base: 6, md: 9 }}>\n <form onSubmit={handleSubmit}>\n <VStack align=\"stretch\" gap={6}>\n <Box>\n <Text color=\"#39BFED\" fontSize=\"xs\" fontWeight=\"700\" letterSpacing=\"0.12em\" textTransform=\"uppercase\">Central Oon</Text>\n <Heading mt={2} size=\"lg\" color=\"#07262E\">{app.title ?? app.name}</Heading>\n <Text mt={2} color=\"gray.600\" fontSize=\"sm\">\n {tenants.length > 1 ? \"Abra uma ou mais organizações para trabalhar em contextos separados.\" : \"Entre com seu usuário autorizado para acessar este aplicativo.\"}\n </Text>\n </Box>\n\n {tenants.length <= 1 ? (\n <VStack align=\"stretch\" gap={4}>\n <Box>\n <Text mb={2} fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">E-mail</Text>\n <Input type=\"email\" value={email} onChange={(event) => { setEmail(event.target.value); setTenants([]); setSelectorMode(false); }} autoComplete=\"email\" placeholder=\"voce@empresa.com.br\" required />\n </Box>\n <Box>\n <Text mb={2} fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">Senha</Text>\n <Input type=\"password\" value={password} onChange={(event) => setPassword(event.target.value)} autoComplete=\"current-password\" placeholder=\"Sua senha\" required />\n </Box>\n </VStack>\n ) : (\n <Box>\n <Text mb={3} fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">Escolha o tenant para acessar</Text>\n <SimpleGrid columns={{ base: 1, md: 2 }} gap={3}>\n {tenants.map((tenant) => (\n <Button key={tenant.id} type=\"button\" variant=\"outline\" height=\"auto\" minH=\"104px\" justifyContent=\"flex-start\" whiteSpace=\"normal\" textAlign=\"left\" borderWidth=\"2px\" borderColor=\"#D9E2E7\" bg=\"white\" color=\"#24323A\" disabled={Boolean(openingTenant)} aria-label={`Abrir ${tenant.nome} em nova aba`} onClick={() => void openTenant(tenant)} _hover={{ borderColor: \"#39BFED\", bg: \"#F6FCFE\" }}>\n <VStack align=\"start\" gap={1} py={3}>\n <Text fontWeight=\"700\">{tenant.nome}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\">{[tenant.slug, tenant.tipo, tenant.status].filter(Boolean).join(\" · \")}</Text>\n <Text fontSize=\"xs\" color=\"#168EB9\">{openingTenant === tenant.id ? \"Abrindo...\" : \"Abrir em nova aba\"}</Text>\n </VStack>\n </Button>\n ))}\n </SimpleGrid>\n </Box>\n )}\n\n {message ? <Box role=\"status\" borderRadius=\"10px\" bg=\"blue.50\" color=\"blue.800\" px={4} py={3} fontSize=\"sm\">{message}</Box> : null}\n\n {tenants.length <= 1 ? (\n <Button type=\"submit\" bg=\"#07262E\" color=\"white\" _hover={{ bg: \"#0B3843\" }} disabled={submitting || !email.trim() || !password}>\n {submitting ? \"Validando acesso...\" : \"Entrar\"}\n </Button>\n ) : null}\n {app.kind === \"portal-cockpit\" && onboardingEnabled && tenants.length <= 1 ? (\n <Text textAlign=\"center\" fontSize=\"sm\" color=\"gray.600\">Ainda não possui acesso? <Link to=\"/cadastro\">Criar conta</Link></Text>\n ) : null}\n </VStack>\n </form>\n </Box>\n </Flex>\n );\n}\n\n","import { useState, type FormEvent } from \"react\";\nimport { Box, Button, Flex, Heading, Input, Text, VStack } from \"@chakra-ui/react\";\nimport { Navigate } from \"react-router-dom\";\nimport { useOonAuth } from \"./AuthProvider\";\n\nexport function FirstAccessPage() {\n const { status, completeFirstAccess } = useOonAuth();\n const [password, setPassword] = useState(\"\");\n const [confirm, setConfirm] = useState(\"\");\n const [submitting, setSubmitting] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n\n if (status === \"authenticated\") return <Navigate to=\"/\" replace />;\n if (status === \"unauthenticated\") return <Navigate to=\"/login\" replace />;\n if (status === \"forbidden\") return <Navigate to=\"/acesso-negado\" replace />;\n\n async function submit(event: FormEvent) {\n event.preventDefault();\n setMessage(null);\n if (password.length < 8) {\n setMessage(\"A senha deve possuir pelo menos 8 caracteres.\");\n return;\n }\n if (password !== confirm) {\n setMessage(\"As senhas informadas não conferem.\");\n return;\n }\n setSubmitting(true);\n try {\n await completeFirstAccess(password);\n } catch (error: any) {\n setMessage(error?.message || \"Não foi possível definir a nova senha.\");\n } finally {\n setSubmitting(false);\n }\n }\n\n return (\n <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box width=\"100%\" maxW=\"460px\" bg=\"white\" borderWidth=\"1px\" borderRadius=\"18px\" p={{ base: 6, md: 9 }}>\n <form onSubmit={(event) => void submit(event)}>\n <VStack align=\"stretch\" gap={5}>\n <Box>\n <Text color=\"#39BFED\" fontSize=\"xs\" fontWeight=\"700\" textTransform=\"uppercase\">Primeiro acesso</Text>\n <Heading mt={2} size=\"lg\">Defina sua nova senha</Heading>\n <Text mt={2} fontSize=\"sm\" color=\"gray.600\">O acesso à Central só será liberado depois desta etapa.</Text>\n </Box>\n <Box>\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Nova senha</Text>\n <Input type=\"password\" autoComplete=\"new-password\" value={password} onChange={(event) => setPassword(event.target.value)} required />\n </Box>\n <Box>\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Confirmar senha</Text>\n <Input type=\"password\" autoComplete=\"new-password\" value={confirm} onChange={(event) => setConfirm(event.target.value)} required />\n </Box>\n {message ? <Box role=\"alert\" bg=\"red.50\" borderRadius=\"md\" p={3}><Text fontSize=\"sm\">{message}</Text></Box> : null}\n <Button type=\"submit\" disabled={submitting}>{submitting ? \"Salvando…\" : \"Definir nova senha\"}</Button>\n </VStack>\n </form>\n </Box>\n </Flex>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { Box, Button, Heading, Input, Text, VStack } from \"@chakra-ui/react\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { useActivation } from \"./ActivationProvider\";\n\ntype Field = {\n name: string;\n label: string;\n type: string;\n required?: boolean;\n defaultValue?: unknown;\n options?: string[];\n readOnly?: boolean;\n placeholder?: string;\n helpText?: string;\n minLength?: number;\n autoComplete?: string;\n};\n\ntype Preview = {\n tenant?: Record<string, unknown>;\n app?: Record<string, unknown>;\n licenca?: Record<string, unknown>;\n entitlement?: Record<string, unknown>;\n deployment?: Record<string, unknown>;\n binding?: Record<string, unknown>;\n ativacao?: Record<string, unknown>;\n};\n\ntype ActivationConfiguration = {\n mode: \"root-bootstrap\" | \"member-activation\";\n rootFields: Field[];\n globalFields: Field[];\n appFields: Field[];\n defaults: Record<string, unknown>;\n technical: Record<string, string>;\n};\n\ntype DevLocalActivationResult = {\n token?: string;\n appCode?: string;\n usuario?: Record<string, unknown>;\n tenant?: Record<string, unknown>;\n app?: Record<string, unknown>;\n licenca?: Record<string, unknown>;\n entitlement?: Record<string, unknown>;\n deployment?: Record<string, unknown>;\n binding?: Record<string, unknown>;\n instrucoes?: { env?: string; observacao?: string };\n};\n\nfunction encodeBasicCredentials(email: string, password: string): string {\n const bytes = new TextEncoder().encode(`${email}:${password}`);\n let binary = \"\";\n for (const byte of bytes) binary += String.fromCharCode(byte);\n return window.btoa(binary);\n}\n\nexport function ActivationPage() {\n const { http } = useOonApi();\n const activation = useActivation();\n const [step, setStep] = useState(1);\n const [config, setConfig] = useState<ActivationConfiguration | null>(null);\n const [code, setCode] = useState(\"\");\n const [preview, setPreview] = useState<Preview | null>(null);\n const [global, setGlobal] = useState<Record<string, unknown>>({});\n const [app, setApp] = useState<Record<string, unknown>>({});\n const [rootEmail, setRootEmail] = useState(\"\");\n const [rootPassword, setRootPassword] = useState(\"\");\n const [devName, setDevName] = useState(\"\");\n const [devEmail, setDevEmail] = useState(\"\");\n const [devPassword, setDevPassword] = useState(\"\");\n const [showCodeFlow, setShowCodeFlow] = useState(false);\n const [devResult, setDevResult] = useState<DevLocalActivationResult | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [submitting, setSubmitting] = useState(false);\n\n useEffect(() => {\n http\n .get<ActivationConfiguration>(\"/ativacao/configuracao\")\n .then((response) => {\n setConfig(response.data);\n setGlobal(response.data.defaults || {});\n })\n .catch(() =>\n setError(\"Não foi possível carregar a configuração de ativação.\"),\n );\n }, [http]);\n\n useEffect(() => {\n if (activation.status === \"active\") {\n window.location.replace(\"/login\");\n }\n }, [activation.status]);\n\n async function activateRoot() {\n setSubmitting(true);\n setError(null);\n\n try {\n await http.post(\"/ativacao/ativar-root\", {\n email: rootEmail.trim(),\n senha: rootPassword,\n });\n setRootPassword(\"\");\n setStep(6);\n await activation.refresh();\n window.setTimeout(() => window.location.replace(\"/login\"), 900);\n } catch (caught) {\n setRootPassword(\"\");\n setError(\n (caught as Error).message ||\n \"Não foi possível concluir a ativação inicial.\",\n );\n } finally {\n setSubmitting(false);\n }\n }\n\n async function activateDevLocal() {\n setSubmitting(true);\n setError(null);\n\n try {\n const response = await http.post<DevLocalActivationResult>(\n \"/ativacao/ativar-dev-local\",\n {\n nomeUsuario: devName.trim() || undefined,\n nomeCentral: global.nomeInstancia || config?.defaults?.nomeInstancia,\n appName: config?.defaults?.nomeInstancia || config?.technical?.appCode,\n urlPublica: global.urlPublica,\n },\n {\n headers: {\n Authorization: `Basic ${encodeBasicCredentials(\n devEmail.trim().toLowerCase(),\n devPassword,\n )}`,\n },\n },\n );\n\n setDevPassword(\"\");\n setDevResult(response.data);\n setStep(6);\n\n const token = response.data.token;\n window.setTimeout(() => {\n window.location.replace(token ? `/?code=${encodeURIComponent(token)}` : \"/login\");\n }, 900);\n } catch (caught) {\n setDevPassword(\"\");\n setError(\n (caught as Error).message ||\n \"Não foi possível ativar a Central em desenvolvimento.\",\n );\n } finally {\n setSubmitting(false);\n }\n }\n\n async function validateCode() {\n setSubmitting(true);\n setError(null);\n\n try {\n const response = await http.post(\"/ativacao/validar-codigo\", {\n codigoAtivacao: code,\n });\n setPreview(response.data);\n setStep(2);\n } catch (caught) {\n setError((caught as Error).message || \"Código inválido.\");\n } finally {\n setSubmitting(false);\n }\n }\n\n async function completeMemberActivation() {\n setSubmitting(true);\n setError(null);\n\n try {\n await http.post(\"/ativacao/concluir\", {\n codigoAtivacao: code,\n nomeInstancia: global.nomeInstancia,\n parametrosGlobais: global,\n parametrosAplicacao: app,\n });\n setStep(6);\n setCode(\"\");\n await activation.refresh();\n window.setTimeout(() => window.location.replace(\"/login\"), 1200);\n } catch (caught) {\n setError(\n (caught as Error).message ||\n \"Não foi possível concluir a ativação.\",\n );\n } finally {\n setSubmitting(false);\n }\n }\n\n function renderField(\n field: Field,\n values: Record<string, unknown>,\n setValues: (value: Record<string, unknown>) => void,\n ) {\n return (\n <Box key={field.name} w=\"100%\">\n <Text fontWeight=\"medium\">\n {field.label}\n {field.required ? \" *\" : \"\"}\n </Text>\n <Input\n type={\n field.type === \"password\" || field.type === \"secret\"\n ? \"password\"\n : field.type === \"email\"\n ? \"email\"\n : field.type === \"url\"\n ? \"url\"\n : field.type === \"number\" || field.type === \"integer\"\n ? \"number\"\n : \"text\"\n }\n value={String(values[field.name] ?? field.defaultValue ?? \"\")}\n readOnly={field.readOnly}\n placeholder={field.placeholder}\n minLength={field.minLength}\n autoComplete={field.autoComplete}\n onChange={(event) =>\n setValues({ ...values, [field.name]: event.target.value })\n }\n />\n {field.helpText ? (\n <Text fontSize=\"sm\" color=\"gray.500\">\n {field.helpText}\n </Text>\n ) : null}\n </Box>\n );\n }\n\n function renderDevLocalActivation() {\n return (\n <>\n <Text color=\"gray.700\">\n Entre com seu e-mail e senha para ativar esta Central em ambiente de\n desenvolvimento. Se o e-mail ainda não existir na Central de\n Ativações, o usuário será criado automaticamente com perfil de\n desenvolvedor.\n </Text>\n\n <Box w=\"100%\">\n <Text fontWeight=\"medium\">Nome do usuário</Text>\n <Input\n value={devName}\n onChange={(event) => setDevName(event.target.value)}\n placeholder=\"Seu nome\"\n autoComplete=\"name\"\n />\n </Box>\n\n <Box w=\"100%\">\n <Text fontWeight=\"medium\">E-mail *</Text>\n <Input\n type=\"email\"\n value={devEmail}\n onChange={(event) => setDevEmail(event.target.value)}\n placeholder=\"dev@empresa.com.br\"\n autoComplete=\"email\"\n />\n </Box>\n\n <Box w=\"100%\">\n <Text fontWeight=\"medium\">Senha *</Text>\n <Input\n type=\"password\"\n value={devPassword}\n onChange={(event) => setDevPassword(event.target.value)}\n placeholder=\"Mínimo de 8 caracteres\"\n minLength={8}\n autoComplete=\"current-password\"\n />\n </Box>\n\n <Button\n colorPalette=\"blue\"\n onClick={activateDevLocal}\n loading={submitting}\n disabled={\n submitting ||\n !devEmail.trim() ||\n devPassword.length < 8 ||\n !activation.details?.podeAtivar\n }\n >\n Ativar ambiente de desenvolvimento\n </Button>\n\n <Button\n variant=\"outline\"\n onClick={() => setShowCodeFlow(true)}\n disabled={submitting}\n >\n Usar código de ativação manual\n </Button>\n </>\n );\n }\n\n const rootMode =\n config?.mode === \"root-bootstrap\" || activation.details?.role === \"root\";\n const isDevelopmentMember =\n !rootMode && config?.technical?.ambiente === \"desenvolvimento\";\n\n if (activation.status === \"loading\" || !config) {\n return (\n <Box minH=\"100vh\" bg=\"gray.50\" p={8}>\n <VStack\n maxW=\"760px\"\n mx=\"auto\"\n bg=\"white\"\n p={8}\n borderRadius=\"lg\"\n align=\"stretch\"\n gap={5}\n >\n <Heading>Preparando ativação...</Heading>\n {error ? <Text color=\"red.600\">{error}</Text> : null}\n </VStack>\n </Box>\n );\n }\n\n if (rootMode) {\n return (\n <Box minH=\"100vh\" bg=\"gray.50\" p={8}>\n <VStack\n maxW=\"560px\"\n mx=\"auto\"\n bg=\"white\"\n p={8}\n borderRadius=\"lg\"\n align=\"stretch\"\n gap={5}\n >\n <Heading>Ativação inicial do Ecossistema Oon</Heading>\n <Text color=\"gray.600\">\n Esta é a aplicação root do ecossistema. Informe somente o e-mail e\n a senha do primeiro administrador. O Core criará a estrutura mínima\n necessária para liberar o primeiro login.\n </Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n App: {config.technical.appCode} · Ambiente:{\" \"}\n {config.technical.ambiente}\n </Text>\n\n {error ? <Text color=\"red.600\">{error}</Text> : null}\n\n {step !== 6 ? (\n <>\n <Box w=\"100%\">\n <Text fontWeight=\"medium\">E-mail do administrador *</Text>\n <Input\n type=\"email\"\n autoComplete=\"email\"\n value={rootEmail}\n onChange={(event) => setRootEmail(event.target.value)}\n placeholder=\"administrador@empresa.com.br\"\n />\n </Box>\n\n <Box w=\"100%\">\n <Text fontWeight=\"medium\">Senha *</Text>\n <Input\n type=\"password\"\n minLength={8}\n autoComplete=\"new-password\"\n value={rootPassword}\n onChange={(event) => setRootPassword(event.target.value)}\n placeholder=\"Mínimo de 8 caracteres\"\n />\n </Box>\n\n <Button\n colorPalette=\"blue\"\n onClick={activateRoot}\n loading={submitting}\n disabled={\n submitting ||\n !rootEmail.trim() ||\n rootPassword.length < 8 ||\n !activation.details?.podeAtivar\n }\n >\n Criar ecossistema e ativar\n </Button>\n </>\n ) : (\n <>\n <Heading size=\"md\">Ativação concluída</Heading>\n <Text>\n Usuário, acesso do sistema e aplicativo root foram preparados.\n Redirecionando para o primeiro login...\n </Text>\n </>\n )}\n </VStack>\n </Box>\n );\n }\n\n return (\n <Box minH=\"100vh\" bg=\"gray.50\" p={8}>\n <VStack\n maxW=\"760px\"\n mx=\"auto\"\n bg=\"white\"\n p={8}\n borderRadius=\"lg\"\n align=\"stretch\"\n gap={5}\n >\n <Heading>Ativação da Central Oon</Heading>\n <Text>\n App: {config.technical.appCode} · Ambiente:{\" \"}\n {config.technical.ambiente} · Central:{\" \"}\n {config.technical.centralAtivacaoUrl ||\n config.technical.centralAtivacaoHost}\n </Text>\n\n {error ? <Text color=\"red.600\">{error}</Text> : null}\n\n {step === 1 && isDevelopmentMember && !showCodeFlow\n ? renderDevLocalActivation()\n : null}\n\n {step === 1 && (!isDevelopmentMember || showCodeFlow) && (\n <>\n <Text>\n Informe o código de ativação para validar Tenant, App,\n Entitlement e Deployment. A licença será validada somente para\n Apps comerciais.\n </Text>\n <Input\n aria-label=\"Código de ativação\"\n value={code}\n onChange={(event) => setCode(event.target.value)}\n placeholder=\"OON-XXXX\"\n />\n <Button\n onClick={validateCode}\n loading={submitting}\n disabled={!code || submitting}\n >\n Validar código\n </Button>\n {isDevelopmentMember ? (\n <Button\n variant=\"outline\"\n onClick={() => setShowCodeFlow(false)}\n disabled={submitting}\n >\n Voltar para ativação com usuário\n </Button>\n ) : null}\n </>\n )}\n\n {step === 2 && (\n <>\n <Heading size=\"md\">Confirmação</Heading>\n <pre>{JSON.stringify(preview, null, 2)}</pre>\n <Button onClick={() => setStep(3)}>Continuar</Button>\n </>\n )}\n\n {step === 3 && (\n <>\n {config.globalFields.map((field) =>\n renderField(field, global, setGlobal),\n )}\n <Button onClick={() => setStep(4)}>Continuar</Button>\n </>\n )}\n\n {step === 4 && (\n <>\n {config.appFields.length ? (\n config.appFields.map((field) => renderField(field, app, setApp))\n ) : (\n <Text>Nenhum parâmetro adicional declarado.</Text>\n )}\n <Button onClick={() => setStep(5)}>Revisar</Button>\n </>\n )}\n\n {step === 5 && (\n <>\n <Text>\n Ao confirmar, o código será consumido e este runtime será\n vinculado ao Deployment do Ecossistema Oon.\n </Text>\n <Button\n colorPalette=\"blue\"\n onClick={completeMemberActivation}\n loading={submitting}\n disabled={submitting}\n >\n Concluir ativação\n </Button>\n </>\n )}\n\n {step === 6 && (\n <>\n <Heading size=\"md\">Ativação concluída</Heading>\n {devResult?.appCode ? (\n <Text>\n Código do app: {devResult.appCode}. Redirecionando para a\n Central em desenvolvimento...\n </Text>\n ) : (\n <Text>Redirecionando para o login...</Text>\n )}\n {devResult?.instrucoes?.env ? (\n <Text fontSize=\"sm\" color=\"gray.500\">\n {devResult.instrucoes.env}\n </Text>\n ) : null}\n </>\n )}\n </VStack>\n </Box>\n );\n}\n\nexport function InstanceBlockedPage({\n title,\n message,\n}: {\n title: string;\n message: string;\n}) {\n return (\n <Box p={8}>\n <Heading>{title}</Heading>\n <Text>{message}</Text>\n </Box>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { useOonAuth } from \"./AuthProvider\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\n\n/**\n * Protege rotas privadas: enquanto valida o token mostra loading; sem sessão\n * o AuthProvider já redireciona para o login externo, então aqui só seguramos\n * o render. `permission` opcional bloqueia por papel (UX; back valida de novo).\n */\nexport function RouteGuard({\n permission,\n children,\n}: {\n permission?: string | string[];\n children: ReactNode;\n}) {\n const { status, hasPermission } = useOonAuth();\n\n if (status === \"loading\") return <LoadingScreen />;\n if (status === \"unauthenticated\") return <LoadingScreen message=\"Redirecionando para o login...\" />;\n if (!hasPermission(permission)) {\n return <LoadingScreen message=\"Você não tem acesso a esta tela.\" />;\n }\n return <>{children}</>;\n}\n","import { Navigate } from \"react-router-dom\";\nimport { useActivation } from \"./ActivationProvider\";\nexport function ActivationGuard({ children }: { children: JSX.Element }) {\n const { status } = useActivation();\n if (status === \"loading\") return null;\n if (status === \"suspended\") return <Navigate to=\"/instancia-suspensa\" replace />;\n if (status === \"revoked\") return <Navigate to=\"/instancia-revogada\" replace />;\n if (status !== \"active\" && window.location.pathname !== \"/ativacao\") return <Navigate to=\"/ativacao\" replace />;\n return children;\n}\n","const PIPELINE_BOARD_STYLE_ID = \"oon-core-pipeline-board-natural-height\";\n\n/**\n * O quadro mantém a rolagem horizontal no fim do conteúdo e cresce conforme\n * a etapa com mais tickets. As setas continuam acessíveis durante a rolagem\n * vertical sem transformar o quadro em uma área de scroll própria.\n */\nexport const PIPELINE_BOARD_LAYOUT_CSS = `\n:where(*) > [data-oon-pipeline-board=\"true\"] {\n height: auto !important;\n min-height: 420px;\n overflow-y: visible !important;\n align-items: stretch !important;\n}\n\n:where(*) > [data-oon-pipeline-board=\"true\"] > * {\n align-self: stretch;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) {\n display: grid;\n grid-template-areas: \"oon-pipeline-board\";\n align-items: start;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > [data-oon-pipeline-board=\"true\"] {\n grid-area: oon-pipeline-board;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > button[aria-label=\"Deslizar quadro para a esquerda\"],\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > button[aria-label=\"Deslizar quadro para a direita\"] {\n grid-area: oon-pipeline-board;\n position: sticky !important;\n top: calc(50vh - 17px) !important;\n right: auto !important;\n left: auto !important;\n align-self: start;\n transform: none !important;\n z-index: 3;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > button[aria-label=\"Deslizar quadro para a esquerda\"] {\n justify-self: start;\n margin-left: 8px;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > button[aria-label=\"Deslizar quadro para a direita\"] {\n justify-self: end;\n margin-right: 8px;\n}\n`;\n\nexport function installPipelineBoardLayoutStyles(targetDocument: Document = document) {\n if (targetDocument.getElementById(PIPELINE_BOARD_STYLE_ID)) return;\n\n const style = targetDocument.createElement(\"style\");\n style.id = PIPELINE_BOARD_STYLE_ID;\n style.textContent = PIPELINE_BOARD_LAYOUT_CSS;\n targetDocument.head.appendChild(style);\n}\n","import type { OonAppDefinition, OonCoreFrontConfig, OonMenuItem, OonModule, OonNavigationConfig } from \"../types\";\nimport { start } from \"../start\";\nimport { defineOonNavigation, defineOonRoutes } from \"../routing\";\n\nfunction navigationItems(navigation: OonAppDefinition[\"navigation\"]): OonMenuItem[] {\n if (!navigation) return [];\n return Array.isArray(navigation) ? navigation : navigation.items ?? [];\n}\n\nexport function defineOonApp<const T extends OonAppDefinition>(definition: T): T {\n if (!definition?.app?.id) throw new Error(\"defineOonApp: app.id é obrigatório.\");\n if (!definition?.app?.name) throw new Error(\"defineOonApp: app.name é obrigatório.\");\n if (!definition?.api?.baseUrl) throw new Error(\"defineOonApp: api.baseUrl é obrigatório.\");\n if (definition.security?.enableRouteGuard === false || definition.security?.enablePermissionGate === false) {\n throw new Error(\"defineOonApp: guards obrigatórios de rota e permissão não podem ser desabilitados.\");\n }\n defineOonRoutes(definition.routes ?? []);\n defineOonNavigation(navigationItems(definition.navigation));\n return definition;\n}\n\nexport function appDefinitionToConfig(definition: OonAppDefinition): OonCoreFrontConfig {\n const app = defineOonApp(definition);\n const localModule: OonModule = {\n id: \"app.local\",\n label: app.app.name,\n routes: [...(app.routes ?? [])],\n menu: navigationItems(app.navigation),\n };\n const modules = localModule.routes?.length || localModule.menu?.length\n ? [localModule, ...(app.modules ?? [])]\n : [...(app.modules ?? [])];\n const uiNavigation: OonNavigationConfig | undefined = Array.isArray(app.navigation)\n ? { mode: \"manual\", items: app.navigation }\n : app.navigation;\n\n return {\n app: app.app,\n api: app.api,\n runtimeMode: app.runtimeMode,\n auth: app.auth,\n theme: app.theme,\n themes: app.themes,\n defaultThemeId: app.defaultThemeId,\n modules,\n ui: app.ui || app.pages?.length\n ? {\n ...app.ui,\n schemaVersion: 2,\n views: app.ui?.views ?? [],\n navigation: app.ui?.navigation ?? uiNavigation,\n pages: [...(app.ui?.pages ?? []), ...(app.pages ?? [])],\n }\n : undefined,\n layout: app.shell ?? app.ui?.layout,\n registry: {\n ...app.components,\n layoutSlots: { ...app.components?.layoutSlots, ...app.layouts },\n },\n security: {\n enableRouteGuard: true,\n enablePermissionGate: true,\n redactAssistantContext: true,\n disableConsoleInProduction: true,\n ...app.security,\n },\n systemPages: app.systemPages,\n rootElementId: app.rootElementId,\n };\n}\n\nexport function startOonApp(definition: OonAppDefinition): OonCoreFrontConfig {\n const config = appDefinitionToConfig(definition);\n start(config);\n return config;\n}\n"],"mappings":"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","names":["value","useMemo","useEffect","useState","Box","Text","value","jsx","jsxs","useState","useEffect","Box","Text","useEffect","useRef","useState","Box","Button","Flex","Heading","Input","Text","VStack","useLocation","jsx","jsxs","useEffect","useState","Fragment","jsx","jsxs","useState","useEffect","jsx","jsx","value","Navigate","Box","Button","Flex","Image","Text","useState","Box","Flex","Text","useState","jsx","jsxs","value","useState","Box","Flex","Text","jsx","jsxs","useState","Box","Flex","Text","Button","Image","jsx","Box","Button","Flex","Heading","Text","VStack","useNavigate","jsx","jsxs","useNavigate","Flex","Box","VStack","Text","Heading","Button","useLocation","Fragment","jsx","useLocation","useState","Box","Button","Flex","Heading","Input","Text","VStack","Link","Navigate","useLocation","jsx","jsxs","value","useLocation","useState","Navigate","Flex","Box","VStack","Text","Heading","Input","Button","Link","useState","Box","Button","Flex","Heading","Input","Text","VStack","Navigate","jsx","jsxs","useState","Navigate","Flex","Box","VStack","Text","Heading","Input","Button","useEffect","useState","Box","Button","Heading","Input","Text","VStack","Fragment","jsx","jsxs","useState","useEffect","Box","Text","Input","Button","VStack","Heading","Fragment","jsx","Navigate","jsx","Navigate","jsx","Navigate","jsx","useMemo","storage","tenantStorage","http","router","jsx"]}
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  createTenantStorage,
8
8
  defineOonApp,
9
9
  startOonApp
10
- } from "./chunk-LEZVXC3Y.js";
10
+ } from "./chunk-FTUHJZVK.js";
11
11
  import {
12
12
  Can,
13
13
  CoreActions,
package/dist/testing.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  appDefinitionToConfig
3
- } from "./chunk-LEZVXC3Y.js";
3
+ } from "./chunk-FTUHJZVK.js";
4
4
  import "./chunk-MRRN2HAU.js";
5
5
  import "./chunk-32GGDIWB.js";
6
6
  import "./chunk-ALZCHGGI.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oondemand/oon-core-front",
3
- "version": "0.7.21",
3
+ "version": "0.7.22",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/oondemand/oon-platform.git",