@trismegisto/spine 3.0.4 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +36 -0
  2. package/fesm2022/{trismegisto-spine-auto-service-apps.usage-DeLfYMeO.mjs → trismegisto-spine-auto-service-apps.usage-po9Ds_SU.mjs} +21 -22
  3. package/fesm2022/trismegisto-spine-auto-service-apps.usage-po9Ds_SU.mjs.map +1 -0
  4. package/fesm2022/{trismegisto-spine-auto-service-auto-service-audit.component-BNtNWfiu.mjs → trismegisto-spine-auto-service-auto-service-audit.component-tfGcVR3i.mjs} +2 -2
  5. 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
  6. package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-Cl7ahisu.mjs +65 -0
  7. package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-Cl7ahisu.mjs.map +1 -0
  8. package/fesm2022/{trismegisto-spine-auto-service-auto-service-client.component-wu2tFGS7.mjs → trismegisto-spine-auto-service-auto-service-client.component-DzmlpLPu.mjs} +136 -87
  9. package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-DzmlpLPu.mjs.map +1 -0
  10. 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
  11. 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
  12. 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
  13. 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
  14. package/fesm2022/{trismegisto-spine-auto-service-auto-service.component-D-N-xXPN.mjs → trismegisto-spine-auto-service-auto-service.component-C4FBAefe.mjs} +89 -55
  15. package/fesm2022/trismegisto-spine-auto-service-auto-service.component-C4FBAefe.mjs.map +1 -0
  16. package/fesm2022/{trismegisto-spine-auto-service-client.usage-CcJANb20.mjs → trismegisto-spine-auto-service-client.usage-B16r3IHk.mjs} +16 -12
  17. package/fesm2022/trismegisto-spine-auto-service-client.usage-B16r3IHk.mjs.map +1 -0
  18. package/fesm2022/trismegisto-spine-auto-service.mjs +7 -7
  19. package/fesm2022/trismegisto-spine-graphql.mjs.map +1 -1
  20. package/fesm2022/trismegisto-spine.mjs +43 -5
  21. package/fesm2022/trismegisto-spine.mjs.map +1 -1
  22. package/package.json +6 -6
  23. package/types/trismegisto-spine-auto-service.d.ts.map +1 -1
  24. package/types/trismegisto-spine-graphql.d.ts +1 -1
  25. package/types/trismegisto-spine.d.ts +27 -3
  26. package/types/trismegisto-spine.d.ts.map +1 -1
  27. package/fesm2022/trismegisto-spine-auto-service-apps.usage-DeLfYMeO.mjs.map +0 -1
  28. package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-DdtDk_xl.mjs +0 -51
  29. package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-DdtDk_xl.mjs.map +0 -1
  30. package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-wu2tFGS7.mjs.map +0 -1
  31. package/fesm2022/trismegisto-spine-auto-service-auto-service.component-D-N-xXPN.mjs.map +0 -1
  32. package/fesm2022/trismegisto-spine-auto-service-client.usage-CcJANb20.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trismegisto-spine-auto-service-auto-service-client.component-DzmlpLPu.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/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, CopyButtonComponent, 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, CopyButtonComponent,\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 { key: 'id', title: this.text.colId, value: (r) => r.id },\n ]);\n\n /** Nome acessível do botão de copiar: diz de qual rota é o id. */\n copyIdLabel(r: RouteRow): string {\n return formatMessage(this.text.copyRouteId, { name: r.display_name || r.name });\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 <!-- UUID da rota: só o botão de copiar (para criar a mesma rota com o mesmo id no outro ambiente). -->\n <ng-template hmCell=\"id\" let-r>\n <hm-copy-button [value]=\"r.id\" [label]=\"copyIdLabel(r)\" [copiedLabel]=\"text.idCopied\" />\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, CopyButtonComponent, 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 CopyButtonComponent,\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 { key: 'id', title: this.text.colId, value: (r) => r.id },\n ]);\n\n /** Nome acessível do botão de copiar: diz de qual roteador é o id (o caminho montado identifica a tela). */\n copyIdLabel(r: RouterRow): string {\n return formatMessage(this.text.copyRouterId, { name: r.built_path || this.routeName(r.page_id) });\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 <!-- UUID do roteador: só o botão de copiar (para criar o mesmo roteador com o mesmo id no outro ambiente). -->\n <ng-template hmCell=\"id\" let-r>\n <hm-copy-button [value]=\"r.id\" [label]=\"copyIdLabel(r)\" [copiedLabel]=\"text.idCopied\" />\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 {\n Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, ChangeDetectorRef, computed, signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponent, DataGridActionBarComponent, DrawerComponent, IconComponent, TreeComponent } from '@trismegisto/angular';\nimport { AutoServiceService } from '../../../../auto-service.service';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { TreeNode, TreeSelectionChange, formatMessage } from '@trismegisto/primitives';\n\n/** Nó da árvore de rotas: pastas são os níveis do menu (header…submenu) e a folha é a página (um roteador). */\nexport interface RouteTreeNode {\n key: string; name: string; isFolder: boolean; routerId?: string; guardId?: string; selected?: boolean; children: RouteTreeNode[];\n}\n\n/**\n * \"Gerenciar rotas\" de um acesso do client: as telas privadas que o grupo pode receber (roteadores sem restrição de\n * crachá ou que aceitam o crachá do grupo), em `hm-tree` pelos níveis do menu, como no painel do Argos. No topo, só o\n * filtro; a seleção guarda só folhas (páginas) e a diferença vira guard criado ou removido ao confirmar.\n */\n@Component({\n selector: 'spine-auto-service-access-guards',\n standalone: true,\n imports: [CommonModule, ButtonComponent, DataGridActionBarComponent, IconComponent, DrawerComponent, TreeComponent],\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 @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 loading = false;\n saving = false;\n\n readonly tree = signal<RouteTreeNode[]>([]);\n /** Termo do filtro no topo do drawer; a árvore mostrada é `visibleTree`. */\n readonly filter = signal('');\n readonly visibleTree = computed(() => filterRouteTree(this.tree(), this.filter()));\n readonly treeNodes = computed<readonly TreeNode[]>(() => this.visibleTree().map(n => toTreeNode(n)));\n /** Só folhas (páginas): o que tem guard agora na árvore. */\n readonly selectedIds = signal<ReadonlySet<string>>(new Set());\n readonly expandedIds = signal<ReadonlySet<string>>(new Set());\n private originalSelectedIds: ReadonlySet<string> = new Set();\n private readonly nodesByKey = computed(() => indexByKey(this.tree()));\n /** Nós visíveis por chave: marcar uma pasta com o filtro ativo só mexe nas páginas que aparecem. */\n private readonly visibleByKey = computed(() => indexByKey(this.visibleTree()));\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.set(root);\n const original = new Set(root.flatMap(collectLeaves).filter(l => l.selected).map(l => l.key));\n this.originalSelectedIds = original;\n this.selectedIds.set(new Set(original));\n this.expandedIds.set(new Set());\n this.filter.set('');\n }\n\n /** Filtrar abre as pastas que sobraram, para as telas encontradas aparecerem sem clique. */\n onFilterChange(term: string) {\n this.filter.set(term);\n if (!term.trim()) return;\n this.expandedIds.update(current => new Set([...current, ...folderKeys(this.visibleTree())]));\n }\n\n /** Com caixas o hm-tree emite folhas (ou a pasta sem folhas): pasta vira as páginas dela que estão à vista. */\n onTreeChanged(changes: readonly TreeSelectionChange[]) {\n this.selectedIds.update(current => {\n const next = new Set(current);\n for (const change of changes) {\n const node = this.visibleByKey().get(change.id);\n if (!node) continue;\n for (const leaf of collectLeaves(node)) {\n if (change.selected) next.add(leaf.key); else next.delete(leaf.key);\n }\n }\n return next;\n });\n }\n\n get hasChanges(): boolean {\n const selected = this.selectedIds();\n if (selected.size !== this.originalSelectedIds.size) return true;\n for (const id of selected) if (!this.originalSelectedIds.has(id)) return true;\n return false;\n }\n\n /** Folha (página) pela chave; `undefined` para pasta ou chave desconhecida. */\n private leafByKey(key: string): RouteTreeNode | undefined {\n const node = this.nodesByKey().get(key);\n return node && !node.isFolder ? node : undefined;\n }\n\n async confirm() {\n const selected = this.selectedIds();\n const isLeaf = (l: RouteTreeNode | undefined): l is RouteTreeNode => !!l;\n const toAdd = [...selected].filter(id => !this.originalSelectedIds.has(id)).map(id => this.leafByKey(id)).filter(isLeaf);\n const toRemove = [...this.originalSelectedIds].filter(id => !selected.has(id)).map(id => this.leafByKey(id)).filter(isLeaf);\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\nfunction toTreeNode(node: RouteTreeNode): TreeNode {\n return {\n id: node.key, label: node.name, leaf: !node.isFolder,\n children: node.isFolder ? node.children.map(toTreeNode) : undefined,\n };\n}\n\nfunction collectLeaves(node: RouteTreeNode): RouteTreeNode[] {\n return node.isFolder ? node.children.flatMap(collectLeaves) : [node];\n}\n\nfunction indexByKey(root: RouteTreeNode[]): Map<string, RouteTreeNode> {\n const map = new Map<string, RouteTreeNode>();\n const walk = (nodes: RouteTreeNode[]) => { for (const n of nodes) { map.set(n.key, n); walk(n.children); } };\n walk(root);\n return map;\n}\n\nfunction folderKeys(root: RouteTreeNode[]): string[] {\n return [...indexByKey(root).values()].filter(n => n.isFolder).map(n => n.key);\n}\n\n/** Minúsculo e sem acento: \"operacao\" casa com \"Operação\". */\nfunction normalize(value: string | undefined): string {\n return (value ?? '').normalize('NFD').replace(/[̀-ͯ]/g, '').toLowerCase();\n}\n\n/** A árvore só com as telas cujo nome casa com o termo; a pasta que casa pelo nome vem inteira. Termo vazio = tudo. */\nexport function filterRouteTree(nodes: RouteTreeNode[], term: string): RouteTreeNode[] {\n const needle = normalize(term.trim());\n if (!needle) return nodes;\n const walk = (list: RouteTreeNode[]): RouteTreeNode[] => list.flatMap((n) => {\n if (n.isFolder) {\n if (normalize(n.name).includes(needle)) return [n];\n const children = walk(n.children);\n return children.length ? [{ ...n, children }] : [];\n }\n return normalize(n.name).includes(needle) ? [n] : [];\n });\n return walk(nodes);\n}\n","<hm-drawer [open]=\"open\" (openChange)=\"open = $event\" [heading]=\"fmt(text.routesOf, { group: access?.group_name ?? '' })\" (closed)=\"close()\">\n <div *ngIf=\"loading\" class=\"loading-row\">\n <span>{{ text.loading }}</span>\n </div>\n\n <!-- Topo sem mensagens: só o filtro, com o mesmo visual da busca das grades. -->\n <hm-data-grid-action-bar *ngIf=\"!loading && tree().length\"\n [search]=\"filter()\" (searchChange)=\"onFilterChange($event)\"\n [placeholder]=\"text.filterRoutes\" [label]=\"text.filterRoutes\" />\n\n <hm-tree\n *ngIf=\"!loading && treeNodes().length\"\n [nodes]=\"treeNodes()\"\n [label]=\"text.routesTreeLabel\"\n [selected]=\"selectedIds()\"\n [(expanded)]=\"expandedIds\"\n (changed)=\"onTreeChanged($event)\"\n />\n\n <div class=\"empty-state\" *ngIf=\"!loading && tree().length > 0 && treeNodes().length === 0\">\n <hm-icon shape=\"search\" size=\"xl\"></hm-icon>\n <p>{{ fmt(text.noFilterMatch, { term: filter() }) }}</p>\n </div>\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 {\n ButtonComponent, DataGridActionTriggered, DataGridCellDirective, DataGridComponent, DataGridRowAction, GridColumn, IconComponent, TagComponent,\n} 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: [\n CommonModule, ButtonComponent, IconComponent, DataGridComponent, DataGridCellDirective, TagComponent,\n AutoServiceAccessCreateComponent, AutoServiceAccessGuardsComponent,\n ],\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.colType, value: (a) => a.group_type_name, sortable: true },\n // Como no painel do Argos: \"Gerenciar rotas\" é um botão na linha, não um item do menu.\n { key: 'guards', title: this.text.colGuards, value: () => '' },\n ]);\n readonly rowActions = computed<DataGridRowAction<AccessRow>[]>(() => [\n {\n id: 'delete', icon: 'trash', label: this.text.remove, danger: 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 === '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 <ng-template hmCell=\"group_type_name\" let-a>\n <hm-tag [name]=\"a.group_type_name\" color=\"neutral\" />\n </ng-template>\n <ng-template hmCell=\"guards\" let-a>\n <hm-button emphasis=\"minimal\" icon=\"shield\" (clicked)=\"openGuards(a)\">{{ text.manageRoutes }}</hm-button>\n </ng-template>\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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"}
