@trismegisto/spine 2.0.0 → 2.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 (49) hide show
  1. package/README.md +35 -5
  2. package/fesm2022/trismegisto-spine-audit.mjs +1 -1
  3. package/fesm2022/trismegisto-spine-audit.mjs.map +1 -1
  4. package/fesm2022/trismegisto-spine-auto-service-apps.technical-ClMKB9cK.mjs +48 -0
  5. package/fesm2022/trismegisto-spine-auto-service-apps.technical-ClMKB9cK.mjs.map +1 -0
  6. package/fesm2022/trismegisto-spine-auto-service-apps.usage-Cf5SG-oQ.mjs +55 -0
  7. package/fesm2022/trismegisto-spine-auto-service-apps.usage-Cf5SG-oQ.mjs.map +1 -0
  8. package/fesm2022/trismegisto-spine-auto-service-audit.technical-C901aIIQ.mjs +42 -0
  9. package/fesm2022/trismegisto-spine-auto-service-audit.technical-C901aIIQ.mjs.map +1 -0
  10. package/fesm2022/trismegisto-spine-auto-service-audit.usage-GIJ2RwuH.mjs +63 -0
  11. package/fesm2022/trismegisto-spine-auto-service-audit.usage-GIJ2RwuH.mjs.map +1 -0
  12. package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-C7SPavrX.mjs +784 -0
  13. package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-C7SPavrX.mjs.map +1 -0
  14. package/fesm2022/trismegisto-spine-auto-service-auto-service-delete-6Bk46MOf.mjs +39 -0
  15. package/fesm2022/trismegisto-spine-auto-service-auto-service-delete-6Bk46MOf.mjs.map +1 -0
  16. package/fesm2022/{trismegisto-spine-auto-service-auto-service.component-B5tyJ2zY.mjs → trismegisto-spine-auto-service-auto-service.component-BLN49F4a.mjs} +32 -7
  17. package/fesm2022/trismegisto-spine-auto-service-auto-service.component-BLN49F4a.mjs.map +1 -0
  18. package/fesm2022/trismegisto-spine-auto-service-client.technical-BHWhpyWv.mjs +46 -0
  19. package/fesm2022/trismegisto-spine-auto-service-client.technical-BHWhpyWv.mjs.map +1 -0
  20. package/fesm2022/trismegisto-spine-auto-service-client.usage-CM2WB2e2.mjs +80 -0
  21. package/fesm2022/trismegisto-spine-auto-service-client.usage-CM2WB2e2.mjs.map +1 -0
  22. package/fesm2022/trismegisto-spine-auto-service-groups.technical-jQlwaQPn.mjs +39 -0
  23. package/fesm2022/trismegisto-spine-auto-service-groups.technical-jQlwaQPn.mjs.map +1 -0
  24. package/fesm2022/trismegisto-spine-auto-service-groups.usage-Bh7ig2zZ.mjs +54 -0
  25. package/fesm2022/trismegisto-spine-auto-service-groups.usage-Bh7ig2zZ.mjs.map +1 -0
  26. package/fesm2022/trismegisto-spine-auto-service-home.technical-BrVhcgDO.mjs +35 -0
  27. package/fesm2022/trismegisto-spine-auto-service-home.technical-BrVhcgDO.mjs.map +1 -0
  28. package/fesm2022/trismegisto-spine-auto-service-home.usage-D6cb4B3Z.mjs +43 -0
  29. package/fesm2022/trismegisto-spine-auto-service-home.usage-D6cb4B3Z.mjs.map +1 -0
  30. package/fesm2022/trismegisto-spine-auto-service.mjs +82 -40
  31. package/fesm2022/trismegisto-spine-auto-service.mjs.map +1 -1
  32. package/fesm2022/trismegisto-spine-layout.mjs +988 -46
  33. package/fesm2022/trismegisto-spine-layout.mjs.map +1 -1
  34. package/fesm2022/trismegisto-spine-shell.mjs +3 -1
  35. package/fesm2022/trismegisto-spine-shell.mjs.map +1 -1
  36. package/fesm2022/trismegisto-spine.mjs +591 -16
  37. package/fesm2022/trismegisto-spine.mjs.map +1 -1
  38. package/package.json +7 -7
  39. package/types/trismegisto-spine-auto-service.d.ts +41 -2
  40. package/types/trismegisto-spine-auto-service.d.ts.map +1 -1
  41. package/types/trismegisto-spine-layout.d.ts +214 -13
  42. package/types/trismegisto-spine-layout.d.ts.map +1 -1
  43. package/types/trismegisto-spine-shell.d.ts +1 -0
  44. package/types/trismegisto-spine-shell.d.ts.map +1 -1
  45. package/types/trismegisto-spine.d.ts +214 -8
  46. package/types/trismegisto-spine.d.ts.map +1 -1
  47. package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-BYkUOwWL.mjs +0 -595
  48. package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-BYkUOwWL.mjs.map +0 -1
  49. package/fesm2022/trismegisto-spine-auto-service-auto-service.component-B5tyJ2zY.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trismegisto-spine-auto-service-auto-service-client.component-C7SPavrX.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';\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 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.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) 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, 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 <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\" (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 { FormsModule } from '@angular/forms';\nimport {\n ButtonComponent, CheckboxComponent, ComboboxComponent, ComboboxOption, DataGridActionTriggered, DataGridCellDirective,\n DataGridComponent, DataGridRowAction, DividerComponent, GridColumn, ModalComponent, TagComponent, TextareaComponent,\n} from '@trismegisto/angular';\nimport { formatMessage } from '@trismegisto/primitives';\nimport { AutoServiceDeleteFeedback } from '../../auto-service-delete';\nimport { AutoServiceService } from '../../auto-service.service';\nimport { AutoServiceRoutersReorderComponent } from './modals/routers-reorder/auto-service-routers-reorder.component';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\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}\n\n@Component({\n selector: 'spine-auto-service-routers',\n standalone: true,\n imports: [\n CommonModule, FormsModule, ButtonComponent, CheckboxComponent, ComboboxComponent, DividerComponent, ModalComponent,\n 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 /** 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 = { page_id: '', header_id: '', navigation_id: '', menu_id: '', item_id: '', submenu_id: '', is_private: true, description: '' };\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 ]);\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 = []; return; }\n this.loading = true;\n try {\n const [routesRes, routersRes] = await Promise.all([this.service.getWebRoutes(this.clientId), this.service.getRouters(this.clientId)]);\n this.routes = routesRes.routes;\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 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.routerForm = { page_id: '', header_id: '', navigation_id: '', menu_id: '', item_id: '', submenu_id: '', is_private: true, description: '' };\n this.showRouterModal = true;\n }\n\n openEditRouter(r: RouterRow) {\n this.editingRouterId = r.id;\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 ?? '',\n };\n this.showRouterModal = true;\n }\n\n async saveRouter() {\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 };\n if (this.editingRouterId) { await this.service.updateRouter(this.clientId, this.editingRouterId, body); }\n else { await this.service.createRouter(this.clientId, body); }\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=\"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-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\n <hm-combobox [label]=\"text.levelHeader\" [options]=\"routeOptions\" [clearable]=\"true\" [value]=\"routerForm.header_id\" (valueChange)=\"routerForm.header_id = $event\"></hm-combobox>\n <hm-combobox [label]=\"text.levelNavigation\" [options]=\"routeOptions\" [clearable]=\"true\" [value]=\"routerForm.navigation_id\" (valueChange)=\"routerForm.navigation_id = $event\"></hm-combobox>\n <hm-combobox [label]=\"text.levelMenu\" [options]=\"routeOptions\" [clearable]=\"true\" [value]=\"routerForm.menu_id\" (valueChange)=\"routerForm.menu_id = $event\"></hm-combobox>\n <hm-combobox [label]=\"text.levelItem\" [options]=\"routeOptions\" [clearable]=\"true\" [value]=\"routerForm.item_id\" (valueChange)=\"routerForm.item_id = $event\"></hm-combobox>\n <hm-combobox [label]=\"text.levelSubmenu\" [options]=\"routeOptions\" [clearable]=\"true\" [value]=\"routerForm.submenu_id\" (valueChange)=\"routerForm.submenu_id = $event\"></hm-combobox>\n\n <hm-divider />\n <hm-checkbox [(ngModel)]=\"routerForm.is_private\" [label]=\"text.privateHint\" />\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\" (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 { access_id: string; group_name: string; group_type_name: string; group_type_id: string; }\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 { const res = await this.service.getAccess(this.clientId); this.entries = res.access; }\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;\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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"}
