@oondemand/oon-core-front 0.7.34 → 0.7.36

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/domain/domainExpressions.ts","../src/components/CoreCollection.tsx","../src/components/internal/referenceUtils.ts","../src/components/internal/fieldUtils.ts","../src/components/internal/DataGrid.tsx","../src/shell/ErrorState.tsx","../src/components/internal/DynamicForm.tsx","../src/components/internal/ReferenceSelect.tsx","../src/components/internal/RemoteOptionsSelect.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/CoreDocumentLibrary.tsx","../src/components/CoreDocument.tsx","../src/components/CorePipeline.tsx","../src/pipelineTicket.ts","../src/components/internal/pipelineBoardScroll.ts","../src/components/CoreDashboard.tsx","../src/security/PermissionGate.tsx","../src/components/CoreUsersAccess.tsx","../src/components/ui-v2/CorePrimitives.tsx","../src/components/ui-v2/CorePage.tsx","../src/app/componentRegistry.tsx","../src/components/CoreTransactionalEmail.tsx","../src/components/ui-v2/CoreKit.tsx"],"sourcesContent":["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 { 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 registry?: OonComponentRegistry;\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, registry }: 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 registry={registry}\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, OonValueFormat } 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, format?: OonValueFormat): 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 const date = new Date(value as string);\n return format === \"datetime\"\n ? date.toLocaleString(\"pt-BR\", { dateStyle: \"short\", timeStyle: \"short\" })\n : date.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, OonValueFormat } 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, format?: OonValueFormat) {\n const formatted = formatCell(value, kind, format);\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, column.format);\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 { 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 { useCallback, 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 { RemoteOptionsSelect } from \"./RemoteOptionsSelect\";\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 /** Registro pai disponível para endpoints dependentes em grids relacionados. */\n contextValues?: Record<string, unknown>;\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\nexport function remoteOptionValues(\n values: Record<string, string>,\n initialValues?: Record<string, unknown>,\n): Record<string, string> {\n const inherited = Object.fromEntries(\n Object.entries(initialValues ?? {}).map(([field, value]) => [field, toValue(value)]),\n );\n return { ...inherited, ...values };\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, contextValues }: 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 remoteFieldKey = fields.filter((field) => field.optionsEndpoint).map((field) => field.field).join(\"|\");\n const [pendingRemoteFields, setPendingRemoteFields] = useState<Set<string>>(\n () => new Set(remoteFieldKey ? remoteFieldKey.split(\"|\") : []),\n );\n const items = useMemo(() => buildItems(fields), [rawFields]);\n const optionValues = useMemo(\n () => remoteOptionValues(values, initialValues),\n [values, initialValues],\n );\n\n useEffect(() => {\n setPendingRemoteFields(new Set(remoteFieldKey ? remoteFieldKey.split(\"|\") : []));\n }, [remoteFieldKey]);\n\n const setRemoteFieldPending = useCallback((field: string, pending: boolean) => {\n setPendingRemoteFields((current) => {\n const next = new Set(current);\n if (pending) next.add(field);\n else next.delete(field);\n return next;\n });\n }, []);\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 || candidate.optionsDependsOn?.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 if (pendingRemoteFields.size) return;\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.optionsEndpoint) {\n return wrap(\n <RemoteOptionsSelect\n field={field}\n inputId={id}\n errorId={errorId}\n value={values[field.field] ?? \"\"}\n values={optionValues}\n parent={contextValues}\n invalid={!!message}\n readonly={readonly}\n onChange={(value) => change(field.field, value)}\n onPendingChange={setRemoteFieldPending}\n />,\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) => { const normalized = typeof option === \"string\" ? { value: option, label: option } : option; return <option key={normalized.value} value={normalized.value}>{normalized.label}</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} disabled={submitting || pendingRemoteFields.size > 0}><CheckIcon /> Salvar</Button></Flex>\n </form>\n </Box>\n </Flex>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Box, Button, Flex, Input, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useModelSchema, useOonResource } from \"../../api/ApiProvider\";\nimport { initialReferenceLabel, referenceId, referenceOptionLabel } from \"./referenceUtils\";\n\nexport interface ReferenceSelectProps {\n field: string;\n inputId?: string;\n errorId?: string;\n label: string;\n refModel: string;\n value: string;\n initialValue?: unknown;\n required?: boolean;\n invalid?: boolean;\n error?: string;\n filters?: Record<string, unknown>;\n /** Mantém somente registros em que todos estes campos estejam vazios/nulos. */\n emptyFields?: string[];\n disabled?: boolean;\n disabledMessage?: string;\n onChange: (value: string) => void;\n}\n\nfunction SearchIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" width=\"15\" height=\"15\" aria-hidden=\"true\">\n <circle cx=\"8.5\" cy=\"8.5\" r=\"5.25\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"m12.4 12.4 4 4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction ChevronIcon({ open }: { open: boolean }) {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n width=\"16\"\n height=\"16\"\n aria-hidden=\"true\"\n style={{ display: \"block\", transition: \"transform .15s ease\", transform: open ? \"rotate(180deg)\" : \"rotate(0deg)\" }}\n >\n <path d=\"M5.5 7.5 10 12l4.5-4.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nfunction ClearIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path d=\"m6 6 8 8M14 6l-8 8\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction cleanFilters(filters?: Record<string, unknown>) {\n return Object.fromEntries(\n Object.entries(filters ?? {}).filter(([, value]) => value !== undefined && value !== null && value !== \"\"),\n );\n}\n\n/** Dropdown pesquisável para campos relacionados, com filtros estáticos ou dependentes do formulário. */\nexport function ReferenceSelect({\n field,\n inputId,\n errorId,\n label,\n refModel,\n value,\n initialValue,\n required,\n invalid,\n error,\n filters,\n emptyFields = [],\n disabled = false,\n disabledMessage,\n onChange,\n}: ReferenceSelectProps) {\n const initialLabel = useMemo(() => initialReferenceLabel(initialValue), [initialValue]);\n const 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 { useEffect, useMemo } from \"react\";\nimport { NativeSelect, Spinner, Text } from \"@chakra-ui/react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useOonApi } from \"../../api/ApiProvider\";\nimport type { OonFormFieldDef, OonSelectOption } from \"../../types\";\n\nfunction valueAt(source: unknown, path: string): unknown {\n return path.split(\".\").reduce<unknown>((current, part) => {\n if (current && typeof current === \"object\") {\n return (current as Record<string, unknown>)[part];\n }\n return undefined;\n }, source);\n}\n\nfunction tokenValue(\n token: string,\n values: Record<string, string>,\n parent?: Record<string, unknown>,\n): unknown {\n if (token === \"parentId\") return parent?._id ?? parent?.id;\n if (token.startsWith(\"parent.\")) return valueAt(parent, token.slice(7));\n return valueAt(values, token);\n}\n\nexport function resolveRemoteOptionsEndpoint(\n endpoint: string,\n values: Record<string, string>,\n parent?: Record<string, unknown>,\n) {\n const tokens = [...endpoint.matchAll(/:([A-Za-z0-9_.]+)/g)].map((match) => match[1]);\n const ready = tokens.every((token) => {\n const value = tokenValue(token, values, parent);\n return value !== undefined && value !== null && value !== \"\";\n });\n return {\n ready,\n endpoint: endpoint.replace(/:([A-Za-z0-9_.]+)/g, (_, token: string) =>\n encodeURIComponent(String(tokenValue(token, values, parent) ?? \"\"))),\n };\n}\n\nfunction normalizeOption(\n raw: unknown,\n field: OonFormFieldDef,\n): OonSelectOption | null {\n if (typeof raw === \"string\") return { value: raw, label: raw };\n if (!raw || typeof raw !== \"object\") return null;\n const record = raw as Record<string, unknown>;\n const value = String(valueAt(record, field.optionsValueField ?? \"value\") ?? \"\");\n const label = String(valueAt(record, field.optionsLabelField ?? \"label\") ?? value);\n if (!value || !label) return null;\n const description = String(\n valueAt(record, field.optionsDescriptionField ?? \"description\") ?? \"\",\n );\n return { value, label, ...(description ? { description } : {}) };\n}\n\nexport function normalizeRemoteOptions(\n raw: unknown,\n field: OonFormFieldDef,\n): OonSelectOption[] {\n if (!Array.isArray(raw)) return [];\n return raw\n .map((option) => normalizeOption(option, field))\n .filter((option): option is OonSelectOption => Boolean(option));\n}\n\nexport function normalizeFallbackOptions(\n raw: unknown,\n field: OonFormFieldDef,\n): OonSelectOption[] {\n return normalizeRemoteOptions(raw, {\n ...field,\n optionsValueField: \"value\",\n optionsLabelField: \"label\",\n optionsDescriptionField: \"description\",\n });\n}\n\nexport function RemoteOptionsSelect({\n field,\n inputId,\n errorId,\n value,\n values,\n parent,\n invalid,\n readonly,\n onChange,\n onPendingChange,\n}: {\n field: OonFormFieldDef;\n inputId: string;\n errorId?: string;\n value: string;\n values: Record<string, string>;\n parent?: Record<string, unknown>;\n invalid?: boolean;\n readonly?: boolean;\n onChange: (value: string) => void;\n onPendingChange?: (field: string, pending: boolean) => void;\n}) {\n const { http } = useOonApi();\n const resolved = useMemo(\n () => resolveRemoteOptionsEndpoint(field.optionsEndpoint!, values, parent),\n [field.optionsEndpoint, JSON.stringify(values), JSON.stringify(parent)],\n );\n const query = useQuery({\n queryKey: [\"oon\", \"remote-form-options\", resolved.endpoint],\n queryFn: async () => (await http.get(resolved.endpoint)).data,\n enabled: resolved.ready,\n staleTime: 60_000,\n retry: false,\n });\n const remoteOptions = normalizeRemoteOptions(\n valueAt(query.data, field.optionsResponsePath ?? \"options\"),\n field,\n );\n const fallbackOptions = normalizeFallbackOptions(field.fallbackOptions ?? [], field);\n const fallback = resolved.ready && (query.isError || (query.isSuccess && remoteOptions.length === 0));\n const options = fallback ? fallbackOptions : remoteOptions;\n const remotelyEditable = field.optionsEditablePath\n ? valueAt(query.data, field.optionsEditablePath) !== false\n : true;\n const locked = Boolean(\n readonly\n || (query.isSuccess && !remotelyEditable)\n || (fallback && field.readonlyOnFallback !== false),\n );\n\n useEffect(() => {\n if (!resolved.ready || !options.length) return;\n if (options.some((option) => option.value === value)) return;\n if (locked || options.length === 1) onChange(options[0].value);\n }, [locked, onChange, options, resolved.ready, value]);\n\n const loading = resolved.ready && query.isLoading;\n const pending = !resolved.ready || loading;\n\n useEffect(() => {\n onPendingChange?.(field.field, pending);\n return () => onPendingChange?.(field.field, false);\n }, [field.field, onPendingChange, pending]);\n\n const placeholder = !resolved.ready\n ? \"Selecione primeiro os campos relacionados.\"\n : loading\n ? \"Carregando opções...\"\n : \"— Selecione —\";\n\n return (\n <>\n <NativeSelect.Root size=\"sm\" disabled={!resolved.ready || loading || locked}>\n <NativeSelect.Field\n id={inputId}\n aria-invalid={invalid || undefined}\n aria-describedby={errorId}\n value={value}\n minH=\"37px\"\n px=\"10px\"\n py=\"8px\"\n color=\"#475467\"\n bg={locked ? \"#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 onChange={(event) => onChange(event.currentTarget.value)}\n >\n <option value=\"\">{placeholder}</option>\n {options.map((option) => (\n <option key={option.value} value={option.value} title={option.description}>\n {option.label}\n </option>\n ))}\n </NativeSelect.Field>\n <NativeSelect.Indicator />\n </NativeSelect.Root>\n {loading ? <Text mt=\"5px\" color=\"#667085\" fontSize=\"10px\"><Spinner size=\"xs\" mr=\"5px\" />Consultando opções...</Text> : null}\n {fallback ? <Text mt=\"5px\" color=\"#B54708\" fontSize=\"10px\">{field.optionsUnavailableMessage ?? \"As opções estão indisponíveis; foi aplicado o valor seguro padrão.\"}</Text> : null}\n </>\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 { OonComponentRegistry, 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, registry, 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 registry?: OonComponentRegistry;\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 registry={registry}\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 { useCallback, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { Box, Button, Flex, Input, NativeSelect, SimpleGrid, Stack, Text, Textarea } from \"@chakra-ui/react\";\nimport type { OonComponentRegistry, 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 { RemoteOptionsSelect } from \"./RemoteOptionsSelect\";\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>;\n\nexport function resolveCustomDetailComponent(tab: OonDetailTabDef | undefined, registry?: OonComponentRegistry) {\n if (tab?.type !== \"customComponent\") return undefined;\n const componentKey = tab.component.startsWith(\"custom:\") ? tab.component.slice(\"custom:\".length) : tab.component;\n return registry?.pageComponents?.[componentKey];\n}\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 parent,\n onChange,\n onRemotePendingChange,\n}: {\n field: ExtendedFormField;\n value: string;\n values: Record<string, string>;\n initialValue?: unknown;\n error?: string;\n parent?: Record<string, unknown>;\n onChange: (value: string) => void;\n onRemotePendingChange?: (field: string, pending: boolean) => 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.optionsEndpoint) {\n return (\n <Box>\n <FieldLabel field={field} htmlFor={inputId} />\n <RemoteOptionsSelect\n field={field}\n inputId={inputId}\n errorId={errorId}\n value={value}\n values={values}\n parent={parent}\n invalid={!!error}\n readonly={readonly}\n onChange={onChange}\n onPendingChange={onRemotePendingChange}\n />\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) => {\n const normalized = typeof option === \"string\"\n ? { value: option, label: option }\n : option;\n return <option key={normalized.value} value={normalized.value}>{normalized.label}</option>;\n })}\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 onRemotePendingChange,\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 onRemotePendingChange?: (field: string, pending: boolean) => 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 parent={initialValues}\n onChange={(value) => onChange(field.field, value)}\n onRemotePendingChange={onRemotePendingChange}\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 const remoteFieldKey = fields.filter((field) => field.optionsEndpoint).map((field) => field.field).join(\"|\");\n const [pendingRemoteFields, setPendingRemoteFields] = useState<Set<string>>(\n () => new Set(remoteFieldKey ? remoteFieldKey.split(\"|\") : []),\n );\n\n useEffect(() => {\n setPendingRemoteFields(new Set(remoteFieldKey ? remoteFieldKey.split(\"|\") : []));\n }, [remoteFieldKey]);\n\n const setRemoteFieldPending = useCallback((field: string, pending: boolean) => {\n setPendingRemoteFields((current) => {\n const next = new Set(current);\n if (pending) next.add(field);\n else next.delete(field);\n return next;\n });\n }, []);\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 || candidate.optionsDependsOn?.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 onRemotePendingChange={setRemoteFieldPending}\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 parent={parent}\n onChange={(value) => change(field.field, value)}\n onRemotePendingChange={setRemoteFieldPending}\n />\n ))}\n </SimpleGrid>\n );\n };\n\n return (\n <form\n id={formId}\n noValidate\n onSubmit={async (event) => {\n event.preventDefault();\n if (pendingRemoteFields.size) return;\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} disabled={saving || pendingRemoteFields.size > 0}>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 registry,\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 registry?: OonComponentRegistry;\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 CustomComponent = resolveCustomDetailComponent(active, registry);\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\" && CustomComponent ? (\n <CustomComponent\n {...(active.props ?? {})}\n parent={parent}\n record={parent}\n recordId={parent?._id ?? parent?.id}\n refreshToken={refreshTokens[active.id]}\n onRefresh={onRefresh}\n />\n ) : active.type === \"customComponent\" ? (\n <Text color=\"#C92A2A\">Componente customizado não registrado: {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\" || format === \"datetime\") return formatCell(value, \"date\", format);\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, useOonApi, 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\";\nimport { interpolateEndpoint } from \"./conditions\";\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 /** Comando de negócio opcional; sem endpoint, usa o CRUD da relação. */\n endpoint?: string;\n method?: \"POST\" | \"PUT\" | \"PATCH\";\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 ...column,\n field: column.field,\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 { http } = useOonApi();\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>) => {\n const payload = {\n ...createInitialValues,\n ...values,\n ...(relation && parentValue != null ? { [relation.foreignKey]: parentValue } : {}),\n };\n if (tab.create?.endpoint) {\n return http.request<Record<string, unknown>>({\n url: interpolateEndpoint(tab.create.endpoint, payload, parent),\n method: tab.create.method ?? \"POST\",\n data: payload,\n }).then((response) => response.data);\n }\n return resource.create(payload);\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 contextValues={parent}\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 contextValues={parent}\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 { useMemo, useState, type ReactNode } from \"react\";\nimport { Box, Button, Flex, Heading, Input, SimpleGrid, Stack, Text } from \"@chakra-ui/react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useModelSchema, useOonResource } from \"../api/ApiProvider\";\nimport { LoadingScreen } from \"../shell/LoadingScreen\";\nimport { ErrorState } from \"../shell/ErrorState\";\n\ntype DocumentRecord = Record<string, unknown>;\n\nexport interface CoreDocumentLibraryProps {\n model: string;\n label?: string;\n endpoint?: string;\n categoryField?: string;\n titleField?: string;\n descriptionField?: string;\n contentField?: string;\n statusField?: string;\n updatedAtField?: string;\n}\n\nfunction value(record: DocumentRecord, field: string): string {\n const raw = record[field];\n return raw == null ? \"\" : String(raw);\n}\n\nexport function documentExcerpt(content: string, limit = 180): string {\n const plain = content\n .replace(/^\\s*#{1,6}\\s+/gm, \"\")\n .replace(/[-*_`>|]/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n return plain.length <= limit ? plain : `${plain.slice(0, limit).trimEnd()}…`;\n}\n\nexport function groupDocumentRecords(records: DocumentRecord[], categoryField = \"section\") {\n const groups = new Map<string, DocumentRecord[]>();\n for (const record of records) {\n const category = value(record, categoryField).trim() || \"Geral\";\n const items = groups.get(category) ?? [];\n items.push(record);\n groups.set(category, items);\n }\n return [...groups.entries()].sort(([left], [right]) => left.localeCompare(right, \"pt-BR\"));\n}\n\nconst ALL_CATEGORIES = \"__all__\";\n\nfunction normalized(valueToNormalize: string): string {\n return valueToNormalize\n .normalize(\"NFD\")\n .replace(/\\p{Diacritic}/gu, \"\")\n .trim()\n .toLocaleLowerCase(\"pt-BR\");\n}\n\nexport function filterDocumentRecords(\n records: DocumentRecord[],\n search: string,\n selectedCategory: string,\n searchableFields: string[],\n categoryField = \"section\",\n): DocumentRecord[] {\n const normalizedSearch = normalized(search);\n return records.filter((record) => {\n const category = value(record, categoryField).trim() || \"Geral\";\n if (selectedCategory !== ALL_CATEGORIES && category !== selectedCategory) return false;\n if (!normalizedSearch) return true;\n return searchableFields.some((field) => normalized(value(record, field)).includes(normalizedSearch));\n });\n}\n\nfunction markdown(content: string): ReactNode[] {\n const lines = content.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n const nodes: ReactNode[] = [];\n let index = 0;\n while (index < lines.length) {\n const line = lines[index];\n if (!line.trim()) { index += 1; continue; }\n if (line.startsWith(\"```\")) {\n const code: string[] = [];\n index += 1;\n while (index < lines.length && !lines[index].startsWith(\"```\")) code.push(lines[index++]);\n index += 1;\n nodes.push(<Box as=\"pre\" key={`code-${index}`} overflowX=\"auto\" p={4} borderRadius=\"md\" bg=\"#102A3A\" color=\"white\" whiteSpace=\"pre-wrap\">{code.join(\"\\n\")}</Box>);\n continue;\n }\n const heading = line.match(/^(#{1,4})\\s+(.+)$/);\n if (heading) {\n const size = heading[1].length === 1 ? \"xl\" : heading[1].length === 2 ? \"lg\" : \"md\";\n nodes.push(<Heading key={`heading-${index}`} size={size} mt={heading[1].length === 1 ? 0 : 5}>{heading[2]}</Heading>);\n index += 1;\n continue;\n }\n if (/^[-*]\\s+/.test(line)) {\n const items: string[] = [];\n while (index < lines.length && /^[-*]\\s+/.test(lines[index])) items.push(lines[index++].replace(/^[-*]\\s+/, \"\"));\n nodes.push(<Box as=\"ul\" key={`list-${index}`} pl={6}>{items.map((item, itemIndex) => <Box as=\"li\" key={itemIndex} mb={1}>{item}</Box>)}</Box>);\n continue;\n }\n const paragraph: string[] = [line];\n index += 1;\n while (index < lines.length && lines[index].trim() && !/^(#{1,4})\\s+|^[-*]\\s+|^```/.test(lines[index])) paragraph.push(lines[index++]);\n nodes.push(<Text key={`paragraph-${index}`} lineHeight=\"1.75\" whiteSpace=\"pre-wrap\">{paragraph.join(\"\\n\")}</Text>);\n }\n return nodes;\n}\n\nexport function CoreDocumentLibrary({\n model,\n label = \"Documentação\",\n endpoint,\n categoryField = \"section\",\n titleField = \"title\",\n descriptionField = \"description\",\n contentField = \"content\",\n statusField = \"status\",\n updatedAtField = \"lastReviewed\",\n}: CoreDocumentLibraryProps) {\n const schemaQuery = useModelSchema(model, !endpoint);\n const basePath = endpoint ?? schemaQuery.data?.basePath ?? `/${model.toLowerCase()}s`;\n const resource = useOonResource<DocumentRecord>(basePath);\n const documentsQuery = useQuery({\n queryKey: [\"oon\", \"document-library\", basePath, categoryField],\n queryFn: async () => {\n const pageSize = 200;\n const first = await resource.list({ pageIndex: 0, pageSize, sort: `${categoryField}.asc` });\n const records = [...first.results];\n for (let pageIndex = 1; pageIndex < first.pagination.totalPages; pageIndex += 1) {\n const page = await resource.list({ pageIndex, pageSize, sort: `${categoryField}.asc` });\n records.push(...page.results);\n }\n return records;\n },\n enabled: Boolean(endpoint) || (!schemaQuery.isLoading && !schemaQuery.isError),\n });\n const [search, setSearch] = useState(\"\");\n const [selectedCategory, setSelectedCategory] = useState(ALL_CATEGORIES);\n const [selected, setSelected] = useState<DocumentRecord | null>(null);\n\n const records = documentsQuery.data ?? [];\n const categories = useMemo(() => groupDocumentRecords(records, categoryField), [records, categoryField]);\n const filtered = useMemo(\n () => filterDocumentRecords(\n records,\n search,\n selectedCategory,\n [titleField, descriptionField, contentField, categoryField],\n categoryField,\n ),\n [records, search, selectedCategory, titleField, descriptionField, contentField, categoryField],\n );\n const groups = useMemo(() => groupDocumentRecords(filtered, categoryField), [filtered, categoryField]);\n\n if ((!endpoint && schemaQuery.isLoading) || documentsQuery.isLoading) return <LoadingScreen />;\n if (!endpoint && schemaQuery.isError) return <ErrorState error={schemaQuery.error} />;\n if (documentsQuery.isError) return <ErrorState error={documentsQuery.error} />;\n\n return (\n <Stack gap={7}>\n <Box>\n <Text fontSize=\"11px\" fontWeight=\"700\" color=\"brand.500\" textTransform=\"uppercase\" letterSpacing=\"0.08em\">Biblioteca</Text>\n <Heading size=\"lg\" color=\"#24323A\">{label}</Heading>\n <Text mt={1} color=\"gray.500\">Encontre os documentos por categoria e abra para leitura.</Text>\n <Input mt={5} maxW=\"520px\" value={search} onChange={(event) => setSearch(event.target.value)} placeholder=\"Buscar por título, categoria ou conteúdo…\" aria-label=\"Buscar documentos\" />\n <Flex mt={4} gap={2} wrap=\"wrap\" aria-label=\"Filtrar documentos por categoria\">\n <Button\n size=\"sm\"\n variant={selectedCategory === ALL_CATEGORIES ? \"solid\" : \"outline\"}\n onClick={() => setSelectedCategory(ALL_CATEGORIES)}\n >\n Todas ({records.length})\n </Button>\n {categories.map(([category, items]) => (\n <Button\n key={category}\n size=\"sm\"\n variant={selectedCategory === category ? \"solid\" : \"outline\"}\n onClick={() => setSelectedCategory(category)}\n >\n {category} ({items.length})\n </Button>\n ))}\n </Flex>\n </Box>\n\n {groups.length ? groups.map(([category, items]) => (\n <Box key={category}>\n <Flex align=\"center\" gap={3} mb={3}>\n <Heading size=\"md\" textTransform=\"capitalize\">{category}</Heading>\n <Text fontSize=\"sm\" color=\"gray.500\">{items.length} {items.length === 1 ? \"documento\" : \"documentos\"}</Text>\n </Flex>\n <SimpleGrid columns={{ base: 1, md: 2, xl: 3 }} gap={4}>\n {items.map((record) => {\n const title = value(record, titleField) || \"Documento\";\n const description = value(record, descriptionField) || documentExcerpt(value(record, contentField));\n const status = value(record, statusField);\n return (\n <Box key={String(record._id ?? title)} borderWidth=\"1px\" borderColor=\"#DCE5ED\" borderRadius=\"lg\" bg=\"white\" p={5} boxShadow=\"0 6px 20px rgba(28,54,78,.06)\">\n <Stack height=\"100%\" gap={3}>\n <Box flex=\"1\">\n {status ? <Text fontSize=\"10px\" fontWeight=\"700\" color=\"brand.600\" textTransform=\"uppercase\">{status}</Text> : null}\n <Heading size=\"md\" mt={1}>{title}</Heading>\n <Text mt={2} color=\"gray.600\" fontSize=\"sm\" lineHeight=\"1.55\">{description}</Text>\n </Box>\n <Button alignSelf=\"flex-start\" variant=\"outline\" onClick={() => setSelected(record)}>Ler documento</Button>\n </Stack>\n </Box>\n );\n })}\n </SimpleGrid>\n </Box>\n )) : <Box py={12} textAlign=\"center\"><Heading size=\"sm\">Nenhum documento encontrado</Heading><Text mt={2} color=\"gray.500\">Tente buscar por outro termo.</Text></Box>}\n\n {selected ? (\n <Flex position=\"fixed\" inset={0} zIndex={1000} align=\"center\" justify=\"center\" p={{ base: 2, md: 4 }} bg=\"rgba(15,23,42,.52)\">\n <Box role=\"dialog\" aria-modal=\"true\" w=\"min(1060px, 98vw)\" h=\"94vh\" display=\"flex\" flexDirection=\"column\" bg=\"white\" borderRadius=\"14px\" overflow=\"hidden\" boxShadow=\"0 24px 70px rgba(15,23,42,.28)\">\n <Flex px={{ base: 4, md: 6 }} py={4} align=\"center\" justify=\"space-between\" gap={4} borderBottomWidth=\"1px\">\n <Box>\n <Text fontSize=\"10px\" fontWeight=\"700\" color=\"brand.600\" textTransform=\"uppercase\">{value(selected, categoryField) || \"Documento\"}</Text>\n <Heading size=\"md\">{value(selected, titleField) || \"Documento\"}</Heading>\n {value(selected, updatedAtField) ? <Text fontSize=\"xs\" color=\"gray.500\">Revisado em {value(selected, updatedAtField)}</Text> : null}\n </Box>\n <Button variant=\"ghost\" onClick={() => setSelected(null)}>Fechar</Button>\n </Flex>\n <Stack flex=\"1\" overflowY=\"auto\" px={{ base: 5, md: 10 }} py={{ base: 6, md: 8 }} gap={4}>\n {markdown(value(selected, contentField))}\n </Stack>\n </Box>\n </Flex>\n ) : null}\n </Stack>\n );\n}\n","import type { OonColumnDef, OonFormFieldDef } from \"../types\";\nimport { useOonApi } from \"../api/ApiProvider\";\nimport { CoreCollection } from \"./CoreCollection\";\nimport { CoreDocumentLibrary } from \"./CoreDocumentLibrary\";\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 /** CRUD preserva o comportamento legado; library prioriza descoberta e leitura. */\n display?: \"crud\" | \"library\";\n categoryField?: string;\n titleField?: string;\n descriptionField?: string;\n contentField?: string;\n statusField?: string;\n updatedAtField?: string;\n}\n\nexport function CoreDocument({\n model,\n label,\n endpoint,\n columns,\n form,\n display = \"crud\",\n categoryField,\n titleField,\n descriptionField,\n contentField,\n statusField,\n updatedAtField,\n}: CoreDocumentProps) {\n if (display === \"library\") {\n return (\n <CoreDocumentLibrary\n model={model}\n label={label}\n endpoint={endpoint}\n categoryField={categoryField}\n titleField={titleField}\n descriptionField={descriptionField}\n contentField={contentField}\n statusField={statusField}\n updatedAtField={updatedAtField}\n />\n );\n }\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\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, OonComponentRegistry, 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 registry?: OonComponentRegistry;\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 registry,\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 registry={registry}\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 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 { useMemo, useState, useRef, 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\ntype InviteLinkResponse = { inviteUrl: string; delivery?: { status?: \"sent\" | \"failed\"; reasonCode?: string | null } };\n\ninterface Role {\n code: string;\n name: string;\n description?: string;\n admin?: boolean;\n permissions: string[];\n}\n\ninterface Invitation {\n version?: number;\n id: string;\n status: string;\n expiresAt: string;\n}\n\ninterface AccessUser {\n id: string;\n identityId?: string;\n origin?: 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 pendingKeys = useRef(new Map<string, string>());\n // Convites pela Central são enviados por e-mail; no fluxo local o link é manual.\n function deliveryMessage(data: InviteLinkResponse, issued: string) {\n if (data.delivery?.status === \"sent\") return `${issued} O convite foi enviado por e-mail; o link abaixo também pode ser copiado.`;\n if (data.delivery?.status === \"failed\") return `${issued} O e-mail não pôde ser enviado${data.delivery.reasonCode ? ` (${data.delivery.reasonCode})` : \"\"}. Copie o link e envie manualmente ao usuário.`;\n return `${issued} Copie o link e envie manualmente ao usuário.`;\n }\n function operationKey(action: string) {\n if (!pendingKeys.current.has(action)) pendingKeys.current.set(action, crypto.randomUUID());\n return pendingKeys.current.get(action)!;\n }\n const invite = useMutation({\n mutationFn: async () => (await http.post<InviteLinkResponse>(\"/core/users/invitations\", {\n email: email.trim(),\n name: name.trim() || undefined,\n roleCode: selectedRole,\n }, { headers: { \"idempotency-key\": operationKey(`create:${email.trim()}:${selectedRole}`) } })).data,\n onSuccess: async (data) => {\n pendingKeys.current.clear();\n setInviteUrl(data.inviteUrl);\n setMessage(deliveryMessage(data, \"Convite criado.\"));\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<InviteLinkResponse>(`/core/users/invitations/${id}/regenerate`, { version: users.data?.find(user => user.invitation?.id === id)?.invitation?.version }, { headers: { \"idempotency-key\": operationKey(`reissue:${id}:${users.data?.find(user => user.invitation?.id === id)?.invitation?.version}`) } })).data,\n onSuccess: async (data) => {\n setInviteUrl(data.inviteUrl);\n setMessage(deliveryMessage(data, \"Novo link gerado e o 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 disabled={user.origin === \"central\"} 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 disabled={user.origin === \"central\"} size=\"sm\" variant=\"outline\" onClick={() => updateUser.mutate({ id: user.id, payload: { status: \"disabled\" } })}>Desabilitar</Button>\n ) : user.status === \"disabled\" ? (\n <Button disabled={user.origin === \"central\"} 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 { Badge, Box, Button, Flex, Heading, SimpleGrid, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { useId, useRef, useState, type KeyboardEvent, type ReactNode } from \"react\";\nimport type { CollectionMode, OonColumnDef, OonFormFieldDef } from \"../../types\";\nimport { CoreCollection } from \"../CoreCollection\";\n\nexport function CorePage({ children }: { children: ReactNode }) { return <Box color=\"text.primary\">{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\" color=\"text.primary\">{title}</Heading> : null}{description ? <Text color=\"text.muted\" 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\" color=\"text.primary\">{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>; }\nexport function CoreErrorState({ title = \"Não foi possível carregar\", description, retryLabel = \"Tentar novamente\", onRetry }: { title?: string; description?: string; retryLabel?: string; onRetry?: () => void }) { return <Box borderWidth=\"1px\" borderColor=\"status.danger\" borderRadius=\"lg\" bg=\"surface.panel\" p={5}><Heading size=\"sm\" color=\"status.danger\">{title}</Heading>{description ? <Text color=\"text.muted\" mt={2}>{description}</Text> : null}{onRetry ? <Button mt={4} variant=\"outline\" onClick={onRetry}>{retryLabel}</Button> : null}</Box>; }\n\n/**\n * Abas simples para páginas próprias. Controlada (`value` + `onChange`) ou não\n * controlada (estado interno a partir da primeira aba). Usa somente tokens\n * semânticos, para acompanhar temas claros e escuros.\n */\nexport function CoreTabs({ items, value, onChange }: { items: Array<{ id: string; label: string; content: ReactNode }>; value?: string; onChange?: (id: string) => void }) {\n const baseId = useId();\n const tabRefs = useRef<Array<HTMLButtonElement | null>>([]);\n const [internal, setInternal] = useState<string | undefined>(items[0]?.id);\n const active = value ?? (items.some((item) => item.id === internal) ? internal : items[0]?.id);\n const selected = items.find((item) => item.id === active);\n const select = (id: string) => {\n if (value === undefined) setInternal(id);\n onChange?.(id);\n };\n const onKeyDown = (event: KeyboardEvent<HTMLButtonElement>, index: number) => {\n const last = items.length - 1;\n const target = event.key === \"ArrowRight\" ? (index === last ? 0 : index + 1)\n : event.key === \"ArrowLeft\" ? (index === 0 ? last : index - 1)\n : event.key === \"Home\" ? 0\n : event.key === \"End\" ? last : -1;\n if (target < 0) return;\n event.preventDefault();\n select(items[target].id);\n tabRefs.current[target]?.focus();\n };\n return (\n <Box>\n <Flex role=\"tablist\" gap={1} borderBottomWidth=\"1px\" borderColor=\"border.default\" mb={4} overflowX=\"auto\">\n {items.map((item, index) => {\n const isActive = item.id === active;\n return (\n <Button\n key={item.id}\n ref={(el: HTMLButtonElement | null) => { tabRefs.current[index] = el; }}\n id={`${baseId}-tab-${item.id}`}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`${baseId}-panel-${item.id}`}\n tabIndex={isActive ? 0 : -1}\n variant=\"ghost\"\n borderRadius=\"0\"\n mb=\"-1px\"\n borderBottomWidth=\"2px\"\n borderColor=\"transparent\"\n borderBottomColor={isActive ? \"brand.solid\" : \"transparent\"}\n color={isActive ? \"text.primary\" : \"text.muted\"}\n fontWeight={isActive ? \"600\" : \"500\"}\n _hover={{ bg: \"surface.hover\", color: \"text.primary\" }}\n onClick={() => select(item.id)}\n onKeyDown={(event) => onKeyDown(event, index)}\n >\n {item.label}\n </Button>\n );\n })}\n </Flex>\n {selected ? (\n <Box role=\"tabpanel\" id={`${baseId}-panel-${selected.id}`} aria-labelledby={`${baseId}-tab-${selected.id}`} color=\"text.primary\">\n {selected.content}\n </Box>\n ) : null}\n </Box>\n );\n}\n\nexport function CoreSummaryCards({ items }: { items: Array<{ id: string; label: string; value: ReactNode; description?: string; tone?: \"neutral\" | \"success\" | \"warning\" | \"danger\" | \"info\" }> }) { return <SimpleGrid columns={{ base: 1, md: 2, xl: 4 }} gap={4}>{items.map((item) => <Box key={item.id} borderWidth=\"1px\" borderColor=\"border.default\" borderRadius=\"lg\" bg=\"surface.panel\" p={5}><Flex align=\"center\" justify=\"space-between\" gap={3}><Text color=\"text.muted\" fontSize=\"sm\">{item.label}</Text>{item.tone && item.tone !== \"neutral\" ? <Badge colorPalette={item.tone === \"danger\" ? \"red\" : item.tone === \"warning\" ? \"orange\" : item.tone === \"success\" ? \"green\" : \"blue\"}>{item.tone}</Badge> : null}</Flex><Text mt={2} fontSize=\"2xl\" fontWeight=\"700\" color=\"text.primary\">{item.value}</Text>{item.description ? <Text mt={1} fontSize=\"sm\" color=\"text.muted\">{item.description}</Text> : null}</Box>)}</SimpleGrid>; }\n\nexport function CoreTimeline({ items }: { items: Array<{ id: string; title: string; description?: string; at?: string; status?: string }> }) { return <Stack gap={0}>{items.map((item) => <Flex key={item.id} gap={4} py={4} borderBottomWidth=\"1px\" borderColor=\"border.default\"><Box mt={2} boxSize=\"10px\" borderRadius=\"full\" bg=\"brand.solid\" flex=\"0 0 auto\" /><Box><Flex align=\"center\" gap={2}><Text fontWeight=\"600\" color=\"text.primary\">{item.title}</Text>{item.status ? <Badge>{item.status}</Badge> : null}</Flex>{item.description ? <Text color=\"text.muted\">{item.description}</Text> : null}{item.at ? <Text fontSize=\"xs\" color=\"text.muted\" mt={1}>{item.at}</Text> : null}</Box></Flex>)}</Stack>; }\n\nexport function CoreStepper({ steps, current }: { steps: Array<{ id: string; label: string; description?: string }>; current: string }) { const currentIndex = Math.max(0, steps.findIndex((step) => step.id === current)); return <Flex gap={3} wrap=\"wrap\">{steps.map((step, index) => <Flex key={step.id} gap={2} align=\"start\" opacity={index > currentIndex ? 0.55 : 1}><Flex align=\"center\" justify=\"center\" boxSize=\"28px\" borderRadius=\"full\" bg={index <= currentIndex ? \"brand.solid\" : \"surface.panel\"} color={index <= currentIndex ? \"brand.contrast\" : \"text.muted\"} borderWidth=\"1px\" borderColor=\"border.default\">{index + 1}</Flex><Box><Text fontWeight=\"600\">{step.label}</Text>{step.description ? <Text fontSize=\"xs\" color=\"text.muted\">{step.description}</Text> : null}</Box></Flex>)}</Flex>; }\n\nexport function CoreStatusPanel({ title, status, description, actions }: { title: string; status: string; description?: string; actions?: ReactNode }) { return <Flex align=\"center\" justify=\"space-between\" gap={4} borderWidth=\"1px\" borderColor=\"border.default\" borderRadius=\"lg\" bg=\"surface.panel\" p={5}><Box><Flex align=\"center\" gap={2}><Heading size=\"sm\">{title}</Heading><Badge>{status}</Badge></Flex>{description ? <Text color=\"text.muted\" mt={1}>{description}</Text> : null}</Box>{actions}</Flex>; }\n\nexport function CoreActivityLog(props: { items: Array<{ id: string; title: string; description?: string; at?: string; status?: string }> }) { return <CoreTimeline {...props} />; }\n\nexport function CoreConfirmAction({ label, confirmLabel = \"Confirmar\", cancelLabel = \"Cancelar\", tone = \"danger\", onConfirm }: { label: string; confirmLabel?: string; cancelLabel?: string; tone?: \"danger\" | \"neutral\"; onConfirm: () => void }) { return <Flex align=\"center\" gap={3} borderWidth=\"1px\" borderColor={tone === \"danger\" ? \"status.danger\" : \"border.default\"} borderRadius=\"lg\" p={4}><Text flex=\"1\">{label}</Text><Button variant=\"ghost\">{cancelLabel}</Button><Button colorPalette={tone === \"danger\" ? \"red\" : \"brand\"} onClick={onConfirm}>{confirmLabel}</Button></Flex>; }\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 { useEffect, useMemo, useState } from \"react\";\nimport { Badge, Box, Button, Flex, Heading, IconButton, Input, Stack, Text, Textarea } from \"@chakra-ui/react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useOonApi } from \"../api/ApiProvider\";\n\ntype Configuration = {\n apiKeyMasked?: string;\n fingerprint?: string;\n credentialConfigured?: boolean;\n senderEmail?: string;\n senderName?: string;\n replyTo?: string;\n status?: string;\n connectionStatus?: string;\n lastTestAt?: string;\n lastError?: string;\n updatedAt?: string;\n};\n\ntype Template = {\n _id: string;\n code: string;\n version: number;\n name: string;\n description?: string;\n status: string;\n origin: string;\n subject: string;\n htmlContent: string;\n textContent: string;\n variablesSchema?: Record<string, unknown>;\n locale?: string;\n createdAt?: string;\n};\n\ntype Dispatch = {\n _id: string;\n templateCode: string;\n templateVersion?: number;\n status: string;\n attempts: number;\n correlationId?: string;\n createdAt?: string;\n lastError?: { code?: string; message?: string };\n};\n\ntype Preview = {\n code: string;\n version?: number | null;\n name: string;\n locale?: string;\n subject: string;\n html: string;\n text: string;\n};\n\ntype TemplateDraft = {\n code: string;\n name: string;\n subject: string;\n htmlContent: string;\n textContent: string;\n variablesSchema: string;\n locale: string;\n};\n\ntype TemplateModalTab = \"versions\" | \"content\" | \"variables\" | \"preview\" | \"test\";\n\nconst EMPTY_SCHEMA = '{\\n \"type\": \"object\",\\n \"additionalProperties\": false,\\n \"properties\": {}\\n}';\nconst EMPTY_DRAFT: TemplateDraft = {\n code: \"\",\n name: \"\",\n subject: \"\",\n htmlContent: \"\",\n textContent: \"\",\n variablesSchema: EMPTY_SCHEMA,\n locale: \"pt-BR\",\n};\n\nfunction errorMessage(error: unknown) {\n return (error as { response?: { data?: { message?: string } }; message?: string })?.response?.data?.message\n || (error as { message?: string })?.message\n || \"Não foi possível concluir a operação.\";\n}\n\nfunction color(status?: string) {\n if ([\"active\", \"provider_accepted\", \"valid\"].includes(String(status))) return \"green\";\n if ([\"degraded\", \"invalid\", \"failed\", \"dead_letter\"].includes(String(status))) return \"red\";\n return \"yellow\";\n}\n\nfunction prettyDate(value?: string) {\n return value ? new Intl.DateTimeFormat(\"pt-BR\", { dateStyle: \"short\", timeStyle: \"short\" }).format(new Date(value)) : \"Ainda não executado\";\n}\n\nfunction sampleVariables(schema?: Record<string, unknown>) {\n const properties = (schema?.properties || {}) as Record<string, { type?: string }>;\n const values: Record<string, unknown> = {};\n for (const [key, definition] of Object.entries(properties)) {\n if (definition.type === \"number\" || definition.type === \"integer\") values[key] = 0;\n else if (definition.type === \"boolean\") values[key] = false;\n else if (definition.type === \"array\") values[key] = [];\n else if (definition.type === \"object\") values[key] = {};\n else values[key] = \"\";\n }\n return JSON.stringify(values, null, 2);\n}\n\nfunction parseObject(source: string, message: string) {\n try {\n const value = JSON.parse(source);\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(message);\n return value as Record<string, unknown>;\n } catch {\n throw new Error(message);\n }\n}\n\nexport function CoreTransactionalEmail() {\n const { http } = useOonApi();\n const cache = useQueryClient();\n const [tab, setTab] = useState<\"config\" | \"templates\" | \"dispatches\">(\"config\");\n const [error, setError] = useState(\"\");\n const [notice, setNotice] = useState(\"\");\n\n const [configurationDraft, setConfigurationDraft] = useState({\n apiKey: \"\",\n senderEmail: \"\",\n senderName: \"\",\n replyTo: \"\",\n });\n const [configurationTestRecipient, setConfigurationTestRecipient] = useState(\"\");\n const [loadedConfigurationKey, setLoadedConfigurationKey] = useState(\"\");\n\n const [templateDraft, setTemplateDraft] = useState<TemplateDraft>(EMPTY_DRAFT);\n const [editingBase, setEditingBase] = useState<Template | null>(null);\n const [previewTarget, setPreviewTarget] = useState<Template | null>(null);\n const [previewVariables, setPreviewVariables] = useState(\"{}\");\n const [testTarget, setTestTarget] = useState<Template | null>(null);\n const [templateTest, setTemplateTest] = useState({ to: \"\", variables: \"{}\" });\n const [templateModalOpen, setTemplateModalOpen] = useState(false);\n const [templateModalTab, setTemplateModalTab] = useState<TemplateModalTab>(\"versions\");\n const [managedTemplateCode, setManagedTemplateCode] = useState(\"\");\n\n const health = useQuery({\n queryKey: [\"transactional-email\", \"health\"],\n queryFn: async () => (await http.get(\"/core/transactional-email/health\")).data,\n });\n const configuration = useQuery({\n queryKey: [\"transactional-email\", \"configuration\"],\n queryFn: async () => (await http.get<{ configuration: Configuration | null }>(\"/core/transactional-email/configuration\")).data.configuration,\n });\n const templates = useQuery({\n queryKey: [\"transactional-email\", \"templates\"],\n queryFn: async () => (await http.get<{ results: Template[] }>(\"/core/transactional-email/templates\")).data.results,\n enabled: tab === \"templates\",\n });\n const dispatches = useQuery({\n queryKey: [\"transactional-email\", \"dispatches\"],\n queryFn: async () => (await http.get<{ results: Dispatch[] }>(\"/core/transactional-email/dispatches\")).data.results,\n enabled: tab === \"dispatches\",\n refetchInterval: 10000,\n });\n\n const config = configuration.data;\n const configurationKey = [\n config?.updatedAt,\n config?.senderEmail,\n config?.senderName,\n config?.replyTo,\n config?.fingerprint,\n ].join(\"|\");\n\n useEffect(() => {\n if (!config || configurationKey === loadedConfigurationKey) return;\n setConfigurationDraft({\n apiKey: \"\",\n senderEmail: config.senderEmail || \"\",\n senderName: config.senderName || \"\",\n replyTo: config.replyTo || \"\",\n });\n setConfigurationTestRecipient((value) => value || config.senderEmail || \"\");\n setLoadedConfigurationKey(configurationKey);\n }, [config, configurationKey, loadedConfigurationKey]);\n\n const groupedTemplates = useMemo(() => {\n const groups: Record<string, Template[]> = {};\n for (const item of templates.data || []) (groups[item.code] ||= []).push(item);\n return Object.entries(groups);\n }, [templates.data]);\n\n const managedVersions = useMemo(\n () => (templates.data || []).filter((item) => item.code === managedTemplateCode),\n [managedTemplateCode, templates.data],\n );\n const managedTemplate = managedVersions.find((item) => item.status === \"active\") || managedVersions[0] || null;\n const draftContext = !managedTemplateCode || Boolean(editingBase);\n\n const saveConfiguration = useMutation({\n mutationFn: async () => {\n const payload: Record<string, unknown> = {\n senderEmail: configurationDraft.senderEmail,\n senderName: configurationDraft.senderName,\n replyTo: configurationDraft.replyTo,\n enabled: true,\n };\n if (configurationDraft.apiKey.trim()) payload.apiKey = configurationDraft.apiKey.trim();\n return (await http.put(\"/core/transactional-email/configuration\", payload)).data;\n },\n onSuccess: () => {\n setConfigurationDraft((value) => ({ ...value, apiKey: \"\" }));\n setError(\"\");\n setNotice(\"Dados do remetente salvos. A credencial armazenada foi preservada.\");\n cache.invalidateQueries({ queryKey: [\"transactional-email\"] });\n },\n onError: (reason) => {\n setNotice(\"\");\n setError(errorMessage(reason));\n },\n });\n\n const testConfiguration = useMutation({\n mutationFn: async () => (await http.post(\"/core/transactional-email/configuration/test\", {\n recipient: configurationTestRecipient,\n })).data,\n onSuccess: () => {\n setError(\"\");\n setNotice(\"Teste enviado. Consulte a caixa do destinatário e a aba Envios.\");\n cache.invalidateQueries({ queryKey: [\"transactional-email\"] });\n },\n onError: (reason) => {\n setNotice(\"\");\n setError(errorMessage(reason));\n cache.invalidateQueries({ queryKey: [\"transactional-email\"] });\n },\n });\n\n const createVersion = useMutation({\n mutationFn: async () => http.post(\n \"/core/transactional-email/templates/\" + templateDraft.code + \"/versions\",\n {\n ...templateDraft,\n variablesSchema: parseObject(templateDraft.variablesSchema, \"JSON Schema inválido.\"),\n attachmentsPolicy: { allowed: false },\n },\n ),\n onSuccess: () => {\n setError(\"\");\n setNotice(\"Nova versão salva como rascunho. Ela ainda não está ativa.\");\n setEditingBase(null);\n setTemplateDraft(EMPTY_DRAFT);\n setTemplateModalOpen(false);\n cache.invalidateQueries({ queryKey: [\"transactional-email\", \"templates\"] });\n },\n onError: (reason) => {\n setNotice(\"\");\n setError(errorMessage(reason));\n },\n });\n\n const activate = useMutation({\n mutationFn: async (item: Template) => http.post(\n \"/core/transactional-email/templates/\" + item.code + \"/versions/\" + item.version + \"/activate\",\n ),\n onSuccess: () => {\n setError(\"\");\n setNotice(\"Versão ativada manualmente.\");\n cache.invalidateQueries({ queryKey: [\"transactional-email\", \"templates\"] });\n },\n onError: (reason) => {\n setNotice(\"\");\n setError(errorMessage(reason));\n },\n });\n\n const preview = useMutation({\n mutationFn: async (request: {\n code: string;\n version?: number;\n definition?: Record<string, unknown>;\n variables: Record<string, unknown>;\n }) => (await http.post<Preview>(\n \"/core/transactional-email/templates/\" + request.code + \"/preview\",\n {\n version: request.version,\n definition: request.definition,\n variables: request.variables,\n },\n )).data,\n onSuccess: () => {\n setError(\"\");\n setNotice(\"\");\n },\n onError: (reason) => {\n setNotice(\"\");\n setError(errorMessage(reason));\n },\n });\n\n const testTemplate = useMutation({\n mutationFn: async () => {\n if (!testTarget) throw new Error(\"Selecione uma versão para testar.\");\n return http.post(\"/core/transactional-email/templates/\" + testTarget.code + \"/test\", {\n version: testTarget.version,\n to: templateTest.to,\n variables: parseObject(templateTest.variables, \"JSON de variáveis inválido.\"),\n });\n },\n onSuccess: () => {\n setError(\"\");\n setNotice(\"Teste da versão \" + testTarget?.version + \" enfileirado sem alterar a versão ativa.\");\n cache.invalidateQueries({ queryKey: [\"transactional-email\", \"dispatches\"] });\n },\n onError: (reason) => {\n setNotice(\"\");\n setError(errorMessage(reason));\n },\n });\n\n const retry = useMutation({\n mutationFn: async (id: string) => http.post(\"/core/transactional-email/dispatches/\" + id + \"/retry\"),\n onSuccess: () => cache.invalidateQueries({ queryKey: [\"transactional-email\", \"dispatches\"] }),\n onError: (reason) => setError(errorMessage(reason)),\n });\n\n function useAsBase(item: Template) {\n setEditingBase(item);\n setManagedTemplateCode(item.code);\n setTemplateDraft({\n code: item.code,\n name: item.name,\n subject: item.subject,\n htmlContent: item.htmlContent,\n textContent: item.textContent,\n variablesSchema: JSON.stringify(item.variablesSchema || {}, null, 2),\n locale: item.locale || \"pt-BR\",\n });\n setPreviewVariables(sampleVariables(item.variablesSchema));\n setPreviewTarget(null);\n preview.reset();\n setTemplateModalTab(\"content\");\n setTemplateModalOpen(true);\n setNotice(\"Versão \" + item.version + \" carregada como base. Ao salvar, uma nova versão em rascunho será criada.\");\n setError(\"\");\n }\n\n function openNewTemplate() {\n setManagedTemplateCode(\"\");\n setEditingBase(null);\n setTemplateDraft(EMPTY_DRAFT);\n setPreviewTarget(null);\n setTestTarget(null);\n setPreviewVariables(\"{}\");\n setTemplateTest({ to: config?.senderEmail || \"\", variables: \"{}\" });\n preview.reset();\n setError(\"\");\n setNotice(\"\");\n setTemplateModalTab(\"content\");\n setTemplateModalOpen(true);\n }\n\n function manageTemplate(code: string) {\n const versions = (templates.data || []).filter((item) => item.code === code);\n const target = versions.find((item) => item.status === \"active\") || versions[0] || null;\n setManagedTemplateCode(code);\n setEditingBase(null);\n setTemplateDraft(EMPTY_DRAFT);\n setPreviewTarget(target);\n setTestTarget(target);\n setPreviewVariables(sampleVariables(target?.variablesSchema));\n setTemplateTest({\n to: config?.senderEmail || \"\",\n variables: sampleVariables(target?.variablesSchema),\n });\n preview.reset();\n setError(\"\");\n setNotice(\"\");\n setTemplateModalTab(\"versions\");\n setTemplateModalOpen(true);\n }\n\n function closeTemplateModal() {\n setTemplateModalOpen(false);\n setError(\"\");\n preview.reset();\n }\n\n function selectPreview(item: Template) {\n setManagedTemplateCode(item.code);\n setPreviewTarget(item);\n setPreviewVariables(sampleVariables(item.variablesSchema));\n preview.reset();\n setTemplateModalTab(\"preview\");\n setTemplateModalOpen(true);\n setError(\"\");\n setNotice(\"\");\n }\n\n function renderSavedPreview() {\n if (!previewTarget) return;\n try {\n preview.mutate({\n code: previewTarget.code,\n version: previewTarget.version,\n variables: parseObject(previewVariables, \"JSON de variáveis inválido.\"),\n });\n } catch (reason) {\n setError(errorMessage(reason));\n }\n }\n\n function renderDraftPreview() {\n try {\n const variablesSchema = parseObject(templateDraft.variablesSchema, \"JSON Schema inválido.\");\n preview.mutate({\n code: templateDraft.code,\n definition: {\n ...templateDraft,\n variablesSchema,\n attachmentsPolicy: { allowed: false },\n },\n variables: parseObject(previewVariables, \"JSON de variáveis inválido.\"),\n });\n setPreviewTarget(null);\n } catch (reason) {\n setError(errorMessage(reason));\n }\n }\n\n function selectTest(item: Template) {\n setManagedTemplateCode(item.code);\n setTestTarget(item);\n setTemplateTest((value) => ({\n to: value.to || config?.senderEmail || \"\",\n variables: sampleVariables(item.variablesSchema),\n }));\n setTemplateModalTab(\"test\");\n setTemplateModalOpen(true);\n setError(\"\");\n setNotice(\"\");\n }\n\n useEffect(() => {\n if (!templateModalOpen) return undefined;\n const previousOverflow = document.body.style.overflow;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") closeTemplateModal();\n };\n document.body.style.overflow = \"hidden\";\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.body.style.overflow = previousOverflow;\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [templateModalOpen]);\n\n function activateVersion(item: Template) {\n const confirmed = window.confirm(\n \"Ativar \" + item.code + \" v\" + item.version + \"? A versão ativa atual será arquivada.\",\n );\n if (confirmed) activate.mutate(item);\n }\n\n return (\n <Stack gap={5}>\n <Flex justify=\"space-between\" align=\"center\" wrap=\"wrap\" gap={3}>\n <Box>\n <Heading size=\"lg\">E-mail transacional</Heading>\n <Text color=\"gray.600\">Configure o remetente, revise versões e valide cada envio antes da ativação.</Text>\n </Box>\n <Badge colorPalette={color(health.data?.status)}>{health.data?.status || \"carregando\"}</Badge>\n </Flex>\n\n <Flex gap={2} wrap=\"wrap\">\n {([\n [\"config\", \"Configuração\"],\n [\"templates\", \"Templates\"],\n [\"dispatches\", \"Envios\"],\n ] as const).map(([id, label]) => (\n <Button key={id} size=\"sm\" variant={tab === id ? \"solid\" : \"outline\"} onClick={() => setTab(id)}>\n {label}\n </Button>\n ))}\n </Flex>\n\n {error ? (\n <Box role=\"alert\" borderWidth=\"1px\" borderColor=\"red.200\" bg=\"red.50\" p={3} borderRadius=\"md\">\n <Text color=\"red.700\">{error}</Text>\n </Box>\n ) : null}\n {notice ? (\n <Box role=\"status\" borderWidth=\"1px\" borderColor=\"green.200\" bg=\"green.50\" p={3} borderRadius=\"md\">\n <Text color=\"green.800\">{notice}</Text>\n </Box>\n ) : null}\n\n {tab === \"config\" ? (\n <Stack gap={4}>\n <Box borderWidth=\"1px\" borderRadius=\"lg\" p={{ base: 4, md: 5 }}>\n <Flex justify=\"space-between\" align=\"start\" gap={3} wrap=\"wrap\" mb={5}>\n <Box>\n <Heading size=\"sm\">Remetente e credencial</Heading>\n <Text fontSize=\"sm\" color=\"gray.600\">\n Altere os dados abaixo sem informar novamente a API key já protegida.\n </Text>\n </Box>\n <Flex gap={2} wrap=\"wrap\">\n <Badge colorPalette={config?.credentialConfigured ? \"green\" : \"yellow\"}>\n {config?.credentialConfigured ? \"Chave \" + config.apiKeyMasked : \"Chave pendente\"}\n </Badge>\n <Badge colorPalette={color(config?.connectionStatus)}>\n {config?.connectionStatus || \"não testada\"}\n </Badge>\n </Flex>\n </Flex>\n\n <Stack gap={4}>\n <Box>\n <label htmlFor=\"transactional-sender-email\" style={{ fontSize: \"0.875rem\", fontWeight: 600 }}>E-mail do remetente</label>\n <Input\n id=\"transactional-sender-email\"\n type=\"email\"\n mt={1}\n value={configurationDraft.senderEmail}\n onChange={(event) => setConfigurationDraft({ ...configurationDraft, senderEmail: event.target.value })}\n />\n </Box>\n <Box>\n <label htmlFor=\"transactional-sender-name\" style={{ fontSize: \"0.875rem\", fontWeight: 600 }}>Nome do remetente</label>\n <Input\n id=\"transactional-sender-name\"\n mt={1}\n value={configurationDraft.senderName}\n onChange={(event) => setConfigurationDraft({ ...configurationDraft, senderName: event.target.value })}\n />\n </Box>\n <Box>\n <label htmlFor=\"transactional-reply-to\" style={{ fontSize: \"0.875rem\", fontWeight: 600 }}>Responder para</label>\n <Input\n id=\"transactional-reply-to\"\n type=\"email\"\n mt={1}\n placeholder=\"Opcional\"\n value={configurationDraft.replyTo}\n onChange={(event) => setConfigurationDraft({ ...configurationDraft, replyTo: event.target.value })}\n />\n </Box>\n <Box borderWidth=\"1px\" borderRadius=\"md\" p={4} bg=\"gray.50\">\n <label htmlFor=\"transactional-api-key\" style={{ fontSize: \"0.875rem\", fontWeight: 600 }}>Trocar API key</label>\n <Text fontSize=\"xs\" color=\"gray.600\" mb={2}>\n Deixe em branco para manter a chave atual. O valor nunca será exibido depois de salvo.\n </Text>\n <Input\n id=\"transactional-api-key\"\n type=\"password\"\n autoComplete=\"new-password\"\n placeholder=\"Nova API key SendGrid\"\n bg=\"white\"\n value={configurationDraft.apiKey}\n onChange={(event) => setConfigurationDraft({ ...configurationDraft, apiKey: event.target.value })}\n />\n </Box>\n <Button\n alignSelf=\"start\"\n loading={saveConfiguration.isPending}\n onClick={() => saveConfiguration.mutate()}\n >\n Salvar alterações\n </Button>\n </Stack>\n </Box>\n\n <Box borderWidth=\"1px\" borderRadius=\"lg\" p={{ base: 4, md: 5 }}>\n <Heading size=\"sm\">Teste de entrega</Heading>\n <Text fontSize=\"sm\" color=\"gray.600\" mb={4}>\n Refaça o teste com a chave e o remetente atualmente salvos.\n </Text>\n <Flex gap={3} align=\"end\" wrap=\"wrap\">\n <Box flex=\"1\" minW=\"240px\">\n <label htmlFor=\"transactional-test-recipient\" style={{ fontSize: \"0.875rem\", fontWeight: 600 }}>\n Destinatário do teste\n </label>\n <Input\n id=\"transactional-test-recipient\"\n type=\"email\"\n mt={1}\n value={configurationTestRecipient}\n onChange={(event) => setConfigurationTestRecipient(event.target.value)}\n />\n </Box>\n <Button\n variant=\"outline\"\n loading={testConfiguration.isPending}\n disabled={!config?.credentialConfigured}\n onClick={() => testConfiguration.mutate()}\n >\n Enviar novo teste\n </Button>\n </Flex>\n <Text mt={3} fontSize=\"xs\" color=\"gray.600\">\n Último teste: {prettyDate(config?.lastTestAt)}\n {config?.lastError ? \" · \" + config.lastError : \"\"}\n </Text>\n </Box>\n </Stack>\n ) : null}\n\n {tab === \"templates\" ? (\n <Box borderWidth=\"1px\" borderRadius=\"lg\" p={{ base: 4, md: 5 }}>\n <Flex justify=\"space-between\" align=\"start\" gap={3} wrap=\"wrap\" mb={4}>\n <Box>\n <Heading size=\"sm\">Templates e versões</Heading>\n <Text fontSize=\"sm\" color=\"gray.600\">\n Consulte o histórico e abra o gerenciamento completo sem sair da lista.\n </Text>\n </Box>\n <Button size=\"sm\" variant=\"outline\" onClick={openNewTemplate}>\n Novo template\n </Button>\n </Flex>\n\n <Stack gap={4}>\n {groupedTemplates.map(([code, versions]) => {\n const activeVersion = versions.find((item) => item.status === \"active\");\n return (\n <Box key={code} borderWidth=\"1px\" borderRadius=\"md\" overflow=\"hidden\">\n <Flex\n px={4}\n py={3}\n bg=\"gray.50\"\n justify=\"space-between\"\n align=\"center\"\n gap={3}\n wrap=\"wrap\"\n >\n <Box>\n <Text fontWeight=\"bold\">{versions[0]?.name || code}</Text>\n <Text fontSize=\"xs\" color=\"gray.600\">\n {code} · {versions.length} versão(ões)\n </Text>\n </Box>\n <Flex gap={2} align=\"center\" wrap=\"wrap\">\n {activeVersion ? (\n <Badge colorPalette=\"green\">ativa v{activeVersion.version}</Badge>\n ) : <Badge colorPalette=\"yellow\">sem versão ativa</Badge>}\n <Button size=\"sm\" onClick={() => manageTemplate(code)}>\n Gerenciar\n </Button>\n </Flex>\n </Flex>\n <Stack gap={0}>\n {versions.map((item) => (\n <Flex\n key={item._id}\n px={4}\n py={3}\n borderTopWidth=\"1px\"\n justify=\"space-between\"\n align=\"center\"\n gap={3}\n wrap=\"wrap\"\n >\n <Box minW=\"220px\" flex=\"1\">\n <Flex gap={2} align=\"center\" wrap=\"wrap\">\n <Text fontWeight=\"semibold\">Versão {item.version}</Text>\n <Badge colorPalette={color(item.status)}>{item.status}</Badge>\n <Badge variant=\"outline\">{item.origin}</Badge>\n </Flex>\n <Text mt={1} fontSize=\"sm\" color=\"gray.700\">{item.subject}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\">{prettyDate(item.createdAt)}</Text>\n </Box>\n <Button size=\"xs\" variant=\"outline\" onClick={() => selectPreview(item)}>\n Abrir versão\n </Button>\n </Flex>\n ))}\n </Stack>\n </Box>\n );\n })}\n {!templates.isLoading && !templates.data?.length ? <Text>Nenhum template declarado.</Text> : null}\n </Stack>\n </Box>\n ) : null}\n\n {templateModalOpen ? (\n <Flex\n position=\"fixed\"\n inset={0}\n zIndex={1200}\n align=\"center\"\n justify=\"center\"\n p={{ base: 2, md: 4 }}\n bg=\"rgba(15,23,42,.55)\"\n >\n <Box\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"transactional-template-modal-title\"\n display=\"flex\"\n flexDirection=\"column\"\n w=\"min(1180px, 96vw)\"\n h=\"min(900px, 92vh)\"\n maxH=\"92vh\"\n overflow=\"hidden\"\n bg=\"white\"\n borderRadius=\"14px\"\n boxShadow=\"0 24px 70px rgba(15,23,42,.28)\"\n >\n <Flex\n minH=\"72px\"\n px={{ base: 4, md: 5 }}\n py={3}\n align=\"center\"\n justify=\"space-between\"\n gap={4}\n borderBottomWidth=\"1px\"\n borderColor=\"gray.200\"\n >\n <Box minW={0}>\n <Text color=\"#0474AF\" fontSize=\"10px\" fontWeight=\"700\" textTransform=\"uppercase\">\n Template transacional\n </Text>\n <Heading id=\"transactional-template-modal-title\" size=\"md\" lineClamp={1}>\n {!managedTemplateCode\n ? \"Novo template\"\n : editingBase\n ? \"Nova versão de \" + editingBase.name\n : managedTemplate?.name || managedTemplateCode}\n </Heading>\n {managedTemplateCode ? (\n <Text fontSize=\"xs\" color=\"gray.600\">\n {managedTemplateCode}\n {editingBase ? \" · base v\" + editingBase.version : \"\"}\n </Text>\n ) : null}\n </Box>\n <IconButton\n aria-label=\"Fechar gerenciamento do template\"\n title=\"Fechar\"\n size=\"sm\"\n minW=\"32px\"\n h=\"32px\"\n borderRadius=\"full\"\n variant=\"ghost\"\n fontSize=\"21px\"\n onClick={closeTemplateModal}\n >\n ×\n </IconButton>\n </Flex>\n\n <Flex\n flex=\"0 0 auto\"\n gap={2}\n px={{ base: 3, md: 5 }}\n pt={3}\n borderBottomWidth=\"1px\"\n borderColor=\"gray.200\"\n overflowX=\"auto\"\n >\n {([\n [\"versions\", \"Versões\"],\n [\"content\", \"Conteúdo\"],\n [\"variables\", \"Variáveis\"],\n [\"preview\", \"Prévia\"],\n [\"test\", \"Teste\"],\n ] as Array<[TemplateModalTab, string]>).map(([id, label]) => (\n <Button\n key={id}\n type=\"button\"\n size=\"sm\"\n flex=\"0 0 auto\"\n variant={templateModalTab === id ? \"solid\" : \"ghost\"}\n disabled={id === \"versions\" && !managedTemplateCode}\n onClick={() => {\n setTemplateModalTab(id);\n setError(\"\");\n }}\n >\n {label}\n </Button>\n ))}\n </Flex>\n\n <Box flex=\"1\" minH={0} overflowY=\"auto\" p={{ base: 4, md: 5 }}>\n {error ? (\n <Box role=\"alert\" mb={4} borderWidth=\"1px\" borderColor=\"red.200\" bg=\"red.50\" p={3} borderRadius=\"md\">\n <Text color=\"red.700\">{error}</Text>\n </Box>\n ) : null}\n {notice ? (\n <Box role=\"status\" mb={4} borderWidth=\"1px\" borderColor=\"green.200\" bg=\"green.50\" p={3} borderRadius=\"md\">\n <Text color=\"green.800\">{notice}</Text>\n </Box>\n ) : null}\n\n {templateModalTab === \"versions\" ? (\n <Stack gap={3}>\n <Box>\n <Heading size=\"sm\">Histórico de versões</Heading>\n <Text fontSize=\"sm\" color=\"gray.600\">\n Escolha a versão que deseja revisar, testar ou usar como base.\n </Text>\n </Box>\n {managedVersions.map((item) => (\n <Box key={item._id} borderWidth=\"1px\" borderRadius=\"md\" p={4}>\n <Flex justify=\"space-between\" align=\"start\" gap={3} wrap=\"wrap\">\n <Box flex=\"1\" minW=\"220px\">\n <Flex gap={2} align=\"center\" wrap=\"wrap\">\n <Text fontWeight=\"bold\">Versão {item.version}</Text>\n <Badge colorPalette={color(item.status)}>{item.status}</Badge>\n <Badge variant=\"outline\">{item.origin}</Badge>\n </Flex>\n <Text mt={2} fontSize=\"sm\">{item.subject}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\">{prettyDate(item.createdAt)}</Text>\n </Box>\n <Flex gap={2} wrap=\"wrap\">\n <Button size=\"xs\" variant=\"outline\" onClick={() => selectPreview(item)}>\n Visualizar\n </Button>\n <Button size=\"xs\" variant=\"outline\" onClick={() => useAsBase(item)}>\n Editar como nova\n </Button>\n <Button size=\"xs\" variant=\"outline\" onClick={() => selectTest(item)}>\n Enviar teste\n </Button>\n {item.status !== \"active\" ? (\n <Button\n size=\"xs\"\n loading={activate.isPending}\n onClick={() => activateVersion(item)}\n >\n Ativar versão\n </Button>\n ) : null}\n </Flex>\n </Flex>\n </Box>\n ))}\n </Stack>\n ) : null}\n\n {templateModalTab === \"content\" ? (\n draftContext ? (\n <Stack gap={4}>\n <Box>\n <Heading size=\"sm\">\n {editingBase\n ? \"Nova versão a partir da v\" + editingBase.version\n : \"Conteúdo do novo template\"}\n </Heading>\n <Text fontSize=\"sm\" color=\"gray.600\">\n O salvamento cria um rascunho e nunca altera a versão ativa.\n </Text>\n </Box>\n <Flex gap={3} wrap=\"wrap\">\n <Box flex=\"1\" minW=\"180px\">\n <label htmlFor=\"template-code\" style={{ fontSize: \"0.875rem\", fontWeight: 600 }}>Código</label>\n <Input\n id=\"template-code\"\n mt={1}\n disabled={Boolean(editingBase)}\n value={templateDraft.code}\n onChange={(event) => setTemplateDraft({ ...templateDraft, code: event.target.value })}\n />\n </Box>\n <Box flex=\"2\" minW=\"220px\">\n <label htmlFor=\"template-name\" style={{ fontSize: \"0.875rem\", fontWeight: 600 }}>Nome</label>\n <Input\n id=\"template-name\"\n mt={1}\n value={templateDraft.name}\n onChange={(event) => setTemplateDraft({ ...templateDraft, name: event.target.value })}\n />\n </Box>\n </Flex>\n <Box>\n <label htmlFor=\"template-subject\" style={{ fontSize: \"0.875rem\", fontWeight: 600 }}>Assunto Handlebars</label>\n <Input\n id=\"template-subject\"\n mt={1}\n value={templateDraft.subject}\n onChange={(event) => setTemplateDraft({ ...templateDraft, subject: event.target.value })}\n />\n </Box>\n <Box>\n <label htmlFor=\"template-html\" style={{ fontSize: \"0.875rem\", fontWeight: 600 }}>HTML</label>\n <Textarea\n id=\"template-html\"\n mt={1}\n minH=\"280px\"\n fontFamily=\"mono\"\n value={templateDraft.htmlContent}\n onChange={(event) => setTemplateDraft({ ...templateDraft, htmlContent: event.target.value })}\n />\n <Text fontSize=\"xs\" color=\"gray.600\">\n Imagens data:image/*;base64 são aceitas; URLs remotas continuam bloqueadas.\n </Text>\n </Box>\n <Box>\n <label htmlFor=\"template-text\" style={{ fontSize: \"0.875rem\", fontWeight: 600 }}>Texto simples</label>\n <Textarea\n id=\"template-text\"\n mt={1}\n minH=\"140px\"\n value={templateDraft.textContent}\n onChange={(event) => setTemplateDraft({ ...templateDraft, textContent: event.target.value })}\n />\n </Box>\n </Stack>\n ) : (\n <Stack gap={4} align=\"start\">\n <Heading size=\"sm\">Escolha uma versão como base</Heading>\n <Text color=\"gray.600\">\n Para proteger o histórico, uma versão publicada não é alterada diretamente.\n </Text>\n {managedTemplate ? (\n <Button onClick={() => useAsBase(managedTemplate)}>\n Editar a versão ativa como nova\n </Button>\n ) : null}\n </Stack>\n )\n ) : null}\n\n {templateModalTab === \"variables\" ? (\n draftContext ? (\n <Stack gap={4}>\n <Box>\n <Heading size=\"sm\">Contrato de variáveis</Heading>\n <Text fontSize=\"sm\" color=\"gray.600\">\n Defina os campos aceitos pelo Handlebars. O teste e a prévia validarão este schema.\n </Text>\n </Box>\n <Box>\n <label htmlFor=\"template-schema\" style={{ fontSize: \"0.875rem\", fontWeight: 600 }}>\n JSON Schema\n </label>\n <Textarea\n id=\"template-schema\"\n mt={1}\n minH=\"420px\"\n fontFamily=\"mono\"\n value={templateDraft.variablesSchema}\n onChange={(event) => setTemplateDraft({ ...templateDraft, variablesSchema: event.target.value })}\n />\n </Box>\n </Stack>\n ) : (\n <Stack gap={4} align=\"start\">\n <Heading size=\"sm\">Schema da versão selecionada</Heading>\n <Text color=\"gray.600\">\n Use a versão como base para editar o contrato de variáveis em um novo rascunho.\n </Text>\n {managedTemplate ? (\n <>\n <Box as=\"pre\" w=\"100%\" minH=\"280px\" overflow=\"auto\" whiteSpace=\"pre-wrap\" borderWidth=\"1px\" borderRadius=\"md\" p={4} fontSize=\"sm\">\n {JSON.stringify(managedTemplate.variablesSchema || {}, null, 2)}\n </Box>\n <Button variant=\"outline\" onClick={() => useAsBase(managedTemplate)}>\n Editar como nova versão\n </Button>\n </>\n ) : null}\n </Stack>\n )\n ) : null}\n\n {templateModalTab === \"preview\" ? (\n <Stack gap={4}>\n <Box>\n <Heading size=\"sm\">Pré-visualização</Heading>\n <Text fontSize=\"sm\" color=\"gray.600\">\n {previewTarget\n ? previewTarget.code + \" · versão \" + previewTarget.version\n : editingBase\n ? \"Rascunho baseado na versão \" + editingBase.version\n : \"Conteúdo do novo template\"}\n </Text>\n </Box>\n <Box>\n <label htmlFor=\"preview-variables\" style={{ fontSize: \"0.875rem\", fontWeight: 600 }}>\n Variáveis de exemplo\n </label>\n <Textarea\n id=\"preview-variables\"\n mt={1}\n minH=\"140px\"\n fontFamily=\"mono\"\n value={previewVariables}\n onChange={(event) => setPreviewVariables(event.target.value)}\n />\n </Box>\n <Button\n alignSelf=\"start\"\n variant=\"outline\"\n loading={preview.isPending}\n disabled={!previewTarget && !templateDraft.code}\n onClick={previewTarget ? renderSavedPreview : renderDraftPreview}\n >\n Atualizar prévia\n </Button>\n {preview.data ? (\n <Stack gap={3}>\n <Box bg=\"gray.50\" borderWidth=\"1px\" borderRadius=\"md\" p={3}>\n <Text fontSize=\"xs\" color=\"gray.600\">Assunto renderizado</Text>\n <Text fontWeight=\"semibold\">{preview.data.subject}</Text>\n </Box>\n <Box>\n <Text fontSize=\"sm\" fontWeight=\"semibold\" mb={1}>HTML</Text>\n <iframe\n title=\"Pré-visualização segura do template\"\n sandbox=\"\"\n srcDoc={preview.data.html}\n style={{\n width: \"100%\",\n minHeight: 420,\n border: \"1px solid #E2E8F0\",\n borderRadius: 8,\n background: \"white\",\n }}\n />\n </Box>\n <Box>\n <Text fontSize=\"sm\" fontWeight=\"semibold\" mb={1}>Texto simples</Text>\n <Box as=\"pre\" whiteSpace=\"pre-wrap\" borderWidth=\"1px\" borderRadius=\"md\" p={3} fontSize=\"sm\">\n {preview.data.text}\n </Box>\n </Box>\n </Stack>\n ) : (\n <Text fontSize=\"sm\" color=\"gray.600\">\n Informe variáveis válidas e atualize a prévia.\n </Text>\n )}\n </Stack>\n ) : null}\n\n {templateModalTab === \"test\" ? (\n <Stack gap={4}>\n <Box>\n <Heading size=\"sm\">Envio de teste</Heading>\n <Text fontSize=\"sm\" color=\"gray.600\">\n {testTarget\n ? testTarget.code + \" · versão \" + testTarget.version + \" · \" + testTarget.status\n : \"Selecione uma versão salva antes de enviar o teste.\"}\n </Text>\n </Box>\n {testTarget ? (\n <>\n <Box>\n <label htmlFor=\"template-test-recipient\" style={{ fontSize: \"0.875rem\", fontWeight: 600 }}>\n Destinatário\n </label>\n <Input\n id=\"template-test-recipient\"\n type=\"email\"\n mt={1}\n value={templateTest.to}\n onChange={(event) => setTemplateTest({ ...templateTest, to: event.target.value })}\n />\n </Box>\n <Box>\n <label htmlFor=\"template-test-variables\" style={{ fontSize: \"0.875rem\", fontWeight: 600 }}>\n Variáveis\n </label>\n <Textarea\n id=\"template-test-variables\"\n mt={1}\n minH=\"260px\"\n fontFamily=\"mono\"\n value={templateTest.variables}\n onChange={(event) => setTemplateTest({ ...templateTest, variables: event.target.value })}\n />\n </Box>\n <Button\n alignSelf=\"start\"\n loading={testTemplate.isPending}\n onClick={() => {\n try {\n parseObject(templateTest.variables, \"JSON de variáveis inválido.\");\n testTemplate.mutate();\n } catch (reason) {\n setError(errorMessage(reason));\n }\n }}\n >\n Enfileirar teste desta versão\n </Button>\n </>\n ) : null}\n </Stack>\n ) : null}\n </Box>\n\n <Flex\n flex=\"0 0 auto\"\n minH=\"64px\"\n px={{ base: 4, md: 5 }}\n py={3}\n align=\"center\"\n justify=\"space-between\"\n gap={3}\n borderTopWidth=\"1px\"\n borderColor=\"gray.200\"\n boxShadow=\"0 -8px 24px rgba(15,23,42,.05)\"\n >\n <Text fontSize=\"xs\" color=\"gray.600\">\n Nenhuma alteração é publicada automaticamente.\n </Text>\n <Flex gap={2}>\n <Button variant=\"ghost\" onClick={closeTemplateModal}>Fechar</Button>\n {draftContext && [\"content\", \"variables\"].includes(templateModalTab) ? (\n <Button\n loading={createVersion.isPending}\n disabled={!templateDraft.code}\n onClick={() => {\n try {\n parseObject(templateDraft.variablesSchema, \"JSON Schema inválido.\");\n createVersion.mutate();\n } catch (reason) {\n setError(errorMessage(reason));\n }\n }}\n >\n Salvar nova versão\n </Button>\n ) : null}\n </Flex>\n </Flex>\n </Box>\n </Flex>\n ) : null}\n\n {tab === \"dispatches\" ? (\n <Stack gap={3}>\n <Flex justify=\"space-between\" align=\"center\" gap={3} wrap=\"wrap\">\n <Box>\n <Heading size=\"sm\">Envios recentes</Heading>\n <Text fontSize=\"sm\" color=\"gray.600\">A lista é atualizada automaticamente a cada 10 segundos.</Text>\n </Box>\n <Button size=\"sm\" variant=\"outline\" onClick={() => dispatches.refetch()}>Atualizar agora</Button>\n </Flex>\n {dispatches.data?.map((item) => (\n <Box key={item._id} borderWidth=\"1px\" borderRadius=\"lg\" p={4}>\n <Flex justify=\"space-between\" gap={3} align=\"start\" wrap=\"wrap\">\n <Box>\n <Text fontWeight=\"semibold\">\n {item.templateCode}{item.templateVersion ? \" · versão \" + item.templateVersion : \"\"}\n </Text>\n <Text fontSize=\"sm\" color=\"gray.600\">\n {item.correlationId} · {item.attempts} tentativa(s) · {prettyDate(item.createdAt)}\n </Text>\n {item.lastError?.message ? (\n <Text color=\"red.600\" fontSize=\"sm\">{item.lastError.code}: {item.lastError.message}</Text>\n ) : null}\n </Box>\n <Stack align=\"end\">\n <Badge colorPalette={color(item.status)}>{item.status}</Badge>\n {item.status === \"dead_letter\" ? (\n <Button size=\"xs\" loading={retry.isPending} onClick={() => retry.mutate(item._id)}>\n Reprocessar\n </Button>\n ) : null}\n </Stack>\n </Flex>\n </Box>\n ))}\n {!dispatches.isLoading && !dispatches.data?.length ? <Text>Nenhum envio recente.</Text> : null}\n </Stack>\n ) : null}\n </Stack>\n );\n}\n","import {\n Badge,\n Box,\n Button,\n Dialog,\n Drawer,\n Flex,\n Heading,\n IconButton,\n Input,\n NativeSelect,\n Portal,\n SimpleGrid,\n Skeleton,\n Stack,\n Text,\n} from \"@chakra-ui/react\";\nimport { useState, type ReactNode } from \"react\";\n\n/*\n * Onda UX (U1, oondemand/oon-platform#218): a small kit that turns the\n * approved usability rules (oon-docs doc 20) into components. One task per\n * page, list → detail in a side panel, one primary action, the same status\n * vocabulary everywhere and technical data only under \"Detalhes técnicos\".\n */\n\n// ---------------------------------------------------------------------------\n// Status vocabulary (doc 20 §3). Internal states are translated, never shown.\n// ---------------------------------------------------------------------------\n\nexport type CoreStatusKind = \"contract\" | \"charge\" | \"publication\" | \"environment\" | \"entity\";\nexport type CoreStatusTone = \"success\" | \"warning\" | \"danger\" | \"info\" | \"neutral\";\nexport interface CoreStatusView { label: string; tone: CoreStatusTone }\n\nconst STATUS: Record<CoreStatusKind, Record<string, CoreStatusView>> = {\n contract: {\n vigente: { label: \"Ativo\", tone: \"success\" }, ativa: { label: \"Ativo\", tone: \"success\" }, active: { label: \"Ativo\", tone: \"success\" },\n pendente: { label: \"Pendente de ativação\", tone: \"warning\" }, pending: { label: \"Pendente de ativação\", tone: \"warning\" },\n suspensa: { label: \"Bloqueado\", tone: \"danger\" }, bloqueado: { label: \"Bloqueado\", tone: \"danger\" }, blocked: { label: \"Bloqueado\", tone: \"danger\" },\n encerrada: { label: \"Encerrado\", tone: \"neutral\" }, expirada: { label: \"Encerrado\", tone: \"neutral\" }, cancelada: { label: \"Encerrado\", tone: \"neutral\" }, revogada: { label: \"Encerrado\", tone: \"neutral\" },\n },\n charge: {\n aberta: { label: \"Em aberto\", tone: \"info\" }, open: { label: \"Em aberto\", tone: \"info\" },\n vencida: { label: \"Vencida\", tone: \"danger\" }, overdue: { label: \"Vencida\", tone: \"danger\" },\n paga: { label: \"Paga\", tone: \"success\" }, paid: { label: \"Paga\", tone: \"success\" },\n cancelada: { label: \"Cancelada\", tone: \"neutral\" }, cancelled: { label: \"Cancelada\", tone: \"neutral\" },\n },\n publication: {\n publicada: { label: \"Publicada\", tone: \"success\" }, verified: { label: \"Publicada\", tone: \"success\" },\n cancelada: { label: \"Cancelada\", tone: \"neutral\" }, excluida: { label: \"Cancelada\", tone: \"neutral\" },\n recovery_required: { label: \"Em recuperação\", tone: \"warning\" }, recovering: { label: \"Em recuperação\", tone: \"warning\" },\n },\n environment: {\n active: { label: \"Ativo\", tone: \"success\" },\n recovering: { label: \"Em recuperação\", tone: \"warning\" }, publication_failed: { label: \"Em recuperação\", tone: \"warning\" },\n provisioning: { label: \"Em andamento\", tone: \"info\" }, cleanup_requested: { label: \"Em andamento\", tone: \"info\" }, cleaning: { label: \"Em andamento\", tone: \"info\" },\n never_published: { label: \"Não utilizado\", tone: \"neutral\" },\n deleted: { label: \"Excluído\", tone: \"neutral\" }, cleanup_failed: { label: \"Em recuperação\", tone: \"warning\" },\n },\n entity: {\n ativo: { label: \"Ativo\", tone: \"success\" }, active: { label: \"Ativo\", tone: \"success\" },\n pendente: { label: \"Pendente\", tone: \"warning\" }, pending: { label: \"Pendente\", tone: \"warning\" }, rascunho: { label: \"Pendente\", tone: \"warning\" },\n inativo: { label: \"Inativo\", tone: \"neutral\" }, inactive: { label: \"Inativo\", tone: \"neutral\" }, suspenso: { label: \"Inativo\", tone: \"neutral\" }, arquivado: { label: \"Inativo\", tone: \"neutral\" }, deleted: { label: \"Inativo\", tone: \"neutral\" },\n },\n};\n\n/** Maps an internal state to the shared label and tone. Unknown states stay\n * neutral with a generic label; the raw value is never the label. */\nexport function coreStatus(kind: CoreStatusKind, status: string | null | undefined): CoreStatusView {\n const key = String(status ?? \"\").trim();\n const known = STATUS[kind]?.[key];\n if (known) return known;\n if (kind === \"publication\") {\n if (key.startsWith(\"falha_\")) return { label: \"Falhou\", tone: \"danger\" };\n if (key) return { label: \"Em andamento\", tone: \"info\" };\n }\n return { label: \"Indefinido\", tone: \"neutral\" };\n}\n\nconst PALETTE: Record<CoreStatusTone, string> = { success: \"green\", warning: \"orange\", danger: \"red\", info: \"blue\", neutral: \"gray\" };\n\nexport function CoreStatusBadge({ kind, status, label, tone }: { kind?: CoreStatusKind; status?: string | null; label?: string; tone?: CoreStatusTone }) {\n const view = label ? { label, tone: tone ?? \"neutral\" } : coreStatus(kind ?? \"entity\", status);\n return <Badge colorPalette={PALETTE[view.tone]} variant=\"subtle\" borderRadius=\"full\" px={2.5} py={0.5} fontWeight=\"600\">{view.label}</Badge>;\n}\n\n// ---------------------------------------------------------------------------\n// Indicators (dashboards and summaries): 3–5 per page.\n// ---------------------------------------------------------------------------\n\nexport interface CoreKpi { id: string; label: string; value: ReactNode; hint?: string; tone?: CoreStatusTone; href?: string }\n\nexport function CoreKpiGrid({ items, loading }: { items: CoreKpi[]; loading?: boolean }) {\n return (\n <SimpleGrid columns={{ base: 1, sm: 2, lg: Math.min(Math.max(items.length, 1), 5) }} gap={4}>\n {items.map((item) => (\n <Box key={item.id} borderWidth=\"1px\" borderColor=\"border.default\" borderRadius=\"lg\" bg=\"surface.panel\" p={4}>\n <Text color=\"text.muted\" fontSize=\"sm\">{item.label}</Text>\n {loading ? <Skeleton height=\"28px\" mt={2} /> : (\n <Text mt={1} fontSize=\"2xl\" fontWeight=\"700\" color={item.tone === \"danger\" ? \"red.600\" : item.tone === \"success\" ? \"green.700\" : \"text.primary\"}>{item.value}</Text>\n )}\n {item.hint ? <Text mt={1} fontSize=\"xs\" color=\"text.muted\">{item.hint}</Text> : null}\n </Box>\n ))}\n </SimpleGrid>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Empty state with the next step.\n// ---------------------------------------------------------------------------\n\nexport function CoreEmpty({ title, description, action }: { title: string; description?: string; action?: ReactNode }) {\n return (\n <Stack align=\"center\" textAlign=\"center\" gap={2} py={10} px={4}>\n <Text fontWeight=\"600\" color=\"text.primary\">{title}</Text>\n {description ? <Text color=\"text.muted\" fontSize=\"sm\" maxW=\"440px\">{description}</Text> : null}\n {action ? <Box mt={2}>{action}</Box> : null}\n </Stack>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Data table: search, filters, paging, row click → detail. Cards on phones.\n// ---------------------------------------------------------------------------\n\nexport interface CoreTableColumn<T> { key: string; header: string; render?: (row: T) => ReactNode; width?: string; hideOnMobile?: boolean }\n\nexport interface CoreDataTableProps<T> {\n columns: CoreTableColumn<T>[];\n rows: T[];\n rowKey: (row: T) => string;\n loading?: boolean;\n error?: ReactNode;\n empty?: ReactNode;\n search?: { value: string; onChange: (value: string) => void; placeholder?: string };\n filters?: ReactNode;\n onRowClick?: (row: T) => void;\n selectedKey?: string | null;\n paging?: { page: number; pageSize: number; total?: number; hasNext?: boolean; onPage: (page: number) => void };\n label: string;\n}\n\nfunction cell<T>(row: T, column: CoreTableColumn<T>): ReactNode {\n if (column.render) return column.render(row);\n const value = (row as Record<string, unknown>)[column.key];\n return value === null || value === undefined || value === \"\" ? \"—\" : String(value);\n}\n\nexport function CoreDataTable<T>({ columns, rows, rowKey, loading, error, empty, search, filters, onRowClick, selectedKey, paging, label }: CoreDataTableProps<T>) {\n const toolbar = search || filters ? (\n <Flex gap={2} wrap=\"wrap\" mb={3} align=\"center\">\n {search ? (\n <Input type=\"search\" aria-label={search.placeholder ?? \"Buscar\"} placeholder={search.placeholder ?? \"Buscar\"} value={search.value}\n onChange={(event) => search.onChange(event.target.value)} maxW={{ base: \"100%\", md: \"320px\" }} bg=\"surface.panel\" />\n ) : null}\n {filters}\n </Flex>\n ) : null;\n const body = (() => {\n if (error) return <Box p={4}>{error}</Box>;\n if (loading) return <Stack p={4} gap={3}>{[0, 1, 2].map((i) => <Skeleton key={i} height=\"20px\" />)}</Stack>;\n if (!rows.length) return empty ?? <CoreEmpty title=\"Nada por aqui ainda\" />;\n return (\n <>\n <Box display={{ base: \"none\", md: \"block\" }} overflowX=\"auto\">\n <Box as=\"table\" width=\"100%\" style={{ borderCollapse: \"collapse\" }} aria-label={label}>\n <Box as=\"thead\">\n <Box as=\"tr\">\n {columns.map((column) => (\n <Box as=\"th\" key={column.key} textAlign=\"left\" fontSize=\"xs\" textTransform=\"uppercase\" letterSpacing=\"0.04em\" color=\"text.muted\" px={3} py={2.5} borderBottomWidth=\"1px\" borderColor=\"border.default\" width={column.width}>{column.header}</Box>\n ))}\n </Box>\n </Box>\n <Box as=\"tbody\">\n {rows.map((row) => {\n const key = rowKey(row);\n return (\n <Box as=\"tr\" key={key} tabIndex={onRowClick ? 0 : undefined} cursor={onRowClick ? \"pointer\" : undefined}\n bg={selectedKey === key ? \"brand.50\" : undefined} _hover={onRowClick ? { bg: \"bg.muted\" } : undefined}\n aria-selected={selectedKey === key || undefined}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n onKeyDown={onRowClick ? (event: React.KeyboardEvent) => { if (event.key === \"Enter\" || event.key === \" \") { event.preventDefault(); onRowClick(row); } } : undefined}>\n {columns.map((column) => <Box as=\"td\" key={column.key} fontSize=\"sm\" px={3} py={3} borderBottomWidth=\"1px\" borderColor=\"border.subtle\">{cell(row, column)}</Box>)}\n </Box>\n );\n })}\n </Box>\n </Box>\n </Box>\n <Stack display={{ base: \"flex\", md: \"none\" }} gap={2} p={2} aria-label={label}>\n {rows.map((row) => {\n const key = rowKey(row);\n return (\n <Box key={key} as={onRowClick ? \"button\" : \"div\"} textAlign=\"left\" width=\"100%\" borderWidth=\"1px\" borderColor={selectedKey === key ? \"brand.500\" : \"border.default\"} borderRadius=\"md\" p={3}\n onClick={onRowClick ? () => onRowClick(row) : undefined}>\n {columns.filter((column) => !column.hideOnMobile).map((column, index) => (\n <Flex key={column.key} justify=\"space-between\" gap={3} fontSize=\"sm\" mt={index ? 1 : 0}>\n <Text color=\"text.muted\">{column.header}</Text><Box textAlign=\"right\">{cell(row, column)}</Box>\n </Flex>\n ))}\n </Box>\n );\n })}\n </Stack>\n </>\n );\n })();\n return (\n <Box>\n {toolbar}\n <Box borderWidth=\"1px\" borderColor=\"border.default\" borderRadius=\"lg\" bg=\"surface.panel\" overflow=\"hidden\">{body}</Box>\n {paging && rows.length ? (\n <Flex justify=\"space-between\" align=\"center\" mt={3} fontSize=\"sm\" color=\"text.muted\" gap={3} wrap=\"wrap\">\n <Text>{paging.total !== undefined ? `${paging.total} registro(s)` : `Página ${paging.page + 1}`}</Text>\n <Flex gap={2}>\n <Button size=\"sm\" variant=\"outline\" disabled={paging.page <= 0} onClick={() => paging.onPage(paging.page - 1)}>Anterior</Button>\n <Button size=\"sm\" variant=\"outline\" disabled={paging.hasNext === false || (paging.total !== undefined && (paging.page + 1) * paging.pageSize >= paging.total)} onClick={() => paging.onPage(paging.page + 1)}>Próxima</Button>\n </Flex>\n </Flex>\n ) : null}\n </Box>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Detail side panel: summary, optional tabs, actions in the footer.\n// ---------------------------------------------------------------------------\n\nexport function CoreDetailDrawer({ open, onClose, title, status, tabs, actions, children }: {\n open: boolean; onClose: () => void; title: ReactNode; status?: ReactNode;\n tabs?: Array<{ id: string; label: string; content: ReactNode }>; actions?: ReactNode; children?: ReactNode;\n}) {\n const [tab, setTab] = useState<string | undefined>(tabs?.[0]?.id);\n const active = tabs?.find((item) => item.id === tab) ?? tabs?.[0];\n return (\n <Drawer.Root open={open} onOpenChange={(event: { open: boolean }) => { if (!event.open) onClose(); }} placement=\"end\" size={{ base: \"full\", md: \"md\" }}>\n <Portal>\n <Drawer.Backdrop />\n <Drawer.Positioner>\n <Drawer.Content>\n <Drawer.Header borderBottomWidth=\"1px\" borderColor=\"border.default\">\n <Flex align=\"center\" gap={3} justify=\"space-between\" width=\"100%\">\n <Drawer.Title>{title}</Drawer.Title>\n <Flex align=\"center\" gap={2}>{status}<Drawer.CloseTrigger asChild><IconButton aria-label=\"Fechar\" variant=\"ghost\" size=\"sm\">×</IconButton></Drawer.CloseTrigger></Flex>\n </Flex>\n </Drawer.Header>\n <Drawer.Body>\n {tabs?.length ? (\n <>\n <Flex gap={4} borderBottomWidth=\"1px\" borderColor=\"border.default\" mb={4} role=\"tablist\">\n {tabs.map((item) => (\n <Button key={item.id} role=\"tab\" aria-selected={item.id === active?.id} variant=\"plain\" px={0} borderRadius={0}\n borderBottomWidth=\"2px\" borderColor={item.id === active?.id ? \"brand.500\" : \"transparent\"}\n color={item.id === active?.id ? \"brand.700\" : \"text.muted\"} onClick={() => setTab(item.id)}>{item.label}</Button>\n ))}\n </Flex>\n {active?.content}\n </>\n ) : children}\n </Drawer.Body>\n {actions ? <Drawer.Footer borderTopWidth=\"1px\" borderColor=\"border.default\"><Flex gap={2} wrap=\"wrap\" justify=\"flex-end\" width=\"100%\">{actions}</Flex></Drawer.Footer> : null}\n </Drawer.Content>\n </Drawer.Positioner>\n </Portal>\n </Drawer.Root>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Confirmation for destructive or irreversible actions, with the effect.\n// ---------------------------------------------------------------------------\n\nexport function CoreConfirmDialog({ open, title, effect, confirmLabel = \"Confirmar\", cancelLabel = \"Cancelar\", tone = \"danger\", busy, onConfirm, onClose }: {\n open: boolean; title: string; effect: ReactNode; confirmLabel?: string; cancelLabel?: string; tone?: \"danger\" | \"neutral\"; busy?: boolean;\n onConfirm: () => void; onClose: () => void;\n}) {\n return (\n <Dialog.Root open={open} onOpenChange={(event: { open: boolean }) => { if (!event.open && !busy) onClose(); }} role=\"alertdialog\">\n <Portal>\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content>\n <Dialog.Header><Dialog.Title>{title}</Dialog.Title></Dialog.Header>\n <Dialog.Body><Text color=\"text.primary\">{effect}</Text></Dialog.Body>\n <Dialog.Footer>\n <Button variant=\"outline\" onClick={onClose} disabled={busy}>{cancelLabel}</Button>\n <Button colorPalette={tone === \"danger\" ? \"red\" : \"brand\"} onClick={onConfirm} loading={busy}>{confirmLabel}</Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Portal>\n </Dialog.Root>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Technical details: collapsed, copyable, never on the main surface.\n// ---------------------------------------------------------------------------\n\nexport function CoreTechnicalDetails({ items, label = \"Detalhes técnicos\" }: { items: Array<{ label: string; value?: string | number | null }>; label?: string }) {\n const visible = items.filter((item) => item.value !== undefined && item.value !== null && item.value !== \"\");\n const [copied, setCopied] = useState<string | null>(null);\n if (!visible.length) return null;\n const copy = async (text: string, key: string) => {\n try { await navigator.clipboard?.writeText(text); setCopied(key); } catch { setCopied(null); }\n };\n return (\n <Box as=\"details\" fontSize=\"sm\" color=\"text.muted\" borderWidth=\"1px\" borderColor=\"border.subtle\" borderRadius=\"md\" px={3} py={2}>\n <Box as=\"summary\" cursor=\"pointer\" fontWeight=\"600\">{label}</Box>\n <Stack gap={1} mt={2}>\n {visible.map((item) => (\n <Flex key={item.label} gap={3} justify=\"space-between\" align=\"center\">\n <Text>{item.label}</Text>\n <Flex gap={2} align=\"center\" minW={0}>\n <Text fontFamily=\"mono\" truncate maxW=\"240px\" title={String(item.value)}>{String(item.value)}</Text>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => void copy(String(item.value), item.label)} aria-label={`Copiar ${item.label}`}>{copied === item.label ? \"Copiado\" : \"Copiar\"}</Button>\n </Flex>\n </Flex>\n ))}\n </Stack>\n </Box>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Form section: title, short description, its own save.\n// ---------------------------------------------------------------------------\n\nexport function CoreFormSection({ title, description, children, onSave, saving, saveLabel = \"Salvar\", disabled }: {\n title: string; description?: string; children: ReactNode; onSave?: () => void; saving?: boolean; saveLabel?: string; disabled?: boolean;\n}) {\n return (\n <Box as=\"section\" borderWidth=\"1px\" borderColor=\"border.default\" borderRadius=\"lg\" bg=\"surface.panel\" p={5}>\n <Heading as=\"h2\" size=\"sm\">{title}</Heading>\n {description ? <Text color=\"text.muted\" fontSize=\"sm\" mt={1}>{description}</Text> : null}\n <Stack gap={4} mt={4}>{children}</Stack>\n {onSave ? <Flex justify=\"flex-end\" mt={4}><Button colorPalette=\"brand\" onClick={onSave} loading={saving} disabled={disabled}>{saveLabel}</Button></Flex> : null}\n </Box>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Organization switcher (header): the organization is always explicit.\n// ---------------------------------------------------------------------------\n\nexport function CoreOrganizationSwitcher({ organizations, value, onChange, allLabel, label = \"Organização\" }: {\n organizations: Array<{ id: string; name: string }>; value: string | null; onChange: (id: string | null) => void;\n /** When given, an \"all organizations\" option (value null) is offered. */\n allLabel?: string; label?: string;\n}) {\n if (!organizations.length) return null;\n return (\n <Flex as=\"label\" align=\"center\" gap={2} fontSize=\"sm\" color=\"text.muted\">\n <Text display={{ base: \"none\", md: \"block\" }}>{label}</Text>\n <NativeSelect.Root size=\"sm\" width={{ base: \"160px\", md: \"220px\" }}>\n <NativeSelect.Field aria-label={label} value={value ?? \"\"} onChange={(event) => onChange(event.currentTarget.value || null)}>\n {allLabel ? <option value=\"\">{allLabel}</option> : null}\n {organizations.map((organization) => <option key={organization.id} value={organization.id}>{organization.name}</option>)}\n </NativeSelect.Field>\n <NativeSelect.Indicator />\n </NativeSelect.Root>\n </Flex>\n );\n}\n\n/** Initials for the user avatar (no image needed). */\nexport function coreInitials(name?: string | null): string {\n const parts = String(name ?? \"\").trim().split(/\\s+/).filter(Boolean);\n if (!parts.length) return \"?\";\n return ((parts[0][0] ?? \"\") + (parts.length > 1 ? parts[parts.length - 1][0] ?? \"\" : \"\")).toUpperCase();\n}\n"],"mappings":"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","names":["value","normalized","useState","Box","Heading","Stack","Text","useMutation","useQueryClient","value","value","format","Box","Text","jsx","jsxs","value","format","normalized","Box","Text","useEffect","useMemo","useState","Box","Button","Flex","Heading","Input","NativeSelect","Stack","Text","useState","Box","Button","Flex","Input","Text","useQuery","jsx","jsxs","SearchIcon","ChevronIcon","value","useState","useQuery","Box","Button","Text","Flex","Input","useEffect","useMemo","NativeSelect","Spinner","Text","useQuery","jsx","jsxs","value","useMemo","useQuery","useEffect","NativeSelect","Text","Spinner","Box","Text","value","jsx","jsxs","Box","Text","value","normalized","jsx","jsxs","value","Text","useState","useMemo","useEffect","Box","NativeSelect","normalized","Input","Flex","Heading","Button","Stack","useEffect","useMemo","useRef","useState","Box","Button","Flex","Heading","IconButton","Text","useQuery","useQueryClient","useCallback","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","useState","Box","Button","Text","valueAt","value","jsx","jsx","jsxs","Box","Text","value","normalized","useState","Button","jsx","jsxs","EditIcon","TrashIcon","useQuery","useMemo","useState","Text","Box","Flex","Button","Table","value","Badge","jsx","jsxs","toValue","value","initialFieldValue","initialReactiveValues","isMultiline","resolveReference","Text","ErrorText","Box","NativeSelect","normalized","Textarea","Input","SimpleGrid","useMemo","useState","useEffect","useCallback","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","useMemo","useState","Box","Button","Flex","Heading","Input","SimpleGrid","Stack","Text","useQuery","jsx","jsxs","Box","Heading","Text","useQuery","records","useState","useMemo","Stack","Input","Flex","Button","SimpleGrid","jsx","useEffect","useRef","useState","Badge","Box","Button","Flex","Heading","Input","NativeSelect","Stack","Text","useMutation","useQuery","useQueryClient","normalized","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","Fragment","jsx","useMemo","useState","useRef","Box","Button","Flex","Heading","Input","Text","useMutation","useQuery","useQueryClient","jsx","jsxs","value","useQueryClient","useState","useQuery","useMemo","useRef","useMutation","Box","Heading","Text","Flex","Input","Button","Badge","Box","Button","Flex","Heading","SimpleGrid","Spinner","Stack","Text","useRef","useState","jsx","jsxs","Box","Flex","Heading","Text","Button","Spinner","value","useRef","useState","CoreSummaryCards","SimpleGrid","Badge","Stack","Box","Button","Flex","Heading","Stack","Text","Box","Text","Fragment","jsx","jsxs","normalized","jsx","jsxs","Text","Flex","Box","Stack","Heading","Button","CorePage","useEffect","useMemo","useState","Badge","Box","Button","Flex","Heading","IconButton","Input","Stack","Text","Textarea","useMutation","useQuery","useQueryClient","Fragment","jsx","jsxs","value","useQueryClient","useState","useQuery","useEffect","useMemo","useMutation","Stack","Flex","Box","Heading","Text","Badge","Button","Input","IconButton","Textarea","Badge","Box","Button","Flex","Heading","IconButton","Input","NativeSelect","SimpleGrid","Stack","Text","useState","Fragment","jsx","jsxs","value"]}