@trismegisto/spine 3.3.4 → 3.3.6

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 (70) hide show
  1. package/README.md +4 -2
  2. package/fesm2022/trismegisto-spine-audit.mjs +20 -2
  3. package/fesm2022/trismegisto-spine-audit.mjs.map +1 -1
  4. package/fesm2022/{trismegisto-spine-auto-service-auto-service-audit.component-D8HUpZtA.mjs → trismegisto-spine-auto-service-auto-service-audit.component-CszXNvSs.mjs} +2 -2
  5. package/fesm2022/{trismegisto-spine-auto-service-auto-service-audit.component-D8HUpZtA.mjs.map → trismegisto-spine-auto-service-auto-service-audit.component-CszXNvSs.mjs.map} +1 -1
  6. package/fesm2022/{trismegisto-spine-auto-service-auto-service-client-picker.component-NawbfdLW.mjs → trismegisto-spine-auto-service-auto-service-client-picker.component-CknHYd_P.mjs} +7 -3
  7. package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-CknHYd_P.mjs.map +1 -0
  8. package/fesm2022/{trismegisto-spine-auto-service-auto-service-client.component-kAXaCM5W.mjs → trismegisto-spine-auto-service-auto-service-client.component-Dg3mJrpz.mjs} +24 -5
  9. package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-Dg3mJrpz.mjs.map +1 -0
  10. package/fesm2022/{trismegisto-spine-auto-service-auto-service-delete-CV_t9vxm.mjs → trismegisto-spine-auto-service-auto-service-delete-BWY5G-xe.mjs} +2 -2
  11. package/fesm2022/trismegisto-spine-auto-service-auto-service-delete-BWY5G-xe.mjs.map +1 -0
  12. package/fesm2022/{trismegisto-spine-auto-service-auto-service-groups.component-DE2QIGRH.mjs → trismegisto-spine-auto-service-auto-service-groups.component-DQqzfq0M.mjs} +21 -5
  13. package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-DQqzfq0M.mjs.map +1 -0
  14. package/fesm2022/{trismegisto-spine-auto-service-auto-service-login-attempts.component-DoyhkSYc.mjs → trismegisto-spine-auto-service-auto-service-login-attempts.component-CjxKYv-y.mjs} +2 -2
  15. package/fesm2022/{trismegisto-spine-auto-service-auto-service-login-attempts.component-DoyhkSYc.mjs.map → trismegisto-spine-auto-service-auto-service-login-attempts.component-CjxKYv-y.mjs.map} +1 -1
  16. package/fesm2022/{trismegisto-spine-auto-service-auto-service-news-page.component-BW7BJ0oD.mjs → trismegisto-spine-auto-service-auto-service-news-page.component-Cbaszx4F.mjs} +21 -5
  17. package/fesm2022/trismegisto-spine-auto-service-auto-service-news-page.component-Cbaszx4F.mjs.map +1 -0
  18. package/fesm2022/{trismegisto-spine-auto-service-auto-service-ratings-page.component-CHPU-QLJ.mjs → trismegisto-spine-auto-service-auto-service-ratings-page.component-CJRIDWXi.mjs} +22 -4
  19. package/fesm2022/trismegisto-spine-auto-service-auto-service-ratings-page.component-CJRIDWXi.mjs.map +1 -0
  20. package/fesm2022/{trismegisto-spine-auto-service-auto-service-suggestions-page.component-CkiCTmXD.mjs → trismegisto-spine-auto-service-auto-service-suggestions-page.component-Bu8YX554.mjs} +46 -4
  21. package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-Bu8YX554.mjs.map +1 -0
  22. package/fesm2022/{trismegisto-spine-auto-service-auto-service.component-D58Ht9PH.mjs → trismegisto-spine-auto-service-auto-service.component-BLkLHp6J.mjs} +23 -5
  23. package/fesm2022/trismegisto-spine-auto-service-auto-service.component-BLkLHp6J.mjs.map +1 -0
  24. package/fesm2022/{trismegisto-spine-auto-service-home.component-9WvXOH3l.mjs → trismegisto-spine-auto-service-home.component-BYMiTZp6.mjs} +6 -3
  25. package/fesm2022/trismegisto-spine-auto-service-home.component-BYMiTZp6.mjs.map +1 -0
  26. package/fesm2022/trismegisto-spine-auto-service.mjs +10 -10
  27. package/fesm2022/trismegisto-spine-auto-service.mjs.map +1 -1
  28. package/fesm2022/trismegisto-spine-layout-ai-agent-chat.component-C5JljPYD.mjs +294 -0
  29. package/fesm2022/trismegisto-spine-layout-ai-agent-chat.component-C5JljPYD.mjs.map +1 -0
  30. package/fesm2022/{trismegisto-spine-layout-suggestions-page.component-CEKMqera.mjs → trismegisto-spine-layout-suggestions-page.component-Bh3VGlOR.mjs} +18 -4
  31. package/fesm2022/trismegisto-spine-layout-suggestions-page.component-Bh3VGlOR.mjs.map +1 -0
  32. package/fesm2022/{trismegisto-spine-layout-trismegisto-spine-layout-DiAfxIGP.mjs → trismegisto-spine-layout-trismegisto-spine-layout-B47sMo_4.mjs} +1012 -57
  33. package/fesm2022/trismegisto-spine-layout-trismegisto-spine-layout-B47sMo_4.mjs.map +1 -0
  34. package/fesm2022/trismegisto-spine-layout.mjs +1 -1
  35. package/fesm2022/trismegisto-spine-modal.mjs +4 -1
  36. package/fesm2022/trismegisto-spine-modal.mjs.map +1 -1
  37. package/fesm2022/trismegisto-spine-notification.mjs +1 -1
  38. package/fesm2022/trismegisto-spine-notification.mjs.map +1 -1
  39. package/fesm2022/trismegisto-spine-routing.mjs +2 -2
  40. package/fesm2022/trismegisto-spine-routing.mjs.map +1 -1
  41. package/fesm2022/trismegisto-spine-shell.mjs +2 -1
  42. package/fesm2022/trismegisto-spine-shell.mjs.map +1 -1
  43. package/fesm2022/trismegisto-spine-side-panel.mjs +4 -1
  44. package/fesm2022/trismegisto-spine-side-panel.mjs.map +1 -1
  45. package/fesm2022/trismegisto-spine.mjs +200 -69
  46. package/fesm2022/trismegisto-spine.mjs.map +1 -1
  47. package/package.json +6 -6
  48. package/types/trismegisto-spine-audit.d.ts +11 -4
  49. package/types/trismegisto-spine-audit.d.ts.map +1 -1
  50. package/types/trismegisto-spine-auto-service.d.ts.map +1 -1
  51. package/types/trismegisto-spine-layout.d.ts +124 -105
  52. package/types/trismegisto-spine-layout.d.ts.map +1 -1
  53. package/types/trismegisto-spine-modal.d.ts +2 -1
  54. package/types/trismegisto-spine-modal.d.ts.map +1 -1
  55. package/types/trismegisto-spine-shell.d.ts.map +1 -1
  56. package/types/trismegisto-spine-side-panel.d.ts +2 -1
  57. package/types/trismegisto-spine-side-panel.d.ts.map +1 -1
  58. package/types/trismegisto-spine.d.ts +104 -28
  59. package/types/trismegisto-spine.d.ts.map +1 -1
  60. package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-NawbfdLW.mjs.map +0 -1
  61. package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-kAXaCM5W.mjs.map +0 -1
  62. package/fesm2022/trismegisto-spine-auto-service-auto-service-delete-CV_t9vxm.mjs.map +0 -1
  63. package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-DE2QIGRH.mjs.map +0 -1
  64. package/fesm2022/trismegisto-spine-auto-service-auto-service-news-page.component-BW7BJ0oD.mjs.map +0 -1
  65. package/fesm2022/trismegisto-spine-auto-service-auto-service-ratings-page.component-CHPU-QLJ.mjs.map +0 -1
  66. package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-CkiCTmXD.mjs.map +0 -1
  67. package/fesm2022/trismegisto-spine-auto-service-auto-service.component-D58Ht9PH.mjs.map +0 -1
  68. package/fesm2022/trismegisto-spine-auto-service-home.component-9WvXOH3l.mjs.map +0 -1
  69. package/fesm2022/trismegisto-spine-layout-suggestions-page.component-CEKMqera.mjs.map +0 -1
  70. package/fesm2022/trismegisto-spine-layout-trismegisto-spine-layout-DiAfxIGP.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"trismegisto-spine-side-panel.mjs","sources":["../../../projects/ui/side-panel/src/side-panel.service.ts","../../../projects/ui/side-panel/src/side-panel.component.ts","../../../projects/ui/side-panel/src/side-panel.component.html","../../../projects/ui/side-panel/src/trismegisto-spine-side-panel.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HermesLoadingState } from '@trismegisto/angular';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { SidePanelConfig } from './side-panel.types';\n\n@Injectable({ providedIn: 'root' })\nexport class SidePanelService {\n private _visible = new BehaviorSubject<boolean>(false);\n public readonly visible$: Observable<boolean> = this._visible.asObservable();\n\n private _state = new BehaviorSubject<HermesLoadingState>(HermesLoadingState.DEFAULT);\n public readonly state$: Observable<HermesLoadingState> = this._state.asObservable();\n\n private _config: SidePanelConfig | null = null;\n public get config(): SidePanelConfig | null {\n return this._config;\n }\n\n private _result$: Subject<any> | null = null;\n\n open<TResult = any, TData = any>(config: SidePanelConfig<TData>): Observable<TResult | null> {\n // Abrir outro antes de responder o anterior cancela o anterior: quem o abriu recebe `null` (como no\n // `close`) e o observable completa, em vez de ficar pendurado para sempre.\n this._result$?.next(null);\n this._result$?.complete();\n this._config = config;\n this._state.next(HermesLoadingState.DEFAULT);\n this._result$ = new Subject<TResult | null>();\n this._visible.next(true);\n return this._result$.asObservable().pipe(take(1));\n }\n\n confirm(result: any): void {\n this._result$?.next(result);\n this._result$?.complete();\n this.dismiss();\n }\n\n close(): void {\n this._result$?.next(null);\n this._result$?.complete();\n this.dismiss();\n }\n\n setState(state: HermesLoadingState): void {\n this._state.next(state);\n }\n\n private dismiss(): void {\n this._visible.next(false);\n this._config = null;\n this._result$ = null;\n this._state.next(HermesLoadingState.DEFAULT);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, ComponentRef, DestroyRef, OnInit, ViewChild, ViewContainerRef, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ButtonComponent, HERMES_MESSAGES, DrawerComponent, HermesLoadingState, ModalSize } from '@trismegisto/angular';\nimport { ModalContent } from '@trismegisto/spine/modal';\nimport { SidePanelConfig } from './side-panel.types';\nimport { SidePanelService } from './side-panel.service';\n\n/** `SidePanelConfig.size` manteve os valores do spine antigo (sm/md/lg/xl/full) por\n * compatibilidade de API; o `hm-drawer` novo só tem 3 tamanhos. */\nfunction toHermesSize(size: SidePanelConfig['size']): ModalSize {\n switch (size) {\n case 'sm': return 'small';\n case 'lg':\n case 'xl':\n case 'full': return 'large';\n default: return 'medium';\n }\n}\n\n@Component({\n selector: 'spine-side-panel',\n imports: [CommonModule, DrawerComponent, ButtonComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './side-panel.component.html',\n})\nexport class SidePanelComponent implements OnInit {\n /** Rótulos dos botões padrão, do catálogo do Hermes (pt-BR/en/es). */\n protected readonly dialogText = inject(HERMES_MESSAGES).dialog;\n\n @ViewChild('content', { read: ViewContainerRef }) private content!: ViewContainerRef;\n\n visible = false;\n config: SidePanelConfig | null = null;\n state: HermesLoadingState = HermesLoadingState.DEFAULT;\n\n protected readonly HermesLoadingState = HermesLoadingState;\n protected readonly toHermesSize = toHermesSize;\n\n private contentRef: ComponentRef<ModalContent> | null = null;\n private readonly destroyRef = inject(DestroyRef);\n\n constructor(private sidePanelService: SidePanelService, private cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.sidePanelService.visible$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((visible) => {\n this.visible = visible;\n this.config = this.sidePanelService.config;\n if (visible) {\n this.loadComponent();\n } else {\n this.content?.clear();\n this.contentRef = null;\n }\n this.cdr.markForCheck();\n });\n\n this.sidePanelService.state$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((state) => {\n this.state = state;\n this.cdr.markForCheck();\n });\n }\n\n get canConfirm(): boolean {\n const instance = this.contentRef?.instance;\n return !instance?.isValid || instance.isValid();\n }\n\n private loadComponent(): void {\n this.content.clear();\n if (this.config?.component) {\n this.contentRef = this.content.createComponent(this.config.component);\n if (this.config.data !== undefined) {\n this.contentRef.setInput('data', this.config.data);\n }\n }\n }\n\n confirm(): void {\n if (!this.canConfirm) return;\n const result = this.contentRef?.instance?.getResult ? this.contentRef.instance.getResult() : true;\n this.sidePanelService.confirm(result);\n }\n\n dismiss(): void {\n this.sidePanelService.close();\n }\n\n onLoadingStateChange(state: HermesLoadingState): void {\n this.sidePanelService.setState(state);\n }\n}\n","<hm-drawer\n [open]=\"visible\"\n [heading]=\"config?.title || ''\"\n [size]=\"toHermesSize(config?.size)\"\n [closable]=\"config?.closable ?? true\"\n (closed)=\"dismiss()\"\n>\n <ng-container #content />\n <div *ngIf=\"config?.text && !config?.component\">{{ config?.text }}</div>\n\n <ng-container footer *ngIf=\"config?.showActions !== false\">\n <hm-button emphasis=\"medium\" (clicked)=\"dismiss()\">{{ dialogText.cancel }}</hm-button>\n <hm-button\n intent=\"success\"\n [disabled]=\"!canConfirm\"\n [loadingState]=\"state\"\n (loadingStateChange)=\"onLoadingStateChange($event)\"\n (clicked)=\"confirm()\"\n >{{ dialogText.confirm }}</hm-button>\n </ng-container>\n</hm-drawer>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SidePanelService"],"mappings":"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"}
