@trismegisto/spine 3.3.0 → 3.3.2
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 +19 -11
- package/fesm2022/trismegisto-spine-audit.mjs +16 -12
- package/fesm2022/trismegisto-spine-audit.mjs.map +1 -1
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-audit.component-tfGcVR3i.mjs → trismegisto-spine-auto-service-auto-service-audit.component-D8HUpZtA.mjs} +4 -4
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-audit.component-tfGcVR3i.mjs.map → trismegisto-spine-auto-service-auto-service-audit.component-D8HUpZtA.mjs.map} +1 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-NawbfdLW.mjs +65 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-NawbfdLW.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-client.component-IATeedbr.mjs → trismegisto-spine-auto-service-auto-service-client.component-BAfeLyTB.mjs} +27 -19
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-BAfeLyTB.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-BYjIQ9ID.mjs +635 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-BYjIQ9ID.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-login-attempts.component-CRvxfSWD.mjs → trismegisto-spine-auto-service-auto-service-login-attempts.component-DoyhkSYc.mjs} +4 -4
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-login-attempts.component-CRvxfSWD.mjs.map → trismegisto-spine-auto-service-auto-service-login-attempts.component-DoyhkSYc.mjs.map} +1 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-news-page.component-CBemH4hr.mjs +432 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-news-page.component-CBemH4hr.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-ratings-page.component-C_THGTkw.mjs +769 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-ratings-page.component-C_THGTkw.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-DIeunpQ9.mjs +2123 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-DIeunpQ9.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-auto-service.component-DGrs_Jvw.mjs → trismegisto-spine-auto-service-auto-service.component-QsIQ61w2.mjs} +31 -23
- package/fesm2022/trismegisto-spine-auto-service-auto-service.component-QsIQ61w2.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-client.usage-C_2zBCRN.mjs → trismegisto-spine-auto-service-client.usage-CJxn9Ysz.mjs} +5 -3
- package/fesm2022/trismegisto-spine-auto-service-client.usage-CJxn9Ysz.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-groups.technical-9aPPulhy.mjs → trismegisto-spine-auto-service-groups.technical-_jQrg1Qh.mjs} +7 -5
- package/fesm2022/trismegisto-spine-auto-service-groups.technical-_jQrg1Qh.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-groups.usage-CYh61LFL.mjs → trismegisto-spine-auto-service-groups.usage-OvWjNeeT.mjs} +7 -6
- package/fesm2022/{trismegisto-spine-auto-service-groups.usage-CYh61LFL.mjs.map → trismegisto-spine-auto-service-groups.usage-OvWjNeeT.mjs.map} +1 -1
- package/fesm2022/trismegisto-spine-auto-service-home.component-rQ3dIGIE.mjs +315 -0
- package/fesm2022/trismegisto-spine-auto-service-home.component-rQ3dIGIE.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-home.technical-Ce7oYRdg.mjs +46 -0
- package/fesm2022/trismegisto-spine-auto-service-home.technical-Ce7oYRdg.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-home.usage-D9R_ZMuU.mjs +48 -0
- package/fesm2022/trismegisto-spine-auto-service-home.usage-D9R_ZMuU.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-news.technical-DV9UpobG.mjs +38 -0
- package/fesm2022/trismegisto-spine-auto-service-news.technical-DV9UpobG.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-news.usage-CeuZnG0V.mjs +48 -0
- package/fesm2022/trismegisto-spine-auto-service-news.usage-CeuZnG0V.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-ratings.technical-QIVj6HBU.mjs +52 -0
- package/fesm2022/trismegisto-spine-auto-service-ratings.technical-QIVj6HBU.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-ratings.usage-BkteY8lz.mjs +45 -0
- package/fesm2022/trismegisto-spine-auto-service-ratings.usage-BkteY8lz.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-suggestions.technical-BtUK6sKD.mjs +69 -0
- package/fesm2022/trismegisto-spine-auto-service-suggestions.technical-BtUK6sKD.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-suggestions.usage-BwO9Hjsx.mjs +72 -0
- package/fesm2022/trismegisto-spine-auto-service-suggestions.usage-BwO9Hjsx.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service.mjs +49 -19
- package/fesm2022/trismegisto-spine-auto-service.mjs.map +1 -1
- package/fesm2022/trismegisto-spine-graphql.mjs +11 -2
- package/fesm2022/trismegisto-spine-graphql.mjs.map +1 -1
- package/fesm2022/trismegisto-spine-layout.mjs +3113 -1221
- package/fesm2022/trismegisto-spine-layout.mjs.map +1 -1
- package/fesm2022/trismegisto-spine-modal.mjs +7 -5
- package/fesm2022/trismegisto-spine-modal.mjs.map +1 -1
- package/fesm2022/trismegisto-spine-routing.mjs +12 -20
- package/fesm2022/trismegisto-spine-routing.mjs.map +1 -1
- package/fesm2022/trismegisto-spine-shell.mjs +15 -39
- package/fesm2022/trismegisto-spine-shell.mjs.map +1 -1
- package/fesm2022/trismegisto-spine-side-panel.mjs +7 -5
- package/fesm2022/trismegisto-spine-side-panel.mjs.map +1 -1
- package/fesm2022/trismegisto-spine.mjs +1969 -279
- package/fesm2022/trismegisto-spine.mjs.map +1 -1
- package/package.json +6 -6
- package/types/trismegisto-spine-audit.d.ts +2 -12
- package/types/trismegisto-spine-audit.d.ts.map +1 -1
- package/types/trismegisto-spine-auto-service.d.ts +22 -5
- package/types/trismegisto-spine-auto-service.d.ts.map +1 -1
- package/types/trismegisto-spine-layout.d.ts +1083 -283
- package/types/trismegisto-spine-layout.d.ts.map +1 -1
- package/types/trismegisto-spine-modal.d.ts +1 -0
- package/types/trismegisto-spine-modal.d.ts.map +1 -1
- package/types/trismegisto-spine-routing.d.ts +3 -12
- package/types/trismegisto-spine-routing.d.ts.map +1 -1
- package/types/trismegisto-spine-shell.d.ts +2 -15
- package/types/trismegisto-spine-shell.d.ts.map +1 -1
- package/types/trismegisto-spine-side-panel.d.ts +1 -0
- package/types/trismegisto-spine-side-panel.d.ts.map +1 -1
- package/types/trismegisto-spine.d.ts +739 -165
- package/types/trismegisto-spine.d.ts.map +1 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-Cl7ahisu.mjs +0 -65
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-Cl7ahisu.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-IATeedbr.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-D6L0gTmd.mjs +0 -605
- package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-D6L0gTmd.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service.component-DGrs_Jvw.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-client.usage-C_2zBCRN.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-groups.technical-9aPPulhy.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-home.component-5_aji1hf.mjs +0 -239
- package/fesm2022/trismegisto-spine-auto-service-home.component-5_aji1hf.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-home.technical-BrVhcgDO.mjs +0 -35
- package/fesm2022/trismegisto-spine-auto-service-home.technical-BrVhcgDO.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-home.usage-DWYGtngX.mjs +0 -43
- package/fesm2022/trismegisto-spine-auto-service-home.usage-DWYGtngX.mjs.map +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { OnDestroy, OnInit,
|
|
2
|
+
import { OnDestroy, OnInit, InjectionToken, Type, Provider, TemplateRef } from '@angular/core';
|
|
3
3
|
import { Router } from '@angular/router';
|
|
4
4
|
import * as _trismegisto_spine from '@trismegisto/spine';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { Route, ThemeService, ThemePresetService, DensityService, SpineConfig, SpinePreferencesService, SpineHourCyclePreference, SpineStartPagePreference, SpineNoticeType, SpineMcpServer, SpineFeatures } from '@trismegisto/spine';
|
|
6
|
+
import { Subject } from 'rxjs';
|
|
7
7
|
import * as _trismegisto_angular from '@trismegisto/angular';
|
|
8
|
-
import { HermesShortcutItem, WorkspaceStore, TabItem, MenuItem, SidebarNode, HermesThemeMode, HermesDensity,
|
|
8
|
+
import { HermesShortcutItem, WorkspaceStore, TabItem, MenuItem, HermesCommand, SidebarNode, HermesThemeMode, HermesDensity, SegmentedOption, HermesSidebarService, ComboboxOption, BreadcrumbItem, TagColor } from '@trismegisto/angular';
|
|
9
9
|
import * as _trismegisto_primitives from '@trismegisto/primitives';
|
|
10
|
-
import { formatMessage, HermesMotionPreference, Weekday, AlertVariant,
|
|
10
|
+
import { formatMessage, ShortcutDisplay, HermesMotionPreference, Weekday, AlertVariant, PaginationState } from '@trismegisto/primitives';
|
|
11
11
|
import * as _orfeu_angular_core from '@orfeu/angular/core';
|
|
12
12
|
import { AuthorizationService, ViewService, UserProfile, AppDef, RealmAppsService } from '@orfeu/angular/core';
|
|
13
13
|
import * as _trismegisto_tokens from '@trismegisto/tokens';
|
|
@@ -16,147 +16,176 @@ import { RouteDocument } from '@trismegisto/spine/routing';
|
|
|
16
16
|
import { SafeHtml } from '@angular/platform-browser';
|
|
17
17
|
import { Config } from 'dompurify';
|
|
18
18
|
|
|
19
|
+
/** `full`: aparência e depois o essencial (primeiro acesso, "Refazer"). `essentials`: só os cartões do essencial. */
|
|
20
|
+
type SpineInitialSetupMode = 'full' | 'essentials';
|
|
21
|
+
/** Etapa na tela: a escolha de aparência ou os cartões do essencial. */
|
|
22
|
+
type SpineInitialSetupStep = 'appearance' | 'essentials';
|
|
19
23
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
/** seletor CSS do alvo; ausente = passo centralizado (boas-vindas/encerramento). */
|
|
28
|
-
target?: string;
|
|
29
|
-
title: string;
|
|
30
|
-
/** pode conter HTML simples (<b>). */
|
|
31
|
-
description: string;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Primeiro elemento do seletor que está de fato na tela (tem tamanho e conteúdo). Não usa
|
|
35
|
-
* `offsetParent`: ele é `null` pra `position: fixed` (a sidebar) e pra `display: contents`, e o
|
|
36
|
-
* passo sumia do tour mesmo com o alvo visível. Com as abas vivas do workspace há uma barra de
|
|
37
|
-
* página por aba — só a da aba ativa tem tamanho, e é ela que o holofote precisa achar.
|
|
38
|
-
*/
|
|
39
|
-
declare function findTourTarget(selector: string): HTMLElement | null;
|
|
40
|
-
/**
|
|
41
|
-
* Onboarding interativo próprio (sem dependência externa). O overlay/holofote e o
|
|
42
|
-
* balão são renderizados pelo OnboardingOverlayComponent, que escuta este serviço.
|
|
43
|
-
* Aparece uma vez por máquina (flag em localStorage), namespaced por cliente.
|
|
24
|
+
* Configuração inicial em tela cheia (`spine-initial-setup`, montada no layout): no primeiro acesso a pessoa escolhe
|
|
25
|
+
* tema, cor, densidade, tamanho do texto, fonte e animações, com a prévia ao lado, e depois vê o essencial (busca,
|
|
26
|
+
* abas, favoritos, configurações). Pode pular a qualquer momento: pular também conta como feita.
|
|
27
|
+
*
|
|
28
|
+
* "Feita" é da pessoa, não do app (`SpineAccountPreferencesService.setupDone`, no documento global do Argos): quem
|
|
29
|
+
* fez num sistema não a vê de novo em outro. Sem a conta, fica no navegador. Desligada com
|
|
30
|
+
* `SpineFeatures.initialSetup: false`.
|
|
44
31
|
*/
|
|
45
|
-
declare class
|
|
46
|
-
private readonly
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
private
|
|
54
|
-
/** Fase do tour (ver `OnboardingState`). Emite o valor atual ao assinar. */
|
|
55
|
-
readonly state$: Observable<OnboardingState>;
|
|
56
|
-
/** Fase atual, síncrona. */
|
|
57
|
-
get state(): OnboardingState;
|
|
58
|
-
private readonly doneKey;
|
|
59
|
-
private steps;
|
|
60
|
-
private index;
|
|
61
|
-
private waiting;
|
|
62
|
-
constructor(config: SpineConfig | null);
|
|
63
|
-
private get done();
|
|
64
|
-
private markDone;
|
|
65
|
-
/**
|
|
66
|
-
* Dispara o tour só se ainda não foi visto nesta máquina. Chamar após o login. Quando é devido, o
|
|
67
|
-
* estado vira `pending` NA HORA (síncrono), antes da espera pelo shell — é isso que segura as
|
|
68
|
-
* novidades; quando não é, continua `idle`. Chamar de novo com o tour já em andamento não faz nada.
|
|
69
|
-
*/
|
|
70
|
-
maybeStart(): void;
|
|
71
|
-
/** Reabre o tour manualmente (menu Ajuda), ignorando a flag. Também passa por `pending` → `running`. */
|
|
72
|
-
restart(): void;
|
|
73
|
-
/**
|
|
74
|
-
* Interrompe o tour (pendente ou na tela) SEM marcar como visto: o automático volta na próxima entrada.
|
|
75
|
-
* Usado quando a pessoa abre outra coisa que disputaria a tela com ele (as novidades pelo menu).
|
|
76
|
-
*/
|
|
77
|
-
stop(): void;
|
|
78
|
-
/** Passos no idioma ativo (o texto é lido do catálogo ao começar o tour). Descrições com `<b>`. */
|
|
79
|
-
private allSteps;
|
|
32
|
+
declare class SpineInitialSetupService {
|
|
33
|
+
private readonly preferences;
|
|
34
|
+
private readonly injector;
|
|
35
|
+
/** Ligada (padrão) ou desligada pelo app (`SpineFeatures.initialSetup: false`). */
|
|
36
|
+
readonly enabled: boolean;
|
|
37
|
+
readonly isOpen: _angular_core.WritableSignal<boolean>;
|
|
38
|
+
readonly mode: _angular_core.WritableSignal<SpineInitialSetupMode>;
|
|
39
|
+
readonly step: _angular_core.WritableSignal<SpineInitialSetupStep>;
|
|
40
|
+
private asked;
|
|
80
41
|
/**
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
* de novo a cada `TARGET_POLL_MS`.
|
|
42
|
+
* Chamado uma vez pelo layout na entrada: abre se a configuração ainda não foi feita. Espera a conta responder
|
|
43
|
+
* (`setupDone` deixa de ser `null`), sem prazo: quem decide é a conta, e a falha dela cai no que o navegador sabe.
|
|
84
44
|
*/
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
45
|
+
maybeOpen(): void;
|
|
46
|
+
/** Abre a configuração inteira (aparência e o essencial), mesmo já feita: "Refazer" nas configurações. */
|
|
47
|
+
open(): void;
|
|
48
|
+
/** Só os cartões do essencial ("Rever o essencial": menu do perfil, atalhos, tela inicial). */
|
|
49
|
+
openEssentials(): void;
|
|
89
50
|
next(): void;
|
|
90
|
-
|
|
91
|
-
/**
|
|
51
|
+
back(): void;
|
|
52
|
+
/** Concluída ou pulada: marca como feita e fecha. */
|
|
92
53
|
finish(): void;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
96
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
54
|
+
/** `true` quando já deu para decidir (feita ou aberta agora). */
|
|
55
|
+
private decide;
|
|
56
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineInitialSetupService, never>;
|
|
57
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineInitialSetupService>;
|
|
97
58
|
}
|
|
98
59
|
|
|
60
|
+
/** Quem escreveu a novidade, como o argos-admin devolve (nome ou usuário, e a foto). */
|
|
61
|
+
interface SpineNewsAuthor {
|
|
62
|
+
readonly name: string;
|
|
63
|
+
readonly picture: string | null;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Tipo da novidade: só texto (`informativo`); "o que há de novo", com introdução e a lista de mudanças
|
|
67
|
+
* (`implementacao`); ou "como era x como ficou", com introdução e o antes e o agora (`alteracao`).
|
|
68
|
+
*/
|
|
69
|
+
type SpineNewsKind = 'informativo' | 'implementacao' | 'alteracao';
|
|
70
|
+
/** Uma novidade na lista (`GET /me/news`): sem o corpo. */
|
|
71
|
+
interface SpineNewsSummary {
|
|
72
|
+
readonly id: string;
|
|
73
|
+
/** Servidor antigo não manda: vale `informativo`. */
|
|
74
|
+
readonly kind?: SpineNewsKind;
|
|
75
|
+
readonly title: string;
|
|
76
|
+
readonly summary: string;
|
|
77
|
+
readonly published_at: string;
|
|
78
|
+
readonly author: SpineNewsAuthor | null;
|
|
79
|
+
}
|
|
99
80
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
|
|
81
|
+
* Uma novidade aberta (`GET /me/news/:id`): com o conteúdo, já saneado pelo servidor ao gravar. `body_html` é o texto
|
|
82
|
+
* (no informativo) ou a introdução (nos outros tipos); `items` é a lista da implementação; `before_html` e `after_html`,
|
|
83
|
+
* os dois lados da alteração.
|
|
84
|
+
*/
|
|
85
|
+
interface SpineNewsDetail extends SpineNewsSummary {
|
|
86
|
+
readonly body_html: string;
|
|
87
|
+
readonly items?: readonly string[];
|
|
88
|
+
readonly before_html?: string;
|
|
89
|
+
readonly after_html?: string;
|
|
90
|
+
/** Alterada depois de publicada: quem editou por último e quando (servidor antigo não manda). */
|
|
91
|
+
readonly edited?: (SpineNewsAuthor & {
|
|
92
|
+
readonly at: string;
|
|
93
|
+
}) | null;
|
|
94
|
+
}
|
|
95
|
+
/** Uma página da lista. */
|
|
96
|
+
interface SpineNewsPage {
|
|
97
|
+
readonly news: readonly SpineNewsSummary[];
|
|
98
|
+
readonly total: number;
|
|
99
|
+
readonly page: number;
|
|
100
|
+
readonly limit: number;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Novidades do app, escritas por quem o administra (auto-serviço ou painel central do Argos) e lidas de
|
|
104
|
+
* `argos-admin /me/news` — sempre da aplicação LOGADA e só as publicadas, na validade e para o público da pessoa (o
|
|
105
|
+
* servidor filtra). Sem `SPINE_ADMIN_API` (ou sem HTTP) não há novidades e nada aparece, sem erro.
|
|
106
|
+
*
|
|
107
|
+
* Sem interromper ninguém:
|
|
108
|
+
* - na entrada (`announceOnEntry`), lê as mais recentes e avisa no canto as ainda não anunciadas ("Novidade: …" ou
|
|
109
|
+
* "N novidades", com "Ver"), uma vez por novidade e depois da configuração inicial;
|
|
110
|
+
* - o menu do perfil mostra quantas faltam ver (`unseenCount`) e o Início lista as primeiras (`highlights`);
|
|
111
|
+
* - "Ver" (aviso, menu, Início, configurações) abre o painel lateral (`showAll`), paginado; abrir uma novidade
|
|
112
|
+
* (`markSeen`) a marca como vista.
|
|
104
113
|
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
* Ajuda fecha o painel de novidades, e as novidades abertas pelo menu interrompem o tour (sem marcá-lo
|
|
108
|
-
* como visto).
|
|
114
|
+
* "Anunciada", "vista" e "favorita" são por app, por navegador e por id (`hermes_<clientId>_news_*`): novidade de um
|
|
115
|
+
* app não some por ter sido vista em outro no mesmo domínio. "Marcar como não lida" (`markUnseen`) desfaz o "vista".
|
|
109
116
|
*/
|
|
110
117
|
declare class SpineNewsService {
|
|
111
|
-
private readonly
|
|
112
|
-
private readonly
|
|
118
|
+
private readonly http;
|
|
119
|
+
private readonly auth;
|
|
120
|
+
private readonly adminApi;
|
|
121
|
+
private readonly toast;
|
|
122
|
+
private readonly text;
|
|
123
|
+
private readonly setup;
|
|
124
|
+
private readonly preferences;
|
|
125
|
+
private readonly injector;
|
|
113
126
|
private readonly seenKey;
|
|
114
|
-
|
|
115
|
-
|
|
127
|
+
private readonly announcedKey;
|
|
128
|
+
private readonly favoritesKey;
|
|
129
|
+
/** Há onde buscar (argos-admin configurado). */
|
|
130
|
+
readonly available: boolean;
|
|
116
131
|
readonly isOpen: _angular_core.WritableSignal<boolean>;
|
|
117
|
-
/**
|
|
132
|
+
/** Novidade a abrir junto com o painel (o Início pede uma específica); o painel consome e limpa. */
|
|
133
|
+
readonly requested: _angular_core.WritableSignal<string | null>;
|
|
134
|
+
/** As mais recentes (primeira página), lidas em `refresh`. */
|
|
135
|
+
readonly latest: _angular_core.WritableSignal<readonly SpineNewsSummary[]>;
|
|
136
|
+
/** Há alguma novidade para a pessoa — o item "Novidades" do menu só aparece com isto. */
|
|
118
137
|
readonly hasAny: _angular_core.Signal<boolean>;
|
|
138
|
+
/** As mais recentes para o card do Início; `unseen` = ainda não aberta neste navegador. */
|
|
139
|
+
readonly highlights: _angular_core.Signal<{
|
|
140
|
+
id: string;
|
|
141
|
+
title: string;
|
|
142
|
+
text: string;
|
|
143
|
+
unseen: boolean;
|
|
144
|
+
}[]>;
|
|
145
|
+
/** Quantas das mais recentes ainda não foram abertas (a contagem do menu do perfil). */
|
|
146
|
+
readonly unseenCount: _angular_core.Signal<number>;
|
|
147
|
+
/** Muda quando o "já visto" é gravado, para quem lê `isUnseen`/`highlights` reler. */
|
|
148
|
+
readonly seenVersion: _angular_core.WritableSignal<number>;
|
|
149
|
+
/** Muda quando os favoritos mudam, para quem lê `isFavorite` reler. */
|
|
150
|
+
readonly favoritesVersion: _angular_core.WritableSignal<number>;
|
|
151
|
+
private announced;
|
|
119
152
|
constructor();
|
|
153
|
+
/** Relê as mais recentes; qualquer falha deixa a lista vazia (o item some em vez de mostrar um erro sem contexto). */
|
|
154
|
+
refresh(): Promise<void>;
|
|
155
|
+
/** Uma página da lista (`page` a partir de 1). Falha propaga: o painel mostra o erro com "Tentar de novo". */
|
|
156
|
+
page(page: number, limit: number): Promise<SpineNewsPage>;
|
|
157
|
+
/** Uma novidade com o corpo. */
|
|
158
|
+
detail(id: string): Promise<SpineNewsDetail>;
|
|
120
159
|
/**
|
|
121
|
-
* Chamado uma vez pelo layout na entrada:
|
|
122
|
-
*
|
|
123
|
-
* intervalo, volta a esperar — por isso a ordem com `OnboardingService.maybeStart()` não importa,
|
|
124
|
-
* desde que ele seja chamado dentro desse intervalo (o layout chama os dois juntos, tour primeiro).
|
|
125
|
-
*/
|
|
126
|
-
scheduleOnEntry(): void;
|
|
127
|
-
/** Marca como vistas todas as novidades devidas e as abre num único painel. */
|
|
128
|
-
showDue(): void;
|
|
129
|
-
/**
|
|
130
|
-
* Reabre todas as vigentes (menu do perfil), vistas ou não; as devidas entre elas passam a vistas.
|
|
131
|
-
* Interrompe o tour se ele estiver pendente ou na tela (ação mais recente da pessoa).
|
|
160
|
+
* Chamado uma vez pelo layout na entrada: lê as mais recentes, espera a configuração inicial se decidir (e terminar,
|
|
161
|
+
* se abriu) e avisa no canto as ainda não anunciadas. Nunca abre o painel sozinho.
|
|
132
162
|
*/
|
|
163
|
+
announceOnEntry(): Promise<void>;
|
|
164
|
+
/** Abre o painel lateral com a lista; as mais recentes deixam de ser anunciadas (o selo "Nova" fica até abrir). */
|
|
133
165
|
showAll(): void;
|
|
166
|
+
/** Abre o painel já com uma novidade aberta (o card do Início). */
|
|
167
|
+
showItem(id: string): void;
|
|
134
168
|
close(): void;
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
169
|
+
/** Ainda não aberta neste navegador. Lê `seenVersion` (reage a `markSeen`). */
|
|
170
|
+
isUnseen(id: string): boolean;
|
|
171
|
+
/** Abriu a novidade: vista (e anunciada) neste navegador. */
|
|
172
|
+
markSeen(id: string): void;
|
|
173
|
+
/** "Marcar como não lida": volta o selo "Nova" (e conta de novo no menu e no Início); não volta a ser anunciada. */
|
|
174
|
+
markUnseen(id: string): void;
|
|
175
|
+
/** Favorita neste navegador. Lê `favoritesVersion` (reage a `toggleFavorite`). */
|
|
176
|
+
isFavorite(id: string): boolean;
|
|
177
|
+
/** Liga ou desliga o favorito (marcador do painel). */
|
|
178
|
+
toggleFavorite(id: string): void;
|
|
179
|
+
private announce;
|
|
180
|
+
/** Mais recentes ainda não vistas nem anunciadas. */
|
|
181
|
+
private pending;
|
|
182
|
+
private read;
|
|
183
|
+
private remove;
|
|
184
|
+
private write;
|
|
141
185
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineNewsService, never>;
|
|
142
186
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineNewsService>;
|
|
143
187
|
}
|
|
144
188
|
|
|
145
|
-
/** Grupo do painel de atalhos. Id estável; o nome exibido vem do catálogo da lib (`shortcuts.groups`). */
|
|
146
|
-
type ShortcutGroupId = 'navigation' | 'actions' | 'general';
|
|
147
|
-
/** Item exibido no painel de atalhos (cheatsheet, aberto com "?"). */
|
|
148
|
-
interface ShortcutItem {
|
|
149
|
-
/** Teclas já em texto, na plataforma atual (`'Ctrl + K'`, `'⌘K'`, `'G depois H'`). */
|
|
150
|
-
keys: string;
|
|
151
|
-
description: string;
|
|
152
|
-
group: ShortcutGroupId;
|
|
153
|
-
}
|
|
154
|
-
/** Atalhos agrupados, já com o nome do grupo no idioma ativo. */
|
|
155
|
-
interface ShortcutGroup {
|
|
156
|
-
id: ShortcutGroupId;
|
|
157
|
-
name: string;
|
|
158
|
-
items: ShortcutItem[];
|
|
159
|
-
}
|
|
160
189
|
/** Ações concretas que o atalho dispara — ligadas pelo LayoutComponent. */
|
|
161
190
|
interface ShortcutActions {
|
|
162
191
|
navigate?: (url: string) => void;
|
|
@@ -183,7 +212,6 @@ declare class ShortcutService implements OnDestroy {
|
|
|
183
212
|
private removers;
|
|
184
213
|
private readonly userStorage;
|
|
185
214
|
private readonly hermes;
|
|
186
|
-
private readonly lib;
|
|
187
215
|
private readonly text;
|
|
188
216
|
/** Emite quando o usuário pede o painel de atalhos (tecla "?" ou menu do perfil). */
|
|
189
217
|
readonly help$: Subject<void>;
|
|
@@ -199,17 +227,6 @@ declare class ShortcutService implements OnDestroy {
|
|
|
199
227
|
* Acompanha registro/remoção e a troca de idioma do catálogo da lib.
|
|
200
228
|
*/
|
|
201
229
|
readonly panelItems: _angular_core.Signal<readonly HermesShortcutItem[]>;
|
|
202
|
-
/**
|
|
203
|
-
* Lista do painel em texto, no idioma e na plataforma atuais.
|
|
204
|
-
* @deprecated Use o `hm-shortcut-list` com `panelItems()` (ou `HermesShortcutService.list()`).
|
|
205
|
-
* Mantido para quem montava o próprio painel; sai numa próxima versão.
|
|
206
|
-
*/
|
|
207
|
-
get shortcuts(): ShortcutItem[];
|
|
208
|
-
/**
|
|
209
|
-
* Atalhos por grupo, na ordem navegação → ações → geral, com o nome do grupo traduzido.
|
|
210
|
-
* @deprecated Use o `hm-shortcut-list` (agrupa, traduz e desenha as teclas). Sai numa próxima versão.
|
|
211
|
-
*/
|
|
212
|
-
groups(): ShortcutGroup[];
|
|
213
230
|
/** Liga as ações e registra os atalhos no `HermesShortcutService` (idempotente: chamadas seguintes só trocam as ações). */
|
|
214
231
|
setActions(actions: ShortcutActions): void;
|
|
215
232
|
ngOnDestroy(): void;
|
|
@@ -218,8 +235,6 @@ declare class ShortcutService implements OnDestroy {
|
|
|
218
235
|
private navigate;
|
|
219
236
|
/** Navega para o N-ésimo favorito (1-based) lido da store da navegação; N = o dígito do evento. */
|
|
220
237
|
private goToFavorite;
|
|
221
|
-
/** Texto corrido das teclas para a API antiga (`shortcuts`): "Ctrl + K", "G depois H", "… ou …". */
|
|
222
|
-
private keysText;
|
|
223
238
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShortcutService, never>;
|
|
224
239
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ShortcutService>;
|
|
225
240
|
}
|
|
@@ -245,6 +260,12 @@ declare class SpineWorkspaceNavService {
|
|
|
245
260
|
readonly focusedChain: _angular_core.Signal<Route[] | null>;
|
|
246
261
|
private lastKnownPath;
|
|
247
262
|
constructor();
|
|
263
|
+
/**
|
|
264
|
+
* As abas abertas passam a obedecer à view atual: aba de tela que a pessoa não pode mais abrir fecha (e o
|
|
265
|
+
* conteúdo dela é destruído junto); painel que ficaria sem aba nenhuma mostra o Início no lugar; a aba ativa
|
|
266
|
+
* de cada painel recebe o nome e o ícone da view nova. View vazia (ainda carregando) não fecha nada.
|
|
267
|
+
*/
|
|
268
|
+
reconcileWithView(): void;
|
|
248
269
|
/** Resolve a cadeia de rotas pra uma URL, direto na view atual — sem `Router`, sem `async`
|
|
249
270
|
* (o componente da folha só é carregado por quem for de fato desenhar o painel). Desce sozinho
|
|
250
271
|
* por nós organizacionais (com filhos, sem conteúdo próprio) — o rótulo/ícone da aba e o que a
|
|
@@ -284,7 +305,6 @@ declare class LayoutComponent implements OnInit {
|
|
|
284
305
|
private router;
|
|
285
306
|
private theme;
|
|
286
307
|
private shortcuts;
|
|
287
|
-
private onboarding;
|
|
288
308
|
private news;
|
|
289
309
|
/** Aplica no boot o idioma e o fuso que a pessoa escolheu nas configurações. */
|
|
290
310
|
private readonly preferences;
|
|
@@ -296,6 +316,7 @@ declare class LayoutComponent implements OnInit {
|
|
|
296
316
|
private readonly idle;
|
|
297
317
|
private readonly startPage;
|
|
298
318
|
private readonly accountPreferences;
|
|
319
|
+
protected readonly setup: SpineInitialSetupService;
|
|
299
320
|
/** Esconde sidebar e área de trabalho quando a rota ATIVA (do Router real, ver
|
|
300
321
|
* `router.events` abaixo) é a de sem-permissão — nesse caso não existe menu/página válido
|
|
301
322
|
* como contexto. Note que isto reflete só a URL do painel FOCADO (dona do Router real); um
|
|
@@ -303,7 +324,7 @@ declare class LayoutComponent implements OnInit {
|
|
|
303
324
|
* o bastante (sem-permissão normalmente bloqueia o app inteiro, não uma aba) pra não justificar
|
|
304
325
|
* mais complexidade agora. */
|
|
305
326
|
isNoPermission: boolean;
|
|
306
|
-
constructor(router: Router, theme: ThemeService, shortcuts: ShortcutService,
|
|
327
|
+
constructor(router: Router, theme: ThemeService, shortcuts: ShortcutService, news: SpineNewsService);
|
|
307
328
|
private matchesNoPermission;
|
|
308
329
|
ngOnInit(): void;
|
|
309
330
|
protected onLocalNavigate(panelId: string, href: string): void;
|
|
@@ -326,7 +347,6 @@ declare class HeaderComponent implements OnInit {
|
|
|
326
347
|
protected densityService: DensityService;
|
|
327
348
|
private viewService;
|
|
328
349
|
private router;
|
|
329
|
-
private onboarding;
|
|
330
350
|
private shortcuts;
|
|
331
351
|
isFullscreen: boolean;
|
|
332
352
|
element: HTMLElement;
|
|
@@ -336,7 +356,10 @@ declare class HeaderComponent implements OnInit {
|
|
|
336
356
|
homeRoute: string | null;
|
|
337
357
|
/** Nome do app (SpineConfig.appName; padrão "Hermes") — quem desenha é o `spine-brand`. */
|
|
338
358
|
protected readonly appName: string;
|
|
339
|
-
|
|
359
|
+
/** OnPush: view, crachá, perfil e histórico mudam fora dos eventos do template (observáveis do Orfeu,
|
|
360
|
+
* outra aba, promessa da tela cheia) — cada um marca a view. Tema/densidade/família são signals. */
|
|
361
|
+
private readonly cdr;
|
|
362
|
+
private readonly destroyRef;
|
|
340
363
|
protected readonly text: {
|
|
341
364
|
home: string;
|
|
342
365
|
apps: string;
|
|
@@ -351,23 +374,31 @@ declare class HeaderComponent implements OnInit {
|
|
|
351
374
|
settings: string;
|
|
352
375
|
appearance: string;
|
|
353
376
|
shortcuts: string;
|
|
354
|
-
tour: string;
|
|
355
377
|
news: string;
|
|
378
|
+
newsUnseen: string;
|
|
356
379
|
logout: string;
|
|
357
380
|
search: string;
|
|
358
381
|
searchPlaceholder: string;
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
382
|
+
searchFavorites: string;
|
|
383
|
+
searchRecent: string;
|
|
384
|
+
searchModules: string;
|
|
385
|
+
searchScreens: string;
|
|
362
386
|
};
|
|
363
|
-
protected readonly fmt: typeof formatMessage;
|
|
364
387
|
private readonly settings;
|
|
365
388
|
private readonly news;
|
|
389
|
+
/** "Avaliar o {app}": a estrela do cabeçalho (`spine-rate-app-button`) e a janela de avaliação (`spine-rating-window`). */
|
|
390
|
+
private readonly ratings;
|
|
391
|
+
/**
|
|
392
|
+
* O botão de tela cheia só aparece sem avaliação: com ela, a estrela de avaliar ocupa o lugar dele (o atalho de
|
|
393
|
+
* teclado da tela cheia continua) e o cabeçalho não fica com buraco quando `SpineFeatures.ratings` é `false`.
|
|
394
|
+
*/
|
|
395
|
+
readonly showFullscreenButton: boolean;
|
|
396
|
+
private readonly setup;
|
|
366
397
|
private readonly userStorage;
|
|
367
398
|
private readonly logoutService;
|
|
368
399
|
/** Por usuário (`SpineUserStorage`): `<clientId>_header_recent_searches_<sub>`; apagada no logout. */
|
|
369
400
|
private get recentSearchKey();
|
|
370
|
-
constructor(authService: AuthorizationService, themeService: ThemeService, themePresetService: ThemePresetService, densityService: DensityService, viewService: ViewService, router: Router,
|
|
401
|
+
constructor(authService: AuthorizationService, themeService: ThemeService, themePresetService: ThemePresetService, densityService: DensityService, viewService: ViewService, router: Router, shortcuts: ShortcutService, config: SpineConfig | null);
|
|
371
402
|
ngOnInit(): Promise<void>;
|
|
372
403
|
updateView(data: any): void;
|
|
373
404
|
/** Primeira rota navegável (DFS), atravessando grupos "transparentes" sem route_redirect. */
|
|
@@ -382,40 +413,38 @@ declare class HeaderComponent implements OnInit {
|
|
|
382
413
|
switchBadge(badgeTypeId: string): Promise<void>;
|
|
383
414
|
/** Sai pelo `SpineLogoutService`: com falha no Argos a pessoa fica aqui, com aviso, e o histórico fica. */
|
|
384
415
|
logout(): Promise<boolean>;
|
|
385
|
-
/**
|
|
386
|
-
|
|
416
|
+
/** Os cartões do essencial (busca, abas, favoritos, configurações). */
|
|
417
|
+
openEssentials(): void;
|
|
387
418
|
/** Abre o painel de atalhos de teclado. */
|
|
388
419
|
openShortcuts(): void;
|
|
389
420
|
/** Menu do perfil: achatado (badges, se houver mais de um, + ações), já que `hm-menu`
|
|
390
421
|
* não tem submenu aninhado como o `hermes-dropdown` antigo tinha para a troca de crachá. */
|
|
391
422
|
get profileMenuItems(): MenuItem[];
|
|
392
423
|
onProfileMenuChosen(id: string): void;
|
|
393
|
-
|
|
394
|
-
quickQuery: string;
|
|
424
|
+
private readonly quickAccess;
|
|
395
425
|
quickOpen: boolean;
|
|
396
|
-
quickResults: QuickItem[];
|
|
397
|
-
quickActive: number;
|
|
398
426
|
private quickIndex;
|
|
399
|
-
/**
|
|
427
|
+
/** Telas abertas pela busca (Configurações › Dados do navegador conta e apaga esta lista). */
|
|
400
428
|
recentSearches: QuickItem[];
|
|
401
|
-
/**
|
|
402
|
-
|
|
429
|
+
/** Montados ao abrir: favoritos, abertos há pouco e módulos (o que aparece com o campo vazio) e as telas. */
|
|
430
|
+
searchCommands: readonly HermesCommand[];
|
|
431
|
+
protected readonly searchBrowse: string[];
|
|
432
|
+
protected readonly searchIcons: Readonly<Record<string, string>>;
|
|
403
433
|
/** Achata a árvore de rotas em itens navegáveis (com trilha de ancestrais). */
|
|
404
434
|
private flattenRoutes;
|
|
405
|
-
/** Chamado pelo `(searchRequested)` do `hm-header` (clique no campo ou `Ctrl K`, já tratado
|
|
406
|
-
* internamente por ele) — abre o modal de busca, mesmo padrão do `docs/website`
|
|
407
|
-
* (`openSearch()` em `app.component.ts`: `@if` monta o `hm-modal` só quando aberto). */
|
|
435
|
+
/** Chamado pelo `(searchRequested)` do `hm-header` (clique no campo ou `Ctrl K`, já tratado por ele): abre a paleta. */
|
|
408
436
|
onSearchRequested(): void;
|
|
409
|
-
/**
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
437
|
+
/**
|
|
438
|
+
* Comandos da paleta. Cada tela aparece uma vez: favoritos primeiro, depois os abertos há pouco que não são
|
|
439
|
+
* favoritos, os módulos (topo do menu) e, só na busca, o resto das telas. Favoritos e recentes valem só se a
|
|
440
|
+
* view atual (o crachá) ainda alcança a tela.
|
|
441
|
+
*/
|
|
442
|
+
private buildSearchCommands;
|
|
443
|
+
private goTo;
|
|
414
444
|
private readJson;
|
|
415
445
|
private loadRecent;
|
|
416
446
|
private pushRecent;
|
|
417
|
-
|
|
418
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeaderComponent, [null, null, null, null, null, null, null, null, { optional: true; }]>;
|
|
447
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeaderComponent, [null, null, null, null, null, null, null, { optional: true; }]>;
|
|
419
448
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeaderComponent, "spine-header", never, {}, {}, never, never, true, never>;
|
|
420
449
|
}
|
|
421
450
|
|
|
@@ -441,14 +470,15 @@ declare class AppLauncherComponent implements OnInit {
|
|
|
441
470
|
settings: string;
|
|
442
471
|
appearance: string;
|
|
443
472
|
shortcuts: string;
|
|
444
|
-
tour: string;
|
|
445
473
|
news: string;
|
|
474
|
+
newsUnseen: string;
|
|
446
475
|
logout: string;
|
|
447
476
|
search: string;
|
|
448
477
|
searchPlaceholder: string;
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
478
|
+
searchFavorites: string;
|
|
479
|
+
searchRecent: string;
|
|
480
|
+
searchModules: string;
|
|
481
|
+
searchScreens: string;
|
|
452
482
|
};
|
|
453
483
|
private readonly cdr;
|
|
454
484
|
apps: AppDef[];
|
|
@@ -634,107 +664,268 @@ declare class SpineLogoutService {
|
|
|
634
664
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineLogoutService>;
|
|
635
665
|
}
|
|
636
666
|
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
667
|
+
/** Um cartão do essencial: o texto tem `{key}` onde entra a tecla (desenhada como `<kbd>`). */
|
|
668
|
+
interface EssentialCard {
|
|
669
|
+
readonly id: string;
|
|
670
|
+
readonly icon: string;
|
|
671
|
+
readonly title: string;
|
|
672
|
+
readonly before: string;
|
|
673
|
+
readonly after: string;
|
|
674
|
+
readonly keys: ShortcutDisplay | null;
|
|
642
675
|
}
|
|
643
676
|
/**
|
|
644
|
-
*
|
|
645
|
-
* (
|
|
646
|
-
*
|
|
677
|
+
* Tela cheia da configuração inicial (ver `SpineInitialSetupService`): sem cabeçalho nem menu, por cima do shell
|
|
678
|
+
* (que fica `inert` enquanto ela está aberta). Cada escolha vale na hora — chama os mesmos serviços do painel de
|
|
679
|
+
* configurações —, e a prévia ao lado é desenhada com os tokens do tema, então acompanha tudo.
|
|
647
680
|
*/
|
|
648
|
-
declare class
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
681
|
+
declare class SpineInitialSetupComponent {
|
|
682
|
+
protected readonly setup: SpineInitialSetupService;
|
|
683
|
+
private readonly messages;
|
|
684
|
+
protected readonly t: {
|
|
685
|
+
label: string;
|
|
686
|
+
step: string;
|
|
652
687
|
skip: string;
|
|
653
688
|
back: string;
|
|
654
689
|
next: string;
|
|
655
690
|
finish: string;
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
691
|
+
close: string;
|
|
692
|
+
greeting: string;
|
|
693
|
+
greetingAnonymous: string;
|
|
694
|
+
appearanceIntro: string;
|
|
695
|
+
preview: string;
|
|
696
|
+
previewPage: string;
|
|
697
|
+
essentialsTitle: string;
|
|
698
|
+
essentialsIntro: string;
|
|
660
699
|
searchTitle: string;
|
|
661
700
|
searchText: string;
|
|
662
|
-
navModulesTitle: string;
|
|
663
|
-
navModulesText: string;
|
|
664
|
-
navModeTitle: string;
|
|
665
|
-
navModeText: string;
|
|
666
701
|
tabsTitle: string;
|
|
667
702
|
tabsText: string;
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
themeTitle: string;
|
|
673
|
-
themeText: string;
|
|
674
|
-
densityTitle: string;
|
|
675
|
-
densityText: string;
|
|
676
|
-
fullscreenTitle: string;
|
|
677
|
-
fullscreenText: string;
|
|
678
|
-
profileTitle: string;
|
|
679
|
-
profileText: string;
|
|
680
|
-
doneTitle: string;
|
|
681
|
-
doneText: string;
|
|
703
|
+
favoritesTitle: string;
|
|
704
|
+
favoritesText: string;
|
|
705
|
+
settingsTitle: string;
|
|
706
|
+
settingsText: string;
|
|
682
707
|
};
|
|
683
|
-
protected readonly
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
708
|
+
protected readonly s: {
|
|
709
|
+
heading: string;
|
|
710
|
+
appearance: string;
|
|
711
|
+
appearanceKeywords: string;
|
|
712
|
+
theme: string;
|
|
713
|
+
themeDescription: string;
|
|
714
|
+
themeKeywords: string;
|
|
715
|
+
themeLight: string;
|
|
716
|
+
themeDark: string;
|
|
717
|
+
themeSystem: string;
|
|
718
|
+
accent: string;
|
|
719
|
+
accentDescription: string;
|
|
720
|
+
accentKeywords: string;
|
|
721
|
+
density: string;
|
|
722
|
+
densityDescription: string;
|
|
723
|
+
densityKeywords: string;
|
|
724
|
+
comfortable: string;
|
|
725
|
+
compact: string;
|
|
726
|
+
font: string;
|
|
727
|
+
fontDescription: string;
|
|
728
|
+
fontKeywords: string;
|
|
729
|
+
sidebar: string;
|
|
730
|
+
sidebarDescription: string;
|
|
731
|
+
sidebarKeywords: string;
|
|
732
|
+
sidebarHelp: string;
|
|
733
|
+
sidebarAuto: string;
|
|
734
|
+
sidebarFixed: string;
|
|
735
|
+
sidebarCompact: string;
|
|
736
|
+
region: string;
|
|
737
|
+
regionKeywords: string;
|
|
738
|
+
language: string;
|
|
739
|
+
languageDescription: string;
|
|
740
|
+
languageKeywords: string;
|
|
741
|
+
languageAuto: string;
|
|
742
|
+
timeZone: string;
|
|
743
|
+
timeZoneKeywords: string;
|
|
744
|
+
timeZoneHint: string;
|
|
745
|
+
timeZoneAuto: string;
|
|
746
|
+
hourCycle: string;
|
|
747
|
+
hourCycleHint: string;
|
|
748
|
+
hourCycleKeywords: string;
|
|
749
|
+
hourCycleAuto: string;
|
|
750
|
+
hourCycle24: string;
|
|
751
|
+
hourCycle12: string;
|
|
752
|
+
weekStart: string;
|
|
753
|
+
weekStartDescription: string;
|
|
754
|
+
weekStartKeywords: string;
|
|
755
|
+
weekStartAuto: string;
|
|
756
|
+
shortcuts: string;
|
|
757
|
+
shortcutsDescription: string;
|
|
758
|
+
shortcutsKeywords: string;
|
|
759
|
+
setup: string;
|
|
760
|
+
setupDescription: string;
|
|
761
|
+
setupKeywords: string;
|
|
762
|
+
redoSetup: string;
|
|
763
|
+
essentials: string;
|
|
764
|
+
essentialsDescription: string;
|
|
765
|
+
essentialsKeywords: string;
|
|
766
|
+
showEssentials: string;
|
|
767
|
+
accessibility: string;
|
|
768
|
+
accessibilityKeywords: string;
|
|
769
|
+
textSize: string;
|
|
770
|
+
textSizeDescription: string;
|
|
771
|
+
textSizeKeywords: string;
|
|
772
|
+
motion: string;
|
|
773
|
+
motionDescription: string;
|
|
774
|
+
motionKeywords: string;
|
|
775
|
+
motionSystem: string;
|
|
776
|
+
motionReduce: string;
|
|
777
|
+
motionFull: string;
|
|
778
|
+
help: string;
|
|
779
|
+
helpKeywords: string;
|
|
780
|
+
news: string;
|
|
781
|
+
newsDescription: string;
|
|
782
|
+
newsKeywords: string;
|
|
783
|
+
showNews: string;
|
|
784
|
+
browserData: string;
|
|
785
|
+
browserDataDescription: string;
|
|
786
|
+
browserDataKeywords: string;
|
|
787
|
+
recentPages: string;
|
|
788
|
+
recentPagesKeywords: string;
|
|
789
|
+
recentSearches: string;
|
|
790
|
+
recentSearchesKeywords: string;
|
|
791
|
+
favorites: string;
|
|
792
|
+
favoritesKeywords: string;
|
|
793
|
+
pagesCount: _trismegisto_primitives.PluralMessage;
|
|
794
|
+
searchesCount: _trismegisto_primitives.PluralMessage;
|
|
795
|
+
clear: string;
|
|
796
|
+
confirmClear: string;
|
|
797
|
+
cancel: string;
|
|
798
|
+
recentPagesCleared: string;
|
|
799
|
+
recentSearchesCleared: string;
|
|
800
|
+
favoritesCleared: string;
|
|
801
|
+
restorePreferences: string;
|
|
802
|
+
restorePreferencesDescription: string;
|
|
803
|
+
restorePreferencesHelp: string;
|
|
804
|
+
restorePreferencesKeywords: string;
|
|
805
|
+
restore: string;
|
|
806
|
+
confirmRestore: string;
|
|
807
|
+
preferencesRestored: string;
|
|
808
|
+
account: string;
|
|
809
|
+
accountKeywords: string;
|
|
810
|
+
user: string;
|
|
811
|
+
accessLevel: string;
|
|
812
|
+
accessLevelKeywords: string;
|
|
813
|
+
session: string;
|
|
814
|
+
sessionDescription: string;
|
|
815
|
+
sessionKeywords: string;
|
|
816
|
+
sessionUnknown: string;
|
|
817
|
+
sessionExpired: string;
|
|
818
|
+
sessionExpiresIn: string;
|
|
819
|
+
sessionExpiresAt: string;
|
|
820
|
+
accessToken: string;
|
|
821
|
+
accessTokenDescription: string;
|
|
822
|
+
accessTokenKeywords: string;
|
|
823
|
+
copy: string;
|
|
824
|
+
moreAbout: string;
|
|
825
|
+
appTokens: string;
|
|
826
|
+
appTokensDescription: string;
|
|
827
|
+
appTokensKeywords: string;
|
|
828
|
+
appTokensHelp: string;
|
|
829
|
+
groups: string;
|
|
830
|
+
groupsDescription: string;
|
|
831
|
+
groupsKeywords: string;
|
|
832
|
+
groupRole: string;
|
|
833
|
+
groupRoleDisabled: string;
|
|
834
|
+
logout: string;
|
|
835
|
+
logoutDescription: string;
|
|
836
|
+
logoutKeywords: string;
|
|
837
|
+
mfa: string;
|
|
838
|
+
mfaDescription: string;
|
|
839
|
+
mfaKeywords: string;
|
|
840
|
+
signedInAccount: string;
|
|
841
|
+
signedInRealm: string;
|
|
842
|
+
twoFactor: string;
|
|
843
|
+
twoFactorDescription: string;
|
|
844
|
+
twoFactorKeywords: string;
|
|
845
|
+
recoveryCodes: string;
|
|
846
|
+
recoveryCodesDescription: string;
|
|
847
|
+
recoveryCodesKeywords: string;
|
|
848
|
+
sessions: string;
|
|
849
|
+
sessionsDescription: string;
|
|
850
|
+
sessionsKeywords: string;
|
|
851
|
+
sessionsSection: string;
|
|
852
|
+
sessionsSectionDescription: string;
|
|
853
|
+
sessionsSectionKeywords: string;
|
|
854
|
+
about: string;
|
|
855
|
+
aboutKeywords: string;
|
|
856
|
+
application: string;
|
|
857
|
+
version: string;
|
|
858
|
+
versionKeywords: string;
|
|
859
|
+
buildDate: string;
|
|
860
|
+
environment: string;
|
|
861
|
+
environmentKeywords: string;
|
|
862
|
+
links: string;
|
|
863
|
+
linksKeywords: string;
|
|
864
|
+
docs: string;
|
|
865
|
+
reportIssue: string;
|
|
866
|
+
repository: string;
|
|
867
|
+
dependencies: string;
|
|
868
|
+
dependenciesDescription: string;
|
|
869
|
+
dependenciesKeywords: string;
|
|
870
|
+
supportInfo: string;
|
|
871
|
+
supportInfoDescription: string;
|
|
872
|
+
supportInfoKeywords: string;
|
|
873
|
+
noSessionToken: string;
|
|
874
|
+
tokenCopied: string;
|
|
875
|
+
supportCopied: string;
|
|
876
|
+
copyBlocked: string;
|
|
695
877
|
};
|
|
696
|
-
|
|
697
|
-
private
|
|
698
|
-
private readonly
|
|
699
|
-
private readonly
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
878
|
+
protected readonly fmt: typeof formatMessage;
|
|
879
|
+
private readonly theme;
|
|
880
|
+
private readonly hermesTheme;
|
|
881
|
+
private readonly themeConfig;
|
|
882
|
+
private readonly presets;
|
|
883
|
+
private readonly density;
|
|
884
|
+
private readonly i18n;
|
|
885
|
+
protected readonly preferences: SpinePreferencesService;
|
|
886
|
+
protected readonly appName: string;
|
|
887
|
+
private readonly heading;
|
|
888
|
+
/** Primeiro nome do perfil, para a saudação. */
|
|
889
|
+
protected readonly greeting: string;
|
|
890
|
+
protected readonly stepNumber: _angular_core.Signal<1 | 2>;
|
|
891
|
+
protected readonly stepTotal: _angular_core.Signal<1 | 2>;
|
|
892
|
+
protected readonly families: readonly _trismegisto_tokens.HermesFamily[];
|
|
893
|
+
protected readonly themeMode: _angular_core.Signal<HermesThemeMode>;
|
|
894
|
+
protected readonly appliedTheme: _angular_core.Signal<_trismegisto_tokens.HermesThemeName>;
|
|
895
|
+
protected readonly family: _angular_core.Signal<string>;
|
|
896
|
+
protected readonly densityValue: _angular_core.Signal<HermesDensity>;
|
|
897
|
+
protected readonly fontValue: _angular_core.Signal<_trismegisto_primitives.HermesBuiltinFont>;
|
|
898
|
+
protected readonly textSizeValue: _angular_core.Signal<string>;
|
|
899
|
+
protected readonly themeOptions: readonly SegmentedOption[];
|
|
900
|
+
protected readonly densityOptions: readonly SegmentedOption[];
|
|
901
|
+
protected readonly fontOptions: readonly SegmentedOption[];
|
|
902
|
+
protected readonly motionOptions: readonly SegmentedOption[];
|
|
903
|
+
protected readonly textSizeOptions: _angular_core.Signal<readonly SegmentedOption<string>[]>;
|
|
904
|
+
private readonly platform;
|
|
905
|
+
protected readonly essentials: readonly EssentialCard[];
|
|
906
|
+
constructor();
|
|
907
|
+
protected setThemeMode(mode: string): void;
|
|
908
|
+
protected setFamily(id: string): void;
|
|
909
|
+
protected setDensity(value: string): void;
|
|
910
|
+
protected setFont(value: string): void;
|
|
911
|
+
protected setTextSize(value: string): void;
|
|
912
|
+
protected setMotion(value: string): void;
|
|
913
|
+
private card;
|
|
914
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineInitialSetupComponent, never>;
|
|
915
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SpineInitialSetupComponent, "spine-initial-setup", never, {}, {}, never, never, true, never>;
|
|
724
916
|
}
|
|
725
917
|
|
|
726
918
|
/**
|
|
727
919
|
* Painel de atalhos (cheatsheet). Abre com "?" (via `ShortcutService.help$`) e lista, com o
|
|
728
920
|
* `hm-shortcut-list` da lib, os atalhos agrupados — com busca e o interruptor dos atalhos de tecla
|
|
729
|
-
* única (WCAG 2.1.4; a escolha persiste no `SpinePreferencesService`).
|
|
730
|
-
* onboarding.
|
|
921
|
+
* única (WCAG 2.1.4; a escolha persiste no `SpinePreferencesService`). Leva também ao essencial.
|
|
731
922
|
*/
|
|
732
923
|
declare class ShortcutsCheatsheetComponent implements OnInit, OnDestroy {
|
|
733
924
|
open: boolean;
|
|
734
925
|
protected readonly text: {
|
|
735
926
|
heading: string;
|
|
736
927
|
hint: string;
|
|
737
|
-
|
|
928
|
+
essentials: string;
|
|
738
929
|
dismiss: string;
|
|
739
930
|
openSearch: string;
|
|
740
931
|
goHome: string;
|
|
@@ -748,20 +939,18 @@ declare class ShortcutsCheatsheetComponent implements OnInit, OnDestroy {
|
|
|
748
939
|
closeOverlay: string;
|
|
749
940
|
};
|
|
750
941
|
private readonly shortcuts;
|
|
751
|
-
private readonly
|
|
942
|
+
private readonly setup;
|
|
943
|
+
/** OnPush: o "?" e o menu do perfil abrem o painel por `help$`, fora dos eventos deste template. */
|
|
944
|
+
private readonly cdr;
|
|
752
945
|
/** Atalhos do painel: registrados (favoritos numa linha só) + os que outra peça dispara. */
|
|
753
946
|
protected readonly items: _angular_core.Signal<readonly _trismegisto_angular.HermesShortcutItem[]>;
|
|
754
947
|
/** Atalhos de tecla única ligados — sem eles o "?" da dica não funciona. */
|
|
755
948
|
protected readonly characterKeys: _angular_core.Signal<boolean>;
|
|
756
949
|
/** Dica com a tecla no meio: o texto do catálogo partido em volta de `{key}`. */
|
|
757
950
|
protected get hintParts(): string[];
|
|
758
|
-
/** @deprecated O painel agora é o `hm-shortcut-list`; use `ShortcutService.panelItems()`. Sai numa próxima versão. */
|
|
759
|
-
get groups(): ShortcutGroup[];
|
|
760
|
-
/** @deprecated As teclas são desenhadas pelo `hm-shortcut-list`. Sai numa próxima versão. */
|
|
761
|
-
chips(keys: string): string[];
|
|
762
951
|
private sub?;
|
|
763
|
-
/**
|
|
764
|
-
|
|
952
|
+
/** Abre os cartões do essencial e fecha este painel. */
|
|
953
|
+
openEssentials(): void;
|
|
765
954
|
ngOnInit(): void;
|
|
766
955
|
ngOnDestroy(): void;
|
|
767
956
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShortcutsCheatsheetComponent, never>;
|
|
@@ -775,7 +964,7 @@ declare const SPINE_SETTINGS_KEYS: {
|
|
|
775
964
|
readonly accessibility: "acessibilidade";
|
|
776
965
|
readonly region: "regiao";
|
|
777
966
|
readonly shortcuts: "atalhos";
|
|
778
|
-
/** Novidades e
|
|
967
|
+
/** Novidades, configuração inicial e o essencial. */
|
|
779
968
|
readonly help: "ajuda";
|
|
780
969
|
/** Tipos de aviso do app e aviso do navegador (`SpineFeatures.notices`). */
|
|
781
970
|
readonly notices: "notificacoes";
|
|
@@ -788,9 +977,6 @@ declare const SPINE_SETTINGS_KEYS: {
|
|
|
788
977
|
readonly sessions: "sessoes";
|
|
789
978
|
/** Grupos desta aplicação em que a pessoa tem função (argos-admin `/me/groups`); só aparece com algum. */
|
|
790
979
|
readonly groups: "grupos";
|
|
791
|
-
/** @deprecated A seção "Conta e segurança" virou "MFA" e "Sessões": `seguranca` abre a de MFA (ver
|
|
792
|
-
* `SPINE_SETTINGS_ALIASES`). Use `mfa` ou `sessions`. */
|
|
793
|
-
readonly security: "seguranca";
|
|
794
980
|
readonly about: "sobre";
|
|
795
981
|
};
|
|
796
982
|
/** Chaves antigas de `?settings=` que continuam abrindo a seção que as substituiu (links já publicados). */
|
|
@@ -850,6 +1036,17 @@ interface SpineAccountPreferencesDoc {
|
|
|
850
1036
|
browserNotices?: boolean;
|
|
851
1037
|
favorites?: unknown[];
|
|
852
1038
|
}
|
|
1039
|
+
/**
|
|
1040
|
+
* Chaves que são da pessoa, não do app: com o Argos que tem `{api}/preferences/global`, vão no documento global e
|
|
1041
|
+
* valem em todos os apps (escolhidas uma vez). O resto (menu lateral, atalhos, inatividade, tela inicial, avisos,
|
|
1042
|
+
* favoritos) continua no documento do app.
|
|
1043
|
+
*/
|
|
1044
|
+
declare const SPINE_GLOBAL_PREFERENCE_KEYS: readonly ["themeMode", "family", "density", "font", "textScale", "motion", "language", "timeZone", "hourCycle", "weekStart"];
|
|
1045
|
+
/** Documento global (`PUT {api}/preferences/global`): aparência e região, mais a configuração inicial feita. */
|
|
1046
|
+
type SpineGlobalPreferencesDoc = Pick<SpineAccountPreferencesDoc, 'v' | (typeof SPINE_GLOBAL_PREFERENCE_KEYS)[number]> & {
|
|
1047
|
+
/** A configuração inicial já foi feita (ou pulada): não aparece de novo em nenhum app. */
|
|
1048
|
+
setupDone?: boolean;
|
|
1049
|
+
};
|
|
853
1050
|
/** `local`: só no navegador (recurso desligado, sem API da conta, ou Argos sem o endpoint). */
|
|
854
1051
|
type SpineAccountPreferencesStatus = 'idle' | 'local' | 'loading' | 'saving' | 'synced' | 'error';
|
|
855
1052
|
/**
|
|
@@ -865,6 +1062,12 @@ type SpineAccountPreferencesStatus = 'idle' | 'local' | 'loading' | 'saving' | '
|
|
|
865
1062
|
* - Depois, cada mudança é gravada na conta, agrupada (`SPINE_PREFERENCES_SAVE_DELAY_MS`).
|
|
866
1063
|
* - Sem a API da conta, com o recurso desligado ou com um Argos que não tem o endpoint (404/400), fica só no
|
|
867
1064
|
* navegador (`status() === 'local'`), sem erro na tela.
|
|
1065
|
+
* - Com o documento global (`{api}/preferences/global`), a aparência e a região (`SPINE_GLOBAL_PREFERENCE_KEYS`)
|
|
1066
|
+
* vão nele e valem em todos os apps; o do app fica com o resto. Na leitura, o do app é aplicado primeiro (o que
|
|
1067
|
+
* ele ainda tiver de antes do global) e o global por cima. Argos sem a rota global: tudo no do app, como antes.
|
|
1068
|
+
*
|
|
1069
|
+
* Também guarda se a configuração inicial já foi feita (`setupDone`): no documento global quando há, senão no
|
|
1070
|
+
* navegador. Quem já tinha aparência guardada (na conta ou no navegador) conta como feita.
|
|
868
1071
|
*/
|
|
869
1072
|
declare class SpineAccountPreferencesService {
|
|
870
1073
|
private readonly browser;
|
|
@@ -882,10 +1085,15 @@ declare class SpineAccountPreferencesService {
|
|
|
882
1085
|
readonly status: _angular_core.WritableSignal<SpineAccountPreferencesStatus>;
|
|
883
1086
|
/** Hora da última leitura/gravação bem-sucedida. */
|
|
884
1087
|
readonly syncedAt: _angular_core.WritableSignal<Date | null>;
|
|
1088
|
+
/** Configuração inicial feita (ou pulada). `null` enquanto a conta não respondeu. */
|
|
1089
|
+
readonly setupDone: _angular_core.WritableSignal<boolean | null>;
|
|
885
1090
|
/** O documento que o navegador tem agora. */
|
|
886
1091
|
readonly snapshot: _angular_core.Signal<SpineAccountPreferencesDoc>;
|
|
887
1092
|
private loaded;
|
|
1093
|
+
/** O Argos tem o documento global (lido com sucesso nesta sessão). */
|
|
1094
|
+
private globalOn;
|
|
888
1095
|
private lastSaved;
|
|
1096
|
+
private lastSavedGlobal;
|
|
889
1097
|
private timer;
|
|
890
1098
|
private readyPromise;
|
|
891
1099
|
constructor();
|
|
@@ -897,12 +1105,22 @@ declare class SpineAccountPreferencesService {
|
|
|
897
1105
|
ready(timeoutMs?: number): Promise<void>;
|
|
898
1106
|
/** Grava agora o que estiver pendente ("Sincronizar agora"); relê a conta se ela ainda não respondeu. */
|
|
899
1107
|
syncNow(): Promise<void>;
|
|
1108
|
+
/** Marca a configuração inicial como feita (concluída ou pulada): vai para a conta com o resto, ou fica aqui. */
|
|
1109
|
+
completeSetup(): void;
|
|
900
1110
|
private load;
|
|
1111
|
+
/** O documento global, ou `null` quando o Argos não tem a rota (versão anterior): aí tudo fica no do app. */
|
|
1112
|
+
private loadGlobal;
|
|
1113
|
+
/** O que vai em cada documento agora. Sem o global, tudo no do app. */
|
|
1114
|
+
private split;
|
|
901
1115
|
/** Aplica o documento da conta pelos mesmos caminhos das telas (cada `set*` também grava no navegador). */
|
|
902
1116
|
private apply;
|
|
903
1117
|
private schedule;
|
|
1118
|
+
/** Grava o que mudou desde a última gravação (`force`: os dois documentos, mudados ou não). */
|
|
904
1119
|
private save;
|
|
905
1120
|
private failed;
|
|
1121
|
+
/** Configuração inicial feita neste navegador, ou aparência já escolhida aqui antes de ela existir. */
|
|
1122
|
+
private localSetupDone;
|
|
1123
|
+
private writeLocalSetupDone;
|
|
906
1124
|
private clearTimer;
|
|
907
1125
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineAccountPreferencesService, never>;
|
|
908
1126
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineAccountPreferencesService>;
|
|
@@ -977,7 +1195,7 @@ type BrowserList = 'recents' | 'searches' | 'favorites';
|
|
|
977
1195
|
* sessão, sair), MFA (verificação em duas etapas e códigos de recuperação do Argos), Sessões (token de
|
|
978
1196
|
* acesso, tokens de aplicação e sessões e dispositivos do Argos), Aparência, Acessibilidade (tamanho do texto,
|
|
979
1197
|
* animações), Região (idioma, fuso, formato de hora, primeiro dia da semana), Atalhos, Dados do navegador
|
|
980
|
-
* (limpar listas, restaurar preferências), Ajuda (novidades,
|
|
1198
|
+
* (limpar listas, restaurar preferências), Ajuda (novidades, configuração inicial, o essencial) e Sobre, mais as seções que o app registrar
|
|
981
1199
|
* com `provideSettingsSection`. Tudo vale na hora — cada controle chama o serviço que já persiste aquela
|
|
982
1200
|
* preferência (tema, densidade, menu lateral, fuso, tamanho do texto…).
|
|
983
1201
|
*
|
|
@@ -1037,10 +1255,14 @@ declare class SettingsPanelComponent {
|
|
|
1037
1255
|
shortcuts: string;
|
|
1038
1256
|
shortcutsDescription: string;
|
|
1039
1257
|
shortcutsKeywords: string;
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1258
|
+
setup: string;
|
|
1259
|
+
setupDescription: string;
|
|
1260
|
+
setupKeywords: string;
|
|
1261
|
+
redoSetup: string;
|
|
1262
|
+
essentials: string;
|
|
1263
|
+
essentialsDescription: string;
|
|
1264
|
+
essentialsKeywords: string;
|
|
1265
|
+
showEssentials: string;
|
|
1044
1266
|
accessibility: string;
|
|
1045
1267
|
accessibilityKeywords: string;
|
|
1046
1268
|
textSize: string;
|
|
@@ -1165,7 +1387,6 @@ declare class SettingsPanelComponent {
|
|
|
1165
1387
|
readonly mfa: "mfa";
|
|
1166
1388
|
readonly sessions: "sessoes";
|
|
1167
1389
|
readonly groups: "grupos";
|
|
1168
|
-
readonly security: "seguranca";
|
|
1169
1390
|
readonly about: "sobre";
|
|
1170
1391
|
};
|
|
1171
1392
|
/** Seção aberta, com a chave antiga já trocada pela nova (`seguranca` → `mfa`). */
|
|
@@ -1183,7 +1404,7 @@ declare class SettingsPanelComponent {
|
|
|
1183
1404
|
protected readonly sidebar: HermesSidebarService;
|
|
1184
1405
|
protected readonly preferences: SpinePreferencesService;
|
|
1185
1406
|
private readonly shortcutService;
|
|
1186
|
-
private readonly
|
|
1407
|
+
private readonly setup;
|
|
1187
1408
|
private readonly auth;
|
|
1188
1409
|
private readonly authConfig;
|
|
1189
1410
|
private readonly toast;
|
|
@@ -1270,6 +1491,125 @@ declare class SettingsPanelComponent {
|
|
|
1270
1491
|
syncError: string;
|
|
1271
1492
|
syncNow: string;
|
|
1272
1493
|
};
|
|
1494
|
+
/** Sobre › Avaliação: a média da ferramenta e "Avaliar" (`SpineFeatures.ratings` com `SPINE_ADMIN_API`). */
|
|
1495
|
+
protected readonly ratingsEnabled: boolean;
|
|
1496
|
+
protected readonly ratingText: {
|
|
1497
|
+
rateScreen: string;
|
|
1498
|
+
rateApp: string;
|
|
1499
|
+
ratedApp: string;
|
|
1500
|
+
heading: string;
|
|
1501
|
+
subheading: string;
|
|
1502
|
+
aboutScreen: string;
|
|
1503
|
+
aboutApp: string;
|
|
1504
|
+
score: string;
|
|
1505
|
+
scoreOf: string;
|
|
1506
|
+
scoreNamed: string;
|
|
1507
|
+
scoreShort: string;
|
|
1508
|
+
scoreNames: Record<1 | 2 | 3 | 4 | 5, string>;
|
|
1509
|
+
noScore: string;
|
|
1510
|
+
scaleHint: string;
|
|
1511
|
+
comment: string;
|
|
1512
|
+
commentPlaceholder: string;
|
|
1513
|
+
submit: string;
|
|
1514
|
+
update: string;
|
|
1515
|
+
previous: string;
|
|
1516
|
+
scoreRequired: string;
|
|
1517
|
+
loading: string;
|
|
1518
|
+
thanks: string;
|
|
1519
|
+
updated: string;
|
|
1520
|
+
saveError: string;
|
|
1521
|
+
period: string;
|
|
1522
|
+
periods: Record<"all" | "d7" | "d30" | "d90", string>;
|
|
1523
|
+
refresh: string;
|
|
1524
|
+
appCard: string;
|
|
1525
|
+
screensCard: string;
|
|
1526
|
+
appCardHint: string;
|
|
1527
|
+
screensCardHint: string;
|
|
1528
|
+
scoreMax: string;
|
|
1529
|
+
average: string;
|
|
1530
|
+
total: _trismegisto_primitives.PluralMessage;
|
|
1531
|
+
comments: _trismegisto_primitives.PluralMessage;
|
|
1532
|
+
noRatings: string;
|
|
1533
|
+
distribution: string;
|
|
1534
|
+
distributionRow: string;
|
|
1535
|
+
ranking: string;
|
|
1536
|
+
rankingHint: string;
|
|
1537
|
+
sort: string;
|
|
1538
|
+
sorts: Record<"worst" | "best" | "most", string>;
|
|
1539
|
+
noScreens: string;
|
|
1540
|
+
filterByScreen: string;
|
|
1541
|
+
recent: string;
|
|
1542
|
+
recentHint: string;
|
|
1543
|
+
filterScope: string;
|
|
1544
|
+
allScopes: string;
|
|
1545
|
+
tool: string;
|
|
1546
|
+
screens: string;
|
|
1547
|
+
filterScreen: string;
|
|
1548
|
+
allScreens: string;
|
|
1549
|
+
filterScore: string;
|
|
1550
|
+
allScores: string;
|
|
1551
|
+
withComment: string;
|
|
1552
|
+
clearFilters: string;
|
|
1553
|
+
noComment: string;
|
|
1554
|
+
itemActions: string;
|
|
1555
|
+
copyComment: string;
|
|
1556
|
+
commentCopied: string;
|
|
1557
|
+
copyFailed: string;
|
|
1558
|
+
showAppRatings: string;
|
|
1559
|
+
showScreenRatings: string;
|
|
1560
|
+
emptyList: string;
|
|
1561
|
+
pagination: string;
|
|
1562
|
+
unknownUser: string;
|
|
1563
|
+
loadError: string;
|
|
1564
|
+
forbidden: string;
|
|
1565
|
+
updatedAt: string;
|
|
1566
|
+
details: string;
|
|
1567
|
+
detailsOf: string;
|
|
1568
|
+
tabScreens: string;
|
|
1569
|
+
tabAreas: string;
|
|
1570
|
+
tabTrends: string;
|
|
1571
|
+
viewAll: string;
|
|
1572
|
+
allHeading: string;
|
|
1573
|
+
justNow: string;
|
|
1574
|
+
yesterdayAt: string;
|
|
1575
|
+
dateAt: string;
|
|
1576
|
+
sortsShort: Record<"worst" | "best" | "most", string>;
|
|
1577
|
+
bands: Record<"all" | "bad" | "mid" | "good", string>;
|
|
1578
|
+
bandFilter: string;
|
|
1579
|
+
filterArea: string;
|
|
1580
|
+
allAreas: string;
|
|
1581
|
+
noArea: string;
|
|
1582
|
+
filterByArea: string;
|
|
1583
|
+
screensCount: _trismegisto_primitives.PluralMessage;
|
|
1584
|
+
searchScreens: string;
|
|
1585
|
+
searchScreensLabel: string;
|
|
1586
|
+
searchAreas: string;
|
|
1587
|
+
searchAreasLabel: string;
|
|
1588
|
+
tableEmpty: string;
|
|
1589
|
+
areasEmpty: string;
|
|
1590
|
+
colScreen: string;
|
|
1591
|
+
colArea: string;
|
|
1592
|
+
colScreens: string;
|
|
1593
|
+
colScore: string;
|
|
1594
|
+
colTotal: string;
|
|
1595
|
+
colComments: string;
|
|
1596
|
+
colTrend: string;
|
|
1597
|
+
colOpen: string;
|
|
1598
|
+
tablePagination: string;
|
|
1599
|
+
areasPagination: string;
|
|
1600
|
+
trendOf: string;
|
|
1601
|
+
trendNone: string;
|
|
1602
|
+
trendCaption: string;
|
|
1603
|
+
trendEmpty: string;
|
|
1604
|
+
trendValue: string;
|
|
1605
|
+
trendWeek: string;
|
|
1606
|
+
aboutRating: string;
|
|
1607
|
+
aboutRatingKeywords: string;
|
|
1608
|
+
rateAction: string;
|
|
1609
|
+
noRatingsYet: string;
|
|
1610
|
+
loadingAverage: string;
|
|
1611
|
+
averageError: string;
|
|
1612
|
+
};
|
|
1273
1613
|
/**
|
|
1274
1614
|
* "Copiar token de acesso" é ferramenta de desenvolvimento: põe o token da sessão (Bearer de tudo que a
|
|
1275
1615
|
* pessoa pode fazer) na área de transferência, ao alcance de qualquer app/extensão que leia o clipboard.
|
|
@@ -1284,7 +1624,7 @@ declare class SettingsPanelComponent {
|
|
|
1284
1624
|
protected readonly appliedTheme: _angular_core.Signal<_trismegisto_tokens.HermesThemeName>;
|
|
1285
1625
|
protected readonly family: _angular_core.Signal<string>;
|
|
1286
1626
|
protected readonly densityValue: _angular_core.Signal<HermesDensity>;
|
|
1287
|
-
protected readonly fontValue: _angular_core.Signal<
|
|
1627
|
+
protected readonly fontValue: _angular_core.Signal<_trismegisto_primitives.HermesBuiltinFont>;
|
|
1288
1628
|
protected readonly families: readonly _trismegisto_tokens.HermesFamily[];
|
|
1289
1629
|
protected setThemeMode(mode: string): void;
|
|
1290
1630
|
protected setFamily(id: string): void;
|
|
@@ -1317,11 +1657,14 @@ declare class SettingsPanelComponent {
|
|
|
1317
1657
|
protected setWeekStart(value: string): void;
|
|
1318
1658
|
/** Atalhos registrados (favoritos numa linha só) + os que outra peça dispara — os mesmos do painel "?". */
|
|
1319
1659
|
protected readonly shortcutItems: _angular_core.Signal<readonly _trismegisto_angular.HermesShortcutItem[]>;
|
|
1320
|
-
/** "Ver novidades" só
|
|
1660
|
+
/** "Ver novidades" só com alguma novidade para a pessoa (argos-admin `/me/news`). */
|
|
1321
1661
|
protected readonly hasNews: _angular_core.Signal<boolean>;
|
|
1322
|
-
/**
|
|
1662
|
+
/** "Refazer" a configuração inicial só quando o app não a desligou. */
|
|
1663
|
+
protected readonly setupEnabled: boolean;
|
|
1664
|
+
/** Fecha o painel antes: novidades, configuração inicial e o essencial ocupam a tela. */
|
|
1323
1665
|
protected showNews(): void;
|
|
1324
|
-
protected
|
|
1666
|
+
protected redoSetup(): void;
|
|
1667
|
+
protected showEssentials(): void;
|
|
1325
1668
|
/** Relida quando o painel abre e depois de limpar (as buscas recentes não têm sinal próprio). */
|
|
1326
1669
|
private readonly dataVersion;
|
|
1327
1670
|
protected readonly counts: _angular_core.Signal<Readonly<Record<BrowserList, number>>>;
|
|
@@ -1377,6 +1720,8 @@ declare class SettingsPanelComponent {
|
|
|
1377
1720
|
/** Grupos desta aplicação de que a pessoa é membro (relidos a cada abertura); sem nenhum, a seção some. */
|
|
1378
1721
|
private readonly myGroupsService;
|
|
1379
1722
|
protected readonly myGroups: _angular_core.WritableSignal<_trismegisto_spine_layout.ManagedGroup[]>;
|
|
1723
|
+
/** Grupo aberto na seção Grupos (tela de membros): o cabeçalho da seção sai de vista. */
|
|
1724
|
+
protected readonly groupOpen: _angular_core.WritableSignal<boolean>;
|
|
1380
1725
|
private readonly idle;
|
|
1381
1726
|
private readonly startPageService;
|
|
1382
1727
|
private readonly router;
|
|
@@ -1501,6 +1846,14 @@ interface ManagedGroup {
|
|
|
1501
1846
|
assignable_roles: GroupRole[];
|
|
1502
1847
|
/** Só Administrador troca a função dos outros membros. */
|
|
1503
1848
|
can_change_roles: boolean;
|
|
1849
|
+
/** Resumo dos membros (servidor que já manda): total e os primeiros, com foto. */
|
|
1850
|
+
members_count?: number;
|
|
1851
|
+
members_preview?: {
|
|
1852
|
+
user_id: string;
|
|
1853
|
+
username: string;
|
|
1854
|
+
name: string | null;
|
|
1855
|
+
picture: string | null;
|
|
1856
|
+
}[];
|
|
1504
1857
|
}
|
|
1505
1858
|
interface GroupMember {
|
|
1506
1859
|
user_id: string;
|
|
@@ -1725,6 +2078,10 @@ declare class SpineAccountSecurityService {
|
|
|
1725
2078
|
preferences(): Promise<AccountPreferences>;
|
|
1726
2079
|
/** Substitui o documento de preferências desta aplicação na conta (até 16 KB). */
|
|
1727
2080
|
savePreferences(preferences: Record<string, unknown>): Promise<AccountPreferences>;
|
|
2081
|
+
/** Preferências da pessoa que valem em todos os apps (`GET {api}/preferences/global`). */
|
|
2082
|
+
globalPreferences(): Promise<AccountPreferences>;
|
|
2083
|
+
/** Substitui o documento global (até 16 KB). */
|
|
2084
|
+
saveGlobalPreferences(preferences: Record<string, unknown>): Promise<AccountPreferences>;
|
|
1728
2085
|
private send;
|
|
1729
2086
|
private request;
|
|
1730
2087
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineAccountSecurityService, never>;
|
|
@@ -2127,30 +2484,473 @@ declare class SpineDocsService {
|
|
|
2127
2484
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineDocsService>;
|
|
2128
2485
|
}
|
|
2129
2486
|
|
|
2487
|
+
/** Filtro em pílula do topo do painel. */
|
|
2488
|
+
type SpineNewsFilter = 'all' | 'unread' | 'favorites';
|
|
2489
|
+
interface MonthGroup {
|
|
2490
|
+
readonly key: string;
|
|
2491
|
+
readonly label: string;
|
|
2492
|
+
readonly items: readonly SpineNewsSummary[];
|
|
2493
|
+
}
|
|
2130
2494
|
/**
|
|
2131
|
-
* Painel de novidades
|
|
2132
|
-
*
|
|
2495
|
+
* Painel lateral de novidades e o modal de leitura. Montado uma vez no layout; quem abre é o `SpineNewsService` (aviso
|
|
2496
|
+
* da entrada, menu do perfil, Início, configurações).
|
|
2497
|
+
*
|
|
2498
|
+
* Painel: sem cards — itens de texto separados por divisor, agrupados por mês (data, selo "Nova", título, resumo em
|
|
2499
|
+
* duas linhas e o autor com foto), com busca ("Buscar novidades…") e filtros em pílula (Todas, Não lidas, Favoritas,
|
|
2500
|
+
* cada um com a contagem). Favoritar é o marcador à direita de cada item. O item aberto ganha a barra de destaque.
|
|
2501
|
+
*
|
|
2502
|
+
* Busca e filtros rodam no navegador: "não lida" e "favorita" só existem nele (por id, no localStorage), então o
|
|
2503
|
+
* painel lê as mais recentes de `/me/news` em páginas de 50, em sequência, até ter todas (teto de 200) e filtra a
|
|
2504
|
+
* lista carregada — as contagens das pílulas batem com o que aparece.
|
|
2505
|
+
*
|
|
2506
|
+
* Modal: trilha "Início › Novidades › título", título grande (com "Nova" se ainda não tinha sido aberta), a linha de
|
|
2507
|
+
* meta (data, autor, tipo), o resumo como texto de abertura e o conteúdo do tipo — o texto (informativo), "O que
|
|
2508
|
+
* mudou" com os checks (implementação) ou o antes e o agora lado a lado (alteração). Rodapé: "Marcar como não lida" e
|
|
2509
|
+
* "Entendi".
|
|
2510
|
+
*
|
|
2511
|
+
* O HTML vem de rich text, saneado pelo servidor ao gravar, e é mostrado pelo próprio `hm-rich-text` em `readonly`
|
|
2512
|
+
* (que passa pela lista branca dele de novo) — nunca por `[innerHTML]`. Os itens da implementação são texto puro.
|
|
2133
2513
|
*/
|
|
2134
2514
|
declare class SpineNewsComponent {
|
|
2135
2515
|
protected readonly news: SpineNewsService;
|
|
2136
2516
|
protected readonly text: {
|
|
2137
2517
|
heading: string;
|
|
2138
|
-
|
|
2139
|
-
|
|
2518
|
+
close: string;
|
|
2519
|
+
unseen: string;
|
|
2520
|
+
toastOne: string;
|
|
2521
|
+
toastMany: string;
|
|
2522
|
+
see: string;
|
|
2523
|
+
loading: string;
|
|
2524
|
+
empty: string;
|
|
2525
|
+
loadError: string;
|
|
2526
|
+
retry: string;
|
|
2527
|
+
pages: string;
|
|
2528
|
+
search: string;
|
|
2529
|
+
searchPlaceholder: string;
|
|
2530
|
+
filters: string;
|
|
2531
|
+
filterAll: string;
|
|
2532
|
+
filterUnread: string;
|
|
2533
|
+
filterFavorites: string;
|
|
2534
|
+
favorite: string;
|
|
2535
|
+
unfavorite: string;
|
|
2536
|
+
noResults: string;
|
|
2537
|
+
home: string;
|
|
2538
|
+
changes: string;
|
|
2539
|
+
before: string;
|
|
2540
|
+
after: string;
|
|
2541
|
+
markUnread: string;
|
|
2542
|
+
gotIt: string;
|
|
2543
|
+
kindInformativo: string;
|
|
2544
|
+
kindImplementacao: string;
|
|
2545
|
+
kindAlteracao: string;
|
|
2546
|
+
publishedOn: string;
|
|
2547
|
+
editedOn: string;
|
|
2548
|
+
body: string;
|
|
2549
|
+
detailError: string;
|
|
2140
2550
|
};
|
|
2141
|
-
private readonly
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2551
|
+
private readonly locale;
|
|
2552
|
+
private readonly dateFormat;
|
|
2553
|
+
private readonly dayFormat;
|
|
2554
|
+
private readonly monthFormat;
|
|
2555
|
+
protected readonly uid: string;
|
|
2556
|
+
protected readonly filters: readonly SpineNewsFilter[];
|
|
2557
|
+
protected readonly hasText: (html: string | undefined) => boolean;
|
|
2558
|
+
/** Tudo o que foi carregado (as mais recentes, até o teto). */
|
|
2559
|
+
protected readonly items: _angular_core.WritableSignal<readonly SpineNewsSummary[]>;
|
|
2560
|
+
protected readonly loading: _angular_core.WritableSignal<boolean>;
|
|
2561
|
+
protected readonly error: _angular_core.WritableSignal<boolean>;
|
|
2562
|
+
readonly query: _angular_core.WritableSignal<string>;
|
|
2563
|
+
readonly filter: _angular_core.WritableSignal<SpineNewsFilter>;
|
|
2564
|
+
/** Página atual e quantas novidades cabem no painel (medido pela altura dele; refeito ao redimensionar). */
|
|
2565
|
+
readonly page: _angular_core.WritableSignal<number>;
|
|
2566
|
+
readonly pageSize: _angular_core.WritableSignal<number>;
|
|
2567
|
+
protected readonly pageState: _angular_core.Signal<PaginationState>;
|
|
2568
|
+
private readonly toolsRef;
|
|
2569
|
+
private readonly listRef;
|
|
2570
|
+
/** Altura de um item, medida no primeiro que aparece (estável: não muda a cada página). */
|
|
2571
|
+
private rowPx;
|
|
2572
|
+
/** A novidade aberta no modal (o resumo, já na mão) e o conteúdo dela quando chega. */
|
|
2573
|
+
protected readonly opened: _angular_core.WritableSignal<SpineNewsSummary | null>;
|
|
2574
|
+
/** Estava "Nova" quando abriu (abrir já marca como vista; o selo do modal lembra que era). */
|
|
2575
|
+
protected readonly openedUnseen: _angular_core.WritableSignal<boolean>;
|
|
2576
|
+
protected readonly detail: _angular_core.WritableSignal<SpineNewsDetail | null>;
|
|
2577
|
+
protected readonly detailError: _angular_core.WritableSignal<boolean>;
|
|
2578
|
+
/** Respostas fora de ordem (reabriu o painel, abriu outra) não sobrescrevem a atual. */
|
|
2579
|
+
private loadSeq;
|
|
2580
|
+
private detailSeq;
|
|
2581
|
+
/** Contagem de cada pílula, sobre o que foi carregado (a busca não muda as contagens). */
|
|
2582
|
+
protected readonly counts: _angular_core.Signal<Record<SpineNewsFilter, number>>;
|
|
2583
|
+
/** O que passa no filtro e na busca (na ordem da lista: da mais recente). */
|
|
2584
|
+
protected readonly filtered: _angular_core.Signal<readonly SpineNewsSummary[]>;
|
|
2585
|
+
/** A página dentro do total (trocar o filtro ou o tamanho da página não deixa numa página que não existe). */
|
|
2586
|
+
protected readonly currentPage: _angular_core.Signal<number>;
|
|
2587
|
+
/** A página atual, agrupada por mês. */
|
|
2588
|
+
protected readonly groups: _angular_core.Signal<readonly MonthGroup[]>;
|
|
2589
|
+
/** "Nova" = ainda não aberta neste navegador (reage a `markSeen`/`markUnseen`). */
|
|
2590
|
+
protected readonly unseen: (id: string) => boolean;
|
|
2591
|
+
protected readonly favorite: (id: string) => boolean;
|
|
2592
|
+
constructor();
|
|
2593
|
+
private measure;
|
|
2594
|
+
protected changePage(next: PaginationState): void;
|
|
2595
|
+
protected filterLabel(f: SpineNewsFilter): string;
|
|
2596
|
+
protected favoriteLabel(item: SpineNewsSummary): string;
|
|
2597
|
+
protected kindOf(item: SpineNewsSummary): SpineNewsKind;
|
|
2598
|
+
protected kindIcon(item: SpineNewsSummary): string;
|
|
2599
|
+
protected kindLabel(item: SpineNewsSummary): string;
|
|
2600
|
+
protected crumbs(item: SpineNewsSummary): BreadcrumbItem[];
|
|
2601
|
+
/** "Início" da trilha leva à tela inicial: fecha o modal e o painel. */
|
|
2602
|
+
protected onCrumb(crumb: BreadcrumbItem): void;
|
|
2603
|
+
protected dayOf(item: SpineNewsSummary): string;
|
|
2604
|
+
protected publishedOn(item: SpineNewsSummary): string;
|
|
2605
|
+
protected editedOn(at: string): string;
|
|
2606
|
+
/** Lê as páginas em sequência (50 por vez) até ter todas ou o teto; a lista aparece já com a primeira. */
|
|
2607
|
+
load(): Promise<void>;
|
|
2608
|
+
/** Abre no modal e marca como vista; o conteúdo chega em seguida. */
|
|
2609
|
+
open(item: SpineNewsSummary): void;
|
|
2610
|
+
/** "Marcar como não lida": volta o selo "Nova" e fecha. */
|
|
2611
|
+
protected markUnread(): void;
|
|
2612
|
+
protected closeItem(): void;
|
|
2150
2613
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineNewsComponent, never>;
|
|
2151
2614
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SpineNewsComponent, "spine-news", never, {}, {}, never, never, true, never>;
|
|
2152
2615
|
}
|
|
2153
2616
|
|
|
2617
|
+
/** O que se avalia: a ferramenta inteira (`app`) ou uma tela (`screen`). */
|
|
2618
|
+
type SpineRatingScope = 'app' | 'screen';
|
|
2619
|
+
/** Alvo de uma avaliação. Tela: `screenPath` é a chave (a rota); `screenLabel`, o caminho legível que vai junto. */
|
|
2620
|
+
interface SpineRatingTarget {
|
|
2621
|
+
scope: SpineRatingScope;
|
|
2622
|
+
screenPath?: string | null;
|
|
2623
|
+
screenLabel?: string | null;
|
|
2624
|
+
}
|
|
2625
|
+
/** A avaliação da pessoa como o argos-admin devolve (`/me/ratings`). */
|
|
2626
|
+
interface SpineRating {
|
|
2627
|
+
scope: SpineRatingScope;
|
|
2628
|
+
screen_path: string | null;
|
|
2629
|
+
screen_label: string | null;
|
|
2630
|
+
/** 0 a 10 (10 = 5 estrelas; 7 = 3,5). */
|
|
2631
|
+
score: number;
|
|
2632
|
+
comment: string | null;
|
|
2633
|
+
created_at: string;
|
|
2634
|
+
updated_at: string;
|
|
2635
|
+
}
|
|
2636
|
+
/** Média da ferramenta que qualquer pessoa logada vê (`/me/ratings/summary`): 0 a 10 com uma casa, ou `null`. */
|
|
2637
|
+
interface SpineRatingAverage {
|
|
2638
|
+
average: number | null;
|
|
2639
|
+
total: number;
|
|
2640
|
+
}
|
|
2641
|
+
/** Chave de um alvo ("app" ou "screen:<rota>"): o que foi avaliado nesta sessão e a troca de alvo da janela. */
|
|
2642
|
+
declare const ratingTargetKey: (t: SpineRatingTarget) => string;
|
|
2643
|
+
/** Teto do comentário (o mesmo do servidor e da coluna). */
|
|
2644
|
+
declare const SPINE_RATING_COMMENT_MAX = 500;
|
|
2645
|
+
/**
|
|
2646
|
+
* Avaliações da pessoa (nota de 0 a 10, 5 estrelas com meia, e um comentário) — `argos-admin /me/ratings`, sempre da
|
|
2647
|
+
* aplicação LOGADA (o servidor tira o client do token da sessão) e uma por escopo/tela: avaliar de novo substitui. Liga
|
|
2648
|
+
* com `SpineFeatures.ratings` e só com `SPINE_ADMIN_API`; sem os dois, `enabled` é falso e nada de avaliação aparece.
|
|
2649
|
+
*
|
|
2650
|
+
* `windowTarget` é o que a janela de avaliação (flutuante, montada no cabeçalho) está avaliando: `openApp` (a estrela
|
|
2651
|
+
* do cabeçalho e Configurações › Sobre) e `openScreen` (a estrela da barra da página) trocam o alvo da mesma janela, e
|
|
2652
|
+
* `closeWindow` fecha. `appRated` diz se a pessoa já avaliou a ferramenta (a estrela do cabeçalho fica cheia) e
|
|
2653
|
+
* `appAverage` é a média da ferramenta (Configurações › Sobre); os dois são lidos uma vez, por quem os mostra.
|
|
2654
|
+
*/
|
|
2655
|
+
declare class SpineRatingsService {
|
|
2656
|
+
private readonly http;
|
|
2657
|
+
private readonly auth;
|
|
2658
|
+
private readonly adminApi;
|
|
2659
|
+
/** Ligado por padrão (como as sugestões): só `features.ratings: false` desliga; sem a API da conta ou HTTP, nada. */
|
|
2660
|
+
readonly enabled: boolean;
|
|
2661
|
+
/** O que a janela de avaliação está avaliando; `null` = fechada. Uma janela só, para a ferramenta e para a tela. */
|
|
2662
|
+
readonly windowTarget: _angular_core.WritableSignal<SpineRatingTarget | null>;
|
|
2663
|
+
/** Alvos avaliados nesta sessão do app (a estrela da barra fica cheia); não pergunta ao servidor a cada tela. */
|
|
2664
|
+
private readonly ratedNow;
|
|
2665
|
+
/** A pessoa já avaliou a ferramenta (servidor, lido uma vez por `checkAppRated`, ou gravado agora). */
|
|
2666
|
+
readonly appRated: _angular_core.WritableSignal<boolean>;
|
|
2667
|
+
/** Média da ferramenta (`loadAppAverage`); `null` enquanto não foi lida. */
|
|
2668
|
+
readonly appAverage: _angular_core.WritableSignal<SpineRatingAverage | null>;
|
|
2669
|
+
private appRatedChecked;
|
|
2670
|
+
private get url();
|
|
2671
|
+
/** "Avaliar o {app}": abre a janela (ou troca o conteúdo dela) para a ferramenta. */
|
|
2672
|
+
openApp(): void;
|
|
2673
|
+
/** "Avaliar esta tela": abre a janela (ou troca o conteúdo dela) para a tela. */
|
|
2674
|
+
openScreen(target: SpineRatingTarget): void;
|
|
2675
|
+
closeWindow(): void;
|
|
2676
|
+
isRated(target: SpineRatingTarget): boolean;
|
|
2677
|
+
/**
|
|
2678
|
+
* Lê uma vez se a pessoa já avaliou a ferramenta (a estrela do cabeçalho). Falha de rede deixa vazia, sem aviso:
|
|
2679
|
+
* avaliar continua funcionando, só a estrela não sabe da avaliação antiga.
|
|
2680
|
+
*/
|
|
2681
|
+
checkAppRated(): Promise<void>;
|
|
2682
|
+
/** Média e total da ferramenta (`GET /me/ratings/summary`); quem mostra trata a falha. */
|
|
2683
|
+
loadAppAverage(): Promise<SpineRatingAverage>;
|
|
2684
|
+
/** A avaliação atual da pessoa nesse alvo (para pré-preencher), ou `null` se ainda não avaliou. */
|
|
2685
|
+
mine(target: SpineRatingTarget): Promise<SpineRating | null>;
|
|
2686
|
+
/** Cria ou atualiza a avaliação (nota 0 a 10); comentário vazio vai como `null`. */
|
|
2687
|
+
save(target: SpineRatingTarget, score: number, comment: string): Promise<SpineRating>;
|
|
2688
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineRatingsService, never>;
|
|
2689
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineRatingsService>;
|
|
2690
|
+
}
|
|
2691
|
+
|
|
2692
|
+
/** Nota máxima: 10 = 5 estrelas cheias (cada estrela vale 2, meia estrela vale 1). */
|
|
2693
|
+
declare const SPINE_RATING_SCORE_MAX = 10;
|
|
2694
|
+
type SpineScoreBand = 1 | 2 | 3 | 4 | 5;
|
|
2695
|
+
type SpineStarFill = 'empty' | 'half' | 'full';
|
|
2696
|
+
/** Faixa do rótulo qualitativo de uma nota: 0–2 ruim, 3–4 regular, 5–6 bom, 7–8 muito bom, 9–10 excelente. */
|
|
2697
|
+
declare function spineScoreBand(score: number): SpineScoreBand;
|
|
2698
|
+
/** Preenchimento das 5 estrelas para a nota (uma média vai para a meia estrela mais próxima: 8,4 = 4 estrelas). */
|
|
2699
|
+
declare function spineStarFills(score: number | null | undefined): SpineStarFill[];
|
|
2700
|
+
/**
|
|
2701
|
+
* Estrelas de uma nota de 0 a 10, com meia estrela: 10 = 5 estrelas, 7 = 3,5, 0 = nenhuma. Ao lado, a nota em número
|
|
2702
|
+
* ("7/10"; média com uma casa, "8,4/10").
|
|
2703
|
+
*
|
|
2704
|
+
* - `readonly`: só mostra (média do auto-serviço, Configurações › Sobre). Para o leitor é uma imagem com o nome
|
|
2705
|
+
* "8,4 de 10".
|
|
2706
|
+
* - editável (o formulário de avaliação): um `role="slider"` de 0 a 10 com o valor falado "7 de 10 — Muito bom". As
|
|
2707
|
+
* setas mudam de meia em meia estrela (1 ponto), PageUp/PageDown de estrela em estrela, Home dá 0 e End dá 10. No
|
|
2708
|
+
* mouse, a metade inicial da estrela é a meia e a final é a inteira; clicar de novo na primeira metade da primeira
|
|
2709
|
+
* estrela (nota 1) deixa em 0. Sem nota escolhida (`null`), o valor falado é "Sem nota".
|
|
2710
|
+
*
|
|
2711
|
+
* Meia estrela sem desenho próprio: a estrela vazia por baixo e a cheia por cima, cortada na metade do lado inicial
|
|
2712
|
+
* (em RTL, o lado direito).
|
|
2713
|
+
*/
|
|
2714
|
+
declare class SpineRatingStarsComponent {
|
|
2715
|
+
/** Nota de 0 a 10 (média pode ter casa decimal); `null` = sem nota. Editável: muda com o clique e o teclado. */
|
|
2716
|
+
readonly value: _angular_core.ModelSignal<number | null>;
|
|
2717
|
+
/** Só mostra (sem foco nem clique). */
|
|
2718
|
+
readonly readonly: _angular_core.InputSignal<boolean>;
|
|
2719
|
+
/** A nota em número ao lado ("7/10"). */
|
|
2720
|
+
readonly showValue: _angular_core.InputSignal<boolean>;
|
|
2721
|
+
/** Editável: também o rótulo qualitativo ("Muito bom") ao lado da nota. */
|
|
2722
|
+
readonly showName: _angular_core.InputSignal<boolean>;
|
|
2723
|
+
readonly size: _angular_core.InputSignal<"small" | "medium" | "large">;
|
|
2724
|
+
/** Nome acessível do slider (ou `labelledBy`, o id de um rótulo visível). */
|
|
2725
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
2726
|
+
readonly labelledBy: _angular_core.InputSignal<string>;
|
|
2727
|
+
readonly describedBy: _angular_core.InputSignal<string>;
|
|
2728
|
+
readonly invalid: _angular_core.InputSignal<boolean>;
|
|
2729
|
+
private readonly messages;
|
|
2730
|
+
private readonly text;
|
|
2731
|
+
private readonly host;
|
|
2732
|
+
private readonly numberFormat;
|
|
2733
|
+
protected readonly max = 10;
|
|
2734
|
+
/** Prévia do mouse (editável): vence a nota escolhida no desenho, não no valor. */
|
|
2735
|
+
protected readonly hovered: _angular_core.WritableSignal<number | null>;
|
|
2736
|
+
protected readonly shown: _angular_core.Signal<number | null>;
|
|
2737
|
+
protected readonly fills: _angular_core.Signal<SpineStarFill[]>;
|
|
2738
|
+
protected readonly short: _angular_core.Signal<string>;
|
|
2739
|
+
protected readonly named: _angular_core.Signal<string>;
|
|
2740
|
+
/** O que o leitor fala: "8,4 de 10" (imagem) ou "7 de 10 — Muito bom" (slider). */
|
|
2741
|
+
protected readonly spoken: _angular_core.Signal<string>;
|
|
2742
|
+
private format;
|
|
2743
|
+
/** Clique numa metade: aquela nota; de novo na primeira metade (nota 1), 0 -- o "nenhuma estrela" do mouse. */
|
|
2744
|
+
protected pick(score: number): void;
|
|
2745
|
+
protected onKey(event: KeyboardEvent): void;
|
|
2746
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineRatingStarsComponent, never>;
|
|
2747
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SpineRatingStarsComponent, "spine-rating-stars", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "showName": { "alias": "showName"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelledBy": { "alias": "labelledBy"; "required": false; "isSignal": true; }; "describedBy": { "alias": "describedBy"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
|
|
2748
|
+
}
|
|
2749
|
+
|
|
2750
|
+
/**
|
|
2751
|
+
* Lugar das ações da tela na barra da página (`spine-page-bar`): um por painel do workspace, fornecido pelo
|
|
2752
|
+
* `spine-page-panel`. A tela não fala com ele direto: usa `<ng-template spinePageActions>`.
|
|
2753
|
+
*/
|
|
2754
|
+
declare class SpinePageActionsSlot {
|
|
2755
|
+
readonly template: _angular_core.WritableSignal<TemplateRef<unknown> | null>;
|
|
2756
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpinePageActionsSlot, never>;
|
|
2757
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpinePageActionsSlot>;
|
|
2758
|
+
}
|
|
2759
|
+
/**
|
|
2760
|
+
* Ações que valem para a tela inteira (período, "Atualizar", "Atualizado em…") na barra da página, à direita do título:
|
|
2761
|
+
*
|
|
2762
|
+
* ```html
|
|
2763
|
+
* <ng-template spinePageActions>
|
|
2764
|
+
* <hm-segmented-control … />
|
|
2765
|
+
* <hm-button icon="refresh" (clicked)="reload()">Atualizar</hm-button>
|
|
2766
|
+
* </ng-template>
|
|
2767
|
+
* ```
|
|
2768
|
+
*
|
|
2769
|
+
* O conteúdo continua sendo da tela (bindings e eventos no componente dela); só aparece na barra do painel em que a tela
|
|
2770
|
+
* está. Fora de um painel (tela montada sozinha, teste), aparece no próprio lugar do `ng-template`. Uma tela por painel:
|
|
2771
|
+
* a última que registrar vale, e sair da tela tira as ações da barra.
|
|
2772
|
+
*/
|
|
2773
|
+
declare class SpinePageActionsDirective implements OnDestroy {
|
|
2774
|
+
private readonly slot;
|
|
2775
|
+
private readonly template;
|
|
2776
|
+
constructor();
|
|
2777
|
+
ngOnDestroy(): void;
|
|
2778
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpinePageActionsDirective, never>;
|
|
2779
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SpinePageActionsDirective, "ng-template[spinePageActions]", never, {}, {}, never, never, true, never>;
|
|
2780
|
+
}
|
|
2781
|
+
|
|
2782
|
+
/** Tipos de sugestão, como o Argos guarda (`web.app_suggestions.kind`). */
|
|
2783
|
+
declare const SPINE_SUGGESTION_KINDS: readonly ["melhoria", "nova_funcionalidade", "problema", "outro"];
|
|
2784
|
+
type SpineSuggestionKind = (typeof SPINE_SUGGESTION_KINDS)[number];
|
|
2785
|
+
/**
|
|
2786
|
+
* Os status, na ordem das colunas. Toda sugestão nasce `em_analise` (o antigo "Nova" saiu; ainda aparece no histórico,
|
|
2787
|
+
* pelo `legacyStatuses` do catálogo). `concluida` e `recusada` encerram: recusada sai do quadro na hora, concluída
|
|
2788
|
+
* depois de alguns dias (o servidor decide; ver `done_days` do quadro), e as duas ficam no arquivo.
|
|
2789
|
+
*/
|
|
2790
|
+
declare const SPINE_SUGGESTION_STATUSES: readonly ["em_analise", "planejada", "em_desenvolvimento", "concluida", "recusada"];
|
|
2791
|
+
type SpineSuggestionStatus = (typeof SPINE_SUGGESTION_STATUSES)[number];
|
|
2792
|
+
/** Os status que aparecem em "Sugestões do app" (as de todo mundo): a recusada não entra (nem a arquivada pela equipe). */
|
|
2793
|
+
declare const SPINE_SUGGESTION_PUBLIC_STATUSES: readonly ["em_analise", "planejada", "em_desenvolvimento", "concluida"];
|
|
2794
|
+
type SpineSuggestionPublicStatus = (typeof SPINE_SUGGESTION_PUBLIC_STATUSES)[number];
|
|
2795
|
+
/** Ordem de "Sugestões do app": as mais apoiadas (padrão do servidor) ou as mais novas. */
|
|
2796
|
+
declare const SPINE_SUGGESTION_PUBLIC_SORTS: readonly ["votes", "recent"];
|
|
2797
|
+
type SpineSuggestionPublicSort = (typeof SPINE_SUGGESTION_PUBLIC_SORTS)[number];
|
|
2798
|
+
/** Cor da etiqueta de status (a mesma em "Minhas sugestões" e no kanban do auto-serviço). */
|
|
2799
|
+
declare const SPINE_SUGGESTION_STATUS_COLORS: Record<SpineSuggestionStatus, TagColor>;
|
|
2800
|
+
/** Ícone de cada status (coluna do kanban, etiqueta do arquivo). */
|
|
2801
|
+
declare const SPINE_SUGGESTION_STATUS_ICONS: Record<SpineSuggestionStatus, string>;
|
|
2802
|
+
/** Ícone e cor de cada tipo (o modal de nova sugestão e o cartão do kanban). */
|
|
2803
|
+
declare const SPINE_SUGGESTION_KIND_ICONS: Record<SpineSuggestionKind, string>;
|
|
2804
|
+
declare const SPINE_SUGGESTION_KIND_COLORS: Record<SpineSuggestionKind, TagColor>;
|
|
2805
|
+
/** Limites do servidor (colunas da migration): o formulário corta antes. */
|
|
2806
|
+
declare const SPINE_SUGGESTION_LIMITS: {
|
|
2807
|
+
readonly title: 140;
|
|
2808
|
+
readonly description: 4000;
|
|
2809
|
+
readonly screen: 512;
|
|
2810
|
+
};
|
|
2811
|
+
interface SpineSuggestionPerson {
|
|
2812
|
+
user_id: string;
|
|
2813
|
+
username: string | null;
|
|
2814
|
+
name: string | null;
|
|
2815
|
+
picture: string | null;
|
|
2816
|
+
}
|
|
2817
|
+
/** Uma sugestão como o argos-admin devolve (`/me/suggestions` e `/auto-service/:clientId/suggestions`). */
|
|
2818
|
+
interface SpineSuggestion {
|
|
2819
|
+
id: string;
|
|
2820
|
+
/** A chave da sugestão no app ("SUG-12"), a mesma que a equipe usa no quadro. */
|
|
2821
|
+
key?: string;
|
|
2822
|
+
kind: SpineSuggestionKind;
|
|
2823
|
+
title: string;
|
|
2824
|
+
description: string;
|
|
2825
|
+
screen: {
|
|
2826
|
+
path: string | null;
|
|
2827
|
+
label: string | null;
|
|
2828
|
+
};
|
|
2829
|
+
status: SpineSuggestionStatus;
|
|
2830
|
+
position: number;
|
|
2831
|
+
votes: number;
|
|
2832
|
+
/** Quem consulta também apoia (só nas leituras da pessoa). */
|
|
2833
|
+
voted: boolean;
|
|
2834
|
+
comments_count: number;
|
|
2835
|
+
last_comment: {
|
|
2836
|
+
comment: string;
|
|
2837
|
+
created_at: string;
|
|
2838
|
+
} | null;
|
|
2839
|
+
/** Desde quando está no status atual (o último evento para ele; sem evento, a criação). */
|
|
2840
|
+
status_at?: string;
|
|
2841
|
+
created_at: string;
|
|
2842
|
+
updated_at: string;
|
|
2843
|
+
/** Só no auto-serviço: quem pediu, com a foto (null = pessoa removida). */
|
|
2844
|
+
author?: SpineSuggestionPerson | null;
|
|
2845
|
+
/** Só em "já pediram nesta tela": a sugestão é de quem consulta (autora ou relatora). */
|
|
2846
|
+
mine?: boolean;
|
|
2847
|
+
/** Só em "Minhas": quem consulta é relatora (a sugestão dela foi agrupada nesta), não a autora. */
|
|
2848
|
+
reporter?: boolean;
|
|
2849
|
+
/** Só em "Minhas": as sugestões de quem consulta agrupadas nesta ("SUG-30 agrupada em SUG-12"). */
|
|
2850
|
+
merged_from?: Array<{
|
|
2851
|
+
id: string;
|
|
2852
|
+
key: string;
|
|
2853
|
+
title: string;
|
|
2854
|
+
}>;
|
|
2855
|
+
}
|
|
2856
|
+
/**
|
|
2857
|
+
* Uma sugestão em "Sugestões do app" (`/me/suggestions/all`): só o que é público do pedido, de quem quer que seja —
|
|
2858
|
+
* nada do quadro de trabalho da equipe, e os comentários contados e o último são só os públicos.
|
|
2859
|
+
*/
|
|
2860
|
+
interface SpineAppSuggestion {
|
|
2861
|
+
id: string;
|
|
2862
|
+
key: string;
|
|
2863
|
+
kind: SpineSuggestionKind;
|
|
2864
|
+
title: string;
|
|
2865
|
+
/** Texto puro (a descrição inteira, até 4000). */
|
|
2866
|
+
description: string;
|
|
2867
|
+
screen: {
|
|
2868
|
+
path: string | null;
|
|
2869
|
+
label: string | null;
|
|
2870
|
+
};
|
|
2871
|
+
status: SpineSuggestionStatus;
|
|
2872
|
+
votes: number;
|
|
2873
|
+
/** Quem consulta apoia. */
|
|
2874
|
+
voted: boolean;
|
|
2875
|
+
/** É de quem consulta: não dá para apoiar (o servidor responde `409 own_suggestion`). */
|
|
2876
|
+
mine: boolean;
|
|
2877
|
+
comments_count: number;
|
|
2878
|
+
last_comment: {
|
|
2879
|
+
comment: string;
|
|
2880
|
+
created_at: string;
|
|
2881
|
+
} | null;
|
|
2882
|
+
created_at: string;
|
|
2883
|
+
/** Quem pediu, com a foto (null = pessoa removida). */
|
|
2884
|
+
author: SpineSuggestionPerson | null;
|
|
2885
|
+
}
|
|
2886
|
+
/** Comentário público de uma sugestão (`/me/suggestions/:id/comments`); `status` = a mudança que ele acompanha. */
|
|
2887
|
+
interface SpineSuggestionComment {
|
|
2888
|
+
id: string;
|
|
2889
|
+
comment: string;
|
|
2890
|
+
status: SpineSuggestionStatus | null;
|
|
2891
|
+
created_at: string;
|
|
2892
|
+
author: SpineSuggestionPerson | null;
|
|
2893
|
+
}
|
|
2894
|
+
interface SpineAppSuggestionsQuery {
|
|
2895
|
+
limit: number;
|
|
2896
|
+
offset: number;
|
|
2897
|
+
status?: SpineSuggestionPublicStatus | '';
|
|
2898
|
+
/** Título, descrição, tela ou a chave ("SUG-12"). */
|
|
2899
|
+
q?: string;
|
|
2900
|
+
/** Só as pedidas nesta rota. */
|
|
2901
|
+
screen?: string;
|
|
2902
|
+
sort?: SpineSuggestionPublicSort;
|
|
2903
|
+
}
|
|
2904
|
+
interface SpineSuggestionDraft {
|
|
2905
|
+
kind: SpineSuggestionKind;
|
|
2906
|
+
title: string;
|
|
2907
|
+
description: string;
|
|
2908
|
+
screen: {
|
|
2909
|
+
path: string | null;
|
|
2910
|
+
label: string | null;
|
|
2911
|
+
};
|
|
2912
|
+
}
|
|
2913
|
+
/**
|
|
2914
|
+
* Sugestões de melhoria da pessoa — `argos-admin /me/suggestions`. Sempre da aplicação LOGADA (o servidor tira o client
|
|
2915
|
+
* do access-token da sessão) e com o token da sessão (o servidor recusa x-app-token). Sem `SPINE_ADMIN_API` não há
|
|
2916
|
+
* para onde mandar: o botão da barra da página nem aparece (`SpineSuggestButtonComponent`).
|
|
2917
|
+
*/
|
|
2918
|
+
declare class SpineSuggestionsService {
|
|
2919
|
+
private readonly http;
|
|
2920
|
+
private readonly auth;
|
|
2921
|
+
private readonly adminApi;
|
|
2922
|
+
private url;
|
|
2923
|
+
create(draft: SpineSuggestionDraft): Promise<SpineSuggestion>;
|
|
2924
|
+
/** As minhas, da mais nova; `status` filtra uma coluna. */
|
|
2925
|
+
mine(opts: {
|
|
2926
|
+
limit: number;
|
|
2927
|
+
offset: number;
|
|
2928
|
+
status?: SpineSuggestionStatus | '';
|
|
2929
|
+
}): Promise<{
|
|
2930
|
+
suggestions: SpineSuggestion[];
|
|
2931
|
+
total: number;
|
|
2932
|
+
}>;
|
|
2933
|
+
/** "Sugestões do app": as de todas as pessoas no app (menos recusadas e arquivadas), com filtros e paginação. */
|
|
2934
|
+
all(query: SpineAppSuggestionsQuery): Promise<{
|
|
2935
|
+
suggestions: SpineAppSuggestion[];
|
|
2936
|
+
total: number;
|
|
2937
|
+
}>;
|
|
2938
|
+
/** Os comentários públicos de uma sugestão (o detalhe só de leitura), do mais novo. */
|
|
2939
|
+
comments(id: string, page: {
|
|
2940
|
+
limit: number;
|
|
2941
|
+
offset: number;
|
|
2942
|
+
}): Promise<{
|
|
2943
|
+
comments: SpineSuggestionComment[];
|
|
2944
|
+
total: number;
|
|
2945
|
+
}>;
|
|
2946
|
+
/** As ainda abertas da tela, de qualquer pessoa: o modal oferece apoiar em vez de repetir. */
|
|
2947
|
+
byScreen(path: string): Promise<SpineSuggestion[]>;
|
|
2948
|
+
vote(id: string): Promise<void>;
|
|
2949
|
+
unvote(id: string): Promise<void>;
|
|
2950
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineSuggestionsService, never>;
|
|
2951
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineSuggestionsService>;
|
|
2952
|
+
}
|
|
2953
|
+
|
|
2154
2954
|
/**
|
|
2155
2955
|
* Modal de documentação das telas: índice (com busca) à esquerda e leitura à direita. Montado uma vez
|
|
2156
2956
|
* pelo `spine-layout`; abrir, fechar e o que se lê vêm todos do `SpineDocsService`.
|
|
@@ -2196,6 +2996,6 @@ declare const SPINE_MARKDOWN_PURIFY_CONFIG: Config;
|
|
|
2196
2996
|
/** HTML limpo pelo perfil do spine, ou `null` quando não há DOM (SSR: melhor não renderizar). */
|
|
2197
2997
|
declare function sanitizeSpineMarkdownHtml(html: string): string | null;
|
|
2198
2998
|
|
|
2199
|
-
export { AiAgentComponent, AppLauncherComponent, HeaderComponent, LayoutComponent,
|
|
2200
|
-
export type { AccountActivityEntry, AccountActivityPage, AccountBadges, AccountMethod, AccountOverview, AccountPreferences, AccountReauth, AccountSession, AppToken, AppTokenList, AppTokenOptions, CreatedAppToken, DocsEntry, DocsGroup, DocsView, GroupMember, GroupRole, ManagedGroup,
|
|
2999
|
+
export { AiAgentComponent, AppLauncherComponent, HeaderComponent, LayoutComponent, SPINE_BRAND, SPINE_GLOBAL_PREFERENCE_KEYS, SPINE_IDLE_WARNING_SECONDS, SPINE_MARKDOWN_PURIFY_CONFIG, SPINE_PREFERENCES_SAVE_DELAY_MS, SPINE_RATING_COMMENT_MAX, SPINE_RATING_SCORE_MAX, SPINE_SETTINGS_ALIASES, SPINE_SETTINGS_KEYS, SPINE_SETTINGS_SECTIONS, SPINE_SUGGESTION_KINDS, SPINE_SUGGESTION_KIND_COLORS, SPINE_SUGGESTION_KIND_ICONS, SPINE_SUGGESTION_LIMITS, SPINE_SUGGESTION_PUBLIC_SORTS, SPINE_SUGGESTION_PUBLIC_STATUSES, SPINE_SUGGESTION_STATUSES, SPINE_SUGGESTION_STATUS_COLORS, SPINE_SUGGESTION_STATUS_ICONS, SettingsPanelComponent, ShortcutService, ShortcutsCheatsheetComponent, SidebarComponent, SpineAccountPreferencesService, SpineAccountSecurityService, SpineAppTokensService, SpineBrandComponent, SpineConnectionBannerComponent, SpineDocsComponent, SpineDocsService, SpineIdleService, SpineIdleWarningComponent, SpineInitialSetupComponent, SpineInitialSetupService, SpineLogoutService, SpineMarkdownComponent, SpineMyGroupsService, SpineNewsComponent, SpineNewsService, SpineNoticesService, SpinePageActionsDirective, SpinePageActionsSlot, SpineRatingStarsComponent, SpineRatingsService, SpineSettingsService, SpineStartPageService, SpineSuggestionsService, accountErrorCode, argosAccountApi, buildMcpConfig, effectiveIdleMinutes, idleLimits, isInternalPath, provideSettingsSection, ratingTargetKey, resolveSettingsSection, sanitizeSpineMarkdownHtml, spineScoreBand, spineStarFills, stable };
|
|
3000
|
+
export type { AccountActivityEntry, AccountActivityPage, AccountBadges, AccountMethod, AccountOverview, AccountPreferences, AccountReauth, AccountSession, AppToken, AppTokenList, AppTokenOptions, CreatedAppToken, DocsEntry, DocsGroup, DocsView, GroupMember, GroupRole, ManagedGroup, RealmUser, ShortcutActions, SpineAccountPreferencesDoc, SpineAccountPreferencesStatus, SpineAppSuggestion, SpineAppSuggestionsQuery, SpineGlobalPreferencesDoc, SpineIdleLimits, SpineInitialSetupMode, SpineInitialSetupStep, SpineNewsAuthor, SpineNewsDetail, SpineNewsFilter, SpineNewsKind, SpineNewsPage, SpineNewsSummary, SpineNotice, SpineNoticePermission, SpineRating, SpineRatingAverage, SpineRatingScope, SpineRatingTarget, SpineScoreBand, SpineSettingsSection, SpineStarFill, SpineSuggestion, SpineSuggestionComment, SpineSuggestionDraft, SpineSuggestionKind, SpineSuggestionPerson, SpineSuggestionPublicSort, SpineSuggestionPublicStatus, SpineSuggestionStatus };
|
|
2201
3001
|
//# sourceMappingURL=trismegisto-spine-layout.d.ts.map
|