@oondemand/oon-core-front 0.4.0 → 0.4.2

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/security/tenantStorage.ts","../src/security/AcceptInviteCentralPage.tsx","../src/api/ApiProvider.tsx","../src/api/coreClient.ts","../src/api/resourceClient.ts","../src/security/AcceptInvitePage.tsx","../src/app/OonProviders.tsx","../src/config/queryClient.ts","../src/config/theme.ts","../src/security/AuthProvider.tsx","../src/security/ActivationProvider.tsx","../src/security/TenantProvider.tsx","../src/components/CoreCollection.tsx","../src/components/internal/referenceUtils.ts","../src/components/internal/fieldUtils.ts","../src/components/internal/DataGrid.tsx","../src/shell/LoadingScreen.tsx","../src/shell/ErrorState.tsx","../src/components/internal/DynamicForm.tsx","../src/domain/domainExpressions.ts","../src/components/internal/ReferenceSelect.tsx","../src/components/internal/CoreErrorAlert.tsx","../src/components/internal/actionError.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/CoreRowAction.tsx","../src/components/internal/conditions.ts","../src/components/internal/DetailRecordContext.tsx","../src/components/CoreDocument.tsx","../src/components/CorePipeline.tsx","../src/pipelineTicket.ts","../src/components/internal/pipelineBoardScroll.ts","../src/components/CoreDashboard.tsx","../src/components/CoreUsersAccess.tsx","../src/security/PermissionGate.tsx","../src/components/ui-v2/CorePage.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","../package.json","../src/runtime/versionInfo.ts","../src/shell/AuthenticatedLayout.tsx","../src/security/AccessDeniedPage.tsx","../src/security/AppAccessGuard.tsx","../src/security/LoginPage.tsx","../src/security/FirstAccessPage.tsx","../src/security/ActivationPage.tsx","../src/security/RouteGuard.tsx","../src/security/ActivationGuard.tsx","../src/components/internal/pipelineBoardLayout.ts","../src/manifest.ts","../src/modules/integrations.tsx","../src/components/CoreIntegration.tsx","../src/components/CoreIntegrationMappings.tsx","../src/components/CoreIntegrationTickets.tsx","../src/components/CoreOmieIntegrationWorkspace.tsx","../src/components/CoreOmieIntegration.tsx","../src/appManifest.ts","../src/define/views.ts","../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\";\nimport { installPipelineBoardLayoutStyles } from \"./components/internal/pipelineBoardLayout\";\n\nfunction validateConfig(config: OonCoreFrontConfig) {\n if (!config?.app?.id) throw new Error(\"oonCoreFront.start: config.app.id é obrigatório.\");\n if (!config?.api?.baseUrl) throw new Error(\"oonCoreFront.start: config.api.baseUrl é obrigatório.\");\n}\n\nfunction applyDocumentMeta(config: OonCoreFrontConfig) {\n if (config.app.title) document.title = config.app.title;\n if (config.app.favicon) {\n let link = document.querySelector<HTMLLinkElement>('link[rel=\"icon\"]');\n if (!link) {\n link = document.createElement(\"link\");\n link.rel = \"icon\";\n document.head.appendChild(link);\n }\n link.href = config.app.favicon;\n }\n}\n\nfunction hardenConsole(config: OonCoreFrontConfig) {\n if (config.security?.disableConsoleInProduction && import.meta.env?.PROD) {\n const noop = () => {};\n console.log = noop;\n console.debug = noop;\n console.info = noop;\n }\n}\n\n/**\n * 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 installPipelineBoardLayoutStyles();\n hardenConsole(config);\n\n const rootId = config.rootElementId ?? \"root\";\n const el = document.getElementById(rootId);\n if (!el) throw new Error(`oonCoreFront.start: elemento #${rootId} não encontrado no DOM.`);\n\n createRoot(el).render(\n <StrictMode>\n <OonApp config={config} />\n </StrictMode>\n );\n}\n\n/** 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, OonRoute } from \"../types\";\nimport { createRestClient } from \"../api/createRestClient\";\nimport { createTokenStorage } from \"../security/tokenStorage\";\nimport { createTenantStorage } from \"../security/tenantStorage\";\nimport { AcceptInviteCentralPage } from \"../security/AcceptInviteCentralPage\";\nimport { OonProviders } from \"./OonProviders\";\nimport { resolveRegistry } from \"./moduleRegistry\";\nimport { createOonRouter } from \"./createOonRouter\";\n\nfunction localLoginUrl(): string {\n const current = `${window.location.pathname}${window.location.search}`;\n return `/login?redirect=${encodeURIComponent(current)}`;\n}\n\n/**\n * Raiz da aplicação Core. Cria o cliente REST, resolve rotas/menu e monta os\n * providers. Respostas 401 seguem para o login; 403 é tratado pelo AuthProvider.\n */\nexport function OonApp({ config }: { config: OonCoreFrontConfig }) {\n const { http, storage, tenantStorage, router } = useMemo(() => {\n const storage = createTokenStorage(config.app.id);\n const tenantStorage = createTenantStorage(config.app.id);\n 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 getTenantId: () => tenantStorage.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 resolved = resolveRegistry(config);\n const routes: OonRoute[] = [...resolved.routes];\n if (!routes.some((route) => route.path === \"/accept-invite\")) {\n routes.push({\n path: \"/accept-invite\",\n public: true,\n element: <AcceptInviteCentralPage />,\n });\n }\n\n const router = createOonRouter({\n app: config.app,\n menu: resolved.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, tenantStorage, router };\n }, [config]);\n\n return (\n <OonProviders\n config={config}\n http={http}\n storage={storage}\n tenantStorage={tenantStorage}\n >\n <RouterProvider router={router} />\n </OonProviders>\n );\n}\n","import 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 /** Lê a seleção atual de tenant. O backend continua sendo a autoridade. */\n getTenantId?: () => 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 * - seleção de tenant via x-oon-tenant-id;\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, getTenantId, 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 const tenantId = getTenantId?.();\n if (tenantId) config.headers[\"x-oon-tenant-id\"] = tenantId;\n else delete config.headers[\"x-oon-tenant-id\"];\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 technicalMessage?: string;\n [key: string]: unknown;\n};\n\ntype ErrorPayload = {\n code?: string;\n message?: string;\n details?: unknown;\n requestId?: string;\n error?: ErrorEnvelope | string;\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 string | ErrorPayload | undefined;\n const responseRequestId = (\n err.response?.headers?.[\"x-request-id\"]\n ?? err.response?.headers?.[\"x-correlation-id\"]\n ) as string | 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: responseRequestId,\n };\n }\n\n const rawError = data?.error;\n const envelope = rawError && typeof rawError === \"object\" ? rawError : undefined;\n const legacyDetails = envelope && envelope.details === undefined && envelope.field\n ? envelope\n : undefined;\n const rawTechnicalDetails = typeof rawError === \"string\"\n ? { technicalMessage: rawError }\n : undefined;\n\n return {\n code: envelope?.code || data?.code || codeFromStatus(status),\n message: envelope?.message || data?.message || err.message || \"Erro inesperado.\",\n status,\n details: envelope?.details ?? legacyDetails ?? data?.details ?? rawTechnicalDetails,\n requestId: envelope?.requestId || data?.requestId || responseRequestId,\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","export interface TenantStorage {\n get(): string | null;\n set(tenantId: string): void;\n clear(): void;\n}\n\nfunction normalize(value: unknown): string | null {\n const normalized = String(value ?? \"\").trim();\n return normalized || null;\n}\n\n/**\n * Guarda somente a seleção de tenant do usuário. O valor persistido não é\n * autoridade: o backend/Control Plane precisa validar o header a cada request.\n */\nexport function createTenantStorage(appId: string): TenantStorage {\n const key = `oon:${appId}:tenant`;\n return {\n get() {\n if (typeof window === \"undefined\") return null;\n return normalize(window.localStorage.getItem(key));\n },\n set(tenantId) {\n if (typeof window === \"undefined\") return;\n const value = normalize(tenantId);\n if (!value) {\n window.localStorage.removeItem(key);\n return;\n }\n window.localStorage.setItem(key, value);\n },\n clear() {\n if (typeof window !== \"undefined\") window.localStorage.removeItem(key);\n },\n };\n}\n","import { useEffect, useState } from \"react\";\nimport { Box, Text } from \"@chakra-ui/react\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { AcceptInvitePage } from \"./AcceptInvitePage\";\n\ninterface PublicRbacInfo {\n central?: { appCode: string; name: string };\n}\n\nexport function AcceptInviteCentralPage() {\n const { http } = useOonApi();\n const [centralName, setCentralName] = useState(\"Central Oon\");\n\n useEffect(() => {\n let active = true;\n http.get<PublicRbacInfo>(\"/core/rbac\")\n .then((response) => {\n if (active && response.data.central?.name) setCentralName(response.data.central.name);\n })\n .catch(() => undefined);\n return () => { active = false; };\n }, [http]);\n\n return (\n <Box bg=\"#F5F8FA\" minH=\"100vh\" pt={4}>\n <Box mx=\"auto\" maxW=\"480px\" px={4} textAlign=\"center\">\n <Text fontSize=\"sm\" fontWeight=\"700\">Convite para: {centralName}</Text>\n </Box>\n <AcceptInvitePage />\n </Box>\n );\n}\n","import { 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 { useEffect, useState, type FormEvent } from \"react\";\nimport { Box, Button, Flex, Heading, Input, Text, VStack } from \"@chakra-ui/react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { useOonApi } from \"../api/ApiProvider\";\n\ninterface InvitationInfo {\n email: string;\n name?: string;\n roleCode: string;\n roleName?: string;\n expiresAt: string;\n}\n\nexport function AcceptInvitePage() {\n const { http } = useOonApi();\n const location = useLocation();\n const token = new URLSearchParams(location.search).get(\"token\") || \"\";\n const [invitation, setInvitation] = useState<InvitationInfo | null>(null);\n const [password, setPassword] = useState(\"\");\n const [confirm, setConfirm] = useState(\"\");\n const [message, setMessage] = useState<string | null>(null);\n const [done, setDone] = useState(false);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let active = true;\n if (!token) {\n setMessage(\"Link de convite inválido.\");\n setLoading(false);\n return;\n }\n http.get<{ invitation: InvitationInfo }>(`/core/invitations/${encodeURIComponent(token)}`)\n .then((response) => { if (active) setInvitation(response.data.invitation); })\n .catch(() => { if (active) setMessage(\"Este convite é inválido, expirou ou já foi utilizado.\"); })\n .finally(() => { if (active) setLoading(false); });\n return () => { active = false; };\n }, [http, token]);\n\n async function submit(event: FormEvent) {\n event.preventDefault();\n setMessage(null);\n if (password.length < 8) {\n setMessage(\"A senha deve possuir pelo menos 8 caracteres.\");\n return;\n }\n if (password !== confirm) {\n setMessage(\"As senhas informadas não conferem.\");\n return;\n }\n try {\n await http.post(`/core/invitations/${encodeURIComponent(token)}/accept`, { password });\n setDone(true);\n setMessage(\"Convite aceito e senha definida. Você já pode entrar na Central.\");\n } catch (error: any) {\n setMessage(error?.message || \"Não foi possível concluir o convite.\");\n }\n }\n\n return (\n <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box width=\"100%\" maxW=\"480px\" bg=\"white\" borderWidth=\"1px\" borderRadius=\"18px\" p={{ base: 6, md: 9 }}>\n <VStack align=\"stretch\" gap={5}>\n <Box>\n <Text color=\"#39BFED\" fontSize=\"xs\" fontWeight=\"700\" textTransform=\"uppercase\">Central Oon</Text>\n <Heading mt={2} size=\"lg\">Aceitar convite</Heading>\n </Box>\n\n {loading ? <Text>Validando convite…</Text> : null}\n {invitation && !done ? (\n <>\n <Box bg=\"gray.50\" borderRadius=\"md\" p={4}>\n <Text fontWeight=\"700\">{invitation.name || invitation.email}</Text>\n <Text fontSize=\"sm\">{invitation.email}</Text>\n <Text fontSize=\"sm\" color=\"gray.600\">Perfil: {invitation.roleName || invitation.roleCode}</Text>\n </Box>\n <form onSubmit={(event) => void submit(event)}>\n <VStack align=\"stretch\" gap={4}>\n <Box>\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Nova senha</Text>\n <Input type=\"password\" autoComplete=\"new-password\" value={password} onChange={(event) => setPassword(event.target.value)} required />\n </Box>\n <Box>\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Confirmar senha</Text>\n <Input type=\"password\" autoComplete=\"new-password\" value={confirm} onChange={(event) => setConfirm(event.target.value)} required />\n </Box>\n <Button type=\"submit\">Concluir primeiro acesso</Button>\n </VStack>\n </form>\n </>\n ) : null}\n\n {message ? <Box role=\"status\" bg={done ? \"green.50\" : \"red.50\"} borderRadius=\"md\" p={3}><Text fontSize=\"sm\">{message}</Text></Box> : null}\n {done ? <Button asChild><Link to=\"/login\">Ir para o login</Link></Button> : null}\n </VStack>\n </Box>\n </Flex>\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 { TenantProvider } from \"../security/TenantProvider\";\nimport type { TokenStorage } from \"../security/tokenStorage\";\nimport type { TenantStorage } from \"../security/tenantStorage\";\n\nexport interface OonProvidersProps {\n config: OonCoreFrontConfig;\n http: AxiosInstance;\n storage: TokenStorage;\n tenantStorage: TenantStorage;\n children: ReactNode;\n}\n\n/**\n * Monta, em ordem, todos os providers globais. Nenhuma Central cliente deve\n * montar QueryClient/Chakra/Auth/Api/Tenant manualmente.\n *\n * Ordem: QueryClient -> Chakra -> Api -> Activation -> Tenant -> Auth.\n */\nexport function OonProviders({\n config,\n http,\n storage,\n tenantStorage,\n children,\n}: OonProvidersProps) {\n const queryClient = useMemo(() => createOonQueryClient(), []);\n const 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 <TenantProvider http={http} storage={tenantStorage}>\n <AuthProvider http={http} storage={storage} auth={config.auth} loginUrl={loginUrl}>\n {children}\n </AuthProvider>\n </TenantProvider>\n </ActivationProvider>\n </ApiProvider>\n </ChakraProvider>\n </QueryClientProvider>\n );\n}\n","import { QueryClient } from \"@tanstack/react-query\";\n\nconst QUERY_STALE_TIME_MS = 5 * 1000;\nconst QUERY_REFETCH_INTERVAL_MS = 10 * 1000;\n\n/**\n * QueryClient padrão do Core.\n *\n * A Central é uma interface operacional: listas e datagrids precisam refletir\n * rapidamente alterações feitas por automações, webhooks e outros usuários.\n * Por isso, consultas ativas ficam obsoletas em poucos segundos e são\n * revalidadas periodicamente enquanto a aba estiver visível.\n */\nexport function createOonQueryClient(): QueryClient {\n return new QueryClient({\n defaultOptions: {\n queries: {\n retry: 1,\n staleTime: QUERY_STALE_TIME_MS,\n refetchInterval: QUERY_REFETCH_INTERVAL_MS,\n refetchIntervalInBackground: false,\n refetchOnMount: \"always\",\n refetchOnReconnect: \"always\",\n refetchOnWindowFocus: \"always\",\n },\n mutations: {\n retry: 0,\n },\n },\n });\n}\n","import { 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 {\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 | \"first-access\"\n | \"unauthenticated\"\n | \"forbidden\"\n | \"error\";\n\ninterface AuthContextValue {\n user: OonUser | null;\n roles: string[];\n capabilities: string[];\n permissions: string[];\n status: AuthStatus;\n isAuthenticated: boolean;\n hasPermission: (permission?: string | string[]) => boolean;\n login: (email: string, password: string) => Promise<void>;\n completeFirstAccess: (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 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 unique(values: string[]): string[] {\n return values.filter((item, index, all) => Boolean(item) && all.indexOf(item) === index);\n}\n\nfunction extractCapabilities(user: OonUser | null): string[] {\n if (!user) return [];\n return unique([\n ...normalizeList(user.capabilities),\n ...normalizeList(user.permissoes?.capabilities),\n ...normalizeList(user.aplicativo?.capabilities),\n ...normalizeList(user.aplicativo?.permissoes?.capabilities),\n ]);\n}\n\nfunction explicitPermissions(user: OonUser | null): string[] | null {\n if (!user) return [];\n const value = (user as OonUser & { permissions?: string[] }).permissions;\n return Array.isArray(value) ? unique(value.map(String)) : null;\n}\n\nexport function can(\n user: OonUser | null,\n permission?: string | string[],\n): boolean {\n if (!permission) return true;\n const required = Array.isArray(permission) ? permission : [permission];\n if (!required.length) return true;\n\n const canonical = explicitPermissions(user);\n if (canonical) {\n return canonical.includes(\"*\") || required.some((value) => canonical.includes(value));\n }\n\n // Compatibilidade com backends anteriores ao RBAC canônico.\n const roles = unique(normalizeList((user as OonUser & { roleCode?: string })?.roleCode).concat(normalizeList(user?.tipo)));\n const capabilities = extractCapabilities(user);\n if (roles.includes(\"admin\") || roles.includes(\"master\")) return true;\n return required.some((value) => roles.includes(value) || capabilities.includes(value));\n}\n\nexport function AuthProvider({ http, storage, auth, loginUrl, children }: 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 applyUser = useCallback((next: OonUser) => {\n setUser(next);\n const firstAccess = Boolean(\n (next as OonUser & { mustChangePassword?: boolean; firstAccessPending?: boolean }).mustChangePassword ||\n (next as OonUser & { firstAccessPending?: boolean }).firstAccessPending,\n );\n setStatus(firstAccess ? \"first-access\" : \"authenticated\");\n }, []);\n\n const applyValidationError = useCallback(\n (error: unknown) => {\n const currentStatus = errorStatus(error);\n setUser(null);\n if (currentStatus === 403) {\n setStatus(\"forbidden\");\n return;\n }\n if (currentStatus === 401) {\n storage.clear();\n setStatus(\"unauthenticated\");\n redirectToExternalLogin();\n return;\n }\n setStatus(\"error\");\n },\n [storage, redirectToExternalLogin],\n );\n\n const validateSession = useCallback(async () => {\n const response = await http.get<{ usuario: OonUser }>(\"/auth/validar-token\");\n applyUser(response.data.usuario);\n }, [http, applyUser]);\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 try {\n const response = await http.post<{ token: string }>(\n \"/auth/autenticar\",\n {},\n { headers: { Authorization: `Basic ${encodeBasicCredentials(email, password)}` } },\n );\n if (!response.data.token) {\n const error: OonError = { code: \"AUTH_TOKEN_MISSING\", message: \"Token não retornado pelo backend.\", status: 502 };\n throw error;\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 completeFirstAccess = useCallback(async (password: string) => {\n await http.post(\"/auth/first-access/password\", { password });\n await validateSession();\n }, [http, validateSession]);\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 if (activation && ![\"active\", \"error\"].includes(activation.status)) {\n setUser(null);\n setStatus(\"unauthenticated\");\n return;\n }\n const incoming = captureTokenFromUrl(tokenParam);\n const stored = storage.get();\n const token = incoming ?? devToken ?? stored;\n if (token && token !== stored) storage.set(token);\n if (!token) {\n setUser(null);\n setStatus(\"unauthenticated\");\n redirectToExternalLogin();\n return;\n }\n setStatus(\"loading\");\n http.get<{ usuario: OonUser }>(\"/auth/validar-token\")\n .then((response) => {\n if (!active) return;\n applyUser(response.data.usuario);\n })\n .catch((error) => {\n if (!active) return;\n applyValidationError(error);\n });\n return () => { active = false; };\n }, [http, storage, tokenParam, devToken, redirectToExternalLogin, applyValidationError, applyUser, activation?.status]);\n\n const roleCode = String((user as OonUser & { roleCode?: string })?.roleCode || user?.tipo || \"\");\n const roles = roleCode ? [roleCode] : [];\n const capabilities = extractCapabilities(user);\n const permissions = explicitPermissions(user) ?? capabilities;\n const hasPermission = useCallback(\n (permission?: string | string[]) => can(user, permission),\n [user],\n );\n\n const value: AuthContextValue = {\n user,\n roles,\n capabilities,\n permissions,\n status,\n isAuthenticated: status === \"authenticated\" || status === \"first-access\",\n hasPermission,\n login,\n completeFirstAccess,\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) throw new Error(\"useOonAuth deve ser usado dentro de <AuthProvider> (oonCoreFront.start).\");\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 {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport type { AxiosInstance } from \"axios\";\nimport type { TenantStorage } from \"./tenantStorage\";\n\nexport interface OonTenantContextValue {\n activeTenantId: string | null;\n switchTenant(tenantId: string): void;\n clearTenant(): void;\n}\n\nconst TenantContext = createContext<OonTenantContextValue | null>(null);\n\nexport interface TenantProviderProps {\n http: AxiosInstance;\n storage: TenantStorage;\n children: ReactNode;\n}\n\nfunction applyHeader(http: AxiosInstance, tenantId: string | null) {\n if (tenantId) {\n http.defaults.headers.common[\"x-oon-tenant-id\"] = tenantId;\n return;\n }\n delete http.defaults.headers.common[\"x-oon-tenant-id\"];\n}\n\n/**\n * Gerencia somente a seleção ativa. O backend continua sendo a autoridade e\n * precisa validar o tenant antes de materializar req.accessContext.\n */\nexport function TenantProvider({ http, storage, children }: TenantProviderProps) {\n const queryClient = useQueryClient();\n const [activeTenantId, setActiveTenantId] = useState<string | null>(() => storage.get());\n\n const replaceTenant = useCallback(\n (tenantId: string | null) => {\n const normalized = String(tenantId ?? \"\").trim() || null;\n if (normalized) storage.set(normalized);\n else storage.clear();\n applyHeader(http, normalized);\n setActiveTenantId(normalized);\n\n // Nunca reutilizar cache entre tenants. `clear()` remove queries inativas,\n // dados observados e mutations pendentes do contexto anterior.\n queryClient.clear();\n },\n [http, queryClient, storage],\n );\n\n const value = useMemo<OonTenantContextValue>(\n () => ({\n activeTenantId,\n switchTenant(tenantId) {\n if (!tenantId?.trim()) throw new Error(\"tenantId é obrigatório.\");\n replaceTenant(tenantId);\n },\n clearTenant() {\n replaceTenant(null);\n },\n }),\n [activeTenantId, replaceTenant],\n );\n\n return <TenantContext.Provider value={value}>{children}</TenantContext.Provider>;\n}\n\nexport function useOonTenant(): OonTenantContextValue {\n const value = useContext(TenantContext);\n if (!value) throw new Error(\"useOonTenant deve ser usado dentro de TenantProvider.\");\n return value;\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={list?.builtInActions?.create === false ? undefined : () => {\n setFormError(null);\n if (detailModal?.enabled) setDetailState({ open: true });\n else setFormState({ open: true });\n }}\n onEdit={list?.builtInActions?.edit === false ? undefined : (row) => {\n setFormError(null);\n if (detailModal?.enabled) setDetailState({ open: true, row });\n else setFormState({ open: true, row });\n }}\n onDelete={list?.builtInActions?.delete === false ? undefined : (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","const COMMON_LABEL_FIELDS = [\n \"nome\",\n \"razaoSocial\",\n \"razao_social\",\n \"descricao\",\n \"numero\",\n \"codigoIndividual\",\n \"codigo_individual\",\n \"codigo\",\n \"label\",\n \"email\",\n];\n\nfunction primitiveText(value: unknown): string | null {\n if (value == null || value === \"\") return null;\n if (typeof value === \"string\" || typeof value === \"number\") return String(value);\n return null;\n}\n\n/**\n * Resolve um rótulo humano para qualquer registro relacionado. Prioriza campos\n * conhecidos e depois os campos pesquisáveis expostos pela metadata.\n */\nexport function referenceOptionLabel(\n row: Record<string, unknown>,\n searchableFields: string[] = []\n): string {\n const ordered = [...COMMON_LABEL_FIELDS, ...searchableFields];\n const seenFields = new Set<string>();\n const seenValues = new Set<string>();\n const values: string[] = [];\n\n for (const field of ordered) {\n if (seenFields.has(field)) continue;\n seenFields.add(field);\n const text = primitiveText(row[field]);\n if (!text || seenValues.has(text)) continue;\n seenValues.add(text);\n values.push(text);\n if (values.length === 2) break;\n }\n\n if (values.length) return values.join(\" — \");\n return primitiveText(row._id) ?? primitiveText(row.id) ?? \"Registro sem identificação\";\n}\n\nexport function initialReferenceLabel(value: unknown): string {\n if (!value || typeof value !== \"object\") return \"\";\n return referenceOptionLabel(value as Record<string, unknown>);\n}\n\nexport function referenceId(row: Record<string, unknown>): string {\n return String(row._id ?? row.id ?? \"\");\n}\n","import type { FieldKind, FieldMeta, OonColumnDef, OonFormFieldDef } from \"../../types\";\nimport type { OonComputedFieldDefinition, OonReactiveFormField } from \"../../domain/domainExpressions\";\nimport { referenceOptionLabel } from \"./referenceUtils\";\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\nfunction formReadonly(field: FieldMeta): boolean {\n const raw = field as unknown as Record<string, unknown>;\n return Boolean(raw.readonly || raw.immutable || raw.computed);\n}\n\nfunction formComputed(field: FieldMeta): OonComputedFieldDefinition | undefined {\n const raw = field as unknown as Record<string, unknown>;\n if (!raw.computed || typeof raw.computed !== \"object\" || Array.isArray(raw.computed)) return undefined;\n return raw.computed as unknown as OonComputedFieldDefinition;\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 const computed = formComputed(field);\n const readonly = formReadonly(field);\n return {\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 ...(readonly ? { readonly: true } : {}),\n ...(computed ? { computed } : {}),\n };\n }) as Array<OonFormFieldDef & OonReactiveFormField>;\n}\n\n/**\n * Formata um valor de célula conforme o tipo declarado. Objetos populados de\n * campos relacionados são sempre convertidos para um rótulo humano, mesmo\n * quando uma coluna ou título sobrescreveu/omitiu o kind `ref`.\n */\nexport function formatCell(value: unknown, kind?: FieldKind): string {\n if (value == null || value === \"\") return \"—\";\n\n if (value && typeof value === \"object\" && !Array.isArray(value) && kind !== \"date\") {\n return referenceOptionLabel(value as Record<string, unknown>);\n }\n\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 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 {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 {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 </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 {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 {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 </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 {\n applyReactiveFormulas,\n buildDomainMutationPayload,\n type OonReactiveFormField,\n} from \"../../domain/domainExpressions\";\nimport { fieldLabel } from \"./fieldUtils\";\nimport { ReferenceSelect } from \"./ReferenceSelect\";\nimport { CoreErrorAlert } from \"./CoreErrorAlert\";\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 & OonReactiveFormField & {\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 initialReactiveValues(fields: ExtendedField[], initialValues?: Record<string, unknown>) {\n const initial = Object.fromEntries(fields.map((field) => [field.field, initialFieldValue(field, initialValues?.[field.field])]));\n return applyReactiveFormulas(fields, initial);\n}\n\nfunction validate(fields: ExtendedField[], values: Record<string, string>) {\n const errors: FieldErrors = {};\n fields.forEach((field) => {\n if (!field.readonly && !field.computed && 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 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, readonly }: { id: string; label: string; required?: boolean; readonly?: boolean }) {\n return <label htmlFor={id}><Text as=\"span\" display=\"block\" mb=\"6px\" color=\"#475467\" fontSize=\"11px\" fontWeight=\"600\">{label}{required && !readonly ? <Text as=\"span\" color=\"#DC2626\"> *</Text> : null}{readonly ? <Text as=\"span\" ml=\"5px\" color=\"#98A2B3\" fontSize=\"9px\" fontWeight=\"500\">somente leitura</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, readonly = false) => ({\n minH: \"37px\",\n px: \"10px\",\n py: \"8px\",\n color: \"#475467\",\n bg: readonly ? \"#F8FAFC\" : \"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: rawFields, initialValues, submitting, error, onSubmit, onCancel, onFieldChange }: DynamicFormProps) {\n const fields = rawFields as ExtendedField[];\n const initial = initialReactiveValues(fields, initialValues);\n const [values, setValues] = useState<Record<string, string>>(initial.values);\n const [formulaErrors, setFormulaErrors] = useState<FieldErrors>(initial.errors);\n const [errors, setErrors] = useState<FieldErrors>({});\n const [dismissed, setDismissed] = useState(false);\n const items = useMemo(() => buildItems(fields), [rawFields]);\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 selected = fields.find((field) => field.field === fieldName);\n if (selected?.readonly || selected?.computed) return;\n\n const dependentFields = fields.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 const reactive = applyReactiveFormulas(fields, next);\n setFormulaErrors(reactive.errors);\n return reactive.values;\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 setErrors({});\n onSubmit(buildDomainMutationPayload(fields, values));\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] ?? formulaErrors[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 readonly = Boolean(field.readonly || field.computed);\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} readonly={readonly} /> : 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 as=\"label\" display=\"flex\" minH=\"37px\" px=\"11px\" alignItems=\"center\" gap=\"8px\" color=\"#344054\" bg={readonly ? \"#F8FAFC\" : checked ? \"#F0F7FF\" : \"white\"} borderWidth=\"1px\" borderColor={message ? \"#DC2626\" : checked ? \"#8FC9E7\" : \"#D5DDE3\"} borderRadius=\"7px\" cursor={readonly ? \"not-allowed\" : \"pointer\"} transition=\"background .15s ease, border-color .15s ease\">\n <input id={id} type=\"checkbox\" checked={checked} disabled={readonly} aria-invalid={!!message} aria-describedby={errorId} style={{ width: 16, height: 16, accentColor: \"#0474AF\", cursor: readonly ? \"not-allowed\" : \"pointer\" }} onChange={(event) => change(field.field, event.currentTarget.checked ? checkedValue : uncheckedValue)} />\n <Text as=\"span\" fontSize=\"11px\" fontWeight=\"600\">{label}{field.required && !readonly ? <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 && !readonly} invalid={!!message} error={message} filters={reference.filters} emptyFields={field.referenceEmptyFields} disabled={readonly || 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\" disabled={readonly}><NativeSelect.Field id={id} aria-invalid={!!message} aria-describedby={errorId} value={values[field.field] ?? \"\"} {...controlProps(!!message, readonly)} 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\" disabled={readonly}><NativeSelect.Field id={id} aria-invalid={!!message} aria-describedby={errorId} value={values[field.field] ?? \"\"} {...controlProps(!!message, readonly)} 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\" readOnly={readonly} aria-invalid={!!message} aria-describedby={errorId} value={values[field.field] ?? \"\"} {...controlProps(!!message, readonly)} lineHeight=\"1.5\" onChange={(event) => change(field.field, event.currentTarget.value)} />);\n\n const mask = resolveInputMask(field);\n const numeric = [\"number\", \"currency\", \"currencyConverted\"].includes(field.kind ?? \"\");\n const type = mask ? \"text\" : field.kind === \"date\" ? \"date\" : numeric ? \"number\" : \"text\";\n const value = values[field.field] ?? \"\";\n return wrap(\n <Input id={id} type={type} step={type === \"number\" ? \"any\" : undefined} inputMode={inputModeForMask(mask)} maxLength={maxLengthForMask(mask)} autoComplete=\"off\" readOnly={readonly} aria-invalid={!!message} aria-describedby={errorId} value={mask ? formatMaskedValue(value, mask) : value} {...controlProps(!!message, readonly)} onChange={(event) => change(field.field, parseMaskedInput(event.currentTarget.value, mask))} />,\n );\n };\n\n const combinedErrors = { ...formulaErrors, ...errors };\n const invalid = fields.filter((field) => combinedErrors[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 <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\">Revise 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 })}: {combinedErrors[field.field]}</Button></li>)}</Box></Box> : null}\n {generic && !invalid.length ? <CoreErrorAlert error={error} /> : null}\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 <Box key={item.id} gridColumn=\"1 / -1\" p=\"12px\" bg=\"#FAFCFD\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"9px\"><Text color=\"#344054\" fontSize=\"11px\" fontWeight=\"700\">{first.groupLabel ?? item.id}</Text>{first.groupDescription ? <Text mt=\"2px\" mb=\"10px\" color=\"#667085\" fontSize=\"10px\">{first.groupDescription}</Text> : <Box h=\"8px\" />}<Flex direction={inline ? \"row\" : \"column\"} wrap=\"wrap\" gap=\"9px\">{item.fields.map((field) => renderField(field, true))}</Flex></Box>;\n })}\n </SimpleGrid>\n </Stack>\n </Box>\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","export type OonDomainExpressionOperator =\n | \"add\"\n | \"subtract\"\n | \"multiply\"\n | \"divide\"\n | \"min\"\n | \"max\"\n | \"abs\"\n | \"negate\"\n | \"coalesce\"\n | \"eq\"\n | \"neq\"\n | \"gt\"\n | \"gte\"\n | \"lt\"\n | \"lte\"\n | \"and\"\n | \"or\"\n | \"not\"\n | \"present\"\n | \"in\";\n\nexport type OonDomainExpression =\n | { value: unknown }\n | { field: string }\n | { op: OonDomainExpressionOperator; args: OonDomainExpression[] };\n\nexport interface OonComputedFieldDefinition {\n expression: OonDomainExpression;\n precision?: number;\n nullAsZero?: boolean;\n}\n\nexport interface OonReactiveFormField {\n field: string;\n kind?: string;\n readonly?: boolean;\n computed?: OonComputedFieldDefinition;\n}\n\nexport interface ReactiveFormulaResult {\n values: Record<string, string>;\n errors: Record<string, string>;\n}\n\nexport class DomainExpressionError extends Error {\n readonly code: string;\n readonly field?: string;\n\n constructor(message: string, options: { code?: string; field?: string } = {}) {\n super(message);\n this.name = \"DomainExpressionError\";\n this.code = options.code ?? \"OON_DOMAIN_EXPRESSION_INVALID\";\n this.field = options.field;\n }\n}\n\nconst NUMERIC_KINDS = new Set([\"number\", \"currency\", \"currencyConverted\"]);\n\nfunction hasOwn(object: object, key: PropertyKey): boolean {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction isEmpty(value: unknown): boolean {\n return value === null || value === undefined || (typeof value === \"string\" && !value.trim());\n}\n\nfunction getFieldValue(record: Record<string, unknown>, fieldPath: string): unknown {\n const parts = String(fieldPath).split(\".\");\n let current: unknown = record;\n\n for (const part of parts) {\n if ([\"__proto__\", \"prototype\", \"constructor\"].includes(part)) return undefined;\n if (current === null || current === undefined || typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n\n return current;\n}\n\nfunction toNumber(value: unknown, context: { field?: string; nullAsZero?: boolean } = {}): number | null {\n if (isEmpty(value)) return context.nullAsZero ? 0 : null;\n const numeric = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(numeric)) {\n throw new DomainExpressionError(\n `A fórmula do campo ${context.field ?? \"calculado\"} recebeu um valor não numérico.`,\n { code: \"OON_DOMAIN_FORMULA_ERROR\", field: context.field },\n );\n }\n return numeric;\n}\n\nfunction numericArguments(\n args: OonDomainExpression[],\n record: Record<string, unknown>,\n context: { field?: string; nullAsZero?: boolean },\n): number[] | null {\n const values = args.map((arg) => evaluateDomainExpression(arg, record, context));\n if (!context.nullAsZero && values.some(isEmpty)) return null;\n return values.map((value) => toNumber(value, context) ?? 0);\n}\n\nfunction compareValues(leftValue: unknown, rightValue: unknown, operator: OonDomainExpressionOperator): boolean {\n let left = leftValue;\n let right = rightValue;\n\n if ([\"gt\", \"gte\", \"lt\", \"lte\"].includes(operator)) {\n const leftNumber = Number(left);\n const rightNumber = Number(right);\n if (Number.isFinite(leftNumber) && Number.isFinite(rightNumber)) {\n left = leftNumber;\n right = rightNumber;\n }\n }\n\n switch (operator) {\n case \"eq\": return Object.is(left, right);\n case \"neq\": return !Object.is(left, right);\n case \"gt\": return (left as number | string) > (right as number | string);\n case \"gte\": return (left as number | string) >= (right as number | string);\n case \"lt\": return (left as number | string) < (right as number | string);\n case \"lte\": return (left as number | string) <= (right as number | string);\n default: return false;\n }\n}\n\n/**\n * Avalia exatamente a mesma AST fechada aceita pelo backend. Esta função é\n * somente uma prévia de UX; o backend recalcula e valida toda mutação.\n */\nexport function evaluateDomainExpression(\n expression: OonDomainExpression,\n record: Record<string, unknown> = {},\n context: { field?: string; nullAsZero?: boolean } = {},\n): unknown {\n if (!expression || typeof expression !== \"object\" || Array.isArray(expression)) {\n throw new DomainExpressionError(\"Expressão declarativa inválida.\", { field: context.field });\n }\n\n if (hasOwn(expression, \"value\")) return (expression as { value: unknown }).value;\n if (hasOwn(expression, \"field\")) return getFieldValue(record, (expression as { field: string }).field);\n\n const operation = expression as { op: OonDomainExpressionOperator; args: OonDomainExpression[] };\n const args = Array.isArray(operation.args) ? operation.args : [];\n\n switch (operation.op) {\n case \"add\": {\n const values = numericArguments(args, record, context);\n return values === null ? null : values.reduce((total, value) => total + value, 0);\n }\n case \"subtract\": {\n const values = numericArguments(args, record, context);\n return values === null ? null : values.slice(1).reduce((total, value) => total - value, values[0] ?? 0);\n }\n case \"multiply\": {\n const values = numericArguments(args, record, context);\n return values === null ? null : values.reduce((total, value) => total * value, 1);\n }\n case \"divide\": {\n const values = numericArguments(args, record, context);\n if (values === null) return null;\n return values.slice(1).reduce((total, divisor) => {\n if (divisor === 0) {\n throw new DomainExpressionError(\n `A fórmula do campo ${context.field ?? \"calculado\"} tentou dividir por zero.`,\n { code: \"OON_DOMAIN_FORMULA_ERROR\", field: context.field },\n );\n }\n return total / divisor;\n }, values[0] ?? 0);\n }\n case \"min\": {\n const values = numericArguments(args, record, context);\n return values === null ? null : Math.min(...values);\n }\n case \"max\": {\n const values = numericArguments(args, record, context);\n return values === null ? null : Math.max(...values);\n }\n case \"abs\": {\n const values = numericArguments(args, record, context);\n return values === null ? null : Math.abs(values[0] ?? 0);\n }\n case \"negate\": {\n const values = numericArguments(args, record, context);\n return values === null ? null : -(values[0] ?? 0);\n }\n case \"coalesce\": {\n for (const arg of args) {\n const value = evaluateDomainExpression(arg, record, context);\n if (!isEmpty(value)) return value;\n }\n return null;\n }\n case \"eq\":\n case \"neq\":\n case \"gt\":\n case \"gte\":\n case \"lt\":\n case \"lte\":\n return compareValues(\n evaluateDomainExpression(args[0], record, context),\n evaluateDomainExpression(args[1], record, context),\n operation.op,\n );\n case \"and\":\n return args.every((arg) => Boolean(evaluateDomainExpression(arg, record, context)));\n case \"or\":\n return args.some((arg) => Boolean(evaluateDomainExpression(arg, record, context)));\n case \"not\":\n return !Boolean(evaluateDomainExpression(args[0], record, context));\n case \"present\":\n return !isEmpty(evaluateDomainExpression(args[0], record, context));\n case \"in\": {\n const value = evaluateDomainExpression(args[0], record, context);\n const list = evaluateDomainExpression(args[1], record, context);\n return Array.isArray(list) && list.some((item) => Object.is(item, value));\n }\n default:\n throw new DomainExpressionError(`Operador declarativo não suportado: ${String(operation.op)}.`, {\n field: context.field,\n });\n }\n}\n\nfunction roundValue(value: unknown, precision = 0): unknown {\n if (value === null || value === undefined) return value;\n const numeric = toNumber(value);\n if (numeric === null) return null;\n const factor = 10 ** precision;\n return Math.round((numeric + Number.EPSILON) * factor) / factor;\n}\n\nfunction expressionFieldReferences(expression: OonDomainExpression, references = new Set<string>()): Set<string> {\n if (hasOwn(expression, \"field\")) references.add((expression as { field: string }).field);\n if (hasOwn(expression, \"op\")) {\n for (const argument of (expression as { args?: OonDomainExpression[] }).args ?? []) {\n expressionFieldReferences(argument, references);\n }\n }\n return references;\n}\n\nfunction orderComputedFields(fields: OonReactiveFormField[]): OonReactiveFormField[] {\n const computed = fields.filter((field) => field.computed);\n const computedByName = new Map(computed.map((field) => [field.field, field]));\n const allNames = new Set(fields.map((field) => field.field));\n const visiting = new Set<string>();\n const visited = new Set<string>();\n const ordered: OonReactiveFormField[] = [];\n\n const visit = (field: OonReactiveFormField) => {\n if (visited.has(field.field)) return;\n if (visiting.has(field.field)) {\n throw new DomainExpressionError(`Dependência circular em campos calculados envolvendo ${field.field}.`, {\n field: field.field,\n });\n }\n\n visiting.add(field.field);\n for (const reference of expressionFieldReferences(field.computed!.expression)) {\n if (!allNames.has(reference)) {\n throw new DomainExpressionError(`A fórmula de ${field.field} referencia o campo inexistente ${reference}.`, {\n field: field.field,\n });\n }\n const dependency = computedByName.get(reference);\n if (dependency) visit(dependency);\n }\n visiting.delete(field.field);\n visited.add(field.field);\n ordered.push(field);\n };\n\n computed.forEach(visit);\n return ordered;\n}\n\nexport function coerceDomainFormValue(value: string, kind?: string): unknown {\n if (value === \"\") return undefined;\n if (NUMERIC_KINDS.has(kind ?? \"\")) return Number(value);\n if (kind === \"boolean\") return value === \"true\";\n return value;\n}\n\nfunction displayFormValue(value: unknown): string {\n if (value === null || value === undefined) return \"\";\n return String(value);\n}\n\n/** Recalcula a cadeia de campos computed para exibição imediata no formulário. */\nexport function applyReactiveFormulas(\n fields: OonReactiveFormField[],\n currentValues: Record<string, string>,\n): ReactiveFormulaResult {\n const values = { ...currentValues };\n const errors: Record<string, string> = {};\n const record: Record<string, unknown> = {};\n\n for (const field of fields) {\n record[field.field] = coerceDomainFormValue(values[field.field] ?? \"\", field.kind);\n }\n\n let ordered: OonReactiveFormField[];\n try {\n ordered = orderComputedFields(fields);\n } catch (error) {\n const issue = error instanceof DomainExpressionError ? error : new DomainExpressionError(String(error));\n if (issue.field) errors[issue.field] = issue.message;\n return { values, errors };\n }\n\n for (const field of ordered) {\n try {\n const computed = field.computed!;\n const value = evaluateDomainExpression(computed.expression, record, {\n field: field.field,\n nullAsZero: computed.nullAsZero !== false,\n });\n const normalized = value === null || value === undefined\n ? value\n : roundValue(value, computed.precision ?? 2);\n record[field.field] = normalized;\n values[field.field] = displayFormValue(normalized);\n } catch (error) {\n const issue = error instanceof DomainExpressionError ? error : new DomainExpressionError(String(error), { field: field.field });\n errors[field.field] = issue.message;\n }\n }\n\n return { values, errors };\n}\n\n/**\n * Remove campos controlados pelo servidor. O backend recebe somente entradas do\n * usuário e recalcula novamente os valores computed antes de persistir.\n */\nexport function buildDomainMutationPayload(\n fields: OonReactiveFormField[],\n values: Record<string, string>,\n): Record<string, unknown> {\n const payload: Record<string, unknown> = {};\n for (const field of fields) {\n if (field.readonly || field.computed) continue;\n const rawValue = values[field.field] ?? \"\";\n const value = coerceDomainFormValue(rawValue, field.kind);\n if (value !== undefined) payload[field.field] = value;\n else if (field.kind === \"ref\") payload[field.field] = null;\n }\n return payload;\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 initialId = useMemo(() => {\n if (initialValue && typeof initialValue === \"object\") {\n return referenceId(initialValue as Record<string, unknown>);\n }\n return String(initialValue ?? \"\");\n }, [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 (initialId === value && initialLabel) setSelectedLabel(initialLabel);\n }, [initialId, 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","import { Box, Text } from \"@chakra-ui/react\";\nimport { describeActionError } from \"./actionError\";\n\nexport function CoreErrorAlert({\n error,\n mt,\n}: {\n error: unknown;\n mt?: string | number;\n}) {\n const description = describeActionError(error);\n const details = description.context?.split(\" • \").filter(Boolean) ?? [];\n\n return (\n <Box\n role=\"alert\"\n mt={mt}\n p=\"10px 12px\"\n color=\"#B42318\"\n bg=\"#FEF3F2\"\n borderWidth=\"1px\"\n borderColor=\"#FECDCA\"\n borderRadius=\"7px\"\n fontSize=\"11px\"\n >\n <Text fontSize=\"11px\" fontWeight=\"500\">{description.message}</Text>\n {details.length ? (\n <Box as=\"details\" mt=\"5px\">\n <Box\n as=\"summary\"\n w=\"fit-content\"\n color=\"#9B1C1C\"\n cursor=\"pointer\"\n fontSize=\"10px\"\n fontWeight=\"600\"\n textDecoration=\"underline\"\n >\n Detalhes\n </Box>\n <Box\n as=\"ul\"\n mt=\"6px\"\n mb={0}\n pl=\"18px\"\n color=\"#7A271A\"\n fontFamily=\"mono\"\n fontSize=\"9px\"\n lineHeight=\"1.45\"\n overflowWrap=\"anywhere\"\n >\n {details.map((detail) => <li key={detail}>{detail}</li>)}\n </Box>\n </Box>\n ) : null}\n </Box>\n );\n}\n","export interface ActionErrorDescription {\n message: string;\n context?: string;\n}\n\ntype UnknownRecord = Record<string, unknown>;\n\nfunction asRecord(value: unknown): UnknownRecord | undefined {\n return value && typeof value === \"object\" ? value as UnknownRecord : undefined;\n}\n\nfunction firstText(...values: unknown[]): string | undefined {\n return values.find((value): value is string => typeof value === \"string\" && value.trim().length > 0)?.trim();\n}\n\nfunction firstNumber(...values: unknown[]): number | undefined {\n return values.find((value): value is number => typeof value === \"number\" && Number.isFinite(value));\n}\n\nfunction collectDetailMessages(value: unknown, visited = new WeakSet<object>(), depth = 0): string[] {\n if (depth > 4 || value == null) return [];\n if (typeof value === \"string\") return value.trim() ? [value.trim()] : [];\n if (Array.isArray(value)) {\n return value.flatMap((item) => collectDetailMessages(item, visited, depth + 1));\n }\n if (typeof value !== \"object\" || visited.has(value)) return [];\n visited.add(value);\n\n const record = value as UnknownRecord;\n const field = firstText(record.field, record.path, record.property, record.name);\n const message = firstText(record.message, record.msg, record.reason);\n const technicalMessage = firstText(record.technicalMessage);\n const index = firstText(record.index);\n const direct = [\n message ? (field ? `${field}: ${message}` : message) : undefined,\n technicalMessage,\n index ? `Índice: ${index}` : undefined,\n ].filter((item): item is string => Boolean(item));\n const nestedKeys = [\"details\", \"errors\", \"validation\", \"fields\"];\n const nested = nestedKeys.flatMap((key) => collectDetailMessages(record[key], visited, depth + 1));\n\n if (direct.length || nested.length) return [...direct, ...nested];\n\n return Object.entries(record)\n .filter(([key]) => ![\"code\", \"status\", \"statusCode\", \"requestId\"].includes(key))\n .flatMap(([, nestedValue]) => collectDetailMessages(nestedValue, visited, depth + 1));\n}\n\nfunction unique(values: string[]): string[] {\n return [...new Set(values.map((value) => value.trim()).filter(Boolean))];\n}\n\nexport function describeActionError(error: unknown): ActionErrorDescription {\n if (error instanceof Error) return { message: error.message };\n if (typeof error === \"string\") return { message: error };\n\n const record = asRecord(error);\n if (!record) return { message: \"Não foi possível executar a ação.\" };\n\n const nestedEnvelope = asRecord(record.error);\n const envelope = nestedEnvelope ?? record;\n const message = firstText(envelope.message, record.message) ?? \"Não foi possível executar a ação.\";\n const rawError = typeof record.error === \"string\" ? record.error : undefined;\n const details = unique(collectDetailMessages(envelope.details ?? record.details ?? rawError))\n .filter((detail) => detail !== message)\n .slice(0, 5);\n const code = firstText(envelope.code, record.code);\n const status = firstNumber(envelope.status, envelope.statusCode, record.status, record.statusCode);\n const requestId = firstText(envelope.requestId, record.requestId);\n const technical = [\n code ? `Código: ${code}` : undefined,\n status ? `HTTP: ${status}` : undefined,\n requestId ? `ID da requisição: ${requestId}` : undefined,\n ].filter((value): value is string => Boolean(value));\n const contextParts = [...details, ...technical];\n\n return {\n message,\n ...(contextParts.length ? { context: contextParts.join(\" • \") } : {}),\n };\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, useRef, useState, type ReactNode } from \"react\";\nimport { Box, Button, Flex, Heading, IconButton, 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 { formatCell, formFieldsFromMeta } from \"./fieldUtils\";\nimport { CoreTabbedDetail } from \"./CoreTabbedDetail\";\nimport { DetailRecordProvider } from \"./DetailRecordContext\";\nimport { resolveInitialDetailTab } from \"./manifestUtils\";\n\nexport function CoreDetailModal({ model, title, config, formFields, recordId, initialRecord, initialTab, relations, topActions, bottomActions, onClose, onSaved }: {\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 topActions?: ReactNode;\n bottomActions?: 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(resolveInitialDetailTab(config, recordId, initialTab));\n const [refreshTokens, setRefreshTokens] = useState<Record<string, number>>({});\n const [dirty, setDirty] = useState(false);\n const [confirmingClose, setConfirmingClose] = useState(false);\n const closeAfterSaveRef = useRef(false);\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 titleField = config.titleField ?? \"\";\n const titleFieldMeta = schema?.fields.find((field) => field.name === titleField);\n const displayTitle = parent?.[titleField] != null\n ? formatCell(parent[titleField], titleFieldMeta?.kind)\n : title;\n const activeIsForm = (config.tabs.find((tab) => tab.id === activeTab) ?? config.tabs[0])?.type === \"form\";\n const hasFormTab = config.tabs.some((tab) => tab.type === \"form\");\n const formId = `oon-detail-form-${model.replace(/[^a-zA-Z0-9_-]/g, \"-\")}`;\n\n const requestClose = () => {\n if (dirty) setConfirmingClose(true);\n else onClose();\n };\n\n const saveAndClose = () => {\n const form = document.getElementById(formId) as HTMLFormElement | null;\n if (!form) return;\n closeAfterSaveRef.current = true;\n setConfirmingClose(false);\n form.requestSubmit();\n };\n\n return (\n <DetailRecordProvider record={parent} setRecord={setParent}>\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\" display=\"flex\" flexDirection=\"column\" w={`min(${width}, 98vw)`} h=\"94vh\" maxH=\"94vh\" overflow=\"hidden\" bg=\"white\" borderRadius=\"14px\" boxShadow=\"0 24px 70px rgba(15,23,42,.24)\">\n <Flex minH=\"72px\" px=\"20px\" py=\"10px\" align=\"center\" justify=\"space-between\" gap={4} borderBottomWidth=\"1px\" borderColor=\"#E5E9ED\">\n <Box minW=\"160px\">\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 flex=\"1\" align=\"center\" justify=\"flex-end\" gap=\"8px\" wrap=\"wrap\">\n {recordId ? topActions : null}\n <IconButton aria-label=\"Fechar\" title=\"Fechar\" size=\"sm\" minW=\"32px\" h=\"32px\" borderRadius=\"full\" variant=\"ghost\" color=\"#475569\" fontSize=\"21px\" fontWeight=\"400\" lineHeight=\"1\" onClick={requestClose} _hover={{ bg: \"#F1F5F9\", color: \"#0F172A\" }}>×</IconButton>\n </Flex>\n </Flex>\n <Box flex=\"1\" minH={0} p=\"20px\" overflowY=\"auto\">\n {schemaQuery.isLoading || parentQuery.isLoading ? <Text>Carregando...</Text> : (\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 formId={formId}\n externalSubmit\n onDirtyChange={setDirty}\n onSaveFailed={() => {\n closeAfterSaveRef.current = false;\n }}\n onParentSaved={(saved) => {\n setParent(saved);\n setDirty(false);\n onSaved?.(saved);\n refresh([\"parent\"]);\n if (closeAfterSaveRef.current) {\n closeAfterSaveRef.current = false;\n onClose();\n }\n }}\n />\n )}\n </Box>\n <Flex flex=\"0 0 auto\" minH=\"64px\" px=\"20px\" py=\"10px\" align=\"center\" justify=\"space-between\" gap=\"12px\" bg=\"white\" borderTopWidth=\"1px\" borderColor=\"#E5E9ED\" boxShadow=\"0 -8px 24px rgba(15,23,42,.06)\">\n <Box>{recordId ? bottomActions : null}</Box>\n <Button type=\"submit\" form={formId} colorPalette=\"brand\" disabled={!hasFormTab || (!activeIsForm && !dirty) || schemaQuery.isLoading || parentQuery.isLoading}>Salvar</Button>\n </Flex>\n </Box>\n {confirmingClose ? (\n <Flex position=\"fixed\" inset={0} zIndex={1100} align=\"center\" justify=\"center\" p={4} bg=\"rgba(15,23,42,.58)\">\n <Box role=\"alertdialog\" aria-modal=\"true\" aria-labelledby=\"oon-unsaved-title\" w=\"min(520px, 94vw)\" p=\"22px\" bg=\"white\" borderRadius=\"12px\" boxShadow=\"0 24px 70px rgba(15,23,42,.28)\">\n <Heading id=\"oon-unsaved-title\" size=\"md\">Alterações não salvas</Heading>\n <Text mt=\"8px\" color=\"#667085\" fontSize=\"13px\">As informações preenchidas ainda não foram salvas. Você pode continuar editando, sair sem salvar ou salvar antes de fechar.</Text>\n <Flex mt=\"22px\" justify=\"flex-end\" gap=\"10px\" wrap=\"wrap\">\n <Button variant=\"ghost\" onClick={() => {\n closeAfterSaveRef.current = false;\n setConfirmingClose(false);\n }}>Continuar editando</Button>\n <Button variant=\"outline\" colorPalette=\"red\" onClick={() => {\n closeAfterSaveRef.current = false;\n setConfirmingClose(false);\n onClose();\n }}>Sair sem salvar</Button>\n <Button colorPalette=\"brand\" onClick={saveAndClose}>Salvar e sair</Button>\n </Flex>\n </Box>\n </Flex>\n ) : null}\n </Flex>\n </DetailRecordProvider>\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 {\n applyReactiveFormulas,\n buildDomainMutationPayload,\n type OonReactiveFormField,\n} from \"../../domain/domainExpressions\";\nimport { CoreSummaryCards } from \"./CoreSummaryCards\";\nimport { CoreRelatedGrid } from \"./CoreRelatedGrid\";\nimport { ReferenceSelect } from \"./ReferenceSelect\";\nimport { CoreErrorAlert } from \"./CoreErrorAlert\";\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 & OonReactiveFormField & {\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 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 initialReactiveValues(fields: ExtendedFormField[], parent: Record<string, unknown>) {\n const initial = Object.fromEntries(fields.map((field) => [field.field, initialFieldValue(field, parent[field.field])]));\n return applyReactiveFormulas(fields, initial);\n}\n\nfunction isMultiline(field: OonFormFieldDef) {\n return /observa|descricao|mensagem|detalhe|necessidade/i.test(field.field);\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.readonly && !field.computed && 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 const readonly = Boolean(field.readonly || field.computed);\n return (\n <label htmlFor={htmlFor}>\n <Text as=\"span\" display=\"block\" mb=\"5px\" color=\"#475467\" fontSize=\"11px\" fontWeight=\"600\">\n {label}{field.required && !readonly ? <Text as=\"span\" color=\"#DC2626\"> *</Text> : null}\n {readonly ? <Text as=\"span\" ml=\"5px\" color=\"#98A2B3\" fontSize=\"9px\" fontWeight=\"500\">somente leitura</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 readonly = Boolean(field.readonly || field.computed);\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 bg: readonly ? \"#F8FAFC\" : 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={readonly ? \"#F8FAFC\" : checked ? \"#F0F7FF\" : \"white\"}\n borderWidth=\"1px\"\n borderColor={error ? \"#DC2626\" : checked ? \"#8FC9E7\" : \"#D5DDE3\"}\n borderRadius=\"7px\"\n cursor={readonly ? \"not-allowed\" : \"pointer\"}\n >\n <input\n id={inputId}\n type=\"checkbox\"\n checked={checked}\n disabled={readonly}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? errorId : undefined}\n style={{ width: 16, height: 16, accentColor: \"#0474AF\", cursor: readonly ? \"not-allowed\" : \"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 && !readonly}\n invalid={!!error}\n error={error}\n filters={reference.filters}\n emptyFields={field.referenceEmptyFields}\n disabled={readonly || 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\" disabled={readonly}>\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\" disabled={readonly}>\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\" readOnly={readonly} 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\" : [\"number\", \"currency\", \"currencyConverted\"].includes(field.kind ?? \"\") ? \"number\" : \"text\"}\n step={!mask && [\"number\", \"currency\", \"currencyConverted\"].includes(field.kind ?? \"\") ? \"any\" : undefined}\n inputMode={inputModeForMask(mask)}\n maxLength={maxLengthForMask(mask)}\n readOnly={readonly}\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\nexport function formValuesEqual(\n fields: OonFormFieldDef[],\n left: Record<string, string>,\n right: Record<string, string>,\n) {\n return fields.every((field) => (left[field.field] ?? \"\") === (right[field.field] ?? \"\"));\n}\n\nexport function fieldsForFormTabs(fields: OonFormFieldDef[], tabs: OonDetailTabDef[]) {\n const formTabs = tabs.filter((tab): tab is FormTab => tab.type === \"form\");\n if (!formTabs.length) return [];\n if (formTabs.some((tab) => !tab.fields?.length && !tab.groups?.length)) return fields;\n\n const selected = new Set(\n formTabs.flatMap((tab) => tab.fields ?? tab.groups?.flatMap((group) => group.fields) ?? []),\n );\n return fields.filter((field) => selected.has(field.field));\n}\n\nfunction InlineParentForm({\n fields: rawFields,\n visibleFields: rawVisibleFields,\n groups,\n parent,\n resource,\n onSaved,\n onDirtyChange,\n onSaveFailed,\n formId,\n externalSubmit = false,\n}: {\n fields: OonFormFieldDef[];\n visibleFields?: OonFormFieldDef[];\n groups?: FormGroup[];\n parent: Record<string, unknown>;\n resource: ResourceClient;\n onSaved: (record: Record<string, unknown>) => void;\n onDirtyChange?: (dirty: boolean) => void;\n onSaveFailed?: () => void;\n formId?: string;\n externalSubmit?: boolean;\n}) {\n const fields = rawFields as ExtendedFormField[];\n const visibleFields = (rawVisibleFields ?? rawFields) as ExtendedFormField[];\n const initial = useMemo(() => initialReactiveValues(fields, parent), [rawFields, parent]);\n const [values, setValues] = useState<Record<string, string>>(initial.values);\n const [formulaErrors, setFormulaErrors] = useState<FieldErrors>(initial.errors);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<unknown>(null);\n const [fieldErrors, setFieldErrors] = useState<FieldErrors>({});\n\n useEffect(() => {\n setValues(initial.values);\n setFormulaErrors(initial.errors);\n setError(null);\n setFieldErrors({});\n onDirtyChange?.(false);\n }, [initial, onDirtyChange]);\n\n const dirty = useMemo(\n () => !formValuesEqual(fields, values, initial.values),\n [fields, values, initial.values],\n );\n\n useEffect(() => {\n onDirtyChange?.(dirty);\n }, [dirty, onDirtyChange]);\n\n const fieldsByName = useMemo(() => new Map(fields.map((field) => [field.field, field])), [rawFields]);\n\n const change = (fieldName: string, value: string) => {\n const selected = fieldsByName.get(fieldName);\n if (selected?.readonly || selected?.computed) return;\n\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 const reactive = applyReactiveFormulas(fields, next);\n setFormulaErrors(reactive.errors);\n return reactive.values;\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 combinedErrors = { ...formulaErrors, ...fieldErrors };\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={combinedErrors}\n onChange={change}\n />\n ))}\n </Stack>\n );\n }\n\n return (\n <SimpleGrid columns={{ base: 1, md: 2 }} gap=\"14px\">\n {visibleFields.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={combinedErrors[field.field]}\n onChange={(value) => change(field.field, value)}\n />\n ))}\n </SimpleGrid>\n );\n };\n\n return (\n <form\n id={formId}\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 onSaveFailed?.();\n return;\n }\n\n setSaving(true);\n setError(null);\n setFieldErrors({});\n try {\n const payload = buildDomainMutationPayload(fields, values);\n const saved = parent._id\n ? await resource.update(String(parent._id), payload)\n : await resource.create(payload);\n onDirtyChange?.(false);\n onSaved(saved);\n } catch (requestError) {\n setError(requestError);\n setFieldErrors(fieldErrorsOf(requestError));\n onSaveFailed?.();\n } finally {\n setSaving(false);\n }\n }}\n >\n <Stack gap=\"16px\">\n {error ? <CoreErrorAlert error={error} /> : null}\n {renderFields()}\n {!externalSubmit ? (\n <Flex justify=\"flex-end\">\n <Button type=\"submit\" colorPalette=\"brand\" loading={saving}>Salvar dados principais</Button>\n </Flex>\n ) : null}\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 onDirtyChange,\n onSaveFailed,\n formId,\n externalSubmit,\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 onDirtyChange?: (dirty: boolean) => void;\n onSaveFailed?: () => void;\n formId?: string;\n externalSubmit?: boolean;\n}) {\n const active = tabs.find((tab) => tab.id === activeTab) ?? tabs[0];\n const activeForm = active?.type === \"form\" ? active : undefined;\n const draftFields = useMemo(() => fieldsForFormTabs(formFields, tabs), [formFields, tabs]);\n const formParent = useMemo(() => parent ?? {}, [parent]);\n const hasFormTab = draftFields.length > 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 {hasFormTab ? (\n <Box display={activeForm ? \"block\" : \"none\"}>\n <InlineParentForm\n fields={draftFields}\n visibleFields={activeForm\n ? fieldsForTab(draftFields, activeForm.fields ?? activeForm.groups?.flatMap((group) => group.fields))\n : []}\n groups={activeForm?.groups}\n parent={formParent}\n resource={resource}\n onSaved={onParentSaved}\n onDirtyChange={onDirtyChange}\n onSaveFailed={onSaveFailed}\n formId={formId}\n externalSubmit={externalSubmit}\n />\n </Box>\n ) : null}\n {!active || active.type === \"form\" ? null : active.type === \"summary\" && parent ? (\n <CoreSummaryCards cards={active.cards} parent={parent} relations={relations} />\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, OonDetailModalConfig, 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\nexport function resolveInitialDetailTab(\n config: OonDetailModalConfig,\n recordId?: string,\n initialTab?: string,\n) {\n if (initialTab) return initialTab;\n\n const configuredId = config.defaultTab ?? config.tabs[0]?.id ?? \"dados\";\n const configuredTab = config.tabs.find((tab) => tab.id === configuredId);\n if (recordId) return configuredTab?.id ?? config.tabs[0]?.id ?? \"dados\";\n if (configuredTab?.type === \"form\") return configuredTab.id;\n\n return config.tabs.find((tab) => tab.type === \"form\")?.id\n ?? configuredTab?.id\n ?? config.tabs[0]?.id\n ?? \"dados\";\n}\n","import { useMemo, useState } from \"react\";\nimport { Badge, Box, Button, Flex, IconButton, 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 { 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 /** Mapeia campo do novo registro para um campo do registro pai. */\n initialValuesFromParent?: Record<string, string>;\n };\n delete?: {\n enabled?: boolean;\n confirm?: string;\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 parentValueAt(parent: Record<string, unknown>, path: string): unknown {\n return path.split(\".\").reduce<unknown>((current, part) => {\n if (!current || typeof current !== \"object\") return undefined;\n return (current as Record<string, unknown>)[part];\n }, parent);\n}\n\nfunction mergeCreateFields(\n schemaFields: ReturnType<typeof formFieldsFromMeta>,\n overrides: OonFormFieldDef[] | undefined,\n foreignKey: string | undefined,\n): OonFormFieldDef[] {\n const base = schemaFields.filter((field) => ![foreignKey, \"_id\", \"createdAt\", \"updatedAt\"].includes(field.field));\n if (!overrides?.length) return base;\n const byName = new Map(base.map((field) => [field.field, field]));\n return overrides.map((override) => ({ ...(byName.get(override.field) ?? {}), ...override }));\n}\n\nfunction modalEditFields(\n schemaFields: ReturnType<typeof formFieldsFromMeta>,\n tab: RelatedTab,\n fallback: OonFormFieldDef[],\n foreignKey: string | undefined,\n): OonFormFieldDef[] {\n const byName = new Map(schemaFields.map((field) => [field.field, field]));\n const configured = (tab.columns ?? [])\n .filter((column) => typeof column !== \"string\" && column.editable === true && column.readonly !== true)\n .map((column) => {\n if (typeof column === \"string\") return undefined;\n const base = byName.get(column.field);\n if (!base || column.field === foreignKey) return undefined;\n return {\n ...base,\n field: column.field,\n ...(column.label ? { label: column.label } : {}),\n ...(column.kind ? { kind: column.kind } : {}),\n ...(column.required != null ? { required: column.required } : {}),\n } as OonFormFieldDef;\n })\n .filter((field): field is OonFormFieldDef => Boolean(field));\n\n return configured.length ? configured : fallback;\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 schemaFormFields = useMemo(() => formFieldsFromMeta(schema?.fields ?? []), [schema?.fields]);\n const createFields = useMemo(\n () => mergeCreateFields(schemaFormFields, tab.create?.fields, relation?.foreignKey),\n [schemaFormFields, tab.create?.fields, relation?.foreignKey],\n );\n const editFields = useMemo(\n () => modalEditFields(schemaFormFields, tab, createFields, relation?.foreignKey),\n [schemaFormFields, tab, createFields, relation?.foreignKey],\n );\n const createInitialValues = useMemo(() => {\n const inherited = Object.fromEntries(\n Object.entries(tab.create?.initialValuesFromParent ?? {}).map(([field, path]) => [field, parentValueAt(parent, path)]),\n );\n return { ...(tab.create?.initialValues ?? {}), ...inherited };\n }, [tab.create?.initialValues, tab.create?.initialValuesFromParent, parent]);\n const [creating, setCreating] = useState(false);\n const [createError, setCreateError] = useState<unknown>(null);\n const [editing, setEditing] = useState<Record<string, unknown> | null>(null);\n const [editError, setEditError] = useState<unknown>(null);\n const canEdit = tab.type === \"relatedGrid\" && tab.editable === true;\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 = canEdit || canDelete || !!tab.rowActions?.length;\n\n const invalidate = async () => {\n await queryClient.invalidateQueries({ queryKey: key });\n onRefresh?.([\"self\", \"parent\"]);\n };\n\n const updateMutation = useMutation({\n mutationFn: ({ id, values }: { id: string; values: Record<string, unknown> }) => resource.update(id, values),\n onSuccess: async () => {\n await invalidate();\n setEditing(null);\n setEditError(null);\n },\n onError: setEditError,\n });\n const createMutation = useMutation({\n mutationFn: (values: Record<string, unknown>) => resource.create({\n ...createInitialValues,\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\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 w=\"92px\" textAlign=\"center\">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 return (\n <Table.Row key={id} bg={index % 2 ? \"#FBFCFD\" : \"white\"} _hover={{ bg: \"#F0F7FF\" }}>\n {columns.map((column) => {\n const value = row[column.field];\n return (\n <Table.Cell key={column.field} fontSize=\"11px\">\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=\"4px\" align=\"center\" justify=\"center\" wrap=\"wrap\">\n {canEdit ? (\n <IconButton\n aria-label=\"Editar registro\"\n title=\"Editar\"\n size=\"xs\"\n variant=\"ghost\"\n color=\"#0474AF\"\n onClick={() => {\n setEditError(null);\n setEditing(row);\n }}\n >\n <EditIcon />\n </IconButton>\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 <IconButton\n aria-label=\"Excluir registro\"\n title=\"Excluir\"\n size=\"xs\"\n variant=\"ghost\"\n color=\"#B42318\"\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 <TrashIcon />\n </IconButton>\n ) : 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={createInitialValues}\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 {editing ? (\n <DynamicForm\n title={`Editar ${schema?.singular ?? relation.model}`}\n eyebrow=\"Registro relacionado\"\n fields={editFields}\n initialValues={editing}\n submitting={updateMutation.isPending}\n error={editError}\n onSubmit={(values) => {\n const id = String(editing._id ?? editing.id ?? \"\");\n if (id) updateMutation.mutate({ id, values });\n }}\n onFieldChange={() => setEditError(null)}\n onCancel={() => {\n if (!updateMutation.isPending) setEditing(null);\n }}\n />\n ) : null}\n </Box>\n );\n}\n","import { useState } from \"react\";\nimport { Box, Button, Text } from \"@chakra-ui/react\";\nimport { useOonApi } from \"../../api/ApiProvider\";\nimport type { OonRowActionDef } from \"../../types\";\nimport type { OonPipelineActionDef, OonPipelineActionTone } from \"../../pipelineTicket\";\nimport { DynamicForm } from \"./DynamicForm\";\nimport { describeActionError } from \"./actionError\";\nimport { evaluateCondition, interpolateEndpoint } from \"./conditions\";\nimport { mergeDetailRecord, useDetailRecord } from \"./DetailRecordContext\";\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\nconst ACTION_TONES: Record<OonPipelineActionTone, { bg: string; color: string; border: string; hover: string }> = {\n success: { bg: \"#DCFCE7\", color: \"#166534\", border: \"#BBF7D0\", hover: \"#D1FAE5\" },\n danger: { bg: \"#FEE2E2\", color: \"#991B1B\", border: \"#FECACA\", hover: \"#FDE2E2\" },\n warning: { bg: \"#FEF3C7\", color: \"#92400E\", border: \"#FDE68A\", hover: \"#FDEDB3\" },\n neutral: { bg: \"#F1F5F9\", color: \"#334155\", border: \"#E2E8F0\", hover: \"#E8EEF5\" },\n brand: { bg: \"#E0F2FE\", color: \"#075985\", border: \"#BAE6FD\", hover: \"#D5EEFC\" },\n};\n\nfunction ActionErrorMessage({ error }: { error: unknown }) {\n const description = describeActionError(error);\n return (\n <Box\n role=\"alert\"\n mt=\"5px\"\n maxW=\"420px\"\n p=\"7px 9px\"\n bg=\"#FEF3F2\"\n borderWidth=\"1px\"\n borderColor=\"#FECDCA\"\n borderRadius=\"6px\"\n >\n <Text color=\"#B42318\" fontSize=\"10px\" fontWeight=\"600\" lineHeight=\"1.35\">\n {description.message}\n </Text>\n {description.context ? (\n <Text mt=\"2px\" color=\"#7A271A\" fontSize=\"9px\" lineHeight=\"1.35\">\n {description.context}\n </Text>\n ) : null}\n </Box>\n );\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\nfunction RowActionIcon({ name }: { name?: string }) {\n const normalized = String(name || \"\").trim().toLowerCase();\n if ([\"trash\", \"delete\", \"remove\", \"lixeira\"].includes(normalized)) {\n return (\n <svg\n aria-hidden=\"true\"\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 6h18\" />\n <path d=\"M8 6V4h8v2\" />\n <path d=\"M19 6l-1 14H6L5 6\" />\n <path d=\"M10 11v5\" />\n <path d=\"M14 11v5\" />\n </svg>\n );\n }\n return null;\n}\n\n/**\n * Hook de integração do Core para observabilidade operacional futura.\n * O evento não persiste dados por conta própria; consumidores podem ligá-lo a\n * métricas de SLA, tempo por atividade e produtividade sem alterar a UI.\n */\nfunction emitOperationalEvent(\n action: OonPipelineActionDef,\n row: Record<string, unknown>,\n changes?: Record<string, unknown>,\n) {\n if (typeof window === \"undefined\" || typeof window.dispatchEvent !== \"function\") return;\n if (!action.operationalKind) return;\n\n const field = action.field;\n window.dispatchEvent(new CustomEvent(\"oon:pipeline-action\", {\n detail: {\n actionId: action.id,\n label: action.label,\n group: action.group,\n operationalKind: action.operationalKind,\n recordId: row._id ?? row.id,\n field,\n previousValue: field ? row[field] : undefined,\n nextValue: field ? changes?.[field] ?? action.value : undefined,\n changes,\n occurredAt: new Date().toISOString(),\n },\n }));\n}\n\nexport function CoreRowAction({ action, row, parent, onOpenDetail, onRefresh, onUpdate }: CoreRowActionProps) {\n const { http } = useOonApi();\n const detailRecord = useDetailRecord();\n const effectiveRow = detailRecord?.record ?? row;\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 const tone = pipelineAction.tone ? ACTION_TONES[pipelineAction.tone] : undefined;\n const isWorkStatus = pipelineAction.group === \"workStatus\";\n const isSelected = isWorkStatus && !!pipelineAction.field && effectiveRow[pipelineAction.field] === pipelineAction.value;\n const icon = <RowActionIcon name={action.icon} />;\n const iconOnly = Boolean(action.iconOnly && icon);\n\n if (evaluateCondition(action.hiddenWhen, effectiveRow)) return null;\n const disabled = evaluateCondition(action.disabledWhen, effectiveRow) || 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?.(effectiveRow, action.initialTab);\n if (action.type === \"navigate\") {\n const href = action.href ?? action.endpoint;\n if (href) window.location.assign(interpolateEndpoint(href, effectiveRow, 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, effectiveRow, 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 const changes = { [pipelineAction.field]: pipelineAction.value };\n const saved = await onUpdate(changes);\n detailRecord?.setRecord(mergeDetailRecord(effectiveRow, saved, changes));\n emitOperationalEvent(pipelineAction, effectiveRow, changes);\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, effectiveRow, parent);\n await http.request({ url, method: action.method ?? \"POST\" });\n emitOperationalEvent(pipelineAction, effectiveRow);\n onRefresh?.(action.refresh);\n } catch (err) {\n setError(err);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <span style={{ display: \"inline-flex\", flexDirection: \"column\" }}>\n <Button\n type=\"button\"\n size=\"xs\"\n minH={isWorkStatus ? \"32px\" : \"28px\"}\n minW={iconOnly ? \"28px\" : undefined}\n px={iconOnly ? \"6px\" : isWorkStatus ? \"12px\" : \"9px\"}\n borderRadius={isWorkStatus ? \"full\" : \"6px\"}\n fontSize=\"10px\"\n aria-label={iconOnly ? action.label : undefined}\n title={iconOnly ? action.label : undefined}\n fontWeight=\"700\"\n variant={tone ? \"outline\" : undefined}\n bg={isWorkStatus && !isSelected ? \"white\" : tone?.bg}\n color={tone?.color}\n borderColor={isSelected ? tone?.color : tone?.border}\n borderWidth={isSelected ? \"2px\" : \"1px\"}\n boxShadow={isSelected ? `0 0 0 3px ${tone?.border ?? \"#E2E8F0\"}` : tone ? \"none\" : undefined}\n aria-pressed={isWorkStatus ? isSelected : undefined}\n loading={loading}\n disabled={disabled}\n onClick={run}\n _hover={tone ? { bg: tone.hover, borderColor: tone.border } : undefined}\n _disabled={tone ? { opacity: isSelected ? 1 : 0.55, cursor: \"not-allowed\" } : undefined}\n >\n {isWorkStatus ? (\n <span aria-hidden=\"true\" style={{ width: 8, height: 8, display: \"inline-block\", marginRight: 7, borderRadius: \"999px\", background: tone?.color ?? \"#64748B\", boxShadow: isSelected ? \"0 0 0 2px rgba(255,255,255,.9)\" : \"none\" }} />\n ) : null}\n {icon}\n {iconOnly ? null : action.label}\n </Button>\n {error ? <ActionErrorMessage error={error} /> : 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, effectiveRow, parent);\n await http.request({ url, method: pipelineAction.method ?? \"POST\", data: values });\n emitOperationalEvent(pipelineAction, effectiveRow, 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 { createContext, useContext, type ReactNode } from \"react\";\n\nexport type DetailRecord = Record<string, unknown>;\n\ninterface DetailRecordContextValue {\n record?: DetailRecord;\n setRecord: (record: DetailRecord) => void;\n}\n\nconst DetailRecordContext = createContext<DetailRecordContextValue | null>(null);\n\nexport function DetailRecordProvider({\n record,\n setRecord,\n children,\n}: DetailRecordContextValue & { children: ReactNode }) {\n return (\n <DetailRecordContext.Provider value={{ record, setRecord }}>\n {children}\n </DetailRecordContext.Provider>\n );\n}\n\nexport function useDetailRecord() {\n return useContext(DetailRecordContext);\n}\n\nexport function mergeDetailRecord(\n current: DetailRecord,\n saved: unknown,\n changes: DetailRecord = {},\n): DetailRecord {\n const savedRecord = saved && typeof saved === \"object\"\n ? saved as DetailRecord\n : {};\n // A resposta do backend é canônica e deve prevalecer sobre a alteração otimista.\n return { ...current, ...changes, ...savedRecord };\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 { useEffect, useRef, 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 {\n groupPipelineActions,\n resolvePipelineActions,\n type OonPipelineActionDef,\n type OonPipelineCreateDef,\n type OonPipelineDefaultActionsDef,\n type OonPipelineViewMode,\n} 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\";\nimport { pipelineBoardScrollStep, resolveHorizontalScrollState } from \"./internal/pipelineBoardScroll\";\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 defaultActions?: OonPipelineDefaultActionsDef;\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 workStatusColor(value: unknown): string {\n const normalized = String(value ?? '').normalize('NFD').replace(/[\\u0300-\\u036f]/g, '').toLowerCase();\n if (/aguardando.*inicio|nao.*iniciado|waiting/.test(normalized)) return '#D97706';\n if (/trabalhando|em.*andamento|working/.test(normalized)) return '#16A34A';\n if (/revisar|revisao|review/.test(normalized)) return '#DC2626';\n return '#94A3B8';\n}\n\nfunction PipelineArrowIcon({ direction }: { direction: \"left\" | \"right\" }) {\n const path = direction === \"left\" ? \"M12.5 5 7.5 10l5 5\" : \"m7.5 5 5 5-5 5\";\n return (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path d={path} fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\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 defaultActions,\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 boardRef = useRef<HTMLDivElement | null>(null);\n const [boardScrollState, setBoardScrollState] = useState({ canScrollLeft: false, canScrollRight: false });\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 useEffect(() => {\n if (viewMode !== \"board\") return undefined;\n const board = boardRef.current;\n if (!board) return undefined;\n\n const sync = () => setBoardScrollState(resolveHorizontalScrollState(board));\n sync();\n board.addEventListener(\"scroll\", sync, { passive: true });\n window.addEventListener(\"resize\", sync);\n\n const resizeObserver = typeof ResizeObserver !== \"undefined\" ? new ResizeObserver(sync) : undefined;\n resizeObserver?.observe(board);\n Array.from(board.children).forEach((child) => resizeObserver?.observe(child));\n\n return () => {\n board.removeEventListener(\"scroll\", sync);\n window.removeEventListener(\"resize\", sync);\n resizeObserver?.disconnect();\n };\n }, [viewMode, listQuery.data?.results?.length, stages?.length, schema?.fields.length]);\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 defaultActionsConfig = defaultActions === false ? undefined : defaultActions;\n const workStatusField = defaultActionsConfig?.workStatusField ?? \"statusTrabalho\";\n const workStatusMeta = schema?.fields.find((field) => field.name === workStatusField);\n const resolvedTicketActions = resolvePipelineActions({\n stageField,\n stages: resolvedStages,\n workStatusValues: workStatusMeta?.options ?? [],\n ticketActions,\n defaultActions,\n });\n const groupedTicketActions = groupPipelineActions(resolvedTicketActions);\n const resolvedTitleField = titleField\n ?? ticketModal?.titleField\n ?? schema?.fields.find((field) => field.kind === \"string\")?.name\n ?? schema?.searchable[0]\n ?? \"_id\";\n const resolvedTitleFieldMeta = schema?.fields.find((field) => field.name === resolvedTitleField);\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 scrollBoard = (direction: \"left\" | \"right\") => {\n const board = boardRef.current;\n if (!board) return;\n const step = pipelineBoardScrollStep(board.clientWidth);\n board.scrollBy({ left: direction === \"left\" ? -step : step, behavior: \"smooth\" });\n };\n\n const renderModalAction = (action: OonPipelineActionDef, index: number) => selectedTicket ? (\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 ) : null;\n\n const modalTopActions = selectedTicket && !creating && groupedTicketActions.workStatus.length ? (\n <Flex role=\"group\" aria-label=\"Status da atividade\" gap=\"6px\" align=\"center\" wrap=\"wrap\">\n {groupedTicketActions.workStatus.map(renderModalAction)}\n </Flex>\n ) : null;\n\n const modalBottomActions = selectedTicket && !creating ? (\n <Flex gap=\"8px\" align=\"center\" wrap=\"wrap\">\n {groupedTicketActions.approval.length ? (\n <Flex role=\"group\" aria-label=\"Aprovação do ticket\" gap=\"6px\" align=\"center\" wrap=\"wrap\">\n {groupedTicketActions.approval.map(renderModalAction)}\n </Flex>\n ) : null}\n {groupedTicketActions.custom.length ? (\n <Flex role=\"group\" aria-label=\"Ações do negócio\" gap=\"6px\" align=\"center\" wrap=\"wrap\">\n {groupedTicketActions.custom.map(renderModalAction)}\n </Flex>\n ) : null}\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 <Box position=\"relative\">\n<Flex\n ref={boardRef}\n data-oon-pipeline-board=\"true\"\n gap={4}\n align=\"stretch\"\n overflowX=\"auto\"\n overflowY=\"auto\"\n h=\"clamp(420px, calc(100vh - 250px), 760px)\"\n minH=\"420px\"\n pb=\"18px\"\n pr=\"2px\"\n scrollBehavior=\"smooth\"\n scrollbarGutter=\"stable both-edges\"\n overscrollBehaviorX=\"contain\"\n>\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], resolvedTitleFieldMeta?.kind);\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 <Flex align=\"flex-start\" justify=\"space-between\" gap=\"8px\" mb={2}>\n <Text fontSize=\"13px\" fontWeight=\"700\" color=\"#24323A\" lineClamp={2}>{ticketTitle}</Text>\n <Box\n as=\"span\"\n title={`Status da atividade: ${String(row[workStatusField] ?? 'Não informado')}`}\n aria-label={`Status da atividade: ${String(row[workStatusField] ?? 'Não informado')}`}\n flex=\"0 0 auto\"\n w=\"10px\"\n h=\"10px\"\n mt=\"4px\"\n borderRadius=\"full\"\n bg={workStatusColor(row[workStatusField])}\n boxShadow=\"0 0 0 3px white, 0 0 0 4px #E2E8F0\"\n />\n </Flex>\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<Button\n type=\"button\"\n aria-label=\"Deslizar quadro para a esquerda\"\n title=\"Deslizar para a esquerda\"\n position=\"absolute\"\n left=\"8px\"\n top=\"50%\"\n transform=\"translateY(-50%)\"\n zIndex={3}\n minW=\"34px\"\n w=\"34px\"\n h=\"34px\"\n p={0}\n borderRadius=\"full\"\n variant=\"outline\"\n bg=\"rgba(255,255,255,.96)\"\n borderColor=\"#CBD5E1\"\n boxShadow=\"0 5px 16px rgba(15,23,42,.16)\"\n disabled={!boardScrollState.canScrollLeft}\n onClick={() => scrollBoard(\"left\")}\n _hover={{ bg: \"white\", borderColor: \"brand.400\" }}\n _disabled={{ opacity: 0.25, cursor: \"not-allowed\" }}\n>\n <PipelineArrowIcon direction=\"left\" />\n</Button>\n<Button\n type=\"button\"\n aria-label=\"Deslizar quadro para a direita\"\n title=\"Deslizar para a direita\"\n position=\"absolute\"\n right=\"8px\"\n top=\"50%\"\n transform=\"translateY(-50%)\"\n zIndex={3}\n minW=\"34px\"\n w=\"34px\"\n h=\"34px\"\n p={0}\n borderRadius=\"full\"\n variant=\"outline\"\n bg=\"rgba(255,255,255,.96)\"\n borderColor=\"#CBD5E1\"\n boxShadow=\"0 5px 16px rgba(15,23,42,.16)\"\n disabled={!boardScrollState.canScrollRight}\n onClick={() => scrollBoard(\"right\")}\n _hover={{ bg: \"white\", borderColor: \"brand.400\" }}\n _disabled={{ opacity: 0.25, cursor: \"not-allowed\" }}\n>\n <PipelineArrowIcon direction=\"right\" />\n</Button>\n </Box>\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 topActions={modalTopActions}\n bottomActions={modalBottomActions}\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}","import type {\n OonCollectionListConfig,\n OonDetailModalConfig,\n OonDetailTabDef,\n OonFormFieldDef,\n OonListFilterDef,\n OonRelationDef,\n OonRowActionDef,\n PipelineViewDef,\n} from \"./types\";\n\nexport type OonRelatedGridCreateDef = {\n enabled?: boolean;\n label?: string;\n fields?: OonFormFieldDef[];\n initialValues?: Record<string, unknown>;\n};\n\nexport type OonRelatedGridDeleteDef = {\n enabled?: boolean;\n confirm?: string;\n};\n\ntype BaseRelatedGridTab = Extract<OonDetailTabDef, { type: \"relatedGrid\" }>;\n\n/** Aba relacionada com inclusão e exclusão opcionais. */\nexport type OonOperationalDetailTabDef =\n | Exclude<OonDetailTabDef, BaseRelatedGridTab>\n | (BaseRelatedGridTab & {\n create?: OonRelatedGridCreateDef;\n delete?: OonRelatedGridDeleteDef;\n });\n\n/** Modal declarativo que amplia relatedGrid sem quebrar o contrato anterior. */\nexport type OonOperationalDetailModalConfig = Omit<OonDetailModalConfig, \"tabs\"> & {\n tabs: OonOperationalDetailTabDef[];\n};\n\n/** Configuração declarativa do editor de um ticket aberto pela esteira. */\nexport type OonPipelineTicketModalConfig = OonOperationalDetailModalConfig;\n\nexport type OonPipelineViewMode = \"board\" | \"list\";\n\nexport type OonPipelineCreateDef = {\n enabled?: boolean;\n label?: string;\n initialTab?: string;\n defaultStage?: string;\n defaultValues?: Record<string, unknown>;\n};\n\nexport type OonPipelineActionGroup = \"approval\" | \"workStatus\" | \"custom\";\nexport type OonPipelineActionTone = \"success\" | \"danger\" | \"warning\" | \"neutral\" | \"brand\";\nexport type OonPipelineOperationalKind = \"approval\" | \"work-status\" | \"business\";\n\n/**\n * Ações padrão da esteira. Quando omitido, aprovação/reprovação e status de\n * trabalho ficam habilitados automaticamente quando os campos necessários\n * existem na metadata do model.\n */\nexport type OonPipelineDefaultActionsConfig = {\n approval?: boolean;\n workStatus?: boolean;\n workStatusField?: string;\n excludedStages?: string[];\n};\n\nexport type OonPipelineDefaultActionsDef = false | OonPipelineDefaultActionsConfig;\n\n/**\n * Ações operacionais exibidas no cabeçalho do ticket.\n *\n * - setField/transition atualizam um campo do próprio ticket;\n * - formAction carrega dados opcionais e envia um formulário a um endpoint;\n * - group/tone organizam a ação visualmente sem acoplar regra de negócio à UI;\n * - operationalKind cria um contrato estável para telemetria, SLA e produtividade.\n */\nexport type OonPipelineActionDef = Omit<OonRowActionDef, \"type\"> & {\n type: OonRowActionDef[\"type\"] | \"setField\" | \"transition\" | \"formAction\";\n field?: string;\n value?: unknown;\n title?: string;\n submitLabel?: string;\n loadEndpoint?: string;\n fields?: OonFormFieldDef[];\n initialValues?: Record<string, unknown>;\n group?: OonPipelineActionGroup;\n tone?: OonPipelineActionTone;\n operationalKind?: OonPipelineOperationalKind;\n};\n\nconst DEFAULT_EXCLUDED_STAGES = [\n \"cancelado\",\n \"cancelada\",\n \"cancelled\",\n \"rejeitado\",\n \"rejeitada\",\n \"rejected\",\n];\n\nfunction normalized(value: unknown): string {\n return String(value ?? \"\")\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\nfunction slug(value: unknown): string {\n return normalized(value).replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\");\n}\n\nfunction approvalTone(action: OonPipelineActionDef): OonPipelineActionTone | undefined {\n const key = normalized(`${action.id ?? \"\"} ${action.label}`);\n if (/recusar|reprovar|reject/.test(key)) return \"danger\";\n if (/aprovar|approve/.test(key)) return \"success\";\n return undefined;\n}\n\nfunction workStatusPresentation(value: unknown): { order: number; label: string; tone: OonPipelineActionTone } | undefined {\n const key = normalized(value);\n if (/aguardando.*inicio|nao.*iniciado|waiting/.test(key)) {\n return { order: 0, label: \"Aguardando início\", tone: \"warning\" };\n }\n if (/trabalhando|em.*andamento|working/.test(key)) {\n return { order: 1, label: \"Trabalhando\", tone: \"success\" };\n }\n if (/revisar|revisao|review/.test(key)) {\n return { order: 2, label: \"Revisão\", tone: \"danger\" };\n }\n return undefined;\n}\n\n/** Classifica também ações legadas para que recebam agrupamento e cores do Core. */\nexport function decoratePipelineAction(\n action: OonPipelineActionDef,\n stageField: string,\n workStatusField: string,\n): OonPipelineActionDef {\n const approval = action.type === \"transition\"\n && action.field === stageField\n && approvalTone(action);\n const workStatus = action.type === \"setField\" && action.field === workStatusField;\n const group = action.group ?? (approval ? \"approval\" : workStatus ? \"workStatus\" : \"custom\");\n const tone = action.tone\n ?? (approval || (workStatus ? workStatusPresentation(action.value)?.tone : undefined))\n ?? (group === \"custom\" ? \"neutral\" : undefined);\n const operationalKind = action.operationalKind\n ?? (group === \"approval\" ? \"approval\" : group === \"workStatus\" ? \"work-status\" : \"business\");\n\n return { ...action, group, tone, operationalKind };\n}\n\nexport interface ResolvePipelineActionsInput {\n stageField: string;\n stages: Array<{ id: string; label: string }>;\n workStatusValues?: string[];\n ticketActions?: OonPipelineActionDef[];\n defaultActions?: OonPipelineDefaultActionsDef;\n}\n\n/**\n * Resolve as ações efetivas da esteira.\n *\n * A ordem das etapas define Aprovar (próxima etapa) e Recusar (etapa anterior).\n * Etapas negativas, como Cancelado/Rejeitado, não entram no fluxo de aprovação.\n * Ações explícitas equivalentes substituem os padrões para preservar compatibilidade.\n */\nexport function resolvePipelineActions({\n stageField,\n stages,\n workStatusValues = [],\n ticketActions = [],\n defaultActions,\n}: ResolvePipelineActionsInput): OonPipelineActionDef[] {\n const config = defaultActions === false ? undefined : (defaultActions ?? {});\n const workStatusField = config?.workStatusField ?? \"statusTrabalho\";\n const explicit = ticketActions.map((action) => decoratePipelineAction(action, stageField, workStatusField));\n if (defaultActions === false) return explicit;\n\n const resolved: OonPipelineActionDef[] = [];\n const hasExplicitApproval = explicit.some((action) => action.group === \"approval\");\n const hasExplicitWorkStatus = explicit.some((action) => action.group === \"workStatus\");\n\n if (config?.approval !== false && !hasExplicitApproval) {\n const excluded = new Set([\n ...DEFAULT_EXCLUDED_STAGES,\n ...(config?.excludedStages ?? []).map(normalized),\n ]);\n const approvalStages = stages.filter((stage) => !excluded.has(normalized(stage.id)));\n\n approvalStages.forEach((stage, index) => {\n const next = approvalStages[index + 1];\n if (next) {\n resolved.push({\n id: `core-aprovar-${slug(stage.id)}`,\n label: \"Aprovar\",\n type: \"transition\",\n field: stageField,\n value: next.id,\n hiddenWhen: { field: stageField, notEquals: stage.id },\n confirm: { description: `Aprovar este ticket e alterar a etapa para ${next.label}?` },\n refresh: [\"all\"],\n group: \"approval\",\n tone: \"success\",\n operationalKind: \"approval\",\n });\n }\n });\n\n approvalStages.forEach((stage, index) => {\n const previous = approvalStages[index - 1];\n if (previous) {\n resolved.push({\n id: `core-recusar-${slug(stage.id)}`,\n label: \"Recusar\",\n type: \"transition\",\n field: stageField,\n value: previous.id,\n hiddenWhen: { field: stageField, notEquals: stage.id },\n confirm: { description: `Recusar este ticket e retornar a etapa para ${previous.label}?` },\n refresh: [\"all\"],\n group: \"approval\",\n tone: \"danger\",\n operationalKind: \"approval\",\n });\n }\n });\n }\n\n if (config?.workStatus !== false && !hasExplicitWorkStatus && workStatusValues.length) {\n workStatusValues\n .map((value) => ({ value, presentation: workStatusPresentation(value) }))\n .filter((item): item is { value: string; presentation: NonNullable<ReturnType<typeof workStatusPresentation>> } => Boolean(item.presentation))\n .sort((a, b) => a.presentation.order - b.presentation.order)\n .forEach(({ value, presentation }) => {\n resolved.push({\n id: `core-status-trabalho-${slug(value)}`,\n label: presentation.label,\n type: \"setField\",\n field: workStatusField,\n value,\n disabledWhen: { field: workStatusField, equals: value },\n refresh: [\"all\"],\n group: \"workStatus\",\n tone: presentation.tone,\n operationalKind: \"work-status\",\n });\n });\n }\n\n return [...resolved, ...explicit];\n}\n\nexport function groupPipelineActions(actions: OonPipelineActionDef[]) {\n return {\n approval: actions.filter((action) => action.group === \"approval\"),\n workStatus: actions.filter((action) => action.group === \"workStatus\"),\n custom: actions.filter((action) => action.group === \"custom\"),\n };\n}\n\n/**\n * Extensão pública da view de esteira com filtros, inclusão, lista, ações e\n * modal declarativo. Continua estruturalmente compatível com PipelineViewDef.\n */\nexport type OonPipelineViewDef = PipelineViewDef & {\n /** Campo exibido como título do card e do modal. */\n titleField?: string;\n /** Overrides de formulário mesclados à metadata do model. */\n form?: OonFormFieldDef[];\n /** Relações disponíveis para abas summary/relatedGrid/readonlyGrid. */\n relations?: Record<string, OonRelationDef>;\n /** Modal declarativo usado ao abrir um ticket da esteira. */\n ticketModal?: OonPipelineTicketModalConfig;\n /** Filtros aplicados tanto ao quadro quanto à visualização em lista. */\n filters?: OonListFilterDef[];\n /** Configuração do botão de inclusão pela própria esteira. */\n create?: OonPipelineCreateDef;\n /** Modos de visualização liberados para o usuário. */\n viewModes?: OonPipelineViewMode[];\n /** Visualização inicial. */\n defaultView?: OonPipelineViewMode;\n /** Colunas e ações da visualização em lista. */\n list?: OonCollectionListConfig;\n /** Ações padrão do Core; use false para desabilitá-las nesta esteira. */\n defaultActions?: OonPipelineDefaultActionsDef;\n /** Ações adicionais ou overrides exibidos no cabeçalho do ticket aberto. */\n ticketActions?: OonPipelineActionDef[];\n};","export interface HorizontalScrollMetrics {\n scrollLeft: number;\n clientWidth: number;\n scrollWidth: number;\n}\n\nconst EDGE_TOLERANCE = 2;\n\nexport function resolveHorizontalScrollState(metrics: HorizontalScrollMetrics) {\n const maxScrollLeft = Math.max(0, metrics.scrollWidth - metrics.clientWidth);\n return {\n canScrollLeft: metrics.scrollLeft > EDGE_TOLERANCE,\n canScrollRight: metrics.scrollLeft < maxScrollLeft - EDGE_TOLERANCE,\n };\n}\n\nexport function pipelineBoardScrollStep(clientWidth: number) {\n return Math.max(280, Math.round(clientWidth * 0.75));\n}\n","import { Box, Heading, SimpleGrid, Stack, Text } from \"@chakra-ui/react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport type { DashboardWidgetDef } from \"../types\";\nimport { useOonApi } from \"../api/ApiProvider\";\n\ntype DashboardFilterPrimitive = string | number | boolean | null;\ntype DashboardFilterValue = DashboardFilterPrimitive | {\n eq?: DashboardFilterPrimitive;\n ne?: DashboardFilterPrimitive;\n in?: DashboardFilterPrimitive[];\n nin?: DashboardFilterPrimitive[];\n gt?: DashboardFilterPrimitive;\n gte?: DashboardFilterPrimitive;\n lt?: DashboardFilterPrimitive;\n lte?: DashboardFilterPrimitive;\n exists?: boolean;\n};\n\ntype CoreDashboardWidget = Omit<DashboardWidgetDef, \"kind\"> & {\n description?: string;\n kind?: \"count\" | \"sum\" | \"groupCount\" | \"groupSum\" | \"custom\";\n groupBy?: string;\n filters?: Record<string, DashboardFilterValue>;\n format?: \"number\" | \"currency\";\n};\n\nexport interface CoreDashboardProps {\n label?: string;\n widgets?: CoreDashboardWidget[];\n}\n\ninterface DashboardMetricResult {\n id: string;\n kind: string;\n value?: number;\n groups?: Array<{ key: string; value: number }>;\n}\n\nfunction metricFormat(widget: CoreDashboardWidget): \"number\" | \"currency\" {\n if (widget.format) return widget.format;\n return [\"sum\", \"groupSum\"].includes(widget.kind || \"\") ? \"currency\" : \"number\";\n}\n\nfunction formatMetric(value: number | undefined, format: \"number\" | \"currency\") {\n if (value == null || !Number.isFinite(Number(value))) return \"—\";\n if (format === \"currency\") {\n return new Intl.NumberFormat(\"pt-BR\", { style: \"currency\", currency: \"BRL\" }).format(Number(value));\n }\n return new Intl.NumberFormat(\"pt-BR\", { maximumFractionDigits: 2 }).format(Number(value));\n}\n\n/** Dashboard declarativo com agregações executadas integralmente no backend. */\nexport function CoreDashboard({ label = \"Dashboard\", widgets = [] }: CoreDashboardProps) {\n const { http } = useOonApi();\n const remoteWidgets = widgets.filter((widget) => widget.kind !== \"custom\" && widget.model);\n const metricsQuery = useQuery({\n queryKey: [\"oon\", \"dashboard\", remoteWidgets],\n enabled: remoteWidgets.length > 0,\n staleTime: 60 * 1000,\n queryFn: async () => {\n const response = await http.post(\"/core/dashboard/query\", {\n queries: remoteWidgets.map(({ id, model, kind, field, groupBy, filters }) => ({\n id,\n model,\n kind: kind || \"count\",\n field,\n groupBy,\n filters,\n })),\n });\n return (response.data?.results ?? []) as DashboardMetricResult[];\n },\n });\n const results = new Map((metricsQuery.data ?? []).map((result) => [result.id, result]));\n\n return (\n <Stack gap={6}>\n <Box>\n <Text fontSize=\"xs\" fontWeight=\"600\" color=\"brand.600\" textTransform=\"uppercase\" letterSpacing=\"0.08em\">\n Visão geral\n </Text>\n <Heading size=\"lg\">{label}</Heading>\n </Box>\n {!widgets.length ? <Text color=\"gray.500\">Nenhum indicador declarado.</Text> : null}\n <SimpleGrid columns={{ base: 1, md: 2, lg: 3 }} gap={4}>\n {widgets.map((widget) => {\n if (widget.kind === \"custom\" && widget.render) {\n return (\n <Box key={widget.id} borderWidth=\"1px\" borderColor=\"gray.200\" borderRadius=\"lg\" bg=\"white\" p={5}>\n {widget.render()}\n </Box>\n );\n }\n const result = results.get(widget.id);\n const grouped = [\"groupCount\", \"groupSum\"].includes(widget.kind || \"\");\n const format = metricFormat(widget);\n return (\n <Box\n key={widget.id}\n gridColumn={grouped ? \"1 / -1\" : undefined}\n borderWidth=\"1px\"\n borderColor=\"gray.200\"\n borderRadius=\"lg\"\n bg=\"white\"\n p={5}\n minH={grouped ? undefined : \"126px\"}\n >\n <Text fontSize=\"sm\" color=\"gray.500\">{widget.label}</Text>\n {widget.description ? <Text fontSize=\"xs\" color=\"gray.400\" mt={1}>{widget.description}</Text> : null}\n {metricsQuery.isLoading ? <Heading size=\"xl\" mt={2}>…</Heading> : null}\n {metricsQuery.isError ? <Text color=\"red.600\" mt={3}>Não foi possível carregar este indicador.</Text> : null}\n {!metricsQuery.isLoading && !metricsQuery.isError && grouped ? (\n <SimpleGrid columns={{ base: 1, md: 2, lg: 3 }} gap={3} mt={4}>\n {(result?.groups ?? []).length ? result?.groups?.map((group) => (\n <Box key={group.key} borderWidth=\"1px\" borderColor=\"gray.100\" borderRadius=\"md\" p={3}>\n <Text fontSize=\"xs\" color=\"gray.500\">{group.key}</Text>\n <Heading size=\"md\" mt={1}>{formatMetric(group.value, format)}</Heading>\n </Box>\n )) : <Text color=\"gray.500\">Nenhum ticket encontrado.</Text>}\n </SimpleGrid>\n ) : null}\n {!metricsQuery.isLoading && !metricsQuery.isError && !grouped ? (\n <Heading size=\"xl\" mt={2}>{formatMetric(result?.value, format)}</Heading>\n ) : null}\n </Box>\n );\n })}\n </SimpleGrid>\n </Stack>\n );\n}\n","import { useMemo, 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 { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { Can } from \"../security/PermissionGate\";\n\ninterface Role {\n code: string;\n name: string;\n description?: string;\n admin?: boolean;\n permissions: string[];\n}\n\ninterface Invitation {\n id: string;\n status: string;\n expiresAt: string;\n}\n\ninterface AccessUser {\n id: string;\n identityId?: string;\n email: string;\n name?: string;\n roleCode: string;\n status: \"invited\" | \"active\" | \"disabled\" | \"revoked\";\n invitedAt?: string;\n activatedAt?: string;\n lastAccessAt?: string;\n invitation?: Invitation;\n}\n\nconst selectStyle = {\n height: \"40px\",\n border: \"1px solid #E2E8F0\",\n borderRadius: \"6px\",\n padding: \"0 12px\",\n background: \"white\",\n} as const;\n\nfunction fmt(value?: string) {\n if (!value) return \"—\";\n try {\n return new Intl.DateTimeFormat(\"pt-BR\", { dateStyle: \"short\", timeStyle: \"short\" }).format(new Date(value));\n } catch {\n return value;\n }\n}\n\nexport function CoreUsersAccess() {\n const { http } = useOonApi();\n const queryClient = useQueryClient();\n const [email, setEmail] = useState(\"\");\n const [name, setName] = useState(\"\");\n const [roleCode, setRoleCode] = useState(\"\");\n const [inviteUrl, setInviteUrl] = useState<string | null>(null);\n const [message, setMessage] = useState<string | null>(null);\n\n const rbac = useQuery({\n queryKey: [\"oon\", \"rbac\"],\n queryFn: async () => (await http.get<{ enabled: boolean; roles: Role[] }>(\"/core/rbac\")).data,\n staleTime: 5 * 60 * 1000,\n });\n const roles = rbac.data?.roles ?? [];\n const users = useQuery({\n queryKey: [\"oon\", \"rbac\", \"users\"],\n queryFn: async () => (await http.get<{ results: AccessUser[] }>(\"/core/users\")).data.results,\n enabled: rbac.data?.enabled === true,\n });\n\n const defaultRole = useMemo(() => roles.find((role) => !role.admin)?.code || roles[0]?.code || \"\", [roles]);\n const selectedRole = roleCode || defaultRole;\n\n const invite = useMutation({\n mutationFn: async () => (await http.post<{ inviteUrl: string }>(\"/core/users/invitations\", {\n email: email.trim(),\n name: name.trim() || undefined,\n roleCode: selectedRole,\n })).data,\n onSuccess: async (data) => {\n setInviteUrl(data.inviteUrl);\n setMessage(\"Convite criado. Copie o link e envie manualmente ao usuário.\");\n setEmail(\"\");\n setName(\"\");\n await queryClient.invalidateQueries({ queryKey: [\"oon\", \"rbac\", \"users\"] });\n },\n });\n\n const updateUser = useMutation({\n mutationFn: async ({ id, payload }: { id: string; payload: Record<string, string> }) => {\n await http.patch(`/core/users/${id}`, payload);\n },\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey: [\"oon\", \"rbac\", \"users\"] });\n },\n });\n\n const copyInvitation = useMutation({\n mutationFn: async (id: string) => (await http.get<{ inviteUrl: string }>(`/core/users/invitations/${id}/link`)).data,\n onSuccess: async (data) => {\n setInviteUrl(data.inviteUrl);\n setMessage(\"Link válido recuperado. Você pode copiá-lo e reenviar manualmente.\");\n await navigator.clipboard.writeText(data.inviteUrl).catch(() => undefined);\n },\n });\n\n const regenerate = useMutation({\n mutationFn: async (id: string) => (await http.post<{ inviteUrl: string }>(`/core/users/invitations/${id}/regenerate`)).data,\n onSuccess: async (data) => {\n setInviteUrl(data.inviteUrl);\n setMessage(\"Novo link gerado. O link anterior foi invalidado.\");\n await queryClient.invalidateQueries({ queryKey: [\"oon\", \"rbac\", \"users\"] });\n },\n });\n\n async function submit(event: FormEvent) {\n event.preventDefault();\n setMessage(null);\n setInviteUrl(null);\n await invite.mutateAsync();\n }\n\n if (rbac.isLoading) return <Box p={6}>Carregando acessos…</Box>;\n if (rbac.data?.enabled === false) {\n return (\n <Box p={6}>\n <Heading size=\"lg\">Usuários e Acessos</Heading>\n <Text mt={3} color=\"gray.600\">Esta Central está em modo de acesso legado. Declare <code>rbac</code> no central.app.json para habilitar a gestão nativa.</Text>\n </Box>\n );\n }\n\n return (\n <Box p={{ base: 4, md: 7 }}>\n <Flex justify=\"space-between\" align=\"start\" gap={6} wrap=\"wrap\">\n <Box>\n <Heading size=\"lg\">Usuários e Acessos</Heading>\n <Text mt={2} color=\"gray.600\">Perfis e permissões são definidos pela Central; a segurança efetiva é aplicada no backend.</Text>\n </Box>\n </Flex>\n\n <Can permission=\"users.invite\">\n <Box mt={7} borderWidth=\"1px\" borderRadius=\"14px\" p={5} bg=\"white\">\n <Heading size=\"md\">Convidar usuário</Heading>\n <form onSubmit={(event) => void submit(event)}>\n <Flex mt={4} gap={3} wrap=\"wrap\" align=\"end\">\n <Box minW=\"220px\" flex=\"1\">\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Nome</Text>\n <Input value={name} onChange={(event) => setName(event.target.value)} placeholder=\"Nome do usuário\" />\n </Box>\n <Box minW=\"260px\" flex=\"1\">\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">E-mail</Text>\n <Input type=\"email\" required value={email} onChange={(event) => setEmail(event.target.value)} placeholder=\"usuario@empresa.com.br\" />\n </Box>\n <Box minW=\"190px\">\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Perfil</Text>\n <select style={{ ...selectStyle, width: \"100%\" }} value={selectedRole} onChange={(event) => setRoleCode(event.target.value)}>\n {roles.map((role) => <option key={role.code} value={role.code}>{role.name}</option>)}\n </select>\n </Box>\n <Button type=\"submit\" disabled={invite.isPending || !email.trim() || !selectedRole}>Gerar convite</Button>\n </Flex>\n </form>\n {message ? <Text mt={4} fontSize=\"sm\">{message}</Text> : null}\n {inviteUrl ? (\n <Flex mt={2} gap={2} align=\"center\" wrap=\"wrap\">\n <Input value={inviteUrl} readOnly flex=\"1\" minW=\"280px\" />\n <Button type=\"button\" onClick={() => void navigator.clipboard.writeText(inviteUrl)}>Copiar link</Button>\n </Flex>\n ) : null}\n </Box>\n </Can>\n\n <VStack mt={7} align=\"stretch\" gap={3}>\n {(users.data ?? []).map((user) => (\n <Box key={user.id} borderWidth=\"1px\" borderRadius=\"14px\" p={4} bg=\"white\">\n <Flex justify=\"space-between\" gap={4} align=\"center\" wrap=\"wrap\">\n <Box minW=\"220px\" flex=\"1\">\n <Text fontWeight=\"700\">{user.name || user.email}</Text>\n <Text fontSize=\"sm\" color=\"gray.600\">{user.email}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\" mt={1}>Status: {user.status} · Último acesso: {fmt(user.lastAccessAt)}</Text>\n </Box>\n\n <Can permission=\"users.update\">\n <select style={selectStyle} value={user.roleCode} onChange={(event) => updateUser.mutate({ id: user.id, payload: { roleCode: event.target.value } })}>\n {roles.map((role) => <option key={role.code} value={role.code}>{role.name}</option>)}\n </select>\n </Can>\n\n {user.invitation?.status === \"pending\" ? (\n <Can permission=\"users.invite\">\n <Flex gap={2} wrap=\"wrap\">\n <Button size=\"sm\" variant=\"outline\" onClick={() => copyInvitation.mutate(user.invitation!.id)}>Copiar link</Button>\n <Button size=\"sm\" onClick={() => regenerate.mutate(user.invitation!.id)}>Gerar novo link</Button>\n </Flex>\n </Can>\n ) : null}\n\n <Can permission=\"users.disable\">\n {user.status === \"active\" ? (\n <Button size=\"sm\" variant=\"outline\" onClick={() => updateUser.mutate({ id: user.id, payload: { status: \"disabled\" } })}>Desabilitar</Button>\n ) : user.status === \"disabled\" ? (\n <Button size=\"sm\" variant=\"outline\" onClick={() => updateUser.mutate({ id: user.id, payload: { status: \"active\" } })}>Habilitar</Button>\n ) : null}\n </Can>\n </Flex>\n </Box>\n ))}\n </VStack>\n </Box>\n );\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. O backend continua sendo\n * a autoridade; este componente evita expor ações indisponíveis na interface.\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\n/** Alias canônico e curto para uso declarativo nas Centrais. */\nexport const Can = PermissionGate;\n","import { Box, Button, Flex, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport { useNavigate } from \"react-router-dom\";\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 const navigate = useNavigate();\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 \"navigation.cards\":\n return (\n <Flex gap={4} wrap=\"wrap\">\n {block.cards.map((card) => (\n <Box\n key={`${card.title}:${card.href}`}\n minW=\"260px\"\n flex={`1 1 calc(${100 / (block.columns ?? 2)}% - 16px)`}\n borderWidth=\"1px\"\n borderRadius=\"lg\"\n bg=\"white\"\n p={5}\n >\n <Stack gap={3} height=\"100%\">\n <Box flex=\"1\">\n <Heading size=\"md\" mb={2}>{card.title}</Heading>\n {card.description ? <Text color=\"gray.600\">{card.description}</Text> : null}\n </Box>\n <Button\n alignSelf=\"flex-start\"\n variant=\"outline\"\n onClick={() => {\n if (card.external) {\n window.open(card.href, \"_blank\", \"noopener,noreferrer\");\n return;\n }\n navigate(card.href);\n }}\n >\n {card.actionLabel || \"Abrir\"}\n </Button>\n </Stack>\n </Box>\n ))}\n </Flex>\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 { 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 { CollectionViewDef, DashboardViewDef, DocumentViewDef, OonCoreFrontConfig, OonMenuItem, OonRoute, OonViewDefinition, OonPageDef } from \"../types\";\nimport type { OonPipelineViewDef } from \"../pipelineTicket\";\nimport { CoreCollection } from \"../components/CoreCollection\";\nimport { CoreDocument } from \"../components/CoreDocument\";\nimport { CorePipeline } from \"../components/CorePipeline\";\nimport { CoreDashboard } from \"../components/CoreDashboard\";\nimport { CoreUsersAccess } from \"../components/CoreUsersAccess\";\nimport { CorePage } from \"../components/ui-v2/CorePage\";\n\nexport interface ResolvedRegistry { routes: OonRoute[]; menu: OonMenuItem[]; }\nfunction slug(value: string): string { return value.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\").toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\"); }\nfunction requiredPermissions(source: { permissions?: string[] }): string[] | undefined { const values = [...(source.permissions ?? [])].filter(Boolean); return values.length ? values : undefined; }\nfunction declaredAppCapabilities(config: OonCoreFrontConfig): string[] | undefined { const capabilities = (config.app as OonCoreFrontConfig[\"app\"] & { capabilities?: string[] }).capabilities; return Array.isArray(capabilities) ? capabilities : undefined; }\nfunction supportsCapabilities(config: OonCoreFrontConfig, source: { capabilities?: string[] }): boolean { const required = (source.capabilities ?? []).filter(Boolean); if (!required.length) return true; const declared = declaredAppCapabilities(config); if (!declared) return true; return required.every((capability) => declared.includes(capability)); }\nfunction viewId(view: OonViewDefinition): string { if (view.id) return view.id; if (view.type === \"dashboard\") return \"dashboard\"; return slug(view.model); }\nfunction viewPath(view: OonViewDefinition): string { if (view.path) return view.path; if (view.type === \"dashboard\") return \"/\"; return `/${viewId(view)}`; }\nfunction viewLabel(view: OonViewDefinition): string { if (view.label) return view.label; if (view.type === \"dashboard\") return \"Dashboard\"; return view.model; }\nfunction renderView(view: OonViewDefinition, registry?: OonCoreFrontConfig[\"registry\"]) {\n switch (view.type) {\n case \"collection\": { const v = view as CollectionViewDef; return <CoreCollection model={v.model} mode={v.mode} columns={v.columns} form={v.form} label={viewLabel(v)} section={v.section} importExport={v.importExport} list={v.list} relations={v.relations} detailModal={v.detailModal} cellRenderers={registry?.cellRenderers} />; }\n case \"document\": { const v = view as DocumentViewDef; return <CoreDocument model={v.model} label={viewLabel(v)} approval={v.approval} attachments={v.attachments} />; }\n case \"pipeline\": { const v = view as OonPipelineViewDef; return <CorePipeline model={v.model} label={viewLabel(v)} stageField={v.stageField} stages={v.stages} titleField={v.titleField} form={v.form} relations={v.relations} ticketModal={v.ticketModal} filters={v.filters} create={v.create} viewModes={v.viewModes} defaultView={v.defaultView} list={v.list} defaultActions={v.defaultActions} ticketActions={v.ticketActions} />; }\n case \"dashboard\": { const v = view as DashboardViewDef; return <CoreDashboard label={viewLabel(v)} widgets={v.widgets} />; }\n default: return null;\n }\n}\nfunction viewToRoute(view: OonViewDefinition, registry?: OonCoreFrontConfig[\"registry\"]): OonRoute { return { path: viewPath(view), element: renderView(view, registry), permissions: requiredPermissions(view), capabilities: \"capabilities\" in view ? view.capabilities : undefined }; }\nfunction pageToRoute(page: OonPageDef, registry: OonCoreFrontConfig[\"registry\"]): OonRoute { return { path: page.path, element: <CorePage page={page} registry={registry} />, permissions: requiredPermissions(page), capabilities: page.capabilities }; }\nfunction pageToMenu(page: OonPageDef): OonMenuItem | null { if (!page.label) return null; return { label: page.label, href: page.path, icon: page.icon, section: page.section, permissions: requiredPermissions(page), capabilities: page.capabilities, hidden: page.hidden, order: page.order }; }\nfunction viewToMenu(view: OonViewDefinition): OonMenuItem { const extended = view as OonViewDefinition & { hidden?: boolean; order?: number }; return { label: viewLabel(view), href: viewPath(view), icon: view.icon, section: view.section, permissions: requiredPermissions(view), capabilities: \"capabilities\" in view ? view.capabilities : undefined, hidden: extended.hidden, order: extended.order }; }\n\nexport function resolveRegistry(config: OonCoreFrontConfig): ResolvedRegistry {\n const routes: OonRoute[] = []; const menu: OonMenuItem[] = []; const seenPaths = new Set<string>(); const componentRegistry = config.registry ?? config.ui?.registry;\n const pushRoute = (route: OonRoute) => { if (!supportsCapabilities(config, route) || seenPaths.has(route.path)) return; seenPaths.add(route.path); routes.push({ ...route, permissions: requiredPermissions(route) }); };\n const pushMenu = (item: OonMenuItem) => { if (!supportsCapabilities(config, item)) return; menu.push({ ...item, permissions: requiredPermissions(item) }); };\n for (const mod of config.modules ?? []) { for (const route of mod.routes ?? []) pushRoute(route); for (const item of mod.menu ?? []) pushMenu(item); for (const view of mod.views ?? []) { pushRoute(viewToRoute(view, componentRegistry)); pushMenu(viewToMenu(view)); } }\n if ([\"root-central\", \"member-central\"].includes(String(config.app.kind || \"\"))) { pushRoute({ path: \"/usuarios-acessos\", element: <CoreUsersAccess />, permissions: [\"users.read\"] }); pushMenu({ label: \"Usuários e Acessos\", href: \"/usuarios-acessos\", section: \"Configurações\", order: 900, permissions: [\"users.read\"] }); }\n const navMode = config.ui?.navigation?.mode ?? \"auto\"; const includeAuto = navMode === \"auto\" || navMode === \"mixed\"; const includeManual = navMode === \"manual\" || navMode === \"mixed\";\n if (includeAuto) { for (const view of config.ui?.views ?? []) { pushRoute(viewToRoute(view, componentRegistry)); pushMenu(viewToMenu(view)); } for (const page of config.ui?.pages ?? []) { pushRoute(pageToRoute(page, componentRegistry)); const item = pageToMenu(page); if (item) pushMenu(item); } }\n if (includeManual) for (const item of config.ui?.navigation?.items ?? []) pushMenu(item);\n menu.sort((a, b) => (a.order ?? 100) - (b.order ?? 100)); return { routes, menu };\n}\n","import {\n Navigate,\n createBrowserRouter,\n type RouteObject,\n} from \"react-router-dom\";\nimport type {\n OonAppConfig,\n OonMenuItem,\n OonRoute,\n OonLayoutConfig,\n OonComponentRegistry,\n OonSecurityConfig,\n} from \"../types\";\nimport { AuthenticatedLayout } from \"../shell/AuthenticatedLayout\";\nimport { AccessDeniedPage } from \"../security/AccessDeniedPage\";\nimport { AppAccessGuard } from \"../security/AppAccessGuard\";\nimport { LoginPage } from \"../security/LoginPage\";\nimport { AcceptInvitePage } from \"../security/AcceptInvitePage\";\nimport { FirstAccessPage } from \"../security/FirstAccessPage\";\nimport {\n ActivationPage,\n InstanceBlockedPage,\n} from \"../security/ActivationPage\";\nimport { RouteGuard } from \"../security/RouteGuard\";\nimport { ActivationGuard } from \"../security/ActivationGuard\";\n\nexport interface RouterInput {\n app: OonAppConfig;\n menu: OonMenuItem[];\n routes: OonRoute[];\n security?: OonSecurityConfig;\n layout?: OonLayoutConfig;\n registry?: OonComponentRegistry;\n}\n\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 ) : route.element;\n return route.path === \"/\"\n ? { index: true, element }\n : { path: route.path.replace(/^\\//, \"\"), element };\n });\n\n const hasIndexRoute = privateSource.some((route) => route.path === \"/\");\n const firstRoute = privateSource.find((route) => route.path !== \"/\");\n if (!hasIndexRoute && firstRoute) {\n privateRoutes.unshift({ index: true, element: <Navigate to={firstRoute.path} replace /> });\n }\n\n const customPaths = new Set(publicRoutes.map((route) => route.path));\n const builtInPublicRoutes: RouteObject[] = [];\n\n if (!customPaths.has(\"/login\")) {\n builtInPublicRoutes.push({\n path: \"/login\",\n element: <ActivationGuard><LoginPage app={app} /></ActivationGuard>,\n });\n }\n if (!customPaths.has(\"/accept-invite\")) {\n builtInPublicRoutes.push({\n path: \"/accept-invite\",\n element: <ActivationGuard><AcceptInvitePage /></ActivationGuard>,\n });\n }\n if (!customPaths.has(\"/first-access\")) {\n builtInPublicRoutes.push({\n path: \"/first-access\",\n element: <ActivationGuard><FirstAccessPage /></ActivationGuard>,\n });\n }\n if (!customPaths.has(\"/ativacao\")) builtInPublicRoutes.push({ path: \"/ativacao\", element: <ActivationPage /> });\n if (!customPaths.has(\"/instancia-suspensa\")) {\n builtInPublicRoutes.push({\n path: \"/instancia-suspensa\",\n element: <InstanceBlockedPage title=\"Instância suspensa\" message=\"Esta Central está suspensa.\" />,\n });\n }\n if (!customPaths.has(\"/instancia-revogada\")) {\n builtInPublicRoutes.push({\n path: \"/instancia-revogada\",\n element: <InstanceBlockedPage title=\"Instância revogada\" message=\"Esta Central foi revogada.\" />,\n });\n }\n if (!customPaths.has(\"/acesso-negado\")) {\n builtInPublicRoutes.push({ path: \"/acesso-negado\", element: <AccessDeniedPage app={app} /> });\n }\n\n const tree: RouteObject[] = [\n ...builtInPublicRoutes,\n ...publicRoutes,\n {\n path: \"/\",\n element: (\n <ActivationGuard>\n <AppAccessGuard>\n <AuthenticatedLayout app={app} menu={menu} layout={layout} registry={registry} />\n </AppAccessGuard>\n </ActivationGuard>\n ),\n children: privateRoutes,\n },\n ];\n\n return createBrowserRouter(tree);\n}\n","import { Box, Button, Flex, Spacer, Text } from \"@chakra-ui/react\";\nimport { Outlet, useNavigate } from \"react-router-dom\";\nimport type {\n OonAppConfig,\n OonComponentRegistry,\n OonLayoutConfig,\n OonMenuItem,\n} from \"../types\";\nimport { useOonAuth } from \"../security/AuthProvider\";\nimport { useCoreMetadata } from \"../api/ApiProvider\";\nimport { Sidebar } from \"./Sidebar\";\nimport { resolveComponent, MissingRenderer } from \"../app/componentRegistry\";\nimport {\n formatRuntimeDate,\n resolveRuntimeVersionInfo,\n shortCommit,\n} from \"../runtime/versionInfo\";\n\nfunction SettingsIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 15.25a3.25 3.25 0 1 0 0-6.5 3.25 3.25 0 0 0 0 6.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n />\n <path\n d=\"M19.43 12.98c.04-.32.07-.65.07-.98s-.03-.66-.08-.98l2.12-1.66-2-3.46-2.5 1a7.64 7.64 0 0 0-1.7-.98L15 3.25h-4l-.35 2.67c-.61.25-1.18.58-1.7.98l-2.5-1-2 3.46 2.12 1.66c-.04.32-.07.65-.07.98s.03.66.08.98l-2.12 1.66 2 3.46 2.5-1c.52.4 1.09.73 1.7.98l.34 2.67h4l.35-2.67a7.64 7.64 0 0 0 1.7-.98l2.5 1 2-3.46-2.12-1.66Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction resolveSettingsHref(menu: OonMenuItem[]): string | null {\n const explicit = menu.find((item) => item.action === \"settings\");\n if (explicit) return explicit.href;\n\n const settingsPage = menu.find((item) => item.href === \"/configuracoes\");\n if (settingsPage) return settingsPage.href;\n\n const integrationsPage = menu.find((item) => item.href === \"/integracoes\");\n return integrationsPage?.href ?? null;\n}\n\nfunction CoreTopbar({ app, menu }: { app: OonAppConfig; menu: OonMenuItem[] }) {\n const { user, logout, hasPermission } = useOonAuth();\n const navigate = useNavigate();\n const metadataQuery = useCoreMetadata();\n const runtime = resolveRuntimeVersionInfo(app, metadataQuery.data);\n const centralVersion = runtime.centralVersion ?? \"não informada\";\n const backendVersion = metadataQuery.isLoading\n ? \"carregando\"\n : runtime.coreBackVersion ?? \"indisponível\";\n const updatedAt = formatRuntimeDate(runtime.updatedAt);\n const commit = shortCommit(runtime.commit);\n const publicationParts = [\n updatedAt ? `Atualizado ${updatedAt}` : undefined,\n commit ? `commit ${commit}` : undefined,\n runtime.releaseId ? `release ${runtime.releaseId}` : undefined,\n ].filter(Boolean);\n const details = [\n `Central ${centralVersion}`,\n `OonCore front ${runtime.coreFrontVersion}`,\n `OonCore back ${backendVersion}`,\n runtime.environment ? `Ambiente ${runtime.environment}` : undefined,\n runtime.commit ? `Commit ${runtime.commit}` : undefined,\n runtime.releaseId ? `Release ${runtime.releaseId}` : undefined,\n runtime.startedAt ? `Backend iniciado ${formatRuntimeDate(runtime.startedAt)}` : undefined,\n ].filter(Boolean).join(\" · \");\n const settingsHref = resolveSettingsHref(\n menu.filter((item) => hasPermission(item.permissions)),\n );\n\n return (\n <Flex\n as=\"header\"\n align=\"center\"\n minH=\"64px\"\n px={{ base: 4, lg: 6 }}\n py={3}\n borderBottomWidth=\"1px\"\n borderColor=\"#E8ECEF\"\n bg=\"rgba(255, 255, 255, 0.96)\"\n backdropFilter=\"blur(10px)\"\n position=\"sticky\"\n top={0}\n zIndex={10}\n >\n <Box minW={0} title={details}>\n <Text\n fontSize=\"xs\"\n fontWeight=\"600\"\n color=\"brand.500\"\n textTransform=\"uppercase\"\n letterSpacing=\"0.08em\"\n >\n Central Oon\n </Text>\n <Text fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">\n {app.title ?? app.name}\n </Text>\n <Text fontSize=\"10px\" color=\"gray.600\" lineHeight=\"1.35\">\n Central {centralVersion} · Front {runtime.coreFrontVersion} · Back {backendVersion}\n </Text>\n {publicationParts.length ? (\n <Text fontSize=\"10px\" color=\"gray.500\" lineHeight=\"1.35\">\n {publicationParts.join(\" · \")}\n </Text>\n ) : null}\n </Box>\n <Spacer />\n {user ? (\n <Flex align=\"center\" gap={3}>\n <Box textAlign=\"right\" display={{ base: \"none\", md: \"block\" }}>\n <Text fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">\n {user.nome}\n </Text>\n {user.email ? <Text fontSize=\"xs\" color=\"gray.500\">{user.email}</Text> : null}\n </Box>\n {settingsHref ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n colorPalette=\"brand\"\n borderRadius=\"8px\"\n minW=\"36px\"\n px={2}\n aria-label=\"Abrir configurações\"\n title=\"Configurações\"\n onClick={() => navigate(settingsHref)}\n >\n <SettingsIcon />\n </Button>\n ) : null}\n <Button\n size=\"sm\"\n variant=\"outline\"\n colorPalette=\"brand\"\n borderRadius=\"8px\"\n onClick={logout}\n >\n Sair\n </Button>\n </Flex>\n ) : null}\n </Flex>\n );\n}\n\nfunction Slot({\n name,\n slot,\n registry,\n app,\n menu,\n}: {\n name: \"sidebar\" | \"topbar\" | \"header\" | \"footer\";\n slot?: string;\n registry?: OonComponentRegistry;\n app: OonAppConfig;\n menu: OonMenuItem[];\n}) {\n if (slot === \"none\") return null;\n if (slot?.startsWith(\"custom:\")) {\n const Component = resolveComponent(registry, slot, \"layoutSlots\");\n return Component\n ? <Component app={app} menu={menu} />\n : <MissingRenderer renderer={slot} />;\n }\n if (name === \"sidebar\") return <Sidebar app={app} menu={menu} registry={registry} />;\n if (name === \"topbar\") return <CoreTopbar app={app} menu={menu} />;\n if (name === \"footer\" && slot === \"core\") {\n return (\n <Box as=\"footer\" px={6} py={4} color=\"gray.500\" fontSize=\"xs\" borderTopWidth=\"1px\">\n OonCore\n </Box>\n );\n }\n return null;\n}\n\nexport function DefaultShell({\n app,\n menu,\n layout,\n registry,\n}: {\n app: OonAppConfig;\n menu: OonMenuItem[];\n layout?: OonLayoutConfig;\n registry?: OonComponentRegistry;\n}) {\n const portal = layout?.shell === \"portal\" || layout?.shell === \"content-only\";\n const mainPadding = portal ? { base: 4, lg: 10 } : { base: 4, lg: 6 };\n return (\n <Flex align=\"stretch\" minH=\"100vh\" bg={portal ? \"white\" : \"#F8F9FA\"}>\n <Slot\n name=\"sidebar\"\n slot={layout?.sidebar ?? \"core\"}\n registry={registry}\n app={app}\n menu={menu}\n />\n <Flex direction=\"column\" flex=\"1\" minW={0}>\n <Slot\n name=\"topbar\"\n slot={layout?.topbar ?? \"core\"}\n registry={registry}\n app={app}\n menu={menu}\n />\n <Slot name=\"header\" slot={layout?.header} registry={registry} app={app} menu={menu} />\n <Box as=\"main\" flex=\"1\" p={mainPadding} minW={0}>\n <Box maxW={portal ? \"1180px\" : \"1680px\"} mx=\"auto\">\n <Outlet />\n </Box>\n </Box>\n <Slot\n name=\"footer\"\n slot={layout?.footer ?? \"none\"}\n registry={registry}\n app={app}\n menu={menu}\n />\n </Flex>\n </Flex>\n );\n}\n\nexport function PortalShell(props: {\n app: OonAppConfig;\n menu: OonMenuItem[];\n layout?: OonLayoutConfig;\n registry?: OonComponentRegistry;\n}) {\n return <DefaultShell {...props} layout={{ ...props.layout, shell: \"portal\" }} />;\n}\n","import { Box, Flex, Image, 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","{\n \"name\": \"@oondemand/oon-core-front\",\n \"version\": \"0.4.0\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/oondemand/oon-platform.git\",\n \"directory\": \"packages/oonCore-front\"\n },\n \"description\": \"Core de frontend para Centrais Oon: shell, providers, roteamento por metadata, SDK REST do /core/*, RBAC e componentes Core* (Coleção, Documento, Esteira, Multi-moedas, Assistente, Dashboard).\",\n \"type\": \"module\",\n \"main\": \"dist/index.js\",\n \"module\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"bin\": {\n \"oonCore-front\": \"bin/cli.js\"\n },\n \"files\": [\n \"bin\",\n \"dist\",\n \"README.md\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"prepublishOnly\": \"npm run build\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run\"\n },\n \"engines\": {\n \"node\": \">=18\"\n },\n \"keywords\": [\n \"oondemand\",\n \"ooncore\",\n \"central\",\n \"frontend\",\n \"metadata-driven\",\n \"react\",\n \"vite\"\n ],\n \"license\": \"SEE LICENSE IN LICENSE\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"dependencies\": {\n \"axios\": \"^1.7.7\"\n },\n \"peerDependencies\": {\n \"@chakra-ui/react\": \"^3.0.0\",\n \"@tanstack/react-query\": \"^5.0.0\",\n \"@tanstack/react-table\": \"^8.0.0\",\n \"react\": \"^18.0.0\",\n \"react-dom\": \"^18.0.0\",\n \"react-router-dom\": \"^6.0.0\"\n },\n \"devDependencies\": {\n \"@testing-library/dom\": \"^10.4.1\",\n \"@testing-library/react\": \"^16.3.2\",\n \"@types/react\": \"^18.3.18\",\n \"@types/react-dom\": \"^18.3.5\",\n \"happy-dom\": \"^20.10.2\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.5.0\",\n \"vitest\": \"^2.0.0\"\n }\n}\n","import frontPackage from \"../../package.json\";\nimport type { CoreMetadata, OonAppConfig } from \"../types\";\n\nexport interface RuntimeVersionInfo {\n centralVersion?: string;\n coreFrontVersion: string;\n coreBackVersion?: string;\n updatedAt?: string;\n startedAt?: string;\n commit?: string;\n releaseId?: string;\n environment?: string;\n}\n\ninterface RuntimeMetadataExtension {\n runtime?: {\n core?: {\n backendVersion?: string;\n };\n central?: {\n version?: string;\n };\n deployment?: {\n builtAt?: string;\n startedAt?: string;\n commit?: string;\n releaseId?: string;\n environment?: string;\n };\n };\n}\n\ntype RuntimeMetadata = CoreMetadata & RuntimeMetadataExtension;\ntype BuildEnvironment = Record<string, string | undefined>;\n\nfunction value(...candidates: Array<string | undefined>): string | undefined {\n return candidates.find((candidate) => typeof candidate === \"string\" && candidate.trim())?.trim();\n}\n\nfunction browserBuildEnvironment(): BuildEnvironment {\n return (import.meta.env ?? {}) as BuildEnvironment;\n}\n\nexport function resolveRuntimeVersionInfo(\n app: OonAppConfig,\n metadata?: CoreMetadata,\n environment: BuildEnvironment = browserBuildEnvironment(),\n): RuntimeVersionInfo {\n const extended = metadata as RuntimeMetadata | undefined;\n const runtime = extended?.runtime;\n const deployment = runtime?.deployment;\n\n return {\n centralVersion: value(\n environment.VITE_OON_CENTRAL_VERSION,\n app.version,\n runtime?.central?.version,\n ),\n coreFrontVersion: frontPackage.version,\n coreBackVersion: value(runtime?.core?.backendVersion, metadata?.service?.version),\n updatedAt: value(\n environment.VITE_OON_BUILD_TIME,\n deployment?.builtAt,\n deployment?.startedAt,\n ),\n startedAt: deployment?.startedAt,\n commit: value(environment.VITE_OON_BUILD_COMMIT, deployment?.commit),\n releaseId: value(environment.VITE_OON_RELEASE_ID, deployment?.releaseId),\n environment: value(environment.VITE_OON_ENVIRONMENT, deployment?.environment),\n };\n}\n\nexport function formatRuntimeDate(valueToFormat?: string): string | undefined {\n if (!valueToFormat) return undefined;\n const date = new Date(valueToFormat);\n if (Number.isNaN(date.getTime())) return valueToFormat;\n return new Intl.DateTimeFormat(\"pt-BR\", {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n }).format(date);\n}\n\nexport function shortCommit(commit?: string): string | undefined {\n if (!commit) return undefined;\n return commit.length > 8 ? commit.slice(0, 8) : commit;\n}\n","import type { OonAppConfig, OonComponentRegistry, OonLayoutConfig, OonMenuItem } from \"../types\";\nimport { resolveComponent, MissingRenderer } from \"../app/componentRegistry\";\nimport { DefaultShell, PortalShell } from \"./DefaultShell\";\n\n/** Layout autenticado padrão mantido como wrapper de compatibilidade v1. */\nexport function AuthenticatedLayout({ app, menu, layout, registry }: { app: OonAppConfig; menu: OonMenuItem[]; layout?: OonLayoutConfig; registry?: OonComponentRegistry }) {\n if (layout?.shell?.startsWith(\"custom:\")) {\n const CustomShell = resolveComponent(registry, layout.shell, \"layoutSlots\");\n return CustomShell ? <CustomShell app={app} menu={menu} layout={layout} /> : <MissingRenderer renderer={layout.shell} />;\n }\n if (layout?.shell === \"portal\") return <PortalShell app={app} menu={menu} layout={layout} registry={registry} />;\n return <DefaultShell app={app} menu={menu} layout={layout} registry={registry} />;\n}\n","import { Box, Button, Flex, Heading, Text, VStack } from \"@chakra-ui/react\";\nimport { useNavigate } from \"react-router-dom\";\nimport type { OonAppConfig } from \"../types\";\nimport { useOonAuth } from \"./AuthProvider\";\n\n/** Página exibida quando o usuário está autenticado, mas não possui o app. */\nexport function AccessDeniedPage({ app }: { app: OonAppConfig }) {\n const { logout } = useOonAuth();\n const navigate = useNavigate();\n\n function useAnotherAccount() {\n logout();\n navigate(\"/login\", { replace: true });\n }\n\n return (\n <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box\n width=\"100%\"\n maxW=\"560px\"\n bg=\"white\"\n borderWidth=\"1px\"\n borderColor=\"#E4EBEF\"\n borderRadius=\"18px\"\n boxShadow=\"0 24px 70px rgba(7, 38, 46, 0.10)\"\n p={{ base: 6, md: 10 }}\n >\n <VStack align=\"stretch\" gap={6}>\n <Box\n width=\"56px\"\n height=\"56px\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n borderRadius=\"16px\"\n bg=\"orange.50\"\n color=\"orange.700\"\n fontSize=\"2xl\"\n fontWeight=\"800\"\n aria-hidden=\"true\"\n >\n !\n </Box>\n\n <Box>\n <Text\n color=\"#39BFED\"\n fontSize=\"xs\"\n fontWeight=\"700\"\n letterSpacing=\"0.12em\"\n textTransform=\"uppercase\"\n >\n Acesso negado\n </Text>\n <Heading mt={2} size=\"lg\" color=\"#07262E\">\n Você não possui permissão para este aplicativo\n </Heading>\n <Text mt={3} color=\"gray.600\">\n Seu usuário foi autenticado, mas não existe uma permissão ativa\n para acessar {app.title ?? app.name}. Solicite o acesso ao\n administrador da sua organização.\n </Text>\n </Box>\n\n <Button\n alignSelf=\"flex-start\"\n bg=\"#07262E\"\n color=\"white\"\n _hover={{ bg: \"#0B3843\" }}\n onClick={useAnotherAccount}\n >\n Entrar com outra conta\n </Button>\n </VStack>\n </Box>\n </Flex>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { Navigate, useLocation } from \"react-router-dom\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\nimport { useOonAuth } from \"./AuthProvider\";\n\nfunction loginRedirect(pathname: string, search: string): string {\n const destination = `${pathname}${search}`;\n return `/login?redirect=${encodeURIComponent(destination)}`;\n}\n\nexport function AppAccessGuard({ children }: { children: ReactNode }) {\n const { status, retry } = useOonAuth();\n const location = useLocation();\n\n if (status === \"loading\") return <LoadingScreen />;\n if (status === \"unauthenticated\") {\n return <Navigate to={loginRedirect(location.pathname, location.search)} replace />;\n }\n if (status === \"first-access\") return <Navigate to=\"/first-access\" replace />;\n if (status === \"forbidden\") return <Navigate to=\"/acesso-negado\" replace />;\n if (status === \"error\") {\n return (\n <LoadingScreen\n message=\"Não foi possível validar seu acesso. Tente novamente.\"\n actionLabel=\"Tentar novamente\"\n onAction={() => { void retry().catch(() => undefined); }}\n />\n );\n }\n return <>{children}</>;\n}\n","import { useState, type FormEvent } from \"react\";\nimport {\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 { useState, type FormEvent } from \"react\";\nimport { Box, Button, Flex, Heading, Input, Text, VStack } from \"@chakra-ui/react\";\nimport { Navigate } from \"react-router-dom\";\nimport { useOonAuth } from \"./AuthProvider\";\n\nexport function FirstAccessPage() {\n const { status, completeFirstAccess } = useOonAuth();\n const [password, setPassword] = useState(\"\");\n const [confirm, setConfirm] = useState(\"\");\n const [submitting, setSubmitting] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n\n if (status === \"authenticated\") return <Navigate to=\"/\" replace />;\n if (status === \"unauthenticated\") return <Navigate to=\"/login\" replace />;\n if (status === \"forbidden\") return <Navigate to=\"/acesso-negado\" replace />;\n\n async function submit(event: FormEvent) {\n event.preventDefault();\n setMessage(null);\n if (password.length < 8) {\n setMessage(\"A senha deve possuir pelo menos 8 caracteres.\");\n return;\n }\n if (password !== confirm) {\n setMessage(\"As senhas informadas não conferem.\");\n return;\n }\n setSubmitting(true);\n try {\n await completeFirstAccess(password);\n } catch (error: any) {\n setMessage(error?.message || \"Não foi possível definir a nova senha.\");\n } finally {\n setSubmitting(false);\n }\n }\n\n return (\n <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box width=\"100%\" maxW=\"460px\" bg=\"white\" borderWidth=\"1px\" borderRadius=\"18px\" p={{ base: 6, md: 9 }}>\n <form onSubmit={(event) => void submit(event)}>\n <VStack align=\"stretch\" gap={5}>\n <Box>\n <Text color=\"#39BFED\" fontSize=\"xs\" fontWeight=\"700\" textTransform=\"uppercase\">Primeiro acesso</Text>\n <Heading mt={2} size=\"lg\">Defina sua nova senha</Heading>\n <Text mt={2} fontSize=\"sm\" color=\"gray.600\">O acesso à Central só será liberado depois desta etapa.</Text>\n </Box>\n <Box>\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Nova senha</Text>\n <Input type=\"password\" autoComplete=\"new-password\" value={password} onChange={(event) => setPassword(event.target.value)} required />\n </Box>\n <Box>\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Confirmar senha</Text>\n <Input type=\"password\" autoComplete=\"new-password\" value={confirm} onChange={(event) => setConfirm(event.target.value)} required />\n </Box>\n {message ? <Box role=\"alert\" bg=\"red.50\" borderRadius=\"md\" p={3}><Text fontSize=\"sm\">{message}</Text></Box> : null}\n <Button type=\"submit\" disabled={submitting}>{submitting ? \"Salvando…\" : \"Definir nova senha\"}</Button>\n </VStack>\n </form>\n </Box>\n </Flex>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { Box, Button, Heading, Input, Text, VStack } from \"@chakra-ui/react\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { useActivation } from \"./ActivationProvider\";\n\ntype Field = {\n name: string;\n label: string;\n type: string;\n required?: boolean;\n defaultValue?: unknown;\n options?: string[];\n readOnly?: boolean;\n placeholder?: string;\n helpText?: string;\n minLength?: number;\n autoComplete?: string;\n};\n\ntype Preview = {\n tenant?: Record<string, unknown>;\n app?: Record<string, unknown>;\n licenca?: Record<string, unknown>;\n 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","const PIPELINE_BOARD_STYLE_ID = \"oon-core-pipeline-board-natural-height\";\n\n/**\n * O quadro mantém a rolagem horizontal no fim do conteúdo e cresce conforme\n * a etapa com mais tickets. As setas continuam acessíveis durante a rolagem\n * vertical sem transformar o quadro em uma área de scroll própria.\n */\nexport const PIPELINE_BOARD_LAYOUT_CSS = `\n:where(*) > [data-oon-pipeline-board=\"true\"] {\n height: auto !important;\n min-height: 420px;\n overflow-y: visible !important;\n align-items: stretch !important;\n}\n\n:where(*) > [data-oon-pipeline-board=\"true\"] > * {\n align-self: stretch;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) {\n display: grid;\n grid-template-areas: \"oon-pipeline-board\";\n align-items: start;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > [data-oon-pipeline-board=\"true\"] {\n grid-area: oon-pipeline-board;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > button[aria-label=\"Deslizar quadro para a esquerda\"],\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > button[aria-label=\"Deslizar quadro para a direita\"] {\n grid-area: oon-pipeline-board;\n position: sticky !important;\n top: calc(50vh - 17px) !important;\n right: auto !important;\n left: auto !important;\n align-self: start;\n transform: none !important;\n z-index: 3;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > button[aria-label=\"Deslizar quadro para a esquerda\"] {\n justify-self: start;\n margin-left: 8px;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > button[aria-label=\"Deslizar quadro para a direita\"] {\n justify-self: end;\n margin-right: 8px;\n}\n`;\n\nexport function installPipelineBoardLayoutStyles(targetDocument: Document = document) {\n if (targetDocument.getElementById(PIPELINE_BOARD_STYLE_ID)) return;\n\n const style = targetDocument.createElement(\"style\");\n style.id = PIPELINE_BOARD_STYLE_ID;\n style.textContent = PIPELINE_BOARD_LAYOUT_CSS;\n targetDocument.head.appendChild(style);\n}\n","import type {\n CollectionMode,\n CollectionViewDef,\n DashboardViewDef,\n DashboardWidgetDef,\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 OonPipelineDefaultActionsDef,\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\ntype DashboardFilterPrimitive = string | number | boolean | null;\ntype DashboardFilterValue = DashboardFilterPrimitive | {\n eq?: DashboardFilterPrimitive;\n ne?: DashboardFilterPrimitive;\n in?: DashboardFilterPrimitive[];\n nin?: DashboardFilterPrimitive[];\n gt?: DashboardFilterPrimitive;\n gte?: DashboardFilterPrimitive;\n lt?: DashboardFilterPrimitive;\n lte?: DashboardFilterPrimitive;\n exists?: boolean;\n};\n\ntype CentralDashboardWidget = Omit<DashboardWidgetDef, \"kind\"> & {\n description?: string;\n kind?: \"count\" | \"sum\" | \"groupCount\" | \"groupSum\" | \"custom\";\n groupBy?: string;\n filters?: Record<string, DashboardFilterValue>;\n format?: \"number\" | \"currency\";\n};\n\n/**\n * Schema do `central.ui.json` (Seção 9). É o que o frontend consumidor\n * carrega; a Central declara UI e o Core converte para rotas e componentes.\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 dashboards?: Array<{\n id?: string;\n label?: string;\n path?: string;\n section?: string;\n hidden?: boolean;\n order?: number;\n widgets?: CentralDashboardWidget[];\n }>;\n collections?: Array<{\n model: string;\n mode?: CollectionMode;\n path?: string;\n label?: string;\n section?: string;\n hidden?: boolean;\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 /** Habilitadas por padrão; use false para remover aprovação e status de trabalho. */\n defaultActions?: OonPipelineDefaultActionsDef;\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 dashboard of manifest.dashboards ?? []) {\n const view = {\n type: \"dashboard\",\n id: dashboard.id,\n label: dashboard.label,\n path: dashboard.path,\n section: dashboard.section,\n hidden: dashboard.hidden,\n order: dashboard.order,\n widgets: dashboard.widgets as DashboardWidgetDef[] | undefined,\n } as DashboardViewDef & { hidden?: boolean; order?: number };\n views.push(view);\n }\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 hidden: c.hidden,\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 defaultActions: p.defaultActions,\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 frontend\n * consumidor precisa para carregar o manifesto da Central.\n */\nexport function startFromManifest(manifest: CentralUiManifest, runtime: ManifestRuntime) {\n start(manifestToConfig(manifest, runtime));\n}\n","import { Stack } from \"@chakra-ui/react\";\nimport type { OonModule } from \"../types\";\nimport { CoreIntegration } from \"../components/CoreIntegration\";\nimport { CoreIntegrationMappings } from \"../components/CoreIntegrationMappings\";\nimport { CoreIntegrationTickets } from \"../components/CoreIntegrationTickets\";\nimport { CoreOmieIntegrationWorkspace } from \"../components/CoreOmieIntegrationWorkspace\";\n\nfunction CoreIntegrationPage() {\n return (\n <Stack gap={8}>\n <CoreIntegration />\n <CoreIntegrationMappings />\n </Stack>\n );\n}\n\n/** Módulo operacional nativo habilitado por central.app.json.modules.integrations. */\nexport function createIntegrationModule(): OonModule {\n return {\n id: \"core.integrations\",\n label: \"Integrações\",\n routes: [\n {\n path: \"/integracoes\",\n element: <CoreIntegrationPage />,\n capabilities: [\"core.integrations\"],\n },\n {\n path: \"/configuracoes/integracao-omie\",\n element: <CoreOmieIntegrationWorkspace />,\n capabilities: [\"core.integrations\", \"core.integrations.omie\"],\n },\n {\n path: \"/configuracoes/integracao-omie/tickets\",\n element: <CoreIntegrationTickets provider=\"omie\" />,\n capabilities: [\"core.integrations\", \"core.integrations.omie\"],\n },\n ],\n menu: [],\n };\n}\n","import { useEffect, useState } from \"react\";\nimport { Badge, Box, Button, Flex, Heading, Input, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation, useQuery } from \"@tanstack/react-query\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\nimport { ErrorState } from \"../shell/ErrorState\";\n\nexport interface CoreIntegrationProps {\n label?: string;\n}\n\ninterface ResourceEntry {\n key: string;\n label: string;\n description?: string;\n}\n\ninterface ProviderConfigurationMetadata {\n enabled?: boolean;\n multiInstance?: boolean;\n}\n\ninterface ProviderEntry {\n key: string;\n label: string;\n description?: string;\n status?: string;\n capabilities?: string[];\n configuration?: ProviderConfigurationMetadata | null;\n resources?: ResourceEntry[];\n queue?: Record<string, number>;\n inbox?: Record<string, number>;\n oldestPendingAt?: string | null;\n lastExecution?: { status?: string } | null;\n}\n\ninterface ProviderConfigurationInstance {\n instanceId: string;\n label?: string;\n active?: boolean;\n environment?: string;\n baseUrl?: string;\n appKeyMasked?: string;\n credentialsConfigured?: boolean;\n connectionStatus?: string;\n lastConnectionError?: string;\n lastConnectionTestAt?: string | null;\n updatedAt?: string;\n}\n\ninterface ProviderMappings {\n calls?: unknown[];\n lists?: unknown[];\n webhooks?: unknown[];\n}\n\ninterface ConfigurationDraft {\n instanceId: string;\n label: string;\n active: boolean;\n environment: string;\n baseUrl: string;\n appKey: string;\n appSecret: string;\n webhookToken: string;\n}\n\ninterface QueueTicket {\n _id: string;\n provider: string;\n resource?: string;\n handler: string;\n status: string;\n attempts: number;\n nextAttemptAt?: string | null;\n lastError?: { message?: string };\n}\n\ninterface DiagnosticError {\n message?: string;\n code?: string;\n statusCode?: number;\n details?: unknown;\n [key: string]: unknown;\n}\n\ninterface ExecutionDiagnostic {\n index?: number;\n externalKey?: unknown;\n message?: string;\n code?: string;\n statusCode?: number;\n error?: DiagnosticError;\n [key: string]: unknown;\n}\n\ninterface ExecutionEntry {\n _id: string;\n provider: string;\n resource?: string;\n operation?: string;\n title: string;\n status: string;\n startedAt?: string;\n concludedAt?: string | null;\n durationMs?: number;\n message?: string;\n error?: DiagnosticError;\n summary?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n requests?: unknown[];\n requestCount?: number;\n requestsLimited?: boolean;\n errors?: ExecutionDiagnostic[];\n errorCount?: number;\n errorsLimited?: boolean;\n items?: unknown[];\n itemCount?: number;\n itemsLimited?: boolean;\n}\n\nfunction dateTime(value?: string | null) {\n if (!value) return \"—\";\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleString(\"pt-BR\");\n}\n\nfunction statusPalette(status?: string) {\n const normalized = String(status || \"\").toLowerCase();\n if (normalized.includes(\"erro\") || normalized.includes(\"error\") || normalized.includes(\"inativo\")) return \"red\";\n if (normalized.includes(\"process\") || normalized.includes(\"temporário\") || normalized.includes(\"not-tested\")) return \"yellow\";\n if (normalized.includes(\"concluído\") || normalized.includes(\"ativo\") || normalized === \"ok\") return \"green\";\n return \"gray\";\n}\n\nfunction integrationErrorMessage(error: unknown) {\n const message = (error as { message?: unknown } | null)?.message;\n return typeof message === \"string\" && message.trim()\n ? message\n : \"Não foi possível operar a configuração do provedor.\";\n}\n\nfunction countActive(values?: Record<string, number>) {\n if (!values) return 0;\n return Object.entries(values)\n .filter(([status]) => ![\"Concluído\", \"Arquivado\"].includes(status))\n .reduce((sum, [, count]) => sum + Number(count || 0), 0);\n}\n\nconst SUMMARY_LABELS: Record<string, string> = {\n mode: \"Modo\",\n received: \"Recebidos\",\n created: \"Criados\",\n updated: \"Atualizados\",\n skipped: \"Ignorados\",\n inactivated: \"Inativados\",\n errors: \"Erros\",\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction primitiveText(value: unknown): string {\n if (value === null || value === undefined || value === \"\") return \"—\";\n if ([\"string\", \"number\", \"boolean\"].includes(typeof value)) return String(value);\n return JSON.stringify(value) ?? \"—\";\n}\n\nfunction diagnosticMessage(value: ExecutionDiagnostic) {\n return value.error?.message || value.message || \"Erro sem mensagem registrada.\";\n}\n\nfunction diagnosticCode(value: ExecutionDiagnostic) {\n return value.error?.code || value.code || value.error?.statusCode || value.statusCode;\n}\n\nfunction diagnosticIdentity(value: ExecutionDiagnostic, position: number) {\n const parts = [`Registro ${value.index !== undefined ? value.index + 1 : position + 1}`];\n if (value.externalKey !== undefined && value.externalKey !== null && value.externalKey !== \"\") {\n parts.push(`chave ${primitiveText(value.externalKey)}`);\n }\n const code = diagnosticCode(value);\n if (code !== undefined && code !== null && code !== \"\") parts.push(`código ${String(code)}`);\n return parts.join(\" · \");\n}\n\nfunction executionDiagnostics(execution: ExecutionEntry) {\n const values = [...(execution.errors ?? [])];\n if (execution.error?.message && !values.some((item) => diagnosticMessage(item) === execution.error?.message)) {\n values.push({ error: execution.error });\n }\n return values;\n}\n\nfunction JsonDiagnosticDetails({\n label,\n value,\n count,\n limited,\n}: {\n label: string;\n value: unknown;\n count?: number;\n limited?: boolean;\n}) {\n const hasValue = Array.isArray(value)\n ? value.length > 0\n : isRecord(value)\n ? Object.keys(value).length > 0\n : value !== undefined && value !== null && value !== \"\";\n if (!hasValue) return null;\n return (\n <details style={{ borderTop: \"1px solid #e2e8f0\", paddingTop: \"10px\" }}>\n <summary style={{ cursor: \"pointer\", fontWeight: 600, fontSize: \"13px\" }}>\n {label}{count !== undefined ? ` (${count})` : \"\"}{limited ? \" · visualização limitada\" : \"\"}\n </summary>\n <Box\n as=\"pre\"\n mt={2}\n mb={0}\n p={3}\n overflowX=\"auto\"\n borderRadius=\"md\"\n bg=\"gray.50\"\n fontSize=\"xs\"\n whiteSpace=\"pre-wrap\"\n wordBreak=\"break-word\"\n >\n {JSON.stringify(value, null, 2)}\n </Box>\n </details>\n );\n}\n\nfunction ExecutionDetails({ execution }: { execution: ExecutionEntry }) {\n const diagnostics = executionDiagnostics(execution);\n const summary = isRecord(execution.summary) ? execution.summary : {};\n const summaryEntries = Object.entries(summary).filter(([, value]) => (\n value === null || [\"string\", \"number\", \"boolean\"].includes(typeof value)\n ));\n\n return (\n <Box mt={3} pt={3} borderTopWidth=\"1px\" borderColor=\"gray.100\">\n <Stack gap={3}>\n {summaryEntries.length ? (\n <Box>\n <Text fontSize=\"sm\" fontWeight=\"semibold\" mb={2}>Resumo da execução</Text>\n <Flex gap={2} wrap=\"wrap\">\n {summaryEntries.map(([key, value]) => (\n <Badge\n key={key}\n variant=\"outline\"\n colorPalette={key === \"errors\" && Number(value ?? 0) > 0 ? \"red\" : \"gray\"}\n >\n {SUMMARY_LABELS[key] || key}: {primitiveText(value)}\n </Badge>\n ))}\n </Flex>\n </Box>\n ) : null}\n\n {diagnostics.length ? (\n <Box>\n <Flex align=\"center\" justify=\"space-between\" gap={2} mb={2} wrap=\"wrap\">\n <Text fontSize=\"sm\" fontWeight=\"semibold\">Erros por registro</Text>\n <Text fontSize=\"xs\" color=\"gray.500\">\n {execution.errorCount ?? diagnostics.length} erro(s)\n {execution.errorsLimited ? \" · lista limitada\" : \"\"}\n </Text>\n </Flex>\n <Stack gap={2}>\n {diagnostics.map((diagnostic, index) => (\n <Box\n key={`${diagnostic.index ?? index}:${diagnosticMessage(diagnostic)}`}\n p={3}\n borderWidth=\"1px\"\n borderColor=\"red.100\"\n borderRadius=\"md\"\n bg=\"red.50\"\n >\n <Text fontSize=\"xs\" color=\"gray.600\" fontWeight=\"semibold\">\n {diagnosticIdentity(diagnostic, index)}\n </Text>\n <Text fontSize=\"sm\" color=\"red.700\">{diagnosticMessage(diagnostic)}</Text>\n {diagnostic.error?.details ? (\n <Text fontSize=\"xs\" color=\"gray.600\" mt={1}>\n {primitiveText(diagnostic.error.details)}\n </Text>\n ) : null}\n </Box>\n ))}\n </Stack>\n </Box>\n ) : execution.status.toLowerCase().includes(\"erro\") ? (\n <Text fontSize=\"sm\" color=\"red.600\">\n {execution.message || execution.error?.message || \"A execução terminou com erro, mas não registrou detalhes adicionais.\"}\n </Text>\n ) : null}\n\n <JsonDiagnosticDetails\n label=\"Itens processados\"\n value={execution.items}\n count={execution.itemCount}\n limited={execution.itemsLimited}\n />\n <JsonDiagnosticDetails\n label=\"Chamadas sanitizadas\"\n value={execution.requests}\n count={execution.requestCount}\n limited={execution.requestsLimited}\n />\n <JsonDiagnosticDetails label=\"Metadados\" value={execution.metadata} />\n </Stack>\n </Box>\n );\n}\n\nfunction ProviderConfigurationPanel({ provider }: { provider: ProviderEntry }) {\n const { http } = useOonApi();\n const [draft, setDraft] = useState<ConfigurationDraft>({\n instanceId: \"default\",\n label: provider.label,\n active: true,\n environment: \"production\",\n baseUrl: \"\",\n appKey: \"\",\n appSecret: \"\",\n webhookToken: \"\",\n });\n\n const configuration = useQuery({\n queryKey: [\"core-integrations\", provider.key, \"configuration\"],\n queryFn: async () => ((await http.get(`/integrations/providers/${provider.key}/configuration`)).data?.instances ?? []) as ProviderConfigurationInstance[],\n });\n const mappings = useQuery({\n queryKey: [\"core-integrations\", provider.key, \"mappings\"],\n queryFn: async () => (await http.get(`/integrations/providers/${provider.key}/mappings`)).data as ProviderMappings,\n });\n\n const selected = (configuration.data ?? []).find((item) => item.instanceId === draft.instanceId);\n\n useEffect(() => {\n if (!selected) return;\n setDraft((current) => ({\n ...current,\n instanceId: selected.instanceId || \"default\",\n label: selected.label || provider.label,\n active: selected.active !== false,\n environment: selected.environment || \"production\",\n baseUrl: selected.baseUrl || \"\",\n appKey: \"\",\n appSecret: \"\",\n webhookToken: \"\",\n }));\n }, [provider.label, selected?.instanceId, selected?.updatedAt]);\n\n const save = useMutation({\n mutationFn: async () => http.put(\n `/integrations/providers/${provider.key}/configuration/${draft.instanceId}`,\n {\n label: draft.label,\n active: draft.active,\n environment: draft.environment,\n baseUrl: draft.baseUrl,\n ...(draft.appKey ? { appKey: draft.appKey } : {}),\n ...(draft.appSecret ? { appSecret: draft.appSecret } : {}),\n ...(draft.webhookToken ? { webhookToken: draft.webhookToken } : {}),\n },\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: async () => {\n setDraft((current) => ({ ...current, appKey: \"\", appSecret: \"\", webhookToken: \"\" }));\n await configuration.refetch();\n },\n });\n const testConnection = useMutation({\n mutationFn: async () => http.post(\n `/integrations/providers/${provider.key}/configuration/${draft.instanceId}/test`,\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: () => configuration.refetch(),\n });\n\n const error = configuration.error || mappings.error || save.error || testConnection.error;\n const mappingCounts = {\n chamadas: mappings.data?.calls?.length ?? 0,\n listas: mappings.data?.lists?.length ?? 0,\n webhooks: mappings.data?.webhooks?.length ?? 0,\n };\n\n return (\n <Box borderTopWidth=\"1px\" borderColor=\"gray.100\" pt={4}>\n <Stack gap={3}>\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Text fontWeight=\"semibold\">Configuração</Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n Credenciais protegidas por instância. Segredos gravados nunca são devolvidos ao navegador.\n </Text>\n </Box>\n <Flex gap={2} wrap=\"wrap\">\n <Badge variant=\"outline\">{mappingCounts.chamadas} chamadas</Badge>\n <Badge variant=\"outline\">{mappingCounts.listas} listas</Badge>\n <Badge variant=\"outline\">{mappingCounts.webhooks} webhooks</Badge>\n </Flex>\n </Flex>\n\n <Flex gap={3} wrap=\"wrap\">\n <Box minW=\"180px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>Instância</Text>\n <Input\n size=\"sm\"\n value={draft.instanceId}\n onChange={(event) => setDraft((current) => ({ ...current, instanceId: event.target.value }))}\n placeholder=\"default\"\n />\n </Box>\n <Box minW=\"220px\" flex=\"2\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>Nome</Text>\n <Input\n size=\"sm\"\n value={draft.label}\n onChange={(event) => setDraft((current) => ({ ...current, label: event.target.value }))}\n />\n </Box>\n <Box minW=\"180px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>Ambiente</Text>\n <select\n style={{\n width: \"100%\",\n height: \"32px\",\n border: \"1px solid #e2e8f0\",\n borderRadius: \"6px\",\n padding: \"0 8px\",\n background: \"white\",\n }}\n value={draft.environment}\n onChange={(event) => setDraft((current) => ({\n ...current,\n environment: event.currentTarget.value,\n }))}\n >\n <option value=\"production\">Produção</option>\n <option value=\"homologation\">Homologação</option>\n </select>\n </Box>\n </Flex>\n\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>URL base</Text>\n <Input\n size=\"sm\"\n value={draft.baseUrl}\n onChange={(event) => setDraft((current) => ({ ...current, baseUrl: event.target.value }))}\n placeholder=\"https://app.omie.com.br/api/v1\"\n />\n </Box>\n\n <Flex gap={3} wrap=\"wrap\">\n <Box minW=\"220px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>App Key {selected?.appKeyMasked ? `(${selected.appKeyMasked})` : \"\"}</Text>\n <Input\n size=\"sm\"\n type=\"password\"\n value={draft.appKey}\n onChange={(event) => setDraft((current) => ({ ...current, appKey: event.target.value }))}\n placeholder={selected?.credentialsConfigured ? \"Manter valor atual\" : \"Informe a App Key\"}\n />\n </Box>\n <Box minW=\"220px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>App Secret</Text>\n <Input\n size=\"sm\"\n type=\"password\"\n value={draft.appSecret}\n onChange={(event) => setDraft((current) => ({ ...current, appSecret: event.target.value }))}\n placeholder={selected?.credentialsConfigured ? \"Manter valor atual\" : \"Informe o App Secret\"}\n />\n </Box>\n <Box minW=\"220px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>Token do webhook</Text>\n <Input\n size=\"sm\"\n type=\"password\"\n value={draft.webhookToken}\n onChange={(event) => setDraft((current) => ({ ...current, webhookToken: event.target.value }))}\n placeholder=\"Manter ou definir token\"\n />\n </Box>\n </Flex>\n\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Flex align=\"center\" gap={2} wrap=\"wrap\">\n <label>\n <input\n type=\"checkbox\"\n checked={draft.active}\n onChange={(event) => setDraft((current) => ({ ...current, active: event.target.checked }))}\n />{\" \"}Integração ativa\n </label>\n <Badge colorPalette={statusPalette(selected?.connectionStatus)}>\n Conexão: {selected?.connectionStatus ?? \"não testada\"}\n </Badge>\n <Text fontSize=\"xs\" color=\"gray.500\">Último teste: {dateTime(selected?.lastConnectionTestAt)}</Text>\n </Flex>\n <Flex gap={2}>\n <Button size=\"xs\" variant=\"outline\" loading={testConnection.isPending} onClick={() => testConnection.mutate()}>\n Testar conexão\n </Button>\n <Button size=\"xs\" loading={save.isPending} onClick={() => save.mutate()}>\n Salvar configuração\n </Button>\n </Flex>\n </Flex>\n\n {selected?.lastConnectionError ? <Text fontSize=\"sm\" color=\"red.600\">{selected.lastConnectionError}</Text> : null}\n {error ? <Text fontSize=\"sm\" color=\"red.600\">{integrationErrorMessage(error)}</Text> : null}\n </Stack>\n </Box>\n );\n}\n\n/** Painel operacional padrão da engine de integrações. */\nexport function CoreIntegration({ label = \"Integrações\" }: CoreIntegrationProps) {\n const { http } = useOonApi();\n const [expandedExecutionId, setExpandedExecutionId] = useState<string | null>(null);\n\n const providers = useQuery({\n queryKey: [\"core-integrations\", \"health\"],\n queryFn: async () => ((await http.get(\"/integrations/health\")).data?.results ?? []) as ProviderEntry[],\n });\n const queue = useQuery({\n queryKey: [\"core-integrations\", \"queue\"],\n queryFn: async () => ((await http.get(\"/integrations/queue\", { params: { limit: 20 } })).data?.results ?? []) as QueueTicket[],\n });\n const history = useQuery({\n queryKey: [\"core-integrations\", \"history\"],\n queryFn: async () => ((await http.get(\"/integrations/history\", { params: { limit: 10 } })).data?.results ?? []) as ExecutionEntry[],\n });\n\n const refresh = async () => {\n await Promise.all([providers.refetch(), queue.refetch(), history.refetch()]);\n };\n\n const process = useMutation({\n mutationFn: () => http.post(\n \"/integrations/actions/process-active\",\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: refresh,\n });\n const syncAll = useMutation({\n mutationFn: (provider: string) => http.post(\n `/integrations/providers/${provider}/sync-all`,\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: refresh,\n });\n const syncResource = useMutation({\n mutationFn: ({ provider, resource }: { provider: string; resource: string }) => http.post(\n `/integrations/providers/${provider}/resources/${resource}/sync`,\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: refresh,\n });\n const reprocess = useMutation({\n mutationFn: (id: string) => http.post(\n `/integrations/queue/${id}/reprocess`,\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: refresh,\n });\n const archive = useMutation({\n mutationFn: (id: string) => http.post(\n `/integrations/queue/${id}/archive`,\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: refresh,\n });\n\n if (providers.isLoading || queue.isLoading || history.isLoading) return <LoadingScreen />;\n const error = providers.error || queue.error || history.error;\n if (error) return <ErrorState error={error} />;\n\n return (\n <Stack gap={6}>\n <Flex align=\"center\" justify=\"space-between\" gap={4} wrap=\"wrap\">\n <Box>\n <Heading size=\"lg\">{label}</Heading>\n <Text color=\"gray.500\">Configuração, saúde, filas, eventos e diagnóstico sanitizado por provedor.</Text>\n </Box>\n <Button size=\"sm\" variant=\"outline\" loading={process.isPending} onClick={() => process.mutate()}>\n Processar pendências\n </Button>\n </Flex>\n\n <Stack gap={3}>\n {(providers.data ?? []).length === 0 ? (\n <Text color=\"gray.400\">Nenhum provedor registrado.</Text>\n ) : providers.data?.map((provider) => (\n <Box key={provider.key} borderWidth=\"1px\" borderColor=\"gray.200\" borderRadius=\"md\" bg=\"white\" p={4}>\n <Stack gap={3}>\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Flex align=\"center\" gap={2}>\n <Text fontWeight=\"semibold\">{provider.label}</Text>\n <Badge colorPalette={statusPalette(provider.status)}>{provider.status ?? \"—\"}</Badge>\n </Flex>\n {provider.description ? <Text color=\"gray.500\" fontSize=\"sm\">{provider.description}</Text> : null}\n </Box>\n <Button size=\"xs\" variant=\"outline\" loading={syncAll.isPending} onClick={() => syncAll.mutate(provider.key)}>\n Sincronizar tudo\n </Button>\n </Flex>\n\n <Flex gap={3} wrap=\"wrap\">\n <Badge colorPalette={countActive(provider.queue) ? \"yellow\" : \"green\"}>\n Fila ativa: {countActive(provider.queue)}\n </Badge>\n <Badge colorPalette={countActive(provider.inbox) ? \"yellow\" : \"green\"}>\n Eventos ativos: {countActive(provider.inbox)}\n </Badge>\n <Badge colorPalette={statusPalette(provider.lastExecution?.status)}>\n Última execução: {provider.lastExecution?.status ?? \"sem histórico\"}\n </Badge>\n </Flex>\n\n <Text fontSize=\"sm\" color=\"gray.500\">\n Pendência mais antiga: {dateTime(provider.oldestPendingAt)}\n </Text>\n\n <Flex gap={2} wrap=\"wrap\">\n {(provider.resources ?? []).map((resource) => (\n <Button\n key={resource.key}\n size=\"xs\"\n variant=\"outline\"\n loading={syncResource.isPending}\n onClick={() => syncResource.mutate({ provider: provider.key, resource: resource.key })}\n >\n {resource.label}\n </Button>\n ))}\n </Flex>\n\n {provider.configuration?.enabled ? <ProviderConfigurationPanel provider={provider} /> : null}\n </Stack>\n </Box>\n ))}\n </Stack>\n\n <Box>\n <Heading size=\"md\" mb={3}>Fila recente</Heading>\n <Stack gap={2}>\n {(queue.data ?? []).length === 0 ? <Text color=\"gray.400\">Nenhum ticket de integração.</Text> : queue.data?.map((ticket) => (\n <Box key={ticket._id} borderWidth=\"1px\" borderRadius=\"md\" p={3} bg=\"white\">\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Flex align=\"center\" gap={2} wrap=\"wrap\">\n <Text fontWeight=\"medium\">{ticket.handler}</Text>\n <Badge colorPalette={statusPalette(ticket.status)}>{ticket.status}</Badge>\n <Badge variant=\"outline\">{ticket.provider}</Badge>\n </Flex>\n <Text fontSize=\"sm\" color=\"gray.500\">\n {ticket.resource || \"sem recurso\"} · tentativas {ticket.attempts} · próxima {dateTime(ticket.nextAttemptAt)}\n </Text>\n {ticket.lastError?.message ? <Text fontSize=\"sm\" color=\"red.600\">{ticket.lastError.message}</Text> : null}\n </Box>\n <Flex gap={2}>\n {[\"Erro temporário\", \"Erro definitivo\", \"Arquivado\"].includes(ticket.status) ? (\n <Button size=\"xs\" variant=\"outline\" loading={reprocess.isPending} onClick={() => reprocess.mutate(ticket._id)}>\n Reprocessar\n </Button>\n ) : null}\n {[\"Erro temporário\", \"Erro definitivo\"].includes(ticket.status) ? (\n <Button size=\"xs\" variant=\"outline\" loading={archive.isPending} onClick={() => archive.mutate(ticket._id)}>\n Arquivar\n </Button>\n ) : null}\n </Flex>\n </Flex>\n </Box>\n ))}\n </Stack>\n </Box>\n\n <Box>\n <Heading size=\"md\" mb={3}>Histórico</Heading>\n <Stack gap={2}>\n {(history.data ?? []).length === 0 ? <Text color=\"gray.400\">Nenhuma execução registrada.</Text> : history.data?.map((execution) => {\n const expanded = expandedExecutionId === execution._id;\n const diagnosticCount = execution.errorCount ?? execution.errors?.length ?? (execution.error?.message ? 1 : 0);\n return (\n <Box key={execution._id} borderWidth=\"1px\" borderRadius=\"md\" p={3} bg=\"white\">\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Text fontWeight=\"medium\">{execution.title}</Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n {execution.provider} · {execution.resource || \"sem recurso\"} · {dateTime(execution.startedAt)} · {execution.durationMs ?? 0} ms\n </Text>\n {execution.error?.message ? <Text fontSize=\"sm\" color=\"red.600\">{execution.error.message}</Text> : null}\n </Box>\n <Flex align=\"center\" gap={2} wrap=\"wrap\">\n {diagnosticCount > 0 ? <Badge colorPalette=\"red\">{diagnosticCount} erro(s)</Badge> : null}\n <Badge colorPalette={statusPalette(execution.status)}>{execution.status}</Badge>\n <Button\n size=\"xs\"\n variant=\"outline\"\n aria-expanded={expanded}\n onClick={() => setExpandedExecutionId((current) => current === execution._id ? null : execution._id)}\n >\n {expanded ? \"Ocultar detalhes\" : \"Ver detalhes\"}\n </Button>\n </Flex>\n </Flex>\n {expanded ? <ExecutionDetails execution={execution} /> : null}\n </Box>\n );\n})}\n </Stack>\n </Box>\n </Stack>\n );\n}\n","import { Badge, Box, Flex, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useOonApi } from \"../api/ApiProvider\";\n\ninterface ProviderEntry {\n key: string;\n label: string;\n}\n\ninterface MappingCall {\n key: string;\n label?: string;\n endpoint?: string;\n call?: string;\n paginated?: boolean;\n connectionTest?: boolean;\n}\n\ninterface MappingListExecution {\n instanceId?: string;\n status?: string;\n lastCompletedAt?: string | null;\n}\n\ninterface MappingList {\n key: string;\n label?: string;\n description?: string;\n call?: string;\n mode?: string;\n direction?: string;\n targetModel?: string;\n externalKey?: string;\n schedule?: unknown;\n executions?: MappingListExecution[];\n}\n\ninterface MappingWebhook {\n eventType: string;\n resource?: string;\n actions?: Array<{ handler?: string }>;\n}\n\ninterface ProviderMappings {\n provider: string;\n calls?: MappingCall[];\n lists?: MappingList[];\n webhooks?: MappingWebhook[];\n}\n\ninterface MappingSummary {\n provider: ProviderEntry;\n mappings: ProviderMappings;\n}\n\nfunction dateTime(value?: string | null) {\n if (!value) return \"sem execução\";\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleString(\"pt-BR\");\n}\n\n/** Visualização sanitizada dos contratos declarados por cada Central. */\nexport function CoreIntegrationMappings() {\n const { http } = useOonApi();\n const providers = useQuery({\n queryKey: [\"core-integrations\", \"providers\"],\n queryFn: async () => ((await http.get(\"/integrations/providers\")).data?.results ?? []) as ProviderEntry[],\n });\n const providerKeys = (providers.data ?? []).map((provider) => provider.key).join(\",\");\n const summaries = useQuery({\n queryKey: [\"core-integrations\", \"mapping-summaries\", providerKeys],\n enabled: providers.isSuccess && providerKeys.length > 0,\n queryFn: async () => Promise.all((providers.data ?? []).map(async (provider) => ({\n provider,\n mappings: (await http.get(`/integrations/providers/${provider.key}/mappings`)).data as ProviderMappings,\n } satisfies MappingSummary))),\n });\n\n if (providers.isLoading || summaries.isLoading) {\n return <Text color=\"gray.500\">Carregando contratos declarados…</Text>;\n }\n if (providers.error || summaries.error) {\n return <Text color=\"red.600\">Não foi possível carregar os contratos declarados.</Text>;\n }\n if (!(summaries.data ?? []).length) return null;\n\n return (\n <Box>\n <Heading size=\"md\" mb={1}>Contratos declarados</Heading>\n <Text color=\"gray.500\" mb={3}>\n Chamadas, listas e mappings pertencem à Central; o Core exibe somente metadados sanitizados.\n </Text>\n <Stack gap={3}>\n {summaries.data?.map(({ provider, mappings }) => (\n <Box key={provider.key} borderWidth=\"1px\" borderRadius=\"md\" bg=\"white\" p={4}>\n <Stack gap={4}>\n <Heading size=\"sm\">{provider.label}</Heading>\n\n <Box>\n <Text fontWeight=\"semibold\" mb={2}>Chamadas Omie</Text>\n <Flex gap={2} wrap=\"wrap\">\n {(mappings.calls ?? []).length ? mappings.calls?.map((call) => (\n <Badge key={call.key} variant=\"outline\">\n {call.label || call.key} · {call.call || \"operação\"}{call.paginated ? \" · paginada\" : \"\"}\n </Badge>\n )) : <Text fontSize=\"sm\" color=\"gray.400\">Nenhuma chamada declarada.</Text>}\n </Flex>\n </Box>\n\n <Box>\n <Text fontWeight=\"semibold\" mb={2}>Listas Omie</Text>\n <Stack gap={2}>\n {(mappings.lists ?? []).length ? mappings.lists?.map((list) => {\n const latest = list.executions?.[0];\n return (\n <Box key={list.key} borderWidth=\"1px\" borderColor=\"gray.100\" borderRadius=\"md\" p={3}>\n <Flex align=\"center\" justify=\"space-between\" gap={2} wrap=\"wrap\">\n <Box>\n <Text fontSize=\"sm\" fontWeight=\"medium\">{list.label || list.key}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\">\n {list.mode || \"modo padrão\"} · {list.direction || \"direção padrão\"} · {list.targetModel || \"destino declarado\"}\n </Text>\n </Box>\n <Flex gap={2} wrap=\"wrap\">\n <Badge variant=\"outline\">{latest?.status || \"não executada\"}</Badge>\n <Badge variant=\"outline\">{dateTime(latest?.lastCompletedAt)}</Badge>\n </Flex>\n </Flex>\n </Box>\n );\n }) : <Text fontSize=\"sm\" color=\"gray.400\">Nenhuma lista declarada.</Text>}\n </Stack>\n </Box>\n\n <Box>\n <Text fontWeight=\"semibold\" mb={2}>Mappings de webhook</Text>\n <Stack gap={1}>\n {(mappings.webhooks ?? []).length ? mappings.webhooks?.map((webhook) => (\n <Text key={`${webhook.eventType}:${webhook.resource || \"\"}`} fontSize=\"sm\" color=\"gray.600\">\n {webhook.eventType} → {(webhook.actions ?? []).map((action) => action.handler).filter(Boolean).join(\", \") || \"sem ação declarada\"}\n </Text>\n )) : <Text fontSize=\"sm\" color=\"gray.400\">Nenhum mapping de webhook declarado.</Text>}\n </Stack>\n </Box>\n </Stack>\n </Box>\n ))}\n </Stack>\n </Box>\n );\n}\n","import { useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { Badge, Box, Button, Flex, Heading, Input, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation, useQuery } from \"@tanstack/react-query\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { ErrorState } from \"../shell/ErrorState\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\n\nconst TICKET_STATUSES = [\n \"Pendente\",\n \"Processando\",\n \"Erro temporário\",\n \"Concluído\",\n \"Erro definitivo\",\n \"Arquivado\",\n] as const;\n\ntype TicketStatus = typeof TICKET_STATUSES[number];\ntype TicketView = \"list\" | \"board\";\ntype TicketAction = \"reprocess\" | \"archive\";\n\ninterface QueueTicket {\n _id: string;\n provider: string;\n handler: string;\n resource?: string;\n operation?: string;\n aggregateType?: string;\n aggregateId?: string;\n idempotencyKey?: string;\n payload?: unknown;\n status: TicketStatus | string;\n previousStatus?: string;\n attempts?: number;\n nextAttemptAt?: string | null;\n lastError?: unknown;\n responseSummary?: unknown;\n completedAt?: string | null;\n archivedAt?: string | null;\n archiveReason?: string;\n lockedAt?: string | null;\n lockedBy?: string;\n leaseExpiresAt?: string | null;\n heartbeatAt?: string | null;\n createdAt?: string;\n updatedAt?: string;\n}\n\ninterface QueueResponse {\n results?: QueueTicket[];\n summary?: {\n total?: number;\n statuses?: Record<string, number>;\n };\n pagination?: {\n currentPage?: number;\n totalItems?: number;\n totalPages?: number;\n itemsPerPage?: number;\n };\n}\n\nfunction dateTime(value?: string | null) {\n if (!value) return \"—\";\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleString(\"pt-BR\");\n}\n\nfunction shortId(value?: string) {\n if (!value) return \"—\";\n return value.length > 12 ? `${value.slice(0, 8)}…${value.slice(-4)}` : value;\n}\n\nfunction statusPalette(status?: string) {\n const normalized = String(status || \"\").toLowerCase();\n if (normalized.includes(\"definitivo\")) return \"red\";\n if (normalized.includes(\"temporário\")) return \"orange\";\n if (normalized.includes(\"processando\")) return \"blue\";\n if (normalized.includes(\"pendente\")) return \"yellow\";\n if (normalized.includes(\"concluído\")) return \"green\";\n return \"gray\";\n}\n\nfunction integrationErrorMessage(error: unknown) {\n const candidate = error as {\n message?: unknown;\n response?: { data?: { message?: unknown; error?: { message?: unknown } } };\n } | null;\n const message = candidate?.response?.data?.error?.message\n || candidate?.response?.data?.message\n || candidate?.message;\n return typeof message === \"string\" && message.trim()\n ? message\n : \"Não foi possível concluir a operação.\";\n}\n\nfunction diagnosticMessage(value: unknown) {\n if (!value) return \"\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"object\") {\n const candidate = value as { message?: unknown; error?: { message?: unknown } };\n const message = candidate.message || candidate.error?.message;\n if (typeof message === \"string\") return message;\n }\n return JSON.stringify(value);\n}\n\nfunction NativeSelect({\n value,\n onChange,\n children,\n ariaLabel,\n}: {\n value: string;\n onChange: (value: string) => void;\n children: ReactNode;\n ariaLabel: string;\n}) {\n return (\n <select\n aria-label={ariaLabel}\n style={{\n minWidth: \"190px\",\n height: \"34px\",\n border: \"1px solid #e2e8f0\",\n borderRadius: \"6px\",\n padding: \"0 8px\",\n background: \"white\",\n }}\n value={value}\n onChange={(event) => onChange(event.currentTarget.value)}\n >\n {children}\n </select>\n );\n}\n\nfunction JsonDetails({ label, value }: { label: string; value: unknown }) {\n if (value === undefined || value === null) return null;\n if (typeof value === \"object\" && !Array.isArray(value) && !Object.keys(value as object).length) return null;\n return (\n <details>\n <summary style={{ cursor: \"pointer\", fontWeight: 600 }}>{label}</summary>\n <Box\n as=\"pre\"\n mt={2}\n p={3}\n borderRadius=\"md\"\n bg=\"gray.50\"\n overflowX=\"auto\"\n whiteSpace=\"pre-wrap\"\n fontSize=\"xs\"\n >\n {JSON.stringify(value, null, 2)}\n </Box>\n </details>\n );\n}\n\nfunction TicketDetails({ ticket }: { ticket: QueueTicket }) {\n const error = diagnosticMessage(ticket.lastError);\n return (\n <Stack gap={3} pt={3} mt={3} borderTopWidth=\"1px\">\n <Box display=\"grid\" gridTemplateColumns={{ base: \"1fr\", md: \"repeat(3, minmax(0, 1fr))\" }} gap={3}>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">ID completo</Text>\n <Text fontSize=\"sm\" wordBreak=\"break-all\">{ticket._id}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">Chave de idempotência</Text>\n <Text fontSize=\"sm\" wordBreak=\"break-all\">{ticket.idempotencyKey || \"—\"}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">Status anterior</Text>\n <Text fontSize=\"sm\">{ticket.previousStatus || \"—\"}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">Criado</Text>\n <Text fontSize=\"sm\">{dateTime(ticket.createdAt)}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">Atualizado</Text>\n <Text fontSize=\"sm\">{dateTime(ticket.updatedAt)}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">Concluído</Text>\n <Text fontSize=\"sm\">{dateTime(ticket.completedAt)}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">Worker</Text>\n <Text fontSize=\"sm\">{ticket.lockedBy || \"—\"}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">Lease expira</Text>\n <Text fontSize=\"sm\">{dateTime(ticket.leaseExpiresAt)}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">Heartbeat</Text>\n <Text fontSize=\"sm\">{dateTime(ticket.heartbeatAt)}</Text>\n </Box>\n </Box>\n {error ? (\n <Box borderWidth=\"1px\" borderColor=\"red.100\" borderRadius=\"md\" bg=\"red.50\" p={3}>\n <Text fontSize=\"xs\" color=\"gray.600\">Último erro</Text>\n <Text color=\"red.700\">{error}</Text>\n </Box>\n ) : null}\n {ticket.archiveReason ? (\n <Box borderWidth=\"1px\" borderRadius=\"md\" p={3}>\n <Text fontSize=\"xs\" color=\"gray.500\">Motivo do arquivamento</Text>\n <Text>{ticket.archiveReason}</Text>\n </Box>\n ) : null}\n <JsonDetails label=\"Payload sanitizado\" value={ticket.payload} />\n <JsonDetails label=\"Resposta sanitizada\" value={ticket.responseSummary} />\n <JsonDetails label=\"Erro sanitizado\" value={ticket.lastError} />\n </Stack>\n );\n}\n\nfunction canReprocess(status: string) {\n return [\"Erro temporário\", \"Erro definitivo\", \"Arquivado\"].includes(status);\n}\n\nfunction canArchive(status: string) {\n return [\"Erro temporário\", \"Erro definitivo\"].includes(status);\n}\n\nfunction TicketActions({\n ticket,\n mutation,\n onToggle,\n expanded,\n}: {\n ticket: QueueTicket;\n mutation: ReturnType<typeof useMutation<unknown, Error, { id: string; action: TicketAction }>>;\n onToggle: () => void;\n expanded: boolean;\n}) {\n const pending = mutation.isPending && mutation.variables?.id === ticket._id;\n return (\n <Flex gap={2} wrap=\"wrap\" justify=\"flex-end\">\n <Button size=\"xs\" variant=\"outline\" onClick={onToggle} aria-expanded={expanded}>\n {expanded ? \"Ocultar\" : \"Detalhes\"}\n </Button>\n {canReprocess(ticket.status) ? (\n <Button\n size=\"xs\"\n variant=\"outline\"\n loading={pending && mutation.variables?.action === \"reprocess\"}\n onClick={() => mutation.mutate({ id: ticket._id, action: \"reprocess\" })}\n >\n Reprocessar\n </Button>\n ) : null}\n {canArchive(ticket.status) ? (\n <Button\n size=\"xs\"\n variant=\"outline\"\n colorPalette=\"red\"\n loading={pending && mutation.variables?.action === \"archive\"}\n onClick={() => mutation.mutate({ id: ticket._id, action: \"archive\" })}\n >\n Arquivar\n </Button>\n ) : null}\n </Flex>\n );\n}\n\nfunction TicketCard({\n ticket,\n expanded,\n onToggle,\n mutation,\n}: {\n ticket: QueueTicket;\n expanded: boolean;\n onToggle: () => void;\n mutation: ReturnType<typeof useMutation<unknown, Error, { id: string; action: TicketAction }>>;\n}) {\n const error = diagnosticMessage(ticket.lastError);\n return (\n <Box borderWidth=\"1px\" borderRadius=\"md\" p={3} bg=\"white\">\n <Flex align=\"start\" justify=\"space-between\" gap={2}>\n <Box minW={0}>\n <Text fontSize=\"xs\" color=\"gray.500\" title={ticket._id}>#{shortId(ticket._id)}</Text>\n <Text fontWeight=\"semibold\" wordBreak=\"break-word\">{ticket.handler}</Text>\n </Box>\n <Badge colorPalette={statusPalette(ticket.status)}>{ticket.status}</Badge>\n </Flex>\n <Text fontSize=\"sm\" color=\"gray.600\" mt={2}>\n {ticket.resource || \"sem recurso\"} · {ticket.operation || \"execute\"}\n </Text>\n <Text fontSize=\"xs\" color=\"gray.500\" mt={1} wordBreak=\"break-word\">\n {ticket.aggregateType || \"sem agregado\"}{ticket.aggregateId ? ` · ${ticket.aggregateId}` : \"\"}\n </Text>\n <Flex gap={2} mt={2} wrap=\"wrap\">\n <Badge variant=\"outline\">Tentativas: {ticket.attempts ?? 0}</Badge>\n <Badge variant=\"outline\">Criado: {dateTime(ticket.createdAt)}</Badge>\n </Flex>\n {error ? <Text fontSize=\"xs\" color=\"red.600\" mt={2}>{error}</Text> : null}\n <Box mt={3}>\n <TicketActions ticket={ticket} mutation={mutation} onToggle={onToggle} expanded={expanded} />\n </Box>\n {expanded ? <TicketDetails ticket={ticket} /> : null}\n </Box>\n );\n}\n\nexport function CoreIntegrationTickets({ provider = \"omie\" }: { provider?: string }) {\n const { http } = useOonApi();\n const [view, setView] = useState<TicketView>(\"list\");\n const [status, setStatus] = useState(\"\");\n const [searchInput, setSearchInput] = useState(\"\");\n const [search, setSearch] = useState(\"\");\n const [page, setPage] = useState(1);\n const [expandedId, setExpandedId] = useState<string | null>(null);\n const limit = view === \"board\" ? 200 : 25;\n\n useEffect(() => {\n const timeout = window.setTimeout(() => {\n setSearch(searchInput.trim());\n setPage(1);\n }, 350);\n return () => window.clearTimeout(timeout);\n }, [searchInput]);\n\n const queue = useQuery({\n queryKey: [\"core-integration-tickets\", provider, view, status, search, page],\n queryFn: async () => (await http.get(\"/integrations/queue\", {\n params: {\n provider,\n status: status || undefined,\n search: search || undefined,\n page,\n limit,\n },\n })).data as QueueResponse,\n });\n\n const action = useMutation<unknown, Error, { id: string; action: TicketAction }>({\n mutationFn: async ({ id, action: ticketAction }) => {\n const body = ticketAction === \"archive\" ? { reason: \"Arquivado manualmente pela visão de tickets.\" } : {};\n return http.post(\n `/integrations/queue/${id}/${ticketAction}`,\n body,\n { headers: { \"x-oon-origin\": \"integration\" } },\n );\n },\n onSuccess: async () => {\n setExpandedId(null);\n await queue.refetch();\n },\n });\n\n const processPending = useMutation<unknown, Error, void>({\n mutationFn: async () => http.post(\n \"/integrations/queue/process\",\n { provider, limit: 100 },\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: async () => {\n await queue.refetch();\n },\n });\n\n useEffect(() => {\n const totalPages = queue.data?.pagination?.totalPages ?? 1;\n if (page > totalPages) setPage(Math.max(1, totalPages));\n }, [page, queue.data?.pagination?.totalPages]);\n\n const tickets = queue.data?.results ?? [];\n const grouped = useMemo(() => Object.fromEntries(\n TICKET_STATUSES.map((ticketStatus) => [ticketStatus, tickets.filter((ticket) => ticket.status === ticketStatus)]),\n ) as Record<TicketStatus, QueueTicket[]>, [tickets]);\n\n if (queue.isLoading) return <LoadingScreen />;\n if (queue.error && !queue.data) return <ErrorState error={queue.error} />;\n\n const pagination = queue.data?.pagination;\n const totalPages = Math.max(1, pagination?.totalPages ?? 1);\n const totalItems = pagination?.totalItems ?? 0;\n const statuses = queue.data?.summary?.statuses ?? {};\n const operationError = action.error || processPending.error || queue.error;\n\n return (\n <Stack gap={5}>\n <Flex align=\"start\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Heading size=\"md\">Tickets de integração</Heading>\n <Text color=\"gray.500\">\n Acompanhe cada operação da fila, seus parâmetros sanitizados, tentativas, erros e resultado.\n </Text>\n </Box>\n <Flex gap={2}>\n <Button size=\"sm\" variant={view === \"list\" ? \"solid\" : \"outline\"} onClick={() => { setView(\"list\"); setPage(1); }}>\n Lista\n </Button>\n <Button size=\"sm\" variant={view === \"board\" ? \"solid\" : \"outline\"} onClick={() => { setView(\"board\"); setPage(1); }}>\n Quadro\n </Button>\n <Button\n size=\"sm\"\n colorPalette=\"blue\"\n loading={processPending.isPending}\n disabled={processPending.isPending}\n onClick={() => processPending.mutate()}\n >\n Processar pendentes\n </Button>\n <Button size=\"sm\" variant=\"outline\" loading={queue.isFetching} onClick={() => queue.refetch()}>\n Atualizar\n </Button>\n </Flex>\n </Flex>\n\n <Box borderWidth=\"1px\" borderRadius=\"md\" p={3}>\n <Flex gap={3} align=\"center\" wrap=\"wrap\">\n <Input\n size=\"sm\"\n value={searchInput}\n onChange={(event) => setSearchInput(event.currentTarget.value)}\n placeholder=\"Pesquisar ID, handler, recurso, agregado ou idempotência\"\n flex=\"1\"\n minW=\"280px\"\n />\n <NativeSelect\n ariaLabel=\"Filtrar tickets por status\"\n value={status}\n onChange={(value) => { setStatus(value); setPage(1); }}\n >\n <option value=\"\">Todos os status</option>\n {TICKET_STATUSES.map((ticketStatus) => (\n <option key={ticketStatus} value={ticketStatus}>{ticketStatus}</option>\n ))}\n </NativeSelect>\n <Text fontSize=\"sm\" color=\"gray.500\">{totalItems} ticket(s)</Text>\n </Flex>\n <Flex gap={2} wrap=\"wrap\" mt={3}>\n {TICKET_STATUSES.map((ticketStatus) => (\n <Button\n key={ticketStatus}\n size=\"xs\"\n variant={status === ticketStatus ? \"solid\" : \"outline\"}\n colorPalette={statusPalette(ticketStatus)}\n onClick={() => { setStatus((current) => current === ticketStatus ? \"\" : ticketStatus); setPage(1); }}\n >\n {ticketStatus}: {statuses[ticketStatus] ?? 0}\n </Button>\n ))}\n </Flex>\n </Box>\n\n {view === \"list\" ? (\n <Box borderWidth=\"1px\" borderRadius=\"md\" overflowX=\"auto\">\n <Box minW=\"1080px\">\n <Box\n display=\"grid\"\n gridTemplateColumns=\"1.25fr 1.5fr 1.15fr .75fr 1.15fr .9fr 1.3fr\"\n gap={3}\n px={3}\n py={2}\n bg=\"gray.50\"\n borderBottomWidth=\"1px\"\n >\n {[\"Ticket\", \"Operação\", \"Agregado\", \"Tentativas\", \"Datas\", \"Status\", \"Ações\"].map((label) => (\n <Text key={label} fontSize=\"xs\" fontWeight=\"semibold\" color=\"gray.600\">{label}</Text>\n ))}\n </Box>\n {tickets.length ? tickets.map((ticket) => {\n const expanded = expandedId === ticket._id;\n const error = diagnosticMessage(ticket.lastError);\n return (\n <Box key={ticket._id} px={3} py={3} borderBottomWidth=\"1px\" _last={{ borderBottomWidth: 0 }}>\n <Box\n display=\"grid\"\n gridTemplateColumns=\"1.25fr 1.5fr 1.15fr .75fr 1.15fr .9fr 1.3fr\"\n gap={3}\n alignItems=\"start\"\n >\n <Box minW={0}>\n <Text fontWeight=\"semibold\" title={ticket._id}>#{shortId(ticket._id)}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\">{ticket.provider}</Text>\n </Box>\n <Box minW={0}>\n <Text fontSize=\"sm\" fontWeight=\"medium\" wordBreak=\"break-word\">{ticket.handler}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\">{ticket.resource || \"—\"} · {ticket.operation || \"execute\"}</Text>\n {error ? <Text fontSize=\"xs\" color=\"red.600\" mt={1}>{error}</Text> : null}\n </Box>\n <Box minW={0}>\n <Text fontSize=\"sm\">{ticket.aggregateType || \"—\"}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\" wordBreak=\"break-all\">{ticket.aggregateId || \"—\"}</Text>\n </Box>\n <Box>\n <Text fontSize=\"sm\">{ticket.attempts ?? 0}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\">Próxima: {dateTime(ticket.nextAttemptAt)}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\">Criado: {dateTime(ticket.createdAt)}</Text>\n <Text fontSize=\"xs\">Atualizado: {dateTime(ticket.updatedAt)}</Text>\n <Text fontSize=\"xs\">Concluído: {dateTime(ticket.completedAt)}</Text>\n </Box>\n <Badge colorPalette={statusPalette(ticket.status)} width=\"fit-content\">{ticket.status}</Badge>\n <TicketActions\n ticket={ticket}\n mutation={action}\n expanded={expanded}\n onToggle={() => setExpandedId((current) => current === ticket._id ? null : ticket._id)}\n />\n </Box>\n {expanded ? <TicketDetails ticket={ticket} /> : null}\n </Box>\n );\n }) : (\n <Text p={5} color=\"gray.400\">Nenhum ticket encontrado com os filtros informados.</Text>\n )}\n </Box>\n </Box>\n ) : (\n <Box overflowX=\"auto\" pb={2}>\n <Flex align=\"start\" gap={3} minW={`${TICKET_STATUSES.length * 290}px`}>\n {TICKET_STATUSES.map((ticketStatus) => (\n <Box key={ticketStatus} width=\"280px\" flex=\"0 0 280px\" bg=\"gray.50\" borderRadius=\"md\" p={2}>\n <Flex align=\"center\" justify=\"space-between\" mb={2}>\n <Badge colorPalette={statusPalette(ticketStatus)}>{ticketStatus}</Badge>\n <Text fontSize=\"xs\" color=\"gray.500\">{statuses[ticketStatus] ?? 0}</Text>\n </Flex>\n <Stack gap={2}>\n {grouped[ticketStatus].length ? grouped[ticketStatus].map((ticket) => (\n <TicketCard\n key={ticket._id}\n ticket={ticket}\n mutation={action}\n expanded={expandedId === ticket._id}\n onToggle={() => setExpandedId((current) => current === ticket._id ? null : ticket._id)}\n />\n )) : <Text fontSize=\"xs\" color=\"gray.400\" p={2}>Nenhum ticket nesta página.</Text>}\n </Stack>\n </Box>\n ))}\n </Flex>\n </Box>\n )}\n\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Text fontSize=\"sm\" color=\"gray.500\">\n Página {pagination?.currentPage ?? page} de {totalPages} · {pagination?.itemsPerPage ?? limit} por página\n {view === \"board\" && totalItems > limit ? \" · o quadro é paginado\" : \"\"}\n </Text>\n <Flex gap={2}>\n <Button size=\"sm\" variant=\"outline\" disabled={page <= 1} onClick={() => setPage((current) => Math.max(1, current - 1))}>\n Anterior\n </Button>\n <Button size=\"sm\" variant=\"outline\" disabled={page >= totalPages} onClick={() => setPage((current) => Math.min(totalPages, current + 1))}>\n Próxima\n </Button>\n </Flex>\n </Flex>\n\n {operationError ? <Text color=\"red.600\">{integrationErrorMessage(operationError)}</Text> : null}\n </Stack>\n );\n}","import { useState } from \"react\";\nimport { Button, Flex, Stack } from \"@chakra-ui/react\";\nimport { CoreIntegrationTickets } from \"./CoreIntegrationTickets\";\nimport { CoreOmieIntegration } from \"./CoreOmieIntegration\";\n\ntype WorkspaceView = \"integration\" | \"tickets\";\n\nexport function CoreOmieIntegrationWorkspace() {\n const [view, setView] = useState<WorkspaceView>(\"integration\");\n\n return (\n <Stack gap={4}>\n <Flex gap={2} wrap=\"wrap\" borderBottomWidth=\"1px\" pb={2}>\n <Button\n size=\"sm\"\n variant={view === \"integration\" ? \"solid\" : \"ghost\"}\n onClick={() => setView(\"integration\")}\n >\n Integração Omie\n </Button>\n <Button\n size=\"sm\"\n variant={view === \"tickets\" ? \"solid\" : \"ghost\"}\n onClick={() => setView(\"tickets\")}\n >\n Tickets\n </Button>\n </Flex>\n {view === \"integration\" ? <CoreOmieIntegration /> : null}\n {view === \"tickets\" ? <CoreIntegrationTickets provider=\"omie\" /> : null}\n </Stack>\n );\n}\n","import { useEffect, useState, type ReactNode } from \"react\";\nimport { Badge, Box, Button, Flex, Heading, Input, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation, useQuery } from \"@tanstack/react-query\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { ErrorState } from \"../shell/ErrorState\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\n\ntype OmieTab = \"configuration\" | \"synchronization\" | \"webhooks\" | \"history\";\n\ninterface ProviderConfigurationInstance {\n instanceId: string;\n label?: string;\n active?: boolean;\n environment?: string;\n baseUrl?: string;\n appKeyMasked?: string;\n credentialsConfigured?: boolean;\n webhookConfigured?: boolean;\n connectionStatus?: string;\n lastConnectionError?: string;\n lastConnectionTestAt?: string | null;\n updatedAt?: string;\n}\n\ninterface ProviderHealth {\n key: string;\n label: string;\n status?: string;\n description?: string;\n resources?: Array<{ key: string; label: string; description?: string }>;\n queue?: Record<string, number>;\n inbox?: Record<string, number>;\n lastExecution?: { status?: string } | null;\n oldestPendingAt?: string | null;\n}\n\ninterface MappingList {\n key: string;\n label?: string;\n mode?: string;\n direction?: string;\n targetModel?: string;\n executions?: Array<{\n instanceId?: string;\n status?: string;\n lastCompletedAt?: string | null;\n summary?: Record<string, unknown>;\n }>;\n}\n\ninterface MappingWebhook {\n eventType: string;\n resource?: string;\n actions?: Array<{ handler?: string }>;\n}\n\ninterface ProviderMappings {\n calls?: Array<{ key: string; label?: string; call?: string }>;\n lists?: MappingList[];\n webhooks?: MappingWebhook[];\n}\n\ninterface QueueTicket {\n _id: string;\n handler: string;\n resource?: string;\n status: string;\n attempts?: number;\n nextAttemptAt?: string | null;\n lastError?: { message?: string };\n}\n\ninterface WebhookEvent {\n _id: string;\n eventType?: string;\n resource?: string;\n status: string;\n receivedAt?: string;\n attempts?: number;\n lastError?: { message?: string };\n}\n\ninterface ExecutionDiagnostic {\n index?: number;\n externalKey?: unknown;\n message?: string;\n code?: string;\n statusCode?: number;\n error?: {\n message?: string;\n code?: string;\n statusCode?: number;\n details?: unknown;\n };\n}\n\ninterface ExecutionEntry {\n _id: string;\n title: string;\n status: string;\n resource?: string;\n startedAt?: string;\n durationMs?: number;\n summary?: Record<string, unknown>;\n errors?: ExecutionDiagnostic[];\n errorCount?: number;\n errorsLimited?: boolean;\n error?: { message?: string; code?: string; statusCode?: number };\n items?: unknown[];\n itemCount?: number;\n itemsLimited?: boolean;\n requests?: unknown[];\n requestCount?: number;\n requestsLimited?: boolean;\n metadata?: Record<string, unknown>;\n}\n\ninterface ConfigurationDraft {\n instanceId: string;\n label: string;\n active: boolean;\n environment: string;\n baseUrl: string;\n appKey: string;\n appSecret: string;\n}\n\nfunction dateTime(value?: string | null) {\n if (!value) return \"—\";\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleString(\"pt-BR\");\n}\n\nfunction statusPalette(status?: string) {\n const normalized = String(status || \"\").toLowerCase();\n if (normalized.includes(\"erro\") || normalized.includes(\"error\") || normalized.includes(\"inativo\")) return \"red\";\n if (normalized.includes(\"process\") || normalized.includes(\"pendente\") || normalized.includes(\"not-tested\")) return \"yellow\";\n if (normalized.includes(\"concluído\") || normalized.includes(\"ativo\") || normalized === \"ok\") return \"green\";\n return \"gray\";\n}\n\nfunction integrationErrorMessage(error: unknown) {\n const candidate = error as {\n message?: unknown;\n response?: { data?: { message?: unknown; error?: { message?: unknown } } };\n } | null;\n const message = candidate?.response?.data?.error?.message\n || candidate?.response?.data?.message\n || candidate?.message;\n return typeof message === \"string\" && message.trim()\n ? message\n : \"Não foi possível concluir a operação.\";\n}\n\nfunction countActive(values?: Record<string, number>) {\n return Object.entries(values ?? {})\n .filter(([status]) => ![\"Concluído\", \"Arquivado\"].includes(status))\n .reduce((sum, [, count]) => sum + Number(count || 0), 0);\n}\n\nfunction absoluteWebhookUrl(path?: string) {\n if (!path) return \"\";\n if (typeof window === \"undefined\") return path;\n return new URL(path, window.location.origin).toString();\n}\n\nasync function copyText(value: string) {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(value);\n return;\n }\n if (typeof document === \"undefined\") return;\n const textarea = document.createElement(\"textarea\");\n textarea.value = value;\n textarea.style.position = \"fixed\";\n textarea.style.opacity = \"0\";\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand(\"copy\");\n textarea.remove();\n}\n\nfunction NativeSelect({\n value,\n onChange,\n children,\n}: {\n value: string;\n onChange: (value: string) => void;\n children: ReactNode;\n}) {\n return (\n <select\n style={{\n width: \"100%\",\n height: \"34px\",\n border: \"1px solid #e2e8f0\",\n borderRadius: \"6px\",\n padding: \"0 8px\",\n background: \"white\",\n }}\n value={value}\n onChange={(event) => onChange(event.currentTarget.value)}\n >\n {children}\n </select>\n );\n}\n\nfunction OmieConfigurationTab() {\n const { http } = useOonApi();\n const configuration = useQuery({\n queryKey: [\"core-omie\", \"configuration\"],\n queryFn: async () => ((await http.get(\"/integrations/providers/omie/configuration\")).data?.instances ?? []) as ProviderConfigurationInstance[],\n });\n const [draft, setDraft] = useState<ConfigurationDraft>({\n instanceId: \"default\",\n label: \"Omie\",\n active: true,\n environment: \"production\",\n baseUrl: \"https://app.omie.com.br/api/v1\",\n appKey: \"\",\n appSecret: \"\",\n });\n const selected = (configuration.data ?? []).find((item) => item.instanceId === draft.instanceId)\n ?? configuration.data?.[0];\n\n useEffect(() => {\n if (!selected) return;\n setDraft((current) => ({\n ...current,\n instanceId: selected.instanceId || \"default\",\n label: selected.label || \"Omie\",\n active: selected.active !== false,\n environment: selected.environment || \"production\",\n baseUrl: selected.baseUrl || \"https://app.omie.com.br/api/v1\",\n appKey: \"\",\n appSecret: \"\",\n }));\n }, [selected?.instanceId, selected?.updatedAt]);\n\n const save = useMutation({\n mutationFn: () => http.put(\n `/integrations/providers/omie/configuration/${draft.instanceId}`,\n {\n label: draft.label,\n active: draft.active,\n environment: draft.environment,\n baseUrl: draft.baseUrl,\n ...(draft.appKey ? { appKey: draft.appKey } : {}),\n ...(draft.appSecret ? { appSecret: draft.appSecret } : {}),\n },\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: async () => {\n setDraft((current) => ({ ...current, appKey: \"\", appSecret: \"\" }));\n await configuration.refetch();\n },\n });\n\n const testConnection = useMutation({\n mutationFn: () => http.post(\n `/integrations/providers/omie/configuration/${draft.instanceId}/test`,\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: () => configuration.refetch(),\n });\n\n if (configuration.isLoading) return <LoadingScreen />;\n if (configuration.error) return <ErrorState error={configuration.error} />;\n const error = save.error || testConnection.error;\n\n return (\n <Stack gap={4}>\n <Box>\n <Heading size=\"md\">Configurações</Heading>\n <Text color=\"gray.500\">\n Credenciais protegidas por instância. O token do webhook é gerado e administrado automaticamente.\n </Text>\n </Box>\n\n <Flex gap={3} wrap=\"wrap\">\n <Box minW=\"180px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>Instância</Text>\n <NativeSelect\n value={draft.instanceId}\n onChange={(instanceId) => setDraft((current) => ({ ...current, instanceId }))}\n >\n {(configuration.data ?? []).map((instance) => (\n <option key={instance.instanceId} value={instance.instanceId}>\n {instance.label || instance.instanceId}\n </option>\n ))}\n </NativeSelect>\n </Box>\n <Box minW=\"240px\" flex=\"2\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>Nome</Text>\n <Input\n size=\"sm\"\n value={draft.label}\n onChange={(event) => setDraft((current) => ({ ...current, label: event.target.value }))}\n />\n </Box>\n <Box minW=\"180px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>Ambiente</Text>\n <NativeSelect\n value={draft.environment}\n onChange={(environment) => setDraft((current) => ({ ...current, environment }))}\n >\n <option value=\"production\">Produção</option>\n <option value=\"homologation\">Homologação</option>\n </NativeSelect>\n </Box>\n </Flex>\n\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>URL base</Text>\n <Input\n size=\"sm\"\n value={draft.baseUrl}\n onChange={(event) => setDraft((current) => ({ ...current, baseUrl: event.target.value }))}\n />\n </Box>\n\n <Flex gap={3} wrap=\"wrap\">\n <Box minW=\"260px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>\n App Key {selected?.appKeyMasked ? `(${selected.appKeyMasked})` : \"\"}\n </Text>\n <Input\n size=\"sm\"\n type=\"password\"\n value={draft.appKey}\n onChange={(event) => setDraft((current) => ({ ...current, appKey: event.target.value }))}\n placeholder={selected?.credentialsConfigured ? \"Manter valor atual\" : \"Informe a App Key\"}\n />\n </Box>\n <Box minW=\"260px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>App Secret</Text>\n <Input\n size=\"sm\"\n type=\"password\"\n value={draft.appSecret}\n onChange={(event) => setDraft((current) => ({ ...current, appSecret: event.target.value }))}\n placeholder={selected?.credentialsConfigured ? \"Manter valor atual\" : \"Informe o App Secret\"}\n />\n </Box>\n </Flex>\n\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Flex align=\"center\" gap={2} wrap=\"wrap\">\n <label>\n <input\n type=\"checkbox\"\n checked={draft.active}\n onChange={(event) => setDraft((current) => ({ ...current, active: event.target.checked }))}\n />{\" \"}Integração ativa\n </label>\n <Badge colorPalette={statusPalette(selected?.connectionStatus)}>\n Conexão: {selected?.connectionStatus ?? \"não testada\"}\n </Badge>\n <Badge colorPalette={selected?.webhookConfigured ? \"green\" : \"yellow\"}>\n Webhook: {selected?.webhookConfigured ? \"configurado\" : \"será gerado\"}\n </Badge>\n <Text fontSize=\"xs\" color=\"gray.500\">Último teste: {dateTime(selected?.lastConnectionTestAt)}</Text>\n </Flex>\n <Flex gap={2}>\n <Button\n size=\"sm\"\n variant=\"outline\"\n loading={testConnection.isPending}\n onClick={() => testConnection.mutate()}\n >\n Testar conexão\n </Button>\n <Button size=\"sm\" loading={save.isPending} onClick={() => save.mutate()}>\n Salvar configurações\n </Button>\n </Flex>\n </Flex>\n\n {selected?.lastConnectionError ? <Text color=\"red.600\">{selected.lastConnectionError}</Text> : null}\n {error ? <Text color=\"red.600\">{integrationErrorMessage(error)}</Text> : null}\n </Stack>\n );\n}\n\nfunction OmieSynchronizationTab() {\n const { http } = useOonApi();\n const health = useQuery({\n queryKey: [\"core-omie\", \"health\"],\n queryFn: async () => {\n const providers = ((await http.get(\"/integrations/health\")).data?.results ?? []) as ProviderHealth[];\n return providers.find((provider) => provider.key === \"omie\") ?? null;\n },\n });\n const mappings = useQuery({\n queryKey: [\"core-omie\", \"mappings\"],\n queryFn: async () => (await http.get(\"/integrations/providers/omie/mappings\")).data as ProviderMappings,\n });\n const queue = useQuery({\n queryKey: [\"core-omie\", \"queue\"],\n queryFn: async () => ((await http.get(\"/integrations/queue\", {\n params: { provider: \"omie\", limit: 20 },\n })).data?.results ?? []) as QueueTicket[],\n });\n\n const refresh = () => Promise.all([health.refetch(), mappings.refetch(), queue.refetch()]);\n const syncAll = useMutation({\n mutationFn: () => http.post(\n \"/integrations/providers/omie/sync-all\",\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: refresh,\n });\n const syncResource = useMutation({\n mutationFn: (resource: string) => http.post(\n `/integrations/providers/omie/resources/${resource}/sync`,\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: refresh,\n });\n const process = useMutation({\n mutationFn: () => http.post(\n \"/integrations/actions/process-active\",\n { provider: \"omie\" },\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: refresh,\n });\n\n if (health.isLoading || mappings.isLoading || queue.isLoading) return <LoadingScreen />;\n const error = health.error || mappings.error || queue.error || syncAll.error || syncResource.error || process.error;\n if ((health.error || mappings.error || queue.error) && !health.data) return <ErrorState error={error} />;\n\n const provider = health.data;\n\n return (\n <Stack gap={5}>\n <Flex align=\"start\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Heading size=\"md\">Sincronização</Heading>\n <Text color=\"gray.500\">Execute listas declaradas e acompanhe o processamento da fila Omie.</Text>\n </Box>\n <Flex gap={2}>\n <Button size=\"sm\" variant=\"outline\" loading={process.isPending} onClick={() => process.mutate()}>\n Processar pendências\n </Button>\n <Button size=\"sm\" loading={syncAll.isPending} onClick={() => syncAll.mutate()}>\n Sincronizar tudo\n </Button>\n </Flex>\n </Flex>\n\n {provider ? (\n <Box borderWidth=\"1px\" borderRadius=\"md\" p={4}>\n <Flex gap={2} wrap=\"wrap\" mb={3}>\n <Badge colorPalette={statusPalette(provider.status)}>{provider.status || \"—\"}</Badge>\n <Badge colorPalette={countActive(provider.queue) ? \"yellow\" : \"green\"}>\n Fila ativa: {countActive(provider.queue)}\n </Badge>\n <Badge colorPalette={countActive(provider.inbox) ? \"yellow\" : \"green\"}>\n Eventos ativos: {countActive(provider.inbox)}\n </Badge>\n <Badge colorPalette={statusPalette(provider.lastExecution?.status)}>\n Última execução: {provider.lastExecution?.status || \"sem histórico\"}\n </Badge>\n </Flex>\n <Text fontSize=\"sm\" color=\"gray.500\" mb={3}>\n Pendência mais antiga: {dateTime(provider.oldestPendingAt)}\n </Text>\n <Flex gap={2} wrap=\"wrap\">\n {(provider.resources ?? []).map((resource) => (\n <Button\n key={resource.key}\n size=\"sm\"\n variant=\"outline\"\n loading={syncResource.isPending}\n onClick={() => syncResource.mutate(resource.key)}\n >\n {resource.label}\n </Button>\n ))}\n </Flex>\n </Box>\n ) : <Text color=\"gray.500\">Provider Omie não registrado.</Text>}\n\n <Box>\n <Heading size=\"sm\" mb={3}>Listas declaradas</Heading>\n <Stack gap={2}>\n {(mappings.data?.lists ?? []).map((list) => {\n const latest = list.executions?.[0];\n return (\n <Box key={list.key} borderWidth=\"1px\" borderRadius=\"md\" p={3}>\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Text fontWeight=\"semibold\">{list.label || list.key}</Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n {list.mode || \"modo padrão\"} · {list.direction || \"direção padrão\"} · {list.targetModel || \"destino declarado\"}\n </Text>\n </Box>\n <Flex gap={2} wrap=\"wrap\">\n <Badge colorPalette={statusPalette(latest?.status)}>{latest?.status || \"não executada\"}</Badge>\n <Badge variant=\"outline\">{dateTime(latest?.lastCompletedAt)}</Badge>\n </Flex>\n </Flex>\n </Box>\n );\n })}\n </Stack>\n </Box>\n\n <Box>\n <Heading size=\"sm\" mb={3}>Fila recente</Heading>\n <Stack gap={2}>\n {(queue.data ?? []).length ? queue.data?.map((ticket) => (\n <Box key={ticket._id} borderWidth=\"1px\" borderRadius=\"md\" p={3}>\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Text fontWeight=\"medium\">{ticket.handler}</Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n {ticket.resource || \"sem recurso\"} · tentativas {ticket.attempts ?? 0} · próxima {dateTime(ticket.nextAttemptAt)}\n </Text>\n {ticket.lastError?.message ? <Text fontSize=\"sm\" color=\"red.600\">{ticket.lastError.message}</Text> : null}\n </Box>\n <Badge colorPalette={statusPalette(ticket.status)}>{ticket.status}</Badge>\n </Flex>\n </Box>\n )) : <Text color=\"gray.400\">Nenhuma pendência Omie.</Text>}\n </Stack>\n </Box>\n\n {error ? <Text color=\"red.600\">{integrationErrorMessage(error)}</Text> : null}\n </Stack>\n );\n}\n\nfunction OmieWebhooksTab() {\n const { http } = useOonApi();\n const [instanceId, setInstanceId] = useState(\"default\");\n const [copied, setCopied] = useState(false);\n const configuration = useQuery({\n queryKey: [\"core-omie\", \"configuration\"],\n queryFn: async () => ((await http.get(\"/integrations/providers/omie/configuration\")).data?.instances ?? []) as ProviderConfigurationInstance[],\n });\n const access = useQuery({\n queryKey: [\"core-omie\", \"webhook-access\", instanceId],\n enabled: Boolean(instanceId),\n queryFn: async () => (await http.get(\n `/integrations/providers/omie/configuration/${instanceId}/webhook`,\n )).data as { webhookPath?: string; instanceId?: string; rotated?: boolean },\n });\n const mappings = useQuery({\n queryKey: [\"core-omie\", \"mappings\"],\n queryFn: async () => (await http.get(\"/integrations/providers/omie/mappings\")).data as ProviderMappings,\n });\n const events = useQuery({\n queryKey: [\"core-omie\", \"events\"],\n queryFn: async () => ((await http.get(\"/integrations/events\", {\n params: { provider: \"omie\", limit: 20 },\n })).data?.results ?? []) as WebhookEvent[],\n });\n const rotate = useMutation({\n mutationFn: () => http.post(\n `/integrations/providers/omie/configuration/${instanceId}/webhook/rotate`,\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: async () => {\n setCopied(false);\n await Promise.all([access.refetch(), configuration.refetch()]);\n },\n });\n\n useEffect(() => {\n const first = configuration.data?.[0]?.instanceId;\n if (first && !configuration.data?.some((item) => item.instanceId === instanceId)) setInstanceId(first);\n }, [configuration.data, instanceId]);\n\n if (configuration.isLoading || mappings.isLoading || events.isLoading) return <LoadingScreen />;\n const blockingError = configuration.error || mappings.error || events.error;\n if (blockingError) return <ErrorState error={blockingError} />;\n\n const url = absoluteWebhookUrl(access.data?.webhookPath);\n const operationError = access.error || rotate.error;\n\n return (\n <Stack gap={5}>\n <Box>\n <Heading size=\"md\">Webhooks e gatilhos</Heading>\n <Text color=\"gray.500\">\n Copie a URL completa para o cadastro de webhook no Omie. O token é gerado automaticamente e pode ser rotacionado.\n </Text>\n </Box>\n\n <Box borderWidth=\"1px\" borderRadius=\"md\" p={4}>\n <Stack gap={3}>\n <Box maxW=\"360px\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>Instância</Text>\n <NativeSelect value={instanceId} onChange={setInstanceId}>\n {(configuration.data ?? []).map((instance) => (\n <option key={instance.instanceId} value={instance.instanceId}>\n {instance.label || instance.instanceId}\n </option>\n ))}\n </NativeSelect>\n </Box>\n\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>URL do webhook</Text>\n <Flex gap={2} align=\"center\" wrap=\"wrap\">\n <Input\n size=\"sm\"\n value={url}\n readOnly\n minW=\"320px\"\n flex=\"1\"\n placeholder={access.isLoading ? \"Gerando URL segura…\" : \"URL indisponível\"}\n />\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={!url}\n onClick={async () => {\n await copyText(url);\n setCopied(true);\n }}\n >\n {copied ? \"Link copiado\" : \"Copiar link\"}\n </Button>\n <Button\n size=\"sm\"\n colorPalette=\"red\"\n variant=\"outline\"\n loading={rotate.isPending}\n onClick={() => {\n if (typeof window === \"undefined\" || window.confirm(\n \"Gerar um novo token? A URL anterior deixará de receber eventos.\",\n )) rotate.mutate();\n }}\n >\n Gerar novo token\n </Button>\n </Flex>\n <Text fontSize=\"xs\" color=\"gray.500\" mt={2}>\n A rotação invalida imediatamente a URL anterior. Atualize o cadastro no Omie após gerar um novo token.\n </Text>\n </Box>\n </Stack>\n </Box>\n\n <Box>\n <Heading size=\"sm\" mb={3}>Gatilhos declarados</Heading>\n <Stack gap={2}>\n {(mappings.data?.webhooks ?? []).length ? mappings.data?.webhooks?.map((webhook) => (\n <Box key={`${webhook.eventType}:${webhook.resource || \"\"}`} borderWidth=\"1px\" borderRadius=\"md\" p={3}>\n <Text fontWeight=\"semibold\">{webhook.eventType}</Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n {webhook.resource || \"recurso genérico\"} → {(webhook.actions ?? [])\n .map((action) => action.handler)\n .filter(Boolean)\n .join(\", \") || \"sem ação declarada\"}\n </Text>\n </Box>\n )) : <Text color=\"gray.400\">Nenhum gatilho declarado pela Central.</Text>}\n </Stack>\n </Box>\n\n <Box>\n <Heading size=\"sm\" mb={3}>Eventos recebidos</Heading>\n <Stack gap={2}>\n {(events.data ?? []).length ? events.data?.map((event) => (\n <Box key={event._id} borderWidth=\"1px\" borderRadius=\"md\" p={3}>\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Text fontWeight=\"medium\">{event.eventType || \"Evento Omie\"}</Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n {event.resource || \"sem recurso\"} · recebido em {dateTime(event.receivedAt)} · tentativas {event.attempts ?? 0}\n </Text>\n {event.lastError?.message ? <Text fontSize=\"sm\" color=\"red.600\">{event.lastError.message}</Text> : null}\n </Box>\n <Badge colorPalette={statusPalette(event.status)}>{event.status}</Badge>\n </Flex>\n </Box>\n )) : <Text color=\"gray.400\">Nenhum webhook recebido.</Text>}\n </Stack>\n </Box>\n\n {operationError ? <Text color=\"red.600\">{integrationErrorMessage(operationError)}</Text> : null}\n </Stack>\n );\n}\n\nfunction diagnosticMessage(value: ExecutionDiagnostic) {\n return value.error?.message || value.message || \"Erro sem mensagem registrada.\";\n}\n\nfunction OmieHistoryTab() {\n const { http } = useOonApi();\n const [expandedId, setExpandedId] = useState<string | null>(null);\n const history = useQuery({\n queryKey: [\"core-omie\", \"history\"],\n queryFn: async () => ((await http.get(\"/integrations/history\", {\n params: { provider: \"omie\", limit: 30 },\n })).data?.results ?? []) as ExecutionEntry[],\n });\n\n if (history.isLoading) return <LoadingScreen />;\n if (history.error) return <ErrorState error={history.error} />;\n\n return (\n <Stack gap={4}>\n <Box>\n <Heading size=\"md\">Histórico</Heading>\n <Text color=\"gray.500\">Execuções, erros por registro e diagnóstico técnico sanitizado.</Text>\n </Box>\n <Stack gap={2}>\n {(history.data ?? []).length ? history.data?.map((execution) => {\n const expanded = expandedId === execution._id;\n const diagnostics = [...(execution.errors ?? [])];\n if (execution.error?.message && !diagnostics.some((item) => diagnosticMessage(item) === execution.error?.message)) {\n diagnostics.push({ error: execution.error });\n }\n return (\n <Box key={execution._id} borderWidth=\"1px\" borderRadius=\"md\" p={3}>\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Text fontWeight=\"semibold\">{execution.title}</Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n {execution.resource || \"sem recurso\"} · {dateTime(execution.startedAt)} · {execution.durationMs ?? 0} ms\n </Text>\n </Box>\n <Flex align=\"center\" gap={2} wrap=\"wrap\">\n {(execution.errorCount ?? diagnostics.length) > 0 ? (\n <Badge colorPalette=\"red\">{execution.errorCount ?? diagnostics.length} erro(s)</Badge>\n ) : null}\n <Badge colorPalette={statusPalette(execution.status)}>{execution.status}</Badge>\n <Button\n size=\"sm\"\n variant=\"outline\"\n aria-expanded={expanded}\n onClick={() => setExpandedId((current) => current === execution._id ? null : execution._id)}\n >\n {expanded ? \"Ocultar detalhes\" : \"Ver detalhes\"}\n </Button>\n </Flex>\n </Flex>\n\n {expanded ? (\n <Stack gap={3} mt={3} pt={3} borderTopWidth=\"1px\">\n {execution.summary && Object.keys(execution.summary).length ? (\n <Box>\n <Text fontWeight=\"semibold\" fontSize=\"sm\" mb={2}>Resumo</Text>\n <Flex gap={2} wrap=\"wrap\">\n {Object.entries(execution.summary).map(([key, value]) => (\n <Badge key={key} variant=\"outline\">{key}: {String(value ?? \"—\")}</Badge>\n ))}\n </Flex>\n </Box>\n ) : null}\n\n {diagnostics.length ? (\n <Box>\n <Text fontWeight=\"semibold\" fontSize=\"sm\" mb={2}>\n Erros por registro{execution.errorsLimited ? \" · visualização limitada\" : \"\"}\n </Text>\n <Stack gap={2}>\n {diagnostics.map((diagnostic, index) => (\n <Box\n key={`${diagnostic.index ?? index}:${diagnosticMessage(diagnostic)}`}\n borderWidth=\"1px\"\n borderColor=\"red.100\"\n borderRadius=\"md\"\n bg=\"red.50\"\n p={3}\n >\n <Text fontSize=\"xs\" color=\"gray.600\">\n Registro {diagnostic.index !== undefined ? diagnostic.index + 1 : index + 1}\n {diagnostic.externalKey !== undefined ? ` · chave ${String(diagnostic.externalKey)}` : \"\"}\n {(diagnostic.error?.code || diagnostic.code || diagnostic.error?.statusCode || diagnostic.statusCode)\n ? ` · código ${String(diagnostic.error?.code || diagnostic.code || diagnostic.error?.statusCode || diagnostic.statusCode)}`\n : \"\"}\n </Text>\n <Text color=\"red.700\">{diagnosticMessage(diagnostic)}</Text>\n </Box>\n ))}\n </Stack>\n </Box>\n ) : null}\n\n {[\n [\"Itens processados\", execution.items, execution.itemCount, execution.itemsLimited],\n [\"Chamadas sanitizadas\", execution.requests, execution.requestCount, execution.requestsLimited],\n [\"Metadados\", execution.metadata, undefined, false],\n ].map(([label, value, count, limited]) => value ? (\n <details key={String(label)}>\n <summary style={{ cursor: \"pointer\", fontWeight: 600 }}>\n {String(label)}{typeof count === \"number\" ? ` (${count})` : \"\"}{limited ? \" · visualização limitada\" : \"\"}\n </summary>\n <Box\n as=\"pre\"\n mt={2}\n p={3}\n borderRadius=\"md\"\n bg=\"gray.50\"\n overflowX=\"auto\"\n whiteSpace=\"pre-wrap\"\n fontSize=\"xs\"\n >\n {JSON.stringify(value, null, 2)}\n </Box>\n </details>\n ) : null)}\n </Stack>\n ) : null}\n </Box>\n );\n }) : <Text color=\"gray.400\">Nenhuma execução Omie registrada.</Text>}\n </Stack>\n </Stack>\n );\n}\n\nconst TABS: Array<{ id: OmieTab; label: string }> = [\n { id: \"configuration\", label: \"Configurações\" },\n { id: \"synchronization\", label: \"Sincronização\" },\n { id: \"webhooks\", label: \"Webhooks/Gatilhos\" },\n { id: \"history\", label: \"Histórico\" },\n];\n\nexport function CoreOmieIntegration() {\n const [tab, setTab] = useState<OmieTab>(\"configuration\");\n\n return (\n <Stack gap={5}>\n <Box>\n <Heading size=\"lg\">Integração Omie</Heading>\n <Text color=\"gray.500\">\n Configure credenciais, sincronizações, webhooks, gatilhos e diagnósticos da instância Omie.\n </Text>\n </Box>\n\n <Flex gap={2} wrap=\"wrap\" borderBottomWidth=\"1px\" pb={2}>\n {TABS.map((item) => (\n <Button\n key={item.id}\n size=\"sm\"\n variant={tab === item.id ? \"solid\" : \"ghost\"}\n onClick={() => setTab(item.id)}\n >\n {item.label}\n </Button>\n ))}\n </Flex>\n\n {tab === \"configuration\" ? <OmieConfigurationTab /> : null}\n {tab === \"synchronization\" ? <OmieSynchronizationTab /> : null}\n {tab === \"webhooks\" ? <OmieWebhooksTab /> : null}\n {tab === \"history\" ? <OmieHistoryTab /> : null}\n </Stack>\n );\n}\n","import type { CentralUiManifest, ManifestRuntime } from \"./manifest\";\nimport type { OonAppKind, OonCoreFrontConfig } from \"./types\";\nimport { manifestToConfig } from \"./manifest\";\nimport { start } from \"./start\";\nimport { createIntegrationModule } from \"./modules/integrations\";\n\nexport interface CentralAppManifest {\n $schema?: string;\n schemaVersion: 1;\n id: string;\n name: string;\n slug: string;\n appKind: OonAppKind;\n modules: Record<string, boolean>;\n capabilities: string[];\n compatibility: {\n core: {\n minVersion: string;\n maxVersionExclusive?: string;\n };\n };\n activation?: {\n enabled?: boolean;\n configurationVersion?: number;\n fields?: unknown[];\n };\n}\n\nexport type CentralUiOnlyManifest = Omit<CentralUiManifest, \"name\" | \"slug\" | \"appKind\" | \"auth\"> &\n Partial<Pick<CentralUiManifest, \"name\" | \"slug\" | \"appKind\" | \"auth\">>;\n\nexport interface CentralManifestBundle {\n app: CentralAppManifest;\n ui: CentralUiOnlyManifest;\n}\n\nexport function startCentralFromManifest(\n manifest: CentralManifestBundle,\n runtime: ManifestRuntime,\n): OonCoreFrontConfig {\n const legacyCompatibleUi: CentralUiManifest = {\n ...manifest.ui,\n name: manifest.app.name,\n slug: manifest.app.slug,\n appKind: manifest.app.appKind,\n };\n const config = manifestToConfig(legacyCompatibleUi, runtime);\n if (manifest.app.modules.integrations) {\n config.modules = [...(config.modules ?? []), createIntegrationModule()];\n }\n config.app = {\n ...config.app,\n id: manifest.app.id,\n name: manifest.app.name,\n title: manifest.app.name,\n kind: manifest.app.appKind,\n };\n const app = config.app as OonCoreFrontConfig[\"app\"] & {\n schemaVersion: number;\n modules: Record<string, boolean>;\n capabilities: string[];\n compatibility: CentralAppManifest[\"compatibility\"];\n };\n app.schemaVersion = manifest.app.schemaVersion;\n app.modules = manifest.app.modules;\n app.capabilities = manifest.app.capabilities;\n app.compatibility = manifest.app.compatibility;\n start(config);\n return config;\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 { 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","normalized","value","normalized","useEffect","useState","Box","Text","value","value","jsx","jsx","jsxs","useState","useEffect","Box","Text","useMemo","createContext","useCallback","useContext","useEffect","useState","createContext","useContext","useEffect","useState","jsx","jsx","createContext","value","useState","useCallback","useEffect","useContext","createContext","useCallback","useContext","useMemo","useState","jsx","normalized","value","jsx","useMemo","useState","Box","Heading","Stack","Text","useMutation","useQueryClient","value","value","useState","Box","Button","Flex","Input","Text","useQuery","Button","Flex","Text","jsx","jsxs","Box","Heading","Text","jsx","jsxs","jsx","jsxs","value","normalized","useState","useQuery","Box","Flex","Input","Text","Button","useEffect","useMemo","useState","Box","Button","Flex","Heading","Input","NativeSelect","Stack","Text","value","normalized","useEffect","useMemo","useState","Box","Button","Flex","Input","Spinner","Text","useQuery","jsx","jsxs","SearchIcon","ChevronIcon","value","useMemo","useState","useEffect","useQuery","start","Box","Button","Text","Flex","Input","Spinner","Box","Text","value","unique","jsx","jsxs","Box","Text","value","normalized","jsx","jsxs","normalize","value","Text","useState","useMemo","useEffect","Box","NativeSelect","Input","Flex","Heading","Button","Stack","useEffect","useMemo","useRef","useState","Box","Button","Flex","Heading","IconButton","Text","useQuery","useQueryClient","useEffect","useMemo","useState","Box","Button","Flex","Input","NativeSelect","SimpleGrid","Stack","Text","Textarea","SimpleGrid","Box","Text","Badge","useQuery","meta","Fragment","jsx","jsxs","value","format","useQuery","SimpleGrid","Box","Text","Badge","useMemo","useState","Badge","Box","Button","Flex","Table","Text","useQuery","useQueryClient","useState","Box","Button","Text","value","createContext","useContext","jsx","jsx","jsxs","Box","Text","unwrap","value","normalized","useState","Button","jsx","jsxs","EditIcon","TrashIcon","useQueryClient","useQuery","useMemo","useState","Text","Box","Flex","Button","Table","value","Badge","jsx","jsxs","toValue","value","initialFieldValue","initialReactiveValues","isMultiline","resolveReference","Text","ErrorText","Box","NativeSelect","Textarea","Input","SimpleGrid","useMemo","useState","useEffect","Stack","Flex","Button","jsx","jsxs","useQueryClient","useState","useRef","useQuery","useEffect","useMemo","Flex","Box","Text","Heading","IconButton","Button","jsx","jsxs","useQueryClient","useState","useMutation","Stack","Box","Text","Heading","jsx","useEffect","useRef","useState","Badge","Box","Button","Flex","Heading","Input","NativeSelect","Stack","Text","useMutation","useQuery","useQueryClient","value","jsx","jsxs","mergeFormFields","value","normalized","Box","NativeSelect","Input","useQueryClient","useState","useRef","useQuery","useEffect","useMutation","Flex","Stack","Text","Heading","Button","Badge","Box","Heading","SimpleGrid","Stack","Text","useQuery","jsx","jsxs","value","format","useQuery","Stack","Box","Text","Heading","SimpleGrid","useMemo","useState","Box","Button","Flex","Heading","Input","Text","VStack","useMutation","useQuery","useQueryClient","Fragment","jsx","jsx","jsxs","value","useQueryClient","useState","useQuery","useMemo","useMutation","Box","Heading","Text","Flex","Input","Button","VStack","Box","Button","Flex","Heading","Stack","Text","Box","Text","Fragment","jsx","jsxs","normalized","Box","Button","Flex","Heading","Spinner","Text","jsx","jsxs","Box","Flex","Heading","Text","Button","Spinner","jsx","jsxs","Text","Flex","Box","Stack","Heading","Button","CorePage","jsx","slug","value","CorePage","Navigate","Box","Button","Flex","Spacer","Text","useNavigate","Box","Flex","Stack","Text","jsx","jsxs","Box","Flex","Text","Stack","jsx","jsxs","useNavigate","Flex","Box","Text","Spacer","Button","jsx","Box","Button","Flex","Heading","Text","VStack","useNavigate","jsx","jsxs","useNavigate","Flex","Box","VStack","Text","Heading","Button","useLocation","Fragment","jsx","useLocation","useState","Box","Button","Flex","Heading","Input","Text","VStack","Navigate","useLocation","jsx","jsxs","value","useLocation","useState","Navigate","Flex","Box","VStack","Text","Heading","Input","Button","useState","Box","Button","Flex","Heading","Input","Text","VStack","Navigate","jsx","jsxs","useState","Navigate","Flex","Box","VStack","Text","Heading","Input","Button","useEffect","useState","Box","Button","Heading","Input","Text","VStack","Fragment","jsx","jsxs","encodeBasicCredentials","useState","useEffect","Box","Text","Input","Button","VStack","Heading","Fragment","jsx","Navigate","jsx","Navigate","jsx","Navigate","jsx","useMemo","storage","tenantStorage","http","router","jsx","Stack","useEffect","useState","Badge","Box","Button","Flex","Heading","Input","Stack","Text","useMutation","useQuery","jsx","jsxs","value","normalized","primitiveText","Box","Stack","Text","Flex","Badge","useState","useQuery","useEffect","useMutation","Input","Button","Heading","Badge","Box","Flex","Heading","Stack","Text","useQuery","jsx","jsxs","dateTime","value","useQuery","Text","Box","Heading","Stack","Flex","Badge","useEffect","useMemo","useState","Badge","Box","Button","Flex","Heading","Input","Stack","Text","useMutation","useQuery","jsx","jsxs","dateTime","value","statusPalette","normalized","integrationErrorMessage","diagnosticMessage","NativeSelect","Box","Stack","Text","Flex","Button","Badge","useState","useEffect","useQuery","useMutation","totalPages","useMemo","Heading","Input","useState","Button","Flex","Stack","useEffect","useState","Badge","Box","Button","Flex","Heading","Input","Stack","Text","useMutation","useQuery","jsx","jsxs","dateTime","value","statusPalette","normalized","integrationErrorMessage","countActive","NativeSelect","useQuery","useState","useEffect","useMutation","Stack","Box","Heading","Text","Flex","Input","Badge","Button","provider","diagnosticMessage","jsx","jsxs","useState","Stack","Flex","Button","jsx","jsxs","Stack","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/security/tenantStorage.ts","../src/security/AcceptInviteCentralPage.tsx","../src/api/ApiProvider.tsx","../src/api/coreClient.ts","../src/api/resourceClient.ts","../src/security/AcceptInvitePage.tsx","../src/app/OonProviders.tsx","../src/config/queryClient.ts","../src/config/theme.ts","../src/security/AuthProvider.tsx","../src/security/ActivationProvider.tsx","../src/security/TenantProvider.tsx","../src/components/CoreCollection.tsx","../src/components/internal/referenceUtils.ts","../src/components/internal/fieldUtils.ts","../src/components/internal/DataGrid.tsx","../src/shell/LoadingScreen.tsx","../src/shell/ErrorState.tsx","../src/components/internal/DynamicForm.tsx","../src/domain/domainExpressions.ts","../src/components/internal/ReferenceSelect.tsx","../src/components/internal/CoreErrorAlert.tsx","../src/components/internal/actionError.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/CoreRowAction.tsx","../src/components/internal/conditions.ts","../src/components/internal/DetailRecordContext.tsx","../src/components/CoreDocument.tsx","../src/components/CorePipeline.tsx","../src/pipelineTicket.ts","../src/components/internal/pipelineBoardScroll.ts","../src/components/CoreDashboard.tsx","../src/components/CoreUsersAccess.tsx","../src/security/PermissionGate.tsx","../src/components/ui-v2/CorePage.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","../package.json","../src/runtime/versionInfo.ts","../src/shell/AuthenticatedLayout.tsx","../src/security/AccessDeniedPage.tsx","../src/security/AppAccessGuard.tsx","../src/security/LoginPage.tsx","../src/security/FirstAccessPage.tsx","../src/security/ActivationPage.tsx","../src/security/RouteGuard.tsx","../src/security/ActivationGuard.tsx","../src/components/internal/pipelineBoardLayout.ts","../src/manifest.ts","../src/modules/integrations.tsx","../src/components/CoreIntegration.tsx","../src/components/CoreIntegrationMappings.tsx","../src/components/CoreIntegrationTickets.tsx","../src/components/CoreOmieIntegrationWorkspace.tsx","../src/components/CoreOmieIntegration.tsx","../src/appManifest.ts","../src/define/views.ts","../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\";\nimport { installPipelineBoardLayoutStyles } from \"./components/internal/pipelineBoardLayout\";\n\nfunction validateConfig(config: OonCoreFrontConfig) {\n if (!config?.app?.id) throw new Error(\"oonCoreFront.start: config.app.id é obrigatório.\");\n if (!config?.api?.baseUrl) throw new Error(\"oonCoreFront.start: config.api.baseUrl é obrigatório.\");\n}\n\nfunction applyDocumentMeta(config: OonCoreFrontConfig) {\n if (config.app.title) document.title = config.app.title;\n if (config.app.favicon) {\n let link = document.querySelector<HTMLLinkElement>('link[rel=\"icon\"]');\n if (!link) {\n link = document.createElement(\"link\");\n link.rel = \"icon\";\n document.head.appendChild(link);\n }\n link.href = config.app.favicon;\n }\n}\n\nfunction hardenConsole(config: OonCoreFrontConfig) {\n if (config.security?.disableConsoleInProduction && import.meta.env?.PROD) {\n const noop = () => {};\n console.log = noop;\n console.debug = noop;\n console.info = noop;\n }\n}\n\n/**\n * 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 installPipelineBoardLayoutStyles();\n hardenConsole(config);\n\n const rootId = config.rootElementId ?? \"root\";\n const el = document.getElementById(rootId);\n if (!el) throw new Error(`oonCoreFront.start: elemento #${rootId} não encontrado no DOM.`);\n\n createRoot(el).render(\n <StrictMode>\n <OonApp config={config} />\n </StrictMode>\n );\n}\n\n/** 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, OonRoute } from \"../types\";\nimport { createRestClient } from \"../api/createRestClient\";\nimport { createTokenStorage } from \"../security/tokenStorage\";\nimport { createTenantStorage } from \"../security/tenantStorage\";\nimport { AcceptInviteCentralPage } from \"../security/AcceptInviteCentralPage\";\nimport { OonProviders } from \"./OonProviders\";\nimport { resolveRegistry } from \"./moduleRegistry\";\nimport { createOonRouter } from \"./createOonRouter\";\n\nfunction localLoginUrl(): string {\n const current = `${window.location.pathname}${window.location.search}`;\n return `/login?redirect=${encodeURIComponent(current)}`;\n}\n\n/**\n * Raiz da aplicação Core. Cria o cliente REST, resolve rotas/menu e monta os\n * providers. Respostas 401 seguem para o login; 403 é tratado pelo AuthProvider.\n */\nexport function OonApp({ config }: { config: OonCoreFrontConfig }) {\n const { http, storage, tenantStorage, router } = useMemo(() => {\n const storage = createTokenStorage(config.app.id);\n const tenantStorage = createTenantStorage(config.app.id);\n 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 getTenantId: () => tenantStorage.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 resolved = resolveRegistry(config);\n const routes: OonRoute[] = [...resolved.routes];\n if (!routes.some((route) => route.path === \"/accept-invite\")) {\n routes.push({\n path: \"/accept-invite\",\n public: true,\n element: <AcceptInviteCentralPage />,\n });\n }\n\n const router = createOonRouter({\n app: config.app,\n menu: resolved.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, tenantStorage, router };\n }, [config]);\n\n return (\n <OonProviders\n config={config}\n http={http}\n storage={storage}\n tenantStorage={tenantStorage}\n >\n <RouterProvider router={router} />\n </OonProviders>\n );\n}\n","import 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 /** Lê a seleção atual de tenant. O backend continua sendo a autoridade. */\n getTenantId?: () => 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 * - seleção de tenant via x-oon-tenant-id;\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, getTenantId, 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 const tenantId = getTenantId?.();\n if (tenantId) config.headers[\"x-oon-tenant-id\"] = tenantId;\n else delete config.headers[\"x-oon-tenant-id\"];\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 technicalMessage?: string;\n [key: string]: unknown;\n};\n\ntype ErrorPayload = {\n code?: string;\n message?: string;\n details?: unknown;\n requestId?: string;\n error?: ErrorEnvelope | string;\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 string | ErrorPayload | undefined;\n const responseRequestId = (\n err.response?.headers?.[\"x-request-id\"]\n ?? err.response?.headers?.[\"x-correlation-id\"]\n ) as string | 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: responseRequestId,\n };\n }\n\n const rawError = data?.error;\n const envelope = rawError && typeof rawError === \"object\" ? rawError : undefined;\n const legacyDetails = envelope && envelope.details === undefined && envelope.field\n ? envelope\n : undefined;\n const rawTechnicalDetails = typeof rawError === \"string\"\n ? { technicalMessage: rawError }\n : undefined;\n\n return {\n code: envelope?.code || data?.code || codeFromStatus(status),\n message: envelope?.message || data?.message || err.message || \"Erro inesperado.\",\n status,\n details: envelope?.details ?? legacyDetails ?? data?.details ?? rawTechnicalDetails,\n requestId: envelope?.requestId || data?.requestId || responseRequestId,\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","export interface TenantStorage {\n get(): string | null;\n set(tenantId: string): void;\n clear(): void;\n}\n\nfunction normalize(value: unknown): string | null {\n const normalized = String(value ?? \"\").trim();\n return normalized || null;\n}\n\n/**\n * Guarda somente a seleção de tenant do usuário. O valor persistido não é\n * autoridade: o backend/Control Plane precisa validar o header a cada request.\n */\nexport function createTenantStorage(appId: string): TenantStorage {\n const key = `oon:${appId}:tenant`;\n return {\n get() {\n if (typeof window === \"undefined\") return null;\n return normalize(window.localStorage.getItem(key));\n },\n set(tenantId) {\n if (typeof window === \"undefined\") return;\n const value = normalize(tenantId);\n if (!value) {\n window.localStorage.removeItem(key);\n return;\n }\n window.localStorage.setItem(key, value);\n },\n clear() {\n if (typeof window !== \"undefined\") window.localStorage.removeItem(key);\n },\n };\n}\n","import { useEffect, useState } from \"react\";\nimport { Box, Text } from \"@chakra-ui/react\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { AcceptInvitePage } from \"./AcceptInvitePage\";\n\ninterface PublicRbacInfo {\n central?: { appCode: string; name: string };\n}\n\nexport function AcceptInviteCentralPage() {\n const { http } = useOonApi();\n const [centralName, setCentralName] = useState(\"Central Oon\");\n\n useEffect(() => {\n let active = true;\n http.get<PublicRbacInfo>(\"/core/rbac\")\n .then((response) => {\n if (active && response.data.central?.name) setCentralName(response.data.central.name);\n })\n .catch(() => undefined);\n return () => { active = false; };\n }, [http]);\n\n return (\n <Box bg=\"#F5F8FA\" minH=\"100vh\" pt={4}>\n <Box mx=\"auto\" maxW=\"480px\" px={4} textAlign=\"center\">\n <Text fontSize=\"sm\" fontWeight=\"700\">Convite para: {centralName}</Text>\n </Box>\n <AcceptInvitePage />\n </Box>\n );\n}\n","import { 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 { useEffect, useState, type FormEvent } from \"react\";\nimport { Box, Button, Flex, Heading, Input, Text, VStack } from \"@chakra-ui/react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { useOonApi } from \"../api/ApiProvider\";\n\ninterface InvitationInfo {\n email: string;\n name?: string;\n roleCode: string;\n roleName?: string;\n expiresAt: string;\n}\n\nexport function AcceptInvitePage() {\n const { http } = useOonApi();\n const location = useLocation();\n const token = new URLSearchParams(location.search).get(\"token\") || \"\";\n const [invitation, setInvitation] = useState<InvitationInfo | null>(null);\n const [password, setPassword] = useState(\"\");\n const [confirm, setConfirm] = useState(\"\");\n const [message, setMessage] = useState<string | null>(null);\n const [done, setDone] = useState(false);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let active = true;\n if (!token) {\n setMessage(\"Link de convite inválido.\");\n setLoading(false);\n return;\n }\n http.get<{ invitation: InvitationInfo }>(`/core/invitations/${encodeURIComponent(token)}`)\n .then((response) => { if (active) setInvitation(response.data.invitation); })\n .catch(() => { if (active) setMessage(\"Este convite é inválido, expirou ou já foi utilizado.\"); })\n .finally(() => { if (active) setLoading(false); });\n return () => { active = false; };\n }, [http, token]);\n\n async function submit(event: FormEvent) {\n event.preventDefault();\n setMessage(null);\n if (password.length < 8) {\n setMessage(\"A senha deve possuir pelo menos 8 caracteres.\");\n return;\n }\n if (password !== confirm) {\n setMessage(\"As senhas informadas não conferem.\");\n return;\n }\n try {\n await http.post(`/core/invitations/${encodeURIComponent(token)}/accept`, { password });\n setDone(true);\n setMessage(\"Convite aceito e senha definida. Você já pode entrar na Central.\");\n } catch (error: any) {\n setMessage(error?.message || \"Não foi possível concluir o convite.\");\n }\n }\n\n return (\n <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box width=\"100%\" maxW=\"480px\" bg=\"white\" borderWidth=\"1px\" borderRadius=\"18px\" p={{ base: 6, md: 9 }}>\n <VStack align=\"stretch\" gap={5}>\n <Box>\n <Text color=\"#39BFED\" fontSize=\"xs\" fontWeight=\"700\" textTransform=\"uppercase\">Central Oon</Text>\n <Heading mt={2} size=\"lg\">Aceitar convite</Heading>\n </Box>\n\n {loading ? <Text>Validando convite…</Text> : null}\n {invitation && !done ? (\n <>\n <Box bg=\"gray.50\" borderRadius=\"md\" p={4}>\n <Text fontWeight=\"700\">{invitation.name || invitation.email}</Text>\n <Text fontSize=\"sm\">{invitation.email}</Text>\n <Text fontSize=\"sm\" color=\"gray.600\">Perfil: {invitation.roleName || invitation.roleCode}</Text>\n </Box>\n <form onSubmit={(event) => void submit(event)}>\n <VStack align=\"stretch\" gap={4}>\n <Box>\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Nova senha</Text>\n <Input type=\"password\" autoComplete=\"new-password\" value={password} onChange={(event) => setPassword(event.target.value)} required />\n </Box>\n <Box>\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Confirmar senha</Text>\n <Input type=\"password\" autoComplete=\"new-password\" value={confirm} onChange={(event) => setConfirm(event.target.value)} required />\n </Box>\n <Button type=\"submit\">Concluir primeiro acesso</Button>\n </VStack>\n </form>\n </>\n ) : null}\n\n {message ? <Box role=\"status\" bg={done ? \"green.50\" : \"red.50\"} borderRadius=\"md\" p={3}><Text fontSize=\"sm\">{message}</Text></Box> : null}\n {done ? <Button asChild><Link to=\"/login\">Ir para o login</Link></Button> : null}\n </VStack>\n </Box>\n </Flex>\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 { TenantProvider } from \"../security/TenantProvider\";\nimport type { TokenStorage } from \"../security/tokenStorage\";\nimport type { TenantStorage } from \"../security/tenantStorage\";\n\nexport interface OonProvidersProps {\n config: OonCoreFrontConfig;\n http: AxiosInstance;\n storage: TokenStorage;\n tenantStorage: TenantStorage;\n children: ReactNode;\n}\n\n/**\n * Monta, em ordem, todos os providers globais. Nenhuma Central cliente deve\n * montar QueryClient/Chakra/Auth/Api/Tenant manualmente.\n *\n * Ordem: QueryClient -> Chakra -> Api -> Activation -> Tenant -> Auth.\n */\nexport function OonProviders({\n config,\n http,\n storage,\n tenantStorage,\n children,\n}: OonProvidersProps) {\n const queryClient = useMemo(() => createOonQueryClient(), []);\n const 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 <TenantProvider http={http} storage={tenantStorage}>\n <AuthProvider http={http} storage={storage} auth={config.auth} loginUrl={loginUrl}>\n {children}\n </AuthProvider>\n </TenantProvider>\n </ActivationProvider>\n </ApiProvider>\n </ChakraProvider>\n </QueryClientProvider>\n );\n}\n","import { QueryClient } from \"@tanstack/react-query\";\n\nconst QUERY_STALE_TIME_MS = 5 * 1000;\nconst QUERY_REFETCH_INTERVAL_MS = 10 * 1000;\n\n/**\n * QueryClient padrão do Core.\n *\n * A Central é uma interface operacional: listas e datagrids precisam refletir\n * rapidamente alterações feitas por automações, webhooks e outros usuários.\n * Por isso, consultas ativas ficam obsoletas em poucos segundos e são\n * revalidadas periodicamente enquanto a aba estiver visível.\n */\nexport function createOonQueryClient(): QueryClient {\n return new QueryClient({\n defaultOptions: {\n queries: {\n retry: 1,\n staleTime: QUERY_STALE_TIME_MS,\n refetchInterval: QUERY_REFETCH_INTERVAL_MS,\n refetchIntervalInBackground: false,\n refetchOnMount: \"always\",\n refetchOnReconnect: \"always\",\n refetchOnWindowFocus: \"always\",\n },\n mutations: {\n retry: 0,\n },\n },\n });\n}\n","import { 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 {\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 | \"first-access\"\n | \"unauthenticated\"\n | \"forbidden\"\n | \"error\";\n\ninterface AuthContextValue {\n user: OonUser | null;\n roles: string[];\n capabilities: string[];\n permissions: string[];\n status: AuthStatus;\n isAuthenticated: boolean;\n hasPermission: (permission?: string | string[]) => boolean;\n login: (email: string, password: string) => Promise<void>;\n completeFirstAccess: (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 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 unique(values: string[]): string[] {\n return values.filter((item, index, all) => Boolean(item) && all.indexOf(item) === index);\n}\n\nfunction extractCapabilities(user: OonUser | null): string[] {\n if (!user) return [];\n return unique([\n ...normalizeList(user.capabilities),\n ...normalizeList(user.permissoes?.capabilities),\n ...normalizeList(user.aplicativo?.capabilities),\n ...normalizeList(user.aplicativo?.permissoes?.capabilities),\n ]);\n}\n\nfunction explicitPermissions(user: OonUser | null): string[] | null {\n if (!user) return [];\n const value = (user as OonUser & { permissions?: string[] }).permissions;\n return Array.isArray(value) ? unique(value.map(String)) : null;\n}\n\nexport function can(\n user: OonUser | null,\n permission?: string | string[],\n): boolean {\n if (!permission) return true;\n const required = Array.isArray(permission) ? permission : [permission];\n if (!required.length) return true;\n\n const canonical = explicitPermissions(user);\n if (canonical) {\n return canonical.includes(\"*\") || required.some((value) => canonical.includes(value));\n }\n\n // Compatibilidade com backends anteriores ao RBAC canônico.\n const roles = unique(normalizeList((user as OonUser & { roleCode?: string })?.roleCode).concat(normalizeList(user?.tipo)));\n const capabilities = extractCapabilities(user);\n if (roles.includes(\"admin\") || roles.includes(\"master\")) return true;\n return required.some((value) => roles.includes(value) || capabilities.includes(value));\n}\n\nexport function AuthProvider({ http, storage, auth, loginUrl, children }: 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 applyUser = useCallback((next: OonUser) => {\n setUser(next);\n const firstAccess = Boolean(\n (next as OonUser & { mustChangePassword?: boolean; firstAccessPending?: boolean }).mustChangePassword ||\n (next as OonUser & { firstAccessPending?: boolean }).firstAccessPending,\n );\n setStatus(firstAccess ? \"first-access\" : \"authenticated\");\n }, []);\n\n const applyValidationError = useCallback(\n (error: unknown) => {\n const currentStatus = errorStatus(error);\n setUser(null);\n if (currentStatus === 403) {\n setStatus(\"forbidden\");\n return;\n }\n if (currentStatus === 401) {\n storage.clear();\n setStatus(\"unauthenticated\");\n redirectToExternalLogin();\n return;\n }\n setStatus(\"error\");\n },\n [storage, redirectToExternalLogin],\n );\n\n const validateSession = useCallback(async () => {\n const response = await http.get<{ usuario: OonUser }>(\"/auth/validar-token\");\n applyUser(response.data.usuario);\n }, [http, applyUser]);\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 try {\n const response = await http.post<{ token: string }>(\n \"/auth/autenticar\",\n {},\n { headers: { Authorization: `Basic ${encodeBasicCredentials(email, password)}` } },\n );\n if (!response.data.token) {\n const error: OonError = { code: \"AUTH_TOKEN_MISSING\", message: \"Token não retornado pelo backend.\", status: 502 };\n throw error;\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 completeFirstAccess = useCallback(async (password: string) => {\n await http.post(\"/auth/first-access/password\", { password });\n await validateSession();\n }, [http, validateSession]);\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 if (activation && ![\"active\", \"error\"].includes(activation.status)) {\n setUser(null);\n setStatus(\"unauthenticated\");\n return;\n }\n const incoming = captureTokenFromUrl(tokenParam);\n const stored = storage.get();\n const token = incoming ?? devToken ?? stored;\n if (token && token !== stored) storage.set(token);\n if (!token) {\n setUser(null);\n setStatus(\"unauthenticated\");\n redirectToExternalLogin();\n return;\n }\n setStatus(\"loading\");\n http.get<{ usuario: OonUser }>(\"/auth/validar-token\")\n .then((response) => {\n if (!active) return;\n applyUser(response.data.usuario);\n })\n .catch((error) => {\n if (!active) return;\n applyValidationError(error);\n });\n return () => { active = false; };\n }, [http, storage, tokenParam, devToken, redirectToExternalLogin, applyValidationError, applyUser, activation?.status]);\n\n const roleCode = String((user as OonUser & { roleCode?: string })?.roleCode || user?.tipo || \"\");\n const roles = roleCode ? [roleCode] : [];\n const capabilities = extractCapabilities(user);\n const permissions = explicitPermissions(user) ?? capabilities;\n const hasPermission = useCallback(\n (permission?: string | string[]) => can(user, permission),\n [user],\n );\n\n const value: AuthContextValue = {\n user,\n roles,\n capabilities,\n permissions,\n status,\n isAuthenticated: status === \"authenticated\" || status === \"first-access\",\n hasPermission,\n login,\n completeFirstAccess,\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) throw new Error(\"useOonAuth deve ser usado dentro de <AuthProvider> (oonCoreFront.start).\");\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 {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport type { AxiosInstance } from \"axios\";\nimport type { TenantStorage } from \"./tenantStorage\";\n\nexport interface OonTenantContextValue {\n activeTenantId: string | null;\n switchTenant(tenantId: string): void;\n clearTenant(): void;\n}\n\nconst TenantContext = createContext<OonTenantContextValue | null>(null);\n\nexport interface TenantProviderProps {\n http: AxiosInstance;\n storage: TenantStorage;\n children: ReactNode;\n}\n\nfunction applyHeader(http: AxiosInstance, tenantId: string | null) {\n if (tenantId) {\n http.defaults.headers.common[\"x-oon-tenant-id\"] = tenantId;\n return;\n }\n delete http.defaults.headers.common[\"x-oon-tenant-id\"];\n}\n\n/**\n * Gerencia somente a seleção ativa. O backend continua sendo a autoridade e\n * precisa validar o tenant antes de materializar req.accessContext.\n */\nexport function TenantProvider({ http, storage, children }: TenantProviderProps) {\n const queryClient = useQueryClient();\n const [activeTenantId, setActiveTenantId] = useState<string | null>(() => storage.get());\n\n const replaceTenant = useCallback(\n (tenantId: string | null) => {\n const normalized = String(tenantId ?? \"\").trim() || null;\n if (normalized) storage.set(normalized);\n else storage.clear();\n applyHeader(http, normalized);\n setActiveTenantId(normalized);\n\n // Nunca reutilizar cache entre tenants. `clear()` remove queries inativas,\n // dados observados e mutations pendentes do contexto anterior.\n queryClient.clear();\n },\n [http, queryClient, storage],\n );\n\n const value = useMemo<OonTenantContextValue>(\n () => ({\n activeTenantId,\n switchTenant(tenantId) {\n if (!tenantId?.trim()) throw new Error(\"tenantId é obrigatório.\");\n replaceTenant(tenantId);\n },\n clearTenant() {\n replaceTenant(null);\n },\n }),\n [activeTenantId, replaceTenant],\n );\n\n return <TenantContext.Provider value={value}>{children}</TenantContext.Provider>;\n}\n\nexport function useOonTenant(): OonTenantContextValue {\n const value = useContext(TenantContext);\n if (!value) throw new Error(\"useOonTenant deve ser usado dentro de TenantProvider.\");\n return value;\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={list?.builtInActions?.create === false ? undefined : () => {\n setFormError(null);\n if (detailModal?.enabled) setDetailState({ open: true });\n else setFormState({ open: true });\n }}\n onEdit={list?.builtInActions?.edit === false ? undefined : (row) => {\n setFormError(null);\n if (detailModal?.enabled) setDetailState({ open: true, row });\n else setFormState({ open: true, row });\n }}\n onDelete={list?.builtInActions?.delete === false ? undefined : (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","const COMMON_LABEL_FIELDS = [\n \"nome\",\n \"razaoSocial\",\n \"razao_social\",\n \"descricao\",\n \"numero\",\n \"codigoIndividual\",\n \"codigo_individual\",\n \"codigo\",\n \"label\",\n \"email\",\n];\n\nfunction primitiveText(value: unknown): string | null {\n if (value == null || value === \"\") return null;\n if (typeof value === \"string\" || typeof value === \"number\") return String(value);\n return null;\n}\n\n/**\n * Resolve um rótulo humano para qualquer registro relacionado. Prioriza campos\n * conhecidos e depois os campos pesquisáveis expostos pela metadata.\n */\nexport function referenceOptionLabel(\n row: Record<string, unknown>,\n searchableFields: string[] = []\n): string {\n const ordered = [...COMMON_LABEL_FIELDS, ...searchableFields];\n const seenFields = new Set<string>();\n const seenValues = new Set<string>();\n const values: string[] = [];\n\n for (const field of ordered) {\n if (seenFields.has(field)) continue;\n seenFields.add(field);\n const text = primitiveText(row[field]);\n if (!text || seenValues.has(text)) continue;\n seenValues.add(text);\n values.push(text);\n if (values.length === 2) break;\n }\n\n if (values.length) return values.join(\" — \");\n return primitiveText(row._id) ?? primitiveText(row.id) ?? \"Registro sem identificação\";\n}\n\nexport function initialReferenceLabel(value: unknown): string {\n if (!value || typeof value !== \"object\") return \"\";\n return referenceOptionLabel(value as Record<string, unknown>);\n}\n\nexport function referenceId(row: Record<string, unknown>): string {\n return String(row._id ?? row.id ?? \"\");\n}\n","import type { FieldKind, FieldMeta, OonColumnDef, OonFormFieldDef } from \"../../types\";\nimport type { OonComputedFieldDefinition, OonReactiveFormField } from \"../../domain/domainExpressions\";\nimport { referenceOptionLabel } from \"./referenceUtils\";\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\nfunction formReadonly(field: FieldMeta): boolean {\n const raw = field as unknown as Record<string, unknown>;\n return Boolean(raw.readonly || raw.immutable || raw.computed);\n}\n\nfunction formComputed(field: FieldMeta): OonComputedFieldDefinition | undefined {\n const raw = field as unknown as Record<string, unknown>;\n if (!raw.computed || typeof raw.computed !== \"object\" || Array.isArray(raw.computed)) return undefined;\n return raw.computed as unknown as OonComputedFieldDefinition;\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 const computed = formComputed(field);\n const readonly = formReadonly(field);\n return {\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 ...(readonly ? { readonly: true } : {}),\n ...(computed ? { computed } : {}),\n };\n }) as Array<OonFormFieldDef & OonReactiveFormField>;\n}\n\n/**\n * Formata um valor de célula conforme o tipo declarado. Objetos populados de\n * campos relacionados são sempre convertidos para um rótulo humano, mesmo\n * quando uma coluna ou título sobrescreveu/omitiu o kind `ref`.\n */\nexport function formatCell(value: unknown, kind?: FieldKind): string {\n if (value == null || value === \"\") return \"—\";\n\n if (value && typeof value === \"object\" && !Array.isArray(value) && kind !== \"date\") {\n return referenceOptionLabel(value as Record<string, unknown>);\n }\n\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 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 {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 {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 </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 {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 {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 </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 {\n applyReactiveFormulas,\n buildDomainMutationPayload,\n type OonReactiveFormField,\n} from \"../../domain/domainExpressions\";\nimport { fieldLabel } from \"./fieldUtils\";\nimport { ReferenceSelect } from \"./ReferenceSelect\";\nimport { CoreErrorAlert } from \"./CoreErrorAlert\";\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 & OonReactiveFormField & {\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 initialReactiveValues(fields: ExtendedField[], initialValues?: Record<string, unknown>) {\n const initial = Object.fromEntries(fields.map((field) => [field.field, initialFieldValue(field, initialValues?.[field.field])]));\n return applyReactiveFormulas(fields, initial);\n}\n\nfunction validate(fields: ExtendedField[], values: Record<string, string>) {\n const errors: FieldErrors = {};\n fields.forEach((field) => {\n if (!field.readonly && !field.computed && 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 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, readonly }: { id: string; label: string; required?: boolean; readonly?: boolean }) {\n return <label htmlFor={id}><Text as=\"span\" display=\"block\" mb=\"6px\" color=\"#475467\" fontSize=\"11px\" fontWeight=\"600\">{label}{required && !readonly ? <Text as=\"span\" color=\"#DC2626\"> *</Text> : null}{readonly ? <Text as=\"span\" ml=\"5px\" color=\"#98A2B3\" fontSize=\"9px\" fontWeight=\"500\">somente leitura</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, readonly = false) => ({\n minH: \"37px\",\n px: \"10px\",\n py: \"8px\",\n color: \"#475467\",\n bg: readonly ? \"#F8FAFC\" : \"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: rawFields, initialValues, submitting, error, onSubmit, onCancel, onFieldChange }: DynamicFormProps) {\n const fields = rawFields as ExtendedField[];\n const initial = initialReactiveValues(fields, initialValues);\n const [values, setValues] = useState<Record<string, string>>(initial.values);\n const [formulaErrors, setFormulaErrors] = useState<FieldErrors>(initial.errors);\n const [errors, setErrors] = useState<FieldErrors>({});\n const [dismissed, setDismissed] = useState(false);\n const items = useMemo(() => buildItems(fields), [rawFields]);\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 selected = fields.find((field) => field.field === fieldName);\n if (selected?.readonly || selected?.computed) return;\n\n const dependentFields = fields.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 const reactive = applyReactiveFormulas(fields, next);\n setFormulaErrors(reactive.errors);\n return reactive.values;\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 setErrors({});\n onSubmit(buildDomainMutationPayload(fields, values));\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] ?? formulaErrors[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 readonly = Boolean(field.readonly || field.computed);\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} readonly={readonly} /> : 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 as=\"label\" display=\"flex\" minH=\"37px\" px=\"11px\" alignItems=\"center\" gap=\"8px\" color=\"#344054\" bg={readonly ? \"#F8FAFC\" : checked ? \"#F0F7FF\" : \"white\"} borderWidth=\"1px\" borderColor={message ? \"#DC2626\" : checked ? \"#8FC9E7\" : \"#D5DDE3\"} borderRadius=\"7px\" cursor={readonly ? \"not-allowed\" : \"pointer\"} transition=\"background .15s ease, border-color .15s ease\">\n <input id={id} type=\"checkbox\" checked={checked} disabled={readonly} aria-invalid={!!message} aria-describedby={errorId} style={{ width: 16, height: 16, accentColor: \"#0474AF\", cursor: readonly ? \"not-allowed\" : \"pointer\" }} onChange={(event) => change(field.field, event.currentTarget.checked ? checkedValue : uncheckedValue)} />\n <Text as=\"span\" fontSize=\"11px\" fontWeight=\"600\">{label}{field.required && !readonly ? <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 && !readonly} invalid={!!message} error={message} filters={reference.filters} emptyFields={field.referenceEmptyFields} disabled={readonly || 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\" disabled={readonly}><NativeSelect.Field id={id} aria-invalid={!!message} aria-describedby={errorId} value={values[field.field] ?? \"\"} {...controlProps(!!message, readonly)} 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\" disabled={readonly}><NativeSelect.Field id={id} aria-invalid={!!message} aria-describedby={errorId} value={values[field.field] ?? \"\"} {...controlProps(!!message, readonly)} 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\" readOnly={readonly} aria-invalid={!!message} aria-describedby={errorId} value={values[field.field] ?? \"\"} {...controlProps(!!message, readonly)} lineHeight=\"1.5\" onChange={(event) => change(field.field, event.currentTarget.value)} />);\n\n const mask = resolveInputMask(field);\n const numeric = [\"number\", \"currency\", \"currencyConverted\"].includes(field.kind ?? \"\");\n const type = mask ? \"text\" : field.kind === \"date\" ? \"date\" : numeric ? \"number\" : \"text\";\n const value = values[field.field] ?? \"\";\n return wrap(\n <Input id={id} type={type} step={type === \"number\" ? \"any\" : undefined} inputMode={inputModeForMask(mask)} maxLength={maxLengthForMask(mask)} autoComplete=\"off\" readOnly={readonly} aria-invalid={!!message} aria-describedby={errorId} value={mask ? formatMaskedValue(value, mask) : value} {...controlProps(!!message, readonly)} onChange={(event) => change(field.field, parseMaskedInput(event.currentTarget.value, mask))} />,\n );\n };\n\n const combinedErrors = { ...formulaErrors, ...errors };\n const invalid = fields.filter((field) => combinedErrors[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 <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\">Revise 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 })}: {combinedErrors[field.field]}</Button></li>)}</Box></Box> : null}\n {generic && !invalid.length ? <CoreErrorAlert error={error} /> : null}\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 <Box key={item.id} gridColumn=\"1 / -1\" p=\"12px\" bg=\"#FAFCFD\" borderWidth=\"1px\" borderColor=\"#E5E9ED\" borderRadius=\"9px\"><Text color=\"#344054\" fontSize=\"11px\" fontWeight=\"700\">{first.groupLabel ?? item.id}</Text>{first.groupDescription ? <Text mt=\"2px\" mb=\"10px\" color=\"#667085\" fontSize=\"10px\">{first.groupDescription}</Text> : <Box h=\"8px\" />}<Flex direction={inline ? \"row\" : \"column\"} wrap=\"wrap\" gap=\"9px\">{item.fields.map((field) => renderField(field, true))}</Flex></Box>;\n })}\n </SimpleGrid>\n </Stack>\n </Box>\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","export type OonDomainExpressionOperator =\n | \"add\"\n | \"subtract\"\n | \"multiply\"\n | \"divide\"\n | \"min\"\n | \"max\"\n | \"abs\"\n | \"negate\"\n | \"coalesce\"\n | \"eq\"\n | \"neq\"\n | \"gt\"\n | \"gte\"\n | \"lt\"\n | \"lte\"\n | \"and\"\n | \"or\"\n | \"not\"\n | \"present\"\n | \"in\";\n\nexport type OonDomainExpression =\n | { value: unknown }\n | { field: string }\n | { op: OonDomainExpressionOperator; args: OonDomainExpression[] };\n\nexport interface OonComputedFieldDefinition {\n expression: OonDomainExpression;\n precision?: number;\n nullAsZero?: boolean;\n}\n\nexport interface OonReactiveFormField {\n field: string;\n kind?: string;\n readonly?: boolean;\n computed?: OonComputedFieldDefinition;\n}\n\nexport interface ReactiveFormulaResult {\n values: Record<string, string>;\n errors: Record<string, string>;\n}\n\nexport class DomainExpressionError extends Error {\n readonly code: string;\n readonly field?: string;\n\n constructor(message: string, options: { code?: string; field?: string } = {}) {\n super(message);\n this.name = \"DomainExpressionError\";\n this.code = options.code ?? \"OON_DOMAIN_EXPRESSION_INVALID\";\n this.field = options.field;\n }\n}\n\nconst NUMERIC_KINDS = new Set([\"number\", \"currency\", \"currencyConverted\"]);\n\nfunction hasOwn(object: object, key: PropertyKey): boolean {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction isEmpty(value: unknown): boolean {\n return value === null || value === undefined || (typeof value === \"string\" && !value.trim());\n}\n\nfunction getFieldValue(record: Record<string, unknown>, fieldPath: string): unknown {\n const parts = String(fieldPath).split(\".\");\n let current: unknown = record;\n\n for (const part of parts) {\n if ([\"__proto__\", \"prototype\", \"constructor\"].includes(part)) return undefined;\n if (current === null || current === undefined || typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n\n return current;\n}\n\nfunction toNumber(value: unknown, context: { field?: string; nullAsZero?: boolean } = {}): number | null {\n if (isEmpty(value)) return context.nullAsZero ? 0 : null;\n const numeric = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(numeric)) {\n throw new DomainExpressionError(\n `A fórmula do campo ${context.field ?? \"calculado\"} recebeu um valor não numérico.`,\n { code: \"OON_DOMAIN_FORMULA_ERROR\", field: context.field },\n );\n }\n return numeric;\n}\n\nfunction numericArguments(\n args: OonDomainExpression[],\n record: Record<string, unknown>,\n context: { field?: string; nullAsZero?: boolean },\n): number[] | null {\n const values = args.map((arg) => evaluateDomainExpression(arg, record, context));\n if (!context.nullAsZero && values.some(isEmpty)) return null;\n return values.map((value) => toNumber(value, context) ?? 0);\n}\n\nfunction compareValues(leftValue: unknown, rightValue: unknown, operator: OonDomainExpressionOperator): boolean {\n let left = leftValue;\n let right = rightValue;\n\n if ([\"gt\", \"gte\", \"lt\", \"lte\"].includes(operator)) {\n const leftNumber = Number(left);\n const rightNumber = Number(right);\n if (Number.isFinite(leftNumber) && Number.isFinite(rightNumber)) {\n left = leftNumber;\n right = rightNumber;\n }\n }\n\n switch (operator) {\n case \"eq\": return Object.is(left, right);\n case \"neq\": return !Object.is(left, right);\n case \"gt\": return (left as number | string) > (right as number | string);\n case \"gte\": return (left as number | string) >= (right as number | string);\n case \"lt\": return (left as number | string) < (right as number | string);\n case \"lte\": return (left as number | string) <= (right as number | string);\n default: return false;\n }\n}\n\n/**\n * Avalia exatamente a mesma AST fechada aceita pelo backend. Esta função é\n * somente uma prévia de UX; o backend recalcula e valida toda mutação.\n */\nexport function evaluateDomainExpression(\n expression: OonDomainExpression,\n record: Record<string, unknown> = {},\n context: { field?: string; nullAsZero?: boolean } = {},\n): unknown {\n if (!expression || typeof expression !== \"object\" || Array.isArray(expression)) {\n throw new DomainExpressionError(\"Expressão declarativa inválida.\", { field: context.field });\n }\n\n if (hasOwn(expression, \"value\")) return (expression as { value: unknown }).value;\n if (hasOwn(expression, \"field\")) return getFieldValue(record, (expression as { field: string }).field);\n\n const operation = expression as { op: OonDomainExpressionOperator; args: OonDomainExpression[] };\n const args = Array.isArray(operation.args) ? operation.args : [];\n\n switch (operation.op) {\n case \"add\": {\n const values = numericArguments(args, record, context);\n return values === null ? null : values.reduce((total, value) => total + value, 0);\n }\n case \"subtract\": {\n const values = numericArguments(args, record, context);\n return values === null ? null : values.slice(1).reduce((total, value) => total - value, values[0] ?? 0);\n }\n case \"multiply\": {\n const values = numericArguments(args, record, context);\n return values === null ? null : values.reduce((total, value) => total * value, 1);\n }\n case \"divide\": {\n const values = numericArguments(args, record, context);\n if (values === null) return null;\n return values.slice(1).reduce((total, divisor) => {\n if (divisor === 0) {\n throw new DomainExpressionError(\n `A fórmula do campo ${context.field ?? \"calculado\"} tentou dividir por zero.`,\n { code: \"OON_DOMAIN_FORMULA_ERROR\", field: context.field },\n );\n }\n return total / divisor;\n }, values[0] ?? 0);\n }\n case \"min\": {\n const values = numericArguments(args, record, context);\n return values === null ? null : Math.min(...values);\n }\n case \"max\": {\n const values = numericArguments(args, record, context);\n return values === null ? null : Math.max(...values);\n }\n case \"abs\": {\n const values = numericArguments(args, record, context);\n return values === null ? null : Math.abs(values[0] ?? 0);\n }\n case \"negate\": {\n const values = numericArguments(args, record, context);\n return values === null ? null : -(values[0] ?? 0);\n }\n case \"coalesce\": {\n for (const arg of args) {\n const value = evaluateDomainExpression(arg, record, context);\n if (!isEmpty(value)) return value;\n }\n return null;\n }\n case \"eq\":\n case \"neq\":\n case \"gt\":\n case \"gte\":\n case \"lt\":\n case \"lte\":\n return compareValues(\n evaluateDomainExpression(args[0], record, context),\n evaluateDomainExpression(args[1], record, context),\n operation.op,\n );\n case \"and\":\n return args.every((arg) => Boolean(evaluateDomainExpression(arg, record, context)));\n case \"or\":\n return args.some((arg) => Boolean(evaluateDomainExpression(arg, record, context)));\n case \"not\":\n return !Boolean(evaluateDomainExpression(args[0], record, context));\n case \"present\":\n return !isEmpty(evaluateDomainExpression(args[0], record, context));\n case \"in\": {\n const value = evaluateDomainExpression(args[0], record, context);\n const list = evaluateDomainExpression(args[1], record, context);\n return Array.isArray(list) && list.some((item) => Object.is(item, value));\n }\n default:\n throw new DomainExpressionError(`Operador declarativo não suportado: ${String(operation.op)}.`, {\n field: context.field,\n });\n }\n}\n\nfunction roundValue(value: unknown, precision = 0): unknown {\n if (value === null || value === undefined) return value;\n const numeric = toNumber(value);\n if (numeric === null) return null;\n const factor = 10 ** precision;\n return Math.round((numeric + Number.EPSILON) * factor) / factor;\n}\n\nfunction expressionFieldReferences(expression: OonDomainExpression, references = new Set<string>()): Set<string> {\n if (hasOwn(expression, \"field\")) references.add((expression as { field: string }).field);\n if (hasOwn(expression, \"op\")) {\n for (const argument of (expression as { args?: OonDomainExpression[] }).args ?? []) {\n expressionFieldReferences(argument, references);\n }\n }\n return references;\n}\n\nfunction orderComputedFields(fields: OonReactiveFormField[]): OonReactiveFormField[] {\n const computed = fields.filter((field) => field.computed);\n const computedByName = new Map(computed.map((field) => [field.field, field]));\n const allNames = new Set(fields.map((field) => field.field));\n const visiting = new Set<string>();\n const visited = new Set<string>();\n const ordered: OonReactiveFormField[] = [];\n\n const visit = (field: OonReactiveFormField) => {\n if (visited.has(field.field)) return;\n if (visiting.has(field.field)) {\n throw new DomainExpressionError(`Dependência circular em campos calculados envolvendo ${field.field}.`, {\n field: field.field,\n });\n }\n\n visiting.add(field.field);\n for (const reference of expressionFieldReferences(field.computed!.expression)) {\n if (!allNames.has(reference)) {\n throw new DomainExpressionError(`A fórmula de ${field.field} referencia o campo inexistente ${reference}.`, {\n field: field.field,\n });\n }\n const dependency = computedByName.get(reference);\n if (dependency) visit(dependency);\n }\n visiting.delete(field.field);\n visited.add(field.field);\n ordered.push(field);\n };\n\n computed.forEach(visit);\n return ordered;\n}\n\nexport function coerceDomainFormValue(value: string, kind?: string): unknown {\n if (value === \"\") return undefined;\n if (NUMERIC_KINDS.has(kind ?? \"\")) return Number(value);\n if (kind === \"boolean\") return value === \"true\";\n return value;\n}\n\nfunction displayFormValue(value: unknown): string {\n if (value === null || value === undefined) return \"\";\n return String(value);\n}\n\n/** Recalcula a cadeia de campos computed para exibição imediata no formulário. */\nexport function applyReactiveFormulas(\n fields: OonReactiveFormField[],\n currentValues: Record<string, string>,\n): ReactiveFormulaResult {\n const values = { ...currentValues };\n const errors: Record<string, string> = {};\n const record: Record<string, unknown> = {};\n\n for (const field of fields) {\n record[field.field] = coerceDomainFormValue(values[field.field] ?? \"\", field.kind);\n }\n\n let ordered: OonReactiveFormField[];\n try {\n ordered = orderComputedFields(fields);\n } catch (error) {\n const issue = error instanceof DomainExpressionError ? error : new DomainExpressionError(String(error));\n if (issue.field) errors[issue.field] = issue.message;\n return { values, errors };\n }\n\n for (const field of ordered) {\n try {\n const computed = field.computed!;\n const value = evaluateDomainExpression(computed.expression, record, {\n field: field.field,\n nullAsZero: computed.nullAsZero !== false,\n });\n const normalized = value === null || value === undefined\n ? value\n : roundValue(value, computed.precision ?? 2);\n record[field.field] = normalized;\n values[field.field] = displayFormValue(normalized);\n } catch (error) {\n const issue = error instanceof DomainExpressionError ? error : new DomainExpressionError(String(error), { field: field.field });\n errors[field.field] = issue.message;\n }\n }\n\n return { values, errors };\n}\n\n/**\n * Remove campos controlados pelo servidor. O backend recebe somente entradas do\n * usuário e recalcula novamente os valores computed antes de persistir.\n */\nexport function buildDomainMutationPayload(\n fields: OonReactiveFormField[],\n values: Record<string, string>,\n): Record<string, unknown> {\n const payload: Record<string, unknown> = {};\n for (const field of fields) {\n if (field.readonly || field.computed) continue;\n const rawValue = values[field.field] ?? \"\";\n const value = coerceDomainFormValue(rawValue, field.kind);\n if (value !== undefined) payload[field.field] = value;\n else if (field.kind === \"ref\") payload[field.field] = null;\n }\n return payload;\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 initialId = useMemo(() => {\n if (initialValue && typeof initialValue === \"object\") {\n return referenceId(initialValue as Record<string, unknown>);\n }\n return String(initialValue ?? \"\");\n }, [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 (initialId === value && initialLabel) setSelectedLabel(initialLabel);\n }, [initialId, 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","import { Box, Text } from \"@chakra-ui/react\";\nimport { describeActionError } from \"./actionError\";\n\nexport function CoreErrorAlert({\n error,\n mt,\n}: {\n error: unknown;\n mt?: string | number;\n}) {\n const description = describeActionError(error);\n const details = description.context?.split(\" • \").filter(Boolean) ?? [];\n\n return (\n <Box\n role=\"alert\"\n mt={mt}\n p=\"10px 12px\"\n color=\"#B42318\"\n bg=\"#FEF3F2\"\n borderWidth=\"1px\"\n borderColor=\"#FECDCA\"\n borderRadius=\"7px\"\n fontSize=\"11px\"\n >\n <Text fontSize=\"11px\" fontWeight=\"500\">{description.message}</Text>\n {details.length ? (\n <Box as=\"details\" mt=\"5px\">\n <Box\n as=\"summary\"\n w=\"fit-content\"\n color=\"#9B1C1C\"\n cursor=\"pointer\"\n fontSize=\"10px\"\n fontWeight=\"600\"\n textDecoration=\"underline\"\n >\n Detalhes\n </Box>\n <Box\n as=\"ul\"\n mt=\"6px\"\n mb={0}\n pl=\"18px\"\n color=\"#7A271A\"\n fontFamily=\"mono\"\n fontSize=\"9px\"\n lineHeight=\"1.45\"\n overflowWrap=\"anywhere\"\n >\n {details.map((detail) => <li key={detail}>{detail}</li>)}\n </Box>\n </Box>\n ) : null}\n </Box>\n );\n}\n","export interface ActionErrorDescription {\n message: string;\n context?: string;\n}\n\ntype UnknownRecord = Record<string, unknown>;\n\nfunction asRecord(value: unknown): UnknownRecord | undefined {\n return value && typeof value === \"object\" ? value as UnknownRecord : undefined;\n}\n\nfunction firstText(...values: unknown[]): string | undefined {\n return values.find((value): value is string => typeof value === \"string\" && value.trim().length > 0)?.trim();\n}\n\nfunction firstNumber(...values: unknown[]): number | undefined {\n return values.find((value): value is number => typeof value === \"number\" && Number.isFinite(value));\n}\n\nfunction collectDetailMessages(value: unknown, visited = new WeakSet<object>(), depth = 0): string[] {\n if (depth > 4 || value == null) return [];\n if (typeof value === \"string\") return value.trim() ? [value.trim()] : [];\n if (Array.isArray(value)) {\n return value.flatMap((item) => collectDetailMessages(item, visited, depth + 1));\n }\n if (typeof value !== \"object\" || visited.has(value)) return [];\n visited.add(value);\n\n const record = value as UnknownRecord;\n const field = firstText(record.field, record.path, record.property, record.name);\n const message = firstText(record.message, record.msg, record.reason);\n const technicalMessage = firstText(record.technicalMessage);\n const index = firstText(record.index);\n const direct = [\n message ? (field ? `${field}: ${message}` : message) : undefined,\n technicalMessage,\n index ? `Índice: ${index}` : undefined,\n ].filter((item): item is string => Boolean(item));\n const nestedKeys = [\"details\", \"errors\", \"validation\", \"fields\"];\n const nested = nestedKeys.flatMap((key) => collectDetailMessages(record[key], visited, depth + 1));\n\n if (direct.length || nested.length) return [...direct, ...nested];\n\n return Object.entries(record)\n .filter(([key]) => ![\"code\", \"status\", \"statusCode\", \"requestId\"].includes(key))\n .flatMap(([, nestedValue]) => collectDetailMessages(nestedValue, visited, depth + 1));\n}\n\nfunction unique(values: string[]): string[] {\n return [...new Set(values.map((value) => value.trim()).filter(Boolean))];\n}\n\nexport function describeActionError(error: unknown): ActionErrorDescription {\n if (error instanceof Error) return { message: error.message };\n if (typeof error === \"string\") return { message: error };\n\n const record = asRecord(error);\n if (!record) return { message: \"Não foi possível executar a ação.\" };\n\n const nestedEnvelope = asRecord(record.error);\n const envelope = nestedEnvelope ?? record;\n const message = firstText(envelope.message, record.message) ?? \"Não foi possível executar a ação.\";\n const rawError = typeof record.error === \"string\" ? record.error : undefined;\n const details = unique(collectDetailMessages(envelope.details ?? record.details ?? rawError))\n .filter((detail) => detail !== message)\n .slice(0, 5);\n const code = firstText(envelope.code, record.code);\n const status = firstNumber(envelope.status, envelope.statusCode, record.status, record.statusCode);\n const requestId = firstText(envelope.requestId, record.requestId);\n const technical = [\n code ? `Código: ${code}` : undefined,\n status ? `HTTP: ${status}` : undefined,\n requestId ? `ID da requisição: ${requestId}` : undefined,\n ].filter((value): value is string => Boolean(value));\n const contextParts = [...details, ...technical];\n\n return {\n message,\n ...(contextParts.length ? { context: contextParts.join(\" • \") } : {}),\n };\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, useRef, useState, type ReactNode } from \"react\";\nimport { Box, Button, Flex, Heading, IconButton, 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 { formatCell, formFieldsFromMeta } from \"./fieldUtils\";\nimport { CoreTabbedDetail } from \"./CoreTabbedDetail\";\nimport { DetailRecordProvider } from \"./DetailRecordContext\";\nimport { resolveInitialDetailTab } from \"./manifestUtils\";\n\nexport function CoreDetailModal({ model, title, config, formFields, recordId, initialRecord, initialTab, relations, topActions, bottomActions, onClose, onSaved }: {\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 topActions?: ReactNode;\n bottomActions?: 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(resolveInitialDetailTab(config, recordId, initialTab));\n const [refreshTokens, setRefreshTokens] = useState<Record<string, number>>({});\n const [dirty, setDirty] = useState(false);\n const [confirmingClose, setConfirmingClose] = useState(false);\n const closeAfterSaveRef = useRef(false);\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 titleField = config.titleField ?? \"\";\n const titleFieldMeta = schema?.fields.find((field) => field.name === titleField);\n const displayTitle = parent?.[titleField] != null\n ? formatCell(parent[titleField], titleFieldMeta?.kind)\n : title;\n const activeIsForm = (config.tabs.find((tab) => tab.id === activeTab) ?? config.tabs[0])?.type === \"form\";\n const hasFormTab = config.tabs.some((tab) => tab.type === \"form\");\n const formId = `oon-detail-form-${model.replace(/[^a-zA-Z0-9_-]/g, \"-\")}`;\n\n const requestClose = () => {\n if (dirty) setConfirmingClose(true);\n else onClose();\n };\n\n const saveAndClose = () => {\n const form = document.getElementById(formId) as HTMLFormElement | null;\n if (!form) return;\n closeAfterSaveRef.current = true;\n setConfirmingClose(false);\n form.requestSubmit();\n };\n\n return (\n <DetailRecordProvider record={parent} setRecord={setParent}>\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\" display=\"flex\" flexDirection=\"column\" w={`min(${width}, 98vw)`} h=\"94vh\" maxH=\"94vh\" overflow=\"hidden\" bg=\"white\" borderRadius=\"14px\" boxShadow=\"0 24px 70px rgba(15,23,42,.24)\">\n <Flex minH=\"72px\" px=\"20px\" py=\"10px\" align=\"center\" justify=\"space-between\" gap={4} borderBottomWidth=\"1px\" borderColor=\"#E5E9ED\">\n <Box minW=\"160px\">\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 flex=\"1\" align=\"center\" justify=\"flex-end\" gap=\"8px\" wrap=\"wrap\">\n {recordId ? topActions : null}\n <IconButton aria-label=\"Fechar\" title=\"Fechar\" size=\"sm\" minW=\"32px\" h=\"32px\" borderRadius=\"full\" variant=\"ghost\" color=\"#475569\" fontSize=\"21px\" fontWeight=\"400\" lineHeight=\"1\" onClick={requestClose} _hover={{ bg: \"#F1F5F9\", color: \"#0F172A\" }}>×</IconButton>\n </Flex>\n </Flex>\n <Box flex=\"1\" minH={0} p=\"20px\" overflowY=\"auto\">\n {schemaQuery.isLoading || parentQuery.isLoading ? <Text>Carregando...</Text> : (\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 formId={formId}\n externalSubmit\n onDirtyChange={setDirty}\n onSaveFailed={() => {\n closeAfterSaveRef.current = false;\n }}\n onParentSaved={(saved) => {\n setParent(saved);\n setDirty(false);\n onSaved?.(saved);\n refresh([\"parent\"]);\n if (closeAfterSaveRef.current) {\n closeAfterSaveRef.current = false;\n onClose();\n }\n }}\n />\n )}\n </Box>\n <Flex flex=\"0 0 auto\" minH=\"64px\" px=\"20px\" py=\"10px\" align=\"center\" justify=\"space-between\" gap=\"12px\" bg=\"white\" borderTopWidth=\"1px\" borderColor=\"#E5E9ED\" boxShadow=\"0 -8px 24px rgba(15,23,42,.06)\">\n <Box>{recordId ? bottomActions : null}</Box>\n <Button type=\"submit\" form={formId} colorPalette=\"brand\" disabled={!hasFormTab || (!activeIsForm && !dirty) || schemaQuery.isLoading || parentQuery.isLoading}>Salvar</Button>\n </Flex>\n </Box>\n {confirmingClose ? (\n <Flex position=\"fixed\" inset={0} zIndex={1100} align=\"center\" justify=\"center\" p={4} bg=\"rgba(15,23,42,.58)\">\n <Box role=\"alertdialog\" aria-modal=\"true\" aria-labelledby=\"oon-unsaved-title\" w=\"min(520px, 94vw)\" p=\"22px\" bg=\"white\" borderRadius=\"12px\" boxShadow=\"0 24px 70px rgba(15,23,42,.28)\">\n <Heading id=\"oon-unsaved-title\" size=\"md\">Alterações não salvas</Heading>\n <Text mt=\"8px\" color=\"#667085\" fontSize=\"13px\">As informações preenchidas ainda não foram salvas. Você pode continuar editando, sair sem salvar ou salvar antes de fechar.</Text>\n <Flex mt=\"22px\" justify=\"flex-end\" gap=\"10px\" wrap=\"wrap\">\n <Button variant=\"ghost\" onClick={() => {\n closeAfterSaveRef.current = false;\n setConfirmingClose(false);\n }}>Continuar editando</Button>\n <Button variant=\"outline\" colorPalette=\"red\" onClick={() => {\n closeAfterSaveRef.current = false;\n setConfirmingClose(false);\n onClose();\n }}>Sair sem salvar</Button>\n <Button colorPalette=\"brand\" onClick={saveAndClose}>Salvar e sair</Button>\n </Flex>\n </Box>\n </Flex>\n ) : null}\n </Flex>\n </DetailRecordProvider>\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 {\n applyReactiveFormulas,\n buildDomainMutationPayload,\n type OonReactiveFormField,\n} from \"../../domain/domainExpressions\";\nimport { CoreSummaryCards } from \"./CoreSummaryCards\";\nimport { CoreRelatedGrid } from \"./CoreRelatedGrid\";\nimport { ReferenceSelect } from \"./ReferenceSelect\";\nimport { CoreErrorAlert } from \"./CoreErrorAlert\";\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 & OonReactiveFormField & {\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 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 initialReactiveValues(fields: ExtendedFormField[], parent: Record<string, unknown>) {\n const initial = Object.fromEntries(fields.map((field) => [field.field, initialFieldValue(field, parent[field.field])]));\n return applyReactiveFormulas(fields, initial);\n}\n\nfunction isMultiline(field: OonFormFieldDef) {\n return /observa|descricao|mensagem|detalhe|necessidade/i.test(field.field);\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.readonly && !field.computed && 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 const readonly = Boolean(field.readonly || field.computed);\n return (\n <label htmlFor={htmlFor}>\n <Text as=\"span\" display=\"block\" mb=\"5px\" color=\"#475467\" fontSize=\"11px\" fontWeight=\"600\">\n {label}{field.required && !readonly ? <Text as=\"span\" color=\"#DC2626\"> *</Text> : null}\n {readonly ? <Text as=\"span\" ml=\"5px\" color=\"#98A2B3\" fontSize=\"9px\" fontWeight=\"500\">somente leitura</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 readonly = Boolean(field.readonly || field.computed);\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 bg: readonly ? \"#F8FAFC\" : 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={readonly ? \"#F8FAFC\" : checked ? \"#F0F7FF\" : \"white\"}\n borderWidth=\"1px\"\n borderColor={error ? \"#DC2626\" : checked ? \"#8FC9E7\" : \"#D5DDE3\"}\n borderRadius=\"7px\"\n cursor={readonly ? \"not-allowed\" : \"pointer\"}\n >\n <input\n id={inputId}\n type=\"checkbox\"\n checked={checked}\n disabled={readonly}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? errorId : undefined}\n style={{ width: 16, height: 16, accentColor: \"#0474AF\", cursor: readonly ? \"not-allowed\" : \"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 && !readonly}\n invalid={!!error}\n error={error}\n filters={reference.filters}\n emptyFields={field.referenceEmptyFields}\n disabled={readonly || 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\" disabled={readonly}>\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\" disabled={readonly}>\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\" readOnly={readonly} 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\" : [\"number\", \"currency\", \"currencyConverted\"].includes(field.kind ?? \"\") ? \"number\" : \"text\"}\n step={!mask && [\"number\", \"currency\", \"currencyConverted\"].includes(field.kind ?? \"\") ? \"any\" : undefined}\n inputMode={inputModeForMask(mask)}\n maxLength={maxLengthForMask(mask)}\n readOnly={readonly}\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\nexport function formValuesEqual(\n fields: OonFormFieldDef[],\n left: Record<string, string>,\n right: Record<string, string>,\n) {\n return fields.every((field) => (left[field.field] ?? \"\") === (right[field.field] ?? \"\"));\n}\n\nexport function fieldsForFormTabs(fields: OonFormFieldDef[], tabs: OonDetailTabDef[]) {\n const formTabs = tabs.filter((tab): tab is FormTab => tab.type === \"form\");\n if (!formTabs.length) return [];\n if (formTabs.some((tab) => !tab.fields?.length && !tab.groups?.length)) return fields;\n\n const selected = new Set(\n formTabs.flatMap((tab) => tab.fields ?? tab.groups?.flatMap((group) => group.fields) ?? []),\n );\n return fields.filter((field) => selected.has(field.field));\n}\n\nfunction InlineParentForm({\n fields: rawFields,\n visibleFields: rawVisibleFields,\n groups,\n parent,\n resource,\n onSaved,\n onDirtyChange,\n onSaveFailed,\n formId,\n externalSubmit = false,\n}: {\n fields: OonFormFieldDef[];\n visibleFields?: OonFormFieldDef[];\n groups?: FormGroup[];\n parent: Record<string, unknown>;\n resource: ResourceClient;\n onSaved: (record: Record<string, unknown>) => void;\n onDirtyChange?: (dirty: boolean) => void;\n onSaveFailed?: () => void;\n formId?: string;\n externalSubmit?: boolean;\n}) {\n const fields = rawFields as ExtendedFormField[];\n const visibleFields = (rawVisibleFields ?? rawFields) as ExtendedFormField[];\n const initial = useMemo(() => initialReactiveValues(fields, parent), [rawFields, parent]);\n const [values, setValues] = useState<Record<string, string>>(initial.values);\n const [formulaErrors, setFormulaErrors] = useState<FieldErrors>(initial.errors);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<unknown>(null);\n const [fieldErrors, setFieldErrors] = useState<FieldErrors>({});\n\n useEffect(() => {\n setValues(initial.values);\n setFormulaErrors(initial.errors);\n setError(null);\n setFieldErrors({});\n onDirtyChange?.(false);\n }, [initial, onDirtyChange]);\n\n const dirty = useMemo(\n () => !formValuesEqual(fields, values, initial.values),\n [fields, values, initial.values],\n );\n\n useEffect(() => {\n onDirtyChange?.(dirty);\n }, [dirty, onDirtyChange]);\n\n const fieldsByName = useMemo(() => new Map(fields.map((field) => [field.field, field])), [rawFields]);\n\n const change = (fieldName: string, value: string) => {\n const selected = fieldsByName.get(fieldName);\n if (selected?.readonly || selected?.computed) return;\n\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 const reactive = applyReactiveFormulas(fields, next);\n setFormulaErrors(reactive.errors);\n return reactive.values;\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 combinedErrors = { ...formulaErrors, ...fieldErrors };\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={combinedErrors}\n onChange={change}\n />\n ))}\n </Stack>\n );\n }\n\n return (\n <SimpleGrid columns={{ base: 1, md: 2 }} gap=\"14px\">\n {visibleFields.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={combinedErrors[field.field]}\n onChange={(value) => change(field.field, value)}\n />\n ))}\n </SimpleGrid>\n );\n };\n\n return (\n <form\n id={formId}\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 onSaveFailed?.();\n return;\n }\n\n setSaving(true);\n setError(null);\n setFieldErrors({});\n try {\n const payload = buildDomainMutationPayload(fields, values);\n const saved = parent._id\n ? await resource.update(String(parent._id), payload)\n : await resource.create(payload);\n onDirtyChange?.(false);\n onSaved(saved);\n } catch (requestError) {\n setError(requestError);\n setFieldErrors(fieldErrorsOf(requestError));\n onSaveFailed?.();\n } finally {\n setSaving(false);\n }\n }}\n >\n <Stack gap=\"16px\">\n {error ? <CoreErrorAlert error={error} /> : null}\n {renderFields()}\n {!externalSubmit ? (\n <Flex justify=\"flex-end\">\n <Button type=\"submit\" colorPalette=\"brand\" loading={saving}>Salvar dados principais</Button>\n </Flex>\n ) : null}\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 onDirtyChange,\n onSaveFailed,\n formId,\n externalSubmit,\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 onDirtyChange?: (dirty: boolean) => void;\n onSaveFailed?: () => void;\n formId?: string;\n externalSubmit?: boolean;\n}) {\n const active = tabs.find((tab) => tab.id === activeTab) ?? tabs[0];\n const activeForm = active?.type === \"form\" ? active : undefined;\n const draftFields = useMemo(() => fieldsForFormTabs(formFields, tabs), [formFields, tabs]);\n const formParent = useMemo(() => parent ?? {}, [parent]);\n const hasFormTab = draftFields.length > 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 {hasFormTab ? (\n <Box display={activeForm ? \"block\" : \"none\"}>\n <InlineParentForm\n fields={draftFields}\n visibleFields={activeForm\n ? fieldsForTab(draftFields, activeForm.fields ?? activeForm.groups?.flatMap((group) => group.fields))\n : []}\n groups={activeForm?.groups}\n parent={formParent}\n resource={resource}\n onSaved={onParentSaved}\n onDirtyChange={onDirtyChange}\n onSaveFailed={onSaveFailed}\n formId={formId}\n externalSubmit={externalSubmit}\n />\n </Box>\n ) : null}\n {!active || active.type === \"form\" ? null : active.type === \"summary\" && parent ? (\n <CoreSummaryCards cards={active.cards} parent={parent} relations={relations} />\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, OonDetailModalConfig, 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\nexport function resolveInitialDetailTab(\n config: OonDetailModalConfig,\n recordId?: string,\n initialTab?: string,\n) {\n if (initialTab) return initialTab;\n\n const configuredId = config.defaultTab ?? config.tabs[0]?.id ?? \"dados\";\n const configuredTab = config.tabs.find((tab) => tab.id === configuredId);\n if (recordId) return configuredTab?.id ?? config.tabs[0]?.id ?? \"dados\";\n if (configuredTab?.type === \"form\") return configuredTab.id;\n\n return config.tabs.find((tab) => tab.type === \"form\")?.id\n ?? configuredTab?.id\n ?? config.tabs[0]?.id\n ?? \"dados\";\n}\n","import { useMemo, useState } from \"react\";\nimport { Badge, Box, Button, Flex, IconButton, 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 { 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 /** Mapeia campo do novo registro para um campo do registro pai. */\n initialValuesFromParent?: Record<string, string>;\n };\n delete?: {\n enabled?: boolean;\n confirm?: string;\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 parentValueAt(parent: Record<string, unknown>, path: string): unknown {\n return path.split(\".\").reduce<unknown>((current, part) => {\n if (!current || typeof current !== \"object\") return undefined;\n return (current as Record<string, unknown>)[part];\n }, parent);\n}\n\nfunction mergeCreateFields(\n schemaFields: ReturnType<typeof formFieldsFromMeta>,\n overrides: OonFormFieldDef[] | undefined,\n foreignKey: string | undefined,\n): OonFormFieldDef[] {\n const base = schemaFields.filter((field) => ![foreignKey, \"_id\", \"createdAt\", \"updatedAt\"].includes(field.field));\n if (!overrides?.length) return base;\n const byName = new Map(base.map((field) => [field.field, field]));\n return overrides.map((override) => ({ ...(byName.get(override.field) ?? {}), ...override }));\n}\n\nfunction modalEditFields(\n schemaFields: ReturnType<typeof formFieldsFromMeta>,\n tab: RelatedTab,\n fallback: OonFormFieldDef[],\n foreignKey: string | undefined,\n): OonFormFieldDef[] {\n const byName = new Map(schemaFields.map((field) => [field.field, field]));\n const configured = (tab.columns ?? [])\n .filter((column) => typeof column !== \"string\" && column.editable === true && column.readonly !== true)\n .map((column) => {\n if (typeof column === \"string\") return undefined;\n const base = byName.get(column.field);\n if (!base || column.field === foreignKey) return undefined;\n return {\n ...base,\n field: column.field,\n ...(column.label ? { label: column.label } : {}),\n ...(column.kind ? { kind: column.kind } : {}),\n ...(column.required != null ? { required: column.required } : {}),\n } as OonFormFieldDef;\n })\n .filter((field): field is OonFormFieldDef => Boolean(field));\n\n return configured.length ? configured : fallback;\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 schemaFormFields = useMemo(() => formFieldsFromMeta(schema?.fields ?? []), [schema?.fields]);\n const createFields = useMemo(\n () => mergeCreateFields(schemaFormFields, tab.create?.fields, relation?.foreignKey),\n [schemaFormFields, tab.create?.fields, relation?.foreignKey],\n );\n const editFields = useMemo(\n () => modalEditFields(schemaFormFields, tab, createFields, relation?.foreignKey),\n [schemaFormFields, tab, createFields, relation?.foreignKey],\n );\n const createInitialValues = useMemo(() => {\n const inherited = Object.fromEntries(\n Object.entries(tab.create?.initialValuesFromParent ?? {}).map(([field, path]) => [field, parentValueAt(parent, path)]),\n );\n return { ...(tab.create?.initialValues ?? {}), ...inherited };\n }, [tab.create?.initialValues, tab.create?.initialValuesFromParent, parent]);\n const [creating, setCreating] = useState(false);\n const [createError, setCreateError] = useState<unknown>(null);\n const [editing, setEditing] = useState<Record<string, unknown> | null>(null);\n const [editError, setEditError] = useState<unknown>(null);\n const canEdit = tab.type === \"relatedGrid\" && tab.editable === true;\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 = canEdit || canDelete || !!tab.rowActions?.length;\n\n const invalidate = async () => {\n await queryClient.invalidateQueries({ queryKey: key });\n onRefresh?.([\"self\", \"parent\"]);\n };\n\n const updateMutation = useMutation({\n mutationFn: ({ id, values }: { id: string; values: Record<string, unknown> }) => resource.update(id, values),\n onSuccess: async () => {\n await invalidate();\n setEditing(null);\n setEditError(null);\n },\n onError: setEditError,\n });\n const createMutation = useMutation({\n mutationFn: (values: Record<string, unknown>) => resource.create({\n ...createInitialValues,\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\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 w=\"92px\" textAlign=\"center\">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 return (\n <Table.Row key={id} bg={index % 2 ? \"#FBFCFD\" : \"white\"} _hover={{ bg: \"#F0F7FF\" }}>\n {columns.map((column) => {\n const value = row[column.field];\n return (\n <Table.Cell key={column.field} fontSize=\"11px\">\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=\"4px\" align=\"center\" justify=\"center\" wrap=\"wrap\">\n {canEdit ? (\n <IconButton\n aria-label=\"Editar registro\"\n title=\"Editar\"\n size=\"xs\"\n variant=\"ghost\"\n color=\"#0474AF\"\n onClick={() => {\n setEditError(null);\n setEditing(row);\n }}\n >\n <EditIcon />\n </IconButton>\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 <IconButton\n aria-label=\"Excluir registro\"\n title=\"Excluir\"\n size=\"xs\"\n variant=\"ghost\"\n color=\"#B42318\"\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 <TrashIcon />\n </IconButton>\n ) : 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={createInitialValues}\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 {editing ? (\n <DynamicForm\n title={`Editar ${schema?.singular ?? relation.model}`}\n eyebrow=\"Registro relacionado\"\n fields={editFields}\n initialValues={editing}\n submitting={updateMutation.isPending}\n error={editError}\n onSubmit={(values) => {\n const id = String(editing._id ?? editing.id ?? \"\");\n if (id) updateMutation.mutate({ id, values });\n }}\n onFieldChange={() => setEditError(null)}\n onCancel={() => {\n if (!updateMutation.isPending) setEditing(null);\n }}\n />\n ) : null}\n </Box>\n );\n}\n","import { useState } from \"react\";\nimport { Box, Button, Text } from \"@chakra-ui/react\";\nimport { useOonApi } from \"../../api/ApiProvider\";\nimport type { OonRowActionDef } from \"../../types\";\nimport type { OonPipelineActionDef, OonPipelineActionTone } from \"../../pipelineTicket\";\nimport { DynamicForm } from \"./DynamicForm\";\nimport { describeActionError } from \"./actionError\";\nimport { evaluateCondition, interpolateEndpoint } from \"./conditions\";\nimport { mergeDetailRecord, useDetailRecord } from \"./DetailRecordContext\";\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\nconst ACTION_TONES: Record<OonPipelineActionTone, { bg: string; color: string; border: string; hover: string }> = {\n success: { bg: \"#DCFCE7\", color: \"#166534\", border: \"#BBF7D0\", hover: \"#D1FAE5\" },\n danger: { bg: \"#FEE2E2\", color: \"#991B1B\", border: \"#FECACA\", hover: \"#FDE2E2\" },\n warning: { bg: \"#FEF3C7\", color: \"#92400E\", border: \"#FDE68A\", hover: \"#FDEDB3\" },\n neutral: { bg: \"#F1F5F9\", color: \"#334155\", border: \"#E2E8F0\", hover: \"#E8EEF5\" },\n brand: { bg: \"#E0F2FE\", color: \"#075985\", border: \"#BAE6FD\", hover: \"#D5EEFC\" },\n};\n\nfunction ActionErrorMessage({ error }: { error: unknown }) {\n const description = describeActionError(error);\n return (\n <Box\n role=\"alert\"\n mt=\"5px\"\n maxW=\"420px\"\n p=\"7px 9px\"\n bg=\"#FEF3F2\"\n borderWidth=\"1px\"\n borderColor=\"#FECDCA\"\n borderRadius=\"6px\"\n >\n <Text color=\"#B42318\" fontSize=\"10px\" fontWeight=\"600\" lineHeight=\"1.35\">\n {description.message}\n </Text>\n {description.context ? (\n <Text mt=\"2px\" color=\"#7A271A\" fontSize=\"9px\" lineHeight=\"1.35\">\n {description.context}\n </Text>\n ) : null}\n </Box>\n );\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\nfunction RowActionIcon({ name }: { name?: string }) {\n const normalized = String(name || \"\").trim().toLowerCase();\n if ([\"trash\", \"delete\", \"remove\", \"lixeira\"].includes(normalized)) {\n return (\n <svg\n aria-hidden=\"true\"\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 6h18\" />\n <path d=\"M8 6V4h8v2\" />\n <path d=\"M19 6l-1 14H6L5 6\" />\n <path d=\"M10 11v5\" />\n <path d=\"M14 11v5\" />\n </svg>\n );\n }\n return null;\n}\n\n/**\n * Hook de integração do Core para observabilidade operacional futura.\n * O evento não persiste dados por conta própria; consumidores podem ligá-lo a\n * métricas de SLA, tempo por atividade e produtividade sem alterar a UI.\n */\nfunction emitOperationalEvent(\n action: OonPipelineActionDef,\n row: Record<string, unknown>,\n changes?: Record<string, unknown>,\n) {\n if (typeof window === \"undefined\" || typeof window.dispatchEvent !== \"function\") return;\n if (!action.operationalKind) return;\n\n const field = action.field;\n window.dispatchEvent(new CustomEvent(\"oon:pipeline-action\", {\n detail: {\n actionId: action.id,\n label: action.label,\n group: action.group,\n operationalKind: action.operationalKind,\n recordId: row._id ?? row.id,\n field,\n previousValue: field ? row[field] : undefined,\n nextValue: field ? changes?.[field] ?? action.value : undefined,\n changes,\n occurredAt: new Date().toISOString(),\n },\n }));\n}\n\nexport function CoreRowAction({ action, row, parent, onOpenDetail, onRefresh, onUpdate }: CoreRowActionProps) {\n const { http } = useOonApi();\n const detailRecord = useDetailRecord();\n const effectiveRow = detailRecord?.record ?? row;\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 const tone = pipelineAction.tone ? ACTION_TONES[pipelineAction.tone] : undefined;\n const isWorkStatus = pipelineAction.group === \"workStatus\";\n const isSelected = isWorkStatus && !!pipelineAction.field && effectiveRow[pipelineAction.field] === pipelineAction.value;\n const icon = <RowActionIcon name={action.icon} />;\n const iconOnly = Boolean(action.iconOnly && icon);\n\n if (evaluateCondition(action.hiddenWhen, effectiveRow)) return null;\n const disabled = evaluateCondition(action.disabledWhen, effectiveRow) || 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?.(effectiveRow, action.initialTab);\n if (action.type === \"navigate\") {\n const href = action.href ?? action.endpoint;\n if (href) window.location.assign(interpolateEndpoint(href, effectiveRow, 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, effectiveRow, 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 const changes = { [pipelineAction.field]: pipelineAction.value };\n const saved = await onUpdate(changes);\n detailRecord?.setRecord(mergeDetailRecord(effectiveRow, saved, changes));\n emitOperationalEvent(pipelineAction, effectiveRow, changes);\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, effectiveRow, parent);\n await http.request({ url, method: action.method ?? \"POST\" });\n emitOperationalEvent(pipelineAction, effectiveRow);\n onRefresh?.(action.refresh);\n } catch (err) {\n setError(err);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <span style={{ display: \"inline-flex\", flexDirection: \"column\" }}>\n <Button\n type=\"button\"\n size=\"xs\"\n minH={isWorkStatus ? \"32px\" : \"28px\"}\n minW={iconOnly ? \"28px\" : undefined}\n px={iconOnly ? \"6px\" : isWorkStatus ? \"12px\" : \"9px\"}\n borderRadius={isWorkStatus ? \"full\" : \"6px\"}\n fontSize=\"10px\"\n aria-label={iconOnly ? action.label : undefined}\n title={iconOnly ? action.label : undefined}\n fontWeight=\"700\"\n variant={tone ? \"outline\" : undefined}\n bg={isWorkStatus && !isSelected ? \"white\" : tone?.bg}\n color={tone?.color}\n borderColor={isSelected ? tone?.color : tone?.border}\n borderWidth={isSelected ? \"2px\" : \"1px\"}\n boxShadow={isSelected ? `0 0 0 3px ${tone?.border ?? \"#E2E8F0\"}` : tone ? \"none\" : undefined}\n aria-pressed={isWorkStatus ? isSelected : undefined}\n loading={loading}\n disabled={disabled}\n onClick={run}\n _hover={tone ? { bg: tone.hover, borderColor: tone.border } : undefined}\n _disabled={tone ? { opacity: isSelected ? 1 : 0.55, cursor: \"not-allowed\" } : undefined}\n >\n {isWorkStatus ? (\n <span aria-hidden=\"true\" style={{ width: 8, height: 8, display: \"inline-block\", marginRight: 7, borderRadius: \"999px\", background: tone?.color ?? \"#64748B\", boxShadow: isSelected ? \"0 0 0 2px rgba(255,255,255,.9)\" : \"none\" }} />\n ) : null}\n {icon}\n {iconOnly ? null : action.label}\n </Button>\n {error ? <ActionErrorMessage error={error} /> : 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, effectiveRow, parent);\n await http.request({ url, method: pipelineAction.method ?? \"POST\", data: values });\n emitOperationalEvent(pipelineAction, effectiveRow, 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 { createContext, useContext, type ReactNode } from \"react\";\n\nexport type DetailRecord = Record<string, unknown>;\n\ninterface DetailRecordContextValue {\n record?: DetailRecord;\n setRecord: (record: DetailRecord) => void;\n}\n\nconst DetailRecordContext = createContext<DetailRecordContextValue | null>(null);\n\nexport function DetailRecordProvider({\n record,\n setRecord,\n children,\n}: DetailRecordContextValue & { children: ReactNode }) {\n return (\n <DetailRecordContext.Provider value={{ record, setRecord }}>\n {children}\n </DetailRecordContext.Provider>\n );\n}\n\nexport function useDetailRecord() {\n return useContext(DetailRecordContext);\n}\n\nexport function mergeDetailRecord(\n current: DetailRecord,\n saved: unknown,\n changes: DetailRecord = {},\n): DetailRecord {\n const savedRecord = saved && typeof saved === \"object\"\n ? saved as DetailRecord\n : {};\n // A resposta do backend é canônica e deve prevalecer sobre a alteração otimista.\n return { ...current, ...changes, ...savedRecord };\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 { useEffect, useRef, 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 {\n groupPipelineActions,\n resolvePipelineActions,\n type OonPipelineActionDef,\n type OonPipelineCreateDef,\n type OonPipelineDefaultActionsDef,\n type OonPipelineViewMode,\n} 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\";\nimport { pipelineBoardScrollStep, resolveHorizontalScrollState } from \"./internal/pipelineBoardScroll\";\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 defaultActions?: OonPipelineDefaultActionsDef;\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 workStatusColor(value: unknown): string {\n const normalized = String(value ?? '').normalize('NFD').replace(/[\\u0300-\\u036f]/g, '').toLowerCase();\n if (/aguardando.*inicio|nao.*iniciado|waiting/.test(normalized)) return '#D97706';\n if (/trabalhando|em.*andamento|working/.test(normalized)) return '#16A34A';\n if (/revisar|revisao|review/.test(normalized)) return '#DC2626';\n return '#94A3B8';\n}\n\nfunction PipelineArrowIcon({ direction }: { direction: \"left\" | \"right\" }) {\n const path = direction === \"left\" ? \"M12.5 5 7.5 10l5 5\" : \"m7.5 5 5 5-5 5\";\n return (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path d={path} fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\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 defaultActions,\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 boardRef = useRef<HTMLDivElement | null>(null);\n const [boardScrollState, setBoardScrollState] = useState({ canScrollLeft: false, canScrollRight: false });\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 useEffect(() => {\n if (viewMode !== \"board\") return undefined;\n const board = boardRef.current;\n if (!board) return undefined;\n\n const sync = () => setBoardScrollState(resolveHorizontalScrollState(board));\n sync();\n board.addEventListener(\"scroll\", sync, { passive: true });\n window.addEventListener(\"resize\", sync);\n\n const resizeObserver = typeof ResizeObserver !== \"undefined\" ? new ResizeObserver(sync) : undefined;\n resizeObserver?.observe(board);\n Array.from(board.children).forEach((child) => resizeObserver?.observe(child));\n\n return () => {\n board.removeEventListener(\"scroll\", sync);\n window.removeEventListener(\"resize\", sync);\n resizeObserver?.disconnect();\n };\n }, [viewMode, listQuery.data?.results?.length, stages?.length, schema?.fields.length]);\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 defaultActionsConfig = defaultActions === false ? undefined : defaultActions;\n const workStatusField = defaultActionsConfig?.workStatusField ?? \"statusTrabalho\";\n const workStatusMeta = schema?.fields.find((field) => field.name === workStatusField);\n const resolvedTicketActions = resolvePipelineActions({\n stageField,\n stages: resolvedStages,\n workStatusValues: workStatusMeta?.options ?? [],\n ticketActions,\n defaultActions,\n });\n const groupedTicketActions = groupPipelineActions(resolvedTicketActions);\n const resolvedTitleField = titleField\n ?? ticketModal?.titleField\n ?? schema?.fields.find((field) => field.kind === \"string\")?.name\n ?? schema?.searchable[0]\n ?? \"_id\";\n const resolvedTitleFieldMeta = schema?.fields.find((field) => field.name === resolvedTitleField);\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 scrollBoard = (direction: \"left\" | \"right\") => {\n const board = boardRef.current;\n if (!board) return;\n const step = pipelineBoardScrollStep(board.clientWidth);\n board.scrollBy({ left: direction === \"left\" ? -step : step, behavior: \"smooth\" });\n };\n\n const renderModalAction = (action: OonPipelineActionDef, index: number) => selectedTicket ? (\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 ) : null;\n\n const modalTopActions = selectedTicket && !creating && groupedTicketActions.workStatus.length ? (\n <Flex role=\"group\" aria-label=\"Status da atividade\" gap=\"6px\" align=\"center\" wrap=\"wrap\">\n {groupedTicketActions.workStatus.map(renderModalAction)}\n </Flex>\n ) : null;\n\n const modalBottomActions = selectedTicket && !creating ? (\n <Flex gap=\"8px\" align=\"center\" wrap=\"wrap\">\n {groupedTicketActions.approval.length ? (\n <Flex role=\"group\" aria-label=\"Aprovação do ticket\" gap=\"6px\" align=\"center\" wrap=\"wrap\">\n {groupedTicketActions.approval.map(renderModalAction)}\n </Flex>\n ) : null}\n {groupedTicketActions.custom.length ? (\n <Flex role=\"group\" aria-label=\"Ações do negócio\" gap=\"6px\" align=\"center\" wrap=\"wrap\">\n {groupedTicketActions.custom.map(renderModalAction)}\n </Flex>\n ) : null}\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 <Box position=\"relative\">\n<Flex\n ref={boardRef}\n data-oon-pipeline-board=\"true\"\n gap={4}\n align=\"stretch\"\n overflowX=\"auto\"\n overflowY=\"auto\"\n h=\"clamp(420px, calc(100vh - 250px), 760px)\"\n minH=\"420px\"\n pb=\"18px\"\n pr=\"2px\"\n scrollBehavior=\"smooth\"\n scrollbarGutter=\"stable both-edges\"\n overscrollBehaviorX=\"contain\"\n>\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], resolvedTitleFieldMeta?.kind);\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 <Flex align=\"flex-start\" justify=\"space-between\" gap=\"8px\" mb={2}>\n <Text fontSize=\"13px\" fontWeight=\"700\" color=\"#24323A\" lineClamp={2}>{ticketTitle}</Text>\n <Box\n as=\"span\"\n title={`Status da atividade: ${String(row[workStatusField] ?? 'Não informado')}`}\n aria-label={`Status da atividade: ${String(row[workStatusField] ?? 'Não informado')}`}\n flex=\"0 0 auto\"\n w=\"10px\"\n h=\"10px\"\n mt=\"4px\"\n borderRadius=\"full\"\n bg={workStatusColor(row[workStatusField])}\n boxShadow=\"0 0 0 3px white, 0 0 0 4px #E2E8F0\"\n />\n </Flex>\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<Button\n type=\"button\"\n aria-label=\"Deslizar quadro para a esquerda\"\n title=\"Deslizar para a esquerda\"\n position=\"absolute\"\n left=\"8px\"\n top=\"50%\"\n transform=\"translateY(-50%)\"\n zIndex={3}\n minW=\"34px\"\n w=\"34px\"\n h=\"34px\"\n p={0}\n borderRadius=\"full\"\n variant=\"outline\"\n bg=\"rgba(255,255,255,.96)\"\n borderColor=\"#CBD5E1\"\n boxShadow=\"0 5px 16px rgba(15,23,42,.16)\"\n disabled={!boardScrollState.canScrollLeft}\n onClick={() => scrollBoard(\"left\")}\n _hover={{ bg: \"white\", borderColor: \"brand.400\" }}\n _disabled={{ opacity: 0.25, cursor: \"not-allowed\" }}\n>\n <PipelineArrowIcon direction=\"left\" />\n</Button>\n<Button\n type=\"button\"\n aria-label=\"Deslizar quadro para a direita\"\n title=\"Deslizar para a direita\"\n position=\"absolute\"\n right=\"8px\"\n top=\"50%\"\n transform=\"translateY(-50%)\"\n zIndex={3}\n minW=\"34px\"\n w=\"34px\"\n h=\"34px\"\n p={0}\n borderRadius=\"full\"\n variant=\"outline\"\n bg=\"rgba(255,255,255,.96)\"\n borderColor=\"#CBD5E1\"\n boxShadow=\"0 5px 16px rgba(15,23,42,.16)\"\n disabled={!boardScrollState.canScrollRight}\n onClick={() => scrollBoard(\"right\")}\n _hover={{ bg: \"white\", borderColor: \"brand.400\" }}\n _disabled={{ opacity: 0.25, cursor: \"not-allowed\" }}\n>\n <PipelineArrowIcon direction=\"right\" />\n</Button>\n </Box>\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 topActions={modalTopActions}\n bottomActions={modalBottomActions}\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}","import type {\n OonCollectionListConfig,\n OonDetailModalConfig,\n OonDetailTabDef,\n OonFormFieldDef,\n OonListFilterDef,\n OonRelationDef,\n OonRowActionDef,\n PipelineViewDef,\n} from \"./types\";\n\nexport type OonRelatedGridCreateDef = {\n enabled?: boolean;\n label?: string;\n fields?: OonFormFieldDef[];\n initialValues?: Record<string, unknown>;\n};\n\nexport type OonRelatedGridDeleteDef = {\n enabled?: boolean;\n confirm?: string;\n};\n\ntype BaseRelatedGridTab = Extract<OonDetailTabDef, { type: \"relatedGrid\" }>;\n\n/** Aba relacionada com inclusão e exclusão opcionais. */\nexport type OonOperationalDetailTabDef =\n | Exclude<OonDetailTabDef, BaseRelatedGridTab>\n | (BaseRelatedGridTab & {\n create?: OonRelatedGridCreateDef;\n delete?: OonRelatedGridDeleteDef;\n });\n\n/** Modal declarativo que amplia relatedGrid sem quebrar o contrato anterior. */\nexport type OonOperationalDetailModalConfig = Omit<OonDetailModalConfig, \"tabs\"> & {\n tabs: OonOperationalDetailTabDef[];\n};\n\n/** Configuração declarativa do editor de um ticket aberto pela esteira. */\nexport type OonPipelineTicketModalConfig = OonOperationalDetailModalConfig;\n\nexport type OonPipelineViewMode = \"board\" | \"list\";\n\nexport type OonPipelineCreateDef = {\n enabled?: boolean;\n label?: string;\n initialTab?: string;\n defaultStage?: string;\n defaultValues?: Record<string, unknown>;\n};\n\nexport type OonPipelineActionGroup = \"approval\" | \"workStatus\" | \"custom\";\nexport type OonPipelineActionTone = \"success\" | \"danger\" | \"warning\" | \"neutral\" | \"brand\";\nexport type OonPipelineOperationalKind = \"approval\" | \"work-status\" | \"business\";\n\n/**\n * Ações padrão da esteira. Quando omitido, aprovação/reprovação e status de\n * trabalho ficam habilitados automaticamente quando os campos necessários\n * existem na metadata do model.\n */\nexport type OonPipelineDefaultActionsConfig = {\n approval?: boolean;\n workStatus?: boolean;\n workStatusField?: string;\n excludedStages?: string[];\n};\n\nexport type OonPipelineDefaultActionsDef = false | OonPipelineDefaultActionsConfig;\n\n/**\n * Ações operacionais exibidas no cabeçalho do ticket.\n *\n * - setField/transition atualizam um campo do próprio ticket;\n * - formAction carrega dados opcionais e envia um formulário a um endpoint;\n * - group/tone organizam a ação visualmente sem acoplar regra de negócio à UI;\n * - operationalKind cria um contrato estável para telemetria, SLA e produtividade.\n */\nexport type OonPipelineActionDef = Omit<OonRowActionDef, \"type\"> & {\n type: OonRowActionDef[\"type\"] | \"setField\" | \"transition\" | \"formAction\";\n field?: string;\n value?: unknown;\n title?: string;\n submitLabel?: string;\n loadEndpoint?: string;\n fields?: OonFormFieldDef[];\n initialValues?: Record<string, unknown>;\n group?: OonPipelineActionGroup;\n tone?: OonPipelineActionTone;\n operationalKind?: OonPipelineOperationalKind;\n};\n\nconst DEFAULT_EXCLUDED_STAGES = [\n \"cancelado\",\n \"cancelada\",\n \"cancelled\",\n \"rejeitado\",\n \"rejeitada\",\n \"rejected\",\n];\n\nfunction normalized(value: unknown): string {\n return String(value ?? \"\")\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\nfunction slug(value: unknown): string {\n return normalized(value).replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\");\n}\n\nfunction approvalTone(action: OonPipelineActionDef): OonPipelineActionTone | undefined {\n const key = normalized(`${action.id ?? \"\"} ${action.label}`);\n if (/recusar|reprovar|reject/.test(key)) return \"danger\";\n if (/aprovar|approve/.test(key)) return \"success\";\n return undefined;\n}\n\nfunction workStatusPresentation(value: unknown): { order: number; label: string; tone: OonPipelineActionTone } | undefined {\n const key = normalized(value);\n if (/aguardando.*inicio|nao.*iniciado|waiting/.test(key)) {\n return { order: 0, label: \"Aguardando início\", tone: \"warning\" };\n }\n if (/trabalhando|em.*andamento|working/.test(key)) {\n return { order: 1, label: \"Trabalhando\", tone: \"success\" };\n }\n if (/revisar|revisao|review/.test(key)) {\n return { order: 2, label: \"Revisão\", tone: \"danger\" };\n }\n return undefined;\n}\n\n/** Classifica também ações legadas para que recebam agrupamento e cores do Core. */\nexport function decoratePipelineAction(\n action: OonPipelineActionDef,\n stageField: string,\n workStatusField: string,\n): OonPipelineActionDef {\n const approval = action.type === \"transition\"\n && action.field === stageField\n && approvalTone(action);\n const workStatus = action.type === \"setField\" && action.field === workStatusField;\n const group = action.group ?? (approval ? \"approval\" : workStatus ? \"workStatus\" : \"custom\");\n const tone = action.tone\n ?? (approval || (workStatus ? workStatusPresentation(action.value)?.tone : undefined))\n ?? (group === \"custom\" ? \"neutral\" : undefined);\n const operationalKind = action.operationalKind\n ?? (group === \"approval\" ? \"approval\" : group === \"workStatus\" ? \"work-status\" : \"business\");\n\n return { ...action, group, tone, operationalKind };\n}\n\nexport interface ResolvePipelineActionsInput {\n stageField: string;\n stages: Array<{ id: string; label: string }>;\n workStatusValues?: string[];\n ticketActions?: OonPipelineActionDef[];\n defaultActions?: OonPipelineDefaultActionsDef;\n}\n\n/**\n * Resolve as ações efetivas da esteira.\n *\n * A ordem das etapas define Aprovar (próxima etapa) e Recusar (etapa anterior).\n * Etapas negativas, como Cancelado/Rejeitado, não entram no fluxo de aprovação.\n * Ações explícitas equivalentes substituem os padrões para preservar compatibilidade.\n */\nexport function resolvePipelineActions({\n stageField,\n stages,\n workStatusValues = [],\n ticketActions = [],\n defaultActions,\n}: ResolvePipelineActionsInput): OonPipelineActionDef[] {\n const config = defaultActions === false ? undefined : (defaultActions ?? {});\n const workStatusField = config?.workStatusField ?? \"statusTrabalho\";\n const explicit = ticketActions.map((action) => decoratePipelineAction(action, stageField, workStatusField));\n if (defaultActions === false) return explicit;\n\n const resolved: OonPipelineActionDef[] = [];\n const hasExplicitApproval = explicit.some((action) => action.group === \"approval\");\n const hasExplicitWorkStatus = explicit.some((action) => action.group === \"workStatus\");\n\n if (config?.approval !== false && !hasExplicitApproval) {\n const excluded = new Set([\n ...DEFAULT_EXCLUDED_STAGES,\n ...(config?.excludedStages ?? []).map(normalized),\n ]);\n const approvalStages = stages.filter((stage) => !excluded.has(normalized(stage.id)));\n\n approvalStages.forEach((stage, index) => {\n const next = approvalStages[index + 1];\n if (next) {\n resolved.push({\n id: `core-aprovar-${slug(stage.id)}`,\n label: \"Aprovar\",\n type: \"transition\",\n field: stageField,\n value: next.id,\n hiddenWhen: { field: stageField, notEquals: stage.id },\n confirm: { description: `Aprovar este ticket e alterar a etapa para ${next.label}?` },\n refresh: [\"all\"],\n group: \"approval\",\n tone: \"success\",\n operationalKind: \"approval\",\n });\n }\n });\n\n approvalStages.forEach((stage, index) => {\n const previous = approvalStages[index - 1];\n if (previous) {\n resolved.push({\n id: `core-recusar-${slug(stage.id)}`,\n label: \"Recusar\",\n type: \"transition\",\n field: stageField,\n value: previous.id,\n hiddenWhen: { field: stageField, notEquals: stage.id },\n confirm: { description: `Recusar este ticket e retornar a etapa para ${previous.label}?` },\n refresh: [\"all\"],\n group: \"approval\",\n tone: \"danger\",\n operationalKind: \"approval\",\n });\n }\n });\n }\n\n if (config?.workStatus !== false && !hasExplicitWorkStatus && workStatusValues.length) {\n workStatusValues\n .map((value) => ({ value, presentation: workStatusPresentation(value) }))\n .filter((item): item is { value: string; presentation: NonNullable<ReturnType<typeof workStatusPresentation>> } => Boolean(item.presentation))\n .sort((a, b) => a.presentation.order - b.presentation.order)\n .forEach(({ value, presentation }) => {\n resolved.push({\n id: `core-status-trabalho-${slug(value)}`,\n label: presentation.label,\n type: \"setField\",\n field: workStatusField,\n value,\n disabledWhen: { field: workStatusField, equals: value },\n refresh: [\"all\"],\n group: \"workStatus\",\n tone: presentation.tone,\n operationalKind: \"work-status\",\n });\n });\n }\n\n return [...resolved, ...explicit];\n}\n\nexport function groupPipelineActions(actions: OonPipelineActionDef[]) {\n return {\n approval: actions.filter((action) => action.group === \"approval\"),\n workStatus: actions.filter((action) => action.group === \"workStatus\"),\n custom: actions.filter((action) => action.group === \"custom\"),\n };\n}\n\n/**\n * Extensão pública da view de esteira com filtros, inclusão, lista, ações e\n * modal declarativo. Continua estruturalmente compatível com PipelineViewDef.\n */\nexport type OonPipelineViewDef = PipelineViewDef & {\n /** Campo exibido como título do card e do modal. */\n titleField?: string;\n /** Overrides de formulário mesclados à metadata do model. */\n form?: OonFormFieldDef[];\n /** Relações disponíveis para abas summary/relatedGrid/readonlyGrid. */\n relations?: Record<string, OonRelationDef>;\n /** Modal declarativo usado ao abrir um ticket da esteira. */\n ticketModal?: OonPipelineTicketModalConfig;\n /** Filtros aplicados tanto ao quadro quanto à visualização em lista. */\n filters?: OonListFilterDef[];\n /** Configuração do botão de inclusão pela própria esteira. */\n create?: OonPipelineCreateDef;\n /** Modos de visualização liberados para o usuário. */\n viewModes?: OonPipelineViewMode[];\n /** Visualização inicial. */\n defaultView?: OonPipelineViewMode;\n /** Colunas e ações da visualização em lista. */\n list?: OonCollectionListConfig;\n /** Ações padrão do Core; use false para desabilitá-las nesta esteira. */\n defaultActions?: OonPipelineDefaultActionsDef;\n /** Ações adicionais ou overrides exibidos no cabeçalho do ticket aberto. */\n ticketActions?: OonPipelineActionDef[];\n};","export interface HorizontalScrollMetrics {\n scrollLeft: number;\n clientWidth: number;\n scrollWidth: number;\n}\n\nconst EDGE_TOLERANCE = 2;\n\nexport function resolveHorizontalScrollState(metrics: HorizontalScrollMetrics) {\n const maxScrollLeft = Math.max(0, metrics.scrollWidth - metrics.clientWidth);\n return {\n canScrollLeft: metrics.scrollLeft > EDGE_TOLERANCE,\n canScrollRight: metrics.scrollLeft < maxScrollLeft - EDGE_TOLERANCE,\n };\n}\n\nexport function pipelineBoardScrollStep(clientWidth: number) {\n return Math.max(280, Math.round(clientWidth * 0.75));\n}\n","import { Box, Heading, SimpleGrid, Stack, Text } from \"@chakra-ui/react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport type { DashboardWidgetDef } from \"../types\";\nimport { useOonApi } from \"../api/ApiProvider\";\n\ntype DashboardFilterPrimitive = string | number | boolean | null;\ntype DashboardFilterValue = DashboardFilterPrimitive | {\n eq?: DashboardFilterPrimitive;\n ne?: DashboardFilterPrimitive;\n in?: DashboardFilterPrimitive[];\n nin?: DashboardFilterPrimitive[];\n gt?: DashboardFilterPrimitive;\n gte?: DashboardFilterPrimitive;\n lt?: DashboardFilterPrimitive;\n lte?: DashboardFilterPrimitive;\n exists?: boolean;\n};\n\ntype CoreDashboardWidget = Omit<DashboardWidgetDef, \"kind\"> & {\n description?: string;\n kind?: \"count\" | \"sum\" | \"groupCount\" | \"groupSum\" | \"custom\";\n groupBy?: string;\n filters?: Record<string, DashboardFilterValue>;\n format?: \"number\" | \"currency\";\n};\n\nexport interface CoreDashboardProps {\n label?: string;\n widgets?: CoreDashboardWidget[];\n}\n\ninterface DashboardMetricResult {\n id: string;\n kind: string;\n value?: number;\n groups?: Array<{ key: string; value: number }>;\n}\n\nfunction metricFormat(widget: CoreDashboardWidget): \"number\" | \"currency\" {\n if (widget.format) return widget.format;\n return [\"sum\", \"groupSum\"].includes(widget.kind || \"\") ? \"currency\" : \"number\";\n}\n\nfunction formatMetric(value: number | undefined, format: \"number\" | \"currency\") {\n if (value == null || !Number.isFinite(Number(value))) return \"—\";\n if (format === \"currency\") {\n return new Intl.NumberFormat(\"pt-BR\", { style: \"currency\", currency: \"BRL\" }).format(Number(value));\n }\n return new Intl.NumberFormat(\"pt-BR\", { maximumFractionDigits: 2 }).format(Number(value));\n}\n\n/** Dashboard declarativo com agregações executadas integralmente no backend. */\nexport function CoreDashboard({ label = \"Dashboard\", widgets = [] }: CoreDashboardProps) {\n const { http } = useOonApi();\n const remoteWidgets = widgets.filter((widget) => widget.kind !== \"custom\" && widget.model);\n const metricsQuery = useQuery({\n queryKey: [\"oon\", \"dashboard\", remoteWidgets],\n enabled: remoteWidgets.length > 0,\n staleTime: 60 * 1000,\n queryFn: async () => {\n const response = await http.post(\"/core/dashboard/query\", {\n queries: remoteWidgets.map(({ id, model, kind, field, groupBy, filters }) => ({\n id,\n model,\n kind: kind || \"count\",\n field,\n groupBy,\n filters,\n })),\n });\n return (response.data?.results ?? []) as DashboardMetricResult[];\n },\n });\n const results = new Map((metricsQuery.data ?? []).map((result) => [result.id, result]));\n\n return (\n <Stack gap={6}>\n <Box>\n <Text fontSize=\"xs\" fontWeight=\"600\" color=\"brand.600\" textTransform=\"uppercase\" letterSpacing=\"0.08em\">\n Visão geral\n </Text>\n <Heading size=\"lg\">{label}</Heading>\n </Box>\n {!widgets.length ? <Text color=\"gray.500\">Nenhum indicador declarado.</Text> : null}\n <SimpleGrid columns={{ base: 1, md: 2, lg: 3 }} gap={4}>\n {widgets.map((widget) => {\n if (widget.kind === \"custom\" && widget.render) {\n return (\n <Box key={widget.id} borderWidth=\"1px\" borderColor=\"gray.200\" borderRadius=\"lg\" bg=\"white\" p={5}>\n {widget.render()}\n </Box>\n );\n }\n const result = results.get(widget.id);\n const grouped = [\"groupCount\", \"groupSum\"].includes(widget.kind || \"\");\n const format = metricFormat(widget);\n return (\n <Box\n key={widget.id}\n gridColumn={grouped ? \"1 / -1\" : undefined}\n borderWidth=\"1px\"\n borderColor=\"gray.200\"\n borderRadius=\"lg\"\n bg=\"white\"\n p={5}\n minH={grouped ? undefined : \"126px\"}\n >\n <Text fontSize=\"sm\" color=\"gray.500\">{widget.label}</Text>\n {widget.description ? <Text fontSize=\"xs\" color=\"gray.400\" mt={1}>{widget.description}</Text> : null}\n {metricsQuery.isLoading ? <Heading size=\"xl\" mt={2}>…</Heading> : null}\n {metricsQuery.isError ? <Text color=\"red.600\" mt={3}>Não foi possível carregar este indicador.</Text> : null}\n {!metricsQuery.isLoading && !metricsQuery.isError && grouped ? (\n <SimpleGrid columns={{ base: 1, md: 2, lg: 3 }} gap={3} mt={4}>\n {(result?.groups ?? []).length ? result?.groups?.map((group) => (\n <Box key={group.key} borderWidth=\"1px\" borderColor=\"gray.100\" borderRadius=\"md\" p={3}>\n <Text fontSize=\"xs\" color=\"gray.500\">{group.key}</Text>\n <Heading size=\"md\" mt={1}>{formatMetric(group.value, format)}</Heading>\n </Box>\n )) : <Text color=\"gray.500\">Nenhum ticket encontrado.</Text>}\n </SimpleGrid>\n ) : null}\n {!metricsQuery.isLoading && !metricsQuery.isError && !grouped ? (\n <Heading size=\"xl\" mt={2}>{formatMetric(result?.value, format)}</Heading>\n ) : null}\n </Box>\n );\n })}\n </SimpleGrid>\n </Stack>\n );\n}\n","import { useMemo, 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 { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { Can } from \"../security/PermissionGate\";\n\ninterface Role {\n code: string;\n name: string;\n description?: string;\n admin?: boolean;\n permissions: string[];\n}\n\ninterface Invitation {\n id: string;\n status: string;\n expiresAt: string;\n}\n\ninterface AccessUser {\n id: string;\n identityId?: string;\n email: string;\n name?: string;\n roleCode: string;\n status: \"invited\" | \"active\" | \"disabled\" | \"revoked\";\n invitedAt?: string;\n activatedAt?: string;\n lastAccessAt?: string;\n invitation?: Invitation;\n}\n\nconst selectStyle = {\n height: \"40px\",\n border: \"1px solid #E2E8F0\",\n borderRadius: \"6px\",\n padding: \"0 12px\",\n background: \"white\",\n} as const;\n\nfunction fmt(value?: string) {\n if (!value) return \"—\";\n try {\n return new Intl.DateTimeFormat(\"pt-BR\", { dateStyle: \"short\", timeStyle: \"short\" }).format(new Date(value));\n } catch {\n return value;\n }\n}\n\nexport function CoreUsersAccess() {\n const { http } = useOonApi();\n const queryClient = useQueryClient();\n const [email, setEmail] = useState(\"\");\n const [name, setName] = useState(\"\");\n const [roleCode, setRoleCode] = useState(\"\");\n const [inviteUrl, setInviteUrl] = useState<string | null>(null);\n const [message, setMessage] = useState<string | null>(null);\n\n const rbac = useQuery({\n queryKey: [\"oon\", \"rbac\"],\n queryFn: async () => (await http.get<{ enabled: boolean; roles: Role[] }>(\"/core/rbac\")).data,\n staleTime: 5 * 60 * 1000,\n });\n const roles = rbac.data?.roles ?? [];\n const users = useQuery({\n queryKey: [\"oon\", \"rbac\", \"users\"],\n queryFn: async () => (await http.get<{ results: AccessUser[] }>(\"/core/users\")).data.results,\n enabled: rbac.data?.enabled === true,\n });\n\n const defaultRole = useMemo(() => roles.find((role) => !role.admin)?.code || roles[0]?.code || \"\", [roles]);\n const selectedRole = roleCode || defaultRole;\n\n const invite = useMutation({\n mutationFn: async () => (await http.post<{ inviteUrl: string }>(\"/core/users/invitations\", {\n email: email.trim(),\n name: name.trim() || undefined,\n roleCode: selectedRole,\n })).data,\n onSuccess: async (data) => {\n setInviteUrl(data.inviteUrl);\n setMessage(\"Convite criado. Copie o link e envie manualmente ao usuário.\");\n setEmail(\"\");\n setName(\"\");\n await queryClient.invalidateQueries({ queryKey: [\"oon\", \"rbac\", \"users\"] });\n },\n });\n\n const updateUser = useMutation({\n mutationFn: async ({ id, payload }: { id: string; payload: Record<string, string> }) => {\n await http.patch(`/core/users/${id}`, payload);\n },\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey: [\"oon\", \"rbac\", \"users\"] });\n },\n });\n\n const copyInvitation = useMutation({\n mutationFn: async (id: string) => (await http.get<{ inviteUrl: string }>(`/core/users/invitations/${id}/link`)).data,\n onSuccess: async (data) => {\n setInviteUrl(data.inviteUrl);\n setMessage(\"Link válido recuperado. Você pode copiá-lo e reenviar manualmente.\");\n await navigator.clipboard.writeText(data.inviteUrl).catch(() => undefined);\n },\n });\n\n const regenerate = useMutation({\n mutationFn: async (id: string) => (await http.post<{ inviteUrl: string }>(`/core/users/invitations/${id}/regenerate`)).data,\n onSuccess: async (data) => {\n setInviteUrl(data.inviteUrl);\n setMessage(\"Novo link gerado. O link anterior foi invalidado.\");\n await queryClient.invalidateQueries({ queryKey: [\"oon\", \"rbac\", \"users\"] });\n },\n });\n\n async function submit(event: FormEvent) {\n event.preventDefault();\n setMessage(null);\n setInviteUrl(null);\n await invite.mutateAsync();\n }\n\n if (rbac.isLoading) return <Box p={6}>Carregando acessos…</Box>;\n if (rbac.data?.enabled === false) {\n return (\n <Box p={6}>\n <Heading size=\"lg\">Usuários e Acessos</Heading>\n <Text mt={3} color=\"gray.600\">Esta Central está em modo de acesso legado. Declare <code>rbac</code> no central.app.json para habilitar a gestão nativa.</Text>\n </Box>\n );\n }\n\n return (\n <Box p={{ base: 4, md: 7 }}>\n <Flex justify=\"space-between\" align=\"start\" gap={6} wrap=\"wrap\">\n <Box>\n <Heading size=\"lg\">Usuários e Acessos</Heading>\n <Text mt={2} color=\"gray.600\">Perfis e permissões são definidos pela Central; a segurança efetiva é aplicada no backend.</Text>\n </Box>\n </Flex>\n\n <Can permission=\"users.invite\">\n <Box mt={7} borderWidth=\"1px\" borderRadius=\"14px\" p={5} bg=\"white\">\n <Heading size=\"md\">Convidar usuário</Heading>\n <form onSubmit={(event) => void submit(event)}>\n <Flex mt={4} gap={3} wrap=\"wrap\" align=\"end\">\n <Box minW=\"220px\" flex=\"1\">\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Nome</Text>\n <Input value={name} onChange={(event) => setName(event.target.value)} placeholder=\"Nome do usuário\" />\n </Box>\n <Box minW=\"260px\" flex=\"1\">\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">E-mail</Text>\n <Input type=\"email\" required value={email} onChange={(event) => setEmail(event.target.value)} placeholder=\"usuario@empresa.com.br\" />\n </Box>\n <Box minW=\"190px\">\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Perfil</Text>\n <select style={{ ...selectStyle, width: \"100%\" }} value={selectedRole} onChange={(event) => setRoleCode(event.target.value)}>\n {roles.map((role) => <option key={role.code} value={role.code}>{role.name}</option>)}\n </select>\n </Box>\n <Button type=\"submit\" disabled={invite.isPending || !email.trim() || !selectedRole}>Gerar convite</Button>\n </Flex>\n </form>\n {message ? <Text mt={4} fontSize=\"sm\">{message}</Text> : null}\n {inviteUrl ? (\n <Flex mt={2} gap={2} align=\"center\" wrap=\"wrap\">\n <Input value={inviteUrl} readOnly flex=\"1\" minW=\"280px\" />\n <Button type=\"button\" onClick={() => void navigator.clipboard.writeText(inviteUrl)}>Copiar link</Button>\n </Flex>\n ) : null}\n </Box>\n </Can>\n\n <VStack mt={7} align=\"stretch\" gap={3}>\n {(users.data ?? []).map((user) => (\n <Box key={user.id} borderWidth=\"1px\" borderRadius=\"14px\" p={4} bg=\"white\">\n <Flex justify=\"space-between\" gap={4} align=\"center\" wrap=\"wrap\">\n <Box minW=\"220px\" flex=\"1\">\n <Text fontWeight=\"700\">{user.name || user.email}</Text>\n <Text fontSize=\"sm\" color=\"gray.600\">{user.email}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\" mt={1}>Status: {user.status} · Último acesso: {fmt(user.lastAccessAt)}</Text>\n </Box>\n\n <Can permission=\"users.update\">\n <select style={selectStyle} value={user.roleCode} onChange={(event) => updateUser.mutate({ id: user.id, payload: { roleCode: event.target.value } })}>\n {roles.map((role) => <option key={role.code} value={role.code}>{role.name}</option>)}\n </select>\n </Can>\n\n {user.invitation?.status === \"pending\" ? (\n <Can permission=\"users.invite\">\n <Flex gap={2} wrap=\"wrap\">\n <Button size=\"sm\" variant=\"outline\" onClick={() => copyInvitation.mutate(user.invitation!.id)}>Copiar link</Button>\n <Button size=\"sm\" onClick={() => regenerate.mutate(user.invitation!.id)}>Gerar novo link</Button>\n </Flex>\n </Can>\n ) : null}\n\n <Can permission=\"users.disable\">\n {user.status === \"active\" ? (\n <Button size=\"sm\" variant=\"outline\" onClick={() => updateUser.mutate({ id: user.id, payload: { status: \"disabled\" } })}>Desabilitar</Button>\n ) : user.status === \"disabled\" ? (\n <Button size=\"sm\" variant=\"outline\" onClick={() => updateUser.mutate({ id: user.id, payload: { status: \"active\" } })}>Habilitar</Button>\n ) : null}\n </Can>\n </Flex>\n </Box>\n ))}\n </VStack>\n </Box>\n );\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. O backend continua sendo\n * a autoridade; este componente evita expor ações indisponíveis na interface.\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\n/** Alias canônico e curto para uso declarativo nas Centrais. */\nexport const Can = PermissionGate;\n","import { Box, Button, Flex, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport { useNavigate } from \"react-router-dom\";\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 const navigate = useNavigate();\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 \"navigation.cards\":\n return (\n <Flex gap={4} wrap=\"wrap\">\n {block.cards.map((card) => (\n <Box\n key={`${card.title}:${card.href}`}\n minW=\"260px\"\n flex={`1 1 calc(${100 / (block.columns ?? 2)}% - 16px)`}\n borderWidth=\"1px\"\n borderRadius=\"lg\"\n bg=\"white\"\n p={5}\n >\n <Stack gap={3} height=\"100%\">\n <Box flex=\"1\">\n <Heading size=\"md\" mb={2}>{card.title}</Heading>\n {card.description ? <Text color=\"gray.600\">{card.description}</Text> : null}\n </Box>\n <Button\n alignSelf=\"flex-start\"\n variant=\"outline\"\n onClick={() => {\n if (card.external) {\n window.open(card.href, \"_blank\", \"noopener,noreferrer\");\n return;\n }\n navigate(card.href);\n }}\n >\n {card.actionLabel || \"Abrir\"}\n </Button>\n </Stack>\n </Box>\n ))}\n </Flex>\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 { 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 { CollectionViewDef, DashboardViewDef, DocumentViewDef, OonCoreFrontConfig, OonMenuItem, OonRoute, OonViewDefinition, OonPageDef } from \"../types\";\nimport type { OonPipelineViewDef } from \"../pipelineTicket\";\nimport { CoreCollection } from \"../components/CoreCollection\";\nimport { CoreDocument } from \"../components/CoreDocument\";\nimport { CorePipeline } from \"../components/CorePipeline\";\nimport { CoreDashboard } from \"../components/CoreDashboard\";\nimport { CoreUsersAccess } from \"../components/CoreUsersAccess\";\nimport { CorePage } from \"../components/ui-v2/CorePage\";\n\nexport interface ResolvedRegistry { routes: OonRoute[]; menu: OonMenuItem[]; }\nfunction slug(value: string): string { return value.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\").toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\"); }\nfunction requiredPermissions(source: { permissions?: string[] }): string[] | undefined { const values = [...(source.permissions ?? [])].filter(Boolean); return values.length ? values : undefined; }\nfunction declaredAppCapabilities(config: OonCoreFrontConfig): string[] | undefined { const capabilities = (config.app as OonCoreFrontConfig[\"app\"] & { capabilities?: string[] }).capabilities; return Array.isArray(capabilities) ? capabilities : undefined; }\nfunction supportsCapabilities(config: OonCoreFrontConfig, source: { capabilities?: string[] }): boolean { const required = (source.capabilities ?? []).filter(Boolean); if (!required.length) return true; const declared = declaredAppCapabilities(config); if (!declared) return true; return required.every((capability) => declared.includes(capability)); }\nfunction viewId(view: OonViewDefinition): string { if (view.id) return view.id; if (view.type === \"dashboard\") return \"dashboard\"; return slug(view.model); }\nfunction viewPath(view: OonViewDefinition): string { if (view.path) return view.path; if (view.type === \"dashboard\") return \"/\"; return `/${viewId(view)}`; }\nfunction viewLabel(view: OonViewDefinition): string { if (view.label) return view.label; if (view.type === \"dashboard\") return \"Dashboard\"; return view.model; }\nfunction renderView(view: OonViewDefinition, registry?: OonCoreFrontConfig[\"registry\"]) {\n switch (view.type) {\n case \"collection\": { const v = view as CollectionViewDef; return <CoreCollection model={v.model} mode={v.mode} columns={v.columns} form={v.form} label={viewLabel(v)} section={v.section} importExport={v.importExport} list={v.list} relations={v.relations} detailModal={v.detailModal} cellRenderers={registry?.cellRenderers} />; }\n case \"document\": { const v = view as DocumentViewDef; return <CoreDocument model={v.model} label={viewLabel(v)} approval={v.approval} attachments={v.attachments} />; }\n case \"pipeline\": { const v = view as OonPipelineViewDef; return <CorePipeline model={v.model} label={viewLabel(v)} stageField={v.stageField} stages={v.stages} titleField={v.titleField} form={v.form} relations={v.relations} ticketModal={v.ticketModal} filters={v.filters} create={v.create} viewModes={v.viewModes} defaultView={v.defaultView} list={v.list} defaultActions={v.defaultActions} ticketActions={v.ticketActions} />; }\n case \"dashboard\": { const v = view as DashboardViewDef; return <CoreDashboard label={viewLabel(v)} widgets={v.widgets} />; }\n default: return null;\n }\n}\nfunction viewToRoute(view: OonViewDefinition, registry?: OonCoreFrontConfig[\"registry\"]): OonRoute { return { path: viewPath(view), element: renderView(view, registry), permissions: requiredPermissions(view), capabilities: \"capabilities\" in view ? view.capabilities : undefined }; }\nfunction pageToRoute(page: OonPageDef, registry: OonCoreFrontConfig[\"registry\"]): OonRoute { return { path: page.path, element: <CorePage page={page} registry={registry} />, permissions: requiredPermissions(page), capabilities: page.capabilities }; }\nfunction pageToMenu(page: OonPageDef): OonMenuItem | null { if (!page.label) return null; return { label: page.label, href: page.path, icon: page.icon, section: page.section, permissions: requiredPermissions(page), capabilities: page.capabilities, hidden: page.hidden, order: page.order }; }\nfunction viewToMenu(view: OonViewDefinition): OonMenuItem { const extended = view as OonViewDefinition & { hidden?: boolean; order?: number }; return { label: viewLabel(view), href: viewPath(view), icon: view.icon, section: view.section, permissions: requiredPermissions(view), capabilities: \"capabilities\" in view ? view.capabilities : undefined, hidden: extended.hidden, order: extended.order }; }\n\nexport function resolveRegistry(config: OonCoreFrontConfig): ResolvedRegistry {\n const routes: OonRoute[] = []; const menu: OonMenuItem[] = []; const seenPaths = new Set<string>(); const componentRegistry = config.registry ?? config.ui?.registry;\n const pushRoute = (route: OonRoute) => { if (!supportsCapabilities(config, route) || seenPaths.has(route.path)) return; seenPaths.add(route.path); routes.push({ ...route, permissions: requiredPermissions(route) }); };\n const pushMenu = (item: OonMenuItem) => { if (!supportsCapabilities(config, item)) return; menu.push({ ...item, permissions: requiredPermissions(item) }); };\n for (const mod of config.modules ?? []) { for (const route of mod.routes ?? []) pushRoute(route); for (const item of mod.menu ?? []) pushMenu(item); for (const view of mod.views ?? []) { pushRoute(viewToRoute(view, componentRegistry)); pushMenu(viewToMenu(view)); } }\n if ([\"root-central\", \"member-central\"].includes(String(config.app.kind || \"\"))) { pushRoute({ path: \"/usuarios-acessos\", element: <CoreUsersAccess />, permissions: [\"users.read\"] }); pushMenu({ label: \"Usuários e Acessos\", href: \"/usuarios-acessos\", section: \"Configurações\", order: 900, permissions: [\"users.read\"] }); }\n const navMode = config.ui?.navigation?.mode ?? \"auto\"; const includeAuto = navMode === \"auto\" || navMode === \"mixed\"; const includeManual = navMode === \"manual\" || navMode === \"mixed\";\n if (includeAuto) { for (const view of config.ui?.views ?? []) { pushRoute(viewToRoute(view, componentRegistry)); pushMenu(viewToMenu(view)); } for (const page of config.ui?.pages ?? []) { pushRoute(pageToRoute(page, componentRegistry)); const item = pageToMenu(page); if (item) pushMenu(item); } }\n if (includeManual) for (const item of config.ui?.navigation?.items ?? []) pushMenu(item);\n menu.sort((a, b) => (a.order ?? 100) - (b.order ?? 100)); return { routes, menu };\n}\n","import {\n Navigate,\n createBrowserRouter,\n type RouteObject,\n} from \"react-router-dom\";\nimport type {\n OonAppConfig,\n OonMenuItem,\n OonRoute,\n OonLayoutConfig,\n OonComponentRegistry,\n OonSecurityConfig,\n} from \"../types\";\nimport { AuthenticatedLayout } from \"../shell/AuthenticatedLayout\";\nimport { AccessDeniedPage } from \"../security/AccessDeniedPage\";\nimport { AppAccessGuard } from \"../security/AppAccessGuard\";\nimport { LoginPage } from \"../security/LoginPage\";\nimport { AcceptInvitePage } from \"../security/AcceptInvitePage\";\nimport { FirstAccessPage } from \"../security/FirstAccessPage\";\nimport {\n ActivationPage,\n InstanceBlockedPage,\n} from \"../security/ActivationPage\";\nimport { RouteGuard } from \"../security/RouteGuard\";\nimport { ActivationGuard } from \"../security/ActivationGuard\";\n\nexport interface RouterInput {\n app: OonAppConfig;\n menu: OonMenuItem[];\n routes: OonRoute[];\n security?: OonSecurityConfig;\n layout?: OonLayoutConfig;\n registry?: OonComponentRegistry;\n}\n\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 ) : route.element;\n return route.path === \"/\"\n ? { index: true, element }\n : { path: route.path.replace(/^\\//, \"\"), element };\n });\n\n const hasIndexRoute = privateSource.some((route) => route.path === \"/\");\n const firstRoute = privateSource.find((route) => route.path !== \"/\");\n if (!hasIndexRoute && firstRoute) {\n privateRoutes.unshift({ index: true, element: <Navigate to={firstRoute.path} replace /> });\n }\n\n const customPaths = new Set(publicRoutes.map((route) => route.path));\n const builtInPublicRoutes: RouteObject[] = [];\n\n if (!customPaths.has(\"/login\")) {\n builtInPublicRoutes.push({\n path: \"/login\",\n element: <ActivationGuard><LoginPage app={app} /></ActivationGuard>,\n });\n }\n if (!customPaths.has(\"/accept-invite\")) {\n builtInPublicRoutes.push({\n path: \"/accept-invite\",\n element: <ActivationGuard><AcceptInvitePage /></ActivationGuard>,\n });\n }\n if (!customPaths.has(\"/first-access\")) {\n builtInPublicRoutes.push({\n path: \"/first-access\",\n element: <ActivationGuard><FirstAccessPage /></ActivationGuard>,\n });\n }\n if (!customPaths.has(\"/ativacao\")) builtInPublicRoutes.push({ path: \"/ativacao\", element: <ActivationPage /> });\n if (!customPaths.has(\"/instancia-suspensa\")) {\n builtInPublicRoutes.push({\n path: \"/instancia-suspensa\",\n element: <InstanceBlockedPage title=\"Instância suspensa\" message=\"Esta Central está suspensa.\" />,\n });\n }\n if (!customPaths.has(\"/instancia-revogada\")) {\n builtInPublicRoutes.push({\n path: \"/instancia-revogada\",\n element: <InstanceBlockedPage title=\"Instância revogada\" message=\"Esta Central foi revogada.\" />,\n });\n }\n if (!customPaths.has(\"/acesso-negado\")) {\n builtInPublicRoutes.push({ path: \"/acesso-negado\", element: <AccessDeniedPage app={app} /> });\n }\n\n const tree: RouteObject[] = [\n ...builtInPublicRoutes,\n ...publicRoutes,\n {\n path: \"/\",\n element: (\n <ActivationGuard>\n <AppAccessGuard>\n <AuthenticatedLayout app={app} menu={menu} layout={layout} registry={registry} />\n </AppAccessGuard>\n </ActivationGuard>\n ),\n children: privateRoutes,\n },\n ];\n\n return createBrowserRouter(tree);\n}\n","import { Box, Button, Flex, Spacer, Text } from \"@chakra-ui/react\";\nimport { Outlet, useNavigate } from \"react-router-dom\";\nimport type {\n OonAppConfig,\n OonComponentRegistry,\n OonLayoutConfig,\n OonMenuItem,\n} from \"../types\";\nimport { useOonAuth } from \"../security/AuthProvider\";\nimport { useCoreMetadata } from \"../api/ApiProvider\";\nimport { Sidebar } from \"./Sidebar\";\nimport { resolveComponent, MissingRenderer } from \"../app/componentRegistry\";\nimport {\n formatRuntimeDate,\n resolveRuntimeVersionInfo,\n shortCommit,\n} from \"../runtime/versionInfo\";\n\nfunction SettingsIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 15.25a3.25 3.25 0 1 0 0-6.5 3.25 3.25 0 0 0 0 6.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n />\n <path\n d=\"M19.43 12.98c.04-.32.07-.65.07-.98s-.03-.66-.08-.98l2.12-1.66-2-3.46-2.5 1a7.64 7.64 0 0 0-1.7-.98L15 3.25h-4l-.35 2.67c-.61.25-1.18.58-1.7.98l-2.5-1-2 3.46 2.12 1.66c-.04.32-.07.65-.07.98s.03.66.08.98l-2.12 1.66 2 3.46 2.5-1c.52.4 1.09.73 1.7.98l.34 2.67h4l.35-2.67a7.64 7.64 0 0 0 1.7-.98l2.5 1 2-3.46-2.12-1.66Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction resolveSettingsHref(menu: OonMenuItem[]): string | null {\n const explicit = menu.find((item) => item.action === \"settings\");\n if (explicit) return explicit.href;\n\n const settingsPage = menu.find((item) => item.href === \"/configuracoes\");\n if (settingsPage) return settingsPage.href;\n\n const integrationsPage = menu.find((item) => item.href === \"/integracoes\");\n return integrationsPage?.href ?? null;\n}\n\nfunction CoreTopbar({ app, menu }: { app: OonAppConfig; menu: OonMenuItem[] }) {\n const { user, logout, hasPermission } = useOonAuth();\n const navigate = useNavigate();\n const metadataQuery = useCoreMetadata();\n const runtime = resolveRuntimeVersionInfo(app, metadataQuery.data);\n const centralVersion = runtime.centralVersion ?? \"não informada\";\n const backendVersion = metadataQuery.isLoading\n ? \"carregando\"\n : runtime.coreBackVersion ?? \"indisponível\";\n const updatedAt = formatRuntimeDate(runtime.updatedAt);\n const commit = shortCommit(runtime.commit);\n const publicationParts = [\n updatedAt ? `Atualizado ${updatedAt}` : undefined,\n commit ? `commit ${commit}` : undefined,\n runtime.releaseId ? `release ${runtime.releaseId}` : undefined,\n ].filter(Boolean);\n const details = [\n `Central ${centralVersion}`,\n `OonCore front ${runtime.coreFrontVersion}`,\n `OonCore back ${backendVersion}`,\n runtime.environment ? `Ambiente ${runtime.environment}` : undefined,\n runtime.commit ? `Commit ${runtime.commit}` : undefined,\n runtime.releaseId ? `Release ${runtime.releaseId}` : undefined,\n runtime.startedAt ? `Backend iniciado ${formatRuntimeDate(runtime.startedAt)}` : undefined,\n ].filter(Boolean).join(\" · \");\n const settingsHref = resolveSettingsHref(\n menu.filter((item) => hasPermission(item.permissions)),\n );\n\n return (\n <Flex\n as=\"header\"\n align=\"center\"\n minH=\"64px\"\n px={{ base: 4, lg: 6 }}\n py={3}\n borderBottomWidth=\"1px\"\n borderColor=\"#E8ECEF\"\n bg=\"rgba(255, 255, 255, 0.96)\"\n backdropFilter=\"blur(10px)\"\n position=\"sticky\"\n top={0}\n zIndex={10}\n >\n <Box minW={0} title={details}>\n <Text\n fontSize=\"xs\"\n fontWeight=\"600\"\n color=\"brand.500\"\n textTransform=\"uppercase\"\n letterSpacing=\"0.08em\"\n >\n Central Oon\n </Text>\n <Text fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">\n {app.title ?? app.name}\n </Text>\n <Text fontSize=\"10px\" color=\"gray.600\" lineHeight=\"1.35\">\n Central {centralVersion} · Front {runtime.coreFrontVersion} · Back {backendVersion}\n </Text>\n {publicationParts.length ? (\n <Text fontSize=\"10px\" color=\"gray.500\" lineHeight=\"1.35\">\n {publicationParts.join(\" · \")}\n </Text>\n ) : null}\n </Box>\n <Spacer />\n {user ? (\n <Flex align=\"center\" gap={3}>\n <Box textAlign=\"right\" display={{ base: \"none\", md: \"block\" }}>\n <Text fontSize=\"sm\" fontWeight=\"600\" color=\"#24323A\">\n {user.nome}\n </Text>\n {user.email ? <Text fontSize=\"xs\" color=\"gray.500\">{user.email}</Text> : null}\n </Box>\n {settingsHref ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n colorPalette=\"brand\"\n borderRadius=\"8px\"\n minW=\"36px\"\n px={2}\n aria-label=\"Abrir configurações\"\n title=\"Configurações\"\n onClick={() => navigate(settingsHref)}\n >\n <SettingsIcon />\n </Button>\n ) : null}\n <Button\n size=\"sm\"\n variant=\"outline\"\n colorPalette=\"brand\"\n borderRadius=\"8px\"\n onClick={logout}\n >\n Sair\n </Button>\n </Flex>\n ) : null}\n </Flex>\n );\n}\n\nfunction Slot({\n name,\n slot,\n registry,\n app,\n menu,\n}: {\n name: \"sidebar\" | \"topbar\" | \"header\" | \"footer\";\n slot?: string;\n registry?: OonComponentRegistry;\n app: OonAppConfig;\n menu: OonMenuItem[];\n}) {\n if (slot === \"none\") return null;\n if (slot?.startsWith(\"custom:\")) {\n const Component = resolveComponent(registry, slot, \"layoutSlots\");\n return Component\n ? <Component app={app} menu={menu} />\n : <MissingRenderer renderer={slot} />;\n }\n if (name === \"sidebar\") return <Sidebar app={app} menu={menu} registry={registry} />;\n if (name === \"topbar\") return <CoreTopbar app={app} menu={menu} />;\n if (name === \"footer\" && slot === \"core\") {\n return (\n <Box as=\"footer\" px={6} py={4} color=\"gray.500\" fontSize=\"xs\" borderTopWidth=\"1px\">\n OonCore\n </Box>\n );\n }\n return null;\n}\n\nexport function DefaultShell({\n app,\n menu,\n layout,\n registry,\n}: {\n app: OonAppConfig;\n menu: OonMenuItem[];\n layout?: OonLayoutConfig;\n registry?: OonComponentRegistry;\n}) {\n const portal = layout?.shell === \"portal\" || layout?.shell === \"content-only\";\n const mainPadding = portal ? { base: 4, lg: 10 } : { base: 4, lg: 6 };\n return (\n <Flex align=\"stretch\" minH=\"100vh\" bg={portal ? \"white\" : \"#F8F9FA\"}>\n <Slot\n name=\"sidebar\"\n slot={layout?.sidebar ?? \"core\"}\n registry={registry}\n app={app}\n menu={menu}\n />\n <Flex direction=\"column\" flex=\"1\" minW={0}>\n <Slot\n name=\"topbar\"\n slot={layout?.topbar ?? \"core\"}\n registry={registry}\n app={app}\n menu={menu}\n />\n <Slot name=\"header\" slot={layout?.header} registry={registry} app={app} menu={menu} />\n <Box as=\"main\" flex=\"1\" p={mainPadding} minW={0}>\n <Box maxW={portal ? \"1180px\" : \"1680px\"} mx=\"auto\">\n <Outlet />\n </Box>\n </Box>\n <Slot\n name=\"footer\"\n slot={layout?.footer ?? \"none\"}\n registry={registry}\n app={app}\n menu={menu}\n />\n </Flex>\n </Flex>\n );\n}\n\nexport function PortalShell(props: {\n app: OonAppConfig;\n menu: OonMenuItem[];\n layout?: OonLayoutConfig;\n registry?: OonComponentRegistry;\n}) {\n return <DefaultShell {...props} layout={{ ...props.layout, shell: \"portal\" }} />;\n}\n","import { Box, Flex, Image, 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","{\n \"name\": \"@oondemand/oon-core-front\",\n \"version\": \"0.4.2\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/oondemand/oon-platform.git\",\n \"directory\": \"packages/oonCore-front\"\n },\n \"description\": \"Core de frontend para Centrais Oon: shell, providers, roteamento por metadata, SDK REST do /core/*, RBAC e componentes Core* (Coleção, Documento, Esteira, Multi-moedas, Assistente, Dashboard).\",\n \"type\": \"module\",\n \"main\": \"dist/index.js\",\n \"module\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"bin\": {\n \"oonCore-front\": \"bin/cli.js\"\n },\n \"files\": [\n \"bin\",\n \"dist\",\n \"README.md\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"prepublishOnly\": \"npm run build\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run\"\n },\n \"engines\": {\n \"node\": \">=18\"\n },\n \"keywords\": [\n \"oondemand\",\n \"ooncore\",\n \"central\",\n \"frontend\",\n \"metadata-driven\",\n \"react\",\n \"vite\"\n ],\n \"license\": \"SEE LICENSE IN LICENSE\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"dependencies\": {\n \"axios\": \"^1.7.7\"\n },\n \"peerDependencies\": {\n \"@chakra-ui/react\": \"^3.0.0\",\n \"@tanstack/react-query\": \"^5.0.0\",\n \"@tanstack/react-table\": \"^8.0.0\",\n \"react\": \"^18.0.0\",\n \"react-dom\": \"^18.0.0\",\n \"react-router-dom\": \"^6.0.0\"\n },\n \"devDependencies\": {\n \"@testing-library/dom\": \"^10.4.1\",\n \"@testing-library/react\": \"^16.3.2\",\n \"@types/react\": \"^18.3.18\",\n \"@types/react-dom\": \"^18.3.5\",\n \"happy-dom\": \"^20.10.2\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.5.0\",\n \"vitest\": \"^2.0.0\"\n }\n}\n","import frontPackage from \"../../package.json\";\nimport type { CoreMetadata, OonAppConfig } from \"../types\";\n\nexport interface RuntimeVersionInfo {\n centralVersion?: string;\n coreFrontVersion: string;\n coreBackVersion?: string;\n updatedAt?: string;\n startedAt?: string;\n commit?: string;\n releaseId?: string;\n environment?: string;\n}\n\ninterface RuntimeMetadataExtension {\n runtime?: {\n core?: {\n backendVersion?: string;\n };\n central?: {\n version?: string;\n };\n deployment?: {\n builtAt?: string;\n startedAt?: string;\n commit?: string;\n releaseId?: string;\n environment?: string;\n };\n };\n}\n\ntype RuntimeMetadata = CoreMetadata & RuntimeMetadataExtension;\ntype BuildEnvironment = Record<string, string | undefined>;\n\nfunction value(...candidates: Array<string | undefined>): string | undefined {\n return candidates.find((candidate) => typeof candidate === \"string\" && candidate.trim())?.trim();\n}\n\nfunction browserBuildEnvironment(): BuildEnvironment {\n return (import.meta.env ?? {}) as BuildEnvironment;\n}\n\nexport function resolveRuntimeVersionInfo(\n app: OonAppConfig,\n metadata?: CoreMetadata,\n environment: BuildEnvironment = browserBuildEnvironment(),\n): RuntimeVersionInfo {\n const extended = metadata as RuntimeMetadata | undefined;\n const runtime = extended?.runtime;\n const deployment = runtime?.deployment;\n\n return {\n centralVersion: value(\n environment.VITE_OON_CENTRAL_VERSION,\n app.version,\n runtime?.central?.version,\n ),\n coreFrontVersion: frontPackage.version,\n coreBackVersion: value(runtime?.core?.backendVersion, metadata?.service?.version),\n updatedAt: value(\n environment.VITE_OON_BUILD_TIME,\n deployment?.builtAt,\n deployment?.startedAt,\n ),\n startedAt: deployment?.startedAt,\n commit: value(environment.VITE_OON_BUILD_COMMIT, deployment?.commit),\n releaseId: value(environment.VITE_OON_RELEASE_ID, deployment?.releaseId),\n environment: value(environment.VITE_OON_ENVIRONMENT, deployment?.environment),\n };\n}\n\nexport function formatRuntimeDate(valueToFormat?: string): string | undefined {\n if (!valueToFormat) return undefined;\n const date = new Date(valueToFormat);\n if (Number.isNaN(date.getTime())) return valueToFormat;\n return new Intl.DateTimeFormat(\"pt-BR\", {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n }).format(date);\n}\n\nexport function shortCommit(commit?: string): string | undefined {\n if (!commit) return undefined;\n return commit.length > 8 ? commit.slice(0, 8) : commit;\n}\n","import type { OonAppConfig, OonComponentRegistry, OonLayoutConfig, OonMenuItem } from \"../types\";\nimport { resolveComponent, MissingRenderer } from \"../app/componentRegistry\";\nimport { DefaultShell, PortalShell } from \"./DefaultShell\";\n\n/** Layout autenticado padrão mantido como wrapper de compatibilidade v1. */\nexport function AuthenticatedLayout({ app, menu, layout, registry }: { app: OonAppConfig; menu: OonMenuItem[]; layout?: OonLayoutConfig; registry?: OonComponentRegistry }) {\n if (layout?.shell?.startsWith(\"custom:\")) {\n const CustomShell = resolveComponent(registry, layout.shell, \"layoutSlots\");\n return CustomShell ? <CustomShell app={app} menu={menu} layout={layout} /> : <MissingRenderer renderer={layout.shell} />;\n }\n if (layout?.shell === \"portal\") return <PortalShell app={app} menu={menu} layout={layout} registry={registry} />;\n return <DefaultShell app={app} menu={menu} layout={layout} registry={registry} />;\n}\n","import { Box, Button, Flex, Heading, Text, VStack } from \"@chakra-ui/react\";\nimport { useNavigate } from \"react-router-dom\";\nimport type { OonAppConfig } from \"../types\";\nimport { useOonAuth } from \"./AuthProvider\";\n\n/** Página exibida quando o usuário está autenticado, mas não possui o app. */\nexport function AccessDeniedPage({ app }: { app: OonAppConfig }) {\n const { logout } = useOonAuth();\n const navigate = useNavigate();\n\n function useAnotherAccount() {\n logout();\n navigate(\"/login\", { replace: true });\n }\n\n return (\n <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box\n width=\"100%\"\n maxW=\"560px\"\n bg=\"white\"\n borderWidth=\"1px\"\n borderColor=\"#E4EBEF\"\n borderRadius=\"18px\"\n boxShadow=\"0 24px 70px rgba(7, 38, 46, 0.10)\"\n p={{ base: 6, md: 10 }}\n >\n <VStack align=\"stretch\" gap={6}>\n <Box\n width=\"56px\"\n height=\"56px\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n borderRadius=\"16px\"\n bg=\"orange.50\"\n color=\"orange.700\"\n fontSize=\"2xl\"\n fontWeight=\"800\"\n aria-hidden=\"true\"\n >\n !\n </Box>\n\n <Box>\n <Text\n color=\"#39BFED\"\n fontSize=\"xs\"\n fontWeight=\"700\"\n letterSpacing=\"0.12em\"\n textTransform=\"uppercase\"\n >\n Acesso negado\n </Text>\n <Heading mt={2} size=\"lg\" color=\"#07262E\">\n Você não possui permissão para este aplicativo\n </Heading>\n <Text mt={3} color=\"gray.600\">\n Seu usuário foi autenticado, mas não existe uma permissão ativa\n para acessar {app.title ?? app.name}. Solicite o acesso ao\n administrador da sua organização.\n </Text>\n </Box>\n\n <Button\n alignSelf=\"flex-start\"\n bg=\"#07262E\"\n color=\"white\"\n _hover={{ bg: \"#0B3843\" }}\n onClick={useAnotherAccount}\n >\n Entrar com outra conta\n </Button>\n </VStack>\n </Box>\n </Flex>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { Navigate, useLocation } from \"react-router-dom\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\nimport { useOonAuth } from \"./AuthProvider\";\n\nfunction loginRedirect(pathname: string, search: string): string {\n const destination = `${pathname}${search}`;\n return `/login?redirect=${encodeURIComponent(destination)}`;\n}\n\nexport function AppAccessGuard({ children }: { children: ReactNode }) {\n const { status, retry } = useOonAuth();\n const location = useLocation();\n\n if (status === \"loading\") return <LoadingScreen />;\n if (status === \"unauthenticated\") {\n return <Navigate to={loginRedirect(location.pathname, location.search)} replace />;\n }\n if (status === \"first-access\") return <Navigate to=\"/first-access\" replace />;\n if (status === \"forbidden\") return <Navigate to=\"/acesso-negado\" replace />;\n if (status === \"error\") {\n return (\n <LoadingScreen\n message=\"Não foi possível validar seu acesso. Tente novamente.\"\n actionLabel=\"Tentar novamente\"\n onAction={() => { void retry().catch(() => undefined); }}\n />\n );\n }\n return <>{children}</>;\n}\n","import { useState, type FormEvent } from \"react\";\nimport {\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 { useState, type FormEvent } from \"react\";\nimport { Box, Button, Flex, Heading, Input, Text, VStack } from \"@chakra-ui/react\";\nimport { Navigate } from \"react-router-dom\";\nimport { useOonAuth } from \"./AuthProvider\";\n\nexport function FirstAccessPage() {\n const { status, completeFirstAccess } = useOonAuth();\n const [password, setPassword] = useState(\"\");\n const [confirm, setConfirm] = useState(\"\");\n const [submitting, setSubmitting] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n\n if (status === \"authenticated\") return <Navigate to=\"/\" replace />;\n if (status === \"unauthenticated\") return <Navigate to=\"/login\" replace />;\n if (status === \"forbidden\") return <Navigate to=\"/acesso-negado\" replace />;\n\n async function submit(event: FormEvent) {\n event.preventDefault();\n setMessage(null);\n if (password.length < 8) {\n setMessage(\"A senha deve possuir pelo menos 8 caracteres.\");\n return;\n }\n if (password !== confirm) {\n setMessage(\"As senhas informadas não conferem.\");\n return;\n }\n setSubmitting(true);\n try {\n await completeFirstAccess(password);\n } catch (error: any) {\n setMessage(error?.message || \"Não foi possível definir a nova senha.\");\n } finally {\n setSubmitting(false);\n }\n }\n\n return (\n <Flex minH=\"100vh\" align=\"center\" justify=\"center\" bg=\"#F5F8FA\" px={4}>\n <Box width=\"100%\" maxW=\"460px\" bg=\"white\" borderWidth=\"1px\" borderRadius=\"18px\" p={{ base: 6, md: 9 }}>\n <form onSubmit={(event) => void submit(event)}>\n <VStack align=\"stretch\" gap={5}>\n <Box>\n <Text color=\"#39BFED\" fontSize=\"xs\" fontWeight=\"700\" textTransform=\"uppercase\">Primeiro acesso</Text>\n <Heading mt={2} size=\"lg\">Defina sua nova senha</Heading>\n <Text mt={2} fontSize=\"sm\" color=\"gray.600\">O acesso à Central só será liberado depois desta etapa.</Text>\n </Box>\n <Box>\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Nova senha</Text>\n <Input type=\"password\" autoComplete=\"new-password\" value={password} onChange={(event) => setPassword(event.target.value)} required />\n </Box>\n <Box>\n <Text mb={1} fontSize=\"sm\" fontWeight=\"600\">Confirmar senha</Text>\n <Input type=\"password\" autoComplete=\"new-password\" value={confirm} onChange={(event) => setConfirm(event.target.value)} required />\n </Box>\n {message ? <Box role=\"alert\" bg=\"red.50\" borderRadius=\"md\" p={3}><Text fontSize=\"sm\">{message}</Text></Box> : null}\n <Button type=\"submit\" disabled={submitting}>{submitting ? \"Salvando…\" : \"Definir nova senha\"}</Button>\n </VStack>\n </form>\n </Box>\n </Flex>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { Box, Button, Heading, Input, Text, VStack } from \"@chakra-ui/react\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { useActivation } from \"./ActivationProvider\";\n\ntype Field = {\n name: string;\n label: string;\n type: string;\n required?: boolean;\n defaultValue?: unknown;\n options?: string[];\n readOnly?: boolean;\n placeholder?: string;\n helpText?: string;\n minLength?: number;\n autoComplete?: string;\n};\n\ntype Preview = {\n tenant?: Record<string, unknown>;\n app?: Record<string, unknown>;\n licenca?: Record<string, unknown>;\n entitlement?: Record<string, unknown>;\n deployment?: Record<string, unknown>;\n binding?: Record<string, unknown>;\n ativacao?: Record<string, unknown>;\n};\n\ntype ActivationConfiguration = {\n mode: \"root-bootstrap\" | \"member-activation\";\n rootFields: Field[];\n globalFields: Field[];\n appFields: Field[];\n defaults: Record<string, unknown>;\n technical: Record<string, string>;\n};\n\ntype DevLocalActivationResult = {\n token?: string;\n appCode?: string;\n usuario?: Record<string, unknown>;\n tenant?: Record<string, unknown>;\n app?: Record<string, unknown>;\n licenca?: Record<string, unknown>;\n entitlement?: Record<string, unknown>;\n deployment?: Record<string, unknown>;\n binding?: Record<string, unknown>;\n instrucoes?: { env?: string; observacao?: string };\n};\n\nfunction encodeBasicCredentials(email: string, password: string): string {\n const bytes = new TextEncoder().encode(`${email}:${password}`);\n let binary = \"\";\n for (const byte of bytes) binary += String.fromCharCode(byte);\n return window.btoa(binary);\n}\n\nexport function ActivationPage() {\n const { http } = useOonApi();\n const activation = useActivation();\n const [step, setStep] = useState(1);\n const [config, setConfig] = useState<ActivationConfiguration | null>(null);\n const [code, setCode] = useState(\"\");\n const [preview, setPreview] = useState<Preview | null>(null);\n const [global, setGlobal] = useState<Record<string, unknown>>({});\n const [app, setApp] = useState<Record<string, unknown>>({});\n const [rootEmail, setRootEmail] = useState(\"\");\n const [rootPassword, setRootPassword] = useState(\"\");\n const [devName, setDevName] = useState(\"\");\n const [devEmail, setDevEmail] = useState(\"\");\n const [devPassword, setDevPassword] = useState(\"\");\n const [showCodeFlow, setShowCodeFlow] = useState(false);\n const [devResult, setDevResult] = useState<DevLocalActivationResult | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [submitting, setSubmitting] = useState(false);\n\n useEffect(() => {\n http\n .get<ActivationConfiguration>(\"/ativacao/configuracao\")\n .then((response) => {\n setConfig(response.data);\n setGlobal(response.data.defaults || {});\n })\n .catch(() =>\n setError(\"Não foi possível carregar a configuração de ativação.\"),\n );\n }, [http]);\n\n useEffect(() => {\n if (activation.status === \"active\") {\n window.location.replace(\"/login\");\n }\n }, [activation.status]);\n\n async function activateRoot() {\n setSubmitting(true);\n setError(null);\n\n try {\n await http.post(\"/ativacao/ativar-root\", {\n email: rootEmail.trim(),\n senha: rootPassword,\n });\n setRootPassword(\"\");\n setStep(6);\n await activation.refresh();\n window.setTimeout(() => window.location.replace(\"/login\"), 900);\n } catch (caught) {\n setRootPassword(\"\");\n setError(\n (caught as Error).message ||\n \"Não foi possível concluir a ativação inicial.\",\n );\n } finally {\n setSubmitting(false);\n }\n }\n\n async function activateDevLocal() {\n setSubmitting(true);\n setError(null);\n\n try {\n const response = await http.post<DevLocalActivationResult>(\n \"/ativacao/ativar-dev-local\",\n {\n nomeUsuario: devName.trim() || undefined,\n nomeCentral: global.nomeInstancia || config?.defaults?.nomeInstancia,\n appName: config?.defaults?.nomeInstancia || config?.technical?.appCode,\n urlPublica: global.urlPublica,\n },\n {\n headers: {\n Authorization: `Basic ${encodeBasicCredentials(\n devEmail.trim().toLowerCase(),\n devPassword,\n )}`,\n },\n },\n );\n\n setDevPassword(\"\");\n setDevResult(response.data);\n setStep(6);\n\n const token = response.data.token;\n window.setTimeout(() => {\n window.location.replace(token ? `/?code=${encodeURIComponent(token)}` : \"/login\");\n }, 900);\n } catch (caught) {\n setDevPassword(\"\");\n setError(\n (caught as Error).message ||\n \"Não foi possível ativar a Central em desenvolvimento.\",\n );\n } finally {\n setSubmitting(false);\n }\n }\n\n async function validateCode() {\n setSubmitting(true);\n setError(null);\n\n try {\n const response = await http.post(\"/ativacao/validar-codigo\", {\n codigoAtivacao: code,\n });\n setPreview(response.data);\n setStep(2);\n } catch (caught) {\n setError((caught as Error).message || \"Código inválido.\");\n } finally {\n setSubmitting(false);\n }\n }\n\n async function completeMemberActivation() {\n setSubmitting(true);\n setError(null);\n\n try {\n await http.post(\"/ativacao/concluir\", {\n codigoAtivacao: code,\n nomeInstancia: global.nomeInstancia,\n parametrosGlobais: global,\n parametrosAplicacao: app,\n });\n setStep(6);\n setCode(\"\");\n await activation.refresh();\n window.setTimeout(() => window.location.replace(\"/login\"), 1200);\n } catch (caught) {\n setError(\n (caught as Error).message ||\n \"Não foi possível concluir a ativação.\",\n );\n } finally {\n setSubmitting(false);\n }\n }\n\n function renderField(\n field: Field,\n values: Record<string, unknown>,\n setValues: (value: Record<string, unknown>) => void,\n ) {\n return (\n <Box key={field.name} w=\"100%\">\n <Text fontWeight=\"medium\">\n {field.label}\n {field.required ? \" *\" : \"\"}\n </Text>\n <Input\n type={\n field.type === \"password\" || field.type === \"secret\"\n ? \"password\"\n : field.type === \"email\"\n ? \"email\"\n : field.type === \"url\"\n ? \"url\"\n : field.type === \"number\" || field.type === \"integer\"\n ? \"number\"\n : \"text\"\n }\n value={String(values[field.name] ?? field.defaultValue ?? \"\")}\n readOnly={field.readOnly}\n placeholder={field.placeholder}\n minLength={field.minLength}\n autoComplete={field.autoComplete}\n onChange={(event) =>\n setValues({ ...values, [field.name]: event.target.value })\n }\n />\n {field.helpText ? (\n <Text fontSize=\"sm\" color=\"gray.500\">\n {field.helpText}\n </Text>\n ) : null}\n </Box>\n );\n }\n\n function renderDevLocalActivation() {\n return (\n <>\n <Text color=\"gray.700\">\n Entre com seu e-mail e senha para ativar esta Central em ambiente de\n desenvolvimento. Se o e-mail ainda não existir na Central de\n Ativações, o usuário será criado automaticamente com perfil de\n desenvolvedor.\n </Text>\n\n <Box w=\"100%\">\n <Text fontWeight=\"medium\">Nome do usuário</Text>\n <Input\n value={devName}\n onChange={(event) => setDevName(event.target.value)}\n placeholder=\"Seu nome\"\n autoComplete=\"name\"\n />\n </Box>\n\n <Box w=\"100%\">\n <Text fontWeight=\"medium\">E-mail *</Text>\n <Input\n type=\"email\"\n value={devEmail}\n onChange={(event) => setDevEmail(event.target.value)}\n placeholder=\"dev@empresa.com.br\"\n autoComplete=\"email\"\n />\n </Box>\n\n <Box w=\"100%\">\n <Text fontWeight=\"medium\">Senha *</Text>\n <Input\n type=\"password\"\n value={devPassword}\n onChange={(event) => setDevPassword(event.target.value)}\n placeholder=\"Mínimo de 8 caracteres\"\n minLength={8}\n autoComplete=\"current-password\"\n />\n </Box>\n\n <Button\n colorPalette=\"blue\"\n onClick={activateDevLocal}\n loading={submitting}\n disabled={\n submitting ||\n !devEmail.trim() ||\n devPassword.length < 8 ||\n !activation.details?.podeAtivar\n }\n >\n Ativar ambiente de desenvolvimento\n </Button>\n\n <Button\n variant=\"outline\"\n onClick={() => setShowCodeFlow(true)}\n disabled={submitting}\n >\n Usar código de ativação manual\n </Button>\n </>\n );\n }\n\n const rootMode =\n config?.mode === \"root-bootstrap\" || activation.details?.role === \"root\";\n const isDevelopmentMember =\n !rootMode && config?.technical?.ambiente === \"desenvolvimento\";\n\n if (activation.status === \"loading\" || !config) {\n return (\n <Box minH=\"100vh\" bg=\"gray.50\" p={8}>\n <VStack\n maxW=\"760px\"\n mx=\"auto\"\n bg=\"white\"\n p={8}\n borderRadius=\"lg\"\n align=\"stretch\"\n gap={5}\n >\n <Heading>Preparando ativação...</Heading>\n {error ? <Text color=\"red.600\">{error}</Text> : null}\n </VStack>\n </Box>\n );\n }\n\n if (rootMode) {\n return (\n <Box minH=\"100vh\" bg=\"gray.50\" p={8}>\n <VStack\n maxW=\"560px\"\n mx=\"auto\"\n bg=\"white\"\n p={8}\n borderRadius=\"lg\"\n align=\"stretch\"\n gap={5}\n >\n <Heading>Ativação inicial do Ecossistema Oon</Heading>\n <Text color=\"gray.600\">\n Esta é a aplicação root do ecossistema. Informe somente o e-mail e\n a senha do primeiro administrador. O Core criará a estrutura mínima\n necessária para liberar o primeiro login.\n </Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n App: {config.technical.appCode} · Ambiente:{\" \"}\n {config.technical.ambiente}\n </Text>\n\n {error ? <Text color=\"red.600\">{error}</Text> : null}\n\n {step !== 6 ? (\n <>\n <Box w=\"100%\">\n <Text fontWeight=\"medium\">E-mail do administrador *</Text>\n <Input\n type=\"email\"\n autoComplete=\"email\"\n value={rootEmail}\n onChange={(event) => setRootEmail(event.target.value)}\n placeholder=\"administrador@empresa.com.br\"\n />\n </Box>\n\n <Box w=\"100%\">\n <Text fontWeight=\"medium\">Senha *</Text>\n <Input\n type=\"password\"\n minLength={8}\n autoComplete=\"new-password\"\n value={rootPassword}\n onChange={(event) => setRootPassword(event.target.value)}\n placeholder=\"Mínimo de 8 caracteres\"\n />\n </Box>\n\n <Button\n colorPalette=\"blue\"\n onClick={activateRoot}\n loading={submitting}\n disabled={\n submitting ||\n !rootEmail.trim() ||\n rootPassword.length < 8 ||\n !activation.details?.podeAtivar\n }\n >\n Criar ecossistema e ativar\n </Button>\n </>\n ) : (\n <>\n <Heading size=\"md\">Ativação concluída</Heading>\n <Text>\n Usuário, acesso do sistema e aplicativo root foram preparados.\n Redirecionando para o primeiro login...\n </Text>\n </>\n )}\n </VStack>\n </Box>\n );\n }\n\n return (\n <Box minH=\"100vh\" bg=\"gray.50\" p={8}>\n <VStack\n maxW=\"760px\"\n mx=\"auto\"\n bg=\"white\"\n p={8}\n borderRadius=\"lg\"\n align=\"stretch\"\n gap={5}\n >\n <Heading>Ativação da Central Oon</Heading>\n <Text>\n App: {config.technical.appCode} · Ambiente:{\" \"}\n {config.technical.ambiente} · Central:{\" \"}\n {config.technical.centralAtivacaoUrl ||\n config.technical.centralAtivacaoHost}\n </Text>\n\n {error ? <Text color=\"red.600\">{error}</Text> : null}\n\n {step === 1 && isDevelopmentMember && !showCodeFlow\n ? renderDevLocalActivation()\n : null}\n\n {step === 1 && (!isDevelopmentMember || showCodeFlow) && (\n <>\n <Text>\n Informe o código de ativação para validar Tenant, App,\n Entitlement e Deployment. A licença será validada somente para\n Apps comerciais.\n </Text>\n <Input\n aria-label=\"Código de ativação\"\n value={code}\n onChange={(event) => setCode(event.target.value)}\n placeholder=\"OON-XXXX\"\n />\n <Button\n onClick={validateCode}\n loading={submitting}\n disabled={!code || submitting}\n >\n Validar código\n </Button>\n {isDevelopmentMember ? (\n <Button\n variant=\"outline\"\n onClick={() => setShowCodeFlow(false)}\n disabled={submitting}\n >\n Voltar para ativação com usuário\n </Button>\n ) : null}\n </>\n )}\n\n {step === 2 && (\n <>\n <Heading size=\"md\">Confirmação</Heading>\n <pre>{JSON.stringify(preview, null, 2)}</pre>\n <Button onClick={() => setStep(3)}>Continuar</Button>\n </>\n )}\n\n {step === 3 && (\n <>\n {config.globalFields.map((field) =>\n renderField(field, global, setGlobal),\n )}\n <Button onClick={() => setStep(4)}>Continuar</Button>\n </>\n )}\n\n {step === 4 && (\n <>\n {config.appFields.length ? (\n config.appFields.map((field) => renderField(field, app, setApp))\n ) : (\n <Text>Nenhum parâmetro adicional declarado.</Text>\n )}\n <Button onClick={() => setStep(5)}>Revisar</Button>\n </>\n )}\n\n {step === 5 && (\n <>\n <Text>\n Ao confirmar, o código será consumido e este runtime será\n vinculado ao Deployment do Ecossistema Oon.\n </Text>\n <Button\n colorPalette=\"blue\"\n onClick={completeMemberActivation}\n loading={submitting}\n disabled={submitting}\n >\n Concluir ativação\n </Button>\n </>\n )}\n\n {step === 6 && (\n <>\n <Heading size=\"md\">Ativação concluída</Heading>\n {devResult?.appCode ? (\n <Text>\n Código do app: {devResult.appCode}. Redirecionando para a\n Central em desenvolvimento...\n </Text>\n ) : (\n <Text>Redirecionando para o login...</Text>\n )}\n {devResult?.instrucoes?.env ? (\n <Text fontSize=\"sm\" color=\"gray.500\">\n {devResult.instrucoes.env}\n </Text>\n ) : null}\n </>\n )}\n </VStack>\n </Box>\n );\n}\n\nexport function InstanceBlockedPage({\n title,\n message,\n}: {\n title: string;\n message: string;\n}) {\n return (\n <Box p={8}>\n <Heading>{title}</Heading>\n <Text>{message}</Text>\n </Box>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { useOonAuth } from \"./AuthProvider\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\n\n/**\n * Protege rotas privadas: enquanto valida o token mostra loading; sem sessão\n * o AuthProvider já redireciona para o login externo, então aqui só seguramos\n * o render. `permission` opcional bloqueia por papel (UX; back valida de novo).\n */\nexport function RouteGuard({\n permission,\n children,\n}: {\n permission?: string | string[];\n children: ReactNode;\n}) {\n const { status, hasPermission } = useOonAuth();\n\n if (status === \"loading\") return <LoadingScreen />;\n if (status === \"unauthenticated\") return <LoadingScreen message=\"Redirecionando para o login...\" />;\n if (!hasPermission(permission)) {\n return <LoadingScreen message=\"Você não tem acesso a esta tela.\" />;\n }\n return <>{children}</>;\n}\n","import { Navigate } from \"react-router-dom\";\nimport { useActivation } from \"./ActivationProvider\";\nexport function ActivationGuard({ children }: { children: JSX.Element }) {\n const { status } = useActivation();\n if (status === \"loading\") return null;\n if (status === \"suspended\") return <Navigate to=\"/instancia-suspensa\" replace />;\n if (status === \"revoked\") return <Navigate to=\"/instancia-revogada\" replace />;\n if (status !== \"active\" && window.location.pathname !== \"/ativacao\") return <Navigate to=\"/ativacao\" replace />;\n return children;\n}\n","const PIPELINE_BOARD_STYLE_ID = \"oon-core-pipeline-board-natural-height\";\n\n/**\n * O quadro mantém a rolagem horizontal no fim do conteúdo e cresce conforme\n * a etapa com mais tickets. As setas continuam acessíveis durante a rolagem\n * vertical sem transformar o quadro em uma área de scroll própria.\n */\nexport const PIPELINE_BOARD_LAYOUT_CSS = `\n:where(*) > [data-oon-pipeline-board=\"true\"] {\n height: auto !important;\n min-height: 420px;\n overflow-y: visible !important;\n align-items: stretch !important;\n}\n\n:where(*) > [data-oon-pipeline-board=\"true\"] > * {\n align-self: stretch;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) {\n display: grid;\n grid-template-areas: \"oon-pipeline-board\";\n align-items: start;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > [data-oon-pipeline-board=\"true\"] {\n grid-area: oon-pipeline-board;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > button[aria-label=\"Deslizar quadro para a esquerda\"],\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > button[aria-label=\"Deslizar quadro para a direita\"] {\n grid-area: oon-pipeline-board;\n position: sticky !important;\n top: calc(50vh - 17px) !important;\n right: auto !important;\n left: auto !important;\n align-self: start;\n transform: none !important;\n z-index: 3;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > button[aria-label=\"Deslizar quadro para a esquerda\"] {\n justify-self: start;\n margin-left: 8px;\n}\n\n:where(*):has(> [data-oon-pipeline-board=\"true\"]) > button[aria-label=\"Deslizar quadro para a direita\"] {\n justify-self: end;\n margin-right: 8px;\n}\n`;\n\nexport function installPipelineBoardLayoutStyles(targetDocument: Document = document) {\n if (targetDocument.getElementById(PIPELINE_BOARD_STYLE_ID)) return;\n\n const style = targetDocument.createElement(\"style\");\n style.id = PIPELINE_BOARD_STYLE_ID;\n style.textContent = PIPELINE_BOARD_LAYOUT_CSS;\n targetDocument.head.appendChild(style);\n}\n","import type {\n CollectionMode,\n CollectionViewDef,\n DashboardViewDef,\n DashboardWidgetDef,\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 OonPipelineDefaultActionsDef,\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\ntype DashboardFilterPrimitive = string | number | boolean | null;\ntype DashboardFilterValue = DashboardFilterPrimitive | {\n eq?: DashboardFilterPrimitive;\n ne?: DashboardFilterPrimitive;\n in?: DashboardFilterPrimitive[];\n nin?: DashboardFilterPrimitive[];\n gt?: DashboardFilterPrimitive;\n gte?: DashboardFilterPrimitive;\n lt?: DashboardFilterPrimitive;\n lte?: DashboardFilterPrimitive;\n exists?: boolean;\n};\n\ntype CentralDashboardWidget = Omit<DashboardWidgetDef, \"kind\"> & {\n description?: string;\n kind?: \"count\" | \"sum\" | \"groupCount\" | \"groupSum\" | \"custom\";\n groupBy?: string;\n filters?: Record<string, DashboardFilterValue>;\n format?: \"number\" | \"currency\";\n};\n\n/**\n * Schema do `central.ui.json` (Seção 9). É o que o frontend consumidor\n * carrega; a Central declara UI e o Core converte para rotas e componentes.\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 dashboards?: Array<{\n id?: string;\n label?: string;\n path?: string;\n section?: string;\n hidden?: boolean;\n order?: number;\n widgets?: CentralDashboardWidget[];\n }>;\n collections?: Array<{\n model: string;\n mode?: CollectionMode;\n path?: string;\n label?: string;\n section?: string;\n hidden?: boolean;\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 /** Habilitadas por padrão; use false para remover aprovação e status de trabalho. */\n defaultActions?: OonPipelineDefaultActionsDef;\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 dashboard of manifest.dashboards ?? []) {\n const view = {\n type: \"dashboard\",\n id: dashboard.id,\n label: dashboard.label,\n path: dashboard.path,\n section: dashboard.section,\n hidden: dashboard.hidden,\n order: dashboard.order,\n widgets: dashboard.widgets as DashboardWidgetDef[] | undefined,\n } as DashboardViewDef & { hidden?: boolean; order?: number };\n views.push(view);\n }\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 hidden: c.hidden,\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 defaultActions: p.defaultActions,\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 frontend\n * consumidor precisa para carregar o manifesto da Central.\n */\nexport function startFromManifest(manifest: CentralUiManifest, runtime: ManifestRuntime) {\n start(manifestToConfig(manifest, runtime));\n}\n","import { Stack } from \"@chakra-ui/react\";\nimport type { OonModule } from \"../types\";\nimport { CoreIntegration } from \"../components/CoreIntegration\";\nimport { CoreIntegrationMappings } from \"../components/CoreIntegrationMappings\";\nimport { CoreIntegrationTickets } from \"../components/CoreIntegrationTickets\";\nimport { CoreOmieIntegrationWorkspace } from \"../components/CoreOmieIntegrationWorkspace\";\n\nfunction CoreIntegrationPage() {\n return (\n <Stack gap={8}>\n <CoreIntegration />\n <CoreIntegrationMappings />\n </Stack>\n );\n}\n\n/** Módulo operacional nativo habilitado por central.app.json.modules.integrations. */\nexport function createIntegrationModule(): OonModule {\n return {\n id: \"core.integrations\",\n label: \"Integrações\",\n routes: [\n {\n path: \"/integracoes\",\n element: <CoreIntegrationPage />,\n capabilities: [\"core.integrations\"],\n },\n {\n path: \"/configuracoes/integracao-omie\",\n element: <CoreOmieIntegrationWorkspace />,\n capabilities: [\"core.integrations\", \"core.integrations.omie\"],\n },\n {\n path: \"/configuracoes/integracao-omie/tickets\",\n element: <CoreIntegrationTickets provider=\"omie\" />,\n capabilities: [\"core.integrations\", \"core.integrations.omie\"],\n },\n ],\n menu: [],\n };\n}\n","import { useEffect, useState } from \"react\";\nimport { Badge, Box, Button, Flex, Heading, Input, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation, useQuery } from \"@tanstack/react-query\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\nimport { ErrorState } from \"../shell/ErrorState\";\n\nexport interface CoreIntegrationProps {\n label?: string;\n}\n\ninterface ResourceEntry {\n key: string;\n label: string;\n description?: string;\n}\n\ninterface ProviderConfigurationMetadata {\n enabled?: boolean;\n multiInstance?: boolean;\n}\n\ninterface ProviderEntry {\n key: string;\n label: string;\n description?: string;\n status?: string;\n capabilities?: string[];\n configuration?: ProviderConfigurationMetadata | null;\n resources?: ResourceEntry[];\n queue?: Record<string, number>;\n inbox?: Record<string, number>;\n oldestPendingAt?: string | null;\n lastExecution?: { status?: string } | null;\n}\n\ninterface ProviderConfigurationInstance {\n instanceId: string;\n label?: string;\n active?: boolean;\n environment?: string;\n baseUrl?: string;\n appKeyMasked?: string;\n credentialsConfigured?: boolean;\n connectionStatus?: string;\n lastConnectionError?: string;\n lastConnectionTestAt?: string | null;\n updatedAt?: string;\n}\n\ninterface ProviderMappings {\n calls?: unknown[];\n lists?: unknown[];\n webhooks?: unknown[];\n}\n\ninterface ConfigurationDraft {\n instanceId: string;\n label: string;\n active: boolean;\n environment: string;\n baseUrl: string;\n appKey: string;\n appSecret: string;\n webhookToken: string;\n}\n\ninterface QueueTicket {\n _id: string;\n provider: string;\n resource?: string;\n handler: string;\n status: string;\n attempts: number;\n nextAttemptAt?: string | null;\n lastError?: { message?: string };\n}\n\ninterface DiagnosticError {\n message?: string;\n code?: string;\n statusCode?: number;\n details?: unknown;\n [key: string]: unknown;\n}\n\ninterface ExecutionDiagnostic {\n index?: number;\n externalKey?: unknown;\n message?: string;\n code?: string;\n statusCode?: number;\n error?: DiagnosticError;\n [key: string]: unknown;\n}\n\ninterface ExecutionEntry {\n _id: string;\n provider: string;\n resource?: string;\n operation?: string;\n title: string;\n status: string;\n startedAt?: string;\n concludedAt?: string | null;\n durationMs?: number;\n message?: string;\n error?: DiagnosticError;\n summary?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n requests?: unknown[];\n requestCount?: number;\n requestsLimited?: boolean;\n errors?: ExecutionDiagnostic[];\n errorCount?: number;\n errorsLimited?: boolean;\n items?: unknown[];\n itemCount?: number;\n itemsLimited?: boolean;\n}\n\nfunction dateTime(value?: string | null) {\n if (!value) return \"—\";\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleString(\"pt-BR\");\n}\n\nfunction statusPalette(status?: string) {\n const normalized = String(status || \"\").toLowerCase();\n if (normalized.includes(\"erro\") || normalized.includes(\"error\") || normalized.includes(\"inativo\")) return \"red\";\n if (normalized.includes(\"process\") || normalized.includes(\"temporário\") || normalized.includes(\"not-tested\")) return \"yellow\";\n if (normalized.includes(\"concluído\") || normalized.includes(\"ativo\") || normalized === \"ok\") return \"green\";\n return \"gray\";\n}\n\nfunction integrationErrorMessage(error: unknown) {\n const message = (error as { message?: unknown } | null)?.message;\n return typeof message === \"string\" && message.trim()\n ? message\n : \"Não foi possível operar a configuração do provedor.\";\n}\n\nfunction countActive(values?: Record<string, number>) {\n if (!values) return 0;\n return Object.entries(values)\n .filter(([status]) => ![\"Concluído\", \"Arquivado\"].includes(status))\n .reduce((sum, [, count]) => sum + Number(count || 0), 0);\n}\n\nconst SUMMARY_LABELS: Record<string, string> = {\n mode: \"Modo\",\n received: \"Recebidos\",\n created: \"Criados\",\n updated: \"Atualizados\",\n skipped: \"Ignorados\",\n inactivated: \"Inativados\",\n errors: \"Erros\",\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction primitiveText(value: unknown): string {\n if (value === null || value === undefined || value === \"\") return \"—\";\n if ([\"string\", \"number\", \"boolean\"].includes(typeof value)) return String(value);\n return JSON.stringify(value) ?? \"—\";\n}\n\nfunction diagnosticMessage(value: ExecutionDiagnostic) {\n return value.error?.message || value.message || \"Erro sem mensagem registrada.\";\n}\n\nfunction diagnosticCode(value: ExecutionDiagnostic) {\n return value.error?.code || value.code || value.error?.statusCode || value.statusCode;\n}\n\nfunction diagnosticIdentity(value: ExecutionDiagnostic, position: number) {\n const parts = [`Registro ${value.index !== undefined ? value.index + 1 : position + 1}`];\n if (value.externalKey !== undefined && value.externalKey !== null && value.externalKey !== \"\") {\n parts.push(`chave ${primitiveText(value.externalKey)}`);\n }\n const code = diagnosticCode(value);\n if (code !== undefined && code !== null && code !== \"\") parts.push(`código ${String(code)}`);\n return parts.join(\" · \");\n}\n\nfunction executionDiagnostics(execution: ExecutionEntry) {\n const values = [...(execution.errors ?? [])];\n if (execution.error?.message && !values.some((item) => diagnosticMessage(item) === execution.error?.message)) {\n values.push({ error: execution.error });\n }\n return values;\n}\n\nfunction JsonDiagnosticDetails({\n label,\n value,\n count,\n limited,\n}: {\n label: string;\n value: unknown;\n count?: number;\n limited?: boolean;\n}) {\n const hasValue = Array.isArray(value)\n ? value.length > 0\n : isRecord(value)\n ? Object.keys(value).length > 0\n : value !== undefined && value !== null && value !== \"\";\n if (!hasValue) return null;\n return (\n <details style={{ borderTop: \"1px solid #e2e8f0\", paddingTop: \"10px\" }}>\n <summary style={{ cursor: \"pointer\", fontWeight: 600, fontSize: \"13px\" }}>\n {label}{count !== undefined ? ` (${count})` : \"\"}{limited ? \" · visualização limitada\" : \"\"}\n </summary>\n <Box\n as=\"pre\"\n mt={2}\n mb={0}\n p={3}\n overflowX=\"auto\"\n borderRadius=\"md\"\n bg=\"gray.50\"\n fontSize=\"xs\"\n whiteSpace=\"pre-wrap\"\n wordBreak=\"break-word\"\n >\n {JSON.stringify(value, null, 2)}\n </Box>\n </details>\n );\n}\n\nfunction ExecutionDetails({ execution }: { execution: ExecutionEntry }) {\n const diagnostics = executionDiagnostics(execution);\n const summary = isRecord(execution.summary) ? execution.summary : {};\n const summaryEntries = Object.entries(summary).filter(([, value]) => (\n value === null || [\"string\", \"number\", \"boolean\"].includes(typeof value)\n ));\n\n return (\n <Box mt={3} pt={3} borderTopWidth=\"1px\" borderColor=\"gray.100\">\n <Stack gap={3}>\n {summaryEntries.length ? (\n <Box>\n <Text fontSize=\"sm\" fontWeight=\"semibold\" mb={2}>Resumo da execução</Text>\n <Flex gap={2} wrap=\"wrap\">\n {summaryEntries.map(([key, value]) => (\n <Badge\n key={key}\n variant=\"outline\"\n colorPalette={key === \"errors\" && Number(value ?? 0) > 0 ? \"red\" : \"gray\"}\n >\n {SUMMARY_LABELS[key] || key}: {primitiveText(value)}\n </Badge>\n ))}\n </Flex>\n </Box>\n ) : null}\n\n {diagnostics.length ? (\n <Box>\n <Flex align=\"center\" justify=\"space-between\" gap={2} mb={2} wrap=\"wrap\">\n <Text fontSize=\"sm\" fontWeight=\"semibold\">Erros por registro</Text>\n <Text fontSize=\"xs\" color=\"gray.500\">\n {execution.errorCount ?? diagnostics.length} erro(s)\n {execution.errorsLimited ? \" · lista limitada\" : \"\"}\n </Text>\n </Flex>\n <Stack gap={2}>\n {diagnostics.map((diagnostic, index) => (\n <Box\n key={`${diagnostic.index ?? index}:${diagnosticMessage(diagnostic)}`}\n p={3}\n borderWidth=\"1px\"\n borderColor=\"red.100\"\n borderRadius=\"md\"\n bg=\"red.50\"\n >\n <Text fontSize=\"xs\" color=\"gray.600\" fontWeight=\"semibold\">\n {diagnosticIdentity(diagnostic, index)}\n </Text>\n <Text fontSize=\"sm\" color=\"red.700\">{diagnosticMessage(diagnostic)}</Text>\n {diagnostic.error?.details ? (\n <Text fontSize=\"xs\" color=\"gray.600\" mt={1}>\n {primitiveText(diagnostic.error.details)}\n </Text>\n ) : null}\n </Box>\n ))}\n </Stack>\n </Box>\n ) : execution.status.toLowerCase().includes(\"erro\") ? (\n <Text fontSize=\"sm\" color=\"red.600\">\n {execution.message || execution.error?.message || \"A execução terminou com erro, mas não registrou detalhes adicionais.\"}\n </Text>\n ) : null}\n\n <JsonDiagnosticDetails\n label=\"Itens processados\"\n value={execution.items}\n count={execution.itemCount}\n limited={execution.itemsLimited}\n />\n <JsonDiagnosticDetails\n label=\"Chamadas sanitizadas\"\n value={execution.requests}\n count={execution.requestCount}\n limited={execution.requestsLimited}\n />\n <JsonDiagnosticDetails label=\"Metadados\" value={execution.metadata} />\n </Stack>\n </Box>\n );\n}\n\nfunction ProviderConfigurationPanel({ provider }: { provider: ProviderEntry }) {\n const { http } = useOonApi();\n const [draft, setDraft] = useState<ConfigurationDraft>({\n instanceId: \"default\",\n label: provider.label,\n active: true,\n environment: \"production\",\n baseUrl: \"\",\n appKey: \"\",\n appSecret: \"\",\n webhookToken: \"\",\n });\n\n const configuration = useQuery({\n queryKey: [\"core-integrations\", provider.key, \"configuration\"],\n queryFn: async () => ((await http.get(`/integrations/providers/${provider.key}/configuration`)).data?.instances ?? []) as ProviderConfigurationInstance[],\n });\n const mappings = useQuery({\n queryKey: [\"core-integrations\", provider.key, \"mappings\"],\n queryFn: async () => (await http.get(`/integrations/providers/${provider.key}/mappings`)).data as ProviderMappings,\n });\n\n const selected = (configuration.data ?? []).find((item) => item.instanceId === draft.instanceId);\n\n useEffect(() => {\n if (!selected) return;\n setDraft((current) => ({\n ...current,\n instanceId: selected.instanceId || \"default\",\n label: selected.label || provider.label,\n active: selected.active !== false,\n environment: selected.environment || \"production\",\n baseUrl: selected.baseUrl || \"\",\n appKey: \"\",\n appSecret: \"\",\n webhookToken: \"\",\n }));\n }, [provider.label, selected?.instanceId, selected?.updatedAt]);\n\n const save = useMutation({\n mutationFn: async () => http.put(\n `/integrations/providers/${provider.key}/configuration/${draft.instanceId}`,\n {\n label: draft.label,\n active: draft.active,\n environment: draft.environment,\n baseUrl: draft.baseUrl,\n ...(draft.appKey ? { appKey: draft.appKey } : {}),\n ...(draft.appSecret ? { appSecret: draft.appSecret } : {}),\n ...(draft.webhookToken ? { webhookToken: draft.webhookToken } : {}),\n },\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: async () => {\n setDraft((current) => ({ ...current, appKey: \"\", appSecret: \"\", webhookToken: \"\" }));\n await configuration.refetch();\n },\n });\n const testConnection = useMutation({\n mutationFn: async () => http.post(\n `/integrations/providers/${provider.key}/configuration/${draft.instanceId}/test`,\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: () => configuration.refetch(),\n });\n\n const error = configuration.error || mappings.error || save.error || testConnection.error;\n const mappingCounts = {\n chamadas: mappings.data?.calls?.length ?? 0,\n listas: mappings.data?.lists?.length ?? 0,\n webhooks: mappings.data?.webhooks?.length ?? 0,\n };\n\n return (\n <Box borderTopWidth=\"1px\" borderColor=\"gray.100\" pt={4}>\n <Stack gap={3}>\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Text fontWeight=\"semibold\">Configuração</Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n Credenciais protegidas por instância. Segredos gravados nunca são devolvidos ao navegador.\n </Text>\n </Box>\n <Flex gap={2} wrap=\"wrap\">\n <Badge variant=\"outline\">{mappingCounts.chamadas} chamadas</Badge>\n <Badge variant=\"outline\">{mappingCounts.listas} listas</Badge>\n <Badge variant=\"outline\">{mappingCounts.webhooks} webhooks</Badge>\n </Flex>\n </Flex>\n\n <Flex gap={3} wrap=\"wrap\">\n <Box minW=\"180px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>Instância</Text>\n <Input\n size=\"sm\"\n value={draft.instanceId}\n onChange={(event) => setDraft((current) => ({ ...current, instanceId: event.target.value }))}\n placeholder=\"default\"\n />\n </Box>\n <Box minW=\"220px\" flex=\"2\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>Nome</Text>\n <Input\n size=\"sm\"\n value={draft.label}\n onChange={(event) => setDraft((current) => ({ ...current, label: event.target.value }))}\n />\n </Box>\n <Box minW=\"180px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>Ambiente</Text>\n <select\n style={{\n width: \"100%\",\n height: \"32px\",\n border: \"1px solid #e2e8f0\",\n borderRadius: \"6px\",\n padding: \"0 8px\",\n background: \"white\",\n }}\n value={draft.environment}\n onChange={(event) => setDraft((current) => ({\n ...current,\n environment: event.currentTarget.value,\n }))}\n >\n <option value=\"production\">Produção</option>\n <option value=\"homologation\">Homologação</option>\n </select>\n </Box>\n </Flex>\n\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>URL base</Text>\n <Input\n size=\"sm\"\n value={draft.baseUrl}\n onChange={(event) => setDraft((current) => ({ ...current, baseUrl: event.target.value }))}\n placeholder=\"https://app.omie.com.br/api/v1\"\n />\n </Box>\n\n <Flex gap={3} wrap=\"wrap\">\n <Box minW=\"220px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>App Key {selected?.appKeyMasked ? `(${selected.appKeyMasked})` : \"\"}</Text>\n <Input\n size=\"sm\"\n type=\"password\"\n value={draft.appKey}\n onChange={(event) => setDraft((current) => ({ ...current, appKey: event.target.value }))}\n placeholder={selected?.credentialsConfigured ? \"Manter valor atual\" : \"Informe a App Key\"}\n />\n </Box>\n <Box minW=\"220px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>App Secret</Text>\n <Input\n size=\"sm\"\n type=\"password\"\n value={draft.appSecret}\n onChange={(event) => setDraft((current) => ({ ...current, appSecret: event.target.value }))}\n placeholder={selected?.credentialsConfigured ? \"Manter valor atual\" : \"Informe o App Secret\"}\n />\n </Box>\n <Box minW=\"220px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>Token do webhook</Text>\n <Input\n size=\"sm\"\n type=\"password\"\n value={draft.webhookToken}\n onChange={(event) => setDraft((current) => ({ ...current, webhookToken: event.target.value }))}\n placeholder=\"Manter ou definir token\"\n />\n </Box>\n </Flex>\n\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Flex align=\"center\" gap={2} wrap=\"wrap\">\n <label>\n <input\n type=\"checkbox\"\n checked={draft.active}\n onChange={(event) => setDraft((current) => ({ ...current, active: event.target.checked }))}\n />{\" \"}Integração ativa\n </label>\n <Badge colorPalette={statusPalette(selected?.connectionStatus)}>\n Conexão: {selected?.connectionStatus ?? \"não testada\"}\n </Badge>\n <Text fontSize=\"xs\" color=\"gray.500\">Último teste: {dateTime(selected?.lastConnectionTestAt)}</Text>\n </Flex>\n <Flex gap={2}>\n <Button size=\"xs\" variant=\"outline\" loading={testConnection.isPending} onClick={() => testConnection.mutate()}>\n Testar conexão\n </Button>\n <Button size=\"xs\" loading={save.isPending} onClick={() => save.mutate()}>\n Salvar configuração\n </Button>\n </Flex>\n </Flex>\n\n {selected?.lastConnectionError ? <Text fontSize=\"sm\" color=\"red.600\">{selected.lastConnectionError}</Text> : null}\n {error ? <Text fontSize=\"sm\" color=\"red.600\">{integrationErrorMessage(error)}</Text> : null}\n </Stack>\n </Box>\n );\n}\n\n/** Painel operacional padrão da engine de integrações. */\nexport function CoreIntegration({ label = \"Integrações\" }: CoreIntegrationProps) {\n const { http } = useOonApi();\n const [expandedExecutionId, setExpandedExecutionId] = useState<string | null>(null);\n\n const providers = useQuery({\n queryKey: [\"core-integrations\", \"health\"],\n queryFn: async () => ((await http.get(\"/integrations/health\")).data?.results ?? []) as ProviderEntry[],\n });\n const queue = useQuery({\n queryKey: [\"core-integrations\", \"queue\"],\n queryFn: async () => ((await http.get(\"/integrations/queue\", { params: { limit: 20 } })).data?.results ?? []) as QueueTicket[],\n });\n const history = useQuery({\n queryKey: [\"core-integrations\", \"history\"],\n queryFn: async () => ((await http.get(\"/integrations/history\", { params: { limit: 10 } })).data?.results ?? []) as ExecutionEntry[],\n });\n\n const refresh = async () => {\n await Promise.all([providers.refetch(), queue.refetch(), history.refetch()]);\n };\n\n const process = useMutation({\n mutationFn: () => http.post(\n \"/integrations/actions/process-active\",\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: refresh,\n });\n const syncAll = useMutation({\n mutationFn: (provider: string) => http.post(\n `/integrations/providers/${provider}/sync-all`,\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: refresh,\n });\n const syncResource = useMutation({\n mutationFn: ({ provider, resource }: { provider: string; resource: string }) => http.post(\n `/integrations/providers/${provider}/resources/${resource}/sync`,\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: refresh,\n });\n const reprocess = useMutation({\n mutationFn: (id: string) => http.post(\n `/integrations/queue/${id}/reprocess`,\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: refresh,\n });\n const archive = useMutation({\n mutationFn: (id: string) => http.post(\n `/integrations/queue/${id}/archive`,\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: refresh,\n });\n\n if (providers.isLoading || queue.isLoading || history.isLoading) return <LoadingScreen />;\n const error = providers.error || queue.error || history.error;\n if (error) return <ErrorState error={error} />;\n\n return (\n <Stack gap={6}>\n <Flex align=\"center\" justify=\"space-between\" gap={4} wrap=\"wrap\">\n <Box>\n <Heading size=\"lg\">{label}</Heading>\n <Text color=\"gray.500\">Configuração, saúde, filas, eventos e diagnóstico sanitizado por provedor.</Text>\n </Box>\n <Button size=\"sm\" variant=\"outline\" loading={process.isPending} onClick={() => process.mutate()}>\n Processar pendências\n </Button>\n </Flex>\n\n <Stack gap={3}>\n {(providers.data ?? []).length === 0 ? (\n <Text color=\"gray.400\">Nenhum provedor registrado.</Text>\n ) : providers.data?.map((provider) => (\n <Box key={provider.key} borderWidth=\"1px\" borderColor=\"gray.200\" borderRadius=\"md\" bg=\"white\" p={4}>\n <Stack gap={3}>\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Flex align=\"center\" gap={2}>\n <Text fontWeight=\"semibold\">{provider.label}</Text>\n <Badge colorPalette={statusPalette(provider.status)}>{provider.status ?? \"—\"}</Badge>\n </Flex>\n {provider.description ? <Text color=\"gray.500\" fontSize=\"sm\">{provider.description}</Text> : null}\n </Box>\n <Button size=\"xs\" variant=\"outline\" loading={syncAll.isPending} onClick={() => syncAll.mutate(provider.key)}>\n Sincronizar tudo\n </Button>\n </Flex>\n\n <Flex gap={3} wrap=\"wrap\">\n <Badge colorPalette={countActive(provider.queue) ? \"yellow\" : \"green\"}>\n Fila ativa: {countActive(provider.queue)}\n </Badge>\n <Badge colorPalette={countActive(provider.inbox) ? \"yellow\" : \"green\"}>\n Eventos ativos: {countActive(provider.inbox)}\n </Badge>\n <Badge colorPalette={statusPalette(provider.lastExecution?.status)}>\n Última execução: {provider.lastExecution?.status ?? \"sem histórico\"}\n </Badge>\n </Flex>\n\n <Text fontSize=\"sm\" color=\"gray.500\">\n Pendência mais antiga: {dateTime(provider.oldestPendingAt)}\n </Text>\n\n <Flex gap={2} wrap=\"wrap\">\n {(provider.resources ?? []).map((resource) => (\n <Button\n key={resource.key}\n size=\"xs\"\n variant=\"outline\"\n loading={syncResource.isPending}\n onClick={() => syncResource.mutate({ provider: provider.key, resource: resource.key })}\n >\n {resource.label}\n </Button>\n ))}\n </Flex>\n\n {provider.configuration?.enabled ? <ProviderConfigurationPanel provider={provider} /> : null}\n </Stack>\n </Box>\n ))}\n </Stack>\n\n <Box>\n <Heading size=\"md\" mb={3}>Fila recente</Heading>\n <Stack gap={2}>\n {(queue.data ?? []).length === 0 ? <Text color=\"gray.400\">Nenhum ticket de integração.</Text> : queue.data?.map((ticket) => (\n <Box key={ticket._id} borderWidth=\"1px\" borderRadius=\"md\" p={3} bg=\"white\">\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Flex align=\"center\" gap={2} wrap=\"wrap\">\n <Text fontWeight=\"medium\">{ticket.handler}</Text>\n <Badge colorPalette={statusPalette(ticket.status)}>{ticket.status}</Badge>\n <Badge variant=\"outline\">{ticket.provider}</Badge>\n </Flex>\n <Text fontSize=\"sm\" color=\"gray.500\">\n {ticket.resource || \"sem recurso\"} · tentativas {ticket.attempts} · próxima {dateTime(ticket.nextAttemptAt)}\n </Text>\n {ticket.lastError?.message ? <Text fontSize=\"sm\" color=\"red.600\">{ticket.lastError.message}</Text> : null}\n </Box>\n <Flex gap={2}>\n {[\"Erro temporário\", \"Erro definitivo\", \"Arquivado\"].includes(ticket.status) ? (\n <Button size=\"xs\" variant=\"outline\" loading={reprocess.isPending} onClick={() => reprocess.mutate(ticket._id)}>\n Reprocessar\n </Button>\n ) : null}\n {[\"Erro temporário\", \"Erro definitivo\"].includes(ticket.status) ? (\n <Button size=\"xs\" variant=\"outline\" loading={archive.isPending} onClick={() => archive.mutate(ticket._id)}>\n Arquivar\n </Button>\n ) : null}\n </Flex>\n </Flex>\n </Box>\n ))}\n </Stack>\n </Box>\n\n <Box>\n <Heading size=\"md\" mb={3}>Histórico</Heading>\n <Stack gap={2}>\n {(history.data ?? []).length === 0 ? <Text color=\"gray.400\">Nenhuma execução registrada.</Text> : history.data?.map((execution) => {\n const expanded = expandedExecutionId === execution._id;\n const diagnosticCount = execution.errorCount ?? execution.errors?.length ?? (execution.error?.message ? 1 : 0);\n return (\n <Box key={execution._id} borderWidth=\"1px\" borderRadius=\"md\" p={3} bg=\"white\">\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Text fontWeight=\"medium\">{execution.title}</Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n {execution.provider} · {execution.resource || \"sem recurso\"} · {dateTime(execution.startedAt)} · {execution.durationMs ?? 0} ms\n </Text>\n {execution.error?.message ? <Text fontSize=\"sm\" color=\"red.600\">{execution.error.message}</Text> : null}\n </Box>\n <Flex align=\"center\" gap={2} wrap=\"wrap\">\n {diagnosticCount > 0 ? <Badge colorPalette=\"red\">{diagnosticCount} erro(s)</Badge> : null}\n <Badge colorPalette={statusPalette(execution.status)}>{execution.status}</Badge>\n <Button\n size=\"xs\"\n variant=\"outline\"\n aria-expanded={expanded}\n onClick={() => setExpandedExecutionId((current) => current === execution._id ? null : execution._id)}\n >\n {expanded ? \"Ocultar detalhes\" : \"Ver detalhes\"}\n </Button>\n </Flex>\n </Flex>\n {expanded ? <ExecutionDetails execution={execution} /> : null}\n </Box>\n );\n})}\n </Stack>\n </Box>\n </Stack>\n );\n}\n","import { Badge, Box, Flex, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useOonApi } from \"../api/ApiProvider\";\n\ninterface ProviderEntry {\n key: string;\n label: string;\n}\n\ninterface MappingCall {\n key: string;\n label?: string;\n endpoint?: string;\n call?: string;\n paginated?: boolean;\n connectionTest?: boolean;\n}\n\ninterface MappingListExecution {\n instanceId?: string;\n status?: string;\n lastCompletedAt?: string | null;\n}\n\ninterface MappingList {\n key: string;\n label?: string;\n description?: string;\n call?: string;\n mode?: string;\n direction?: string;\n targetModel?: string;\n externalKey?: string;\n schedule?: unknown;\n executions?: MappingListExecution[];\n}\n\ninterface MappingWebhook {\n eventType: string;\n resource?: string;\n actions?: Array<{ handler?: string }>;\n}\n\ninterface ProviderMappings {\n provider: string;\n calls?: MappingCall[];\n lists?: MappingList[];\n webhooks?: MappingWebhook[];\n}\n\ninterface MappingSummary {\n provider: ProviderEntry;\n mappings: ProviderMappings;\n}\n\nfunction dateTime(value?: string | null) {\n if (!value) return \"sem execução\";\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleString(\"pt-BR\");\n}\n\n/** Visualização sanitizada dos contratos declarados por cada Central. */\nexport function CoreIntegrationMappings() {\n const { http } = useOonApi();\n const providers = useQuery({\n queryKey: [\"core-integrations\", \"providers\"],\n queryFn: async () => ((await http.get(\"/integrations/providers\")).data?.results ?? []) as ProviderEntry[],\n });\n const providerKeys = (providers.data ?? []).map((provider) => provider.key).join(\",\");\n const summaries = useQuery({\n queryKey: [\"core-integrations\", \"mapping-summaries\", providerKeys],\n enabled: providers.isSuccess && providerKeys.length > 0,\n queryFn: async () => Promise.all((providers.data ?? []).map(async (provider) => ({\n provider,\n mappings: (await http.get(`/integrations/providers/${provider.key}/mappings`)).data as ProviderMappings,\n } satisfies MappingSummary))),\n });\n\n if (providers.isLoading || summaries.isLoading) {\n return <Text color=\"gray.500\">Carregando contratos declarados…</Text>;\n }\n if (providers.error || summaries.error) {\n return <Text color=\"red.600\">Não foi possível carregar os contratos declarados.</Text>;\n }\n if (!(summaries.data ?? []).length) return null;\n\n return (\n <Box>\n <Heading size=\"md\" mb={1}>Contratos declarados</Heading>\n <Text color=\"gray.500\" mb={3}>\n Chamadas, listas e mappings pertencem à Central; o Core exibe somente metadados sanitizados.\n </Text>\n <Stack gap={3}>\n {summaries.data?.map(({ provider, mappings }) => (\n <Box key={provider.key} borderWidth=\"1px\" borderRadius=\"md\" bg=\"white\" p={4}>\n <Stack gap={4}>\n <Heading size=\"sm\">{provider.label}</Heading>\n\n <Box>\n <Text fontWeight=\"semibold\" mb={2}>Chamadas Omie</Text>\n <Flex gap={2} wrap=\"wrap\">\n {(mappings.calls ?? []).length ? mappings.calls?.map((call) => (\n <Badge key={call.key} variant=\"outline\">\n {call.label || call.key} · {call.call || \"operação\"}{call.paginated ? \" · paginada\" : \"\"}\n </Badge>\n )) : <Text fontSize=\"sm\" color=\"gray.400\">Nenhuma chamada declarada.</Text>}\n </Flex>\n </Box>\n\n <Box>\n <Text fontWeight=\"semibold\" mb={2}>Listas Omie</Text>\n <Stack gap={2}>\n {(mappings.lists ?? []).length ? mappings.lists?.map((list) => {\n const latest = list.executions?.[0];\n return (\n <Box key={list.key} borderWidth=\"1px\" borderColor=\"gray.100\" borderRadius=\"md\" p={3}>\n <Flex align=\"center\" justify=\"space-between\" gap={2} wrap=\"wrap\">\n <Box>\n <Text fontSize=\"sm\" fontWeight=\"medium\">{list.label || list.key}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\">\n {list.mode || \"modo padrão\"} · {list.direction || \"direção padrão\"} · {list.targetModel || \"destino declarado\"}\n </Text>\n </Box>\n <Flex gap={2} wrap=\"wrap\">\n <Badge variant=\"outline\">{latest?.status || \"não executada\"}</Badge>\n <Badge variant=\"outline\">{dateTime(latest?.lastCompletedAt)}</Badge>\n </Flex>\n </Flex>\n </Box>\n );\n }) : <Text fontSize=\"sm\" color=\"gray.400\">Nenhuma lista declarada.</Text>}\n </Stack>\n </Box>\n\n <Box>\n <Text fontWeight=\"semibold\" mb={2}>Mappings de webhook</Text>\n <Stack gap={1}>\n {(mappings.webhooks ?? []).length ? mappings.webhooks?.map((webhook) => (\n <Text key={`${webhook.eventType}:${webhook.resource || \"\"}`} fontSize=\"sm\" color=\"gray.600\">\n {webhook.eventType} → {(webhook.actions ?? []).map((action) => action.handler).filter(Boolean).join(\", \") || \"sem ação declarada\"}\n </Text>\n )) : <Text fontSize=\"sm\" color=\"gray.400\">Nenhum mapping de webhook declarado.</Text>}\n </Stack>\n </Box>\n </Stack>\n </Box>\n ))}\n </Stack>\n </Box>\n );\n}\n","import { useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { Badge, Box, Button, Flex, Heading, Input, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation, useQuery } from \"@tanstack/react-query\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { ErrorState } from \"../shell/ErrorState\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\n\nconst TICKET_STATUSES = [\n \"Pendente\",\n \"Processando\",\n \"Erro temporário\",\n \"Concluído\",\n \"Erro definitivo\",\n \"Arquivado\",\n] as const;\n\ntype TicketStatus = typeof TICKET_STATUSES[number];\ntype TicketView = \"list\" | \"board\";\ntype TicketAction = \"reprocess\" | \"archive\";\n\ninterface QueueTicket {\n _id: string;\n provider: string;\n handler: string;\n resource?: string;\n operation?: string;\n aggregateType?: string;\n aggregateId?: string;\n idempotencyKey?: string;\n payload?: unknown;\n status: TicketStatus | string;\n previousStatus?: string;\n attempts?: number;\n nextAttemptAt?: string | null;\n lastError?: unknown;\n responseSummary?: unknown;\n completedAt?: string | null;\n archivedAt?: string | null;\n archiveReason?: string;\n lockedAt?: string | null;\n lockedBy?: string;\n leaseExpiresAt?: string | null;\n heartbeatAt?: string | null;\n createdAt?: string;\n updatedAt?: string;\n}\n\ninterface QueueResponse {\n results?: QueueTicket[];\n summary?: {\n total?: number;\n statuses?: Record<string, number>;\n };\n pagination?: {\n currentPage?: number;\n totalItems?: number;\n totalPages?: number;\n itemsPerPage?: number;\n };\n}\n\nfunction dateTime(value?: string | null) {\n if (!value) return \"—\";\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleString(\"pt-BR\");\n}\n\nfunction shortId(value?: string) {\n if (!value) return \"—\";\n return value.length > 12 ? `${value.slice(0, 8)}…${value.slice(-4)}` : value;\n}\n\nfunction statusPalette(status?: string) {\n const normalized = String(status || \"\").toLowerCase();\n if (normalized.includes(\"definitivo\")) return \"red\";\n if (normalized.includes(\"temporário\")) return \"orange\";\n if (normalized.includes(\"processando\")) return \"blue\";\n if (normalized.includes(\"pendente\")) return \"yellow\";\n if (normalized.includes(\"concluído\")) return \"green\";\n return \"gray\";\n}\n\nfunction integrationErrorMessage(error: unknown) {\n const candidate = error as {\n message?: unknown;\n response?: { data?: { message?: unknown; error?: { message?: unknown } } };\n } | null;\n const message = candidate?.response?.data?.error?.message\n || candidate?.response?.data?.message\n || candidate?.message;\n return typeof message === \"string\" && message.trim()\n ? message\n : \"Não foi possível concluir a operação.\";\n}\n\nfunction diagnosticMessage(value: unknown) {\n if (!value) return \"\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"object\") {\n const candidate = value as { message?: unknown; error?: { message?: unknown } };\n const message = candidate.message || candidate.error?.message;\n if (typeof message === \"string\") return message;\n }\n return JSON.stringify(value);\n}\n\nfunction NativeSelect({\n value,\n onChange,\n children,\n ariaLabel,\n}: {\n value: string;\n onChange: (value: string) => void;\n children: ReactNode;\n ariaLabel: string;\n}) {\n return (\n <select\n aria-label={ariaLabel}\n style={{\n minWidth: \"190px\",\n height: \"34px\",\n border: \"1px solid #e2e8f0\",\n borderRadius: \"6px\",\n padding: \"0 8px\",\n background: \"white\",\n }}\n value={value}\n onChange={(event) => onChange(event.currentTarget.value)}\n >\n {children}\n </select>\n );\n}\n\nfunction JsonDetails({ label, value }: { label: string; value: unknown }) {\n if (value === undefined || value === null) return null;\n if (typeof value === \"object\" && !Array.isArray(value) && !Object.keys(value as object).length) return null;\n return (\n <details>\n <summary style={{ cursor: \"pointer\", fontWeight: 600 }}>{label}</summary>\n <Box\n as=\"pre\"\n mt={2}\n p={3}\n borderRadius=\"md\"\n bg=\"gray.50\"\n overflowX=\"auto\"\n whiteSpace=\"pre-wrap\"\n fontSize=\"xs\"\n >\n {JSON.stringify(value, null, 2)}\n </Box>\n </details>\n );\n}\n\nfunction TicketDetails({ ticket }: { ticket: QueueTicket }) {\n const error = diagnosticMessage(ticket.lastError);\n return (\n <Stack gap={3} pt={3} mt={3} borderTopWidth=\"1px\">\n <Box display=\"grid\" gridTemplateColumns={{ base: \"1fr\", md: \"repeat(3, minmax(0, 1fr))\" }} gap={3}>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">ID completo</Text>\n <Text fontSize=\"sm\" wordBreak=\"break-all\">{ticket._id}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">Chave de idempotência</Text>\n <Text fontSize=\"sm\" wordBreak=\"break-all\">{ticket.idempotencyKey || \"—\"}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">Status anterior</Text>\n <Text fontSize=\"sm\">{ticket.previousStatus || \"—\"}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">Criado</Text>\n <Text fontSize=\"sm\">{dateTime(ticket.createdAt)}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">Atualizado</Text>\n <Text fontSize=\"sm\">{dateTime(ticket.updatedAt)}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">Concluído</Text>\n <Text fontSize=\"sm\">{dateTime(ticket.completedAt)}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">Worker</Text>\n <Text fontSize=\"sm\">{ticket.lockedBy || \"—\"}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">Lease expira</Text>\n <Text fontSize=\"sm\">{dateTime(ticket.leaseExpiresAt)}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\">Heartbeat</Text>\n <Text fontSize=\"sm\">{dateTime(ticket.heartbeatAt)}</Text>\n </Box>\n </Box>\n {error ? (\n <Box borderWidth=\"1px\" borderColor=\"red.100\" borderRadius=\"md\" bg=\"red.50\" p={3}>\n <Text fontSize=\"xs\" color=\"gray.600\">Último erro</Text>\n <Text color=\"red.700\">{error}</Text>\n </Box>\n ) : null}\n {ticket.archiveReason ? (\n <Box borderWidth=\"1px\" borderRadius=\"md\" p={3}>\n <Text fontSize=\"xs\" color=\"gray.500\">Motivo do arquivamento</Text>\n <Text>{ticket.archiveReason}</Text>\n </Box>\n ) : null}\n <JsonDetails label=\"Payload sanitizado\" value={ticket.payload} />\n <JsonDetails label=\"Resposta sanitizada\" value={ticket.responseSummary} />\n <JsonDetails label=\"Erro sanitizado\" value={ticket.lastError} />\n </Stack>\n );\n}\n\nfunction canReprocess(status: string) {\n return [\"Erro temporário\", \"Erro definitivo\", \"Arquivado\"].includes(status);\n}\n\nfunction canArchive(status: string) {\n return [\"Erro temporário\", \"Erro definitivo\"].includes(status);\n}\n\nfunction TicketActions({\n ticket,\n mutation,\n onToggle,\n expanded,\n}: {\n ticket: QueueTicket;\n mutation: ReturnType<typeof useMutation<unknown, Error, { id: string; action: TicketAction }>>;\n onToggle: () => void;\n expanded: boolean;\n}) {\n const pending = mutation.isPending && mutation.variables?.id === ticket._id;\n return (\n <Flex gap={2} wrap=\"wrap\" justify=\"flex-end\">\n <Button size=\"xs\" variant=\"outline\" onClick={onToggle} aria-expanded={expanded}>\n {expanded ? \"Ocultar\" : \"Detalhes\"}\n </Button>\n {canReprocess(ticket.status) ? (\n <Button\n size=\"xs\"\n variant=\"outline\"\n loading={pending && mutation.variables?.action === \"reprocess\"}\n onClick={() => mutation.mutate({ id: ticket._id, action: \"reprocess\" })}\n >\n Reprocessar\n </Button>\n ) : null}\n {canArchive(ticket.status) ? (\n <Button\n size=\"xs\"\n variant=\"outline\"\n colorPalette=\"red\"\n loading={pending && mutation.variables?.action === \"archive\"}\n onClick={() => mutation.mutate({ id: ticket._id, action: \"archive\" })}\n >\n Arquivar\n </Button>\n ) : null}\n </Flex>\n );\n}\n\nfunction TicketCard({\n ticket,\n expanded,\n onToggle,\n mutation,\n}: {\n ticket: QueueTicket;\n expanded: boolean;\n onToggle: () => void;\n mutation: ReturnType<typeof useMutation<unknown, Error, { id: string; action: TicketAction }>>;\n}) {\n const error = diagnosticMessage(ticket.lastError);\n return (\n <Box borderWidth=\"1px\" borderRadius=\"md\" p={3} bg=\"white\">\n <Flex align=\"start\" justify=\"space-between\" gap={2}>\n <Box minW={0}>\n <Text fontSize=\"xs\" color=\"gray.500\" title={ticket._id}>#{shortId(ticket._id)}</Text>\n <Text fontWeight=\"semibold\" wordBreak=\"break-word\">{ticket.handler}</Text>\n </Box>\n <Badge colorPalette={statusPalette(ticket.status)}>{ticket.status}</Badge>\n </Flex>\n <Text fontSize=\"sm\" color=\"gray.600\" mt={2}>\n {ticket.resource || \"sem recurso\"} · {ticket.operation || \"execute\"}\n </Text>\n <Text fontSize=\"xs\" color=\"gray.500\" mt={1} wordBreak=\"break-word\">\n {ticket.aggregateType || \"sem agregado\"}{ticket.aggregateId ? ` · ${ticket.aggregateId}` : \"\"}\n </Text>\n <Flex gap={2} mt={2} wrap=\"wrap\">\n <Badge variant=\"outline\">Tentativas: {ticket.attempts ?? 0}</Badge>\n <Badge variant=\"outline\">Criado: {dateTime(ticket.createdAt)}</Badge>\n </Flex>\n {error ? <Text fontSize=\"xs\" color=\"red.600\" mt={2}>{error}</Text> : null}\n <Box mt={3}>\n <TicketActions ticket={ticket} mutation={mutation} onToggle={onToggle} expanded={expanded} />\n </Box>\n {expanded ? <TicketDetails ticket={ticket} /> : null}\n </Box>\n );\n}\n\nexport function CoreIntegrationTickets({ provider = \"omie\" }: { provider?: string }) {\n const { http } = useOonApi();\n const [view, setView] = useState<TicketView>(\"list\");\n const [status, setStatus] = useState(\"\");\n const [searchInput, setSearchInput] = useState(\"\");\n const [search, setSearch] = useState(\"\");\n const [page, setPage] = useState(1);\n const [expandedId, setExpandedId] = useState<string | null>(null);\n const limit = view === \"board\" ? 200 : 25;\n\n useEffect(() => {\n const timeout = window.setTimeout(() => {\n setSearch(searchInput.trim());\n setPage(1);\n }, 350);\n return () => window.clearTimeout(timeout);\n }, [searchInput]);\n\n const queue = useQuery({\n queryKey: [\"core-integration-tickets\", provider, view, status, search, page],\n queryFn: async () => (await http.get(\"/integrations/queue\", {\n params: {\n provider,\n status: status || undefined,\n search: search || undefined,\n page,\n limit,\n },\n })).data as QueueResponse,\n });\n\n const action = useMutation<unknown, Error, { id: string; action: TicketAction }>({\n mutationFn: async ({ id, action: ticketAction }) => {\n const body = ticketAction === \"archive\" ? { reason: \"Arquivado manualmente pela visão de tickets.\" } : {};\n return http.post(\n `/integrations/queue/${id}/${ticketAction}`,\n body,\n { headers: { \"x-oon-origin\": \"integration\" } },\n );\n },\n onSuccess: async () => {\n setExpandedId(null);\n await queue.refetch();\n },\n });\n\n const processPending = useMutation<unknown, Error, void>({\n mutationFn: async () => http.post(\n \"/integrations/queue/process\",\n { provider, limit: 100 },\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: async () => {\n await queue.refetch();\n },\n });\n\n useEffect(() => {\n const totalPages = queue.data?.pagination?.totalPages ?? 1;\n if (page > totalPages) setPage(Math.max(1, totalPages));\n }, [page, queue.data?.pagination?.totalPages]);\n\n const tickets = queue.data?.results ?? [];\n const grouped = useMemo(() => Object.fromEntries(\n TICKET_STATUSES.map((ticketStatus) => [ticketStatus, tickets.filter((ticket) => ticket.status === ticketStatus)]),\n ) as Record<TicketStatus, QueueTicket[]>, [tickets]);\n\n if (queue.isLoading) return <LoadingScreen />;\n if (queue.error && !queue.data) return <ErrorState error={queue.error} />;\n\n const pagination = queue.data?.pagination;\n const totalPages = Math.max(1, pagination?.totalPages ?? 1);\n const totalItems = pagination?.totalItems ?? 0;\n const statuses = queue.data?.summary?.statuses ?? {};\n const operationError = action.error || processPending.error || queue.error;\n\n return (\n <Stack gap={5}>\n <Flex align=\"start\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Heading size=\"md\">Tickets de integração</Heading>\n <Text color=\"gray.500\">\n Acompanhe cada operação da fila, seus parâmetros sanitizados, tentativas, erros e resultado.\n </Text>\n </Box>\n <Flex gap={2}>\n <Button size=\"sm\" variant={view === \"list\" ? \"solid\" : \"outline\"} onClick={() => { setView(\"list\"); setPage(1); }}>\n Lista\n </Button>\n <Button size=\"sm\" variant={view === \"board\" ? \"solid\" : \"outline\"} onClick={() => { setView(\"board\"); setPage(1); }}>\n Quadro\n </Button>\n <Button\n size=\"sm\"\n colorPalette=\"blue\"\n loading={processPending.isPending}\n disabled={processPending.isPending}\n onClick={() => processPending.mutate()}\n >\n Processar pendentes\n </Button>\n <Button size=\"sm\" variant=\"outline\" loading={queue.isFetching} onClick={() => queue.refetch()}>\n Atualizar\n </Button>\n </Flex>\n </Flex>\n\n <Box borderWidth=\"1px\" borderRadius=\"md\" p={3}>\n <Flex gap={3} align=\"center\" wrap=\"wrap\">\n <Input\n size=\"sm\"\n value={searchInput}\n onChange={(event) => setSearchInput(event.currentTarget.value)}\n placeholder=\"Pesquisar ID, handler, recurso, agregado ou idempotência\"\n flex=\"1\"\n minW=\"280px\"\n />\n <NativeSelect\n ariaLabel=\"Filtrar tickets por status\"\n value={status}\n onChange={(value) => { setStatus(value); setPage(1); }}\n >\n <option value=\"\">Todos os status</option>\n {TICKET_STATUSES.map((ticketStatus) => (\n <option key={ticketStatus} value={ticketStatus}>{ticketStatus}</option>\n ))}\n </NativeSelect>\n <Text fontSize=\"sm\" color=\"gray.500\">{totalItems} ticket(s)</Text>\n </Flex>\n <Flex gap={2} wrap=\"wrap\" mt={3}>\n {TICKET_STATUSES.map((ticketStatus) => (\n <Button\n key={ticketStatus}\n size=\"xs\"\n variant={status === ticketStatus ? \"solid\" : \"outline\"}\n colorPalette={statusPalette(ticketStatus)}\n onClick={() => { setStatus((current) => current === ticketStatus ? \"\" : ticketStatus); setPage(1); }}\n >\n {ticketStatus}: {statuses[ticketStatus] ?? 0}\n </Button>\n ))}\n </Flex>\n </Box>\n\n {view === \"list\" ? (\n <Box borderWidth=\"1px\" borderRadius=\"md\" overflowX=\"auto\">\n <Box minW=\"1080px\">\n <Box\n display=\"grid\"\n gridTemplateColumns=\"1.25fr 1.5fr 1.15fr .75fr 1.15fr .9fr 1.3fr\"\n gap={3}\n px={3}\n py={2}\n bg=\"gray.50\"\n borderBottomWidth=\"1px\"\n >\n {[\"Ticket\", \"Operação\", \"Agregado\", \"Tentativas\", \"Datas\", \"Status\", \"Ações\"].map((label) => (\n <Text key={label} fontSize=\"xs\" fontWeight=\"semibold\" color=\"gray.600\">{label}</Text>\n ))}\n </Box>\n {tickets.length ? tickets.map((ticket) => {\n const expanded = expandedId === ticket._id;\n const error = diagnosticMessage(ticket.lastError);\n return (\n <Box key={ticket._id} px={3} py={3} borderBottomWidth=\"1px\" _last={{ borderBottomWidth: 0 }}>\n <Box\n display=\"grid\"\n gridTemplateColumns=\"1.25fr 1.5fr 1.15fr .75fr 1.15fr .9fr 1.3fr\"\n gap={3}\n alignItems=\"start\"\n >\n <Box minW={0}>\n <Text fontWeight=\"semibold\" title={ticket._id}>#{shortId(ticket._id)}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\">{ticket.provider}</Text>\n </Box>\n <Box minW={0}>\n <Text fontSize=\"sm\" fontWeight=\"medium\" wordBreak=\"break-word\">{ticket.handler}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\">{ticket.resource || \"—\"} · {ticket.operation || \"execute\"}</Text>\n {error ? <Text fontSize=\"xs\" color=\"red.600\" mt={1}>{error}</Text> : null}\n </Box>\n <Box minW={0}>\n <Text fontSize=\"sm\">{ticket.aggregateType || \"—\"}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\" wordBreak=\"break-all\">{ticket.aggregateId || \"—\"}</Text>\n </Box>\n <Box>\n <Text fontSize=\"sm\">{ticket.attempts ?? 0}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\">Próxima: {dateTime(ticket.nextAttemptAt)}</Text>\n </Box>\n <Box>\n <Text fontSize=\"xs\">Criado: {dateTime(ticket.createdAt)}</Text>\n <Text fontSize=\"xs\">Atualizado: {dateTime(ticket.updatedAt)}</Text>\n <Text fontSize=\"xs\">Concluído: {dateTime(ticket.completedAt)}</Text>\n </Box>\n <Badge colorPalette={statusPalette(ticket.status)} width=\"fit-content\">{ticket.status}</Badge>\n <TicketActions\n ticket={ticket}\n mutation={action}\n expanded={expanded}\n onToggle={() => setExpandedId((current) => current === ticket._id ? null : ticket._id)}\n />\n </Box>\n {expanded ? <TicketDetails ticket={ticket} /> : null}\n </Box>\n );\n }) : (\n <Text p={5} color=\"gray.400\">Nenhum ticket encontrado com os filtros informados.</Text>\n )}\n </Box>\n </Box>\n ) : (\n <Box overflowX=\"auto\" pb={2}>\n <Flex align=\"start\" gap={3} minW={`${TICKET_STATUSES.length * 290}px`}>\n {TICKET_STATUSES.map((ticketStatus) => (\n <Box key={ticketStatus} width=\"280px\" flex=\"0 0 280px\" bg=\"gray.50\" borderRadius=\"md\" p={2}>\n <Flex align=\"center\" justify=\"space-between\" mb={2}>\n <Badge colorPalette={statusPalette(ticketStatus)}>{ticketStatus}</Badge>\n <Text fontSize=\"xs\" color=\"gray.500\">{statuses[ticketStatus] ?? 0}</Text>\n </Flex>\n <Stack gap={2}>\n {grouped[ticketStatus].length ? grouped[ticketStatus].map((ticket) => (\n <TicketCard\n key={ticket._id}\n ticket={ticket}\n mutation={action}\n expanded={expandedId === ticket._id}\n onToggle={() => setExpandedId((current) => current === ticket._id ? null : ticket._id)}\n />\n )) : <Text fontSize=\"xs\" color=\"gray.400\" p={2}>Nenhum ticket nesta página.</Text>}\n </Stack>\n </Box>\n ))}\n </Flex>\n </Box>\n )}\n\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Text fontSize=\"sm\" color=\"gray.500\">\n Página {pagination?.currentPage ?? page} de {totalPages} · {pagination?.itemsPerPage ?? limit} por página\n {view === \"board\" && totalItems > limit ? \" · o quadro é paginado\" : \"\"}\n </Text>\n <Flex gap={2}>\n <Button size=\"sm\" variant=\"outline\" disabled={page <= 1} onClick={() => setPage((current) => Math.max(1, current - 1))}>\n Anterior\n </Button>\n <Button size=\"sm\" variant=\"outline\" disabled={page >= totalPages} onClick={() => setPage((current) => Math.min(totalPages, current + 1))}>\n Próxima\n </Button>\n </Flex>\n </Flex>\n\n {operationError ? <Text color=\"red.600\">{integrationErrorMessage(operationError)}</Text> : null}\n </Stack>\n );\n}","import { useState } from \"react\";\nimport { Button, Flex, Stack } from \"@chakra-ui/react\";\nimport { CoreIntegrationTickets } from \"./CoreIntegrationTickets\";\nimport { CoreOmieIntegration } from \"./CoreOmieIntegration\";\n\ntype WorkspaceView = \"integration\" | \"tickets\";\n\nexport function CoreOmieIntegrationWorkspace() {\n const [view, setView] = useState<WorkspaceView>(\"integration\");\n\n return (\n <Stack gap={4}>\n <Flex gap={2} wrap=\"wrap\" borderBottomWidth=\"1px\" pb={2}>\n <Button\n size=\"sm\"\n variant={view === \"integration\" ? \"solid\" : \"ghost\"}\n onClick={() => setView(\"integration\")}\n >\n Integração Omie\n </Button>\n <Button\n size=\"sm\"\n variant={view === \"tickets\" ? \"solid\" : \"ghost\"}\n onClick={() => setView(\"tickets\")}\n >\n Tickets\n </Button>\n </Flex>\n {view === \"integration\" ? <CoreOmieIntegration /> : null}\n {view === \"tickets\" ? <CoreIntegrationTickets provider=\"omie\" /> : null}\n </Stack>\n );\n}\n","import { useEffect, useState, type ReactNode } from \"react\";\nimport { Badge, Box, Button, Flex, Heading, Input, Stack, Text } from \"@chakra-ui/react\";\nimport { useMutation, useQuery } from \"@tanstack/react-query\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { ErrorState } from \"../shell/ErrorState\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\n\ntype OmieTab = \"configuration\" | \"synchronization\" | \"webhooks\" | \"history\";\n\ninterface ProviderConfigurationInstance {\n instanceId: string;\n label?: string;\n active?: boolean;\n environment?: string;\n baseUrl?: string;\n appKeyMasked?: string;\n credentialsConfigured?: boolean;\n webhookConfigured?: boolean;\n connectionStatus?: string;\n lastConnectionError?: string;\n lastConnectionTestAt?: string | null;\n updatedAt?: string;\n}\n\ninterface ProviderHealth {\n key: string;\n label: string;\n status?: string;\n description?: string;\n resources?: Array<{ key: string; label: string; description?: string }>;\n queue?: Record<string, number>;\n inbox?: Record<string, number>;\n lastExecution?: { status?: string } | null;\n oldestPendingAt?: string | null;\n}\n\ninterface MappingList {\n key: string;\n label?: string;\n mode?: string;\n direction?: string;\n targetModel?: string;\n executions?: Array<{\n instanceId?: string;\n status?: string;\n lastCompletedAt?: string | null;\n summary?: Record<string, unknown>;\n }>;\n}\n\ninterface MappingWebhook {\n eventType: string;\n resource?: string;\n actions?: Array<{ handler?: string }>;\n}\n\ninterface ProviderMappings {\n calls?: Array<{ key: string; label?: string; call?: string }>;\n lists?: MappingList[];\n webhooks?: MappingWebhook[];\n}\n\ninterface QueueTicket {\n _id: string;\n handler: string;\n resource?: string;\n status: string;\n attempts?: number;\n nextAttemptAt?: string | null;\n lastError?: { message?: string };\n}\n\ninterface WebhookEvent {\n _id: string;\n eventType?: string;\n resource?: string;\n status: string;\n receivedAt?: string;\n attempts?: number;\n lastError?: { message?: string };\n}\n\ninterface ExecutionDiagnostic {\n index?: number;\n externalKey?: unknown;\n message?: string;\n code?: string;\n statusCode?: number;\n error?: {\n message?: string;\n code?: string;\n statusCode?: number;\n details?: unknown;\n };\n}\n\ninterface ExecutionEntry {\n _id: string;\n title: string;\n status: string;\n resource?: string;\n startedAt?: string;\n durationMs?: number;\n summary?: Record<string, unknown>;\n errors?: ExecutionDiagnostic[];\n errorCount?: number;\n errorsLimited?: boolean;\n error?: { message?: string; code?: string; statusCode?: number };\n items?: unknown[];\n itemCount?: number;\n itemsLimited?: boolean;\n requests?: unknown[];\n requestCount?: number;\n requestsLimited?: boolean;\n metadata?: Record<string, unknown>;\n}\n\ninterface ConfigurationDraft {\n instanceId: string;\n label: string;\n active: boolean;\n environment: string;\n baseUrl: string;\n appKey: string;\n appSecret: string;\n}\n\nfunction dateTime(value?: string | null) {\n if (!value) return \"—\";\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleString(\"pt-BR\");\n}\n\nfunction statusPalette(status?: string) {\n const normalized = String(status || \"\").toLowerCase();\n if (normalized.includes(\"erro\") || normalized.includes(\"error\") || normalized.includes(\"inativo\")) return \"red\";\n if (normalized.includes(\"process\") || normalized.includes(\"pendente\") || normalized.includes(\"not-tested\")) return \"yellow\";\n if (normalized.includes(\"concluído\") || normalized.includes(\"ativo\") || normalized === \"ok\") return \"green\";\n return \"gray\";\n}\n\nfunction integrationErrorMessage(error: unknown) {\n const candidate = error as {\n message?: unknown;\n response?: { data?: { message?: unknown; error?: { message?: unknown } } };\n } | null;\n const message = candidate?.response?.data?.error?.message\n || candidate?.response?.data?.message\n || candidate?.message;\n return typeof message === \"string\" && message.trim()\n ? message\n : \"Não foi possível concluir a operação.\";\n}\n\nfunction countActive(values?: Record<string, number>) {\n return Object.entries(values ?? {})\n .filter(([status]) => ![\"Concluído\", \"Arquivado\"].includes(status))\n .reduce((sum, [, count]) => sum + Number(count || 0), 0);\n}\n\nfunction absoluteWebhookUrl(path?: string) {\n if (!path) return \"\";\n if (typeof window === \"undefined\") return path;\n return new URL(path, window.location.origin).toString();\n}\n\nasync function copyText(value: string) {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(value);\n return;\n }\n if (typeof document === \"undefined\") return;\n const textarea = document.createElement(\"textarea\");\n textarea.value = value;\n textarea.style.position = \"fixed\";\n textarea.style.opacity = \"0\";\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand(\"copy\");\n textarea.remove();\n}\n\nfunction NativeSelect({\n value,\n onChange,\n children,\n}: {\n value: string;\n onChange: (value: string) => void;\n children: ReactNode;\n}) {\n return (\n <select\n style={{\n width: \"100%\",\n height: \"34px\",\n border: \"1px solid #e2e8f0\",\n borderRadius: \"6px\",\n padding: \"0 8px\",\n background: \"white\",\n }}\n value={value}\n onChange={(event) => onChange(event.currentTarget.value)}\n >\n {children}\n </select>\n );\n}\n\nfunction OmieConfigurationTab() {\n const { http } = useOonApi();\n const configuration = useQuery({\n queryKey: [\"core-omie\", \"configuration\"],\n queryFn: async () => ((await http.get(\"/integrations/providers/omie/configuration\")).data?.instances ?? []) as ProviderConfigurationInstance[],\n });\n const [draft, setDraft] = useState<ConfigurationDraft>({\n instanceId: \"default\",\n label: \"Omie\",\n active: true,\n environment: \"production\",\n baseUrl: \"https://app.omie.com.br/api/v1\",\n appKey: \"\",\n appSecret: \"\",\n });\n const selected = (configuration.data ?? []).find((item) => item.instanceId === draft.instanceId)\n ?? configuration.data?.[0];\n\n useEffect(() => {\n if (!selected) return;\n setDraft((current) => ({\n ...current,\n instanceId: selected.instanceId || \"default\",\n label: selected.label || \"Omie\",\n active: selected.active !== false,\n environment: selected.environment || \"production\",\n baseUrl: selected.baseUrl || \"https://app.omie.com.br/api/v1\",\n appKey: \"\",\n appSecret: \"\",\n }));\n }, [selected?.instanceId, selected?.updatedAt]);\n\n const save = useMutation({\n mutationFn: () => http.put(\n `/integrations/providers/omie/configuration/${draft.instanceId}`,\n {\n label: draft.label,\n active: draft.active,\n environment: draft.environment,\n baseUrl: draft.baseUrl,\n ...(draft.appKey ? { appKey: draft.appKey } : {}),\n ...(draft.appSecret ? { appSecret: draft.appSecret } : {}),\n },\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: async () => {\n setDraft((current) => ({ ...current, appKey: \"\", appSecret: \"\" }));\n await configuration.refetch();\n },\n });\n\n const testConnection = useMutation({\n mutationFn: () => http.post(\n `/integrations/providers/omie/configuration/${draft.instanceId}/test`,\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: () => configuration.refetch(),\n });\n\n if (configuration.isLoading) return <LoadingScreen />;\n if (configuration.error) return <ErrorState error={configuration.error} />;\n const error = save.error || testConnection.error;\n\n return (\n <Stack gap={4}>\n <Box>\n <Heading size=\"md\">Configurações</Heading>\n <Text color=\"gray.500\">\n Credenciais protegidas por instância. O token do webhook é gerado e administrado automaticamente.\n </Text>\n </Box>\n\n <Flex gap={3} wrap=\"wrap\">\n <Box minW=\"180px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>Instância</Text>\n <NativeSelect\n value={draft.instanceId}\n onChange={(instanceId) => setDraft((current) => ({ ...current, instanceId }))}\n >\n {(configuration.data ?? []).map((instance) => (\n <option key={instance.instanceId} value={instance.instanceId}>\n {instance.label || instance.instanceId}\n </option>\n ))}\n </NativeSelect>\n </Box>\n <Box minW=\"240px\" flex=\"2\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>Nome</Text>\n <Input\n size=\"sm\"\n value={draft.label}\n onChange={(event) => setDraft((current) => ({ ...current, label: event.target.value }))}\n />\n </Box>\n <Box minW=\"180px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>Ambiente</Text>\n <NativeSelect\n value={draft.environment}\n onChange={(environment) => setDraft((current) => ({ ...current, environment }))}\n >\n <option value=\"production\">Produção</option>\n <option value=\"homologation\">Homologação</option>\n </NativeSelect>\n </Box>\n </Flex>\n\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>URL base</Text>\n <Input\n size=\"sm\"\n value={draft.baseUrl}\n onChange={(event) => setDraft((current) => ({ ...current, baseUrl: event.target.value }))}\n />\n </Box>\n\n <Flex gap={3} wrap=\"wrap\">\n <Box minW=\"260px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>\n App Key {selected?.appKeyMasked ? `(${selected.appKeyMasked})` : \"\"}\n </Text>\n <Input\n size=\"sm\"\n type=\"password\"\n value={draft.appKey}\n onChange={(event) => setDraft((current) => ({ ...current, appKey: event.target.value }))}\n placeholder={selected?.credentialsConfigured ? \"Manter valor atual\" : \"Informe a App Key\"}\n />\n </Box>\n <Box minW=\"260px\" flex=\"1\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>App Secret</Text>\n <Input\n size=\"sm\"\n type=\"password\"\n value={draft.appSecret}\n onChange={(event) => setDraft((current) => ({ ...current, appSecret: event.target.value }))}\n placeholder={selected?.credentialsConfigured ? \"Manter valor atual\" : \"Informe o App Secret\"}\n />\n </Box>\n </Flex>\n\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Flex align=\"center\" gap={2} wrap=\"wrap\">\n <label>\n <input\n type=\"checkbox\"\n checked={draft.active}\n onChange={(event) => setDraft((current) => ({ ...current, active: event.target.checked }))}\n />{\" \"}Integração ativa\n </label>\n <Badge colorPalette={statusPalette(selected?.connectionStatus)}>\n Conexão: {selected?.connectionStatus ?? \"não testada\"}\n </Badge>\n <Badge colorPalette={selected?.webhookConfigured ? \"green\" : \"yellow\"}>\n Webhook: {selected?.webhookConfigured ? \"configurado\" : \"será gerado\"}\n </Badge>\n <Text fontSize=\"xs\" color=\"gray.500\">Último teste: {dateTime(selected?.lastConnectionTestAt)}</Text>\n </Flex>\n <Flex gap={2}>\n <Button\n size=\"sm\"\n variant=\"outline\"\n loading={testConnection.isPending}\n onClick={() => testConnection.mutate()}\n >\n Testar conexão\n </Button>\n <Button size=\"sm\" loading={save.isPending} onClick={() => save.mutate()}>\n Salvar configurações\n </Button>\n </Flex>\n </Flex>\n\n {selected?.lastConnectionError ? <Text color=\"red.600\">{selected.lastConnectionError}</Text> : null}\n {error ? <Text color=\"red.600\">{integrationErrorMessage(error)}</Text> : null}\n </Stack>\n );\n}\n\nfunction OmieSynchronizationTab() {\n const { http } = useOonApi();\n const health = useQuery({\n queryKey: [\"core-omie\", \"health\"],\n queryFn: async () => {\n const providers = ((await http.get(\"/integrations/health\")).data?.results ?? []) as ProviderHealth[];\n return providers.find((provider) => provider.key === \"omie\") ?? null;\n },\n });\n const mappings = useQuery({\n queryKey: [\"core-omie\", \"mappings\"],\n queryFn: async () => (await http.get(\"/integrations/providers/omie/mappings\")).data as ProviderMappings,\n });\n const queue = useQuery({\n queryKey: [\"core-omie\", \"queue\"],\n queryFn: async () => ((await http.get(\"/integrations/queue\", {\n params: { provider: \"omie\", limit: 20 },\n })).data?.results ?? []) as QueueTicket[],\n });\n\n const refresh = () => Promise.all([health.refetch(), mappings.refetch(), queue.refetch()]);\n const syncAll = useMutation({\n mutationFn: () => http.post(\n \"/integrations/providers/omie/sync-all\",\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: refresh,\n });\n const syncResource = useMutation({\n mutationFn: (resource: string) => http.post(\n `/integrations/providers/omie/resources/${resource}/sync`,\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: refresh,\n });\n const process = useMutation({\n mutationFn: () => http.post(\n \"/integrations/actions/process-active\",\n { provider: \"omie\" },\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: refresh,\n });\n\n if (health.isLoading || mappings.isLoading || queue.isLoading) return <LoadingScreen />;\n const error = health.error || mappings.error || queue.error || syncAll.error || syncResource.error || process.error;\n if ((health.error || mappings.error || queue.error) && !health.data) return <ErrorState error={error} />;\n\n const provider = health.data;\n\n return (\n <Stack gap={5}>\n <Flex align=\"start\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Heading size=\"md\">Sincronização</Heading>\n <Text color=\"gray.500\">Execute listas declaradas e acompanhe o processamento da fila Omie.</Text>\n </Box>\n <Flex gap={2}>\n <Button size=\"sm\" variant=\"outline\" loading={process.isPending} onClick={() => process.mutate()}>\n Processar pendências\n </Button>\n <Button size=\"sm\" loading={syncAll.isPending} onClick={() => syncAll.mutate()}>\n Sincronizar tudo\n </Button>\n </Flex>\n </Flex>\n\n {provider ? (\n <Box borderWidth=\"1px\" borderRadius=\"md\" p={4}>\n <Flex gap={2} wrap=\"wrap\" mb={3}>\n <Badge colorPalette={statusPalette(provider.status)}>{provider.status || \"—\"}</Badge>\n <Badge colorPalette={countActive(provider.queue) ? \"yellow\" : \"green\"}>\n Fila ativa: {countActive(provider.queue)}\n </Badge>\n <Badge colorPalette={countActive(provider.inbox) ? \"yellow\" : \"green\"}>\n Eventos ativos: {countActive(provider.inbox)}\n </Badge>\n <Badge colorPalette={statusPalette(provider.lastExecution?.status)}>\n Última execução: {provider.lastExecution?.status || \"sem histórico\"}\n </Badge>\n </Flex>\n <Text fontSize=\"sm\" color=\"gray.500\" mb={3}>\n Pendência mais antiga: {dateTime(provider.oldestPendingAt)}\n </Text>\n <Flex gap={2} wrap=\"wrap\">\n {(provider.resources ?? []).map((resource) => (\n <Button\n key={resource.key}\n size=\"sm\"\n variant=\"outline\"\n loading={syncResource.isPending}\n onClick={() => syncResource.mutate(resource.key)}\n >\n {resource.label}\n </Button>\n ))}\n </Flex>\n </Box>\n ) : <Text color=\"gray.500\">Provider Omie não registrado.</Text>}\n\n <Box>\n <Heading size=\"sm\" mb={3}>Listas declaradas</Heading>\n <Stack gap={2}>\n {(mappings.data?.lists ?? []).map((list) => {\n const latest = list.executions?.[0];\n return (\n <Box key={list.key} borderWidth=\"1px\" borderRadius=\"md\" p={3}>\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Text fontWeight=\"semibold\">{list.label || list.key}</Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n {list.mode || \"modo padrão\"} · {list.direction || \"direção padrão\"} · {list.targetModel || \"destino declarado\"}\n </Text>\n </Box>\n <Flex gap={2} wrap=\"wrap\">\n <Badge colorPalette={statusPalette(latest?.status)}>{latest?.status || \"não executada\"}</Badge>\n <Badge variant=\"outline\">{dateTime(latest?.lastCompletedAt)}</Badge>\n </Flex>\n </Flex>\n </Box>\n );\n })}\n </Stack>\n </Box>\n\n <Box>\n <Heading size=\"sm\" mb={3}>Fila recente</Heading>\n <Stack gap={2}>\n {(queue.data ?? []).length ? queue.data?.map((ticket) => (\n <Box key={ticket._id} borderWidth=\"1px\" borderRadius=\"md\" p={3}>\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Text fontWeight=\"medium\">{ticket.handler}</Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n {ticket.resource || \"sem recurso\"} · tentativas {ticket.attempts ?? 0} · próxima {dateTime(ticket.nextAttemptAt)}\n </Text>\n {ticket.lastError?.message ? <Text fontSize=\"sm\" color=\"red.600\">{ticket.lastError.message}</Text> : null}\n </Box>\n <Badge colorPalette={statusPalette(ticket.status)}>{ticket.status}</Badge>\n </Flex>\n </Box>\n )) : <Text color=\"gray.400\">Nenhuma pendência Omie.</Text>}\n </Stack>\n </Box>\n\n {error ? <Text color=\"red.600\">{integrationErrorMessage(error)}</Text> : null}\n </Stack>\n );\n}\n\nfunction OmieWebhooksTab() {\n const { http } = useOonApi();\n const [instanceId, setInstanceId] = useState(\"default\");\n const [copied, setCopied] = useState(false);\n const configuration = useQuery({\n queryKey: [\"core-omie\", \"configuration\"],\n queryFn: async () => ((await http.get(\"/integrations/providers/omie/configuration\")).data?.instances ?? []) as ProviderConfigurationInstance[],\n });\n const access = useQuery({\n queryKey: [\"core-omie\", \"webhook-access\", instanceId],\n enabled: Boolean(instanceId),\n queryFn: async () => (await http.get(\n `/integrations/providers/omie/configuration/${instanceId}/webhook`,\n )).data as { webhookPath?: string; instanceId?: string; rotated?: boolean },\n });\n const mappings = useQuery({\n queryKey: [\"core-omie\", \"mappings\"],\n queryFn: async () => (await http.get(\"/integrations/providers/omie/mappings\")).data as ProviderMappings,\n });\n const events = useQuery({\n queryKey: [\"core-omie\", \"events\"],\n queryFn: async () => ((await http.get(\"/integrations/events\", {\n params: { provider: \"omie\", limit: 20 },\n })).data?.results ?? []) as WebhookEvent[],\n });\n const rotate = useMutation({\n mutationFn: () => http.post(\n `/integrations/providers/omie/configuration/${instanceId}/webhook/rotate`,\n {},\n { headers: { \"x-oon-origin\": \"integration\" } },\n ),\n onSuccess: async () => {\n setCopied(false);\n await Promise.all([access.refetch(), configuration.refetch()]);\n },\n });\n\n useEffect(() => {\n const first = configuration.data?.[0]?.instanceId;\n if (first && !configuration.data?.some((item) => item.instanceId === instanceId)) setInstanceId(first);\n }, [configuration.data, instanceId]);\n\n if (configuration.isLoading || mappings.isLoading || events.isLoading) return <LoadingScreen />;\n const blockingError = configuration.error || mappings.error || events.error;\n if (blockingError) return <ErrorState error={blockingError} />;\n\n const url = absoluteWebhookUrl(access.data?.webhookPath);\n const operationError = access.error || rotate.error;\n\n return (\n <Stack gap={5}>\n <Box>\n <Heading size=\"md\">Webhooks e gatilhos</Heading>\n <Text color=\"gray.500\">\n Copie a URL completa para o cadastro de webhook no Omie. O token é gerado automaticamente e pode ser rotacionado.\n </Text>\n </Box>\n\n <Box borderWidth=\"1px\" borderRadius=\"md\" p={4}>\n <Stack gap={3}>\n <Box maxW=\"360px\">\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>Instância</Text>\n <NativeSelect value={instanceId} onChange={setInstanceId}>\n {(configuration.data ?? []).map((instance) => (\n <option key={instance.instanceId} value={instance.instanceId}>\n {instance.label || instance.instanceId}\n </option>\n ))}\n </NativeSelect>\n </Box>\n\n <Box>\n <Text fontSize=\"xs\" color=\"gray.500\" mb={1}>URL do webhook</Text>\n <Flex gap={2} align=\"center\" wrap=\"wrap\">\n <Input\n size=\"sm\"\n value={url}\n readOnly\n minW=\"320px\"\n flex=\"1\"\n placeholder={access.isLoading ? \"Gerando URL segura…\" : \"URL indisponível\"}\n />\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={!url}\n onClick={async () => {\n await copyText(url);\n setCopied(true);\n }}\n >\n {copied ? \"Link copiado\" : \"Copiar link\"}\n </Button>\n <Button\n size=\"sm\"\n colorPalette=\"red\"\n variant=\"outline\"\n loading={rotate.isPending}\n onClick={() => {\n if (typeof window === \"undefined\" || window.confirm(\n \"Gerar um novo token? A URL anterior deixará de receber eventos.\",\n )) rotate.mutate();\n }}\n >\n Gerar novo token\n </Button>\n </Flex>\n <Text fontSize=\"xs\" color=\"gray.500\" mt={2}>\n A rotação invalida imediatamente a URL anterior. Atualize o cadastro no Omie após gerar um novo token.\n </Text>\n </Box>\n </Stack>\n </Box>\n\n <Box>\n <Heading size=\"sm\" mb={3}>Gatilhos declarados</Heading>\n <Stack gap={2}>\n {(mappings.data?.webhooks ?? []).length ? mappings.data?.webhooks?.map((webhook) => (\n <Box key={`${webhook.eventType}:${webhook.resource || \"\"}`} borderWidth=\"1px\" borderRadius=\"md\" p={3}>\n <Text fontWeight=\"semibold\">{webhook.eventType}</Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n {webhook.resource || \"recurso genérico\"} → {(webhook.actions ?? [])\n .map((action) => action.handler)\n .filter(Boolean)\n .join(\", \") || \"sem ação declarada\"}\n </Text>\n </Box>\n )) : <Text color=\"gray.400\">Nenhum gatilho declarado pela Central.</Text>}\n </Stack>\n </Box>\n\n <Box>\n <Heading size=\"sm\" mb={3}>Eventos recebidos</Heading>\n <Stack gap={2}>\n {(events.data ?? []).length ? events.data?.map((event) => (\n <Box key={event._id} borderWidth=\"1px\" borderRadius=\"md\" p={3}>\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Text fontWeight=\"medium\">{event.eventType || \"Evento Omie\"}</Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n {event.resource || \"sem recurso\"} · recebido em {dateTime(event.receivedAt)} · tentativas {event.attempts ?? 0}\n </Text>\n {event.lastError?.message ? <Text fontSize=\"sm\" color=\"red.600\">{event.lastError.message}</Text> : null}\n </Box>\n <Badge colorPalette={statusPalette(event.status)}>{event.status}</Badge>\n </Flex>\n </Box>\n )) : <Text color=\"gray.400\">Nenhum webhook recebido.</Text>}\n </Stack>\n </Box>\n\n {operationError ? <Text color=\"red.600\">{integrationErrorMessage(operationError)}</Text> : null}\n </Stack>\n );\n}\n\nfunction diagnosticMessage(value: ExecutionDiagnostic) {\n return value.error?.message || value.message || \"Erro sem mensagem registrada.\";\n}\n\nfunction OmieHistoryTab() {\n const { http } = useOonApi();\n const [expandedId, setExpandedId] = useState<string | null>(null);\n const history = useQuery({\n queryKey: [\"core-omie\", \"history\"],\n queryFn: async () => ((await http.get(\"/integrations/history\", {\n params: { provider: \"omie\", limit: 30 },\n })).data?.results ?? []) as ExecutionEntry[],\n });\n\n if (history.isLoading) return <LoadingScreen />;\n if (history.error) return <ErrorState error={history.error} />;\n\n return (\n <Stack gap={4}>\n <Box>\n <Heading size=\"md\">Histórico</Heading>\n <Text color=\"gray.500\">Execuções, erros por registro e diagnóstico técnico sanitizado.</Text>\n </Box>\n <Stack gap={2}>\n {(history.data ?? []).length ? history.data?.map((execution) => {\n const expanded = expandedId === execution._id;\n const diagnostics = [...(execution.errors ?? [])];\n if (execution.error?.message && !diagnostics.some((item) => diagnosticMessage(item) === execution.error?.message)) {\n diagnostics.push({ error: execution.error });\n }\n return (\n <Box key={execution._id} borderWidth=\"1px\" borderRadius=\"md\" p={3}>\n <Flex align=\"center\" justify=\"space-between\" gap={3} wrap=\"wrap\">\n <Box>\n <Text fontWeight=\"semibold\">{execution.title}</Text>\n <Text fontSize=\"sm\" color=\"gray.500\">\n {execution.resource || \"sem recurso\"} · {dateTime(execution.startedAt)} · {execution.durationMs ?? 0} ms\n </Text>\n </Box>\n <Flex align=\"center\" gap={2} wrap=\"wrap\">\n {(execution.errorCount ?? diagnostics.length) > 0 ? (\n <Badge colorPalette=\"red\">{execution.errorCount ?? diagnostics.length} erro(s)</Badge>\n ) : null}\n <Badge colorPalette={statusPalette(execution.status)}>{execution.status}</Badge>\n <Button\n size=\"sm\"\n variant=\"outline\"\n aria-expanded={expanded}\n onClick={() => setExpandedId((current) => current === execution._id ? null : execution._id)}\n >\n {expanded ? \"Ocultar detalhes\" : \"Ver detalhes\"}\n </Button>\n </Flex>\n </Flex>\n\n {expanded ? (\n <Stack gap={3} mt={3} pt={3} borderTopWidth=\"1px\">\n {execution.summary && Object.keys(execution.summary).length ? (\n <Box>\n <Text fontWeight=\"semibold\" fontSize=\"sm\" mb={2}>Resumo</Text>\n <Flex gap={2} wrap=\"wrap\">\n {Object.entries(execution.summary).map(([key, value]) => (\n <Badge key={key} variant=\"outline\">{key}: {String(value ?? \"—\")}</Badge>\n ))}\n </Flex>\n </Box>\n ) : null}\n\n {diagnostics.length ? (\n <Box>\n <Text fontWeight=\"semibold\" fontSize=\"sm\" mb={2}>\n Erros por registro{execution.errorsLimited ? \" · visualização limitada\" : \"\"}\n </Text>\n <Stack gap={2}>\n {diagnostics.map((diagnostic, index) => (\n <Box\n key={`${diagnostic.index ?? index}:${diagnosticMessage(diagnostic)}`}\n borderWidth=\"1px\"\n borderColor=\"red.100\"\n borderRadius=\"md\"\n bg=\"red.50\"\n p={3}\n >\n <Text fontSize=\"xs\" color=\"gray.600\">\n Registro {diagnostic.index !== undefined ? diagnostic.index + 1 : index + 1}\n {diagnostic.externalKey !== undefined ? ` · chave ${String(diagnostic.externalKey)}` : \"\"}\n {(diagnostic.error?.code || diagnostic.code || diagnostic.error?.statusCode || diagnostic.statusCode)\n ? ` · código ${String(diagnostic.error?.code || diagnostic.code || diagnostic.error?.statusCode || diagnostic.statusCode)}`\n : \"\"}\n </Text>\n <Text color=\"red.700\">{diagnosticMessage(diagnostic)}</Text>\n </Box>\n ))}\n </Stack>\n </Box>\n ) : null}\n\n {[\n [\"Itens processados\", execution.items, execution.itemCount, execution.itemsLimited],\n [\"Chamadas sanitizadas\", execution.requests, execution.requestCount, execution.requestsLimited],\n [\"Metadados\", execution.metadata, undefined, false],\n ].map(([label, value, count, limited]) => value ? (\n <details key={String(label)}>\n <summary style={{ cursor: \"pointer\", fontWeight: 600 }}>\n {String(label)}{typeof count === \"number\" ? ` (${count})` : \"\"}{limited ? \" · visualização limitada\" : \"\"}\n </summary>\n <Box\n as=\"pre\"\n mt={2}\n p={3}\n borderRadius=\"md\"\n bg=\"gray.50\"\n overflowX=\"auto\"\n whiteSpace=\"pre-wrap\"\n fontSize=\"xs\"\n >\n {JSON.stringify(value, null, 2)}\n </Box>\n </details>\n ) : null)}\n </Stack>\n ) : null}\n </Box>\n );\n }) : <Text color=\"gray.400\">Nenhuma execução Omie registrada.</Text>}\n </Stack>\n </Stack>\n );\n}\n\nconst TABS: Array<{ id: OmieTab; label: string }> = [\n { id: \"configuration\", label: \"Configurações\" },\n { id: \"synchronization\", label: \"Sincronização\" },\n { id: \"webhooks\", label: \"Webhooks/Gatilhos\" },\n { id: \"history\", label: \"Histórico\" },\n];\n\nexport function CoreOmieIntegration() {\n const [tab, setTab] = useState<OmieTab>(\"configuration\");\n\n return (\n <Stack gap={5}>\n <Box>\n <Heading size=\"lg\">Integração Omie</Heading>\n <Text color=\"gray.500\">\n Configure credenciais, sincronizações, webhooks, gatilhos e diagnósticos da instância Omie.\n </Text>\n </Box>\n\n <Flex gap={2} wrap=\"wrap\" borderBottomWidth=\"1px\" pb={2}>\n {TABS.map((item) => (\n <Button\n key={item.id}\n size=\"sm\"\n variant={tab === item.id ? \"solid\" : \"ghost\"}\n onClick={() => setTab(item.id)}\n >\n {item.label}\n </Button>\n ))}\n </Flex>\n\n {tab === \"configuration\" ? <OmieConfigurationTab /> : null}\n {tab === \"synchronization\" ? <OmieSynchronizationTab /> : null}\n {tab === \"webhooks\" ? <OmieWebhooksTab /> : null}\n {tab === \"history\" ? <OmieHistoryTab /> : null}\n </Stack>\n );\n}\n","import type { CentralUiManifest, ManifestRuntime } from \"./manifest\";\nimport type { OonAppKind, OonCoreFrontConfig } from \"./types\";\nimport { manifestToConfig } from \"./manifest\";\nimport { start } from \"./start\";\nimport { createIntegrationModule } from \"./modules/integrations\";\n\nexport interface CentralAppManifest {\n $schema?: string;\n schemaVersion: 1;\n id: string;\n name: string;\n slug: string;\n appKind: OonAppKind;\n modules: Record<string, boolean>;\n capabilities: string[];\n compatibility: {\n core: {\n minVersion: string;\n maxVersionExclusive?: string;\n };\n };\n activation?: {\n enabled?: boolean;\n configurationVersion?: number;\n fields?: unknown[];\n };\n}\n\nexport type CentralUiOnlyManifest = Omit<CentralUiManifest, \"name\" | \"slug\" | \"appKind\" | \"auth\"> &\n Partial<Pick<CentralUiManifest, \"name\" | \"slug\" | \"appKind\" | \"auth\">>;\n\nexport interface CentralManifestBundle {\n app: CentralAppManifest;\n ui: CentralUiOnlyManifest;\n}\n\nexport function startCentralFromManifest(\n manifest: CentralManifestBundle,\n runtime: ManifestRuntime,\n): OonCoreFrontConfig {\n const legacyCompatibleUi: CentralUiManifest = {\n ...manifest.ui,\n name: manifest.app.name,\n slug: manifest.app.slug,\n appKind: manifest.app.appKind,\n };\n const config = manifestToConfig(legacyCompatibleUi, runtime);\n if (manifest.app.modules.integrations) {\n config.modules = [...(config.modules ?? []), createIntegrationModule()];\n }\n config.app = {\n ...config.app,\n id: manifest.app.id,\n name: manifest.app.name,\n title: manifest.app.name,\n kind: manifest.app.appKind,\n };\n const app = config.app as OonCoreFrontConfig[\"app\"] & {\n schemaVersion: number;\n modules: Record<string, boolean>;\n capabilities: string[];\n compatibility: CentralAppManifest[\"compatibility\"];\n };\n app.schemaVersion = manifest.app.schemaVersion;\n app.modules = manifest.app.modules;\n app.capabilities = manifest.app.capabilities;\n app.compatibility = manifest.app.compatibility;\n start(config);\n return config;\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 { 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","normalized","value","normalized","useEffect","useState","Box","Text","value","value","jsx","jsx","jsxs","useState","useEffect","Box","Text","useMemo","createContext","useCallback","useContext","useEffect","useState","createContext","useContext","useEffect","useState","jsx","jsx","createContext","value","useState","useCallback","useEffect","useContext","createContext","useCallback","useContext","useMemo","useState","jsx","normalized","value","jsx","useMemo","useState","Box","Heading","Stack","Text","useMutation","useQueryClient","value","value","useState","Box","Button","Flex","Input","Text","useQuery","Button","Flex","Text","jsx","jsxs","Box","Heading","Text","jsx","jsxs","jsx","jsxs","value","normalized","useState","useQuery","Box","Flex","Input","Text","Button","useEffect","useMemo","useState","Box","Button","Flex","Heading","Input","NativeSelect","Stack","Text","value","normalized","useEffect","useMemo","useState","Box","Button","Flex","Input","Spinner","Text","useQuery","jsx","jsxs","SearchIcon","ChevronIcon","value","useMemo","useState","useEffect","useQuery","start","Box","Button","Text","Flex","Input","Spinner","Box","Text","value","unique","jsx","jsxs","Box","Text","value","normalized","jsx","jsxs","normalize","value","Text","useState","useMemo","useEffect","Box","NativeSelect","Input","Flex","Heading","Button","Stack","useEffect","useMemo","useRef","useState","Box","Button","Flex","Heading","IconButton","Text","useQuery","useQueryClient","useEffect","useMemo","useState","Box","Button","Flex","Input","NativeSelect","SimpleGrid","Stack","Text","Textarea","SimpleGrid","Box","Text","Badge","useQuery","meta","Fragment","jsx","jsxs","value","format","useQuery","SimpleGrid","Box","Text","Badge","useMemo","useState","Badge","Box","Button","Flex","Table","Text","useQuery","useQueryClient","useState","Box","Button","Text","value","createContext","useContext","jsx","jsx","jsxs","Box","Text","unwrap","value","normalized","useState","Button","jsx","jsxs","EditIcon","TrashIcon","useQueryClient","useQuery","useMemo","useState","Text","Box","Flex","Button","Table","value","Badge","jsx","jsxs","toValue","value","initialFieldValue","initialReactiveValues","isMultiline","resolveReference","Text","ErrorText","Box","NativeSelect","Textarea","Input","SimpleGrid","useMemo","useState","useEffect","Stack","Flex","Button","jsx","jsxs","useQueryClient","useState","useRef","useQuery","useEffect","useMemo","Flex","Box","Text","Heading","IconButton","Button","jsx","jsxs","useQueryClient","useState","useMutation","Stack","Box","Text","Heading","jsx","useEffect","useRef","useState","Badge","Box","Button","Flex","Heading","Input","NativeSelect","Stack","Text","useMutation","useQuery","useQueryClient","value","jsx","jsxs","mergeFormFields","value","normalized","Box","NativeSelect","Input","useQueryClient","useState","useRef","useQuery","useEffect","useMutation","Flex","Stack","Text","Heading","Button","Badge","Box","Heading","SimpleGrid","Stack","Text","useQuery","jsx","jsxs","value","format","useQuery","Stack","Box","Text","Heading","SimpleGrid","useMemo","useState","Box","Button","Flex","Heading","Input","Text","VStack","useMutation","useQuery","useQueryClient","Fragment","jsx","jsx","jsxs","value","useQueryClient","useState","useQuery","useMemo","useMutation","Box","Heading","Text","Flex","Input","Button","VStack","Box","Button","Flex","Heading","Stack","Text","Box","Text","Fragment","jsx","jsxs","normalized","Box","Button","Flex","Heading","Spinner","Text","jsx","jsxs","Box","Flex","Heading","Text","Button","Spinner","jsx","jsxs","Text","Flex","Box","Stack","Heading","Button","CorePage","jsx","slug","value","CorePage","Navigate","Box","Button","Flex","Spacer","Text","useNavigate","Box","Flex","Stack","Text","jsx","jsxs","Box","Flex","Text","Stack","jsx","jsxs","useNavigate","Flex","Box","Text","Spacer","Button","jsx","Box","Button","Flex","Heading","Text","VStack","useNavigate","jsx","jsxs","useNavigate","Flex","Box","VStack","Text","Heading","Button","useLocation","Fragment","jsx","useLocation","useState","Box","Button","Flex","Heading","Input","Text","VStack","Navigate","useLocation","jsx","jsxs","value","useLocation","useState","Navigate","Flex","Box","VStack","Text","Heading","Input","Button","useState","Box","Button","Flex","Heading","Input","Text","VStack","Navigate","jsx","jsxs","useState","Navigate","Flex","Box","VStack","Text","Heading","Input","Button","useEffect","useState","Box","Button","Heading","Input","Text","VStack","Fragment","jsx","jsxs","encodeBasicCredentials","useState","useEffect","Box","Text","Input","Button","VStack","Heading","Fragment","jsx","Navigate","jsx","Navigate","jsx","Navigate","jsx","useMemo","storage","tenantStorage","http","router","jsx","Stack","useEffect","useState","Badge","Box","Button","Flex","Heading","Input","Stack","Text","useMutation","useQuery","jsx","jsxs","value","normalized","primitiveText","Box","Stack","Text","Flex","Badge","useState","useQuery","useEffect","useMutation","Input","Button","Heading","Badge","Box","Flex","Heading","Stack","Text","useQuery","jsx","jsxs","dateTime","value","useQuery","Text","Box","Heading","Stack","Flex","Badge","useEffect","useMemo","useState","Badge","Box","Button","Flex","Heading","Input","Stack","Text","useMutation","useQuery","jsx","jsxs","dateTime","value","statusPalette","normalized","integrationErrorMessage","diagnosticMessage","NativeSelect","Box","Stack","Text","Flex","Button","Badge","useState","useEffect","useQuery","useMutation","totalPages","useMemo","Heading","Input","useState","Button","Flex","Stack","useEffect","useState","Badge","Box","Button","Flex","Heading","Input","Stack","Text","useMutation","useQuery","jsx","jsxs","dateTime","value","statusPalette","normalized","integrationErrorMessage","countActive","NativeSelect","useQuery","useState","useEffect","useMutation","Stack","Box","Heading","Text","Flex","Input","Badge","Button","provider","diagnosticMessage","jsx","jsxs","useState","Stack","Flex","Button","jsx","jsxs","Stack","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"]}