@archbase/security-ui 4.1.0 → 4.1.1

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 (33) 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.1.1.tgz +0 -0
  11. package/dist/index.d.ts +18 -0
  12. package/dist/index.js +1091 -1128
  13. package/dist/securityDiagnostics/ArchbaseSecurityDiagnosticsView.d.ts +2 -0
  14. package/dist/securityDiagnostics/DiagnosticPrimitives.d.ts +34 -0
  15. package/dist/securityDiagnostics/EffectiveAccessPanel.d.ts +6 -0
  16. package/dist/securityDiagnostics/OverviewPanel.d.ts +6 -0
  17. package/dist/securityDiagnostics/SimulationPanel.d.ts +6 -0
  18. package/dist/securityDiagnostics/index.d.ts +6 -0
  19. package/dist/securityDiagnostics/types.d.ts +102 -0
  20. package/dist/securityView/SecurityGridPanel.d.ts +22 -0
  21. package/dist/securityView/SecurityRowActions.d.ts +15 -0
  22. package/dist/securityView/SecurityToolbarActions.d.ts +7 -0
  23. package/dist/securityView/UserItem.d.ts +7 -0
  24. package/dist/securityView/columns.d.ts +8 -0
  25. package/dist/securityView/index.d.ts +8 -0
  26. package/dist/securityView/noUserAvatar.d.ts +7 -0
  27. package/dist/securityView/types.d.ts +35 -0
  28. package/dist/securityView/useSecurityEntityActions.d.ts +32 -0
  29. package/package.json +6 -6
  30. package/dist/archbase-security-ui-4.1.0.tgz +0 -0
  31. package/dist/index.cjs +0 -10
  32. package/dist/index.cjs.map +0 -1
  33. package/dist/index.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ import { ArchbaseSecurityDiagnosticsViewProps } from './types';
