@trismegisto/spine 2.1.1 → 3.0.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.
- package/README.md +105 -19
- package/fesm2022/trismegisto-spine-audit.mjs +264 -10
- package/fesm2022/trismegisto-spine-audit.mjs.map +1 -1
- package/fesm2022/trismegisto-spine-auto-service-apps.technical-BAKdkVdz.mjs +84 -0
- package/fesm2022/trismegisto-spine-auto-service-apps.technical-BAKdkVdz.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-apps.usage-CAXMP5r8.mjs +87 -0
- package/fesm2022/trismegisto-spine-auto-service-apps.usage-CAXMP5r8.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-audit.technical-C901aIIQ.mjs → trismegisto-spine-auto-service-audit.technical-B75d4mh2.mjs} +6 -5
- package/fesm2022/trismegisto-spine-auto-service-audit.technical-B75d4mh2.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-audit.usage-GIJ2RwuH.mjs → trismegisto-spine-auto-service-audit.usage-IdXMruv5.mjs} +9 -8
- package/fesm2022/trismegisto-spine-auto-service-audit.usage-IdXMruv5.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-audit.component-CCiz-q8o.mjs → trismegisto-spine-auto-service-auto-service-audit.component-BIL8tH1I.mjs} +4 -4
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-audit.component-CCiz-q8o.mjs.map → trismegisto-spine-auto-service-auto-service-audit.component-BIL8tH1I.mjs.map} +1 -1
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-client-picker.component-Z0wCANF6.mjs → trismegisto-spine-auto-service-auto-service-client-picker.component-CBt_0Uli.mjs} +3 -3
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-client-picker.component-Z0wCANF6.mjs.map → trismegisto-spine-auto-service-auto-service-client-picker.component-CBt_0Uli.mjs.map} +1 -1
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-client.component-C7SPavrX.mjs → trismegisto-spine-auto-service-auto-service-client.component-DAxhZC-a.mjs} +123 -27
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-DAxhZC-a.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-delete-CoJYTtBU.mjs +87 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-delete-CoJYTtBU.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-UVMGF7-B.mjs +544 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-UVMGF7-B.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-login-attempts.component-Boi-kG0G.mjs +37 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-login-attempts.component-Boi-kG0G.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service.component-DmLafUkX.mjs +943 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service.component-DmLafUkX.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-client.technical-BHWhpyWv.mjs → trismegisto-spine-auto-service-client.technical-DP5G8i3o.mjs} +24 -3
- package/fesm2022/trismegisto-spine-auto-service-client.technical-DP5G8i3o.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-client.usage-CM2WB2e2.mjs → trismegisto-spine-auto-service-client.usage-CcJANb20.mjs} +15 -6
- package/fesm2022/trismegisto-spine-auto-service-client.usage-CcJANb20.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-groups.technical-BlktCM70.mjs +65 -0
- package/fesm2022/trismegisto-spine-auto-service-groups.technical-BlktCM70.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-groups.usage-Cz5sCKgn.mjs +81 -0
- package/fesm2022/trismegisto-spine-auto-service-groups.usage-Cz5sCKgn.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-home.component-vl3BPFnk.mjs → trismegisto-spine-auto-service-home.component-5_aji1hf.mjs} +5 -4
- package/fesm2022/trismegisto-spine-auto-service-home.component-5_aji1hf.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-login-attempts.technical-CasKIIws.mjs +37 -0
- package/fesm2022/trismegisto-spine-auto-service-login-attempts.technical-CasKIIws.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-login-attempts.usage-BMgLNu7W.mjs +60 -0
- package/fesm2022/trismegisto-spine-auto-service-login-attempts.usage-BMgLNu7W.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service.mjs +49 -29
- package/fesm2022/trismegisto-spine-auto-service.mjs.map +1 -1
- package/fesm2022/trismegisto-spine-layout.mjs +1850 -217
- package/fesm2022/trismegisto-spine-layout.mjs.map +1 -1
- package/fesm2022/trismegisto-spine-shell.mjs +28 -8
- package/fesm2022/trismegisto-spine-shell.mjs.map +1 -1
- package/fesm2022/trismegisto-spine.mjs +1163 -87
- package/fesm2022/trismegisto-spine.mjs.map +1 -1
- package/package.json +6 -6
- package/types/trismegisto-spine-audit.d.ts +180 -5
- package/types/trismegisto-spine-audit.d.ts.map +1 -1
- package/types/trismegisto-spine-auto-service.d.ts +100 -7
- package/types/trismegisto-spine-auto-service.d.ts.map +1 -1
- package/types/trismegisto-spine-layout.d.ts +885 -22
- package/types/trismegisto-spine-layout.d.ts.map +1 -1
- package/types/trismegisto-spine-shell.d.ts +11 -2
- package/types/trismegisto-spine-shell.d.ts.map +1 -1
- package/types/trismegisto-spine.d.ts +496 -34
- package/types/trismegisto-spine.d.ts.map +1 -1
- package/fesm2022/trismegisto-spine-auto-service-apps.technical-ClMKB9cK.mjs +0 -48
- package/fesm2022/trismegisto-spine-auto-service-apps.technical-ClMKB9cK.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-apps.usage-Cf5SG-oQ.mjs +0 -55
- package/fesm2022/trismegisto-spine-auto-service-apps.usage-Cf5SG-oQ.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-audit.technical-C901aIIQ.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-audit.usage-GIJ2RwuH.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-C7SPavrX.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-delete-6Bk46MOf.mjs +0 -39
- package/fesm2022/trismegisto-spine-auto-service-auto-service-delete-6Bk46MOf.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-CqIVe2LU.mjs +0 -357
- package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-CqIVe2LU.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service.component-BLN49F4a.mjs +0 -502
- package/fesm2022/trismegisto-spine-auto-service-auto-service.component-BLN49F4a.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-client.technical-BHWhpyWv.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-client.usage-CM2WB2e2.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-groups.technical-jQlwaQPn.mjs +0 -39
- package/fesm2022/trismegisto-spine-auto-service-groups.technical-jQlwaQPn.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-groups.usage-Bh7ig2zZ.mjs +0 -54
- package/fesm2022/trismegisto-spine-auto-service-groups.usage-Bh7ig2zZ.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-home.component-vl3BPFnk.mjs.map +0 -1
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { OnDestroy, OnInit, ElementRef, InjectionToken, Type, Provider } from '@angular/core';
|
|
3
3
|
import { Router } from '@angular/router';
|
|
4
|
-
import * as _orfeu_angular_core from '@orfeu/angular/core';
|
|
5
|
-
import { AuthorizationService, ViewService, UserProfile, AppDef, RealmAppsService } from '@orfeu/angular/core';
|
|
6
4
|
import * as _trismegisto_spine from '@trismegisto/spine';
|
|
7
|
-
import { SpineConfig, SpineNewsSlide, Route, ThemeService, ThemePresetService, DensityService, SpinePreferencesService } from '@trismegisto/spine';
|
|
5
|
+
import { SpineConfig, SpineNewsSlide, Route, ThemeService, ThemePresetService, DensityService, SpineHourCyclePreference, SpineStartPagePreference, SpineNoticeType, SpinePreferencesService, SpineMcpServer, SpineFeatures } from '@trismegisto/spine';
|
|
8
6
|
import { BehaviorSubject, Observable, Subject } from 'rxjs';
|
|
9
7
|
import * as _trismegisto_angular from '@trismegisto/angular';
|
|
10
|
-
import { HermesShortcutItem, WorkspaceStore, TabItem, MenuItem, SidebarNode,
|
|
8
|
+
import { HermesShortcutItem, WorkspaceStore, TabItem, MenuItem, SidebarNode, HermesThemeMode, HermesDensity, HermesSidebarService, SegmentedOption, ComboboxOption } from '@trismegisto/angular';
|
|
11
9
|
import * as _trismegisto_primitives from '@trismegisto/primitives';
|
|
12
|
-
import { formatMessage, HermesFont } from '@trismegisto/primitives';
|
|
10
|
+
import { formatMessage, HermesMotionPreference, Weekday, AlertVariant, HermesFont } from '@trismegisto/primitives';
|
|
11
|
+
import * as _orfeu_angular_core from '@orfeu/angular/core';
|
|
12
|
+
import { AuthorizationService, ViewService, UserProfile, AppDef, RealmAppsService } from '@orfeu/angular/core';
|
|
13
13
|
import * as _trismegisto_tokens from '@trismegisto/tokens';
|
|
14
14
|
import * as _trismegisto_spine_layout from '@trismegisto/spine/layout';
|
|
15
15
|
import { RouteDocument } from '@trismegisto/spine/routing';
|
|
@@ -269,7 +269,8 @@ declare class SpineWorkspaceNavService {
|
|
|
269
269
|
* (`hm-sidebar` fixa + `.main` com `hm-workspace`). **Sem barra de breadcrumb própria** — isso
|
|
270
270
|
* era resíduo do spine antigo (`spine-navigation`), removido: o docs não tem uma, a navegação
|
|
271
271
|
* inteira mora na sidebar. Entre o header e o corpo fica o `spine-connection-banner` (aviso de conexão
|
|
272
|
-
* do `@orfeu/angular`, vazio quando `online`).
|
|
272
|
+
* do `@orfeu/angular`, vazio quando `online`). Os avisos ficam no `spine-notification` (`NotificationService`) e
|
|
273
|
+
* no `hm-toast-stack` (`HermesToastService`), os dois montados aqui: o app não monta nenhum.
|
|
273
274
|
*
|
|
274
275
|
* O `<router-outlet>` que sobra aqui é só pra `/no-permission` (a única rota do shell com
|
|
275
276
|
* `component` de verdade — o resto da árvore do backend nunca passa pelo `Router` pra renderizar,
|
|
@@ -281,7 +282,6 @@ declare class SpineWorkspaceNavService {
|
|
|
281
282
|
declare class LayoutComponent implements OnInit {
|
|
282
283
|
private router;
|
|
283
284
|
private theme;
|
|
284
|
-
private auth;
|
|
285
285
|
private shortcuts;
|
|
286
286
|
private onboarding;
|
|
287
287
|
private news;
|
|
@@ -289,7 +289,12 @@ declare class LayoutComponent implements OnInit {
|
|
|
289
289
|
private readonly preferences;
|
|
290
290
|
protected readonly workspace: SpineWorkspaceNavService;
|
|
291
291
|
private readonly settings;
|
|
292
|
-
|
|
292
|
+
/** Também liga, uma vez, o aviso de falha do logout (`logoutFailed$` do `@orfeu/angular`). */
|
|
293
|
+
private readonly logoutService;
|
|
294
|
+
/** Recursos opcionais (`SpineConfig.features`): cada serviço não faz nada com o seu recurso desligado. */
|
|
295
|
+
private readonly idle;
|
|
296
|
+
private readonly startPage;
|
|
297
|
+
private readonly accountPreferences;
|
|
293
298
|
/** Esconde sidebar e área de trabalho quando a rota ATIVA (do Router real, ver
|
|
294
299
|
* `router.events` abaixo) é a de sem-permissão — nesse caso não existe menu/página válido
|
|
295
300
|
* como contexto. Note que isto reflete só a URL do painel FOCADO (dona do Router real); um
|
|
@@ -297,7 +302,7 @@ declare class LayoutComponent implements OnInit {
|
|
|
297
302
|
* o bastante (sem-permissão normalmente bloqueia o app inteiro, não uma aba) pra não justificar
|
|
298
303
|
* mais complexidade agora. */
|
|
299
304
|
isNoPermission: boolean;
|
|
300
|
-
constructor(router: Router, theme: ThemeService,
|
|
305
|
+
constructor(router: Router, theme: ThemeService, shortcuts: ShortcutService, onboarding: OnboardingService, news: SpineNewsService);
|
|
301
306
|
private matchesNoPermission;
|
|
302
307
|
ngOnInit(): void;
|
|
303
308
|
protected onLocalNavigate(panelId: string, href: string): void;
|
|
@@ -358,6 +363,7 @@ declare class HeaderComponent implements OnInit {
|
|
|
358
363
|
private readonly settings;
|
|
359
364
|
private readonly news;
|
|
360
365
|
private readonly userStorage;
|
|
366
|
+
private readonly logoutService;
|
|
361
367
|
/** Por usuário (`SpineUserStorage`): `<clientId>_header_recent_searches_<sub>`; apagada no logout. */
|
|
362
368
|
private get recentSearchKey();
|
|
363
369
|
constructor(authService: AuthorizationService, themeService: ThemeService, themePresetService: ThemePresetService, densityService: DensityService, viewService: ViewService, router: Router, onboarding: OnboardingService, shortcuts: ShortcutService, config: SpineConfig | null);
|
|
@@ -373,7 +379,8 @@ declare class HeaderComponent implements OnInit {
|
|
|
373
379
|
get badges(): _orfeu_angular_core.Badge[];
|
|
374
380
|
get profile(): UserProfile;
|
|
375
381
|
switchBadge(badgeTypeId: string): Promise<void>;
|
|
376
|
-
|
|
382
|
+
/** Sai pelo `SpineLogoutService`: com falha no Argos a pessoa fica aqui, com aviso, e o histórico fica. */
|
|
383
|
+
logout(): Promise<boolean>;
|
|
377
384
|
/** Reabre o tour guiado de onboarding. */
|
|
378
385
|
startTour(): void;
|
|
379
386
|
/** Abre o painel de atalhos de teclado. */
|
|
@@ -578,6 +585,7 @@ declare class SpineConnectionBannerComponent {
|
|
|
578
585
|
signInAgain: string;
|
|
579
586
|
callbackFailedHeading: string;
|
|
580
587
|
callbackFailedText: string;
|
|
588
|
+
logoutFailed: string;
|
|
581
589
|
};
|
|
582
590
|
private readonly auth;
|
|
583
591
|
private readonly router;
|
|
@@ -590,6 +598,42 @@ declare class SpineConnectionBannerComponent {
|
|
|
590
598
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SpineConnectionBannerComponent, "spine-connection-banner", never, {}, {}, never, never, true, never>;
|
|
591
599
|
}
|
|
592
600
|
|
|
601
|
+
/**
|
|
602
|
+
* Saída da sessão pelo shell: todo botão/atalho de sair do spine passa por aqui (menu do perfil, painel de
|
|
603
|
+
* configurações, `Mod+Shift+L`, tela `/blocked`).
|
|
604
|
+
*
|
|
605
|
+
* - Assina `logoutFailed$` do `@orfeu/angular` (1.3.x) uma vez só: quando o logout no Argos falha (a lib repete uma
|
|
606
|
+
* vez e mantém a sessão), mostra o aviso de erro `session.logoutFailed` (`hm-alert` de erro, `role="alert"`). Vale
|
|
607
|
+
* também para um `logout()` chamado direto pelo app.
|
|
608
|
+
* - `logout()` aguarda o resultado: só apaga os históricos do usuário (`SpineUserStorage.clearHistory()`) quando a
|
|
609
|
+
* saída deu certo. Com falha, nada muda: a pessoa continua na tela, com a sessão e os recentes.
|
|
610
|
+
* - `pending` fica `true` enquanto a saída está em andamento e sempre volta a `false` (os botões não travam).
|
|
611
|
+
*
|
|
612
|
+
* Com `@orfeu/angular` 1.0.x (sem `logoutFailed$`, `logout()` sem retorno) a saída conta como concluída, como antes.
|
|
613
|
+
*/
|
|
614
|
+
declare class SpineLogoutService {
|
|
615
|
+
private readonly auth;
|
|
616
|
+
private readonly userStorage;
|
|
617
|
+
private readonly notifications;
|
|
618
|
+
private readonly messages;
|
|
619
|
+
/** `true` quando a lib avisa a falha por `logoutFailed$` (então o aviso sai por lá, uma vez). */
|
|
620
|
+
private readonly failureStream;
|
|
621
|
+
private inFlight;
|
|
622
|
+
/** Saída em andamento (o botão mostra "saindo…" / fica desabilitado). */
|
|
623
|
+
readonly pending: _angular_core.WritableSignal<boolean>;
|
|
624
|
+
constructor();
|
|
625
|
+
/**
|
|
626
|
+
* Sai da sessão. Resolve `true` quando saiu (o `@orfeu/angular` já navega para o `/logoff`) e `false` quando o
|
|
627
|
+
* Argos não confirmou: a sessão continua e o aviso de erro aparece. Nunca rejeita. Cliques repetidos durante a
|
|
628
|
+
* saída reaproveitam a mesma tentativa.
|
|
629
|
+
*/
|
|
630
|
+
logout(): Promise<boolean>;
|
|
631
|
+
private run;
|
|
632
|
+
private notifyFailure;
|
|
633
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineLogoutService, never>;
|
|
634
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineLogoutService>;
|
|
635
|
+
}
|
|
636
|
+
|
|
593
637
|
interface Box {
|
|
594
638
|
top: number;
|
|
595
639
|
left: number;
|
|
@@ -727,12 +771,30 @@ declare class ShortcutsCheatsheetComponent implements OnInit, OnDestroy {
|
|
|
727
771
|
/** Seções que o próprio spine já traz. `key` é também o valor de `?settings=` na URL. */
|
|
728
772
|
declare const SPINE_SETTINGS_KEYS: {
|
|
729
773
|
readonly appearance: "aparencia";
|
|
774
|
+
/** Tamanho do texto e animações. */
|
|
775
|
+
readonly accessibility: "acessibilidade";
|
|
730
776
|
readonly region: "regiao";
|
|
731
777
|
readonly shortcuts: "atalhos";
|
|
778
|
+
/** Novidades e tour guiado. */
|
|
779
|
+
readonly help: "ajuda";
|
|
780
|
+
/** Tipos de aviso do app e aviso do navegador (`SpineFeatures.notices`). */
|
|
781
|
+
readonly notices: "notificacoes";
|
|
782
|
+
/** Listas guardadas neste navegador (recentes, buscas, favoritos) e restaurar preferências. */
|
|
783
|
+
readonly data: "dados";
|
|
732
784
|
readonly account: "conta";
|
|
785
|
+
/** Verificação em duas etapas e códigos de recuperação (API da conta do Argos). */
|
|
786
|
+
readonly mfa: "mfa";
|
|
787
|
+
/** Sessão atual, token de acesso, tokens de aplicação e sessões e dispositivos. */
|
|
788
|
+
readonly sessions: "sessoes";
|
|
789
|
+
/** @deprecated A seção "Conta e segurança" virou "MFA" e "Sessões": `seguranca` abre a de MFA (ver
|
|
790
|
+
* `SPINE_SETTINGS_ALIASES`). Use `mfa` ou `sessions`. */
|
|
733
791
|
readonly security: "seguranca";
|
|
734
792
|
readonly about: "sobre";
|
|
735
793
|
};
|
|
794
|
+
/** Chaves antigas de `?settings=` que continuam abrindo a seção que as substituiu (links já publicados). */
|
|
795
|
+
declare const SPINE_SETTINGS_ALIASES: Readonly<Record<string, string>>;
|
|
796
|
+
/** Chave de seção que vale hoje: troca uma chave antiga pela nova; as demais passam iguais. */
|
|
797
|
+
declare function resolveSettingsSection(section: string): string;
|
|
736
798
|
/** Seção extra do painel, registrada pelo app (ex.: preferências de deploy do hefesto). */
|
|
737
799
|
interface SpineSettingsSection {
|
|
738
800
|
/** Identificador estável; também o que `?settings=<key>` abre. Não repetir os do spine. */
|
|
@@ -755,6 +817,7 @@ declare class SpineSettingsService {
|
|
|
755
817
|
readonly isOpen: _angular_core.WritableSignal<boolean>;
|
|
756
818
|
/** Seção pedida na abertura (vazio = a primeira). */
|
|
757
819
|
readonly section: _angular_core.WritableSignal<string>;
|
|
820
|
+
/** `section` aceita também as chaves antigas (`seguranca` abre "MFA"). */
|
|
758
821
|
open(section?: string): void;
|
|
759
822
|
close(): void;
|
|
760
823
|
toggle(): void;
|
|
@@ -762,11 +825,159 @@ declare class SpineSettingsService {
|
|
|
762
825
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineSettingsService>;
|
|
763
826
|
}
|
|
764
827
|
|
|
828
|
+
/** Espera depois da última mudança antes de gravar. */
|
|
829
|
+
declare const SPINE_PREFERENCES_SAVE_DELAY_MS = 1500;
|
|
830
|
+
/** Documento de preferências guardado no Argos (`PUT {api}/preferences`): chaves planas, todas opcionais. */
|
|
831
|
+
interface SpineAccountPreferencesDoc {
|
|
832
|
+
v: number;
|
|
833
|
+
themeMode?: HermesThemeMode;
|
|
834
|
+
family?: string;
|
|
835
|
+
density?: HermesDensity;
|
|
836
|
+
font?: string;
|
|
837
|
+
sidebar?: 'auto' | 'fixed' | 'compact';
|
|
838
|
+
language?: string;
|
|
839
|
+
timeZone?: string;
|
|
840
|
+
textScale?: number;
|
|
841
|
+
motion?: HermesMotionPreference;
|
|
842
|
+
hourCycle?: SpineHourCyclePreference;
|
|
843
|
+
weekStart?: Weekday | null;
|
|
844
|
+
characterKeys?: boolean;
|
|
845
|
+
idleMinutes?: number;
|
|
846
|
+
startPage?: SpineStartPagePreference;
|
|
847
|
+
notices?: Record<string, boolean>;
|
|
848
|
+
browserNotices?: boolean;
|
|
849
|
+
favorites?: unknown[];
|
|
850
|
+
}
|
|
851
|
+
/** `local`: só no navegador (recurso desligado, sem API da conta, ou Argos sem o endpoint). */
|
|
852
|
+
type SpineAccountPreferencesStatus = 'idle' | 'local' | 'loading' | 'saving' | 'synced' | 'error';
|
|
853
|
+
/**
|
|
854
|
+
* Preferências na conta (`SpineFeatures.accountPreferences`): espelha no Argos (`GET/PUT {api}/preferences`, por
|
|
855
|
+
* usuário e aplicação) o que o painel de configurações guarda no navegador — tema, cor, densidade, fonte, menu
|
|
856
|
+
* lateral, idioma, fuso, relógio, primeiro dia da semana, tamanho do texto, animações, atalhos de tecla única,
|
|
857
|
+
* inatividade, tela inicial, tipos de aviso e favoritos. As telas Aparência, Região etc. não mudam: o
|
|
858
|
+
* armazenamento local continua sendo a fonte de cada tela, e este serviço só sincroniza.
|
|
859
|
+
*
|
|
860
|
+
* - No início da sessão (`start()`, chamado pelo layout e pelo `/callback`), lê a conta e aplica o que estiver lá
|
|
861
|
+
* (pelos mesmos `set*` das telas); favoritos são somados (os da conta primeiro). Conta vazia recebe o que está no
|
|
862
|
+
* navegador.
|
|
863
|
+
* - Depois, cada mudança é gravada na conta, agrupada (`SPINE_PREFERENCES_SAVE_DELAY_MS`).
|
|
864
|
+
* - Sem a API da conta, com o recurso desligado ou com um Argos que não tem o endpoint (404/400), fica só no
|
|
865
|
+
* navegador (`status() === 'local'`), sem erro na tela.
|
|
866
|
+
*/
|
|
867
|
+
declare class SpineAccountPreferencesService {
|
|
868
|
+
private readonly browser;
|
|
869
|
+
private readonly api;
|
|
870
|
+
private readonly preferences;
|
|
871
|
+
private readonly quickAccess;
|
|
872
|
+
private readonly hermesTheme;
|
|
873
|
+
private readonly themeConfig;
|
|
874
|
+
private readonly theme;
|
|
875
|
+
private readonly density;
|
|
876
|
+
private readonly presets;
|
|
877
|
+
private readonly sidebar;
|
|
878
|
+
/** Recurso ligado e API da conta disponível. */
|
|
879
|
+
readonly enabled: boolean;
|
|
880
|
+
readonly status: _angular_core.WritableSignal<SpineAccountPreferencesStatus>;
|
|
881
|
+
/** Hora da última leitura/gravação bem-sucedida. */
|
|
882
|
+
readonly syncedAt: _angular_core.WritableSignal<Date | null>;
|
|
883
|
+
/** O documento que o navegador tem agora. */
|
|
884
|
+
readonly snapshot: _angular_core.Signal<SpineAccountPreferencesDoc>;
|
|
885
|
+
private loaded;
|
|
886
|
+
private lastSaved;
|
|
887
|
+
private timer;
|
|
888
|
+
private readyPromise;
|
|
889
|
+
constructor();
|
|
890
|
+
/**
|
|
891
|
+
* Lê a conta e aplica (uma vez por sessão do app; chamadas seguintes devolvem a mesma promessa). Nunca rejeita.
|
|
892
|
+
*/
|
|
893
|
+
start(): Promise<void>;
|
|
894
|
+
/** Como `start()`, mas sem esperar mais que `timeoutMs` (o login não fica parado se o Argos demorar). */
|
|
895
|
+
ready(timeoutMs?: number): Promise<void>;
|
|
896
|
+
/** Grava agora o que estiver pendente ("Sincronizar agora"); relê a conta se ela ainda não respondeu. */
|
|
897
|
+
syncNow(): Promise<void>;
|
|
898
|
+
private load;
|
|
899
|
+
/** Aplica o documento da conta pelos mesmos caminhos das telas (cada `set*` também grava no navegador). */
|
|
900
|
+
private apply;
|
|
901
|
+
private schedule;
|
|
902
|
+
private save;
|
|
903
|
+
private failed;
|
|
904
|
+
private clearTimer;
|
|
905
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineAccountPreferencesService, never>;
|
|
906
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineAccountPreferencesService>;
|
|
907
|
+
}
|
|
908
|
+
/** JSON com as chaves dos objetos em ordem (a conta pode devolver outra ordem). */
|
|
909
|
+
declare function stable(value: unknown): string;
|
|
910
|
+
|
|
911
|
+
/** Um aviso do app (`SpineNoticesService.notify`). */
|
|
912
|
+
interface SpineNotice {
|
|
913
|
+
title: string;
|
|
914
|
+
/** Detalhe (segunda linha do aviso do navegador; no aviso da tela vai depois do título). */
|
|
915
|
+
body?: string;
|
|
916
|
+
/** Caminho interno (`/solicitacoes/42`) aberto pelo "Abrir" do aviso e pelo clique no aviso do navegador. */
|
|
917
|
+
url?: string;
|
|
918
|
+
/** Cor do aviso na tela. Padrão: `info`. */
|
|
919
|
+
intent?: AlertVariant;
|
|
920
|
+
}
|
|
921
|
+
/** Permissão do navegador para avisos, ou `unsupported` (sem Notification API, ou fora do navegador). */
|
|
922
|
+
type SpineNoticePermission = NotificationPermission | 'unsupported';
|
|
923
|
+
/**
|
|
924
|
+
* Avisos do app (`SpineFeatures.notices`): o app declara os tipos que emite (`{ id, label }`) e chama
|
|
925
|
+
* `notify(tipo, aviso)` de onde já sabe do acontecimento (subscription, polling). Cada tipo pode ser desligado em
|
|
926
|
+
* Configurações › Notificações; tipo desligado não aparece. O aviso ligado:
|
|
927
|
+
*
|
|
928
|
+
* - aparece na tela (`HermesToastService`, com "Abrir" quando tem `url`);
|
|
929
|
+
* - com a aba em segundo plano, o aviso do navegador ligado e a permissão concedida, vira também um aviso do sistema
|
|
930
|
+
* (Notification API); clicar nele traz a aba para a frente e abre a `url`.
|
|
931
|
+
*
|
|
932
|
+
* Tipo não declarado em `SpineFeatures.notices.types` aparece sempre (em desenvolvimento, com um aviso no console).
|
|
933
|
+
*/
|
|
934
|
+
declare class SpineNoticesService {
|
|
935
|
+
private readonly browser;
|
|
936
|
+
private readonly zone;
|
|
937
|
+
private readonly injector;
|
|
938
|
+
private readonly toast;
|
|
939
|
+
private readonly preferences;
|
|
940
|
+
private readonly messages;
|
|
941
|
+
private readonly config;
|
|
942
|
+
private readonly warned;
|
|
943
|
+
/** Recurso ligado pelo app. */
|
|
944
|
+
readonly enabled: boolean;
|
|
945
|
+
/** Tipos declarados pelo app. */
|
|
946
|
+
readonly types: readonly SpineNoticeType[];
|
|
947
|
+
/** Permissão atual do navegador. */
|
|
948
|
+
readonly permission: _angular_core.WritableSignal<SpineNoticePermission>;
|
|
949
|
+
/** Aviso do navegador valendo de fato: ligado nas configurações e permitido pelo navegador. */
|
|
950
|
+
readonly browserActive: _angular_core.Signal<boolean>;
|
|
951
|
+
/** O tipo está ligado (escolha da pessoa ou, sem escolha, o `defaultEnabled` dele). */
|
|
952
|
+
isEnabled(typeId: string): boolean;
|
|
953
|
+
setEnabled(typeId: string, enabled: boolean): void;
|
|
954
|
+
/**
|
|
955
|
+
* Liga o aviso do navegador: pede a permissão quando ainda não foi pedida. Devolve se ficou ligado (permissão
|
|
956
|
+
* negada ou navegador sem suporte: continua desligado).
|
|
957
|
+
*/
|
|
958
|
+
enableBrowser(): Promise<boolean>;
|
|
959
|
+
disableBrowser(): void;
|
|
960
|
+
/** Relê a permissão (a pessoa pode ter mudado nas configurações do navegador). */
|
|
961
|
+
refreshPermission(): void;
|
|
962
|
+
/** Mostra o aviso, se o tipo estiver ligado. Devolve se mostrou. */
|
|
963
|
+
notify(typeId: string, notice: SpineNotice): boolean;
|
|
964
|
+
private system;
|
|
965
|
+
private open;
|
|
966
|
+
private readPermission;
|
|
967
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineNoticesService, never>;
|
|
968
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineNoticesService>;
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
/** Uma lista guardada neste navegador que a seção "Dados do navegador" limpa. */
|
|
972
|
+
type BrowserList = 'recents' | 'searches' | 'favorites';
|
|
765
973
|
/**
|
|
766
|
-
* Painel de configurações do shell (substitui as telas do antigo módulo "Sistema"):
|
|
767
|
-
*
|
|
768
|
-
*
|
|
769
|
-
*
|
|
974
|
+
* Painel de configurações do shell (substitui as telas do antigo módulo "Sistema"): Conta (perfil, nível,
|
|
975
|
+
* sessão, sair), MFA (verificação em duas etapas e códigos de recuperação do Argos), Sessões (token de
|
|
976
|
+
* acesso, tokens de aplicação e sessões e dispositivos do Argos), Aparência, Acessibilidade (tamanho do texto,
|
|
977
|
+
* animações), Região (idioma, fuso, formato de hora, primeiro dia da semana), Atalhos, Dados do navegador
|
|
978
|
+
* (limpar listas, restaurar preferências), Ajuda (novidades, tour) e Sobre, mais as seções que o app registrar
|
|
979
|
+
* com `provideSettingsSection`. Tudo vale na hora — cada controle chama o serviço que já persiste aquela
|
|
980
|
+
* preferência (tema, densidade, menu lateral, fuso, tamanho do texto…).
|
|
770
981
|
*
|
|
771
982
|
* Aberto por `SpineSettingsService.open()` — menu do perfil, `Ctrl+,` ou `?settings=<seção>`.
|
|
772
983
|
*/
|
|
@@ -797,6 +1008,7 @@ declare class SettingsPanelComponent {
|
|
|
797
1008
|
sidebar: string;
|
|
798
1009
|
sidebarDescription: string;
|
|
799
1010
|
sidebarKeywords: string;
|
|
1011
|
+
sidebarHelp: string;
|
|
800
1012
|
sidebarAuto: string;
|
|
801
1013
|
sidebarFixed: string;
|
|
802
1014
|
sidebarCompact: string;
|
|
@@ -810,6 +1022,16 @@ declare class SettingsPanelComponent {
|
|
|
810
1022
|
timeZoneKeywords: string;
|
|
811
1023
|
timeZoneHint: string;
|
|
812
1024
|
timeZoneAuto: string;
|
|
1025
|
+
hourCycle: string;
|
|
1026
|
+
hourCycleHint: string;
|
|
1027
|
+
hourCycleKeywords: string;
|
|
1028
|
+
hourCycleAuto: string;
|
|
1029
|
+
hourCycle24: string;
|
|
1030
|
+
hourCycle12: string;
|
|
1031
|
+
weekStart: string;
|
|
1032
|
+
weekStartDescription: string;
|
|
1033
|
+
weekStartKeywords: string;
|
|
1034
|
+
weekStartAuto: string;
|
|
813
1035
|
shortcuts: string;
|
|
814
1036
|
shortcutsDescription: string;
|
|
815
1037
|
shortcutsKeywords: string;
|
|
@@ -817,6 +1039,47 @@ declare class SettingsPanelComponent {
|
|
|
817
1039
|
tourDescription: string;
|
|
818
1040
|
tourKeywords: string;
|
|
819
1041
|
replayTour: string;
|
|
1042
|
+
accessibility: string;
|
|
1043
|
+
accessibilityKeywords: string;
|
|
1044
|
+
textSize: string;
|
|
1045
|
+
textSizeDescription: string;
|
|
1046
|
+
textSizeKeywords: string;
|
|
1047
|
+
motion: string;
|
|
1048
|
+
motionDescription: string;
|
|
1049
|
+
motionKeywords: string;
|
|
1050
|
+
motionSystem: string;
|
|
1051
|
+
motionReduce: string;
|
|
1052
|
+
motionFull: string;
|
|
1053
|
+
help: string;
|
|
1054
|
+
helpKeywords: string;
|
|
1055
|
+
news: string;
|
|
1056
|
+
newsDescription: string;
|
|
1057
|
+
newsKeywords: string;
|
|
1058
|
+
showNews: string;
|
|
1059
|
+
browserData: string;
|
|
1060
|
+
browserDataDescription: string;
|
|
1061
|
+
browserDataKeywords: string;
|
|
1062
|
+
recentPages: string;
|
|
1063
|
+
recentPagesKeywords: string;
|
|
1064
|
+
recentSearches: string;
|
|
1065
|
+
recentSearchesKeywords: string;
|
|
1066
|
+
favorites: string;
|
|
1067
|
+
favoritesKeywords: string;
|
|
1068
|
+
pagesCount: _trismegisto_primitives.PluralMessage;
|
|
1069
|
+
searchesCount: _trismegisto_primitives.PluralMessage;
|
|
1070
|
+
clear: string;
|
|
1071
|
+
confirmClear: string;
|
|
1072
|
+
cancel: string;
|
|
1073
|
+
recentPagesCleared: string;
|
|
1074
|
+
recentSearchesCleared: string;
|
|
1075
|
+
favoritesCleared: string;
|
|
1076
|
+
restorePreferences: string;
|
|
1077
|
+
restorePreferencesDescription: string;
|
|
1078
|
+
restorePreferencesHelp: string;
|
|
1079
|
+
restorePreferencesKeywords: string;
|
|
1080
|
+
restore: string;
|
|
1081
|
+
confirmRestore: string;
|
|
1082
|
+
preferencesRestored: string;
|
|
820
1083
|
account: string;
|
|
821
1084
|
accountKeywords: string;
|
|
822
1085
|
user: string;
|
|
@@ -833,15 +1096,17 @@ declare class SettingsPanelComponent {
|
|
|
833
1096
|
accessTokenDescription: string;
|
|
834
1097
|
accessTokenKeywords: string;
|
|
835
1098
|
copy: string;
|
|
1099
|
+
moreAbout: string;
|
|
836
1100
|
appTokens: string;
|
|
837
1101
|
appTokensDescription: string;
|
|
838
1102
|
appTokensKeywords: string;
|
|
1103
|
+
appTokensHelp: string;
|
|
839
1104
|
logout: string;
|
|
840
1105
|
logoutDescription: string;
|
|
841
1106
|
logoutKeywords: string;
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
1107
|
+
mfa: string;
|
|
1108
|
+
mfaDescription: string;
|
|
1109
|
+
mfaKeywords: string;
|
|
845
1110
|
signedInAccount: string;
|
|
846
1111
|
signedInRealm: string;
|
|
847
1112
|
twoFactor: string;
|
|
@@ -853,6 +1118,9 @@ declare class SettingsPanelComponent {
|
|
|
853
1118
|
sessions: string;
|
|
854
1119
|
sessionsDescription: string;
|
|
855
1120
|
sessionsKeywords: string;
|
|
1121
|
+
sessionsSection: string;
|
|
1122
|
+
sessionsSectionDescription: string;
|
|
1123
|
+
sessionsSectionKeywords: string;
|
|
856
1124
|
about: string;
|
|
857
1125
|
aboutKeywords: string;
|
|
858
1126
|
application: string;
|
|
@@ -880,14 +1148,28 @@ declare class SettingsPanelComponent {
|
|
|
880
1148
|
protected readonly fmt: typeof formatMessage;
|
|
881
1149
|
protected readonly keys: {
|
|
882
1150
|
readonly appearance: "aparencia";
|
|
1151
|
+
readonly accessibility: "acessibilidade";
|
|
883
1152
|
readonly region: "regiao";
|
|
884
1153
|
readonly shortcuts: "atalhos";
|
|
1154
|
+
readonly help: "ajuda";
|
|
1155
|
+
readonly notices: "notificacoes";
|
|
1156
|
+
readonly data: "dados";
|
|
885
1157
|
readonly account: "conta";
|
|
1158
|
+
readonly mfa: "mfa";
|
|
1159
|
+
readonly sessions: "sessoes";
|
|
886
1160
|
readonly security: "seguranca";
|
|
887
1161
|
readonly about: "sobre";
|
|
888
1162
|
};
|
|
1163
|
+
/** Seção aberta, com a chave antiga já trocada pela nova (`seguranca` → `mfa`). */
|
|
1164
|
+
protected readonly activeSection: _angular_core.Signal<string>;
|
|
889
1165
|
private readonly theme;
|
|
890
1166
|
private readonly hermesTheme;
|
|
1167
|
+
private readonly themeConfig;
|
|
1168
|
+
private readonly sidebarConfig;
|
|
1169
|
+
private readonly i18n;
|
|
1170
|
+
private readonly news;
|
|
1171
|
+
private readonly quickAccess;
|
|
1172
|
+
private readonly userStorage;
|
|
891
1173
|
private readonly presets;
|
|
892
1174
|
private readonly density;
|
|
893
1175
|
protected readonly sidebar: HermesSidebarService;
|
|
@@ -901,6 +1183,85 @@ declare class SettingsPanelComponent {
|
|
|
901
1183
|
private readonly config;
|
|
902
1184
|
protected readonly appSections: _trismegisto_spine_layout.SpineSettingsSection[];
|
|
903
1185
|
protected readonly appName: string;
|
|
1186
|
+
/** Recursos opcionais ligados pelo app (`SpineConfig.features`). */
|
|
1187
|
+
protected readonly features: _trismegisto_spine.SpineFeatures;
|
|
1188
|
+
protected readonly featureText: {
|
|
1189
|
+
aiAgent: string;
|
|
1190
|
+
aiAgentDescription: string;
|
|
1191
|
+
aiAgentKeywords: string;
|
|
1192
|
+
aiAgentHelp: string;
|
|
1193
|
+
aiAgentStart: string;
|
|
1194
|
+
aiAgentServers: string;
|
|
1195
|
+
aiAgentAccess: string;
|
|
1196
|
+
aiAgentReadOnly: string;
|
|
1197
|
+
aiAgentReadWrite: string;
|
|
1198
|
+
aiAgentWriteHint: string;
|
|
1199
|
+
aiAgentReadOnlyServer: string;
|
|
1200
|
+
aiAgentTokenName: string;
|
|
1201
|
+
aiAgentGenerate: string;
|
|
1202
|
+
aiAgentSelectServer: string;
|
|
1203
|
+
aiAgentResult: string;
|
|
1204
|
+
aiAgentResultHint: string;
|
|
1205
|
+
aiAgentCopy: string;
|
|
1206
|
+
aiAgentCopied: string;
|
|
1207
|
+
aiAgentDone: string;
|
|
1208
|
+
aiAgentCreateError: string;
|
|
1209
|
+
aiAgentUnavailable: string;
|
|
1210
|
+
activity: string;
|
|
1211
|
+
activityDescription: string;
|
|
1212
|
+
activityKeywords: string;
|
|
1213
|
+
activityFilter: string;
|
|
1214
|
+
activityAll: string;
|
|
1215
|
+
activityFailures: string;
|
|
1216
|
+
activityDetail: string;
|
|
1217
|
+
activityApp: string;
|
|
1218
|
+
activityEmpty: string;
|
|
1219
|
+
activityMore: string;
|
|
1220
|
+
activityShowing: string;
|
|
1221
|
+
activityLoadError: string;
|
|
1222
|
+
unknownIp: string;
|
|
1223
|
+
unknownApp: string;
|
|
1224
|
+
idle: string;
|
|
1225
|
+
idleDescription: string;
|
|
1226
|
+
idleKeywords: string;
|
|
1227
|
+
idleNever: string;
|
|
1228
|
+
idleOption: string;
|
|
1229
|
+
idleLimitHint: string;
|
|
1230
|
+
idleWarningHeading: string;
|
|
1231
|
+
idleWarningText: _trismegisto_primitives.PluralMessage;
|
|
1232
|
+
idleStay: string;
|
|
1233
|
+
idleLogout: string;
|
|
1234
|
+
startPage: string;
|
|
1235
|
+
startPageDescription: string;
|
|
1236
|
+
startPageKeywords: string;
|
|
1237
|
+
startHome: string;
|
|
1238
|
+
startLast: string;
|
|
1239
|
+
startFavorite: string;
|
|
1240
|
+
startPageHint: string;
|
|
1241
|
+
defaultBadge: string;
|
|
1242
|
+
defaultBadgeDescription: string;
|
|
1243
|
+
defaultBadgeKeywords: string;
|
|
1244
|
+
defaultBadgeAuto: string;
|
|
1245
|
+
defaultBadgeSaved: string;
|
|
1246
|
+
defaultBadgeError: string;
|
|
1247
|
+
defaultBadgeLoadError: string;
|
|
1248
|
+
notices: string;
|
|
1249
|
+
noticesDescription: string;
|
|
1250
|
+
noticesKeywords: string;
|
|
1251
|
+
browserNotices: string;
|
|
1252
|
+
browserNoticesDescription: string;
|
|
1253
|
+
browserNoticesDenied: string;
|
|
1254
|
+
browserNoticesUnsupported: string;
|
|
1255
|
+
noticeOpen: string;
|
|
1256
|
+
sync: string;
|
|
1257
|
+
syncDescription: string;
|
|
1258
|
+
syncKeywords: string;
|
|
1259
|
+
syncSynced: string;
|
|
1260
|
+
syncSaving: string;
|
|
1261
|
+
syncLocal: string;
|
|
1262
|
+
syncError: string;
|
|
1263
|
+
syncNow: string;
|
|
1264
|
+
};
|
|
904
1265
|
/**
|
|
905
1266
|
* "Copiar token de acesso" é ferramenta de desenvolvimento: põe o token da sessão (Bearer de tudo que a
|
|
906
1267
|
* pessoa pode fazer) na área de transferência, ao alcance de qualquer app/extensão que leia o clipboard.
|
|
@@ -922,6 +1283,12 @@ declare class SettingsPanelComponent {
|
|
|
922
1283
|
protected setDensity(value: string): void;
|
|
923
1284
|
protected setFont(value: string): void;
|
|
924
1285
|
protected setSidebarMode(value: string): void;
|
|
1286
|
+
/** 100%, 110%, 125%, 150% — no formato de porcentagem do idioma. */
|
|
1287
|
+
protected readonly textSizeOptions: _angular_core.Signal<readonly SegmentedOption<string>[]>;
|
|
1288
|
+
protected readonly textSizeValue: _angular_core.Signal<string>;
|
|
1289
|
+
protected readonly motionOptions: _angular_core.Signal<readonly SegmentedOption<string>[]>;
|
|
1290
|
+
protected setTextSize(value: string): void;
|
|
1291
|
+
protected setMotion(value: string): void;
|
|
925
1292
|
protected readonly languageOptions: _angular_core.Signal<{
|
|
926
1293
|
readonly value: string;
|
|
927
1294
|
readonly label: string;
|
|
@@ -932,22 +1299,99 @@ declare class SettingsPanelComponent {
|
|
|
932
1299
|
protected readonly timeZoneOptions: _angular_core.Signal<readonly ComboboxOption[]>;
|
|
933
1300
|
/** Hora agora no fuso efetivo — prévia de como as datas vão aparecer. */
|
|
934
1301
|
protected readonly timeZonePreview: _angular_core.Signal<string>;
|
|
1302
|
+
protected readonly hourCycleOptions: _angular_core.Signal<readonly SegmentedOption<string>[]>;
|
|
1303
|
+
/** Hora agora, no relógio escolhido — prévia do formato. */
|
|
1304
|
+
protected readonly hourCyclePreview: _angular_core.Signal<string>;
|
|
1305
|
+
/** Automático, domingo e segunda — os nomes dos dias saem do `Intl`, no idioma. */
|
|
1306
|
+
protected readonly weekStartOptions: _angular_core.Signal<readonly SegmentedOption<string>[]>;
|
|
1307
|
+
protected readonly weekStartValue: _angular_core.Signal<string>;
|
|
1308
|
+
protected setHourCycle(value: string): void;
|
|
1309
|
+
protected setWeekStart(value: string): void;
|
|
935
1310
|
/** Atalhos registrados (favoritos numa linha só) + os que outra peça dispara — os mesmos do painel "?". */
|
|
936
1311
|
protected readonly shortcutItems: _angular_core.Signal<readonly _trismegisto_angular.HermesShortcutItem[]>;
|
|
1312
|
+
/** "Ver novidades" só quando o app tem alguma vigente (`provideSpineNews`). */
|
|
1313
|
+
protected readonly hasNews: _angular_core.Signal<boolean>;
|
|
1314
|
+
/** Fecha o painel antes: novidades e tour ocupam a tela. */
|
|
1315
|
+
protected showNews(): void;
|
|
937
1316
|
protected replayTour(): void;
|
|
1317
|
+
/** Relida quando o painel abre e depois de limpar (as buscas recentes não têm sinal próprio). */
|
|
1318
|
+
private readonly dataVersion;
|
|
1319
|
+
protected readonly counts: _angular_core.Signal<Readonly<Record<BrowserList, number>>>;
|
|
1320
|
+
/** As três listas, com a contagem já no texto da linha. */
|
|
1321
|
+
protected readonly browserLists: _angular_core.Signal<{
|
|
1322
|
+
id: BrowserList;
|
|
1323
|
+
label: string;
|
|
1324
|
+
keywords: string;
|
|
1325
|
+
count: string;
|
|
1326
|
+
empty: boolean;
|
|
1327
|
+
}[]>;
|
|
1328
|
+
/** Ação destrutiva esperando confirmação (uma por vez, como nas listas do painel). */
|
|
1329
|
+
protected readonly confirming: _angular_core.WritableSignal<"preferences" | BrowserList | null>;
|
|
1330
|
+
constructor();
|
|
1331
|
+
protected cancelConfirm(): void;
|
|
1332
|
+
/** 1º clique pede confirmação; o 2º apaga a lista do usuário atual e avisa. */
|
|
1333
|
+
protected clearList(list: BrowserList): void;
|
|
1334
|
+
/**
|
|
1335
|
+
* Restaurar preferências (com confirmação): tema (sistema), cor principal (a padrão do app), densidade
|
|
1336
|
+
* (confortável), fonte (a padrão do app), menu lateral (o modo padrão do app), tamanho do texto (100%),
|
|
1337
|
+
* animações (sistema), formato de hora e primeiro dia da semana (automáticos). Idioma, fuso horário e
|
|
1338
|
+
* atalhos de tecla única ficam: mudam como a pessoa lê e digita, e não são "aparência".
|
|
1339
|
+
*/
|
|
1340
|
+
protected restorePreferences(): void;
|
|
938
1341
|
protected get profile(): _orfeu_angular_core.UserProfile;
|
|
939
1342
|
protected get badge(): _orfeu_angular_core.Badge | null;
|
|
940
1343
|
/** Validade da sessão lida do `exp` do próprio token (só leitura do payload, sem validar). */
|
|
941
1344
|
protected get sessionExpiry(): string;
|
|
942
1345
|
protected copyToken(): Promise<void>;
|
|
943
|
-
private readonly
|
|
944
|
-
|
|
1346
|
+
private readonly logoutService;
|
|
1347
|
+
/** "Saindo…" no botão; volta a `false` também quando a saída falha. */
|
|
1348
|
+
protected readonly logoutPending: _angular_core.WritableSignal<boolean>;
|
|
1349
|
+
/** O painel fica aberto até a saída dar certo: com falha, a pessoa continua aqui, com o aviso de erro. */
|
|
1350
|
+
protected logout(): Promise<void>;
|
|
945
1351
|
/** API da conta no Argos (Bearer com o token da sessão), a partir do `AUTH_CONFIG`. Sem ela (sem
|
|
946
|
-
* `authority`/`realmId`, ou com `CHANGE_ME`) a seção não
|
|
1352
|
+
* `authority`/`realmId`, ou com `CHANGE_ME`) a seção MFA e a linha "Sessões e dispositivos" não aparecem. */
|
|
947
1353
|
protected readonly accountSecurity: boolean;
|
|
948
1354
|
/** Login da pessoa (`preferred_username` do token, ou o e-mail), para dizer QUAL conta do Argos. */
|
|
949
1355
|
protected get accountLogin(): string;
|
|
1356
|
+
/** Realm pelo nome (`master`, `Minha Empresa`); um id (UUID) não diz nada a quem lê e fica de fora. */
|
|
950
1357
|
protected get accountRealm(): string;
|
|
1358
|
+
/** Linhas da seção Sessões, cada uma com a própria condição. "Tokens de aplicação" sempre aparece (sem
|
|
1359
|
+
* `SPINE_ADMIN_API` os tokens explicam que não estão disponíveis); o token de acesso só com
|
|
1360
|
+
* `technicalDocs`; sessões e dispositivos só com a API da conta. A "Sessão" (validade) fica em Conta. */
|
|
1361
|
+
protected readonly sessionsItems: {
|
|
1362
|
+
readonly accessToken: boolean;
|
|
1363
|
+
readonly appTokens: true;
|
|
1364
|
+
readonly aiAgent: boolean;
|
|
1365
|
+
readonly devices: boolean;
|
|
1366
|
+
};
|
|
1367
|
+
/** Sem nenhuma linha visível a seção não aparece. */
|
|
1368
|
+
protected readonly hasSessionsSection: boolean;
|
|
1369
|
+
private readonly idle;
|
|
1370
|
+
private readonly startPageService;
|
|
1371
|
+
private readonly router;
|
|
1372
|
+
protected readonly notices: SpineNoticesService;
|
|
1373
|
+
protected readonly accountPreferences: SpineAccountPreferencesService;
|
|
1374
|
+
/** Conta › "Encerrar por inatividade": opções dentro dos limites do app. */
|
|
1375
|
+
protected readonly idleOptions: _angular_core.Signal<readonly SegmentedOption<string>[]>;
|
|
1376
|
+
protected readonly idleValue: _angular_core.Signal<string>;
|
|
1377
|
+
protected readonly idleHint: string;
|
|
1378
|
+
protected setIdle(value: string): void;
|
|
1379
|
+
/** Conta › "Tela inicial": início, última tela e cada favorito. */
|
|
1380
|
+
protected readonly startPageOptions: _angular_core.Signal<{
|
|
1381
|
+
value: string;
|
|
1382
|
+
label: string;
|
|
1383
|
+
}[]>;
|
|
1384
|
+
/** Favorito escolhido que deixou de ser favorito: mostra "Início" (é para onde o login vai). */
|
|
1385
|
+
protected readonly startPageValue: _angular_core.Signal<SpineStartPagePreference>;
|
|
1386
|
+
protected readonly quickAccessHasFavorites: _angular_core.Signal<boolean>;
|
|
1387
|
+
protected setStartPage(value: string): void;
|
|
1388
|
+
/** Conta › "Crachá padrão": só com mais de um crachá nesta aplicação (claim `badges` do token). */
|
|
1389
|
+
protected get showDefaultBadge(): boolean;
|
|
1390
|
+
/** Notificações: aviso do navegador ligado (escolha + permissão). */
|
|
1391
|
+
protected setBrowserNotices(enabled: boolean): Promise<void>;
|
|
1392
|
+
/** "Preferências na conta": situação da sincronização. */
|
|
1393
|
+
protected readonly syncStatus: _angular_core.Signal<string>;
|
|
1394
|
+
protected syncNow(): void;
|
|
951
1395
|
protected readonly dependencies: {
|
|
952
1396
|
version: string | undefined;
|
|
953
1397
|
name: string;
|
|
@@ -1010,6 +1454,8 @@ declare class SpineAppTokensService {
|
|
|
1010
1454
|
private readonly auth;
|
|
1011
1455
|
private readonly adminApi;
|
|
1012
1456
|
readonly available: boolean;
|
|
1457
|
+
/** Sobe a cada token criado por aqui (o "Conectar um agente de IA" cria um; a lista de tokens relê). */
|
|
1458
|
+
readonly changes: _angular_core.WritableSignal<number>;
|
|
1013
1459
|
private get baseUrl();
|
|
1014
1460
|
private get headers();
|
|
1015
1461
|
list(): Promise<AppTokenList>;
|
|
@@ -1077,6 +1523,55 @@ interface AccountSession {
|
|
|
1077
1523
|
name: string | null;
|
|
1078
1524
|
}[];
|
|
1079
1525
|
}
|
|
1526
|
+
/** Uma tentativa de entrar na conta (`GET {api}/activity`): sucesso, falha ou cancelamento. */
|
|
1527
|
+
interface AccountActivityEntry {
|
|
1528
|
+
id: string;
|
|
1529
|
+
/** Data e hora (ISO). */
|
|
1530
|
+
at: string;
|
|
1531
|
+
result: 'success' | 'failure' | 'cancelled';
|
|
1532
|
+
/** `local`, `mfa`, `github`, `google`, `keycloak`, `entraid`. */
|
|
1533
|
+
method: string;
|
|
1534
|
+
/** Motivo da falha (`bad_password`, `mfa_failed`, `locked`…); `null` no sucesso. */
|
|
1535
|
+
reason: string | null;
|
|
1536
|
+
ip: string | null;
|
|
1537
|
+
device: {
|
|
1538
|
+
browser?: string | null;
|
|
1539
|
+
os?: string | null;
|
|
1540
|
+
mobile: boolean;
|
|
1541
|
+
label: string;
|
|
1542
|
+
};
|
|
1543
|
+
/** Aplicativo em que a pessoa tentou entrar. */
|
|
1544
|
+
client: {
|
|
1545
|
+
client_id: string;
|
|
1546
|
+
name: string | null;
|
|
1547
|
+
} | null;
|
|
1548
|
+
}
|
|
1549
|
+
interface AccountActivityPage {
|
|
1550
|
+
attempts: AccountActivityEntry[];
|
|
1551
|
+
total: number;
|
|
1552
|
+
limit: number;
|
|
1553
|
+
offset: number;
|
|
1554
|
+
/** Começo da janela (90 dias). */
|
|
1555
|
+
since: string;
|
|
1556
|
+
}
|
|
1557
|
+
/** Crachás da pessoa nesta aplicação e o padrão guardado no Argos (`GET {api}/badges`). */
|
|
1558
|
+
interface AccountBadges {
|
|
1559
|
+
client: {
|
|
1560
|
+
id: string;
|
|
1561
|
+
name: string | null;
|
|
1562
|
+
};
|
|
1563
|
+
badges: {
|
|
1564
|
+
id: string;
|
|
1565
|
+
name: string;
|
|
1566
|
+
}[];
|
|
1567
|
+
default_badge_id: string | null;
|
|
1568
|
+
active_badge_id: string | null;
|
|
1569
|
+
}
|
|
1570
|
+
/** Preferências guardadas na conta para esta aplicação (`GET/PUT {api}/preferences`). */
|
|
1571
|
+
interface AccountPreferences {
|
|
1572
|
+
preferences: Record<string, unknown>;
|
|
1573
|
+
updated_at: string | null;
|
|
1574
|
+
}
|
|
1080
1575
|
type AccountReauth = {
|
|
1081
1576
|
password: string;
|
|
1082
1577
|
} | {
|
|
@@ -1133,6 +1628,20 @@ declare class SpineAccountSecurityService {
|
|
|
1133
1628
|
endOtherSessions(): Promise<{
|
|
1134
1629
|
ended: number;
|
|
1135
1630
|
}>;
|
|
1631
|
+
/** Entradas e tentativas desta conta nos últimos 90 dias, da mais recente. `result` filtra só sucessos ou falhas. */
|
|
1632
|
+
activity(params?: {
|
|
1633
|
+
limit?: number;
|
|
1634
|
+
offset?: number;
|
|
1635
|
+
result?: 'success' | 'failure';
|
|
1636
|
+
}): Promise<AccountActivityPage>;
|
|
1637
|
+
badges(): Promise<AccountBadges>;
|
|
1638
|
+
/** Crachá com que o login entra nesta aplicação (`null` volta ao padrão: o de menor nível). */
|
|
1639
|
+
setDefaultBadge(badgeId: string | null): Promise<{
|
|
1640
|
+
default_badge_id: string | null;
|
|
1641
|
+
}>;
|
|
1642
|
+
preferences(): Promise<AccountPreferences>;
|
|
1643
|
+
/** Substitui o documento de preferências desta aplicação na conta (até 16 KB). */
|
|
1644
|
+
savePreferences(preferences: Record<string, unknown>): Promise<AccountPreferences>;
|
|
1136
1645
|
private send;
|
|
1137
1646
|
private request;
|
|
1138
1647
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineAccountSecurityService, never>;
|
|
@@ -1141,6 +1650,360 @@ declare class SpineAccountSecurityService {
|
|
|
1141
1650
|
/** Código de erro que o Argos devolveu (`{ error: 'invalid_code' }`), ou `''`. */
|
|
1142
1651
|
declare function accountErrorCode(err: unknown): string;
|
|
1143
1652
|
|
|
1653
|
+
/** Monta o `.mcp.json` do Claude Code: uma entrada por servidor, todas com o mesmo token. Com `write`, cada servidor
|
|
1654
|
+
* que tem `writeScopes` pede esses escopos; os demais (e todos sem `write`) vão com `readScopes`, ou sem o header
|
|
1655
|
+
* (o MCP já é só leitura sem ele). URL relativa é resolvida contra `origin`. */
|
|
1656
|
+
declare function buildMcpConfig(servers: readonly SpineMcpServer[], token: string, write: boolean, origin: string): string;
|
|
1657
|
+
/**
|
|
1658
|
+
* Sessões › "Conectar um agente de IA" (`SpineFeatures.aiAgent`): em um passo, cria um token de aplicação pessoal
|
|
1659
|
+
* (`x-app-token`, a mesma API de "Tokens de aplicação") e monta a configuração MCP pronta para o Claude Code, com os
|
|
1660
|
+
* servidores que o app declarou e os escopos do acesso escolhido (só leitura ou leitura e escrita). O token aparece
|
|
1661
|
+
* uma única vez, dentro da configuração; nunca vai para o console nem para o armazenamento do navegador, e some ao
|
|
1662
|
+
* concluir ou fechar o painel.
|
|
1663
|
+
*/
|
|
1664
|
+
declare class AiAgentComponent {
|
|
1665
|
+
private readonly messages;
|
|
1666
|
+
protected readonly t: {
|
|
1667
|
+
aiAgent: string;
|
|
1668
|
+
aiAgentDescription: string;
|
|
1669
|
+
aiAgentKeywords: string;
|
|
1670
|
+
aiAgentHelp: string;
|
|
1671
|
+
aiAgentStart: string;
|
|
1672
|
+
aiAgentServers: string;
|
|
1673
|
+
aiAgentAccess: string;
|
|
1674
|
+
aiAgentReadOnly: string;
|
|
1675
|
+
aiAgentReadWrite: string;
|
|
1676
|
+
aiAgentWriteHint: string;
|
|
1677
|
+
aiAgentReadOnlyServer: string;
|
|
1678
|
+
aiAgentTokenName: string;
|
|
1679
|
+
aiAgentGenerate: string;
|
|
1680
|
+
aiAgentSelectServer: string;
|
|
1681
|
+
aiAgentResult: string;
|
|
1682
|
+
aiAgentResultHint: string;
|
|
1683
|
+
aiAgentCopy: string;
|
|
1684
|
+
aiAgentCopied: string;
|
|
1685
|
+
aiAgentDone: string;
|
|
1686
|
+
aiAgentCreateError: string;
|
|
1687
|
+
aiAgentUnavailable: string;
|
|
1688
|
+
activity: string;
|
|
1689
|
+
activityDescription: string;
|
|
1690
|
+
activityKeywords: string;
|
|
1691
|
+
activityFilter: string;
|
|
1692
|
+
activityAll: string;
|
|
1693
|
+
activityFailures: string;
|
|
1694
|
+
activityDetail: string;
|
|
1695
|
+
activityApp: string;
|
|
1696
|
+
activityEmpty: string;
|
|
1697
|
+
activityMore: string;
|
|
1698
|
+
activityShowing: string;
|
|
1699
|
+
activityLoadError: string;
|
|
1700
|
+
unknownIp: string;
|
|
1701
|
+
unknownApp: string;
|
|
1702
|
+
idle: string;
|
|
1703
|
+
idleDescription: string;
|
|
1704
|
+
idleKeywords: string;
|
|
1705
|
+
idleNever: string;
|
|
1706
|
+
idleOption: string;
|
|
1707
|
+
idleLimitHint: string;
|
|
1708
|
+
idleWarningHeading: string;
|
|
1709
|
+
idleWarningText: _trismegisto_primitives.PluralMessage;
|
|
1710
|
+
idleStay: string;
|
|
1711
|
+
idleLogout: string;
|
|
1712
|
+
startPage: string;
|
|
1713
|
+
startPageDescription: string;
|
|
1714
|
+
startPageKeywords: string;
|
|
1715
|
+
startHome: string;
|
|
1716
|
+
startLast: string;
|
|
1717
|
+
startFavorite: string;
|
|
1718
|
+
startPageHint: string;
|
|
1719
|
+
defaultBadge: string;
|
|
1720
|
+
defaultBadgeDescription: string;
|
|
1721
|
+
defaultBadgeKeywords: string;
|
|
1722
|
+
defaultBadgeAuto: string;
|
|
1723
|
+
defaultBadgeSaved: string;
|
|
1724
|
+
defaultBadgeError: string;
|
|
1725
|
+
defaultBadgeLoadError: string;
|
|
1726
|
+
notices: string;
|
|
1727
|
+
noticesDescription: string;
|
|
1728
|
+
noticesKeywords: string;
|
|
1729
|
+
browserNotices: string;
|
|
1730
|
+
browserNoticesDescription: string;
|
|
1731
|
+
browserNoticesDenied: string;
|
|
1732
|
+
browserNoticesUnsupported: string;
|
|
1733
|
+
noticeOpen: string;
|
|
1734
|
+
sync: string;
|
|
1735
|
+
syncDescription: string;
|
|
1736
|
+
syncKeywords: string;
|
|
1737
|
+
syncSynced: string;
|
|
1738
|
+
syncSaving: string;
|
|
1739
|
+
syncLocal: string;
|
|
1740
|
+
syncError: string;
|
|
1741
|
+
syncNow: string;
|
|
1742
|
+
};
|
|
1743
|
+
protected readonly tokens: {
|
|
1744
|
+
unavailable: string;
|
|
1745
|
+
created: string;
|
|
1746
|
+
sendHeader: string;
|
|
1747
|
+
copyToken: string;
|
|
1748
|
+
saved: string;
|
|
1749
|
+
loading: string;
|
|
1750
|
+
expiredOn: string;
|
|
1751
|
+
expiresOn: string;
|
|
1752
|
+
lastUsed: string;
|
|
1753
|
+
never: string;
|
|
1754
|
+
revoke: string;
|
|
1755
|
+
confirmRevoke: string;
|
|
1756
|
+
empty: string;
|
|
1757
|
+
noBadges: string;
|
|
1758
|
+
appOnly: string;
|
|
1759
|
+
accessLevel: string;
|
|
1760
|
+
name: string;
|
|
1761
|
+
namePlaceholder: string;
|
|
1762
|
+
nameRequired: string;
|
|
1763
|
+
nameMax: string;
|
|
1764
|
+
validity: string;
|
|
1765
|
+
days30: string;
|
|
1766
|
+
days90: string;
|
|
1767
|
+
months6: string;
|
|
1768
|
+
year1: string;
|
|
1769
|
+
create: string;
|
|
1770
|
+
cancel: string;
|
|
1771
|
+
newToken: string;
|
|
1772
|
+
validCount: string;
|
|
1773
|
+
limit: string;
|
|
1774
|
+
loadError: string;
|
|
1775
|
+
badgesError: string;
|
|
1776
|
+
createError: string;
|
|
1777
|
+
copied: string;
|
|
1778
|
+
copyFailed: string;
|
|
1779
|
+
revoked: string;
|
|
1780
|
+
revokeError: string;
|
|
1781
|
+
};
|
|
1782
|
+
protected readonly fmt: typeof formatMessage;
|
|
1783
|
+
private readonly service;
|
|
1784
|
+
private readonly toast;
|
|
1785
|
+
private readonly preferences;
|
|
1786
|
+
protected readonly available: boolean;
|
|
1787
|
+
protected readonly servers: readonly SpineMcpServer[];
|
|
1788
|
+
protected readonly open: _angular_core.WritableSignal<boolean>;
|
|
1789
|
+
protected readonly starting: _angular_core.WritableSignal<boolean>;
|
|
1790
|
+
protected readonly submitting: _angular_core.WritableSignal<boolean>;
|
|
1791
|
+
protected readonly selected: _angular_core.WritableSignal<ReadonlySet<string>>;
|
|
1792
|
+
protected readonly access: _angular_core.WritableSignal<"read" | "write">;
|
|
1793
|
+
protected readonly badges: _angular_core.WritableSignal<{
|
|
1794
|
+
id: string;
|
|
1795
|
+
name: string;
|
|
1796
|
+
}[]>;
|
|
1797
|
+
protected readonly badgeId: _angular_core.WritableSignal<string>;
|
|
1798
|
+
protected readonly validity: _angular_core.WritableSignal<string>;
|
|
1799
|
+
/** Configuração gerada (com o token), mostrada uma única vez. */
|
|
1800
|
+
protected readonly result: _angular_core.WritableSignal<{
|
|
1801
|
+
config: string;
|
|
1802
|
+
expires: string;
|
|
1803
|
+
} | null>;
|
|
1804
|
+
protected readonly canWrite: _angular_core.Signal<boolean>;
|
|
1805
|
+
protected readonly noBadges: _angular_core.Signal<boolean>;
|
|
1806
|
+
protected readonly canSubmit: _angular_core.Signal<boolean>;
|
|
1807
|
+
protected readonly accessOptions: _angular_core.Signal<readonly SegmentedOption<string>[]>;
|
|
1808
|
+
protected readonly badgeOptions: _angular_core.Signal<readonly SegmentedOption<string>[]>;
|
|
1809
|
+
protected readonly validityOptions: _angular_core.Signal<readonly SegmentedOption<string>[]>;
|
|
1810
|
+
protected serverLabel(server: SpineMcpServer): string;
|
|
1811
|
+
protected toggleServer(name: string, checked: boolean): void;
|
|
1812
|
+
protected start(): Promise<void>;
|
|
1813
|
+
protected cancel(): void;
|
|
1814
|
+
protected generate(): Promise<void>;
|
|
1815
|
+
protected copy(): Promise<void>;
|
|
1816
|
+
protected done(): void;
|
|
1817
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AiAgentComponent, never>;
|
|
1818
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AiAgentComponent, "spine-ai-agent", never, {}, {}, never, never, true, never>;
|
|
1819
|
+
}
|
|
1820
|
+
|
|
1821
|
+
/** Limites de "Encerrar por inatividade" já resolvidos a partir de `SpineFeatures.idleTimeout`. */
|
|
1822
|
+
interface SpineIdleLimits {
|
|
1823
|
+
enabled: boolean;
|
|
1824
|
+
/** Minutos mínimos (0 = sem mínimo). */
|
|
1825
|
+
min: number;
|
|
1826
|
+
/** Minutos máximos (0 = sem máximo; com máximo a opção "Nunca" some). */
|
|
1827
|
+
max: number;
|
|
1828
|
+
/** Opções oferecidas (0 = nunca), já filtradas pelos limites. */
|
|
1829
|
+
options: readonly number[];
|
|
1830
|
+
}
|
|
1831
|
+
/** Opções e limites de inatividade do app. Sem o recurso, `enabled` é falso e não há opções. */
|
|
1832
|
+
declare function idleLimits(features: SpineFeatures | undefined): SpineIdleLimits;
|
|
1833
|
+
/** Minutos que valem de fato: a escolha da pessoa dentro dos limites do app (0 = não encerra). */
|
|
1834
|
+
declare function effectiveIdleMinutes(chosen: number, limits: SpineIdleLimits): number;
|
|
1835
|
+
|
|
1836
|
+
/** Segundos de aviso antes de encerrar. */
|
|
1837
|
+
declare const SPINE_IDLE_WARNING_SECONDS = 60;
|
|
1838
|
+
/**
|
|
1839
|
+
* Encerrar por inatividade (`SpineFeatures.idleTimeout`): conta o tempo sem uso (ponteiro, teclado, rolagem) em
|
|
1840
|
+
* TODAS as abas do app — a última atividade vai para o `localStorage` (`hermes_<clientId>_last_activity`) e cada aba
|
|
1841
|
+
* confere a mais recente —, abre o aviso com contagem regressiva `SPINE_IDLE_WARNING_SECONDS` antes do fim e, se
|
|
1842
|
+
* ninguém responder, sai pelo `SpineLogoutService` (o mesmo "Sair" do menu). Com o aviso aberto, só "Continuar
|
|
1843
|
+
* conectado" (ou atividade em outra aba) mantém a sessão: mexer o ponteiro sobre o aviso não conta.
|
|
1844
|
+
*
|
|
1845
|
+
* Os minutos vêm do `SpinePreferencesService.idleMinutes`, limitados pelo app (`effectiveIdleMinutes`). Ligado pelo
|
|
1846
|
+
* `LayoutComponent` (só existe com sessão); não faz nada fora do navegador.
|
|
1847
|
+
*/
|
|
1848
|
+
declare class SpineIdleService {
|
|
1849
|
+
private readonly browser;
|
|
1850
|
+
private readonly zone;
|
|
1851
|
+
private readonly preferences;
|
|
1852
|
+
private readonly logoutService;
|
|
1853
|
+
private readonly config;
|
|
1854
|
+
private readonly storageKey;
|
|
1855
|
+
readonly limits: _trismegisto_spine_layout.SpineIdleLimits;
|
|
1856
|
+
/** Minutos que valem agora (0 = não encerra). */
|
|
1857
|
+
readonly minutes: _angular_core.Signal<number>;
|
|
1858
|
+
/** Aviso aberto. */
|
|
1859
|
+
readonly warning: _angular_core.WritableSignal<boolean>;
|
|
1860
|
+
/** Segundos que faltam, enquanto o aviso está aberto. */
|
|
1861
|
+
readonly secondsLeft: _angular_core.WritableSignal<number>;
|
|
1862
|
+
private lastActivity;
|
|
1863
|
+
private lastWrite;
|
|
1864
|
+
private timer;
|
|
1865
|
+
private expiring;
|
|
1866
|
+
/** Ligado por `start()` (o layout, que só existe com sessão). */
|
|
1867
|
+
private readonly active;
|
|
1868
|
+
private readonly onActivity;
|
|
1869
|
+
constructor();
|
|
1870
|
+
/** Liga a contagem (idempotente). Para sozinha quando a escolha vira "Nunca". */
|
|
1871
|
+
start(): void;
|
|
1872
|
+
/** "Continuar conectado": fecha o aviso e recomeça a contagem. */
|
|
1873
|
+
stay(): void;
|
|
1874
|
+
/** "Sair agora". */
|
|
1875
|
+
logoutNow(): void;
|
|
1876
|
+
/** Conta uma atividade agora (e a grava para as outras abas no máximo a cada 5 s, ou já, com `force`). */
|
|
1877
|
+
touch(force?: boolean): void;
|
|
1878
|
+
/** Confere o tempo sem uso: abre o aviso, atualiza a contagem ou encerra. Exposto para os testes. */
|
|
1879
|
+
check(now?: number): void;
|
|
1880
|
+
private storedActivity;
|
|
1881
|
+
private run;
|
|
1882
|
+
private stop;
|
|
1883
|
+
private expire;
|
|
1884
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineIdleService, never>;
|
|
1885
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineIdleService>;
|
|
1886
|
+
}
|
|
1887
|
+
|
|
1888
|
+
/**
|
|
1889
|
+
* Aviso de "Encerrar por inatividade" (`SpineIdleService`): contagem regressiva, "Continuar conectado" (padrão, e o
|
|
1890
|
+
* que fechar pelo X/Esc faz) e "Sair agora". Montado uma vez no `spine-layout`.
|
|
1891
|
+
*/
|
|
1892
|
+
declare class SpineIdleWarningComponent {
|
|
1893
|
+
protected readonly idle: SpineIdleService;
|
|
1894
|
+
private readonly messages;
|
|
1895
|
+
protected readonly text: {
|
|
1896
|
+
aiAgent: string;
|
|
1897
|
+
aiAgentDescription: string;
|
|
1898
|
+
aiAgentKeywords: string;
|
|
1899
|
+
aiAgentHelp: string;
|
|
1900
|
+
aiAgentStart: string;
|
|
1901
|
+
aiAgentServers: string;
|
|
1902
|
+
aiAgentAccess: string;
|
|
1903
|
+
aiAgentReadOnly: string;
|
|
1904
|
+
aiAgentReadWrite: string;
|
|
1905
|
+
aiAgentWriteHint: string;
|
|
1906
|
+
aiAgentReadOnlyServer: string;
|
|
1907
|
+
aiAgentTokenName: string;
|
|
1908
|
+
aiAgentGenerate: string;
|
|
1909
|
+
aiAgentSelectServer: string;
|
|
1910
|
+
aiAgentResult: string;
|
|
1911
|
+
aiAgentResultHint: string;
|
|
1912
|
+
aiAgentCopy: string;
|
|
1913
|
+
aiAgentCopied: string;
|
|
1914
|
+
aiAgentDone: string;
|
|
1915
|
+
aiAgentCreateError: string;
|
|
1916
|
+
aiAgentUnavailable: string;
|
|
1917
|
+
activity: string;
|
|
1918
|
+
activityDescription: string;
|
|
1919
|
+
activityKeywords: string;
|
|
1920
|
+
activityFilter: string;
|
|
1921
|
+
activityAll: string;
|
|
1922
|
+
activityFailures: string;
|
|
1923
|
+
activityDetail: string;
|
|
1924
|
+
activityApp: string;
|
|
1925
|
+
activityEmpty: string;
|
|
1926
|
+
activityMore: string;
|
|
1927
|
+
activityShowing: string;
|
|
1928
|
+
activityLoadError: string;
|
|
1929
|
+
unknownIp: string;
|
|
1930
|
+
unknownApp: string;
|
|
1931
|
+
idle: string;
|
|
1932
|
+
idleDescription: string;
|
|
1933
|
+
idleKeywords: string;
|
|
1934
|
+
idleNever: string;
|
|
1935
|
+
idleOption: string;
|
|
1936
|
+
idleLimitHint: string;
|
|
1937
|
+
idleWarningHeading: string;
|
|
1938
|
+
idleWarningText: _trismegisto_primitives.PluralMessage;
|
|
1939
|
+
idleStay: string;
|
|
1940
|
+
idleLogout: string;
|
|
1941
|
+
startPage: string;
|
|
1942
|
+
startPageDescription: string;
|
|
1943
|
+
startPageKeywords: string;
|
|
1944
|
+
startHome: string;
|
|
1945
|
+
startLast: string;
|
|
1946
|
+
startFavorite: string;
|
|
1947
|
+
startPageHint: string;
|
|
1948
|
+
defaultBadge: string;
|
|
1949
|
+
defaultBadgeDescription: string;
|
|
1950
|
+
defaultBadgeKeywords: string;
|
|
1951
|
+
defaultBadgeAuto: string;
|
|
1952
|
+
defaultBadgeSaved: string;
|
|
1953
|
+
defaultBadgeError: string;
|
|
1954
|
+
defaultBadgeLoadError: string;
|
|
1955
|
+
notices: string;
|
|
1956
|
+
noticesDescription: string;
|
|
1957
|
+
noticesKeywords: string;
|
|
1958
|
+
browserNotices: string;
|
|
1959
|
+
browserNoticesDescription: string;
|
|
1960
|
+
browserNoticesDenied: string;
|
|
1961
|
+
browserNoticesUnsupported: string;
|
|
1962
|
+
noticeOpen: string;
|
|
1963
|
+
sync: string;
|
|
1964
|
+
syncDescription: string;
|
|
1965
|
+
syncKeywords: string;
|
|
1966
|
+
syncSynced: string;
|
|
1967
|
+
syncSaving: string;
|
|
1968
|
+
syncLocal: string;
|
|
1969
|
+
syncError: string;
|
|
1970
|
+
syncNow: string;
|
|
1971
|
+
};
|
|
1972
|
+
protected readonly countdown: _angular_core.Signal<string>;
|
|
1973
|
+
protected onOpenChange(open: boolean): void;
|
|
1974
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineIdleWarningComponent, never>;
|
|
1975
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SpineIdleWarningComponent, "spine-idle-warning", never, {}, {}, never, never, true, never>;
|
|
1976
|
+
}
|
|
1977
|
+
|
|
1978
|
+
/** Caminho interno seguro (`/x`, nunca `//host` nem `http:`). */
|
|
1979
|
+
declare function isInternalPath(url: unknown): url is string;
|
|
1980
|
+
/**
|
|
1981
|
+
* Tela inicial (`SpineFeatures.startPage`): para onde o app vai depois do login quando a pessoa não pediu uma URL
|
|
1982
|
+
* (`/callback` sem URL de retorno, ou com `/` ou `/home`) — o início do app, um favorito ou a última tela visitada.
|
|
1983
|
+
*
|
|
1984
|
+
* A última tela fica no `SpineUserStorage` (`lastPage`, por usuário) e só é gravada enquanto a escolha for
|
|
1985
|
+
* "Última tela visitada" (`track()`, ligado pelo `LayoutComponent`); ao contrário dos recentes, ela fica no logout.
|
|
1986
|
+
*/
|
|
1987
|
+
declare class SpineStartPageService {
|
|
1988
|
+
private readonly browser;
|
|
1989
|
+
private readonly injector;
|
|
1990
|
+
private readonly destroyRef;
|
|
1991
|
+
private readonly preferences;
|
|
1992
|
+
private readonly storage;
|
|
1993
|
+
readonly enabled: boolean;
|
|
1994
|
+
private tracking;
|
|
1995
|
+
/** Grava a URL de cada navegação enquanto a escolha for "Última tela visitada" (idempotente). */
|
|
1996
|
+
track(): void;
|
|
1997
|
+
/** Guarda `url` como última tela (só com a escolha "Última tela visitada"). */
|
|
1998
|
+
remember(url: string): void;
|
|
1999
|
+
/** Destino da tela inicial escolhida, ou `null` (início do app, recurso desligado ou favorito que sumiu). */
|
|
2000
|
+
target(): string | null;
|
|
2001
|
+
/** `true` quando o login não pediu uma URL própria (aí a tela inicial manda). */
|
|
2002
|
+
static isDefaultReturn(returnUrl: string | null): boolean;
|
|
2003
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineStartPageService, never>;
|
|
2004
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineStartPageService>;
|
|
2005
|
+
}
|
|
2006
|
+
|
|
1144
2007
|
/** Documento de uma tela que a pessoa logada pode abrir. */
|
|
1145
2008
|
interface DocsEntry extends RouteDocument {
|
|
1146
2009
|
/** Chave da tela (router_id ou, sem ele, o do template), sempre em minúsculas. */
|
|
@@ -1250,6 +2113,6 @@ declare const SPINE_MARKDOWN_PURIFY_CONFIG: Config;
|
|
|
1250
2113
|
/** HTML limpo pelo perfil do spine, ou `null` quando não há DOM (SSR: melhor não renderizar). */
|
|
1251
2114
|
declare function sanitizeSpineMarkdownHtml(html: string): string | null;
|
|
1252
2115
|
|
|
1253
|
-
export { AppLauncherComponent, HeaderComponent, LayoutComponent, OnboardingOverlayComponent, OnboardingService, SPINE_BRAND, SPINE_MARKDOWN_PURIFY_CONFIG, SPINE_SETTINGS_KEYS, SPINE_SETTINGS_SECTIONS, SettingsPanelComponent, ShortcutService, ShortcutsCheatsheetComponent, SidebarComponent, SpineAccountSecurityService, SpineAppTokensService, SpineBrandComponent, SpineConnectionBannerComponent, SpineDocsComponent, SpineDocsService, SpineMarkdownComponent, SpineNewsComponent, SpineNewsService, SpineSettingsService, accountErrorCode, argosAccountApi, findTourTarget, provideSettingsSection, sanitizeSpineMarkdownHtml };
|
|
1254
|
-
export type { AccountMethod, AccountOverview, AccountReauth, AccountSession, AppToken, AppTokenList, AppTokenOptions, CreatedAppToken, DocsEntry, DocsGroup, DocsView, OnboardingState, OnboardingStep, ShortcutActions, ShortcutGroup, ShortcutGroupId, ShortcutItem, SpineSettingsSection };
|
|
2116
|
+
export { AiAgentComponent, AppLauncherComponent, HeaderComponent, LayoutComponent, OnboardingOverlayComponent, OnboardingService, SPINE_BRAND, SPINE_IDLE_WARNING_SECONDS, SPINE_MARKDOWN_PURIFY_CONFIG, SPINE_PREFERENCES_SAVE_DELAY_MS, SPINE_SETTINGS_ALIASES, SPINE_SETTINGS_KEYS, SPINE_SETTINGS_SECTIONS, SettingsPanelComponent, ShortcutService, ShortcutsCheatsheetComponent, SidebarComponent, SpineAccountPreferencesService, SpineAccountSecurityService, SpineAppTokensService, SpineBrandComponent, SpineConnectionBannerComponent, SpineDocsComponent, SpineDocsService, SpineIdleService, SpineIdleWarningComponent, SpineLogoutService, SpineMarkdownComponent, SpineNewsComponent, SpineNewsService, SpineNoticesService, SpineSettingsService, SpineStartPageService, accountErrorCode, argosAccountApi, buildMcpConfig, effectiveIdleMinutes, findTourTarget, idleLimits, isInternalPath, provideSettingsSection, resolveSettingsSection, sanitizeSpineMarkdownHtml, stable };
|
|
2117
|
+
export type { AccountActivityEntry, AccountActivityPage, AccountBadges, AccountMethod, AccountOverview, AccountPreferences, AccountReauth, AccountSession, AppToken, AppTokenList, AppTokenOptions, CreatedAppToken, DocsEntry, DocsGroup, DocsView, OnboardingState, OnboardingStep, ShortcutActions, ShortcutGroup, ShortcutGroupId, ShortcutItem, SpineAccountPreferencesDoc, SpineAccountPreferencesStatus, SpineIdleLimits, SpineNotice, SpineNoticePermission, SpineSettingsSection };
|
|
1255
2118
|
//# sourceMappingURL=trismegisto-spine-layout.d.ts.map
|