@@ -0,0 +1,39 @@
1
+ import { HttpErrorResponse } from '@angular/common/http';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, Injectable } from '@angular/core';
4
+ import { HermesToastService } from '@trismegisto/angular';
5
+ import { SPINE_MESSAGES } from '@trismegisto/spine';
6
+
7
+ /**
8
+ * Exclusões do auto-serviço: o DELETE com aviso. Sucesso vira toast `deleteDone`; falha vira toast de erro
9
+ * com o `detail` do servidor (ou `deleteError`) e nada propaga. A confirmação vem antes, de quem chama
10
+ * (`HermesDialogService.confirm` ou o `confirm` da ação no `hm-data-grid`).
11
+ */
12
+ class AutoServiceDeleteFeedback {
13
+ constructor() {
14
+ this.toast = inject(HermesToastService);
15
+ this.text = inject(SPINE_MESSAGES).autoService;
16
+ }
17
+ /** `true` se excluiu. */
18
+ async run(request) {
19
+ try {
20
+ await request();
21
+ this.toast.success(this.text.deleteDone);
22
+ return true;
23
+ }
24
+ catch (err) {
25
+ const detail = err instanceof HttpErrorResponse ? err.error?.detail : undefined;
26
+ this.toast.error(typeof detail === 'string' && detail ? detail : this.text.deleteError);
27
+ return false;
28
+ }
29
+ }
30
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.24", ngImport: i0, type: AutoServiceDeleteFeedback, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
31
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.24", ngImport: i0, type: AutoServiceDeleteFeedback, providedIn: 'root' }); }
32
+ }
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.24", ngImport: i0, type: AutoServiceDeleteFeedback, decorators: [{
34
+ type: Injectable,
35
+ args: [{ providedIn: 'root' }]
36
+ }] });
37
+
38
+ export { AutoServiceDeleteFeedback as A };
39
+ //# sourceMappingURL=trismegisto-spine-auto-service-auto-service-delete-6Bk46MOf.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trismegisto-spine-auto-service-auto-service-delete-6Bk46MOf.mjs","sources":["../../../projects/ui/auto-service/src/auto-service-delete.ts"],"sourcesContent":["import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { HermesToastService } from '@trismegisto/angular';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\n/**\n * Exclusões do auto-serviço: o DELETE com aviso. Sucesso vira toast `deleteDone`; falha vira toast de erro\n * com o `detail` do servidor (ou `deleteError`) e nada propaga. A confirmação vem antes, de quem chama\n * (`HermesDialogService.confirm` ou o `confirm` da ação no `hm-data-grid`).\n */\n@Injectable({ providedIn: 'root' })\nexport class AutoServiceDeleteFeedback {\n private readonly toast = inject(HermesToastService);\n private readonly text = inject(SPINE_MESSAGES).autoService;\n\n /** `true` se excluiu. */\n async run(request: () => Promise<unknown>): Promise<boolean> {\n try {\n await request();\n this.toast.success(this.text.deleteDone);\n return true;\n } catch (err) {\n const detail = err instanceof HttpErrorResponse ? (err.error?.detail as string | undefined) : undefined;\n this.toast.error(typeof detail === 'string' && detail ? detail : this.text.deleteError);\n return false;\n }\n }\n}\n"],"names":[],"mappings":";;;;;;AAKA;;;;AAIG;MAEU,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAClC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW;AAc3D,IAAA;;IAXC,MAAM,GAAG,CAAC,OAA+B,EAAA;AACvC,QAAA,IAAI;YACF,MAAM,OAAO,EAAE;YACf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,YAAA,OAAO,IAAI;QACb;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,MAAM,MAAM,GAAG,GAAG,YAAY,iBAAiB,GAAI,GAAG,CAAC,KAAK,EAAE,MAA6B,GAAG,SAAS;YACvG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACvF,YAAA,OAAO,KAAK;QACd;IACF;+GAfW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA,CAAA;;4FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
@@ -5,10 +5,11 @@ import { CommonModule } from '@angular/common';
5
5
  import { A as AutoServiceClientPickerComponent } from './trismegisto-spine-auto-service-auto-service-client-picker.component-Z0wCANF6.mjs';