1
+ {"version":3,"file":"trismegisto-spine-side-panel.mjs","sources":["../../../projects/ui/side-panel/src/side-panel.service.ts","../../../projects/ui/side-panel/src/side-panel.component.ts","../../../projects/ui/side-panel/src/side-panel.component.html","../../../projects/ui/side-panel/src/trismegisto-spine-side-panel.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HermesLoadingState } from '@trismegisto/primitives/loading-state';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { SidePanelConfig } from './side-panel.types';\n\n@Injectable({ providedIn: 'root' })\nexport class SidePanelService {\n private _visible = new BehaviorSubject<boolean>(false);\n public readonly visible$: Observable<boolean> = this._visible.asObservable();\n\n private _state = new BehaviorSubject<HermesLoadingState>(HermesLoadingState.DEFAULT);\n public readonly state$: Observable<HermesLoadingState> = this._state.asObservable();\n\n private _config: SidePanelConfig | null = null;\n public get config(): SidePanelConfig | null {\n return this._config;\n }\n\n private _result$: Subject<any> | null = null;\n\n open<TResult = any, TData = any>(config: SidePanelConfig<TData>): Observable<TResult | null> {\n // Abrir outro antes de responder o anterior cancela o anterior: quem o abriu recebe `null` (como no\n // `close`) e o observable completa, em vez de ficar pendurado para sempre.\n this._result$?.next(null);\n this._result$?.complete();\n this._config = config;\n this._state.next(HermesLoadingState.DEFAULT);\n this._result$ = new Subject<TResult | null>();\n this._visible.next(true);\n return this._result$.asObservable().pipe(take(1));\n }\n\n confirm(result: any): void {\n this._result$?.next(result);\n this._result$?.complete();\n this.dismiss();\n }\n\n close(): void {\n this._result$?.next(null);\n this._result$?.complete();\n this.dismiss();\n }\n\n setState(state: HermesLoadingState): void {\n this._state.next(state);\n }\n\n private dismiss(): void {\n this._visible.next(false);\n this._config = null;\n this._result$ = null;\n this._state.next(HermesLoadingState.DEFAULT);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, ComponentRef, DestroyRef, OnInit, ViewChild, ViewContainerRef, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ButtonComponent } from '@trismegisto/angular/button';\nimport { DrawerComponent } from '@trismegisto/angular/drawer';\nimport { HERMES_MESSAGES } from '@trismegisto/angular/i18n';\nimport { ModalSize } from '@trismegisto/primitives/classes';\nimport { HermesLoadingState } from '@trismegisto/primitives/loading-state';\nimport { ModalContent } from '@trismegisto/spine/modal';\nimport { SidePanelConfig } from './side-panel.types';\nimport { SidePanelService } from './side-panel.service';\n\n/** `SidePanelConfig.size` manteve os valores do spine antigo (sm/md/lg/xl/full) por\n * compatibilidade de API; o `hm-drawer` novo só tem 3 tamanhos. */\nfunction toHermesSize(size: SidePanelConfig['size']): ModalSize {\n switch (size) {\n case 'sm': return 'small';\n case 'lg':\n case 'xl':\n case 'full': return 'large';\n default: return 'medium';\n }\n}\n\n@Component({\n selector: 'spine-side-panel',\n imports: [CommonModule, DrawerComponent, ButtonComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './side-panel.component.html',\n})\nexport class SidePanelComponent implements OnInit {\n /** Rótulos dos botões padrão, do catálogo do Hermes (pt-BR/en/es). */\n protected readonly dialogText = inject(HERMES_MESSAGES).dialog;\n\n @ViewChild('content', { read: ViewContainerRef }) private content!: ViewContainerRef;\n\n visible = false;\n config: SidePanelConfig | null = null;\n state: HermesLoadingState = HermesLoadingState.DEFAULT;\n\n protected readonly HermesLoadingState = HermesLoadingState;\n protected readonly toHermesSize = toHermesSize;\n\n private contentRef: ComponentRef<ModalContent> | null = null;\n private readonly destroyRef = inject(DestroyRef);\n\n constructor(private sidePanelService: SidePanelService, private cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.sidePanelService.visible$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((visible) => {\n this.visible = visible;\n this.config = this.sidePanelService.config;\n if (visible) {\n this.loadComponent();\n } else {\n this.content?.clear();\n this.contentRef = null;\n }\n this.cdr.markForCheck();\n });\n\n this.sidePanelService.state$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((state) => {\n this.state = state;\n this.cdr.markForCheck();\n });\n }\n\n get canConfirm(): boolean {\n const instance = this.contentRef?.instance;\n return !instance?.isValid || instance.isValid();\n }\n\n private loadComponent(): void {\n this.content.clear();\n if (this.config?.component) {\n this.contentRef = this.content.createComponent(this.config.component);\n if (this.config.data !== undefined) {\n this.contentRef.setInput('data', this.config.data);\n }\n }\n }\n\n confirm(): void {\n if (!this.canConfirm) return;\n const result = this.contentRef?.instance?.getResult ? this.contentRef.instance.getResult() : true;\n this.sidePanelService.confirm(result);\n }\n\n dismiss(): void {\n this.sidePanelService.close();\n }\n\n onLoadingStateChange(state: HermesLoadingState): void {\n this.sidePanelService.setState(state);\n }\n}\n","<hm-drawer\n [open]=\"visible\"\n [heading]=\"config?.title || ''\"\n [size]=\"toHermesSize(config?.size)\"\n [closable]=\"config?.closable ?? true\"\n (closed)=\"dismiss()\"\n>\n <ng-container #content />\n <div *ngIf=\"config?.text && !config?.component\">{{ config?.text }}</div>\n\n <ng-container footer *ngIf=\"config?.showActions !== false\">\n <hm-button emphasis=\"medium\" (clicked)=\"dismiss()\">{{ dialogText.cancel }}</hm-button>\n <hm-button\n intent=\"success\"\n [disabled]=\"!canConfirm\"\n [loadingState]=\"state\"\n (loadingStateChange)=\"onLoadingStateChange($event)\"\n (clicked)=\"confirm()\"\n >{{ dialogText.confirm }}</hm-button>\n </ng-container>\n</hm-drawer>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SidePanelService"],"mappings":"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"}
@@ -1,10 +1,28 @@
1
- import { AlertComponent, ButtonComponent, DrawerComponent, IconButtonComponent, IconComponent, MenuButtonComponent, MenuComponent, ModalComponent, SidebarComponent, SidebarGroupComponent, SidebarLinkComponent, SidebarNodeComponent, ToastStackComponent, HermesThemeService, HERMES_THEME_CONFIG, HERMES_SIDEBAR_CONFIG, HERMES_WORKSPACE_PERSISTENCE_CONFIG, provideHermesIcons, provideHermesIconLoader, HermesShortcutService, HermesI18nService, HermesZoomService, HermesMotionService, liveCatalog } from '@trismegisto/angular';
1
+ import { AlertComponent } from '@trismegisto/angular/alert';
2
+ import { ButtonComponent } from '@trismegisto/angular/button';
3
+ import { DrawerComponent } from '@trismegisto/angular/drawer';
4
+ import { IconComponent, provideHermesIcons, provideHermesIconLoader } from '@trismegisto/angular/icon';
5
+ import { IconButtonComponent } from '@trismegisto/angular/icon-button';
6
+ import { MenuComponent } from '@trismegisto/angular/menu';
7
+ import { MenuButtonComponent } from '@trismegisto/angular/menu-button';
8
+ import { ModalComponent } from '@trismegisto/angular/modal';
9
+ import { SidebarComponent, SidebarGroupComponent, SidebarLinkComponent, SidebarNodeComponent, HERMES_SIDEBAR_CONFIG } from '@trismegisto/angular/sidebar';
10
+ import { ToastStackComponent } from '@trismegisto/angular/toast';
2
11
  import { isPlatformBrowser, DOCUMENT } from '@angular/common';
