@trismegisto/spine 3.0.4 → 3.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{trismegisto-spine-auto-service-apps.usage-DeLfYMeO.mjs → trismegisto-spine-auto-service-apps.usage-po9Ds_SU.mjs} +21 -22
- package/fesm2022/trismegisto-spine-auto-service-apps.usage-po9Ds_SU.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-audit.component-BNtNWfiu.mjs → trismegisto-spine-auto-service-auto-service-audit.component-tfGcVR3i.mjs} +2 -2
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-audit.component-BNtNWfiu.mjs.map → trismegisto-spine-auto-service-auto-service-audit.component-tfGcVR3i.mjs.map} +1 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-Cl7ahisu.mjs +65 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-Cl7ahisu.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-client.component-wu2tFGS7.mjs → trismegisto-spine-auto-service-auto-service-client.component-DzmlpLPu.mjs} +136 -87
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-DzmlpLPu.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-groups.component-DHhbEiL4.mjs → trismegisto-spine-auto-service-auto-service-groups.component-2xCG_wS9.mjs} +2 -2
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-groups.component-DHhbEiL4.mjs.map → trismegisto-spine-auto-service-auto-service-groups.component-2xCG_wS9.mjs.map} +1 -1
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-login-attempts.component-B87vibNB.mjs → trismegisto-spine-auto-service-auto-service-login-attempts.component-CRvxfSWD.mjs} +2 -2
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-login-attempts.component-B87vibNB.mjs.map → trismegisto-spine-auto-service-auto-service-login-attempts.component-CRvxfSWD.mjs.map} +1 -1
- package/fesm2022/{trismegisto-spine-auto-service-auto-service.component-D-N-xXPN.mjs → trismegisto-spine-auto-service-auto-service.component-C4FBAefe.mjs} +89 -55
- package/fesm2022/trismegisto-spine-auto-service-auto-service.component-C4FBAefe.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-client.usage-CcJANb20.mjs → trismegisto-spine-auto-service-client.usage-B16r3IHk.mjs} +16 -12
- package/fesm2022/trismegisto-spine-auto-service-client.usage-B16r3IHk.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service.mjs +7 -7
- package/fesm2022/trismegisto-spine.mjs +39 -3
- package/fesm2022/trismegisto-spine.mjs.map +1 -1
- package/package.json +6 -6
- package/types/trismegisto-spine-auto-service.d.ts.map +1 -1
- package/types/trismegisto-spine.d.ts +22 -0
- package/types/trismegisto-spine.d.ts.map +1 -1
- package/fesm2022/trismegisto-spine-auto-service-apps.usage-DeLfYMeO.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-DdtDk_xl.mjs +0 -51
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-DdtDk_xl.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-wu2tFGS7.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service.component-D-N-xXPN.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-client.usage-CcJANb20.mjs.map +0 -1
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trismegisto/spine",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.5",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": ">=21.0.0",
|
|
7
7
|
"@angular/core": ">=21.0.0",
|
|
8
8
|
"@angular/router": ">=21.0.0",
|
|
9
9
|
"@orfeu/angular": "^1.0.0",
|
|
10
|
-
"@trismegisto/angular": "^3.0.
|
|
11
|
-
"@trismegisto/core": "^3.0.
|
|
12
|
-
"@trismegisto/icons": "^3.0.
|
|
13
|
-
"@trismegisto/primitives": "^3.0.
|
|
14
|
-
"@trismegisto/tokens": "^3.0.
|
|
10
|
+
"@trismegisto/angular": "^3.0.5",
|
|
11
|
+
"@trismegisto/core": "^3.0.5",
|
|
12
|
+
"@trismegisto/icons": "^3.0.5",
|
|
13
|
+
"@trismegisto/primitives": "^3.0.5",
|
|
14
|
+
"@trismegisto/tokens": "^3.0.5",
|
|
15
15
|
"rxjs": "^7.0.0",
|
|
16
16
|
"@apollo/client": "^4.2.0",
|
|
17
17
|
"apollo-angular": "^14.2.0",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trismegisto-spine-auto-service.d.ts","sources":["../../../projects/ui/auto-service/src/auto-service.tokens.ts","../../../projects/ui/auto-service/src/provide-auto-service.ts","../../../projects/ui/auto-service/src/auto-service.service.ts","../../../projects/ui/auto-service/src/client-picker/auto-service-client-picker.component.ts"],"mappings":";;;;;;UAEiB,iBAAiB;;AAKjC;AAED,cAAa,mBAAmB,EAAA,cAAA,CAAA,iBAAA;AAWhC,cAAa,sCAAsC;AACnD,cAAa,oCAAoC;AACjD,cAAa,sCAAsC;AAGnD,cAAa,qCAAqC;AAElD,cAAa,8CAA8C;AAG3D,cAAa,oCAAoC;;ACrBjD;;;;AAIG;AACH,cAAa,oBAAoB,EAAE,QAAQ,CAAC,MAAM,0EAA0E,OAAO,CAAC,IAAI;AASxI;;;;;;;AAOG;AACH,cAAa,sBAAsB,EAAE,QAAQ,CAAC,MAAM,cAAc,oBAAoB,EAAE,aAAa;AAoCrG,iBAAgB,kBAAkB,SAAS,iBAAiB,GAAG,oBAAoB;;AC5DnF;AACM,KAAM,eAAe;AAE3B;UACiB,eAAe;gBAClB,eAAe;;;AAG3B;AACA;;;cAGU,eAAe;AAC1B;AAED;UACiB,gBAAgB;UAAS,eAAe;;AAAwB;AAEjF;;;AAGG;UACc,gBAAgB;;;AAG/B;;;AAGA;;;;AAAiD;AAClD;AAED;UACiB,oBAAoB;;;;;AAAiE;AAEtG;UACiB,sBAAsB;;;;;AAA2E;AAElH;UACiB,sBAAsB;;;AAAoC;;AAAgD;AAE3H;UACiB,cAAc;;;;AAI7B;AACA;AACD;AAED;;;AAGG;UACc,mBAAmB;;;;AAIlC;;;AAGA;;AAEA;AACD;AAED;UACiB,yBAAyB;;;;AAA2D;AAA0B;AAE/H;UACiB,0BAA0B;;;;;AAAiE;AAE5G,cACa,kBAAkB;AAiB3B;AACA;AAC6B;;;AAZ/B;;sBAUgB,UAAU,QACV,oBAAoB,UACW,iBAAiB;oBAIpD,OAAA;AAAoD;;oCAGnC,OAAA;AAAkD;;AAC/E,iDAA0C,OAAA;6DACY,OAAA;AACtD,kDAA2C,OAAA;kCAGhB,OAAA;AAAmD;;AAC9E,+CAAwC,OAAA;2DACY,OAAA;AACpD,gDAAyC,OAAA;;qCAEX,OAAA;AAAgD,cAAA,eAAe;;AAC7F;;;AAGG;6CACsC,gBAAgB,KAAE,OAAA;iCAGjC,OAAA;AAAkD,gBAAA,gBAAgB;;;qCAE9D,OAAA;AAAuD,qBAAA,oBAAoB;;AACzG,wCAAoC,sBAAsB,GAAA,OAAA,CAAA,gBAAA;yDACL,sBAAsB,GAAA,OAAA,CAAA,gBAAA;AAC3E,oDAA6C,OAAA;AAC7C,wDAAiD,OAAA;AAAmD;;AACpG,4FAAqF,OAAA;AACrF,mGAA4F,OAAA;0EACzB,OAAA;AAGnE;;;AAA4E,QAAA,OAAA;AAI7B;;iCAIrB,OAAA;AAAkD;;AAC5E,qDAA8C,OAAA;AAC9C,sDAA+C,OAAA;AAC/C,mDAA4C,OAAA;AAAkD;;oEACjC,OAAA;sEACE,OAAA;+BAGvC,OAAA;AAAgD,cAAA,cAAc;;AACtF;;AAAkD;AAA2B,QAAA,OAAA;;;;;2DACzB,OAAA;;AAEpD,sDAA+C,OAAA;;;;AAC/C,gDAAyC,OAAA;AACzC,uDAAgD,OAAA;AAAsD;;AAGtG,mDAA4C,OAAA;AAAkD,gBAAA,mBAAmB;;;0DAE3D,yBAAyB,GAAA,OAAA,CAAA,0BAAA;;sEAEhB,OAAA;AAI/D,sDAA+C,OAAA;AAAqD;;yEAClC,OAAA;AAClE,6DAAsD,OAAA;AAGtD,6DAAsD,OAAA;AAAuD;;iFACnC,OAAA;qFACI,OAAA;yCAjGnE,kBAAkB;6CAAlB,kBAAkB;AAmG9B;;
|
|
1
|
+
{"version":3,"file":"trismegisto-spine-auto-service.d.ts","sources":["../../../projects/ui/auto-service/src/auto-service.tokens.ts","../../../projects/ui/auto-service/src/provide-auto-service.ts","../../../projects/ui/auto-service/src/auto-service.service.ts","../../../projects/ui/auto-service/src/client-picker/auto-service-client-picker.component.ts"],"mappings":";;;;;;UAEiB,iBAAiB;;AAKjC;AAED,cAAa,mBAAmB,EAAA,cAAA,CAAA,iBAAA;AAWhC,cAAa,sCAAsC;AACnD,cAAa,oCAAoC;AACjD,cAAa,sCAAsC;AAGnD,cAAa,qCAAqC;AAElD,cAAa,8CAA8C;AAG3D,cAAa,oCAAoC;;ACrBjD;;;;AAIG;AACH,cAAa,oBAAoB,EAAE,QAAQ,CAAC,MAAM,0EAA0E,OAAO,CAAC,IAAI;AASxI;;;;;;;AAOG;AACH,cAAa,sBAAsB,EAAE,QAAQ,CAAC,MAAM,cAAc,oBAAoB,EAAE,aAAa;AAoCrG,iBAAgB,kBAAkB,SAAS,iBAAiB,GAAG,oBAAoB;;AC5DnF;AACM,KAAM,eAAe;AAE3B;UACiB,eAAe;gBAClB,eAAe;;;AAG3B;AACA;;;cAGU,eAAe;AAC1B;AAED;UACiB,gBAAgB;UAAS,eAAe;;AAAwB;AAEjF;;;AAGG;UACc,gBAAgB;;;AAG/B;;;AAGA;;;;AAAiD;AAClD;AAED;UACiB,oBAAoB;;;;;AAAiE;AAEtG;UACiB,sBAAsB;;;;;AAA2E;AAElH;UACiB,sBAAsB;;;AAAoC;;AAAgD;AAE3H;UACiB,cAAc;;;;AAI7B;AACA;AACD;AAED;;;AAGG;UACc,mBAAmB;;;;AAIlC;;;AAGA;;AAEA;AACD;AAED;UACiB,yBAAyB;;;;AAA2D;AAA0B;AAE/H;UACiB,0BAA0B;;;;;AAAiE;AAE5G,cACa,kBAAkB;AAiB3B;AACA;AAC6B;;;AAZ/B;;sBAUgB,UAAU,QACV,oBAAoB,UACW,iBAAiB;oBAIpD,OAAA;AAAoD;;oCAGnC,OAAA;AAAkD;;AAC/E,iDAA0C,OAAA;6DACY,OAAA;AACtD,kDAA2C,OAAA;kCAGhB,OAAA;AAAmD;;AAC9E,+CAAwC,OAAA;2DACY,OAAA;AACpD,gDAAyC,OAAA;;qCAEX,OAAA;AAAgD,cAAA,eAAe;;AAC7F;;;AAGG;6CACsC,gBAAgB,KAAE,OAAA;iCAGjC,OAAA;AAAkD,gBAAA,gBAAgB;;;qCAE9D,OAAA;AAAuD,qBAAA,oBAAoB;;AACzG,wCAAoC,sBAAsB,GAAA,OAAA,CAAA,gBAAA;yDACL,sBAAsB,GAAA,OAAA,CAAA,gBAAA;AAC3E,oDAA6C,OAAA;AAC7C,wDAAiD,OAAA;AAAmD;;AACpG,4FAAqF,OAAA;AACrF,mGAA4F,OAAA;0EACzB,OAAA;AAGnE;;;AAA4E,QAAA,OAAA;AAI7B;;iCAIrB,OAAA;AAAkD;;AAC5E,qDAA8C,OAAA;AAC9C,sDAA+C,OAAA;AAC/C,mDAA4C,OAAA;AAAkD;;oEACjC,OAAA;sEACE,OAAA;+BAGvC,OAAA;AAAgD,cAAA,cAAc;;AACtF;;AAAkD;AAA2B,QAAA,OAAA;;;;;2DACzB,OAAA;;AAEpD,sDAA+C,OAAA;;;;AAC/C,gDAAyC,OAAA;AACzC,uDAAgD,OAAA;AAAsD;;AAGtG,mDAA4C,OAAA;AAAkD,gBAAA,mBAAmB;;;0DAE3D,yBAAyB,GAAA,OAAA,CAAA,0BAAA;;sEAEhB,OAAA;AAI/D,sDAA+C,OAAA;AAAqD;;yEAClC,OAAA;AAClE,6DAAsD,OAAA;AAGtD,6DAAsD,OAAA;AAAuD;;iFACnC,OAAA;qFACI,OAAA;yCAjGnE,kBAAkB;6CAAlB,kBAAkB;AAmG9B;;UC1KgB,iBAAiB;;;AAGhC;;AAED;;","names":[]}
|
|
@@ -1179,6 +1179,9 @@ interface SpineMessages {
|
|
|
1179
1179
|
tabAccess: string;
|
|
1180
1180
|
/** `[innerHTML]`. Sem client: a pessoa não administra o app em que está logada. */
|
|
1181
1181
|
noClients: string;
|
|
1182
|
+
/** `{status}`. A lista de clients administrados não veio (Argos fora do ar, rede, erro do servidor): não é falta de permissão. */
|
|
1183
|
+
clientsLoadError: string;
|
|
1184
|
+
retryLoad: string;
|
|
1182
1185
|
pickClient: string;
|
|
1183
1186
|
groupsTitle: string;
|
|
1184
1187
|
groupsIntro: string;
|
|
@@ -1249,6 +1252,18 @@ interface SpineMessages {
|
|
|
1249
1252
|
noAppAccess: string;
|
|
1250
1253
|
colType: string;
|
|
1251
1254
|
manageOperations: string;
|
|
1255
|
+
/** Título da coluna com o botão "Gerenciar operações" (abas Acessos e Tokens da aplicação). */
|
|
1256
|
+
colOperations: string;
|
|
1257
|
+
/** Título da coluna com o botão "Gerenciar rotas" (aba Acesso do client), como no painel do Argos. */
|
|
1258
|
+
colGuards: string;
|
|
1259
|
+
/** Campo de filtro no topo do drawer "Gerenciar operações" (rótulo acessível e placeholder). */
|
|
1260
|
+
filterOperations: string;
|
|
1261
|
+
/** Campo de filtro no topo do drawer "Gerenciar rotas". */
|
|
1262
|
+
filterRoutes: string;
|
|
1263
|
+
/** `{term}`. Filtro dos drawers sem nenhum item que case. */
|
|
1264
|
+
noFilterMatch: string;
|
|
1265
|
+
/** Nome acessível da árvore do drawer "Gerenciar rotas". */
|
|
1266
|
+
routesTreeLabel: string;
|
|
1252
1267
|
/** `{group}`. */
|
|
1253
1268
|
operationsOf: string;
|
|
1254
1269
|
noOperations: string;
|
|
@@ -1352,6 +1367,13 @@ interface SpineMessages {
|
|
|
1352
1367
|
colDisplay: string;
|
|
1353
1368
|
colIcon: string;
|
|
1354
1369
|
colPath: string;
|
|
1370
|
+
/** Coluna do id (UUID) em Rotas e Roteadores: só o botão de copiar. */
|
|
1371
|
+
colId: string;
|
|
1372
|
+
/** `{name}`. Nome acessível do botão que copia o UUID da rota. */
|
|
1373
|
+
copyRouteId: string;
|
|
1374
|
+
/** `{name}`. Nome acessível do botão que copia o UUID do roteador. */
|
|
1375
|
+
copyRouterId: string;
|
|
1376
|
+
idCopied: string;
|
|
1355
1377
|
/** Botão da aba Roteadores e título do modal que muda a ordem dos itens no menu do app. */
|
|
1356
1378
|
reorder: string;
|
|
1357
1379
|
reorderTitle: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trismegisto-spine.d.ts","sources":["../../../projects/ui/src/route.model.ts","../../../projects/ui/src/route-tree.ts","../../../projects/ui/src/hermes.imports.ts","../../../projects/ui/src/brand.ts","../../../projects/ui/src/app-config.token.ts","../../../projects/ui/src/theme.service.ts","../../../projects/ui/src/theme-preset.service.ts","../../../projects/ui/src/density.service.ts","../../../projects/ui/src/theme.initializer.ts","../../../projects/ui/src/package-info.token.ts","../../../projects/ui/src/preferences.service.ts","../../../projects/ui/src/admin-api.token.ts","../../../projects/ui/src/quick-access.service.ts","../../../projects/ui/src/user-storage.ts","../../../projects/ui/src/runtime-environment.ts","../../../projects/ui/src/news.token.ts","../../../projects/ui/src/i18n/spine-messages.ts","../../../projects/ui/src/i18n/spine-messages.en.ts","../../../projects/ui/src/i18n/spine-messages.es.ts","../../../projects/ui/src/i18n/spine-i18n.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"trismegisto-spine.d.ts","sources":["../../../projects/ui/src/route.model.ts","../../../projects/ui/src/route-tree.ts","../../../projects/ui/src/hermes.imports.ts","../../../projects/ui/src/brand.ts","../../../projects/ui/src/app-config.token.ts","../../../projects/ui/src/theme.service.ts","../../../projects/ui/src/theme-preset.service.ts","../../../projects/ui/src/density.service.ts","../../../projects/ui/src/theme.initializer.ts","../../../projects/ui/src/package-info.token.ts","../../../projects/ui/src/preferences.service.ts","../../../projects/ui/src/admin-api.token.ts","../../../projects/ui/src/quick-access.service.ts","../../../projects/ui/src/user-storage.ts","../../../projects/ui/src/runtime-environment.ts","../../../projects/ui/src/news.token.ts","../../../projects/ui/src/i18n/spine-messages.ts","../../../projects/ui/src/i18n/spine-messages.en.ts","../../../projects/ui/src/i18n/spine-messages.es.ts","../../../projects/ui/src/i18n/spine-i18n.ts"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trismegisto-spine-auto-service-apps.usage-DeLfYMeO.mjs","sources":["../../../projects/ui/auto-service/src/docs/apps.usage.ts"],"sourcesContent":["// Manual de uso da tela Aplicações do auto-serviço (`RouteDocument.load`), em Markdown. Módulo próprio,\n// carregado só pelo `import()` de `AUTO_SERVICE_DOCUMENTS`: vira um chunk à parte no FESM e fica fora do\n// bundle inicial. Não importe estaticamente nem reexporte no `public-api.ts`.\nexport default `# Aplicações\n\nGerencie as aplicações (credenciais \\`client_credentials\\`) do projeto do seu client, sem depender do painel\ncentral: cadastre, ative ou desative e exclua aplicações, veja as operações que cada uma registra, defina quais\ngrupos podem chamar quais operações e crie os tokens de API das aplicações.\n\n## Antes de começar\n\nComo nas outras telas do auto-serviço, o client administrado é o do app em que você está logado: não há client\npara escolher. É preciso estar no grupo de administração do projeto desse app e com o crachá **Administrador**\nativo.\n\n## Como usar\n\n1. A tela abre com o botão **Cadastrar** e um cartão com o seletor **Selecione uma aplicação**, que lista as\n aplicações do projeto. Escolha uma e clique em **Consultar**.\n2. Para criar uma aplicação, clique em **Cadastrar**. No modal **Nova aplicação**, preencha o\n **Nome** (obrigatório) e os **Grants** (separados por vírgula; já vem \\`client_credentials\\`) e clique em **Salvar**.\n3. Ao criar, aparece no topo da tela o aviso **Aplicação criada** com o secret. **Copie e guarde o secret na hora:\n ele não é exibido de novo.** O aviso some quando você o fecha, troca de client ou exclui a aplicação.\n4. A aplicação consultada abre embaixo do seletor: um cartão com o nome, a situação (**Ativo** ou **Inativo**),\n os grants e os botões das ações da aplicação:\n - **Editar**: muda nome, grants e a caixa **Ativo**.\n - **Desativar** / **Ativar**: liga ou desliga a aplicação sem apagar nada.\n - **Gerar novo segredo**: abre a confirmação **Gerar um novo segredo?**. Confirmando, o segredo atual deixa de\n funcionar na hora (atualize o APP_SECRET do serviço que usa a aplicação; tokens já emitidos valem até expirar,\n até 1 hora) e o novo aparece numa janela, **uma única vez**, com o botão **Copiar**. **Concluir** fecha a janela.\n - **Excluir**: abre a confirmação **Excluir aplicação?** com o nome dela; só depois de **Excluir** no diálogo a\n aplicação é apagada e a credencial dela para de funcionar. **Cancelar** (ou Esc) não muda nada.\n5. Embaixo do cartão ficam as abas **Operações**, **Acessos** e **Tokens** da aplicação. Consultar outra\n aplicação volta para a aba **Operações**.\n\n> **Desativar** age na hora e se desfaz com **Ativar**. **Excluir** não tem volta: na dúvida, desative. Depois de\n> excluir aparece a mensagem **Exclusão concluída.**; se o servidor recusar, a mensagem de erro diz o motivo e a\n> aplicação continua na tela.\n\n## Aba Operações\n\nLista, só para consulta, as operações registradas pela aplicação: **Identificador**, **Método**, **Nível** (o selo\nfica verde para operação pública e amarelo para protegida), **Descrição** e **Grupos permitidos** (quantos grupos já\npodem chamar a operação). A tela não cria nem edita operações.\n\n## Aba Acessos\n\nMostra os grupos que têm acesso à aplicação (**Grupo** e **Tipo**). O grupo de administração do projeto não aparece:\no acesso dele às aplicações é gerido só no painel central do Argos.\n\n- **Novo acesso**: escolha o **Grupo** e clique em **Criar**. Só aparecem os grupos do seu client (sem o de\n administração).\n- No menu de cada linha:\n - **Gerenciar operações** abre o painel **Operações de nome do grupo**: uma árvore com as operações agrupadas pelo\n identificador (\\`teams:members:add\\` fica na pasta **teams** › **members**), cada uma com método, nível e descrição.\n No topo, um resumo diz quantas operações protegidas estão liberadas para o grupo. Só as **protected** dependem de\n permissão: as **public**, **private** e **optional** aparecem marcadas e travadas. Cada pasta mostra quantas das\n operações escolhíveis dela estão marcadas (**X de Y**) e marcá-la marca todas elas. Marque o que o grupo pode\n chamar, desmarque o que não pode e clique em **Confirmar alterações** (o botão só habilita quando algo mudou).\n **Cancelar** descarta.\n - **Remover** pede confirmação (**Remover acesso à aplicação?**, com o nome do grupo) e só então tira o acesso do\n grupo à aplicação e as permissões de operação dele.\n\nDepois de criar o acesso, use **Gerenciar operações** para escolher o que o grupo pode chamar.\n\n## Aba Tokens\n\nTokens de API da aplicação: a credencial que um serviço envia no cabeçalho \\`x-api-token\\` para chamar as operações\nda aplicação sem login. A tabela mostra **Nome**, **Início do token** (os primeiros caracteres, para reconhecer),\n**Situação** (**Ativo**, **Expirado** ou **Revogado**), **Expira em** e **Último uso**.\n\n1. **Novo token** abre o formulário:\n - **Nome** (obrigatório) e **Descrição** (opcional).\n - **Expira em**: de amanhã até 365 dias a partir de hoje (vem com 90 dias). O token vale até a meia-noite desse\n dia.\n - **Operações liberadas ao token**: nada vem marcado. O token não tem login, então marque as operações\n **protected**, **private** e **optional** que ele pode chamar; o que ficar desmarcado ele não chama. As **public** aparecem\n desmarcadas e travadas, com a nota **pública: não precisa de token**.\n2. **Criar token** mostra o valor do token **uma única vez**, com o botão **Copiar**. **Copie e guarde na hora:\n fechando a janela (Concluir ou Esc) não há como vê-lo de novo.** Se ele se perder, revogue e crie outro.\n3. No menu de cada linha:\n - **Gerenciar operações** abre o mesmo painel em árvore, para o token: marca o que já está liberado, deixa marcar e\n desmarcar as **protected**, **private** e **optional** e mantém as **public** travadas e desmarcadas (o resumo\n do topo diz quantas são). **Confirmar alterações** grava só o que mudou.\n - **Revogar** pede confirmação (**Revogar token?**, com o nome dele). Confirmando, o token deixa de funcionar na\n hora e fica na lista como **Revogado**. Não tem volta.\n\nToken revogado não tem mais ações. Se o servidor recusar a criação (por exemplo, validade fora do intervalo), o\nmotivo aparece no próprio formulário.\n`;\n"],"names":[],"mappings":"AAAA;AACA;AACA;AACA,iBAAe,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsFd;;"}
|
package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-DdtDk_xl.mjs
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, ChangeDetectorRef, EventEmitter, Output, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
-
import * as i2 from '@angular/common';
|
|
4
|
-
import { CommonModule } from '@angular/common';
|
|
5
|
-
import { CardComponent, ComboboxComponent } from '@trismegisto/angular';
|
|
6
|
-
import { SPINE_MESSAGES } from '@trismegisto/spine';
|
|
7
|
-
import { AutoServiceService } from './trismegisto-spine-auto-service.mjs';
|
|
8
|
-
|
|
9
|
-
class AutoServiceClientPickerComponent {
|
|
10
|
-
constructor(service) {
|
|
11
|
-
this.service = service;
|
|
12
|
-
this.text = inject(SPINE_MESSAGES).autoService;
|
|
13
|
-
/** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */
|
|
14
|
-
this.cdr = inject(ChangeDetectorRef);
|
|
15
|
-
this.loading = true;
|
|
16
|
-
this.clients = [];
|
|
17
|
-
this.selectedClientId = '';
|
|
18
|
-
this.clientChange = new EventEmitter();
|
|
19
|
-
}
|
|
20
|
-
get clientOptions() {
|
|
21
|
-
return this.clients.map((c) => ({ value: c.id, label: c.display_name || c.name }));
|
|
22
|
-
}
|
|
23
|
-
async ngOnInit() {
|
|
24
|
-
this.loading = true;
|
|
25
|
-
try {
|
|
26
|
-
const res = await this.service.getMyClients();
|
|
27
|
-
this.clients = res.clients;
|
|
28
|
-
if (this.clients.length === 1)
|
|
29
|
-
this.selectClient(this.clients[0].id);
|
|
30
|
-
}
|
|
31
|
-
finally {
|
|
32
|
-
this.loading = false;
|
|
33
|
-
this.cdr.markForCheck();
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
selectClient(id) {
|
|
37
|
-
this.selectedClientId = id;
|
|
38
|
-
this.clientChange.emit(this.clients.find(c => c.id === id) ?? null);
|
|
39
|
-
}
|
|
40
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.24", ngImport: i0, type: AutoServiceClientPickerComponent, deps: [{ token: AutoServiceService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
41
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.24", type: AutoServiceClientPickerComponent, isStandalone: true, selector: "spine-auto-service-client-picker", outputs: { clientChange: "clientChange" }, ngImport: i0, template: "<hm-card *ngIf=\"loading\">\n <span class=\"muted\">{{ text.loading }}</span>\n</hm-card>\n\n<hm-card *ngIf=\"!loading && clients.length === 0\">\n <span [innerHTML]=\"text.noClients\"></span>\n</hm-card>\n\n<hm-card *ngIf=\"!loading && clients.length > 1\">\n <hm-combobox\n [label]=\"text.pickClient\"\n [options]=\"clientOptions\"\n [value]=\"selectedClientId\"\n (valueChange)=\"selectClient($event)\"\n ></hm-combobox>\n</hm-card>\n", styles: ["@charset \"UTF-8\";.as-stack{display:flex;flex-direction:column;gap:var(--hm-space-md);min-inline-size:0}.as-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--hm-space-xs)}.as-field-row{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--hm-space-sm)}.as-field-row>hm-combobox{flex:1 1 16rem;min-inline-size:0}.as-summary{display:flex;flex-wrap:wrap;align-items:center;gap:var(--hm-space-sm)}.as-summary__info{display:flex;flex:1 1 16rem;flex-direction:column;gap:var(--hm-space-micro);min-inline-size:0}.as-summary__title{display:flex;flex-wrap:wrap;align-items:center;gap:var(--hm-space-xs);margin:0;color:var(--hm-text);font-size:var(--hm-font-size-md);font-weight:var(--hm-font-weight-semibold)}.as-summary__detail{margin:0;color:var(--hm-muted);font-size:var(--hm-font-size-sm)}.muted{color:var(--hm-muted)}.as-empty{margin:var(--hm-space-xs) 0 0;font-size:var(--hm-font-size-sm)}.as-secret{display:grid;gap:var(--hm-space-micro)}.as-secret__label{color:var(--hm-muted);font-size:var(--hm-font-size-xs)}.as-secret__row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--hm-space-xs)}.as-secret__value{flex:1 1 240px;min-width:0;border:var(--hm-border-hairline) solid var(--hm-divider);border-radius:var(--hm-radius-control);padding:var(--hm-space-xs) var(--hm-space-sm);background:var(--hm-surface);color:var(--hm-text);font-family:var(--hm-font-mono);font-size:var(--hm-font-size-sm);overflow-wrap:anywhere;-webkit-user-select:all;user-select:all}:host{display:block}:host:empty{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CardComponent, selector: "hm-card", inputs: ["heading", "icon", "selected", "fill", "media", "mediaAlt", "mediaDecorative", "mediaPosition"] }, { kind: "component", type: ComboboxComponent, selector: "hm-combobox", inputs: ["label", "options", "value", "placeholder", "icon", "hint", "help", "size", "labelHidden", "clearable", "requiredManual", "loading", "allowCustomValue"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
|
|
42
|
-
}
|
|
43
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.24", ngImport: i0, type: AutoServiceClientPickerComponent, decorators: [{
|
|
44
|
-
type: Component,
|
|
45
|
-
args: [{ selector: 'spine-auto-service-client-picker', standalone: true, imports: [CommonModule, CardComponent, ComboboxComponent], changeDetection: ChangeDetectionStrategy.Eager, template: "<hm-card *ngIf=\"loading\">\n <span class=\"muted\">{{ text.loading }}</span>\n</hm-card>\n\n<hm-card *ngIf=\"!loading && clients.length === 0\">\n <span [innerHTML]=\"text.noClients\"></span>\n</hm-card>\n\n<hm-card *ngIf=\"!loading && clients.length > 1\">\n <hm-combobox\n [label]=\"text.pickClient\"\n [options]=\"clientOptions\"\n [value]=\"selectedClientId\"\n (valueChange)=\"selectClient($event)\"\n ></hm-combobox>\n</hm-card>\n", styles: ["@charset \"UTF-8\";.as-stack{display:flex;flex-direction:column;gap:var(--hm-space-md);min-inline-size:0}.as-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--hm-space-xs)}.as-field-row{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--hm-space-sm)}.as-field-row>hm-combobox{flex:1 1 16rem;min-inline-size:0}.as-summary{display:flex;flex-wrap:wrap;align-items:center;gap:var(--hm-space-sm)}.as-summary__info{display:flex;flex:1 1 16rem;flex-direction:column;gap:var(--hm-space-micro);min-inline-size:0}.as-summary__title{display:flex;flex-wrap:wrap;align-items:center;gap:var(--hm-space-xs);margin:0;color:var(--hm-text);font-size:var(--hm-font-size-md);font-weight:var(--hm-font-weight-semibold)}.as-summary__detail{margin:0;color:var(--hm-muted);font-size:var(--hm-font-size-sm)}.muted{color:var(--hm-muted)}.as-empty{margin:var(--hm-space-xs) 0 0;font-size:var(--hm-font-size-sm)}.as-secret{display:grid;gap:var(--hm-space-micro)}.as-secret__label{color:var(--hm-muted);font-size:var(--hm-font-size-xs)}.as-secret__row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--hm-space-xs)}.as-secret__value{flex:1 1 240px;min-width:0;border:var(--hm-border-hairline) solid var(--hm-divider);border-radius:var(--hm-radius-control);padding:var(--hm-space-xs) var(--hm-space-sm);background:var(--hm-surface);color:var(--hm-text);font-family:var(--hm-font-mono);font-size:var(--hm-font-size-sm);overflow-wrap:anywhere;-webkit-user-select:all;user-select:all}:host{display:block}:host:empty{display:none}\n"] }]
|
|
46
|
-
}], ctorParameters: () => [{ type: AutoServiceService }], propDecorators: { clientChange: [{
|
|
47
|
-
type: Output
|
|
48
|
-
}] } });
|
|
49
|
-
|
|
50
|
-
export { AutoServiceClientPickerComponent as A };
|
|
51
|
-
//# sourceMappingURL=trismegisto-spine-auto-service-auto-service-client-picker.component-DdtDk_xl.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trismegisto-spine-auto-service-auto-service-client-picker.component-DdtDk_xl.mjs","sources":["../../../projects/ui/auto-service/src/client-picker/auto-service-client-picker.component.ts","../../../projects/ui/auto-service/src/client-picker/auto-service-client-picker.component.html"],"sourcesContent":["import { Component, EventEmitter, OnInit, Output, ChangeDetectionStrategy, inject, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CardComponent, ComboboxComponent, ComboboxOption } from '@trismegisto/angular';\nimport { AutoServiceService } from '../auto-service.service';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\nexport interface AutoServiceClient {\n id: string;\n name: string;\n display_name: string | null;\n realm_id: string;\n}\n\n@Component({\n selector: 'spine-auto-service-client-picker',\n standalone: true,\n imports: [CommonModule, CardComponent, ComboboxComponent],\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './auto-service-client-picker.component.html',\n styleUrl: './auto-service-client-picker.component.scss',\n})\nexport class AutoServiceClientPickerComponent implements OnInit {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n loading = true;\n clients: AutoServiceClient[] = [];\n selectedClientId = '';\n @Output() clientChange = new EventEmitter<AutoServiceClient | null>();\n constructor(private service: AutoServiceService) {}\n\n get clientOptions(): ComboboxOption[] {\n return this.clients.map((c) => ({ value: c.id, label: c.display_name || c.name }));\n }\n\n async ngOnInit() {\n this.loading = true;\n try {\n const res = await this.service.getMyClients();\n this.clients = res.clients;\n if (this.clients.length === 1) this.selectClient(this.clients[0].id);\n } finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n selectClient(id: string) {\n this.selectedClientId = id;\n this.clientChange.emit(this.clients.find(c => c.id === id) ?? null);\n }\n}\n","<hm-card *ngIf=\"loading\">\n <span class=\"muted\">{{ text.loading }}</span>\n</hm-card>\n\n<hm-card *ngIf=\"!loading && clients.length === 0\">\n <span [innerHTML]=\"text.noClients\"></span>\n</hm-card>\n\n<hm-card *ngIf=\"!loading && clients.length > 1\">\n <hm-combobox\n [label]=\"text.pickClient\"\n [options]=\"clientOptions\"\n [value]=\"selectedClientId\"\n (valueChange)=\"selectClient($event)\"\n ></hm-combobox>\n</hm-card>\n"],"names":["i1.AutoServiceService"],"mappings":"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"}
|
package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-wu2tFGS7.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trismegisto-spine-auto-service-auto-service-client.component-wu2tFGS7.mjs","sources":["../../../projects/ui/auto-service/src/tabs/auto-service-routes/route-path.validator.ts","../../../projects/ui/auto-service/src/tabs/auto-service-routes/auto-service-routes.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-routes/auto-service-routes.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-routers/modals/routers-reorder/auto-service-routers-reorder.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-routers/modals/routers-reorder/auto-service-routers-reorder.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-routers/auto-service-routers.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-routers/auto-service-routers.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-access/modals/access-create/auto-service-access-create.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-access/modals/access-create/auto-service-access-create.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-access/modals/access-guards/route-tree-node.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-access/modals/access-guards/auto-service-access-guards.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-access/modals/access-guards/auto-service-access-guards.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-access/auto-service-access.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-access/auto-service-access.component.html","../../../projects/ui/auto-service/src/auto-service-client.component.ts","../../../projects/ui/auto-service/src/auto-service-client.component.html"],"sourcesContent":["import { AbstractControl, ValidationErrors } from '@angular/forms';\n\n/**\n * Caminho de UMA rota = um trecho só do endereço (`dashboard`, `ordens-servico`). O `/` entre níveis\n * é o roteador que monta, juntando o caminho de cada rota da composição (header→…→page). Um `/`\n * dentro do caminho (ex.: `laboratorio/dashboard` numa rota só) desalinha a cadeia que o `ViewGuard`\n * resolve por nível e a tela cai no fallback (volta para o início) — achado real, 2026-10-07.\n *\n * Só letras minúsculas e hífen, sem hífen no início/fim nem dois seguidos. Mesma regra do admin-server\n * do Argos (`route-path.ts`), que é quem de fato recusa — aqui é só para avisar antes de enviar.\n */\nexport const ROUTE_PATH_PATTERN = /^[a-z]+(?:-[a-z]+)*$/;\n\n/** Vazio passa (rota \"pasta\", só agrupa o menu); preenchido precisa casar com `ROUTE_PATH_PATTERN`. */\nexport function routePathValidator(control: AbstractControl<string>): ValidationErrors | null {\n const value = control.value ?? '';\n return value === '' || ROUTE_PATH_PATTERN.test(value) ? null : { routePath: true };\n}\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, computed, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport {\n ButtonComponent, CheckboxComponent, ComboboxComponent, ComboboxOption, DataGridActionTriggered, DataGridCellDirective,\n DataGridComponent, DataGridRowAction, InputComponent, GridColumn, IconComponent, ModalComponent, TagComponent,\n TextareaComponent,\n} from '@trismegisto/angular';\nimport { HERMES_ICONS } from '@trismegisto/icons/catalog';\nimport { formatMessage } from '@trismegisto/primitives';\nimport { AutoServiceDeleteFeedback } from '../../auto-service-delete';\nimport { AutoServiceService } from '../../auto-service.service';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { routePathValidator } from './route-path.validator';\nimport { optionalIdBody, optionalIdValidator } from '../../optional-id.validator';\n\ninterface RouteRow {\n id: string; name: string; display_name?: string; icon?: string; path?: string; info?: string; excludable: boolean;\n /** Cópia de uma rota de template: pertence ao template, o auto-serviço só exibe (o admin-server recusa com 403). */\n templated?: boolean;\n}\n\n@Component({\n selector: 'spine-auto-service-routes',\n standalone: true,\n imports: [\n CommonModule, ReactiveFormsModule, ButtonComponent, CheckboxComponent, ComboboxComponent, IconComponent, InputComponent,\n TextareaComponent, ModalComponent, DataGridComponent, DataGridCellDirective, TagComponent,\n ],\n templateUrl: './auto-service-routes.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-routes.component.scss'],\n})\nexport class AutoServiceRoutesComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly deletion = inject(AutoServiceDeleteFeedback);\n @Input() clientId = '';\n routes: RouteRow[] = [];\n loading = false;\n showRouteModal = false;\n editingRouteId = '';\n\n /** Id opcional só na criação (mesma rota com o mesmo id em homologação e produção). */\n readonly newId = new FormControl('', { nonNullable: true, validators: [optionalIdValidator] });\n protected readonly idMessages = computed(() => ({ optionalId: this.text.optionalIdInvalid }));\n readonly name = new FormControl('', { nonNullable: true });\n readonly displayName = new FormControl('', { nonNullable: true });\n readonly icon = new FormControl('', { nonNullable: true });\n /** Catálogo inteiro do @trismegisto/icons, em ordem alfabética, cada opção com o próprio ícone — mesmo seletor\n * da tela de rotas do Argos central. */\n readonly iconOptions: readonly ComboboxOption[] = [...HERMES_ICONS]\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((icon) => ({ value: icon.name, label: icon.name, icon: icon.name }));\n readonly path = new FormControl('', { nonNullable: true, validators: [routePathValidator] });\n readonly info = new FormControl('', { nonNullable: true });\n /** Rota protegida (`excludable: false`) é travada aqui: o auto-serviço não libera a exclusão — o\n * admin-server também recusa (403), isto só evita oferecer o que vai ser negado. */\n readonly excludable = new FormControl(true, { nonNullable: true });\n /** Mensagem do erro `routePath` no `hm-input` (chave do validador → texto). */\n protected readonly pathMessages = computed(() => ({ routePath: this.text.pathInvalid }));\n\n constructor(private service: AutoServiceService) {}\n\n readonly rowId = (r: RouteRow) => r.id;\n readonly columns = computed<GridColumn<RouteRow>[]>(() => [\n { key: 'name', title: this.text.colName, value: (r) => r.name, sortable: true },\n { key: 'display_name', title: this.text.colDisplay, value: (r) => r.display_name || '—', sortable: true },\n { key: 'icon', title: this.text.colIcon, value: (r) => r.icon || '—' },\n { key: 'path', title: this.text.colPath, value: (r) => r.path || '—', sortable: true },\n {\n key: 'excludable', title: this.text.colExcludable, sortable: true,\n value: (r) => (r.excludable ? this.text.excludableYes : this.text.excludableNo),\n },\n ]);\n // Rota de template não se edita nem se exclui aqui (403 no admin-server); excluir, além disso, só em rota\n // excluível (409). Linha sem ação nenhuma fica sem o kebab.\n readonly rowActions = computed<DataGridRowAction<RouteRow>[]>(() => [\n { id: 'edit', icon: 'pencil', label: this.text.edit, available: (r) => !r.templated },\n {\n id: 'delete', icon: 'trash', label: this.text.delete, danger: true, separatorAbove: true,\n available: (r) => !r.templated && r.excludable,\n confirm: (r) => ({ heading: this.text.confirmDeleteRouteHeading, message: formatMessage(this.text.confirmDeleteRoute, { name: r.display_name || r.name }) }),\n },\n ]);\n\n ngOnChanges(changes: SimpleChanges) { if (changes['clientId']) this.load(); }\n\n async load() {\n if (!this.clientId) { this.routes = []; return; }\n this.loading = true;\n try { const res = await this.service.getWebRoutes(this.clientId); this.routes = res.routes; }\n finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n private resetForm(r?: RouteRow) {\n this.name.setValue(r?.name ?? '');\n this.displayName.setValue(r?.display_name ?? '');\n this.icon.setValue(r?.icon ?? '');\n this.path.setValue(r?.path ?? '');\n this.info.setValue(r?.info ?? '');\n this.excludable.setValue(r?.excludable ?? true);\n // Protegida só destrava no Argos central. Nova rota (sem `r`) sempre pode escolher.\n if (r && !r.excludable) this.excludable.disable();\n else this.excludable.enable();\n // Sem isso, abrir o modal de novo mostraria o erro do caminho da vez anterior antes de digitar.\n this.path.markAsPristine();\n this.path.markAsUntouched();\n }\n\n /** Editando rota protegida — mostra por que o \"Excluível\" está travado. */\n get excludableLocked(): boolean {\n return this.excludable.disabled;\n }\n\n openCreateRoute() {\n this.editingRouteId = '';\n this.resetForm();\n this.newId.reset('');\n this.showRouteModal = true;\n }\n\n openEditRoute(r: RouteRow) {\n if (r.templated) return;\n this.editingRouteId = r.id;\n this.resetForm(r);\n this.showRouteModal = true;\n }\n\n async saveRoute() {\n // O botão já fica desabilitado; a guarda cobre chamadas diretas (ex.: Enter no form).\n if (!this.name.value || this.path.invalid || (!this.editingRouteId && this.newId.invalid)) return;\n const body = {\n name: this.name.value, display_name: this.displayName.value, icon: this.icon.value,\n path: this.path.value, info: this.info.value, excludable: this.excludable.value,\n };\n if (this.editingRouteId) { await this.service.updateWebRoute(this.clientId, this.editingRouteId, body); }\n else { await this.service.createWebRoute(this.clientId, { ...optionalIdBody('route_id', this.newId.value), ...body }); }\n this.showRouteModal = false;\n await this.load();\n }\n\n async deleteRoute(r: RouteRow) {\n if (r.templated || !r.excludable) return;\n // Já confirmado pelo `confirm` da ação na grade.\n if (await this.deletion.run(() => this.service.deleteWebRoute(this.clientId, r.id))) await this.load();\n }\n\n onAction(e: DataGridActionTriggered<RouteRow>): void {\n if (e.action === 'edit') this.openEditRoute(e.row);\n if (e.action === 'delete') void this.deleteRoute(e.row);\n }\n}\n","<hm-data-grid\n [columns]=\"columns()\"\n [rows]=\"routes\"\n [rowId]=\"rowId\"\n [caption]=\"text.routesCaption\"\n [loading]=\"loading\"\n [rowActions]=\"rowActions()\"\n (actionTriggered)=\"onAction($event)\"\n [emptyMessage]=\"text.noRoutes\"\n>\n <hm-button dataGridActions icon=\"plus\" (clicked)=\"openCreateRoute()\">{{ text.newRoute }}</hm-button>\n <ng-template hmCell=\"name\" let-r>\n <span class=\"name-cell\">\n {{ r.name }}\n <hm-tag *ngIf=\"r.templated\" [name]=\"text.templateTag\" color=\"info\" [title]=\"text.templateLocked\" />\n </span>\n </ng-template>\n <ng-template hmCell=\"icon\" let-r>\n <span class=\"icon-cell\">\n <hm-icon *ngIf=\"r.icon\" [shape]=\"r.icon\"></hm-icon>\n {{ r.icon || '—' }}\n </span>\n </ng-template>\n <ng-template hmCell=\"path\" let-r>\n <code *ngIf=\"r.path\">{{ r.path }}</code>\n <ng-container *ngIf=\"!r.path\">—</ng-container>\n </ng-template>\n</hm-data-grid>\n\n<!-- Modal: criar/editar rota -->\n<hm-modal [open]=\"showRouteModal\" (openChange)=\"showRouteModal = $event\" [heading]=\"editingRouteId ? text.editRoute : text.newRoute\" (closed)=\"showRouteModal = false\">\n <div class=\"form-stack\">\n @if (!editingRouteId) {\n <hm-input [formControl]=\"newId\" [label]=\"text.optionalId\" [placeholder]=\"text.optionalIdPlaceholder\" [hint]=\"text.optionalIdHint\" [messages]=\"idMessages()\" />\n }\n <hm-input [formControl]=\"name\" [label]=\"text.internalName\" />\n <hm-input [formControl]=\"displayName\" [label]=\"text.displayName\" />\n <hm-combobox [options]=\"iconOptions\" [formControl]=\"icon\" [label]=\"text.icon\" [placeholder]=\"text.iconPlaceholder\" />\n <hm-input [formControl]=\"path\" [label]=\"text.path\" [placeholder]=\"text.pathPlaceholder\" [hint]=\"text.pathHint\" [messages]=\"pathMessages()\" />\n <hm-textarea [formControl]=\"info\" [label]=\"text.info\" />\n <hm-checkbox [formControl]=\"excludable\" [label]=\"text.excludable\" />\n <p *ngIf=\"excludableLocked\" class=\"field-note\">{{ text.excludableLocked }}</p>\n </div>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"showRouteModal = false\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!name.value || path.invalid || (!editingRouteId && newId.invalid)\" (clicked)=\"saveRoute()\">\n {{ editingRouteId ? text.save : text.create }}\n </hm-button>\n </ng-container>\n</hm-modal>\n","import {\n ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Injector, Input, OnChanges, Output,\n SimpleChanges, afterNextRender, inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n AlertComponent, ButtonComponent, IconButtonComponent, IconComponent, ModalComponent, ReorderListComponent, ReorderListItem,\n TagComponent,\n} from '@trismegisto/angular';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { formatMessage, moveItem, pluralMessage } from '@trismegisto/primitives';\nimport { AutoServiceService, RouterOrderNode, RouterOrderType } from '../../../../auto-service.service';\n\n/** Linha da lista ordenável: o item do `hm-reorder-list` mais o nó da árvore que ele representa. */\ninterface OrderItem extends ReorderListItem { readonly node: RouterOrderNode }\n\n/**\n * Modal \"Reordenar menu\" da aba Roteadores: a mesma ferramenta do Argos central (árvore do menu, ordem\n * por nível de irmãos, `PATCH /routers/reorder` com um grupo `{type, router_ids}` por item), mas navegando\n * pelos níveis em vez de escolher cada nível num combobox. Cada nível alterado guarda a ordem nova até o\n * \"Salvar ordem\", que grava um nível por chamada. Reordena por arrasto (alça do `hm-reorder-list`, que\n * também funciona no teclado) e pelos botões subir/descer de cada linha.\n */\n@Component({\n selector: 'spine-auto-service-routers-reorder',\n standalone: true,\n imports: [CommonModule, AlertComponent, ButtonComponent, IconButtonComponent, IconComponent, ModalComponent, ReorderListComponent, TagComponent],\n templateUrl: './auto-service-routers-reorder.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-routers-reorder.component.scss'],\n})\nexport class AutoServiceRoutersReorderComponent implements OnChanges {\n protected readonly messages = inject(SPINE_MESSAGES);\n protected readonly text = this.messages.autoService;\n /** Estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly service = inject(AutoServiceService);\n\n @Input() clientId = '';\n @Input() open = false;\n @Output() openChange = new EventEmitter<boolean>();\n /** Gravou ao menos um nível: quem abriu recarrega o que mostra. */\n @Output() saved = new EventEmitter<void>();\n\n tree: RouterOrderNode[] = [];\n /** Nós abertos, do topo até o nível mostrado (vazio = topo do menu). */\n path: RouterOrderNode[] = [];\n items: OrderItem[] = [];\n loading = false;\n saving = false;\n error = '';\n /** Anúncio da região viva (mover por botão). */\n announcement = '';\n /** Níveis com ordem nova ainda não gravada: o nó pai (`null` = topo) → os irmãos na ordem nova. */\n private readonly pending = new Map<RouterOrderNode | null, RouterOrderNode[]>();\n\n ngOnChanges(changes: SimpleChanges) { if (changes['open'] && this.open) void this.load(); }\n\n get hasChanges(): boolean { return this.pending.size > 0; }\n get parent(): RouterOrderNode | null { return this.path[this.path.length - 1] ?? null; }\n get levelName(): string { return this.parent ? this.nodeName(this.parent) : this.text.reorderRoot; }\n get listLabel(): string { return formatMessage(this.text.reorderListLabel, { name: this.levelName }); }\n\n async load() {\n this.loading = true;\n this.error = '';\n this.pending.clear();\n this.path = [];\n this.tree = [];\n this.items = [];\n try {\n this.tree = (await this.service.getRouterTree(this.clientId)).tree ?? [];\n this.showLevel();\n } catch {\n this.error = this.text.reorderLoadError;\n } finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n nodeName(n: RouterOrderNode): string { return n.route_display_name || n.route_name; }\n\n typeLabel(type: RouterOrderType): string {\n const t = this.text;\n return { header: t.levelHeader, navigation: t.levelNavigation, menu: t.levelMenu, item: t.levelItem, submenu: t.levelSubmenu, page: t.colPage }[type] ?? type;\n }\n\n childCount(n: RouterOrderNode): string { return pluralMessage(this.text.childCount, n.children.length, this.messages.meta.locale); }\n\n label(key: 'moveUp' | 'moveDown' | 'openLevel', item: OrderItem): string { return formatMessage(this.text[key], { name: item.label }); }\n\n /** Entra no item: passa a ordenar os filhos dele. */\n enter(item: OrderItem) {\n if (!item.node.children.length) return;\n this.path = [...this.path, item.node];\n this.showLevel();\n this.focusFirstHandle();\n }\n\n /** Volta a um nível da trilha (`-1` = topo do menu). */\n goTo(index: number) {\n this.path = this.path.slice(0, index + 1);\n this.showLevel();\n this.focusFirstHandle();\n }\n\n /** Ordem nova vinda do arrasto (ou do teclado na alça) do `hm-reorder-list`. */\n onItemsChange(items: readonly ReorderListItem[]) { this.apply((items as readonly OrderItem[]).map((i) => i.node)); }\n\n /** Botões subir/descer: move uma posição, anuncia e mantém o foco num botão da mesma linha. */\n move(index: number, delta: -1 | 1) {\n const to = index + delta;\n if (to < 0 || to >= this.items.length) return;\n const item = this.items[index];\n this.apply(moveItem(this.items, index, to).map((i) => i.node));\n this.announcement = formatMessage(this.text.movedTo, { name: item.label, position: to + 1, total: this.items.length });\n // A linha muda de lugar no DOM: devolve o foco ao botão clicado (ou ao outro, se este ficou desabilitado).\n const wanted = delta < 0 && to === 0 ? 'down' : delta > 0 && to === this.items.length - 1 ? 'up' : delta < 0 ? 'up' : 'down';\n afterNextRender(() => {\n this.host.nativeElement\n .querySelector<HTMLElement>(`[data-move=\"${wanted}\"][data-item=\"${CSS.escape(item.id)}\"] button`)\n ?.focus();\n }, { injector: this.injector });\n }\n\n async save() {\n if (!this.hasChanges || this.saving) return;\n this.saving = true;\n this.error = '';\n let wrote = false;\n try {\n for (const [parent, siblings] of [...this.pending]) {\n await this.service.reorderRouters(this.clientId, siblings.map((n) => ({ type: n.route_type, router_ids: n.router_ids })));\n this.pending.delete(parent);\n wrote = true;\n }\n this.saved.emit();\n this.close();\n } catch {\n // O que já foi gravado sai da fila; o resto continua pendente para tentar de novo.\n this.error = this.text.reorderSaveError;\n if (wrote) this.saved.emit();\n } finally { this.saving = false; this.cdr.markForCheck(); }\n }\n\n close() { this.open = false; this.openChange.emit(false); }\n\n private siblingsOf(parent: RouterOrderNode | null): RouterOrderNode[] { return parent ? parent.children : this.tree; }\n\n /** Troca os irmãos do nível mostrado pela ordem nova e marca o nível como pendente. */\n private apply(next: RouterOrderNode[]) {\n const parent = this.parent;\n if (parent) parent.children = next; else this.tree = next;\n this.pending.set(parent, next);\n this.showLevel();\n }\n\n private showLevel() {\n this.items = this.siblingsOf(this.parent).map((node) => ({\n id: `${node.route_type}:${node.routed_id}`, label: this.nodeName(node), node,\n }));\n }\n\n private focusFirstHandle() {\n afterNextRender(() => this.host.nativeElement.querySelector<HTMLElement>('.hm-reorder-list__handle')?.focus(), { injector: this.injector });\n }\n}\n","<hm-modal [open]=\"open\" (openChange)=\"open = $event\" [heading]=\"text.reorderTitle\" size=\"large\" (closed)=\"close()\">\n <div class=\"reorder\">\n <p class=\"muted reorder__hint\">{{ text.reorderHint }}</p>\n\n <hm-alert *ngIf=\"error\" variant=\"error\">{{ error }}</hm-alert>\n\n <div *ngIf=\"loading\" class=\"reorder__loading\">{{ text.loading }}</div>\n\n <ng-container *ngIf=\"!loading && tree.length\">\n <!-- Trilha dos níveis abertos: cada degrau anterior volta para aquele nível. -->\n <nav class=\"reorder__path\" [attr.aria-label]=\"text.reorderPath\">\n <ol>\n <li>\n <hm-button *ngIf=\"path.length; else rootCurrent\" emphasis=\"minimal\" size=\"small\" (clicked)=\"goTo(-1)\">{{ text.reorderRoot }}</hm-button>\n <ng-template #rootCurrent><span aria-current=\"location\">{{ text.reorderRoot }}</span></ng-template>\n </li>\n <li *ngFor=\"let node of path; let i = index; let last = last\">\n <hm-icon shape=\"angle\" direction=\"right\" class=\"reorder__sep\" />\n <hm-button *ngIf=\"!last\" emphasis=\"minimal\" size=\"small\" (clicked)=\"goTo(i)\">{{ nodeName(node) }}</hm-button>\n <span *ngIf=\"last\" aria-current=\"location\">{{ nodeName(node) }}</span>\n </li>\n </ol>\n </nav>\n\n <hm-reorder-list [label]=\"listLabel\" [labelHidden]=\"true\" [items]=\"items\" (itemsChange)=\"onItemsChange($event)\" [disabled]=\"saving\">\n <ng-template let-item let-index=\"index\">\n <div class=\"reorder__row\">\n <hm-icon *ngIf=\"item.node.route_icon\" [shape]=\"item.node.route_icon\" class=\"reorder__icon\" />\n <span class=\"reorder__name\">\n <span class=\"reorder__label\">{{ item.label }}</span>\n <span *ngIf=\"item.node.children.length\" class=\"reorder__count\">{{ childCount(item.node) }}</span>\n </span>\n <hm-tag [name]=\"typeLabel(item.node.route_type)\" color=\"neutral\" />\n <span class=\"reorder__actions\">\n <hm-icon-button\n emphasis=\"subtle\" size=\"small\" icon=\"arrow\" iconDirection=\"up\" [label]=\"label('moveUp', item)\"\n [attr.data-move]=\"'up'\" [attr.data-item]=\"item.id\"\n [disabled]=\"saving || index === 0\" (clicked)=\"move(index, -1)\" />\n <hm-icon-button\n emphasis=\"subtle\" size=\"small\" icon=\"arrow\" iconDirection=\"down\" [label]=\"label('moveDown', item)\"\n [attr.data-move]=\"'down'\" [attr.data-item]=\"item.id\"\n [disabled]=\"saving || index === items.length - 1\" (clicked)=\"move(index, 1)\" />\n <hm-icon-button\n *ngIf=\"item.node.children.length\"\n emphasis=\"subtle\" size=\"small\" icon=\"angle\" iconDirection=\"right\" [label]=\"label('openLevel', item)\"\n (clicked)=\"enter(item)\" />\n </span>\n </div>\n </ng-template>\n </hm-reorder-list>\n </ng-container>\n\n <div *ngIf=\"!loading && !error && !tree.length\" class=\"reorder__empty\">\n <hm-icon shape=\"sort-vertical\" size=\"xl\" />\n <p>{{ text.reorderEmpty }}</p>\n </div>\n\n <div class=\"hm-visually-hidden\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">{{ announcement }}</div>\n </div>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"close()\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!hasChanges\" [loading]=\"saving\" (clicked)=\"save()\">{{ text.reorderSave }}</hm-button>\n </ng-container>\n</hm-modal>\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, computed, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport {\n AlertComponent, ButtonComponent, CheckboxComponent, ComboboxComponent, ComboboxMultiComponent, ComboboxOption, DataGridActionTriggered, DataGridCellDirective,\n DataGridComponent, DataGridRowAction, DividerComponent, GridColumn, InputComponent, ModalComponent, TagComponent, TextareaComponent,\n} from '@trismegisto/angular';\nimport { formatMessage } from '@trismegisto/primitives';\nimport { AutoServiceDeleteFeedback } from '../../auto-service-delete';\nimport { autoServiceErrorText } from '../../auto-service-errors';\nimport { optionalIdBody, optionalIdValidator } from '../../optional-id.validator';\nimport { AutoServiceGroupType, AutoServiceService } from '../../auto-service.service';\nimport { AutoServiceRoutersReorderComponent } from './modals/routers-reorder/auto-service-routers-reorder.component';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\n/** Níveis do roteador acima da página, de cima para baixo. */\nexport const HIERARCHY_LEVELS = ['header_id', 'navigation_id', 'menu_id', 'item_id', 'submenu_id'] as const;\nexport type HierarchyLevel = (typeof HIERARCHY_LEVELS)[number];\n\n/**\n * A hierarquia é de cima para baixo: um nível preenchido com algum vazio acima dele é um \"buraco\" (o argos-admin recusa\n * com 400 `router_hierarchy_gap`). A página é a folha e não entra na conta.\n */\nexport function hasHierarchyGap(levels: Partial<Record<HierarchyLevel, string | null | undefined>>): boolean {\n let emptyAbove = false;\n for (const level of HIERARCHY_LEVELS) {\n if (!levels[level]) emptyAbove = true;\n else if (emptyAbove) return true;\n }\n return false;\n}\n\ninterface RouterRow {\n id: string; page_id: string; header_id?: string; navigation_id?: string; menu_id?: string; item_id?: string; submenu_id?: string;\n is_private: boolean; built_path: string; description?: string | null;\n /** Cópia de um router de template: pertence ao template, o auto-serviço só exibe (o admin-server recusa com 403). */\n templated?: boolean;\n /** Tipos de grupo (crachás) que podem receber guard para a tela; vazio = qualquer crachá. */\n allowed_type_ids?: string[];\n}\n\nconst emptyRouterForm = () => ({\n page_id: '', header_id: '', navigation_id: '', menu_id: '', item_id: '', submenu_id: '', is_private: true, description: '',\n allowed_type_ids: [] as string[],\n});\n\n@Component({\n selector: 'spine-auto-service-routers',\n standalone: true,\n imports: [\n CommonModule, FormsModule, ReactiveFormsModule, AlertComponent, ButtonComponent, CheckboxComponent, ComboboxComponent, ComboboxMultiComponent, DividerComponent,\n InputComponent, ModalComponent, DataGridComponent, DataGridCellDirective, TagComponent, TextareaComponent, AutoServiceRoutersReorderComponent,\n ],\n templateUrl: './auto-service-routers.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-routers.component.scss'],\n})\nexport class AutoServiceRoutersComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Id opcional só na criação (mesmo roteador com o mesmo id em homologação e produção). */\n readonly newId = new FormControl('', { nonNullable: true, validators: [optionalIdValidator] });\n protected readonly idMessages = computed(() => ({ optionalId: this.text.optionalIdInvalid }));\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly deletion = inject(AutoServiceDeleteFeedback);\n @Input() clientId = '';\n routes: any[] = [];\n routers: RouterRow[] = [];\n loading = false;\n showRouterModal = false;\n /** Modal \"Reordenar menu\" (ordem dos itens no menu do app, por nível). */\n showReorder = false;\n editingRouterId = '';\n routerForm = emptyRouterForm();\n /**\n * Tipos de grupo do realm (`GET /group-types`). Todos entram, inclusive o Administrador (`assignable: false` só\n * impede criar grupo com o tipo; aqui é quem pode ver a tela), como no modal de roteador do argos-admin.\n */\n groupTypes: AutoServiceGroupType[] = [];\n groupTypeOptions: ComboboxOption[] = [];\n savingRouter = false;\n /** Falha ao gravar o roteador, mostrada no modal. */\n routerError: string | null = null;\n constructor(private service: AutoServiceService) {}\n\n readonly rowId = (r: RouterRow) => r.id;\n readonly columns = computed<GridColumn<RouterRow>[]>(() => [\n { key: 'page', title: this.text.colPage, value: (r) => this.routeName(r.page_id), sortable: true },\n { key: 'built_path', title: this.text.colBuiltPath, value: (r) => r.built_path },\n { key: 'description', title: this.text.colDescription, value: (r) => r.description ?? '' },\n { key: 'is_private', title: this.text.colVisibility, value: (r) => (r.is_private ? this.text.private : this.text.public), sortable: true },\n { key: 'allowed_type_ids', title: this.text.colAllowedBadges, value: (r) => this.allowedTypeNames(r.allowed_type_ids).join(', ') || this.text.anyBadge },\n ]);\n // Router de template não se edita nem se exclui aqui (403 no admin-server): a linha fica sem o kebab.\n readonly rowActions = computed<DataGridRowAction<RouterRow>[]>(() => [\n { id: 'edit', icon: 'pencil', label: this.text.edit, available: (r) => !r.templated },\n {\n id: 'delete', icon: 'trash', label: this.text.delete, danger: true, separatorAbove: true, available: (r) => !r.templated,\n confirm: (r) => ({ heading: this.text.confirmDeleteRouterHeading, message: formatMessage(this.text.confirmDeleteRouter, { path: r.built_path }) }),\n },\n ]);\n\n get routeOptions(): ComboboxOption[] {\n return this.routes.map((r) => ({ value: r.id, label: r.display_name || r.name }));\n }\n\n ngOnChanges(changes: SimpleChanges) { if (changes['clientId']) this.load(); }\n\n async load() {\n if (!this.clientId) { this.routes = []; this.routers = []; this.setGroupTypes([]); return; }\n this.loading = true;\n try {\n const [routesRes, routersRes, typesRes] = await Promise.all([\n this.service.getWebRoutes(this.clientId),\n this.service.getRouters(this.clientId),\n // Sem os tipos a tabela abre igual; os crachás aparecem pelo id e o campo fica sem opção.\n this.service.getGroupTypes(this.clientId).catch(() => ({ group_types: [] as AutoServiceGroupType[] })),\n ]);\n this.routes = routesRes.routes;\n this.setGroupTypes(typesRes.group_types ?? []);\n this.routers = routersRes.routers.map((r: any) => ({ ...r, built_path: this.builtPath(r) }));\n } finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n private setGroupTypes(types: AutoServiceGroupType[]) {\n this.groupTypes = types;\n this.groupTypeOptions = types.map((t) => ({ value: t.id, label: t.name }));\n }\n\n /** Nomes dos crachás permitidos (id sem tipo conhecido aparece como o próprio id). */\n allowedTypeNames(typeIds: readonly string[] | undefined): string[] {\n return (typeIds ?? []).map((id) => this.groupTypes.find((t) => t.id === id)?.name ?? id);\n }\n\n routeName(id: string | null): string { if (!id) return '—'; return this.routes.find(r => r.id === id)?.name ?? id; }\n\n private readonly pathLevels: Array<'header_id' | 'navigation_id' | 'menu_id' | 'item_id' | 'submenu_id' | 'page_id'> =\n ['header_id', 'navigation_id', 'menu_id', 'item_id', 'submenu_id', 'page_id'];\n\n builtPath(r: any): string {\n const segments = this.pathLevels\n .map(level => this.routes.find(x => x.id === r[level])?.path)\n .filter((p): p is string => !!p)\n .map(p => p.replace(/^\\/+|\\/+$/g, ''));\n return segments.length ? '/' + segments.join('/') : '—';\n }\n\n openCreateRouter() {\n this.editingRouterId = '';\n this.routerError = null;\n this.routerForm = emptyRouterForm();\n this.newId.reset('');\n this.showRouterModal = true;\n }\n\n openEditRouter(r: RouterRow) {\n this.editingRouterId = r.id;\n this.routerError = null;\n this.routerForm = {\n page_id: r.page_id, header_id: r.header_id ?? '', navigation_id: r.navigation_id ?? '',\n menu_id: r.menu_id ?? '', item_id: r.item_id ?? '', submenu_id: r.submenu_id ?? '', is_private: r.is_private ?? true,\n description: r.description ?? '', allowed_type_ids: [...(r.allowed_type_ids ?? [])],\n };\n this.showRouterModal = true;\n }\n\n /** Níveis da hierarquia, de cima para baixo (a página é a folha e fica fora: sempre obrigatória). */\n readonly hierarchyLevels: readonly HierarchyLevel[] = HIERARCHY_LEVELS;\n\n /**\n * Nível bloqueado: o de cima está vazio (navegação só com header, menu só com navegação, item só com menu, submenu só\n * com item). Um valor já gravado fora da regra (roteador antigo) continua editável, para dar para limpar.\n */\n levelLocked(level: HierarchyLevel): boolean {\n const index = HIERARCHY_LEVELS.indexOf(level);\n if (index <= 0 || this.routerForm[level]) return false;\n return !this.routerForm[HIERARCHY_LEVELS[index - 1]];\n }\n\n /** Grava o nível; limpar um nível limpa todos os de baixo. */\n setLevel(level: HierarchyLevel, value: string | null | undefined) {\n this.routerForm[level] = value ?? '';\n this.routerError = null;\n if (!value) {\n for (const below of HIERARCHY_LEVELS.slice(HIERARCHY_LEVELS.indexOf(level) + 1)) this.routerForm[below] = '';\n }\n }\n\n /** Algum nível preenchido com um vazio acima dele (o argos-admin recusa com 400 `router_hierarchy_gap`). */\n get hierarchyGap(): boolean { return hasHierarchyGap(this.routerForm); }\n\n levelLabel(level: HierarchyLevel): string {\n switch (level) {\n case 'header_id': return this.text.levelHeader;\n case 'navigation_id': return this.text.levelNavigation;\n case 'menu_id': return this.text.levelMenu;\n case 'item_id': return this.text.levelItem;\n default: return this.text.levelSubmenu;\n }\n }\n\n async saveRouter() {\n if (!this.routerForm.page_id || this.hierarchyGap || this.savingRouter || (!this.editingRouterId && this.newId.invalid)) return;\n const body = {\n page_id: this.routerForm.page_id,\n header_id: this.routerForm.header_id || null,\n navigation_id: this.routerForm.navigation_id || null,\n menu_id: this.routerForm.menu_id || null,\n item_id: this.routerForm.item_id || null,\n submenu_id: this.routerForm.submenu_id || null,\n is_private: this.routerForm.is_private,\n description: this.routerForm.description.trim() || null,\n allowed_type_ids: [...this.routerForm.allowed_type_ids],\n };\n this.savingRouter = true;\n this.routerError = null;\n this.cdr.markForCheck();\n try {\n if (this.editingRouterId) { await this.service.updateRouter(this.clientId, this.editingRouterId, body); }\n else { await this.service.createRouter(this.clientId, { ...optionalIdBody('router_id', this.newId.value), ...body }); }\n } catch (err) {\n // O modal fica aberto com o motivo no idioma ativo (ex.: router_hierarchy_gap).\n this.routerError = autoServiceErrorText(err, this.text, this.text.routerSaveError);\n return;\n } finally {\n this.savingRouter = false;\n this.cdr.markForCheck();\n }\n this.showRouterModal = false;\n await this.load();\n }\n\n /** Já confirmado pelo `confirm` da ação na grade. */\n async deleteRouter(routerId: string) {\n if (await this.deletion.run(() => this.service.deleteRouter(this.clientId, routerId))) await this.load();\n }\n\n onAction(e: DataGridActionTriggered<RouterRow>): void {\n if (e.row.templated) return;\n if (e.action === 'edit') this.openEditRouter(e.row);\n if (e.action === 'delete') void this.deleteRouter(e.row.id);\n }\n}\n","<hm-data-grid\n [columns]=\"columns()\"\n [rows]=\"routers\"\n [rowId]=\"rowId\"\n [caption]=\"text.routersCaption\"\n [loading]=\"loading\"\n [rowActions]=\"rowActions()\"\n (actionTriggered)=\"onAction($event)\"\n [emptyMessage]=\"text.noRouters\"\n>\n <hm-button dataGridActions emphasis=\"medium\" icon=\"sort-vertical\" [disabled]=\"!routers.length\" (clicked)=\"showReorder = true\">{{ text.reorder }}</hm-button>\n <hm-button dataGridActions icon=\"plus\" [disabled]=\"!routes.length\" (clicked)=\"openCreateRouter()\">{{ text.newRouter }}</hm-button>\n <ng-template hmCell=\"page\" let-r>\n <span class=\"name-cell\">\n {{ routeName(r.page_id) }}\n <hm-tag *ngIf=\"r.templated\" [name]=\"text.templateTag\" color=\"info\" [title]=\"text.templateLocked\" />\n </span>\n </ng-template>\n <ng-template hmCell=\"is_private\" let-r>\n <hm-tag [name]=\"r.is_private ? text.private : text.public\" [color]=\"r.is_private ? 'warning' : 'success'\" />\n </ng-template>\n <ng-template hmCell=\"allowed_type_ids\" let-r>\n <span *ngIf=\"!r.allowed_type_ids?.length; else badges\" class=\"muted\">{{ text.anyBadge }}</span>\n <ng-template #badges>\n <span class=\"name-cell\">\n <hm-tag *ngFor=\"let name of allowedTypeNames(r.allowed_type_ids)\" [name]=\"name\" color=\"info\" />\n </span>\n </ng-template>\n </ng-template>\n <ng-template hmCell=\"built_path\" let-r>\n <code>{{ r.built_path }}</code>\n </ng-template>\n</hm-data-grid>\n\n<!-- Modal: ordem dos itens no menu do app (vale também para roteadores de template) -->\n<spine-auto-service-routers-reorder [clientId]=\"clientId\" [open]=\"showReorder\" (openChange)=\"showReorder = $event\" (saved)=\"load()\" />\n\n<!-- Modal: criar/editar roteador -->\n<hm-modal [open]=\"showRouterModal\" (openChange)=\"showRouterModal = $event\" [heading]=\"editingRouterId ? text.editRouter : text.newRouter\" size=\"large\" (closed)=\"showRouterModal = false\">\n <div class=\"form-stack\">\n <hm-alert *ngIf=\"routerError\" variant=\"error\">{{ routerError }}</hm-alert>\n @if (!editingRouterId) {\n <hm-input [formControl]=\"newId\" [label]=\"text.optionalId\" [placeholder]=\"text.optionalIdPlaceholder\" [hint]=\"text.optionalIdHint\" [messages]=\"idMessages()\" />\n }\n <hm-combobox [label]=\"text.page\" [options]=\"routeOptions\" [value]=\"routerForm.page_id\" (valueChange)=\"routerForm.page_id = $event\"></hm-combobox>\n <hm-textarea [label]=\"text.routerDescription\" [rows]=\"2\" [hint]=\"text.routerDescriptionHint\" [(ngModel)]=\"routerForm.description\" />\n\n <hm-divider [label]=\"text.hierarchy\" />\n <p class=\"hierarchy-hint muted\">{{ text.hierarchyHint }}</p>\n\n <!-- De cima para baixo: cada nível só abre com o de cima escolhido; limpar um nível limpa os de baixo. -->\n <hm-combobox *ngFor=\"let level of hierarchyLevels\" [label]=\"levelLabel(level)\" [options]=\"routeOptions\" [clearable]=\"true\"\n [disabled]=\"levelLocked(level)\" [value]=\"routerForm[level]\" (valueChange)=\"setLevel(level, $event)\"></hm-combobox>\n <hm-alert *ngIf=\"hierarchyGap\" variant=\"warning\">{{ text.routerErrors.hierarchyGap }}</hm-alert>\n\n <hm-divider />\n <hm-checkbox [(ngModel)]=\"routerForm.is_private\" [label]=\"text.privateHint\" />\n <!-- Vazio = qualquer crachá (mesma regra do modal de roteador do argos-admin). -->\n <hm-combobox-multi [label]=\"text.colAllowedBadges\" [options]=\"groupTypeOptions\" [placeholder]=\"text.anyBadge\"\n [hint]=\"text.allowedBadgesHint\" [visibleChipsLimit]=\"null\" [selected]=\"routerForm.allowed_type_ids\"\n (selectedChange)=\"routerForm.allowed_type_ids = [...$event]; routerError = null\" />\n </div>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"showRouterModal = false\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!routerForm.page_id || hierarchyGap || (!editingRouterId && newId.invalid)\" [loading]=\"savingRouter\" (clicked)=\"saveRouter()\">\n {{ editingRouterId ? text.save : text.create }}\n </hm-button>\n </ng-container>\n</hm-modal>\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponent, ComboboxComponent, ComboboxOption, ModalComponent } from '@trismegisto/angular';\nimport { AutoServiceService } from '../../../../auto-service.service';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\n@Component({\n selector: 'spine-auto-service-access-create',\n standalone: true,\n imports: [CommonModule, ButtonComponent, ComboboxComponent, ModalComponent],\n templateUrl: './auto-service-access-create.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-access-create.component.scss'],\n})\nexport class AutoServiceAccessCreateComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n @Input() clientId = '';\n @Input() availableGroups: any[] = [];\n @Input() open = false;\n @Output() openChange = new EventEmitter<boolean>();\n @Output() created = new EventEmitter<void>();\n groupId = '';\n saving = false;\n constructor(private service: AutoServiceService) {}\n\n get groupOptions(): ComboboxOption[] {\n return this.availableGroups.map((g) => ({ value: g.id, label: g.type ? `${g.name} (${g.type.name})` : g.name }));\n }\n\n ngOnChanges(changes: SimpleChanges) { if (changes['open'] && this.open) { this.groupId = ''; } }\n onModalOpenChange(value: boolean) { this.open = value; this.openChange.emit(value); }\n close() { this.onModalOpenChange(false); }\n\n async save() {\n if (!this.groupId) return;\n this.saving = true;\n try { await this.service.createAccess(this.clientId, this.groupId); this.created.emit(); this.close(); }\n finally { this.saving = false; this.cdr.markForCheck(); }\n }\n}\n","<hm-modal [open]=\"open\" (openChange)=\"onModalOpenChange($event)\" [heading]=\"text.newAccessHeading\" (closed)=\"close()\">\n <hm-combobox [label]=\"text.group\" [options]=\"groupOptions\" [value]=\"groupId\" (valueChange)=\"groupId = $event\"></hm-combobox>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"close()\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!groupId\" [loading]=\"saving\" (clicked)=\"save()\">{{ text.create }}</hm-button>\n </ng-container>\n</hm-modal>\n","import { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { IconComponent } from '@trismegisto/angular';\n\nexport interface RouteTreeNode {\n key: string; name: string; isFolder: boolean; routerId?: string; guardId?: string; selected?: boolean; children: RouteTreeNode[];\n}\n\n/**\n * Um nível da árvore de rotas — se referencia (`imports: [RouteTreeNodeComponent]`) pra\n * desenhar os filhos, já que não existe nenhum componente de árvore no DS novo (o antigo\n * usava `hermes-tree`/`*hermesRecursiveFor`, sem equivalente). Folha = checkbox (marca/\n * desmarca um guard); pasta = só rótulo, sem estado próprio.\n */\n@Component({\n selector: 'spine-route-tree-node',\n standalone: true,\n imports: [CommonModule, FormsModule, IconComponent, RouteTreeNodeComponent],\n changeDetection: ChangeDetectionStrategy.Eager,\n template: `\n <li class=\"tree-node\" [class.tree-node--folder]=\"node.isFolder\">\n <label *ngIf=\"!node.isFolder\" class=\"tree-node__leaf\">\n <input type=\"checkbox\" class=\"hm-check\" [(ngModel)]=\"node.selected\" (ngModelChange)=\"selectedChange.emit()\" />\n <hm-icon shape=\"router\" class=\"tree-node__icon\"></hm-icon>\n <span>{{ node.name }}</span>\n </label>\n\n <div *ngIf=\"node.isFolder\" class=\"tree-node__folder\">\n <hm-icon shape=\"filter-grid\" class=\"tree-node__icon\"></hm-icon>\n <span>{{ node.name }}</span>\n </div>\n\n <ul class=\"tree-node__children\" *ngIf=\"node.children.length\">\n <spine-route-tree-node *ngFor=\"let child of node.children\" [node]=\"child\" (selectedChange)=\"selectedChange.emit()\"></spine-route-tree-node>\n </ul>\n </li>\n `,\n styles: [`\n .tree-node { list-style: none; }\n .tree-node__children { list-style: none; margin: 0; padding-inline-start: var(--hm-space-lg); }\n .tree-node__leaf, .tree-node__folder {\n display: flex;\n align-items: center;\n gap: var(--hm-space-xs);\n padding: var(--hm-space-micro) 0;\n font-size: var(--hm-font-size-sm);\n }\n .tree-node__leaf { cursor: pointer; }\n .tree-node__folder { font-weight: var(--hm-font-weight-semibold); color: var(--hm-muted); }\n .tree-node__icon { flex: 0 0 auto; color: var(--hm-action); }\n `],\n})\nexport class RouteTreeNodeComponent {\n @Input({ required: true }) node!: RouteTreeNode;\n @Output() selectedChange = new EventEmitter<void>();\n}\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponent, DrawerComponent, IconComponent } from '@trismegisto/angular';\nimport { AutoServiceService } from '../../../../auto-service.service';\nimport { RouteTreeNode, RouteTreeNodeComponent } from './route-tree-node.component';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { formatMessage, formatMessageHtml } from '@trismegisto/primitives';\n\n@Component({\n selector: 'spine-auto-service-access-guards',\n standalone: true,\n imports: [CommonModule, ButtonComponent, IconComponent, DrawerComponent, RouteTreeNodeComponent],\n templateUrl: './auto-service-access-guards.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-access-guards.component.scss'],\n})\nexport class AutoServiceAccessGuardsComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n protected readonly fmt = formatMessage;\n /** Para `[innerHTML]`: escapa os parâmetros (o tipo de grupo vem do servidor). */\n protected readonly fmtHtml = formatMessageHtml;\n @Input() clientId = '';\n @Input() access: any = null;\n @Input() open = false;\n @Output() openChange = new EventEmitter<boolean>();\n\n availableRouters: any[] = [];\n availableRoutes: any[] = [];\n clientPrivateRouters: any[] = [];\n guards: any[] = [];\n tree: RouteTreeNode[] = [];\n loading = false;\n saving = false;\n\n constructor(private service: AutoServiceService) {}\n\n ngOnChanges(changes: SimpleChanges) { if (changes['open'] && this.open) { this.reset(); } }\n close() { this.open = false; this.openChange.emit(false); }\n\n async reset() {\n this.loading = true;\n try {\n const [routersRes, routesRes] = await Promise.all([this.service.getRouters(this.clientId), this.service.getWebRoutes(this.clientId)]);\n this.availableRouters = routersRes.routers;\n this.availableRoutes = routesRes.routes;\n this.clientPrivateRouters = this.availableRouters.filter((r: any) =>\n r.is_private && (!r.allowed_type_ids?.length || r.allowed_type_ids.includes(this.access.group_type_id))\n );\n await this.loadGuards();\n this.buildTree();\n } finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n async loadGuards() { const res = await this.service.getGuards(this.clientId, this.access.access_id); this.guards = res.guards; }\n\n private routeName(id: string | null): string {\n if (!id) return '—';\n return this.availableRoutes.find((r: any) => r.id === id)?.name ?? id;\n }\n\n private readonly levels: Array<'header_id' | 'navigation_id' | 'menu_id' | 'item_id' | 'submenu_id'> =\n ['header_id', 'navigation_id', 'menu_id', 'item_id', 'submenu_id'];\n\n buildTree() {\n const root: RouteTreeNode[] = [];\n for (const router of this.clientPrivateRouters) {\n let currentLevel = root;\n for (const level of this.levels) {\n const id = router[level];\n if (!id) continue;\n const key = `${level}:${id}`;\n let node = currentLevel.find(n => n.key === key);\n if (!node) { node = { key, name: this.routeName(id), isFolder: true, children: [] }; currentLevel.push(node); }\n currentLevel = node.children;\n }\n const guard = this.guards.find((g: any) => g.router_id === router.id);\n currentLevel.push({\n key: `page:${router.id}`, name: router.page_name || this.routeName(router.page_id), isFolder: false,\n routerId: router.id, guardId: guard?.guard_id, selected: !!guard, children: [],\n });\n }\n this.tree = root;\n }\n\n private collectLeaves(node: RouteTreeNode): RouteTreeNode[] {\n if (!node.isFolder) return [node];\n return node.children.flatMap(child => this.collectLeaves(child));\n }\n\n private get allLeaves(): RouteTreeNode[] { return this.tree.flatMap(node => this.collectLeaves(node)); }\n get hasChanges(): boolean { return this.allLeaves.some(leaf => !!leaf.selected !== !!leaf.guardId); }\n\n async confirm() {\n const leaves = this.allLeaves;\n const toAdd = leaves.filter(l => l.selected && !l.guardId);\n const toRemove = leaves.filter(l => !l.selected && l.guardId);\n if (toAdd.length === 0 && toRemove.length === 0) { this.close(); return; }\n this.saving = true;\n try {\n for (const l of toAdd) { await this.service.addGuard(this.clientId, this.access.access_id, l.routerId!); }\n for (const l of toRemove) { await this.service.removeGuard(this.clientId, this.access.access_id, l.guardId!); }\n this.close();\n } finally { this.saving = false; this.cdr.markForCheck(); }\n }\n}\n","<hm-drawer [open]=\"open\" (openChange)=\"open = $event\" [heading]=\"fmt(text.routesOf, { group: access?.group_name ?? '' })\" (closed)=\"close()\">\n <p class=\"muted\" *ngIf=\"!loading\" [innerHTML]=\"fmtHtml(text.guardsHint, { badge: access?.group_type_name ?? '' })\"></p>\n\n <div *ngIf=\"loading\" class=\"loading-row\">\n <span>{{ text.loading }}</span>\n </div>\n\n <ul class=\"route-tree\" *ngIf=\"!loading\">\n <spine-route-tree-node *ngFor=\"let node of tree\" [node]=\"node\"></spine-route-tree-node>\n </ul>\n\n <div class=\"empty-state\" *ngIf=\"!loading && tree.length === 0\">\n <hm-icon shape=\"filter-grid\" size=\"xl\"></hm-icon>\n <p>{{ text.noPrivateRoutes }}</p>\n </div>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"close()\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!hasChanges\" [loading]=\"saving\" (clicked)=\"confirm()\">{{ text.confirmChanges }}</hm-button>\n </ng-container>\n</hm-drawer>\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, computed, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponent, DataGridActionTriggered, DataGridComponent, DataGridRowAction, GridColumn, IconComponent } from '@trismegisto/angular';\nimport { formatMessage } from '@trismegisto/primitives';\nimport { AutoServiceDeleteFeedback } from '../../auto-service-delete';\nimport { AutoServiceService } from '../../auto-service.service';\nimport { AutoServiceAccessCreateComponent } from './modals/access-create/auto-service-access-create.component';\nimport { AutoServiceAccessGuardsComponent } from './modals/access-guards/auto-service-access-guards.component';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\ninterface AccessRow {\n access_id: string; group_name: string; group_type_name: string; group_type_id: string;\n /** Acesso do grupo de administração: não é do auto-serviço (servidor antigo ainda devolve; a tela descarta). */\n group_is_admin?: boolean;\n}\n\n@Component({\n selector: 'spine-auto-service-access',\n standalone: true,\n imports: [CommonModule, ButtonComponent, IconComponent, DataGridComponent, AutoServiceAccessCreateComponent, AutoServiceAccessGuardsComponent],\n templateUrl: './auto-service-access.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-access.component.scss'],\n})\nexport class AutoServiceAccessComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly deletion = inject(AutoServiceDeleteFeedback);\n @Input() clientId = '';\n entries: AccessRow[] = [];\n availableGroups: any[] = [];\n loading = false;\n showCreate = false;\n showGuards = false;\n activeAccess: AccessRow | null = null;\n constructor(private service: AutoServiceService) {}\n\n readonly rowId = (a: AccessRow) => a.access_id;\n readonly columns = computed<GridColumn<AccessRow>[]>(() => [\n { key: 'group_name', title: this.text.colGroup, value: (a) => a.group_name, sortable: true },\n { key: 'group_type_name', title: this.text.colBadge, value: (a) => a.group_type_name, sortable: true },\n ]);\n readonly rowActions = computed<DataGridRowAction<AccessRow>[]>(() => [\n { id: 'guards', icon: 'shield', label: this.text.manageRoutes },\n {\n id: 'delete', icon: 'trash', label: this.text.remove, danger: true, separatorAbove: true,\n confirm: (a) => ({ heading: this.text.confirmRemoveAccessHeading, message: formatMessage(this.text.confirmRemoveAccess, { group: a.group_name }) }),\n },\n ]);\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['clientId']) { this.load(); this.loadGroups(); }\n }\n\n async load() {\n if (!this.clientId) { this.entries = []; return; }\n this.loading = true;\n try {\n const res = await this.service.getAccess(this.clientId);\n this.entries = (res.access ?? []).filter((a: AccessRow) => !a.group_is_admin);\n }\n finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n async loadGroups() {\n if (!this.clientId) { this.availableGroups = []; return; }\n const res = await this.service.getGroups(this.clientId);\n this.availableGroups = (res.groups ?? []).filter((g) => !g.is_admin);\n this.cdr.markForCheck();\n }\n\n openCreate() { this.showCreate = true; }\n async onCreated() { await this.load(); }\n /** Já confirmado pelo `confirm` da ação na grade. */\n async deleteAccess(accessId: string) {\n if (await this.deletion.run(() => this.service.deleteAccess(this.clientId, accessId))) await this.load();\n }\n openGuards(access: AccessRow) { this.activeAccess = access; this.showGuards = true; }\n\n onAction(e: DataGridActionTriggered<AccessRow>): void {\n if (e.action === 'guards') this.openGuards(e.row);\n if (e.action === 'delete') void this.deleteAccess(e.row.access_id);\n }\n}\n","<hm-data-grid\n [columns]=\"columns()\"\n [rows]=\"entries\"\n [rowId]=\"rowId\"\n [caption]=\"text.accessCaption\"\n [loading]=\"loading\"\n [rowActions]=\"rowActions()\"\n (actionTriggered)=\"onAction($event)\"\n [emptyMessage]=\"text.noAccess\"\n>\n <hm-button dataGridActions icon=\"plus\" (clicked)=\"openCreate()\">{{ text.newAccess }}</hm-button>\n</hm-data-grid>\n\n<spine-auto-service-access-create\n [clientId]=\"clientId\"\n [availableGroups]=\"availableGroups\"\n [open]=\"showCreate\"\n (openChange)=\"showCreate = $event\"\n (created)=\"onCreated()\">\n</spine-auto-service-access-create>\n\n<spine-auto-service-access-guards\n *ngIf=\"activeAccess\"\n [clientId]=\"clientId\"\n [access]=\"activeAccess\"\n [open]=\"showGuards\"\n (openChange)=\"showGuards = $event\">\n</spine-auto-service-access-guards>\n","import { Component, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TabComponent, TabContentDirective, TabsComponent } from '@trismegisto/angular';\nimport { AutoServiceClient, AutoServiceClientPickerComponent } from './client-picker/auto-service-client-picker.component';\nimport { AutoServiceRoutesComponent } from './tabs/auto-service-routes/auto-service-routes.component';\nimport { AutoServiceRoutersComponent } from './tabs/auto-service-routers/auto-service-routers.component';\nimport { AutoServiceAccessComponent } from './tabs/auto-service-access/auto-service-access.component';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\ntype Tab = 'routes' | 'routers' | 'access';\n\n@Component({\n selector: 'spine-auto-service-client',\n standalone: true,\n imports: [\n CommonModule, TabsComponent, TabComponent, TabContentDirective,\n AutoServiceClientPickerComponent, AutoServiceRoutesComponent, AutoServiceRoutersComponent, AutoServiceAccessComponent,\n ],\n templateUrl: './auto-service-client.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-client.component.scss'],\n})\nexport class AutoServiceClientComponent {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n client: AutoServiceClient | null = null;\n activeTab: Tab = 'routes';\n onClientChange(c: AutoServiceClient | null) { this.client = c; }\n setTab(tab: Tab) { this.activeTab = tab; }\n}\n","<!-- Título e descrição da tela vêm da barra da página (nome + description do router). -->\n<div class=\"as-stack\">\n <spine-auto-service-client-picker (clientChange)=\"onClientChange($event)\"></spine-auto-service-client-picker>\n\n <!-- Conteúdo de cada aba é preguiçoso (*hmTabContent): só busca na API quando a aba é aberta. -->\n <hm-tabs *ngIf=\"client as c\" [label]=\"text.clientSections\" [active]=\"activeTab\" (activeChange)=\"setTab($any($event))\">\n <hm-tab id=\"routes\" [label]=\"text.tabRoutes\">\n <spine-auto-service-routes *hmTabContent [clientId]=\"c.id\"></spine-auto-service-routes>\n </hm-tab>\n <hm-tab id=\"routers\" [label]=\"text.tabRouters\">\n <spine-auto-service-routers *hmTabContent [clientId]=\"c.id\"></spine-auto-service-routers>\n </hm-tab>\n <hm-tab id=\"access\" [label]=\"text.tabAccess\">\n <spine-auto-service-access *hmTabContent [clientId]=\"c.id\"></spine-auto-service-access>\n </hm-tab>\n </hm-tabs>\n</div>\n"],"names":["i1.AutoServiceService","i1"],"mappings":"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"}
|