6
6
  import * as i3 from '@angular/forms';
7
7
  import { FormControl, Validators, ReactiveFormsModule, FormsModule } from '@angular/forms';
8
- import { ButtonComponent, CheckboxComponent, InputComponent, ModalComponent, DataGridComponent, DataGridCellDirective, TagComponent, ComboboxComponent, DrawerComponent, IconComponent, AlertComponent, CardComponent, TabsComponent, TabComponent, TabContentDirective } from '@trismegisto/angular';
8
+ import { ButtonComponent, CheckboxComponent, InputComponent, ModalComponent, DataGridComponent, DataGridCellDirective, TagComponent, ComboboxComponent, DrawerComponent, IconComponent, HermesDialogService, AlertComponent, CardComponent, TabsComponent, TabComponent, TabContentDirective } from '@trismegisto/angular';
9
+ import { pluralMessage, formatMessage } from '@trismegisto/primitives';
10
+ import { A as AutoServiceDeleteFeedback } from './trismegisto-spine-auto-service-auto-service-delete-6Bk46MOf.mjs';
9
11
  import { SPINE_MESSAGES } from '@trismegisto/spine';
10
12
  import { AutoServiceService } from './trismegisto-spine-auto-service.mjs';
11
- import { pluralMessage, formatMessage } from '@trismegisto/primitives';
12
13
 