2
+ export declare function ArchbaseSecurityDiagnosticsView({ height, width, defaultTab, tabs, slots, onError, }: ArchbaseSecurityDiagnosticsViewProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,34 @@
1
+ import { ReactNode } from 'react';
2
+ import { ArchbaseDiagnosticAttribute, ArchbaseDiagnosticCard, ArchbaseDiagnosticFlag, ArchbaseDiagnosticSeverity } from './types';
3
+ /** Cor semântica — separada do acento visual do tema, de propósito. */
4
+ export declare const severityColor: (severity: ArchbaseDiagnosticSeverity) => string;
5
+ export interface MetricCardProps {
6
+ card: ArchbaseDiagnosticCard;
7
+ }
8
+ /** Cartão de métrica: valor grande, denominador, rótulo e o porquê importa. */
9
+ export declare const MetricCard: ({ card }: MetricCardProps) => import("react/jsx-runtime").JSX.Element;
10
+ export interface MetricCardsProps {
11
+ cards: ArchbaseDiagnosticCard[];
12
+ }
13
+ export declare const MetricCards: ({ cards }: MetricCardsProps) => import("react/jsx-runtime").JSX.Element;
14
+ export interface FlagStripProps {
15
+ flags: ArchbaseDiagnosticFlag[];
16
+ }
17
+ /**
18
+ * Faixa de proteções.
19
+ *
20
+ * <p>Vem antes dos números na tela porque contagem alta de permissões não significa nada se o
21
+ * portão correspondente está inerte — e essa é a pergunta que o operador não sabe fazer.
22
+ */
23
+ export declare const FlagStrip: ({ flags }: FlagStripProps) => import("react/jsx-runtime").JSX.Element;
24
+ export interface AttributeListProps {
25
+ attributes: ArchbaseDiagnosticAttribute[];
26
+ }
27
+ /** Lista rótulo/valor — o layout onde entram perfil, grupos, nível e os atributos de negócio. */
28
+ export declare const AttributeList: ({ attributes }: AttributeListProps) => import("react/jsx-runtime").JSX.Element;
29
+ export interface SectionProps {
30
+ title: string;
31
+ hint?: string;
32
+ children: ReactNode;
33
+ }
34
+ export declare const Section: ({ title, hint, children }: SectionProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { ArchbaseSecurityDiagnosticsSlots } from './types';
2
+ export interface EffectiveAccessPanelProps {
3
+ slots?: ArchbaseSecurityDiagnosticsSlots;
4
+ onError?: (message: string) => void;
5
+ }
6
+ export declare const EffectiveAccessPanel: ({ slots, onError }: EffectiveAccessPanelProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { ArchbaseSecurityDiagnosticsSlots } from './types';
2
+ export interface OverviewPanelProps {
3
+ slots?: ArchbaseSecurityDiagnosticsSlots;
4
+ onError?: (message: string) => void;
5
+ }
6
+ export declare const OverviewPanel: ({ slots, onError }: OverviewPanelProps) => import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,6 @@
1
+ import { ArchbaseSecurityDiagnosticsSlots } from './types';
2
+ export interface SimulationPanelProps {
3
+ slots?: ArchbaseSecurityDiagnosticsSlots;
4
+ onError?: (message: string) => void;
5
+ }
6
+ export declare const SimulationPanel: ({ slots, onError }: SimulationPanelProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ export * from './types';
2
+ export * from './DiagnosticPrimitives';
3
+ export * from './OverviewPanel';
4
+ export * from './EffectiveAccessPanel';
5
+ export * from './SimulationPanel';
6
+ export * from './ArchbaseSecurityDiagnosticsView';
@@ -0,0 +1,102 @@
1
+ import { ReactNode } from 'react';
2
+ import { ArchbaseAccessDecision, ArchbaseAccessOverview, ArchbaseEffectiveAccessReport, ArchbaseEffectiveCapability } from '@archbase/security';
3
+ /**
4
+ * Um atributo de negócio exibido no painel de identidade — rótulo e valor.
5
+ *
6
+ * <p>Existe para o caso mais comum de composição: a aplicação sabe o departamento, o centro
7
+ * de custo, a matrícula; o framework não sabe e não deveria saber. Entregando <b>dado</b> em
8
+ * vez de JSX, o atributo sai no mesmo layout de "Perfil / Grupos / Nível" — sem cada projeto
9
+ * inventar a própria formatação de rótulo.
10
+ */
11
+ export interface ArchbaseDiagnosticAttribute {
12
+ label: string;
13
+ value: ReactNode;
14
+ }
15
+ /** Severidade de um cartão ou indicador. Separada do acento visual, de propósito. */
16
+ export type ArchbaseDiagnosticSeverity = 'critical' | 'warning' | 'ok' | 'neutral';
17
+ /** Cartão de métrica no Panorama, no mesmo formato dos que o framework desenha. */
18
+ export interface ArchbaseDiagnosticCard {
19
+ severity: ArchbaseDiagnosticSeverity;
20
+ value: ReactNode;
21
+ /** Denominador ou unidade — "de 61 usuários". */
22
+ of?: string;
23
+ label: string;
24
+ description?: string;
25
+ }
26
+ /** Indicador de proteção ligada/desligada, na faixa do topo do Panorama. */
27
+ export interface ArchbaseDiagnosticFlag {
28
+ key: string;
29
+ label: string;
30
+ value: string;
31
+ severity: ArchbaseDiagnosticSeverity;
32
+ description?: string;
33
+ }
34
+ /**
35
+ * Pontos de inserção da view — os <b>slots</b>.
36
+ *
37
+ * <p><b>Três verbos, três significados.</b> A regra vale para toda a view e é o que evita que
38
+ * a extensão vire colcha de retalhos:
39
+ *
40
+ * <ul>
41
+ * <li>{@code before<X>} / {@code after<X>} — <b>insere</b> um nó antes ou depois da região
42
+ * X, que continua desenhada pelo framework. É a convenção que a
43
+ * {@code ArchbaseSecurityView} já usa em {@code beforeDefaultUserActions}.</li>
44
+ * <li>{@code additional<X>} — <b>acrescenta dado</b> a uma coleção que o framework desenha.
45
+ * A aplicação entrega o dado, não o JSX, e a coerência visual se mantém sozinha.</li>
46
+ * <li>{@code render<X>} — <b>substitui</b> a região inteira. Válvula de escape, para quando
47
+ * o que o framework desenha não serve.</li>
48
+ * </ul>
49
+ *
50
+ * <p>Prefira {@code additional} ao {@code render} sempre que couber: é o que mantém as telas
51
+ * de todos os produtos parecidas entre si.
52
+ */
53
+ export interface ArchbaseSecurityDiagnosticsSlots {
54
+ /** Indicadores de proteção da própria aplicação, ao lado dos do framework. */
55
+ additionalFlags?: (overview: ArchbaseAccessOverview) => ArchbaseDiagnosticFlag[];
56
+ /** Cartões de métrica de negócio, na mesma grade e linguagem visual. */
57
+ additionalOverviewCards?: (overview: ArchbaseAccessOverview) => ArchbaseDiagnosticCard[];
58
+ /** Região livre no fim do Panorama — painel próprio, gráfico, link para relatório. */
59
+ afterOverview?: (overview: ArchbaseAccessOverview) => ReactNode;
60
+ /**
61
+ * Substitui o seletor de usuário inteiro.
62
+ *
63
+ * <p>É por aqui que entra "buscar pessoa por departamento": o framework identifica alguém
64
+ * por id ou e-mail e não tem como saber o que é departamento.
65
+ */
66
+ renderUserSearch?: (onSelect: (userIdOrEmail: string) => void) => ReactNode;
67
+ /** Selos ao lado do nome — "terceirizado", "afastado", "contrato vencido". */
68
+ afterUserBadges?: (report: ArchbaseEffectiveAccessReport) => ReactNode;
69
+ /** Atributos de negócio no painel de identidade. O lugar dos departamentos. */
70
+ userAttributes?: (report: ArchbaseEffectiveAccessReport) => ArchbaseDiagnosticAttribute[];
71
+ /** Entre os contadores e a tabela de capacidades. */
72
+ afterEffectiveTally?: (report: ArchbaseEffectiveAccessReport) => ReactNode;
73
+ /** Colunas extras na tabela, com o cabeçalho e o conteúdo por linha. */
74
+ additionalCapabilityColumns?: Array<{
75
+ header: string;
76
+ render: (capability: ArchbaseEffectiveCapability, report: ArchbaseEffectiveAccessReport) => ReactNode;
77
+ }>;
78
+ /**
79
+ * Campos de negócio no formulário de simulação.
80
+ *
81
+ * <p><b>Limite:</b> o que for coletado aqui só chega ao servidor se a aplicação mapear para
82
+ * {@code companyId} ou {@code projectId} pelo {@code onScopeChange} — o avaliador não
83
+ * conhece outra dimensão de escopo.
84
+ */
85
+ afterSimulationFields?: (onScopeChange: (scope: {
86
+ companyId?: string;
87
+ projectId?: string;
88
+ }) => void) => ReactNode;
89
+ /** Depois do veredito — a tradução do motivo técnico para a linguagem do negócio. */
90
+ afterDecision?: (decision: ArchbaseAccessDecision) => ReactNode;
91
+ }
92
+ /** Props da view de diagnóstico. */
93
+ export interface ArchbaseSecurityDiagnosticsViewProps {
94
+ height?: string | number;
95
+ width?: string | number;
96
+ /** Aba inicial. */
97
+ defaultTab?: 'overview' | 'effective' | 'simulate';
98
+ /** Abas a exibir. Omitido = todas. */
99
+ tabs?: Array<'overview' | 'effective' | 'simulate'>;
100
+ slots?: ArchbaseSecurityDiagnosticsSlots;
101
+ onError?: (message: string) => void;
102
+ }
@@ -0,0 +1,22 @@
1
+ import { default as React, ReactNode } from 'react';
2
+ import { ArchbaseDataGridRef } from '@archbase/components';
3
+ import { IArchbaseDataSourceBase } from '@archbase/data';
4
+ export interface SecurityGridPanelProps<T extends object> {
5
+ /** Aba visível. A escondida permanece montada. */
6
+ active: boolean;
7
+ printTitle: string;
8
+ gridRef: React.MutableRefObject<ArchbaseDataGridRef | null>;
9
+ dataSource: IArchbaseDataSourceBase<T>;
10
+ isLoading: boolean;
11
+ error?: string;
12
+ getRowId: (row: T) => string;
13
+ striped?: boolean;
14
+ /** Recursos e tokens de acesso não têm ações por linha. */
15
+ enableRowActions?: boolean;
16
+ toolbarLeftContent?: ReactNode;
17
+ renderRowActions?: (row: T) => ReactNode;
18
+ actionsColumnWidth?: number;
19
+ /** As colunas, no formato declarativo do grid. */
20
+ children: ReactNode;
21
+ }
22
+ export declare function SecurityGridPanel<T extends object>({ active, printTitle, gridRef, dataSource, isLoading, error, getRowId, striped, enableRowActions, toolbarLeftContent, renderRowActions, actionsColumnWidth, children, }: SecurityGridPanelProps<T>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,15 @@
1
+ import { ReactNode } from 'react';
2
+ import { TranslateFn } from './columns';
3
+ export interface SecurityRowActionsProps<T> {
4
+ row: T;
5
+ onView: (row: T) => void;
6
+ onEdit: (row: T) => void;
7
+ onRemove: (row: T) => void;
8
+ onEditPermissions: () => void;
9
+ /** Slot: entra antes das ações padrão. */
10
+ before?: (row: T) => ReactNode;
11
+ /** Slot: entra depois das ações padrão. */
12
+ after?: (row: T) => ReactNode;
13
+ t: TranslateFn;
14
+ }
15
+ export declare function SecurityRowActions<T>({ row, onView, onEdit, onRemove, onEditPermissions, before, after, t, }: SecurityRowActionsProps<T>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { TranslateFn } from './columns';
2
+ export interface SecurityToolbarActionsProps {
3
+ onAdd: () => void;
4
+ onEditPermissions: () => void;
5
+ t: TranslateFn;
6
+ }
7
+ export declare const SecurityToolbarActions: ({ onAdd, onEditPermissions, t }: SecurityToolbarActionsProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { ArchbaseListCustomItemProps } from '@archbase/components';
2
+ import { UserDto } from '@archbase/security';
3
+ export declare const renderGroups: (user: UserDto) => import("react/jsx-runtime").JSX.Element | null;
4
+ export declare const renderProfile: (user: UserDto) => import("react/jsx-runtime").JSX.Element | null;
5
+ export interface UserItemProps extends ArchbaseListCustomItemProps<UserDto, string> {
6
+ }
7
+ export declare const UserItem: (props: UserItemProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ /** A função de tradução do {@code useArchbaseTranslation}. */
2
+ /** Assinatura do `t` devolvido por useArchbaseTranslation. */
3
+ export type TranslateFn = (chave: string, opcoes?: any) => string | object;
4
+ export declare const buildAccessTokenColumns: (t: TranslateFn) => import("react/jsx-runtime").JSX.Element;
5
+ export declare const buildUserColumns: (t: TranslateFn) => import("react/jsx-runtime").JSX.Element;
6
+ export declare const buildGroupColumns: (t: TranslateFn) => import("react/jsx-runtime").JSX.Element;
7
+ export declare const buildProfileColumns: (t: TranslateFn) => import("react/jsx-runtime").JSX.Element;
8
+ export declare const buildResourceColumns: (t: TranslateFn) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ export * from './noUserAvatar';
2
+ export * from './types';
3
+ export * from './UserItem';
4
+ export * from './columns';
5
+ export * from './SecurityGridPanel';
6
+ export * from './useSecurityEntityActions';
7
+ export * from './SecurityRowActions';
8
+ export * from './SecurityToolbarActions';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Avatar exibido quando o usuário não tem imagem.
3
+ *
4
+ * Mora em arquivo próprio porque são ~2 KB de base64 no meio do código: dentro da view
5
+ * ele empurrava a lógica para baixo da dobra em qualquer editor.
6
+ */
7
+ export declare const NO_USER = "data:image/png;base64,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";
@@ -0,0 +1,35 @@
1
+ import { ReactNode } from 'react';
2
+ import { ArchbaseDataSource } from '@archbase/data';
3
+ import { GroupDto, ProfileDto, UserDto } from '@archbase/security';
4
+ import { GroupModalOptions } from '../GroupModal';
5
+ import { ProfileModalOptions } from '../ProfileModal';
6
+ import { UserModalOptions } from '../UserModal';
7
+ /**
8
+ * Pontos de inserção da view — os <b>slots</b>.
9
+ *
10
+ * <p>A convenção é {@code before<Região>} / {@code after<Região>}: a aplicação devolve o
11
+ * nó a inserir e o framework decide onde ele cai. É o que permite compor informação de
12
+ * negócio (departamento, centro de custo, contrato) numa tela que o framework desenha,
13
+ * sem que o framework precise conhecer esses conceitos.
14
+ */
15
+ export interface ArchbaseSecurityProps {
16
+ beforeDefaultUserActions?: (row: UserDto) => ReactNode;
17
+ afterDefaultUserActions?: (row: UserDto) => ReactNode;
18
+ beforeDefaultProfileActions?: (row: ProfileDto) => ReactNode;
19
+ afterDefaultProfileActions?: (row: ProfileDto) => ReactNode;
20
+ beforeDefaultGroupActions?: (row: GroupDto) => ReactNode;
21
+ afterDefaultGroupActions?: (row: GroupDto) => ReactNode;
22
+ userActionsColumnWidth?: number;
23
+ profileActionsColumnWidth?: number;
24
+ groupActionsColumnWidth?: number;
25
+ }
26
+ export interface ArchbaseSecurityManagerProps {
27
+ height?: any;
28
+ width?: any;
29
+ dataSourceUsers?: ArchbaseDataSource<UserDto, string>;
30
+ createEntitiesWithId?: boolean;
31
+ userModalOptions?: UserModalOptions;
32
+ groupModalOptions?: GroupModalOptions;
33
+ profileModalOptions?: ProfileModalOptions;
34
+ options?: ArchbaseSecurityProps;
35
+ }
@@ -0,0 +1,32 @@
1
+ import { IArchbaseDataSourceBase } from '@archbase/data';
2
+ import { TranslateFn } from './columns';
3
+ export interface SecurityEntityActionsParams<T> {
4
+ dataSource: IArchbaseDataSourceBase<T>;
5
+ /** Discriminador usado para saber qual modal abrir. */
6
+ securityType: string;
7
+ /** Fábrica do registro novo — {@code UserDto.newInstance()} e afins. */
8
+ newInstance: () => T;
9
+ /** Quando falso, o id do registro novo é apagado antes de inserir. */
10
+ createEntitiesWithId: boolean;
11
+ /**
12
+ * Chave da mensagem de confirmação de remoção, já com o artigo e o substantivo:
13
+ * {@code 'archbase:Deseja remover o usuário '}. O nome do registro é concatenado.
14
+ */
15
+ removeMessageKey: string;
16
+ setOpenedModal: (valor: string) => void;
17
+ setOpenedPermissionsModal: (valor: string) => void;
18
+ validationContext?: {
19
+ clearAll: () => void;
20
+ };
21
+ t: TranslateFn;
22
+ }
23
+ export interface SecurityEntityActions<T> {
24
+ handleAdd: () => void;
25
+ handleViewRow: (row: any) => void;
26
+ handleEditRow: (row: any) => void;
27
+ handleRemoveRow: (row: any) => void;
28
+ handleSaveModal: () => Promise<void>;
29
+ handleCancelModal: () => void;
30
+ handleOpenPermissionsModal: () => void;
31
+ }
32
+ export declare function useSecurityEntityActions<T>({ dataSource, securityType, newInstance, createEntitiesWithId, removeMessageKey, setOpenedModal, setOpenedPermissionsModal, validationContext, t, }: SecurityEntityActionsParams<T>): SecurityEntityActions<T>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@archbase/security-ui",
3
- "version": "4.1.0",
3
+ "version": "4.1.1",
4
4
  "description": "Security UI components for Archbase React - Forms, Modals, and Views",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -40,11 +40,11 @@
40
40
  "inversify-react": "^1.1.0",
41
41
  "rxjs": "^7.8.2",
42
42
  "uuid": "^9.0.1",
43
- "@archbase/core": "4.1.0",
44
- "@archbase/data": "4.1.0",
45
- "@archbase/components": "4.1.0",
46
- "@archbase/layout": "4.1.0",
47
- "@archbase/security": "4.1.0"
43
+ "@archbase/layout": "4.1.1",
44
+ "@archbase/core": "4.1.1",
45
+ "@archbase/components": "4.1.1",
46
+ "@archbase/data": "4.1.1",
47
+ "@archbase/security": "4.1.1"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@types/react": "^19.0.6",
Binary file
package/dist/index.cjs DELETED
@@ -1,10 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("@mantine/core"),r=require("@archbase/core"),i=require("@archbase/components"),k=require("@archbase/data"),d=require("react"),O=require("@tabler/icons-react"),L=require("@archbase/security"),Ye=require("@mantine/dates"),pe=require("@mantine/hooks"),ce=require("@archbase/layout");var de={exports:{}},ee={};/**
2
- * @license React
3
- * react-jsx-runtime.production.js
4
- *
5
- * Copyright (c) Meta Platforms, Inc. and affiliates.
6
- *
7
- * This source code is licensed under the MIT license found in the
8
- * LICENSE file in the root directory of this source tree.
9
- */var ge;function Je(){if(ge)return ee;ge=1;var t=Symbol.for("react.transitional.element"),s=Symbol.for("react.fragment");function c(l,u,o){var j=null;if(o!==void 0&&(j=""+o),u.key!==void 0&&(j=""+u.key),"key"in u){o={};for(var f in u)f!=="key"&&(o[f]=u[f])}else o=u;return u=o.ref,{$$typeof:t,type:l,key:j,ref:u!==void 0?u:null,props:o}}return ee.Fragment=s,ee.jsx=c,ee.jsxs=c,ee}var be;function Ze(){return be||(be=1,de.exports=Je()),de.exports}var e=Ze();const ve=t=>{const s={...t.options??{}},c=()=>{t.onCustomSave?t.onCustomSave(t.dataSource.getCurrentRecord(),u=>{u&&t.onAfterSave&&t.onAfterSave(t.dataSource.getCurrentRecord()),t.onClickOk(t.dataSource.getCurrentRecord(),u)}):t.onClickOk(t.dataSource.getCurrentRecord(),!0)},l=()=>{t.onClickCancel(t.dataSource.getCurrentRecord())};return e.jsx(a.Modal,{opened:t.opened,onClose:l,title:r.getI18nextInstance().t("archbase:Perfil"),size:"60%",styles:{content:{maxWidth:1e3}},children:e.jsx(a.ScrollArea,{style:{height:"460px"},children:e.jsxs(a.Stack,{w:"98%",children:[s?.customContentBefore&&s.customContentBefore(t.dataSource.getCurrentRecord()),e.jsxs(a.Grid,{children:[e.jsx(a.Grid.Col,{span:{base:12,md:12,lg:12},children:e.jsx(i.ArchbaseEdit,{label:`${r.getI18nextInstance().t("archbase:Nome do perfil")}`,placeholder:`${r.getI18nextInstance().t("archbase:Informe o nome do perfil")}`,dataSource:t.dataSource,dataField:"name"})}),e.jsx(a.Grid.Col,{span:{base:12,md:12,lg:12},children:e.jsx(i.ArchbaseEdit,{label:`${r.getI18nextInstance().t("archbase:Descrição do perfil")}`,placeholder:`${r.getI18nextInstance().t("archbase:Informe a descrição do perfil")}`,dataSource:t.dataSource,dataField:"description"})})]}),s?.customContentAfter&&s.customContentAfter(t.dataSource.getCurrentRecord()),e.jsxs(a.Group,{justify:"flex-end",mt:"md",children:[e.jsx(a.Button,{variant:"default",onClick:l,children:r.getI18nextInstance().t("archbase:Cancelar")}),e.jsx(a.Button,{onClick:c,children:r.getI18nextInstance().t("archbase:Salvar")})]})]})})})};function je({availableItemsDS:t,assignedItemsDS:s,idFieldAvailable:c,labelFieldAvailable:l,idFieldAssigned:u,labelFieldAssigned:o,handleCreateAssociationObject:j,width:f="400px",height:I="200px",titleAvailable:h="Disponíveis",titleAssigned:C="Selecionados"}){k.useArchbaseV1V2Compatibility("ArchbaseDualListSelector-Available",t,void 0,[]);const p=k.useArchbaseV1V2Compatibility("ArchbaseDualListSelector-Assigned",s,void 0,[]),[v,D]=d.useState([]),[S,U]=d.useState([]),[M,n]=d.useState([]),[x,b]=d.useState([]),P=d.useCallback(()=>{t&&D(t.browseRecords()),s&&U(s.browseRecords())},[t,s]);k.useArchbaseDataSourceListener({dataSource:t,listener:()=>P()}),k.useArchbaseDataSourceListener({dataSource:s,listener:()=>P()}),d.useEffect(()=>{P()},[P]);const E=(y,w)=>typeof w=="function"?w(y):y[w],A=(y,w)=>typeof w=="function"?w(y):y[w],H=(y,w)=>{y(T=>T.includes(w)?T.filter(X=>X!==w):[...T,w])},V=()=>{M.forEach(y=>{const w=v.find(T=>E(T,c)===y);if(w){const T=j(w);p.isDataSourceV2?(s.insert(T),s.save()):(s.insert(T),s.save(),p.v1State.forceUpdate())}}),n([])},q=()=>{x.forEach(y=>{const w=S.find(T=>E(T,u)===y);if(w){const T=typeof u=="function"?{customId:u(w)}:{[u]:y};p.isDataSourceV2?s.remove(()=>s.locate(T)):(s.remove(()=>s.locate(T)),p.v1State.forceUpdate())}}),b([])};return e.jsxs(a.Paper,{withBorder:!0,style:{display:"flex",width:f,height:I},children:[e.jsxs(a.Box,{style:{minWidth:"44%",minHeight:I},children:[e.jsx(a.Text,{children:h}),e.jsx(a.List,{spacing:"xs",size:"sm",center:!0,listStyleType:"none",style:{margin:"6px",overflowY:"auto",overflowX:"hidden",height:"calc(100% - 32px)"},children:v.map(y=>e.jsx(a.List.Item,{children:e.jsx(a.Checkbox,{label:A(y,l),checked:M.includes(E(y,c)),onChange:()=>H(n,E(y,c)),disabled:S.some(w=>E(w,u)===E(y,c))})},E(y,c)))})]}),e.jsxs(a.Stack,{gap:5,style:{minWidth:"10%"},justify:"center",align:"center",children:[e.jsx(a.Tooltip,{label:"Adicionar",children:e.jsx(a.ActionIcon,{onClick:V,disabled:!M.length,children:e.jsx(O.IconArrowRight,{})})}),e.jsx(a.Tooltip,{label:"Remover",children:e.jsx(a.ActionIcon,{onClick:q,disabled:!x.length,children:e.jsx(O.IconArrowLeft,{})})})]}),e.jsxs(a.Box,{style:{minWidth:"44%",minHeight:I},children:[e.jsx(a.Text,{children:C}),e.jsx(a.List,{spacing:"xs",size:"sm",center:!0,listStyleType:"none",style:{margin:"6px",overflowY:"auto",overflowX:"hidden",height:"calc(100% - 32px)"},children:S.map(y=>e.jsx(a.List.Item,{children:e.jsx(a.Checkbox,{label:A(y,o),checked:x.includes(E(y,u)),onChange:()=>H(b,E(y,u))})},E(y,u)))})]})]})}const Se=d.forwardRef(({image:t,label:s,description:c,origin:l,...u},o)=>e.jsx("div",{ref:o,...u,children:e.jsxs(a.Flex,{children:[e.jsx(a.Text,{size:"sm",fw:600,children:l?l.name:""}),e.jsx(a.Space,{w:"lg"})]})})),Ke={showNickname:!0,showProfile:!0,showGroups:!0,showChangePasswordOnNextLogin:!0,showAllowPasswordChange:!0,showPasswordNeverExpires:!0,showPasswordChangedAt:!0,showPasswordRequirements:!0,forbidPersonalDataInPassword:!0,showAccountConfigLabel:!0,showAccountDeactivated:!0,showAccountLocked:!0,showIsAdministrator:!0,requiredNickname:!0,avatarMaxSizeKB:2e3,avatarImageQuality:1,avatarMaxOutputSizePx:512,allowEditEmail:!0},Ce=t=>{const[s,c]=d.useState(""),l={...Ke,...t.options??{}},u=t.dataSource.getFieldValue("passwordChangedAt"),o=u?new Date(u):void 0,j=o&&!Number.isNaN(o.getTime())?o.toLocaleString():void 0,f=r.resolveArchbasePasswordPolicy(l.passwordPolicy),I=l.forbidPersonalDataInPassword?["name","nickname","email"].map(n=>{const x=t.dataSource.getFieldValue(n);return n==="email"&&x?x.split("@")[0]:x}).filter(n=>typeof n=="string"&&n.trim().length>=3):[],h=f?{...f,blocklist:[...f.blocklist??[],...I]}:void 0,C=k.useArchbaseRemoteServiceApi(r.ARCHBASE_IOC_API_TYPE.Group),{dataSource:p}=k.useArchbaseRemoteDataSource({name:"dsGroups",service:C,pageSize:9999,loadOnStart:!0,sort:["name:asc"],onError:(n,x)=>{i.ArchbaseNotifications.showError(r.getI18nextInstance().t("archbase:WARNING"),n,x)}});console.log("versão 12/05/2026");const v=k.useArchbaseRemoteServiceApi(r.ARCHBASE_IOC_API_TYPE.Profile),{dataSource:D}=k.useArchbaseRemoteDataSource({name:"dsProfiles",service:v,pageSize:9999,loadOnStart:!0,sort:["name:asc"],onError:(n,x)=>{i.ArchbaseNotifications.showError(r.getI18nextInstance().t("archbase:WARNING"),n,x)}});d.useEffect(()=>{c("")},[t.dataSource.getFieldValue("password")]);const S=async()=>{if(t.dataSource.isInserting()){if(l.userDefaultProfile){const n=r.emit(r.builder.eq("name",l.userDefaultProfile)),x=await v.findAllWithFilter(n,0,1);x&&x.content.length>0&&t.dataSource.setFieldValue("profile",x.content[0])}if(l.userDefaultGroups){const n=r.emit(r.builder.in("name",l.userDefaultGroups)),x=await C.findAllWithFilter(n,0,500);x&&x.content.length>0&&t.dataSource.setFieldValue("groups",x.content.map(b=>L.UserGroupDto.newInstance(b)))}}};d.useEffect(()=>{t.opened&&S()},[t.opened]);const U=()=>{const n=t.dataSource.getCurrentRecord();if(!n.password&&t.dataSource.isInserting()){c(r.getI18nextInstance().t("archbase:Informe a senha"));return}if(h&&n.password){const x=r.validateArchbasePassword(n.password,h);if(!x.valid){c(x.error);return}}t.onCustomSave?t.onCustomSave(n,x=>{x&&t.onAfterSave&&t.onAfterSave(n),t.onClickOk(n,x)}):t.onClickOk(n,!0)},M=()=>{t.onClickCancel(t.dataSource.getCurrentRecord())};return e.jsxs(a.Modal,{opened:t.opened,onClose:M,title:r.getI18nextInstance().t("archbase:Usuário"),size:"80%",styles:{content:{maxWidth:1e3}},children:[e.jsx(a.ScrollArea,{style:{height:"500px"},children:e.jsxs(a.Stack,{w:"98%",children:[l?.customContentBefore&&e.jsx(e.Fragment,{children:l.customContentBefore(t.dataSource.getCurrentRecord())}),e.jsxs(a.Grid,{children:[e.jsx(a.Grid.Col,{span:{base:12,md:6,lg:6},children:e.jsxs(a.Group,{children:[e.jsx(i.ArchbaseEdit,{label:`${r.getI18nextInstance().t("archbase:Nome completo")}`,placeholder:`${r.getI18nextInstance().t("archbase:Informe o nome completo do usuário")}`,dataSource:t.dataSource,dataField:"name",required:!0,width:"calc(100% - 208px)"}),l.showNickname&&e.jsx(i.ArchbaseEdit,{label:`${r.getI18nextInstance().t("archbase:Apelido")}`,placeholder:`${r.getI18nextInstance().t("archbase:Apelido")}`,dataSource:t.dataSource,dataField:"nickname",required:l.requiredNickname})]})}),e.jsx(a.Grid.Col,{span:{base:12,md:6,lg:6},children:e.jsx(i.ArchbaseEdit,{label:`${r.getI18nextInstance().t("archbase:Descrição do usuário")}`,placeholder:`${r.getI18nextInstance().t("archbase:Informe a descrição do usuário")}`,dataSource:t.dataSource,dataField:"description",required:!0})})]}),e.jsxs(a.Grid,{children:[e.jsx(a.Grid.Col,{span:{base:12,md:6,lg:6},children:e.jsx(i.ArchbaseEdit,{label:`${r.getI18nextInstance().t("archbase:E-mail")}`,placeholder:`${r.getI18nextInstance().t("archbase:Informe o e-mail do usuário")}`,dataSource:t.dataSource,onChangeValue:n=>t.dataSource.setFieldValue("userName",n),dataField:"email",readOnly:t.dataSource.isEditing()?!l.allowEditEmail:!1,required:!0})}),e.jsx(a.Grid.Col,{span:{base:12,md:6,lg:6},children:e.jsx(i.ArchbasePasswordEdit,{label:`${r.getI18nextInstance().t("archbase:Senha usuário")}`,dataSource:t.dataSource,dataField:"password",error:s,required:t.dataSource.getFieldValue("isNewUser"),passwordPolicy:h,showPasswordRequirements:l.showPasswordRequirements})})]}),e.jsx(a.Grid,{children:l.showProfile&&e.jsx(a.Grid.Col,{span:{base:12,md:6,lg:6},children:e.jsx(i.ArchbaseSelect,{label:`${r.getI18nextInstance().t("archbase:Perfil do usuário")}`,dataSource:t.dataSource,dataField:"profile",options:D,allowDeselect:!0,optionsLabelField:"nome",itemComponent:Se,getOptionLabel:n=>n.name,getOptionValue:n=>n.id})})}),e.jsxs(a.Grid,{children:[e.jsx(a.Grid.Col,{span:{base:12},children:l.showAccountConfigLabel&&e.jsx(a.Text,{fz:14,fw:500,children:"Informe"})}),e.jsx(a.Grid.Col,{span:{base:12,md:4,lg:4},children:e.jsxs(a.Stack,{gap:"lg",children:[l.showChangePasswordOnNextLogin&&e.jsx(a.Input.Wrapper,{label:"",children:e.jsx(i.ArchbaseCheckbox,{dataSource:t.dataSource,dataField:"changePasswordOnNextLogin",label:`${r.getI18nextInstance().t("archbase:Deve alterar senha próximo login ?")}`})}),l.showAllowPasswordChange&&e.jsx(a.Input.Wrapper,{label:"",children:e.jsx(i.ArchbaseCheckbox,{dataSource:t.dataSource,dataField:"allowPasswordChange",label:`${r.getI18nextInstance().t("archbase:Pode alterar a senha ?")}`})}),l.showPasswordNeverExpires&&e.jsxs(a.Input.Wrapper,{label:"",children:[e.jsx(i.ArchbaseCheckbox,{dataSource:t.dataSource,dataField:"passwordNeverExpires",label:`${r.getI18nextInstance().t("archbase:Senha nunca expira ?")}`}),e.jsx(a.Text,{fz:12,c:"dimmed",children:r.getI18nextInstance().t('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".')})]}),l.showPasswordChangedAt&&j&&e.jsx(a.Text,{fz:12,c:"dimmed",children:`${r.getI18nextInstance().t("archbase:Última troca de senha")}: ${j}`})]})}),e.jsx(a.Grid.Col,{span:{base:12,md:4,lg:4},children:e.jsxs(a.Stack,{gap:"lg",children:[l.showAccountDeactivated&&e.jsx(a.Input.Wrapper,{label:"",children:e.jsx(i.ArchbaseCheckbox,{dataSource:t.dataSource,dataField:"accountDeactivated",label:`${r.getI18nextInstance().t("archbase:Conta desativada ?")}`})}),l.showAccountLocked&&e.jsx(a.Input.Wrapper,{label:"",children:e.jsx(i.ArchbaseCheckbox,{dataSource:t.dataSource,dataField:"accountLocked",label:`${r.getI18nextInstance().t("archbase:Conta bloqueada ?")}`})}),l.showIsAdministrator&&e.jsx(a.Input.Wrapper,{label:"",children:e.jsx(i.ArchbaseCheckbox,{dataSource:t.dataSource,dataField:"isAdministrator",label:`${r.getI18nextInstance().t("archbase:Administrador ?")}`})})]})}),e.jsx(a.Grid.Col,{span:{base:12,md:4,lg:4},children:e.jsx(a.Stack,{gap:"lg",children:e.jsx(i.ArchbaseAvatarEdit,{label:r.getI18nextInstance().t("archbase:Foto do usuário"),dataSource:t.dataSource,dataField:"avatar",width:120,height:120,maxSizeKB:l.avatarMaxSizeKB,imageQuality:l.avatarImageQuality,maxOutputSizePx:l.avatarMaxOutputSizePx})})})]}),l.showGroups&&e.jsxs(a.Grid,{children:[e.jsx(a.Grid.Col,{span:{base:12},children:e.jsx(a.Text,{fz:14,fw:500,children:"Grupos"})}),e.jsx(a.Grid.Col,{span:{base:12},children:e.jsx(je,{titleAvailable:r.getI18nextInstance().t("archbase:Disponíveis"),titleAssigned:r.getI18nextInstance().t("archbase:Selecionados"),assignedItemsDS:new k.ArchbaseDataSource("dsDualList",{records:t.dataSource.getFieldValue("groups"),grandTotalRecords:t.dataSource.getFieldValue("groups").length,currentPage:0,totalPages:0,pageSize:999999}),width:"100%",height:"200px",availableItemsDS:p,handleCreateAssociationObject:n=>L.UserGroupDto.newInstance(n),idFieldAssigned:n=>n&&n.group?n.group.id:"",idFieldAvailable:"id",labelFieldAssigned:n=>n&&n.group?n.group.name:"",labelFieldAvailable:"name"})})]}),l?.customContentAfter&&e.jsx(e.Fragment,{children:l.customContentAfter(t.dataSource.getCurrentRecord())}),e.jsx(a.Space,{h:"12px"})]})}),e.jsxs(a.Group,{justify:"flex-end",mt:"md",children:[e.jsx(a.Button,{variant:"default",onClick:M,children:r.getI18nextInstance().t("archbase:Cancelar")}),e.jsx(a.Button,{onClick:U,children:r.getI18nextInstance().t("archbase:Salvar")})]})]})},ye=t=>{const s={...t.options??{}},c=()=>{t.onCustomSave?t.onCustomSave(t.dataSource.getCurrentRecord(),u=>{u&&t.onAfterSave&&t.onAfterSave(t.dataSource.getCurrentRecord()),t.onClickOk(t.dataSource.getCurrentRecord(),u)}):t.onClickOk(t.dataSource.getCurrentRecord(),!0)},l=()=>{t.onClickCancel(t.dataSource.getCurrentRecord())};return e.jsx(a.Modal,{opened:t.opened,onClose:l,title:r.getI18nextInstance().t("archbase:Grupo"),size:"60%",styles:{content:{maxWidth:1e3}},children:e.jsx(a.ScrollArea,{style:{height:"460px"},children:e.jsxs(a.Stack,{w:"98%",children:[s?.customContentBefore&&s.customContentBefore(t.dataSource.getCurrentRecord()),e.jsxs(a.Grid,{children:[e.jsx(a.Grid.Col,{span:{base:12},children:e.jsx(i.ArchbaseEdit,{label:`${r.getI18nextInstance().t("archbase:Nome do grupo")}`,placeholder:`${r.getI18nextInstance().t("archbase:Informe o nome do grupo")}`,dataSource:t.dataSource,dataField:"name"})}),e.jsx(a.Grid.Col,{span:{base:12},children:e.jsx(i.ArchbaseEdit,{label:`${r.getI18nextInstance().t("archbase:Descrição do grupo")}`,placeholder:`${r.getI18nextInstance().t("archbase:Informe a descrição do grupo")}`,dataSource:t.dataSource,dataField:"description"})})]}),s?.customContentAfter&&s.customContentAfter(t.dataSource.getCurrentRecord()),e.jsxs(a.Group,{justify:"flex-end",mt:"md",children:[e.jsx(a.Button,{variant:"default",onClick:l,children:r.getI18nextInstance().t("archbase:Cancelar")}),e.jsx(a.Button,{onClick:c,children:r.getI18nextInstance().t("archbase:Salvar")})]})]})})})},Xe=({image:t,label:s,description:c,...l})=>e.jsx("div",{...l,children:e.jsxs(a.Group,{grow:!0,children:[e.jsx("img",{style:{maxWidth:"32px"},src:t}),e.jsxs("div",{children:[e.jsx(a.Text,{size:"sm",children:s}),e.jsx(a.Text,{size:"xs",opacity:.65,children:c})]})]})}),Ie=t=>{pe.useFocusTrap();const[s,c]=d.useState(),l=k.useArchbaseRemoteServiceApi(r.ARCHBASE_IOC_API_TYPE.User),u=k.useArchbaseV1V2Compatibility("ApiTokenModal",t.dataSource,"expirationDate",""),o=h=>{if(!h)u.handleValueChange(void 0);else{const C=typeof h=="string"?new Date(h):h,p=r.convertDateToISOString(C);u.handleValueChange(p)}c(h)},j=async(h,C)=>new Promise(async(p,v)=>{try{const D=r.emit(r.builder.or(r.builder.eq("name",`^*${C.trim()}*`))),S=await l.findAllWithFilter(D,h,20);p({options:S.content,page:S.pageable.pageNumber,totalPages:S.totalPages})}catch(D){v(r.processErrorMessage(D))}}),f=()=>{t.onCustomSave?t.onCustomSave(t.dataSource.current,h=>{h&&t.onAfterSave&&t.onAfterSave(t.dataSource.current),t.onClickOk(t.dataSource.current,h)}):t.onClickOk(t.dataSource.current,!0)},I=()=>{t.onClickCancel(t.dataSource.current)};return e.jsxs(a.Modal,{opened:t.opened,onClose:I,title:r.getI18nextInstance().t("archbase:Token de API"),size:"50%",children:[e.jsxs(a.ScrollArea,{style:{height:"300px"},children:[e.jsx(i.ArchbaseEdit,{label:`${r.getI18nextInstance().t("archbase:Nome do token")}`,placeholder:`${r.getI18nextInstance().t("archbase:Informe o nome do token")}`,dataSource:t.dataSource,dataField:"name"}),e.jsx(i.ArchbaseEdit,{label:`${r.getI18nextInstance().t("archbase:Descrição do token")}`,placeholder:`${r.getI18nextInstance().t("archbase:Informe a descrição do token")}`,dataSource:t.dataSource,dataField:"description"}),e.jsx(Ye.DateTimePicker,{withSeconds:!0,value:s,onChange:o,label:"Data/hora expiração",placeholder:"Selecione a data de expiração"}),e.jsx(i.ArchbaseAsyncSelect,{label:`${r.getI18nextInstance().t("archbase:Usuário")}`,dataSource:t.dataSource,dataField:"user",placeholder:`${r.getI18nextInstance().t("archbase:Digite aqui o nome do usuário")}`,getOptionLabel:h=>h&&h.email?h.email:"",getOptionValue:h=>h&&h.id?h.id.toString():"",getOptions:j,debounceTime:500,minCharsToSearch:1,itemComponent:Xe})]}),e.jsxs(a.Group,{justify:"flex-end",mt:"md",children:[e.jsx(a.Button,{variant:"default",onClick:I,children:r.getI18nextInstance().t("archbase:Cancelar")}),e.jsx(a.Button,{onClick:f,children:r.getI18nextInstance().t("archbase:Salvar")})]})]})},fe=t=>{const s="->";return t.includes(s)?t.split(s).map(u=>u.trim()).map(u=>r.getI18nextInstance().t(u)).join(` ${s} `):r.getI18nextInstance().t(t)};function se({dataSource:t,opened:s,close:c}){const l=d.useMemo(()=>t?.getFieldValue("name")||"",[t]),u=d.useMemo(()=>t?.getFieldValue("id")||"",[t]),o=d.useMemo(()=>t?.getFieldValue("type")||"",[t]),j=a.useTree(),f=a.useTree(),[I,h]=d.useState([]),[C,p]=d.useState([]),[v,D]=d.useState(),[S,U]=d.useState(),[M,n]=d.useState(""),[x]=pe.useDebouncedValue(M,200),[b,P]=d.useState(""),[E]=pe.useDebouncedValue(b,200),A=k.useArchbaseRemoteServiceApi(r.ARCHBASE_IOC_API_TYPE.Resource),{colorScheme:H}=a.useMantineColorScheme(),V=H==="dark"?"var(--mantine-primary-color-7)":"var(--mantine-primary-color-4)",q=d.useMemo(()=>C.sort((m,g)=>m.resourceDescription.localeCompare(g.resourceDescription)).map(m=>({value:m.resourceId,label:m.resourceDescription,children:m.permissions.filter(g=>g.actionDescription.toLowerCase().includes(E.toLowerCase())).sort((g,$)=>g.actionDescription.localeCompare($.actionDescription)).map(g=>({value:g.actionId,label:g.actionDescription,nodeProps:{permissionId:g.permissionId,types:g.types??[],owner:m}}))})),[C,E]),y=d.useMemo(()=>C.map(m=>m.permissions.map(g=>g.actionId)).flat(),[C]),w=d.useMemo(()=>I.sort((m,g)=>m.resourceDescription.localeCompare(g.resourceDescription)).map(m=>({value:m.resourceId,label:m.resourceDescription,children:m.permissions.filter(g=>g.actionDescription.toLowerCase().includes(x.toLowerCase())).sort((g,$)=>g.actionDescription.localeCompare($.actionDescription)).map(g=>{const $=C.find(G=>G.resourceId===m.resourceId)?.permissions.find(G=>G.actionId===g.actionId);return{value:g.actionId,label:g.actionDescription,nodeProps:{granted:y.includes(g.actionId)&&$?.types?.includes(r.getKeyByEnumValue(L.SecurityType,o)),owner:m}}})})),[I,C,y,o,x]),T=d.useCallback(async()=>{if(u){const m=await A.getPermissionsBySecurityId(u,o),g=await A.getAllPermissionsAvailable();h(g),p(m)}},[u,o]),X=d.useCallback(()=>{v?.value&&u&&A.createPermission(u,v.value,o).then(m=>{if(m){p(N=>{let F;return N.map(B=>B.resourceId).includes(m.resourceId)?F=N.map(B=>B.resourceId===m.resourceId?B.permissions.map(z=>z.actionId).includes(v.value)?{...B,permissions:B.permissions.map(z=>z.actionId===v.value?{...z,permissionId:m.permissionId,types:[...z.types??[],r.getKeyByEnumValue(L.SecurityType,o)]}:z)}:{...B,permissions:[...B.permissions??[],{actionId:m.actionId,actionDescription:m.actionDescription,permissionId:m.permissionId,types:[r.getKeyByEnumValue(L.SecurityType,o)]}]}:B):F=[...N,{resourceId:m.resourceId,resourceDescription:m.resourceDescription,permissions:[{actionId:m.actionId,actionDescription:m.actionDescription,permissionId:m.permissionId,types:[r.getKeyByEnumValue(L.SecurityType,o)]}]}],F});const g=w.filter(N=>N.value===v?.nodeProps?.owner?.resourceId).map(N=>N.children).flat(),$=g.map(N=>N.value).indexOf(v.value),G=g.find((N,F)=>!N?.nodeProps?.granted&&N?.value!==v.value&&(g.length>$+1?F>$:!0));G?.value&&j.select(G.value),f.expand(m.resourceId),D(G)}})},[v,u,o,A,w,I,C,j,f]),K=d.useCallback(()=>{S?.nodeProps?.permissionId&&A.deletePermission(S.nodeProps.permissionId).then(()=>{p(G=>[...G].filter(F=>{let B=!0;return F.permissions?.forEach(z=>{z.permissionId!==void 0&&z.permissionId===S?.nodeProps?.permissionId&&F.permissions.length===1&&z?.types?.length===1&&z.types[0]===r.getKeyByEnumValue(L.SecurityType,o)&&(B=!1)}),B}).map(F=>{const B=S?.nodeProps?.owner;return F.resourceId===B.resourceId?S?.nodeProps?.types?.length===1?{...F,permissions:[...(F.permissions??[]).filter(z=>z.permissionId!==S?.nodeProps?.permissionId)]}:{...F,permissions:(F.permissions??[]).map(z=>z.actionId===S.value?{actionId:z.actionId,actionDescription:z.actionDescription,types:[...z.types?.filter(_=>_&&_!==r.getKeyByEnumValue(L.SecurityType,o))??[]]}:z)}:F}));const m=q.filter(G=>G.value===S?.nodeProps?.owner?.resourceId).map(G=>G.children).flat(),g=m.map(G=>G.value).indexOf(S.value),$=m.find((G,N)=>G?.nodeProps?.types.includes(r.getKeyByEnumValue(L.SecurityType,o))&&G?.value!==S.value&&(m.length>g+1?N>g:!0));$?.value&&f.select($.value),U($)})},[S,A,o,q,C,f]);return d.useEffect(()=>{s&&t&&(D(void 0),U(void 0),n(""),P(""),f.collapseAllNodes(),j.collapseAllNodes(),T())},[s,o,u,T]),t?e.jsx(a.Modal,{opened:s,onClose:c,title:`${r.getI18nextInstance().t(`archbase:${o}`)}: ${l}`,size:"80%",styles:{root:{overflow:"hidden"}},children:e.jsxs(ce.ArchbaseSpaceFixed,{height:"540px",children:[e.jsx(ce.ArchbaseSpaceFill,{children:e.jsx(a.Paper,{withBorder:!0,my:20,p:20,style:{height:"calc(100% - 40px)",overflow:"hidden",display:"flex",flexDirection:"column"},children:e.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"row",overflow:"hidden",minHeight:0,gap:"8px"},children:[e.jsxs("div",{style:{flex:9,display:"flex",flexDirection:"column",overflow:"hidden",minHeight:0},children:[e.jsxs(a.Group,{mb:20,children:[e.jsx(a.Text,{children:r.getI18nextInstance().t("archbase:Available")}),e.jsx(a.TextInput,{size:"xs",value:M,onChange:m=>n(m.target.value),placeholder:r.getI18nextInstance().t("archbase:Filter available permissions")})]}),e.jsx(a.ScrollArea,{style:{flex:1,minHeight:0},children:e.jsx(a.Tree,{data:w,selectOnClick:!0,allowRangeSelection:!1,tree:j,renderNode:({level:m,node:g,expanded:$,hasChildren:G,selected:N,elementProps:F})=>{const B=g?.nodeProps?.granted,z=B?"dimmed":void 0,_=B?"line-through":void 0,ne=d.useCallback(oe=>{D(g),F.onClick(oe)},[g,F.onClick]);return e.jsxs(a.Group,{ml:G?0:5,gap:5,...F,bg:N&&m===2?V:"",onClick:ne,children:[G&&e.jsx(O.IconChevronDown,{size:18,style:{transform:$?"rotate(0deg)":"rotate(-90deg)"}}),!G&&e.jsx(O.IconBorderCornerSquare,{size:12,style:{transform:"rotate(-90deg)",marginTop:"-5px"}}),e.jsx(a.Text,{c:z,td:_,children:fe(g.label)})]})}})})]}),e.jsx("div",{style:{flex:2,display:"flex",alignItems:"center",justifyContent:"center"},children:e.jsxs(a.Stack,{gap:5,align:"center",children:[e.jsx(a.Tooltip,{label:r.getI18nextInstance().t("archbase:Add"),children:e.jsx(a.ActionIcon,{onClick:X,disabled:!v||v?.nodeProps?.granted||!v.nodeProps,children:e.jsx(O.IconArrowRight,{})})}),e.jsx(a.Tooltip,{label:r.getI18nextInstance().t("archbase:Remove"),children:e.jsx(a.ActionIcon,{onClick:K,disabled:!S||!S?.nodeProps?.permissionId||!S.nodeProps,children:e.jsx(O.IconArrowLeft,{})})})]})}),e.jsxs("div",{style:{flex:9,display:"flex",flexDirection:"column",overflow:"hidden",minHeight:0},children:[e.jsxs(a.Group,{mb:20,children:[e.jsx(a.Text,{children:r.getI18nextInstance().t("archbase:Granted")}),e.jsx(a.TextInput,{size:"xs",value:b,onChange:m=>P(m.target.value),placeholder:r.getI18nextInstance().t("archbase:Filter granted permissions")})]}),e.jsx(a.ScrollArea,{style:{flex:1,minHeight:0},children:e.jsx(a.Tree,{data:q,selectOnClick:!0,allowRangeSelection:!1,tree:f,renderNode:({level:m,node:g,expanded:$,hasChildren:G,selected:N,elementProps:F})=>{const B=d.useCallback(z=>{U(g),F.onClick(z)},[g,F.onClick]);return e.jsxs(a.Group,{ml:G?0:5,gap:5,...F,bg:N&&m===2?V:"",onClick:B,children:[G&&e.jsx(O.IconChevronDown,{size:18,style:{transform:$?"rotate(0deg)":"rotate(-90deg)"}}),!G&&e.jsx(O.IconBorderCornerSquare,{size:12,style:{transform:"rotate(-90deg)",marginTop:"-5px"}}),e.jsx(a.Text,{children:fe(g.label)}),g?.nodeProps?.types?.includes("USER")&&e.jsx(a.Badge,{color:"blue",children:r.getI18nextInstance().t("archbase:user")}),g?.nodeProps?.types?.includes("GROUP")&&e.jsx(a.Badge,{color:"orange",children:r.getI18nextInstance().t("archbase:group")}),g?.nodeProps?.types?.includes("PROFILE")&&e.jsx(a.Badge,{color:"pink",children:r.getI18nextInstance().t("archbase:profile")})]})}})})]})]})})}),e.jsx(ce.ArchbaseSpaceBottom,{size:"40px",children:e.jsx(a.Group,{justify:"flex-end",children:e.jsx(a.Button,{onClick:c,children:r.getI18nextInstance().t("archbase:Close")})})})]})}):null}const me="data:image/png;base64,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",Qe=t=>t.groups?e.jsx("div",{style:{display:"flex"},children:t.groups.slice().sort((s,c)=>(s.group?.name??"").localeCompare(c.group?.name??"")).map((s,c)=>e.jsx("div",{style:{paddingRight:"2px"},children:e.jsx(a.Badge,{color:"blue",children:s.group?.name})},c))}):null,ea=t=>t.profile?e.jsx(a.Badge,{color:"green",children:t.profile?.name}):null,aa=t=>e.jsxs(i.Columns,{children:[e.jsx(i.ArchbaseDataGridColumn,{dataField:"user.avatar",dataType:"image",size:80,header:`${t("archbase:Foto")}`,render:s=>e.jsx("img",{style:{borderRadius:50,height:"32px",maxHeight:"32px"},src:s.row.user&&s.row.user.avatar?atob(s.row.user.avatar):me}),inputFilterType:"text",align:"center",exportable:!1}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"user.userName",dataType:"text",size:300,header:`${t("archbase:Nome de Usuário")}`,inputFilterType:"text"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"user.email",dataType:"text",header:`${t("archbase:Email")}`,size:300,inputFilterType:"text"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"expirationDate",dataType:"text",size:300,header:`${t("archbase:Expira em")}`,render:s=>e.jsx(a.Text,{size:"sm",children:s.row.expirationDate}),inputFilterType:"text"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"revoked",dataType:"boolean",header:`${t("archbase:Revogado ?")}`,inputFilterType:"checkbox"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"expired",dataType:"boolean",header:`${t("archbase:Expirado ?")}`,inputFilterType:"checkbox"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"token",dataType:"text",header:`${t("archbase:Token Acesso")}`,size:300,inputFilterType:"text"})]}),ta=t=>e.jsxs(i.Columns,{children:[e.jsx(i.ArchbaseDataGridColumn,{dataField:"avatar",dataType:"image",size:80,header:`${t("archbase:Foto")}`,render:s=>e.jsx("img",{style:{borderRadius:50,height:"32px",maxHeight:"32px"},src:s.row.avatar?atob(s.row.avatar):me}),enableSorting:!1,enableColumnFilter:!1,enableGlobalFilter:!1,align:"center",exportable:!1}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"name",dataType:"text",size:300,header:`${t("archbase:Nome")}`,inputFilterType:"text",truncate:!0}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"nickname",dataType:"text",size:120,header:`${t("archbase:Apelido")}`,inputFilterType:"text",truncate:!0}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"email",dataType:"text",header:`${t("archbase:Email")}`,size:300,inputFilterType:"text",truncate:!0}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"accountDeactivated",dataType:"boolean",header:`${t("archbase:Desativado?")}`,inputFilterType:"checkbox",size:120}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"profile.name",dataType:"text",header:`${t("archbase:Perfil")}`,size:200,render:s=>ea(s.row),inputFilterType:"text"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"groups",dataType:"text",size:300,header:`${t("archbase:Grupos")}`,render:s=>Qe(s.row),exportValue:s=>s.groups?.slice().sort((c,l)=>(c.group?.name??"").localeCompare(l.group?.name??"")).map(c=>c.group?.name).filter(Boolean).join(", ")||"",enableSorting:!1,enableColumnFilter:!1,enableGlobalFilter:!1}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"isAdministrator",dataType:"boolean",header:`${t("archbase:Admin ?")}`,inputFilterType:"checkbox"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"changePasswordOnNextLogin",dataType:"boolean",header:`${t("archbase:Alt.senha próximo login?")}`,inputFilterType:"checkbox",size:120}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"allowPasswordChange",dataType:"boolean",header:`${t("archbase:Pode alterar senha?")}`,inputFilterType:"checkbox",size:120}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"allowMultipleLogins",dataType:"boolean",header:`${t("archbase:Permite multiplos logins?")}`,inputFilterType:"checkbox",size:120}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"passwordNeverExpires",dataType:"boolean",header:`${t("archbase:Senha nunca expira?")}`,inputFilterType:"checkbox",size:120}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"passwordChangedAt",dataType:"datetime",header:`${t("archbase:Última troca de senha")}`,inputFilterType:"date-range",size:160}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"accountLocked",dataType:"boolean",header:`${t("archbase:Bloqueado?")}`,inputFilterType:"checkbox",size:120}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"unlimitedAccessHours",dataType:"boolean",header:`${t("archbase:Horário acesso ilimitado?")}`,inputFilterType:"checkbox",size:140})]}),ra=t=>e.jsxs(i.Columns,{children:[e.jsx(i.ArchbaseDataGridColumn,{dataField:"name",dataType:"text",size:300,header:`${t("archbase:Nome do grupo")}`,inputFilterType:"text"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"description",dataType:"text",header:`${t("archbase:Descrição")}`,size:800,inputFilterType:"text"})]}),sa=t=>e.jsxs(i.Columns,{children:[e.jsx(i.ArchbaseDataGridColumn,{dataField:"name",dataType:"text",size:300,header:`${t("archbase:Nome do perfil")}`,inputFilterType:"text"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"description",dataType:"text",header:`${t("archbase:Descrição")}`,size:800,inputFilterType:"text"})]}),na=t=>e.jsxs(i.Columns,{children:[e.jsx(i.ArchbaseDataGridColumn,{dataField:"name",dataType:"text",size:300,header:`${t("archbase:Nome do recurso")}`,inputFilterType:"text"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"description",dataType:"text",header:`${t("archbase:Descrição")}`,size:800,inputFilterType:"text"})]});function ae({active:t,printTitle:s,gridRef:c,dataSource:l,isLoading:u,error:o,getRowId:j,striped:f=!1,enableRowActions:I=!0,toolbarLeftContent:h,renderRowActions:C,actionsColumnWidth:p,children:v}){return e.jsx(a.Paper,{withBorder:!0,mt:"md",style:{display:t?"flex":"none",width:"100%",flex:1,minHeight:0,overflow:"auto"},children:e.jsx(i.ArchbaseDataGrid,{gridRef:c,printTitle:s,width:"100%",height:"100%",withBorder:!1,dataSource:l,withColumnBorders:!0,striped:f,enableTopToolbar:!0,enableRowActions:I,pageSize:50,isLoading:u,isError:!!o,error:o,enableGlobalFilter:!0,getRowId:j,toolbarLeftContent:h,renderRowActions:C,actionsColumnWidth:p,children:v})})}function ue({dataSource:t,securityType:s,newInstance:c,createEntitiesWithId:l,removeMessageKey:u,setOpenedModal:o,setOpenedPermissionsModal:j,validationContext:f,t:I}){const h=t,C=x=>h.isEmpty()?null:h.gotoRecordByData(x)??null;return{handleAdd:()=>{const x=c();l||(x.id=void 0),h.insert(x),o(s)},handleViewRow:x=>{C(x)&&o(s)},handleEditRow:x=>{C(x)&&(h.isEditing()||h.edit(),o(s))},handleRemoveRow:x=>{C(x)&&i.ArchbaseDialog.showConfirmDialogYesNo(`${I("archbase:Confirme")}`,`${I(u)}${x.name} ?`,()=>{h.remove()},()=>{})},handleSaveModal:async()=>{try{await h.save()}catch{return}o(""),f?.clearAll()},handleCancelModal:()=>{o(""),h.isBrowsing()||h.cancel(),f?.clearAll()},handleOpenPermissionsModal:()=>{j(s)}}}function he({row:t,onView:s,onEdit:c,onRemove:l,onEditPermissions:u,before:o,after:j,t:f}){const I=r.useArchbaseTheme(),{colorScheme:h}=a.useMantineColorScheme(),C=h==="dark",p=v=>C?I.colors[v][8]:I.colors[v][4];return e.jsxs(a.Group,{gap:1,wrap:"nowrap",children:[o?.(t),e.jsx(a.ActionIcon,{variant:"transparent",onClick:()=>s(t),children:e.jsx(O.IconEye,{size:20,color:p("blue")})}),e.jsx(a.ActionIcon,{variant:"transparent",onClick:()=>c(t),children:e.jsx(O.IconEdit,{size:20,color:p("yellow")})}),e.jsx(a.ActionIcon,{variant:"transparent",onClick:()=>l(t),children:e.jsx(O.IconTrashX,{size:20,color:p("red")})}),e.jsx(a.Tooltip,{withinPortal:!0,withArrow:!0,position:"left",label:`${f("archbase:Edit permissions")}`,children:e.jsx(a.ActionIcon,{variant:"transparent",onClick:u,children:e.jsx(O.IconShieldCheckered,{size:20,color:p("green")})})}),j?.(t)]})}const xe=({onAdd:t,onEditPermissions:s,t:c})=>e.jsxs(a.Flex,{justify:"space-between",style:{width:"50%"},children:[e.jsxs(a.Group,{align:"end",gap:"4px",wrap:"nowrap",children:[e.jsx(a.Button,{color:"green",leftSection:e.jsx(O.IconPlus,{}),onClick:t,children:`${c("archbase:New")}`}),e.jsx(a.Button,{color:"blue",leftSection:e.jsx(O.IconEdit,{}),onClick:s,children:`${c("archbase:Edit permissions")}`})]}),e.jsx(a.Flex,{align:"flex-start",justify:"flex-end",style:{width:"200px"}})]});function oa({height:t="400px",width:s="100%",createEntitiesWithId:c=!0,userModalOptions:l,profileModalOptions:u,groupModalOptions:o,options:j}){r.useArchbaseTheme(),k.useArchbaseStore("securityStore");const f=r.useArchbaseValidator(),{colorScheme:I}=a.useMantineColorScheme(),[h,C]=d.useState(void 0),[p,v]=d.useState("users"),D=k.useArchbaseRemoteServiceApi(r.ARCHBASE_IOC_API_TYPE.User),S=k.useArchbaseRemoteServiceApi(r.ARCHBASE_IOC_API_TYPE.Group),U=k.useArchbaseRemoteServiceApi(r.ARCHBASE_IOC_API_TYPE.Resource),M=k.useArchbaseRemoteServiceApi(r.ARCHBASE_IOC_API_TYPE.Profile),[n,x]=d.useState(""),[b,P]=d.useState(""),E=k.useArchbaseRemoteServiceApi(r.ARCHBASE_IOC_API_TYPE.AccessToken),{t:A}=r.useArchbaseTranslation(),H=d.useRef(null),V=d.useRef(null),q=d.useRef(null),y=d.useRef(null),w=d.useRef(null),T=R=>R.id,X=R=>R.id,K=R=>R.id,m=R=>R.id,g=R=>R.id,{dataSource:$,isLoading:G,refreshData:N}=k.useArchbaseRemoteDataSourceV2({name:"accessTokenApi",service:E,validator:f,pageSize:25,defaultSortFields:["user.email","expirationTime:desc"],onError:(R,W)=>{C(R),i.ArchbaseNotifications.showError(`${A("archbase:WARNING")}`,R,W)}}),{dataSource:F,isLoading:B,refreshData:z}=k.useArchbaseRemoteDataSourceV2({name:"dsUsers",service:D,validator:f,pageSize:25,onError:(R,W)=>{C(R),i.ArchbaseNotifications.showError(`${A("archbase:WARNING")}`,R,W)}}),{dataSource:_,isLoading:ne,refreshData:oe}=k.useArchbaseRemoteDataSourceV2({name:"dsGroups",service:S,validator:f,pageSize:25,onError:(R,W)=>{C(R),i.ArchbaseNotifications.showError(`${A("archbase:WARNING")}`,R,W)}}),{dataSource:re,isLoading:Ge,refreshData:Fe}=k.useArchbaseRemoteDataSourceV2({name:"dsProfile",service:M,validator:f,pageSize:25,onError:(R,W)=>{C(R),i.ArchbaseNotifications.showError(`${A("archbase:WARNING")}`,R,W)}}),{dataSource:ze,isLoading:Me,refreshData:Ve}=k.useArchbaseRemoteDataSourceV2({name:"dsResources",service:U,validator:f,pageSize:25,onError:(R,W)=>{C(R),i.ArchbaseNotifications.showError(`${A("archbase:WARNING")}`,R,W)}});d.useEffect(()=>{N({filter:r.emit(r.builder.eq("revoked","false"))}),z(),oe(),Fe(),Ve()},[]);const $e=aa(A),Le=ta(A),Ne=ra(A),Be=sa(A),Oe=na(A),ie=r.useValidationErrors(),Y=ue({dataSource:F,securityType:L.SecurityType.USER,newInstance:()=>L.UserDto.newInstance(),createEntitiesWithId:c,removeMessageKey:"archbase:Deseja remover o usuário ",setOpenedModal:x,setOpenedPermissionsModal:P,validationContext:ie,t:A}),J=ue({dataSource:_,securityType:L.SecurityType.GROUP,newInstance:()=>L.GroupDto.newInstance(),createEntitiesWithId:c,removeMessageKey:"archbase:Deseja remover o grupo ",setOpenedModal:x,setOpenedPermissionsModal:P,validationContext:ie,t:A}),Z=ue({dataSource:re,securityType:L.SecurityType.PROFILE,newInstance:()=>L.ProfileDto.newInstance(),createEntitiesWithId:c,removeMessageKey:"archbase:Deseja remover o perfil ",setOpenedModal:x,setOpenedPermissionsModal:P,validationContext:ie,t:A}),Ue=R=>e.jsx(he,{row:R,onView:Y.handleViewRow,onEdit:Y.handleEditRow,onRemove:Y.handleRemoveRow,onEditPermissions:Y.handleOpenPermissionsModal,before:j?.beforeDefaultUserActions,after:j?.afterDefaultUserActions,t:A}),qe=R=>e.jsx(he,{row:R,onView:J.handleViewRow,onEdit:J.handleEditRow,onRemove:J.handleRemoveRow,onEditPermissions:J.handleOpenPermissionsModal,before:j?.beforeDefaultGroupActions,after:j?.afterDefaultGroupActions,t:A}),We=R=>e.jsx(he,{row:R,onView:Z.handleViewRow,onEdit:Z.handleEditRow,onRemove:Z.handleRemoveRow,onEditPermissions:Z.handleOpenPermissionsModal,before:j?.beforeDefaultProfileActions,after:j?.afterDefaultProfileActions,t:A}),He=()=>{const R=$.getCurrentRecord();R&&i.ArchbaseDialog.showConfirmDialogYesNo(`${A("archbase:Confirme")}`,`${A("archbase:Deseja revogar o token de Acesso do usuário ")}${R.user.name} ?`,async()=>{await E.revoke(R.token).then(async()=>{i.ArchbaseNotifications.showSuccess(`${A("mentors:Informação")}`,`${A("mentors:Token de Acesso revogado com sucesso!")}`),$.refreshData()}).catch(W=>{i.ArchbaseDialog.showErrorWithDetails(`${A("mentors:Atenção")}`,r.processErrorMessage(W),r.processDetailErrorMessage(W))})},()=>{})},le=()=>{P("")},_e=()=>e.jsx(a.Flex,{justify:"space-between",style:{width:"50%"},children:e.jsx(a.Group,{align:"start",gap:"4px",wrap:"nowrap",children:e.jsx(a.Button,{disabled:!$.getCurrentRecord(),color:"red",leftSection:e.jsx(O.IconTrashX,{}),onClick:He,children:`${A("archbase:Revoke")}`})})});return e.jsxs(a.Paper,{p:"md",style:{height:t,display:"flex",flexDirection:"column"},children:[e.jsx(a.Tabs,{variant:"pills",value:p,onChange:v,children:e.jsxs(a.Tabs.List,{children:[e.jsx(a.Tabs.Tab,{value:"users",children:`${A("Usuários")}`}),e.jsx(a.Tabs.Tab,{value:"groups",children:`${A("Grupos")}`}),e.jsx(a.Tabs.Tab,{value:"profiles",children:`${A("Perfis")}`}),e.jsx(a.Tabs.Tab,{value:"resources",children:`${A("Recursos")}`}),e.jsx(a.Tabs.Tab,{value:"accessTokens",children:`${A("Tokens Acesso")}`})]})}),e.jsx(ae,{active:p==="users",printTitle:"Usuários",gridRef:H,dataSource:F,isLoading:B,error:h,getRowId:T,striped:!0,toolbarLeftContent:e.jsx(xe,{onAdd:Y.handleAdd,onEditPermissions:Y.handleOpenPermissionsModal,t:A}),renderRowActions:Ue,actionsColumnWidth:j?.userActionsColumnWidth,children:Le}),e.jsx(ae,{active:p==="groups",printTitle:"Grupos",gridRef:V,dataSource:_,isLoading:ne,error:h,getRowId:X,toolbarLeftContent:e.jsx(xe,{onAdd:J.handleAdd,onEditPermissions:J.handleOpenPermissionsModal,t:A}),renderRowActions:qe,actionsColumnWidth:j?.groupActionsColumnWidth,children:Ne}),e.jsx(ae,{active:p==="profiles",printTitle:"Perfis",gridRef:q,dataSource:re,isLoading:Ge,error:h,getRowId:K,toolbarLeftContent:e.jsx(xe,{onAdd:Z.handleAdd,onEditPermissions:Z.handleOpenPermissionsModal,t:A}),renderRowActions:We,actionsColumnWidth:j?.profileActionsColumnWidth,children:Be}),e.jsx(ae,{active:p==="resources",printTitle:"Recursos",gridRef:y,dataSource:ze,isLoading:Me,error:h,getRowId:m,enableRowActions:!1,children:Oe}),e.jsx(ae,{active:p==="accessTokens",printTitle:"Tokens de API",gridRef:w,dataSource:$,isLoading:G,error:h,getRowId:g,striped:!0,enableRowActions:!1,toolbarLeftContent:_e(),children:$e}),n===L.SecurityType.USER?e.jsx(Ce,{onClickOk:Y.handleSaveModal,opened:!0,dataSource:F,onClickCancel:Y.handleCancelModal,options:l}):null,n===L.SecurityType.GROUP?e.jsx(ye,{onClickOk:J.handleSaveModal,opened:!0,dataSource:_,onClickCancel:J.handleCancelModal,options:o}):null,n===L.SecurityType.PROFILE?e.jsx(ve,{onClickOk:Z.handleSaveModal,opened:!0,dataSource:re,onClickCancel:Z.handleCancelModal,options:u}):null,b===L.SecurityType.USER?e.jsx(se,{dataSource:F,opened:!!b,close:le}):null,b===L.SecurityType.GROUP?e.jsx(se,{dataSource:_,opened:!!b,close:le}):null,b===L.SecurityType.PROFILE?e.jsx(se,{dataSource:re,opened:!!b,close:le}):null]})}function ia({height:t="400px",width:s="100%"}){r.useArchbaseTheme();const c=k.useArchbaseStore("apiTokenStore"),l={validateEntity:()=>[]},{colorScheme:u}=a.useMantineColorScheme(),[o,j]=d.useState(void 0),f=k.useArchbaseRemoteServiceApi(r.ARCHBASE_IOC_API_TYPE.ApiToken),[I,h]=d.useState(""),C=d.useRef(null),p=V=>V.id,{dataSource:v}=k.useArchbaseDataSource({initialData:[],name:"dataSource"}),D=k.useArchbaseV1V2Compatibility("ArchbaseApiTokenView-LocalDataSource",v,void 0,void 0),{dataSource:S,isLoading:U}=k.useArchbaseRemoteDataSource({name:"dsApiToken",service:f,store:c,validator:l,pageSize:25,loadOnStart:!0,onLoadComplete:V=>{},onDestroy:V=>{},onError:(V,q)=>{j(V),i.ArchbaseNotifications.showError(r.getI18nextInstance().t("archbase:WARNING"),V,q)}}),M=k.useArchbaseV1V2Compatibility("ArchbaseApiTokenView-RemoteDataSource",S,void 0,void 0),n=`calc(${t} - 40px)`,x=e.jsxs(i.Columns,{children:[e.jsx(i.ArchbaseDataGridColumn,{dataField:"user.avatar",dataType:"image",size:80,header:"Foto",render:V=>e.jsx("img",{style:{borderRadius:50,height:"32px",maxHeight:"32px"},src:V.row.user&&V.row.user.avatar?atob(V.row.user.avatar):me}),inputFilterType:"text",align:"center"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"user.userName",dataType:"text",size:300,header:"Nome de Usuário",inputFilterType:"text"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"user.email",dataType:"text",header:"Email",size:240,inputFilterType:"text"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"name",dataType:"text",header:"Nome",size:240,inputFilterType:"text"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"description",dataType:"text",header:"Descrição",size:300,inputFilterType:"text"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"token",dataType:"text",header:"Token API",size:300,inputFilterType:"text",enableClickToCopy:!0}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"tenantId",dataType:"text",header:"Tenant ID",size:300,inputFilterType:"text",enableClickToCopy:!0}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"expirationDate",dataType:"text",size:240,header:"Validade",render:V=>{if(!V.row.expirationDate)return e.jsx(a.Text,{c:"dimmed",children:"Sem expiração"});const q=new Date;q.setHours(0,0,0,0);const y=new Date(V.row.expirationDate);y.setHours(0,0,0,0);const w=y.getTime()-q.getTime(),T=Math.ceil(w/(1e3*60*60*24));let K=Math.max(0,Math.min(100,T/365*100)),m="green",g="";T<0?(m="red",K=100,g=`Vencido há ${Math.abs(T)} dia${Math.abs(T)!==1?"s":""}`):T===0?(m="red",K=5,g="Vence hoje"):T<=7?(m="red",g=`${T} dia${T!==1?"s":""}`):T<=30?(m="orange",g=`${T} dias`):T<=90?(m="yellow",g=`${T} dias`):(m="green",g=`${T} dias`);const $=T<0?`Vencido em ${y.toLocaleDateString()}`:`Expira em ${y.toLocaleDateString()}`;return e.jsx(a.Tooltip,{label:$,withArrow:!0,children:e.jsxs(a.Group,{gap:"xs",wrap:"nowrap",children:[e.jsx(a.RingProgress,{size:36,thickness:4,roundCaps:!0,sections:[{value:T<0?100:K,color:m}]}),e.jsx(a.Text,{size:"sm",c:T<0?"red":void 0,fw:T<=7?600:void 0,children:g})]})})},inputFilterType:"text"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"activated",dataType:"boolean",header:"Ativado ?",inputFilterType:"checkbox"}),e.jsx(i.ArchbaseDataGridColumn,{dataField:"revoked",dataType:"boolean",header:"Revogado ?",inputFilterType:"checkbox"})]}),b=()=>{v.insert(L.ApiTokenDto.newInstance()),v&&!D.isDataSourceV2&&D.v1State.forceUpdate(),h("apiToken")},P=()=>{S.getCurrentRecord()&&i.ArchbaseDialog.showConfirmDialogYesNo(`${r.getI18nextInstance().t("archbase:Confirme")}`,`${r.getI18nextInstance().t("archbase:Deseja revogar o token de API do usuário ")}${S.getCurrentRecord().user.name} ?`,async()=>{await f.revoke(S.getCurrentRecord().token).then(async()=>{i.ArchbaseNotifications.showSuccess(`${r.getI18nextInstance().t("mentors:Informação")}`,`${r.getI18nextInstance().t("mentors:Token de API revogado com sucesso!")}`),S.refreshData(),S&&!M.isDataSourceV2&&M.v1State.forceUpdate()}).catch(V=>{i.ArchbaseDialog.showErrorWithDetails(`${r.getI18nextInstance().t("mentors:Atenção")}`,r.processErrorMessage(V),r.processDetailErrorMessage(V))})},()=>{})},E=()=>{h("")},A=async(V,q)=>{const y=v.getCurrentRecord();if(y)try{if(v.validate(),!y.user||!y.user.email){i.ArchbaseDialog.showErrorWithDetails(`${r.getI18nextInstance().t("archbase:WARNING")}`,`${r.getI18nextInstance().t("archbase:Selecione um usuário para o token de API")}`,"");return}await f.create(y.user.email,y.expirationDate,y.name,y.description).then(async w=>{v.cancel(),v&&!D.isDataSourceV2&&D.v1State.forceUpdate(),S.append(w),S&&!M.isDataSourceV2&&M.v1State.forceUpdate(),i.ArchbaseNotifications.showSuccess(`${r.getI18nextInstance().t("mentors:Informação")}`,`${r.getI18nextInstance().t("mentors:Token de API gerado com sucesso!")}`),q&&q(!0)}).catch(w=>{i.ArchbaseDialog.showErrorWithDetails(`${r.getI18nextInstance().t("mentors:Atenção")}`,r.processErrorMessage(w),r.processDetailErrorMessage(w))})}catch(w){i.ArchbaseDialog.showErrorWithDetails(`${r.getI18nextInstance().t("mentors:Atenção")}`,r.processErrorMessage(w),r.processDetailErrorMessage(w))}},H=()=>e.jsx(a.Flex,{justify:"space-between",style:{width:"50%"},children:e.jsxs(a.Group,{align:"start",gap:"2px",wrap:"nowrap",children:[e.jsx(a.Button,{color:"green",leftSection:e.jsx(O.IconPlus,{}),onClick:b,children:r.getI18nextInstance().t("archbase:New")}),e.jsx(a.Button,{disabled:!S.getCurrentRecord(),color:"red",leftSection:e.jsx(O.IconTrashX,{}),onClick:P,children:r.getI18nextInstance().t("archbase:Revoke")})]})});return e.jsxs(a.Paper,{p:"md",style:{height:t,display:"flex",flexDirection:"column"},children:[e.jsx(a.Paper,{withBorder:!0,style:{height:n,display:"flex",width:"100%",flex:1,minHeight:0,overflow:"auto"},children:e.jsx(i.ArchbaseDataGrid,{gridRef:C,printTitle:"Tokens de API",width:"100%",height:"100%",withBorder:!1,dataSource:S,withColumnBorders:!0,striped:!0,enableTopToolbar:!0,enableRowActions:!1,pageSize:50,isLoading:U,isError:!!o,error:o,enableGlobalFilter:!0,getRowId:p,toolbarLeftContent:H(),children:x})}),I==="apiToken"?e.jsx(Ie,{onClickOk:E,opened:!0,dataSource:v,onCustomSave:A,onClickCancel:E}):null]})}const te=t=>{switch(t){case"critical":return"red";case"warning":return"orange";case"ok":return"green";default:return"gray"}},Te=({card:t})=>e.jsx(a.Paper,{withBorder:!0,radius:"md",p:"sm",style:{borderLeft:`3px solid var(--mantine-color-${te(t.severity)}-6)`},children:e.jsxs(a.Stack,{gap:4,children:[e.jsxs(a.Group,{gap:8,align:"baseline",wrap:"wrap",children:[e.jsx(a.Text,{fw:600,size:"1.7rem",lh:1.05,c:te(t.severity),children:t.value}),t.of?e.jsx(a.Text,{size:"xs",c:"dimmed",children:t.of}):null]}),e.jsx(a.Text,{size:"sm",fw:550,children:t.label}),t.description?e.jsx(a.Text,{size:"xs",c:"dimmed",lh:1.45,children:t.description}):null]})}),we=({cards:t})=>e.jsx(a.SimpleGrid,{cols:{base:1,sm:2,lg:3,xl:4},spacing:"xs",children:t.map((s,c)=>e.jsx(Te,{card:s},`${s.label}-${c}`))}),Re=({flags:t})=>e.jsx(a.SimpleGrid,{cols:{base:1,sm:2,lg:4},spacing:"xs",children:t.map(s=>e.jsx(a.Paper,{withBorder:!0,radius:"md",p:"sm",children:e.jsxs(a.Stack,{gap:3,children:[e.jsx(a.Text,{size:"10px",c:"dimmed",ff:"monospace",style:{wordBreak:"break-all"},children:s.key}),e.jsxs(a.Group,{gap:7,wrap:"nowrap",children:[e.jsx(a.Badge,{size:"xs",circle:!0,color:te(s.severity)}),e.jsx(a.Text,{size:"sm",fw:550,children:s.value})]}),s.description?e.jsx(a.Text,{size:"xs",c:"dimmed",lh:1.4,children:s.description}):null]})},s.key))}),ke=({attributes:t})=>e.jsx(a.Stack,{gap:7,children:t.map((s,c)=>e.jsxs(a.Group,{gap:12,wrap:"nowrap",justify:"space-between",children:[e.jsx(a.Text,{size:"sm",c:"dimmed",children:s.label}),e.jsx(a.Text,{size:"sm",fw:600,ta:"right",children:s.value})]},`${s.label}-${c}`))}),Q=({title:t,hint:s,children:c})=>e.jsxs(a.Stack,{gap:"xs",children:[e.jsxs(a.Group,{gap:10,align:"baseline",wrap:"wrap",children:[e.jsx(a.Text,{size:"xs",fw:650,tt:"uppercase",style:{letterSpacing:".05em"},children:t}),s?e.jsx(a.Text,{size:"xs",c:"dimmed",children:s}):null]}),c]}),la=(t,s)=>s>0?` · ${Math.round(t/s*100)}%`:"",ca=t=>{const s=t.flags;return[{key:"archbase.security.access.require-active",label:"Filtro de ativo",value:s.requireActive?"Ligado":"Desligado",severity:s.requireActive?"ok":"critical",description:s.requireActive?"Permissão para ação inativa não decide.":"Permissão para ação inativa ainda decide."},{key:"archbase.security.admin-endpoints.policy",label:"Endpoints administrativos",value:s.adminEndpointsPolicy,severity:s.adminEndpointsPolicy==="permit"?"critical":"ok",description:s.adminEndpointsPolicy==="permit"?"permit = qualquer autenticado administra segurança.":"Restrito."},{key:"ArchbaseRoleResolver",label:"Resolver de papel",value:s.roleResolverRegistered?"Registrado":"Ausente",severity:s.roleResolverRegistered?"ok":"warning",description:s.roleResolverRegistered?"@RequireRole é avaliado.":"@RequireRole não restringe nada sem ele."},{key:"scan",label:"Varredura de capacidades",value:s.scanConfigured?"Configurada":"Não configurada",severity:s.scanConfigured?"ok":"warning",description:s.scanConfigured?"O catálogo se alimenta do código.":"O catálogo não se alimenta do código."}]},da=t=>[{severity:"critical",value:t.permissionsPointingToInactive,of:`de ${t.permissions}${la(t.permissionsPointingToInactive,t.permissions)}`,label:"Permissões inertes",description:"Apontam para ação ou recurso inativo. É o acesso que o operador acredita ter concedido."},{severity:"warning",value:t.administrators,of:`de ${t.users} usuários`,label:"Administradores",description:"Passam direto pelo portão GRANT. Nada configurado nesta tela se aplica a eles."},{severity:"warning",value:t.actionsInactive,of:`de ${t.actions} ações`,label:"Ações inativas",description:"Capacidades do catálogo que não valem. São a origem das permissões inertes."},{severity:"warning",value:t.apiResourcesInactive,of:`de ${t.apiResources} recursos API`,label:"Recursos API desativados",description:"Desativados pela varredura por não terem @HasPermission correspondente."},{severity:"neutral",value:t.resourcesWithoutAction,of:`de ${t.resources} recursos`,label:"Recursos sem ação",description:"Telas ainda não abertas neste tenant. Indicador operacional, não alerta."},{severity:"warning",value:t.actionsWithoutPermission,of:"ações",label:"Ninguém tem",description:"Capacidade existe no catálogo e não foi concedida a ninguém."}],Pe=({slots:t,onError:s})=>{const c=k.useArchbaseRemoteServiceApi(r.ARCHBASE_IOC_API_TYPE.SecurityDiagnostics),[l,u]=d.useState(void 0),[o,j]=d.useState(!0),[f,I]=d.useState(void 0);d.useEffect(()=>{let p=!0;return j(!0),c.getOverview().then(v=>{p&&(u(v),I(void 0))}).catch(v=>{if(p){const D=r.processErrorMessage(v);I(D),s?.(D)}}).finally(()=>{p&&j(!1)}),()=>{p=!1}},[c]);const h=d.useMemo(()=>l?[...ca(l),...t?.additionalFlags?.(l)??[]]:[],[l,t]),C=d.useMemo(()=>l?[...da(l),...t?.additionalOverviewCards?.(l)??[]]:[],[l,t]);return o?e.jsx(a.Loader,{size:"sm"}):f?e.jsx(a.Alert,{color:"red",title:"Não foi possível ler o diagnóstico",children:f}):l?e.jsxs(a.Stack,{gap:"lg",children:[e.jsxs(Q,{title:"Proteções",hint:"de AccessOverview.flags",children:[e.jsx(Re,{flags:h}),e.jsx(a.Text,{size:"xs",c:"dimmed",lh:1.45,children:"Todas nascem com o padrão compatível — ligadas só quando alguém decide."})]}),e.jsx(Q,{title:"Catálogo e concessões",hint:"contagens vivas",children:e.jsx(we,{cards:C})}),t?.afterOverview?.(l)]}):null},Ae={EFFECTIVE:{label:"Efetiva",color:"green"},INERT:{label:"Inerte",color:"orange"},DENIED:{label:"Negada",color:"red"}},ua={GROUP:"grupo",PROFILE:"perfil",USER:"direto"},ha=[{value:"all",label:"Todas"},{value:"EFFECTIVE",label:"Só efetivas"},{value:"INERT",label:"Só inertes"},{value:"DENIED",label:"Negadas"},{value:"inherited",label:"Só herdadas"}],Ee=({slots:t,onError:s})=>{const c=k.useArchbaseRemoteServiceApi(r.ARCHBASE_IOC_API_TYPE.SecurityDiagnostics),[l,u]=d.useState(""),[o,j]=d.useState(void 0),[f,I]=d.useState(!1),[h,C]=d.useState(void 0),[p,v]=d.useState("all"),D=d.useCallback(async n=>{const x=n.trim();if(x){I(!0),C(void 0);try{const b=x.includes("@")?await c.getEffectiveAccessByEmail(x):await c.getEffectiveAccessByUserId(x);j(b)}catch(b){const P=r.processErrorMessage(b);C(P),s?.(P),j(void 0)}finally{I(!1)}}},[c,s]),S=d.useMemo(()=>o?[{label:"Perfil",value:o.profileName||"—"},{label:"Grupos",value:o.groupNames.length?o.groupNames.join(", "):"—"},...t?.userAttributes?.(o)??[]]:[],[o,t]),U=d.useMemo(()=>o?p==="all"?o.capabilities:p==="inherited"?o.capabilities.filter(n=>n.grantedByType!=="USER"):o.capabilities.filter(n=>n.situation===p):[],[o,p]),M=t?.additionalCapabilityColumns??[];return e.jsxs(a.Stack,{gap:"lg",children:[e.jsx(Q,{title:"Consultar",hint:"por e-mail ou id do usuário",children:t?.renderUserSearch?t.renderUserSearch(n=>{u(n),D(n)}):e.jsxs(a.Group,{gap:"xs",align:"flex-end",children:[e.jsx(a.TextInput,{style:{flex:1,minWidth:240},label:"Usuário",placeholder:"pessoa@empresa.com.br",value:l,onChange:n=>u(n.currentTarget.value),onKeyDown:n=>{n.key==="Enter"&&D(l)}}),e.jsx(a.Button,{onClick:()=>void D(l),loading:f,children:"Consultar"})]})}),h?e.jsx(a.Alert,{color:"red",title:"Não foi possível ler o efetivo",children:h}):null,f&&!o?e.jsx(a.Loader,{size:"sm"}):null,o?e.jsxs(e.Fragment,{children:[e.jsx(a.Paper,{withBorder:!0,radius:"md",p:"md",children:e.jsxs(a.Stack,{gap:"sm",children:[e.jsxs(a.Group,{gap:8,wrap:"wrap",align:"center",children:[e.jsx(a.Text,{fw:620,children:o.userLabel}),o.administrator?e.jsx(a.Badge,{color:"red",children:"administrador"}):null,o.enabled?null:e.jsx(a.Badge,{color:"red",children:"conta desativada"}),t?.afterUserBadges?.(o)]}),e.jsx(ke,{attributes:S})]})}),o.administrator?e.jsxs(a.Alert,{color:"orange",title:"Administrador passa direto",children:["O portão GRANT concede sem consultar o catálogo. A lista abaixo vir vazia não é falta de dado — é o atalho que a flag ",e.jsx("code",{children:"isAdministrator"})," representa."]}):null,e.jsx(a.SimpleGrid,{cols:{base:2,sm:4},spacing:"xs",children:[["concedidas",o.granted,"neutral"],["efetivas",o.effective,"ok"],["inertes",o.inert,"warning"],["negadas",o.denied,"critical"]].map(([n,x,b])=>e.jsx(a.Paper,{withBorder:!0,radius:"md",p:"sm",children:e.jsxs(a.Stack,{gap:2,children:[e.jsx(a.Text,{size:"1.3rem",fw:620,c:te(b),children:x}),e.jsx(a.Text,{size:"xs",c:"dimmed",children:n})]})},n))}),t?.afterEffectiveTally?.(o),e.jsxs(Q,{title:"Capacidades",hint:`${U.length} de ${o.capabilities.length}`,children:[e.jsx(a.Chip.Group,{multiple:!1,value:p,onChange:n=>v(n),children:e.jsx(a.Group,{gap:6,children:ha.map(n=>e.jsx(a.Chip,{value:n.value,size:"xs",variant:"outline",children:n.label},n.value))})}),e.jsx(a.Table.ScrollContainer,{minWidth:640,children:e.jsxs(a.Table,{striped:!0,highlightOnHover:!0,withTableBorder:!0,children:[e.jsx(a.Table.Thead,{children:e.jsxs(a.Table.Tr,{children:[e.jsx(a.Table.Th,{children:"Capacidade"}),e.jsx(a.Table.Th,{children:"Origem"}),e.jsx(a.Table.Th,{children:"Situação"}),M.map(n=>e.jsx(a.Table.Th,{children:n.header},n.header))]})}),e.jsxs(a.Table.Tbody,{children:[U.map((n,x)=>e.jsxs(a.Table.Tr,{children:[e.jsx(a.Table.Td,{children:e.jsxs(a.Text,{size:"sm",ff:"monospace",children:[n.resource,":",n.action]})}),e.jsx(a.Table.Td,{children:e.jsxs(a.Text,{size:"sm",children:[e.jsxs(a.Text,{span:!0,c:"dimmed",children:[ua[n.grantedByType]??n.grantedByType," "]}),n.grantedByName]})}),e.jsx(a.Table.Td,{children:e.jsx(a.Badge,{color:Ae[n.situation].color,variant:"light",children:Ae[n.situation].label})}),M.map(b=>e.jsx(a.Table.Td,{children:b.render(n,o)},b.header))]},`${n.resource}:${n.action}:${x}`)),U.length===0?e.jsx(a.Table.Tr,{children:e.jsx(a.Table.Td,{colSpan:3+M.length,children:e.jsx(a.Text,{size:"sm",c:"dimmed",ta:"center",py:"md",children:"Nenhuma capacidade neste filtro."})})}):null]})]})})]})]}):null]})},xa=[{gate:"IDENTITY",titulo:"Identidade",papel:"só nega",pergunta:"O principal é resolvível e a conta está ativa?"},{gate:"SCOPE",titulo:"Escopo",papel:"só nega",pergunta:"A concessão vale para o tenant, empresa e projeto pedidos?"},{gate:"RESTRICTION",titulo:"Restrições",papel:"só nega",pergunta:"Perfil, papel e persona exigidos pela anotação."},{gate:"LEVEL",titulo:"Nível",papel:"só nega",pergunta:"O nível da pessoa alcança o piso da capacidade?"},{gate:"GRANT",titulo:"Concessão",papel:"concede",pergunta:"Existe permissão, sem negação explícita?"}],De=({slots:t,onError:s})=>{const c=k.useArchbaseRemoteServiceApi(r.ARCHBASE_IOC_API_TYPE.SecurityDiagnostics),[l,u]=d.useState(""),[o,j]=d.useState(""),[f,I]=d.useState(""),[h,C]=d.useState({}),[p,v]=d.useState(void 0),[D,S]=d.useState(!1),[U,M]=d.useState(void 0),n=d.useCallback(async()=>{if(!(!l.trim()||!o.trim()||!f.trim())){S(!0),M(void 0);try{const b=l.trim(),P=await c.simulate({...b.includes("@")?{email:b}:{userId:b},resource:o.trim(),action:f.trim(),companyId:h.companyId,projectId:h.projectId});v(P)}catch(b){const P=r.processErrorMessage(b);M(P),s?.(P),v(void 0)}finally{S(!1)}}},[c,l,o,f,h,s]),x=(b,P)=>{const E=P.chain?.find(A=>A.gate===b);return E?E.passed?"passou":"negou":"nao-avaliado"};return e.jsxs(a.Stack,{gap:"lg",children:[e.jsx(a.Paper,{withBorder:!0,radius:"md",p:"md",children:e.jsxs(a.Stack,{gap:"sm",children:[e.jsxs(a.SimpleGrid,{cols:{base:1,sm:2,lg:4},spacing:"xs",children:[e.jsx(a.TextInput,{label:"Usuário",placeholder:"e-mail ou id",value:l,onChange:b=>u(b.currentTarget.value)}),e.jsx(a.TextInput,{label:"Recurso",placeholder:"tms.ordemservico",value:o,onChange:b=>j(b.currentTarget.value)}),e.jsx(a.TextInput,{label:"Ação",placeholder:"aprovar_custo",value:f,onChange:b=>I(b.currentTarget.value)}),e.jsx(a.TextInput,{label:"Empresa (opcional)",placeholder:"companyId",value:h.companyId??"",onChange:b=>C(P=>({...P,companyId:b.currentTarget.value||void 0}))})]}),t?.afterSimulationFields?.(b=>C(P=>({...P,...b}))),e.jsxs(a.Group,{gap:"xs",align:"center",children:[e.jsx(a.Button,{onClick:()=>void n(),loading:D,children:"Simular"}),e.jsx(a.Text,{size:"xs",c:"dimmed",children:"Somente leitura — não altera permissão nenhuma."})]})]})}),U?e.jsx(a.Alert,{color:"red",title:"Não foi possível simular",children:U}):null,D&&!p?e.jsx(a.Loader,{size:"sm"}):null,p?e.jsxs(e.Fragment,{children:[e.jsx(Q,{title:"Cadeia de decisão",hint:"os quatro primeiros só negam; só o quinto concede",children:e.jsx(a.Paper,{withBorder:!0,radius:"md",p:"md",children:e.jsx(a.Stack,{gap:"sm",children:xa.map((b,P)=>{const E=x(b.gate,p),A=p.chain?.find(H=>H.gate===b.gate)?.detail;return e.jsxs(a.Group,{align:"flex-start",wrap:"nowrap",gap:"sm",children:[e.jsx(a.Text,{size:"xs",ff:"monospace",c:"dimmed",w:16,children:P+1}),e.jsxs(a.Stack,{gap:2,style:{flex:1,minWidth:0},children:[e.jsxs(a.Group,{gap:8,align:"baseline",wrap:"wrap",children:[e.jsx(a.Text,{size:"sm",fw:600,c:E==="negou"?"red":void 0,opacity:E==="nao-avaliado"?.5:1,children:b.titulo}),e.jsxs(a.Text,{size:"xs",c:"dimmed",children:["· ",b.papel]})]}),e.jsx(a.Text,{size:"xs",c:"dimmed",opacity:E==="nao-avaliado"?.5:1,children:b.pergunta}),A?e.jsx(a.Text,{size:"xs",c:"dimmed",children:A}):null]}),e.jsx(a.Badge,{variant:"light",color:E==="negou"?"red":E==="passou"?"green":"gray",children:E==="nao-avaliado"?"não avaliado":E})]},b.gate)})})})}),e.jsx(a.Alert,{color:p.allowed?"green":"red",title:p.allowed?"Pode":"Não pode",children:e.jsxs(a.Stack,{gap:6,children:[e.jsx(a.Text,{size:"sm",children:p.message}),e.jsxs(a.Text,{size:"xs",ff:"monospace",c:"dimmed",children:["reasonCode: ",p.reasonCode,p.deniedAt?` · deniedAt: ${p.deniedAt}`:"",p.grantedByName?` · grantedBy: ${p.grantedByName}`:""]})]})}),t?.afterDecision?.(p)]}):null]})},pa=["overview","effective","simulate"];function ma({height:t="100%",width:s="100%",defaultTab:c="overview",tabs:l=pa,slots:u,onError:o}){const[j,f]=d.useState(c),I=h=>l.includes(h);return e.jsx(a.Paper,{style:{height:t,width:s},p:"md",withBorder:!1,children:e.jsxs(a.Tabs,{value:j,onChange:f,variant:"pills",keepMounted:!1,children:[e.jsxs(a.Tabs.List,{mb:"md",children:[I("overview")?e.jsx(a.Tabs.Tab,{value:"overview",leftSection:e.jsx(O.IconChartBar,{size:"1rem"}),children:"Panorama"}):null,I("effective")?e.jsx(a.Tabs.Tab,{value:"effective",leftSection:e.jsx(O.IconListSearch,{size:"1rem"}),children:"Efetivo do usuário"}):null,I("simulate")?e.jsx(a.Tabs.Tab,{value:"simulate",leftSection:e.jsx(O.IconShieldSearch,{size:"1rem"}),children:"Simular"}):null]}),I("overview")?e.jsx(a.Tabs.Panel,{value:"overview",children:e.jsx(Pe,{slots:u,onError:o})}):null,I("effective")?e.jsx(a.Tabs.Panel,{value:"effective",children:e.jsx(Ee,{slots:u,onError:o})}):null,I("simulate")?e.jsx(a.Tabs.Panel,{value:"simulate",children:e.jsx(De,{slots:u,onError:o})}):null]})})}exports.ApiTokenModal=Ie;exports.ArchbaseApiTokenView=ia;exports.ArchbaseDualListSelector=je;exports.ArchbaseSecurityDiagnosticsView=ma;exports.ArchbaseSecurityView=oa;exports.AttributeList=ke;exports.EffectiveAccessPanel=Ee;exports.FlagStrip=Re;exports.GroupModal=ye;exports.MetricCard=Te;exports.MetricCards=we;exports.OverviewPanel=Pe;exports.PermissionsSelectorModal=se;exports.ProfileModal=ve;exports.RenderProfileUserItem=Se;exports.Section=Q;exports.SimulationPanel=De;exports.UserModal=Ce;exports.severityColor=te;
10
- //# sourceMappingURL=index.cjs.map