@@ -7,7 +7,7 @@ import { formatMessage } from '@trismegisto/primitives';
7
7
  import { SPINE_MESSAGES } from '@trismegisto/spine';
8
8
  import { a as autoServiceErrorText, A as AutoServiceDeleteFeedback } from './trismegisto-spine-auto-service-auto-service-delete-CV_t9vxm.mjs';
9
9
  import { AutoServiceService } from './trismegisto-spine-auto-service.mjs';
10
- import { A as AutoServiceClientPickerComponent } from './trismegisto-spine-auto-service-auto-service-client-picker.component-DdtDk_xl.mjs';
10
+ import { A as AutoServiceClientPickerComponent } from './trismegisto-spine-auto-service-auto-service-client-picker.component-Cl7ahisu.mjs';
11
11
  import * as i3 from '@angular/forms';
12
12
  import { FormControl, Validators, ReactiveFormsModule, FormsModule } from '@angular/forms';
13
13
  import { o as optionalIdValidator, a as optionalIdBody } from './trismegisto-spine-auto-service-optional-id.validator-0JPeqhjm.mjs';
@@ -601,4 +601,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.24", ngImpo
601
601
  }] });
602
602
 
603
603
  export { AutoServiceGroupsComponent, NO_LEVEL };
604
- //# sourceMappingURL=trismegisto-spine-auto-service-auto-service-groups.component-DHhbEiL4.mjs.map
604
+ //# sourceMappingURL=trismegisto-spine-auto-service-auto-service-groups.component-2xCG_wS9.mjs.map