3
12
  import * as i0 from '@angular/core';
4
13
  import { InjectionToken, inject, effect, PLATFORM_ID, Inject, Optional, Injectable, makeEnvironmentProviders, provideAppInitializer, NgZone, signal, computed, untracked, DestroyRef } from '@angular/core';
5
- import { extendThemeConfig, DEFAULT_THEME_CONFIG, normalizeTextScale, normalizeMotionPreference, mergeCatalog } from '@trismegisto/primitives';
6
- export { loadRuntimeConfig } from '@trismegisto/primitives';
14
+ import { HermesThemeService, HERMES_THEME_CONFIG } from '@trismegisto/angular/theme';
15
+ import { HERMES_WORKSPACE_PERSISTENCE_CONFIG } from '@trismegisto/angular/workspace-persistence';
16
+ import { extendThemeConfig, DEFAULT_THEME_CONFIG } from '@trismegisto/primitives/theme';
17
+ import { HermesI18nService, liveCatalog } from '@trismegisto/angular/i18n';
18
+ import { HermesMotionService } from '@trismegisto/angular/motion';
19
+ import { HermesShortcutService } from '@trismegisto/angular/shortcut-list';
20
+ import { HermesZoomService } from '@trismegisto/angular/zoom';
21
+ import { normalizeMotionPreference } from '@trismegisto/primitives/motion';
22
+ import { normalizeTextScale } from '@trismegisto/primitives/zoom';
7
23
  import { AuthorizationService } from '@orfeu/angular/core';
