@oondemand/oon-core-front 0.3.11 → 0.3.14

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/start.tsx","../src/app/OonApp.tsx","../src/api/createRestClient.ts","../src/api/errorNormalizer.ts","../src/security/tokenStorage.ts","../src/app/OonProviders.tsx","../src/config/queryClient.ts","../src/config/theme.ts","../src/api/ApiProvider.tsx","../src/api/coreClient.ts","../src/api/resourceClient.ts","../src/security/AuthProvider.tsx","../src/security/ActivationProvider.tsx","../src/components/CoreCollection.tsx","../src/components/internal/fieldUtils.ts","../src/components/internal/DataGrid.tsx","../src/shell/LoadingScreen.tsx","../src/shell/ErrorState.tsx","../src/components/internal/DynamicForm.tsx","../src/components/internal/ReferenceSelect.tsx","../src/components/internal/referenceUtils.ts","../src/components/CoreDocument.tsx","../src/components/CorePipeline.tsx","../src/components/CoreDashboard.tsx","../src/components/ui-v2/CorePage.tsx","../src/security/PermissionGate.tsx","../src/app/componentRegistry.tsx","../src/components/ui-v2/CorePrimitives.tsx","../src/app/moduleRegistry.tsx","../src/app/createOonRouter.tsx","../src/shell/DefaultShell.tsx","../src/shell/Sidebar.tsx","../src/shell/AuthenticatedLayout.tsx","../src/security/AccessDeniedPage.tsx","../src/security/AppAccessGuard.tsx","../src/security/LoginPage.tsx","../src/security/ActivationPage.tsx","../src/security/RouteGuard.tsx","../src/security/ActivationGuard.tsx","../src/manifest.ts","../src/define/views.ts","../src/components/CoreIntegration.tsx","../src/components/CoreCurrency.tsx","../src/components/CoreAssistant.tsx"],"sourcesContent":["import { StrictMode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport type { OonCoreFrontConfig } from \"./types\";\nimport { OonApp } from \"./app/OonApp\";\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 * Ponto de entrada único de uma Central (Seção 3.2). O `main.tsx` da Central\n * só chama isto — não conhece providers, router, auth, layout nem serviços.\n *\n * import { start } from \"@oondemand/oon-core-front\";\n * import { appConfig } from \"./central.ui\";\n * start(appConfig);\n */\nexport function start(config: OonCoreFrontConfig) {\n validateConfig(config);\n applyDocumentMeta(config);\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/** Alias namespaced, compatível com a doc (`oonCoreFront.start`). */\nexport const oonCoreFront = { start };\n","import { useMemo } from \"react\";\nimport { RouterProvider } from \"react-router-dom\";\nimport type { OonCoreFrontConfig } from \"../types\";\nimport { createRestClient } from \"../api/createRestClient\";\nimport { createTokenStorage } from \"../security/tokenStorage\";\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, router } = useMemo(() => {\n const storage = createTokenStorage(config.app.id);\n const externalLoginUrl = config.auth?.loginUrl ?? config.api.meusAppsUrl;\n\n const http = createRestClient({\n api: config.api,\n appId: config.app.id,\n getToken: () => storage.get(),\n onUnauthorized: () => {\n storage.clear();\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 { routes, menu } = resolveRegistry(config);\n const router = createOonRouter({\n app: config.app,\n menu,\n routes,\n security: config.security,\n layout: config.layout ?? config.ui?.layout,\n registry: config.registry ?? config.ui?.registry,\n });\n\n return { http, storage, router };\n }, [config]);\n\n return (\n <OonProviders config={config} http={http} storage={storage}>\n <RouterProvider router={router} />\n </OonProviders>\n );\n}\n","import axios, { type AxiosInstance } from \"axios\";\nimport type { AuditContext, OonApiConfig } from \"../types\";\nimport { normalizeError } from \"./errorNormalizer\";\n\nexport interface RestClientDeps {\n api: OonApiConfig;\n /** Lê o token atual (Bearer). Retorna null se não autenticado. */\n getToken: () => string | null;\n /** Chamado uma vez ao receber 401 (logout + redirect). */\n onUnauthorized?: () => void;\n /** Origem app id, vai no header x-oon-app. */\n appId?: string;\n}\n\n/**\n * Cliente REST único do Core (Seção 2.5). Centraliza:\n * - baseUrl + versionPrefix;\n * - injeção de Bearer token;\n * - headers de auditoria x-oon-* nas mutações;\n * - tratamento global de 401 e normalização de erro.\n */\nexport function createRestClient(deps: RestClientDeps): AxiosInstance {\n const { api, getToken, onUnauthorized, appId } = deps;\n const prefix = api.versionPrefix ?? \"\";\n\n const instance = axios.create({\n baseURL: `${api.baseUrl.replace(/\\/$/, \"\")}${prefix}`,\n timeout: api.timeout ?? 30000,\n });\n\n instance.interceptors.request.use((config) => {\n const token = getToken();\n if (token && !config.headers.Authorization) {\n config.headers.Authorization = `Bearer ${token}`;\n }\n if (appId) config.headers[\"x-oon-app\"] = appId;\n return config;\n });\n\n instance.interceptors.response.use(\n (res) => res,\n (error) => {\n const normalized = normalizeError(error);\n const requestPath = String(error.config?.url || \"\")\n .split(\"?\")[0]\n .replace(/\\/$/, \"\");\n const isLogin = requestPath.endsWith(\"/auth/autenticar\");\n if (normalized.status === 401 && !isLogin) onUnauthorized?.();\n return Promise.reject(normalized);\n }\n );\n\n return instance;\n}\n\n/** Monta os headers de auditoria x-oon-* a partir do contexto. */\nexport function auditHeaders(audit?: AuditContext): Record<string, string> {\n if (!audit) return {};\n const headers: Record<string, string> = {};\n if (audit.origem) headers[\"x-oon-origin\"] = audit.origem;\n if (audit.module) headers[\"x-oon-module\"] = audit.module;\n if (audit.entity) headers[\"x-oon-entity\"] = audit.entity;\n return headers;\n}\n","import axios from \"axios\";\nimport type { OonError } from \"../types\";\n\n/**\n * Normaliza qualquer erro de rede/axios para o formato `OonError`, lendo o\n * envelope de erro padrão do back (`{ message }` ou `{ error: {...} }`).\n */\nexport function normalizeError(err: unknown): OonError {\n if (axios.isAxiosError(err)) {\n const status = err.response?.status;\n const data = err.response?.data as\n | string\n | { message?: string; error?: { code?: string; message?: string; details?: unknown; requestId?: string } }\n | undefined;\n\n const contentType = String(err.response?.headers?.[\"content-type\"] || \"\");\n const isTextPayload = typeof data === \"string\";\n const isProbablyHtml = isTextPayload && /<html|<!doctype/i.test(data);\n\n if (isTextPayload || (contentType && !contentType.includes(\"json\"))) {\n return {\n code: codeFromStatus(status),\n message: nonJsonMessage(status, err.config?.url, isProbablyHtml),\n status,\n details: isProbablyHtml ? undefined : data,\n requestId: err.response?.headers?.[\"x-request-id\"] as string | undefined,\n };\n }\n\n const envelope = data?.error;\n return {\n code: envelope?.code || codeFromStatus(status),\n message: envelope?.message || data?.message || err.message || \"Erro inesperado.\",\n status,\n details: envelope?.details,\n requestId: envelope?.requestId || (err.response?.headers?.[\"x-request-id\"] as string | undefined),\n };\n }\n\n if (err instanceof Error) {\n return { code: \"UNKNOWN\", message: err.message };\n }\n\n return { code: \"UNKNOWN\", message: \"Erro inesperado.\" };\n}\n\nfunction nonJsonMessage(status?: number, url?: string, html?: boolean): string {\n const path = url ? ` (${url})` : \"\";\n if (status === 404) {\n return `Rota da API não encontrada${path}. Verifique VITE_API_URL, porta do backend e modo da Central.`;\n }\n if (html) {\n return `Backend retornou HTML em vez de JSON${path}. Verifique se o frontend está apontando para a API correta.`;\n }\n return `Backend retornou resposta não JSON${path}. Verifique a configuração da API.`;\n}\n\nfunction codeFromStatus(status?: number): string {\n switch (status) {\n case 400:\n return \"VALIDATION_ERROR\";\n case 401:\n return \"UNAUTHORIZED\";\n case 403:\n return \"FORBIDDEN\";\n case 404:\n return \"NOT_FOUND\";\n case 409:\n return \"CONFLICT\";\n default:\n return status && status >= 500 ? \"SERVER_ERROR\" : \"REQUEST_ERROR\";\n }\n}\n","/**\n * Armazenamento de token encapsulado (Seção 6.2). Toda leitura/escrita de\n * token passa por aqui — nada de `localStorage.getItem('token')` espalhado.\n * Tudo com try/catch para JSON/localStorage inválido não derrubar a tela.\n */\nconst STORAGE_KEY = \"oon.auth.token\";\n\nexport interface TokenStorage {\n get(): string | null;\n set(token: string): void;\n clear(): void;\n}\n\nexport function createTokenStorage(namespace?: string): TokenStorage {\n const key = namespace ? `${STORAGE_KEY}.${namespace}` : STORAGE_KEY;\n\n return {\n get() {\n try {\n return window.localStorage.getItem(key);\n } catch {\n return null;\n }\n },\n set(token: string) {\n try {\n window.localStorage.setItem(key, token);\n } catch {\n /* storage indisponível (modo privado) — ignora silenciosamente. */\n }\n },\n clear() {\n try {\n window.localStorage.removeItem(key);\n } catch {\n /* noop */\n }\n },\n };\n}\n\n/**\n * Lê o token vindo do SSO via query string (?code=...) e remove da URL para\n * não vazar em histórico/logs. Retorna o token capturado, se houver.\n */\nexport function captureTokenFromUrl(tokenParam = \"code\"): string | null {\n try {\n const url = new URL(window.location.href);\n const token = url.searchParams.get(tokenParam);\n if (!token) return null;\n url.searchParams.delete(tokenParam);\n window.history.replaceState({}, document.title, url.pathname + url.search + url.hash);\n return token;\n } catch {\n return null;\n }\n}\n","import { type ReactNode, useMemo } from \"react\";\nimport { ChakraProvider } from \"@chakra-ui/react\";\nimport { QueryClientProvider } from \"@tanstack/react-query\";\nimport type { AxiosInstance } from \"axios\";\nimport type { OonCoreFrontConfig } from \"../types\";\nimport { createOonQueryClient } from \"../config/queryClient\";\nimport { createOonSystem } from \"../config/theme\";\nimport { ApiProvider } from \"../api/ApiProvider\";\nimport { AuthProvider } from \"../security/AuthProvider\";\nimport { ActivationProvider } from \"../security/ActivationProvider\";\nimport type { TokenStorage } from \"../security/tokenStorage\";\n\nexport interface OonProvidersProps {\n config: OonCoreFrontConfig;\n http: AxiosInstance;\n storage: TokenStorage;\n children: ReactNode;\n}\n\n/**\n * Monta, em ordem (Seção 3.3), todos os providers globais. Nenhuma Central\n * cliente deve montar QueryClient/Chakra/Auth/Api manualmente.\n *\n * Ordem: QueryClient -> Chakra -> Api -> Auth -> (Router, montado fora).\n */\nexport function OonProviders({ config, http, storage, children }: OonProvidersProps) {\n const queryClient = useMemo(() => createOonQueryClient(), []);\n const system = useMemo(() => createOonSystem(config.theme), [config.theme]);\n const loginUrl = config.auth?.loginUrl ?? config.api.meusAppsUrl;\n\n return (\n <QueryClientProvider client={queryClient}>\n <ChakraProvider value={system}>\n <ApiProvider http={http}>\n <ActivationProvider http={http}>\n <AuthProvider http={http} storage={storage} auth={config.auth} loginUrl={loginUrl}>\n {children}\n </AuthProvider>\n </ActivationProvider>\n </ApiProvider>\n </ChakraProvider>\n </QueryClientProvider>\n );\n}\n","import { QueryClient } from \"@tanstack/react-query\";\n\n/** QueryClient padrão do Core, com defaults conservadores para telas admin. */\nexport function createOonQueryClient(): QueryClient {\n return new QueryClient({\n defaultOptions: {\n queries: {\n retry: 1,\n refetchOnWindowFocus: false,\n staleTime: 30 * 1000,\n },\n mutations: {\n retry: 0,\n },\n },\n });\n}\n","import { createSystem, defaultConfig, defineConfig, mergeConfigs } from \"@chakra-ui/react\";\nimport type { OonCoreFrontConfig } from \"../types\";\n\n/**\n * Identidade visual padrão das Centrais Oon, consolidada a partir da Central\n * Minexco/CST: azul operacional, superfícies claras, tipografia Poppins e alta\n * densidade de informação.\n */\nexport const brandColors = {\n brand: {\n 25: { value: \"#F8FCFF\" },\n 50: { value: \"#EEF8FD\" },\n 75: { value: \"#E2F3FB\" },\n 100: { value: \"#C7E8F7\" },\n 200: { value: \"#82C8E8\" },\n 300: { value: \"#3FA6E0\" },\n 350: { value: \"#0F8DD0\" },\n 400: { value: \"#0580B9\" },\n 500: { value: \"#0474AF\" },\n 600: { value: \"#036491\" },\n 700: { value: \"#014364\" },\n 800: { value: \"#073A52\" },\n 850: { value: \"#082F3F\" },\n 900: { value: \"#07262E\" },\n },\n} as const;\n\nconst oonThemeConfig = defineConfig({\n globalCss: {\n \"html, body, #root\": {\n minHeight: \"100%\",\n },\n body: {\n margin: 0,\n bg: \"#F8F9FA\",\n color: \"#24323A\",\n fontFamily: \"Poppins, Inter, system-ui, sans-serif\",\n fontSize: \"14px\",\n },\n \"button, input, select, textarea\": {\n fontFamily: \"inherit\",\n },\n \"::selection\": {\n bg: \"#C7E8F7\",\n color: \"#07262E\",\n },\n },\n theme: {\n tokens: {\n colors: brandColors,\n fonts: {\n body: { value: \"Poppins, Inter, system-ui, sans-serif\" },\n heading: { value: \"Poppins, Inter, system-ui, sans-serif\" },\n },\n radii: {\n oon: { value: \"10px\" },\n },\n shadows: {\n oon: { value: \"0 8px 24px rgba(7, 38, 46, 0.08)\" },\n },\n },\n semanticTokens: {\n colors: {\n brand: {\n solid: { value: \"{colors.brand.500}\" },\n contrast: { value: \"white\" },\n fg: { value: \"{colors.brand.700}\" },\n muted: { value: \"{colors.brand.50}\" },\n subtle: { value: \"{colors.brand.75}\" },\n emphasized: { value: \"{colors.brand.600}\" },\n focusRing: { value: \"{colors.brand.500}\" },\n },\n },\n },\n },\n});\n\n/**\n * Constrói o system do Chakra. O padrão Minexco é aplicado primeiro e pode ser\n * sobrescrito por uma identidade específica da Central sem reescrever o shell.\n */\nexport function createOonSystem(themeOverride?: OonCoreFrontConfig[\"theme\"]) {\n const base = mergeConfigs(defaultConfig, oonThemeConfig);\n const config = themeOverride\n ? mergeConfigs(base, defineConfig(themeOverride as Parameters<typeof defineConfig>[0]))\n : base;\n return createSystem(config);\n}\n\nexport const oonSystem = createOonSystem();\n","import { createContext, useContext, useMemo, type ReactNode } from \"react\";\nimport type { AxiosInstance } from \"axios\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport type { ModelSummary } from \"../types\";\nimport { createCoreClient, type CoreClient } from \"./coreClient\";\nimport { createResourceClient, type ResourceClient } from \"./resourceClient\";\n\ninterface ApiContextValue {\n http: AxiosInstance;\n core: CoreClient;\n resource: <T = Record<string, unknown>>(basePath: string) => ResourceClient<T>;\n}\n\nconst ApiContext = createContext<ApiContextValue | null>(null);\n\nexport function ApiProvider({ http, children }: { http: AxiosInstance; children: ReactNode }) {\n const value = useMemo<ApiContextValue>(() => {\n const cache = new Map<string, ResourceClient>();\n return {\n http,\n core: createCoreClient(http),\n resource<T = Record<string, unknown>>(basePath: string) {\n let client = cache.get(basePath);\n if (!client) {\n client = createResourceClient(http, basePath);\n cache.set(basePath, client);\n }\n return client as ResourceClient<T>;\n },\n };\n }, [http]);\n\n return <ApiContext.Provider value={value}>{children}</ApiContext.Provider>;\n}\n\nexport function useOonApi(): ApiContextValue {\n const ctx = useContext(ApiContext);\n if (!ctx) throw new Error(\"useOonApi deve ser usado dentro de <ApiProvider> (oonCoreFront.start).\");\n return ctx;\n}\n\n/** Cliente de um recurso, memoizado pelo basePath. */\nexport function useOonResource<T = Record<string, unknown>>(basePath: string): ResourceClient<T> {\n const { resource } = useOonApi();\n return useMemo(() => resource<T>(basePath), [resource, basePath]);\n}\n\n/** Metadata completa do back (cache de 5 min). */\nexport function useCoreMetadata() {\n const { core } = useOonApi();\n return useQuery({\n queryKey: [\"oon\", \"core\", \"metadata\"],\n queryFn: () => core.metadata(),\n staleTime: 5 * 60 * 1000,\n });\n}\n\n/** Descrição de uma model específica — base do modo \"dynamic\". */\nexport function useModelSchema(name: string) {\n const { core } = useOonApi();\n return useQuery<ModelSummary>({\n queryKey: [\"oon\", \"core\", \"model\", name],\n queryFn: () => core.model(name),\n staleTime: 5 * 60 * 1000,\n enabled: !!name,\n });\n}\n","import type { AxiosInstance } from \"axios\";\nimport type { CoreMetadata, ModelSummary } from \"../types\";\n\n/**\n * SDK do contrato /core/* (introspecção dirigida por metadata). É o que\n * permite o modo \"dynamic\" das coleções: o front monta grid/form/rotas a\n * partir do que o back descreve, sem código de UI por entidade.\n */\nexport interface CoreClient {\n metadata(): Promise<CoreMetadata>;\n models(): Promise<ModelSummary[]>;\n model(name: string): Promise<ModelSummary>;\n permissions(): Promise<Array<{ resource: string; action: string; roles: string[] }>>;\n menus(): Promise<CoreMetadata[\"menus\"]>;\n}\n\nexport function createCoreClient(http: AxiosInstance): CoreClient {\n return {\n async metadata() {\n const { data } = await http.get<CoreMetadata>(\"/core/metadata\");\n return data;\n },\n async models() {\n const { data } = await http.get<{ results: ModelSummary[] }>(\"/core/models\");\n return data.results;\n },\n async model(name) {\n const { data } = await http.get<ModelSummary>(`/core/models/${name}`);\n return data;\n },\n async permissions() {\n const { data } = await http.get<{ results: Array<{ resource: string; action: string; roles: string[] }> }>(\n \"/core/permissions\"\n );\n return data.results;\n },\n async menus() {\n const { data } = await http.get<{ results: CoreMetadata[\"menus\"] }>(\"/core/menus\");\n return data.results;\n },\n };\n}\n","import type { AxiosInstance } from \"axios\";\nimport type { AuditContext, ListParams, PaginatedResult } from \"../types\";\nimport { auditHeaders } from \"./createRestClient\";\n\n/**\n * SDK por recurso (Seção 2.5). Espelha o CRUD gerado pelo back em `basePath`:\n * GET / -> list (paginado)\n * GET /:id -> get\n * POST / -> create\n * PUT /:id -> update\n * PATCH /:id -> patch\n * DELETE /:id -> delete\n * POST /import -> importMany\n * GET /export -> exportAll\n *\n * O back devolve registro único na chave do singular (`{ [singular]: {...} }`);\n * `unwrap` extrai o primeiro valor não-meta para o consumidor não precisar\n * conhecer o singular.\n */\nexport interface ResourceClient<T = Record<string, unknown>> {\n list(params?: ListParams): Promise<PaginatedResult<T>>;\n get(id: string): Promise<T>;\n create(body: Partial<T>, audit?: AuditContext): Promise<T>;\n update(id: string, body: Partial<T>, audit?: AuditContext): Promise<T>;\n patch(id: string, body: Partial<T>, audit?: AuditContext): Promise<T>;\n delete(id: string, audit?: AuditContext): Promise<T>;\n importMany(rows: unknown[], audit?: AuditContext): Promise<{ inserted?: number; [k: string]: unknown }>;\n exportAll(params?: ListParams): Promise<T[]>;\n}\n\nconst META_KEYS = new Set([\"pagination\", \"results\", \"message\", \"requestId\"]);\n\nfunction unwrap<T>(data: Record<string, unknown>): T {\n // resposta tipo { pessoa: {...} } — pega o primeiro valor de objeto.\n for (const [key, value] of Object.entries(data)) {\n if (!META_KEYS.has(key) && value && typeof value === \"object\") {\n return value as T;\n }\n }\n return data as T;\n}\n\nexport function createResourceClient<T = Record<string, unknown>>(\n http: AxiosInstance,\n basePath: string\n): ResourceClient<T> {\n const base = `/${basePath.replace(/^\\/+/, \"\")}`;\n\n return {\n async list(params) {\n const { data } = await http.get<PaginatedResult<T>>(base, { params });\n return data;\n },\n async get(id) {\n const { data } = await http.get<Record<string, unknown>>(`${base}/${id}`);\n return unwrap<T>(data);\n },\n async create(body, audit) {\n const { data } = await http.post<Record<string, unknown>>(base, body, {\n headers: auditHeaders(audit ?? { origem: \"form\" }),\n });\n return unwrap<T>(data);\n },\n async update(id, body, audit) {\n const { data } = await http.put<Record<string, unknown>>(`${base}/${id}`, body, {\n headers: auditHeaders(audit ?? { origem: \"form\" }),\n });\n return unwrap<T>(data);\n },\n async patch(id, body, audit) {\n const { data } = await http.patch<Record<string, unknown>>(`${base}/${id}`, body, {\n headers: auditHeaders(audit ?? { origem: \"datagrid\" }),\n });\n return unwrap<T>(data);\n },\n async delete(id, audit) {\n const { data } = await http.delete<Record<string, unknown>>(`${base}/${id}`, {\n headers: auditHeaders(audit ?? { origem: \"datagrid\" }),\n });\n return unwrap<T>(data);\n },\n async importMany(rows, audit) {\n const { data } = await http.post<{ inserted?: number }>(\n `${base}/import`,\n { rows },\n { headers: auditHeaders(audit ?? { origem: \"import\" }) }\n );\n return data;\n },\n async exportAll(params) {\n const { data } = await http.get<{ results: T[] } | T[]>(`${base}/export`, { params });\n return Array.isArray(data) ? data : data.results;\n },\n };\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useState,\n type ReactNode,\n} from \"react\";\nimport type { AxiosInstance } from \"axios\";\nimport type { OonAuthConfig, OonError, OonUser } from \"../types\";\nimport { captureTokenFromUrl, type TokenStorage } from \"./tokenStorage\";\nimport { useOptionalActivation } from \"./ActivationProvider\";\n\nexport type AuthStatus =\n | \"loading\"\n | \"authenticated\"\n | \"unauthenticated\"\n | \"forbidden\"\n | \"error\";\n\ninterface AuthContextValue {\n user: OonUser | null;\n roles: string[];\n capabilities: string[];\n status: AuthStatus;\n isAuthenticated: boolean;\n hasPermission: (permission?: string | string[]) => boolean;\n login: (email: string, password: string) => Promise<void>;\n retry: () => Promise<void>;\n logout: () => void;\n}\n\nconst AuthContext = createContext<AuthContextValue | null>(null);\n\nexport interface AuthProviderProps {\n http: AxiosInstance;\n storage: TokenStorage;\n auth?: OonAuthConfig;\n /** URL externa opcional. Sem ela, o Core usa a tela local em /login. */\n loginUrl?: string;\n children: ReactNode;\n}\n\nfunction errorStatus(error: unknown): number | undefined {\n return (error as OonError | undefined)?.status;\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\nfunction normalizeList(value: unknown): string[] {\n if (Array.isArray(value)) return value.map(String).filter(Boolean);\n if (typeof value === \"string\") return value.split(/[\\s,;]+/).map((item) => item.trim()).filter(Boolean);\n return [];\n}\n\nfunction extractCapabilities(user: OonUser | null): string[] {\n if (!user) return [];\n return [\n ...normalizeList(user.capabilities),\n ...normalizeList(user.permissoes?.capabilities),\n ...normalizeList(user.aplicativo?.capabilities),\n ...normalizeList(user.aplicativo?.permissoes?.capabilities),\n ].filter((item, index, all) => all.indexOf(item) === index);\n}\n\n/**\n * Provider de autenticação do Core:\n * 1. captura token do ?code=, token de desenvolvimento ou storage;\n * 2. valida o token e a permissão do app em GET /auth/validar-token;\n * 3. trata 401 como ausência de sessão e 403 como acesso negado;\n * 4. oferece login local via POST /auth/autenticar.\n */\nexport function AuthProvider({\n http,\n storage,\n auth,\n loginUrl,\n children,\n}: AuthProviderProps) {\n const tokenParam = auth?.tokenParam ?? \"code\";\n const devToken = auth?.devToken?.trim() || null;\n const [user, setUser] = useState<OonUser | null>(null);\n const [status, setStatus] = useState<AuthStatus>(\"loading\");\n const activation = useOptionalActivation();\n\n const redirectToExternalLogin = useCallback(() => {\n if (loginUrl) window.location.href = loginUrl;\n }, [loginUrl]);\n\n const applyValidationError = useCallback(\n (error: unknown) => {\n const currentStatus = errorStatus(error);\n setUser(null);\n\n if (currentStatus === 403) {\n setStatus(\"forbidden\");\n return;\n }\n\n if (currentStatus === 401) {\n storage.clear();\n setStatus(\"unauthenticated\");\n redirectToExternalLogin();\n return;\n }\n\n setStatus(\"error\");\n },\n [storage, redirectToExternalLogin],\n );\n\n const validateSession = useCallback(async () => {\n const response = await http.get<{ usuario: OonUser }>(\n \"/auth/validar-token\",\n );\n setUser(response.data.usuario);\n setStatus(\"authenticated\");\n }, [http]);\n\n const retry = useCallback(async () => {\n setStatus(\"loading\");\n try {\n await validateSession();\n } catch (error) {\n applyValidationError(error);\n throw error;\n }\n }, [validateSession, applyValidationError]);\n\n const login = useCallback(\n async (email: string, password: string) => {\n setStatus(\"loading\");\n setUser(null);\n\n try {\n const response = await http.post<{ token: string }>(\n \"/auth/autenticar\",\n {},\n {\n headers: {\n Authorization: `Basic ${encodeBasicCredentials(email, password)}`,\n },\n },\n );\n\n if (!response.data.token) {\n const error: OonError = {\n code: \"AUTH_TOKEN_MISSING\",\n message: \"Token não retornado pelo backend.\",\n status: 502,\n };\n throw error;\n }\n\n storage.set(response.data.token);\n await validateSession();\n } catch (error) {\n applyValidationError(error);\n throw error;\n }\n },\n [http, storage, validateSession, applyValidationError],\n );\n\n const logout = useCallback(() => {\n storage.clear();\n setUser(null);\n setStatus(\"unauthenticated\");\n redirectToExternalLogin();\n }, [storage, redirectToExternalLogin]);\n\n useEffect(() => {\n let active = true;\n\n if (\n activation &&\n ![\"active\", \"error\"].includes(activation.status)\n ) {\n setUser(null);\n setStatus(\"unauthenticated\");\n return;\n }\n\n const incoming = captureTokenFromUrl(tokenParam);\n const stored = storage.get();\n const token = incoming ?? devToken ?? stored;\n\n if (token && token !== stored) storage.set(token);\n\n if (!token) {\n setUser(null);\n setStatus(\"unauthenticated\");\n redirectToExternalLogin();\n return;\n }\n\n setStatus(\"loading\");\n http\n .get<{ usuario: OonUser }>(\"/auth/validar-token\")\n .then((response) => {\n if (!active) return;\n setUser(response.data.usuario);\n setStatus(\"authenticated\");\n })\n .catch((error) => {\n if (!active) return;\n applyValidationError(error);\n });\n\n return () => {\n active = false;\n };\n }, [\n http,\n storage,\n tokenParam,\n devToken,\n redirectToExternalLogin,\n applyValidationError,\n activation?.status,\n ]);\n\n const roles = user?.tipo ? [user.tipo] : [];\n const capabilities = extractCapabilities(user);\n\n const hasPermission = useCallback(\n (permission?: string | string[]) => {\n if (!permission) return true;\n const required = Array.isArray(permission) ? permission : [permission];\n if (required.length === 0) return true;\n if (roles.includes(\"admin\") || roles.includes(\"master\")) return true;\n return required.some(\n (value) =>\n roles.includes(value) ||\n capabilities.includes(value) ||\n roles.some((role) => value.startsWith(`${role}.`)),\n );\n },\n [roles, capabilities],\n );\n\n const value: AuthContextValue = {\n user,\n roles,\n capabilities,\n status,\n isAuthenticated: status === \"authenticated\",\n hasPermission,\n login,\n retry,\n logout,\n };\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n\nexport function useOonAuth(): AuthContextValue {\n const context = useContext(AuthContext);\n if (!context) {\n throw new Error(\n \"useOonAuth deve ser usado dentro de <AuthProvider> (oonCoreFront.start).\",\n );\n }\n return context;\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useState,\n type ReactNode,\n} from \"react\";\nimport type { AxiosInstance } from \"axios\";\n\nexport type InstanceStatus =\n | \"loading\"\n | \"notActivated\"\n | \"validatingCode\"\n | \"codeValidated\"\n | \"submitting\"\n | \"configuring\"\n | \"active\"\n | \"suspended\"\n | \"revoked\"\n | \"error\";\n\nexport interface ActivationStatusResponse {\n role: \"root\" | \"member\";\n status: string;\n appCode: string;\n ambiente: string;\n podeAtivar: boolean;\n podeTentarNovamente: boolean;\n motivoSuspensao?: string;\n motivoRevogacao?: string;\n}\n\ninterface ActivationContextValue {\n status: InstanceStatus;\n details: ActivationStatusResponse | null;\n refresh: () => Promise<void>;\n}\n\nconst ActivationContext = createContext<ActivationContextValue | null>(null);\n\nfunction mapStatus(data: ActivationStatusResponse): InstanceStatus {\n if (data.status === \"ativa\") return \"active\";\n if (data.status === \"suspensa\") return \"suspended\";\n if (data.status === \"revogada\") return \"revoked\";\n if (data.status === \"configurando\") return \"configuring\";\n if (data.status === \"erro\" && !data.podeAtivar) return \"error\";\n return \"notActivated\";\n}\n\nexport function ActivationProvider({\n http,\n children,\n}: {\n http: AxiosInstance;\n children: ReactNode;\n}) {\n const [status, setStatus] = useState<InstanceStatus>(\"loading\");\n const [details, setDetails] = useState<ActivationStatusResponse | null>(null);\n\n const refresh = useCallback(async () => {\n setStatus(\"loading\");\n try {\n const response =\n await http.get<ActivationStatusResponse>(\"/ativacao/status\");\n setDetails(response.data);\n setStatus(mapStatus(response.data));\n } catch {\n setStatus(\"error\");\n }\n }, [http]);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return (\n <ActivationContext.Provider value={{ status, details, refresh }}>\n {children}\n </ActivationContext.Provider>\n );\n}\n\nexport function useOptionalActivation() {\n return useContext(ActivationContext);\n}\n\nexport function useActivation() {\n const context = useOptionalActivation();\n if (!context) {\n throw new Error(\n \"useActivation deve ser usado dentro de <ActivationProvider>.\",\n );\n }\n return context;\n}\n","import { useState } from \"react\";\nimport { Box, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { CollectionMode, OonColumnDef, OonFormFieldDef } from \"../types\";\nimport { useModelSchema, useOonResource } from \"../api/ApiProvider\";\nimport { columnsFromMeta, formFieldsFromMeta } from \"./internal/fieldUtils\";\nimport { DataGrid } from \"./internal/DataGrid\";\nimport { DynamicForm } from \"./internal/DynamicForm\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\nimport { ErrorState } from \"../shell/ErrorState\";\n\nexport interface CoreCollectionProps {\n model: string;\n label?: string;\n section?: string;\n mode?: CollectionMode;\n endpoint?: string;\n columns?: OonColumnDef[];\n form?: OonFormFieldDef[];\n importExport?: boolean;\n}\n\ntype FormState = { open: false } | { open: true; row?: Record<string, unknown> };\n\nexport function CoreCollection({ model, label, section = \"Coleção\", mode = \"dynamic\", endpoint, columns, form, importExport }: CoreCollectionProps) {\n const needsSchema = mode !== \"full\" || !columns || !form || !endpoint;\n const schemaQuery = useModelSchema(needsSchema ? model : \"\");\n const schema = schemaQuery.data;\n const basePath = endpoint ?? schema?.basePath ?? `/${model.toLowerCase()}s`;\n const resolvedColumns = columns ?? (schema ? columnsFromMeta(schema.fields) : []);\n const resolvedForm = form ?? (schema ? formFieldsFromMeta(schema.fields) : []);\n\n const resource = useOonResource(basePath);\n const queryClient = useQueryClient();\n const [formState, setFormState] = useState<FormState>({ open: false });\n const [formError, setFormError] = useState<unknown>(null);\n\n const invalidate = () => queryClient.invalidateQueries({ queryKey: [\"oon\", \"list\", basePath] });\n\n const saveMutation = useMutation({\n mutationFn: (values: Record<string, unknown>) => {\n const editingRow = formState.open ? formState.row : undefined;\n const id = editingRow?._id as string | undefined;\n return id ? resource.update(id, values) : resource.create(values);\n },\n onSuccess: () => {\n setFormState({ open: false });\n setFormError(null);\n invalidate();\n },\n onError: (error) => setFormError(error),\n });\n\n const deleteMutation = useMutation({\n mutationFn: (row: Record<string, unknown>) => resource.delete(row._id as string),\n onSuccess: invalidate,\n });\n\n if (needsSchema && schemaQuery.isLoading) return <LoadingScreen />;\n if (needsSchema && schemaQuery.isError) return <ErrorState error={schemaQuery.error} />;\n\n const title = label ?? schema?.name ?? model;\n\n return (\n <Stack gap={5}>\n <Box>\n <Text fontSize=\"11px\" fontWeight=\"700\" color=\"brand.500\" textTransform=\"uppercase\" letterSpacing=\"0.08em\" mb={1}>\n {section}\n </Text>\n <Heading size=\"lg\" color=\"#24323A\" letterSpacing=\"-0.02em\">\n {title}\n </Heading>\n <Text mt={1} fontSize=\"13px\" color=\"gray.500\">\n Consulte, filtre e mantenha os registros desta operação.\n </Text>\n </Box>\n\n <DataGrid\n resource={resource}\n resourceKey={basePath}\n columns={resolvedColumns}\n onCreate={() => {\n setFormError(null);\n setFormState({ open: true });\n }}\n onEdit={(row) => {\n setFormError(null);\n setFormState({ open: true, row });\n }}\n onDelete={(row) => {\n if (window.confirm(\"Excluir este registro?\")) deleteMutation.mutate(row);\n }}\n />\n\n {formState.open ? (\n <DynamicForm\n title={formState.row ? `Editar ${title}` : `Novo ${title}`}\n eyebrow={section}\n fields={resolvedForm}\n initialValues={formState.row}\n submitting={saveMutation.isPending}\n error={formError}\n onSubmit={(values) => {\n setFormError(null);\n saveMutation.mutate(values);\n }}\n onFieldChange={() => setFormError(null)}\n onCancel={() => {\n setFormState({ open: false });\n setFormError(null);\n }}\n />\n ) : null}\n\n {importExport ? null : null}\n </Stack>\n );\n}\n","import type { FieldKind, FieldMeta, OonColumnDef, OonFormFieldDef } from \"../../types\";\n\n/** Campos que normalmente não fazem sentido em grid/form de CRUD. */\nconst HIDDEN_FIELDS = new Set([\"__v\", \"_id\", \"createdAt\", \"updatedAt\", \"criadoEm\", \"atualizadoEm\"]);\n\nexport function isEditableField(meta: FieldMeta): boolean {\n return !HIDDEN_FIELDS.has(meta.name) && meta.kind !== \"raw\";\n}\n\nexport function fieldLabel(meta: { name: string; label?: string }): string {\n if (meta.label) return meta.label;\n return meta.name\n .replace(/_/g, \" \")\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n .replace(/^./, (character) => character.toUpperCase());\n}\n\n/** Deriva colunas de grid a partir da metadata da model (modo dynamic/minimal). */\nexport function columnsFromMeta(fields: FieldMeta[]): OonColumnDef[] {\n return fields\n .filter(isEditableField)\n .slice(0, 8)\n .map((field) => ({ field: field.name, label: fieldLabel(field), kind: field.kind, sortable: true }));\n}\n\nfunction formRequired(field: FieldMeta): boolean {\n const raw = field as unknown as Record<string, unknown>;\n const options = raw.options;\n const validation = raw.validation;\n const schema = raw.schema;\n\n return Boolean(\n field.required ||\n (options && !Array.isArray(options) && typeof options === \"object\" && (options as Record<string, unknown>).required) ||\n (validation && typeof validation === \"object\" && (validation as Record<string, unknown>).required) ||\n (schema && typeof schema === \"object\" && (schema as Record<string, unknown>).required)\n );\n}\n\nfunction formOptions(field: FieldMeta): string[] | undefined {\n const rawOptions = (field as unknown as Record<string, unknown>).options;\n if (Array.isArray(rawOptions)) return rawOptions.filter((value): value is string => typeof value === \"string\");\n if (!rawOptions || typeof rawOptions !== \"object\") return undefined;\n\n const options = rawOptions as Record<string, unknown>;\n const candidates = [options.values, options.enum, options.options];\n for (const candidate of candidates) {\n if (Array.isArray(candidate)) return candidate.filter((value): value is string => typeof value === \"string\");\n }\n return undefined;\n}\n\n/** Deriva campos de formulário a partir da metadata da model. */\nexport function formFieldsFromMeta(fields: FieldMeta[]): OonFormFieldDef[] {\n return fields.filter(isEditableField).map((field) => ({\n field: field.name,\n label: fieldLabel(field),\n kind: field.kind,\n required: formRequired(field),\n options: formOptions(field),\n ref: field.ref,\n }));\n}\n\n/** Formata um valor de célula conforme o tipo declarado. */\nexport function formatCell(value: unknown, kind?: FieldKind): string {\n if (value == null || value === \"\") return \"—\";\n switch (kind) {\n case \"boolean\":\n return value ? \"Sim\" : \"Não\";\n case \"date\":\n try {\n return new Date(value as string).toLocaleDateString(\"pt-BR\");\n } catch {\n return String(value);\n }\n case \"currency\":\n case \"currencyConverted\":\n return new Intl.NumberFormat(\"pt-BR\", { style: \"currency\", currency: \"BRL\" }).format(Number(value));\n case \"ref\":\n if (value && typeof value === \"object\") {\n const object = value as Record<string, unknown>;\n return String(object.nome ?? object.label ?? object.descricao ?? object._id ?? \"—\");\n }\n return String(value);\n default:\n return String(value);\n }\n}\n","import { useDeferredValue, useState, type ReactNode } from \"react\";\nimport { Badge, Box, Button, Flex, Input, NativeSelect, Spacer, Table, Text } from \"@chakra-ui/react\";\nimport { keepPreviousData, useQuery } from \"@tanstack/react-query\";\nimport type { FieldKind, OonColumnDef } from \"../../types\";\nimport type { ResourceClient } from \"../../api/resourceClient\";\nimport { formatCell } from \"./fieldUtils\";\nimport { LoadingScreen } from \"../../shell/LoadingScreen\";\nimport { ErrorState } from \"../../shell/ErrorState\";\n\nexport interface DataGridProps {\n resource: ResourceClient;\n resourceKey: string;\n columns: OonColumnDef[];\n search?: boolean;\n onCreate?: () => void;\n onEdit?: (row: Record<string, unknown>) => void;\n onDelete?: (row: Record<string, unknown>) => void;\n toolbarExtra?: ReactNode;\n}\n\nfunction SearchIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" width=\"17\" height=\"17\" aria-hidden=\"true\">\n <circle cx=\"8.5\" cy=\"8.5\" r=\"5.25\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"m12.4 12.4 4 4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction EditIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" width=\"15\" height=\"15\" aria-hidden=\"true\">\n <path d=\"M4 14.5V16h1.5L14.7 6.8l-1.5-1.5L4 14.5Z\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.45\" strokeLinejoin=\"round\" />\n <path d=\"m12.5 6 1.5-1.5a1.05 1.05 0 0 1 1.5 0l.1.1a1.05 1.05 0 0 1 0 1.5L14.1 7.6\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.45\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction TrashIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" width=\"15\" height=\"15\" aria-hidden=\"true\">\n <path d=\"M5.5 6.5h9l-.6 9H6.1l-.6-9Zm2-2h5l.7 2H6.8l.7-2Z\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.35\" strokeLinejoin=\"round\" />\n <path d=\"M4.5 6.5h11\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.35\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction ChevronIcon({ direction }: { direction: \"left\" | \"right\" }) {\n return (\n <svg viewBox=\"0 0 20 20\" width=\"17\" height=\"17\" aria-hidden=\"true\" style={{ transform: direction === \"right\" ? \"rotate(180deg)\" : undefined }}>\n <path d=\"m12 5-5 5 5 5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nfunction PlusIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" width=\"17\" height=\"17\" aria-hidden=\"true\">\n <path d=\"M10 4v12M4 10h12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction renderCell(value: unknown, kind?: FieldKind) {\n const formatted = formatCell(value, kind);\n\n if (kind === \"enum\") {\n const normalized = String(value ?? \"\").toLowerCase();\n const palette = /erro|cancel|inativo|recus|critica/.test(normalized)\n ? \"red\"\n : /pendente|aguardando|rascunho/.test(normalized)\n ? \"orange\"\n : /processando|conferencia|integrando|validando/.test(normalized)\n ? \"blue\"\n : /ativo|sucesso|conclu|aplicada|disponivel|aprov/.test(normalized)\n ? \"green\"\n : \"gray\";\n return (\n <Badge colorPalette={palette} variant=\"subtle\" borderRadius=\"full\" px=\"7px\" py=\"3px\" fontSize=\"9px\" fontWeight=\"600\" textTransform=\"capitalize\">\n {formatted}\n </Badge>\n );\n }\n\n if (kind === \"boolean\") {\n const active = value === true || value === \"true\";\n return (\n <Badge colorPalette={active ? \"green\" : \"gray\"} variant=\"subtle\" borderRadius=\"full\" px=\"7px\" py=\"3px\" fontSize=\"9px\" fontWeight=\"600\">\n {formatted}\n </Badge>\n );\n }\n\n return formatted;\n}\n\n/** Datagrid no mesmo padrão explícito da Central Minexco. */\nexport function DataGrid({\n resource,\n resourceKey,\n columns,\n search = true,\n onCreate,\n onEdit,\n onDelete,\n toolbarExtra,\n}: DataGridProps) {\n const [pageIndex, setPageIndex] = useState(0);\n const [pageSize, setPageSize] = useState(20);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const deferredSearch = useDeferredValue(searchTerm);\n const [sort, setSort] = useState<string | undefined>(undefined);\n\n const query = useQuery({\n queryKey: [\"oon\", \"list\", resourceKey, { pageIndex, pageSize, searchTerm: deferredSearch, sort }],\n queryFn: () => resource.list({ pageIndex, pageSize, searchTerm: deferredSearch || undefined, sort }),\n placeholderData: keepPreviousData,\n });\n\n const toggleSort = (field: string) => {\n setPageIndex(0);\n setSort((previous) => {\n if (previous === `${field}.asc`) return `${field}.desc`;\n if (previous === `${field}.desc`) return undefined;\n return `${field}.asc`;\n });\n };\n\n const pagination = query.data?.pagination;\n const rows = query.data?.results ?? [];\n const totalItems = pagination?.totalItems ?? rows.length;\n const totalPages = Math.max(1, pagination?.totalPages ?? 1);\n const currentPage = Math.min(pageIndex + 1, totalPages);\n const actionCount = onEdit || onDelete ? 1 : 0;\n\n return (\n <Box bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"10px\" boxShadow=\"0 1px 2px rgba(15,23,42,.06)\" overflow=\"hidden\">\n <Flex minH=\"60px\" px=\"14px\" py=\"12px\" align=\"center\" gap={4} borderBottomWidth=\"1px\" borderColor=\"#E5E9ED\">\n {search ? (\n <Flex minW={{ base: \"100%\", md: \"min(420px, 55vw)\" }} maxW=\"420px\" h=\"35px\" px=\"10px\" align=\"center\" gap={2} color=\"#98A2B3\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#D5DDE3\" borderRadius=\"6px\" _focusWithin={{ borderColor: \"#0F8DD0\", boxShadow: \"0 0 0 3px rgba(15,141,208,.10)\" }}>\n <SearchIcon />\n <Input\n value={searchTerm}\n onChange={(event) => {\n setSearchTerm(event.target.value);\n setPageIndex(0);\n }}\n placeholder=\"Pesquisar registros...\"\n h=\"100%\"\n p={0}\n color=\"#475467\"\n bg=\"transparent\"\n border={0}\n borderRadius={0}\n fontSize=\"11px\"\n _placeholder={{ color: \"#A6B0BC\" }}\n _focusVisible={{ boxShadow: \"none\", outline: \"none\" }}\n />\n </Flex>\n ) : null}\n\n <Spacer />\n <Flex align=\"center\" gap={3} color=\"#98A2B3\" fontSize=\"10px\">\n {query.isFetching ? <Text>Atualizando...</Text> : null}\n <Text as=\"strong\" color=\"#667085\" fontWeight=\"600\">\n {totalItems} registro{totalItems === 1 ? \"\" : \"s\"}\n </Text>\n </Flex>\n {toolbarExtra}\n {onCreate ? (\n <Button minH=\"35px\" px=\"13px\" colorPalette=\"brand\" borderRadius=\"6px\" fontSize=\"11px\" fontWeight=\"600\" onClick={onCreate}>\n <PlusIcon /> Novo registro\n </Button>\n ) : null}\n </Flex>\n\n {query.isLoading ? (\n <LoadingScreen />\n ) : query.isError ? (\n <ErrorState error={query.error} />\n ) : (\n <Box overflowX=\"auto\">\n <Table.Root size=\"sm\" minW=\"900px\" borderCollapse=\"collapse\">\n <Table.Header>\n <Table.Row bg=\"#F4F7F9\">\n {columns.map((column) => (\n <Table.ColumnHeader\n key={column.field}\n h=\"39px\"\n px=\"10px\"\n py=\"8px\"\n color=\"#667085\"\n borderBottomWidth=\"1px\"\n borderColor=\"#D5DDE3\"\n fontSize=\"10px\"\n fontWeight=\"600\"\n letterSpacing=\".015em\"\n textTransform=\"none\"\n whiteSpace=\"nowrap\"\n cursor={column.sortable ? \"pointer\" : undefined}\n onClick={column.sortable ? () => toggleSort(column.field) : undefined}\n >\n {column.label ?? column.field}\n {sort?.startsWith(`${column.field}.`) ? (sort.endsWith(\".asc\") ? \" ▲\" : \" ▼\") : \"\"}\n </Table.ColumnHeader>\n ))}\n {actionCount ? (\n <Table.ColumnHeader w=\"84px\" h=\"39px\" px=\"10px\" py=\"8px\" color=\"#667085\" borderBottomWidth=\"1px\" borderColor=\"#D5DDE3\" fontSize=\"10px\" fontWeight=\"600\" textAlign=\"center\">\n Ações\n </Table.ColumnHeader>\n ) : null}\n </Table.Row>\n </Table.Header>\n\n <Table.Body>\n {rows.length === 0 ? (\n <Table.Row>\n <Table.Cell colSpan={columns.length + actionCount}>\n <Text minH=\"140px\" display=\"grid\" placeItems=\"center\" color=\"#98A2B3\" fontSize=\"12px\">\n Nenhum registro encontrado.\n </Text>\n </Table.Cell>\n </Table.Row>\n ) : (\n rows.map((row, index) => (\n <Table.Row key={(row._id as string) ?? index} bg={index % 2 ? \"#FBFCFD\" : \"white\"} _hover={{ bg: \"#F0F7FF\" }}>\n {columns.map((column) => (\n <Table.Cell key={column.field} maxW=\"250px\" h=\"42px\" px=\"10px\" py=\"8px\" overflow=\"hidden\" color=\"#52606D\" borderBottomWidth=\"1px\" borderColor=\"#EEF1F3\" fontSize=\"11px\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\">\n {renderCell(row[column.field], column.kind)}\n </Table.Cell>\n ))}\n {actionCount ? (\n <Table.Cell h=\"42px\" px=\"10px\" py=\"5px\" borderBottomWidth=\"1px\" borderColor=\"#EEF1F3\" textAlign=\"center\">\n <Flex justify=\"center\" gap=\"5px\">\n {onEdit ? (\n <Button type=\"button\" aria-label=\"Editar\" w=\"31px\" minW=\"31px\" h=\"31px\" p={0} color=\"#667085\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"6px\" onClick={() => onEdit(row)} _hover={{ color: \"#036491\", bg: \"#F0F7FF\", borderColor: \"#B8D9EB\" }}>\n <EditIcon />\n </Button>\n ) : null}\n {onDelete ? (\n <Button type=\"button\" aria-label=\"Excluir\" w=\"31px\" minW=\"31px\" h=\"31px\" p={0} color=\"#667085\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"6px\" onClick={() => onDelete(row)} _hover={{ color: \"#B42318\", bg: \"#FFF5F5\", borderColor: \"#FECACA\" }}>\n <TrashIcon />\n </Button>\n ) : null}\n </Flex>\n </Table.Cell>\n ) : null}\n </Table.Row>\n ))\n )}\n </Table.Body>\n </Table.Root>\n </Box>\n )}\n\n <Flex minH=\"56px\" px=\"14px\" py=\"10px\" align=\"center\" justify=\"flex-end\" gap=\"18px\" color=\"#7B8794\" borderTopWidth=\"1px\" borderColor=\"#E5E9ED\" fontSize=\"10px\" flexWrap=\"wrap\">\n <Flex align=\"center\" gap={2}>\n <Text>Linhas por página</Text>\n <NativeSelect.Root size=\"xs\" w=\"68px\">\n <NativeSelect.Field\n value={pageSize}\n h=\"30px\"\n pl=\"8px\"\n pr=\"26px\"\n color=\"#52606D\"\n bg=\"white\"\n borderColor=\"#D5DDE3\"\n borderRadius=\"5px\"\n fontSize=\"10px\"\n onChange={(event) => {\n setPageSize(Number(event.currentTarget.value));\n setPageIndex(0);\n }}\n >\n {[10, 20, 50, 100].map((size) => <option key={size} value={size}>{size}</option>)}\n </NativeSelect.Field>\n <NativeSelect.Indicator />\n </NativeSelect.Root>\n </Flex>\n\n <Text>Página {currentPage} de {totalPages}</Text>\n\n <Flex gap=\"5px\">\n <Button type=\"button\" aria-label=\"Página anterior\" w=\"31px\" minW=\"31px\" h=\"31px\" p={0} color=\"#667085\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"6px\" disabled={pageIndex <= 0} onClick={() => setPageIndex((current) => Math.max(0, current - 1))} _hover={{ color: \"#036491\", bg: \"#F0F7FF\", borderColor: \"#B8D9EB\" }}>\n <ChevronIcon direction=\"left\" />\n </Button>\n <Button type=\"button\" aria-label=\"Próxima página\" w=\"31px\" minW=\"31px\" h=\"31px\" p={0} color=\"#667085\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"6px\" disabled={currentPage >= totalPages} onClick={() => setPageIndex((current) => Math.min(totalPages - 1, current + 1))} _hover={{ color: \"#036491\", bg: \"#F0F7FF\", borderColor: \"#B8D9EB\" }}>\n <ChevronIcon direction=\"right\" />\n </Button>\n </Flex>\n </Flex>\n </Box>\n );\n}\n","import { Button, Flex, Spinner, Text } from \"@chakra-ui/react\";\n\ninterface LoadingScreenProps {\n message?: string;\n actionLabel?: string;\n onAction?: () => void;\n}\n\n/** Tela de carregamento/estado neutro reutilizada por guards e Suspense. */\nexport function LoadingScreen({\n message,\n actionLabel,\n onAction,\n}: LoadingScreenProps) {\n return (\n <Flex direction=\"column\" align=\"center\" justify=\"center\" minH=\"60vh\" gap={4}>\n <Spinner size=\"lg\" />\n {message ? (\n <Text color=\"gray.500\" fontSize=\"sm\" textAlign=\"center\">\n {message}\n </Text>\n ) : null}\n {actionLabel && onAction ? (\n <Button size=\"sm\" variant=\"outline\" onClick={onAction}>\n {actionLabel}\n </Button>\n ) : null}\n </Flex>\n );\n}\n","import { Box, Heading, Text } from \"@chakra-ui/react\";\n\n/**\n * Estado de erro padrão. Aceita tanto o `OonError` do client quanto um `Error`\n * cru (o que o React Query tipa em `query.error`) — só precisa de `message` e,\n * opcionalmente, `requestId`.\n */\nexport function ErrorState({\n error,\n title = \"Não foi possível carregar\",\n}: {\n error?: { message?: string; requestId?: string } | null;\n title?: string;\n}) {\n return (\n <Box borderWidth=\"1px\" borderColor=\"red.200\" bg=\"red.50\" borderRadius=\"md\" p={4}>\n <Heading size=\"sm\" color=\"red.700\">\n {title}\n </Heading>\n <Text mt={1} fontSize=\"sm\" color=\"red.600\">\n {error?.message ?? \"Erro inesperado.\"}\n </Text>\n {error?.requestId ? (\n <Text mt={2} fontSize=\"xs\" color=\"red.400\">\n requestId: {error.requestId}\n </Text>\n ) : null}\n </Box>\n );\n}\n","import { useEffect, useState, type FormEvent } from \"react\";\nimport { Box, Button, Flex, Heading, Input, NativeSelect, SimpleGrid, Stack, Text, Textarea } from \"@chakra-ui/react\";\nimport type { OonFormFieldDef } from \"../../types\";\nimport { fieldLabel } from \"./fieldUtils\";\nimport { ReferenceSelect } from \"./ReferenceSelect\";\n\nexport interface DynamicFormProps {\n title: string;\n eyebrow?: string;\n fields: OonFormFieldDef[];\n initialValues?: Record<string, unknown>;\n submitting?: boolean;\n error?: unknown;\n onSubmit: (values: Record<string, unknown>) => void;\n onCancel: () => void;\n onFieldChange?: () => void;\n}\n\ntype FieldErrors = Record<string, string>;\ntype ExtendedField = OonFormFieldDef & { multiline?: boolean; rows?: number; span?: 1 | 2 };\n\nconst idFor = (field: string) => `oon-form-field-${field.replace(/[^a-zA-Z0-9_-]/g, \"-\")}`;\nconst errorIdFor = (field: string) => `${idFor(field)}-error`;\nconst normalize = (value: unknown) => String(value ?? \"\").normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\").toLowerCase();\n\nfunction CloseIcon() {\n return <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\"><path d=\"m6 6 8 8M14 6l-8 8\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" /></svg>;\n}\n\nfunction CheckIcon() {\n return <svg viewBox=\"0 0 20 20\" width=\"16\" height=\"16\" aria-hidden=\"true\"><circle cx=\"10\" cy=\"10\" r=\"7\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.4\" /><path d=\"m6.8 10.1 2 2 4.3-4.4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" /></svg>;\n}\n\nfunction AlertIcon() {\n return <svg viewBox=\"0 0 20 20\" width=\"17\" height=\"17\" aria-hidden=\"true\"><circle cx=\"10\" cy=\"10\" r=\"7\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.4\" /><path d=\"M10 6.5v4.2M10 13.5v.1\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" /></svg>;\n}\n\nfunction toValue(value: unknown, kind?: string) {\n if (value == null) return \"\";\n if (kind === \"date\") {\n try { return new Date(value as string).toISOString().slice(0, 10); } catch { return \"\"; }\n }\n if (typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n return String(record._id ?? record.id ?? \"\");\n }\n return String(value);\n}\n\nfunction coerce(value: string, kind?: string): unknown {\n if (value === \"\") return undefined;\n if ([\"number\", \"currency\", \"currencyConverted\"].includes(kind ?? \"\")) return Number(value);\n if (kind === \"boolean\") return value === \"true\";\n return value;\n}\n\nfunction validate(fields: OonFormFieldDef[], values: Record<string, string>) {\n const errors: FieldErrors = {};\n fields.forEach((field) => {\n if (field.required && !(values[field.field] ?? \"\").trim()) errors[field.field] = `${fieldLabel({ name: field.field, label: field.label })} é obrigatório.`;\n });\n return errors;\n}\n\nfunction messageOf(error: unknown) {\n if (!error) return null;\n if (typeof error === \"string\") return error;\n if (error instanceof Error) return error.message;\n if (typeof error === \"object\") {\n const record = error as Record<string, unknown>;\n if (typeof record.message === \"string\") return record.message;\n if (record.error && typeof record.error === \"object\" && typeof (record.error as Record<string, unknown>).message === \"string\") return (record.error as Record<string, unknown>).message as string;\n }\n return \"Não foi possível salvar o registro.\";\n}\n\nfunction detailErrors(error: unknown, fields: OonFormFieldDef[]) {\n const result: FieldErrors = {};\n const lookup = new Map(fields.flatMap((field) => [[normalize(field.field), field], [normalize(field.label), field]] as Array<[string, OonFormFieldDef]>));\n const seen = new WeakSet<object>();\n const visit = (value: unknown, hint?: string) => {\n if (value == null) return;\n if (Array.isArray(value)) return value.forEach((item) => visit(item, hint));\n if (typeof value !== \"object\" || seen.has(value)) return;\n seen.add(value);\n const record = value as Record<string, unknown>;\n const candidate = String(record.field ?? record.path ?? record.property ?? record.name ?? hint ?? \"\");\n const field = lookup.get(normalize(candidate.split(/[.[\\]]+/).filter(Boolean).pop() ?? candidate));\n const raw = record.message ?? record.msg ?? record.reason;\n if (field && typeof raw === \"string\") result[field.field] = /required|obrigat/i.test(raw) ? `${fieldLabel({ name: field.field, label: field.label })} é obrigatório.` : raw;\n Object.entries(record).forEach(([key, nested]) => {\n const direct = lookup.get(normalize(key));\n if (direct && typeof nested === \"string\") result[direct.field] = nested;\n visit(nested, key);\n });\n };\n if (error && typeof error === \"object\") {\n const record = error as Record<string, unknown>;\n visit(record.details ?? (record.error as Record<string, unknown> | undefined)?.details ?? record);\n }\n return result;\n}\n\nfunction focusField(field: string) {\n window.setTimeout(() => {\n const element = document.getElementById(idFor(field)) as HTMLElement | null;\n element?.scrollIntoView?.({ behavior: \"smooth\", block: \"center\" });\n element?.focus({ preventScroll: true });\n }, 0);\n}\n\nfunction isMultiline(field: ExtendedField) {\n return field.multiline === true || /observa|descricao|mensagem|detalhe|necessidade/i.test(field.field);\n}\n\nfunction Label({ id, label, required }: { id: string; label: string; required?: boolean }) {\n return <label htmlFor={id}><Text as=\"span\" display=\"block\" mb=\"6px\" color=\"#475467\" fontSize=\"11px\" fontWeight=\"600\">{label}{required ? <Text as=\"span\" color=\"#DC2626\"> *</Text> : null}</Text></label>;\n}\n\nfunction ErrorText({ id, text }: { id?: string; text?: string }) {\n return text ? <Text id={id} role=\"alert\" mt=\"5px\" color=\"#DC2626\" fontSize=\"10px\" fontWeight=\"500\">{text}</Text> : null;\n}\n\nconst controlProps = (invalid: boolean) => ({\n minH: \"37px\",\n px: \"10px\",\n py: \"8px\",\n color: \"#475467\",\n bg: \"white\",\n borderColor: invalid ? \"#DC2626\" : \"#D5DDE3\",\n borderRadius: \"6px\",\n boxShadow: invalid ? \"0 0 0 3px rgba(220,38,38,.08)\" : undefined,\n fontSize: \"11px\",\n});\n\nexport function DynamicForm({ title, eyebrow = \"Cadastro\", fields, initialValues, submitting, error, onSubmit, onCancel, onFieldChange }: DynamicFormProps) {\n const [values, setValues] = useState<Record<string, string>>(() => Object.fromEntries(fields.map((field) => [field.field, toValue(initialValues?.[field.field], field.kind)])));\n const [errors, setErrors] = useState<FieldErrors>({});\n const [dismissed, setDismissed] = useState(false);\n\n useEffect(() => {\n const listener = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || event.defaultPrevented || submitting) return;\n if ((event.target as HTMLElement | null)?.closest('[role=\"combobox\"], [role=\"listbox\"]')) return;\n onCancel();\n };\n document.addEventListener(\"keydown\", listener);\n return () => document.removeEventListener(\"keydown\", listener);\n }, [onCancel, submitting]);\n\n useEffect(() => {\n setDismissed(false);\n if (!error) return;\n const detailed = detailErrors(error, fields);\n const fallback = /validacao|validation/i.test(normalize(messageOf(error))) ? validate(fields, values) : {};\n const next = Object.keys(detailed).length ? detailed : fallback;\n if (!Object.keys(next).length) return;\n setErrors((current) => ({ ...current, ...next }));\n const first = fields.find((field) => next[field.field]);\n if (first) focusField(first.field);\n }, [error]);\n\n const change = (field: string, value: string) => {\n setValues((current) => ({ ...current, [field]: value }));\n setErrors((current) => { if (!current[field]) return current; const next = { ...current }; delete next[field]; return next; });\n setDismissed(true);\n onFieldChange?.();\n };\n\n const submit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const validation = validate(fields, values);\n if (Object.keys(validation).length) {\n setErrors(validation);\n setDismissed(true);\n const first = fields.find((field) => validation[field.field]);\n if (first) focusField(first.field);\n return;\n }\n const payload: Record<string, unknown> = {};\n fields.forEach((field) => { const value = coerce(values[field.field] ?? \"\", field.kind); if (value !== undefined) payload[field.field] = value; });\n setErrors({});\n onSubmit(payload);\n };\n\n const invalid = fields.filter((field) => errors[field.field]);\n const generic = dismissed ? null : messageOf(error);\n\n return (\n <Flex position=\"fixed\" inset={0} zIndex={1000} align=\"center\" justify=\"center\" p={{ base: 2, md: 6 }} bg=\"rgba(15,23,42,.48)\" backdropFilter=\"blur(2px)\" onMouseDown={(event) => { if (event.currentTarget === event.target && !submitting) onCancel(); }}>\n <Box role=\"dialog\" aria-modal=\"true\" aria-label={title} w=\"min(860px, 96vw)\" maxH=\"min(880px, 94vh)\" overflow=\"hidden\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"14px\" boxShadow=\"0 24px 70px rgba(15,23,42,.24)\">\n <Flex minH=\"76px\" px=\"20px\" py=\"16px\" align=\"center\" justify=\"space-between\" borderBottomWidth=\"1px\" borderColor=\"#E5E9ED\">\n <Box><Text color=\"#0474AF\" fontSize=\"10px\" fontWeight=\"600\" letterSpacing=\".07em\" textTransform=\"uppercase\">{eyebrow}</Text><Heading mt=\"3px\" color=\"#344054\" fontSize=\"18px\" fontWeight=\"600\">{title}</Heading></Box>\n <Button type=\"button\" aria-label=\"Fechar\" w=\"31px\" minW=\"31px\" h=\"31px\" p={0} color=\"#667085\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"6px\" disabled={submitting} onClick={onCancel} _hover={{ color: \"#036491\", bg: \"#F0F7FF\", borderColor: \"#B8D9EB\" }}><CloseIcon /></Button>\n </Flex>\n\n <form noValidate onSubmit={submit}>\n <Box maxH=\"calc(94vh - 148px)\" px=\"20px\" pt=\"18px\" pb=\"24px\" overflowY=\"auto\">\n <Stack gap={4}>\n {invalid.length ? <Box role=\"alert\" p=\"11px 13px\" color=\"#9B1C1C\" bg=\"#FFF5F5\" borderWidth=\"1px\" borderColor=\"#FECACA\" borderLeftWidth=\"4px\" borderLeftColor=\"#DC2626\" borderRadius=\"8px\" fontSize=\"11px\"><Flex align=\"center\" gap=\"7px\"><AlertIcon /><Text as=\"strong\">Não foi possível salvar. Corrija os campos abaixo:</Text></Flex><Box as=\"ul\" mt=\"7px\" mb={0} pl=\"20px\" display=\"grid\" gap=\"3px\">{invalid.map((field) => <li key={field.field}><Button type=\"button\" variant=\"plain\" minH=\"auto\" h=\"auto\" p={0} color=\"#B42318\" fontSize=\"10px\" fontWeight=\"400\" textDecoration=\"underline\" onClick={() => focusField(field.field)}>{fieldLabel({ name: field.field, label: field.label })}: {errors[field.field]}</Button></li>)}</Box></Box> : null}\n {generic && !invalid.length ? <Flex role=\"alert\" p=\"10px 12px\" align=\"center\" gap={2} color=\"#B42318\" bg=\"#FEF3F2\" borderWidth=\"1px\" borderColor=\"#FECDCA\" borderRadius=\"7px\" fontSize=\"11px\"><AlertIcon />{generic}</Flex> : null}\n\n <SimpleGrid columns={{ base: 1, lg: 2 }} gapX=\"16px\" gapY=\"15px\">\n {fields.map((baseField) => {\n const field = baseField as ExtendedField;\n const label = fieldLabel({ name: field.field, label: field.label });\n const message = errors[field.field];\n const id = idFor(field.field);\n const errorId = message ? errorIdFor(field.field) : undefined;\n const multiline = isMultiline(field);\n const span = field.span === 2 || multiline;\n const wrap = (control: React.ReactNode) => <Box key={field.field} gridColumn={span ? \"1 / -1\" : undefined}><Label id={id} label={label} required={field.required} />{control}<ErrorText id={errorId} text={message} /></Box>;\n\n if (field.kind === \"ref\" && field.ref) return wrap(<ReferenceSelect field={field.field} inputId={id} errorId={errorId} label={label} refModel={field.ref} value={values[field.field] ?? \"\"} initialValue={initialValues?.[field.field]} required={field.required} invalid={!!message} error={message} onChange={(value) => change(field.field, value)} />);\n if (field.kind === \"enum\" && field.options?.length) return wrap(<NativeSelect.Root size=\"sm\"><NativeSelect.Field id={id} aria-invalid={!!message} aria-describedby={errorId} value={values[field.field] ?? \"\"} {...controlProps(!!message)} onChange={(event) => change(field.field, event.currentTarget.value)}><option value=\"\">— Selecione —</option>{field.options.map((option) => <option key={option} value={option}>{option}</option>)}</NativeSelect.Field><NativeSelect.Indicator /></NativeSelect.Root>);\n if (field.kind === \"boolean\") return wrap(<NativeSelect.Root size=\"sm\"><NativeSelect.Field id={id} aria-invalid={!!message} aria-describedby={errorId} value={values[field.field] ?? \"\"} {...controlProps(!!message)} onChange={(event) => change(field.field, event.currentTarget.value)}><option value=\"\">— Selecione —</option><option value=\"true\">Sim</option><option value=\"false\">Não</option></NativeSelect.Field><NativeSelect.Indicator /></NativeSelect.Root>);\n if (multiline) return wrap(<Textarea id={id} rows={field.rows ?? 4} resize=\"vertical\" aria-invalid={!!message} aria-describedby={errorId} value={values[field.field] ?? \"\"} {...controlProps(!!message)} lineHeight=\"1.5\" onChange={(event) => change(field.field, event.currentTarget.value)} />);\n const type = field.kind === \"date\" ? \"date\" : [\"number\", \"currency\", \"currencyConverted\"].includes(field.kind ?? \"\") ? \"number\" : \"text\";\n return wrap(<Input id={id} type={type} step={type === \"number\" ? \"any\" : undefined} autoComplete=\"off\" aria-invalid={!!message} aria-describedby={errorId} value={values[field.field] ?? \"\"} {...controlProps(!!message)} onChange={(event) => change(field.field, event.currentTarget.value)} />);\n })}\n </SimpleGrid>\n </Stack>\n </Box>\n\n <Flex minH=\"68px\" px=\"20px\" py=\"14px\" justify=\"flex-end\" gap=\"9px\" borderTopWidth=\"1px\" borderColor=\"#E5E9ED\"><Button type=\"button\" minH=\"35px\" px=\"13px\" color=\"#475467\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#D5DDE3\" borderRadius=\"6px\" fontSize=\"11px\" fontWeight=\"600\" disabled={submitting} onClick={onCancel}>Cancelar</Button><Button type=\"submit\" minH=\"35px\" px=\"13px\" colorPalette=\"brand\" borderRadius=\"6px\" fontSize=\"11px\" fontWeight=\"600\" loading={submitting}><CheckIcon /> Salvar</Button></Flex>\n </form>\n </Box>\n </Flex>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Box, Button, Flex, Input, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useModelSchema, useOonResource } from \"../../api/ApiProvider\";\nimport { initialReferenceLabel, referenceId, referenceOptionLabel } from \"./referenceUtils\";\n\nexport interface ReferenceSelectProps {\n field: string;\n inputId?: string;\n errorId?: string;\n label: string;\n refModel: string;\n value: string;\n initialValue?: unknown;\n required?: boolean;\n invalid?: boolean;\n error?: string;\n onChange: (value: string) => void;\n}\n\nfunction SearchIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" width=\"15\" height=\"15\" aria-hidden=\"true\">\n <circle cx=\"8.5\" cy=\"8.5\" r=\"5.25\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"m12.4 12.4 4 4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction ChevronIcon({ open }: { open: boolean }) {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n width=\"16\"\n height=\"16\"\n aria-hidden=\"true\"\n style={{ display: \"block\", transition: \"transform .15s ease\", transform: open ? \"rotate(180deg)\" : \"rotate(0deg)\" }}\n >\n <path d=\"M5.5 7.5 10 12l4.5-4.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nfunction ClearIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path d=\"m6 6 8 8M14 6l-8 8\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/** Campo relacionado no mesmo padrão explícito da Central Minexco. */\nexport function ReferenceSelect({\n field,\n inputId,\n errorId,\n label,\n refModel,\n value,\n initialValue,\n required,\n invalid,\n error,\n onChange,\n}: ReferenceSelectProps) {\n const initialLabel = useMemo(() => initialReferenceLabel(initialValue), [initialValue]);\n const [selectedLabel, setSelectedLabel] = useState(initialLabel);\n const [search, setSearch] = useState(\"\");\n const [debouncedSearch, setDebouncedSearch] = useState(\"\");\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const searchRef = useRef<HTMLInputElement | null>(null);\n const optionRefs = useRef<Array<HTMLButtonElement | null>>([]);\n\n const schemaQuery = useModelSchema(refModel);\n const schema = schemaQuery.data;\n const basePath = schema?.basePath ?? `/${refModel.toLowerCase()}s`;\n const resource = useOonResource<Record<string, unknown>>(basePath);\n\n useEffect(() => {\n const timer = window.setTimeout(() => setDebouncedSearch(search.trim()), 250);\n return () => window.clearTimeout(timer);\n }, [search]);\n\n useEffect(() => {\n if (!value) setSelectedLabel(\"\");\n else if (initialLabel) setSelectedLabel(initialLabel);\n }, [initialLabel, value]);\n\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (event: PointerEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) {\n setOpen(false);\n setActiveIndex(-1);\n }\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n return () => document.removeEventListener(\"pointerdown\", onPointerDown);\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n window.setTimeout(() => searchRef.current?.focus(), 0);\n }, [open]);\n\n const listQuery = useQuery({\n queryKey: [\"oon\", \"reference-options\", refModel, basePath, debouncedSearch],\n queryFn: () => resource.list({ pageIndex: 0, pageSize: 30, searchTerm: debouncedSearch || undefined }),\n enabled: !!schema && open,\n staleTime: 30_000,\n });\n\n const currentQuery = useQuery({\n queryKey: [\"oon\", \"reference-current\", refModel, basePath, value],\n queryFn: () => resource.get(value),\n enabled: !!schema && !!value && !selectedLabel,\n staleTime: 5 * 60_000,\n });\n\n useEffect(() => {\n if (!currentQuery.data) return;\n setSelectedLabel(referenceOptionLabel(currentQuery.data, schema?.searchable));\n }, [currentQuery.data, schema?.searchable]);\n\n const items = listQuery.data?.results ?? [];\n const listId = `oon-reference-${field}`;\n const resolvedInputId = inputId ?? `oon-reference-input-${field}`;\n const activeOptionId = activeIndex >= 0 ? `${listId}-option-${activeIndex}` : undefined;\n\n const openList = (seed = \"\") => {\n if (seed) setSearch(seed);\n setOpen(true);\n setActiveIndex((current) => (current >= 0 ? current : 0));\n };\n\n const closeList = () => {\n setOpen(false);\n setActiveIndex(-1);\n };\n\n const choose = (record: Record<string, unknown>) => {\n const id = referenceId(record);\n if (!id) return;\n onChange(id);\n setSelectedLabel(referenceOptionLabel(record, schema?.searchable));\n setSearch(\"\");\n setDebouncedSearch(\"\");\n closeList();\n };\n\n const clear = (event: React.MouseEvent | React.KeyboardEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onChange(\"\");\n setSelectedLabel(\"\");\n setSearch(\"\");\n setDebouncedSearch(\"\");\n };\n\n const moveActive = (direction: 1 | -1) => {\n if (!items.length) return;\n setActiveIndex((current) => {\n const start = current < 0 ? (direction === 1 ? -1 : 0) : current;\n const next = (start + direction + items.length) % items.length;\n window.setTimeout(() => optionRefs.current[next]?.scrollIntoView({ block: \"nearest\" }), 0);\n return next;\n });\n };\n\n return (\n <Box ref={rootRef} position=\"relative\">\n <Button\n id={resolvedInputId}\n type=\"button\"\n variant=\"outline\"\n w=\"100%\"\n minH=\"37px\"\n h=\"auto\"\n px=\"10px\"\n py=\"8px\"\n justifyContent=\"space-between\"\n gap={2}\n color=\"#475467\"\n bg=\"white\"\n borderColor={invalid ? \"#DC2626\" : \"#D5DDE3\"}\n borderRadius=\"6px\"\n boxShadow={invalid ? \"0 0 0 3px rgba(220,38,38,.08)\" : undefined}\n fontSize=\"11px\"\n fontWeight=\"400\"\n textAlign=\"left\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={listId}\n aria-activedescendant={open ? activeOptionId : undefined}\n aria-required={required}\n aria-invalid={invalid || undefined}\n aria-describedby={error ? errorId : undefined}\n onClick={() => (open ? closeList() : openList())}\n onKeyDown={(event) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n if (!open) openList();\n else moveActive(1);\n return;\n }\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!open) openList();\n else moveActive(-1);\n return;\n }\n if (event.key === \"Enter\" && open && activeIndex >= 0 && items[activeIndex]) {\n event.preventDefault();\n choose(items[activeIndex]);\n return;\n }\n if (event.key === \"Escape\" && open) {\n event.preventDefault();\n event.stopPropagation();\n closeList();\n return;\n }\n if (!event.ctrlKey && !event.metaKey && !event.altKey && event.key.length === 1) {\n event.preventDefault();\n openList(event.key);\n }\n }}\n _hover={{ bg: \"white\", borderColor: \"#B9C7D1\" }}\n _focusVisible={{ borderColor: invalid ? \"#DC2626\" : \"#0F8DD0\", boxShadow: invalid ? \"0 0 0 3px rgba(220,38,38,.08)\" : \"0 0 0 3px rgba(15,141,208,.10)\" }}\n >\n <Text as=\"span\" minW={0} flex=\"1\" overflow=\"hidden\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\" color={selectedLabel || value ? \"#475467\" : \"#98A2B3\"}>\n {selectedLabel || (value ? String(value) : \"Selecione ou digite para pesquisar...\")}\n </Text>\n <Flex as=\"span\" align=\"center\" gap={1} flex=\"0 0 auto\" color=\"#98A2B3\">\n {value ? (\n <Box\n as=\"span\"\n role=\"button\"\n tabIndex={0}\n aria-label={`Limpar ${label}`}\n w=\"20px\"\n h=\"20px\"\n display=\"grid\"\n placeItems=\"center\"\n borderRadius=\"4px\"\n onClick={clear}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") clear(event);\n }}\n _hover={{ color: \"#B42318\", bg: \"#FFF1F1\" }}\n >\n <ClearIcon />\n </Box>\n ) : null}\n <ChevronIcon open={open} />\n </Flex>\n </Button>\n\n {open ? (\n <Box\n position=\"absolute\"\n zIndex={120}\n top=\"calc(100% + 5px)\"\n left={0}\n right={0}\n overflow=\"hidden\"\n bg=\"white\"\n borderWidth=\"1px\"\n borderColor=\"#D5DDE3\"\n borderRadius=\"8px\"\n boxShadow=\"0 10px 30px rgba(15,23,42,.10)\"\n >\n <Flex h=\"38px\" px=\"10px\" align=\"center\" gap=\"7px\" color=\"#98A2B3\" borderBottomWidth=\"1px\" borderColor=\"#E5E9ED\">\n <SearchIcon />\n <Input\n ref={searchRef}\n value={search}\n onChange={(event) => {\n setSearch(event.target.value);\n setActiveIndex(0);\n }}\n placeholder=\"Digite para filtrar...\"\n h=\"100%\"\n p={0}\n color=\"#475467\"\n bg=\"transparent\"\n border={0}\n borderRadius={0}\n fontSize=\"11px\"\n _focusVisible={{ boxShadow: \"none\", outline: \"none\" }}\n onKeyDown={(event) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n moveActive(1);\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n moveActive(-1);\n } else if (event.key === \"Enter\" && activeIndex >= 0 && items[activeIndex]) {\n event.preventDefault();\n choose(items[activeIndex]);\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n closeList();\n }\n }}\n />\n </Flex>\n\n <Stack id={listId} role=\"listbox\" gap={0} maxH=\"230px\" p=\"5px\" overflowY=\"auto\">\n {schemaQuery.isLoading || listQuery.isLoading ? (\n <Flex minH=\"54px\" align=\"center\" justify=\"center\" gap={2} color=\"#98A2B3\" fontSize=\"10px\"><Spinner size=\"xs\" /> Carregando...</Flex>\n ) : schemaQuery.isError || listQuery.isError ? (\n <Text py=\"18px\" px=\"10px\" color=\"#B42318\" fontSize=\"10px\" textAlign=\"center\">Não foi possível carregar as opções.</Text>\n ) : items.length === 0 ? (\n <Text py=\"18px\" px=\"10px\" color=\"#98A2B3\" fontSize=\"10px\" textAlign=\"center\">Nenhum registro encontrado.</Text>\n ) : (\n items.map((record, index) => {\n const id = referenceId(record);\n if (!id) return null;\n const selected = String(id) === String(value);\n const active = index === activeIndex;\n const optionLabel = referenceOptionLabel(record, schema?.searchable);\n const status = record.status;\n return (\n <Button\n id={`${listId}-option-${index}`}\n ref={(element) => { optionRefs.current[index] = element; }}\n key={id}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n w=\"100%\"\n minH=\"38px\"\n h=\"auto\"\n px=\"9px\"\n py=\"7px\"\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"flex-start\"\n gap={0}\n color={active || selected ? \"#014364\" : \"#475467\"}\n bg={active || selected ? \"#F0F7FF\" : \"transparent\"}\n border={0}\n borderRadius=\"5px\"\n fontWeight=\"400\"\n textAlign=\"left\"\n onMouseEnter={() => setActiveIndex(index)}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => choose(record)}\n _hover={{ color: \"#014364\", bg: \"#F0F7FF\" }}\n >\n <Text as=\"strong\" fontSize=\"10px\" fontWeight=\"600\">{optionLabel}</Text>\n {status ? <Text as=\"small\" color=\"#98A2B3\" fontSize=\"9px\" textTransform=\"capitalize\">{String(status).replace(/_/g, \" \")}</Text> : null}\n </Button>\n );\n })\n )}\n </Stack>\n </Box>\n ) : null}\n </Box>\n );\n}\n","const COMMON_LABEL_FIELDS = [\n \"nome\",\n \"razaoSocial\",\n \"razao_social\",\n \"descricao\",\n \"numero\",\n \"codigoIndividual\",\n \"codigo_individual\",\n \"codigo\",\n \"label\",\n \"email\",\n];\n\nfunction primitiveText(value: unknown): string | null {\n if (value == null || value === \"\") return null;\n if (typeof value === \"string\" || typeof value === \"number\") return String(value);\n return null;\n}\n\n/**\n * Resolve um rótulo humano para qualquer registro relacionado. Prioriza campos\n * conhecidos e depois os campos pesquisáveis expostos pela metadata.\n */\nexport function referenceOptionLabel(\n row: Record<string, unknown>,\n searchableFields: string[] = []\n): string {\n const ordered = [...COMMON_LABEL_FIELDS, ...searchableFields];\n const seenFields = new Set<string>();\n const seenValues = new Set<string>();\n const values: string[] = [];\n\n for (const field of ordered) {\n if (seenFields.has(field)) continue;\n seenFields.add(field);\n const text = primitiveText(row[field]);\n if (!text || seenValues.has(text)) continue;\n seenValues.add(text);\n values.push(text);\n if (values.length === 2) break;\n }\n\n if (values.length) return values.join(\" — \");\n return primitiveText(row._id) ?? primitiveText(row.id) ?? \"Registro sem identificação\";\n}\n\nexport function initialReferenceLabel(value: unknown): string {\n if (!value || typeof value !== \"object\") return \"\";\n return referenceOptionLabel(value as Record<string, unknown>);\n}\n\nexport function referenceId(row: Record<string, unknown>): string {\n return String(row._id ?? row.id ?? \"\");\n}\n","import type { OonColumnDef, OonFormFieldDef } from \"../types\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { CoreCollection } from \"./CoreCollection\";\n\nexport interface CoreDocumentProps {\n model: string;\n label?: string;\n endpoint?: string;\n columns?: OonColumnDef[];\n form?: OonFormFieldDef[];\n /** liga ações de aprovar/reprovar (RESTful: /:id/actions/approve|reject). */\n approval?: boolean;\n /** liga gestão de anexos (futuro: /:id/files). */\n attachments?: boolean;\n}\n\n/**\n * Tipo documental. Hoje reusa a coleção genérica (list + CRUD). Quando\n * `approval` está ligado, expõe o helper `approveDocument` para as ações\n * RESTful do back (Seção 5.2) — documentos fiscais e cadastrais viram\n * configuração, não páginas escritas à mão.\n */\nexport function CoreDocument({ model, label, endpoint, columns, form }: CoreDocumentProps) {\n return (\n <CoreCollection\n model={model}\n label={label}\n mode={columns && form ? \"full\" : \"dynamic\"}\n endpoint={endpoint}\n columns={columns}\n form={form}\n />\n );\n}\n\n/**\n * Aciona uma ação RESTful de documento (approve/reject/archive). Exposto para\n * o domínio usar em botões de linha sem reimplementar a chamada.\n */\nexport function useDocumentAction(basePath: string) {\n const { http } = useOonApi();\n return (id: string, action: \"approve\" | \"reject\" | \"archive\") =>\n http.post(`${basePath}/${id}/actions/${action}`, {}, { headers: { \"x-oon-origin\": \"form\" } });\n}\n","import { useState } from \"react\";\nimport { Badge, Box, Button, Flex, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useModelSchema, useOonResource } from \"../api/ApiProvider\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\nimport { ErrorState } from \"../shell/ErrorState\";\nimport { DynamicForm } from \"./internal/DynamicForm\";\nimport { fieldLabel, formatCell, formFieldsFromMeta } from \"./internal/fieldUtils\";\n\nexport interface CorePipelineProps {\n model: string;\n label?: string;\n endpoint?: string;\n stageField?: string;\n stages?: Array<{ id: string; label: string }>;\n titleField?: string;\n}\n\nfunction ticketId(row: Record<string, unknown>): string | undefined {\n const id = row._id ?? row.id;\n return id == null ? undefined : String(id);\n}\n\n/** Esteira horizontal padrão, com tickets clicáveis e formulário completo em modal. */\nexport function CorePipeline({ model, label, endpoint, stageField = \"status\", stages, titleField }: CorePipelineProps) {\n const schemaQuery = useModelSchema(model);\n const schema = schemaQuery.data;\n const basePath = endpoint ?? schema?.basePath ?? `/${model.toLowerCase()}s`;\n const resource = useOonResource(basePath);\n const queryClient = useQueryClient();\n const [selectedTicket, setSelectedTicket] = useState<Record<string, unknown> | null>(null);\n const [formError, setFormError] = useState<unknown>(null);\n\n const listQuery = useQuery({\n queryKey: [\"oon\", \"pipeline\", basePath],\n queryFn: () => resource.list({ pageSize: 200 }),\n enabled: !!schema,\n });\n\n const saveMutation = useMutation({\n mutationFn: (values: Record<string, unknown>) => {\n const id = selectedTicket ? ticketId(selectedTicket) : undefined;\n if (!id) throw new Error(\"Não foi possível identificar o ticket selecionado.\");\n return resource.update(id, values);\n },\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey: [\"oon\", \"pipeline\", basePath] });\n setSelectedTicket(null);\n setFormError(null);\n },\n onError: (error) => setFormError(error),\n });\n\n if (schemaQuery.isLoading || listQuery.isLoading) return <LoadingScreen />;\n if (schemaQuery.isError) return <ErrorState error={schemaQuery.error} />;\n if (listQuery.isError) return <ErrorState error={listQuery.error} />;\n\n const stageFieldMeta = schema?.fields.find((field) => field.name === stageField);\n const resolvedStages = stages ?? (stageFieldMeta?.options ?? []).map((option) => ({ id: option, label: option }));\n const title = titleField ?? schema?.fields.find((field) => field.kind === \"string\")?.name ?? schema?.searchable[0] ?? \"_id\";\n const detailFields = (schema?.fields ?? [])\n .filter((field) => field.name !== stageField && field.name !== title && ![\"raw\"].includes(field.kind))\n .slice(0, 3);\n const formFields = formFieldsFromMeta(schema?.fields ?? []);\n\n const rows = listQuery.data?.results ?? [];\n const byStage = new Map<string, Record<string, unknown>[]>();\n for (const stage of resolvedStages) byStage.set(stage.id, []);\n for (const row of rows) {\n const key = String(row[stageField] ?? \"\");\n if (!byStage.has(key)) byStage.set(key, []);\n byStage.get(key)!.push(row);\n }\n\n return (\n <Stack gap={5}>\n <Box>\n <Text fontSize=\"11px\" fontWeight=\"700\" color=\"brand.500\" textTransform=\"uppercase\" letterSpacing=\"0.08em\" mb={1}>\n Esteira de processo\n </Text>\n <Heading size=\"lg\" color=\"#24323A\" letterSpacing=\"-0.02em\">\n {label ?? schema?.name ?? model}\n </Heading>\n <Text mt={1} fontSize=\"13px\" color=\"gray.500\">\n Acompanhe os tickets por etapa e visualize os principais dados de cada item.\n </Text>\n </Box>\n\n <Flex gap={4} align=\"stretch\" overflowX=\"auto\" pb={3} minH=\"420px\">\n {Array.from(byStage.entries()).map(([stageId, items]) => {\n const stageLabel = resolvedStages.find((stage) => stage.id === stageId)?.label ?? (stageId || \"Sem etapa\");\n return (\n <Box\n key={stageId}\n minW=\"300px\"\n maxW=\"340px\"\n flex=\"1 0 300px\"\n bg=\"#E8ECEF\"\n borderRadius=\"12px\"\n p={3}\n borderWidth=\"1px\"\n borderColor=\"#DDE3E7\"\n >\n <Flex align=\"center\" justify=\"space-between\" mb={3} px={1}>\n <Text fontWeight=\"700\" fontSize=\"12px\" color=\"#33434C\" textTransform=\"uppercase\" letterSpacing=\"0.03em\">\n {stageLabel}\n </Text>\n <Badge colorPalette=\"brand\" variant=\"solid\" borderRadius=\"full\" minW=\"24px\" justifyContent=\"center\">\n {items.length}\n </Badge>\n </Flex>\n\n <Stack gap={2}>\n {items.length === 0 ? (\n <Box borderWidth=\"1px\" borderStyle=\"dashed\" borderColor=\"#C8D0D5\" borderRadius=\"10px\" p={5} textAlign=\"center\">\n <Text fontSize=\"12px\" color=\"gray.500\">Nenhum ticket nesta etapa.</Text>\n </Box>\n ) : (\n items.map((row, index) => {\n const ticketTitle = formatCell(row[title], \"string\");\n return (\n <Button\n key={ticketId(row) ?? index}\n type=\"button\"\n variant=\"plain\"\n display=\"block\"\n w=\"100%\"\n h=\"auto\"\n minH=\"auto\"\n p={3}\n bg=\"white\"\n borderRadius=\"10px\"\n borderWidth=\"1px\"\n borderColor=\"#DDE3E7\"\n boxShadow=\"0 3px 10px rgba(7, 38, 46, 0.05)\"\n textAlign=\"left\"\n whiteSpace=\"normal\"\n transition=\"all 0.15s ease\"\n aria-label={`Abrir ticket ${ticketTitle}`}\n onClick={() => {\n setFormError(null);\n setSelectedTicket(row);\n }}\n _hover={{ borderColor: \"brand.300\", transform: \"translateY(-1px)\", boxShadow: \"0 7px 18px rgba(7, 38, 46, 0.09)\" }}\n _focusVisible={{ borderColor: \"brand.500\", boxShadow: \"0 0 0 3px rgba(4, 116, 175, 0.16)\" }}\n >\n <Text fontSize=\"13px\" fontWeight=\"700\" color=\"#24323A\" mb={2} lineClamp={2}>\n {ticketTitle}\n </Text>\n <Stack gap={1}>\n {detailFields.map((field) => (\n <Flex key={field.name} gap={2} align=\"baseline\" justify=\"space-between\">\n <Text fontSize=\"10px\" color=\"gray.500\" textTransform=\"uppercase\" letterSpacing=\"0.03em\">\n {fieldLabel(field)}\n </Text>\n <Text fontSize=\"11px\" color=\"#46545C\" fontWeight=\"500\" textAlign=\"right\" lineClamp={1}>\n {formatCell(row[field.name], field.kind)}\n </Text>\n </Flex>\n ))}\n </Stack>\n </Button>\n );\n })\n )}\n </Stack>\n </Box>\n );\n })}\n </Flex>\n\n {selectedTicket ? (\n <DynamicForm\n title={`Editar ${schema?.singular ?? label ?? model}`}\n eyebrow=\"Ticket\"\n fields={formFields}\n initialValues={selectedTicket}\n submitting={saveMutation.isPending}\n error={formError}\n onSubmit={(values) => {\n setFormError(null);\n saveMutation.mutate(values);\n }}\n onFieldChange={() => setFormError(null)}\n onCancel={() => {\n if (saveMutation.isPending) return;\n setSelectedTicket(null);\n setFormError(null);\n }}\n />\n ) : null}\n </Stack>\n );\n}\n","import { Box, Heading, SimpleGrid, Stack, Text } from \"@chakra-ui/react\";\nimport { useQueries } from \"@tanstack/react-query\";\nimport type { DashboardWidgetDef } from \"../types\";\nimport { useOonApi } from \"../api/ApiProvider\";\n\nexport interface CoreDashboardProps {\n label?: string;\n widgets?: DashboardWidgetDef[];\n}\n\n/**\n * Dashboard do Core: renderiza widgets registrados (count/sum por model ou\n * render custom). Cache, loading e erro ficam no Core; a Central só declara.\n */\nexport function CoreDashboard({ label = \"Dashboard\", widgets = [] }: CoreDashboardProps) {\n const { resource } = useOonApi();\n\n const queries = useQueries({\n queries: widgets\n .filter((w) => w.kind !== \"custom\" && w.model)\n .map((w) => ({\n queryKey: [\"oon\", \"widget\", w.id],\n queryFn: async () => {\n const r = await resource(`/${w.model!.toLowerCase()}s`).list({ pageSize: w.kind === \"sum\" ? 200 : 1 });\n if (w.kind === \"sum\" && w.field) {\n return r.results.reduce((acc, row) => acc + Number((row as Record<string, unknown>)[w.field!] ?? 0), 0);\n }\n return r.pagination.totalItems;\n },\n staleTime: 60 * 1000,\n })),\n });\n\n let queryIdx = 0;\n\n return (\n <Stack gap={6}>\n <Heading size=\"lg\">{label}</Heading>\n <SimpleGrid columns={{ base: 1, md: 2, lg: 3 }} gap={4}>\n {widgets.map((w) => {\n if (w.kind === \"custom\" && w.render) {\n return (\n <Box key={w.id} borderWidth=\"1px\" borderColor=\"gray.200\" borderRadius=\"md\" bg=\"white\" p={5}>\n {w.render()}\n </Box>\n );\n }\n const q = queries[queryIdx++];\n const value = q?.isLoading ? \"…\" : q?.isError ? \"—\" : formatWidget(q?.data, w.kind, w.field);\n return (\n <Box key={w.id} borderWidth=\"1px\" borderColor=\"gray.200\" borderRadius=\"md\" bg=\"white\" p={5}>\n <Text fontSize=\"sm\" color=\"gray.500\">\n {w.label}\n </Text>\n <Heading size=\"xl\" mt={1}>\n {value}\n </Heading>\n </Box>\n );\n })}\n </SimpleGrid>\n </Stack>\n );\n}\n\nfunction formatWidget(value: unknown, kind?: string, field?: string): string {\n if (value == null) return \"—\";\n if ((kind === \"sum\" && field?.toLowerCase().includes(\"valor\")) || kind === \"sum\") {\n return new Intl.NumberFormat(\"pt-BR\", { style: \"currency\", currency: \"BRL\" }).format(Number(value));\n }\n return String(value);\n}\n","import { Box, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport type { OonBlockDef, OonComponentRegistry, OonPageDef } from \"../../types\";\nimport { PermissionGate } from \"../../security/PermissionGate\";\nimport { resolveComponent, MissingRenderer } from \"../../app/componentRegistry\";\nimport { CoreDataGrid, CoreCards, CorePage as CorePageShell, CorePageHeader } from \"./CorePrimitives\";\n\nfunction renderMarkdown(content: string) {\n return content.split(/\\n{2,}/).map((paragraph, index) => <Text key={index} whiteSpace=\"pre-wrap\">{paragraph}</Text>);\n}\n\nfunction requiredAccess(source: { permissions?: string[]; capabilities?: string[] }): string[] | undefined {\n const values = [...(source.permissions ?? []), ...(source.capabilities ?? [])].filter(Boolean);\n return values.length ? values : undefined;\n}\n\nexport function CoreBlock({ block, registry }: { block: OonBlockDef; registry?: OonComponentRegistry }) {\n if (block.hidden) return null;\n const content = (() => {\n switch (block.type) {\n case \"custom\": {\n const Component = resolveComponent(registry, block.component, \"pageComponents\");\n return Component ? <Component block={block} {...block.props} /> : <MissingRenderer renderer={block.component} />;\n }\n case \"collection.datagrid\":\n return <CoreDataGrid model={block.model} mode={block.mode} columns={block.columns} form={block.form} label={block.title ?? block.model} />;\n case \"collection.cards\": {\n const Component = resolveComponent(registry, block.renderer, \"cardRenderers\");\n return Component ? <Component block={block} model={block.model} /> : <CoreCards model={block.model} renderer={block.renderer} />;\n }\n case \"section\":\n return <Box><Heading size=\"md\" mb={block.description ? 1 : 4}>{block.title}</Heading>{block.description ? <Text color=\"gray.600\" mb={4}>{block.description}</Text> : null}<Stack gap={4}>{block.blocks?.map((child, index) => <CoreBlock key={child.id ?? index} block={child} registry={registry} />)}</Stack></Box>;\n case \"markdown\":\n return <Stack gap={2}>{renderMarkdown(block.content)}</Stack>;\n default:\n return <MissingRenderer renderer={block.type} />;\n }\n })();\n return <PermissionGate permission={requiredAccess(block)}>{content}</PermissionGate>;\n}\n\nexport function CorePage({ page, registry }: { page: OonPageDef; registry?: OonComponentRegistry }) {\n const Component = resolveComponent(registry, page.component, \"pageComponents\");\n return <PermissionGate permission={requiredAccess(page)}>{Component ? <Component page={page} /> : <CorePageShell><CorePageHeader title={page.title ?? page.label} /><Stack gap={6}>{page.blocks?.map((block, index) => <CoreBlock key={block.id ?? index} block={block} registry={registry} />)}</Stack></CorePageShell>}</PermissionGate>;\n}\n","import type { ReactNode } from \"react\";\nimport { useOonAuth } from \"./AuthProvider\";\n\n/**\n * Esconde a UI quando o usuário não tem a permissão. NÃO é segurança real\n * (Seção 6.2, item 3) — o back é a autoridade. Serve apenas para não exibir\n * ações/menus que o usuário não pode usar.\n */\nexport function PermissionGate({\n permission,\n fallback = null,\n children,\n}: {\n permission?: string | string[];\n fallback?: ReactNode;\n children: ReactNode;\n}) {\n const { hasPermission } = useOonAuth();\n return <>{hasPermission(permission) ? children : fallback}</>;\n}\n","import { Box, Text } from \"@chakra-ui/react\";\nimport type { ComponentType, ReactNode } from \"react\";\nimport type { OonComponentRegistry } from \"../types\";\n\ntype RegistryBucket = keyof OonComponentRegistry;\n\nconst PREFIX_BUCKETS: Record<string, RegistryBucket> = {\n \"custom\": \"pageComponents\",\n \"fields\": \"fieldRenderers\",\n \"cells\": \"cellRenderers\",\n \"cards\": \"cardRenderers\",\n \"actions\": \"actionRenderers\",\n \"menus\": \"menuRenderers\",\n};\n\nexport function registryKey(key: string): string {\n return key.startsWith(\"custom:\") ? key.slice(\"custom:\".length) : key;\n}\n\nexport function resolveComponent<TProps = Record<string, unknown>>(\n registry: OonComponentRegistry | undefined,\n key: string | undefined,\n bucket?: RegistryBucket,\n): ComponentType<TProps> | null {\n if (!key) return null;\n const normalized = registryKey(key);\n const inferred = key.includes(\".\") ? PREFIX_BUCKETS[key.split(\".\")[0]] : undefined;\n const targetBucket = bucket ?? inferred ?? \"pageComponents\";\n return (registry?.[targetBucket]?.[normalized] ?? registry?.[targetBucket]?.[key] ?? null) as ComponentType<TProps> | null;\n}\n\nexport function MissingRenderer({ renderer, children }: { renderer?: string; children?: ReactNode }) {\n if (import.meta.env?.MODE === \"production\") return <>{children ?? null}</>;\n return (\n <Box borderWidth=\"1px\" borderStyle=\"dashed\" borderColor=\"orange.300\" bg=\"orange.50\" color=\"orange.900\" borderRadius=\"md\" p={3}>\n <Text fontSize=\"sm\" fontWeight=\"600\">Renderer não encontrado</Text>\n <Text fontSize=\"xs\">Registre a chave {renderer ? <code>{renderer}</code> : \"solicitada\"} no registry da UI.</Text>\n {children}\n </Box>\n );\n}\n","import { Box, Button, Flex, Heading, Spinner, Text } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport type { CollectionMode, OonColumnDef, OonFormFieldDef } from \"../../types\";\nimport { CoreCollection } from \"../CoreCollection\";\n\nexport function CorePage({ children }: { children: ReactNode }) { return <Box>{children}</Box>; }\nexport function CorePageHeader({ title, description, actions }: { title?: string; description?: string; actions?: ReactNode }) { return <Flex align=\"start\" justify=\"space-between\" gap={4} mb={6}><Box>{title ? <Heading size=\"lg\">{title}</Heading> : null}{description ? <Text color=\"gray.600\" mt={1}>{description}</Text> : null}</Box>{actions}</Flex>; }\nexport function CoreToolbar({ children }: { children?: ReactNode }) { return <Flex align=\"center\" gap={2} mb={4}>{children}</Flex>; }\nexport function CoreDataGrid(props: { model: string; mode?: CollectionMode; columns?: OonColumnDef[]; form?: OonFormFieldDef[]; label?: string }) { return <CoreCollection {...props} />; }\nexport function CoreCards(props: { model: string; renderer?: string }) { return <CoreCollection model={props.model} mode=\"minimal\" label={props.model} />; }\nexport function CoreForm(props: { children?: ReactNode }) { return <Box>{props.children}</Box>; }\nexport function CoreField({ label, children }: { label?: string; children?: ReactNode }) { return <Box><Text fontSize=\"sm\" fontWeight=\"600\">{label}</Text>{children}</Box>; }\nexport function CoreRelationField(props: { children?: ReactNode }) { return <CoreField {...props} />; }\nexport function CoreActions({ children }: { children?: ReactNode }) { return <Flex gap={2}>{children}</Flex>; }\nexport function CoreEmptyState({ title = \"Nenhum dado encontrado\", actionLabel, onAction }: { title?: string; actionLabel?: string; onAction?: () => void }) { return <Box textAlign=\"center\" py={10}><Text>{title}</Text>{actionLabel ? <Button mt={3} onClick={onAction}>{actionLabel}</Button> : null}</Box>; }\nexport function CoreLoadingState({ label = \"Carregando...\" }: { label?: string }) { return <Flex align=\"center\" gap={3}><Spinner size=\"sm\" /><Text>{label}</Text></Flex>; }\n","import type {\n CollectionViewDef,\n DashboardViewDef,\n DocumentViewDef,\n OonCoreFrontConfig,\n OonMenuItem,\n OonRoute,\n OonViewDefinition,\n PipelineViewDef,\n OonPageDef,\n} from \"../types\";\nimport { CoreCollection } from \"../components/CoreCollection\";\nimport { CoreDocument } from \"../components/CoreDocument\";\nimport { CorePipeline } from \"../components/CorePipeline\";\nimport { CoreDashboard } from \"../components/CoreDashboard\";\nimport { CorePage } from \"../components/ui-v2/CorePage\";\n\n/** Resultado da resolução de módulos + manifesto de UI em rotas e menu. */\nexport interface ResolvedRegistry {\n routes: OonRoute[];\n menu: OonMenuItem[];\n}\n\nfunction slug(value: string): string {\n return value\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nfunction requiredAccess(source: { permissions?: string[]; capabilities?: string[] }): string[] | undefined {\n const values = [...(source.permissions ?? []), ...(source.capabilities ?? [])].filter(Boolean);\n return values.length ? values : undefined;\n}\n\nfunction viewId(view: OonViewDefinition): string {\n if (view.id) return view.id;\n if (view.type === \"dashboard\") return \"dashboard\";\n return slug(view.model);\n}\n\nfunction viewPath(view: OonViewDefinition): string {\n if (view.path) return view.path;\n if (view.type === \"dashboard\") return \"/\";\n return `/${viewId(view)}`;\n}\n\nfunction viewLabel(view: OonViewDefinition): string {\n if (view.label) return view.label;\n if (view.type === \"dashboard\") return \"Dashboard\";\n return view.model;\n}\n\n/** Converte uma view declarativa no componente Core correspondente. */\nfunction renderView(view: OonViewDefinition) {\n switch (view.type) {\n case \"collection\": {\n const v = view as CollectionViewDef;\n return (\n <CoreCollection\n model={v.model}\n mode={v.mode}\n columns={v.columns}\n form={v.form}\n label={viewLabel(v)}\n importExport={v.importExport}\n />\n );\n }\n case \"document\": {\n const v = view as DocumentViewDef;\n return <CoreDocument model={v.model} label={viewLabel(v)} approval={v.approval} attachments={v.attachments} />;\n }\n case \"pipeline\": {\n const v = view as PipelineViewDef;\n return (\n <CorePipeline\n model={v.model}\n label={viewLabel(v)}\n stageField={v.stageField}\n stages={v.stages}\n />\n );\n }\n case \"dashboard\": {\n const v = view as DashboardViewDef;\n return <CoreDashboard label={viewLabel(v)} widgets={v.widgets} />;\n }\n default:\n return null;\n }\n}\n\nfunction viewToRoute(view: OonViewDefinition): OonRoute {\n return {\n path: viewPath(view),\n element: renderView(view),\n permissions: requiredAccess(view),\n };\n}\n\nfunction pageToRoute(page: OonPageDef, registry: OonCoreFrontConfig[\"registry\"]): OonRoute {\n return { path: page.path, element: <CorePage page={page} registry={registry} />, permissions: requiredAccess(page) };\n}\n\nfunction pageToMenu(page: OonPageDef): OonMenuItem | null {\n if (page.hidden || !page.label) return null;\n return { label: page.label, href: page.path, icon: page.icon, section: page.section, permissions: requiredAccess(page), capabilities: page.capabilities, order: page.order };\n}\n\nfunction viewToMenu(view: OonViewDefinition): OonMenuItem {\n return {\n label: viewLabel(view),\n href: viewPath(view),\n icon: view.icon,\n section: view.section,\n permissions: requiredAccess(view),\n capabilities: \"capabilities\" in view ? view.capabilities : undefined,\n };\n}\n\n/**\n * Resolve a config inteira (módulos + `ui.views`) em um registry plano de\n * rotas e menu. É o que substitui o `router.jsx` hardcoded por geração\n * dirigida por declaração/metadata.\n */\nexport function resolveRegistry(config: OonCoreFrontConfig): ResolvedRegistry {\n const routes: OonRoute[] = [];\n const menu: OonMenuItem[] = [];\n const seenPaths = new Set<string>();\n\n const pushRoute = (route: OonRoute) => {\n if (seenPaths.has(route.path)) return;\n seenPaths.add(route.path);\n routes.push(route);\n };\n\n for (const mod of config.modules ?? []) {\n for (const route of mod.routes ?? []) pushRoute({ ...route, permissions: requiredAccess(route) });\n for (const item of mod.menu ?? []) menu.push({ ...item, permissions: requiredAccess(item) });\n for (const view of mod.views ?? []) {\n pushRoute(viewToRoute(view));\n menu.push(viewToMenu(view));\n }\n }\n\n const navMode = config.ui?.navigation?.mode ?? \"auto\";\n const includeAuto = navMode === \"auto\" || navMode === \"mixed\";\n const includeManual = navMode === \"manual\" || navMode === \"mixed\";\n\n if (includeAuto) {\n for (const view of config.ui?.views ?? []) {\n pushRoute(viewToRoute(view));\n menu.push(viewToMenu(view));\n }\n for (const page of config.ui?.pages ?? []) {\n pushRoute(pageToRoute(page, config.registry ?? config.ui?.registry));\n const item = pageToMenu(page);\n if (item) menu.push(item);\n }\n }\n\n if (includeManual) {\n for (const item of config.ui?.navigation?.items ?? []) menu.push({ ...item, permissions: requiredAccess(item) });\n }\n\n menu.sort((a, b) => (a.order ?? 100) - (b.order ?? 100));\n 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} from \"../types\";\nimport { AuthenticatedLayout } from \"../shell/AuthenticatedLayout\";\nimport { AccessDeniedPage } from \"../security/AccessDeniedPage\";\nimport { AppAccessGuard } from \"../security/AppAccessGuard\";\nimport { LoginPage } from \"../security/LoginPage\";\nimport {\n ActivationPage,\n InstanceBlockedPage,\n} from \"../security/ActivationPage\";\nimport { RouteGuard } from \"../security/RouteGuard\";\nimport { ActivationGuard } from \"../security/ActivationGuard\";\n\nexport interface RouterInput {\n app: OonAppConfig;\n menu: OonMenuItem[];\n routes: OonRoute[];\n security?: OonSecurityConfig;\n layout?: OonLayoutConfig;\n registry?: OonComponentRegistry;\n}\n\n/** Constrói o router, incluindo os estados públicos de autenticação. */\nexport function createOonRouter({ app, menu, routes, security, layout, registry }: 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: route.element }));\n\n const privateSource = routes.filter((route) => !route.public);\n const privateRoutes: RouteObject[] = privateSource.map((route) => {\n const element = guardEnabled ? (\n <RouteGuard permission={route.permissions}>{route.element}</RouteGuard>\n ) : (\n route.element\n );\n\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({\n index: true,\n element: <Navigate to={firstRoute.path} replace />,\n });\n }\n\n const customPaths = new Set(publicRoutes.map((route) => route.path));\n const builtInPublicRoutes: RouteObject[] = [];\n\n if (!customPaths.has(\"/login\")) {\n builtInPublicRoutes.push({\n path: \"/login\",\n element: (\n <ActivationGuard>\n <LoginPage app={app} />\n </ActivationGuard>\n ),\n });\n }\n\n if (!customPaths.has(\"/ativacao\")) {\n builtInPublicRoutes.push({\n path: \"/ativacao\",\n element: <ActivationPage />,\n });\n }\n\n if (!customPaths.has(\"/instancia-suspensa\")) {\n builtInPublicRoutes.push({\n path: \"/instancia-suspensa\",\n element: (\n <InstanceBlockedPage\n title=\"Instância suspensa\"\n message=\"Esta Central está suspensa.\"\n />\n ),\n });\n }\n\n if (!customPaths.has(\"/instancia-revogada\")) {\n builtInPublicRoutes.push({\n path: \"/instancia-revogada\",\n element: (\n <InstanceBlockedPage\n title=\"Instância revogada\"\n message=\"Esta Central foi revogada.\"\n />\n ),\n });\n }\n\n if (!customPaths.has(\"/acesso-negado\")) {\n builtInPublicRoutes.push({\n path: \"/acesso-negado\",\n element: <AccessDeniedPage app={app} />,\n });\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, Flex, Spacer, Text } from \"@chakra-ui/react\";\nimport { Outlet } from \"react-router-dom\";\nimport type { OonAppConfig, OonComponentRegistry, OonLayoutConfig, OonMenuItem } from \"../types\";\nimport { useOonAuth } from \"../security/AuthProvider\";\nimport { Sidebar } from \"./Sidebar\";\nimport { resolveComponent, MissingRenderer } from \"../app/componentRegistry\";\n\nfunction CoreTopbar({ app }: { app: OonAppConfig }) {\n const { user, logout } = useOonAuth();\n return <Flex as=\"header\" align=\"center\" minH=\"64px\" px={{ base: 4, lg: 6 }} py={3} borderBottomWidth=\"1px\" borderColor=\"#E8ECEF\" bg=\"rgba(255, 255, 255, 0.96)\" backdropFilter=\"blur(10px)\" position=\"sticky\" top={0} zIndex={10}><Box><Text fontSize=\"xs\" fontWeight=\"600\" color=\"brand.500\" textTransform=\"uppercase\" letterSpacing=\"0.08em\">Central Oon</Text><Text fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">{app.title ?? app.name}</Text></Box><Spacer />{user ? <Flex align=\"center\" gap={3}><Box textAlign=\"right\" display={{ base: \"none\", md: \"block\" }}><Text fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">{user.nome}</Text>{user.email ? <Text fontSize=\"xs\" color=\"gray.500\">{user.email}</Text> : null}</Box><Button size=\"sm\" variant=\"outline\" colorPalette=\"brand\" borderRadius=\"8px\" onClick={logout}>Sair</Button></Flex> : null}</Flex>;\n}\n\nfunction Slot({ name, slot, registry, app, menu }: { name: \"sidebar\" | \"topbar\" | \"header\" | \"footer\"; slot?: string; registry?: OonComponentRegistry; app: OonAppConfig; menu: OonMenuItem[] }) {\n if (slot === \"none\") return null;\n if (slot?.startsWith(\"custom:\")) { const C = resolveComponent(registry, slot, \"layoutSlots\"); return C ? <C app={app} menu={menu} /> : <MissingRenderer renderer={slot} />; }\n if (name === \"sidebar\") return <Sidebar app={app} menu={menu} registry={registry} />;\n if (name === \"topbar\") return <CoreTopbar app={app} />;\n if (name === \"footer\" && slot === \"core\") return <Box as=\"footer\" px={6} py={4} color=\"gray.500\" fontSize=\"xs\" borderTopWidth=\"1px\">OonCore</Box>;\n return null;\n}\n\nexport function DefaultShell({ app, menu, layout, registry }: { app: OonAppConfig; menu: OonMenuItem[]; layout?: OonLayoutConfig; registry?: OonComponentRegistry }) {\n const portal = layout?.shell === \"portal\" || layout?.shell === \"content-only\";\n const mainPadding = portal ? { base: 4, lg: 10 } : { base: 4, lg: 6 };\n return <Flex align=\"stretch\" minH=\"100vh\" bg={portal ? \"white\" : \"#F8F9FA\"}><Slot name=\"sidebar\" slot={layout?.sidebar ?? \"core\"} registry={registry} app={app} menu={menu} /><Flex direction=\"column\" flex=\"1\" minW={0}><Slot name=\"topbar\" slot={layout?.topbar ?? \"core\"} registry={registry} app={app} menu={menu} /><Slot name=\"header\" slot={layout?.header} registry={registry} app={app} menu={menu} /><Box as=\"main\" flex=\"1\" p={mainPadding} minW={0}><Box maxW={portal ? \"1180px\" : \"1680px\"} mx=\"auto\"><Outlet /></Box></Box><Slot name=\"footer\" slot={layout?.footer ?? \"none\"} registry={registry} app={app} menu={menu} /></Flex></Flex>;\n}\n\nexport function PortalShell(props: { app: OonAppConfig; menu: OonMenuItem[]; layout?: OonLayoutConfig; registry?: OonComponentRegistry }) { return <DefaultShell {...props} layout={{ ...props.layout, shell: \"portal\" }} />; }\n","import { Box, Flex, Image, Stack, Text } from \"@chakra-ui/react\";\nimport { NavLink } from \"react-router-dom\";\nimport type { OonAppConfig, OonComponentRegistry, OonMenuItem } from \"../types\";\nimport { resolveComponent } from \"../app/componentRegistry\";\nimport { useOonAuth } from \"../security/AuthProvider\";\n\nfunction groupBySection(items: OonMenuItem[]): Array<[string, OonMenuItem[]]> {\n const groups = new Map<string, OonMenuItem[]>();\n for (const item of items) {\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\n/** Menu lateral compacto e agrupado, seguindo o padrão operacional Minexco. */\nexport function Sidebar({ app, menu, registry }: { app: OonAppConfig; menu: OonMenuItem[]; registry?: OonComponentRegistry }) {\n const { hasPermission } = useOonAuth();\n const visible = menu.filter((item) => !item.hidden && hasPermission(item.permissions));\n\n return (\n <Box\n as=\"nav\"\n w={{ base: \"76px\", lg: \"248px\" }}\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 display={{ base: \"none\", lg: \"block\" }} 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 <Stack gap={5}>\n {groupBySection(visible).map(([section, items]) => (\n <Stack key={section} gap={1}>\n <Text\n display={{ base: \"none\", lg: \"block\" }}\n fontSize=\"10px\"\n fontWeight=\"600\"\n color=\"gray.400\"\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 return (\n <NavLink key={item.href} to={item.href} end={item.href === \"/\"} title={item.label}>\n {({ isActive }) => (\n <Flex\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={isActive ? \"600\" : \"500\"}\n bg={isActive ? \"brand.50\" : \"transparent\"}\n color={isActive ? \"brand.700\" : \"#46545C\"}\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 >\n {item.icon ? <Box flex=\"0 0 auto\">{item.icon}</Box> : <Box w=\"7px\" h=\"7px\" borderRadius=\"full\" bg={isActive ? \"brand.500\" : \"gray.300\"} />}\n <Text display={{ base: \"none\", lg: \"block\" }} lineClamp={1}>\n {item.label}\n </Text>\n </Flex>\n )}\n </NavLink>\n );\n })}\n </Stack>\n ))}\n </Stack>\n </Box>\n );\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\n/**\n * Guarda a aplicação inteira depois que o backend valida token e permissão do\n * app. 401 segue para login; 403 segue para a página de acesso negado.\n */\nexport function AppAccessGuard({ children }: { children: ReactNode }) {\n const { status, retry } = useOonAuth();\n const location = useLocation();\n\n if (status === \"loading\") return <LoadingScreen />;\n\n if (status === \"unauthenticated\") {\n return (\n <Navigate\n to={loginRedirect(location.pathname, location.search)}\n replace\n />\n );\n }\n\n if (status === \"forbidden\") {\n return <Navigate to=\"/acesso-negado\" replace />;\n }\n\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={() => {\n void retry().catch(() => undefined);\n }}\n />\n );\n }\n\n return <>{children}</>;\n}\n","import { useState, type FormEvent } from \"react\";\nimport {\n Box,\n Button,\n Flex,\n Heading,\n Input,\n Text,\n VStack,\n} from \"@chakra-ui/react\";\nimport { Navigate, useLocation } from \"react-router-dom\";\nimport type { OonAppConfig, OonError } from \"../types\";\nimport { useOonAuth } from \"./AuthProvider\";\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\")) {\n return \"/\";\n }\n return value;\n}\n\n/** Tela de login padrão das Centrais que usam a Central de Ativações. */\nexport function LoginPage({ app }: { app: OonAppConfig }) {\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 redirect = safeRedirect(location.search);\n\n if (status === \"authenticated\") {\n return <Navigate to={redirect} replace />;\n }\n\n if (status === \"forbidden\") {\n return <Navigate to=\"/acesso-negado\" replace />;\n }\n\n async function handleSubmit(event: FormEvent<HTMLFormElement>) {\n event.preventDefault();\n setSubmitting(true);\n setMessage(null);\n\n try {\n await login(email.trim(), password);\n } catch (error) {\n const authError = error as OonError;\n if (authError.status === 403) return;\n setMessage(\n authError.status === 401\n ? \"E-mail ou senha inválidos.\"\n : authError.message || \"Não foi possível entrar. Tente novamente.\",\n );\n } finally {\n setSubmitting(false);\n }\n }\n\n return (\n <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box\n width=\"100%\"\n maxW=\"440px\"\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: 9 }}\n >\n <form onSubmit={handleSubmit}>\n <VStack align=\"stretch\" gap={6}>\n <Box>\n <Text\n color=\"#39BFED\"\n fontSize=\"xs\"\n fontWeight=\"700\"\n letterSpacing=\"0.12em\"\n textTransform=\"uppercase\"\n >\n Central Oon\n </Text>\n <Heading mt={2} size=\"lg\" color=\"#07262E\">\n {app.title ?? app.name}\n </Heading>\n <Text mt={2} color=\"gray.600\" fontSize=\"sm\">\n Entre com seu usuário autorizado para acessar este aplicativo.\n </Text>\n </Box>\n\n <VStack align=\"stretch\" gap={4}>\n <Box>\n <Text mb={2} fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">\n E-mail\n </Text>\n <Input\n type=\"email\"\n value={email}\n onChange={(event) => setEmail(event.target.value)}\n autoComplete=\"email\"\n placeholder=\"voce@empresa.com.br\"\n required\n />\n </Box>\n\n <Box>\n <Text mb={2} fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">\n Senha\n </Text>\n <Input\n type=\"password\"\n value={password}\n onChange={(event) => setPassword(event.target.value)}\n autoComplete=\"current-password\"\n placeholder=\"Sua senha\"\n required\n />\n </Box>\n </VStack>\n\n {message ? (\n <Box\n role=\"alert\"\n borderRadius=\"10px\"\n bg=\"red.50\"\n color=\"red.700\"\n px={4}\n py={3}\n fontSize=\"sm\"\n >\n {message}\n </Box>\n ) : null}\n\n <Button\n type=\"submit\"\n bg=\"#07262E\"\n color=\"white\"\n _hover={{ bg: \"#0B3843\" }}\n disabled={submitting || !email.trim() || !password}\n >\n {submitting ? \"Validando acesso...\" : \"Entrar\"}\n </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 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 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, tenant, aplicativo, licença e permissões foram\n preparados. 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, aplicativo e\n licença antes de consumir o código.\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 a instância será\n registrada no 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","import type {\n CollectionMode,\n CollectionViewDef,\n DocumentViewDef,\n OonAuthConfig,\n OonCoreFrontConfig,\n OonViewDefinition,\n OonLayoutConfig,\n OonNavigationConfig,\n OonPageDef,\n OonComponentRegistry,\n OonAppKind,\n PipelineViewDef,\n} from \"./types\";\nimport { start } from \"./start\";\n\n/**\n * Schema do `central.ui.json` (Seção 9 do escopo). É o que o frontend\n * consumidor gerado pelo `create-central-oon` carrega — declaração pura, sem\n * código de UI. O Core converte isto em `OonCoreFrontConfig`.\n */\nexport interface CentralUiManifest {\n name: string;\n slug: string;\n backend?: { metadataUrl?: string };\n schemaVersion?: 1 | 2;\n /** Perfil arquitetural: root-central, member-central ou portal-cockpit. */\n appKind?: OonAppKind;\n /** Configuração declarativa de autenticação. Segredos nunca entram aqui. */\n auth?: Pick<OonAuthConfig, \"mode\" | \"loginUrl\" | \"tokenParam\">;\n layout?: OonLayoutConfig;\n registry?: OonComponentRegistry;\n navigation?: OonNavigationConfig;\n pages?: OonPageDef[];\n collections?: Array<{\n model: string;\n mode?: CollectionMode;\n path?: string;\n label?: string;\n section?: string;\n }>;\n pipelines?: Array<{\n name?: string;\n model?: string;\n mode?: string;\n stageField?: string;\n path?: string;\n label?: string;\n section?: string;\n }>;\n documents?: Array<{\n model: string;\n mode?: string;\n path?: string;\n label?: string;\n section?: string;\n approval?: boolean;\n attachments?: boolean;\n }>;\n}\n\n/** Dados de runtime que o `central.ui.json` não carrega (vêm do .env/código). */\nexport interface ManifestRuntime {\n apiBaseUrl: string;\n meusAppsUrl?: string;\n assistantBaseUrl?: string;\n versionPrefix?: string;\n /** Token local enviado ao backend somente quando o consumidor o configurar. */\n devToken?: string;\n /** Registry de componentes React, registrado em código TypeScript. */\n registry?: OonComponentRegistry;\n /** Atalho para registrar páginas/componentes custom sem reescrever o frontend. */\n customComponents?: OonComponentRegistry[\"pageComponents\"];\n /** Overrides de autenticação vindos do runtime/env. */\n auth?: Partial<OonAuthConfig>;\n /** Override do perfil arquitetural da aplicação. */\n appKind?: OonAppKind;\n}\n\nfunction mergeRegistry(\n manifestRegistry: OonComponentRegistry | undefined,\n runtimeRegistry: OonComponentRegistry | undefined,\n customComponents: OonComponentRegistry[\"pageComponents\"] | undefined,\n): OonComponentRegistry | undefined {\n if (!manifestRegistry && !runtimeRegistry && !customComponents) return undefined;\n return {\n layoutSlots: { ...manifestRegistry?.layoutSlots, ...runtimeRegistry?.layoutSlots },\n fieldRenderers: { ...manifestRegistry?.fieldRenderers, ...runtimeRegistry?.fieldRenderers },\n cellRenderers: { ...manifestRegistry?.cellRenderers, ...runtimeRegistry?.cellRenderers },\n cardRenderers: { ...manifestRegistry?.cardRenderers, ...runtimeRegistry?.cardRenderers },\n actionRenderers: { ...manifestRegistry?.actionRenderers, ...runtimeRegistry?.actionRenderers },\n pageComponents: { ...manifestRegistry?.pageComponents, ...runtimeRegistry?.pageComponents, ...customComponents },\n menuRenderers: { ...manifestRegistry?.menuRenderers, ...runtimeRegistry?.menuRenderers },\n };\n}\n\n/** Converte o manifesto declarativo + runtime em config do Core. */\nexport function manifestToConfig(manifest: CentralUiManifest, runtime: ManifestRuntime): OonCoreFrontConfig {\n const views: OonViewDefinition[] = [];\n\n for (const c of manifest.collections ?? []) {\n const view: CollectionViewDef = {\n type: \"collection\",\n model: c.model,\n mode: c.mode ?? \"dynamic\",\n path: c.path,\n label: c.label,\n section: c.section,\n };\n views.push(view);\n }\n\n for (const p of manifest.pipelines ?? []) {\n const model = p.model ?? p.name;\n if (!model) continue;\n const view: PipelineViewDef = {\n type: \"pipeline\",\n model,\n label: p.label ?? p.name,\n path: p.path,\n stageField: p.stageField,\n section: p.section,\n };\n views.push(view);\n }\n\n for (const d of manifest.documents ?? []) {\n const view: DocumentViewDef = {\n type: \"document\",\n model: d.model,\n label: d.label,\n path: d.path,\n section: d.section,\n approval: d.approval,\n attachments: d.attachments,\n };\n views.push(view);\n }\n\n const registry = mergeRegistry(manifest.registry, runtime.registry, runtime.customComponents);\n const auth: OonAuthConfig = {\n mode: runtime.auth?.mode ?? manifest.auth?.mode ?? \"bearer\",\n loginUrl: runtime.auth?.loginUrl ?? manifest.auth?.loginUrl,\n tokenParam: runtime.auth?.tokenParam ?? manifest.auth?.tokenParam ?? \"code\",\n devToken: runtime.auth?.devToken ?? runtime.devToken,\n };\n\n return {\n app: {\n id: manifest.slug,\n name: manifest.name,\n title: manifest.name,\n kind: runtime.appKind ?? manifest.appKind,\n },\n api: {\n baseUrl: runtime.apiBaseUrl,\n meusAppsUrl: runtime.meusAppsUrl,\n assistantBaseUrl: runtime.assistantBaseUrl,\n versionPrefix: runtime.versionPrefix ?? \"\",\n },\n auth,\n security: {\n enableRouteGuard: true,\n enablePermissionGate: true,\n redactAssistantContext: true,\n disableConsoleInProduction: true,\n },\n layout: manifest.layout,\n registry,\n ui: {\n schemaVersion: manifest.schemaVersion,\n layout: manifest.layout,\n registry,\n navigation: manifest.navigation,\n views,\n pages: manifest.pages,\n },\n };\n}\n\n/**\n * Bootstrap a partir do `central.ui.json`. É a única linha que o `main.tsx` de\n * uma Central gerada precisa:\n *\n * import manifest from \"../central.ui.json\";\n * startFromManifest(manifest, { apiBaseUrl: import.meta.env.VITE_API_URL });\n */\nexport function startFromManifest(manifest: CentralUiManifest, runtime: ManifestRuntime) {\n start(manifestToConfig(manifest, runtime));\n}\n","import type {\n CollectionViewDef,\n DashboardViewDef,\n DocumentViewDef,\n OonModule,\n PipelineViewDef,\n} from \"../types\";\n\n/**\n * Helpers declarativos (API pública da Seção 4.3). São identidades tipadas que\n * fixam o `type` da view — servem para o autocomplete e para registrar a view\n * num módulo ou no `ui.views` da config.\n */\n\nexport function defineCollectionView(def: Omit<CollectionViewDef, \"type\">): CollectionViewDef {\n return { type: \"collection\", ...def };\n}\n\nexport function defineDocumentView(def: Omit<DocumentViewDef, \"type\">): DocumentViewDef {\n return { type: \"document\", ...def };\n}\n\nexport function definePipelineView(def: Omit<PipelineViewDef, \"type\">): PipelineViewDef {\n return { type: \"pipeline\", ...def };\n}\n\nexport function defineDashboard(def: Omit<DashboardViewDef, \"type\">): DashboardViewDef {\n return { type: \"dashboard\", ...def };\n}\n\n/** Açúcar para declarar um módulo com tipagem. */\nexport function defineOonModule(mod: OonModule): OonModule {\n return mod;\n}\n","import { Badge, Box, Button, Flex, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useCoreMetadata, useOonApi } from \"../api/ApiProvider\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\nimport { ErrorState } from \"../shell/ErrorState\";\n\nexport interface CoreIntegrationProps {\n label?: string;\n}\n\ninterface IntegrationEntry {\n id?: string;\n name?: string;\n label?: string;\n status?: string;\n}\n\n/**\n * Painel de integrações: lista o que o back declarou em /core/integrations e\n * permite reprocessar via action RESTful (POST /integrations/actions/process-active).\n */\nexport function CoreIntegration({ label = \"Integrações\" }: CoreIntegrationProps) {\n const { http } = useOonApi();\n const metadata = useCoreMetadata();\n\n const reprocess = useMutation({\n mutationFn: () =>\n http.post(\"/integrations/actions/process-active\", {}, { headers: { \"x-oon-origin\": \"integration\" } }),\n });\n\n if (metadata.isLoading) return <LoadingScreen />;\n if (metadata.isError) return <ErrorState error={metadata.error} />;\n\n const integrations = (metadata.data?.integrations ?? []) as IntegrationEntry[];\n\n return (\n <Stack gap={6}>\n <Flex align=\"center\" justify=\"space-between\">\n <Heading size=\"lg\">{label}</Heading>\n <Button size=\"sm\" variant=\"outline\" loading={reprocess.isPending} onClick={() => reprocess.mutate()}>\n Reprocessar ativos\n </Button>\n </Flex>\n <Stack gap={3}>\n {integrations.length === 0 ? (\n <Text color=\"gray.400\">Nenhuma integração declarada.</Text>\n ) : (\n integrations.map((it, idx) => (\n <Box\n key={it.id ?? it.name ?? idx}\n borderWidth=\"1px\"\n borderColor=\"gray.200\"\n borderRadius=\"md\"\n bg=\"white\"\n p={4}\n >\n <Flex align=\"center\" justify=\"space-between\">\n <Text fontWeight=\"medium\">{it.label ?? it.name ?? \"Integração\"}</Text>\n <Badge colorPalette={it.status === \"erro\" ? \"red\" : it.status === \"ativo\" ? \"green\" : \"gray\"}>\n {it.status ?? \"—\"}\n </Badge>\n </Flex>\n </Box>\n ))\n )}\n </Stack>\n </Stack>\n );\n}\n","import { Button, Flex, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { OonColumnDef } from \"../types\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { CoreCollection } from \"./CoreCollection\";\n\nexport interface CoreCurrencyProps {\n /** model das moedas. Default: \"Moeda\". */\n model?: string;\n label?: string;\n endpoint?: string;\n columns?: OonColumnDef[];\n}\n\n/**\n * Multi-moedas (módulo de domínio, Seção 4.6/2.11). Lista as moedas e expõe a\n * ação RESTful de atualizar cotações (POST /<endpoint>/actions/update-rates).\n */\nexport function CoreCurrency({ model = \"Moeda\", label = \"Multi-moedas\", endpoint = \"/moedas\", columns }: CoreCurrencyProps) {\n const { http } = useOonApi();\n const queryClient = useQueryClient();\n\n const updateRates = useMutation({\n mutationFn: () => http.post(`${endpoint}/actions/update-rates`, {}, { headers: { \"x-oon-origin\": \"integration\" } }),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: [\"oon\", \"list\", endpoint] }),\n });\n\n return (\n <Stack gap={6}>\n <Flex align=\"center\" justify=\"space-between\">\n <Heading size=\"lg\">{label}</Heading>\n <Button size=\"sm\" colorPalette=\"blue\" loading={updateRates.isPending} onClick={() => updateRates.mutate()}>\n Atualizar cotações\n </Button>\n </Flex>\n {updateRates.isError ? (\n <Text fontSize=\"sm\" color=\"red.600\">\n {updateRates.error?.message}\n </Text>\n ) : null}\n <CoreCollection model={model} label=\"\" mode={columns ? \"full\" : \"dynamic\"} endpoint={endpoint} columns={columns} />\n </Stack>\n );\n}\n","import { useState } from \"react\";\nimport { Box, Button, Flex, Heading, Input, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useOonApi } from \"../api/ApiProvider\";\n\nexport interface AssistantMessage {\n role: \"user\" | \"assistant\";\n content: string;\n}\n\nexport interface CoreAssistantProps {\n /** code do assistente registrado no back (ex.: \"servicos-tomados.revisao\"). */\n assistantCode: string;\n label?: string;\n /** entidade de contexto (apenas tipo + id; nada sensível). */\n entity?: { type: string; id: string };\n /** base de assistentes; default usa o mesmo client REST do Core. */\n endpoint?: string;\n}\n\n/**\n * Assistente IA do Core (Seção 2.12 / 6.2). Envia ao back apenas\n * assistantCode + entity + message — NUNCA chave de IA, modelo ou prompt.\n * O back resolve modelo, prompt, chave e políticas.\n */\nexport function CoreAssistant({ assistantCode, label = \"Assistente\", entity, endpoint = \"/assistant-runs\" }: CoreAssistantProps) {\n const { http } = useOonApi();\n const [messages, setMessages] = useState<AssistantMessage[]>([]);\n const [input, setInput] = useState(\"\");\n\n const ask = useMutation({\n mutationFn: async (message: string) => {\n const { data } = await http.post<{ reply?: string; message?: string }>(\n endpoint,\n {\n assistantCode,\n entity,\n message,\n // Contexto redigido: a Central pode enriquecer, mas o Core não envia PII por padrão.\n context: { redactionPolicy: \"default\" },\n },\n { headers: { \"x-oon-origin\": \"assistant\" } }\n );\n return data.reply ?? data.message ?? \"\";\n },\n onSuccess: (reply) => setMessages((prev) => [...prev, { role: \"assistant\", content: reply }]),\n });\n\n const send = () => {\n const text = input.trim();\n if (!text) return;\n setMessages((prev) => [...prev, { role: \"user\", content: text }]);\n setInput(\"\");\n ask.mutate(text);\n };\n\n return (\n <Stack gap={4} maxW=\"560px\">\n <Heading size=\"md\">{label}</Heading>\n <Box borderWidth=\"1px\" borderColor=\"gray.200\" borderRadius=\"md\" bg=\"white\" p={4} minH=\"240px\">\n <Stack gap={3}>\n {messages.length === 0 ? (\n <Text color=\"gray.400\" fontSize=\"sm\">\n Faça uma pergunta ao assistente.\n </Text>\n ) : (\n messages.map((m, idx) => (\n <Flex key={idx} justify={m.role === \"user\" ? \"flex-end\" : \"flex-start\"}>\n <Box\n bg={m.role === \"user\" ? \"brand.500\" : \"gray.100\"}\n color={m.role === \"user\" ? \"white\" : \"gray.800\"}\n px={3}\n py={2}\n borderRadius=\"md\"\n maxW=\"80%\"\n fontSize=\"sm\"\n >\n {m.content}\n </Box>\n </Flex>\n ))\n )}\n {ask.isPending ? (\n <Text color=\"gray.400\" fontSize=\"sm\">\n Pensando…\n </Text>\n ) : null}\n {ask.isError ? (\n <Text color=\"red.600\" fontSize=\"sm\">\n {ask.error?.message}\n </Text>\n ) : null}\n </Stack>\n </Box>\n <Flex gap={2}>\n <Input\n size=\"sm\"\n value={input}\n placeholder=\"Digite sua mensagem...\"\n onChange={(e) => setInput(e.currentTarget.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") send();\n }}\n />\n <Button size=\"sm\" colorPalette=\"blue\" onClick={send} loading={ask.isPending}>\n Enviar\n </Button>\n </Flex>\n </Stack>\n );\n}\n"],"mappings":"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","names":["useMemo","axios","axios","useMemo","createContext","useCallback","useContext","useEffect","useState","createContext","useContext","jsx","jsx","createContext","useState","useCallback","useEffect","value","useContext","jsx","useMemo","useState","Box","Heading","Stack","Text","useState","Box","Button","Flex","Text","useQuery","jsx","Text","jsx","jsxs","jsx","jsxs","useState","useQuery","Box","Flex","Text","Button","useEffect","useState","Box","Button","Flex","Heading","Input","NativeSelect","Stack","Text","useEffect","useMemo","useState","Box","Button","Flex","Input","Spinner","Text","useQuery","jsx","jsxs","SearchIcon","ChevronIcon","useMemo","useState","useEffect","useQuery","start","Box","Button","Text","Flex","Input","Spinner","jsx","jsxs","Text","useState","useEffect","Flex","Box","Heading","Button","Stack","NativeSelect","Input","jsx","jsxs","useState","Stack","Box","Text","Heading","jsx","useState","Badge","Box","Button","Flex","Heading","Stack","Text","useMutation","useQuery","useQueryClient","jsx","jsxs","useQueryClient","useState","useQuery","useMutation","Stack","Box","Text","Heading","Flex","Badge","Button","Box","Heading","SimpleGrid","Stack","Text","jsx","jsxs","Stack","Heading","SimpleGrid","Box","Text","Box","Heading","Stack","Text","jsx","Box","Text","Fragment","jsx","jsxs","Box","Button","Flex","Heading","Spinner","Text","jsx","jsxs","Box","Flex","Heading","Text","Button","Spinner","jsx","jsxs","Text","Box","Heading","Stack","CorePage","jsx","requiredAccess","CorePage","Navigate","Box","Button","Flex","Spacer","Text","Box","Flex","Stack","Text","jsx","jsxs","Box","Flex","Text","Stack","jsx","jsxs","Flex","Box","Text","Spacer","Button","jsx","Box","Button","Flex","Heading","Text","jsx","jsxs","Flex","Box","Text","Heading","Button","Fragment","jsx","useState","Box","Button","Flex","Heading","Input","Text","VStack","Navigate","useLocation","jsx","jsxs","useLocation","useState","Navigate","Flex","Box","VStack","Text","Heading","Input","Button","useEffect","useState","Box","Button","Heading","Input","Text","VStack","Fragment","jsx","jsxs","encodeBasicCredentials","useState","useEffect","Box","Text","Input","Button","VStack","Heading","Fragment","jsx","Navigate","jsx","Navigate","jsx","Navigate","jsx","useMemo","storage","http","router","jsx","Badge","Box","Button","Flex","Heading","Stack","Text","useMutation","jsx","jsxs","useMutation","Stack","Flex","Heading","Button","Text","Box","Badge","Button","Flex","Heading","Stack","Text","useMutation","useQueryClient","jsx","jsxs","useQueryClient","useMutation","Stack","Flex","Heading","Button","Text","useState","Box","Button","Flex","Heading","Input","Stack","Text","useMutation","jsx","jsxs","useState","useMutation","Stack","Heading","Box","Text","Flex","Input","Button"]}
1
+ {"version":3,"sources":["../src/start.tsx","../src/app/OonApp.tsx","../src/api/createRestClient.ts","../src/api/errorNormalizer.ts","../src/security/tokenStorage.ts","../src/app/OonProviders.tsx","../src/config/queryClient.ts","../src/config/theme.ts","../src/api/ApiProvider.tsx","../src/api/coreClient.ts","../src/api/resourceClient.ts","../src/security/AuthProvider.tsx","../src/security/ActivationProvider.tsx","../src/components/CoreCollection.tsx","../src/components/internal/fieldUtils.ts","../src/components/internal/DataGrid.tsx","../src/shell/LoadingScreen.tsx","../src/shell/ErrorState.tsx","../src/components/internal/DynamicForm.tsx","../src/components/internal/ReferenceSelect.tsx","../src/components/internal/referenceUtils.ts","../src/components/internal/CoreDetailModal.tsx","../src/components/internal/CoreTabbedDetail.tsx","../src/components/internal/CoreSummaryCards.tsx","../src/components/internal/manifestUtils.ts","../src/components/internal/CoreRelatedGrid.tsx","../src/components/internal/CoreInlineEditableCell.tsx","../src/components/internal/CoreRowAction.tsx","../src/components/internal/conditions.ts","../src/components/CoreDocument.tsx","../src/components/CorePipeline.tsx","../src/components/CoreDashboard.tsx","../src/components/ui-v2/CorePage.tsx","../src/security/PermissionGate.tsx","../src/app/componentRegistry.tsx","../src/components/ui-v2/CorePrimitives.tsx","../src/app/moduleRegistry.tsx","../src/app/createOonRouter.tsx","../src/shell/DefaultShell.tsx","../src/shell/Sidebar.tsx","../src/shell/AuthenticatedLayout.tsx","../src/security/AccessDeniedPage.tsx","../src/security/AppAccessGuard.tsx","../src/security/LoginPage.tsx","../src/security/ActivationPage.tsx","../src/security/RouteGuard.tsx","../src/security/ActivationGuard.tsx","../src/manifest.ts","../src/define/views.ts","../src/components/CoreIntegration.tsx","../src/components/CoreCurrency.tsx","../src/components/CoreAssistant.tsx"],"sourcesContent":["import { StrictMode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport type { OonCoreFrontConfig } from \"./types\";\nimport { OonApp } from \"./app/OonApp\";\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 * Ponto de entrada único de uma Central (Seção 3.2). O `main.tsx` da Central\n * só chama isto — não conhece providers, router, auth, layout nem serviços.\n *\n * import { start } from \"@oondemand/oon-core-front\";\n * import { appConfig } from \"./central.ui\";\n * start(appConfig);\n */\nexport function start(config: OonCoreFrontConfig) {\n validateConfig(config);\n applyDocumentMeta(config);\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/** Alias namespaced, compatível com a doc (`oonCoreFront.start`). */\nexport const oonCoreFront = { start };\n","import { useMemo } from \"react\";\nimport { RouterProvider } from \"react-router-dom\";\nimport type { OonCoreFrontConfig } from \"../types\";\nimport { createRestClient } from \"../api/createRestClient\";\nimport { createTokenStorage } from \"../security/tokenStorage\";\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, router } = useMemo(() => {\n const storage = createTokenStorage(config.app.id);\n const externalLoginUrl = config.auth?.loginUrl ?? config.api.meusAppsUrl;\n\n const http = createRestClient({\n api: config.api,\n appId: config.app.id,\n getToken: () => storage.get(),\n onUnauthorized: () => {\n storage.clear();\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 { routes, menu } = resolveRegistry(config);\n const router = createOonRouter({\n app: config.app,\n menu,\n routes,\n security: config.security,\n layout: config.layout ?? config.ui?.layout,\n registry: config.registry ?? config.ui?.registry,\n });\n\n return { http, storage, router };\n }, [config]);\n\n return (\n <OonProviders config={config} http={http} storage={storage}>\n <RouterProvider router={router} />\n </OonProviders>\n );\n}\n","import axios, { type AxiosInstance } from \"axios\";\nimport type { AuditContext, OonApiConfig } from \"../types\";\nimport { normalizeError } from \"./errorNormalizer\";\n\nexport interface RestClientDeps {\n api: OonApiConfig;\n /** Lê o token atual (Bearer). Retorna null se não autenticado. */\n getToken: () => string | null;\n /** Chamado uma vez ao receber 401 (logout + redirect). */\n onUnauthorized?: () => void;\n /** Origem app id, vai no header x-oon-app. */\n appId?: string;\n}\n\n/**\n * Cliente REST único do Core (Seção 2.5). Centraliza:\n * - baseUrl + versionPrefix;\n * - injeção de Bearer token;\n * - headers de auditoria x-oon-* nas mutações;\n * - tratamento global de 401 e normalização de erro.\n */\nexport function createRestClient(deps: RestClientDeps): AxiosInstance {\n const { api, getToken, onUnauthorized, appId } = deps;\n const prefix = api.versionPrefix ?? \"\";\n\n const instance = axios.create({\n baseURL: `${api.baseUrl.replace(/\\/$/, \"\")}${prefix}`,\n timeout: api.timeout ?? 30000,\n });\n\n instance.interceptors.request.use((config) => {\n const token = getToken();\n if (token && !config.headers.Authorization) {\n config.headers.Authorization = `Bearer ${token}`;\n }\n if (appId) config.headers[\"x-oon-app\"] = appId;\n return config;\n });\n\n instance.interceptors.response.use(\n (res) => res,\n (error) => {\n const normalized = normalizeError(error);\n const requestPath = String(error.config?.url || \"\")\n .split(\"?\")[0]\n .replace(/\\/$/, \"\");\n const isLogin = requestPath.endsWith(\"/auth/autenticar\");\n if (normalized.status === 401 && !isLogin) onUnauthorized?.();\n return Promise.reject(normalized);\n }\n );\n\n return instance;\n}\n\n/** Monta os headers de auditoria x-oon-* a partir do contexto. */\nexport function auditHeaders(audit?: AuditContext): Record<string, string> {\n if (!audit) return {};\n const headers: Record<string, string> = {};\n if (audit.origem) headers[\"x-oon-origin\"] = audit.origem;\n if (audit.module) headers[\"x-oon-module\"] = audit.module;\n if (audit.entity) headers[\"x-oon-entity\"] = audit.entity;\n return headers;\n}\n","import axios from \"axios\";\nimport type { OonError } from \"../types\";\n\n/**\n * Normaliza qualquer erro de rede/axios para o formato `OonError`, lendo o\n * envelope de erro padrão do back (`{ message }` ou `{ error: {...} }`).\n */\nexport function normalizeError(err: unknown): OonError {\n if (axios.isAxiosError(err)) {\n const status = err.response?.status;\n const data = err.response?.data as\n | string\n | { message?: string; error?: { code?: string; message?: string; details?: unknown; requestId?: string } }\n | undefined;\n\n const contentType = String(err.response?.headers?.[\"content-type\"] || \"\");\n const isTextPayload = typeof data === \"string\";\n const isProbablyHtml = isTextPayload && /<html|<!doctype/i.test(data);\n\n if (isTextPayload || (contentType && !contentType.includes(\"json\"))) {\n return {\n code: codeFromStatus(status),\n message: nonJsonMessage(status, err.config?.url, isProbablyHtml),\n status,\n details: isProbablyHtml ? undefined : data,\n requestId: err.response?.headers?.[\"x-request-id\"] as string | undefined,\n };\n }\n\n const envelope = data?.error;\n return {\n code: envelope?.code || codeFromStatus(status),\n message: envelope?.message || data?.message || err.message || \"Erro inesperado.\",\n status,\n details: envelope?.details,\n requestId: envelope?.requestId || (err.response?.headers?.[\"x-request-id\"] as string | undefined),\n };\n }\n\n if (err instanceof Error) {\n return { code: \"UNKNOWN\", message: err.message };\n }\n\n return { code: \"UNKNOWN\", message: \"Erro inesperado.\" };\n}\n\nfunction nonJsonMessage(status?: number, url?: string, html?: boolean): string {\n const path = url ? ` (${url})` : \"\";\n if (status === 404) {\n return `Rota da API não encontrada${path}. Verifique VITE_API_URL, porta do backend e modo da Central.`;\n }\n if (html) {\n return `Backend retornou HTML em vez de JSON${path}. Verifique se o frontend está apontando para a API correta.`;\n }\n return `Backend retornou resposta não JSON${path}. Verifique a configuração da API.`;\n}\n\nfunction codeFromStatus(status?: number): string {\n switch (status) {\n case 400:\n return \"VALIDATION_ERROR\";\n case 401:\n return \"UNAUTHORIZED\";\n case 403:\n return \"FORBIDDEN\";\n case 404:\n return \"NOT_FOUND\";\n case 409:\n return \"CONFLICT\";\n default:\n return status && status >= 500 ? \"SERVER_ERROR\" : \"REQUEST_ERROR\";\n }\n}\n","/**\n * Armazenamento de token encapsulado (Seção 6.2). Toda leitura/escrita de\n * token passa por aqui — nada de `localStorage.getItem('token')` espalhado.\n * Tudo com try/catch para JSON/localStorage inválido não derrubar a tela.\n */\nconst STORAGE_KEY = \"oon.auth.token\";\n\nexport interface TokenStorage {\n get(): string | null;\n set(token: string): void;\n clear(): void;\n}\n\nexport function createTokenStorage(namespace?: string): TokenStorage {\n const key = namespace ? `${STORAGE_KEY}.${namespace}` : STORAGE_KEY;\n\n return {\n get() {\n try {\n return window.localStorage.getItem(key);\n } catch {\n return null;\n }\n },\n set(token: string) {\n try {\n window.localStorage.setItem(key, token);\n } catch {\n /* storage indisponível (modo privado) — ignora silenciosamente. */\n }\n },\n clear() {\n try {\n window.localStorage.removeItem(key);\n } catch {\n /* noop */\n }\n },\n };\n}\n\n/**\n * Lê o token vindo do SSO via query string (?code=...) e remove da URL para\n * não vazar em histórico/logs. Retorna o token capturado, se houver.\n */\nexport function captureTokenFromUrl(tokenParam = \"code\"): string | null {\n try {\n const url = new URL(window.location.href);\n const token = url.searchParams.get(tokenParam);\n if (!token) return null;\n url.searchParams.delete(tokenParam);\n window.history.replaceState({}, document.title, url.pathname + url.search + url.hash);\n return token;\n } catch {\n return null;\n }\n}\n","import { type ReactNode, useMemo } from \"react\";\nimport { ChakraProvider } from \"@chakra-ui/react\";\nimport { QueryClientProvider } from \"@tanstack/react-query\";\nimport type { AxiosInstance } from \"axios\";\nimport type { OonCoreFrontConfig } from \"../types\";\nimport { createOonQueryClient } from \"../config/queryClient\";\nimport { createOonSystem } from \"../config/theme\";\nimport { ApiProvider } from \"../api/ApiProvider\";\nimport { AuthProvider } from \"../security/AuthProvider\";\nimport { ActivationProvider } from \"../security/ActivationProvider\";\nimport type { TokenStorage } from \"../security/tokenStorage\";\n\nexport interface OonProvidersProps {\n config: OonCoreFrontConfig;\n http: AxiosInstance;\n storage: TokenStorage;\n children: ReactNode;\n}\n\n/**\n * Monta, em ordem (Seção 3.3), todos os providers globais. Nenhuma Central\n * cliente deve montar QueryClient/Chakra/Auth/Api manualmente.\n *\n * Ordem: QueryClient -> Chakra -> Api -> Auth -> (Router, montado fora).\n */\nexport function OonProviders({ config, http, storage, children }: OonProvidersProps) {\n const queryClient = useMemo(() => createOonQueryClient(), []);\n const system = useMemo(() => createOonSystem(config.theme), [config.theme]);\n const loginUrl = config.auth?.loginUrl ?? config.api.meusAppsUrl;\n\n return (\n <QueryClientProvider client={queryClient}>\n <ChakraProvider value={system}>\n <ApiProvider http={http}>\n <ActivationProvider http={http}>\n <AuthProvider http={http} storage={storage} auth={config.auth} loginUrl={loginUrl}>\n {children}\n </AuthProvider>\n </ActivationProvider>\n </ApiProvider>\n </ChakraProvider>\n </QueryClientProvider>\n );\n}\n","import { QueryClient } from \"@tanstack/react-query\";\n\n/** QueryClient padrão do Core, com defaults conservadores para telas admin. */\nexport function createOonQueryClient(): QueryClient {\n return new QueryClient({\n defaultOptions: {\n queries: {\n retry: 1,\n refetchOnWindowFocus: false,\n staleTime: 30 * 1000,\n },\n mutations: {\n retry: 0,\n },\n },\n });\n}\n","import { createSystem, defaultConfig, defineConfig, mergeConfigs } from \"@chakra-ui/react\";\nimport type { OonCoreFrontConfig } from \"../types\";\n\n/**\n * Identidade visual padrão das Centrais Oon, consolidada a partir da Central\n * Minexco/CST: azul operacional, superfícies claras, tipografia Poppins e alta\n * densidade de informação.\n */\nexport const brandColors = {\n brand: {\n 25: { value: \"#F8FCFF\" },\n 50: { value: \"#EEF8FD\" },\n 75: { value: \"#E2F3FB\" },\n 100: { value: \"#C7E8F7\" },\n 200: { value: \"#82C8E8\" },\n 300: { value: \"#3FA6E0\" },\n 350: { value: \"#0F8DD0\" },\n 400: { value: \"#0580B9\" },\n 500: { value: \"#0474AF\" },\n 600: { value: \"#036491\" },\n 700: { value: \"#014364\" },\n 800: { value: \"#073A52\" },\n 850: { value: \"#082F3F\" },\n 900: { value: \"#07262E\" },\n },\n} as const;\n\nconst oonThemeConfig = defineConfig({\n globalCss: {\n \"html, body, #root\": {\n minHeight: \"100%\",\n },\n body: {\n margin: 0,\n bg: \"#F8F9FA\",\n color: \"#24323A\",\n fontFamily: \"Poppins, Inter, system-ui, sans-serif\",\n fontSize: \"14px\",\n },\n \"button, input, select, textarea\": {\n fontFamily: \"inherit\",\n },\n \"::selection\": {\n bg: \"#C7E8F7\",\n color: \"#07262E\",\n },\n },\n theme: {\n tokens: {\n colors: brandColors,\n fonts: {\n body: { value: \"Poppins, Inter, system-ui, sans-serif\" },\n heading: { value: \"Poppins, Inter, system-ui, sans-serif\" },\n },\n radii: {\n oon: { value: \"10px\" },\n },\n shadows: {\n oon: { value: \"0 8px 24px rgba(7, 38, 46, 0.08)\" },\n },\n },\n semanticTokens: {\n colors: {\n brand: {\n solid: { value: \"{colors.brand.500}\" },\n contrast: { value: \"white\" },\n fg: { value: \"{colors.brand.700}\" },\n muted: { value: \"{colors.brand.50}\" },\n subtle: { value: \"{colors.brand.75}\" },\n emphasized: { value: \"{colors.brand.600}\" },\n focusRing: { value: \"{colors.brand.500}\" },\n },\n },\n },\n },\n});\n\n/**\n * Constrói o system do Chakra. O padrão Minexco é aplicado primeiro e pode ser\n * sobrescrito por uma identidade específica da Central sem reescrever o shell.\n */\nexport function createOonSystem(themeOverride?: OonCoreFrontConfig[\"theme\"]) {\n const base = mergeConfigs(defaultConfig, oonThemeConfig);\n const config = themeOverride\n ? mergeConfigs(base, defineConfig(themeOverride as Parameters<typeof defineConfig>[0]))\n : base;\n return createSystem(config);\n}\n\nexport const oonSystem = createOonSystem();\n","import { createContext, useContext, useMemo, type ReactNode } from \"react\";\nimport type { AxiosInstance } from \"axios\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport type { ModelSummary } from \"../types\";\nimport { createCoreClient, type CoreClient } from \"./coreClient\";\nimport { createResourceClient, type ResourceClient } from \"./resourceClient\";\n\ninterface ApiContextValue {\n http: AxiosInstance;\n core: CoreClient;\n resource: <T = Record<string, unknown>>(basePath: string) => ResourceClient<T>;\n}\n\nconst ApiContext = createContext<ApiContextValue | null>(null);\n\nexport function ApiProvider({ http, children }: { http: AxiosInstance; children: ReactNode }) {\n const value = useMemo<ApiContextValue>(() => {\n const cache = new Map<string, ResourceClient>();\n return {\n http,\n core: createCoreClient(http),\n resource<T = Record<string, unknown>>(basePath: string) {\n let client = cache.get(basePath);\n if (!client) {\n client = createResourceClient(http, basePath);\n cache.set(basePath, client);\n }\n return client as ResourceClient<T>;\n },\n };\n }, [http]);\n\n return <ApiContext.Provider value={value}>{children}</ApiContext.Provider>;\n}\n\nexport function useOonApi(): ApiContextValue {\n const ctx = useContext(ApiContext);\n if (!ctx) throw new Error(\"useOonApi deve ser usado dentro de <ApiProvider> (oonCoreFront.start).\");\n return ctx;\n}\n\n/** Cliente de um recurso, memoizado pelo basePath. */\nexport function useOonResource<T = Record<string, unknown>>(basePath: string): ResourceClient<T> {\n const { resource } = useOonApi();\n return useMemo(() => resource<T>(basePath), [resource, basePath]);\n}\n\n/** Metadata completa do back (cache de 5 min). */\nexport function useCoreMetadata() {\n const { core } = useOonApi();\n return useQuery({\n queryKey: [\"oon\", \"core\", \"metadata\"],\n queryFn: () => core.metadata(),\n staleTime: 5 * 60 * 1000,\n });\n}\n\n/** Descrição de uma model específica — base do modo \"dynamic\". */\nexport function useModelSchema(name: string) {\n const { core } = useOonApi();\n return useQuery<ModelSummary>({\n queryKey: [\"oon\", \"core\", \"model\", name],\n queryFn: () => core.model(name),\n staleTime: 5 * 60 * 1000,\n enabled: !!name,\n });\n}\n","import type { AxiosInstance } from \"axios\";\nimport type { CoreMetadata, ModelSummary } from \"../types\";\n\n/**\n * SDK do contrato /core/* (introspecção dirigida por metadata). É o que\n * permite o modo \"dynamic\" das coleções: o front monta grid/form/rotas a\n * partir do que o back descreve, sem código de UI por entidade.\n */\nexport interface CoreClient {\n metadata(): Promise<CoreMetadata>;\n models(): Promise<ModelSummary[]>;\n model(name: string): Promise<ModelSummary>;\n permissions(): Promise<Array<{ resource: string; action: string; roles: string[] }>>;\n menus(): Promise<CoreMetadata[\"menus\"]>;\n}\n\nexport function createCoreClient(http: AxiosInstance): CoreClient {\n return {\n async metadata() {\n const { data } = await http.get<CoreMetadata>(\"/core/metadata\");\n return data;\n },\n async models() {\n const { data } = await http.get<{ results: ModelSummary[] }>(\"/core/models\");\n return data.results;\n },\n async model(name) {\n const { data } = await http.get<ModelSummary>(`/core/models/${name}`);\n return data;\n },\n async permissions() {\n const { data } = await http.get<{ results: Array<{ resource: string; action: string; roles: string[] }> }>(\n \"/core/permissions\"\n );\n return data.results;\n },\n async menus() {\n const { data } = await http.get<{ results: CoreMetadata[\"menus\"] }>(\"/core/menus\");\n return data.results;\n },\n };\n}\n","import type { AxiosInstance } from \"axios\";\nimport type { AuditContext, ListParams, PaginatedResult } from \"../types\";\nimport { auditHeaders } from \"./createRestClient\";\n\n/**\n * SDK por recurso (Seção 2.5). Espelha o CRUD gerado pelo back em `basePath`:\n * GET / -> list (paginado)\n * GET /:id -> get\n * POST / -> create\n * PUT /:id -> update\n * PATCH /:id -> patch\n * DELETE /:id -> delete\n * POST /import -> importMany\n * GET /export -> exportAll\n *\n * O back devolve registro único na chave do singular (`{ [singular]: {...} }`);\n * `unwrap` extrai o primeiro valor não-meta para o consumidor não precisar\n * conhecer o singular.\n */\nexport interface ResourceClient<T = Record<string, unknown>> {\n list(params?: ListParams): Promise<PaginatedResult<T>>;\n get(id: string): Promise<T>;\n create(body: Partial<T>, audit?: AuditContext): Promise<T>;\n update(id: string, body: Partial<T>, audit?: AuditContext): Promise<T>;\n patch(id: string, body: Partial<T>, audit?: AuditContext): Promise<T>;\n delete(id: string, audit?: AuditContext): Promise<T>;\n importMany(rows: unknown[], audit?: AuditContext): Promise<{ inserted?: number; [k: string]: unknown }>;\n exportAll(params?: ListParams): Promise<T[]>;\n}\n\nconst META_KEYS = new Set([\"pagination\", \"results\", \"message\", \"requestId\"]);\n\nfunction unwrap<T>(data: Record<string, unknown>): T {\n // resposta tipo { pessoa: {...} } — pega o primeiro valor de objeto.\n for (const [key, value] of Object.entries(data)) {\n if (!META_KEYS.has(key) && value && typeof value === \"object\") {\n return value as T;\n }\n }\n return data as T;\n}\n\nexport function createResourceClient<T = Record<string, unknown>>(\n http: AxiosInstance,\n basePath: string\n): ResourceClient<T> {\n const base = `/${basePath.replace(/^\\/+/, \"\")}`;\n\n return {\n async list(params) {\n const { data } = await http.get<PaginatedResult<T>>(base, { params });\n return data;\n },\n async get(id) {\n const { data } = await http.get<Record<string, unknown>>(`${base}/${id}`);\n return unwrap<T>(data);\n },\n async create(body, audit) {\n const { data } = await http.post<Record<string, unknown>>(base, body, {\n headers: auditHeaders(audit ?? { origem: \"form\" }),\n });\n return unwrap<T>(data);\n },\n async update(id, body, audit) {\n const { data } = await http.put<Record<string, unknown>>(`${base}/${id}`, body, {\n headers: auditHeaders(audit ?? { origem: \"form\" }),\n });\n return unwrap<T>(data);\n },\n async patch(id, body, audit) {\n const { data } = await http.patch<Record<string, unknown>>(`${base}/${id}`, body, {\n headers: auditHeaders(audit ?? { origem: \"datagrid\" }),\n });\n return unwrap<T>(data);\n },\n async delete(id, audit) {\n const { data } = await http.delete<Record<string, unknown>>(`${base}/${id}`, {\n headers: auditHeaders(audit ?? { origem: \"datagrid\" }),\n });\n return unwrap<T>(data);\n },\n async importMany(rows, audit) {\n const { data } = await http.post<{ inserted?: number }>(\n `${base}/import`,\n { rows },\n { headers: auditHeaders(audit ?? { origem: \"import\" }) }\n );\n return data;\n },\n async exportAll(params) {\n const { data } = await http.get<{ results: T[] } | T[]>(`${base}/export`, { params });\n return Array.isArray(data) ? data : data.results;\n },\n };\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useState,\n type ReactNode,\n} from \"react\";\nimport type { AxiosInstance } from \"axios\";\nimport type { OonAuthConfig, OonError, OonUser } from \"../types\";\nimport { captureTokenFromUrl, type TokenStorage } from \"./tokenStorage\";\nimport { useOptionalActivation } from \"./ActivationProvider\";\n\nexport type AuthStatus =\n | \"loading\"\n | \"authenticated\"\n | \"unauthenticated\"\n | \"forbidden\"\n | \"error\";\n\ninterface AuthContextValue {\n user: OonUser | null;\n roles: string[];\n capabilities: string[];\n status: AuthStatus;\n isAuthenticated: boolean;\n hasPermission: (permission?: string | string[]) => boolean;\n login: (email: string, password: string) => Promise<void>;\n retry: () => Promise<void>;\n logout: () => void;\n}\n\nconst AuthContext = createContext<AuthContextValue | null>(null);\n\nexport interface AuthProviderProps {\n http: AxiosInstance;\n storage: TokenStorage;\n auth?: OonAuthConfig;\n /** URL externa opcional. Sem ela, o Core usa a tela local em /login. */\n loginUrl?: string;\n children: ReactNode;\n}\n\nfunction errorStatus(error: unknown): number | undefined {\n return (error as OonError | undefined)?.status;\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\nfunction normalizeList(value: unknown): string[] {\n if (Array.isArray(value)) return value.map(String).filter(Boolean);\n if (typeof value === \"string\") return value.split(/[\\s,;]+/).map((item) => item.trim()).filter(Boolean);\n return [];\n}\n\nfunction extractCapabilities(user: OonUser | null): string[] {\n if (!user) return [];\n return [\n ...normalizeList(user.capabilities),\n ...normalizeList(user.permissoes?.capabilities),\n ...normalizeList(user.aplicativo?.capabilities),\n ...normalizeList(user.aplicativo?.permissoes?.capabilities),\n ].filter((item, index, all) => all.indexOf(item) === index);\n}\n\n/**\n * Provider de autenticação do Core:\n * 1. captura token do ?code=, token de desenvolvimento ou storage;\n * 2. valida o token e a permissão do app em GET /auth/validar-token;\n * 3. trata 401 como ausência de sessão e 403 como acesso negado;\n * 4. oferece login local via POST /auth/autenticar.\n */\nexport function AuthProvider({\n http,\n storage,\n auth,\n loginUrl,\n children,\n}: AuthProviderProps) {\n const tokenParam = auth?.tokenParam ?? \"code\";\n const devToken = auth?.devToken?.trim() || null;\n const [user, setUser] = useState<OonUser | null>(null);\n const [status, setStatus] = useState<AuthStatus>(\"loading\");\n const activation = useOptionalActivation();\n\n const redirectToExternalLogin = useCallback(() => {\n if (loginUrl) window.location.href = loginUrl;\n }, [loginUrl]);\n\n const applyValidationError = useCallback(\n (error: unknown) => {\n const currentStatus = errorStatus(error);\n setUser(null);\n\n if (currentStatus === 403) {\n setStatus(\"forbidden\");\n return;\n }\n\n if (currentStatus === 401) {\n storage.clear();\n setStatus(\"unauthenticated\");\n redirectToExternalLogin();\n return;\n }\n\n setStatus(\"error\");\n },\n [storage, redirectToExternalLogin],\n );\n\n const validateSession = useCallback(async () => {\n const response = await http.get<{ usuario: OonUser }>(\n \"/auth/validar-token\",\n );\n setUser(response.data.usuario);\n setStatus(\"authenticated\");\n }, [http]);\n\n const retry = useCallback(async () => {\n setStatus(\"loading\");\n try {\n await validateSession();\n } catch (error) {\n applyValidationError(error);\n throw error;\n }\n }, [validateSession, applyValidationError]);\n\n const login = useCallback(\n async (email: string, password: string) => {\n setStatus(\"loading\");\n setUser(null);\n\n try {\n const response = await http.post<{ token: string }>(\n \"/auth/autenticar\",\n {},\n {\n headers: {\n Authorization: `Basic ${encodeBasicCredentials(email, password)}`,\n },\n },\n );\n\n if (!response.data.token) {\n const error: OonError = {\n code: \"AUTH_TOKEN_MISSING\",\n message: \"Token não retornado pelo backend.\",\n status: 502,\n };\n throw error;\n }\n\n storage.set(response.data.token);\n await validateSession();\n } catch (error) {\n applyValidationError(error);\n throw error;\n }\n },\n [http, storage, validateSession, applyValidationError],\n );\n\n const logout = useCallback(() => {\n storage.clear();\n setUser(null);\n setStatus(\"unauthenticated\");\n redirectToExternalLogin();\n }, [storage, redirectToExternalLogin]);\n\n useEffect(() => {\n let active = true;\n\n if (\n activation &&\n ![\"active\", \"error\"].includes(activation.status)\n ) {\n setUser(null);\n setStatus(\"unauthenticated\");\n return;\n }\n\n const incoming = captureTokenFromUrl(tokenParam);\n const stored = storage.get();\n const token = incoming ?? devToken ?? stored;\n\n if (token && token !== stored) storage.set(token);\n\n if (!token) {\n setUser(null);\n setStatus(\"unauthenticated\");\n redirectToExternalLogin();\n return;\n }\n\n setStatus(\"loading\");\n http\n .get<{ usuario: OonUser }>(\"/auth/validar-token\")\n .then((response) => {\n if (!active) return;\n setUser(response.data.usuario);\n setStatus(\"authenticated\");\n })\n .catch((error) => {\n if (!active) return;\n applyValidationError(error);\n });\n\n return () => {\n active = false;\n };\n }, [\n http,\n storage,\n tokenParam,\n devToken,\n redirectToExternalLogin,\n applyValidationError,\n activation?.status,\n ]);\n\n const roles = user?.tipo ? [user.tipo] : [];\n const capabilities = extractCapabilities(user);\n\n const hasPermission = useCallback(\n (permission?: string | string[]) => {\n if (!permission) return true;\n const required = Array.isArray(permission) ? permission : [permission];\n if (required.length === 0) return true;\n if (roles.includes(\"admin\") || roles.includes(\"master\")) return true;\n return required.some(\n (value) =>\n roles.includes(value) ||\n capabilities.includes(value) ||\n roles.some((role) => value.startsWith(`${role}.`)),\n );\n },\n [roles, capabilities],\n );\n\n const value: AuthContextValue = {\n user,\n roles,\n capabilities,\n status,\n isAuthenticated: status === \"authenticated\",\n hasPermission,\n login,\n retry,\n logout,\n };\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n\nexport function useOonAuth(): AuthContextValue {\n const context = useContext(AuthContext);\n if (!context) {\n throw new Error(\n \"useOonAuth deve ser usado dentro de <AuthProvider> (oonCoreFront.start).\",\n );\n }\n return context;\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useState,\n type ReactNode,\n} from \"react\";\nimport type { AxiosInstance } from \"axios\";\n\nexport type InstanceStatus =\n | \"loading\"\n | \"notActivated\"\n | \"validatingCode\"\n | \"codeValidated\"\n | \"submitting\"\n | \"configuring\"\n | \"active\"\n | \"suspended\"\n | \"revoked\"\n | \"error\";\n\nexport interface ActivationStatusResponse {\n role: \"root\" | \"member\";\n status: string;\n appCode: string;\n ambiente: string;\n podeAtivar: boolean;\n podeTentarNovamente: boolean;\n motivoSuspensao?: string;\n motivoRevogacao?: string;\n}\n\ninterface ActivationContextValue {\n status: InstanceStatus;\n details: ActivationStatusResponse | null;\n refresh: () => Promise<void>;\n}\n\nconst ActivationContext = createContext<ActivationContextValue | null>(null);\n\nfunction mapStatus(data: ActivationStatusResponse): InstanceStatus {\n if (data.status === \"ativa\") return \"active\";\n if (data.status === \"suspensa\") return \"suspended\";\n if (data.status === \"revogada\") return \"revoked\";\n if (data.status === \"configurando\") return \"configuring\";\n if (data.status === \"erro\" && !data.podeAtivar) return \"error\";\n return \"notActivated\";\n}\n\nexport function ActivationProvider({\n http,\n children,\n}: {\n http: AxiosInstance;\n children: ReactNode;\n}) {\n const [status, setStatus] = useState<InstanceStatus>(\"loading\");\n const [details, setDetails] = useState<ActivationStatusResponse | null>(null);\n\n const refresh = useCallback(async () => {\n setStatus(\"loading\");\n try {\n const response =\n await http.get<ActivationStatusResponse>(\"/ativacao/status\");\n setDetails(response.data);\n setStatus(mapStatus(response.data));\n } catch {\n setStatus(\"error\");\n }\n }, [http]);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return (\n <ActivationContext.Provider value={{ status, details, refresh }}>\n {children}\n </ActivationContext.Provider>\n );\n}\n\nexport function useOptionalActivation() {\n return useContext(ActivationContext);\n}\n\nexport function useActivation() {\n const context = useOptionalActivation();\n if (!context) {\n throw new Error(\n \"useActivation deve ser usado dentro de <ActivationProvider>.\",\n );\n }\n return context;\n}\n","import { useState } from \"react\";\nimport { Box, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { CollectionMode, OonCollectionListConfig, OonColumnDef, OonDetailModalConfig, OonFormFieldDef, OonRelationDef } from \"../types\";\nimport { useModelSchema, useOonResource } from \"../api/ApiProvider\";\nimport { columnsFromMeta, formFieldsFromMeta } from \"./internal/fieldUtils\";\nimport { DataGrid } from \"./internal/DataGrid\";\nimport { DynamicForm } from \"./internal/DynamicForm\";\nimport { CoreDetailModal } from \"./internal/CoreDetailModal\";\nimport { CoreRowAction } from \"./internal/CoreRowAction\";\nimport { normalizeColumn } from \"./internal/manifestUtils\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\nimport { ErrorState } from \"../shell/ErrorState\";\n\nexport interface CoreCollectionProps {\n model: string;\n label?: string;\n section?: string;\n mode?: CollectionMode;\n endpoint?: string;\n columns?: OonColumnDef[];\n form?: OonFormFieldDef[];\n importExport?: boolean;\n list?: OonCollectionListConfig;\n relations?: Record<string, OonRelationDef>;\n detailModal?: OonDetailModalConfig;\n}\n\ntype FormState = { open: false } | { open: true; row?: Record<string, unknown> };\ntype DetailState = { open: false } | { open: true; row?: Record<string, unknown>; initialTab?: string };\n\nfunction mergeFormFields(metadataFields: OonFormFieldDef[], overrides?: OonFormFieldDef[]) {\n if (!overrides?.length) return metadataFields;\n const byField = new Map(overrides.map((field) => [field.field, field]));\n const merged = metadataFields.map((field) => ({ ...field, ...byField.get(field.field) }));\n const known = new Set(metadataFields.map((field) => field.field));\n overrides.forEach((field) => {\n if (!known.has(field.field)) merged.push(field);\n });\n return merged;\n}\n\nexport function CoreCollection({ model, label, section = \"Coleção\", mode = \"dynamic\", endpoint, columns, form, importExport, list, relations, detailModal }: CoreCollectionProps) {\n const needsSchema = mode !== \"full\" || !columns || !form || !endpoint;\n const schemaQuery = useModelSchema(needsSchema ? model : \"\");\n const schema = schemaQuery.data;\n const basePath = endpoint ?? schema?.basePath ?? `/${model.toLowerCase()}s`;\n const resolvedColumns = (list?.columns?.length ? list.columns.map((column) => normalizeColumn(column, schema)) : columns) ?? (schema ? columnsFromMeta(schema.fields) : []);\n const metadataForm = schema ? formFieldsFromMeta(schema.fields) : [];\n const resolvedForm = mode === \"full\" && form?.length ? form : mergeFormFields(metadataForm, form);\n\n const resource = useOonResource(basePath);\n const queryClient = useQueryClient();\n const [formState, setFormState] = useState<FormState>({ open: false });\n const [detailState, setDetailState] = useState<DetailState>({ open: false });\n const [formError, setFormError] = useState<unknown>(null);\n\n const invalidate = () => queryClient.invalidateQueries({ queryKey: [\"oon\", \"list\", basePath] });\n\n const saveMutation = useMutation({\n mutationFn: (values: Record<string, unknown>) => {\n const editingRow = formState.open ? formState.row : undefined;\n const id = editingRow?._id as string | undefined;\n return id ? resource.update(id, values) : resource.create(values);\n },\n onSuccess: () => {\n setFormState({ open: false });\n setFormError(null);\n invalidate();\n },\n onError: (error) => setFormError(error),\n });\n\n const deleteMutation = useMutation({\n mutationFn: (row: Record<string, unknown>) => resource.delete(row._id as string),\n onSuccess: invalidate,\n });\n\n if (needsSchema && schemaQuery.isLoading) return <LoadingScreen />;\n if (needsSchema && schemaQuery.isError) return <ErrorState error={schemaQuery.error} />;\n\n const title = label ?? schema?.name ?? model;\n\n return (\n <Stack gap={5}>\n <Box>\n <Text fontSize=\"11px\" fontWeight=\"700\" color=\"brand.500\" textTransform=\"uppercase\" letterSpacing=\"0.08em\" mb={1}>\n {section}\n </Text>\n <Heading size=\"lg\" color=\"#24323A\" letterSpacing=\"-0.02em\">\n {title}\n </Heading>\n <Text mt={1} fontSize=\"13px\" color=\"gray.500\">\n Consulte, filtre e mantenha os registros desta operação.\n </Text>\n </Box>\n\n <DataGrid\n resource={resource}\n resourceKey={basePath}\n columns={resolvedColumns}\n filters={list?.filters}\n onCreate={() => {\n setFormError(null);\n if (detailModal?.enabled) setDetailState({ open: true });\n else setFormState({ open: true });\n }}\n onEdit={(row) => {\n setFormError(null);\n if (detailModal?.enabled) setDetailState({ open: true, row });\n else setFormState({ open: true, row });\n }}\n onDelete={(row) => {\n if (window.confirm(\"Excluir este registro?\")) deleteMutation.mutate(row);\n }}\n renderRowActions={list?.rowActions?.length ? (row) => list.rowActions?.map((action) => (\n <CoreRowAction\n key={action.id ?? action.label}\n action={action}\n row={row}\n onOpenDetail={(selected, initialTab) => setDetailState({ open: true, row: selected, initialTab })}\n onRefresh={invalidate}\n />\n )) : undefined}\n />\n\n {formState.open ? (\n <DynamicForm\n title={formState.row ? `Editar ${title}` : `Novo ${title}`}\n eyebrow={section}\n fields={resolvedForm}\n initialValues={formState.row}\n submitting={saveMutation.isPending}\n error={formError}\n onSubmit={(values) => {\n setFormError(null);\n saveMutation.mutate(values);\n }}\n onFieldChange={() => setFormError(null)}\n onCancel={() => {\n setFormState({ open: false });\n setFormError(null);\n }}\n />\n ) : null}\n\n {importExport ? null : null}\n {detailState.open && detailModal?.enabled ? (\n <CoreDetailModal\n model={model}\n title={title}\n config={detailModal}\n recordId={detailState.row?._id as string | undefined}\n initialRecord={detailState.row}\n initialTab={detailState.initialTab}\n relations={relations}\n onClose={() => setDetailState({ open: false })}\n onSaved={invalidate}\n />\n ) : null}\n </Stack>\n );\n}\n","import type { FieldKind, FieldMeta, OonColumnDef, OonFormFieldDef } from \"../../types\";\n\n/** Campos que normalmente não fazem sentido em grid/form de CRUD. */\nconst HIDDEN_FIELDS = new Set([\"__v\", \"_id\", \"createdAt\", \"updatedAt\", \"criadoEm\", \"atualizadoEm\"]);\n\nexport function isEditableField(meta: FieldMeta): boolean {\n return !HIDDEN_FIELDS.has(meta.name) && meta.kind !== \"raw\";\n}\n\nexport function fieldLabel(meta: { name: string; label?: string }): string {\n if (meta.label) return meta.label;\n return meta.name\n .replace(/_/g, \" \")\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n .replace(/^./, (character) => character.toUpperCase());\n}\n\n/** Deriva colunas de grid a partir da metadata da model (modo dynamic/minimal). */\nexport function columnsFromMeta(fields: FieldMeta[]): OonColumnDef[] {\n return fields\n .filter(isEditableField)\n .slice(0, 8)\n .map((field) => ({ field: field.name, label: fieldLabel(field), kind: field.kind, sortable: true }));\n}\n\nfunction formRequired(field: FieldMeta): boolean {\n const raw = field as unknown as Record<string, unknown>;\n const options = raw.options;\n const validation = raw.validation;\n const schema = raw.schema;\n\n return Boolean(\n field.required ||\n (options && !Array.isArray(options) && typeof options === \"object\" && (options as Record<string, unknown>).required) ||\n (validation && typeof validation === \"object\" && (validation as Record<string, unknown>).required) ||\n (schema && typeof schema === \"object\" && (schema as Record<string, unknown>).required)\n );\n}\n\nfunction formOptions(field: FieldMeta): string[] | undefined {\n const rawOptions = (field as unknown as Record<string, unknown>).options;\n if (Array.isArray(rawOptions)) return rawOptions.filter((value): value is string => typeof value === \"string\");\n if (!rawOptions || typeof rawOptions !== \"object\") return undefined;\n\n const options = rawOptions as Record<string, unknown>;\n const candidates = [options.values, options.enum, options.options];\n for (const candidate of candidates) {\n if (Array.isArray(candidate)) return candidate.filter((value): value is string => typeof value === \"string\");\n }\n return undefined;\n}\n\n/** Deriva campos de formulário a partir da metadata da model. */\nexport function formFieldsFromMeta(fields: FieldMeta[]): OonFormFieldDef[] {\n return fields.filter(isEditableField).map((field) => ({\n field: field.name,\n label: fieldLabel(field),\n kind: field.kind,\n required: formRequired(field),\n options: formOptions(field),\n ref: field.ref,\n }));\n}\n\n/** Formata um valor de célula conforme o tipo declarado. */\nexport function formatCell(value: unknown, kind?: FieldKind): string {\n if (value == null || value === \"\") return \"—\";\n switch (kind) {\n case \"boolean\":\n return value ? \"Sim\" : \"Não\";\n case \"date\":\n try {\n return new Date(value as string).toLocaleDateString(\"pt-BR\");\n } catch {\n return String(value);\n }\n case \"currency\":\n case \"currencyConverted\":\n return new Intl.NumberFormat(\"pt-BR\", { style: \"currency\", currency: \"BRL\" }).format(Number(value));\n case \"ref\":\n if (value && typeof value === \"object\") {\n const object = value as Record<string, unknown>;\n return String(object.nome ?? object.label ?? object.descricao ?? object._id ?? \"—\");\n }\n return String(value);\n default:\n return String(value);\n }\n}\n","import { useDeferredValue, useState, type ReactNode } from \"react\";\nimport { Badge, Box, Button, Flex, Input, NativeSelect, Spacer, Table, Text } from \"@chakra-ui/react\";\nimport { keepPreviousData, useQuery } from \"@tanstack/react-query\";\nimport type { FieldKind, OonColumnDef, OonListFilterDef } from \"../../types\";\nimport type { ResourceClient } from \"../../api/resourceClient\";\nimport { formatCell } from \"./fieldUtils\";\nimport { LoadingScreen } from \"../../shell/LoadingScreen\";\nimport { ErrorState } from \"../../shell/ErrorState\";\n\nexport interface DataGridProps {\n resource: ResourceClient;\n resourceKey: string;\n columns: OonColumnDef[];\n search?: boolean;\n onCreate?: () => void;\n onEdit?: (row: Record<string, unknown>) => void;\n onDelete?: (row: Record<string, unknown>) => void;\n toolbarExtra?: ReactNode;\n filters?: OonListFilterDef[];\n queryExtra?: Record<string, unknown>;\n renderRowActions?: (row: Record<string, unknown>) => ReactNode;\n}\n\nfunction SearchIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" width=\"17\" height=\"17\" aria-hidden=\"true\">\n <circle cx=\"8.5\" cy=\"8.5\" r=\"5.25\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"m12.4 12.4 4 4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction EditIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" width=\"15\" height=\"15\" aria-hidden=\"true\">\n <path d=\"M4 14.5V16h1.5L14.7 6.8l-1.5-1.5L4 14.5Z\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.45\" strokeLinejoin=\"round\" />\n <path d=\"m12.5 6 1.5-1.5a1.05 1.05 0 0 1 1.5 0l.1.1a1.05 1.05 0 0 1 0 1.5L14.1 7.6\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.45\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction TrashIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" width=\"15\" height=\"15\" aria-hidden=\"true\">\n <path d=\"M5.5 6.5h9l-.6 9H6.1l-.6-9Zm2-2h5l.7 2H6.8l.7-2Z\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.35\" strokeLinejoin=\"round\" />\n <path d=\"M4.5 6.5h11\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.35\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction ChevronIcon({ direction }: { direction: \"left\" | \"right\" }) {\n return (\n <svg viewBox=\"0 0 20 20\" width=\"17\" height=\"17\" aria-hidden=\"true\" style={{ transform: direction === \"right\" ? \"rotate(180deg)\" : undefined }}>\n <path d=\"m12 5-5 5 5 5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nfunction PlusIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" width=\"17\" height=\"17\" aria-hidden=\"true\">\n <path d=\"M10 4v12M4 10h12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction renderCell(value: unknown, kind?: FieldKind) {\n const formatted = formatCell(value, kind);\n\n if (kind === \"enum\") {\n const normalized = String(value ?? \"\").toLowerCase();\n const palette = /erro|cancel|inativo|recus|critica/.test(normalized)\n ? \"red\"\n : /pendente|aguardando|rascunho/.test(normalized)\n ? \"orange\"\n : /processando|conferencia|integrando|validando/.test(normalized)\n ? \"blue\"\n : /ativo|sucesso|conclu|aplicada|disponivel|aprov/.test(normalized)\n ? \"green\"\n : \"gray\";\n return (\n <Badge colorPalette={palette} variant=\"subtle\" borderRadius=\"full\" px=\"7px\" py=\"3px\" fontSize=\"9px\" fontWeight=\"600\" textTransform=\"capitalize\">\n {formatted}\n </Badge>\n );\n }\n\n if (kind === \"boolean\") {\n const active = value === true || value === \"true\";\n return (\n <Badge colorPalette={active ? \"green\" : \"gray\"} variant=\"subtle\" borderRadius=\"full\" px=\"7px\" py=\"3px\" fontSize=\"9px\" fontWeight=\"600\">\n {formatted}\n </Badge>\n );\n }\n\n return formatted;\n}\n\n/** Datagrid no mesmo padrão explícito da Central Minexco. */\nexport function DataGrid({\n resource,\n resourceKey,\n columns,\n search = true,\n onCreate,\n onEdit,\n onDelete,\n toolbarExtra,\n filters = [],\n queryExtra,\n renderRowActions,\n}: DataGridProps) {\n const [pageIndex, setPageIndex] = useState(0);\n const [pageSize, setPageSize] = useState(20);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const deferredSearch = useDeferredValue(searchTerm);\n const [sort, setSort] = useState<string | undefined>(undefined);\n const [filterValues, setFilterValues] = useState<Record<string, unknown>>(() => Object.fromEntries(filters.map((filter) => [filter.field, filter.defaultValue ?? \"\"])));\n const effectiveFilters = Object.fromEntries(Object.entries({ ...queryExtra, ...filterValues }).filter(([, value]) => value !== \"\" && value != null));\n\n const query = useQuery({\n queryKey: [\"oon\", \"list\", resourceKey, { pageIndex, pageSize, searchTerm: deferredSearch, sort, filters: effectiveFilters }],\n queryFn: () => resource.list({ pageIndex, pageSize, searchTerm: deferredSearch || undefined, sort, ...effectiveFilters }),\n placeholderData: keepPreviousData,\n });\n\n const toggleSort = (field: string) => {\n setPageIndex(0);\n setSort((previous) => {\n if (previous === `${field}.asc`) return `${field}.desc`;\n if (previous === `${field}.desc`) return undefined;\n return `${field}.asc`;\n });\n };\n\n const pagination = query.data?.pagination;\n const rows = query.data?.results ?? [];\n const totalItems = pagination?.totalItems ?? rows.length;\n const totalPages = Math.max(1, pagination?.totalPages ?? 1);\n const currentPage = Math.min(pageIndex + 1, totalPages);\n const actionCount = onEdit || onDelete || renderRowActions ? 1 : 0;\n\n return (\n <Box bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"10px\" boxShadow=\"0 1px 2px rgba(15,23,42,.06)\" overflow=\"hidden\">\n <Flex minH=\"60px\" px=\"14px\" py=\"12px\" align=\"center\" gap={4} borderBottomWidth=\"1px\" borderColor=\"#E5E9ED\">\n {search ? (\n <Flex minW={{ base: \"100%\", md: \"min(420px, 55vw)\" }} maxW=\"420px\" h=\"35px\" px=\"10px\" align=\"center\" gap={2} color=\"#98A2B3\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#D5DDE3\" borderRadius=\"6px\" _focusWithin={{ borderColor: \"#0F8DD0\", boxShadow: \"0 0 0 3px rgba(15,141,208,.10)\" }}>\n <SearchIcon />\n <Input\n value={searchTerm}\n onChange={(event) => {\n setSearchTerm(event.target.value);\n setPageIndex(0);\n }}\n placeholder=\"Pesquisar registros...\"\n h=\"100%\"\n p={0}\n color=\"#475467\"\n bg=\"transparent\"\n border={0}\n borderRadius={0}\n fontSize=\"11px\"\n _placeholder={{ color: \"#A6B0BC\" }}\n _focusVisible={{ boxShadow: \"none\", outline: \"none\" }}\n />\n </Flex>\n ) : null}\n\n <Spacer />\n {filters.map((filter) => (\n filter.type === \"select\" ? (\n <NativeSelect.Root key={filter.field} size=\"xs\" w=\"180px\">\n <NativeSelect.Field value={String(filterValues[filter.field] ?? \"\")} onChange={(event) => { setFilterValues((current) => ({ ...current, [filter.field]: event.currentTarget.value })); setPageIndex(0); }}>\n {(filter.options ?? []).map((option) => <option key={String(option.value ?? \"\")} value={String(option.value ?? \"\")}>{option.label}</option>)}\n </NativeSelect.Field>\n <NativeSelect.Indicator />\n </NativeSelect.Root>\n ) : (\n <Input key={filter.field} w=\"180px\" h=\"35px\" fontSize=\"11px\" placeholder={filter.placeholder ?? filter.label ?? filter.field} type={filter.type === \"date\" ? \"date\" : filter.type === \"boolean\" ? \"text\" : \"text\"} value={String(filterValues[filter.field] ?? \"\")} onChange={(event) => { setFilterValues((current) => ({ ...current, [filter.field]: event.currentTarget.value })); setPageIndex(0); }} />\n )\n ))}\n <Flex align=\"center\" gap={3} color=\"#98A2B3\" fontSize=\"10px\">\n {query.isFetching ? <Text>Atualizando...</Text> : null}\n <Text as=\"strong\" color=\"#667085\" fontWeight=\"600\">\n {totalItems} registro{totalItems === 1 ? \"\" : \"s\"}\n </Text>\n </Flex>\n {toolbarExtra}\n {onCreate ? (\n <Button minH=\"35px\" px=\"13px\" colorPalette=\"brand\" borderRadius=\"6px\" fontSize=\"11px\" fontWeight=\"600\" onClick={onCreate}>\n <PlusIcon /> Novo registro\n </Button>\n ) : null}\n </Flex>\n\n {query.isLoading ? (\n <LoadingScreen />\n ) : query.isError ? (\n <ErrorState error={query.error} />\n ) : (\n <Box overflowX=\"auto\">\n <Table.Root size=\"sm\" minW=\"900px\" borderCollapse=\"collapse\">\n <Table.Header>\n <Table.Row bg=\"#F4F7F9\">\n {columns.map((column) => (\n <Table.ColumnHeader\n key={column.field}\n h=\"39px\"\n px=\"10px\"\n py=\"8px\"\n color=\"#667085\"\n borderBottomWidth=\"1px\"\n borderColor=\"#D5DDE3\"\n fontSize=\"10px\"\n fontWeight=\"600\"\n letterSpacing=\".015em\"\n textTransform=\"none\"\n whiteSpace=\"nowrap\"\n cursor={column.sortable ? \"pointer\" : undefined}\n onClick={column.sortable ? () => toggleSort(column.field) : undefined}\n >\n {column.label ?? column.field}\n {sort?.startsWith(`${column.field}.`) ? (sort.endsWith(\".asc\") ? \" ▲\" : \" ▼\") : \"\"}\n </Table.ColumnHeader>\n ))}\n {actionCount ? (\n <Table.ColumnHeader w=\"84px\" h=\"39px\" px=\"10px\" py=\"8px\" color=\"#667085\" borderBottomWidth=\"1px\" borderColor=\"#D5DDE3\" fontSize=\"10px\" fontWeight=\"600\" textAlign=\"center\">\n Ações\n </Table.ColumnHeader>\n ) : null}\n </Table.Row>\n </Table.Header>\n\n <Table.Body>\n {rows.length === 0 ? (\n <Table.Row>\n <Table.Cell colSpan={columns.length + actionCount}>\n <Text minH=\"140px\" display=\"grid\" placeItems=\"center\" color=\"#98A2B3\" fontSize=\"12px\">\n Nenhum registro encontrado.\n </Text>\n </Table.Cell>\n </Table.Row>\n ) : (\n rows.map((row, index) => (\n <Table.Row key={(row._id as string) ?? index} bg={index % 2 ? \"#FBFCFD\" : \"white\"} _hover={{ bg: \"#F0F7FF\" }}>\n {columns.map((column) => (\n <Table.Cell key={column.field} maxW=\"250px\" h=\"42px\" px=\"10px\" py=\"8px\" overflow=\"hidden\" color=\"#52606D\" borderBottomWidth=\"1px\" borderColor=\"#EEF1F3\" fontSize=\"11px\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\">\n {renderCell(row[column.field], column.kind)}\n </Table.Cell>\n ))}\n {actionCount ? (\n <Table.Cell h=\"42px\" px=\"10px\" py=\"5px\" borderBottomWidth=\"1px\" borderColor=\"#EEF1F3\" textAlign=\"center\">\n <Flex justify=\"center\" gap=\"5px\">\n {onEdit ? (\n <Button type=\"button\" aria-label=\"Editar\" w=\"31px\" minW=\"31px\" h=\"31px\" p={0} color=\"#667085\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"6px\" onClick={() => onEdit(row)} _hover={{ color: \"#036491\", bg: \"#F0F7FF\", borderColor: \"#B8D9EB\" }}>\n <EditIcon />\n </Button>\n ) : null}\n {onDelete ? (\n <Button type=\"button\" aria-label=\"Excluir\" w=\"31px\" minW=\"31px\" h=\"31px\" p={0} color=\"#667085\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"6px\" onClick={() => onDelete(row)} _hover={{ color: \"#B42318\", bg: \"#FFF5F5\", borderColor: \"#FECACA\" }}>\n <TrashIcon />\n </Button>\n ) : null}\n {renderRowActions?.(row)}\n </Flex>\n </Table.Cell>\n ) : null}\n </Table.Row>\n ))\n )}\n </Table.Body>\n </Table.Root>\n </Box>\n )}\n\n <Flex minH=\"56px\" px=\"14px\" py=\"10px\" align=\"center\" justify=\"flex-end\" gap=\"18px\" color=\"#7B8794\" borderTopWidth=\"1px\" borderColor=\"#E5E9ED\" fontSize=\"10px\" flexWrap=\"wrap\">\n <Flex align=\"center\" gap={2}>\n <Text>Linhas por página</Text>\n <NativeSelect.Root size=\"xs\" w=\"68px\">\n <NativeSelect.Field\n value={pageSize}\n h=\"30px\"\n pl=\"8px\"\n pr=\"26px\"\n color=\"#52606D\"\n bg=\"white\"\n borderColor=\"#D5DDE3\"\n borderRadius=\"5px\"\n fontSize=\"10px\"\n onChange={(event) => {\n setPageSize(Number(event.currentTarget.value));\n setPageIndex(0);\n }}\n >\n {[10, 20, 50, 100].map((size) => <option key={size} value={size}>{size}</option>)}\n </NativeSelect.Field>\n <NativeSelect.Indicator />\n </NativeSelect.Root>\n </Flex>\n\n <Text>Página {currentPage} de {totalPages}</Text>\n\n <Flex gap=\"5px\">\n <Button type=\"button\" aria-label=\"Página anterior\" w=\"31px\" minW=\"31px\" h=\"31px\" p={0} color=\"#667085\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"6px\" disabled={pageIndex <= 0} onClick={() => setPageIndex((current) => Math.max(0, current - 1))} _hover={{ color: \"#036491\", bg: \"#F0F7FF\", borderColor: \"#B8D9EB\" }}>\n <ChevronIcon direction=\"left\" />\n </Button>\n <Button type=\"button\" aria-label=\"Próxima página\" w=\"31px\" minW=\"31px\" h=\"31px\" p={0} color=\"#667085\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"6px\" disabled={currentPage >= totalPages} onClick={() => setPageIndex((current) => Math.min(totalPages - 1, current + 1))} _hover={{ color: \"#036491\", bg: \"#F0F7FF\", borderColor: \"#B8D9EB\" }}>\n <ChevronIcon direction=\"right\" />\n </Button>\n </Flex>\n </Flex>\n </Box>\n );\n}\n","import { Button, Flex, Spinner, Text } from \"@chakra-ui/react\";\n\ninterface LoadingScreenProps {\n message?: string;\n actionLabel?: string;\n onAction?: () => void;\n}\n\n/** Tela de carregamento/estado neutro reutilizada por guards e Suspense. */\nexport function LoadingScreen({\n message,\n actionLabel,\n onAction,\n}: LoadingScreenProps) {\n return (\n <Flex direction=\"column\" align=\"center\" justify=\"center\" minH=\"60vh\" gap={4}>\n <Spinner size=\"lg\" />\n {message ? (\n <Text color=\"gray.500\" fontSize=\"sm\" textAlign=\"center\">\n {message}\n </Text>\n ) : null}\n {actionLabel && onAction ? (\n <Button size=\"sm\" variant=\"outline\" onClick={onAction}>\n {actionLabel}\n </Button>\n ) : null}\n </Flex>\n );\n}\n","import { Box, Heading, Text } from \"@chakra-ui/react\";\n\n/**\n * Estado de erro padrão. Aceita tanto o `OonError` do client quanto um `Error`\n * cru (o que o React Query tipa em `query.error`) — só precisa de `message` e,\n * opcionalmente, `requestId`.\n */\nexport function ErrorState({\n error,\n title = \"Não foi possível carregar\",\n}: {\n error?: { message?: string; requestId?: string } | null;\n title?: string;\n}) {\n return (\n <Box borderWidth=\"1px\" borderColor=\"red.200\" bg=\"red.50\" borderRadius=\"md\" p={4}>\n <Heading size=\"sm\" color=\"red.700\">\n {title}\n </Heading>\n <Text mt={1} fontSize=\"sm\" color=\"red.600\">\n {error?.message ?? \"Erro inesperado.\"}\n </Text>\n {error?.requestId ? (\n <Text mt={2} fontSize=\"xs\" color=\"red.400\">\n requestId: {error.requestId}\n </Text>\n ) : null}\n </Box>\n );\n}\n","import { useEffect, useMemo, useState, type FormEvent, type ReactNode } from \"react\";\nimport { Box, Button, Flex, Heading, Input, NativeSelect, SimpleGrid, Stack, Text, Textarea } from \"@chakra-ui/react\";\nimport type { OonFormFieldDef } from \"../../types\";\nimport { fieldLabel } from \"./fieldUtils\";\nimport { ReferenceSelect } from \"./ReferenceSelect\";\n\nexport interface DynamicFormProps {\n title: string;\n eyebrow?: string;\n fields: OonFormFieldDef[];\n initialValues?: Record<string, unknown>;\n submitting?: boolean;\n error?: unknown;\n onSubmit: (values: Record<string, unknown>) => void;\n onCancel: () => void;\n onFieldChange?: () => void;\n}\n\ntype FieldErrors = Record<string, string>;\ntype ExtendedField = OonFormFieldDef & { multiline?: boolean; rows?: number; span?: 1 | 2 };\ntype FormItem = { type: \"field\"; field: ExtendedField } | { type: \"group\"; id: string; fields: ExtendedField[] };\n\nconst idFor = (field: string) => `oon-form-field-${field.replace(/[^a-zA-Z0-9_-]/g, \"-\")}`;\nconst errorIdFor = (field: string) => `${idFor(field)}-error`;\nconst normalize = (value: unknown) => String(value ?? \"\").normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\").toLowerCase();\n\nfunction CloseIcon() {\n return <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\"><path d=\"m6 6 8 8M14 6l-8 8\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" /></svg>;\n}\n\nfunction CheckIcon() {\n return <svg viewBox=\"0 0 20 20\" width=\"16\" height=\"16\" aria-hidden=\"true\"><circle cx=\"10\" cy=\"10\" r=\"7\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.4\" /><path d=\"m6.8 10.1 2 2 4.3-4.4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" /></svg>;\n}\n\nfunction AlertIcon() {\n return <svg viewBox=\"0 0 20 20\" width=\"17\" height=\"17\" aria-hidden=\"true\"><circle cx=\"10\" cy=\"10\" r=\"7\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.4\" /><path d=\"M10 6.5v4.2M10 13.5v.1\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" /></svg>;\n}\n\nfunction toValue(value: unknown, kind?: string) {\n if (value == null) return \"\";\n if (kind === \"date\") {\n try { return new Date(value as string).toISOString().slice(0, 10); } catch { return \"\"; }\n }\n if (typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n return String(record._id ?? record.id ?? \"\");\n }\n return String(value);\n}\n\nfunction coerce(value: string, kind?: string): unknown {\n if (value === \"\") return undefined;\n if ([\"number\", \"currency\", \"currencyConverted\"].includes(kind ?? \"\")) return Number(value);\n if (kind === \"boolean\") return value === \"true\";\n return value;\n}\n\nfunction validate(fields: OonFormFieldDef[], values: Record<string, string>) {\n const errors: FieldErrors = {};\n fields.forEach((field) => {\n if (field.required && !(values[field.field] ?? \"\").trim()) errors[field.field] = `${fieldLabel({ name: field.field, label: field.label })} é obrigatório.`;\n });\n return errors;\n}\n\nfunction messageOf(error: unknown) {\n if (!error) return null;\n if (typeof error === \"string\") return error;\n if (error instanceof Error) return error.message;\n if (typeof error === \"object\") {\n const record = error as Record<string, unknown>;\n if (typeof record.message === \"string\") return record.message;\n if (record.error && typeof record.error === \"object\" && typeof (record.error as Record<string, unknown>).message === \"string\") return (record.error as Record<string, unknown>).message as string;\n }\n return \"Não foi possível salvar o registro.\";\n}\n\nfunction detailErrors(error: unknown, fields: OonFormFieldDef[]) {\n const result: FieldErrors = {};\n const lookup = new Map(fields.flatMap((field) => [[normalize(field.field), field], [normalize(field.label), field]] as Array<[string, OonFormFieldDef]>));\n const seen = new WeakSet<object>();\n const visit = (value: unknown, hint?: string) => {\n if (value == null) return;\n if (Array.isArray(value)) return value.forEach((item) => visit(item, hint));\n if (typeof value !== \"object\" || seen.has(value)) return;\n seen.add(value);\n const record = value as Record<string, unknown>;\n const candidate = String(record.field ?? record.path ?? record.property ?? record.name ?? hint ?? \"\");\n const field = lookup.get(normalize(candidate.split(/[.[\\]]+/).filter(Boolean).pop() ?? candidate));\n const raw = record.message ?? record.msg ?? record.reason;\n if (field && typeof raw === \"string\") result[field.field] = /required|obrigat/i.test(raw) ? `${fieldLabel({ name: field.field, label: field.label })} é obrigatório.` : raw;\n Object.entries(record).forEach(([key, nested]) => {\n const direct = lookup.get(normalize(key));\n if (direct && typeof nested === \"string\") result[direct.field] = nested;\n visit(nested, key);\n });\n };\n if (error && typeof error === \"object\") {\n const record = error as Record<string, unknown>;\n visit(record.details ?? (record.error as Record<string, unknown> | undefined)?.details ?? record);\n }\n return result;\n}\n\nfunction focusField(field: string) {\n window.setTimeout(() => {\n const element = document.getElementById(idFor(field)) as HTMLElement | null;\n element?.scrollIntoView?.({ behavior: \"smooth\", block: \"center\" });\n element?.focus({ preventScroll: true });\n }, 0);\n}\n\nfunction isMultiline(field: ExtendedField) {\n return field.multiline === true || /observa|descricao|mensagem|detalhe|necessidade/i.test(field.field);\n}\n\nfunction Label({ id, label, required }: { id: string; label: string; required?: boolean }) {\n return <label htmlFor={id}><Text as=\"span\" display=\"block\" mb=\"6px\" color=\"#475467\" fontSize=\"11px\" fontWeight=\"600\">{label}{required ? <Text as=\"span\" color=\"#DC2626\"> *</Text> : null}</Text></label>;\n}\n\nfunction ErrorText({ id, text }: { id?: string; text?: string }) {\n return text ? <Text id={id} role=\"alert\" mt=\"5px\" color=\"#DC2626\" fontSize=\"10px\" fontWeight=\"500\">{text}</Text> : null;\n}\n\nconst controlProps = (invalid: boolean) => ({\n minH: \"37px\",\n px: \"10px\",\n py: \"8px\",\n color: \"#475467\",\n bg: \"white\",\n borderColor: invalid ? \"#DC2626\" : \"#D5DDE3\",\n borderRadius: \"6px\",\n boxShadow: invalid ? \"0 0 0 3px rgba(220,38,38,.08)\" : undefined,\n fontSize: \"11px\",\n});\n\nfunction buildItems(fields: ExtendedField[]): FormItem[] {\n const items: FormItem[] = [];\n const renderedGroups = new Set<string>();\n fields.forEach((field) => {\n if (!field.group) {\n items.push({ type: \"field\", field });\n return;\n }\n if (renderedGroups.has(field.group)) return;\n renderedGroups.add(field.group);\n items.push({ type: \"group\", id: field.group, fields: fields.filter((candidate) => candidate.group === field.group) });\n });\n return items;\n}\n\nexport function DynamicForm({ title, eyebrow = \"Cadastro\", fields, initialValues, submitting, error, onSubmit, onCancel, onFieldChange }: DynamicFormProps) {\n const [values, setValues] = useState<Record<string, string>>(() => Object.fromEntries(fields.map((field) => [field.field, toValue(initialValues?.[field.field], field.kind)])));\n const [errors, setErrors] = useState<FieldErrors>({});\n const [dismissed, setDismissed] = useState(false);\n const items = useMemo(() => buildItems(fields as ExtendedField[]), [fields]);\n\n useEffect(() => {\n const listener = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || event.defaultPrevented || submitting) return;\n if ((event.target as HTMLElement | null)?.closest('[role=\"combobox\"], [role=\"listbox\"]')) return;\n onCancel();\n };\n document.addEventListener(\"keydown\", listener);\n return () => document.removeEventListener(\"keydown\", listener);\n }, [onCancel, submitting]);\n\n useEffect(() => {\n setDismissed(false);\n if (!error) return;\n const detailed = detailErrors(error, fields);\n const fallback = /validacao|validation/i.test(normalize(messageOf(error))) ? validate(fields, values) : {};\n const next = Object.keys(detailed).length ? detailed : fallback;\n if (!Object.keys(next).length) return;\n setErrors((current) => ({ ...current, ...next }));\n const first = fields.find((field) => next[field.field]);\n if (first) focusField(first.field);\n }, [error]);\n\n const change = (field: string, value: string) => {\n setValues((current) => ({ ...current, [field]: value }));\n setErrors((current) => { if (!current[field]) return current; const next = { ...current }; delete next[field]; return next; });\n setDismissed(true);\n onFieldChange?.();\n };\n\n const submit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const validation = validate(fields, values);\n if (Object.keys(validation).length) {\n setErrors(validation);\n setDismissed(true);\n const first = fields.find((field) => validation[field.field]);\n if (first) focusField(first.field);\n return;\n }\n const payload: Record<string, unknown> = {};\n fields.forEach((field) => { const value = coerce(values[field.field] ?? \"\", field.kind); if (value !== undefined) payload[field.field] = value; });\n setErrors({});\n onSubmit(payload);\n };\n\n const renderField = (field: ExtendedField, grouped = false): ReactNode => {\n const label = fieldLabel({ name: field.field, label: field.label });\n const message = errors[field.field];\n const id = idFor(field.field);\n const errorId = message ? errorIdFor(field.field) : undefined;\n const multiline = isMultiline(field);\n const span = field.span === 2 || multiline;\n const wrap = (control: ReactNode, showLabel = true) => <Box key={field.field} minW={grouped ? \"150px\" : undefined} flex={grouped ? \"0 1 auto\" : undefined} gridColumn={!grouped && span ? \"1 / -1\" : undefined}>{showLabel ? <Label id={id} label={label} required={field.required} /> : null}{control}<ErrorText id={errorId} text={message} /></Box>;\n\n if (field.widget === \"checkbox\") {\n const checkedValue = String(field.checkedValue ?? true);\n const uncheckedValue = String(field.uncheckedValue ?? false);\n const checked = (values[field.field] ?? uncheckedValue) === checkedValue;\n return wrap(\n <Box\n as=\"label\"\n display=\"flex\"\n minH=\"37px\"\n px=\"11px\"\n alignItems=\"center\"\n gap=\"8px\"\n color=\"#344054\"\n bg={checked ? \"#F0F7FF\" : \"white\"}\n borderWidth=\"1px\"\n borderColor={message ? \"#DC2626\" : checked ? \"#8FC9E7\" : \"#D5DDE3\"}\n borderRadius=\"7px\"\n cursor=\"pointer\"\n transition=\"background .15s ease, border-color .15s ease\"\n _hover={{ borderColor: \"#8FC9E7\", bg: \"#F7FBFE\" }}\n >\n <input\n id={id}\n type=\"checkbox\"\n checked={checked}\n aria-invalid={!!message}\n aria-describedby={errorId}\n style={{ width: 16, height: 16, accentColor: \"#0474AF\", cursor: \"pointer\" }}\n onChange={(event) => change(field.field, event.currentTarget.checked ? checkedValue : uncheckedValue)}\n />\n <Text as=\"span\" fontSize=\"11px\" fontWeight=\"600\">{label}{field.required ? <Text as=\"span\" color=\"#DC2626\"> *</Text> : null}</Text>\n </Box>,\n false,\n );\n }\n if (field.kind === \"ref\" && field.ref) return wrap(<ReferenceSelect field={field.field} inputId={id} errorId={errorId} label={label} refModel={field.ref} value={values[field.field] ?? \"\"} initialValue={initialValues?.[field.field]} required={field.required} invalid={!!message} error={message} onChange={(value) => change(field.field, value)} />);\n if (field.kind === \"enum\" && field.options?.length) return wrap(<NativeSelect.Root size=\"sm\"><NativeSelect.Field id={id} aria-invalid={!!message} aria-describedby={errorId} value={values[field.field] ?? \"\"} {...controlProps(!!message)} onChange={(event) => change(field.field, event.currentTarget.value)}><option value=\"\">— Selecione —</option>{field.options.map((option) => <option key={option} value={option}>{option}</option>)}</NativeSelect.Field><NativeSelect.Indicator /></NativeSelect.Root>);\n if (field.kind === \"boolean\") return wrap(<NativeSelect.Root size=\"sm\"><NativeSelect.Field id={id} aria-invalid={!!message} aria-describedby={errorId} value={values[field.field] ?? \"\"} {...controlProps(!!message)} onChange={(event) => change(field.field, event.currentTarget.value)}><option value=\"\">— Selecione —</option><option value=\"true\">Sim</option><option value=\"false\">Não</option></NativeSelect.Field><NativeSelect.Indicator /></NativeSelect.Root>);\n if (multiline) return wrap(<Textarea id={id} rows={field.rows ?? 4} resize=\"vertical\" aria-invalid={!!message} aria-describedby={errorId} value={values[field.field] ?? \"\"} {...controlProps(!!message)} lineHeight=\"1.5\" onChange={(event) => change(field.field, event.currentTarget.value)} />);\n const type = field.kind === \"date\" ? \"date\" : [\"number\", \"currency\", \"currencyConverted\"].includes(field.kind ?? \"\") ? \"number\" : \"text\";\n return wrap(<Input id={id} type={type} step={type === \"number\" ? \"any\" : undefined} autoComplete=\"off\" aria-invalid={!!message} aria-describedby={errorId} value={values[field.field] ?? \"\"} {...controlProps(!!message)} onChange={(event) => change(field.field, event.currentTarget.value)} />);\n };\n\n const invalid = fields.filter((field) => errors[field.field]);\n const generic = dismissed ? null : messageOf(error);\n\n return (\n <Flex position=\"fixed\" inset={0} zIndex={1000} align=\"center\" justify=\"center\" p={{ base: 2, md: 6 }} bg=\"rgba(15,23,42,.48)\" backdropFilter=\"blur(2px)\" onMouseDown={(event) => { if (event.currentTarget === event.target && !submitting) onCancel(); }}>\n <Box role=\"dialog\" aria-modal=\"true\" aria-label={title} w=\"min(860px, 96vw)\" maxH=\"min(880px, 94vh)\" overflow=\"hidden\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"14px\" boxShadow=\"0 24px 70px rgba(15,23,42,.24)\">\n <Flex minH=\"76px\" px=\"20px\" py=\"16px\" align=\"center\" justify=\"space-between\" borderBottomWidth=\"1px\" borderColor=\"#E5E9ED\">\n <Box><Text color=\"#0474AF\" fontSize=\"10px\" fontWeight=\"600\" letterSpacing=\".07em\" textTransform=\"uppercase\">{eyebrow}</Text><Heading mt=\"3px\" color=\"#344054\" fontSize=\"18px\" fontWeight=\"600\">{title}</Heading></Box>\n <Button type=\"button\" aria-label=\"Fechar\" w=\"31px\" minW=\"31px\" h=\"31px\" p={0} color=\"#667085\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"6px\" disabled={submitting} onClick={onCancel} _hover={{ color: \"#036491\", bg: \"#F0F7FF\", borderColor: \"#B8D9EB\" }}><CloseIcon /></Button>\n </Flex>\n\n <form noValidate onSubmit={submit}>\n <Box maxH=\"calc(94vh - 148px)\" px=\"20px\" pt=\"18px\" pb=\"24px\" overflowY=\"auto\">\n <Stack gap={4}>\n {invalid.length ? <Box role=\"alert\" p=\"11px 13px\" color=\"#9B1C1C\" bg=\"#FFF5F5\" borderWidth=\"1px\" borderColor=\"#FECACA\" borderLeftWidth=\"4px\" borderLeftColor=\"#DC2626\" borderRadius=\"8px\" fontSize=\"11px\"><Flex align=\"center\" gap=\"7px\"><AlertIcon /><Text as=\"strong\">Não foi possível salvar. Corrija os campos abaixo:</Text></Flex><Box as=\"ul\" mt=\"7px\" mb={0} pl=\"20px\" display=\"grid\" gap=\"3px\">{invalid.map((field) => <li key={field.field}><Button type=\"button\" variant=\"plain\" minH=\"auto\" h=\"auto\" p={0} color=\"#B42318\" fontSize=\"10px\" fontWeight=\"400\" textDecoration=\"underline\" onClick={() => focusField(field.field)}>{fieldLabel({ name: field.field, label: field.label })}: {errors[field.field]}</Button></li>)}</Box></Box> : null}\n {generic && !invalid.length ? <Flex role=\"alert\" p=\"10px 12px\" align=\"center\" gap={2} color=\"#B42318\" bg=\"#FEF3F2\" borderWidth=\"1px\" borderColor=\"#FECDCA\" borderRadius=\"7px\" fontSize=\"11px\"><AlertIcon />{generic}</Flex> : null}\n\n <SimpleGrid columns={{ base: 1, lg: 2 }} gapX=\"16px\" gapY=\"15px\">\n {items.map((item) => {\n if (item.type === \"field\") return renderField(item.field);\n const first = item.fields[0];\n const inline = item.fields.some((field) => field.inline !== false);\n return (\n <Box key={item.id} gridColumn=\"1 / -1\" p=\"12px\" bg=\"#FAFCFD\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"9px\">\n <Text color=\"#344054\" fontSize=\"11px\" fontWeight=\"700\">{first.groupLabel ?? item.id}</Text>\n {first.groupDescription ? <Text mt=\"2px\" mb=\"10px\" color=\"#667085\" fontSize=\"10px\">{first.groupDescription}</Text> : <Box h=\"8px\" />}\n <Flex direction={inline ? \"row\" : \"column\"} wrap=\"wrap\" gap=\"9px\">{item.fields.map((field) => renderField(field, true))}</Flex>\n </Box>\n );\n })}\n </SimpleGrid>\n </Stack>\n </Box>\n\n <Flex minH=\"68px\" px=\"20px\" py=\"14px\" justify=\"flex-end\" gap=\"9px\" borderTopWidth=\"1px\" borderColor=\"#E5E9ED\"><Button type=\"button\" minH=\"35px\" px=\"13px\" color=\"#475467\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#D5DDE3\" borderRadius=\"6px\" fontSize=\"11px\" fontWeight=\"600\" disabled={submitting} onClick={onCancel}>Cancelar</Button><Button type=\"submit\" minH=\"35px\" px=\"13px\" colorPalette=\"brand\" borderRadius=\"6px\" fontSize=\"11px\" fontWeight=\"600\" loading={submitting}><CheckIcon /> Salvar</Button></Flex>\n </form>\n </Box>\n </Flex>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Box, Button, Flex, Input, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useModelSchema, useOonResource } from \"../../api/ApiProvider\";\nimport { initialReferenceLabel, referenceId, referenceOptionLabel } from \"./referenceUtils\";\n\nexport interface ReferenceSelectProps {\n field: string;\n inputId?: string;\n errorId?: string;\n label: string;\n refModel: string;\n value: string;\n initialValue?: unknown;\n required?: boolean;\n invalid?: boolean;\n error?: string;\n onChange: (value: string) => void;\n}\n\nfunction SearchIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" width=\"15\" height=\"15\" aria-hidden=\"true\">\n <circle cx=\"8.5\" cy=\"8.5\" r=\"5.25\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"m12.4 12.4 4 4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction ChevronIcon({ open }: { open: boolean }) {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n width=\"16\"\n height=\"16\"\n aria-hidden=\"true\"\n style={{ display: \"block\", transition: \"transform .15s ease\", transform: open ? \"rotate(180deg)\" : \"rotate(0deg)\" }}\n >\n <path d=\"M5.5 7.5 10 12l4.5-4.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nfunction ClearIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path d=\"m6 6 8 8M14 6l-8 8\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/** Campo relacionado no mesmo padrão explícito da Central Minexco. */\nexport function ReferenceSelect({\n field,\n inputId,\n errorId,\n label,\n refModel,\n value,\n initialValue,\n required,\n invalid,\n error,\n onChange,\n}: ReferenceSelectProps) {\n const initialLabel = useMemo(() => initialReferenceLabel(initialValue), [initialValue]);\n const [selectedLabel, setSelectedLabel] = useState(initialLabel);\n const [search, setSearch] = useState(\"\");\n const [debouncedSearch, setDebouncedSearch] = useState(\"\");\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const searchRef = useRef<HTMLInputElement | null>(null);\n const optionRefs = useRef<Array<HTMLButtonElement | null>>([]);\n\n const schemaQuery = useModelSchema(refModel);\n const schema = schemaQuery.data;\n const basePath = schema?.basePath ?? `/${refModel.toLowerCase()}s`;\n const resource = useOonResource<Record<string, unknown>>(basePath);\n\n useEffect(() => {\n const timer = window.setTimeout(() => setDebouncedSearch(search.trim()), 250);\n return () => window.clearTimeout(timer);\n }, [search]);\n\n useEffect(() => {\n if (!value) setSelectedLabel(\"\");\n else if (initialLabel) setSelectedLabel(initialLabel);\n }, [initialLabel, value]);\n\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (event: PointerEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) {\n setOpen(false);\n setActiveIndex(-1);\n }\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n return () => document.removeEventListener(\"pointerdown\", onPointerDown);\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n window.setTimeout(() => searchRef.current?.focus(), 0);\n }, [open]);\n\n const listQuery = useQuery({\n queryKey: [\"oon\", \"reference-options\", refModel, basePath, debouncedSearch],\n queryFn: () => resource.list({ pageIndex: 0, pageSize: 30, searchTerm: debouncedSearch || undefined }),\n enabled: !!schema && open,\n staleTime: 30_000,\n });\n\n const currentQuery = useQuery({\n queryKey: [\"oon\", \"reference-current\", refModel, basePath, value],\n queryFn: () => resource.get(value),\n enabled: !!schema && !!value && !selectedLabel,\n staleTime: 5 * 60_000,\n });\n\n useEffect(() => {\n if (!currentQuery.data) return;\n setSelectedLabel(referenceOptionLabel(currentQuery.data, schema?.searchable));\n }, [currentQuery.data, schema?.searchable]);\n\n const items = listQuery.data?.results ?? [];\n const listId = `oon-reference-${field}`;\n const resolvedInputId = inputId ?? `oon-reference-input-${field}`;\n const activeOptionId = activeIndex >= 0 ? `${listId}-option-${activeIndex}` : undefined;\n\n const openList = (seed = \"\") => {\n if (seed) setSearch(seed);\n setOpen(true);\n setActiveIndex((current) => (current >= 0 ? current : 0));\n };\n\n const closeList = () => {\n setOpen(false);\n setActiveIndex(-1);\n };\n\n const choose = (record: Record<string, unknown>) => {\n const id = referenceId(record);\n if (!id) return;\n onChange(id);\n setSelectedLabel(referenceOptionLabel(record, schema?.searchable));\n setSearch(\"\");\n setDebouncedSearch(\"\");\n closeList();\n };\n\n const clear = (event: React.MouseEvent | React.KeyboardEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onChange(\"\");\n setSelectedLabel(\"\");\n setSearch(\"\");\n setDebouncedSearch(\"\");\n };\n\n const moveActive = (direction: 1 | -1) => {\n if (!items.length) return;\n setActiveIndex((current) => {\n const start = current < 0 ? (direction === 1 ? -1 : 0) : current;\n const next = (start + direction + items.length) % items.length;\n window.setTimeout(() => optionRefs.current[next]?.scrollIntoView({ block: \"nearest\" }), 0);\n return next;\n });\n };\n\n return (\n <Box ref={rootRef} position=\"relative\">\n <Button\n id={resolvedInputId}\n type=\"button\"\n variant=\"outline\"\n w=\"100%\"\n minH=\"37px\"\n h=\"auto\"\n px=\"10px\"\n py=\"8px\"\n justifyContent=\"space-between\"\n gap={2}\n color=\"#475467\"\n bg=\"white\"\n borderColor={invalid ? \"#DC2626\" : \"#D5DDE3\"}\n borderRadius=\"6px\"\n boxShadow={invalid ? \"0 0 0 3px rgba(220,38,38,.08)\" : undefined}\n fontSize=\"11px\"\n fontWeight=\"400\"\n textAlign=\"left\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={listId}\n aria-activedescendant={open ? activeOptionId : undefined}\n aria-required={required}\n aria-invalid={invalid || undefined}\n aria-describedby={error ? errorId : undefined}\n onClick={() => (open ? closeList() : openList())}\n onKeyDown={(event) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n if (!open) openList();\n else moveActive(1);\n return;\n }\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!open) openList();\n else moveActive(-1);\n return;\n }\n if (event.key === \"Enter\" && open && activeIndex >= 0 && items[activeIndex]) {\n event.preventDefault();\n choose(items[activeIndex]);\n return;\n }\n if (event.key === \"Escape\" && open) {\n event.preventDefault();\n event.stopPropagation();\n closeList();\n return;\n }\n if (!event.ctrlKey && !event.metaKey && !event.altKey && event.key.length === 1) {\n event.preventDefault();\n openList(event.key);\n }\n }}\n _hover={{ bg: \"white\", borderColor: \"#B9C7D1\" }}\n _focusVisible={{ borderColor: invalid ? \"#DC2626\" : \"#0F8DD0\", boxShadow: invalid ? \"0 0 0 3px rgba(220,38,38,.08)\" : \"0 0 0 3px rgba(15,141,208,.10)\" }}\n >\n <Text as=\"span\" minW={0} flex=\"1\" overflow=\"hidden\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\" color={selectedLabel || value ? \"#475467\" : \"#98A2B3\"}>\n {selectedLabel || (value ? String(value) : \"Selecione ou digite para pesquisar...\")}\n </Text>\n <Flex as=\"span\" align=\"center\" gap={1} flex=\"0 0 auto\" color=\"#98A2B3\">\n {value ? (\n <Box\n as=\"span\"\n role=\"button\"\n tabIndex={0}\n aria-label={`Limpar ${label}`}\n w=\"20px\"\n h=\"20px\"\n display=\"grid\"\n placeItems=\"center\"\n borderRadius=\"4px\"\n onClick={clear}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") clear(event);\n }}\n _hover={{ color: \"#B42318\", bg: \"#FFF1F1\" }}\n >\n <ClearIcon />\n </Box>\n ) : null}\n <ChevronIcon open={open} />\n </Flex>\n </Button>\n\n {open ? (\n <Box\n position=\"absolute\"\n zIndex={120}\n top=\"calc(100% + 5px)\"\n left={0}\n right={0}\n overflow=\"hidden\"\n bg=\"white\"\n borderWidth=\"1px\"\n borderColor=\"#D5DDE3\"\n borderRadius=\"8px\"\n boxShadow=\"0 10px 30px rgba(15,23,42,.10)\"\n >\n <Flex h=\"38px\" px=\"10px\" align=\"center\" gap=\"7px\" color=\"#98A2B3\" borderBottomWidth=\"1px\" borderColor=\"#E5E9ED\">\n <SearchIcon />\n <Input\n ref={searchRef}\n value={search}\n onChange={(event) => {\n setSearch(event.target.value);\n setActiveIndex(0);\n }}\n placeholder=\"Digite para filtrar...\"\n h=\"100%\"\n p={0}\n color=\"#475467\"\n bg=\"transparent\"\n border={0}\n borderRadius={0}\n fontSize=\"11px\"\n _focusVisible={{ boxShadow: \"none\", outline: \"none\" }}\n onKeyDown={(event) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n moveActive(1);\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n moveActive(-1);\n } else if (event.key === \"Enter\" && activeIndex >= 0 && items[activeIndex]) {\n event.preventDefault();\n choose(items[activeIndex]);\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n closeList();\n }\n }}\n />\n </Flex>\n\n <Stack id={listId} role=\"listbox\" gap={0} maxH=\"230px\" p=\"5px\" overflowY=\"auto\">\n {schemaQuery.isLoading || listQuery.isLoading ? (\n <Flex minH=\"54px\" align=\"center\" justify=\"center\" gap={2} color=\"#98A2B3\" fontSize=\"10px\"><Spinner size=\"xs\" /> Carregando...</Flex>\n ) : schemaQuery.isError || listQuery.isError ? (\n <Text py=\"18px\" px=\"10px\" color=\"#B42318\" fontSize=\"10px\" textAlign=\"center\">Não foi possível carregar as opções.</Text>\n ) : items.length === 0 ? (\n <Text py=\"18px\" px=\"10px\" color=\"#98A2B3\" fontSize=\"10px\" textAlign=\"center\">Nenhum registro encontrado.</Text>\n ) : (\n items.map((record, index) => {\n const id = referenceId(record);\n if (!id) return null;\n const selected = String(id) === String(value);\n const active = index === activeIndex;\n const optionLabel = referenceOptionLabel(record, schema?.searchable);\n const status = record.status;\n return (\n <Button\n id={`${listId}-option-${index}`}\n ref={(element) => { optionRefs.current[index] = element; }}\n key={id}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n w=\"100%\"\n minH=\"38px\"\n h=\"auto\"\n px=\"9px\"\n py=\"7px\"\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"flex-start\"\n gap={0}\n color={active || selected ? \"#014364\" : \"#475467\"}\n bg={active || selected ? \"#F0F7FF\" : \"transparent\"}\n border={0}\n borderRadius=\"5px\"\n fontWeight=\"400\"\n textAlign=\"left\"\n onMouseEnter={() => setActiveIndex(index)}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => choose(record)}\n _hover={{ color: \"#014364\", bg: \"#F0F7FF\" }}\n >\n <Text as=\"strong\" fontSize=\"10px\" fontWeight=\"600\">{optionLabel}</Text>\n {status ? <Text as=\"small\" color=\"#98A2B3\" fontSize=\"9px\" textTransform=\"capitalize\">{String(status).replace(/_/g, \" \")}</Text> : null}\n </Button>\n );\n })\n )}\n </Stack>\n </Box>\n ) : null}\n </Box>\n );\n}\n","const COMMON_LABEL_FIELDS = [\n \"nome\",\n \"razaoSocial\",\n \"razao_social\",\n \"descricao\",\n \"numero\",\n \"codigoIndividual\",\n \"codigo_individual\",\n \"codigo\",\n \"label\",\n \"email\",\n];\n\nfunction primitiveText(value: unknown): string | null {\n if (value == null || value === \"\") return null;\n if (typeof value === \"string\" || typeof value === \"number\") return String(value);\n return null;\n}\n\n/**\n * Resolve um rótulo humano para qualquer registro relacionado. Prioriza campos\n * conhecidos e depois os campos pesquisáveis expostos pela metadata.\n */\nexport function referenceOptionLabel(\n row: Record<string, unknown>,\n searchableFields: string[] = []\n): string {\n const ordered = [...COMMON_LABEL_FIELDS, ...searchableFields];\n const seenFields = new Set<string>();\n const seenValues = new Set<string>();\n const values: string[] = [];\n\n for (const field of ordered) {\n if (seenFields.has(field)) continue;\n seenFields.add(field);\n const text = primitiveText(row[field]);\n if (!text || seenValues.has(text)) continue;\n seenValues.add(text);\n values.push(text);\n if (values.length === 2) break;\n }\n\n if (values.length) return values.join(\" — \");\n return primitiveText(row._id) ?? primitiveText(row.id) ?? \"Registro sem identificação\";\n}\n\nexport function initialReferenceLabel(value: unknown): string {\n if (!value || typeof value !== \"object\") return \"\";\n return referenceOptionLabel(value as Record<string, unknown>);\n}\n\nexport function referenceId(row: Record<string, unknown>): string {\n return String(row._id ?? row.id ?? \"\");\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { Box, Button, Flex, Heading, Text } from \"@chakra-ui/react\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useModelSchema, useOonResource } from \"../../api/ApiProvider\";\nimport type { OonDetailModalConfig, OonRelationDef } from \"../../types\";\nimport { formFieldsFromMeta } from \"./fieldUtils\";\nimport { CoreTabbedDetail } from \"./CoreTabbedDetail\";\n\nexport function CoreDetailModal({ model, title, config, recordId, initialRecord, initialTab, relations, onClose, onSaved }: { model: string; title: string; config: OonDetailModalConfig; recordId?: string; initialRecord?: Record<string, unknown>; initialTab?: string; relations?: Record<string, OonRelationDef>; onClose: () => void; onSaved?: () => void }) {\n const schemaQuery = useModelSchema(model);\n const schema = schemaQuery.data;\n const resource = useOonResource(schema?.basePath ?? `/${model.toLowerCase()}s`);\n const queryClient = useQueryClient();\n const [parent, setParent] = useState<Record<string, unknown> | undefined>(initialRecord);\n const [activeTab, setActiveTab] = useState(initialTab ?? config.defaultTab ?? config.tabs[0]?.id ?? \"dados\");\n const [refreshTokens, setRefreshTokens] = useState<Record<string, number>>({});\n const parentQuery = useQuery({ queryKey: [\"oon\", \"detail\", model, recordId], enabled: !!recordId, queryFn: () => resource.get(recordId!) });\n useEffect(() => { if (parentQuery.data) setParent(parentQuery.data); }, [parentQuery.data]);\n const formFields = useMemo(() => schema ? formFieldsFromMeta(schema.fields) : [], [schema]);\n const refresh = (targets?: string[]) => { const list = targets?.length ? targets : [\"self\"]; if (list.includes(\"parent\") || list.includes(\"all\")) { if (recordId) queryClient.invalidateQueries({ queryKey: [\"oon\", \"detail\", model, recordId] }); onSaved?.(); } setRefreshTokens((current) => { const next = { ...current }; for (const target of list) { if (target === \"all\") config.tabs.forEach((tab) => next[tab.id] = (next[tab.id] ?? 0) + 1); else if (target !== \"parent\") next[target === \"self\" ? activeTab : target] = (next[target === \"self\" ? activeTab : target] ?? 0) + 1; } return next; }); };\n const width = config.size === \"full\" ? \"98vw\" : config.size === \"md\" ? \"760px\" : config.size === \"lg\" ? \"980px\" : \"1180px\";\n const displayTitle = parent?.[config.titleField ?? \"\"] ? String(parent[config.titleField ?? \"\"]) : title;\n return <Flex position=\"fixed\" inset={0} zIndex={1000} align=\"center\" justify=\"center\" p={4} bg=\"rgba(15,23,42,.48)\"><Box role=\"dialog\" aria-modal=\"true\" w={`min(${width}, 98vw)`} maxH=\"94vh\" overflow=\"hidden\" bg=\"white\" borderRadius=\"14px\" boxShadow=\"0 24px 70px rgba(15,23,42,.24)\"><Flex minH=\"72px\" px=\"20px\" align=\"center\" justify=\"space-between\" borderBottomWidth=\"1px\" borderColor=\"#E5E9ED\"><Box><Text color=\"#0474AF\" fontSize=\"10px\" fontWeight=\"700\" textTransform=\"uppercase\">Detalhe</Text><Heading size=\"md\">{recordId ? displayTitle : `Novo ${title}`}</Heading></Box><Button onClick={onClose}>Fechar</Button></Flex><Box maxH=\"calc(94vh - 73px)\" p=\"20px\" overflowY=\"auto\">{schemaQuery.isLoading || parentQuery.isLoading ? <Text>Carregando...</Text> : <CoreTabbedDetail tabs={config.tabs} activeTab={activeTab} onTabChange={setActiveTab} parent={parent} formFields={formFields} resource={resource} relations={relations} refreshTokens={refreshTokens} onRefresh={refresh} onParentSaved={(saved) => { setParent(saved); onSaved?.(); refresh([\"parent\"]); }} />}</Box></Box></Flex>;\n}\n","import { useEffect, useState } from \"react\";\nimport { Box, Button, Flex, Input, NativeSelect, SimpleGrid, Stack, Text } from \"@chakra-ui/react\";\nimport type { OonDetailTabDef, OonFormFieldDef, OonRelationDef } from \"../../types\";\nimport type { ResourceClient } from \"../../api/resourceClient\";\nimport { CoreSummaryCards } from \"./CoreSummaryCards\";\nimport { CoreRelatedGrid } from \"./CoreRelatedGrid\";\nimport { fieldLabel } from \"./fieldUtils\";\nimport { fieldsForTab } from \"./manifestUtils\";\n\nfunction coerce(value: string, kind?: string) { if (value === \"\") return undefined; if ([\"number\", \"currency\", \"currencyConverted\"].includes(kind ?? \"\")) return Number(value); if (kind === \"boolean\") return value === \"true\"; return value; }\nfunction toValue(value: unknown) { return value == null ? \"\" : String(typeof value === \"object\" ? ((value as Record<string, unknown>)._id ?? \"\") : value); }\n\nfunction InlineParentForm({ fields, parent, resource, onSaved }: { fields: OonFormFieldDef[]; parent: Record<string, unknown>; resource: ResourceClient; onSaved: (record: Record<string, unknown>) => void }) {\n const [values, setValues] = useState<Record<string, string>>({});\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<unknown>(null);\n useEffect(() => setValues(Object.fromEntries(fields.map((f) => [f.field, toValue(parent[f.field])]))), [parent, fields]);\n return <form onSubmit={async (event) => { event.preventDefault(); setSaving(true); setError(null); try { const payload = Object.fromEntries(fields.map((f) => [f.field, coerce(values[f.field] ?? \"\", f.kind)]).filter(([, v]) => v !== undefined)); const saved = parent._id ? await resource.update(String(parent._id), payload) : await resource.create(payload); onSaved(saved); } catch (err) { setError(err); } finally { setSaving(false); } }}><Stack gap={4}>{error ? <Text color=\"#B42318\" fontSize=\"11px\">Não foi possível salvar.</Text> : null}<SimpleGrid columns={{ base: 1, md: 2 }} gap={3}>{fields.map((field) => <Box key={field.field}><Text as=\"label\" display=\"block\" mb=\"5px\" fontSize=\"11px\" fontWeight=\"600\">{fieldLabel({ name: field.field, label: field.label })}</Text>{field.kind === \"boolean\" ? <NativeSelect.Root size=\"sm\"><NativeSelect.Field value={values[field.field] ?? \"\"} onChange={(e) => setValues((v) => ({ ...v, [field.field]: e.currentTarget.value }))}><option value=\"\">—</option><option value=\"true\">Sim</option><option value=\"false\">Não</option></NativeSelect.Field><NativeSelect.Indicator /></NativeSelect.Root> : <Input size=\"sm\" type={field.kind === \"date\" ? \"date\" : [\"number\", \"currency\"].includes(field.kind ?? \"\") ? \"number\" : \"text\"} value={values[field.field] ?? \"\"} onChange={(e) => setValues((v) => ({ ...v, [field.field]: e.currentTarget.value }))} />}</Box>)}</SimpleGrid><Flex justify=\"flex-end\"><Button type=\"submit\" colorPalette=\"brand\" loading={saving}>Salvar dados principais</Button></Flex></Stack></form>;\n}\n\nexport function CoreTabbedDetail({ tabs, activeTab, onTabChange, parent, formFields, resource, relations, refreshTokens, onRefresh, onParentSaved }: { tabs: OonDetailTabDef[]; activeTab: string; onTabChange: (id: string) => void; parent?: Record<string, unknown>; formFields: OonFormFieldDef[]; resource: ResourceClient; relations?: Record<string, OonRelationDef>; refreshTokens: Record<string, number>; onRefresh: (targets?: string[]) => void; onParentSaved: (record: Record<string, unknown>) => void }) {\n const active = tabs.find((tab) => tab.id === activeTab) ?? tabs[0];\n return <Stack gap={4}><Flex gap={2} borderBottomWidth=\"1px\" borderColor=\"#E5E9ED\" overflowX=\"auto\">{tabs.map((tab) => { const disabled = !parent?._id && (tab.type === \"relatedGrid\" || tab.type === \"readonlyGrid\" || tab.type === \"summary\"); return <Button key={tab.id} type=\"button\" variant={active?.id === tab.id ? \"solid\" : \"ghost\"} colorPalette={active?.id === tab.id ? \"brand\" : undefined} disabled={disabled} onClick={() => onTabChange(tab.id)}>{tab.label}</Button>; })}</Flex><Box>{!active ? null : active.type === \"summary\" && parent ? <CoreSummaryCards cards={active.cards} parent={parent} relations={relations} /> : active.type === \"form\" ? <InlineParentForm fields={fieldsForTab(formFields, active.fields ?? active.groups?.flatMap((g) => g.fields))} parent={parent ?? {}} resource={resource} onSaved={onParentSaved} /> : (active.type === \"relatedGrid\" || active.type === \"readonlyGrid\") && parent ? <CoreRelatedGrid tab={active} parent={parent} relations={relations} refreshToken={refreshTokens[active.id]} onRefresh={onRefresh} /> : active.type === \"customComponent\" ? <Text color=\"#667085\">Componente customizado: {active.component}</Text> : <Text color=\"#667085\">Salve o registro principal para liberar esta aba.</Text>}</Box></Stack>;\n}\n","import { SimpleGrid, Box, Text, Badge } from \"@chakra-ui/react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useModelSchema, useOonResource } from \"../../api/ApiProvider\";\nimport type { OonRelationDef, OonSummaryCardDef } from \"../../types\";\nimport { formatCell } from \"./fieldUtils\";\nimport { relationFrom } from \"./manifestUtils\";\n\nfunction format(value: unknown, format?: string) {\n if (format === \"currency\") return new Intl.NumberFormat(\"pt-BR\", { style: \"currency\", currency: \"BRL\" }).format(Number(value ?? 0));\n if (format === \"percent\") return `${Number(value ?? 0).toLocaleString(\"pt-BR\")}%`;\n if (format === \"date\") return formatCell(value, \"date\");\n return value == null || value === \"\" ? \"—\" : String(value);\n}\n\nfunction RelatedMetric({ card, relation, parent }: { card: OonSummaryCardDef; relation: OonRelationDef; parent: Record<string, unknown> }) {\n const schema = useModelSchema(relation.model).data;\n const resource = useOonResource(schema?.basePath ?? `/${relation.model.toLowerCase()}s`);\n const parentValue = parent[relation.parentKey ?? \"_id\"];\n const query = useQuery({ queryKey: [\"oon\", \"summary\", relation.model, relation.foreignKey, parentValue, card.source, card.field], queryFn: () => resource.list({ [relation.foreignKey]: parentValue, pageSize: 1000 }) });\n const rows = query.data?.results ?? [];\n let value: unknown = rows.length;\n if (card.source === \"relatedSum\") value = rows.reduce((sum, row) => sum + Number(row[card.field ?? \"\"] ?? 0), 0);\n if (card.source === \"relatedAvg\") value = rows.length ? rows.reduce((sum, row) => sum + Number(row[card.field ?? \"\"] ?? 0), 0) / rows.length : 0;\n return <>{query.isLoading ? \"...\" : format(value, card.format)}</>;\n}\n\nexport function CoreSummaryCards({ cards = [], parent, relations }: { cards?: OonSummaryCardDef[]; parent: Record<string, unknown>; relations?: Record<string, OonRelationDef> }) {\n return <SimpleGrid columns={{ base: 1, md: 3 }} gap={3}>{cards.map((card, index) => {\n const relation = card.relation ? relationFrom(card.relation, relations) : undefined;\n const content = relation && card.source?.startsWith(\"related\") ? <RelatedMetric card={card} relation={relation} parent={parent} /> : format(parent[card.field ?? \"\"], card.format);\n return <Box key={`${card.label}-${index}`} p=\"14px\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"10px\"><Text color=\"#667085\" fontSize=\"10px\" fontWeight=\"600\">{card.label}</Text><Text mt=\"6px\" color=\"#24323A\" fontSize=\"20px\" fontWeight=\"700\">{card.format === \"badge\" ? <Badge>{content}</Badge> : content}</Text></Box>;\n })}</SimpleGrid>;\n}\n","import type { FieldMeta, ModelSummary, OonColumnDef, OonFormFieldDef, OonRelatedGridColumnDef, OonRelationDef } from \"../../types\";\nimport { fieldLabel } from \"./fieldUtils\";\n\nexport function normalizeColumn(column: string | OonColumnDef | OonRelatedGridColumnDef, schema?: ModelSummary): OonRelatedGridColumnDef {\n if (typeof column !== \"string\") {\n const meta = schema?.fields.find((field) => field.name === column.field);\n return { label: meta ? fieldLabel(meta) : column.field, kind: meta?.kind, ...column };\n }\n const meta = schema?.fields.find((field) => field.name === column);\n return { field: column, label: meta ? fieldLabel(meta) : fieldLabel({ name: column }), kind: meta?.kind, sortable: true };\n}\n\nexport function fieldsForTab(fields: OonFormFieldDef[], selected?: string[]) {\n if (!selected?.length) return fields;\n const wanted = new Set(selected);\n return fields.filter((field) => wanted.has(field.field));\n}\n\nexport function relationFrom(input: string | OonRelationDef, relations?: Record<string, OonRelationDef>): OonRelationDef | undefined {\n return typeof input === \"string\" ? relations?.[input] : input;\n}\n\nexport function kindFromMeta(field: string, schema?: ModelSummary): FieldMeta | undefined {\n return schema?.fields.find((item) => item.name === field);\n}\n","import { useMemo, useState } from \"react\";\nimport { Badge, Box, Button, Flex, Table, Text } from \"@chakra-ui/react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useModelSchema, useOonResource } from \"../../api/ApiProvider\";\nimport type { OonDetailTabDef, OonRelationDef } from \"../../types\";\nimport { formatCell } from \"./fieldUtils\";\nimport { CoreInlineEditableCell } from \"./CoreInlineEditableCell\";\nimport { CoreRowAction } from \"./CoreRowAction\";\nimport { normalizeColumn, relationFrom } from \"./manifestUtils\";\n\nexport function CoreRelatedGrid({ tab, parent, relations, refreshToken, onRefresh }: { tab: Extract<OonDetailTabDef, { type: \"relatedGrid\" | \"readonlyGrid\" }>; parent: Record<string, unknown>; relations?: Record<string, OonRelationDef>; refreshToken?: number; onRefresh?: (targets?: string[]) => void }) {\n const relation = relationFrom(tab.relation, relations);\n const schemaQuery = useModelSchema(relation?.model ?? \"\");\n const schema = schemaQuery.data;\n const resource = useOonResource(schema?.basePath ?? `/${relation?.model?.toLowerCase() ?? \"related\"}s`);\n const queryClient = useQueryClient();\n const parentValue = relation ? parent[relation.parentKey ?? \"_id\"] : undefined;\n const key = [\"oon\", \"related\", relation?.model, relation?.foreignKey, parentValue, refreshToken];\n const query = useQuery({ queryKey: key, enabled: !!relation && parentValue != null, queryFn: () => resource.list({ [relation!.foreignKey]: parentValue, pageSize: 1000 }) });\n const columns = useMemo(() => (tab.columns?.length ? tab.columns : schema?.fields.slice(0, 8).map((f) => f.name) ?? []).map((column) => normalizeColumn(column, schema)).filter((column) => !column.hidden), [tab.columns, schema]);\n const [drafts, setDrafts] = useState<Record<string, Record<string, unknown>>>({});\n const [errors, setErrors] = useState<Record<string, unknown>>({});\n const editable = tab.type === \"relatedGrid\" && tab.editable && tab.editMode === \"inline\";\n const mutation = useMutation({ mutationFn: ({ id, values }: { id: string; values: Record<string, unknown> }) => resource.update(id, values), onSuccess: () => { queryClient.invalidateQueries({ queryKey: key }); onRefresh?.([\"self\"]); } });\n if (!relation) return <Text color=\"#B42318\">Relação não encontrada.</Text>;\n if (query.isLoading) return <Text color=\"#667085\">Carregando...</Text>;\n const rows = query.data?.results ?? [];\n const setDraft = (id: string, field: string, value: unknown) => setDrafts((current) => ({ ...current, [id]: { ...(current[id] ?? {}), [field]: value } }));\n return <Box overflowX=\"auto\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"10px\"><Table.Root size=\"sm\" minW=\"760px\"><Table.Header><Table.Row bg=\"#F4F7F9\">{columns.map((c) => <Table.ColumnHeader key={c.field} fontSize=\"10px\">{c.label ?? c.field}</Table.ColumnHeader>)}{(editable || tab.rowActions?.length) ? <Table.ColumnHeader>Ações</Table.ColumnHeader> : null}</Table.Row></Table.Header><Table.Body>{rows.map((row, index) => { const id = String(row._id ?? row.id ?? index); const draft = drafts[id] ?? {}; const dirty = Object.keys(draft).length > 0; return <Table.Row key={id} bg={dirty ? \"#FFFBEB\" : index % 2 ? \"#FBFCFD\" : \"white\"}>{columns.map((column) => { const value = column.field in draft ? draft[column.field] : row[column.field]; const meta = schema?.fields.find((f) => f.name === column.field); const canEdit = editable && column.readonly !== true && (column.editable === true || !column.readonly); return <Table.Cell key={column.field} fontSize=\"11px\">{canEdit ? <CoreInlineEditableCell column={column} meta={meta} value={value} onChange={(next) => setDraft(id, column.field, next)} /> : column.display === \"badgeExists\" ? <Badge colorPalette={value ? \"green\" : \"gray\"}>{value ? \"Sim\" : \"Não\"}</Badge> : formatCell(value, column.kind)}</Table.Cell>; })}{(editable || tab.rowActions?.length) ? <Table.Cell><Flex gap=\"5px\" align=\"center\" wrap=\"wrap\">{dirty ? <><Button size=\"xs\" loading={mutation.isPending} onClick={() => { setErrors((e) => ({ ...e, [id]: undefined })); mutation.mutate({ id, values: draft }, { onSuccess: () => setDrafts((d) => { const n = { ...d }; delete n[id]; return n; }), onError: (err) => setErrors((e) => ({ ...e, [id]: err })) }); }}>Salvar</Button><Button size=\"xs\" variant=\"outline\" onClick={() => setDrafts((d) => { const n = { ...d }; delete n[id]; return n; })}>Cancelar</Button></> : null}{tab.rowActions?.map((action) => <CoreRowAction key={action.id ?? action.label} action={action} row={row} parent={parent} onRefresh={onRefresh} />)}{errors[id] ? <Text color=\"#B42318\" fontSize=\"9px\">Erro ao salvar.</Text> : null}</Flex></Table.Cell> : null}</Table.Row>; })}{rows.length === 0 ? <Table.Row><Table.Cell colSpan={columns.length + 1}><Text p=\"8\" textAlign=\"center\" color=\"#98A2B3\">Nenhum registro relacionado.</Text></Table.Cell></Table.Row> : null}</Table.Body></Table.Root></Box>;\n}\n","import { Input, NativeSelect, Textarea } from \"@chakra-ui/react\";\nimport type { FieldMeta, OonRelatedGridColumnDef } from \"../../types\";\n\nexport function CoreInlineEditableCell({ column, meta, value, onChange }: { column: OonRelatedGridColumnDef; meta?: FieldMeta; value: unknown; onChange: (value: unknown) => void }) {\n const kind = column.editor ?? meta?.kind ?? column.kind ?? \"string\";\n const common = { size: \"xs\" as const, fontSize: \"11px\", value: value == null ? \"\" : String(value), onChange: (event: React.ChangeEvent<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>) => onChange(event.currentTarget.value) };\n if (kind === \"boolean\") return <NativeSelect.Root size=\"xs\"><NativeSelect.Field {...common}><option value=\"\">—</option><option value=\"true\">Sim</option><option value=\"false\">Não</option></NativeSelect.Field><NativeSelect.Indicator /></NativeSelect.Root>;\n if ((kind === \"enum\" || kind === \"select\") && meta?.options?.length) return <NativeSelect.Root size=\"xs\"><NativeSelect.Field {...common}><option value=\"\">—</option>{meta.options.map((option) => <option key={option} value={option}>{option}</option>)}</NativeSelect.Field><NativeSelect.Indicator /></NativeSelect.Root>;\n if (kind === \"textarea\") return <Textarea {...common} rows={2} />;\n const type = kind === \"date\" ? \"date\" : [\"number\", \"currency\"].includes(kind) ? \"number\" : \"text\";\n return <Input {...common} type={type} step={type === \"number\" ? \"any\" : undefined} />;\n}\n","import { useState } from \"react\";\nimport { Button, Text } from \"@chakra-ui/react\";\nimport { useOonApi } from \"../../api/ApiProvider\";\nimport type { OonRowActionDef } from \"../../types\";\nimport { evaluateCondition, interpolateEndpoint } from \"./conditions\";\n\nexport interface CoreRowActionProps {\n action: OonRowActionDef;\n row: Record<string, unknown>;\n parent?: Record<string, unknown>;\n onOpenDetail?: (row: Record<string, unknown>, initialTab?: string) => void;\n onRefresh?: (targets?: string[]) => void;\n}\n\nfunction messageOf(error: unknown) {\n return error instanceof Error ? error.message : typeof error === \"string\" ? error : \"Não foi possível executar a ação.\";\n}\n\nexport function CoreRowAction({ action, row, parent, onOpenDetail, onRefresh }: CoreRowActionProps) {\n const { http } = useOonApi();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<unknown>(null);\n if (evaluateCondition(action.hiddenWhen, row)) return null;\n const disabled = evaluateCondition(action.disabledWhen, row) || loading;\n\n const run = async () => {\n setError(null);\n if (action.type === \"openDetailModal\") return onOpenDetail?.(row, action.initialTab);\n if (action.type === \"navigate\") {\n const href = action.href ?? action.endpoint;\n if (href) window.location.assign(interpolateEndpoint(href, row, parent));\n return;\n }\n if (action.type !== \"apiAction\" || !action.endpoint) return;\n const ok = action.confirm ? window.confirm(action.confirm.description ?? action.confirm.title ?? `Executar ${action.label}?`) : true;\n if (!ok) return;\n setLoading(true);\n try {\n const url = interpolateEndpoint(action.endpoint, row, parent);\n await http.request({ url, method: action.method ?? \"POST\" });\n onRefresh?.(action.refresh);\n } catch (err) {\n setError(err);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <span>\n <Button type=\"button\" size=\"xs\" minH=\"28px\" px=\"9px\" borderRadius=\"6px\" fontSize=\"10px\" loading={loading} disabled={disabled} onClick={run}>\n {action.label}\n </Button>\n {error ? <Text mt=\"3px\" color=\"#B42318\" fontSize=\"9px\">{messageOf(error)}</Text> : null}\n </span>\n );\n}\n","import type { OonConditionDef } from \"../../types\";\n\nfunction valueAt(source: Record<string, unknown> | undefined, path: string): unknown {\n if (!source) return undefined;\n return path.split(\".\").reduce<unknown>((current, part) => {\n if (current && typeof current === \"object\") return (current as Record<string, unknown>)[part];\n return undefined;\n }, source);\n}\n\nexport function evaluateCondition(condition: OonConditionDef | undefined, row: Record<string, unknown> | undefined): boolean {\n if (!condition) return false;\n const value = valueAt(row, condition.field);\n if (\"exists\" in condition) return condition.exists ? value != null && value !== \"\" : value == null || value === \"\";\n if (\"equals\" in condition) return value === condition.equals;\n if (\"notEquals\" in condition) return value !== condition.notEquals;\n if (\"in\" in condition) return condition.in.includes(value);\n const numeric = Number(value);\n if (Number.isNaN(numeric)) return false;\n if (\"gt\" in condition) return numeric > condition.gt;\n if (\"gte\" in condition) return numeric >= condition.gte;\n if (\"lt\" in condition) return numeric < condition.lt;\n if (\"lte\" in condition) return numeric <= condition.lte;\n return false;\n}\n\nexport function interpolateEndpoint(endpoint: string, row: Record<string, unknown>, parent?: Record<string, unknown>) {\n return endpoint.replace(/:([A-Za-z0-9_.]+)/g, (_, token: string) => {\n if (token === \"id\") return encodeURIComponent(String(row._id ?? row.id ?? \"\"));\n if (token === \"parentId\") return encodeURIComponent(String(parent?._id ?? parent?.id ?? \"\"));\n if (token.startsWith(\"parent.\")) return encodeURIComponent(String(valueAt(parent, token.slice(7)) ?? \"\"));\n return encodeURIComponent(String(valueAt(row, token) ?? \"\"));\n });\n}\n","import type { OonColumnDef, OonFormFieldDef } from \"../types\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { CoreCollection } from \"./CoreCollection\";\n\nexport interface CoreDocumentProps {\n model: string;\n label?: string;\n endpoint?: string;\n columns?: OonColumnDef[];\n form?: OonFormFieldDef[];\n /** liga ações de aprovar/reprovar (RESTful: /:id/actions/approve|reject). */\n approval?: boolean;\n /** liga gestão de anexos (futuro: /:id/files). */\n attachments?: boolean;\n}\n\n/**\n * Tipo documental. Hoje reusa a coleção genérica (list + CRUD). Quando\n * `approval` está ligado, expõe o helper `approveDocument` para as ações\n * RESTful do back (Seção 5.2) — documentos fiscais e cadastrais viram\n * configuração, não páginas escritas à mão.\n */\nexport function CoreDocument({ model, label, endpoint, columns, form }: CoreDocumentProps) {\n return (\n <CoreCollection\n model={model}\n label={label}\n mode={columns && form ? \"full\" : \"dynamic\"}\n endpoint={endpoint}\n columns={columns}\n form={form}\n />\n );\n}\n\n/**\n * Aciona uma ação RESTful de documento (approve/reject/archive). Exposto para\n * o domínio usar em botões de linha sem reimplementar a chamada.\n */\nexport function useDocumentAction(basePath: string) {\n const { http } = useOonApi();\n return (id: string, action: \"approve\" | \"reject\" | \"archive\") =>\n http.post(`${basePath}/${id}/actions/${action}`, {}, { headers: { \"x-oon-origin\": \"form\" } });\n}\n","import { useState } from \"react\";\nimport { Badge, Box, Button, Flex, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useModelSchema, useOonResource } from \"../api/ApiProvider\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\nimport { ErrorState } from \"../shell/ErrorState\";\nimport { DynamicForm } from \"./internal/DynamicForm\";\nimport { fieldLabel, formatCell, formFieldsFromMeta } from \"./internal/fieldUtils\";\n\nexport interface CorePipelineProps {\n model: string;\n label?: string;\n endpoint?: string;\n stageField?: string;\n stages?: Array<{ id: string; label: string }>;\n titleField?: string;\n}\n\nfunction ticketId(row: Record<string, unknown>): string | undefined {\n const id = row._id ?? row.id;\n return id == null ? undefined : String(id);\n}\n\n/** Esteira horizontal padrão, com tickets clicáveis e formulário completo em modal. */\nexport function CorePipeline({ model, label, endpoint, stageField = \"status\", stages, titleField }: CorePipelineProps) {\n const schemaQuery = useModelSchema(model);\n const schema = schemaQuery.data;\n const basePath = endpoint ?? schema?.basePath ?? `/${model.toLowerCase()}s`;\n const resource = useOonResource(basePath);\n const queryClient = useQueryClient();\n const [selectedTicket, setSelectedTicket] = useState<Record<string, unknown> | null>(null);\n const [formError, setFormError] = useState<unknown>(null);\n\n const listQuery = useQuery({\n queryKey: [\"oon\", \"pipeline\", basePath],\n queryFn: () => resource.list({ pageSize: 200 }),\n enabled: !!schema,\n });\n\n const saveMutation = useMutation({\n mutationFn: (values: Record<string, unknown>) => {\n const id = selectedTicket ? ticketId(selectedTicket) : undefined;\n if (!id) throw new Error(\"Não foi possível identificar o ticket selecionado.\");\n return resource.update(id, values);\n },\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey: [\"oon\", \"pipeline\", basePath] });\n setSelectedTicket(null);\n setFormError(null);\n },\n onError: (error) => setFormError(error),\n });\n\n if (schemaQuery.isLoading || listQuery.isLoading) return <LoadingScreen />;\n if (schemaQuery.isError) return <ErrorState error={schemaQuery.error} />;\n if (listQuery.isError) return <ErrorState error={listQuery.error} />;\n\n const stageFieldMeta = schema?.fields.find((field) => field.name === stageField);\n const resolvedStages = stages ?? (stageFieldMeta?.options ?? []).map((option) => ({ id: option, label: option }));\n const title = titleField ?? schema?.fields.find((field) => field.kind === \"string\")?.name ?? schema?.searchable[0] ?? \"_id\";\n const detailFields = (schema?.fields ?? [])\n .filter((field) => field.name !== stageField && field.name !== title && ![\"raw\"].includes(field.kind))\n .slice(0, 3);\n const formFields = formFieldsFromMeta(schema?.fields ?? []);\n\n const rows = listQuery.data?.results ?? [];\n const byStage = new Map<string, Record<string, unknown>[]>();\n for (const stage of resolvedStages) byStage.set(stage.id, []);\n for (const row of rows) {\n const key = String(row[stageField] ?? \"\");\n if (!byStage.has(key)) byStage.set(key, []);\n byStage.get(key)!.push(row);\n }\n\n return (\n <Stack gap={5}>\n <Box>\n <Text fontSize=\"11px\" fontWeight=\"700\" color=\"brand.500\" textTransform=\"uppercase\" letterSpacing=\"0.08em\" mb={1}>\n Esteira de processo\n </Text>\n <Heading size=\"lg\" color=\"#24323A\" letterSpacing=\"-0.02em\">\n {label ?? schema?.name ?? model}\n </Heading>\n <Text mt={1} fontSize=\"13px\" color=\"gray.500\">\n Acompanhe os tickets por etapa e visualize os principais dados de cada item.\n </Text>\n </Box>\n\n <Flex gap={4} align=\"stretch\" overflowX=\"auto\" pb={3} minH=\"420px\">\n {Array.from(byStage.entries()).map(([stageId, items]) => {\n const stageLabel = resolvedStages.find((stage) => stage.id === stageId)?.label ?? (stageId || \"Sem etapa\");\n return (\n <Box\n key={stageId}\n minW=\"300px\"\n maxW=\"340px\"\n flex=\"1 0 300px\"\n bg=\"#E8ECEF\"\n borderRadius=\"12px\"\n p={3}\n borderWidth=\"1px\"\n borderColor=\"#DDE3E7\"\n >\n <Flex align=\"center\" justify=\"space-between\" mb={3} px={1}>\n <Text fontWeight=\"700\" fontSize=\"12px\" color=\"#33434C\" textTransform=\"uppercase\" letterSpacing=\"0.03em\">\n {stageLabel}\n </Text>\n <Badge colorPalette=\"brand\" variant=\"solid\" borderRadius=\"full\" minW=\"24px\" justifyContent=\"center\">\n {items.length}\n </Badge>\n </Flex>\n\n <Stack gap={2}>\n {items.length === 0 ? (\n <Box borderWidth=\"1px\" borderStyle=\"dashed\" borderColor=\"#C8D0D5\" borderRadius=\"10px\" p={5} textAlign=\"center\">\n <Text fontSize=\"12px\" color=\"gray.500\">Nenhum ticket nesta etapa.</Text>\n </Box>\n ) : (\n items.map((row, index) => {\n const ticketTitle = formatCell(row[title], \"string\");\n return (\n <Button\n key={ticketId(row) ?? index}\n type=\"button\"\n variant=\"plain\"\n display=\"block\"\n w=\"100%\"\n h=\"auto\"\n minH=\"auto\"\n p={3}\n bg=\"white\"\n borderRadius=\"10px\"\n borderWidth=\"1px\"\n borderColor=\"#DDE3E7\"\n boxShadow=\"0 3px 10px rgba(7, 38, 46, 0.05)\"\n textAlign=\"left\"\n whiteSpace=\"normal\"\n transition=\"all 0.15s ease\"\n aria-label={`Abrir ticket ${ticketTitle}`}\n onClick={() => {\n setFormError(null);\n setSelectedTicket(row);\n }}\n _hover={{ borderColor: \"brand.300\", transform: \"translateY(-1px)\", boxShadow: \"0 7px 18px rgba(7, 38, 46, 0.09)\" }}\n _focusVisible={{ borderColor: \"brand.500\", boxShadow: \"0 0 0 3px rgba(4, 116, 175, 0.16)\" }}\n >\n <Text fontSize=\"13px\" fontWeight=\"700\" color=\"#24323A\" mb={2} lineClamp={2}>\n {ticketTitle}\n </Text>\n <Stack gap={1}>\n {detailFields.map((field) => (\n <Flex key={field.name} gap={2} align=\"baseline\" justify=\"space-between\">\n <Text fontSize=\"10px\" color=\"gray.500\" textTransform=\"uppercase\" letterSpacing=\"0.03em\">\n {fieldLabel(field)}\n </Text>\n <Text fontSize=\"11px\" color=\"#46545C\" fontWeight=\"500\" textAlign=\"right\" lineClamp={1}>\n {formatCell(row[field.name], field.kind)}\n </Text>\n </Flex>\n ))}\n </Stack>\n </Button>\n );\n })\n )}\n </Stack>\n </Box>\n );\n })}\n </Flex>\n\n {selectedTicket ? (\n <DynamicForm\n title={`Editar ${schema?.singular ?? label ?? model}`}\n eyebrow=\"Ticket\"\n fields={formFields}\n initialValues={selectedTicket}\n submitting={saveMutation.isPending}\n error={formError}\n onSubmit={(values) => {\n setFormError(null);\n saveMutation.mutate(values);\n }}\n onFieldChange={() => setFormError(null)}\n onCancel={() => {\n if (saveMutation.isPending) return;\n setSelectedTicket(null);\n setFormError(null);\n }}\n />\n ) : null}\n </Stack>\n );\n}\n","import { Box, Heading, SimpleGrid, Stack, Text } from \"@chakra-ui/react\";\nimport { useQueries } from \"@tanstack/react-query\";\nimport type { DashboardWidgetDef } from \"../types\";\nimport { useOonApi } from \"../api/ApiProvider\";\n\nexport interface CoreDashboardProps {\n label?: string;\n widgets?: DashboardWidgetDef[];\n}\n\n/**\n * Dashboard do Core: renderiza widgets registrados (count/sum por model ou\n * render custom). Cache, loading e erro ficam no Core; a Central só declara.\n */\nexport function CoreDashboard({ label = \"Dashboard\", widgets = [] }: CoreDashboardProps) {\n const { resource } = useOonApi();\n\n const queries = useQueries({\n queries: widgets\n .filter((w) => w.kind !== \"custom\" && w.model)\n .map((w) => ({\n queryKey: [\"oon\", \"widget\", w.id],\n queryFn: async () => {\n const r = await resource(`/${w.model!.toLowerCase()}s`).list({ pageSize: w.kind === \"sum\" ? 200 : 1 });\n if (w.kind === \"sum\" && w.field) {\n return r.results.reduce((acc, row) => acc + Number((row as Record<string, unknown>)[w.field!] ?? 0), 0);\n }\n return r.pagination.totalItems;\n },\n staleTime: 60 * 1000,\n })),\n });\n\n let queryIdx = 0;\n\n return (\n <Stack gap={6}>\n <Heading size=\"lg\">{label}</Heading>\n <SimpleGrid columns={{ base: 1, md: 2, lg: 3 }} gap={4}>\n {widgets.map((w) => {\n if (w.kind === \"custom\" && w.render) {\n return (\n <Box key={w.id} borderWidth=\"1px\" borderColor=\"gray.200\" borderRadius=\"md\" bg=\"white\" p={5}>\n {w.render()}\n </Box>\n );\n }\n const q = queries[queryIdx++];\n const value = q?.isLoading ? \"…\" : q?.isError ? \"—\" : formatWidget(q?.data, w.kind, w.field);\n return (\n <Box key={w.id} borderWidth=\"1px\" borderColor=\"gray.200\" borderRadius=\"md\" bg=\"white\" p={5}>\n <Text fontSize=\"sm\" color=\"gray.500\">\n {w.label}\n </Text>\n <Heading size=\"xl\" mt={1}>\n {value}\n </Heading>\n </Box>\n );\n })}\n </SimpleGrid>\n </Stack>\n );\n}\n\nfunction formatWidget(value: unknown, kind?: string, field?: string): string {\n if (value == null) return \"—\";\n if ((kind === \"sum\" && field?.toLowerCase().includes(\"valor\")) || kind === \"sum\") {\n return new Intl.NumberFormat(\"pt-BR\", { style: \"currency\", currency: \"BRL\" }).format(Number(value));\n }\n return String(value);\n}\n","import { Box, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport type { OonBlockDef, OonComponentRegistry, OonPageDef } from \"../../types\";\nimport { PermissionGate } from \"../../security/PermissionGate\";\nimport { resolveComponent, MissingRenderer } from \"../../app/componentRegistry\";\nimport { CoreDataGrid, CoreCards, CorePage as CorePageShell, CorePageHeader } from \"./CorePrimitives\";\n\nfunction renderMarkdown(content: string) {\n return content.split(/\\n{2,}/).map((paragraph, index) => <Text key={index} whiteSpace=\"pre-wrap\">{paragraph}</Text>);\n}\n\nfunction requiredAccess(source: { permissions?: string[]; capabilities?: string[] }): string[] | undefined {\n const values = [...(source.permissions ?? []), ...(source.capabilities ?? [])].filter(Boolean);\n return values.length ? values : undefined;\n}\n\nexport function CoreBlock({ block, registry }: { block: OonBlockDef; registry?: OonComponentRegistry }) {\n if (block.hidden) return null;\n const content = (() => {\n switch (block.type) {\n case \"custom\": {\n const Component = resolveComponent(registry, block.component, \"pageComponents\");\n return Component ? <Component block={block} {...block.props} /> : <MissingRenderer renderer={block.component} />;\n }\n case \"collection.datagrid\":\n return <CoreDataGrid model={block.model} mode={block.mode} columns={block.columns} form={block.form} label={block.title ?? block.model} />;\n case \"collection.cards\": {\n const Component = resolveComponent(registry, block.renderer, \"cardRenderers\");\n return Component ? <Component block={block} model={block.model} /> : <CoreCards model={block.model} renderer={block.renderer} />;\n }\n case \"section\":\n return <Box><Heading size=\"md\" mb={block.description ? 1 : 4}>{block.title}</Heading>{block.description ? <Text color=\"gray.600\" mb={4}>{block.description}</Text> : null}<Stack gap={4}>{block.blocks?.map((child, index) => <CoreBlock key={child.id ?? index} block={child} registry={registry} />)}</Stack></Box>;\n case \"markdown\":\n return <Stack gap={2}>{renderMarkdown(block.content)}</Stack>;\n default:\n return <MissingRenderer renderer={block.type} />;\n }\n })();\n return <PermissionGate permission={requiredAccess(block)}>{content}</PermissionGate>;\n}\n\nexport function CorePage({ page, registry }: { page: OonPageDef; registry?: OonComponentRegistry }) {\n const Component = resolveComponent(registry, page.component, \"pageComponents\");\n return <PermissionGate permission={requiredAccess(page)}>{Component ? <Component page={page} /> : <CorePageShell><CorePageHeader title={page.title ?? page.label} /><Stack gap={6}>{page.blocks?.map((block, index) => <CoreBlock key={block.id ?? index} block={block} registry={registry} />)}</Stack></CorePageShell>}</PermissionGate>;\n}\n","import type { ReactNode } from \"react\";\nimport { useOonAuth } from \"./AuthProvider\";\n\n/**\n * Esconde a UI quando o usuário não tem a permissão. NÃO é segurança real\n * (Seção 6.2, item 3) — o back é a autoridade. Serve apenas para não exibir\n * ações/menus que o usuário não pode usar.\n */\nexport function PermissionGate({\n permission,\n fallback = null,\n children,\n}: {\n permission?: string | string[];\n fallback?: ReactNode;\n children: ReactNode;\n}) {\n const { hasPermission } = useOonAuth();\n return <>{hasPermission(permission) ? children : fallback}</>;\n}\n","import { Box, Text } from \"@chakra-ui/react\";\nimport type { ComponentType, ReactNode } from \"react\";\nimport type { OonComponentRegistry } from \"../types\";\n\ntype RegistryBucket = keyof OonComponentRegistry;\n\nconst PREFIX_BUCKETS: Record<string, RegistryBucket> = {\n \"custom\": \"pageComponents\",\n \"fields\": \"fieldRenderers\",\n \"cells\": \"cellRenderers\",\n \"cards\": \"cardRenderers\",\n \"actions\": \"actionRenderers\",\n \"menus\": \"menuRenderers\",\n};\n\nexport function registryKey(key: string): string {\n return key.startsWith(\"custom:\") ? key.slice(\"custom:\".length) : key;\n}\n\nexport function resolveComponent<TProps = Record<string, unknown>>(\n registry: OonComponentRegistry | undefined,\n key: string | undefined,\n bucket?: RegistryBucket,\n): ComponentType<TProps> | null {\n if (!key) return null;\n const normalized = registryKey(key);\n const inferred = key.includes(\".\") ? PREFIX_BUCKETS[key.split(\".\")[0]] : undefined;\n const targetBucket = bucket ?? inferred ?? \"pageComponents\";\n return (registry?.[targetBucket]?.[normalized] ?? registry?.[targetBucket]?.[key] ?? null) as ComponentType<TProps> | null;\n}\n\nexport function MissingRenderer({ renderer, children }: { renderer?: string; children?: ReactNode }) {\n if (import.meta.env?.MODE === \"production\") return <>{children ?? null}</>;\n return (\n <Box borderWidth=\"1px\" borderStyle=\"dashed\" borderColor=\"orange.300\" bg=\"orange.50\" color=\"orange.900\" borderRadius=\"md\" p={3}>\n <Text fontSize=\"sm\" fontWeight=\"600\">Renderer não encontrado</Text>\n <Text fontSize=\"xs\">Registre a chave {renderer ? <code>{renderer}</code> : \"solicitada\"} no registry da UI.</Text>\n {children}\n </Box>\n );\n}\n","import { Box, Button, Flex, Heading, Spinner, Text } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport type { CollectionMode, OonColumnDef, OonFormFieldDef } from \"../../types\";\nimport { CoreCollection } from \"../CoreCollection\";\n\nexport function CorePage({ children }: { children: ReactNode }) { return <Box>{children}</Box>; }\nexport function CorePageHeader({ title, description, actions }: { title?: string; description?: string; actions?: ReactNode }) { return <Flex align=\"start\" justify=\"space-between\" gap={4} mb={6}><Box>{title ? <Heading size=\"lg\">{title}</Heading> : null}{description ? <Text color=\"gray.600\" mt={1}>{description}</Text> : null}</Box>{actions}</Flex>; }\nexport function CoreToolbar({ children }: { children?: ReactNode }) { return <Flex align=\"center\" gap={2} mb={4}>{children}</Flex>; }\nexport function CoreDataGrid(props: { model: string; mode?: CollectionMode; columns?: OonColumnDef[]; form?: OonFormFieldDef[]; label?: string }) { return <CoreCollection {...props} />; }\nexport function CoreCards(props: { model: string; renderer?: string }) { return <CoreCollection model={props.model} mode=\"minimal\" label={props.model} />; }\nexport function CoreForm(props: { children?: ReactNode }) { return <Box>{props.children}</Box>; }\nexport function CoreField({ label, children }: { label?: string; children?: ReactNode }) { return <Box><Text fontSize=\"sm\" fontWeight=\"600\">{label}</Text>{children}</Box>; }\nexport function CoreRelationField(props: { children?: ReactNode }) { return <CoreField {...props} />; }\nexport function CoreActions({ children }: { children?: ReactNode }) { return <Flex gap={2}>{children}</Flex>; }\nexport function CoreEmptyState({ title = \"Nenhum dado encontrado\", actionLabel, onAction }: { title?: string; actionLabel?: string; onAction?: () => void }) { return <Box textAlign=\"center\" py={10}><Text>{title}</Text>{actionLabel ? <Button mt={3} onClick={onAction}>{actionLabel}</Button> : null}</Box>; }\nexport function CoreLoadingState({ label = \"Carregando...\" }: { label?: string }) { return <Flex align=\"center\" gap={3}><Spinner size=\"sm\" /><Text>{label}</Text></Flex>; }\n","import type {\n CollectionViewDef,\n DashboardViewDef,\n DocumentViewDef,\n OonCoreFrontConfig,\n OonMenuItem,\n OonRoute,\n OonViewDefinition,\n PipelineViewDef,\n OonPageDef,\n} from \"../types\";\nimport { CoreCollection } from \"../components/CoreCollection\";\nimport { CoreDocument } from \"../components/CoreDocument\";\nimport { CorePipeline } from \"../components/CorePipeline\";\nimport { CoreDashboard } from \"../components/CoreDashboard\";\nimport { CorePage } from \"../components/ui-v2/CorePage\";\n\n/** Resultado da resolução de módulos + manifesto de UI em rotas e menu. */\nexport interface ResolvedRegistry {\n routes: OonRoute[];\n menu: OonMenuItem[];\n}\n\nfunction slug(value: string): string {\n return value\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nfunction requiredAccess(source: { permissions?: string[]; capabilities?: string[] }): string[] | undefined {\n const values = [...(source.permissions ?? []), ...(source.capabilities ?? [])].filter(Boolean);\n return values.length ? values : undefined;\n}\n\nfunction viewId(view: OonViewDefinition): string {\n if (view.id) return view.id;\n if (view.type === \"dashboard\") return \"dashboard\";\n return slug(view.model);\n}\n\nfunction viewPath(view: OonViewDefinition): string {\n if (view.path) return view.path;\n if (view.type === \"dashboard\") return \"/\";\n return `/${viewId(view)}`;\n}\n\nfunction viewLabel(view: OonViewDefinition): string {\n if (view.label) return view.label;\n if (view.type === \"dashboard\") return \"Dashboard\";\n return view.model;\n}\n\n/** Converte uma view declarativa no componente Core correspondente. */\nfunction renderView(view: OonViewDefinition) {\n switch (view.type) {\n case \"collection\": {\n const v = view as CollectionViewDef;\n return (\n <CoreCollection\n model={v.model}\n mode={v.mode}\n columns={v.columns}\n form={v.form}\n label={viewLabel(v)}\n section={v.section}\n importExport={v.importExport}\n list={v.list}\n relations={v.relations}\n detailModal={v.detailModal}\n />\n );\n }\n case \"document\": {\n const v = view as DocumentViewDef;\n return <CoreDocument model={v.model} label={viewLabel(v)} approval={v.approval} attachments={v.attachments} />;\n }\n case \"pipeline\": {\n const v = view as PipelineViewDef;\n return (\n <CorePipeline\n model={v.model}\n label={viewLabel(v)}\n stageField={v.stageField}\n stages={v.stages}\n />\n );\n }\n case \"dashboard\": {\n const v = view as DashboardViewDef;\n return <CoreDashboard label={viewLabel(v)} widgets={v.widgets} />;\n }\n default:\n return null;\n }\n}\n\nfunction viewToRoute(view: OonViewDefinition): OonRoute {\n return {\n path: viewPath(view),\n element: renderView(view),\n permissions: requiredAccess(view),\n };\n}\n\nfunction pageToRoute(page: OonPageDef, registry: OonCoreFrontConfig[\"registry\"]): OonRoute {\n return { path: page.path, element: <CorePage page={page} registry={registry} />, permissions: requiredAccess(page) };\n}\n\nfunction pageToMenu(page: OonPageDef): OonMenuItem | null {\n if (page.hidden || !page.label) return null;\n return { label: page.label, href: page.path, icon: page.icon, section: page.section, permissions: requiredAccess(page), capabilities: page.capabilities, order: page.order };\n}\n\nfunction viewToMenu(view: OonViewDefinition): OonMenuItem {\n return {\n label: viewLabel(view),\n href: viewPath(view),\n icon: view.icon,\n section: view.section,\n permissions: requiredAccess(view),\n capabilities: \"capabilities\" in view ? view.capabilities : undefined,\n };\n}\n\n/**\n * Resolve a config inteira (módulos + `ui.views`) em um registry plano de\n * rotas e menu. É o que substitui o `router.jsx` hardcoded por geração\n * dirigida por declaração/metadata.\n */\nexport function resolveRegistry(config: OonCoreFrontConfig): ResolvedRegistry {\n const routes: OonRoute[] = [];\n const menu: OonMenuItem[] = [];\n const seenPaths = new Set<string>();\n\n const pushRoute = (route: OonRoute) => {\n if (seenPaths.has(route.path)) return;\n seenPaths.add(route.path);\n routes.push(route);\n };\n\n for (const mod of config.modules ?? []) {\n for (const route of mod.routes ?? []) pushRoute({ ...route, permissions: requiredAccess(route) });\n for (const item of mod.menu ?? []) menu.push({ ...item, permissions: requiredAccess(item) });\n for (const view of mod.views ?? []) {\n pushRoute(viewToRoute(view));\n menu.push(viewToMenu(view));\n }\n }\n\n const navMode = config.ui?.navigation?.mode ?? \"auto\";\n const includeAuto = navMode === \"auto\" || navMode === \"mixed\";\n const includeManual = navMode === \"manual\" || navMode === \"mixed\";\n\n if (includeAuto) {\n for (const view of config.ui?.views ?? []) {\n pushRoute(viewToRoute(view));\n menu.push(viewToMenu(view));\n }\n for (const page of config.ui?.pages ?? []) {\n pushRoute(pageToRoute(page, config.registry ?? config.ui?.registry));\n const item = pageToMenu(page);\n if (item) menu.push(item);\n }\n }\n\n if (includeManual) {\n for (const item of config.ui?.navigation?.items ?? []) menu.push({ ...item, permissions: requiredAccess(item) });\n }\n\n menu.sort((a, b) => (a.order ?? 100) - (b.order ?? 100));\n 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} from \"../types\";\nimport { AuthenticatedLayout } from \"../shell/AuthenticatedLayout\";\nimport { AccessDeniedPage } from \"../security/AccessDeniedPage\";\nimport { AppAccessGuard } from \"../security/AppAccessGuard\";\nimport { LoginPage } from \"../security/LoginPage\";\nimport {\n ActivationPage,\n InstanceBlockedPage,\n} from \"../security/ActivationPage\";\nimport { RouteGuard } from \"../security/RouteGuard\";\nimport { ActivationGuard } from \"../security/ActivationGuard\";\n\nexport interface RouterInput {\n app: OonAppConfig;\n menu: OonMenuItem[];\n routes: OonRoute[];\n security?: OonSecurityConfig;\n layout?: OonLayoutConfig;\n registry?: OonComponentRegistry;\n}\n\n/** Constrói o router, incluindo os estados públicos de autenticação. */\nexport function createOonRouter({ app, menu, routes, security, layout, registry }: 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: route.element }));\n\n const privateSource = routes.filter((route) => !route.public);\n const privateRoutes: RouteObject[] = privateSource.map((route) => {\n const element = guardEnabled ? (\n <RouteGuard permission={route.permissions}>{route.element}</RouteGuard>\n ) : (\n route.element\n );\n\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({\n index: true,\n element: <Navigate to={firstRoute.path} replace />,\n });\n }\n\n const customPaths = new Set(publicRoutes.map((route) => route.path));\n const builtInPublicRoutes: RouteObject[] = [];\n\n if (!customPaths.has(\"/login\")) {\n builtInPublicRoutes.push({\n path: \"/login\",\n element: (\n <ActivationGuard>\n <LoginPage app={app} />\n </ActivationGuard>\n ),\n });\n }\n\n if (!customPaths.has(\"/ativacao\")) {\n builtInPublicRoutes.push({\n path: \"/ativacao\",\n element: <ActivationPage />,\n });\n }\n\n if (!customPaths.has(\"/instancia-suspensa\")) {\n builtInPublicRoutes.push({\n path: \"/instancia-suspensa\",\n element: (\n <InstanceBlockedPage\n title=\"Instância suspensa\"\n message=\"Esta Central está suspensa.\"\n />\n ),\n });\n }\n\n if (!customPaths.has(\"/instancia-revogada\")) {\n builtInPublicRoutes.push({\n path: \"/instancia-revogada\",\n element: (\n <InstanceBlockedPage\n title=\"Instância revogada\"\n message=\"Esta Central foi revogada.\"\n />\n ),\n });\n }\n\n if (!customPaths.has(\"/acesso-negado\")) {\n builtInPublicRoutes.push({\n path: \"/acesso-negado\",\n element: <AccessDeniedPage app={app} />,\n });\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, Flex, Spacer, Text } from \"@chakra-ui/react\";\nimport { Outlet } from \"react-router-dom\";\nimport type { OonAppConfig, OonComponentRegistry, OonLayoutConfig, OonMenuItem } from \"../types\";\nimport { useOonAuth } from \"../security/AuthProvider\";\nimport { Sidebar } from \"./Sidebar\";\nimport { resolveComponent, MissingRenderer } from \"../app/componentRegistry\";\n\nfunction CoreTopbar({ app }: { app: OonAppConfig }) {\n const { user, logout } = useOonAuth();\n return <Flex as=\"header\" align=\"center\" minH=\"64px\" px={{ base: 4, lg: 6 }} py={3} borderBottomWidth=\"1px\" borderColor=\"#E8ECEF\" bg=\"rgba(255, 255, 255, 0.96)\" backdropFilter=\"blur(10px)\" position=\"sticky\" top={0} zIndex={10}><Box><Text fontSize=\"xs\" fontWeight=\"600\" color=\"brand.500\" textTransform=\"uppercase\" letterSpacing=\"0.08em\">Central Oon</Text><Text fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">{app.title ?? app.name}</Text></Box><Spacer />{user ? <Flex align=\"center\" gap={3}><Box textAlign=\"right\" display={{ base: \"none\", md: \"block\" }}><Text fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">{user.nome}</Text>{user.email ? <Text fontSize=\"xs\" color=\"gray.500\">{user.email}</Text> : null}</Box><Button size=\"sm\" variant=\"outline\" colorPalette=\"brand\" borderRadius=\"8px\" onClick={logout}>Sair</Button></Flex> : null}</Flex>;\n}\n\nfunction Slot({ name, slot, registry, app, menu }: { name: \"sidebar\" | \"topbar\" | \"header\" | \"footer\"; slot?: string; registry?: OonComponentRegistry; app: OonAppConfig; menu: OonMenuItem[] }) {\n if (slot === \"none\") return null;\n if (slot?.startsWith(\"custom:\")) { const C = resolveComponent(registry, slot, \"layoutSlots\"); return C ? <C app={app} menu={menu} /> : <MissingRenderer renderer={slot} />; }\n if (name === \"sidebar\") return <Sidebar app={app} menu={menu} registry={registry} />;\n if (name === \"topbar\") return <CoreTopbar app={app} />;\n if (name === \"footer\" && slot === \"core\") return <Box as=\"footer\" px={6} py={4} color=\"gray.500\" fontSize=\"xs\" borderTopWidth=\"1px\">OonCore</Box>;\n return null;\n}\n\nexport function DefaultShell({ app, menu, layout, registry }: { app: OonAppConfig; menu: OonMenuItem[]; layout?: OonLayoutConfig; registry?: OonComponentRegistry }) {\n const portal = layout?.shell === \"portal\" || layout?.shell === \"content-only\";\n const mainPadding = portal ? { base: 4, lg: 10 } : { base: 4, lg: 6 };\n return <Flex align=\"stretch\" minH=\"100vh\" bg={portal ? \"white\" : \"#F8F9FA\"}><Slot name=\"sidebar\" slot={layout?.sidebar ?? \"core\"} registry={registry} app={app} menu={menu} /><Flex direction=\"column\" flex=\"1\" minW={0}><Slot name=\"topbar\" slot={layout?.topbar ?? \"core\"} registry={registry} app={app} menu={menu} /><Slot name=\"header\" slot={layout?.header} registry={registry} app={app} menu={menu} /><Box as=\"main\" flex=\"1\" p={mainPadding} minW={0}><Box maxW={portal ? \"1180px\" : \"1680px\"} mx=\"auto\"><Outlet /></Box></Box><Slot name=\"footer\" slot={layout?.footer ?? \"none\"} registry={registry} app={app} menu={menu} /></Flex></Flex>;\n}\n\nexport function PortalShell(props: { app: OonAppConfig; menu: OonMenuItem[]; layout?: OonLayoutConfig; registry?: OonComponentRegistry }) { return <DefaultShell {...props} layout={{ ...props.layout, shell: \"portal\" }} />; }\n","import { Box, Flex, Image, Stack, Text } from \"@chakra-ui/react\";\nimport { NavLink } from \"react-router-dom\";\nimport type { OonAppConfig, OonComponentRegistry, OonMenuItem } from \"../types\";\nimport { resolveComponent } from \"../app/componentRegistry\";\nimport { useOonAuth } from \"../security/AuthProvider\";\n\nfunction groupBySection(items: OonMenuItem[]): Array<[string, OonMenuItem[]]> {\n const groups = new Map<string, OonMenuItem[]>();\n for (const item of items) {\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\n/** Menu lateral compacto e agrupado, seguindo o padrão operacional Minexco. */\nexport function Sidebar({ app, menu, registry }: { app: OonAppConfig; menu: OonMenuItem[]; registry?: OonComponentRegistry }) {\n const { hasPermission } = useOonAuth();\n const visible = menu.filter((item) => !item.hidden && hasPermission(item.permissions));\n\n return (\n <Box\n as=\"nav\"\n w={{ base: \"76px\", lg: \"248px\" }}\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 display={{ base: \"none\", lg: \"block\" }} 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 <Stack gap={5}>\n {groupBySection(visible).map(([section, items]) => (\n <Stack key={section} gap={1}>\n <Text\n display={{ base: \"none\", lg: \"block\" }}\n fontSize=\"10px\"\n fontWeight=\"600\"\n color=\"gray.400\"\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 return (\n <NavLink key={item.href} to={item.href} end={item.href === \"/\"} title={item.label}>\n {({ isActive }) => (\n <Flex\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={isActive ? \"600\" : \"500\"}\n bg={isActive ? \"brand.50\" : \"transparent\"}\n color={isActive ? \"brand.700\" : \"#46545C\"}\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 >\n {item.icon ? <Box flex=\"0 0 auto\">{item.icon}</Box> : <Box w=\"7px\" h=\"7px\" borderRadius=\"full\" bg={isActive ? \"brand.500\" : \"gray.300\"} />}\n <Text display={{ base: \"none\", lg: \"block\" }} lineClamp={1}>\n {item.label}\n </Text>\n </Flex>\n )}\n </NavLink>\n );\n })}\n </Stack>\n ))}\n </Stack>\n </Box>\n );\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\n/**\n * Guarda a aplicação inteira depois que o backend valida token e permissão do\n * app. 401 segue para login; 403 segue para a página de acesso negado.\n */\nexport function AppAccessGuard({ children }: { children: ReactNode }) {\n const { status, retry } = useOonAuth();\n const location = useLocation();\n\n if (status === \"loading\") return <LoadingScreen />;\n\n if (status === \"unauthenticated\") {\n return (\n <Navigate\n to={loginRedirect(location.pathname, location.search)}\n replace\n />\n );\n }\n\n if (status === \"forbidden\") {\n return <Navigate to=\"/acesso-negado\" replace />;\n }\n\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={() => {\n void retry().catch(() => undefined);\n }}\n />\n );\n }\n\n return <>{children}</>;\n}\n","import { useState, type FormEvent } from \"react\";\nimport {\n Box,\n Button,\n Flex,\n Heading,\n Input,\n Text,\n VStack,\n} from \"@chakra-ui/react\";\nimport { Navigate, useLocation } from \"react-router-dom\";\nimport type { OonAppConfig, OonError } from \"../types\";\nimport { useOonAuth } from \"./AuthProvider\";\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\")) {\n return \"/\";\n }\n return value;\n}\n\n/** Tela de login padrão das Centrais que usam a Central de Ativações. */\nexport function LoginPage({ app }: { app: OonAppConfig }) {\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 redirect = safeRedirect(location.search);\n\n if (status === \"authenticated\") {\n return <Navigate to={redirect} replace />;\n }\n\n if (status === \"forbidden\") {\n return <Navigate to=\"/acesso-negado\" replace />;\n }\n\n async function handleSubmit(event: FormEvent<HTMLFormElement>) {\n event.preventDefault();\n setSubmitting(true);\n setMessage(null);\n\n try {\n await login(email.trim(), password);\n } catch (error) {\n const authError = error as OonError;\n if (authError.status === 403) return;\n setMessage(\n authError.status === 401\n ? \"E-mail ou senha inválidos.\"\n : authError.message || \"Não foi possível entrar. Tente novamente.\",\n );\n } finally {\n setSubmitting(false);\n }\n }\n\n return (\n <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box\n width=\"100%\"\n maxW=\"440px\"\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: 9 }}\n >\n <form onSubmit={handleSubmit}>\n <VStack align=\"stretch\" gap={6}>\n <Box>\n <Text\n color=\"#39BFED\"\n fontSize=\"xs\"\n fontWeight=\"700\"\n letterSpacing=\"0.12em\"\n textTransform=\"uppercase\"\n >\n Central Oon\n </Text>\n <Heading mt={2} size=\"lg\" color=\"#07262E\">\n {app.title ?? app.name}\n </Heading>\n <Text mt={2} color=\"gray.600\" fontSize=\"sm\">\n Entre com seu usuário autorizado para acessar este aplicativo.\n </Text>\n </Box>\n\n <VStack align=\"stretch\" gap={4}>\n <Box>\n <Text mb={2} fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">\n E-mail\n </Text>\n <Input\n type=\"email\"\n value={email}\n onChange={(event) => setEmail(event.target.value)}\n autoComplete=\"email\"\n placeholder=\"voce@empresa.com.br\"\n required\n />\n </Box>\n\n <Box>\n <Text mb={2} fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">\n Senha\n </Text>\n <Input\n type=\"password\"\n value={password}\n onChange={(event) => setPassword(event.target.value)}\n autoComplete=\"current-password\"\n placeholder=\"Sua senha\"\n required\n />\n </Box>\n </VStack>\n\n {message ? (\n <Box\n role=\"alert\"\n borderRadius=\"10px\"\n bg=\"red.50\"\n color=\"red.700\"\n px={4}\n py={3}\n fontSize=\"sm\"\n >\n {message}\n </Box>\n ) : null}\n\n <Button\n type=\"submit\"\n bg=\"#07262E\"\n color=\"white\"\n _hover={{ bg: \"#0B3843\" }}\n disabled={submitting || !email.trim() || !password}\n >\n {submitting ? \"Validando acesso...\" : \"Entrar\"}\n </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 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 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, tenant, aplicativo, licença e permissões foram\n preparados. 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, aplicativo e\n licença antes de consumir o código.\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 a instância será\n registrada no 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","import type {\n CollectionMode,\n CollectionViewDef,\n DocumentViewDef,\n OonAuthConfig,\n OonCoreFrontConfig,\n OonViewDefinition,\n OonLayoutConfig,\n OonNavigationConfig,\n OonPageDef,\n OonComponentRegistry,\n OonAppKind,\n OonCollectionListConfig,\n OonDetailModalConfig,\n OonFormFieldDef,\n OonRelationDef,\n PipelineViewDef,\n} from \"./types\";\nimport { start } from \"./start\";\n\n/**\n * Schema do `central.ui.json` (Seção 9 do escopo). É o que o frontend\n * consumidor gerado pelo `create-central-oon` carrega — declaração pura, sem\n * código de UI. O Core converte isto em `OonCoreFrontConfig`.\n */\nexport interface CentralUiManifest {\n name: string;\n slug: string;\n backend?: { metadataUrl?: string };\n schemaVersion?: 1 | 2;\n /** Perfil arquitetural: root-central, member-central ou portal-cockpit. */\n appKind?: OonAppKind;\n /** Configuração declarativa de autenticação. Segredos nunca entram aqui. */\n auth?: Pick<OonAuthConfig, \"mode\" | \"loginUrl\" | \"tokenParam\">;\n layout?: OonLayoutConfig;\n registry?: OonComponentRegistry;\n navigation?: OonNavigationConfig;\n pages?: OonPageDef[];\n collections?: Array<{\n model: string;\n mode?: CollectionMode;\n path?: string;\n label?: string;\n section?: string;\n /** Overrides pontuais de campos; os demais continuam vindo da metadata. */\n form?: OonFormFieldDef[];\n list?: OonCollectionListConfig;\n relations?: Record<string, OonRelationDef>;\n detailModal?: OonDetailModalConfig;\n }>;\n pipelines?: Array<{\n name?: string;\n model?: string;\n mode?: string;\n stageField?: string;\n path?: string;\n label?: string;\n section?: string;\n }>;\n documents?: Array<{\n model: string;\n mode?: string;\n path?: string;\n label?: string;\n section?: string;\n approval?: boolean;\n attachments?: boolean;\n }>;\n}\n\n/** Dados de runtime que o `central.ui.json` não carrega (vêm do .env/código). */\nexport interface ManifestRuntime {\n apiBaseUrl: string;\n meusAppsUrl?: string;\n assistantBaseUrl?: string;\n versionPrefix?: string;\n /** Token local enviado ao backend somente quando o consumidor o configurar. */\n devToken?: string;\n /** Registry de componentes React, registrado em código TypeScript. */\n registry?: OonComponentRegistry;\n /** Atalho para registrar páginas/componentes custom sem reescrever o frontend. */\n customComponents?: OonComponentRegistry[\"pageComponents\"];\n /** Overrides de autenticação vindos do runtime/env. */\n auth?: Partial<OonAuthConfig>;\n /** Override do perfil arquitetural da aplicação. */\n appKind?: OonAppKind;\n}\n\nfunction mergeRegistry(\n manifestRegistry: OonComponentRegistry | undefined,\n runtimeRegistry: OonComponentRegistry | undefined,\n customComponents: OonComponentRegistry[\"pageComponents\"] | undefined,\n): OonComponentRegistry | undefined {\n if (!manifestRegistry && !runtimeRegistry && !customComponents) return undefined;\n return {\n layoutSlots: { ...manifestRegistry?.layoutSlots, ...runtimeRegistry?.layoutSlots },\n fieldRenderers: { ...manifestRegistry?.fieldRenderers, ...runtimeRegistry?.fieldRenderers },\n cellRenderers: { ...manifestRegistry?.cellRenderers, ...runtimeRegistry?.cellRenderers },\n cardRenderers: { ...manifestRegistry?.cardRenderers, ...runtimeRegistry?.cardRenderers },\n actionRenderers: { ...manifestRegistry?.actionRenderers, ...runtimeRegistry?.actionRenderers },\n pageComponents: { ...manifestRegistry?.pageComponents, ...runtimeRegistry?.pageComponents, ...customComponents },\n menuRenderers: { ...manifestRegistry?.menuRenderers, ...runtimeRegistry?.menuRenderers },\n };\n}\n\n/** Converte o manifesto declarativo + runtime em config do Core. */\nexport function manifestToConfig(manifest: CentralUiManifest, runtime: ManifestRuntime): OonCoreFrontConfig {\n const views: OonViewDefinition[] = [];\n\n for (const c of manifest.collections ?? []) {\n const view: CollectionViewDef = {\n type: \"collection\",\n model: c.model,\n mode: c.mode ?? \"dynamic\",\n path: c.path,\n label: c.label,\n section: c.section,\n form: c.form,\n list: c.list,\n relations: c.relations,\n detailModal: c.detailModal,\n };\n views.push(view);\n }\n\n for (const p of manifest.pipelines ?? []) {\n const model = p.model ?? p.name;\n if (!model) continue;\n const view: PipelineViewDef = {\n type: \"pipeline\",\n model,\n label: p.label ?? p.name,\n path: p.path,\n stageField: p.stageField,\n section: p.section,\n };\n views.push(view);\n }\n\n for (const d of manifest.documents ?? []) {\n const view: DocumentViewDef = {\n type: \"document\",\n model: d.model,\n label: d.label,\n path: d.path,\n section: d.section,\n approval: d.approval,\n attachments: d.attachments,\n };\n views.push(view);\n }\n\n const registry = mergeRegistry(manifest.registry, runtime.registry, runtime.customComponents);\n const auth: OonAuthConfig = {\n mode: runtime.auth?.mode ?? manifest.auth?.mode ?? \"bearer\",\n loginUrl: runtime.auth?.loginUrl ?? manifest.auth?.loginUrl,\n tokenParam: runtime.auth?.tokenParam ?? manifest.auth?.tokenParam ?? \"code\",\n devToken: runtime.auth?.devToken ?? runtime.devToken,\n };\n\n return {\n app: {\n id: manifest.slug,\n name: manifest.name,\n title: manifest.name,\n kind: runtime.appKind ?? manifest.appKind,\n },\n api: {\n baseUrl: runtime.apiBaseUrl,\n meusAppsUrl: runtime.meusAppsUrl,\n assistantBaseUrl: runtime.assistantBaseUrl,\n versionPrefix: runtime.versionPrefix ?? \"\",\n },\n auth,\n security: {\n enableRouteGuard: true,\n enablePermissionGate: true,\n redactAssistantContext: true,\n disableConsoleInProduction: true,\n },\n layout: manifest.layout,\n registry,\n ui: {\n schemaVersion: manifest.schemaVersion,\n layout: manifest.layout,\n registry,\n navigation: manifest.navigation,\n views,\n pages: manifest.pages,\n },\n };\n}\n\n/**\n * Bootstrap a partir do `central.ui.json`. É a única linha que o `main.tsx` de\n * uma Central gerada precisa:\n *\n * import manifest from \"../central.ui.json\";\n * startFromManifest(manifest, { apiBaseUrl: import.meta.env.VITE_API_URL });\n */\nexport function startFromManifest(manifest: CentralUiManifest, runtime: ManifestRuntime) {\n start(manifestToConfig(manifest, runtime));\n}\n","import type {\n CollectionViewDef,\n DashboardViewDef,\n DocumentViewDef,\n OonModule,\n PipelineViewDef,\n} from \"../types\";\n\n/**\n * Helpers declarativos (API pública da Seção 4.3). São identidades tipadas que\n * fixam o `type` da view — servem para o autocomplete e para registrar a view\n * num módulo ou no `ui.views` da config.\n */\n\nexport function defineCollectionView(def: Omit<CollectionViewDef, \"type\">): CollectionViewDef {\n return { type: \"collection\", ...def };\n}\n\nexport function defineDocumentView(def: Omit<DocumentViewDef, \"type\">): DocumentViewDef {\n return { type: \"document\", ...def };\n}\n\nexport function definePipelineView(def: Omit<PipelineViewDef, \"type\">): PipelineViewDef {\n return { type: \"pipeline\", ...def };\n}\n\nexport function defineDashboard(def: Omit<DashboardViewDef, \"type\">): DashboardViewDef {\n return { type: \"dashboard\", ...def };\n}\n\n/** Açúcar para declarar um módulo com tipagem. */\nexport function defineOonModule(mod: OonModule): OonModule {\n return mod;\n}\n","import { Badge, Box, Button, Flex, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useCoreMetadata, useOonApi } from \"../api/ApiProvider\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\nimport { ErrorState } from \"../shell/ErrorState\";\n\nexport interface CoreIntegrationProps {\n label?: string;\n}\n\ninterface IntegrationEntry {\n id?: string;\n name?: string;\n label?: string;\n status?: string;\n}\n\n/**\n * Painel de integrações: lista o que o back declarou em /core/integrations e\n * permite reprocessar via action RESTful (POST /integrations/actions/process-active).\n */\nexport function CoreIntegration({ label = \"Integrações\" }: CoreIntegrationProps) {\n const { http } = useOonApi();\n const metadata = useCoreMetadata();\n\n const reprocess = useMutation({\n mutationFn: () =>\n http.post(\"/integrations/actions/process-active\", {}, { headers: { \"x-oon-origin\": \"integration\" } }),\n });\n\n if (metadata.isLoading) return <LoadingScreen />;\n if (metadata.isError) return <ErrorState error={metadata.error} />;\n\n const integrations = (metadata.data?.integrations ?? []) as IntegrationEntry[];\n\n return (\n <Stack gap={6}>\n <Flex align=\"center\" justify=\"space-between\">\n <Heading size=\"lg\">{label}</Heading>\n <Button size=\"sm\" variant=\"outline\" loading={reprocess.isPending} onClick={() => reprocess.mutate()}>\n Reprocessar ativos\n </Button>\n </Flex>\n <Stack gap={3}>\n {integrations.length === 0 ? (\n <Text color=\"gray.400\">Nenhuma integração declarada.</Text>\n ) : (\n integrations.map((it, idx) => (\n <Box\n key={it.id ?? it.name ?? idx}\n borderWidth=\"1px\"\n borderColor=\"gray.200\"\n borderRadius=\"md\"\n bg=\"white\"\n p={4}\n >\n <Flex align=\"center\" justify=\"space-between\">\n <Text fontWeight=\"medium\">{it.label ?? it.name ?? \"Integração\"}</Text>\n <Badge colorPalette={it.status === \"erro\" ? \"red\" : it.status === \"ativo\" ? \"green\" : \"gray\"}>\n {it.status ?? \"—\"}\n </Badge>\n </Flex>\n </Box>\n ))\n )}\n </Stack>\n </Stack>\n );\n}\n","import { Button, Flex, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { OonColumnDef } from \"../types\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { CoreCollection } from \"./CoreCollection\";\n\nexport interface CoreCurrencyProps {\n /** model das moedas. Default: \"Moeda\". */\n model?: string;\n label?: string;\n endpoint?: string;\n columns?: OonColumnDef[];\n}\n\n/**\n * Multi-moedas (módulo de domínio, Seção 4.6/2.11). Lista as moedas e expõe a\n * ação RESTful de atualizar cotações (POST /<endpoint>/actions/update-rates).\n */\nexport function CoreCurrency({ model = \"Moeda\", label = \"Multi-moedas\", endpoint = \"/moedas\", columns }: CoreCurrencyProps) {\n const { http } = useOonApi();\n const queryClient = useQueryClient();\n\n const updateRates = useMutation({\n mutationFn: () => http.post(`${endpoint}/actions/update-rates`, {}, { headers: { \"x-oon-origin\": \"integration\" } }),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: [\"oon\", \"list\", endpoint] }),\n });\n\n return (\n <Stack gap={6}>\n <Flex align=\"center\" justify=\"space-between\">\n <Heading size=\"lg\">{label}</Heading>\n <Button size=\"sm\" colorPalette=\"blue\" loading={updateRates.isPending} onClick={() => updateRates.mutate()}>\n Atualizar cotações\n </Button>\n </Flex>\n {updateRates.isError ? (\n <Text fontSize=\"sm\" color=\"red.600\">\n {updateRates.error?.message}\n </Text>\n ) : null}\n <CoreCollection model={model} label=\"\" mode={columns ? \"full\" : \"dynamic\"} endpoint={endpoint} columns={columns} />\n </Stack>\n );\n}\n","import { useState } from \"react\";\nimport { Box, Button, Flex, Heading, Input, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useOonApi } from \"../api/ApiProvider\";\n\nexport interface AssistantMessage {\n role: \"user\" | \"assistant\";\n content: string;\n}\n\nexport interface CoreAssistantProps {\n /** code do assistente registrado no back (ex.: \"servicos-tomados.revisao\"). */\n assistantCode: string;\n label?: string;\n /** entidade de contexto (apenas tipo + id; nada sensível). */\n entity?: { type: string; id: string };\n /** base de assistentes; default usa o mesmo client REST do Core. */\n endpoint?: string;\n}\n\n/**\n * Assistente IA do Core (Seção 2.12 / 6.2). Envia ao back apenas\n * assistantCode + entity + message — NUNCA chave de IA, modelo ou prompt.\n * O back resolve modelo, prompt, chave e políticas.\n */\nexport function CoreAssistant({ assistantCode, label = \"Assistente\", entity, endpoint = \"/assistant-runs\" }: CoreAssistantProps) {\n const { http } = useOonApi();\n const [messages, setMessages] = useState<AssistantMessage[]>([]);\n const [input, setInput] = useState(\"\");\n\n const ask = useMutation({\n mutationFn: async (message: string) => {\n const { data } = await http.post<{ reply?: string; message?: string }>(\n endpoint,\n {\n assistantCode,\n entity,\n message,\n // Contexto redigido: a Central pode enriquecer, mas o Core não envia PII por padrão.\n context: { redactionPolicy: \"default\" },\n },\n { headers: { \"x-oon-origin\": \"assistant\" } }\n );\n return data.reply ?? data.message ?? \"\";\n },\n onSuccess: (reply) => setMessages((prev) => [...prev, { role: \"assistant\", content: reply }]),\n });\n\n const send = () => {\n const text = input.trim();\n if (!text) return;\n setMessages((prev) => [...prev, { role: \"user\", content: text }]);\n setInput(\"\");\n ask.mutate(text);\n };\n\n return (\n <Stack gap={4} maxW=\"560px\">\n <Heading size=\"md\">{label}</Heading>\n <Box borderWidth=\"1px\" borderColor=\"gray.200\" borderRadius=\"md\" bg=\"white\" p={4} minH=\"240px\">\n <Stack gap={3}>\n {messages.length === 0 ? (\n <Text color=\"gray.400\" fontSize=\"sm\">\n Faça uma pergunta ao assistente.\n </Text>\n ) : (\n messages.map((m, idx) => (\n <Flex key={idx} justify={m.role === \"user\" ? \"flex-end\" : \"flex-start\"}>\n <Box\n bg={m.role === \"user\" ? \"brand.500\" : \"gray.100\"}\n color={m.role === \"user\" ? \"white\" : \"gray.800\"}\n px={3}\n py={2}\n borderRadius=\"md\"\n maxW=\"80%\"\n fontSize=\"sm\"\n >\n {m.content}\n </Box>\n </Flex>\n ))\n )}\n {ask.isPending ? (\n <Text color=\"gray.400\" fontSize=\"sm\">\n Pensando…\n </Text>\n ) : null}\n {ask.isError ? (\n <Text color=\"red.600\" fontSize=\"sm\">\n {ask.error?.message}\n </Text>\n ) : null}\n </Stack>\n </Box>\n <Flex gap={2}>\n <Input\n size=\"sm\"\n value={input}\n placeholder=\"Digite sua mensagem...\"\n onChange={(e) => setInput(e.currentTarget.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") send();\n }}\n />\n <Button size=\"sm\" colorPalette=\"blue\" onClick={send} loading={ask.isPending}>\n Enviar\n </Button>\n </Flex>\n </Stack>\n );\n}\n"],"mappings":"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","names":["useMemo","axios","axios","useMemo","createContext","useCallback","useContext","useEffect","useState","createContext","useContext","jsx","jsx","createContext","useState","useCallback","useEffect","value","useContext","jsx","useMemo","useState","Box","Heading","Stack","Text","useMutation","useQueryClient","useState","Box","Button","Flex","Text","useQuery","jsx","Text","jsx","jsxs","jsx","jsxs","useState","useQuery","Box","Flex","Text","Button","useEffect","useMemo","useState","Box","Button","Flex","Heading","Input","NativeSelect","Stack","Text","useEffect","useMemo","useState","Box","Button","Flex","Input","Spinner","Text","useQuery","jsx","jsxs","SearchIcon","ChevronIcon","useMemo","useState","useEffect","useQuery","start","Box","Button","Text","Flex","Input","Spinner","jsx","jsxs","Text","useState","useMemo","useEffect","Box","NativeSelect","Input","Flex","Heading","Button","Stack","useEffect","useMemo","useState","Box","Button","Flex","Heading","Text","useQuery","useQueryClient","useEffect","useState","Box","Button","Flex","Input","NativeSelect","SimpleGrid","Stack","Text","SimpleGrid","Box","Text","Badge","useQuery","meta","jsx","jsxs","format","useQuery","SimpleGrid","Box","Text","Badge","useMemo","useState","Badge","Box","Button","Flex","Table","Text","useQuery","Input","NativeSelect","Textarea","jsx","jsxs","useState","Button","Text","jsx","jsxs","messageOf","useState","Button","Text","Fragment","jsx","jsxs","useQuery","useMemo","useState","Text","Box","Table","Badge","Flex","Button","jsx","jsxs","coerce","toValue","useState","useEffect","Stack","Text","SimpleGrid","Box","NativeSelect","Input","Flex","Button","jsx","jsxs","useQueryClient","useState","useQuery","useEffect","useMemo","Flex","Box","Text","Heading","Button","jsx","jsxs","useQueryClient","useState","useMutation","Stack","Box","Text","Heading","jsx","useState","Badge","Box","Button","Flex","Heading","Stack","Text","useMutation","useQuery","useQueryClient","jsx","jsxs","useQueryClient","useState","useQuery","useMutation","Stack","Box","Text","Heading","Flex","Badge","Button","Box","Heading","SimpleGrid","Stack","Text","jsx","jsxs","Stack","Heading","SimpleGrid","Box","Text","Box","Heading","Stack","Text","Fragment","jsx","Box","Text","Fragment","jsx","jsxs","Box","Button","Flex","Heading","Spinner","Text","jsx","jsxs","Box","Flex","Heading","Text","Button","Spinner","jsx","jsxs","Text","Box","Heading","Stack","CorePage","jsx","requiredAccess","CorePage","Navigate","Box","Button","Flex","Spacer","Text","Box","Flex","Stack","Text","jsx","jsxs","Box","Flex","Text","Stack","jsx","jsxs","Flex","Box","Text","Spacer","Button","jsx","Box","Button","Flex","Heading","Text","jsx","jsxs","Flex","Box","Text","Heading","Button","Fragment","jsx","useState","Box","Button","Flex","Heading","Input","Text","VStack","Navigate","useLocation","jsx","jsxs","useLocation","useState","Navigate","Flex","Box","VStack","Text","Heading","Input","Button","useEffect","useState","Box","Button","Heading","Input","Text","VStack","Fragment","jsx","jsxs","encodeBasicCredentials","useState","useEffect","Box","Text","Input","Button","VStack","Heading","Fragment","jsx","Navigate","jsx","Navigate","jsx","Navigate","jsx","useMemo","storage","http","router","jsx","Badge","Box","Button","Flex","Heading","Stack","Text","useMutation","jsx","jsxs","useMutation","Stack","Flex","Heading","Button","Text","Box","Badge","Button","Flex","Heading","Stack","Text","useMutation","useQueryClient","jsx","jsxs","useQueryClient","useMutation","Stack","Flex","Heading","Button","Text","useState","Box","Button","Flex","Heading","Input","Stack","Text","useMutation","jsx","jsxs","useState","useMutation","Stack","Heading","Box","Text","Flex","Input","Button"]}