@archbase/security-ui 4.1.0 → 4.2.0

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.
Files changed (39) hide show
  1. package/dist/ApiTokenModal.d.ts +17 -0
  2. package/dist/ArchbaseApiTokenView.d.ts +6 -0
  3. package/dist/ArchbaseDualListSelector.d.ts +15 -0
  4. package/dist/ArchbaseSecurityView.d.ts +4 -0
  5. package/dist/GroupModal.d.ts +17 -0
  6. package/dist/PermissionsSelectorModal.d.ts +7 -0
  7. package/dist/ProfileModal.d.ts +17 -0
  8. package/dist/RenderProfileUserItem.d.ts +9 -0
  9. package/dist/UserModal.d.ts +57 -0
  10. package/dist/archbase-security-ui-4.2.0.tgz +0 -0
  11. package/dist/index.d.ts +18 -0
  12. package/dist/index.js +1721 -1247
  13. package/dist/securityDiagnostics/ArchbaseSecurityDiagnosticsView.d.ts +20 -0
  14. package/dist/securityDiagnostics/DiagnosticPrimitives.d.ts +40 -0
  15. package/dist/securityDiagnostics/EffectiveAccessPanel.d.ts +13 -0
  16. package/dist/securityDiagnostics/OverviewItemsDrawer.d.ts +18 -0
  17. package/dist/securityDiagnostics/OverviewPanel.d.ts +6 -0
  18. package/dist/securityDiagnostics/SimulationPanel.d.ts +20 -0
  19. package/dist/securityDiagnostics/explorer/ActionNodePanel.d.ts +19 -0
  20. package/dist/securityDiagnostics/explorer/GroupNodePanel.d.ts +19 -0
  21. package/dist/securityDiagnostics/explorer/SecurityTree.d.ts +19 -0
  22. package/dist/securityDiagnostics/explorer/selection.d.ts +15 -0
  23. package/dist/securityDiagnostics/explorer/situacao.d.ts +12 -0
  24. package/dist/securityDiagnostics/index.d.ts +12 -0
  25. package/dist/securityDiagnostics/types.d.ts +137 -0
  26. package/dist/securityView/SecurityGridPanel.d.ts +22 -0
  27. package/dist/securityView/SecurityRowActions.d.ts +15 -0
  28. package/dist/securityView/SecurityToolbarActions.d.ts +7 -0
  29. package/dist/securityView/UserItem.d.ts +7 -0
  30. package/dist/securityView/columns.d.ts +8 -0
  31. package/dist/securityView/index.d.ts +8 -0
  32. package/dist/securityView/noUserAvatar.d.ts +7 -0
  33. package/dist/securityView/types.d.ts +35 -0
  34. package/dist/securityView/useSecurityEntityActions.d.ts +32 -0
  35. package/package.json +6 -6
  36. package/dist/archbase-security-ui-4.1.0.tgz +0 -0
  37. package/dist/index.cjs +0 -10
  38. package/dist/index.cjs.map +0 -1
  39. package/dist/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/.pnpm/react@19.2.3/node_modules/react/jsx-runtime.js","../src/ProfileModal.tsx","../src/ArchbaseDualListSelector.tsx","../src/RenderProfileUserItem.tsx","../src/UserModal.tsx","../src/GroupModal.tsx","../src/ApiTokenModal.tsx","../src/PermissionsSelectorModal.tsx","../src/securityView/noUserAvatar.ts","../src/securityView/UserItem.tsx","../src/securityView/columns.tsx","../src/securityView/SecurityGridPanel.tsx","../src/securityView/useSecurityEntityActions.ts","../src/securityView/SecurityRowActions.tsx","../src/securityView/SecurityToolbarActions.tsx","../src/ArchbaseSecurityView.tsx","../src/ArchbaseApiTokenView.tsx","../src/securityDiagnostics/DiagnosticPrimitives.tsx","../src/securityDiagnostics/OverviewPanel.tsx","../src/securityDiagnostics/EffectiveAccessPanel.tsx","../src/securityDiagnostics/SimulationPanel.tsx","../src/securityDiagnostics/ArchbaseSecurityDiagnosticsView.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * ProfileModal — modal com dados da conta do usuário.\n * @status stable\n */\nimport React from 'react'\nimport { Grid, ScrollArea, Stack, Modal, Button, Group } from '@mantine/core'\nimport { IArchbaseDataSourceBase } from '@archbase/data'\nimport { getI18nextInstance } from '@archbase/core';\nimport { ProfileDto } from '@archbase/security'\nimport { ArchbaseEdit } from '@archbase/components'\n\nexport interface ProfileModalOptions {\n customContentBefore?: (profile: ProfileDto) => React.ReactNode;\n customContentAfter?: (profile: ProfileDto) => React.ReactNode;\n}\n\nexport interface ProfileModalProps {\n dataSource: IArchbaseDataSourceBase<ProfileDto>\n opened: boolean\n onClickOk: (record?: ProfileDto, result?: any) => void\n onClickCancel: (record?: ProfileDto) => void\n onCustomSave?: (record?: ProfileDto, callback?: Function) => void\n onAfterSave?: (record?: ProfileDto) => void\n options?: ProfileModalOptions\n}\n\nexport const ProfileModal = (props: ProfileModalProps) => {\n const options = {...(props.options ?? {}) }\n \n const handleSave = () => {\n if (props.onCustomSave) {\n props.onCustomSave(props.dataSource.getCurrentRecord()!, (success: boolean) => {\n if (success && props.onAfterSave) {\n props.onAfterSave(props.dataSource.getCurrentRecord()!);\n }\n props.onClickOk(props.dataSource.getCurrentRecord()!, success);\n });\n } else {\n props.onClickOk(props.dataSource.getCurrentRecord()!, true);\n }\n };\n\n const handleCancel = () => {\n props.onClickCancel(props.dataSource.getCurrentRecord()!);\n };\n \n return (\n <Modal\n opened={props.opened}\n onClose={handleCancel}\n title={getI18nextInstance().t('archbase:Perfil')}\n size=\"60%\"\n styles={{content: {maxWidth: 1000}}}\n >\n <ScrollArea style={{ height: '460px' }}>\n <Stack w={\"98%\"}>\n {options?.customContentBefore && options.customContentBefore(props.dataSource.getCurrentRecord()!)}\n <Grid>\n <Grid.Col span={{ base: 12, md: 12, lg: 12 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Nome do perfil')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe o nome do perfil')}`}\n dataSource={props.dataSource}\n dataField=\"name\"\n />\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 12, lg: 12 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Descrição do perfil')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe a descrição do perfil')}`}\n dataSource={props.dataSource}\n dataField=\"description\"\n />\n </Grid.Col>\n </Grid>\n {options?.customContentAfter && options.customContentAfter(props.dataSource.getCurrentRecord()!)}\n \n <Group justify=\"flex-end\" mt=\"md\">\n <Button variant=\"default\" onClick={handleCancel}>\n {getI18nextInstance().t('archbase:Cancelar')}\n </Button>\n <Button onClick={handleSave}>\n {getI18nextInstance().t('archbase:Salvar')}\n </Button>\n </Group>\n </Stack>\n </ScrollArea>\n </Modal>\n )\n}\n","/**\n * ArchbaseDualListSelector — duplo painel para mover itens entre permissões/roles.\n * @status stable\n */\nimport React, { useState, useEffect, useCallback } from 'react'\nimport {\n Button,\n Group,\n Box,\n Text,\n List,\n Checkbox,\n Stack,\n ActionIcon,\n ScrollArea,\n Paper,\n Tooltip\n} from '@mantine/core'\nimport { IconArrowLeft, IconArrowRight } from '@tabler/icons-react'\nimport { ArchbaseDataSource } from '@archbase/data'\nimport { useArchbaseV1V2Compatibility } from '@archbase/data'\nimport { useArchbaseDataSourceListener } from '@archbase/data'\n\n// Definindo props com genéricos para os tipos de item das duas listas\nexport interface ArchbaseDualListSelectorProps<T, U> {\n availableItemsDS: ArchbaseDataSource<T, any>\n assignedItemsDS: ArchbaseDataSource<U, any>\n idFieldAvailable: string | ((item: T) => string)\n labelFieldAvailable: string | ((item: T) => string)\n idFieldAssigned: string | ((item: U) => string)\n labelFieldAssigned: string | ((item: U) => string)\n handleCreateAssociationObject: (item: T) => U\n width?: string\n height?: string\n titleAvailable?: string\n titleAssigned?: string\n}\n\nexport function ArchbaseDualListSelector<T, U>({\n availableItemsDS,\n assignedItemsDS,\n idFieldAvailable,\n labelFieldAvailable,\n idFieldAssigned,\n labelFieldAssigned,\n handleCreateAssociationObject,\n width = '400px',\n height = '200px',\n titleAvailable = 'Disponíveis',\n titleAssigned = 'Selecionados'\n}: ArchbaseDualListSelectorProps<T, U>) {\n // 🔄 MIGRAÇÃO V1/V2: Hooks de compatibilidade para ambos DataSources\n const availableV1V2 = useArchbaseV1V2Compatibility<T[]>(\n 'ArchbaseDualListSelector-Available',\n availableItemsDS,\n undefined,\n []\n );\n\n const assignedV1V2 = useArchbaseV1V2Compatibility<U[]>(\n 'ArchbaseDualListSelector-Assigned', \n assignedItemsDS,\n undefined,\n []\n );\n\n const [availableItems, setAvailableItems] = useState<T[]>([])\n const [assignedItems, setAssignedItems] = useState<U[]>([])\n const [selectedAvailable, setSelectedAvailable] = useState<string[]>([])\n const [selectedAssigned, setSelectedAssigned] = useState<string[]>([])\n\n // 🔄 MIGRAÇÃO V1/V2: Função para carregar dados condicionalmente\n const loadItemsData = useCallback(() => {\n if (availableItemsDS) {\n setAvailableItems(availableItemsDS.browseRecords())\n }\n if (assignedItemsDS) {\n setAssignedItems(assignedItemsDS.browseRecords())\n }\n }, [availableItemsDS, assignedItemsDS]);\n\n // 🔄 MIGRAÇÃO V1/V2: Listeners para ambos DataSources\n useArchbaseDataSourceListener<T, any>({\n dataSource: availableItemsDS,\n listener: () => loadItemsData()\n });\n\n useArchbaseDataSourceListener<U, any>({\n dataSource: assignedItemsDS,\n listener: () => loadItemsData()\n });\n\n useEffect(() => {\n loadItemsData();\n }, [loadItemsData])\n\n const getItemId = (item: any, field: string | ((item: any) => string)): string =>\n typeof field === 'function' ? field(item) : item[field]\n\n const getItemLabel = (item: any, field: string | ((item: any) => string)): string =>\n typeof field === 'function' ? field(item) : item[field]\n\n const handleSelect = (setId: React.Dispatch<React.SetStateAction<string[]>>, id: string) => {\n setId((prev) => (prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id]))\n }\n\n const handleAdd = () => {\n selectedAvailable.forEach((id) => {\n const originalItem = availableItems.find((item) => getItemId(item, idFieldAvailable) === id)\n if (originalItem) {\n const newItem = handleCreateAssociationObject(originalItem)\n \n // 🔄 MIGRAÇÃO V1/V2: Usar operações condicionais baseadas na versão\n if (assignedV1V2.isDataSourceV2) {\n // Para DataSource V2: usar métodos otimizados\n assignedItemsDS.insert(newItem)\n assignedItemsDS.save()\n } else {\n // Para DataSource V1: comportamento original + forceUpdate\n assignedItemsDS.insert(newItem)\n assignedItemsDS.save()\n assignedV1V2.v1State.forceUpdate()\n }\n }\n })\n setSelectedAvailable([])\n }\n\n const handleRemove = () => {\n selectedAssigned.forEach((id) => {\n const record = assignedItems.find((item) => getItemId(item, idFieldAssigned) === id)\n if (record) {\n // Preparando o objeto de critério dinâmico\n const criteria =\n typeof idFieldAssigned === 'function'\n ? { customId: idFieldAssigned(record) }\n : { [idFieldAssigned]: id }\n \n // 🔄 MIGRAÇÃO V1/V2: Usar operações condicionais baseadas na versão\n if (assignedV1V2.isDataSourceV2) {\n // Para DataSource V2: usar métodos otimizados\n assignedItemsDS.remove(() => assignedItemsDS.locate(criteria))\n } else {\n // Para DataSource V1: comportamento original + forceUpdate\n assignedItemsDS.remove(() => assignedItemsDS.locate(criteria))\n assignedV1V2.v1State.forceUpdate()\n }\n }\n })\n setSelectedAssigned([])\n }\n\n return (\n <Paper withBorder style={{ display: 'flex', width, height }}>\n <Box style={{ minWidth: '44%', minHeight: height }}>\n <Text>{titleAvailable}</Text>\n <List\n spacing=\"xs\"\n size=\"sm\"\n center\n listStyleType=\"none\"\n style={{\n margin: '6px',\n overflowY: 'auto',\n overflowX: 'hidden',\n height: 'calc(100% - 32px)'\n }}\n >\n {availableItems.map((item) => (\n <List.Item key={getItemId(item, idFieldAvailable)}>\n <Checkbox\n label={getItemLabel(item, labelFieldAvailable)}\n checked={selectedAvailable.includes(getItemId(item, idFieldAvailable))}\n onChange={() =>\n handleSelect(setSelectedAvailable, getItemId(item, idFieldAvailable))\n }\n disabled={assignedItems.some(\n (g) => getItemId(g, idFieldAssigned) === getItemId(item, idFieldAvailable)\n )}\n />\n </List.Item>\n ))}\n </List>\n </Box>\n <Stack gap={5} style={{ minWidth: '10%' }} justify=\"center\" align=\"center\">\n <Tooltip label=\"Adicionar\">\n <ActionIcon onClick={handleAdd} disabled={!selectedAvailable.length}>\n <IconArrowRight />\n </ActionIcon>\n </Tooltip>\n <Tooltip label=\"Remover\">\n <ActionIcon onClick={handleRemove} disabled={!selectedAssigned.length}>\n <IconArrowLeft />\n </ActionIcon>\n </Tooltip>\n </Stack>\n <Box style={{ minWidth: '44%', minHeight: height }}>\n <Text>{titleAssigned}</Text>\n <List\n spacing=\"xs\"\n size=\"sm\"\n center\n listStyleType=\"none\"\n style={{\n margin: '6px',\n overflowY: 'auto',\n overflowX: 'hidden',\n height: 'calc(100% - 32px)'\n }}\n >\n {assignedItems.map((item) => (\n <List.Item key={getItemId(item, idFieldAssigned)}>\n <Checkbox\n label={getItemLabel(item, labelFieldAssigned)}\n checked={selectedAssigned.includes(getItemId(item, idFieldAssigned))}\n onChange={() => handleSelect(setSelectedAssigned, getItemId(item, idFieldAssigned))}\n />\n </List.Item>\n ))}\n </List>\n </Box>\n </Paper>\n )\n}\n","/**\n * RenderProfileUserItem — item de lista para usuário (usado em modais/profile).\n * @status stable\n */\nimport React from 'react'\nimport { Flex, Space, Text } from '@mantine/core'\nimport { forwardRef } from 'react'\nimport { ProfileDto } from '@archbase/security'\n\nexport interface RenderProfileUserItemProps extends React.ComponentPropsWithoutRef<'div'> {\n image: string\n label: string\n description: string\n origin: ProfileDto\n}\n\nexport const RenderProfileUserItem = forwardRef<HTMLDivElement, RenderProfileUserItemProps>(\n ({ image, label, description, origin, ...others }: RenderProfileUserItemProps, ref) => (\n <div ref={ref} {...others}>\n <Flex>\n <Text size=\"sm\" fw={600}>\n {origin ? origin.name:''}\n </Text>\n <Space w=\"lg\" />\n </Flex>\n </div>\n )\n)\n","/**\n * UserModal — modal de cadastro/edição de usuários com roles e ações.\n * @status stable\n */\nimport { ARCHBASE_IOC_API_TYPE, getI18nextInstance, builder, emit } from '@archbase/core'\nimport type { ArchbasePasswordPolicy } from '@archbase/core'\nimport { resolveArchbasePasswordPolicy, validateArchbasePassword } from '@archbase/core'\nimport { IArchbaseDataSourceBase, ArchbaseDataSource } from '@archbase/data'\nimport { ArchbaseCheckbox, ArchbaseEdit, ArchbaseSelect, ArchbasePasswordEdit, ArchbaseAvatarEdit } from '@archbase/components'\nimport { useArchbaseRemoteDataSource, useArchbaseRemoteServiceApi } from '@archbase/data'\nimport { ArchbaseNotifications } from '@archbase/components'\nimport { Grid, Group, Input, ScrollArea, Space, Stack, Text, Modal, Button } from '@mantine/core'\nimport { useArchbaseTranslation } from '@archbase/core';\nimport React, { useEffect, useState } from 'react'\nimport { ArchbaseDualListSelector } from './ArchbaseDualListSelector'\nimport { ArchbaseGroupService } from '@archbase/security'\nimport { ArchbaseProfileService } from '@archbase/security'\nimport { RenderProfileUserItem } from './RenderProfileUserItem'\nimport { GroupDto, ProfileDto, UserDto, UserGroupDto } from '@archbase/security'\n\nexport interface UserModalOptions {\n // Campos de identificação\n showNickname?: boolean; // nickname - Apelido\n\n // Campos de perfil e grupos\n showProfile?: boolean; // profile - Perfil do usuário\n showGroups?: boolean; // groups - Grupos (DualListSelector)\n\n // Campos de configuração de senha\n showChangePasswordOnNextLogin?: boolean; // changePasswordOnNextLogin\n showAllowPasswordChange?: boolean; // allowPasswordChange\n showPasswordNeverExpires?: boolean; // passwordNeverExpires\n /** Exibe, somente leitura, a data da última troca de senha (passwordChangedAt) */\n showPasswordChangedAt?: boolean;\n /**\n * Critérios de senha forte exigidos no cadastro.\n * `true` aplica a política padrão do Archbase; um objeto permite ajustar cada critério.\n * Quando ausente a senha é apenas obrigatória na inclusão (comportamento original).\n */\n passwordPolicy?: ArchbasePasswordPolicy | boolean;\n /** Indicador se a lista de critérios deve ser exibida abaixo do campo senha. Padrão: true */\n showPasswordRequirements?: boolean;\n /**\n * Inclui login, e-mail e nome do usuário na lista de termos proibidos dentro da senha.\n * Só tem efeito quando `passwordPolicy` está ativa. Padrão: true\n */\n forbidPersonalDataInPassword?: boolean;\n\n // Campos de status da conta\n showAccountConfigLabel?: boolean;\n showAccountDeactivated?: boolean; // accountDeactivated\n showAccountLocked?: boolean; // accountLocked\n showIsAdministrator?: boolean;\n\n // Configurações de campos obrigatórios\n requiredNickname?: boolean;\n\n /** Tamanho máximo da imagem do avatar em kilobytes */\n avatarMaxSizeKB?: number;\n /** Qualidade da compressão da imagem do avatar (0 a 1), sendo 1 melhor qualidade */\n avatarImageQuality?: number;\n /** Maior dimensão (px) do avatar final — a imagem é redimensionada automaticamente. 0 mantém a resolução original */\n avatarMaxOutputSizePx?: number;\n\n /** Configuração de permissão de edição de campos */\n allowEditEmail?: boolean;\n\n customContentBefore?: (user: UserDto) => React.ReactNode;\n\n customContentAfter?: (user: UserDto) => React.ReactNode;\n\n /** Nome do perfil padrão que um novo usuário já virá pré-preenchido */\n userDefaultProfile?: string;\n /** Nome dos grupos padrões que um novo usuário já virá pré-preenchido */\n userDefaultGroups?: string[];\n}\n\nexport const defaultUserModalOptions: UserModalOptions = {\n // Campos de identificação\n showNickname: true,\n\n // Campos de perfil e grupos\n showProfile: true,\n showGroups: true,\n\n // Campos de configuração de senha\n showChangePasswordOnNextLogin: true,\n showAllowPasswordChange: true,\n showPasswordNeverExpires: true,\n showPasswordChangedAt: true,\n showPasswordRequirements: true,\n forbidPersonalDataInPassword: true,\n\n // Campos de status da conta\n showAccountConfigLabel: true,\n showAccountDeactivated: true,\n showAccountLocked: true,\n showIsAdministrator: true,\n\n // Configurações de campos obrigatórios\n requiredNickname: true,\n\n avatarMaxSizeKB: 2000,\n avatarImageQuality: 1,\n avatarMaxOutputSizePx: 512,\n\n allowEditEmail: true,\n}\n\nexport interface UserModalProps {\n dataSource: IArchbaseDataSourceBase<UserDto>\n opened: boolean\n onClickOk: (record?: UserDto, result?: any) => void\n onClickCancel: (record?: UserDto) => void\n onCustomSave?: (record?: UserDto, callback?: Function) => void\n onAfterSave?: (record?: UserDto) => void\n options?: UserModalOptions\n}\n\nexport const UserModal = (props: UserModalProps) => {\n const [passwordError, setPasswordError] = useState(\"\")\n const options = { ...defaultUserModalOptions, ...(props.options ?? {}) }\n\n // Somente leitura: o backend atualiza passwordChangedAt a cada troca de senha.\n const rawPasswordChangedAt = props.dataSource.getFieldValue('passwordChangedAt') as string | undefined\n const parsedPasswordChangedAt = rawPasswordChangedAt ? new Date(rawPasswordChangedAt) : undefined\n const passwordChangedAt =\n parsedPasswordChangedAt && !Number.isNaN(parsedPasswordChangedAt.getTime())\n ? parsedPasswordChangedAt.toLocaleString()\n : undefined\n\n // Política de senha forte: quando ativa, acrescenta os dados pessoais do usuário à blocklist.\n const basePasswordPolicy = resolveArchbasePasswordPolicy(options.passwordPolicy)\n const personalTerms = options.forbidPersonalDataInPassword\n ? (['name', 'nickname', 'email'] as const)\n .map((field) => {\n const term = props.dataSource.getFieldValue(field) as string | undefined\n // Do e-mail interessa apenas a parte local: o domínio é comum a todos os usuários.\n return field === 'email' && term ? term.split('@')[0] : term\n })\n .filter((term): term is string => typeof term === 'string' && term.trim().length >= 3)\n : []\n const passwordPolicy: ArchbasePasswordPolicy | undefined = basePasswordPolicy\n ? {\n ...basePasswordPolicy,\n blocklist: [...(basePasswordPolicy.blocklist ?? []), ...personalTerms],\n }\n : undefined\n\n const groupApi = useArchbaseRemoteServiceApi<ArchbaseGroupService>(ARCHBASE_IOC_API_TYPE.Group)\n const { dataSource: dsGroups } = useArchbaseRemoteDataSource<GroupDto, string>({\n name: `dsGroups`,\n service: groupApi,\n pageSize: 9999,\n loadOnStart: true,\n sort: ['name:asc'],\n onError: (error, origin) => {\n ArchbaseNotifications.showError(getI18nextInstance().t('archbase:WARNING'), error, origin)\n }\n })\n console.log(\"versão 12/05/2026\")\n\n const profileApi = useArchbaseRemoteServiceApi<ArchbaseProfileService>(ARCHBASE_IOC_API_TYPE.Profile)\n const { dataSource: dsProfiles } = useArchbaseRemoteDataSource<ProfileDto, string>({\n name: `dsProfiles`,\n service: profileApi,\n pageSize: 9999,\n loadOnStart: true,\n sort: ['name:asc'],\n onError: (error, origin) => {\n ArchbaseNotifications.showError(getI18nextInstance().t('archbase:WARNING'), error, origin)\n }\n })\n\n useEffect(() => {\n setPasswordError(\"\")\n }, [props.dataSource.getFieldValue(\"password\")])\n\n const setDefaultValues = async () => {\n if (!props.dataSource.isInserting()) return;\n\n if (options.userDefaultProfile) {\n const filter = emit(builder.eq(\"name\", options.userDefaultProfile))\n const result = await profileApi.findAllWithFilter(filter, 0, 1)\n if (result && result.content.length > 0) {\n props.dataSource.setFieldValue(\"profile\", result.content[0])\n }\n }\n if (options.userDefaultGroups) {\n const filter = emit(builder.in(\"name\", options.userDefaultGroups))\n const result = await groupApi.findAllWithFilter(filter, 0, 500)\n if (result && result.content.length > 0) {\n props.dataSource.setFieldValue(\"groups\", result.content.map(group => UserGroupDto.newInstance(group)))\n }\n }\n }\n\n useEffect(() => {\n if (props.opened) {\n setDefaultValues()\n }\n }, [props.opened])\n\n const handleSave = () => {\n const currentRecord = props.dataSource.getCurrentRecord()!;\n if (!currentRecord.password && props.dataSource.isInserting()) {\n setPasswordError(getI18nextInstance().t('archbase:Informe a senha'))\n return;\n }\n\n // Na edição a senha em branco significa \"manter a senha atual\", então não é validada.\n if (passwordPolicy && currentRecord.password) {\n const result = validateArchbasePassword(currentRecord.password, passwordPolicy)\n if (!result.valid) {\n setPasswordError(result.error!)\n return;\n }\n }\n\n if (props.onCustomSave) {\n props.onCustomSave(currentRecord, (success: boolean) => {\n if (success && props.onAfterSave) {\n props.onAfterSave(currentRecord);\n }\n props.onClickOk(currentRecord, success);\n });\n } else {\n props.onClickOk(currentRecord, true);\n }\n };\n\n const handleCancel = () => {\n props.onClickCancel(props.dataSource.getCurrentRecord()!);\n };\n\n return (\n <Modal\n opened={props.opened}\n onClose={handleCancel}\n title={getI18nextInstance().t('archbase:Usuário')}\n size=\"80%\"\n styles={{ content: { maxWidth: 1000 } }}\n >\n <ScrollArea style={{ height: '500px' }}>\n <Stack w={\"98%\"}>\n {options?.customContentBefore && (\n <>\n {options.customContentBefore(props.dataSource.getCurrentRecord()!)}\n </>\n )}\n <Grid>\n <Grid.Col span={{ base: 12, md: 6, lg: 6 }}>\n <Group>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Nome completo')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe o nome completo do usuário')}`}\n dataSource={props.dataSource}\n dataField=\"name\"\n required\n width={'calc(100% - 208px)'}\n />\n {options.showNickname && (\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Apelido')}`}\n placeholder={`${getI18nextInstance().t('archbase:Apelido')}`}\n dataSource={props.dataSource}\n dataField=\"nickname\"\n required={options.requiredNickname}\n />\n )}\n </Group>\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 6, lg: 6 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Descrição do usuário')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe a descrição do usuário')}`}\n dataSource={props.dataSource}\n dataField=\"description\"\n required\n />\n </Grid.Col>\n </Grid>\n <Grid>\n <Grid.Col span={{ base: 12, md: 6, lg: 6 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:E-mail')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe o e-mail do usuário')}`}\n dataSource={props.dataSource}\n onChangeValue={(value) => props.dataSource.setFieldValue(\"userName\", value)}\n dataField=\"email\"\n readOnly={props.dataSource.isEditing() ? !options.allowEditEmail : false}\n required\n />\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 6, lg: 6 }}>\n <ArchbasePasswordEdit\n label={`${getI18nextInstance().t('archbase:Senha usuário')}`}\n dataSource={props.dataSource}\n dataField=\"password\"\n error={passwordError}\n required={props.dataSource.getFieldValue(\"isNewUser\")}\n passwordPolicy={passwordPolicy}\n showPasswordRequirements={options.showPasswordRequirements}\n />\n </Grid.Col>\n </Grid>\n <Grid>\n {options.showProfile && (\n <Grid.Col span={{ base: 12, md: 6, lg: 6 }}>\n <ArchbaseSelect<UserDto, string, ProfileDto>\n label={`${getI18nextInstance().t('archbase:Perfil do usuário')}`}\n dataSource={props.dataSource}\n dataField=\"profile\"\n options={dsProfiles}\n allowDeselect={true}\n optionsLabelField=\"nome\"\n itemComponent={RenderProfileUserItem}\n getOptionLabel={(option: ProfileDto) => option.name}\n getOptionValue={(option: ProfileDto) => option.id}\n />\n </Grid.Col>\n )}\n </Grid>\n\n <Grid>\n <Grid.Col span={{ base: 12 }}>\n {options.showAccountConfigLabel && (<Text fz={14} fw={500}>Informe</Text>)}\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 4, lg: 4 }}>\n <Stack gap={'lg'}>\n {options.showChangePasswordOnNextLogin && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"changePasswordOnNextLogin\"\n label={`${getI18nextInstance().t('archbase:Deve alterar senha próximo login ?')}`}\n />\n </Input.Wrapper>\n )}\n {options.showAllowPasswordChange && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"allowPasswordChange\"\n label={`${getI18nextInstance().t('archbase:Pode alterar a senha ?')}`}\n />\n </Input.Wrapper>\n )}\n {options.showPasswordNeverExpires && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"passwordNeverExpires\"\n label={`${getI18nextInstance().t('archbase:Senha nunca expira ?')}`}\n />\n <Text fz={12} c=\"dimmed\">\n {getI18nextInstance().t(\n 'archbase:Desmarcado, a senha expira conforme a política de validade do servidor. Para exigir a troca agora, use \"Deve alterar senha próximo login\".'\n )}\n </Text>\n </Input.Wrapper>\n )}\n {options.showPasswordChangedAt && passwordChangedAt && (\n <Text fz={12} c=\"dimmed\">\n {`${getI18nextInstance().t('archbase:Última troca de senha')}: ${passwordChangedAt}`}\n </Text>\n )}\n </Stack>\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 4, lg: 4 }}>\n <Stack gap=\"lg\">\n {options.showAccountDeactivated && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"accountDeactivated\"\n label={`${getI18nextInstance().t('archbase:Conta desativada ?')}`}\n />\n </Input.Wrapper>\n )}\n {options.showAccountLocked && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"accountLocked\"\n label={`${getI18nextInstance().t('archbase:Conta bloqueada ?')}`}\n />\n </Input.Wrapper>\n )}\n {options.showIsAdministrator && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"isAdministrator\"\n label={`${getI18nextInstance().t('archbase:Administrador ?')}`}\n />\n </Input.Wrapper>\n )}\n </Stack>\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 4, lg: 4 }}>\n <Stack gap=\"lg\">\n <ArchbaseAvatarEdit\n label={getI18nextInstance().t('archbase:Foto do usuário')}\n dataSource={props.dataSource}\n dataField=\"avatar\"\n width={120}\n height={120}\n maxSizeKB={options.avatarMaxSizeKB}\n imageQuality={options.avatarImageQuality}\n maxOutputSizePx={options.avatarMaxOutputSizePx}\n />\n </Stack>\n </Grid.Col>\n </Grid>\n\n {options.showGroups && (\n <Grid>\n <Grid.Col span={{ base: 12 }}>\n <Text fz={14} fw={500}>Grupos</Text>\n </Grid.Col>\n <Grid.Col span={{ base: 12 }}>\n <ArchbaseDualListSelector<GroupDto, UserGroupDto>\n titleAvailable={getI18nextInstance().t('archbase:Disponíveis')}\n titleAssigned={getI18nextInstance().t('archbase:Selecionados')}\n assignedItemsDS={\n new ArchbaseDataSource('dsDualList', {\n records: props.dataSource.getFieldValue('groups'),\n grandTotalRecords: props.dataSource.getFieldValue('groups').length,\n currentPage: 0,\n totalPages: 0,\n pageSize: 999999\n })\n }\n width=\"100%\"\n height=\"200px\"\n availableItemsDS={dsGroups}\n handleCreateAssociationObject={(group: GroupDto) => {\n return UserGroupDto.newInstance(group)\n }}\n idFieldAssigned={(item: UserGroupDto) => (item && item.group ? item.group.id : '')}\n idFieldAvailable={'id'}\n labelFieldAssigned={(item: UserGroupDto) => (item && item.group ? item.group.name : '')}\n labelFieldAvailable={'name'}\n />\n </Grid.Col>\n </Grid>\n )}\n {options?.customContentAfter && (\n <>\n {options.customContentAfter(props.dataSource.getCurrentRecord()!)}\n </>\n )}\n <Space h={'12px'} />\n </Stack>\n </ScrollArea>\n \n <Group justify=\"flex-end\" mt=\"md\">\n <Button variant=\"default\" onClick={handleCancel}>\n {getI18nextInstance().t('archbase:Cancelar')}\n </Button>\n <Button onClick={handleSave}>\n {getI18nextInstance().t('archbase:Salvar')}\n </Button>\n </Group>\n </Modal>\n )\n}\n","/**\n * GroupModal — modal para gerenciar grupos/roles de usuários.\n * @status stable\n */\nimport React from 'react'\nimport { Grid, ScrollArea, Stack, Modal, Button, Group } from '@mantine/core'\nimport { getI18nextInstance } from '@archbase/core';\nimport { GroupDto } from '@archbase/security'\nimport { IArchbaseDataSourceBase } from '@archbase/data'\nimport { ArchbaseEdit } from '@archbase/components'\n\nexport interface GroupModalOptions {\n customContentBefore?: (group: GroupDto) => React.ReactNode;\n customContentAfter?: (group: GroupDto) => React.ReactNode;\n}\n\nexport interface GroupModalProps {\n dataSource: IArchbaseDataSourceBase<GroupDto>\n opened: boolean\n onClickOk: (record?: GroupDto, result?: any) => void\n onClickCancel: (record?: GroupDto) => void\n onCustomSave?: (record?: GroupDto, callback?: Function) => void\n onAfterSave?: (record?: GroupDto) => void\n options?: GroupModalOptions\n}\n\nexport const GroupModal = (props: GroupModalProps) => {\n const options = {...(props.options ?? {}) }\n \n const handleSave = () => {\n if (props.onCustomSave) {\n props.onCustomSave(props.dataSource.getCurrentRecord()!, (success: boolean) => {\n if (success && props.onAfterSave) {\n props.onAfterSave(props.dataSource.getCurrentRecord()!);\n }\n props.onClickOk(props.dataSource.getCurrentRecord()!, success);\n });\n } else {\n props.onClickOk(props.dataSource.getCurrentRecord()!, true);\n }\n };\n\n const handleCancel = () => {\n props.onClickCancel(props.dataSource.getCurrentRecord()!);\n };\n \n return (\n <Modal\n opened={props.opened}\n onClose={handleCancel}\n title={getI18nextInstance().t('archbase:Grupo')}\n size=\"60%\"\n styles={{content: {maxWidth: 1000}}}\n >\n <ScrollArea style={{ height: '460px' }}>\n <Stack w={\"98%\"}>\n {options?.customContentBefore && options.customContentBefore(props.dataSource.getCurrentRecord()!)}\n <Grid>\n <Grid.Col span={{ base: 12 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Nome do grupo')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe o nome do grupo')}`}\n dataSource={props.dataSource}\n dataField=\"name\"\n />\n </Grid.Col>\n <Grid.Col span={{ base: 12 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Descrição do grupo')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe a descrição do grupo')}`}\n dataSource={props.dataSource}\n dataField=\"description\"\n />\n </Grid.Col>\n </Grid>\n {options?.customContentAfter && options.customContentAfter(props.dataSource.getCurrentRecord()!)}\n \n <Group justify=\"flex-end\" mt=\"md\">\n <Button variant=\"default\" onClick={handleCancel}>\n {getI18nextInstance().t('archbase:Cancelar')}\n </Button>\n <Button onClick={handleSave}>\n {getI18nextInstance().t('archbase:Salvar')}\n </Button>\n </Group>\n </Stack>\n </ScrollArea>\n </Modal>\n )\n}\n","/**\n * ApiTokenModal — modal para criação/edição de tokens de API.\n * @status stable\n */\nimport { ArchbaseDataSource } from '@archbase/data';\nimport { ArchbaseAsyncSelect, ArchbaseEdit, OptionsResult } from '@archbase/components';\nimport { useArchbaseRemoteServiceApi } from '@archbase/data';\nimport { Page } from '@archbase/data';\nimport { Modal } from '@mantine/core';\nimport { Grid, Group, Image, ScrollArea, Text, Button } from '@mantine/core';\nimport { DateTimePicker, DateValue } from '@mantine/dates';\nimport { useFocusTrap } from '@mantine/hooks';\nimport { ARCHBASE_IOC_API_TYPE, builder, convertDateToISOString, emit, processErrorMessage, isBase64Validate, getI18nextInstance } from '@archbase/core';\nimport { useArchbaseV1V2Compatibility } from '@archbase/data';\nimport { useArchbaseTranslation } from '@archbase/core';\nimport React, { useState } from 'react';\nimport { NO_USER } from './ArchbaseSecurityView';\nimport { ArchbaseUserService } from '@archbase/security';\nimport { ApiTokenDto, GroupDto, UserDto } from '@archbase/security';\n\nexport const UserSelectItem = ({ image, label, description, ...others }) => (\n\t<div {...others}>\n\t\t<Group grow>\n\t\t\t<img style={{maxWidth:'32px'}} src={image} />\n\t\t\t<div>\n\t\t\t\t<Text size=\"sm\">{label}</Text>\n\t\t\t\t<Text size=\"xs\" opacity={0.65}>\n\t\t\t\t\t{description}\n\t\t\t\t</Text>\n\t\t\t</div>\n\t\t</Group>\n\t</div>\n);\n\nexport interface ApiTokenModalProps {\n\tdataSource: ArchbaseDataSource<ApiTokenDto, string>;\n\topened: boolean;\n\tonClickOk: (record?: ApiTokenDto, result?: any) => void;\n\tonClickCancel: (record?: ApiTokenDto) => void;\n\tonCustomSave?: (record?: ApiTokenDto, callback?: Function) => void;\n\tonAfterSave?: (record?: ApiTokenDto) => void;\n}\n\nexport const ApiTokenModal = (props: ApiTokenModalProps) => {\n\tconst focusTrapRef = useFocusTrap();\n\tconst [value, setValue] = useState<DateValue | undefined>();\n\tconst userApi = useArchbaseRemoteServiceApi<ArchbaseUserService>(ARCHBASE_IOC_API_TYPE.User);\n\n\t// 🔄 MIGRAÇÃO V1/V2: Hook de compatibilidade para ApiTokenModal\n\tconst v1v2Compatibility = useArchbaseV1V2Compatibility<string>(\n\t\t'ApiTokenModal',\n\t\tprops.dataSource,\n\t\t'expirationDate',\n\t\t''\n\t);\n\n\t// 🔄 MIGRAÇÃO V1/V2: Debug info para desenvolvimento\n\tif (process.env.NODE_ENV === 'development' && props.dataSource) {\n\t\tconsole.log(`[ApiTokenModal] DataSource version: ${v1v2Compatibility.dataSourceVersion}`);\n\t}\n\n\tconst handleChange = (value: DateValue) => {\n\t\tif (!value) {\n\t\t\t// 🔄 MIGRAÇÃO V1/V2: Usar handleValueChange do padrão de compatibilidade\n\t\t\tv1v2Compatibility.handleValueChange(undefined);\n\t\t} else {\n\t\t\t// Convert string to Date if needed before calling convertDateToISOString\n\t\t\tconst dateValue = typeof value === 'string' ? new Date(value) : value;\n\t\t\tconst isoString = convertDateToISOString(dateValue);\n\t\t\t// 🔄 MIGRAÇÃO V1/V2: Usar handleValueChange do padrão de compatibilidade\n\t\t\tv1v2Compatibility.handleValueChange(isoString);\n\t\t}\n\t\tsetValue(value);\n\t};\n\n\tconst loadRemoteUsers = async (page: number, value: string): Promise<OptionsResult<UserDto>> => {\n\t\treturn new Promise<OptionsResult<UserDto>>(async (resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst filter = emit(builder.or(builder.eq('name', `^*${value.trim()}*`)));\n\t\t\t\tconst result: Page<UserDto> = await userApi.findAllWithFilter(filter, page, 20);\n\t\t\t\tresolve({\n\t\t\t\t\toptions: result.content,\n\t\t\t\t\tpage: result.pageable!.pageNumber,\n\t\t\t\t\ttotalPages: result.totalPages,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\treject(processErrorMessage(error));\n\t\t\t}\n\t\t});\n\t};\n\n\tconst handleSave = () => {\n\t\tif (props.onCustomSave) {\n\t\t\tprops.onCustomSave(props.dataSource.current, (success: boolean) => {\n\t\t\t\tif (success && props.onAfterSave) {\n\t\t\t\t\tprops.onAfterSave(props.dataSource.current);\n\t\t\t\t}\n\t\t\t\tprops.onClickOk(props.dataSource.current, success);\n\t\t\t});\n\t\t} else {\n\t\t\tprops.onClickOk(props.dataSource.current, true);\n\t\t}\n\t};\n\n\tconst handleCancel = () => {\n\t\tprops.onClickCancel(props.dataSource.current);\n\t};\n\n\treturn (\n\t\t<Modal\n\t\t\topened={props.opened}\n\t\t\tonClose={handleCancel}\n\t\t\ttitle={getI18nextInstance().t('archbase:Token de API')}\n\t\t\tsize=\"50%\"\n\t\t>\n\t\t\t<ScrollArea style={{ height: '300px' }}>\n\t\t\t\t<ArchbaseEdit\n\t\t\t\t\tlabel={`${getI18nextInstance().t('archbase:Nome do token')}`}\n\t\t\t\t\tplaceholder={`${getI18nextInstance().t('archbase:Informe o nome do token')}`}\n\t\t\t\t\tdataSource={props.dataSource}\n\t\t\t\t\tdataField=\"name\"\n\t\t\t\t/>\n\t\t\t\t<ArchbaseEdit\n\t\t\t\t\tlabel={`${getI18nextInstance().t('archbase:Descrição do token')}`}\n\t\t\t\t\tplaceholder={`${getI18nextInstance().t('archbase:Informe a descrição do token')}`}\n\t\t\t\t\tdataSource={props.dataSource}\n\t\t\t\t\tdataField=\"description\"\n\t\t\t\t/>\n\t\t\t\t<DateTimePicker\n\t\t\t\t\twithSeconds={true}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tlabel=\"Data/hora expiração\"\n\t\t\t\t\tplaceholder={'Selecione a data de expiração'}\n\t\t\t\t/>\n\t\t\t\t<ArchbaseAsyncSelect<any, string, UserDto>\n\t\t\t\t\tlabel={`${getI18nextInstance().t('archbase:Usuário')}`}\n\t\t\t\t\tdataSource={props.dataSource}\n\t\t\t\t\tdataField=\"user\"\n\t\t\t\t\tplaceholder={`${getI18nextInstance().t('archbase:Digite aqui o nome do usuário')}`}\n\t\t\t\t\tgetOptionLabel={(option: UserDto) => option && option.email ? option.email : ''}\n\t\t\t\t\tgetOptionValue={(option: UserDto) => option && option.id ? option.id.toString() : ''}\n\t\t\t\t\tgetOptions={loadRemoteUsers}\n\t\t\t\t\tdebounceTime={500}\n\t\t\t\t\tminCharsToSearch={1}\n\t\t\t\t\titemComponent={UserSelectItem}\n\t\t\t\t/>\n\t\t\t</ScrollArea>\n\t\t\t\n\t\t\t<Group justify=\"flex-end\" mt=\"md\">\n\t\t\t\t<Button variant=\"default\" onClick={handleCancel}>\n\t\t\t\t\t{getI18nextInstance().t('archbase:Cancelar')}\n\t\t\t\t</Button>\n\t\t\t\t<Button onClick={handleSave}>\n\t\t\t\t\t{getI18nextInstance().t('archbase:Salvar')}\n\t\t\t\t</Button>\n\t\t\t</Group>\n\t\t</Modal>\n\t);\n};\n","/**\n * PermissionsSelectorModal — modal para selecionar permissões/roles.\n * @status stable\n */\nimport React, { useCallback, useEffect, useState, useMemo } from \"react\";\nimport { ARCHBASE_IOC_API_TYPE, getKeyByEnumValue, getI18nextInstance } from \"@archbase/core\";\nimport { ActionIcon, Badge, Button, Group, Modal, Paper, ScrollArea, Stack, Text, TextInput, Tooltip, Tree, TreeNodeData, useMantineColorScheme, useTree } from \"@mantine/core\";\nimport { IconArrowLeft, IconArrowRight, IconBorderCornerSquare, IconChevronDown } from \"@tabler/icons-react\";\nimport { SecurityType } from \"@archbase/security\";\nimport { useArchbaseRemoteServiceApi, IArchbaseDataSourceBase } from \"@archbase/data\";\nimport { ResouceActionPermissionDto, ResoucePermissionsWithTypeDto } from \"@archbase/security\";\nimport { ArchbaseResourceService } from \"@archbase/security\";\nimport { useDebouncedValue } from \"@mantine/hooks\";\nimport { ArchbaseSpaceBottom, ArchbaseSpaceFill, ArchbaseSpaceFixed } from \"@archbase/layout\";\n\nconst translateDelimitedString = (inputString) => {\n const delimiter = \"->\"\n if (inputString.includes(delimiter)) {\n const parts = inputString.split(delimiter).map(part => part.trim());\n\n const translatedParts = parts.map(part => getI18nextInstance().t(part));\n\n return translatedParts.join(` ${delimiter} `);\n }\n\n return getI18nextInstance().t(inputString);\n};\n\nexport interface PermissionsSelectorProps {\n dataSource: IArchbaseDataSourceBase<any> | null\n opened: boolean\n close: () => void\n}\n\nexport function PermissionsSelectorModal({ dataSource, opened, close }: PermissionsSelectorProps) {\n // Memoiza os valores do dataSource para evitar recálculos\n const name = useMemo(() => dataSource?.getFieldValue(\"name\") || '', [dataSource]);\n const securityId = useMemo(() => dataSource?.getFieldValue(\"id\") || '', [dataSource]);\n const type = useMemo(() => dataSource?.getFieldValue(\"type\") || '', [dataSource]);\n\n const availablePermissionsTree = useTree()\n const grantedPermissionsTree = useTree()\n const [availablePermissions, setAvailablePermissions] = useState<ResoucePermissionsWithTypeDto[]>([])\n const [grantedPermissions, setGrantedPermissions] = useState<ResoucePermissionsWithTypeDto[]>([])\n const [selectedAvailablePermission, setSelectedAvailablePermission] = useState<TreeNodeData>()\n const [selectedGrantedPermission, setSelectedGrantedPermission] = useState<TreeNodeData>()\n const [availablePermissionsFilter, setAvailablePermissionsFilter] = useState(\"\")\n const [debouncedAvailablePermissionsFilter] = useDebouncedValue(availablePermissionsFilter, 200);\n const [grantedPermissionsFilter, setGrantedPermissionsFilter] = useState(\"\")\n const [debouncedGrantedPermissionsFilter] = useDebouncedValue(grantedPermissionsFilter, 200);\n\n\n const resourceApi = useArchbaseRemoteServiceApi<ArchbaseResourceService>(ARCHBASE_IOC_API_TYPE.Resource)\n\n const { colorScheme } = useMantineColorScheme();\n const selectedColor = colorScheme === \"dark\" ? \"var(--mantine-primary-color-7)\" : \"var(--mantine-primary-color-4)\"\n\n const permissionsGrantedData = useMemo(() => grantedPermissions\n .sort((a, b) => a.resourceDescription.localeCompare(b.resourceDescription))\n .map(resourcePermissions => {\n return (\n {\n value: resourcePermissions.resourceId,\n label: resourcePermissions.resourceDescription,\n children: resourcePermissions.permissions\n .filter(permission => permission.actionDescription.toLowerCase().includes(debouncedGrantedPermissionsFilter.toLowerCase()))\n .sort((a, b) => a.actionDescription.localeCompare(b.actionDescription))\n .map(permission => {\n return {\n value: permission.actionId,\n label: permission.actionDescription,\n nodeProps: {\n permissionId: permission.permissionId,\n types: permission.types ?? [],\n owner: resourcePermissions\n }\n }\n })\n }\n )\n }), [grantedPermissions, debouncedGrantedPermissionsFilter])\n\n const grantedPermissionsActionIds = useMemo(() => grantedPermissions\n .map(resourcePermissions => resourcePermissions.permissions.map(permission => permission.actionId))\n .flat(), [grantedPermissions])\n\n const allPermissionsData = useMemo(() => availablePermissions\n .sort((a, b) => a.resourceDescription.localeCompare(b.resourceDescription))\n .map(resourcePermissions => {\n return (\n {\n value: resourcePermissions.resourceId,\n label: resourcePermissions.resourceDescription,\n children: resourcePermissions.permissions\n .filter(permission => permission.actionDescription.toLowerCase().includes(debouncedAvailablePermissionsFilter.toLowerCase()))\n .sort((a, b) => a.actionDescription.localeCompare(b.actionDescription))\n .map(permission => {\n const permissionGranted = grantedPermissions\n .find(resourcePermissionsGranted => resourcePermissionsGranted.resourceId === resourcePermissions.resourceId)?.permissions\n .find(permissionGranted => permissionGranted.actionId === permission.actionId)\n return (\n {\n value: permission.actionId,\n label: permission.actionDescription,\n nodeProps: {\n granted: grantedPermissionsActionIds.includes(permission.actionId) && permissionGranted?.types?.includes(getKeyByEnumValue(SecurityType, type)!),\n owner: resourcePermissions\n }\n }\n )\n })\n }\n )\n }), [availablePermissions, grantedPermissions, grantedPermissionsActionIds, type, debouncedAvailablePermissionsFilter])\n\n const loadPermissions = useCallback(async () => {\n if (securityId) {\n const permissionsGranted = await resourceApi.getPermissionsBySecurityId(securityId, type)\n const allPermissions = await resourceApi.getAllPermissionsAvailable()\n setAvailablePermissions(allPermissions)\n setGrantedPermissions(permissionsGranted)\n }\n }, [securityId, type])\n\n const handleAdd = useCallback(() => {\n if (selectedAvailablePermission?.value && securityId) {\n resourceApi.createPermission(securityId, selectedAvailablePermission.value, type)\n .then((resouceActionPermissionDto: ResouceActionPermissionDto) => {\n if (resouceActionPermissionDto) {\n setGrantedPermissions(permissionsGranted => {\n let updatedPermissionsGranted;\n if (permissionsGranted.map(resourcePermissions => resourcePermissions.resourceId).includes(resouceActionPermissionDto.resourceId)) {\n updatedPermissionsGranted = permissionsGranted.map(resourcePermissions => {\n if (resourcePermissions.resourceId === resouceActionPermissionDto.resourceId) {\n if (resourcePermissions.permissions.map(permission => permission.actionId).includes(selectedAvailablePermission.value)) {\n return (\n {\n ...resourcePermissions,\n permissions: resourcePermissions.permissions.map(permission =>\n permission.actionId === selectedAvailablePermission.value ? {\n ...permission,\n permissionId: resouceActionPermissionDto.permissionId,\n types: [...(permission.types ?? []), getKeyByEnumValue(SecurityType, type)!],\n } : permission\n )\n }\n )\n }\n return (\n {\n ...resourcePermissions,\n permissions: [...(resourcePermissions.permissions ?? []),\n {\n actionId: resouceActionPermissionDto.actionId,\n actionDescription: resouceActionPermissionDto.actionDescription,\n permissionId: resouceActionPermissionDto.permissionId,\n types: [getKeyByEnumValue(SecurityType, type)!]\n }]\n }\n )\n }\n return resourcePermissions\n });\n } else {\n updatedPermissionsGranted = [\n ...permissionsGranted,\n {\n resourceId: resouceActionPermissionDto.resourceId,\n resourceDescription: resouceActionPermissionDto.resourceDescription,\n permissions: [\n {\n actionId: resouceActionPermissionDto.actionId,\n actionDescription: resouceActionPermissionDto.actionDescription,\n permissionId: resouceActionPermissionDto.permissionId,\n types: [getKeyByEnumValue(SecurityType, type)!]\n }\n ]\n }\n ]\n }\n\n return updatedPermissionsGranted\n })\n\n const resourceAvailablePermissions = allPermissionsData\n .filter((resourcePermissionsNode: any) => resourcePermissionsNode.value === selectedAvailablePermission?.nodeProps?.owner?.resourceId)\n .map((resourcePermissionsNode: any) => resourcePermissionsNode.children).flat()\n\n const previousSelectedPermissionIndex = resourceAvailablePermissions.map((permission: any) => permission.value).indexOf(selectedAvailablePermission.value)\n const nextSelectedAvailablePermission = resourceAvailablePermissions\n .find((permissionNode: any, index: any) => !permissionNode?.nodeProps?.granted\n && permissionNode?.value !== selectedAvailablePermission.value\n && (resourceAvailablePermissions.length > previousSelectedPermissionIndex + 1\n ? index > previousSelectedPermissionIndex\n : true))\n if (nextSelectedAvailablePermission?.value) {\n availablePermissionsTree.select(nextSelectedAvailablePermission.value)\n }\n grantedPermissionsTree.expand(resouceActionPermissionDto.resourceId)\n setSelectedAvailablePermission(nextSelectedAvailablePermission)\n }\n })\n }\n }, [selectedAvailablePermission, securityId, type, resourceApi, allPermissionsData, availablePermissions, grantedPermissions, availablePermissionsTree, grantedPermissionsTree])\n\n const handleRemove = useCallback(() => {\n if (selectedGrantedPermission?.nodeProps?.permissionId) {\n resourceApi.deletePermission(selectedGrantedPermission.nodeProps.permissionId)\n .then(() => {\n setGrantedPermissions(permissionsGranted => {\n const updatedPermissionsGranted = [...permissionsGranted]\n .filter(resourcePermissions => {\n let hasOnePermissionOnResource = true\n resourcePermissions.permissions?.forEach(permission => {\n if (permission.permissionId !== undefined\n && permission.permissionId === selectedGrantedPermission?.nodeProps?.permissionId\n && resourcePermissions.permissions.length === 1\n && permission?.types?.length === 1\n && permission.types[0] === getKeyByEnumValue(SecurityType, type)) {\n hasOnePermissionOnResource = false;\n }\n })\n return hasOnePermissionOnResource;\n })\n .map(resourcePermissions => {\n const resource: ResoucePermissionsWithTypeDto = selectedGrantedPermission?.nodeProps?.owner\n if (resourcePermissions.resourceId === resource.resourceId) {\n if (selectedGrantedPermission?.nodeProps?.types?.length === 1) {\n return ({\n ...resourcePermissions,\n permissions: [...(resourcePermissions.permissions ?? [])\n .filter(permission => permission.permissionId !== selectedGrantedPermission?.nodeProps?.permissionId)]\n })\n }\n return (\n {\n ...resourcePermissions,\n permissions: (resourcePermissions.permissions ?? [])\n .map(permission => permission.actionId === selectedGrantedPermission.value\n ? ({\n actionId: permission.actionId,\n actionDescription: permission.actionDescription,\n types: [...(permission.types?.filter(currentType => currentType && (currentType !== getKeyByEnumValue(SecurityType, type))) ?? [])]\n }) : permission)\n }\n )\n }\n return resourcePermissions\n })\n return updatedPermissionsGranted\n })\n\n const resourceGrantedPermissions = permissionsGrantedData\n .filter((resourcePermissionsNode: any) => resourcePermissionsNode.value === selectedGrantedPermission?.nodeProps?.owner?.resourceId)\n .map((resourcePermissionsNode: any) => resourcePermissionsNode.children).flat()\n\n const previousSelectedPermissionIndex = resourceGrantedPermissions.map((permission: any) => permission.value).indexOf(selectedGrantedPermission.value)\n\n const nextSelectedGrantedPermission = resourceGrantedPermissions\n .find((permissionNode: any, index: any) => permissionNode?.nodeProps?.types.includes(getKeyByEnumValue(SecurityType, type))\n && permissionNode?.value !== selectedGrantedPermission.value\n && (resourceGrantedPermissions.length > previousSelectedPermissionIndex + 1 ? index > previousSelectedPermissionIndex : true))\n if (nextSelectedGrantedPermission?.value) {\n grantedPermissionsTree.select(nextSelectedGrantedPermission.value)\n }\n setSelectedGrantedPermission(nextSelectedGrantedPermission)\n })\n }\n }, [selectedGrantedPermission, resourceApi, type, permissionsGrantedData, grantedPermissions, grantedPermissionsTree])\n\n useEffect(() => {\n if (opened && dataSource) {\n setSelectedAvailablePermission(undefined)\n setSelectedGrantedPermission(undefined)\n setAvailablePermissionsFilter(\"\")\n setGrantedPermissionsFilter(\"\")\n grantedPermissionsTree.collapseAllNodes()\n availablePermissionsTree.collapseAllNodes()\n loadPermissions()\n }\n }, [opened, type, securityId, loadPermissions])\n\n // Não exibir o modal se não houver dataSource\n if (!dataSource) {\n return null;\n }\n\n return (\n <Modal opened={opened} onClose={close} title={`${getI18nextInstance().t(`archbase:${type}`)}: ${name}`} size={\"80%\"} styles={{ root: { overflow: \"hidden\" } }}>\n <ArchbaseSpaceFixed height={\"540px\"}>\n <ArchbaseSpaceFill>\n <Paper withBorder my={20} p={20} style={{ height: 'calc(100% - 40px)', overflow: 'hidden', display: 'flex', flexDirection: 'column' }}>\n <div style={{ flex: 1, display: 'flex', flexDirection: 'row', overflow: 'hidden', minHeight: 0, gap: '8px' }}>\n <div style={{ flex: 9, display: 'flex', flexDirection: 'column', overflow: 'hidden', minHeight: 0 }}>\n <Group mb={20}>\n <Text>{getI18nextInstance().t('archbase:Available')}</Text>\n <TextInput\n size=\"xs\"\n value={availablePermissionsFilter}\n onChange={(event) => setAvailablePermissionsFilter(event.target.value)}\n placeholder={getI18nextInstance().t('archbase:Filter available permissions')}\n />\n </Group>\n <ScrollArea style={{ flex: 1, minHeight: 0 }}>\n <Tree\n data={allPermissionsData}\n selectOnClick={true}\n allowRangeSelection={false}\n tree={availablePermissionsTree}\n renderNode={({ level, node, expanded, hasChildren, selected, elementProps }) => {\n const isGranted = node?.nodeProps?.granted;\n const textColor = isGranted ? \"dimmed\" : undefined;\n const textDecoration = isGranted ? \"line-through\" : undefined;\n\n const handleClick = useCallback((event: any) => {\n setSelectedAvailablePermission(node)\n elementProps.onClick(event)\n }, [node, elementProps.onClick])\n\n return (\n <Group ml={hasChildren ? 0 : 5} gap={5} {...elementProps}\n bg={selected && level === 2 ? selectedColor : \"\"}\n onClick={handleClick}\n >\n {hasChildren && (\n <IconChevronDown\n size={18}\n style={{ transform: expanded ? 'rotate(0deg)' : 'rotate(-90deg)' }}\n />\n )}\n {!hasChildren && (\n <IconBorderCornerSquare\n size={12}\n style={{ transform: 'rotate(-90deg)', marginTop: \"-5px\" }}\n />\n )}\n <Text\n c={textColor}\n td={textDecoration}\n >\n {translateDelimitedString(node.label as string)}\n </Text>\n </Group>\n )\n }\n }\n />\n </ScrollArea>\n </div>\n <div style={{ flex: 2, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Stack gap={5} align=\"center\">\n <Tooltip label={getI18nextInstance().t('archbase:Add')}>\n <ActionIcon onClick={handleAdd} disabled={!selectedAvailablePermission || selectedAvailablePermission?.nodeProps?.granted || !selectedAvailablePermission.nodeProps}>\n <IconArrowRight />\n </ActionIcon>\n </Tooltip>\n <Tooltip label={getI18nextInstance().t('archbase:Remove')}>\n <ActionIcon onClick={handleRemove} disabled={!selectedGrantedPermission || !selectedGrantedPermission?.nodeProps?.permissionId || !selectedGrantedPermission.nodeProps}>\n <IconArrowLeft />\n </ActionIcon>\n </Tooltip>\n </Stack>\n </div>\n <div style={{ flex: 9, display: 'flex', flexDirection: 'column', overflow: 'hidden', minHeight: 0 }}>\n <Group mb={20}>\n <Text>{getI18nextInstance().t('archbase:Granted')}</Text>\n <TextInput\n size=\"xs\"\n value={grantedPermissionsFilter}\n onChange={(event) => setGrantedPermissionsFilter(event.target.value)}\n placeholder={getI18nextInstance().t('archbase:Filter granted permissions')}\n />\n </Group>\n <ScrollArea style={{ flex: 1, minHeight: 0 }}>\n <Tree\n data={permissionsGrantedData}\n selectOnClick={true}\n allowRangeSelection={false}\n tree={grantedPermissionsTree}\n renderNode={({ level, node, expanded, hasChildren, selected, elementProps }) => {\n const handleClick = useCallback((event: any) => {\n setSelectedGrantedPermission(node)\n elementProps.onClick(event)\n }, [node, elementProps.onClick])\n\n return (\n <Group ml={hasChildren ? 0 : 5} gap={5} {...elementProps} bg={selected && level === 2 ? selectedColor : \"\"}\n onClick={handleClick}\n >\n {hasChildren && (\n <IconChevronDown\n size={18}\n style={{ transform: expanded ? 'rotate(0deg)' : 'rotate(-90deg)' }}\n />\n )}\n {!hasChildren && (\n <IconBorderCornerSquare\n size={12}\n style={{ transform: 'rotate(-90deg)', marginTop: \"-5px\" }}\n />\n )}\n <Text>{translateDelimitedString(node.label as string)}</Text>\n {node?.nodeProps?.types?.includes(\"USER\") && <Badge color=\"blue\">{getI18nextInstance().t('archbase:user')}</Badge>}\n {node?.nodeProps?.types?.includes(\"GROUP\") && <Badge color=\"orange\">{getI18nextInstance().t('archbase:group')}</Badge>}\n {node?.nodeProps?.types?.includes(\"PROFILE\") && <Badge color=\"pink\">{getI18nextInstance().t('archbase:profile')}</Badge>}\n </Group>\n )\n }}\n />\n </ScrollArea>\n </div>\n </div>\n </Paper>\n </ArchbaseSpaceFill>\n <ArchbaseSpaceBottom size=\"40px\">\n <Group justify=\"flex-end\">\n <Button onClick={close}>{getI18nextInstance().t(\"archbase:Close\")}</Button>\n </Group>\n </ArchbaseSpaceBottom>\n </ArchbaseSpaceFixed>\n </Modal>\n )\n}\n","/**\n * Avatar exibido quando o usuário não tem imagem.\n *\n * Mora em arquivo próprio porque são ~2 KB de base64 no meio do código: dentro da view\n * ele empurrava a lógica para baixo da dobra em qualquer editor.\n */\nexport const NO_USER =\n\t'data:image/png;base64,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';\n","/**\n * Item de usuário para listas — avatar, nome e e-mail.\n */\nimport React, { useRef } from 'react';\nimport { Badge, Group, Text } from '@mantine/core';\nimport { isBase64Validate } from '@archbase/core';\nimport { useArchbaseListContext, type ArchbaseListCustomItemProps } from '@archbase/components';\nimport type { UserDto } from '@archbase/security';\nimport { NO_USER } from './noUserAvatar';\n\nexport const renderGroups = (user: UserDto) => {\n\tif (!user.groups) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<div style={{ display: 'flex' }}>\n\t\t\t{user.groups\n\t\t\t\t.slice()\n\t\t\t\t.sort((a, b) => (a.group?.name ?? '').localeCompare(b.group?.name ?? ''))\n\t\t\t\t.map((item, index) => (\n\t\t\t\t\t<div key={index} style={{ paddingRight: '2px' }}>\n\t\t\t\t\t\t<Badge color=\"blue\">{item.group?.name}</Badge>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t</div>\n\t);\n};\n\nexport const renderProfile = (user: UserDto) => {\n\tif (!user.profile) {\n\t\treturn null;\n\t}\n\treturn <Badge color=\"green\">{user.profile?.name}</Badge>;\n};\n\nexport interface UserItemProps extends ArchbaseListCustomItemProps<UserDto, string> {}\n\nexport const UserItem = (props: UserItemProps) => {\n\t// A chamada a useArchbaseTheme() saiu na separação: o valor nunca era usado.\n\tconst listContextValue = useArchbaseListContext<UserDto, string>();\n\tconst itemRef = useRef<any>(null);\n\n\tconst handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n\t\tevent.preventDefault();\n\t\tif (!props.disabled) {\n\t\t\tif (listContextValue.handleSelectItem) {\n\t\t\t\tlistContextValue.handleSelectItem(props.index, props.recordData!);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst avatar =\n\t\tprops.recordData && props.recordData.avatar && isBase64Validate(props.recordData.avatar)\n\t\t\t? atob(props.recordData.avatar)\n\t\t\t: NO_USER;\n\tconst backgroundColor = props.active ? listContextValue.activeBackgroundColor : '';\n\tconst color = props.active ? listContextValue.activeColor : '';\n\n\treturn (\n\t\t<div\n\t\t\tonClick={handleClick}\n\t\t\tstyle={{\n\t\t\t\tpadding: '8px',\n\t\t\t\tbackgroundColor,\n\t\t\t\tcolor,\n\t\t\t\tcursor: props.disabled ? 'not-allowed' : 'pointer',\n\t\t\t}}\n\t\t\tref={itemRef}\n\t\t\ttabIndex={-1}\n\t\t>\n\t\t\t<Group wrap=\"nowrap\">\n\t\t\t\t<img\n\t\t\t\t\tstyle={{ width: '48px', borderRadius: 50 }}\n\t\t\t\t\tsrc={avatar}\n\t\t\t\t\talt={props.recordData ? props.recordData.userName : ''}\n\t\t\t\t/>\n\t\t\t\t<div>\n\t\t\t\t\t<Text size=\"sm\">{props.recordData.name}</Text>\n\t\t\t\t\t<Text size=\"xs\" opacity={0.65}>\n\t\t\t\t\t\t{props.recordData.email}\n\t\t\t\t\t</Text>\n\t\t\t\t</div>\n\t\t\t</Group>\n\t\t</div>\n\t);\n};\n","/**\n * Definições de coluna dos grids da {@link ArchbaseSecurityView}.\n *\n * <p>Eram 250 das 1047 linhas da view — JSX declarativo que empurrava a lógica para longe\n * de quem a lia. Dependiam apenas da função de tradução, então saem como fábricas que a\n * recebem, e passam a poder ser reusadas por outras telas do pacote.\n */\nimport React from 'react';\nimport { Badge, Text } from '@mantine/core';\nimport { ArchbaseDataGridColumn, Columns } from '@archbase/components';\nimport { NO_USER } from './noUserAvatar';\nimport { renderGroups, renderProfile } from './UserItem';\nimport type { AccessTokenDto, GroupDto, ProfileDto, ResourceDto, UserDto } from '@archbase/security';\n\n/** A função de tradução do {@code useArchbaseTranslation}. */\n/** Assinatura do `t` devolvido por useArchbaseTranslation. */\nexport type TranslateFn = (chave: string, opcoes?: any) => string | object;\n\n\nexport const buildAccessTokenColumns = (t: TranslateFn) => (\n\t<Columns>\n\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\tdataField=\"user.avatar\"\n\t\t\tdataType=\"image\"\n\t\t\tsize={80}\n\t\t\theader={`${t('archbase:Foto')}`}\n\t\t\trender={(data) => (\n\t\t\t\t<img\n\t\t\t\t\tstyle={{ borderRadius: 50, height: '32px', maxHeight: '32px' }}\n\t\t\t\t\tsrc={data.row.user && data.row.user.avatar ? atob(data.row.user.avatar) : NO_USER}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\tinputFilterType=\"text\"\n\t\t\talign=\"center\"\n\t\t\texportable={false}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\tdataField=\"user.userName\"\n\t\t\tdataType=\"text\"\n\t\t\tsize={300}\n\t\t\theader={`${t('archbase:Nome de Usuário')}`}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\tdataField=\"user.email\"\n\t\t\tdataType=\"text\"\n\t\t\theader={`${t('archbase:Email')}`}\n\t\t\tsize={300}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\tdataField=\"expirationDate\"\n\t\t\tdataType=\"text\"\n\t\t\tsize={300}\n\t\t\theader={`${t('archbase:Expira em')}`}\n\t\t\trender={(data) => <Text size=\"sm\">{data.row.expirationDate}</Text>}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\tdataField=\"revoked\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Revogado ?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\tdataField=\"expired\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Expirado ?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\tdataField=\"token\"\n\t\t\tdataType=\"text\"\n\t\t\theader={`${t('archbase:Token Acesso')}`}\n\t\t\tsize={300}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t</Columns>\n);\n\nexport const buildUserColumns = (t: TranslateFn) => (\n\t<Columns>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"avatar\"\n\t\t\tdataType=\"image\"\n\t\t\tsize={80}\n\t\t\theader={`${t('archbase:Foto')}`}\n\t\t\trender={(data) => (\n\t\t\t\t<img\n\t\t\t\t\tstyle={{ borderRadius: 50, height: '32px', maxHeight: '32px' }}\n\t\t\t\t\tsrc={data.row.avatar ? atob(data.row.avatar) : NO_USER}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\tenableSorting={false}\n\t\t\tenableColumnFilter={false}\n\t\t\tenableGlobalFilter={false}\n\t\t\talign=\"center\"\n\t\t\texportable={false}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"name\"\n\t\t\tdataType=\"text\"\n\t\t\tsize={300}\n\t\t\theader={`${t('archbase:Nome')}`}\n\t\t\tinputFilterType=\"text\"\n\t\t\ttruncate={true}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"nickname\"\n\t\t\tdataType=\"text\"\n\t\t\tsize={120}\n\t\t\theader={`${t('archbase:Apelido')}`}\n\t\t\tinputFilterType=\"text\"\n\t\t\ttruncate={true}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"email\"\n\t\t\tdataType=\"text\"\n\t\t\theader={`${t('archbase:Email')}`}\n\t\t\tsize={300}\n\t\t\tinputFilterType=\"text\"\n\t\t\ttruncate={true}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"accountDeactivated\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Desativado?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t\tsize={120}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"profile.name\"\n\t\t\tdataType=\"text\"\n\t\t\theader={`${t('archbase:Perfil')}`}\n\t\t\tsize={200}\n\t\t\trender={(data) => renderProfile(data.row)}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"groups\"\n\t\t\tdataType=\"text\"\n\t\t\tsize={300}\n\t\t\theader={`${t('archbase:Grupos')}`}\n\t\t\trender={(data) => renderGroups(data.row)}\n\t\t\texportValue={(row) =>\n\t\t\t\trow.groups\n\t\t\t\t\t?.slice()\n\t\t\t\t\t.sort((a, b) => (a.group?.name ?? '').localeCompare(b.group?.name ?? ''))\n\t\t\t\t\t.map((g) => g.group?.name)\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(', ') || ''\n\t\t\t}\n\t\t\tenableSorting={false}\n\t\t\tenableColumnFilter={false}\n\t\t\tenableGlobalFilter={false}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"isAdministrator\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Admin ?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"changePasswordOnNextLogin\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Alt.senha próximo login?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t\tsize={120}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"allowPasswordChange\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Pode alterar senha?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t\tsize={120}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"allowMultipleLogins\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Permite multiplos logins?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t\tsize={120}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"passwordNeverExpires\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Senha nunca expira?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t\tsize={120}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"passwordChangedAt\"\n\t\t\tdataType=\"datetime\"\n\t\t\theader={`${t('archbase:Última troca de senha')}`}\n\t\t\tinputFilterType=\"date-range\"\n\t\t\tsize={160}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"accountLocked\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Bloqueado?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t\tsize={120}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"unlimitedAccessHours\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Horário acesso ilimitado?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t\tsize={140}\n\t\t/>\n\t</Columns>\n);\n\nexport const buildGroupColumns = (t: TranslateFn) => (\n\t<Columns>\n\t\t<ArchbaseDataGridColumn<GroupDto>\n\t\t\tdataField=\"name\"\n\t\t\tdataType=\"text\"\n\t\t\tsize={300}\n\t\t\theader={`${t('archbase:Nome do grupo')}`}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<GroupDto>\n\t\t\tdataField=\"description\"\n\t\t\tdataType=\"text\"\n\t\t\theader={`${t('archbase:Descrição')}`}\n\t\t\tsize={800}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t</Columns>\n);\n\nexport const buildProfileColumns = (t: TranslateFn) => (\n\t<Columns>\n\t\t<ArchbaseDataGridColumn<ProfileDto>\n\t\t\tdataField=\"name\"\n\t\t\tdataType=\"text\"\n\t\t\tsize={300}\n\t\t\theader={`${t('archbase:Nome do perfil')}`}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<ProfileDto>\n\t\t\tdataField=\"description\"\n\t\t\tdataType=\"text\"\n\t\t\theader={`${t('archbase:Descrição')}`}\n\t\t\tsize={800}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t</Columns>\n);\n\nexport const buildResourceColumns = (t: TranslateFn) => (\n\t<Columns>\n\t\t<ArchbaseDataGridColumn<ResourceDto>\n\t\t\tdataField=\"name\"\n\t\t\tdataType=\"text\"\n\t\t\tsize={300}\n\t\t\theader={`${t('archbase:Nome do recurso')}`}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<ResourceDto>\n\t\t\tdataField=\"description\"\n\t\t\tdataType=\"text\"\n\t\t\theader={`${t('archbase:Descrição')}`}\n\t\t\tsize={800}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t</Columns>\n);\n","/**\n * O painel de uma aba da {@link ArchbaseSecurityView}.\n *\n * <p>As cinco abas eram o mesmo bloco escrito cinco vezes: um {@code Paper} que se esconde por\n * {@code display} e um {@code ArchbaseDataGrid} com quinze props idênticas. Só seis coisas\n * mudavam de uma para outra — e eram justamente elas que ficavam difíceis de achar no meio da\n * repetição.\n *\n * <p>A aba inativa é escondida por {@code display: none} em vez de desmontada, de propósito:\n * é o que preserva rolagem, filtro e seleção ao trocar de aba. Era assim antes e continua.\n */\nimport React, { type ReactNode } from 'react';\nimport { Paper } from '@mantine/core';\nimport { ArchbaseDataGrid, type ArchbaseDataGridRef } from '@archbase/components';\nimport type { IArchbaseDataSourceBase } from '@archbase/data';\n\nexport interface SecurityGridPanelProps<T extends object> {\n\t/** Aba visível. A escondida permanece montada. */\n\tactive: boolean;\n\tprintTitle: string;\n\tgridRef: React.MutableRefObject<ArchbaseDataGridRef | null>;\n\tdataSource: IArchbaseDataSourceBase<T>;\n\tisLoading: boolean;\n\terror?: string;\n\tgetRowId: (row: T) => string;\n\tstriped?: boolean;\n\t/** Recursos e tokens de acesso não têm ações por linha. */\n\tenableRowActions?: boolean;\n\ttoolbarLeftContent?: ReactNode;\n\trenderRowActions?: (row: T) => ReactNode;\n\tactionsColumnWidth?: number;\n\t/** As colunas, no formato declarativo do grid. */\n\tchildren: ReactNode;\n}\n\nexport function SecurityGridPanel<T extends object>({\n\tactive,\n\tprintTitle,\n\tgridRef,\n\tdataSource,\n\tisLoading,\n\terror,\n\tgetRowId,\n\tstriped = false,\n\tenableRowActions = true,\n\ttoolbarLeftContent,\n\trenderRowActions,\n\tactionsColumnWidth,\n\tchildren,\n}: SecurityGridPanelProps<T>) {\n\treturn (\n\t\t<Paper\n\t\t\twithBorder\n\t\t\tmt=\"md\"\n\t\t\tstyle={{\n\t\t\t\tdisplay: active ? 'flex' : 'none',\n\t\t\t\twidth: '100%',\n\t\t\t\tflex: 1,\n\t\t\t\tminHeight: 0,\n\t\t\t\toverflow: 'auto',\n\t\t\t}}\n\t\t>\n\t\t\t<ArchbaseDataGrid<T, string>\n\t\t\t\tgridRef={gridRef}\n\t\t\t\tprintTitle={printTitle}\n\t\t\t\twidth={'100%'}\n\t\t\t\theight={'100%'}\n\t\t\t\twithBorder={false}\n\t\t\t\tdataSource={dataSource}\n\t\t\t\twithColumnBorders={true}\n\t\t\t\tstriped={striped}\n\t\t\t\tenableTopToolbar={true}\n\t\t\t\tenableRowActions={enableRowActions}\n\t\t\t\tpageSize={50}\n\t\t\t\tisLoading={isLoading}\n\t\t\t\tisError={!!error}\n\t\t\t\terror={error}\n\t\t\t\tenableGlobalFilter={true}\n\t\t\t\tgetRowId={getRowId}\n\t\t\t\ttoolbarLeftContent={toolbarLeftContent}\n\t\t\t\trenderRowActions={renderRowActions}\n\t\t\t\tactionsColumnWidth={actionsColumnWidth}\n\t\t\t\tchildren={children}\n\t\t\t/>\n\t\t</Paper>\n\t);\n}\n","/**\n * Os gestos de uma entidade da {@link ArchbaseSecurityView}: adicionar, ver, editar, remover,\n * salvar, cancelar e abrir permissões.\n *\n * <p><b>Por que existe.</b> A view tinha cinco famílias destes handlers, uma por entidade,\n * quase idênticas. \"Quase\" era o problema: {@code handleUserEditRow} chamava {@code edit()}\n * sem a guarda {@code isEditing()} que grupo e perfil tinham — a guarda foi acrescentada em\n * dois dos três e nunca retroportada. Diferenças assim compilam igual e se comportam\n * diferente, e ninguém as vê enquanto o código está repetido cinco vezes.\n *\n * <p>A guarda agora vale para todos. É mudança de comportamento no fluxo de usuário, feita de\n * propósito: chamar {@code edit()} sobre uma edição em curso não tinha intenção por trás.\n *\n * <p>Coberto por {@code test/ArchbaseSecurityView.fluxos.test.tsx}.\n */\nimport { ArchbaseDialog } from '@archbase/components';\nimport type { IArchbaseDataSourceBase } from '@archbase/data';\nimport type { TranslateFn } from './columns';\n\nexport interface SecurityEntityActionsParams<T> {\n\tdataSource: IArchbaseDataSourceBase<T>;\n\t/** Discriminador usado para saber qual modal abrir. */\n\tsecurityType: string;\n\t/** Fábrica do registro novo — {@code UserDto.newInstance()} e afins. */\n\tnewInstance: () => T;\n\t/** Quando falso, o id do registro novo é apagado antes de inserir. */\n\tcreateEntitiesWithId: boolean;\n\t/**\n\t * Chave da mensagem de confirmação de remoção, já com o artigo e o substantivo:\n\t * {@code 'archbase:Deseja remover o usuário '}. O nome do registro é concatenado.\n\t */\n\tremoveMessageKey: string;\n\tsetOpenedModal: (valor: string) => void;\n\tsetOpenedPermissionsModal: (valor: string) => void;\n\tvalidationContext?: { clearAll: () => void };\n\tt: TranslateFn;\n}\n\nexport interface SecurityEntityActions<T> {\n\thandleAdd: () => void;\n\thandleViewRow: (row: any) => void;\n\thandleEditRow: (row: any) => void;\n\thandleRemoveRow: (row: any) => void;\n\thandleSaveModal: () => Promise<void>;\n\thandleCancelModal: () => void;\n\thandleOpenPermissionsModal: () => void;\n}\n\nexport function useSecurityEntityActions<T>({\n\tdataSource,\n\tsecurityType,\n\tnewInstance,\n\tcreateEntitiesWithId,\n\tremoveMessageKey,\n\tsetOpenedModal,\n\tsetOpenedPermissionsModal,\n\tvalidationContext,\n\tt,\n}: SecurityEntityActionsParams<T>): SecurityEntityActions<T> {\n\tconst ds = dataSource as any;\n\n\t/** Posiciona no registro da linha. Devolve nulo quando não há onde posicionar. */\n\tconst posicionarEm = (row: any) => {\n\t\tif (ds.isEmpty()) {\n\t\t\treturn null;\n\t\t}\n\t\treturn ds.gotoRecordByData(row) ?? null;\n\t};\n\n\tconst handleAdd = () => {\n\t\tconst registro = newInstance();\n\t\tif (!createEntitiesWithId) {\n\t\t\t(registro as any).id = undefined;\n\t\t}\n\t\tds.insert(registro);\n\t\tsetOpenedModal(securityType);\n\t};\n\n\tconst handleViewRow = (row: any) => {\n\t\tif (posicionarEm(row)) {\n\t\t\tsetOpenedModal(securityType);\n\t\t}\n\t};\n\n\tconst handleEditRow = (row: any) => {\n\t\tif (!posicionarEm(row)) {\n\t\t\treturn;\n\t\t}\n\t\t// A guarda que faltava no fluxo de usuário — ver o cabeçalho deste arquivo.\n\t\tif (!ds.isEditing()) {\n\t\t\tds.edit();\n\t\t}\n\t\tsetOpenedModal(securityType);\n\t};\n\n\tconst handleRemoveRow = (row: any) => {\n\t\tif (!posicionarEm(row)) {\n\t\t\treturn;\n\t\t}\n\t\tArchbaseDialog.showConfirmDialogYesNo(\n\t\t\t`${t('archbase:Confirme')}`,\n\t\t\t`${t(removeMessageKey)}${row.name} ?`,\n\t\t\t() => {\n\t\t\t\tds.remove();\n\t\t\t},\n\t\t\t() => {},\n\t\t);\n\t};\n\n\tconst handleSaveModal = async () => {\n\t\ttry {\n\t\t\tawait ds.save();\n\t\t} catch (_error) {\n\t\t\t// Erro de gravação mantém o modal aberto para o operador corrigir.\n\t\t\treturn;\n\t\t}\n\t\tsetOpenedModal('');\n\t\tvalidationContext?.clearAll();\n\t};\n\n\tconst handleCancelModal = () => {\n\t\tsetOpenedModal('');\n\t\tif (!ds.isBrowsing()) {\n\t\t\tds.cancel();\n\t\t}\n\t\tvalidationContext?.clearAll();\n\t};\n\n\tconst handleOpenPermissionsModal = () => {\n\t\tsetOpenedPermissionsModal(securityType);\n\t};\n\n\treturn {\n\t\thandleAdd,\n\t\thandleViewRow,\n\t\thandleEditRow,\n\t\thandleRemoveRow,\n\t\thandleSaveModal,\n\t\thandleCancelModal,\n\t\thandleOpenPermissionsModal,\n\t};\n}\n","/**\n * As ações de uma linha: ver, editar, remover e permissões — na ordem em que aparecem.\n *\n * <p>Eram três blocos idênticos, um por entidade, diferindo só nos handlers e no slot. A\n * ordem dos ícones é parte do contrato da tela e está fixada em\n * {@code test/ArchbaseSecurityView.fluxos.test.tsx}, que localiza os botões por posição.\n */\nimport React, { type ReactNode } from 'react';\nimport { ActionIcon, Group, Tooltip, useMantineColorScheme } from '@mantine/core';\nimport { useArchbaseTheme } from '@archbase/core';\nimport { IconEdit, IconEye, IconShieldCheckered, IconTrashX } from '@tabler/icons-react';\nimport type { TranslateFn } from './columns';\n\nexport interface SecurityRowActionsProps<T> {\n\trow: T;\n\tonView: (row: T) => void;\n\tonEdit: (row: T) => void;\n\tonRemove: (row: T) => void;\n\tonEditPermissions: () => void;\n\t/** Slot: entra antes das ações padrão. */\n\tbefore?: (row: T) => ReactNode;\n\t/** Slot: entra depois das ações padrão. */\n\tafter?: (row: T) => ReactNode;\n\tt: TranslateFn;\n}\n\nexport function SecurityRowActions<T>({\n\trow,\n\tonView,\n\tonEdit,\n\tonRemove,\n\tonEditPermissions,\n\tbefore,\n\tafter,\n\tt,\n}: SecurityRowActionsProps<T>) {\n\tconst theme = useArchbaseTheme();\n\tconst { colorScheme } = useMantineColorScheme();\n\tconst escuro = colorScheme === 'dark';\n\tconst cor = (nome: 'blue' | 'yellow' | 'red' | 'green') =>\n\t\tescuro ? theme.colors[nome][8] : theme.colors[nome][4];\n\n\treturn (\n\t\t<Group gap={1} wrap=\"nowrap\">\n\t\t\t{before?.(row)}\n\t\t\t<ActionIcon variant=\"transparent\" onClick={() => onView(row)}>\n\t\t\t\t<IconEye size={20} color={cor('blue')} />\n\t\t\t</ActionIcon>\n\t\t\t<ActionIcon variant=\"transparent\" onClick={() => onEdit(row)}>\n\t\t\t\t<IconEdit size={20} color={cor('yellow')} />\n\t\t\t</ActionIcon>\n\t\t\t<ActionIcon variant=\"transparent\" onClick={() => onRemove(row)}>\n\t\t\t\t<IconTrashX size={20} color={cor('red')} />\n\t\t\t</ActionIcon>\n\t\t\t<Tooltip withinPortal withArrow position=\"left\" label={`${t('archbase:Edit permissions')}`}>\n\t\t\t\t<ActionIcon variant=\"transparent\" onClick={onEditPermissions}>\n\t\t\t\t\t<IconShieldCheckered size={20} color={cor('green')} />\n\t\t\t\t</ActionIcon>\n\t\t\t</Tooltip>\n\t\t\t{after?.(row)}\n\t\t</Group>\n\t);\n}\n","/**\n * A barra de ferramentas das abas de usuários, grupos e perfis: \"Novo\" e \"Editar permissões\".\n *\n * <p>A aba de tokens de acesso <b>não</b> usa este componente, de propósito: ela tem um botão\n * de revogar com estado desabilitado próprio, e forçá-la aqui produziria uma abstração com\n * mais exceções do que regra.\n */\nimport React from 'react';\nimport { Button, Flex, Group } from '@mantine/core';\nimport { IconEdit, IconPlus } from '@tabler/icons-react';\nimport type { TranslateFn } from './columns';\n\nexport interface SecurityToolbarActionsProps {\n\tonAdd: () => void;\n\tonEditPermissions: () => void;\n\tt: TranslateFn;\n}\n\nexport const SecurityToolbarActions = ({ onAdd, onEditPermissions, t }: SecurityToolbarActionsProps) => (\n\t<Flex justify={'space-between'} style={{ width: '50%' }}>\n\t\t<Group align=\"end\" gap={'4px'} wrap=\"nowrap\">\n\t\t\t<Button color={'green'} leftSection={<IconPlus />} onClick={onAdd}>\n\t\t\t\t{`${t('archbase:New')}`}\n\t\t\t</Button>\n\t\t\t<Button color={'blue'} leftSection={<IconEdit />} onClick={onEditPermissions}>\n\t\t\t\t{`${t('archbase:Edit permissions')}`}\n\t\t\t</Button>\n\t\t</Group>\n\t\t<Flex align={'flex-start'} justify={'flex-end'} style={{ width: '200px' }}></Flex>\n\t</Flex>\n);\n","/**\n * ArchbaseSecurityView — visão completa de usuários/grupos/permissões.\n * @status stable\n */\nimport { ARCHBASE_IOC_API_TYPE, builder, emit, processDetailErrorMessage, processErrorMessage, useValidationErrors } from '@archbase/core';\nimport { ArchbaseDataSource } from '@archbase/data';\n// import { ArchbaseCountdownProgress } from '@archbase/components'; // Temporarily disabled\nimport {\n\tuseArchbaseRemoteDataSourceV2,\n\tuseArchbaseRemoteServiceApi,\n\tuseArchbaseStore,\n} from '@archbase/data';\nimport { useArchbaseTheme, isBase64Validate, useArchbaseValidator } from '@archbase/core';\nimport { useArchbaseListContext } from '@archbase/components';\nimport { ArchbaseListCustomItemProps } from '@archbase/components';\nimport { ArchbaseDialog, ArchbaseNotifications } from '@archbase/components';\nimport {\n\tActionIcon,\n\tBadge,\n\tButton,\n\tFlex,\n\tGroup,\n\tPaper,\n\tTabs,\n\tText,\n\tTooltip,\n\tuseMantineColorScheme,\n} from '@mantine/core';\nimport { IconEdit, IconPlus, IconShieldCheckered, IconTrashX } from '@tabler/icons-react';\n// Importações da DataGrid\nimport { ArchbaseDataGridColumn } from '@archbase/components';\nimport { ArchbaseDataGrid, ArchbaseDataGridRef, Columns } from '@archbase/components';\nimport { useArchbaseTranslation } from '@archbase/core';\nimport React, { ReactNode, useEffect, useRef, useState } from 'react';\nimport { ArchbaseAccessTokenService } from '@archbase/security';\nimport { ArchbaseGroupService } from '@archbase/security';\nimport { ArchbaseProfileService } from '@archbase/security';\nimport { ArchbaseResourceService } from '@archbase/security';\nimport { ArchbaseUserService } from '@archbase/security';\nimport { GroupModal, GroupModalOptions } from './GroupModal';\nimport { PermissionsSelectorModal } from './PermissionsSelectorModal';\nimport { ProfileModal, ProfileModalOptions } from './ProfileModal';\nimport { AccessTokenDto, GroupDto, ProfileDto, ResourceDto, UserDto } from '@archbase/security';\nimport { SecurityType } from '@archbase/security';\nimport { UserModal, UserModalOptions } from './UserModal';\nimport { IconEye } from '@tabler/icons-react';\n\nimport {\n\tNO_USER,\n\trenderGroups,\n\trenderProfile,\n\tUserItem,\n\ttype ArchbaseSecurityManagerProps,\n\ttype ArchbaseSecurityProps,\n\ttype UserItemProps,\n\tSecurityGridPanel,\n\tSecurityRowActions,\n\tSecurityToolbarActions,\n\tuseSecurityEntityActions,\n\tbuildAccessTokenColumns,\n\tbuildGroupColumns,\n\tbuildProfileColumns,\n\tbuildResourceColumns,\n\tbuildUserColumns,\n} from './securityView';\n\n// Reexportados daqui porque eram declarados neste arquivo antes da separação: quem já\n// importava estes nomes de 'ArchbaseSecurityView' continua importando.\nexport { NO_USER, UserItem, renderGroups, renderProfile };\nexport type { ArchbaseSecurityProps, ArchbaseSecurityManagerProps, UserItemProps };\n\nexport function ArchbaseSecurityView({\n\theight = '400px',\n\twidth = '100%',\n\tcreateEntitiesWithId = true,\n\tuserModalOptions,\n\tprofileModalOptions,\n\tgroupModalOptions,\n\toptions,\n}: ArchbaseSecurityManagerProps) {\n\tconst theme = useArchbaseTheme();\n\tconst templateStore = useArchbaseStore('securityStore');\n\tconst validator = useArchbaseValidator();\n\tconst { colorScheme } = useMantineColorScheme();\n\tconst [error, setError] = useState<string | undefined>(undefined);\n\tconst [activeTab, setActiveTab] = useState<string | null>('users');\n\tconst userApi = useArchbaseRemoteServiceApi<ArchbaseUserService>(ARCHBASE_IOC_API_TYPE.User);\n\tconst groupApi = useArchbaseRemoteServiceApi<ArchbaseGroupService>(ARCHBASE_IOC_API_TYPE.Group);\n\tconst resourceApi = useArchbaseRemoteServiceApi<ArchbaseResourceService>(ARCHBASE_IOC_API_TYPE.Resource);\n\tconst profileApi = useArchbaseRemoteServiceApi<ArchbaseProfileService>(ARCHBASE_IOC_API_TYPE.Profile);\n\tconst [openedModal, setOpenedModal] = useState<string>('');\n\tconst [openedPermissionsModal, setOpenedPermissionsModal] = useState<string>('');\n\tconst accessTokenApi = useArchbaseRemoteServiceApi<ArchbaseAccessTokenService>(ARCHBASE_IOC_API_TYPE.AccessToken);\n\tconst {t} = useArchbaseTranslation();\n\n\t// Referências para os grids\n\tconst usersGridRef = useRef<ArchbaseDataGridRef | null>(null);\n\tconst groupsGridRef = useRef<ArchbaseDataGridRef | null>(null);\n\tconst profilesGridRef = useRef<ArchbaseDataGridRef | null>(null);\n\tconst resourcesGridRef = useRef<ArchbaseDataGridRef | null>(null);\n\tconst accessTokensGridRef = useRef<ArchbaseDataGridRef | null>(null);\n\n\t// Função para obter o ID da linha\n\tconst getUserRowId = (row: UserDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst getGroupRowId = (row: GroupDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst getProfileRowId = (row: ProfileDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst getResourceRowId = (row: ResourceDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst getAccessTokenRowId = (row: AccessTokenDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst {\n\t\tdataSource: dsAccessTokens,\n\t\tisLoading: isLoadingAccessTokens,\n\t\trefreshData: refreshAccessTokens\n\t} = useArchbaseRemoteDataSourceV2<AccessTokenDto>({\n\t\tname: 'accessTokenApi',\n\t\tservice: accessTokenApi,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tdefaultSortFields: ['user.email', 'expirationTime:desc'],\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst {\n\t\tdataSource: dsUsers,\n\t\tisLoading: isLoadingUsers,\n\t\trefreshData: refreshUsers\n\t} = useArchbaseRemoteDataSourceV2<UserDto>({\n\t\tname: 'dsUsers',\n\t\tservice: userApi,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst {\n\t\tdataSource: dsGroups,\n\t\tisLoading: isLoadingGroups,\n\t\trefreshData: refreshGroups\n\t} = useArchbaseRemoteDataSourceV2<GroupDto>({\n\t\tname: 'dsGroups',\n\t\tservice: groupApi,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst {\n\t\tdataSource: dsProfiles,\n\t\tisLoading: isLoadingProfiles,\n\t\trefreshData: refreshProfiles\n\t} = useArchbaseRemoteDataSourceV2<ProfileDto>({\n\t\tname: 'dsProfile',\n\t\tservice: profileApi,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst {\n\t\tdataSource: dsResources,\n\t\tisLoading: isLoadingResources,\n\t\trefreshData: refreshResources\n\t} = useArchbaseRemoteDataSourceV2<ResourceDto>({\n\t\tname: 'dsResources',\n\t\tservice: resourceApi,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\t// Carregar dados iniciais\n\tuseEffect(() => {\n\t\t// AccessTokens with filter\n\t\trefreshAccessTokens({ filter: emit(builder.eq('revoked', 'false')) });\n\t\t// Other data sources\n\t\trefreshUsers();\n\t\trefreshGroups();\n\t\trefreshProfiles();\n\t\trefreshResources();\n\t}, []);\n\n\t// Colunas em securityView/columns.tsx — ver o porquê no cabeçalho daquele arquivo.\n\tconst accessTokenColumns = buildAccessTokenColumns(t);\n\tconst userColumns = buildUserColumns(t);\n\tconst groupColumns = buildGroupColumns(t);\n\tconst profileColumns = buildProfileColumns(t);\n\tconst resourceColumns = buildResourceColumns(t);\n\n\tconst validationContext = useValidationErrors();\n\n\t// Os gestos de cada entidade saem do mesmo hook. As cinco famílias de handler que\n\t// existiam aqui divergiam em detalhes que compilam igual — ver o cabeçalho de\n\t// securityView/useSecurityEntityActions.\n\tconst userActions = useSecurityEntityActions<UserDto>({\n\t\tdataSource: dsUsers,\n\t\tsecurityType: SecurityType.USER,\n\t\tnewInstance: () => UserDto.newInstance(),\n\t\tcreateEntitiesWithId,\n\t\tremoveMessageKey: 'archbase:Deseja remover o usuário ',\n\t\tsetOpenedModal,\n\t\tsetOpenedPermissionsModal,\n\t\tvalidationContext,\n\t\tt,\n\t});\n\n\tconst groupActions = useSecurityEntityActions<GroupDto>({\n\t\tdataSource: dsGroups,\n\t\tsecurityType: SecurityType.GROUP,\n\t\tnewInstance: () => GroupDto.newInstance(),\n\t\tcreateEntitiesWithId,\n\t\tremoveMessageKey: 'archbase:Deseja remover o grupo ',\n\t\tsetOpenedModal,\n\t\tsetOpenedPermissionsModal,\n\t\tvalidationContext,\n\t\tt,\n\t});\n\n\tconst profileActions = useSecurityEntityActions<ProfileDto>({\n\t\tdataSource: dsProfiles,\n\t\tsecurityType: SecurityType.PROFILE,\n\t\tnewInstance: () => ProfileDto.newInstance(),\n\t\tcreateEntitiesWithId,\n\t\tremoveMessageKey: 'archbase:Deseja remover o perfil ',\n\t\tsetOpenedModal,\n\t\tsetOpenedPermissionsModal,\n\t\tvalidationContext,\n\t\tt,\n\t});\n\n\tconst buildUserRowActions = (row: UserDto): ReactNode => (\n\t\t<SecurityRowActions<UserDto>\n\t\t\trow={row}\n\t\t\tonView={userActions.handleViewRow}\n\t\t\tonEdit={userActions.handleEditRow}\n\t\t\tonRemove={userActions.handleRemoveRow}\n\t\t\tonEditPermissions={userActions.handleOpenPermissionsModal}\n\t\t\tbefore={options?.beforeDefaultUserActions}\n\t\t\tafter={options?.afterDefaultUserActions}\n\t\t\tt={t}\n\t\t/>\n\t);\n\n\tconst buildGroupRowActions = (row: GroupDto): ReactNode => (\n\t\t<SecurityRowActions<GroupDto>\n\t\t\trow={row}\n\t\t\tonView={groupActions.handleViewRow}\n\t\t\tonEdit={groupActions.handleEditRow}\n\t\t\tonRemove={groupActions.handleRemoveRow}\n\t\t\tonEditPermissions={groupActions.handleOpenPermissionsModal}\n\t\t\tbefore={options?.beforeDefaultGroupActions}\n\t\t\tafter={options?.afterDefaultGroupActions}\n\t\t\tt={t}\n\t\t/>\n\t);\n\n\tconst buildProfileRowActions = (row: ProfileDto): ReactNode => (\n\t\t<SecurityRowActions<ProfileDto>\n\t\t\trow={row}\n\t\t\tonView={profileActions.handleViewRow}\n\t\t\tonEdit={profileActions.handleEditRow}\n\t\t\tonRemove={profileActions.handleRemoveRow}\n\t\t\tonEditPermissions={profileActions.handleOpenPermissionsModal}\n\t\t\tbefore={options?.beforeDefaultProfileActions}\n\t\t\tafter={options?.afterDefaultProfileActions}\n\t\t\tt={t}\n\t\t/>\n\t);\n\n\n\tconst handleAccessTokenRevokeRow = () => {\n\t\tconst currentAccessToken = dsAccessTokens.getCurrentRecord();\n\t\tif (currentAccessToken) {\n\t\t\tArchbaseDialog.showConfirmDialogYesNo(\n\t\t\t\t`${t('archbase:Confirme')}`,\n\t\t\t\t`${t('archbase:Deseja revogar o token de Acesso do usuário ')}${currentAccessToken.user.name} ?`,\n\t\t\t\tasync () => {\n\t\t\t\t\tawait accessTokenApi\n\t\t\t\t\t\t.revoke(currentAccessToken.token)\n\t\t\t\t\t\t.then(async () => {\n\t\t\t\t\t\t\tArchbaseNotifications.showSuccess(\n\t\t\t\t\t\t\t\t`${t('mentors:Informação')}`,\n\t\t\t\t\t\t\t\t`${t('mentors:Token de Acesso revogado com sucesso!')}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tdsAccessTokens.refreshData();\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t\tArchbaseDialog.showErrorWithDetails(\n\t\t\t\t\t\t\t\t`${t('mentors:Atenção')}`,\n\t\t\t\t\t\t\t\tprocessErrorMessage(error),\n\t\t\t\t\t\t\t\tprocessDetailErrorMessage(error),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t() => {},\n\t\t\t);\n\t\t}\n\t};\n\n\tconst handleClosePermissionsModal = () => {\n\t\tsetOpenedPermissionsModal('');\n\t};\n\n\t// Componentes de ações da barra de ferramentas para cada grid\n\tconst renderAccessTokensToolbarActions = () : ReactNode => {\n\t\treturn (\n\t\t\t<Flex justify={'space-between'} style={{ width: '50%' }}>\n\t\t\t\t<Group align=\"start\" gap={'4px'} wrap='nowrap'>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tdisabled={!dsAccessTokens.getCurrentRecord()}\n\t\t\t\t\t\tcolor={'red'}\n\t\t\t\t\t\tleftSection={<IconTrashX />}\n\t\t\t\t\t\tonClick={handleAccessTokenRevokeRow}\n\t\t\t\t\t>\n\t\t\t\t\t\t{`${t('archbase:Revoke')}`}\n\t\t\t\t\t</Button>\n\t\t\t\t</Group>\n\t\t\t</Flex>\n\t\t);\n\t};\n\n\treturn (\n\t\t<Paper p=\"md\" style={{ height: height, display: 'flex', flexDirection: 'column' }}>\n\t\t\t<Tabs variant='pills' value={activeTab} onChange={setActiveTab}>\n\t\t\t\t<Tabs.List>\n\t\t\t\t\t<Tabs.Tab value=\"users\">{`${t('Usuários')}`}</Tabs.Tab>\n\t\t\t\t\t<Tabs.Tab value=\"groups\">{`${t('Grupos')}`}</Tabs.Tab>\n\t\t\t\t\t<Tabs.Tab value=\"profiles\">{`${t('Perfis')}`}</Tabs.Tab>\n\t\t\t\t\t<Tabs.Tab value=\"resources\">{`${t('Recursos')}`}</Tabs.Tab>\n\t\t\t\t\t<Tabs.Tab value=\"accessTokens\">{`${t('Tokens Acesso')}`}</Tabs.Tab>\n\t\t\t\t</Tabs.List>\n\t\t\t</Tabs>\n\t\t\t<SecurityGridPanel<UserDto>\n\t\t\t\tactive={activeTab === 'users'}\n\t\t\t\tprintTitle={'Usuários'}\n\t\t\t\tgridRef={usersGridRef}\n\t\t\t\tdataSource={dsUsers}\n\t\t\t\tisLoading={isLoadingUsers}\n\t\t\t\terror={error}\n\t\t\t\tgetRowId={getUserRowId}\n\t\t\t\tstriped={true}\n\t\t\t\ttoolbarLeftContent={\n\t\t\t\t\t<SecurityToolbarActions\n\t\t\t\t\t\tonAdd={userActions.handleAdd}\n\t\t\t\t\t\tonEditPermissions={userActions.handleOpenPermissionsModal}\n\t\t\t\t\t\tt={t}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\trenderRowActions={buildUserRowActions}\n\t\t\t\tactionsColumnWidth={options?.userActionsColumnWidth}\n\t\t\t\tchildren={userColumns}\n\t\t\t/>\n\t\t\t<SecurityGridPanel<GroupDto>\n\t\t\t\tactive={activeTab === 'groups'}\n\t\t\t\tprintTitle={'Grupos'}\n\t\t\t\tgridRef={groupsGridRef}\n\t\t\t\tdataSource={dsGroups}\n\t\t\t\tisLoading={isLoadingGroups}\n\t\t\t\terror={error}\n\t\t\t\tgetRowId={getGroupRowId}\n\t\t\t\ttoolbarLeftContent={\n\t\t\t\t\t<SecurityToolbarActions\n\t\t\t\t\t\tonAdd={groupActions.handleAdd}\n\t\t\t\t\t\tonEditPermissions={groupActions.handleOpenPermissionsModal}\n\t\t\t\t\t\tt={t}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\trenderRowActions={buildGroupRowActions}\n\t\t\t\tactionsColumnWidth={options?.groupActionsColumnWidth}\n\t\t\t\tchildren={groupColumns}\n\t\t\t/>\n\t\t\t<SecurityGridPanel<ProfileDto>\n\t\t\t\tactive={activeTab === 'profiles'}\n\t\t\t\tprintTitle={'Perfis'}\n\t\t\t\tgridRef={profilesGridRef}\n\t\t\t\tdataSource={dsProfiles}\n\t\t\t\tisLoading={isLoadingProfiles}\n\t\t\t\terror={error}\n\t\t\t\tgetRowId={getProfileRowId}\n\t\t\t\ttoolbarLeftContent={\n\t\t\t\t\t<SecurityToolbarActions\n\t\t\t\t\t\tonAdd={profileActions.handleAdd}\n\t\t\t\t\t\tonEditPermissions={profileActions.handleOpenPermissionsModal}\n\t\t\t\t\t\tt={t}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\trenderRowActions={buildProfileRowActions}\n\t\t\t\tactionsColumnWidth={options?.profileActionsColumnWidth}\n\t\t\t\tchildren={profileColumns}\n\t\t\t/>\n\t\t\t<SecurityGridPanel<ResourceDto>\n\t\t\t\tactive={activeTab === 'resources'}\n\t\t\t\tprintTitle={'Recursos'}\n\t\t\t\tgridRef={resourcesGridRef}\n\t\t\t\tdataSource={dsResources}\n\t\t\t\tisLoading={isLoadingResources}\n\t\t\t\terror={error}\n\t\t\t\tgetRowId={getResourceRowId}\n\t\t\t\tenableRowActions={false}\n\t\t\t\tchildren={resourceColumns}\n\t\t\t/>\n\t\t\t<SecurityGridPanel<AccessTokenDto>\n\t\t\t\tactive={activeTab === 'accessTokens'}\n\t\t\t\tprintTitle={'Tokens de API'}\n\t\t\t\tgridRef={accessTokensGridRef}\n\t\t\t\tdataSource={dsAccessTokens}\n\t\t\t\tisLoading={isLoadingAccessTokens}\n\t\t\t\terror={error}\n\t\t\t\tgetRowId={getAccessTokenRowId}\n\t\t\t\tstriped={true}\n\t\t\t\tenableRowActions={false}\n\t\t\t\ttoolbarLeftContent={renderAccessTokensToolbarActions()}\n\t\t\t\tchildren={accessTokenColumns}\n\t\t\t/>\n\t\t\t{openedModal === SecurityType.USER ? (\n\t\t\t\t<UserModal\n\t\t\t\t\tonClickOk={userActions.handleSaveModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dsUsers}\n\t\t\t\t\tonClickCancel={userActions.handleCancelModal}\n\t\t\t\t\toptions={userModalOptions}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{openedModal === SecurityType.GROUP ? (\n\t\t\t\t<GroupModal\n\t\t\t\t\tonClickOk={groupActions.handleSaveModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dsGroups}\n\t\t\t\t\tonClickCancel={groupActions.handleCancelModal}\n\t\t\t\t\toptions={groupModalOptions}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{openedModal === SecurityType.PROFILE ? (\n\t\t\t\t<ProfileModal\n\t\t\t\t\tonClickOk={profileActions.handleSaveModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dsProfiles}\n\t\t\t\t\tonClickCancel={profileActions.handleCancelModal}\n\t\t\t\t\toptions={profileModalOptions}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{openedPermissionsModal === SecurityType.USER?\n\t\t\t<PermissionsSelectorModal\n\t\t\t\tdataSource={dsUsers}\n\t\t\t\topened={!!openedPermissionsModal}\n\t\t\t\tclose={handleClosePermissionsModal}\n\t\t\t/>:null}\n\t\t\t{openedPermissionsModal === SecurityType.GROUP?\n\t\t\t<PermissionsSelectorModal\n\t\t\t\tdataSource={dsGroups}\n\t\t\t\topened={!!openedPermissionsModal}\n\t\t\t\tclose={handleClosePermissionsModal}\n\t\t\t/>:null}\n\t\t\t{openedPermissionsModal === SecurityType.PROFILE?\n\t\t\t<PermissionsSelectorModal\n\t\t\t\tdataSource={dsProfiles}\n\t\t\t\topened={!!openedPermissionsModal}\n\t\t\t\tclose={handleClosePermissionsModal}\n\t\t\t/>:null}\n\n\t\t</Paper>\n\t);\n}\n","/**\n * ArchbaseApiTokenView — listagem e gestão de tokens de API.\n * @status stable\n */\nimport { ARCHBASE_IOC_API_TYPE, getI18nextInstance, getNestedObjectValue, processDetailErrorMessage, processErrorMessage } from '@archbase/core';\nimport {\n\tuseArchbaseDataSource,\n\tuseArchbaseRemoteDataSource,\n\tuseArchbaseRemoteServiceApi,\n\tuseArchbaseStore,\n} from '@archbase/data';\nimport { useArchbaseTheme } from '@archbase/core';\nimport { useArchbaseV1V2Compatibility } from '@archbase/data';\nimport { ArchbaseDialog, ArchbaseNotifications } from '@archbase/components';\nimport {\n\tButton,\n\tText,\n\tFlex,\n\tGroup,\n\tPaper,\n\tuseMantineColorScheme,\n\tRingProgress,\n\tTooltip,\n\tBadge,\n} from '@mantine/core';\nimport {\n\tIconPlus,\n\tIconTrashX,\n} from '@tabler/icons-react';\nimport { useArchbaseTranslation } from '@archbase/core';\nimport { useRef, useState } from 'react';\nimport { ApiTokenModal } from './ApiTokenModal';\nimport { ArchbaseApiTokenService } from '@archbase/security';\nimport { NO_USER } from './ArchbaseSecurityView';\nimport { ApiTokenDto } from '@archbase/security';\nimport { ArchbaseDataGridColumn } from '@archbase/components';\nimport { ArchbaseDataGrid, ArchbaseDataGridRef, Columns } from '@archbase/components';\n// import { ArchbaseGridTemplateRef } from '@archbase/template'; // Removed to break circular dependency\n\n\ninterface ArchbaseApiTokenViewProps {\n\theight?: any;\n\twidth?: any;\n}\n\nexport function ArchbaseApiTokenView({ height = '400px', width = '100%' }: ArchbaseApiTokenViewProps) {\n\tconst theme = useArchbaseTheme();\n\tconst templateStore = useArchbaseStore('apiTokenStore');\n\tconst validator = { validateEntity: () => [] }; // Mock validator returning empty error array\n\tconst { colorScheme } = useMantineColorScheme();\n\tconst [error, setError] = useState<string | undefined>(undefined);\n\tconst apiTokenApi = useArchbaseRemoteServiceApi<ArchbaseApiTokenService>(ARCHBASE_IOC_API_TYPE.ApiToken);\n\tconst [openedModal, setOpenedModal] = useState<string>('');\n\tconst gridRef = useRef<ArchbaseDataGridRef | null>(null)\n \n\t// Função para obter o ID da linha\n\tconst getRowId = (row: ApiTokenDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst { dataSource } = useArchbaseDataSource<ApiTokenDto, string>({\n\t\tinitialData: [],\n\t\tname: 'dataSource',\n\t});\n\n\t// 🔄 MIGRAÇÃO V1/V2: Hooks de compatibilidade para DataSources\n\tconst localDataSourceV1V2 = useArchbaseV1V2Compatibility<ApiTokenDto>(\n\t\t'ArchbaseApiTokenView-LocalDataSource',\n\t\tdataSource,\n\t\tundefined,\n\t\tundefined\n\t);\n\n\tconst { dataSource: dsApiTokens, isLoading } = useArchbaseRemoteDataSource<ApiTokenDto, string>({\n\t\tname: 'dsApiToken',\n\t\tservice: apiTokenApi,\n\t\tstore: templateStore,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tloadOnStart: true,\n\t\tonLoadComplete: (dataSource) => {\n\t\t\t//\n\t\t},\n\t\tonDestroy: (dataSource) => {\n\t\t\t//\n\t\t},\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(getI18nextInstance().t('archbase:WARNING'), error, origin);\n\t\t},\n\t});\n\n\t// 🔄 MIGRAÇÃO V1/V2: Hook de compatibilidade para DataSource remoto\n\tconst remoteDataSourceV1V2 = useArchbaseV1V2Compatibility<ApiTokenDto>(\n\t\t'ArchbaseApiTokenView-RemoteDataSource',\n\t\tdsApiTokens,\n\t\tundefined,\n\t\tundefined\n\t);\n\n\tconst heightTab = `calc(${height} - 40px)`;\n\n\tconst columns = (\n\t\t<Columns>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"user.avatar\"\n\t\t\t\tdataType=\"image\"\n\t\t\t\tsize={80}\n\t\t\t\theader=\"Foto\"\n\t\t\t\trender={(data) => (\n\t\t\t\t\t<img\n\t\t\t\t\t\tstyle={{ borderRadius: 50, height: '32px', maxHeight: '32px' }}\n\t\t\t\t\t\tsrc={\n\t\t\t\t\t\t\tdata.row.user && data.row.user.avatar ? atob(data.row.user.avatar) : NO_USER\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t\talign=\"center\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"user.userName\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\tsize={300}\n\t\t\t\theader=\"Nome de Usuário\"\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"user.email\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Email\"\n\t\t\t\tsize={240}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"name\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Nome\"\n\t\t\t\tsize={240}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"description\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Descrição\"\n\t\t\t\tsize={300}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"token\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Token API\"\n\t\t\t\tsize={300}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t\tenableClickToCopy={true}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"tenantId\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Tenant ID\"\n\t\t\t\tsize={300}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t\tenableClickToCopy={true}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"expirationDate\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\tsize={240}\n\t\t\t\theader=\"Validade\"\n\t\t\t\trender={(data) => {\n\t\t\t\t\tif (!data.row.expirationDate) {\n\t\t\t\t\t\treturn <Text c=\"dimmed\">Sem expiração</Text>;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst today = new Date();\n\t\t\t\t\ttoday.setHours(0, 0, 0, 0);\n\t\t\t\t\tconst expDate = new Date(data.row.expirationDate);\n\t\t\t\t\texpDate.setHours(0, 0, 0, 0);\n\n\t\t\t\t\tconst diffTime = expDate.getTime() - today.getTime();\n\t\t\t\t\tconst diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n\t\t\t\t\t// Calcular porcentagem para o gauge (baseado em 365 dias)\n\t\t\t\t\tconst maxDays = 365;\n\t\t\t\t\tlet percentage = Math.max(0, Math.min(100, (diffDays / maxDays) * 100));\n\n\t\t\t\t\t// Determinar cor baseado nos dias restantes\n\t\t\t\t\tlet color = 'green';\n\t\t\t\t\tlet label = '';\n\n\t\t\t\t\tif (diffDays < 0) {\n\t\t\t\t\t\t// Token vencido\n\t\t\t\t\t\tcolor = 'red';\n\t\t\t\t\t\tpercentage = 100;\n\t\t\t\t\t\tlabel = `Vencido há ${Math.abs(diffDays)} dia${Math.abs(diffDays) !== 1 ? 's' : ''}`;\n\t\t\t\t\t} else if (diffDays === 0) {\n\t\t\t\t\t\tcolor = 'red';\n\t\t\t\t\t\tpercentage = 5;\n\t\t\t\t\t\tlabel = 'Vence hoje';\n\t\t\t\t\t} else if (diffDays <= 7) {\n\t\t\t\t\t\tcolor = 'red';\n\t\t\t\t\t\tlabel = `${diffDays} dia${diffDays !== 1 ? 's' : ''}`;\n\t\t\t\t\t} else if (diffDays <= 30) {\n\t\t\t\t\t\tcolor = 'orange';\n\t\t\t\t\t\tlabel = `${diffDays} dias`;\n\t\t\t\t\t} else if (diffDays <= 90) {\n\t\t\t\t\t\tcolor = 'yellow';\n\t\t\t\t\t\tlabel = `${diffDays} dias`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcolor = 'green';\n\t\t\t\t\t\tlabel = `${diffDays} dias`;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst tooltipText = diffDays < 0\n\t\t\t\t\t\t? `Vencido em ${expDate.toLocaleDateString()}`\n\t\t\t\t\t\t: `Expira em ${expDate.toLocaleDateString()}`;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Tooltip label={tooltipText} withArrow>\n\t\t\t\t\t\t\t<Group gap=\"xs\" wrap=\"nowrap\">\n\t\t\t\t\t\t\t\t<RingProgress\n\t\t\t\t\t\t\t\t\tsize={36}\n\t\t\t\t\t\t\t\t\tthickness={4}\n\t\t\t\t\t\t\t\t\troundCaps\n\t\t\t\t\t\t\t\t\tsections={[{ value: diffDays < 0 ? 100 : percentage, color }]}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<Text size=\"sm\" c={diffDays < 0 ? 'red' : undefined} fw={diffDays <= 7 ? 600 : undefined}>\n\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t</Group>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t);\n\t\t\t\t}}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"activated\"\n\t\t\t\tdataType=\"boolean\"\n\t\t\t\theader=\"Ativado ?\"\n\t\t\t\tinputFilterType=\"checkbox\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"revoked\"\n\t\t\t\tdataType=\"boolean\"\n\t\t\t\theader=\"Revogado ?\"\n\t\t\t\tinputFilterType=\"checkbox\"\n\t\t\t/>\n\t\t</Columns>\n\t);\n\n\tconst handleCreateApiTokenExecute = () => {\n\t\t// 🔄 MIGRAÇÃO V1/V2: Inserção com compatibilidade\n\t\tdataSource.insert(ApiTokenDto.newInstance());\n\t\t\n\t\t// Se for V1, forçar atualização\n\t\tif (dataSource && !localDataSourceV1V2.isDataSourceV2) {\n\t\t\tlocalDataSourceV1V2.v1State.forceUpdate();\n\t\t}\n\t\t\n\t\tsetOpenedModal('apiToken');\n\t};\n\n\tconst handleApiTokenRevokeRow = () => {\n\t\tif (dsApiTokens.getCurrentRecord()) {\n\t\t\tArchbaseDialog.showConfirmDialogYesNo(\n\t\t\t\t`${getI18nextInstance().t('archbase:Confirme')}`,\n\t\t\t\t`${getI18nextInstance().t('archbase:Deseja revogar o token de API do usuário ')}${dsApiTokens.getCurrentRecord().user.name} ?`,\n\t\t\t\tasync () => {\n\t\t\t\t\tawait apiTokenApi\n\t\t\t\t\t\t.revoke(dsApiTokens.getCurrentRecord().token)\n\t\t\t\t\t\t.then(async () => {\n\t\t\t\t\t\t\tArchbaseNotifications.showSuccess(\n\t\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Informação')}`,\n\t\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Token de API revogado com sucesso!')}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// 🔄 MIGRAÇÃO V1/V2: Refresh com compatibilidade\n\t\t\t\t\t\t\tdsApiTokens.refreshData();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Se for V1, forçar atualização\n\t\t\t\t\t\t\tif (dsApiTokens && !remoteDataSourceV1V2.isDataSourceV2) {\n\t\t\t\t\t\t\t\tremoteDataSourceV1V2.v1State.forceUpdate();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t\tArchbaseDialog.showErrorWithDetails(\n\t\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Atenção')}`,\n\t\t\t\t\t\t\t\tprocessErrorMessage(error),\n\t\t\t\t\t\t\t\tprocessDetailErrorMessage(error),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t() => { },\n\t\t\t);\n\t\t}\n\t};\n\n\tconst handleCloseApiTokenModal = () => {\n\t\tsetOpenedModal('');\n\t};\n\n\tconst handleSaveApiToken = async (record?: ApiTokenDto, callback?: Function) => {\n\t\tconst apiToken: ApiTokenDto | undefined = dataSource.getCurrentRecord();\n\t\tif (apiToken) {\n\t\t\ttry {\n\t\t\t\tdataSource.validate();\n\t\t\t\tif (!apiToken.user || !apiToken.user.email) {\n\t\t\t\t\tArchbaseDialog.showErrorWithDetails(\n\t\t\t\t\t\t`${getI18nextInstance().t('archbase:WARNING')}`,\n\t\t\t\t\t\t`${getI18nextInstance().t('archbase:Selecione um usuário para o token de API')}`,\n\t\t\t\t\t\t'',\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait apiTokenApi\n\t\t\t\t\t.create(apiToken.user.email, apiToken.expirationDate, apiToken.name, apiToken.description)\n\t\t\t\t\t.then(async (response: ApiTokenDto) => {\n\t\t\t\t\t\t// 🔄 MIGRAÇÃO V1/V2: Cancelar e adicionar com compatibilidade\n\t\t\t\t\t\tdataSource.cancel();\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Se for V1, forçar atualização no local DataSource\n\t\t\t\t\t\tif (dataSource && !localDataSourceV1V2.isDataSourceV2) {\n\t\t\t\t\t\t\tlocalDataSourceV1V2.v1State.forceUpdate();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tdsApiTokens.append(response);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Se for V1, forçar atualização no remote DataSource\n\t\t\t\t\t\tif (dsApiTokens && !remoteDataSourceV1V2.isDataSourceV2) {\n\t\t\t\t\t\t\tremoteDataSourceV1V2.v1State.forceUpdate();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tArchbaseNotifications.showSuccess(\n\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Informação')}`,\n\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Token de API gerado com sucesso!')}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tcallback(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tArchbaseDialog.showErrorWithDetails(\n\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Atenção')}`,\n\t\t\t\t\t\t\tprocessErrorMessage(error),\n\t\t\t\t\t\t\tprocessDetailErrorMessage(error),\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t} catch (ex) {\n\t\t\t\tArchbaseDialog.showErrorWithDetails(\n\t\t\t\t\t`${getI18nextInstance().t('mentors:Atenção')}`,\n\t\t\t\t\tprocessErrorMessage(ex),\n\t\t\t\t\tprocessDetailErrorMessage(ex),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t};\n\n\t// Componente de ações da barra de ferramentas\n\tconst renderToolbarActions = () => {\n\t\treturn (\n\t\t\t<Flex justify={'space-between'} style={{ width: '50%' }}>\n\t\t\t\t<Group align=\"start\" gap={'2px'} wrap=\"nowrap\">\n\t\t\t\t\t<Button color={'green'} leftSection={<IconPlus />} onClick={handleCreateApiTokenExecute}>\n\t\t\t\t\t\t{getI18nextInstance().t('archbase:New')}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button disabled={!dsApiTokens.getCurrentRecord()} color={'red'} leftSection={<IconTrashX />} onClick={handleApiTokenRevokeRow}>\n\t\t\t\t\t\t{getI18nextInstance().t('archbase:Revoke')}\n\t\t\t\t\t</Button>\n\t\t\t\t</Group>\n\t\t\t</Flex>\n\t\t);\n\t};\n\n\treturn (\n\t\t<Paper p=\"md\" style={{ height: height, display: 'flex', flexDirection: 'column' }}>\n\t\t\t<Paper\n\t\t\t\twithBorder\n\t\t\t\tstyle={{\n\t\t\t\t\theight: heightTab,\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\tflex: 1,\n\t\t\t\t\tminHeight: 0,\n\t\t\t\t\toverflow: 'auto'\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ArchbaseDataGrid<ApiTokenDto, string>\n\t\t\t\t\tgridRef={gridRef}\n\t\t\t\t\tprintTitle={'Tokens de API'}\n\t\t\t\t\twidth={'100%'}\n\t\t\t\t\theight={'100%'}\n\t\t\t\t\twithBorder={false}\n\t\t\t\t\tdataSource={dsApiTokens}\n\t\t\t\t\twithColumnBorders={true}\n\t\t\t\t\tstriped={true}\n\t\t\t\t\tenableTopToolbar={true}\n\t\t\t\t\tenableRowActions={false}\n\t\t\t\t\tpageSize={50}\n\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\tisError={!!error}\n\t\t\t\t\terror={error}\n\t\t\t\t\tenableGlobalFilter={true}\n\t\t\t\t\tgetRowId={getRowId}\n\t\t\t\t\ttoolbarLeftContent={renderToolbarActions()}\n\t\t\t\t\tchildren={columns}\n\t\t\t\t/>\n\t\t\t</Paper>\n\t\t\t{openedModal === 'apiToken' ? (\n\t\t\t\t<ApiTokenModal\n\t\t\t\t\tonClickOk={handleCloseApiTokenModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dataSource}\n\t\t\t\t\tonCustomSave={handleSaveApiToken}\n\t\t\t\t\tonClickCancel={handleCloseApiTokenModal}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</Paper>\n\t);\n}\n","/**\n * Peças de apresentação compartilhadas pelas três abas do diagnóstico.\n *\n * <p>Ficam aqui, e não dentro de cada painel, porque são o que garante que um cartão vindo\n * de {@code additionalOverviewCards} saia idêntico a um cartão do framework. É a coerência\n * visual que faz valer a pena a aplicação entregar dado em vez de JSX.\n */\nimport React, { type ReactNode } from 'react';\nimport { Badge, Group, Paper, SimpleGrid, Stack, Text } from '@mantine/core';\nimport type {\n\tArchbaseDiagnosticAttribute,\n\tArchbaseDiagnosticCard,\n\tArchbaseDiagnosticFlag,\n\tArchbaseDiagnosticSeverity,\n} from './types';\n\n/** Cor semântica — separada do acento visual do tema, de propósito. */\nexport const severityColor = (severity: ArchbaseDiagnosticSeverity): string => {\n\tswitch (severity) {\n\t\tcase 'critical':\n\t\t\treturn 'red';\n\t\tcase 'warning':\n\t\t\treturn 'orange';\n\t\tcase 'ok':\n\t\t\treturn 'green';\n\t\tdefault:\n\t\t\treturn 'gray';\n\t}\n};\n\nexport interface MetricCardProps {\n\tcard: ArchbaseDiagnosticCard;\n}\n\n/** Cartão de métrica: valor grande, denominador, rótulo e o porquê importa. */\nexport const MetricCard = ({ card }: MetricCardProps) => (\n\t<Paper withBorder radius=\"md\" p=\"sm\" style={{ borderLeft: `3px solid var(--mantine-color-${severityColor(card.severity)}-6)` }}>\n\t\t<Stack gap={4}>\n\t\t\t<Group gap={8} align=\"baseline\" wrap=\"wrap\">\n\t\t\t\t<Text fw={600} size=\"1.7rem\" lh={1.05} c={severityColor(card.severity)}>\n\t\t\t\t\t{card.value}\n\t\t\t\t</Text>\n\t\t\t\t{card.of ? (\n\t\t\t\t\t<Text size=\"xs\" c=\"dimmed\">\n\t\t\t\t\t\t{card.of}\n\t\t\t\t\t</Text>\n\t\t\t\t) : null}\n\t\t\t</Group>\n\t\t\t<Text size=\"sm\" fw={550}>\n\t\t\t\t{card.label}\n\t\t\t</Text>\n\t\t\t{card.description ? (\n\t\t\t\t<Text size=\"xs\" c=\"dimmed\" lh={1.45}>\n\t\t\t\t\t{card.description}\n\t\t\t\t</Text>\n\t\t\t) : null}\n\t\t</Stack>\n\t</Paper>\n);\n\nexport interface MetricCardsProps {\n\tcards: ArchbaseDiagnosticCard[];\n}\n\nexport const MetricCards = ({ cards }: MetricCardsProps) => (\n\t<SimpleGrid cols={{ base: 1, sm: 2, lg: 3, xl: 4 }} spacing=\"xs\">\n\t\t{cards.map((card, index) => (\n\t\t\t<MetricCard key={`${card.label}-${index}`} card={card} />\n\t\t))}\n\t</SimpleGrid>\n);\n\nexport interface FlagStripProps {\n\tflags: ArchbaseDiagnosticFlag[];\n}\n\n/**\n * Faixa de proteções.\n *\n * <p>Vem antes dos números na tela porque contagem alta de permissões não significa nada se o\n * portão correspondente está inerte — e essa é a pergunta que o operador não sabe fazer.\n */\nexport const FlagStrip = ({ flags }: FlagStripProps) => (\n\t<SimpleGrid cols={{ base: 1, sm: 2, lg: 4 }} spacing=\"xs\">\n\t\t{flags.map((flag) => (\n\t\t\t<Paper key={flag.key} withBorder radius=\"md\" p=\"sm\">\n\t\t\t\t<Stack gap={3}>\n\t\t\t\t\t<Text size=\"10px\" c=\"dimmed\" ff=\"monospace\" style={{ wordBreak: 'break-all' }}>\n\t\t\t\t\t\t{flag.key}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Group gap={7} wrap=\"nowrap\">\n\t\t\t\t\t\t<Badge size=\"xs\" circle color={severityColor(flag.severity)} />\n\t\t\t\t\t\t<Text size=\"sm\" fw={550}>\n\t\t\t\t\t\t\t{flag.value}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</Group>\n\t\t\t\t\t{flag.description ? (\n\t\t\t\t\t\t<Text size=\"xs\" c=\"dimmed\" lh={1.4}>\n\t\t\t\t\t\t\t{flag.description}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : null}\n\t\t\t\t</Stack>\n\t\t\t</Paper>\n\t\t))}\n\t</SimpleGrid>\n);\n\nexport interface AttributeListProps {\n\tattributes: ArchbaseDiagnosticAttribute[];\n}\n\n/** Lista rótulo/valor — o layout onde entram perfil, grupos, nível e os atributos de negócio. */\nexport const AttributeList = ({ attributes }: AttributeListProps) => (\n\t<Stack gap={7}>\n\t\t{attributes.map((attribute, index) => (\n\t\t\t<Group key={`${attribute.label}-${index}`} gap={12} wrap=\"nowrap\" justify=\"space-between\">\n\t\t\t\t<Text size=\"sm\" c=\"dimmed\">\n\t\t\t\t\t{attribute.label}\n\t\t\t\t</Text>\n\t\t\t\t<Text size=\"sm\" fw={600} ta=\"right\">\n\t\t\t\t\t{attribute.value}\n\t\t\t\t</Text>\n\t\t\t</Group>\n\t\t))}\n\t</Stack>\n);\n\nexport interface SectionProps {\n\ttitle: string;\n\thint?: string;\n\tchildren: ReactNode;\n}\n\nexport const Section = ({ title, hint, children }: SectionProps) => (\n\t<Stack gap=\"xs\">\n\t\t<Group gap={10} align=\"baseline\" wrap=\"wrap\">\n\t\t\t<Text size=\"xs\" fw={650} tt=\"uppercase\" style={{ letterSpacing: '.05em' }}>\n\t\t\t\t{title}\n\t\t\t</Text>\n\t\t\t{hint ? (\n\t\t\t\t<Text size=\"xs\" c=\"dimmed\">\n\t\t\t\t\t{hint}\n\t\t\t\t</Text>\n\t\t\t) : null}\n\t\t</Group>\n\t\t{children}\n\t</Stack>\n);\n","/**\n * Panorama — o estado da segurança do tenant.\n *\n * <p>A ordem da tela é uma afirmação: as <b>proteções</b> vêm antes das contagens. Um número\n * alto de permissões não diz nada quando o portão correspondente está desligado, e essa é\n * exatamente a leitura que a auditoria mostrou faltar.\n */\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { Alert, Loader, Stack, Text } from '@mantine/core';\nimport { ARCHBASE_IOC_API_TYPE, processErrorMessage } from '@archbase/core';\nimport { useArchbaseRemoteServiceApi } from '@archbase/data';\nimport type { ArchbaseAccessOverview, ArchbaseSecurityDiagnosticsService } from '@archbase/security';\nimport { FlagStrip, MetricCards, Section } from './DiagnosticPrimitives';\nimport type { ArchbaseDiagnosticCard, ArchbaseDiagnosticFlag, ArchbaseSecurityDiagnosticsSlots } from './types';\n\nexport interface OverviewPanelProps {\n\tslots?: ArchbaseSecurityDiagnosticsSlots;\n\tonError?: (message: string) => void;\n}\n\nconst percent = (part: number, whole: number): string => (whole > 0 ? ` · ${Math.round((part / whole) * 100)}%` : '');\n\n/** As proteções configuráveis, traduzidas para \"ligado / desligado\" e o que isso custa. */\nconst buildFlags = (overview: ArchbaseAccessOverview): ArchbaseDiagnosticFlag[] => {\n\tconst flags = overview.flags;\n\treturn [\n\t\t{\n\t\t\tkey: 'archbase.security.access.require-active',\n\t\t\tlabel: 'Filtro de ativo',\n\t\t\tvalue: flags.requireActive ? 'Ligado' : 'Desligado',\n\t\t\tseverity: flags.requireActive ? 'ok' : 'critical',\n\t\t\tdescription: flags.requireActive\n\t\t\t\t? 'Permissão para ação inativa não decide.'\n\t\t\t\t: 'Permissão para ação inativa ainda decide.',\n\t\t},\n\t\t{\n\t\t\tkey: 'archbase.security.admin-endpoints.policy',\n\t\t\tlabel: 'Endpoints administrativos',\n\t\t\tvalue: flags.adminEndpointsPolicy,\n\t\t\tseverity: flags.adminEndpointsPolicy === 'permit' ? 'critical' : 'ok',\n\t\t\tdescription:\n\t\t\t\tflags.adminEndpointsPolicy === 'permit'\n\t\t\t\t\t? 'permit = qualquer autenticado administra segurança.'\n\t\t\t\t\t: 'Restrito.',\n\t\t},\n\t\t{\n\t\t\tkey: 'ArchbaseRoleResolver',\n\t\t\tlabel: 'Resolver de papel',\n\t\t\tvalue: flags.roleResolverRegistered ? 'Registrado' : 'Ausente',\n\t\t\tseverity: flags.roleResolverRegistered ? 'ok' : 'warning',\n\t\t\tdescription: flags.roleResolverRegistered\n\t\t\t\t? '@RequireRole é avaliado.'\n\t\t\t\t: '@RequireRole não restringe nada sem ele.',\n\t\t},\n\t\t{\n\t\t\tkey: 'scan',\n\t\t\tlabel: 'Varredura de capacidades',\n\t\t\tvalue: flags.scanConfigured ? 'Configurada' : 'Não configurada',\n\t\t\tseverity: flags.scanConfigured ? 'ok' : 'warning',\n\t\t\tdescription: flags.scanConfigured\n\t\t\t\t? 'O catálogo se alimenta do código.'\n\t\t\t\t: 'O catálogo não se alimenta do código.',\n\t\t},\n\t];\n};\n\nconst buildCards = (overview: ArchbaseAccessOverview): ArchbaseDiagnosticCard[] => [\n\t{\n\t\tseverity: 'critical',\n\t\tvalue: overview.permissionsPointingToInactive,\n\t\tof: `de ${overview.permissions}${percent(overview.permissionsPointingToInactive, overview.permissions)}`,\n\t\tlabel: 'Permissões inertes',\n\t\tdescription: 'Apontam para ação ou recurso inativo. É o acesso que o operador acredita ter concedido.',\n\t},\n\t{\n\t\tseverity: 'warning',\n\t\tvalue: overview.administrators,\n\t\tof: `de ${overview.users} usuários`,\n\t\tlabel: 'Administradores',\n\t\tdescription: 'Passam direto pelo portão GRANT. Nada configurado nesta tela se aplica a eles.',\n\t},\n\t{\n\t\tseverity: 'warning',\n\t\tvalue: overview.actionsInactive,\n\t\tof: `de ${overview.actions} ações`,\n\t\tlabel: 'Ações inativas',\n\t\tdescription: 'Capacidades do catálogo que não valem. São a origem das permissões inertes.',\n\t},\n\t{\n\t\tseverity: 'warning',\n\t\tvalue: overview.apiResourcesInactive,\n\t\tof: `de ${overview.apiResources} recursos API`,\n\t\tlabel: 'Recursos API desativados',\n\t\tdescription: 'Desativados pela varredura por não terem @HasPermission correspondente.',\n\t},\n\t{\n\t\tseverity: 'neutral',\n\t\tvalue: overview.resourcesWithoutAction,\n\t\tof: `de ${overview.resources} recursos`,\n\t\tlabel: 'Recursos sem ação',\n\t\tdescription: 'Telas ainda não abertas neste tenant. Indicador operacional, não alerta.',\n\t},\n\t{\n\t\tseverity: 'warning',\n\t\tvalue: overview.actionsWithoutPermission,\n\t\tof: 'ações',\n\t\tlabel: 'Ninguém tem',\n\t\tdescription: 'Capacidade existe no catálogo e não foi concedida a ninguém.',\n\t},\n];\n\nexport const OverviewPanel = ({ slots, onError }: OverviewPanelProps) => {\n\tconst api = useArchbaseRemoteServiceApi<ArchbaseSecurityDiagnosticsService>(\n\t\tARCHBASE_IOC_API_TYPE.SecurityDiagnostics,\n\t);\n\tconst [overview, setOverview] = useState<ArchbaseAccessOverview | undefined>(undefined);\n\tconst [loading, setLoading] = useState<boolean>(true);\n\tconst [error, setError] = useState<string | undefined>(undefined);\n\n\tuseEffect(() => {\n\t\tlet vivo = true;\n\t\tsetLoading(true);\n\t\tapi\n\t\t\t.getOverview()\n\t\t\t.then((resultado) => {\n\t\t\t\tif (vivo) {\n\t\t\t\t\tsetOverview(resultado);\n\t\t\t\t\tsetError(undefined);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((erro) => {\n\t\t\t\tif (vivo) {\n\t\t\t\t\tconst mensagem = processErrorMessage(erro);\n\t\t\t\t\tsetError(mensagem);\n\t\t\t\t\tonError?.(mensagem);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tif (vivo) {\n\t\t\t\t\tsetLoading(false);\n\t\t\t\t}\n\t\t\t});\n\t\treturn () => {\n\t\t\tvivo = false;\n\t\t};\n\t}, [api]);\n\n\tconst flags = useMemo(\n\t\t() => (overview ? [...buildFlags(overview), ...(slots?.additionalFlags?.(overview) ?? [])] : []),\n\t\t[overview, slots],\n\t);\n\tconst cards = useMemo(\n\t\t() => (overview ? [...buildCards(overview), ...(slots?.additionalOverviewCards?.(overview) ?? [])] : []),\n\t\t[overview, slots],\n\t);\n\n\tif (loading) {\n\t\treturn <Loader size=\"sm\" />;\n\t}\n\tif (error) {\n\t\treturn (\n\t\t\t<Alert color=\"red\" title=\"Não foi possível ler o diagnóstico\">\n\t\t\t\t{error}\n\t\t\t</Alert>\n\t\t);\n\t}\n\tif (!overview) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Stack gap=\"lg\">\n\t\t\t<Section title=\"Proteções\" hint=\"de AccessOverview.flags\">\n\t\t\t\t<FlagStrip flags={flags} />\n\t\t\t\t<Text size=\"xs\" c=\"dimmed\" lh={1.45}>\n\t\t\t\t\tTodas nascem com o padrão compatível — ligadas só quando alguém decide.\n\t\t\t\t</Text>\n\t\t\t</Section>\n\n\t\t\t<Section title=\"Catálogo e concessões\" hint=\"contagens vivas\">\n\t\t\t\t<MetricCards cards={cards} />\n\t\t\t</Section>\n\n\t\t\t{slots?.afterOverview?.(overview)}\n\t\t</Stack>\n\t);\n};\n","/**\n * Efetivo do usuário — o que a pessoa realmente pode, com a origem de cada concessão.\n *\n * <p>A coluna <b>Origem</b> é a razão de a tela existir: a consulta de autorização devolve\n * sim/não, e sem saber de onde veio o acesso o diagnóstico vira tentativa e erro.\n */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport { Alert, Badge, Button, Chip, Group, Loader, Paper, SimpleGrid, Stack, Table, Text, TextInput } from '@mantine/core';\nimport { ARCHBASE_IOC_API_TYPE, processErrorMessage } from '@archbase/core';\nimport { useArchbaseRemoteServiceApi } from '@archbase/data';\nimport type {\n\tArchbaseCapabilitySituation,\n\tArchbaseEffectiveAccessReport,\n\tArchbaseSecurityDiagnosticsService,\n} from '@archbase/security';\nimport { AttributeList, Section, severityColor } from './DiagnosticPrimitives';\nimport type { ArchbaseDiagnosticAttribute, ArchbaseSecurityDiagnosticsSlots } from './types';\n\nexport interface EffectiveAccessPanelProps {\n\tslots?: ArchbaseSecurityDiagnosticsSlots;\n\tonError?: (message: string) => void;\n}\n\ntype Filtro = 'all' | ArchbaseCapabilitySituation | 'inherited';\n\nconst SITUACAO: Record<ArchbaseCapabilitySituation, { label: string; color: string }> = {\n\tEFFECTIVE: { label: 'Efetiva', color: 'green' },\n\tINERT: { label: 'Inerte', color: 'orange' },\n\tDENIED: { label: 'Negada', color: 'red' },\n};\n\nconst ORIGEM: Record<string, string> = { GROUP: 'grupo', PROFILE: 'perfil', USER: 'direto' };\n\nconst FILTROS: Array<{ value: Filtro; label: string }> = [\n\t{ value: 'all', label: 'Todas' },\n\t{ value: 'EFFECTIVE', label: 'Só efetivas' },\n\t{ value: 'INERT', label: 'Só inertes' },\n\t{ value: 'DENIED', label: 'Negadas' },\n\t{ value: 'inherited', label: 'Só herdadas' },\n];\n\nexport const EffectiveAccessPanel = ({ slots, onError }: EffectiveAccessPanelProps) => {\n\tconst api = useArchbaseRemoteServiceApi<ArchbaseSecurityDiagnosticsService>(\n\t\tARCHBASE_IOC_API_TYPE.SecurityDiagnostics,\n\t);\n\tconst [busca, setBusca] = useState<string>('');\n\tconst [report, setReport] = useState<ArchbaseEffectiveAccessReport | undefined>(undefined);\n\tconst [loading, setLoading] = useState<boolean>(false);\n\tconst [error, setError] = useState<string | undefined>(undefined);\n\tconst [filtro, setFiltro] = useState<Filtro>('all');\n\n\tconst consultar = useCallback(\n\t\tasync (identificador: string) => {\n\t\t\tconst alvo = identificador.trim();\n\t\t\tif (!alvo) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetLoading(true);\n\t\t\tsetError(undefined);\n\t\t\ttry {\n\t\t\t\t// Um e-mail tem '@'; qualquer outra coisa é tratada como id.\n\t\t\t\tconst resultado = alvo.includes('@')\n\t\t\t\t\t? await api.getEffectiveAccessByEmail(alvo)\n\t\t\t\t\t: await api.getEffectiveAccessByUserId(alvo);\n\t\t\t\tsetReport(resultado);\n\t\t\t} catch (erro) {\n\t\t\t\tconst mensagem = processErrorMessage(erro);\n\t\t\t\tsetError(mensagem);\n\t\t\t\tonError?.(mensagem);\n\t\t\t\tsetReport(undefined);\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t},\n\t\t[api, onError],\n\t);\n\n\tconst atributos = useMemo<ArchbaseDiagnosticAttribute[]>(() => {\n\t\tif (!report) {\n\t\t\treturn [];\n\t\t}\n\t\treturn [\n\t\t\t{ label: 'Perfil', value: report.profileName || '—' },\n\t\t\t{ label: 'Grupos', value: report.groupNames.length ? report.groupNames.join(', ') : '—' },\n\t\t\t...(slots?.userAttributes?.(report) ?? []),\n\t\t];\n\t}, [report, slots]);\n\n\tconst capacidades = useMemo(() => {\n\t\tif (!report) {\n\t\t\treturn [];\n\t\t}\n\t\tif (filtro === 'all') {\n\t\t\treturn report.capabilities;\n\t\t}\n\t\tif (filtro === 'inherited') {\n\t\t\treturn report.capabilities.filter((c) => c.grantedByType !== 'USER');\n\t\t}\n\t\treturn report.capabilities.filter((c) => c.situation === filtro);\n\t}, [report, filtro]);\n\n\tconst colunasExtras = slots?.additionalCapabilityColumns ?? [];\n\n\treturn (\n\t\t<Stack gap=\"lg\">\n\t\t\t<Section title=\"Consultar\" hint=\"por e-mail ou id do usuário\">\n\t\t\t\t{slots?.renderUserSearch ? (\n\t\t\t\t\tslots.renderUserSearch((identificador) => {\n\t\t\t\t\t\tsetBusca(identificador);\n\t\t\t\t\t\tvoid consultar(identificador);\n\t\t\t\t\t})\n\t\t\t\t) : (\n\t\t\t\t\t<Group gap=\"xs\" align=\"flex-end\">\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tstyle={{ flex: 1, minWidth: 240 }}\n\t\t\t\t\t\t\tlabel=\"Usuário\"\n\t\t\t\t\t\t\tplaceholder=\"pessoa@empresa.com.br\"\n\t\t\t\t\t\t\tvalue={busca}\n\t\t\t\t\t\t\tonChange={(event) => setBusca(event.currentTarget.value)}\n\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\tif (event.key === 'Enter') {\n\t\t\t\t\t\t\t\t\tvoid consultar(busca);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Button onClick={() => void consultar(busca)} loading={loading}>\n\t\t\t\t\t\t\tConsultar\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Group>\n\t\t\t\t)}\n\t\t\t</Section>\n\n\t\t\t{error ? (\n\t\t\t\t<Alert color=\"red\" title=\"Não foi possível ler o efetivo\">\n\t\t\t\t\t{error}\n\t\t\t\t</Alert>\n\t\t\t) : null}\n\n\t\t\t{loading && !report ? <Loader size=\"sm\" /> : null}\n\n\t\t\t{report ? (\n\t\t\t\t<>\n\t\t\t\t\t<Paper withBorder radius=\"md\" p=\"md\">\n\t\t\t\t\t\t<Stack gap=\"sm\">\n\t\t\t\t\t\t\t<Group gap={8} wrap=\"wrap\" align=\"center\">\n\t\t\t\t\t\t\t\t<Text fw={620}>{report.userLabel}</Text>\n\t\t\t\t\t\t\t\t{report.administrator ? <Badge color=\"red\">administrador</Badge> : null}\n\t\t\t\t\t\t\t\t{report.enabled ? null : <Badge color=\"red\">conta desativada</Badge>}\n\t\t\t\t\t\t\t\t{slots?.afterUserBadges?.(report)}\n\t\t\t\t\t\t\t</Group>\n\t\t\t\t\t\t\t<AttributeList attributes={atributos} />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</Paper>\n\n\t\t\t\t\t{report.administrator ? (\n\t\t\t\t\t\t<Alert color=\"orange\" title=\"Administrador passa direto\">\n\t\t\t\t\t\t\tO portão GRANT concede sem consultar o catálogo. A lista abaixo vir vazia não é falta de\n\t\t\t\t\t\t\tdado — é o atalho que a flag <code>isAdministrator</code> representa.\n\t\t\t\t\t\t</Alert>\n\t\t\t\t\t) : null}\n\n\t\t\t\t\t<SimpleGrid cols={{ base: 2, sm: 4 }} spacing=\"xs\">\n\t\t\t\t\t\t{(\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t['concedidas', report.granted, 'neutral'],\n\t\t\t\t\t\t\t\t['efetivas', report.effective, 'ok'],\n\t\t\t\t\t\t\t\t['inertes', report.inert, 'warning'],\n\t\t\t\t\t\t\t\t['negadas', report.denied, 'critical'],\n\t\t\t\t\t\t\t] as const\n\t\t\t\t\t\t).map(([rotulo, valor, severidade]) => (\n\t\t\t\t\t\t\t<Paper key={rotulo} withBorder radius=\"md\" p=\"sm\">\n\t\t\t\t\t\t\t\t<Stack gap={2}>\n\t\t\t\t\t\t\t\t\t<Text size=\"1.3rem\" fw={620} c={severityColor(severidade)}>\n\t\t\t\t\t\t\t\t\t\t{valor}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t<Text size=\"xs\" c=\"dimmed\">\n\t\t\t\t\t\t\t\t\t\t{rotulo}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t</Paper>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</SimpleGrid>\n\n\t\t\t\t\t{slots?.afterEffectiveTally?.(report)}\n\n\t\t\t\t\t<Section title=\"Capacidades\" hint={`${capacidades.length} de ${report.capabilities.length}`}>\n\t\t\t\t\t\t<Chip.Group multiple={false} value={filtro} onChange={(v) => setFiltro(v as Filtro)}>\n\t\t\t\t\t\t\t<Group gap={6}>\n\t\t\t\t\t\t\t\t{FILTROS.map((f) => (\n\t\t\t\t\t\t\t\t\t<Chip key={f.value} value={f.value} size=\"xs\" variant=\"outline\">\n\t\t\t\t\t\t\t\t\t\t{f.label}\n\t\t\t\t\t\t\t\t\t</Chip>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</Group>\n\t\t\t\t\t\t</Chip.Group>\n\n\t\t\t\t\t\t<Table.ScrollContainer minWidth={640}>\n\t\t\t\t\t\t\t<Table striped highlightOnHover withTableBorder>\n\t\t\t\t\t\t\t\t<Table.Thead>\n\t\t\t\t\t\t\t\t\t<Table.Tr>\n\t\t\t\t\t\t\t\t\t\t<Table.Th>Capacidade</Table.Th>\n\t\t\t\t\t\t\t\t\t\t<Table.Th>Origem</Table.Th>\n\t\t\t\t\t\t\t\t\t\t<Table.Th>Situação</Table.Th>\n\t\t\t\t\t\t\t\t\t\t{colunasExtras.map((coluna) => (\n\t\t\t\t\t\t\t\t\t\t\t<Table.Th key={coluna.header}>{coluna.header}</Table.Th>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</Table.Tr>\n\t\t\t\t\t\t\t\t</Table.Thead>\n\t\t\t\t\t\t\t\t<Table.Tbody>\n\t\t\t\t\t\t\t\t\t{capacidades.map((capacidade, indice) => (\n\t\t\t\t\t\t\t\t\t\t<Table.Tr key={`${capacidade.resource}:${capacidade.action}:${indice}`}>\n\t\t\t\t\t\t\t\t\t\t\t<Table.Td>\n\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"sm\" ff=\"monospace\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{capacidade.resource}:{capacidade.action}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</Table.Td>\n\t\t\t\t\t\t\t\t\t\t\t<Table.Td>\n\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text span c=\"dimmed\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ORIGEM[capacidade.grantedByType] ?? capacidade.grantedByType}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{capacidade.grantedByName}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</Table.Td>\n\t\t\t\t\t\t\t\t\t\t\t<Table.Td>\n\t\t\t\t\t\t\t\t\t\t\t\t<Badge color={SITUACAO[capacidade.situation].color} variant=\"light\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{SITUACAO[capacidade.situation].label}\n\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t</Table.Td>\n\t\t\t\t\t\t\t\t\t\t\t{colunasExtras.map((coluna) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<Table.Td key={coluna.header}>{coluna.render(capacidade, report)}</Table.Td>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</Table.Tr>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t{capacidades.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t<Table.Tr>\n\t\t\t\t\t\t\t\t\t\t\t<Table.Td colSpan={3 + colunasExtras.length}>\n\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNenhuma capacidade neste filtro.\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</Table.Td>\n\t\t\t\t\t\t\t\t\t\t</Table.Tr>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</Table.Tbody>\n\t\t\t\t\t\t\t</Table>\n\t\t\t\t\t\t</Table.ScrollContainer>\n\t\t\t\t\t</Section>\n\t\t\t\t</>\n\t\t\t) : null}\n\t\t</Stack>\n\t);\n};\n","/**\n * Simular — \"esta pessoa consegue fazer isto?\", e em qual portão parou quando não consegue.\n *\n * <p>O valor da tela não é o sim/não: é a <b>cadeia</b>. Saber que parou em LEVEL manda ajustar\n * nível; saber que parou em GRANT manda conceder. Sem isso, o operador tenta ao acaso.\n */\nimport React, { useCallback, useState } from 'react';\nimport { Alert, Badge, Button, Group, Loader, Paper, SimpleGrid, Stack, Text, TextInput } from '@mantine/core';\nimport { ARCHBASE_IOC_API_TYPE, processErrorMessage } from '@archbase/core';\nimport { useArchbaseRemoteServiceApi } from '@archbase/data';\nimport type {\n\tArchbaseAccessDecision,\n\tArchbaseAccessGate,\n\tArchbaseSecurityDiagnosticsService,\n} from '@archbase/security';\nimport { Section } from './DiagnosticPrimitives';\nimport type { ArchbaseSecurityDiagnosticsSlots } from './types';\n\nexport interface SimulationPanelProps {\n\tslots?: ArchbaseSecurityDiagnosticsSlots;\n\tonError?: (message: string) => void;\n}\n\n/**\n * Os cinco portões, com o papel de cada um.\n *\n * <p>O rótulo \"só nega\" não é enfeite: é a regra que organiza o modelo inteiro. Quatro portões\n * apenas recusam; um único concede. Quem entende isso para de procurar a concessão no lugar\n * errado.\n */\nconst PORTOES: Array<{ gate: ArchbaseAccessGate; titulo: string; papel: string; pergunta: string }> = [\n\t{ gate: 'IDENTITY', titulo: 'Identidade', papel: 'só nega', pergunta: 'O principal é resolvível e a conta está ativa?' },\n\t{ gate: 'SCOPE', titulo: 'Escopo', papel: 'só nega', pergunta: 'A concessão vale para o tenant, empresa e projeto pedidos?' },\n\t{ gate: 'RESTRICTION', titulo: 'Restrições', papel: 'só nega', pergunta: 'Perfil, papel e persona exigidos pela anotação.' },\n\t{ gate: 'LEVEL', titulo: 'Nível', papel: 'só nega', pergunta: 'O nível da pessoa alcança o piso da capacidade?' },\n\t{ gate: 'GRANT', titulo: 'Concessão', papel: 'concede', pergunta: 'Existe permissão, sem negação explícita?' },\n];\n\nexport const SimulationPanel = ({ slots, onError }: SimulationPanelProps) => {\n\tconst api = useArchbaseRemoteServiceApi<ArchbaseSecurityDiagnosticsService>(\n\t\tARCHBASE_IOC_API_TYPE.SecurityDiagnostics,\n\t);\n\tconst [usuario, setUsuario] = useState<string>('');\n\tconst [recurso, setRecurso] = useState<string>('');\n\tconst [acao, setAcao] = useState<string>('');\n\tconst [escopo, setEscopo] = useState<{ companyId?: string; projectId?: string }>({});\n\tconst [decision, setDecision] = useState<ArchbaseAccessDecision | undefined>(undefined);\n\tconst [loading, setLoading] = useState<boolean>(false);\n\tconst [error, setError] = useState<string | undefined>(undefined);\n\n\tconst simular = useCallback(async () => {\n\t\tif (!usuario.trim() || !recurso.trim() || !acao.trim()) {\n\t\t\treturn;\n\t\t}\n\t\tsetLoading(true);\n\t\tsetError(undefined);\n\t\ttry {\n\t\t\tconst alvo = usuario.trim();\n\t\t\tconst resultado = await api.simulate({\n\t\t\t\t...(alvo.includes('@') ? { email: alvo } : { userId: alvo }),\n\t\t\t\tresource: recurso.trim(),\n\t\t\t\taction: acao.trim(),\n\t\t\t\tcompanyId: escopo.companyId,\n\t\t\t\tprojectId: escopo.projectId,\n\t\t\t});\n\t\t\tsetDecision(resultado);\n\t\t} catch (erro) {\n\t\t\tconst mensagem = processErrorMessage(erro);\n\t\t\tsetError(mensagem);\n\t\t\tonError?.(mensagem);\n\t\t\tsetDecision(undefined);\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}, [api, usuario, recurso, acao, escopo, onError]);\n\n\t/** Um portão só é \"não avaliado\" quando a decisão parou antes dele. */\n\tconst situacaoDoPortao = (gate: ArchbaseAccessGate, d: ArchbaseAccessDecision) => {\n\t\tconst noResultado = d.chain?.find((o) => o.gate === gate);\n\t\tif (noResultado) {\n\t\t\treturn noResultado.passed ? 'passou' : 'negou';\n\t\t}\n\t\treturn 'nao-avaliado';\n\t};\n\n\treturn (\n\t\t<Stack gap=\"lg\">\n\t\t\t<Paper withBorder radius=\"md\" p=\"md\">\n\t\t\t\t<Stack gap=\"sm\">\n\t\t\t\t\t<SimpleGrid cols={{ base: 1, sm: 2, lg: 4 }} spacing=\"xs\">\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tlabel=\"Usuário\"\n\t\t\t\t\t\t\tplaceholder=\"e-mail ou id\"\n\t\t\t\t\t\t\tvalue={usuario}\n\t\t\t\t\t\t\tonChange={(e) => setUsuario(e.currentTarget.value)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tlabel=\"Recurso\"\n\t\t\t\t\t\t\tplaceholder=\"tms.ordemservico\"\n\t\t\t\t\t\t\tvalue={recurso}\n\t\t\t\t\t\t\tonChange={(e) => setRecurso(e.currentTarget.value)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tlabel=\"Ação\"\n\t\t\t\t\t\t\tplaceholder=\"aprovar_custo\"\n\t\t\t\t\t\t\tvalue={acao}\n\t\t\t\t\t\t\tonChange={(e) => setAcao(e.currentTarget.value)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tlabel=\"Empresa (opcional)\"\n\t\t\t\t\t\t\tplaceholder=\"companyId\"\n\t\t\t\t\t\t\tvalue={escopo.companyId ?? ''}\n\t\t\t\t\t\t\tonChange={(e) => setEscopo((s) => ({ ...s, companyId: e.currentTarget.value || undefined }))}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</SimpleGrid>\n\n\t\t\t\t\t{slots?.afterSimulationFields?.((novoEscopo) => setEscopo((s) => ({ ...s, ...novoEscopo })))}\n\n\t\t\t\t\t<Group gap=\"xs\" align=\"center\">\n\t\t\t\t\t\t<Button onClick={() => void simular()} loading={loading}>\n\t\t\t\t\t\t\tSimular\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Text size=\"xs\" c=\"dimmed\">\n\t\t\t\t\t\t\tSomente leitura — não altera permissão nenhuma.\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</Group>\n\t\t\t\t</Stack>\n\t\t\t</Paper>\n\n\t\t\t{error ? (\n\t\t\t\t<Alert color=\"red\" title=\"Não foi possível simular\">\n\t\t\t\t\t{error}\n\t\t\t\t</Alert>\n\t\t\t) : null}\n\n\t\t\t{loading && !decision ? <Loader size=\"sm\" /> : null}\n\n\t\t\t{decision ? (\n\t\t\t\t<>\n\t\t\t\t\t<Section title=\"Cadeia de decisão\" hint=\"os quatro primeiros só negam; só o quinto concede\">\n\t\t\t\t\t\t<Paper withBorder radius=\"md\" p=\"md\">\n\t\t\t\t\t\t\t<Stack gap=\"sm\">\n\t\t\t\t\t\t\t\t{PORTOES.map((portao, indice) => {\n\t\t\t\t\t\t\t\t\tconst situacao = situacaoDoPortao(portao.gate, decision);\n\t\t\t\t\t\t\t\t\tconst detalhe = decision.chain?.find((o) => o.gate === portao.gate)?.detail;\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<Group key={portao.gate} align=\"flex-start\" wrap=\"nowrap\" gap=\"sm\">\n\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" ff=\"monospace\" c=\"dimmed\" w={16}>\n\t\t\t\t\t\t\t\t\t\t\t\t{indice + 1}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t<Stack gap={2} style={{ flex: 1, minWidth: 0 }}>\n\t\t\t\t\t\t\t\t\t\t\t\t<Group gap={8} align=\"baseline\" wrap=\"wrap\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfw={600}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tc={situacao === 'negou' ? 'red' : undefined}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\topacity={situacao === 'nao-avaliado' ? 0.5 : 1}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{portao.titulo}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" c=\"dimmed\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t· {portao.papel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t</Group>\n\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" c=\"dimmed\" opacity={situacao === 'nao-avaliado' ? 0.5 : 1}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{portao.pergunta}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t{detalhe ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" c=\"dimmed\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{detalhe}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"light\"\n\t\t\t\t\t\t\t\t\t\t\t\tcolor={situacao === 'negou' ? 'red' : situacao === 'passou' ? 'green' : 'gray'}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{situacao === 'nao-avaliado' ? 'não avaliado' : situacao}\n\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t</Group>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</Paper>\n\t\t\t\t\t</Section>\n\n\t\t\t\t\t<Alert color={decision.allowed ? 'green' : 'red'} title={decision.allowed ? 'Pode' : 'Não pode'}>\n\t\t\t\t\t\t<Stack gap={6}>\n\t\t\t\t\t\t\t<Text size=\"sm\">{decision.message}</Text>\n\t\t\t\t\t\t\t<Text size=\"xs\" ff=\"monospace\" c=\"dimmed\">\n\t\t\t\t\t\t\t\treasonCode: {decision.reasonCode}\n\t\t\t\t\t\t\t\t{decision.deniedAt ? ` · deniedAt: ${decision.deniedAt}` : ''}\n\t\t\t\t\t\t\t\t{decision.grantedByName ? ` · grantedBy: ${decision.grantedByName}` : ''}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</Alert>\n\n\t\t\t\t\t{slots?.afterDecision?.(decision)}\n\t\t\t\t</>\n\t\t\t) : null}\n\t\t</Stack>\n\t);\n};\n","/**\n * ArchbaseSecurityDiagnosticsView — o <b>leitor</b> da segurança.\n *\n * <p>Deliberadamente separada da {@link ArchbaseSecurityView}, que é o <b>editor</b>: aquela\n * tem uma aba por tabela e serve para mudar o estado; esta responde perguntas e não escreve\n * nada. Misturá-las produziria uma tela com dois motivos para mudar.\n *\n * <p>Extensão pelo objeto {@code slots} — ver {@link ArchbaseSecurityDiagnosticsSlots} para a\n * regra dos três verbos ({@code before}/{@code after}, {@code additional}, {@code render}).\n *\n * @status experimental\n */\nimport React, { useState } from 'react';\nimport { Paper, Tabs } from '@mantine/core';\nimport { IconChartBar, IconListSearch, IconShieldSearch } from '@tabler/icons-react';\nimport { OverviewPanel } from './OverviewPanel';\nimport { EffectiveAccessPanel } from './EffectiveAccessPanel';\nimport { SimulationPanel } from './SimulationPanel';\nimport type { ArchbaseSecurityDiagnosticsViewProps } from './types';\n\nconst TODAS: Array<'overview' | 'effective' | 'simulate'> = ['overview', 'effective', 'simulate'];\n\nexport function ArchbaseSecurityDiagnosticsView({\n\theight = '100%',\n\twidth = '100%',\n\tdefaultTab = 'overview',\n\ttabs = TODAS,\n\tslots,\n\tonError,\n}: ArchbaseSecurityDiagnosticsViewProps) {\n\tconst [abaAtiva, setAbaAtiva] = useState<string | null>(defaultTab);\n\n\tconst mostra = (aba: 'overview' | 'effective' | 'simulate') => tabs.includes(aba);\n\n\treturn (\n\t\t<Paper style={{ height, width }} p=\"md\" withBorder={false}>\n\t\t\t<Tabs value={abaAtiva} onChange={setAbaAtiva} variant=\"pills\" keepMounted={false}>\n\t\t\t\t<Tabs.List mb=\"md\">\n\t\t\t\t\t{mostra('overview') ? (\n\t\t\t\t\t\t<Tabs.Tab value=\"overview\" leftSection={<IconChartBar size=\"1rem\" />}>\n\t\t\t\t\t\t\tPanorama\n\t\t\t\t\t\t</Tabs.Tab>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{mostra('effective') ? (\n\t\t\t\t\t\t<Tabs.Tab value=\"effective\" leftSection={<IconListSearch size=\"1rem\" />}>\n\t\t\t\t\t\t\tEfetivo do usuário\n\t\t\t\t\t\t</Tabs.Tab>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{mostra('simulate') ? (\n\t\t\t\t\t\t<Tabs.Tab value=\"simulate\" leftSection={<IconShieldSearch size=\"1rem\" />}>\n\t\t\t\t\t\t\tSimular\n\t\t\t\t\t\t</Tabs.Tab>\n\t\t\t\t\t) : null}\n\t\t\t\t</Tabs.List>\n\n\t\t\t\t{mostra('overview') ? (\n\t\t\t\t\t<Tabs.Panel value=\"overview\">\n\t\t\t\t\t\t<OverviewPanel slots={slots} onError={onError} />\n\t\t\t\t\t</Tabs.Panel>\n\t\t\t\t) : null}\n\t\t\t\t{mostra('effective') ? (\n\t\t\t\t\t<Tabs.Panel value=\"effective\">\n\t\t\t\t\t\t<EffectiveAccessPanel slots={slots} onError={onError} />\n\t\t\t\t\t</Tabs.Panel>\n\t\t\t\t) : null}\n\t\t\t\t{mostra('simulate') ? (\n\t\t\t\t\t<Tabs.Panel value=\"simulate\">\n\t\t\t\t\t\t<SimulationPanel slots={slots} onError={onError} />\n\t\t\t\t\t</Tabs.Panel>\n\t\t\t\t) : null}\n\t\t\t</Tabs>\n\t\t</Paper>\n\t);\n}\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","jsxRuntimeModule","require$$0","ProfileModal","props","options","handleSave","success","handleCancel","jsx","Modal","getI18nextInstance","ScrollArea","jsxs","Stack","Grid","ArchbaseEdit","Group","Button","ArchbaseDualListSelector","availableItemsDS","assignedItemsDS","idFieldAvailable","labelFieldAvailable","idFieldAssigned","labelFieldAssigned","handleCreateAssociationObject","width","height","titleAvailable","titleAssigned","useArchbaseV1V2Compatibility","assignedV1V2","availableItems","setAvailableItems","useState","assignedItems","setAssignedItems","selectedAvailable","setSelectedAvailable","selectedAssigned","setSelectedAssigned","loadItemsData","useCallback","useArchbaseDataSourceListener","useEffect","getItemId","item","field","getItemLabel","handleSelect","setId","id","prev","handleAdd","originalItem","newItem","handleRemove","record","criteria","Paper","Box","Text","List","Checkbox","g","Tooltip","ActionIcon","IconArrowRight","IconArrowLeft","RenderProfileUserItem","forwardRef","image","label","description","origin","others","ref","Flex","Space","defaultUserModalOptions","UserModal","passwordError","setPasswordError","rawPasswordChangedAt","parsedPasswordChangedAt","passwordChangedAt","basePasswordPolicy","resolveArchbasePasswordPolicy","personalTerms","term","passwordPolicy","groupApi","useArchbaseRemoteServiceApi","ARCHBASE_IOC_API_TYPE","dsGroups","useArchbaseRemoteDataSource","error","ArchbaseNotifications","profileApi","dsProfiles","setDefaultValues","filter","emit","builder","result","group","UserGroupDto","currentRecord","validateArchbasePassword","value","ArchbasePasswordEdit","ArchbaseSelect","option","Input","ArchbaseCheckbox","ArchbaseAvatarEdit","ArchbaseDataSource","Fragment","GroupModal","UserSelectItem","ApiTokenModal","useFocusTrap","setValue","userApi","v1v2Compatibility","handleChange","dateValue","isoString","convertDateToISOString","loadRemoteUsers","page","resolve","reject","processErrorMessage","DateTimePicker","ArchbaseAsyncSelect","translateDelimitedString","inputString","delimiter","part","PermissionsSelectorModal","dataSource","opened","close","name","useMemo","securityId","availablePermissionsTree","useTree","grantedPermissionsTree","availablePermissions","setAvailablePermissions","grantedPermissions","setGrantedPermissions","selectedAvailablePermission","setSelectedAvailablePermission","selectedGrantedPermission","setSelectedGrantedPermission","availablePermissionsFilter","setAvailablePermissionsFilter","debouncedAvailablePermissionsFilter","useDebouncedValue","grantedPermissionsFilter","setGrantedPermissionsFilter","debouncedGrantedPermissionsFilter","resourceApi","colorScheme","useMantineColorScheme","selectedColor","permissionsGrantedData","a","b","resourcePermissions","permission","grantedPermissionsActionIds","allPermissionsData","permissionGranted","resourcePermissionsGranted","getKeyByEnumValue","SecurityType","loadPermissions","permissionsGranted","allPermissions","resouceActionPermissionDto","updatedPermissionsGranted","resourceAvailablePermissions","resourcePermissionsNode","previousSelectedPermissionIndex","nextSelectedAvailablePermission","permissionNode","index","hasOnePermissionOnResource","resource","currentType","resourceGrantedPermissions","nextSelectedGrantedPermission","ArchbaseSpaceFixed","ArchbaseSpaceFill","TextInput","event","Tree","level","node","expanded","hasChildren","selected","elementProps","isGranted","textColor","textDecoration","handleClick","IconChevronDown","IconBorderCornerSquare","Badge","ArchbaseSpaceBottom","NO_USER","renderGroups","user","renderProfile","buildAccessTokenColumns","Columns","ArchbaseDataGridColumn","data","buildUserColumns","row","buildGroupColumns","buildProfileColumns","buildResourceColumns","SecurityGridPanel","active","printTitle","gridRef","isLoading","getRowId","striped","enableRowActions","toolbarLeftContent","renderRowActions","actionsColumnWidth","children","ArchbaseDataGrid","useSecurityEntityActions","securityType","newInstance","createEntitiesWithId","removeMessageKey","setOpenedModal","setOpenedPermissionsModal","validationContext","t","ds","posicionarEm","registro","ArchbaseDialog","SecurityRowActions","onView","onEdit","onRemove","onEditPermissions","before","after","theme","useArchbaseTheme","escuro","cor","nome","IconEye","IconEdit","IconTrashX","IconShieldCheckered","SecurityToolbarActions","onAdd","IconPlus","ArchbaseSecurityView","userModalOptions","profileModalOptions","groupModalOptions","useArchbaseStore","validator","useArchbaseValidator","setError","activeTab","setActiveTab","openedModal","openedPermissionsModal","accessTokenApi","useArchbaseTranslation","usersGridRef","useRef","groupsGridRef","profilesGridRef","resourcesGridRef","accessTokensGridRef","getUserRowId","getGroupRowId","getProfileRowId","getResourceRowId","getAccessTokenRowId","dsAccessTokens","isLoadingAccessTokens","refreshAccessTokens","useArchbaseRemoteDataSourceV2","dsUsers","isLoadingUsers","refreshUsers","isLoadingGroups","refreshGroups","isLoadingProfiles","refreshProfiles","dsResources","isLoadingResources","refreshResources","accessTokenColumns","userColumns","groupColumns","profileColumns","resourceColumns","useValidationErrors","userActions","UserDto","groupActions","GroupDto","profileActions","ProfileDto","buildUserRowActions","buildGroupRowActions","buildProfileRowActions","handleAccessTokenRevokeRow","currentAccessToken","processDetailErrorMessage","handleClosePermissionsModal","renderAccessTokensToolbarActions","Tabs","ArchbaseApiTokenView","templateStore","apiTokenApi","useArchbaseDataSource","localDataSourceV1V2","dsApiTokens","remoteDataSourceV1V2","heightTab","columns","today","expDate","diffTime","diffDays","percentage","color","tooltipText","RingProgress","handleCreateApiTokenExecute","ApiTokenDto","handleApiTokenRevokeRow","handleCloseApiTokenModal","handleSaveApiToken","callback","apiToken","response","ex","renderToolbarActions","severityColor","severity","MetricCard","card","MetricCards","cards","SimpleGrid","FlagStrip","flags","flag","AttributeList","attributes","attribute","Section","title","hint","percent","whole","buildFlags","overview","buildCards","OverviewPanel","slots","onError","api","setOverview","loading","setLoading","vivo","resultado","erro","mensagem","Loader","Alert","SITUACAO","ORIGEM","FILTROS","EffectiveAccessPanel","busca","setBusca","report","setReport","filtro","setFiltro","consultar","identificador","alvo","atributos","capacidades","c","colunasExtras","rotulo","valor","severidade","Chip","v","f","Table","coluna","capacidade","indice","PORTOES","SimulationPanel","usuario","setUsuario","recurso","setRecurso","acao","setAcao","escopo","setEscopo","decision","setDecision","simular","situacaoDoPortao","gate","d","noResultado","o","e","s","novoEscopo","portao","situacao","detalhe","TODAS","ArchbaseSecurityDiagnosticsView","defaultTab","tabs","abaAtiva","setAbaAtiva","mostra","aba","IconChartBar","IconListSearch","IconShieldSearch"],"mappings":"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","x_google_ignoreList":[0,1]}