@oondemand/oon-core-front 0.3.31 → 0.3.32

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/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\ntype ErrorEnvelope = {\n code?: string;\n message?: string;\n details?: unknown;\n requestId?: string;\n field?: string;\n [key: string]: unknown;\n};\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?: ErrorEnvelope }\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 const legacyDetails = envelope && envelope.details === undefined && envelope.field\n ? envelope\n : undefined;\n return {\n code: envelope?.code || codeFromStatus(status),\n message: envelope?.message || data?.message || err.message || \"Erro inesperado.\",\n status,\n details: envelope?.details ?? legacyDetails,\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, OonComponentRegistry, 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 cellRenderers?: OonComponentRegistry[\"cellRenderers\"];\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, cellRenderers }: 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 cellRenderers={cellRenderers}\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 formFields={resolvedForm}\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, OonComponentRegistry, 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 cellRenderers?: OonComponentRegistry[\"cellRenderers\"];\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\nfunction renderColumnCell(\n row: Record<string, unknown>,\n column: OonColumnDef,\n cellRenderers?: OonComponentRegistry[\"cellRenderers\"],\n) {\n const value = row[column.field];\n const Renderer = column.renderer ? cellRenderers?.[column.renderer] : undefined;\n if (Renderer) return <Renderer value={value} row={row} column={column} />;\n return renderCell(value, column.kind);\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 cellRenderers,\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 {renderColumnCell(row, column, cellRenderers)}\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 & {\n multiline?: boolean;\n rows?: number;\n span?: 1 | 2;\n referenceFilters?: Record<string, unknown>;\n referenceFilterFrom?: Record<string, string>;\n referenceDisabledMessage?: string;\n referenceEmptyFields?: string[];\n};\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\nfunction resolveReference(field: ExtendedField, values: Record<string, string>) {\n const filters: Record<string, unknown> = { ...(field.referenceFilters ?? {}) };\n const missing: string[] = [];\n Object.entries(field.referenceFilterFrom ?? {}).forEach(([queryField, formField]) => {\n const value = values[formField];\n if (value) filters[queryField] = value;\n else missing.push(formField);\n });\n return { filters, disabled: missing.length > 0 };\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 = (fieldName: string, value: string) => {\n const extendedFields = fields as ExtendedField[];\n const dependentFields = extendedFields.filter((candidate) =>\n Object.values(candidate.referenceFilterFrom ?? {}).includes(fieldName),\n );\n setValues((current) => {\n const changed = current[fieldName] !== value;\n const next = { ...current, [fieldName]: value };\n if (changed) dependentFields.forEach((candidate) => { next[candidate.field] = \"\"; });\n return next;\n });\n setErrors((current) => {\n const next = { ...current };\n delete next[fieldName];\n dependentFields.forEach((candidate) => delete next[candidate.field]);\n return next;\n });\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) {\n const reference = resolveReference(field, values);\n 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} filters={reference.filters} emptyFields={field.referenceEmptyFields} disabled={reference.disabled} disabledMessage={field.referenceDisabledMessage} onChange={(value) => change(field.field, value)} />);\n }\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 filters?: Record<string, unknown>;\n /** Mantém somente registros em que todos estes campos estejam vazios/nulos. */\n emptyFields?: string[];\n disabled?: boolean;\n disabledMessage?: 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\nfunction cleanFilters(filters?: Record<string, unknown>) {\n return Object.fromEntries(\n Object.entries(filters ?? {}).filter(([, value]) => value !== undefined && value !== null && value !== \"\"),\n );\n}\n\n/** Dropdown pesquisável para campos relacionados, com filtros estáticos ou dependentes do formulário. */\nexport function ReferenceSelect({\n field,\n inputId,\n errorId,\n label,\n refModel,\n value,\n initialValue,\n required,\n invalid,\n error,\n filters,\n emptyFields = [],\n disabled = false,\n disabledMessage,\n onChange,\n}: ReferenceSelectProps) {\n const initialLabel = useMemo(() => initialReferenceLabel(initialValue), [initialValue]);\n const resolvedFilters = useMemo(() => cleanFilters(filters), [filters]);\n const filtersKey = useMemo(() => JSON.stringify(resolvedFilters), [resolvedFilters]);\n const emptyFieldsKey = useMemo(() => JSON.stringify(emptyFields), [emptyFields]);\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 (!disabled) return;\n setOpen(false);\n setActiveIndex(-1);\n }, [disabled]);\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, filtersKey, emptyFieldsKey],\n queryFn: () => resource.list({\n pageIndex: 0,\n pageSize: emptyFields.length ? 200 : 30,\n searchTerm: debouncedSearch || undefined,\n ...resolvedFilters,\n }),\n enabled: !!schema && open && !disabled,\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 ?? []).filter((record) =>\n emptyFields.every((fieldName) => {\n const candidate = record[fieldName];\n return candidate === undefined || candidate === null || candidate === \"\";\n }),\n );\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 (disabled) return;\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 const placeholder = disabled\n ? disabledMessage ?? \"Selecione primeiro o campo relacionado.\"\n : \"Selecione ou digite para pesquisar...\";\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 disabled={disabled}\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 (disabled) return;\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 _disabled={{ cursor: \"not-allowed\", color: \"#98A2B3\", bg: \"#F8FAFC\", opacity: 1 }}\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) : placeholder)}\n </Text>\n <Flex as=\"span\" align=\"center\" gap={1} flex=\"0 0 auto\" color=\"#98A2B3\">\n {value && !disabled ? (\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\n {error ? <Text id={errorId} role=\"alert\" mt=\"5px\" color=\"#DC2626\" fontSize=\"10px\" fontWeight=\"500\">{error}</Text> : 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, type ReactNode } 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, OonFormFieldDef, OonRelationDef } from \"../../types\";\nimport { formFieldsFromMeta } from \"./fieldUtils\";\nimport { CoreTabbedDetail } from \"./CoreTabbedDetail\";\n\nexport function CoreDetailModal({\n model,\n title,\n config,\n formFields,\n recordId,\n initialRecord,\n initialTab,\n relations,\n actions,\n onClose,\n onSaved,\n}: {\n model: string;\n title: string;\n config: OonDetailModalConfig;\n formFields?: OonFormFieldDef[];\n recordId?: string;\n initialRecord?: Record<string, unknown>;\n initialTab?: string;\n relations?: Record<string, OonRelationDef>;\n actions?: ReactNode;\n onClose: () => void;\n onSaved?: (record?: Record<string, unknown>) => void;\n}) {\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({\n queryKey: [\"oon\", \"detail\", model, recordId],\n enabled: !!recordId,\n queryFn: () => resource.get(recordId!),\n });\n\n useEffect(() => {\n if (parentQuery.data) setParent(parentQuery.data);\n }, [parentQuery.data]);\n\n const resolvedFormFields = useMemo(\n () => formFields?.length ? formFields : schema ? formFieldsFromMeta(schema.fields) : [],\n [formFields, schema],\n );\n\n const refresh = (targets?: string[]) => {\n const list = targets?.length ? targets : [\"self\"];\n if (list.includes(\"parent\") || list.includes(\"all\")) {\n if (recordId) queryClient.invalidateQueries({ queryKey: [\"oon\", \"detail\", model, recordId] });\n }\n setRefreshTokens((current) => {\n const next = { ...current };\n for (const target of list) {\n if (target === \"all\") {\n config.tabs.forEach((tab) => {\n next[tab.id] = (next[tab.id] ?? 0) + 1;\n });\n } else if (target !== \"parent\") {\n const tabId = target === \"self\" ? activeTab : target;\n next[tabId] = (next[tabId] ?? 0) + 1;\n }\n }\n return next;\n });\n };\n\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\n return (\n <Flex position=\"fixed\" inset={0} zIndex={1000} align=\"center\" justify=\"center\" p={4} bg=\"rgba(15,23,42,.48)\">\n <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)\">\n <Flex minH=\"72px\" px=\"20px\" align=\"center\" justify=\"space-between\" gap={4} borderBottomWidth=\"1px\" borderColor=\"#E5E9ED\">\n <Box>\n <Text color=\"#0474AF\" fontSize=\"10px\" fontWeight=\"700\" textTransform=\"uppercase\">Detalhe</Text>\n <Heading size=\"md\">{recordId ? displayTitle : `Novo ${title}`}</Heading>\n </Box>\n <Flex align=\"center\" justify=\"flex-end\" gap=\"6px\" wrap=\"wrap\">\n {recordId ? actions : null}\n <Button onClick={onClose}>Fechar</Button>\n </Flex>\n </Flex>\n <Box maxH=\"calc(94vh - 73px)\" p=\"20px\" overflowY=\"auto\">\n {schemaQuery.isLoading || parentQuery.isLoading ? (\n <Text>Carregando...</Text>\n ) : (\n <CoreTabbedDetail\n tabs={config.tabs}\n activeTab={activeTab}\n onTabChange={setActiveTab}\n parent={parent}\n formFields={resolvedFormFields}\n resource={resource}\n relations={relations}\n refreshTokens={refreshTokens}\n onRefresh={refresh}\n onParentSaved={(saved) => {\n setParent(saved);\n onSaved?.(saved);\n refresh([\"parent\"]);\n }}\n />\n )}\n </Box>\n </Box>\n </Flex>\n );\n}\n","import { useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { Box, Button, Flex, Input, NativeSelect, SimpleGrid, Stack, Text, Textarea } 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 { ReferenceSelect } from \"./ReferenceSelect\";\nimport { fieldLabel } from \"./fieldUtils\";\nimport { fieldsForTab } from \"./manifestUtils\";\n\ntype FormTab = Extract<OonDetailTabDef, { type: \"form\" }>;\ntype FormGroup = NonNullable<FormTab[\"groups\"]>[number];\ntype FieldErrors = Record<string, string>;\ntype ExtendedFormField = OonFormFieldDef & {\n /** Filtros fixos enviados como query params ao CRUD da model referenciada. */\n referenceFilters?: Record<string, unknown>;\n /** Mapeia query param da referência para outro campo do formulário. */\n referenceFilterFrom?: Record<string, string>;\n /** Mensagem exibida enquanto uma dependência ainda não foi selecionada. */\n referenceDisabledMessage?: string;\n referenceEmptyFields?: string[];\n};\n\nfunction coerce(value: string, kind?: string) {\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 toValue(value: unknown, kind?: string) {\n if (value == null) return \"\";\n if (kind === \"date\") {\n try {\n return new Date(value as string).toISOString().slice(0, 10);\n } catch {\n return \"\";\n }\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 isMultiline(field: OonFormFieldDef) {\n return /observa|descricao|mensagem|detalhe|necessidade/i.test(field.field);\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\") {\n const nested = record.error as Record<string, unknown>;\n if (typeof nested.message === \"string\") return nested.message;\n }\n }\n return \"Não foi possível salvar o registro.\";\n}\n\nfunction fieldErrorsOf(error: unknown): FieldErrors {\n if (!error || typeof error !== \"object\") return {};\n const record = error as Record<string, unknown>;\n const envelope = record.error && typeof record.error === \"object\"\n ? record.error as Record<string, unknown>\n : undefined;\n const details = record.details ?? envelope?.details ?? envelope;\n const result: FieldErrors = {};\n\n const visit = (value: unknown) => {\n if (!value) return;\n if (Array.isArray(value)) {\n value.forEach(visit);\n return;\n }\n if (typeof value !== \"object\") return;\n const item = value as Record<string, unknown>;\n if (typeof item.field === \"string\" && typeof item.message === \"string\") {\n result[item.field] = item.message;\n }\n Object.values(item).forEach((nested) => {\n if (nested !== item.field && nested !== item.message) visit(nested);\n });\n };\n\n visit(details);\n return result;\n}\n\nfunction requiredErrors(fields: ExtendedFormField[], values: Record<string, string>) {\n const errors: FieldErrors = {};\n fields.forEach((field) => {\n if (field.required && !(values[field.field] ?? \"\").trim()) {\n errors[field.field] = `${fieldLabel({ name: field.field, label: field.label })} é obrigatório.`;\n }\n });\n return errors;\n}\n\nfunction resolveReference(field: ExtendedFormField, values: Record<string, string>) {\n const filters: Record<string, unknown> = { ...(field.referenceFilters ?? {}) };\n const missing: string[] = [];\n Object.entries(field.referenceFilterFrom ?? {}).forEach(([queryField, formField]) => {\n const value = values[formField];\n if (value) filters[queryField] = value;\n else missing.push(formField);\n });\n return { filters, disabled: missing.length > 0 };\n}\n\nfunction FieldLabel({ field, htmlFor }: { field: ExtendedFormField; htmlFor?: string }) {\n const label = fieldLabel({ name: field.field, label: field.label });\n return (\n <label htmlFor={htmlFor}>\n <Text as=\"span\" display=\"block\" mb=\"5px\" color=\"#475467\" fontSize=\"11px\" fontWeight=\"600\">\n {label}{field.required ? <Text as=\"span\" color=\"#DC2626\"> *</Text> : null}\n </Text>\n </label>\n );\n}\n\nfunction ErrorText({ id, message }: { id: string; message?: string }) {\n return message ? <Text id={id} role=\"alert\" mt=\"5px\" color=\"#DC2626\" fontSize=\"10px\" fontWeight=\"500\">{message}</Text> : null;\n}\n\nfunction FieldControl({\n field,\n value,\n values,\n initialValue,\n error,\n onChange,\n}: {\n field: ExtendedFormField;\n value: string;\n values: Record<string, string>;\n initialValue?: unknown;\n error?: string;\n onChange: (value: string) => void;\n}) {\n const label = fieldLabel({ name: field.field, label: field.label });\n const inputId = `oon-detail-field-${field.field.replace(/[^a-zA-Z0-9_-]/g, \"-\")}`;\n const errorId = `${inputId}-error`;\n const invalidProps = {\n \"aria-invalid\": error ? true : undefined,\n \"aria-describedby\": error ? errorId : undefined,\n borderColor: error ? \"#DC2626\" : undefined,\n boxShadow: error ? \"0 0 0 3px rgba(220,38,38,.08)\" : undefined,\n };\n\n if (field.widget === \"checkbox\") {\n const checkedValue = String(field.checkedValue ?? true);\n const uncheckedValue = String(field.uncheckedValue ?? false);\n const checked = (value || uncheckedValue) === checkedValue;\n return (\n <Box>\n <Box\n as=\"label\"\n display=\"flex\"\n minH=\"38px\"\n px=\"11px\"\n alignItems=\"center\"\n gap=\"8px\"\n color=\"#344054\"\n bg={checked ? \"#F0F7FF\" : \"white\"}\n borderWidth=\"1px\"\n borderColor={error ? \"#DC2626\" : checked ? \"#8FC9E7\" : \"#D5DDE3\"}\n borderRadius=\"7px\"\n cursor=\"pointer\"\n >\n <input\n id={inputId}\n type=\"checkbox\"\n checked={checked}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? errorId : undefined}\n style={{ width: 16, height: 16, accentColor: \"#0474AF\", cursor: \"pointer\" }}\n onChange={(event) => onChange(event.currentTarget.checked ? checkedValue : uncheckedValue)}\n />\n <Text as=\"span\" fontSize=\"11px\" fontWeight=\"600\">{label}</Text>\n </Box>\n <ErrorText id={errorId} message={error} />\n </Box>\n );\n }\n\n if (field.kind === \"ref\" && field.ref) {\n const reference = resolveReference(field, values);\n return (\n <Box>\n <FieldLabel field={field} htmlFor={inputId} />\n <ReferenceSelect\n field={field.field}\n inputId={inputId}\n errorId={errorId}\n label={label}\n refModel={field.ref}\n value={value}\n initialValue={initialValue}\n required={field.required}\n invalid={!!error}\n error={error}\n filters={reference.filters}\n emptyFields={field.referenceEmptyFields}\n disabled={reference.disabled}\n disabledMessage={field.referenceDisabledMessage}\n onChange={onChange}\n />\n </Box>\n );\n }\n\n const control = field.kind === \"enum\" && field.options?.length ? (\n <NativeSelect.Root size=\"sm\">\n <NativeSelect.Field id={inputId} value={value} {...invalidProps} onChange={(event) => onChange(event.currentTarget.value)}>\n <option value=\"\">— Selecione —</option>\n {field.options.map((option) => <option key={option} value={option}>{option}</option>)}\n </NativeSelect.Field>\n <NativeSelect.Indicator />\n </NativeSelect.Root>\n ) : field.kind === \"boolean\" ? (\n <NativeSelect.Root size=\"sm\">\n <NativeSelect.Field id={inputId} value={value} {...invalidProps} onChange={(event) => onChange(event.currentTarget.value)}>\n <option value=\"\">— Selecione —</option>\n <option value=\"true\">Sim</option>\n <option value=\"false\">Não</option>\n </NativeSelect.Field>\n <NativeSelect.Indicator />\n </NativeSelect.Root>\n ) : isMultiline(field) ? (\n <Textarea id={inputId} rows={4} resize=\"vertical\" value={value} {...invalidProps} onChange={(event) => onChange(event.currentTarget.value)} />\n ) : (\n <Input\n id={inputId}\n size=\"sm\"\n type={field.kind === \"date\" ? \"date\" : [\"number\", \"currency\", \"currencyConverted\"].includes(field.kind ?? \"\") ? \"number\" : \"text\"}\n value={value}\n {...invalidProps}\n onChange={(event) => onChange(event.currentTarget.value)}\n />\n );\n\n return (\n <Box>\n <FieldLabel field={field} htmlFor={inputId} />\n {control}\n <ErrorText id={errorId} message={error} />\n </Box>\n );\n}\n\nfunction GroupSection({\n group,\n fields,\n values,\n initialValues,\n errors,\n onChange,\n}: {\n group: FormGroup;\n fields: ExtendedFormField[];\n values: Record<string, string>;\n initialValues: Record<string, unknown>;\n errors: FieldErrors;\n onChange: (field: string, value: string) => void;\n}) {\n if (!fields.length) return null;\n const columns = group.columns ?? 2;\n return (\n <Box p={{ base: \"12px\", md: \"14px\" }} bg=\"#FAFCFD\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"9px\">\n <Text color=\"#344054\" fontSize=\"12px\" fontWeight=\"700\">{group.label}</Text>\n {group.description ? <Text mt=\"2px\" mb=\"12px\" color=\"#667085\" fontSize=\"10px\">{group.description}</Text> : <Box h=\"10px\" />}\n <SimpleGrid columns={{ base: 1, md: Math.min(columns, 2), xl: columns }} gapX=\"16px\" gapY=\"14px\">\n {fields.map((field) => (\n <FieldControl\n key={field.field}\n field={field}\n value={values[field.field] ?? \"\"}\n values={values}\n initialValue={initialValues[field.field]}\n error={errors[field.field]}\n onChange={(value) => onChange(field.field, value)}\n />\n ))}\n </SimpleGrid>\n </Box>\n );\n}\n\nfunction InlineParentForm({\n fields: rawFields,\n groups,\n parent,\n resource,\n onSaved,\n}: {\n fields: OonFormFieldDef[];\n groups?: FormGroup[];\n parent: Record<string, unknown>;\n resource: ResourceClient;\n onSaved: (record: Record<string, unknown>) => void;\n}) {\n const fields = rawFields as ExtendedFormField[];\n const [values, setValues] = useState<Record<string, string>>({});\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<unknown>(null);\n const [fieldErrors, setFieldErrors] = useState<FieldErrors>({});\n\n useEffect(() => {\n setValues(Object.fromEntries(fields.map((field) => [field.field, toValue(parent[field.field], field.kind)])));\n setError(null);\n setFieldErrors({});\n }, [parent, rawFields]);\n\n const fieldsByName = useMemo(() => new Map(fields.map((field) => [field.field, field])), [rawFields]);\n\n const change = (fieldName: string, value: string) => {\n const dependentFields = fields.filter((candidate) =>\n Object.values(candidate.referenceFilterFrom ?? {}).includes(fieldName),\n );\n\n setValues((current) => {\n const changed = current[fieldName] !== value;\n const next = { ...current, [fieldName]: value };\n if (changed) dependentFields.forEach((candidate) => { next[candidate.field] = \"\"; });\n return next;\n });\n setFieldErrors((current) => {\n const next = { ...current };\n delete next[fieldName];\n dependentFields.forEach((candidate) => delete next[candidate.field]);\n return next;\n });\n setError(null);\n };\n\n const renderFields = (): ReactNode => {\n if (groups?.length) {\n return (\n <Stack gap=\"14px\">\n {groups.map((group) => (\n <GroupSection\n key={`${group.label}-${group.fields.join(\"-\")}`}\n group={group}\n fields={group.fields.map((field) => fieldsByName.get(field)).filter(Boolean) as ExtendedFormField[]}\n values={values}\n initialValues={parent}\n errors={fieldErrors}\n onChange={change}\n />\n ))}\n </Stack>\n );\n }\n\n return (\n <SimpleGrid columns={{ base: 1, md: 2 }} gap=\"14px\">\n {fields.map((field) => (\n <FieldControl\n key={field.field}\n field={field}\n value={values[field.field] ?? \"\"}\n values={values}\n initialValue={parent[field.field]}\n error={fieldErrors[field.field]}\n onChange={(value) => change(field.field, value)}\n />\n ))}\n </SimpleGrid>\n );\n };\n\n return (\n <form\n noValidate\n onSubmit={async (event) => {\n event.preventDefault();\n const validation = requiredErrors(fields, values);\n if (Object.keys(validation).length) {\n setFieldErrors(validation);\n setError({ message: \"Preencha os campos obrigatórios destacados.\" });\n return;\n }\n\n setSaving(true);\n setError(null);\n setFieldErrors({});\n try {\n const payload = Object.fromEntries(\n fields\n .map((field) => [field.field, coerce(values[field.field] ?? \"\", field.kind)])\n .filter(([, value]) => value !== undefined),\n );\n const saved = parent._id\n ? await resource.update(String(parent._id), payload)\n : await resource.create(payload);\n onSaved(saved);\n } catch (requestError) {\n setError(requestError);\n setFieldErrors(fieldErrorsOf(requestError));\n } finally {\n setSaving(false);\n }\n }}\n >\n <Stack gap=\"16px\">\n {error ? (\n <Box role=\"alert\" p=\"10px 12px\" color=\"#B42318\" bg=\"#FEF3F2\" borderWidth=\"1px\" borderColor=\"#FECDCA\" borderRadius=\"7px\" fontSize=\"11px\">\n {messageOf(error)}\n </Box>\n ) : null}\n {renderFields()}\n <Flex justify=\"flex-end\">\n <Button type=\"submit\" colorPalette=\"brand\" loading={saving}>Salvar dados principais</Button>\n </Flex>\n </Stack>\n </form>\n );\n}\n\nexport function CoreTabbedDetail({\n tabs,\n activeTab,\n onTabChange,\n parent,\n formFields,\n resource,\n relations,\n refreshTokens,\n onRefresh,\n onParentSaved,\n}: {\n tabs: OonDetailTabDef[];\n activeTab: string;\n onTabChange: (id: string) => void;\n parent?: Record<string, unknown>;\n formFields: OonFormFieldDef[];\n resource: ResourceClient;\n relations?: Record<string, OonRelationDef>;\n refreshTokens: Record<string, number>;\n onRefresh: (targets?: string[]) => void;\n onParentSaved: (record: Record<string, unknown>) => void;\n}) {\n const active = tabs.find((tab) => tab.id === activeTab) ?? tabs[0];\n\n return (\n <Stack gap={4}>\n <Flex gap={2} borderBottomWidth=\"1px\" borderColor=\"#E5E9ED\" overflowX=\"auto\">\n {tabs.map((tab) => {\n const disabled = !parent?._id && (tab.type === \"relatedGrid\" || tab.type === \"readonlyGrid\" || tab.type === \"summary\");\n return (\n <Button\n key={tab.id}\n type=\"button\"\n variant={active?.id === tab.id ? \"solid\" : \"ghost\"}\n colorPalette={active?.id === tab.id ? \"brand\" : undefined}\n disabled={disabled}\n onClick={() => onTabChange(tab.id)}\n >\n {tab.label}\n </Button>\n );\n })}\n </Flex>\n <Box>\n {!active ? null : active.type === \"summary\" && parent ? (\n <CoreSummaryCards cards={active.cards} parent={parent} relations={relations} />\n ) : active.type === \"form\" ? (\n <InlineParentForm\n fields={fieldsForTab(formFields, active.fields ?? active.groups?.flatMap((group) => group.fields))}\n groups={active.groups}\n parent={parent ?? {}}\n resource={resource}\n onSaved={onParentSaved}\n />\n ) : (active.type === \"relatedGrid\" || active.type === \"readonlyGrid\") && parent ? (\n <CoreRelatedGrid\n tab={active}\n parent={parent}\n relations={relations}\n refreshToken={refreshTokens[active.id]}\n onRefresh={onRefresh}\n />\n ) : active.type === \"customComponent\" ? (\n <Text color=\"#667085\">Componente customizado: {active.component}</Text>\n ) : (\n <Text color=\"#667085\">Salve o registro principal para liberar esta aba.</Text>\n )}\n </Box>\n </Stack>\n );\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, OonFormFieldDef, OonRelationDef } from \"../../types\";\nimport { formatCell, formFieldsFromMeta } from \"./fieldUtils\";\nimport { CoreInlineEditableCell } from \"./CoreInlineEditableCell\";\nimport { CoreRowAction } from \"./CoreRowAction\";\nimport { DynamicForm } from \"./DynamicForm\";\nimport { normalizeColumn, relationFrom } from \"./manifestUtils\";\n\ntype RelatedTab = Extract<OonDetailTabDef, { type: \"relatedGrid\" | \"readonlyGrid\" }> & {\n create?: {\n enabled?: boolean;\n label?: string;\n fields?: OonFormFieldDef[];\n initialValues?: Record<string, unknown>;\n };\n delete?: {\n enabled?: boolean;\n confirm?: string;\n };\n};\n\nexport function CoreRelatedGrid({\n tab: rawTab,\n parent,\n relations,\n refreshToken,\n onRefresh,\n}: {\n tab: Extract<OonDetailTabDef, { type: \"relatedGrid\" | \"readonlyGrid\" }>;\n parent: Record<string, unknown>;\n relations?: Record<string, OonRelationDef>;\n refreshToken?: number;\n onRefresh?: (targets?: string[]) => void;\n}) {\n const tab = rawTab as RelatedTab;\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({\n queryKey: key,\n enabled: !!relation && parentValue != null,\n queryFn: () => resource.list({ [relation!.foreignKey]: parentValue, pageSize: 1000 }),\n });\n const columns = useMemo(\n () => (tab.columns?.length ? tab.columns : schema?.fields.slice(0, 8).map((field) => field.name) ?? [])\n .map((column) => normalizeColumn(column, schema))\n .filter((column) => !column.hidden),\n [tab.columns, schema],\n );\n const [drafts, setDrafts] = useState<Record<string, Record<string, unknown>>>({});\n const [errors, setErrors] = useState<Record<string, unknown>>({});\n const [creating, setCreating] = useState(false);\n const [createError, setCreateError] = useState<unknown>(null);\n const editable = tab.type === \"relatedGrid\" && tab.editable && tab.editMode === \"inline\";\n const canCreate = tab.type === \"relatedGrid\" && tab.create?.enabled !== false && !!tab.create;\n const canDelete = tab.type === \"relatedGrid\" && tab.delete?.enabled === true;\n const hasActions = editable || canDelete || !!tab.rowActions?.length;\n\n const invalidate = async () => {\n await queryClient.invalidateQueries({ queryKey: key });\n onRefresh?.([\"self\"]);\n };\n\n const updateMutation = useMutation({\n mutationFn: ({ id, values }: { id: string; values: Record<string, unknown> }) => resource.update(id, values),\n onSuccess: invalidate,\n });\n const createMutation = useMutation({\n mutationFn: (values: Record<string, unknown>) => resource.create({\n ...(tab.create?.initialValues ?? {}),\n ...values,\n ...(relation && parentValue != null ? { [relation.foreignKey]: parentValue } : {}),\n }),\n onSuccess: async () => {\n await invalidate();\n setCreating(false);\n setCreateError(null);\n },\n onError: setCreateError,\n });\n const deleteMutation = useMutation({\n mutationFn: (id: string) => resource.delete(id),\n onSuccess: invalidate,\n });\n\n if (!relation) return <Text color=\"#B42318\">Relação não encontrada.</Text>;\n if (query.isLoading || schemaQuery.isLoading) return <Text color=\"#667085\">Carregando...</Text>;\n\n const rows = query.data?.results ?? [];\n const setDraft = (id: string, field: string, value: unknown) => setDrafts((current) => ({\n ...current,\n [id]: { ...(current[id] ?? {}), [field]: value },\n }));\n const createFields = tab.create?.fields?.length\n ? tab.create.fields\n : formFieldsFromMeta(schema?.fields ?? []).filter((field) => ![relation.foreignKey, \"_id\", \"createdAt\", \"updatedAt\"].includes(field.field));\n\n return (\n <Box>\n {canCreate ? (\n <Flex justify=\"flex-end\" mb=\"10px\">\n <Button size=\"sm\" colorPalette=\"brand\" onClick={() => { setCreateError(null); setCreating(true); }}>\n {tab.create?.label ?? \"Novo registro\"}\n </Button>\n </Flex>\n ) : null}\n <Box overflowX=\"auto\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"10px\">\n <Table.Root size=\"sm\" minW=\"760px\">\n <Table.Header>\n <Table.Row bg=\"#F4F7F9\">\n {columns.map((column) => <Table.ColumnHeader key={column.field} fontSize=\"10px\">{column.label ?? column.field}</Table.ColumnHeader>)}\n {hasActions ? <Table.ColumnHeader>Ações</Table.ColumnHeader> : null}\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {rows.map((row, index) => {\n const id = String(row._id ?? row.id ?? index);\n const draft = drafts[id] ?? {};\n const dirty = Object.keys(draft).length > 0;\n return (\n <Table.Row key={id} bg={dirty ? \"#FFFBEB\" : index % 2 ? \"#FBFCFD\" : \"white\"}>\n {columns.map((column) => {\n const value = column.field in draft ? draft[column.field] : row[column.field];\n const meta = schema?.fields.find((field) => field.name === column.field);\n const canEdit = editable && column.readonly !== true && (column.editable === true || !column.readonly);\n return (\n <Table.Cell key={column.field} fontSize=\"11px\">\n {canEdit ? (\n <CoreInlineEditableCell column={column} meta={meta} value={value} onChange={(next) => setDraft(id, column.field, next)} />\n ) : column.display === \"badgeExists\" ? (\n <Badge colorPalette={value ? \"green\" : \"gray\"}>{value ? \"Sim\" : \"Não\"}</Badge>\n ) : formatCell(value, column.kind)}\n </Table.Cell>\n );\n })}\n {hasActions ? (\n <Table.Cell>\n <Flex gap=\"5px\" align=\"center\" wrap=\"wrap\">\n {dirty ? (\n <>\n <Button\n size=\"xs\"\n loading={updateMutation.isPending}\n onClick={() => {\n setErrors((current) => ({ ...current, [id]: undefined }));\n updateMutation.mutate({ id, values: draft }, {\n onSuccess: () => setDrafts((current) => {\n const next = { ...current };\n delete next[id];\n return next;\n }),\n onError: (error) => setErrors((current) => ({ ...current, [id]: error })),\n });\n }}\n >\n Salvar\n </Button>\n <Button size=\"xs\" variant=\"outline\" onClick={() => setDrafts((current) => {\n const next = { ...current };\n delete next[id];\n return next;\n })}>\n Cancelar\n </Button>\n </>\n ) : null}\n {tab.rowActions?.map((action) => (\n <CoreRowAction key={action.id ?? action.label} action={action} row={row} parent={parent} onRefresh={onRefresh} />\n ))}\n {canDelete ? (\n <Button\n size=\"xs\"\n variant=\"outline\"\n loading={deleteMutation.isPending}\n onClick={() => {\n const message = tab.delete?.confirm ?? \"Excluir este registro relacionado?\";\n if (window.confirm(message)) deleteMutation.mutate(id);\n }}\n >\n Excluir\n </Button>\n ) : null}\n {errors[id] ? <Text color=\"#B42318\" fontSize=\"9px\">Erro ao salvar.</Text> : null}\n </Flex>\n </Table.Cell>\n ) : null}\n </Table.Row>\n );\n })}\n {rows.length === 0 ? (\n <Table.Row>\n <Table.Cell colSpan={columns.length + (hasActions ? 1 : 0)}>\n <Text p=\"8\" textAlign=\"center\" color=\"#98A2B3\">Nenhum registro relacionado.</Text>\n </Table.Cell>\n </Table.Row>\n ) : null}\n </Table.Body>\n </Table.Root>\n </Box>\n {creating ? (\n <DynamicForm\n title={tab.create?.label ?? `Novo ${schema?.singular ?? relation.model}`}\n eyebrow=\"Registro relacionado\"\n fields={createFields}\n initialValues={tab.create?.initialValues}\n submitting={createMutation.isPending}\n error={createError}\n onSubmit={(values) => createMutation.mutate(values)}\n onFieldChange={() => setCreateError(null)}\n onCancel={() => {\n if (!createMutation.isPending) setCreating(false);\n }}\n />\n ) : null}\n </Box>\n );\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 type { OonPipelineActionDef } from \"../../pipelineTicket\";\nimport { DynamicForm } from \"./DynamicForm\";\nimport { evaluateCondition, interpolateEndpoint } from \"./conditions\";\n\nexport interface CoreRowActionProps {\n action: OonRowActionDef | OonPipelineActionDef;\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 onUpdate?: (values: Record<string, unknown>) => Promise<unknown>;\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\nfunction unwrap(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== \"object\") return {};\n const record = value as Record<string, unknown>;\n const data = record.data;\n if (data && typeof data === \"object\") return data as Record<string, unknown>;\n return record;\n}\n\nexport function CoreRowAction({ action, row, parent, onOpenDetail, onRefresh, onUpdate }: CoreRowActionProps) {\n const { http } = useOonApi();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<unknown>(null);\n const [formOpen, setFormOpen] = useState(false);\n const [formInitialValues, setFormInitialValues] = useState<Record<string, unknown>>({});\n const pipelineAction = action as OonPipelineActionDef;\n\n if (evaluateCondition(action.hiddenWhen, row)) return null;\n const disabled = evaluateCondition(action.disabledWhen, row) || loading;\n\n const confirmAction = () => action.confirm\n ? window.confirm(action.confirm.description ?? action.confirm.title ?? `Executar ${action.label}?`)\n : true;\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\n if (pipelineAction.type === \"formAction\") {\n if (!confirmAction()) return;\n setLoading(true);\n try {\n let loaded: Record<string, unknown> = {};\n if (pipelineAction.loadEndpoint) {\n const url = interpolateEndpoint(pipelineAction.loadEndpoint, row, parent);\n loaded = unwrap(await http.request({ url, method: \"GET\" }));\n }\n setFormInitialValues({ ...(pipelineAction.initialValues ?? {}), ...loaded });\n setFormOpen(true);\n } catch (err) {\n setError(err);\n } finally {\n setLoading(false);\n }\n return;\n }\n\n if (pipelineAction.type === \"setField\" || pipelineAction.type === \"transition\") {\n if (!pipelineAction.field || !onUpdate || !confirmAction()) return;\n setLoading(true);\n try {\n await onUpdate({ [pipelineAction.field]: pipelineAction.value });\n onRefresh?.(pipelineAction.refresh);\n } catch (err) {\n setError(err);\n } finally {\n setLoading(false);\n }\n return;\n }\n\n if (action.type !== \"apiAction\" || !action.endpoint || !confirmAction()) 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 {formOpen && pipelineAction.type === \"formAction\" ? (\n <DynamicForm\n title={pipelineAction.title ?? pipelineAction.label}\n eyebrow=\"Ação\"\n fields={pipelineAction.fields ?? []}\n initialValues={formInitialValues}\n submitting={loading}\n error={error}\n onSubmit={async (values) => {\n if (!pipelineAction.endpoint) return;\n setLoading(true);\n setError(null);\n try {\n const url = interpolateEndpoint(pipelineAction.endpoint, row, parent);\n await http.request({ url, method: pipelineAction.method ?? \"POST\", data: values });\n setFormOpen(false);\n onRefresh?.(pipelineAction.refresh);\n } catch (err) {\n setError(err);\n } finally {\n setLoading(false);\n }\n }}\n onFieldChange={() => setError(null)}\n onCancel={() => {\n if (!loading) setFormOpen(false);\n }}\n />\n ) : 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, Input, NativeSelect, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport type { OonCollectionListConfig, OonDetailModalConfig, OonFormFieldDef, OonListFilterDef, OonRelationDef } from \"../types\";\nimport type { OonPipelineActionDef, OonPipelineCreateDef, OonPipelineViewMode } from \"../pipelineTicket\";\nimport { useModelSchema, useOonResource } from \"../api/ApiProvider\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\nimport { ErrorState } from \"../shell/ErrorState\";\nimport { DynamicForm } from \"./internal/DynamicForm\";\nimport { CoreDetailModal } from \"./internal/CoreDetailModal\";\nimport { CoreRowAction } from \"./internal/CoreRowAction\";\nimport { DataGrid } from \"./internal/DataGrid\";\nimport { ReferenceSelect } from \"./internal/ReferenceSelect\";\nimport { columnsFromMeta, fieldLabel, formatCell, formFieldsFromMeta } from \"./internal/fieldUtils\";\nimport { normalizeColumn } from \"./internal/manifestUtils\";\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 form?: OonFormFieldDef[];\n relations?: Record<string, OonRelationDef>;\n ticketModal?: OonDetailModalConfig;\n filters?: OonListFilterDef[];\n create?: OonPipelineCreateDef;\n viewModes?: OonPipelineViewMode[];\n defaultView?: OonPipelineViewMode;\n list?: OonCollectionListConfig;\n ticketActions?: OonPipelineActionDef[];\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\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\nfunction PipelineFilterControl({\n filter,\n value,\n meta,\n onChange,\n}: {\n filter: OonListFilterDef;\n value: unknown;\n meta?: { ref?: string };\n onChange: (value: string) => void;\n}) {\n if (filter.type === \"ref\" && meta?.ref) {\n return (\n <Box w=\"220px\">\n <ReferenceSelect\n field={filter.field}\n inputId={`pipeline-filter-${filter.field}`}\n label={filter.label ?? filter.field}\n refModel={meta.ref}\n value={String(value ?? \"\")}\n initialValue={value}\n required={false}\n invalid={false}\n filters={{}}\n disabled={false}\n onChange={(next) => onChange(next)}\n />\n </Box>\n );\n }\n\n if (filter.type === \"select\") {\n return (\n <NativeSelect.Root size=\"sm\" w=\"190px\">\n <NativeSelect.Field value={String(value ?? \"\")} onChange={(event) => onChange(event.currentTarget.value)}>\n {(filter.options ?? []).map((option) => (\n <option key={String(option.value ?? \"\")} value={String(option.value ?? \"\")}>{option.label}</option>\n ))}\n </NativeSelect.Field>\n <NativeSelect.Indicator />\n </NativeSelect.Root>\n );\n }\n\n return (\n <Input\n w=\"190px\"\n h=\"35px\"\n fontSize=\"11px\"\n type={filter.type === \"date\" ? \"date\" : \"text\"}\n placeholder={filter.placeholder ?? filter.label ?? filter.field}\n value={String(value ?? \"\")}\n onChange={(event) => onChange(event.currentTarget.value)}\n />\n );\n}\n\n/** Esteira com quadro/lista, filtros, inclusão e ações operacionais no ticket. */\nexport function CorePipeline({\n model,\n label,\n endpoint,\n stageField = \"status\",\n stages,\n titleField,\n form,\n relations,\n ticketModal,\n filters = [],\n create,\n viewModes = [\"board\"],\n defaultView,\n list,\n ticketActions = [],\n}: 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 allowedViewModes: OonPipelineViewMode[] = viewModes.length ? viewModes : [\"board\"];\n const initialView: OonPipelineViewMode = defaultView && allowedViewModes.includes(defaultView)\n ? defaultView\n : allowedViewModes[0] ?? \"board\";\n const [viewMode, setViewMode] = useState<OonPipelineViewMode>(initialView);\n const [filterValues, setFilterValues] = useState<Record<string, unknown>>(() =>\n Object.fromEntries(filters.map((filter) => [filter.field, filter.defaultValue ?? \"\"])),\n );\n const [selectedTicket, setSelectedTicket] = useState<Record<string, unknown> | null>(null);\n const [creating, setCreating] = useState(false);\n const [formError, setFormError] = useState<unknown>(null);\n const effectiveFilters = Object.fromEntries(\n Object.entries(filterValues).filter(([, value]) => value !== \"\" && value != null),\n );\n\n const listQuery = useQuery({\n queryKey: [\"oon\", \"pipeline\", basePath, effectiveFilters],\n queryFn: () => resource.list({ pageSize: 200, ...effectiveFilters }),\n enabled: !!schema && viewMode === \"board\",\n });\n\n const invalidate = async () => {\n await Promise.all([\n queryClient.invalidateQueries({ queryKey: [\"oon\", \"pipeline\", basePath] }),\n queryClient.invalidateQueries({ queryKey: [\"oon\", \"list\", basePath] }),\n ]);\n };\n\n const saveMutation = useMutation({\n mutationFn: (values: Record<string, unknown>) => {\n const id = selectedTicket ? ticketId(selectedTicket) : undefined;\n return id ? resource.update(id, values) : resource.create(values);\n },\n onSuccess: async () => {\n await invalidate();\n setSelectedTicket(null);\n setCreating(false);\n setFormError(null);\n },\n onError: (error) => setFormError(error),\n });\n\n if (schemaQuery.isLoading || (viewMode === \"board\" && listQuery.isLoading)) return <LoadingScreen />;\n if (schemaQuery.isError) return <ErrorState error={schemaQuery.error} />;\n if (viewMode === \"board\" && 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 resolvedTitleField = titleField\n ?? ticketModal?.titleField\n ?? schema?.fields.find((field) => field.kind === \"string\")?.name\n ?? schema?.searchable[0]\n ?? \"_id\";\n const detailFields = (schema?.fields ?? [])\n .filter((field) => field.name !== stageField && field.name !== resolvedTitleField && field.kind !== \"raw\")\n .slice(0, 3);\n const formFields = mergeFormFields(formFieldsFromMeta(schema?.fields ?? []), form);\n const resolvedListColumns = list?.columns?.length\n ? list.columns.map((column) => normalizeColumn(column, schema))\n : columnsFromMeta(schema?.fields ?? []).slice(0, 10);\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 const openCreate = () => {\n const defaultStage = create?.defaultStage ?? resolvedStages[0]?.id;\n setFormError(null);\n setCreating(true);\n setSelectedTicket({\n ...(create?.defaultValues ?? {}),\n ...(defaultStage ? { [stageField]: defaultStage } : {}),\n });\n };\n\n const modalActions = selectedTicket && !creating ? (\n <Flex gap=\"5px\" align=\"center\" wrap=\"wrap\">\n {ticketActions.map((action, index) => (\n <CoreRowAction\n key={action.id ?? `${action.label}-${index}`}\n action={action}\n row={selectedTicket}\n onUpdate={async (values) => {\n const id = ticketId(selectedTicket);\n if (!id) throw new Error(\"Ticket sem identificador.\");\n const saved = await resource.update(id, values);\n setSelectedTicket((current) => ({ ...(current ?? {}), ...saved, ...values }));\n await invalidate();\n return saved;\n }}\n onRefresh={() => { void invalidate(); }}\n />\n ))}\n </Flex>\n ) : null;\n\n return (\n <Stack gap={5}>\n <Flex align={{ base: \"stretch\", md: \"flex-end\" }} justify=\"space-between\" gap={4} direction={{ base: \"column\", md: \"row\" }}>\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 <Flex gap=\"8px\" align=\"center\" wrap=\"wrap\">\n {allowedViewModes.length > 1 ? allowedViewModes.map((mode) => (\n <Button key={mode} size=\"sm\" variant={viewMode === mode ? \"solid\" : \"outline\"} colorPalette=\"brand\" onClick={() => setViewMode(mode)}>\n {mode === \"board\" ? \"Quadro\" : \"Lista\"}\n </Button>\n )) : null}\n {create?.enabled ? (\n <Button size=\"sm\" colorPalette=\"brand\" onClick={openCreate}>{create.label ?? \"Novo ticket\"}</Button>\n ) : null}\n </Flex>\n </Flex>\n\n {filters.length ? (\n <Flex p=\"12px\" gap=\"10px\" align=\"flex-end\" wrap=\"wrap\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"10px\">\n {filters.map((filter) => {\n const meta = schema?.fields.find((field) => field.name === filter.field);\n return (\n <Box key={filter.field}>\n <Text mb=\"4px\" fontSize=\"10px\" color=\"#667085\" fontWeight=\"600\">\n {filter.label ?? fieldLabel({ name: filter.field })}\n </Text>\n <PipelineFilterControl\n filter={filter}\n value={filterValues[filter.field]}\n meta={meta}\n onChange={(value) => setFilterValues((current) => ({ ...current, [filter.field]: value }))}\n />\n </Box>\n );\n })}\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setFilterValues(Object.fromEntries(filters.map((filter) => [filter.field, filter.defaultValue ?? \"\"])))}\n >\n Limpar filtros\n </Button>\n </Flex>\n ) : null}\n\n {viewMode === \"list\" ? (\n <DataGrid\n resource={resource}\n resourceKey={basePath}\n columns={resolvedListColumns}\n filters={[]}\n queryExtra={effectiveFilters}\n onEdit={(row) => {\n setCreating(false);\n setSelectedTicket(row);\n }}\n />\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 key={stageId} minW=\"300px\" maxW=\"340px\" flex=\"1 0 300px\" bg=\"#E8ECEF\" borderRadius=\"12px\" p={3} borderWidth=\"1px\" borderColor=\"#DDE3E7\">\n <Flex align=\"center\" justify=\"space-between\" mb={3} px={1}>\n <Text fontWeight=\"700\" fontSize=\"12px\" color=\"#33434C\" textTransform=\"uppercase\" letterSpacing=\"0.03em\">{stageLabel}</Text>\n <Badge colorPalette=\"brand\" variant=\"solid\" borderRadius=\"full\" minW=\"24px\" justifyContent=\"center\">{items.length}</Badge>\n </Flex>\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 ) : items.map((row, index) => {\n const ticketTitle = formatCell(row[resolvedTitleField], \"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 aria-label={`Abrir ticket ${ticketTitle}`}\n onClick={() => {\n setFormError(null);\n setCreating(false);\n setSelectedTicket(row);\n }}\n _hover={{ borderColor: \"brand.300\", transform: \"translateY(-1px)\", boxShadow: \"0 7px 18px rgba(7, 38, 46, 0.09)\" }}\n >\n <Text fontSize=\"13px\" fontWeight=\"700\" color=\"#24323A\" mb={2} lineClamp={2}>{ticketTitle}</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\">{fieldLabel(field)}</Text>\n <Text fontSize=\"11px\" color=\"#46545C\" fontWeight=\"500\" textAlign=\"right\" lineClamp={1}>{formatCell(row[field.name], field.kind)}</Text>\n </Flex>\n ))}\n </Stack>\n </Button>\n );\n })}\n </Stack>\n </Box>\n );\n })}\n </Flex>\n )}\n\n {selectedTicket && ticketModal && ticketModal.enabled !== false ? (\n <CoreDetailModal\n model={model}\n title={schema?.singular ?? label ?? model}\n config={{ ...ticketModal, titleField: ticketModal.titleField ?? resolvedTitleField }}\n formFields={formFields}\n recordId={creating ? undefined : ticketId(selectedTicket)}\n initialRecord={selectedTicket}\n initialTab={creating ? create?.initialTab : undefined}\n relations={relations}\n actions={modalActions}\n onClose={() => {\n setSelectedTicket(null);\n setCreating(false);\n setFormError(null);\n }}\n onSaved={async () => {\n await invalidate();\n if (creating) {\n setSelectedTicket(null);\n setCreating(false);\n }\n }}\n />\n ) : selectedTicket ? (\n <DynamicForm\n title={`${creating ? \"Novo\" : \"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) {\n setSelectedTicket(null);\n setCreating(false);\n setFormError(null);\n }\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 OonPageDef,\n} from \"../types\";\nimport type { OonPipelineViewDef } from \"../pipelineTicket\";\nimport { CoreCollection } from \"../components/CoreCollection\";\nimport { CoreDocument } from \"../components/CoreDocument\";\nimport { CorePipeline } from \"../components/CorePipeline\";\nimport { CoreDashboard } from \"../components/CoreDashboard\";\nimport { 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, registry?: OonCoreFrontConfig[\"registry\"]) {\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 cellRenderers={registry?.cellRenderers}\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 OonPipelineViewDef;\n return (\n <CorePipeline\n model={v.model}\n label={viewLabel(v)}\n stageField={v.stageField}\n stages={v.stages}\n titleField={v.titleField}\n form={v.form}\n relations={v.relations}\n ticketModal={v.ticketModal}\n filters={v.filters}\n create={v.create}\n viewModes={v.viewModes}\n defaultView={v.defaultView}\n list={v.list}\n ticketActions={v.ticketActions}\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, registry?: OonCoreFrontConfig[\"registry\"]): OonRoute {\n return {\n path: viewPath(view),\n element: renderView(view, registry),\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/** Resolve módulos e manifesto de UI em rotas e menu. */\nexport function resolveRegistry(config: OonCoreFrontConfig): ResolvedRegistry {\n const routes: OonRoute[] = [];\n const menu: OonMenuItem[] = [];\n const seenPaths = new Set<string>();\n const componentRegistry = config.registry ?? config.ui?.registry;\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, componentRegistry));\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, componentRegistry));\n menu.push(viewToMenu(view));\n }\n for (const page of config.ui?.pages ?? []) {\n pushRoute(pageToRoute(page, componentRegistry));\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 OonFormFieldDef,\n OonListFilterDef,\n OonRelationDef,\n} from \"./types\";\nimport type {\n OonOperationalDetailModalConfig,\n OonPipelineActionDef,\n OonPipelineCreateDef,\n OonPipelineViewDef,\n OonPipelineViewMode,\n} from \"./pipelineTicket\";\nimport { start } from \"./start\";\n\nexport interface CentralFormFieldDef extends OonFormFieldDef {\n /** Filtros fixos enviados como query params ao CRUD da model referenciada. */\n referenceFilters?: Record<string, string | number | boolean | null>;\n /** Mapeia query param da referência para outro campo do mesmo formulário. */\n referenceFilterFrom?: Record<string, string>;\n /** Mensagem exibida enquanto algum campo de referenceFilterFrom estiver vazio. */\n referenceDisabledMessage?: string;\n /** Mantém somente opções em que estes campos estejam vazios/nulos. */\n referenceEmptyFields?: string[];\n}\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?: CentralFormFieldDef[];\n list?: OonCollectionListConfig;\n relations?: Record<string, OonRelationDef>;\n detailModal?: OonOperationalDetailModalConfig;\n }>;\n pipelines?: Array<{\n name?: string;\n model?: string;\n mode?: string;\n stageField?: string;\n stages?: Array<{ id: string; label: string }>;\n titleField?: string;\n path?: string;\n label?: string;\n section?: string;\n /** Overrides do formulário usado ao editar um ticket. */\n form?: CentralFormFieldDef[];\n /** Relações consumidas por abas de resumo e grids relacionados. */\n relations?: Record<string, OonRelationDef>;\n /** Abas, grupos e tamanho do modal aberto pelo card da esteira. */\n ticketModal?: OonOperationalDetailModalConfig;\n filters?: OonListFilterDef[];\n create?: OonPipelineCreateDef;\n viewModes?: OonPipelineViewMode[];\n defaultView?: OonPipelineViewMode;\n list?: OonCollectionListConfig;\n ticketActions?: OonPipelineActionDef[];\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: OonPipelineViewDef = {\n type: \"pipeline\",\n model,\n label: p.label ?? p.name,\n path: p.path,\n stageField: p.stageField,\n stages: p.stages,\n titleField: p.titleField,\n section: p.section,\n form: p.form,\n relations: p.relations,\n ticketModal: p.ticketModal,\n filters: p.filters,\n create: p.create,\n viewModes: p.viewModes,\n defaultView: p.defaultView,\n list: p.list,\n ticketActions: p.ticketActions,\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} from \"../types\";\nimport type { OonPipelineViewDef } from \"../pipelineTicket\";\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<OonPipelineViewDef, \"type\">): OonPipelineViewDef {\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","useMemo","useState","Box","Button","Flex","Input","NativeSelect","SimpleGrid","Stack","Text","Textarea","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","unwrap","useState","Button","Text","Fragment","jsx","jsxs","useQuery","useMemo","useState","Text","Box","Flex","Button","Table","Badge","jsx","jsxs","coerce","toValue","isMultiline","messageOf","resolveReference","Text","ErrorText","Box","NativeSelect","Textarea","Input","SimpleGrid","useState","useEffect","useMemo","Stack","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","Input","NativeSelect","Stack","Text","useMutation","useQuery","useQueryClient","jsx","jsxs","mergeFormFields","Box","NativeSelect","Input","useQueryClient","useState","useQuery","useMutation","Flex","Stack","Text","Heading","Button","Badge","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"]}
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/inputMasks.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\ntype ErrorEnvelope = {\n code?: string;\n message?: string;\n details?: unknown;\n requestId?: string;\n field?: string;\n [key: string]: unknown;\n};\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?: ErrorEnvelope }\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 const legacyDetails = envelope && envelope.details === undefined && envelope.field\n ? envelope\n : undefined;\n return {\n code: envelope?.code || codeFromStatus(status),\n message: envelope?.message || data?.message || err.message || \"Erro inesperado.\",\n status,\n details: envelope?.details ?? legacyDetails,\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, OonComponentRegistry, 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 cellRenderers?: OonComponentRegistry[\"cellRenderers\"];\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, cellRenderers }: 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 cellRenderers={cellRenderers}\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 formFields={resolvedForm}\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, OonComponentRegistry, 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 cellRenderers?: OonComponentRegistry[\"cellRenderers\"];\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\nfunction renderColumnCell(\n row: Record<string, unknown>,\n column: OonColumnDef,\n cellRenderers?: OonComponentRegistry[\"cellRenderers\"],\n) {\n const value = row[column.field];\n const Renderer = column.renderer ? cellRenderers?.[column.renderer] : undefined;\n if (Renderer) return <Renderer value={value} row={row} column={column} />;\n return renderCell(value, column.kind);\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 cellRenderers,\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 {renderColumnCell(row, column, cellRenderers)}\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\";\nimport { formatMaskedValue, inputModeForMask, maxLengthForMask, normalizeMaskedValue, parseMaskedInput, resolveInputMask } from \"./inputMasks\";\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 & {\n multiline?: boolean;\n rows?: number;\n span?: 1 | 2;\n referenceFilters?: Record<string, unknown>;\n referenceFilterFrom?: Record<string, string>;\n referenceDisabledMessage?: string;\n referenceEmptyFields?: string[];\n};\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 initialFieldValue(field: OonFormFieldDef, value: unknown) {\n return normalizeMaskedValue(toValue(value, field.kind), resolveInputMask(field));\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\nfunction resolveReference(field: ExtendedField, values: Record<string, string>) {\n const filters: Record<string, unknown> = { ...(field.referenceFilters ?? {}) };\n const missing: string[] = [];\n Object.entries(field.referenceFilterFrom ?? {}).forEach(([queryField, formField]) => {\n const value = values[formField];\n if (value) filters[queryField] = value;\n else missing.push(formField);\n });\n return { filters, disabled: missing.length > 0 };\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, initialFieldValue(field, initialValues?.[field.field])])));\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 = (fieldName: string, value: string) => {\n const extendedFields = fields as ExtendedField[];\n const dependentFields = extendedFields.filter((candidate) =>\n Object.values(candidate.referenceFilterFrom ?? {}).includes(fieldName),\n );\n setValues((current) => {\n const changed = current[fieldName] !== value;\n const next = { ...current, [fieldName]: value };\n if (changed) dependentFields.forEach((candidate) => { next[candidate.field] = \"\"; });\n return next;\n });\n setErrors((current) => {\n const next = { ...current };\n delete next[fieldName];\n dependentFields.forEach((candidate) => delete next[candidate.field]);\n return next;\n });\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) {\n const reference = resolveReference(field, values);\n 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} filters={reference.filters} emptyFields={field.referenceEmptyFields} disabled={reference.disabled} disabledMessage={field.referenceDisabledMessage} onChange={(value) => change(field.field, value)} />);\n }\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\n const mask = resolveInputMask(field);\n const type = mask ? \"text\" : field.kind === \"date\" ? \"date\" : field.kind === \"number\" ? \"number\" : \"text\";\n const value = values[field.field] ?? \"\";\n return wrap(\n <Input\n id={id}\n type={type}\n step={type === \"number\" ? \"any\" : undefined}\n inputMode={inputModeForMask(mask)}\n maxLength={maxLengthForMask(mask)}\n autoComplete=\"off\"\n aria-invalid={!!message}\n aria-describedby={errorId}\n value={mask ? formatMaskedValue(value, mask) : value}\n {...controlProps(!!message)}\n onChange={(event) => change(field.field, parseMaskedInput(event.currentTarget.value, mask))}\n />,\n );\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 filters?: Record<string, unknown>;\n /** Mantém somente registros em que todos estes campos estejam vazios/nulos. */\n emptyFields?: string[];\n disabled?: boolean;\n disabledMessage?: 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\nfunction cleanFilters(filters?: Record<string, unknown>) {\n return Object.fromEntries(\n Object.entries(filters ?? {}).filter(([, value]) => value !== undefined && value !== null && value !== \"\"),\n );\n}\n\n/** Dropdown pesquisável para campos relacionados, com filtros estáticos ou dependentes do formulário. */\nexport function ReferenceSelect({\n field,\n inputId,\n errorId,\n label,\n refModel,\n value,\n initialValue,\n required,\n invalid,\n error,\n filters,\n emptyFields = [],\n disabled = false,\n disabledMessage,\n onChange,\n}: ReferenceSelectProps) {\n const initialLabel = useMemo(() => initialReferenceLabel(initialValue), [initialValue]);\n const resolvedFilters = useMemo(() => cleanFilters(filters), [filters]);\n const filtersKey = useMemo(() => JSON.stringify(resolvedFilters), [resolvedFilters]);\n const emptyFieldsKey = useMemo(() => JSON.stringify(emptyFields), [emptyFields]);\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 (!disabled) return;\n setOpen(false);\n setActiveIndex(-1);\n }, [disabled]);\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, filtersKey, emptyFieldsKey],\n queryFn: () => resource.list({\n pageIndex: 0,\n pageSize: emptyFields.length ? 200 : 30,\n searchTerm: debouncedSearch || undefined,\n ...resolvedFilters,\n }),\n enabled: !!schema && open && !disabled,\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 ?? []).filter((record) =>\n emptyFields.every((fieldName) => {\n const candidate = record[fieldName];\n return candidate === undefined || candidate === null || candidate === \"\";\n }),\n );\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 (disabled) return;\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 const placeholder = disabled\n ? disabledMessage ?? \"Selecione primeiro o campo relacionado.\"\n : \"Selecione ou digite para pesquisar...\";\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 disabled={disabled}\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 (disabled) return;\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 _disabled={{ cursor: \"not-allowed\", color: \"#98A2B3\", bg: \"#F8FAFC\", opacity: 1 }}\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) : placeholder)}\n </Text>\n <Flex as=\"span\" align=\"center\" gap={1} flex=\"0 0 auto\" color=\"#98A2B3\">\n {value && !disabled ? (\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\n {error ? <Text id={errorId} role=\"alert\" mt=\"5px\" color=\"#DC2626\" fontSize=\"10px\" fontWeight=\"500\">{error}</Text> : 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","export type OonInputMask = \"cpf\" | \"cnpj\" | \"document\" | \"phone\" | \"currency\";\n\ntype MaskableField = {\n field?: string;\n kind?: string;\n mask?: OonInputMask;\n};\n\nconst digitsOnly = (value: unknown) => String(value ?? \"\").replace(/\\D/g, \"\");\nconst normalizedName = (value: unknown) => String(value ?? \"\")\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^a-zA-Z0-9]/g, \"\")\n .toLowerCase();\nconst hasLetters = (value: unknown) => /[a-zA-Z]/.test(String(value ?? \"\"));\n\nfunction personType(values?: Record<string, unknown>) {\n return normalizedName(values?.tipo ?? values?.tipoPessoa ?? values?.pessoaTipo);\n}\n\nexport function resolveInputMask(field: MaskableField, values?: Record<string, unknown>): OonInputMask | undefined {\n if (field.mask) return field.mask;\n\n if (field.kind === \"currency\" || field.kind === \"currencyConverted\") return \"currency\";\n if (field.kind && ![\"string\", \"number\"].includes(field.kind)) return undefined;\n\n const name = normalizedName(field.field);\n if (!name) return undefined;\n if (name.includes(\"cnpj\")) return \"cnpj\";\n if (name.includes(\"cpf\")) return \"cpf\";\n if (/documento|document|inscricaofiscal/.test(name)) {\n const tipo = personType(values);\n if (tipo === \"est\" || tipo.includes(\"estrangeir\") || tipo.includes(\"foreign\")) return undefined;\n if (tipo === \"pf\" || tipo.includes(\"fisica\")) return \"cpf\";\n if (tipo === \"pj\" || tipo.includes(\"juridica\")) return \"cnpj\";\n return \"document\";\n }\n if (/telefone|celular|whatsapp|fone|phone/.test(name)) return \"phone\";\n return undefined;\n}\n\nfunction formatCpf(value: unknown) {\n const digits = digitsOnly(value).slice(0, 11);\n return digits\n .replace(/^(\\d{3})(\\d)/, \"$1.$2\")\n .replace(/^(\\d{3})\\.(\\d{3})(\\d)/, \"$1.$2.$3\")\n .replace(/\\.(\\d{3})(\\d)/, \".$1-$2\");\n}\n\nfunction formatCnpj(value: unknown) {\n const digits = digitsOnly(value).slice(0, 14);\n return digits\n .replace(/^(\\d{2})(\\d)/, \"$1.$2\")\n .replace(/^(\\d{2})\\.(\\d{3})(\\d)/, \"$1.$2.$3\")\n .replace(/\\.(\\d{3})(\\d)/, \".$1/$2\")\n .replace(/(\\/\\d{4})(\\d)/, \"$1-$2\");\n}\n\nfunction formatPhone(value: unknown) {\n const digits = digitsOnly(value).slice(0, 11);\n if (!digits) return \"\";\n if (digits.length <= 2) return `(${digits}`;\n\n const ddd = digits.slice(0, 2);\n const number = digits.slice(2);\n const prefixLength = number.length > 8 ? 5 : 4;\n const prefix = number.slice(0, prefixLength);\n const suffix = number.slice(prefixLength);\n return `(${ddd}) ${prefix}${suffix ? `-${suffix}` : \"\"}`;\n}\n\nfunction parseCurrencyInitial(value: unknown) {\n if (value == null || value === \"\") return \"\";\n if (typeof value === \"number\") return Number.isFinite(value) ? String(value) : \"\";\n\n const raw = String(value).trim();\n if (!raw) return \"\";\n if (/^-?\\d+(?:\\.\\d+)?$/.test(raw)) return raw;\n\n const localized = raw\n .replace(/[^\\d,.-]/g, \"\")\n .replace(/\\.(?=\\d{3}(?:\\D|$))/g, \"\")\n .replace(\",\", \".\");\n const parsed = Number(localized);\n return Number.isFinite(parsed) ? String(parsed) : \"\";\n}\n\nfunction formatCurrency(value: unknown) {\n const normalized = parseCurrencyInitial(value);\n if (!normalized) return \"\";\n const numeric = Number(normalized);\n if (!Number.isFinite(numeric)) return \"\";\n return new Intl.NumberFormat(\"pt-BR\", {\n style: \"currency\",\n currency: \"BRL\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(numeric);\n}\n\nexport function normalizeMaskedValue(value: unknown, mask?: OonInputMask): string {\n if (!mask) return String(value ?? \"\");\n if (mask === \"currency\") return parseCurrencyInitial(value);\n if (mask === \"document\" && hasLetters(value)) return String(value ?? \"\").slice(0, 30);\n const limit = mask === \"cnpj\" ? 14 : mask === \"cpf\" ? 11 : mask === \"phone\" ? 11 : 14;\n return digitsOnly(value).slice(0, limit);\n}\n\nexport function formatMaskedValue(value: unknown, mask?: OonInputMask): string {\n if (!mask) return String(value ?? \"\");\n if (mask === \"currency\") return formatCurrency(value);\n if (mask === \"phone\") return formatPhone(value);\n if (mask === \"cpf\") return formatCpf(value);\n if (mask === \"cnpj\") return formatCnpj(value);\n if (hasLetters(value)) return String(value ?? \"\");\n\n const digits = digitsOnly(value);\n return digits.length > 11 ? formatCnpj(digits) : formatCpf(digits);\n}\n\nexport function parseMaskedInput(value: string, mask?: OonInputMask): string {\n if (!mask) return value;\n if (mask === \"currency\") {\n const digits = digitsOnly(value);\n if (!digits) return \"\";\n const amount = Number(digits) / 100;\n return `${value.includes(\"-\") ? \"-\" : \"\"}${amount.toFixed(2)}`;\n }\n return normalizeMaskedValue(value, mask);\n}\n\nexport function inputModeForMask(mask?: OonInputMask): \"numeric\" | \"text\" | undefined {\n if (mask === \"document\") return \"text\";\n return mask ? \"numeric\" : undefined;\n}\n\nexport function maxLengthForMask(mask?: OonInputMask): number | undefined {\n if (mask === \"cpf\") return 14;\n if (mask === \"cnpj\") return 18;\n if (mask === \"document\") return 30;\n if (mask === \"phone\") return 15;\n return undefined;\n}\n","import { useEffect, useMemo, useState, type ReactNode } 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, OonFormFieldDef, OonRelationDef } from \"../../types\";\nimport { formFieldsFromMeta } from \"./fieldUtils\";\nimport { CoreTabbedDetail } from \"./CoreTabbedDetail\";\n\nexport function CoreDetailModal({\n model,\n title,\n config,\n formFields,\n recordId,\n initialRecord,\n initialTab,\n relations,\n actions,\n onClose,\n onSaved,\n}: {\n model: string;\n title: string;\n config: OonDetailModalConfig;\n formFields?: OonFormFieldDef[];\n recordId?: string;\n initialRecord?: Record<string, unknown>;\n initialTab?: string;\n relations?: Record<string, OonRelationDef>;\n actions?: ReactNode;\n onClose: () => void;\n onSaved?: (record?: Record<string, unknown>) => void;\n}) {\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({\n queryKey: [\"oon\", \"detail\", model, recordId],\n enabled: !!recordId,\n queryFn: () => resource.get(recordId!),\n });\n\n useEffect(() => {\n if (parentQuery.data) setParent(parentQuery.data);\n }, [parentQuery.data]);\n\n const resolvedFormFields = useMemo(\n () => formFields?.length ? formFields : schema ? formFieldsFromMeta(schema.fields) : [],\n [formFields, schema],\n );\n\n const refresh = (targets?: string[]) => {\n const list = targets?.length ? targets : [\"self\"];\n if (list.includes(\"parent\") || list.includes(\"all\")) {\n if (recordId) queryClient.invalidateQueries({ queryKey: [\"oon\", \"detail\", model, recordId] });\n }\n setRefreshTokens((current) => {\n const next = { ...current };\n for (const target of list) {\n if (target === \"all\") {\n config.tabs.forEach((tab) => {\n next[tab.id] = (next[tab.id] ?? 0) + 1;\n });\n } else if (target !== \"parent\") {\n const tabId = target === \"self\" ? activeTab : target;\n next[tabId] = (next[tabId] ?? 0) + 1;\n }\n }\n return next;\n });\n };\n\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\n return (\n <Flex position=\"fixed\" inset={0} zIndex={1000} align=\"center\" justify=\"center\" p={4} bg=\"rgba(15,23,42,.48)\">\n <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)\">\n <Flex minH=\"72px\" px=\"20px\" align=\"center\" justify=\"space-between\" gap={4} borderBottomWidth=\"1px\" borderColor=\"#E5E9ED\">\n <Box>\n <Text color=\"#0474AF\" fontSize=\"10px\" fontWeight=\"700\" textTransform=\"uppercase\">Detalhe</Text>\n <Heading size=\"md\">{recordId ? displayTitle : `Novo ${title}`}</Heading>\n </Box>\n <Flex align=\"center\" justify=\"flex-end\" gap=\"6px\" wrap=\"wrap\">\n {recordId ? actions : null}\n <Button onClick={onClose}>Fechar</Button>\n </Flex>\n </Flex>\n <Box maxH=\"calc(94vh - 73px)\" p=\"20px\" overflowY=\"auto\">\n {schemaQuery.isLoading || parentQuery.isLoading ? (\n <Text>Carregando...</Text>\n ) : (\n <CoreTabbedDetail\n tabs={config.tabs}\n activeTab={activeTab}\n onTabChange={setActiveTab}\n parent={parent}\n formFields={resolvedFormFields}\n resource={resource}\n relations={relations}\n refreshTokens={refreshTokens}\n onRefresh={refresh}\n onParentSaved={(saved) => {\n setParent(saved);\n onSaved?.(saved);\n refresh([\"parent\"]);\n }}\n />\n )}\n </Box>\n </Box>\n </Flex>\n );\n}\n","import { useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { Box, Button, Flex, Input, NativeSelect, SimpleGrid, Stack, Text, Textarea } 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 { ReferenceSelect } from \"./ReferenceSelect\";\nimport { fieldLabel } from \"./fieldUtils\";\nimport { fieldsForTab } from \"./manifestUtils\";\nimport { formatMaskedValue, inputModeForMask, maxLengthForMask, normalizeMaskedValue, parseMaskedInput, resolveInputMask } from \"./inputMasks\";\n\ntype FormTab = Extract<OonDetailTabDef, { type: \"form\" }>;\ntype FormGroup = NonNullable<FormTab[\"groups\"]>[number];\ntype FieldErrors = Record<string, string>;\ntype ExtendedFormField = OonFormFieldDef & {\n /** Filtros fixos enviados como query params ao CRUD da model referenciada. */\n referenceFilters?: Record<string, unknown>;\n /** Mapeia query param da referência para outro campo do formulário. */\n referenceFilterFrom?: Record<string, string>;\n /** Mensagem exibida enquanto uma dependência ainda não foi selecionada. */\n referenceDisabledMessage?: string;\n referenceEmptyFields?: string[];\n};\n\nfunction coerce(value: string, kind?: string) {\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 toValue(value: unknown, kind?: string) {\n if (value == null) return \"\";\n if (kind === \"date\") {\n try {\n return new Date(value as string).toISOString().slice(0, 10);\n } catch {\n return \"\";\n }\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 initialFieldValue(field: OonFormFieldDef, value: unknown) {\n return normalizeMaskedValue(toValue(value, field.kind), resolveInputMask(field));\n}\n\nfunction isMultiline(field: OonFormFieldDef) {\n return /observa|descricao|mensagem|detalhe|necessidade/i.test(field.field);\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\") {\n const nested = record.error as Record<string, unknown>;\n if (typeof nested.message === \"string\") return nested.message;\n }\n }\n return \"Não foi possível salvar o registro.\";\n}\n\nfunction fieldErrorsOf(error: unknown): FieldErrors {\n if (!error || typeof error !== \"object\") return {};\n const record = error as Record<string, unknown>;\n const envelope = record.error && typeof record.error === \"object\"\n ? record.error as Record<string, unknown>\n : undefined;\n const details = record.details ?? envelope?.details ?? envelope;\n const result: FieldErrors = {};\n\n const visit = (value: unknown) => {\n if (!value) return;\n if (Array.isArray(value)) {\n value.forEach(visit);\n return;\n }\n if (typeof value !== \"object\") return;\n const item = value as Record<string, unknown>;\n if (typeof item.field === \"string\" && typeof item.message === \"string\") {\n result[item.field] = item.message;\n }\n Object.values(item).forEach((nested) => {\n if (nested !== item.field && nested !== item.message) visit(nested);\n });\n };\n\n visit(details);\n return result;\n}\n\nfunction requiredErrors(fields: ExtendedFormField[], values: Record<string, string>) {\n const errors: FieldErrors = {};\n fields.forEach((field) => {\n if (field.required && !(values[field.field] ?? \"\").trim()) {\n errors[field.field] = `${fieldLabel({ name: field.field, label: field.label })} é obrigatório.`;\n }\n });\n return errors;\n}\n\nfunction resolveReference(field: ExtendedFormField, values: Record<string, string>) {\n const filters: Record<string, unknown> = { ...(field.referenceFilters ?? {}) };\n const missing: string[] = [];\n Object.entries(field.referenceFilterFrom ?? {}).forEach(([queryField, formField]) => {\n const value = values[formField];\n if (value) filters[queryField] = value;\n else missing.push(formField);\n });\n return { filters, disabled: missing.length > 0 };\n}\n\nfunction FieldLabel({ field, htmlFor }: { field: ExtendedFormField; htmlFor?: string }) {\n const label = fieldLabel({ name: field.field, label: field.label });\n return (\n <label htmlFor={htmlFor}>\n <Text as=\"span\" display=\"block\" mb=\"5px\" color=\"#475467\" fontSize=\"11px\" fontWeight=\"600\">\n {label}{field.required ? <Text as=\"span\" color=\"#DC2626\"> *</Text> : null}\n </Text>\n </label>\n );\n}\n\nfunction ErrorText({ id, message }: { id: string; message?: string }) {\n return message ? <Text id={id} role=\"alert\" mt=\"5px\" color=\"#DC2626\" fontSize=\"10px\" fontWeight=\"500\">{message}</Text> : null;\n}\n\nfunction FieldControl({\n field,\n value,\n values,\n initialValue,\n error,\n onChange,\n}: {\n field: ExtendedFormField;\n value: string;\n values: Record<string, string>;\n initialValue?: unknown;\n error?: string;\n onChange: (value: string) => void;\n}) {\n const label = fieldLabel({ name: field.field, label: field.label });\n const inputId = `oon-detail-field-${field.field.replace(/[^a-zA-Z0-9_-]/g, \"-\")}`;\n const errorId = `${inputId}-error`;\n const invalidProps = {\n \"aria-invalid\": error ? true : undefined,\n \"aria-describedby\": error ? errorId : undefined,\n borderColor: error ? \"#DC2626\" : undefined,\n boxShadow: error ? \"0 0 0 3px rgba(220,38,38,.08)\" : undefined,\n };\n\n if (field.widget === \"checkbox\") {\n const checkedValue = String(field.checkedValue ?? true);\n const uncheckedValue = String(field.uncheckedValue ?? false);\n const checked = (value || uncheckedValue) === checkedValue;\n return (\n <Box>\n <Box\n as=\"label\"\n display=\"flex\"\n minH=\"38px\"\n px=\"11px\"\n alignItems=\"center\"\n gap=\"8px\"\n color=\"#344054\"\n bg={checked ? \"#F0F7FF\" : \"white\"}\n borderWidth=\"1px\"\n borderColor={error ? \"#DC2626\" : checked ? \"#8FC9E7\" : \"#D5DDE3\"}\n borderRadius=\"7px\"\n cursor=\"pointer\"\n >\n <input\n id={inputId}\n type=\"checkbox\"\n checked={checked}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? errorId : undefined}\n style={{ width: 16, height: 16, accentColor: \"#0474AF\", cursor: \"pointer\" }}\n onChange={(event) => onChange(event.currentTarget.checked ? checkedValue : uncheckedValue)}\n />\n <Text as=\"span\" fontSize=\"11px\" fontWeight=\"600\">{label}</Text>\n </Box>\n <ErrorText id={errorId} message={error} />\n </Box>\n );\n }\n\n if (field.kind === \"ref\" && field.ref) {\n const reference = resolveReference(field, values);\n return (\n <Box>\n <FieldLabel field={field} htmlFor={inputId} />\n <ReferenceSelect\n field={field.field}\n inputId={inputId}\n errorId={errorId}\n label={label}\n refModel={field.ref}\n value={value}\n initialValue={initialValue}\n required={field.required}\n invalid={!!error}\n error={error}\n filters={reference.filters}\n emptyFields={field.referenceEmptyFields}\n disabled={reference.disabled}\n disabledMessage={field.referenceDisabledMessage}\n onChange={onChange}\n />\n </Box>\n );\n }\n\n const mask = resolveInputMask(field);\n const control = field.kind === \"enum\" && field.options?.length ? (\n <NativeSelect.Root size=\"sm\">\n <NativeSelect.Field id={inputId} value={value} {...invalidProps} onChange={(event) => onChange(event.currentTarget.value)}>\n <option value=\"\">— Selecione —</option>\n {field.options.map((option) => <option key={option} value={option}>{option}</option>)}\n </NativeSelect.Field>\n <NativeSelect.Indicator />\n </NativeSelect.Root>\n ) : field.kind === \"boolean\" ? (\n <NativeSelect.Root size=\"sm\">\n <NativeSelect.Field id={inputId} value={value} {...invalidProps} onChange={(event) => onChange(event.currentTarget.value)}>\n <option value=\"\">— Selecione —</option>\n <option value=\"true\">Sim</option>\n <option value=\"false\">Não</option>\n </NativeSelect.Field>\n <NativeSelect.Indicator />\n </NativeSelect.Root>\n ) : isMultiline(field) ? (\n <Textarea id={inputId} rows={4} resize=\"vertical\" value={value} {...invalidProps} onChange={(event) => onChange(event.currentTarget.value)} />\n ) : (\n <Input\n id={inputId}\n size=\"sm\"\n type={mask ? \"text\" : field.kind === \"date\" ? \"date\" : field.kind === \"number\" ? \"number\" : \"text\"}\n step={!mask && field.kind === \"number\" ? \"any\" : undefined}\n inputMode={inputModeForMask(mask)}\n maxLength={maxLengthForMask(mask)}\n value={mask ? formatMaskedValue(value, mask) : value}\n {...invalidProps}\n onChange={(event) => onChange(parseMaskedInput(event.currentTarget.value, mask))}\n />\n );\n\n return (\n <Box>\n <FieldLabel field={field} htmlFor={inputId} />\n {control}\n <ErrorText id={errorId} message={error} />\n </Box>\n );\n}\n\nfunction GroupSection({\n group,\n fields,\n values,\n initialValues,\n errors,\n onChange,\n}: {\n group: FormGroup;\n fields: ExtendedFormField[];\n values: Record<string, string>;\n initialValues: Record<string, unknown>;\n errors: FieldErrors;\n onChange: (field: string, value: string) => void;\n}) {\n if (!fields.length) return null;\n const columns = group.columns ?? 2;\n return (\n <Box p={{ base: \"12px\", md: \"14px\" }} bg=\"#FAFCFD\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"9px\">\n <Text color=\"#344054\" fontSize=\"12px\" fontWeight=\"700\">{group.label}</Text>\n {group.description ? <Text mt=\"2px\" mb=\"12px\" color=\"#667085\" fontSize=\"10px\">{group.description}</Text> : <Box h=\"10px\" />}\n <SimpleGrid columns={{ base: 1, md: Math.min(columns, 2), xl: columns }} gapX=\"16px\" gapY=\"14px\">\n {fields.map((field) => (\n <FieldControl\n key={field.field}\n field={field}\n value={values[field.field] ?? \"\"}\n values={values}\n initialValue={initialValues[field.field]}\n error={errors[field.field]}\n onChange={(value) => onChange(field.field, value)}\n />\n ))}\n </SimpleGrid>\n </Box>\n );\n}\n\nfunction InlineParentForm({\n fields: rawFields,\n groups,\n parent,\n resource,\n onSaved,\n}: {\n fields: OonFormFieldDef[];\n groups?: FormGroup[];\n parent: Record<string, unknown>;\n resource: ResourceClient;\n onSaved: (record: Record<string, unknown>) => void;\n}) {\n const fields = rawFields as ExtendedFormField[];\n const [values, setValues] = useState<Record<string, string>>({});\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<unknown>(null);\n const [fieldErrors, setFieldErrors] = useState<FieldErrors>({});\n\n useEffect(() => {\n setValues(Object.fromEntries(fields.map((field) => [field.field, initialFieldValue(field, parent[field.field])])));\n setError(null);\n setFieldErrors({});\n }, [parent, rawFields]);\n\n const fieldsByName = useMemo(() => new Map(fields.map((field) => [field.field, field])), [rawFields]);\n\n const change = (fieldName: string, value: string) => {\n const dependentFields = fields.filter((candidate) =>\n Object.values(candidate.referenceFilterFrom ?? {}).includes(fieldName),\n );\n\n setValues((current) => {\n const changed = current[fieldName] !== value;\n const next = { ...current, [fieldName]: value };\n if (changed) dependentFields.forEach((candidate) => { next[candidate.field] = \"\"; });\n return next;\n });\n setFieldErrors((current) => {\n const next = { ...current };\n delete next[fieldName];\n dependentFields.forEach((candidate) => delete next[candidate.field]);\n return next;\n });\n setError(null);\n };\n\n const renderFields = (): ReactNode => {\n if (groups?.length) {\n return (\n <Stack gap=\"14px\">\n {groups.map((group) => (\n <GroupSection\n key={`${group.label}-${group.fields.join(\"-\")}`}\n group={group}\n fields={group.fields.map((field) => fieldsByName.get(field)).filter(Boolean) as ExtendedFormField[]}\n values={values}\n initialValues={parent}\n errors={fieldErrors}\n onChange={change}\n />\n ))}\n </Stack>\n );\n }\n\n return (\n <SimpleGrid columns={{ base: 1, md: 2 }} gap=\"14px\">\n {fields.map((field) => (\n <FieldControl\n key={field.field}\n field={field}\n value={values[field.field] ?? \"\"}\n values={values}\n initialValue={parent[field.field]}\n error={fieldErrors[field.field]}\n onChange={(value) => change(field.field, value)}\n />\n ))}\n </SimpleGrid>\n );\n };\n\n return (\n <form\n noValidate\n onSubmit={async (event) => {\n event.preventDefault();\n const validation = requiredErrors(fields, values);\n if (Object.keys(validation).length) {\n setFieldErrors(validation);\n setError({ message: \"Preencha os campos obrigatórios destacados.\" });\n return;\n }\n\n setSaving(true);\n setError(null);\n setFieldErrors({});\n try {\n const payload = Object.fromEntries(\n fields\n .map((field) => [field.field, coerce(values[field.field] ?? \"\", field.kind)])\n .filter(([, value]) => value !== undefined),\n );\n const saved = parent._id\n ? await resource.update(String(parent._id), payload)\n : await resource.create(payload);\n onSaved(saved);\n } catch (requestError) {\n setError(requestError);\n setFieldErrors(fieldErrorsOf(requestError));\n } finally {\n setSaving(false);\n }\n }}\n >\n <Stack gap=\"16px\">\n {error ? (\n <Box role=\"alert\" p=\"10px 12px\" color=\"#B42318\" bg=\"#FEF3F2\" borderWidth=\"1px\" borderColor=\"#FECDCA\" borderRadius=\"7px\" fontSize=\"11px\">\n {messageOf(error)}\n </Box>\n ) : null}\n {renderFields()}\n <Flex justify=\"flex-end\">\n <Button type=\"submit\" colorPalette=\"brand\" loading={saving}>Salvar dados principais</Button>\n </Flex>\n </Stack>\n </form>\n );\n}\n\nexport function CoreTabbedDetail({\n tabs,\n activeTab,\n onTabChange,\n parent,\n formFields,\n resource,\n relations,\n refreshTokens,\n onRefresh,\n onParentSaved,\n}: {\n tabs: OonDetailTabDef[];\n activeTab: string;\n onTabChange: (id: string) => void;\n parent?: Record<string, unknown>;\n formFields: OonFormFieldDef[];\n resource: ResourceClient;\n relations?: Record<string, OonRelationDef>;\n refreshTokens: Record<string, number>;\n onRefresh: (targets?: string[]) => void;\n onParentSaved: (record: Record<string, unknown>) => void;\n}) {\n const active = tabs.find((tab) => tab.id === activeTab) ?? tabs[0];\n\n return (\n <Stack gap={4}>\n <Flex gap={2} borderBottomWidth=\"1px\" borderColor=\"#E5E9ED\" overflowX=\"auto\">\n {tabs.map((tab) => {\n const disabled = !parent?._id && (tab.type === \"relatedGrid\" || tab.type === \"readonlyGrid\" || tab.type === \"summary\");\n return (\n <Button\n key={tab.id}\n type=\"button\"\n variant={active?.id === tab.id ? \"solid\" : \"ghost\"}\n colorPalette={active?.id === tab.id ? \"brand\" : undefined}\n disabled={disabled}\n onClick={() => onTabChange(tab.id)}\n >\n {tab.label}\n </Button>\n );\n })}\n </Flex>\n <Box>\n {!active ? null : active.type === \"summary\" && parent ? (\n <CoreSummaryCards cards={active.cards} parent={parent} relations={relations} />\n ) : active.type === \"form\" ? (\n <InlineParentForm\n fields={fieldsForTab(formFields, active.fields ?? active.groups?.flatMap((group) => group.fields))}\n groups={active.groups}\n parent={parent ?? {}}\n resource={resource}\n onSaved={onParentSaved}\n />\n ) : (active.type === \"relatedGrid\" || active.type === \"readonlyGrid\") && parent ? (\n <CoreRelatedGrid\n tab={active}\n parent={parent}\n relations={relations}\n refreshToken={refreshTokens[active.id]}\n onRefresh={onRefresh}\n />\n ) : active.type === \"customComponent\" ? (\n <Text color=\"#667085\">Componente customizado: {active.component}</Text>\n ) : (\n <Text color=\"#667085\">Salve o registro principal para liberar esta aba.</Text>\n )}\n </Box>\n </Stack>\n );\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, OonFormFieldDef, OonRelationDef } from \"../../types\";\nimport { formatCell, formFieldsFromMeta } from \"./fieldUtils\";\nimport { CoreInlineEditableCell } from \"./CoreInlineEditableCell\";\nimport { CoreRowAction } from \"./CoreRowAction\";\nimport { DynamicForm } from \"./DynamicForm\";\nimport { normalizeColumn, relationFrom } from \"./manifestUtils\";\n\ntype RelatedTab = Extract<OonDetailTabDef, { type: \"relatedGrid\" | \"readonlyGrid\" }> & {\n create?: {\n enabled?: boolean;\n label?: string;\n fields?: OonFormFieldDef[];\n initialValues?: Record<string, unknown>;\n };\n delete?: {\n enabled?: boolean;\n confirm?: string;\n };\n};\n\nexport function CoreRelatedGrid({\n tab: rawTab,\n parent,\n relations,\n refreshToken,\n onRefresh,\n}: {\n tab: Extract<OonDetailTabDef, { type: \"relatedGrid\" | \"readonlyGrid\" }>;\n parent: Record<string, unknown>;\n relations?: Record<string, OonRelationDef>;\n refreshToken?: number;\n onRefresh?: (targets?: string[]) => void;\n}) {\n const tab = rawTab as RelatedTab;\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({\n queryKey: key,\n enabled: !!relation && parentValue != null,\n queryFn: () => resource.list({ [relation!.foreignKey]: parentValue, pageSize: 1000 }),\n });\n const columns = useMemo(\n () => (tab.columns?.length ? tab.columns : schema?.fields.slice(0, 8).map((field) => field.name) ?? [])\n .map((column) => normalizeColumn(column, schema))\n .filter((column) => !column.hidden),\n [tab.columns, schema],\n );\n const [drafts, setDrafts] = useState<Record<string, Record<string, unknown>>>({});\n const [errors, setErrors] = useState<Record<string, unknown>>({});\n const [creating, setCreating] = useState(false);\n const [createError, setCreateError] = useState<unknown>(null);\n const editable = tab.type === \"relatedGrid\" && tab.editable && tab.editMode === \"inline\";\n const canCreate = tab.type === \"relatedGrid\" && tab.create?.enabled !== false && !!tab.create;\n const canDelete = tab.type === \"relatedGrid\" && tab.delete?.enabled === true;\n const hasActions = editable || canDelete || !!tab.rowActions?.length;\n\n const invalidate = async () => {\n await queryClient.invalidateQueries({ queryKey: key });\n onRefresh?.([\"self\"]);\n };\n\n const updateMutation = useMutation({\n mutationFn: ({ id, values }: { id: string; values: Record<string, unknown> }) => resource.update(id, values),\n onSuccess: invalidate,\n });\n const createMutation = useMutation({\n mutationFn: (values: Record<string, unknown>) => resource.create({\n ...(tab.create?.initialValues ?? {}),\n ...values,\n ...(relation && parentValue != null ? { [relation.foreignKey]: parentValue } : {}),\n }),\n onSuccess: async () => {\n await invalidate();\n setCreating(false);\n setCreateError(null);\n },\n onError: setCreateError,\n });\n const deleteMutation = useMutation({\n mutationFn: (id: string) => resource.delete(id),\n onSuccess: invalidate,\n });\n\n if (!relation) return <Text color=\"#B42318\">Relação não encontrada.</Text>;\n if (query.isLoading || schemaQuery.isLoading) return <Text color=\"#667085\">Carregando...</Text>;\n\n const rows = query.data?.results ?? [];\n const setDraft = (id: string, field: string, value: unknown) => setDrafts((current) => ({\n ...current,\n [id]: { ...(current[id] ?? {}), [field]: value },\n }));\n const createFields = tab.create?.fields?.length\n ? tab.create.fields\n : formFieldsFromMeta(schema?.fields ?? []).filter((field) => ![relation.foreignKey, \"_id\", \"createdAt\", \"updatedAt\"].includes(field.field));\n\n return (\n <Box>\n {canCreate ? (\n <Flex justify=\"flex-end\" mb=\"10px\">\n <Button size=\"sm\" colorPalette=\"brand\" onClick={() => { setCreateError(null); setCreating(true); }}>\n {tab.create?.label ?? \"Novo registro\"}\n </Button>\n </Flex>\n ) : null}\n <Box overflowX=\"auto\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"10px\">\n <Table.Root size=\"sm\" minW=\"760px\">\n <Table.Header>\n <Table.Row bg=\"#F4F7F9\">\n {columns.map((column) => <Table.ColumnHeader key={column.field} fontSize=\"10px\">{column.label ?? column.field}</Table.ColumnHeader>)}\n {hasActions ? <Table.ColumnHeader>Ações</Table.ColumnHeader> : null}\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {rows.map((row, index) => {\n const id = String(row._id ?? row.id ?? index);\n const draft = drafts[id] ?? {};\n const dirty = Object.keys(draft).length > 0;\n return (\n <Table.Row key={id} bg={dirty ? \"#FFFBEB\" : index % 2 ? \"#FBFCFD\" : \"white\"}>\n {columns.map((column) => {\n const value = column.field in draft ? draft[column.field] : row[column.field];\n const meta = schema?.fields.find((field) => field.name === column.field);\n const canEdit = editable && column.readonly !== true && (column.editable === true || !column.readonly);\n return (\n <Table.Cell key={column.field} fontSize=\"11px\">\n {canEdit ? (\n <CoreInlineEditableCell column={column} meta={meta} value={value} onChange={(next) => setDraft(id, column.field, next)} />\n ) : column.display === \"badgeExists\" ? (\n <Badge colorPalette={value ? \"green\" : \"gray\"}>{value ? \"Sim\" : \"Não\"}</Badge>\n ) : formatCell(value, column.kind)}\n </Table.Cell>\n );\n })}\n {hasActions ? (\n <Table.Cell>\n <Flex gap=\"5px\" align=\"center\" wrap=\"wrap\">\n {dirty ? (\n <>\n <Button\n size=\"xs\"\n loading={updateMutation.isPending}\n onClick={() => {\n setErrors((current) => ({ ...current, [id]: undefined }));\n updateMutation.mutate({ id, values: draft }, {\n onSuccess: () => setDrafts((current) => {\n const next = { ...current };\n delete next[id];\n return next;\n }),\n onError: (error) => setErrors((current) => ({ ...current, [id]: error })),\n });\n }}\n >\n Salvar\n </Button>\n <Button size=\"xs\" variant=\"outline\" onClick={() => setDrafts((current) => {\n const next = { ...current };\n delete next[id];\n return next;\n })}>\n Cancelar\n </Button>\n </>\n ) : null}\n {tab.rowActions?.map((action) => (\n <CoreRowAction key={action.id ?? action.label} action={action} row={row} parent={parent} onRefresh={onRefresh} />\n ))}\n {canDelete ? (\n <Button\n size=\"xs\"\n variant=\"outline\"\n loading={deleteMutation.isPending}\n onClick={() => {\n const message = tab.delete?.confirm ?? \"Excluir este registro relacionado?\";\n if (window.confirm(message)) deleteMutation.mutate(id);\n }}\n >\n Excluir\n </Button>\n ) : null}\n {errors[id] ? <Text color=\"#B42318\" fontSize=\"9px\">Erro ao salvar.</Text> : null}\n </Flex>\n </Table.Cell>\n ) : null}\n </Table.Row>\n );\n })}\n {rows.length === 0 ? (\n <Table.Row>\n <Table.Cell colSpan={columns.length + (hasActions ? 1 : 0)}>\n <Text p=\"8\" textAlign=\"center\" color=\"#98A2B3\">Nenhum registro relacionado.</Text>\n </Table.Cell>\n </Table.Row>\n ) : null}\n </Table.Body>\n </Table.Root>\n </Box>\n {creating ? (\n <DynamicForm\n title={tab.create?.label ?? `Novo ${schema?.singular ?? relation.model}`}\n eyebrow=\"Registro relacionado\"\n fields={createFields}\n initialValues={tab.create?.initialValues}\n submitting={createMutation.isPending}\n error={createError}\n onSubmit={(values) => createMutation.mutate(values)}\n onFieldChange={() => setCreateError(null)}\n onCancel={() => {\n if (!createMutation.isPending) setCreating(false);\n }}\n />\n ) : null}\n </Box>\n );\n}\n","import { Input, NativeSelect, Textarea } from \"@chakra-ui/react\";\nimport type { FieldMeta, OonRelatedGridColumnDef } from \"../../types\";\nimport { formatMaskedValue, inputModeForMask, maxLengthForMask, parseMaskedInput, resolveInputMask } from \"./inputMasks\";\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 plainValue = value == null ? \"\" : String(value);\n const common = {\n size: \"xs\" as const,\n fontSize: \"11px\",\n value: plainValue,\n onChange: (event: React.ChangeEvent<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>) => onChange(event.currentTarget.value),\n };\n\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\n const mask = resolveInputMask({ field: column.field, kind });\n const type = mask ? \"text\" : kind === \"date\" ? \"date\" : kind === \"number\" ? \"number\" : \"text\";\n return (\n <Input\n size=\"xs\"\n fontSize=\"11px\"\n type={type}\n step={type === \"number\" ? \"any\" : undefined}\n inputMode={inputModeForMask(mask)}\n maxLength={maxLengthForMask(mask)}\n value={mask ? formatMaskedValue(plainValue, mask) : plainValue}\n onChange={(event) => onChange(parseMaskedInput(event.currentTarget.value, mask))}\n />\n );\n}\n","import { useState } from \"react\";\nimport { Button, Text } from \"@chakra-ui/react\";\nimport { useOonApi } from \"../../api/ApiProvider\";\nimport type { OonRowActionDef } from \"../../types\";\nimport type { OonPipelineActionDef } from \"../../pipelineTicket\";\nimport { DynamicForm } from \"./DynamicForm\";\nimport { evaluateCondition, interpolateEndpoint } from \"./conditions\";\n\nexport interface CoreRowActionProps {\n action: OonRowActionDef | OonPipelineActionDef;\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 onUpdate?: (values: Record<string, unknown>) => Promise<unknown>;\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\nfunction unwrap(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== \"object\") return {};\n const record = value as Record<string, unknown>;\n const data = record.data;\n if (data && typeof data === \"object\") return data as Record<string, unknown>;\n return record;\n}\n\nexport function CoreRowAction({ action, row, parent, onOpenDetail, onRefresh, onUpdate }: CoreRowActionProps) {\n const { http } = useOonApi();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<unknown>(null);\n const [formOpen, setFormOpen] = useState(false);\n const [formInitialValues, setFormInitialValues] = useState<Record<string, unknown>>({});\n const pipelineAction = action as OonPipelineActionDef;\n\n if (evaluateCondition(action.hiddenWhen, row)) return null;\n const disabled = evaluateCondition(action.disabledWhen, row) || loading;\n\n const confirmAction = () => action.confirm\n ? window.confirm(action.confirm.description ?? action.confirm.title ?? `Executar ${action.label}?`)\n : true;\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\n if (pipelineAction.type === \"formAction\") {\n if (!confirmAction()) return;\n setLoading(true);\n try {\n let loaded: Record<string, unknown> = {};\n if (pipelineAction.loadEndpoint) {\n const url = interpolateEndpoint(pipelineAction.loadEndpoint, row, parent);\n loaded = unwrap(await http.request({ url, method: \"GET\" }));\n }\n setFormInitialValues({ ...(pipelineAction.initialValues ?? {}), ...loaded });\n setFormOpen(true);\n } catch (err) {\n setError(err);\n } finally {\n setLoading(false);\n }\n return;\n }\n\n if (pipelineAction.type === \"setField\" || pipelineAction.type === \"transition\") {\n if (!pipelineAction.field || !onUpdate || !confirmAction()) return;\n setLoading(true);\n try {\n await onUpdate({ [pipelineAction.field]: pipelineAction.value });\n onRefresh?.(pipelineAction.refresh);\n } catch (err) {\n setError(err);\n } finally {\n setLoading(false);\n }\n return;\n }\n\n if (action.type !== \"apiAction\" || !action.endpoint || !confirmAction()) 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 {formOpen && pipelineAction.type === \"formAction\" ? (\n <DynamicForm\n title={pipelineAction.title ?? pipelineAction.label}\n eyebrow=\"Ação\"\n fields={pipelineAction.fields ?? []}\n initialValues={formInitialValues}\n submitting={loading}\n error={error}\n onSubmit={async (values) => {\n if (!pipelineAction.endpoint) return;\n setLoading(true);\n setError(null);\n try {\n const url = interpolateEndpoint(pipelineAction.endpoint, row, parent);\n await http.request({ url, method: pipelineAction.method ?? \"POST\", data: values });\n setFormOpen(false);\n onRefresh?.(pipelineAction.refresh);\n } catch (err) {\n setError(err);\n } finally {\n setLoading(false);\n }\n }}\n onFieldChange={() => setError(null)}\n onCancel={() => {\n if (!loading) setFormOpen(false);\n }}\n />\n ) : 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, Input, NativeSelect, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport type { OonCollectionListConfig, OonDetailModalConfig, OonFormFieldDef, OonListFilterDef, OonRelationDef } from \"../types\";\nimport type { OonPipelineActionDef, OonPipelineCreateDef, OonPipelineViewMode } from \"../pipelineTicket\";\nimport { useModelSchema, useOonResource } from \"../api/ApiProvider\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\nimport { ErrorState } from \"../shell/ErrorState\";\nimport { DynamicForm } from \"./internal/DynamicForm\";\nimport { CoreDetailModal } from \"./internal/CoreDetailModal\";\nimport { CoreRowAction } from \"./internal/CoreRowAction\";\nimport { DataGrid } from \"./internal/DataGrid\";\nimport { ReferenceSelect } from \"./internal/ReferenceSelect\";\nimport { columnsFromMeta, fieldLabel, formatCell, formFieldsFromMeta } from \"./internal/fieldUtils\";\nimport { normalizeColumn } from \"./internal/manifestUtils\";\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 form?: OonFormFieldDef[];\n relations?: Record<string, OonRelationDef>;\n ticketModal?: OonDetailModalConfig;\n filters?: OonListFilterDef[];\n create?: OonPipelineCreateDef;\n viewModes?: OonPipelineViewMode[];\n defaultView?: OonPipelineViewMode;\n list?: OonCollectionListConfig;\n ticketActions?: OonPipelineActionDef[];\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\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\nfunction PipelineFilterControl({\n filter,\n value,\n meta,\n onChange,\n}: {\n filter: OonListFilterDef;\n value: unknown;\n meta?: { ref?: string };\n onChange: (value: string) => void;\n}) {\n if (filter.type === \"ref\" && meta?.ref) {\n return (\n <Box w=\"220px\">\n <ReferenceSelect\n field={filter.field}\n inputId={`pipeline-filter-${filter.field}`}\n label={filter.label ?? filter.field}\n refModel={meta.ref}\n value={String(value ?? \"\")}\n initialValue={value}\n required={false}\n invalid={false}\n filters={{}}\n disabled={false}\n onChange={(next) => onChange(next)}\n />\n </Box>\n );\n }\n\n if (filter.type === \"select\") {\n return (\n <NativeSelect.Root size=\"sm\" w=\"190px\">\n <NativeSelect.Field value={String(value ?? \"\")} onChange={(event) => onChange(event.currentTarget.value)}>\n {(filter.options ?? []).map((option) => (\n <option key={String(option.value ?? \"\")} value={String(option.value ?? \"\")}>{option.label}</option>\n ))}\n </NativeSelect.Field>\n <NativeSelect.Indicator />\n </NativeSelect.Root>\n );\n }\n\n return (\n <Input\n w=\"190px\"\n h=\"35px\"\n fontSize=\"11px\"\n type={filter.type === \"date\" ? \"date\" : \"text\"}\n placeholder={filter.placeholder ?? filter.label ?? filter.field}\n value={String(value ?? \"\")}\n onChange={(event) => onChange(event.currentTarget.value)}\n />\n );\n}\n\n/** Esteira com quadro/lista, filtros, inclusão e ações operacionais no ticket. */\nexport function CorePipeline({\n model,\n label,\n endpoint,\n stageField = \"status\",\n stages,\n titleField,\n form,\n relations,\n ticketModal,\n filters = [],\n create,\n viewModes = [\"board\"],\n defaultView,\n list,\n ticketActions = [],\n}: 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 allowedViewModes: OonPipelineViewMode[] = viewModes.length ? viewModes : [\"board\"];\n const initialView: OonPipelineViewMode = defaultView && allowedViewModes.includes(defaultView)\n ? defaultView\n : allowedViewModes[0] ?? \"board\";\n const [viewMode, setViewMode] = useState<OonPipelineViewMode>(initialView);\n const [filterValues, setFilterValues] = useState<Record<string, unknown>>(() =>\n Object.fromEntries(filters.map((filter) => [filter.field, filter.defaultValue ?? \"\"])),\n );\n const [selectedTicket, setSelectedTicket] = useState<Record<string, unknown> | null>(null);\n const [creating, setCreating] = useState(false);\n const [formError, setFormError] = useState<unknown>(null);\n const effectiveFilters = Object.fromEntries(\n Object.entries(filterValues).filter(([, value]) => value !== \"\" && value != null),\n );\n\n const listQuery = useQuery({\n queryKey: [\"oon\", \"pipeline\", basePath, effectiveFilters],\n queryFn: () => resource.list({ pageSize: 200, ...effectiveFilters }),\n enabled: !!schema && viewMode === \"board\",\n });\n\n const invalidate = async () => {\n await Promise.all([\n queryClient.invalidateQueries({ queryKey: [\"oon\", \"pipeline\", basePath] }),\n queryClient.invalidateQueries({ queryKey: [\"oon\", \"list\", basePath] }),\n ]);\n };\n\n const saveMutation = useMutation({\n mutationFn: (values: Record<string, unknown>) => {\n const id = selectedTicket ? ticketId(selectedTicket) : undefined;\n return id ? resource.update(id, values) : resource.create(values);\n },\n onSuccess: async () => {\n await invalidate();\n setSelectedTicket(null);\n setCreating(false);\n setFormError(null);\n },\n onError: (error) => setFormError(error),\n });\n\n if (schemaQuery.isLoading || (viewMode === \"board\" && listQuery.isLoading)) return <LoadingScreen />;\n if (schemaQuery.isError) return <ErrorState error={schemaQuery.error} />;\n if (viewMode === \"board\" && 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 resolvedTitleField = titleField\n ?? ticketModal?.titleField\n ?? schema?.fields.find((field) => field.kind === \"string\")?.name\n ?? schema?.searchable[0]\n ?? \"_id\";\n const detailFields = (schema?.fields ?? [])\n .filter((field) => field.name !== stageField && field.name !== resolvedTitleField && field.kind !== \"raw\")\n .slice(0, 3);\n const formFields = mergeFormFields(formFieldsFromMeta(schema?.fields ?? []), form);\n const resolvedListColumns = list?.columns?.length\n ? list.columns.map((column) => normalizeColumn(column, schema))\n : columnsFromMeta(schema?.fields ?? []).slice(0, 10);\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 const openCreate = () => {\n const defaultStage = create?.defaultStage ?? resolvedStages[0]?.id;\n setFormError(null);\n setCreating(true);\n setSelectedTicket({\n ...(create?.defaultValues ?? {}),\n ...(defaultStage ? { [stageField]: defaultStage } : {}),\n });\n };\n\n const modalActions = selectedTicket && !creating ? (\n <Flex gap=\"5px\" align=\"center\" wrap=\"wrap\">\n {ticketActions.map((action, index) => (\n <CoreRowAction\n key={action.id ?? `${action.label}-${index}`}\n action={action}\n row={selectedTicket}\n onUpdate={async (values) => {\n const id = ticketId(selectedTicket);\n if (!id) throw new Error(\"Ticket sem identificador.\");\n const saved = await resource.update(id, values);\n setSelectedTicket((current) => ({ ...(current ?? {}), ...saved, ...values }));\n await invalidate();\n return saved;\n }}\n onRefresh={() => { void invalidate(); }}\n />\n ))}\n </Flex>\n ) : null;\n\n return (\n <Stack gap={5}>\n <Flex align={{ base: \"stretch\", md: \"flex-end\" }} justify=\"space-between\" gap={4} direction={{ base: \"column\", md: \"row\" }}>\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 <Flex gap=\"8px\" align=\"center\" wrap=\"wrap\">\n {allowedViewModes.length > 1 ? allowedViewModes.map((mode) => (\n <Button key={mode} size=\"sm\" variant={viewMode === mode ? \"solid\" : \"outline\"} colorPalette=\"brand\" onClick={() => setViewMode(mode)}>\n {mode === \"board\" ? \"Quadro\" : \"Lista\"}\n </Button>\n )) : null}\n {create?.enabled ? (\n <Button size=\"sm\" colorPalette=\"brand\" onClick={openCreate}>{create.label ?? \"Novo ticket\"}</Button>\n ) : null}\n </Flex>\n </Flex>\n\n {filters.length ? (\n <Flex p=\"12px\" gap=\"10px\" align=\"flex-end\" wrap=\"wrap\" bg=\"white\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"10px\">\n {filters.map((filter) => {\n const meta = schema?.fields.find((field) => field.name === filter.field);\n return (\n <Box key={filter.field}>\n <Text mb=\"4px\" fontSize=\"10px\" color=\"#667085\" fontWeight=\"600\">\n {filter.label ?? fieldLabel({ name: filter.field })}\n </Text>\n <PipelineFilterControl\n filter={filter}\n value={filterValues[filter.field]}\n meta={meta}\n onChange={(value) => setFilterValues((current) => ({ ...current, [filter.field]: value }))}\n />\n </Box>\n );\n })}\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setFilterValues(Object.fromEntries(filters.map((filter) => [filter.field, filter.defaultValue ?? \"\"])))}\n >\n Limpar filtros\n </Button>\n </Flex>\n ) : null}\n\n {viewMode === \"list\" ? (\n <DataGrid\n resource={resource}\n resourceKey={basePath}\n columns={resolvedListColumns}\n filters={[]}\n queryExtra={effectiveFilters}\n onEdit={(row) => {\n setCreating(false);\n setSelectedTicket(row);\n }}\n />\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 key={stageId} minW=\"300px\" maxW=\"340px\" flex=\"1 0 300px\" bg=\"#E8ECEF\" borderRadius=\"12px\" p={3} borderWidth=\"1px\" borderColor=\"#DDE3E7\">\n <Flex align=\"center\" justify=\"space-between\" mb={3} px={1}>\n <Text fontWeight=\"700\" fontSize=\"12px\" color=\"#33434C\" textTransform=\"uppercase\" letterSpacing=\"0.03em\">{stageLabel}</Text>\n <Badge colorPalette=\"brand\" variant=\"solid\" borderRadius=\"full\" minW=\"24px\" justifyContent=\"center\">{items.length}</Badge>\n </Flex>\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 ) : items.map((row, index) => {\n const ticketTitle = formatCell(row[resolvedTitleField], \"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 aria-label={`Abrir ticket ${ticketTitle}`}\n onClick={() => {\n setFormError(null);\n setCreating(false);\n setSelectedTicket(row);\n }}\n _hover={{ borderColor: \"brand.300\", transform: \"translateY(-1px)\", boxShadow: \"0 7px 18px rgba(7, 38, 46, 0.09)\" }}\n >\n <Text fontSize=\"13px\" fontWeight=\"700\" color=\"#24323A\" mb={2} lineClamp={2}>{ticketTitle}</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\">{fieldLabel(field)}</Text>\n <Text fontSize=\"11px\" color=\"#46545C\" fontWeight=\"500\" textAlign=\"right\" lineClamp={1}>{formatCell(row[field.name], field.kind)}</Text>\n </Flex>\n ))}\n </Stack>\n </Button>\n );\n })}\n </Stack>\n </Box>\n );\n })}\n </Flex>\n )}\n\n {selectedTicket && ticketModal && ticketModal.enabled !== false ? (\n <CoreDetailModal\n model={model}\n title={schema?.singular ?? label ?? model}\n config={{ ...ticketModal, titleField: ticketModal.titleField ?? resolvedTitleField }}\n formFields={formFields}\n recordId={creating ? undefined : ticketId(selectedTicket)}\n initialRecord={selectedTicket}\n initialTab={creating ? create?.initialTab : undefined}\n relations={relations}\n actions={modalActions}\n onClose={() => {\n setSelectedTicket(null);\n setCreating(false);\n setFormError(null);\n }}\n onSaved={async () => {\n await invalidate();\n if (creating) {\n setSelectedTicket(null);\n setCreating(false);\n }\n }}\n />\n ) : selectedTicket ? (\n <DynamicForm\n title={`${creating ? \"Novo\" : \"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) {\n setSelectedTicket(null);\n setCreating(false);\n setFormError(null);\n }\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 OonPageDef,\n} from \"../types\";\nimport type { OonPipelineViewDef } from \"../pipelineTicket\";\nimport { CoreCollection } from \"../components/CoreCollection\";\nimport { CoreDocument } from \"../components/CoreDocument\";\nimport { CorePipeline } from \"../components/CorePipeline\";\nimport { CoreDashboard } from \"../components/CoreDashboard\";\nimport { 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, registry?: OonCoreFrontConfig[\"registry\"]) {\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 cellRenderers={registry?.cellRenderers}\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 OonPipelineViewDef;\n return (\n <CorePipeline\n model={v.model}\n label={viewLabel(v)}\n stageField={v.stageField}\n stages={v.stages}\n titleField={v.titleField}\n form={v.form}\n relations={v.relations}\n ticketModal={v.ticketModal}\n filters={v.filters}\n create={v.create}\n viewModes={v.viewModes}\n defaultView={v.defaultView}\n list={v.list}\n ticketActions={v.ticketActions}\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, registry?: OonCoreFrontConfig[\"registry\"]): OonRoute {\n return {\n path: viewPath(view),\n element: renderView(view, registry),\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/** Resolve módulos e manifesto de UI em rotas e menu. */\nexport function resolveRegistry(config: OonCoreFrontConfig): ResolvedRegistry {\n const routes: OonRoute[] = [];\n const menu: OonMenuItem[] = [];\n const seenPaths = new Set<string>();\n const componentRegistry = config.registry ?? config.ui?.registry;\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, componentRegistry));\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, componentRegistry));\n menu.push(viewToMenu(view));\n }\n for (const page of config.ui?.pages ?? []) {\n pushRoute(pageToRoute(page, componentRegistry));\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 OonFormFieldDef,\n OonListFilterDef,\n OonRelationDef,\n} from \"./types\";\nimport type {\n OonOperationalDetailModalConfig,\n OonPipelineActionDef,\n OonPipelineCreateDef,\n OonPipelineViewDef,\n OonPipelineViewMode,\n} from \"./pipelineTicket\";\nimport { start } from \"./start\";\n\nexport interface CentralFormFieldDef extends OonFormFieldDef {\n /** Filtros fixos enviados como query params ao CRUD da model referenciada. */\n referenceFilters?: Record<string, string | number | boolean | null>;\n /** Mapeia query param da referência para outro campo do mesmo formulário. */\n referenceFilterFrom?: Record<string, string>;\n /** Mensagem exibida enquanto algum campo de referenceFilterFrom estiver vazio. */\n referenceDisabledMessage?: string;\n /** Mantém somente opções em que estes campos estejam vazios/nulos. */\n referenceEmptyFields?: string[];\n}\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?: CentralFormFieldDef[];\n list?: OonCollectionListConfig;\n relations?: Record<string, OonRelationDef>;\n detailModal?: OonOperationalDetailModalConfig;\n }>;\n pipelines?: Array<{\n name?: string;\n model?: string;\n mode?: string;\n stageField?: string;\n stages?: Array<{ id: string; label: string }>;\n titleField?: string;\n path?: string;\n label?: string;\n section?: string;\n /** Overrides do formulário usado ao editar um ticket. */\n form?: CentralFormFieldDef[];\n /** Relações consumidas por abas de resumo e grids relacionados. */\n relations?: Record<string, OonRelationDef>;\n /** Abas, grupos e tamanho do modal aberto pelo card da esteira. */\n ticketModal?: OonOperationalDetailModalConfig;\n filters?: OonListFilterDef[];\n create?: OonPipelineCreateDef;\n viewModes?: OonPipelineViewMode[];\n defaultView?: OonPipelineViewMode;\n list?: OonCollectionListConfig;\n ticketActions?: OonPipelineActionDef[];\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: OonPipelineViewDef = {\n type: \"pipeline\",\n model,\n label: p.label ?? p.name,\n path: p.path,\n stageField: p.stageField,\n stages: p.stages,\n titleField: p.titleField,\n section: p.section,\n form: p.form,\n relations: p.relations,\n ticketModal: p.ticketModal,\n filters: p.filters,\n create: p.create,\n viewModes: p.viewModes,\n defaultView: p.defaultView,\n list: p.list,\n ticketActions: p.ticketActions,\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} from \"../types\";\nimport type { OonPipelineViewDef } from \"../pipelineTicket\";\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<OonPipelineViewDef, \"type\">): OonPipelineViewDef {\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","value","NativeSelect","Input","Flex","Heading","Button","Stack","useEffect","useMemo","useState","Box","Button","Flex","Heading","Text","useQuery","useQueryClient","useEffect","useMemo","useState","Box","Button","Flex","Input","NativeSelect","SimpleGrid","Stack","Text","Textarea","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","NativeSelect","Textarea","Input","useState","Button","Text","jsx","jsxs","messageOf","unwrap","useState","Button","Text","Fragment","jsx","jsxs","useQuery","useMemo","useState","Text","Box","Flex","Button","Table","Badge","jsx","jsxs","coerce","toValue","initialFieldValue","isMultiline","messageOf","resolveReference","Text","ErrorText","Box","NativeSelect","Textarea","Input","SimpleGrid","useState","useEffect","useMemo","Stack","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","Input","NativeSelect","Stack","Text","useMutation","useQuery","useQueryClient","jsx","jsxs","mergeFormFields","Box","NativeSelect","Input","useQueryClient","useState","useQuery","useMutation","Flex","Stack","Text","Heading","Button","Badge","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"]}