24
+ export { loadRuntimeConfig } from '@trismegisto/primitives/runtime-config';
25
+ import { mergeCatalog } from '@trismegisto/primitives/messages';
8
26
 
9
27
  /** `router_id` da tela (nó 'page'); `null` em nó de grupo. */
10
28
  function routerIdOf(route) {
@@ -313,10 +331,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.24", ngImpo
313
331
  */
314
332
  /** Convenção quando o app não configura `logo`: `src/assets/images/logo.svg` servido em `assets/images/`. */
315
333
  const SPINE_DEFAULT_LOGO = 'assets/images/logo.svg';
334
+ /** Rosto do agente de IA (`SpineAiAgentConfig.avatar`): quadrado, em `src/assets/images/`. */
335
+ const SPINE_DEFAULT_AGENT_AVATAR = 'assets/images/agent/avatar.png';
336
+ /** Imagem do agente de IA (`SpineAiAgentConfig.image`): de qualquer proporção, em `src/assets/images/`. */
337
+ const SPINE_DEFAULT_AGENT_IMAGE = 'assets/images/agent/figure.png';
316
338
  /** Normaliza `SpineConfig.logo`: omitido → convenção; `false`/vazio → sem imagem (`null`). */
317
339
  function resolveSpineLogo(logo) {
340
+ return resolveSpineImage(logo, SPINE_DEFAULT_LOGO);
341
+ }
342
+ /** Normaliza uma imagem de marca do app: omitida → `fallback`, a convenção dela; `false`/vazio → sem imagem (`null`). */
343
+ function resolveSpineImage(logo, fallback) {
318
344
  if (logo === undefined || logo === null)
319
- return { light: SPINE_DEFAULT_LOGO, dark: null, alt: null };
345
+ return fallback ? { light: fallback, dark: null, alt: null } : null;
320
346
  if (logo === false)
321
347
  return null;
322
348
  if (typeof logo === 'string')
@@ -356,7 +382,7 @@ function applySpineFavicon(doc, href) {
356
382
  return link;
357
383
  }
358
384
 
359
- /** Os 125 ícones que o spine usa por dentro. */
385
+ /** Os 131 ícones que o spine usa por dentro. */
360
386
  const SPINE_ICONS = [
361
387
  { "name": "accessibility-1", "body": "<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"7.6\" r=\"1.4\"/><path d=\"M7.5 10.5l4.5.8 4.5-.8M12 11.3v2.4M12 13.7l-2 3.6M12 13.7l2 3.6\"/>", "solid": true, "categories": ["essential"] },
362
388
  { "name": "alarm-clock", "body": "<circle cx=\"12\" cy=\"13\" r=\"7\"/><path d=\"M12 9.5v3.8l2.2 1.5M4 6.5l3-2.5M20 6.5l-3-2.5\"/>", "solid": true, "categories": ["essential"] },
@@ -419,6 +445,7 @@ const SPINE_ICONS = [
419
445
  { "name": "history", "body": "<path d=\"M4 12a8 8 0 1 0 2.4-5.7M4.5 3.5v3.8h3.8M12 8v4l2.5 2\"/>", "categories": ["essential"] },
420
446
  { "name": "home", "body": "<path d=\"M4 11l8-6.5 8 6.5M6 9.8v9.7h12V9.8M10 19.5v-5h4v5\"/>", "solid": true, "categories": ["foundation"] },
421
447
  { "name": "hourglass", "body": "<path d=\"M7 3.5h10M7 20.5h10M8 3.5c0 4 4 5 4 8.5s-4 4.5-4 8.5M16 3.5c0 4-4 5-4 8.5s4 4.5 4 8.5\"/>", "solid": true, "categories": ["essential"] },
448
+ { "name": "image", "body": "<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"15\" rx=\"2.5\"/><circle cx=\"9\" cy=\"10\" r=\"1.8\"/><path d=\"M3.5 17.5l5.5-5 4 3.5 2.5-2 5 4\"/>", "solid": true, "categories": ["foundation"] },
422
449
  { "name": "inbox", "body": "<path d=\"M3.5 13.5l2.5-8h12l2.5 8v4.5a2 2 0 0 1-2 2h-13a2 2 0 0 1-2-2z\"/><path d=\"M3.5 13.5h5l1 2.5h5l1-2.5h5\"/>", "categories": ["social"] },
423
450
  { "name": "info-circle", "body": "<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 11.2v5\"/><path d=\"M12 8h.01\"/>", "solid": true, "categories": ["foundation"], "aliases": ["info-circle-mini"] },
424
451
  { "name": "key", "body": "<circle cx=\"7.5\" cy=\"16.5\" r=\"3.5\"/><path d=\"M10 14L20 4M16 8l2.5 2.5M13.5 10.5l2 2\"/>", "solid": true, "categories": ["essential"] },
@@ -453,6 +480,7 @@ const SPINE_ICONS = [
453
480
  { "name": "scroll", "body": "<path d=\"M7 4.5h11.5v13a3 3 0 0 1-3 3H6.5a3 3 0 0 0 3-3V7A2.5 2.5 0 0 0 7 4.5z\"/><path d=\"M12.5 9h3.5M12.5 12.5h3.5\"/>", "solid": true, "categories": ["essential"] },
454
481
  { "name": "search", "body": "<circle cx=\"10.5\" cy=\"10.5\" r=\"6.5\"/><path d=\"M15.5 15.5l5 5\"/>", "categories": ["foundation"] },
455
482
  { "name": "search-magnify", "body": "<circle cx=\"10\" cy=\"10\" r=\"7\"/><circle cx=\"10\" cy=\"10\" r=\"2.5\"/><path d=\"M15 15l5.5 5.5\"/>", "categories": ["foundation"] },
483
+ { "name": "send-arrow", "body": "<path d=\"M20.5 3.5L3.5 10.5l6.5 3 3 6.5z\"/><path d=\"M10 13.5l10.5-10\"/>" },
456
484
  { "name": "shield", "body": "<path d=\"M12 3.5l7 2.5v5.5c0 4.5-3 7.5-7 9-4-1.5-7-4.5-7-9V6z\"/>", "solid": true, "categories": ["technology"], "aliases": ["empty-shield"] },
457
485
  { "name": "shield-check", "body": "<path d=\"M12 3.5l7 2.5v5.5c0 4.5-3 7.5-7 9-4-1.5-7-4.5-7-9V6z\"/><path d=\"M9 12l2.2 2.2L15.5 10\"/>", "solid": true, "categories": ["technology"] },
458
486
  { "name": "shrink", "body": "<path d=\"M20 10h-6V4M14 10l6.5-6.5\"/><path d=\"M4 14h6v6M10 14l-6.5 6.5\"/>", "categories": ["essential"] },
@@ -465,6 +493,7 @@ const SPINE_ICONS = [
465
493
  { "name": "target", "body": "<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"12\" r=\"4.5\"/><path d=\"M12 12h.01\"/>", "solid": true, "categories": ["essential"] },
466
494
  { "name": "tasks", "body": "<path d=\"M4 6.500l1.500 1.500L8 5.500M4 12.500L5.500 14 8 11.500M4 18.500L5.500 20 8 17.500M11 7h9M11 13h9M11 19h9\"/>", "solid": true, "categories": ["social"] },
467
495
  { "name": "text", "body": "<path d=\"M5 6.5V4.5h14v2M12 4.5v15M9.5 19.5h5\"/>", "categories": ["text-edit"] },
496
+ { "name": "thumbs-down", "body": "<rect x=\"16\" y=\"4\" width=\"4\" height=\"9\" rx=\"1\"/><path d=\"M16 13l-3 6.5a2 2 0 0 1-3-1.8L10.5 14H6a2 2 0 0 1-2-2.3l1-5.7a2 2 0 0 1 2-1.7H16z\"/>", "solid": true, "categories": ["social"] },
468
497
  { "name": "thumbs-up", "body": "<rect x=\"4\" y=\"11\" width=\"4\" height=\"9\" rx=\"1\"/><path d=\"M8 11l3-6.5a2 2 0 0 1 3 1.8L13.5 10H18a2 2 0 0 1 2 2.3l-1 5.7a2 2 0 0 1-2 1.7H8z\"/>", "solid": true, "categories": ["social"] },
469
498
  { "name": "timeline", "body": "<circle cx=\"5.5\" cy=\"12\" r=\"2.2\"/><circle cx=\"12\" cy=\"12\" r=\"2.2\"/><circle cx=\"18.5\" cy=\"12\" r=\"2.2\"/><path d=\"M7.7 12h2.1M14.2 12h2.1M12 9.8V5M5.5 14.2V19M18.5 14.2V19\"/>", "categories": ["essential"] },
470
499
  { "name": "times", "body": "<path d=\"M5.5 5.5l13 13M18.5 5.5l-13 13\"/>", "categories": ["foundation"], "aliases": ["times-mini"] },
@@ -475,6 +504,7 @@ const SPINE_ICONS = [
475
504
  { "name": "unarchive", "body": "<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"4\" rx=\"1\"/><path d=\"M5.5 8.5V18a1.5 1.5 0 0 0 1.5 1.5h10a1.5 1.5 0 0 0 1.5-1.5V8.5\"/><path d=\"M12 17v-6M9.5 13l2.5-2.5 2.5 2.5\"/>", "solid": true, "categories": ["technology"] },
476
505
  { "name": "undo", "body": "<path d=\"M8.5 5L4.5 9l4 4\"/><path d=\"M4.5 9h9a5.5 5.5 0 0 1 0 11H10\"/>", "categories": ["essential"] },
477
506
  { "name": "unlink", "body": "<g transform=\"rotate(-45 12 12)\"><path d=\"M9 8.5H7a3.5 3.5 0 0 0 0 7h2\"/><path d=\"M15 8.5h2a3.5 3.5 0 0 1 0 7h-2\"/></g><path d=\"M8.5 3.5V6M3.5 8.5H6M15.5 20.5V18M20.5 15.5H18\"/>", "categories": ["technology"] },
507
+ { "name": "unpin", "body": "<path d=\"M9 4.5h6l-.8 5 2.8 3.5H7l2.8-3.5z\"/><path d=\"M12 13v7M4 4l16 16\"/>", "solid": true, "categories": ["essential"] },
478
508
  { "name": "update", "body": "<path d=\"M19.5 11a7.5 7.5 0 0 0-13-4L4.5 9M4.5 5v4h4\"/><path d=\"M4.5 13a7.5 7.5 0 0 0 13 4l2-2M19.5 19v-4h-4\"/>", "categories": ["technology"] },
479
509
  { "name": "user", "body": "<circle cx=\"12\" cy=\"8\" r=\"3.5\"/><path d=\"M5 20c.8-3.6 3.8-5.5 7-5.5s6.2 1.9 7 5.5\"/>", "solid": true, "categories": ["foundation"] },
480
510
  { "name": "user-checkmark", "body": "<circle cx=\"8.5\" cy=\"8\" r=\"3\"/><path d=\"M2.5 19.5c.6-3.2 2.8-5 6-5s5.4 1.8 6 5\"/><path d=\"M15 17.2l2.5 2.5 4.2-4.7\"/>" },
@@ -482,6 +512,8 @@ const SPINE_ICONS = [
482
512
  { "name": "user-plus", "body": "<circle cx=\"9\" cy=\"8\" r=\"3.5\"/><path d=\"M2.5 20c.7-3.4 3.3-5.5 6.5-5.5s5.2 1.4 6 3.5\"/><path d=\"M18 11v6M15 14h6\"/>", "categories": ["essential"] },
483
513
  { "name": "users", "body": "<circle cx=\"9\" cy=\"8\" r=\"3.5\"/><path d=\"M2.5 20c.7-3.4 3.3-5.5 6.5-5.5s5.8 2.1 6.5 5.5\"/><path d=\"M15.5 4.8a3.3 3.3 0 0 1 0 6.4M17.5 14.7c2 .5 3.3 2.3 4 5.3\"/>", "solid": true, "categories": ["essential"] },
484
514
  { "name": "view-columns", "body": "<rect x=\"3.5\" y=\"4\" width=\"17\" height=\"16\" rx=\"2.5\"/><path d=\"M9.2 4v16M14.8 4v16\"/>", "categories": ["foundation"] },
515
+ { "name": "window-max", "body": "<rect x=\"3.5\" y=\"3.5\" width=\"17\" height=\"17\" rx=\"2.5\"/><path d=\"M13 11l4-4M13.5 7H17v3.5M11 13l-4 4M10.5 17H7v-3.5\"/>", "categories": ["essential"] },
516
+ { "name": "window-restore", "body": "<rect x=\"4\" y=\"8\" width=\"12\" height=\"12\" rx=\"2\"/><path d=\"M8 8V6a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2\"/>", "categories": ["essential"] },
485
517
  { "name": "world", "body": "<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><ellipse cx=\"12\" cy=\"12\" rx=\"3.5\" ry=\"8.5\"/><path d=\"M3.5 12h17\"/>", "solid": true, "categories": ["essential"] },
486
518
  ];
487
519
 
@@ -2473,28 +2505,61 @@ const SPINE_MESSAGES_PT_BR = {
2473
2505
  loadErrorDetail: 'Não foi possível carregar as tentativas: {detail}',
2474
2506
  loadError: 'Não foi possível carregar as tentativas de login.',
2475
2507
  },
2508
+ aiAgentChat: {
2509
+ title: 'Agente de IA',
2510
+ conversation: 'Conversa com o agente',
2511
+ you: 'Você',
2512
+ empty: 'Pergunte sobre o que esta aplicação mostra. O agente consulta os dados com as suas permissões.',
2513
+ placeholder: 'Escreva sua pergunta',
2514
+ send: 'Enviar',
2515
+ expand: 'Expandir',
2516
+ collapse: 'Reduzir',
2517
+ steps: 'Consultas feitas pelo agente',
2518
+ copy: 'Copiar resposta',
2519
+ copied: 'Resposta copiada.',
2520
+ copyError: 'Não foi possível copiar a resposta.',
2521
+ retry: 'Tentar novamente',
2522
+ close: 'Fechar',
2523
+ newConversation: 'Nova conversa',
2524
+ dock: 'Tirar da tela e levar para o cabeçalho',
2525
+ undock: 'Voltar a flutuar na tela',
2526
+ greetingTitle: 'Posso ajudar?',
2527
+ greetingText: 'Pergunte sobre o que esta aplicação mostra.',
2528
+ greetingClose: 'Fechar o convite',
2529
+ rateUp: 'Resposta boa',
2530
+ rateDown: 'Resposta com problema',
2531
+ rateThanks: 'Obrigado. O agente usa isso em perguntas parecidas.',
2532
+ rateError: 'Não foi possível enviar a avaliação.',
2533
+ correctionLabel: 'O que estava errado?',
2534
+ correctionPlaceholder: 'Opcional. O que estiver escrito aqui vale como dica em perguntas parecidas, de qualquer pessoa.',
2535
+ correctionSend: 'Enviar',
2536
+ correctionCancel: 'Cancelar',
2537
+ note: 'O agente pode errar. Confira as informações importantes.',
2538
+ sendError: 'Não foi possível enviar a mensagem. Tente novamente.',
2539
+ connectionError: 'A conexão com o agente caiu antes do fim da resposta. Tente novamente.',
2540
+ },
2476
2541
  accountFeatures: {
2477
- aiAgent: 'Conectar um agente de IA',
2478
- aiAgentDescription: 'Gera o token e a configuração MCP para colar no Claude Code.',
2479
- aiAgentKeywords: 'ia agente claude mcp assistente llm automação',
2480
- aiAgentHelp: 'O agente usa um token de aplicação pessoal (x-app-token) com as permissões do nível de acesso escolhido. Revogue em "Tokens de aplicação" quando não precisar mais.',
2481
- aiAgentStart: 'Conectar agente',
2482
- aiAgentServers: 'Servidores MCP',
2483
- aiAgentAccess: 'Acesso do agente',
2484
- aiAgentReadOnly: 'Só leitura',
2485
- aiAgentReadWrite: 'Leitura e escrita',
2486
- aiAgentWriteHint: 'O agente poderá alterar dados em seu nome. Prefira só leitura quando bastar.',
2487
- aiAgentReadOnlyServer: '{name} (só leitura)',
2488
- aiAgentTokenName: 'Agente de IA ({date})',
2489
- aiAgentGenerate: 'Gerar configuração',
2490
- aiAgentSelectServer: 'Escolha pelo menos um servidor.',
2491
- aiAgentResult: 'Configuração pronta',
2492
- aiAgentResultHint: 'Cole em .mcp.json, na raiz do projeto (Claude Code). O token aparece só agora: copie antes de concluir. Vale até {date}.',
2493
- aiAgentCopy: 'Copiar configuração',
2494
- aiAgentCopied: 'Configuração copiada. Não compartilhe: ela contém o seu token.',
2495
- aiAgentDone: 'Concluir',
2496
- aiAgentCreateError: 'Não foi possível gerar o token do agente.',
2497
- aiAgentUnavailable: 'Indisponível neste aplicativo: ele não está ligado ao argos-admin.',
2542
+ mcpConnect: 'Conectar um agente de IA',
2543
+ mcpConnectDescription: 'Gera o token e a configuração MCP para colar no Claude Code.',
2544
+ mcpConnectKeywords: 'ia agente claude mcp assistente llm automação',
2545
+ mcpConnectHelp: 'O agente usa um token de aplicação pessoal (x-app-token) com as permissões do nível de acesso escolhido. Revogue em "Tokens de aplicação" quando não precisar mais.',
2546
+ mcpConnectStart: 'Conectar agente',
2547
+ mcpConnectServers: 'Servidores MCP',
2548
+ mcpConnectAccess: 'Acesso do agente',
2549
+ mcpConnectReadOnly: 'Só leitura',
2550
+ mcpConnectReadWrite: 'Leitura e escrita',
2551
+ mcpConnectWriteHint: 'O agente poderá alterar dados em seu nome. Prefira só leitura quando bastar.',
2552
+ mcpConnectReadOnlyServer: '{name} (só leitura)',
2553
+ mcpConnectTokenName: 'Agente de IA ({date})',
2554
+ mcpConnectGenerate: 'Gerar configuração',
2555
+ mcpConnectSelectServer: 'Escolha pelo menos um servidor.',
2556
+ mcpConnectResult: 'Configuração pronta',
2557
+ mcpConnectResultHint: 'Cole em .mcp.json, na raiz do projeto (Claude Code). O token aparece só agora: copie antes de concluir. Vale até {date}.',
2558
+ mcpConnectCopy: 'Copiar configuração',
2559
+ mcpConnectCopied: 'Configuração copiada. Não compartilhe: ela contém o seu token.',
2560
+ mcpConnectDone: 'Concluir',
2561
+ mcpConnectCreateError: 'Não foi possível gerar o token do agente.',
2562
+ mcpConnectUnavailable: 'Indisponível neste aplicativo: ele não está ligado ao argos-admin.',
2498
2563
  activity: 'Atividade da conta',
2499
2564
  activityDescription: 'Entradas e tentativas que falharam nos últimos 90 dias.',
2500
2565
  activityKeywords: 'login entrada acesso histórico tentativa falha ip navegador segurança',
@@ -4359,28 +4424,61 @@ const SPINE_MESSAGES_EN = {
4359
4424
  loadErrorDetail: 'Could not load the attempts: {detail}',
4360
4425
  loadError: 'Could not load the login attempts.',
4361
4426
  },
4427
+ aiAgentChat: {
4428
+ title: 'AI agent',
4429
+ conversation: 'Conversation with the agent',
4430
+ you: 'You',
4431
+ empty: 'Ask about what this application shows. The agent reads the data with your permissions.',
4432
+ placeholder: 'Write your question',
4433
+ send: 'Send',
4434
+ expand: 'Expand',
4435
+ collapse: 'Shrink',
4436
+ steps: 'Queries made by the agent',
4437
+ copy: 'Copy answer',
4438
+ copied: 'Answer copied.',
4439
+ copyError: 'Could not copy the answer.',
4440
+ retry: 'Try again',
4441
+ close: 'Close',
4442
+ newConversation: 'New conversation',
4443
+ dock: 'Remove from the screen and move to the header',
4444
+ undock: 'Float on the screen again',
4445
+ greetingTitle: 'Can I help?',
4446
+ greetingText: 'Ask about what this application shows.',
4447
+ greetingClose: 'Close the invitation',
4448
+ rateUp: 'Good answer',
4449
+ rateDown: 'Answer with a problem',
4450
+ rateThanks: 'Thank you. The agent uses this on similar questions.',
4451
+ rateError: 'The rating could not be sent.',
4452
+ correctionLabel: 'What was wrong?',
4453
+ correctionPlaceholder: 'Optional. What you write here becomes a hint on similar questions, for anyone.',
4454
+ correctionSend: 'Send',
4455
+ correctionCancel: 'Cancel',
4456
+ note: 'The agent can make mistakes. Check important information.',
4457
+ sendError: 'Could not send the message. Try again.',
4458
+ connectionError: 'The connection to the agent dropped before the answer finished. Try again.',
4459
+ },
4362
4460
  accountFeatures: {
4363
- aiAgent: 'Connect an AI agent',
4364
- aiAgentDescription: 'Generates the token and the MCP configuration to paste into Claude Code.',
4365
- aiAgentKeywords: 'ai agent claude mcp assistant llm automation',
4366
- aiAgentHelp: 'The agent uses a personal application token (x-app-token) with the permissions of the chosen access level. Revoke it under "Application tokens" when you no longer need it.',
4367
- aiAgentStart: 'Connect agent',
4368
- aiAgentServers: 'MCP servers',
4369
- aiAgentAccess: 'Agent access',
4370
- aiAgentReadOnly: 'Read only',
4371
- aiAgentReadWrite: 'Read and write',
4372
- aiAgentWriteHint: 'The agent will be able to change data on your behalf. Prefer read only when it is enough.',
4373
- aiAgentReadOnlyServer: '{name} (read only)',
4374
- aiAgentTokenName: 'AI agent ({date})',
4375
- aiAgentGenerate: 'Generate configuration',
4376
- aiAgentSelectServer: 'Choose at least one server.',
4377
- aiAgentResult: 'Configuration ready',
4378
- aiAgentResultHint: 'Paste into .mcp.json at the project root (Claude Code). The token is shown only now: copy it before finishing. Valid until {date}.',
4379
- aiAgentCopy: 'Copy configuration',
4380
- aiAgentCopied: 'Configuration copied. Do not share it: it contains your token.',
4381
- aiAgentDone: 'Finish',
4382
- aiAgentCreateError: 'Could not generate the agent token.',
4383
- aiAgentUnavailable: 'Unavailable in this application: it is not connected to argos-admin.',
4461
+ mcpConnect: 'Connect an AI agent',
4462
+ mcpConnectDescription: 'Generates the token and the MCP configuration to paste into Claude Code.',
4463
+ mcpConnectKeywords: 'ai agent claude mcp assistant llm automation',
4464
+ mcpConnectHelp: 'The agent uses a personal application token (x-app-token) with the permissions of the chosen access level. Revoke it under "Application tokens" when you no longer need it.',
4465
+ mcpConnectStart: 'Connect agent',
4466
+ mcpConnectServers: 'MCP servers',
4467
+ mcpConnectAccess: 'Agent access',
4468
+ mcpConnectReadOnly: 'Read only',
4469
+ mcpConnectReadWrite: 'Read and write',
4470
+ mcpConnectWriteHint: 'The agent will be able to change data on your behalf. Prefer read only when it is enough.',
4471
+ mcpConnectReadOnlyServer: '{name} (read only)',
4472
+ mcpConnectTokenName: 'AI agent ({date})',
4473
+ mcpConnectGenerate: 'Generate configuration',
4474
+ mcpConnectSelectServer: 'Choose at least one server.',
4475
+ mcpConnectResult: 'Configuration ready',
4476
+ mcpConnectResultHint: 'Paste into .mcp.json at the project root (Claude Code). The token is shown only now: copy it before finishing. Valid until {date}.',
4477
+ mcpConnectCopy: 'Copy configuration',
4478
+ mcpConnectCopied: 'Configuration copied. Do not share it: it contains your token.',
4479
+ mcpConnectDone: 'Finish',
4480
+ mcpConnectCreateError: 'Could not generate the agent token.',
4481
+ mcpConnectUnavailable: 'Unavailable in this application: it is not connected to argos-admin.',
4384
4482
  activity: 'Account activity',
4385
4483
  activityDescription: 'Sign-ins and failed attempts in the last 90 days.',
4386
4484
  activityKeywords: 'login sign-in access history attempt failure ip browser security',
@@ -6245,28 +6343,61 @@ const SPINE_MESSAGES_ES = {
6245
6343
  loadErrorDetail: 'No se pudieron cargar los intentos: {detail}',
6246
6344
  loadError: 'No se pudieron cargar los intentos de inicio de sesión.',
6247
6345
  },
6346
+ aiAgentChat: {
6347
+ title: 'Agente de IA',
6348
+ conversation: 'Conversación con el agente',
6349
+ you: 'Usted',
6350
+ empty: 'Pregunte sobre lo que muestra esta aplicación. El agente consulta los datos con sus permisos.',
6351
+ placeholder: 'Escriba su pregunta',
6352
+ send: 'Enviar',
6353
+ expand: 'Expandir',
6354
+ collapse: 'Reducir',
6355
+ steps: 'Consultas hechas por el agente',
6356
+ copy: 'Copiar respuesta',
6357
+ copied: 'Respuesta copiada.',
6358
+ copyError: 'No fue posible copiar la respuesta.',
6359
+ retry: 'Intentar de nuevo',
6360
+ close: 'Cerrar',
6361
+ newConversation: 'Nueva conversación',
6362
+ dock: 'Quitar de la pantalla y llevar al encabezado',
6363
+ undock: 'Volver a flotar en la pantalla',
6364
+ greetingTitle: '¿Puedo ayudar?',
6365
+ greetingText: 'Pregunte sobre lo que muestra esta aplicación.',
6366
+ greetingClose: 'Cerrar la invitación',
6367
+ rateUp: 'Respuesta buena',
6368
+ rateDown: 'Respuesta con un problema',
6369
+ rateThanks: 'Gracias. El agente usa esto en preguntas parecidas.',
6370
+ rateError: 'No se pudo enviar la evaluación.',
6371
+ correctionLabel: '¿Qué estaba mal?',
6372
+ correctionPlaceholder: 'Opcional. Lo que escriba aquí sirve de pista en preguntas parecidas, para cualquier persona.',
6373
+ correctionSend: 'Enviar',
6374
+ correctionCancel: 'Cancelar',
6375
+ note: 'El agente puede equivocarse. Verifique la información importante.',
6376
+ sendError: 'No fue posible enviar el mensaje. Inténtelo de nuevo.',
6377
+ connectionError: 'La conexión con el agente se cayó antes de terminar la respuesta. Inténtelo de nuevo.',
6378
+ },
6248
6379
  accountFeatures: {
6249
- aiAgent: 'Conectar un agente de IA',
6250
- aiAgentDescription: 'Genera el token y la configuración MCP para pegar en Claude Code.',
6251
- aiAgentKeywords: 'ia agente claude mcp asistente llm automatización',
6252
- aiAgentHelp: 'El agente usa un token de aplicación personal (x-app-token) con los permisos del nivel de acceso elegido. Revóquelo en "Tokens de aplicación" cuando ya no lo necesite.',
6253
- aiAgentStart: 'Conectar agente',
6254
- aiAgentServers: 'Servidores MCP',
6255
- aiAgentAccess: 'Acceso del agente',
6256
- aiAgentReadOnly: 'Solo lectura',
6257
- aiAgentReadWrite: 'Lectura y escritura',
6258
- aiAgentWriteHint: 'El agente podrá cambiar datos en su nombre. Prefiera solo lectura cuando sea suficiente.',
6259
- aiAgentReadOnlyServer: '{name} (solo lectura)',
6260
- aiAgentTokenName: 'Agente de IA ({date})',
6261
- aiAgentGenerate: 'Generar configuración',
6262
- aiAgentSelectServer: 'Elija al menos un servidor.',
6263
- aiAgentResult: 'Configuración lista',
6264
- aiAgentResultHint: 'Péguelo en .mcp.json, en la raíz del proyecto (Claude Code). El token aparece solo ahora: cópielo antes de terminar. Válido hasta {date}.',
6265
- aiAgentCopy: 'Copiar configuración',
6266
- aiAgentCopied: 'Configuración copiada. No la comparta: contiene su token.',
6267
- aiAgentDone: 'Terminar',
6268
- aiAgentCreateError: 'No fue posible generar el token del agente.',
6269
- aiAgentUnavailable: 'No disponible en esta aplicación: no está conectada a argos-admin.',
6380
+ mcpConnect: 'Conectar un agente de IA',
6381
+ mcpConnectDescription: 'Genera el token y la configuración MCP para pegar en Claude Code.',
6382
+ mcpConnectKeywords: 'ia agente claude mcp asistente llm automatización',
6383
+ mcpConnectHelp: 'El agente usa un token de aplicación personal (x-app-token) con los permisos del nivel de acceso elegido. Revóquelo en "Tokens de aplicación" cuando ya no lo necesite.',
6384
+ mcpConnectStart: 'Conectar agente',
6385
+ mcpConnectServers: 'Servidores MCP',
6386
+ mcpConnectAccess: 'Acceso del agente',
6387
+ mcpConnectReadOnly: 'Solo lectura',
6388
+ mcpConnectReadWrite: 'Lectura y escritura',
6389
+ mcpConnectWriteHint: 'El agente podrá cambiar datos en su nombre. Prefiera solo lectura cuando sea suficiente.',
6390
+ mcpConnectReadOnlyServer: '{name} (solo lectura)',
6391
+ mcpConnectTokenName: 'Agente de IA ({date})',
6392
+ mcpConnectGenerate: 'Generar configuración',
6393
+ mcpConnectSelectServer: 'Elija al menos un servidor.',
6394
+ mcpConnectResult: 'Configuración lista',
6395
+ mcpConnectResultHint: 'Péguelo en .mcp.json, en la raíz del proyecto (Claude Code). El token aparece solo ahora: cópielo antes de terminar. Válido hasta {date}.',
6396
+ mcpConnectCopy: 'Copiar configuración',
6397
+ mcpConnectCopied: 'Configuración copiada. No la comparta: contiene su token.',
6398
+ mcpConnectDone: 'Terminar',
6399
+ mcpConnectCreateError: 'No fue posible generar el token del agente.',
6400
+ mcpConnectUnavailable: 'No disponible en esta aplicación: no está conectada a argos-admin.',
6270
6401
  activity: 'Actividad de la cuenta',
6271
6402
  activityDescription: 'Inicios de sesión e intentos fallidos en los últimos 90 días.',
6272
6403
  activityKeywords: 'login acceso historial intento falla ip navegador seguridad',
@@ -6913,5 +7044,5 @@ function provideSpineMessages(config) {
6913
7044
  * Generated bundle index. Do not edit.
6914
7045
  */
6915
7046
 
6916
- export { APP_PACKAGE_INFO, DensityService, HERMES_DS_IMPORTS, SPINE_ADMIN_API, SPINE_CONFIG, SPINE_DEFAULT_LOGO, SPINE_I18N_CONFIG, SPINE_ICONS, SPINE_IDLE_OPTIONS, SPINE_MESSAGES, SPINE_MESSAGES_EN, SPINE_MESSAGES_ES, SPINE_MESSAGES_PT_BR, SPINE_USER_STORAGE_KEYS, SpinePreferencesService, SpineQuickAccessService, SpineUserStorage, ThemePresetService, ThemeService, applyRuntimeEnvironment, applySpineFavicon, clearSpineBuiltinPages, currentSpineMessages, mergeRouteTree, provideSpineMessages, provideUi, registerSpineBuiltinPage, resolveSpineLogo, routerIdOf, spineBuiltinPageAt, spineBuiltinPageById, spineRoutesOf };
7047
+ export { APP_PACKAGE_INFO, DensityService, HERMES_DS_IMPORTS, SPINE_ADMIN_API, SPINE_CONFIG, SPINE_DEFAULT_AGENT_AVATAR, SPINE_DEFAULT_AGENT_IMAGE, SPINE_DEFAULT_LOGO, SPINE_I18N_CONFIG, SPINE_ICONS, SPINE_IDLE_OPTIONS, SPINE_MESSAGES, SPINE_MESSAGES_EN, SPINE_MESSAGES_ES, SPINE_MESSAGES_PT_BR, SPINE_USER_STORAGE_KEYS, SpinePreferencesService, SpineQuickAccessService, SpineUserStorage, ThemePresetService, ThemeService, applyRuntimeEnvironment, applySpineFavicon, clearSpineBuiltinPages, currentSpineMessages, mergeRouteTree, provideSpineMessages, provideUi, registerSpineBuiltinPage, resolveSpineImage, resolveSpineLogo, routerIdOf, spineBuiltinPageAt, spineBuiltinPageById, spineRoutesOf };
6917
7048
  //# sourceMappingURL=trismegisto-spine.mjs.map