13
14
  class AutoServiceAppsModalComponent {
14
15
  constructor(service) {
@@ -289,6 +290,7 @@ class AutoServiceAppAccessComponent {
289
290
  this.text = inject(SPINE_MESSAGES).autoService;
290
291
  /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */
291
292
  this.cdr = inject(ChangeDetectorRef);
293
+ this.deletion = inject(AutoServiceDeleteFeedback);
292
294
  this.clientId = '';
293
295
  this.appId = '';
294
296
  this.entries = [];
@@ -304,7 +306,10 @@ class AutoServiceAppAccessComponent {
304
306
  ], ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
305
307
  this.rowActions = computed(() => [
306
308
  { id: 'permissions', icon: 'shield', label: this.text.manageOperations },
307
- { id: 'delete', icon: 'trash', label: this.text.remove, danger: true, separatorAbove: true },
309
+ {
310
+ id: 'delete', icon: 'trash', label: this.text.remove, danger: true, separatorAbove: true,
311
+ confirm: (c) => ({ heading: this.text.confirmRemoveConsumerHeading, message: formatMessage(this.text.confirmRemoveConsumer, { group: c.group_name }) }),
312
+ },
308
313
  ], ...(ngDevMode ? [{ debugName: "rowActions" }] : /* istanbul ignore next */ []));
309
314
  }
310
315
  ngOnChanges(changes) {
@@ -341,7 +346,11 @@ class AutoServiceAppAccessComponent {
341
346
  }
342
347
  openCreate() { this.showCreate = true; }
343
348
  async onCreated() { await this.load(); }
344
- async deleteConsumer(consumerId) { await this.service.deleteAppConsumer(this.clientId, consumerId); await this.load(); }
349
+ /** Já confirmado pelo `confirm` da ação na grade. */
350
+ async deleteConsumer(consumerId) {
351
+ if (await this.deletion.run(() => this.service.deleteAppConsumer(this.clientId, consumerId)))
352
+ await this.load();
353
+ }
345
354
  openPermissions(consumer) { this.activeConsumer = consumer; this.showPermissions = true; }
346
355
  onAction(e) {
347
356
  if (e.action === 'permissions')
@@ -367,6 +376,8 @@ class AutoServiceAppsComponent {
367
376
  this.text = inject(SPINE_MESSAGES).autoService;
368
377
  /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */
369
378
  this.cdr = inject(ChangeDetectorRef);
379
+ this.dialogs = inject(HermesDialogService);
380
+ this.deletion = inject(AutoServiceDeleteFeedback);
370
381
  this.clientId = '';
371
382
  this.loadingOptions = false;
372
383
  this.appOptions = [];
@@ -381,9 +392,11 @@ class AutoServiceAppsComponent {
381
392
  get appComboOptions() {
382
393
  return this.appOptions.map((a) => ({ value: a.id, label: a.name }));
383
394
  }
395
+ // Trocar de client esconde o segredo recém-criado: ele é de uma aplicação do client anterior.
384
396
  ngOnChanges(changes) { if (changes['clientId']) {
385
397
  this.selectedAppId = '';
386
398
  this.app = null;
399
+ this.newSecret = null;
387
400
  this.loadAppOptions();
388
401
  } }
389
402
  async loadAppOptions() {
@@ -434,12 +447,24 @@ class AutoServiceAppsComponent {
434
447
  this.app = this.appOptions.find(a => a.id === this.app.id) ?? this.app;
435
448
  this.cdr.markForCheck();
436
449
  }
450
+ /** Pede confirmação; só então o DELETE (com toast de sucesso/erro). */
437
451
  async deleteApp() {
438
- if (!this.app)
452
+ const app = this.app;
453
+ if (!app)
454
+ return;
455
+ const ok = await this.dialogs.confirm({
456
+ heading: this.text.confirmDeleteAppHeading,
457
+ message: formatMessage(this.text.confirmDeleteApp, { name: app.name ?? app.id }),
458
+ confirmLabel: this.text.delete,
459
+ danger: true,
460
+ });
461
+ if (!ok)
462
+ return;
463
+ if (!(await this.deletion.run(() => this.service.deleteApp(this.clientId, app.id))))
439
464
  return;
440
- await this.service.deleteApp(this.clientId, this.app.id);
441
465
  this.app = null;
442
466
  this.selectedAppId = '';
467
+ this.newSecret = null;
443
468
  await this.loadAppOptions();
444
469
  }
445
470
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.24", ngImport: i0, type: AutoServiceAppsComponent, deps: [{ token: AutoServiceService }], target: i0.ɵɵFactoryTarget.Component }); }
@@ -474,4 +499,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.24", ngImpo
474
499
  }] });
475
500
 
476
501
  export { AutoServiceComponent };
477
- //# sourceMappingURL=trismegisto-spine-auto-service-auto-service.component-B5tyJ2zY.mjs.map
502
+ //# sourceMappingURL=trismegisto-spine-auto-service-auto-service.component-BLN49F4a.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trismegisto-spine-auto-service-auto-service.component-BLN49F4a.mjs","sources":["../../../projects/ui/auto-service/src/tabs/auto-service-apps/modals/apps-modal/auto-service-apps-modal.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-apps/modals/apps-modal/auto-service-apps-modal.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-operations/auto-service-app-operations.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-operations/auto-service-app-operations.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-access/modals/consumer-create/auto-service-consumer-create.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-access/modals/consumer-create/auto-service-consumer-create.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-access/modals/consumer-permissions/auto-service-consumer-permissions.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-access/modals/consumer-permissions/auto-service-consumer-permissions.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-access/auto-service-app-access.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-access/auto-service-app-access.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-apps/auto-service-apps.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-apps/auto-service-apps.component.html","../../../projects/ui/auto-service/src/auto-service.component.ts","../../../projects/ui/auto-service/src/auto-service.component.html"],"sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ButtonComponent, CheckboxComponent, InputComponent, ModalComponent } from '@trismegisto/angular';\nimport { AutoServiceService } from '../../../../auto-service.service';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\n@Component({\n selector: 'spine-auto-service-apps-modal',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, ButtonComponent, CheckboxComponent, InputComponent, ModalComponent],\n templateUrl: './auto-service-apps-modal.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-apps-modal.component.scss'],\n})\nexport class AutoServiceAppsModalComponent 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() app: any = null;\n @Input() clientId = '';\n @Input() open = false;\n @Output() openChange = new EventEmitter<boolean>();\n @Output() saved = new EventEmitter<string | undefined>();\n\n readonly name = new FormControl('', { nonNullable: true, validators: [Validators.required] });\n readonly grants = new FormControl('client_credentials', { nonNullable: true });\n readonly enabled = new FormControl(true, { nonNullable: true });\n\n saving = false;\n constructor(private service: AutoServiceService) {}\n get isEdit(): boolean { return !!this.app?.id; }\n\n ngOnChanges(changes: SimpleChanges) { if (changes['open'] && this.open) { this.resetForm(); } }\n\n resetForm() {\n if (this.isEdit) {\n this.name.setValue(this.app.name);\n this.grants.setValue(this.app.allowed_grants?.join(', ') ?? '');\n this.enabled.setValue(this.app.enabled);\n } else {\n this.name.setValue('');\n this.grants.setValue('client_credentials');\n this.enabled.setValue(true);\n }\n }\n\n onModalOpenChange(value: boolean) { this.open = value; this.openChange.emit(value); }\n close() { this.onModalOpenChange(false); }\n\n async save() {\n this.saving = true;\n try {\n const allowed_grants = this.grants.value.split(',').map(s => s.trim()).filter(Boolean);\n if (this.isEdit) {\n await this.service.updateApp(this.clientId, this.app.id, { name: this.name.value, allowed_grants, enabled: this.enabled.value });\n this.saved.emit();\n } else {\n const res = await this.service.createApp(this.clientId, { name: this.name.value, allowed_grants });\n this.saved.emit(res.secret);\n }\n this.close();\n } finally { this.saving = false; this.cdr.markForCheck(); }\n }\n}\n","<hm-modal [open]=\"open\" (openChange)=\"onModalOpenChange($event)\" [heading]=\"isEdit ? text.editApp : text.newApp\" (closed)=\"close()\">\n <div class=\"form-stack\">\n <hm-input [formControl]=\"name\" [label]=\"text.name\" />\n <hm-input [formControl]=\"grants\" [label]=\"text.grants\" placeholder=\"client_credentials\" />\n <hm-checkbox *ngIf=\"isEdit\" [formControl]=\"enabled\" [label]=\"text.active\" />\n </div>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"close()\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!name.value\" [loading]=\"saving\" (clicked)=\"save()\">{{ text.save }}</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 { DataGridCellDirective, DataGridComponent, GridColumn, TagColor, TagComponent } from '@trismegisto/angular';\nimport { AutoServiceService } from '../../../../auto-service.service';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { pluralMessage } from '@trismegisto/primitives';\n\ninterface OperationRow {\n operation_id: string; identifier: string; method: string; level: string; description?: string; allowed_groups?: any[];\n}\n\n@Component({\n selector: 'spine-auto-service-app-operations',\n standalone: true,\n imports: [CommonModule, DataGridComponent, DataGridCellDirective, TagComponent],\n templateUrl: './auto-service-app-operations.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-app-operations.component.scss'],\n})\nexport class AutoServiceAppOperationsComponent 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 messages = inject(SPINE_MESSAGES);\n @Input() clientId = '';\n @Input() appId = '';\n operations: OperationRow[] = [];\n loading = false;\n constructor(private service: AutoServiceService) {}\n\n readonly rowId = (op: OperationRow) => op.operation_id;\n readonly columns = computed<GridColumn<OperationRow>[]>(() => [\n { key: 'identifier', title: this.text.colIdentifier, value: (op) => op.identifier, sortable: true },\n { key: 'method', title: this.text.colMethod, value: (op) => op.method, sortable: true },\n { key: 'level', title: this.text.colLevel, value: (op) => op.level, sortable: true },\n { key: 'description', title: this.text.colDescription, value: (op) => op.description || '—' },\n {\n key: 'allowed_groups', title: this.text.colAllowedGroups,\n value: (op) => op.allowed_groups?.length ? pluralMessage(this.text.groupCount, op.allowed_groups.length, this.messages.meta.locale) : '—',\n },\n ]);\n\n ngOnChanges(changes: SimpleChanges) { if (changes['appId']) { this.load(); } }\n\n async load() {\n if (!this.appId) { this.operations = []; return; }\n this.loading = true;\n try { const res = await this.service.getAppOperations(this.clientId, this.appId); this.operations = res.operations; }\n finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n /** Nível da operação no selo: pública em verde, protegida em amarelo; o resto neutro. */\n levelTagColor(level: string | null | undefined): TagColor {\n if (level === 'public') return 'success';\n if (level === 'protected') return 'warning';\n return 'neutral';\n }\n}\n","<hm-data-grid\n [columns]=\"columns()\"\n [rows]=\"operations\"\n [rowId]=\"rowId\"\n [caption]=\"text.operationsCaption\"\n [loading]=\"loading\"\n [emptyMessage]=\"text.noOperations\"\n>\n <ng-template hmCell=\"identifier\" let-op>\n <code>{{ op.identifier }}</code>\n </ng-template>\n\n <ng-template hmCell=\"method\" let-op>\n <hm-tag [name]=\"op.method\" />\n </ng-template>\n\n <ng-template hmCell=\"level\" let-op>\n <hm-tag [name]=\"op.level\" [color]=\"levelTagColor(op.level)\" />\n </ng-template>\n</hm-data-grid>\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-consumer-create',\n standalone: true,\n imports: [CommonModule, ButtonComponent, ComboboxComponent, ModalComponent],\n templateUrl: './auto-service-consumer-create.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-consumer-create.component.scss'],\n})\nexport class AutoServiceConsumerCreateComponent 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() appId = '';\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.createAppConsumer(this.clientId, this.appId, 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, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { ButtonComponent, DrawerComponent, IconComponent, TagComponent } from '@trismegisto/angular';\nimport { AutoServiceService } from '../../../../../../auto-service.service';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { formatMessage } from '@trismegisto/primitives';\n\ninterface OperationRow {\n operation_id: string; identifier: string; method: string; level: string; description?: string;\n permissionId?: string; control: FormControl<boolean>;\n}\n\n@Component({\n selector: 'spine-auto-service-consumer-permissions',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, ButtonComponent, DrawerComponent, IconComponent, TagComponent],\n templateUrl: './auto-service-consumer-permissions.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-consumer-permissions.component.scss'],\n})\nexport class AutoServiceConsumerPermissionsComponent 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() appId = '';\n @Input() consumer: any = null;\n @Input() open = false;\n @Output() openChange = new EventEmitter<boolean>();\n rows: OperationRow[] = [];\n loading = false;\n saving = false;\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 [opsRes, permsRes] = await Promise.all([\n this.service.getAppOperations(this.clientId, this.appId),\n this.service.getAppPermissions(this.clientId, this.consumer.consumer_id),\n ]);\n const operations = opsRes.operations ?? [];\n const permissions = permsRes.permissions ?? [];\n this.rows = operations.map((op: any) => {\n const perm = permissions.find((p: any) => p.operation_id === op.operation_id);\n return {\n operation_id: op.operation_id, identifier: op.identifier, method: op.method, level: op.level,\n description: op.description, permissionId: perm?.permission_id,\n control: new FormControl(!!perm, { nonNullable: true }),\n };\n });\n } finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n get hasChanges(): boolean { return this.rows.some(r => r.control.value !== !!r.permissionId); }\n\n async confirm() {\n const toAdd = this.rows.filter(r => r.control.value && !r.permissionId);\n const toRemove = this.rows.filter(r => !r.control.value && r.permissionId);\n if (toAdd.length === 0 && toRemove.length === 0) { this.close(); return; }\n this.saving = true;\n try {\n for (const r of toAdd) { await this.service.addAppPermission(this.clientId, this.consumer.consumer_id, r.operation_id); }\n for (const r of toRemove) { await this.service.removeAppPermission(this.clientId, this.consumer.consumer_id, r.permissionId!); }\n this.close();\n } finally { this.saving = false; this.cdr.markForCheck(); }\n }\n}\n","<hm-drawer [open]=\"open\" (openChange)=\"open = $event\" [heading]=\"fmt(text.operationsOf, { group: consumer?.group_name ?? '' })\" (closed)=\"close()\">\n <div *ngIf=\"loading\" class=\"loading-row\">{{ text.loading }}</div>\n\n <div class=\"op-list\" *ngIf=\"!loading\">\n <label class=\"op-row\" *ngFor=\"let row of rows\">\n <input type=\"checkbox\" class=\"hm-check\" [formControl]=\"row.control\" />\n <span class=\"op-row__body\">\n <code>{{ row.identifier }}</code>\n <hm-tag [name]=\"row.method\" />\n <hm-tag [name]=\"row.level\" />\n <span class=\"op-row__desc muted\" *ngIf=\"row.description\">{{ row.description }}</span>\n </span>\n </label>\n </div>\n\n <div class=\"empty-state\" *ngIf=\"!loading && rows.length === 0\">\n <hm-icon shape=\"filter-grid\" size=\"xl\"></hm-icon>\n <p>{{ text.noOperations }}</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 { AutoServiceConsumerCreateComponent } from './modals/consumer-create/auto-service-consumer-create.component';\nimport { AutoServiceConsumerPermissionsComponent } from './modals/consumer-permissions/auto-service-consumer-permissions.component';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\ninterface ConsumerRow { consumer_id: string; group_name: string; group_type_name: string; }\n\n@Component({\n selector: 'spine-auto-service-app-access',\n standalone: true,\n imports: [CommonModule, ButtonComponent, IconComponent, DataGridComponent, AutoServiceConsumerCreateComponent, AutoServiceConsumerPermissionsComponent],\n templateUrl: './auto-service-app-access.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-app-access.component.scss'],\n})\nexport class AutoServiceAppAccessComponent 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 @Input() appId = '';\n entries: ConsumerRow[] = [];\n availableGroups: any[] = [];\n loading = false;\n showCreate = false;\n showPermissions = false;\n activeConsumer: ConsumerRow | null = null;\n constructor(private service: AutoServiceService) {}\n\n readonly rowId = (c: ConsumerRow) => c.consumer_id;\n readonly columns = computed<GridColumn<ConsumerRow>[]>(() => [\n { key: 'group_name', title: this.text.colGroup, value: (c) => c.group_name, sortable: true },\n { key: 'group_type_name', title: this.text.colType, value: (c) => c.group_type_name, sortable: true },\n ]);\n readonly rowActions = computed<DataGridRowAction<ConsumerRow>[]>(() => [\n { id: 'permissions', icon: 'shield', label: this.text.manageOperations },\n {\n id: 'delete', icon: 'trash', label: this.text.remove, danger: true, separatorAbove: true,\n confirm: (c) => ({ heading: this.text.confirmRemoveConsumerHeading, message: formatMessage(this.text.confirmRemoveConsumer, { group: c.group_name }) }),\n },\n ]);\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['appId']) { this.load(); }\n if (changes['clientId']) { this.loadGroups(); }\n }\n\n async load() {\n if (!this.appId) { this.entries = []; return; }\n this.loading = true;\n try { const res = await this.service.getAppConsumers(this.clientId, this.appId); this.entries = res.consumers; }\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;\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 deleteConsumer(consumerId: string) {\n if (await this.deletion.run(() => this.service.deleteAppConsumer(this.clientId, consumerId))) await this.load();\n }\n openPermissions(consumer: ConsumerRow) { this.activeConsumer = consumer; this.showPermissions = true; }\n\n onAction(e: DataGridActionTriggered<ConsumerRow>): void {\n if (e.action === 'permissions') this.openPermissions(e.row);\n if (e.action === 'delete') void this.deleteConsumer(e.row.consumer_id);\n }\n}\n","<hm-data-grid\n [columns]=\"columns()\"\n [rows]=\"entries\"\n [rowId]=\"rowId\"\n [caption]=\"text.appAccessCaption\"\n [loading]=\"loading\"\n [rowActions]=\"rowActions()\"\n (actionTriggered)=\"onAction($event)\"\n [emptyMessage]=\"text.noAppAccess\"\n>\n <hm-button dataGridActions icon=\"plus\" (clicked)=\"openCreate()\">{{ text.newAccess }}</hm-button>\n</hm-data-grid>\n\n<spine-auto-service-consumer-create\n [clientId]=\"clientId\"\n [appId]=\"appId\"\n [availableGroups]=\"availableGroups\"\n [open]=\"showCreate\"\n (openChange)=\"showCreate = $event\"\n (created)=\"onCreated()\">\n</spine-auto-service-consumer-create>\n\n<spine-auto-service-consumer-permissions\n *ngIf=\"activeConsumer\"\n [clientId]=\"clientId\"\n [appId]=\"appId\"\n [consumer]=\"activeConsumer\"\n [open]=\"showPermissions\"\n (openChange)=\"showPermissions = $event\">\n</spine-auto-service-consumer-permissions>\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n AlertComponent, ButtonComponent, CardComponent, ComboboxComponent, ComboboxOption, HermesDialogService, TabComponent, TabContentDirective,\n TabsComponent, TagComponent,\n} from '@trismegisto/angular';\nimport { formatMessage } from '@trismegisto/primitives';\nimport { AutoServiceDeleteFeedback } from '../../auto-service-delete';\nimport { AutoServiceService } from '../../auto-service.service';\nimport { AutoServiceAppsModalComponent } from './modals/apps-modal/auto-service-apps-modal.component';\nimport { AutoServiceAppOperationsComponent } from './tabs/app-operations/auto-service-app-operations.component';\nimport { AutoServiceAppAccessComponent } from './tabs/app-access/auto-service-app-access.component';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\ntype Tab = 'operations' | 'access';\n\n@Component({\n selector: 'spine-auto-service-apps',\n standalone: true,\n imports: [\n CommonModule, FormsModule, AlertComponent, ButtonComponent, CardComponent, ComboboxComponent, TabsComponent, TabComponent,\n TabContentDirective, TagComponent,\n AutoServiceAppsModalComponent, AutoServiceAppOperationsComponent, AutoServiceAppAccessComponent,\n ],\n templateUrl: './auto-service-apps.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-apps.component.scss'],\n})\nexport class AutoServiceAppsComponent 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 dialogs = inject(HermesDialogService);\n private readonly deletion = inject(AutoServiceDeleteFeedback);\n @Input() clientId = '';\n loadingOptions = false;\n appOptions: any[] = [];\n selectedAppId = '';\n app: any = null;\n searchingApp = false;\n modalApp: any = null;\n showAppModal = false;\n activeTab: Tab = 'operations';\n newSecret: string | null = null;\n constructor(private service: AutoServiceService) {}\n\n get appComboOptions(): ComboboxOption[] {\n return this.appOptions.map((a) => ({ value: a.id, label: a.name }));\n }\n\n // Trocar de client esconde o segredo recém-criado: ele é de uma aplicação do client anterior.\n ngOnChanges(changes: SimpleChanges) { if (changes['clientId']) { this.selectedAppId = ''; this.app = null; this.newSecret = null; this.loadAppOptions(); } }\n\n async loadAppOptions() {\n if (!this.clientId) { this.appOptions = []; return; }\n this.loadingOptions = true;\n try { const res = await this.service.getApps(this.clientId); this.appOptions = res.apps; }\n finally { this.loadingOptions = false; this.cdr.markForCheck(); }\n }\n\n async searchApp() {\n if (!this.selectedAppId) return;\n this.searchingApp = true;\n try { this.app = this.appOptions.find(a => a.id === this.selectedAppId) ?? null; this.activeTab = 'operations'; }\n finally { this.searchingApp = false; this.cdr.markForCheck(); }\n }\n\n setTab(tab: Tab) { this.activeTab = tab; }\n openCreate() { this.modalApp = null; this.showAppModal = true; }\n openEdit() { this.modalApp = this.app; this.showAppModal = true; }\n\n async onAppSaved(secret?: string) {\n if (secret) this.newSecret = secret;\n await this.loadAppOptions();\n if (this.app?.id) { this.app = this.appOptions.find(a => a.id === this.app.id) ?? this.app; }\n this.cdr.markForCheck();\n }\n\n async toggleEnabled() {\n if (!this.app) return;\n await this.service.updateApp(this.clientId, this.app.id, { enabled: !this.app.enabled });\n await this.loadAppOptions();\n this.app = this.appOptions.find(a => a.id === this.app.id) ?? this.app;\n this.cdr.markForCheck();\n }\n\n /** Pede confirmação; só então o DELETE (com toast de sucesso/erro). */\n async deleteApp() {\n const app = this.app;\n if (!app) return;\n const ok = await this.dialogs.confirm({\n heading: this.text.confirmDeleteAppHeading,\n message: formatMessage(this.text.confirmDeleteApp, { name: app.name ?? app.id }),\n confirmLabel: this.text.delete,\n danger: true,\n });\n if (!ok) return;\n if (!(await this.deletion.run(() => this.service.deleteApp(this.clientId, app.id)))) return;\n this.app = null; this.selectedAppId = ''; this.newSecret = null;\n await this.loadAppOptions();\n }\n}\n","<div class=\"as-stack\">\n <div class=\"as-actions\">\n <hm-button icon=\"plus\" (clicked)=\"openCreate()\">{{ text.register }}</hm-button>\n </div>\n\n <hm-alert *ngIf=\"newSecret\" variant=\"success\" [closable]=\"true\" (closed)=\"newSecret = null\">\n {{ text.secretCreated }} <strong>{{ newSecret }}</strong>\n </hm-alert>\n\n <hm-card>\n <div class=\"as-field-row\">\n <hm-combobox [label]=\"text.pickApp\" [options]=\"appComboOptions\"\n [value]=\"selectedAppId\" (valueChange)=\"selectedAppId = $event\" [disabled]=\"loadingOptions\">\n </hm-combobox>\n <hm-button [disabled]=\"!selectedAppId || searchingApp\" (clicked)=\"searchApp()\" icon=\"search\">{{ text.search }}</hm-button>\n </div>\n </hm-card>\n\n <ng-container *ngIf=\"app\">\n <hm-card>\n <div class=\"as-summary\">\n <div class=\"as-summary__info\">\n <p class=\"as-summary__title\">\n {{ app.name }}\n <hm-tag [name]=\"app.enabled ? text.active : text.inactive\" [color]=\"app.enabled ? 'success' : 'danger'\" />\n </p>\n <p class=\"as-summary__detail\">{{ app.allowed_grants?.join(', ') }}</p>\n </div>\n <div class=\"as-actions\">\n <hm-button emphasis=\"medium\" icon=\"pencil\" (clicked)=\"openEdit()\">{{ text.edit }}</hm-button>\n <hm-button emphasis=\"medium\" (clicked)=\"toggleEnabled()\">{{ app.enabled ? text.disable : text.enable }}</hm-button>\n <hm-button intent=\"danger\" emphasis=\"medium\" icon=\"trash\" (clicked)=\"deleteApp()\">{{ text.delete }}</hm-button>\n </div>\n </div>\n </hm-card>\n\n <!-- Conteúdo de cada aba é preguiçoso (*hmTabContent): só busca na API quando a aba é aberta. -->\n <hm-tabs [label]=\"text.appSections\" [active]=\"activeTab\" (activeChange)=\"setTab($any($event))\">\n <hm-tab id=\"operations\" [label]=\"text.tabOperations\">\n <spine-auto-service-app-operations *hmTabContent [clientId]=\"clientId\" [appId]=\"app.id\"></spine-auto-service-app-operations>\n </hm-tab>\n <hm-tab id=\"access\" [label]=\"text.tabAccesses\">\n <spine-auto-service-app-access *hmTabContent [clientId]=\"clientId\" [appId]=\"app.id\"></spine-auto-service-app-access>\n </hm-tab>\n </hm-tabs>\n </ng-container>\n</div>\n\n<spine-auto-service-apps-modal\n [app]=\"modalApp\"\n [clientId]=\"clientId\"\n [open]=\"showAppModal\"\n (openChange)=\"showAppModal = $event\"\n (saved)=\"onAppSaved($event)\">\n</spine-auto-service-apps-modal>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AutoServiceClient, AutoServiceClientPickerComponent } from './client-picker/auto-service-client-picker.component';\nimport { AutoServiceAppsComponent } from './tabs/auto-service-apps/auto-service-apps.component';\n\n/**\n * Página \"Aplicações\" do auto-serviço: o seletor de client e as aplicações dele. A auditoria tem página\n * própria no menu Administração (`AUTO_SERVICE_SCREENS.audit`) — a aba que existia aqui duplicava a tela.\n */\n@Component({\n selector: 'spine-auto-service',\n standalone: true,\n imports: [CommonModule, AutoServiceClientPickerComponent, AutoServiceAppsComponent],\n templateUrl: './auto-service.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service.component.scss'],\n})\nexport class AutoServiceComponent {\n client: AutoServiceClient | null = null;\n\n onClientChange(c: AutoServiceClient | null) { this.client = c; }\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 <spine-auto-service-apps *ngIf=\"client as c\" [clientId]=\"c.id\"></spine-auto-service-apps>\n</div>\n"],"names":["i1.AutoServiceService","i1"],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ // Especificação técnica da tela Cliente do auto-serviço (`RouteDocument.loadTechnical`), em Markdown. Módulo próprio,
2
+ // carregado só pelo `import()` de `AUTO_SERVICE_DOCUMENTS`: vira um chunk à parte no FESM e fica fora do
3
+ // bundle inicial. Não importe estaticamente nem reexporte no `public-api.ts`.
4
+ var client_technical = `# Cliente — especificação técnica
5
+
6
+ Tela \`AutoServiceClientComponent\` (seletor de client + abas Rotas, Roteadores e Acesso), ligada ao router de
7
+ template \`AUTO_SERVICE_CLIENT_TEMPLATE_ROUTER_ID\` (\`ad100003-…\`). Fala com o argos-admin-server em
8
+ \`{adminApi}/auto-service\` (\`AutoServiceService\`), com o token no cabeçalho \`x-access-token\`.
9
+
10
+ ## Endpoints
11
+
12
+ | Ação | Endpoint |
13
+ | --- | --- |
14
+ | Rotas do client (\`web.routes\`) | \`GET / POST /auto-service/:clientId/routes\`, \`PUT / DELETE .../routes/:routeId\` |
15
+ | Roteadores do client (\`web.router\`) | \`GET / POST /auto-service/:clientId/routers\`, \`PUT / DELETE .../routers/:routerId\` |
16
+ | Ordem dos itens do menu | \`PATCH /auto-service/:clientId/routers/reorder\` |
17
+ | Acessos (grupo ↔ client) | \`GET / POST /auto-service/:clientId/access\` (\`{ group_id }\`), \`DELETE .../access/:accessId\` |
18
+ | Guards de um acesso | \`GET / POST /auto-service/:clientId/access/:accessId/guards\` (\`{ router_id }\`), \`DELETE .../guards/:guardId\` |
19
+ | Grupos oferecidos em "Novo acesso" | \`GET /auto-service/:clientId/groups\` |
20
+
21
+ ## Regras
22
+
23
+ - Excluir rota, roteador e acesso usa o \`confirm\` da ação no \`hm-data-grid\` (diálogo de perigo com o nome do item);
24
+ o \`DELETE\` só sai depois do sim, com toast de sucesso/erro (\`AutoServiceDeleteFeedback\`). Ids nos caminhos vão
25
+ codificados (\`urlPath\`).
26
+
27
+ - **Autorização** (\`clientAdminGuard\`): grupo que administra o projeto do client + crachá Administrador ativo. O
28
+ \`client_id\` dos controllers vem sempre da URL. Access, grupo ou router de outro client responde 404.
29
+ - **Template** (\`templated\`, cópia materializada pelo sync do template): a tela tira editar/excluir da linha e mostra
30
+ o selo; o servidor recusa \`PUT\`/\`DELETE\` com 403. Reordenar e configurar guards continuam liberados (ordem e acesso
31
+ são do client; o sync não sobrescreve ordem).
32
+ - **Rota protegida** (\`excludable: false\`): sem "Excluir" na tela (o servidor responde 409 no \`DELETE\`) e a caixa
33
+ "Excluível" desabilitada na edição; o servidor recusa com 403 um \`PUT\` que tente \`excludable: true\`.
34
+ - **Caminho da rota**: vazio ou \`^[a-z]+(?:-[a-z]+)*$\` (\`routePathValidator\`, mesma regra do \`route-path.ts\` do
35
+ admin-server, que é quem recusa). Um \`/\` dentro do caminho desalinha a resolução por nível do \`ViewGuard\`.
36
+ - **Caminho montado**: junta os \`path\` das rotas de \`header_id\`, \`navigation_id\`, \`menu_id\`, \`item_id\`,
37
+ \`submenu_id\` e \`page_id\`, nessa ordem.
38
+ - **Roteador**: níveis vazios vão como \`null\`; descrição em branco vai como \`null\`; \`is_private\` começa \`true\`.
39
+ - **Guards**: a árvore usa só roteadores com \`is_private\` e \`allowed_type_ids\` vazio ou contendo o \`group_type_id\`
40
+ do acesso; pastas pelos níveis do roteador, folhas com o guard atual marcado. **Confirmar alterações** grava só a
41
+ diferença: primeiro os guards novos, depois as retiradas.
42
+ - As abas são preguiçosas (\`*hmTabContent\`): cada uma só busca ao ser aberta.
43
+ `;
44
+
45
+ export { client_technical as default };
46
+ //# sourceMappingURL=trismegisto-spine-auto-service-client.technical-BHWhpyWv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trismegisto-spine-auto-service-client.technical-BHWhpyWv.mjs","sources":["../../../projects/ui/auto-service/src/docs/client.technical.ts"],"sourcesContent":["// Especificação técnica da tela Cliente do auto-serviço (`RouteDocument.loadTechnical`), 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 `# Cliente — especificação técnica\n\nTela \\`AutoServiceClientComponent\\` (seletor de client + abas Rotas, Roteadores e Acesso), ligada ao router de\ntemplate \\`AUTO_SERVICE_CLIENT_TEMPLATE_ROUTER_ID\\` (\\`ad100003-…\\`). Fala com o argos-admin-server em\n\\`{adminApi}/auto-service\\` (\\`AutoServiceService\\`), com o token no cabeçalho \\`x-access-token\\`.\n\n## Endpoints\n\n| Ação | Endpoint |\n| --- | --- |\n| Rotas do client (\\`web.routes\\`) | \\`GET / POST /auto-service/:clientId/routes\\`, \\`PUT / DELETE .../routes/:routeId\\` |\n| Roteadores do client (\\`web.router\\`) | \\`GET / POST /auto-service/:clientId/routers\\`, \\`PUT / DELETE .../routers/:routerId\\` |\n| Ordem dos itens do menu | \\`PATCH /auto-service/:clientId/routers/reorder\\` |\n| Acessos (grupo ↔ client) | \\`GET / POST /auto-service/:clientId/access\\` (\\`{ group_id }\\`), \\`DELETE .../access/:accessId\\` |\n| Guards de um acesso | \\`GET / POST /auto-service/:clientId/access/:accessId/guards\\` (\\`{ router_id }\\`), \\`DELETE .../guards/:guardId\\` |\n| Grupos oferecidos em \"Novo acesso\" | \\`GET /auto-service/:clientId/groups\\` |\n\n## Regras\n\n- Excluir rota, roteador e acesso usa o \\`confirm\\` da ação no \\`hm-data-grid\\` (diálogo de perigo com o nome do item);\n o \\`DELETE\\` só sai depois do sim, com toast de sucesso/erro (\\`AutoServiceDeleteFeedback\\`). Ids nos caminhos vão\n codificados (\\`urlPath\\`).\n\n- **Autorização** (\\`clientAdminGuard\\`): grupo que administra o projeto do client + crachá Administrador ativo. O\n \\`client_id\\` dos controllers vem sempre da URL. Access, grupo ou router de outro client responde 404.\n- **Template** (\\`templated\\`, cópia materializada pelo sync do template): a tela tira editar/excluir da linha e mostra\n o selo; o servidor recusa \\`PUT\\`/\\`DELETE\\` com 403. Reordenar e configurar guards continuam liberados (ordem e acesso\n são do client; o sync não sobrescreve ordem).\n- **Rota protegida** (\\`excludable: false\\`): sem \"Excluir\" na tela (o servidor responde 409 no \\`DELETE\\`) e a caixa\n \"Excluível\" desabilitada na edição; o servidor recusa com 403 um \\`PUT\\` que tente \\`excludable: true\\`.\n- **Caminho da rota**: vazio ou \\`^[a-z]+(?:-[a-z]+)*$\\` (\\`routePathValidator\\`, mesma regra do \\`route-path.ts\\` do\n admin-server, que é quem recusa). Um \\`/\\` dentro do caminho desalinha a resolução por nível do \\`ViewGuard\\`.\n- **Caminho montado**: junta os \\`path\\` das rotas de \\`header_id\\`, \\`navigation_id\\`, \\`menu_id\\`, \\`item_id\\`,\n \\`submenu_id\\` e \\`page_id\\`, nessa ordem.\n- **Roteador**: níveis vazios vão como \\`null\\`; descrição em branco vai como \\`null\\`; \\`is_private\\` começa \\`true\\`.\n- **Guards**: a árvore usa só roteadores com \\`is_private\\` e \\`allowed_type_ids\\` vazio ou contendo o \\`group_type_id\\`\n do acesso; pastas pelos níveis do roteador, folhas com o guard atual marcado. **Confirmar alterações** grava só a\n diferença: primeiro os guards novos, depois as retiradas.\n- As abas são preguiçosas (\\`*hmTabContent\\`): cada uma só busca ao ser aberta.\n`;\n"],"names":[],"mappings":"AAAA;AACA;AACA;AACA,uBAAe,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCd;;"}