@trismegisto/spine 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +56 -0
- package/README.md +207 -0
- package/fesm2022/trismegisto-spine-audit.mjs +1299 -0
- package/fesm2022/trismegisto-spine-audit.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-audit.component-CCiz-q8o.mjs +37 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-audit.component-CCiz-q8o.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-Z0wCANF6.mjs +51 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-Z0wCANF6.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-BYkUOwWL.mjs +595 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-BYkUOwWL.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-CqIVe2LU.mjs +357 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-CqIVe2LU.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service.component-B5tyJ2zY.mjs +477 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service.component-B5tyJ2zY.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-home.component-vl3BPFnk.mjs +238 -0
- package/fesm2022/trismegisto-spine-auto-service-home.component-vl3BPFnk.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service.mjs +154 -0
- package/fesm2022/trismegisto-spine-auto-service.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-graphql.mjs +347 -0
- package/fesm2022/trismegisto-spine-graphql.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-layout.mjs +2848 -0
- package/fesm2022/trismegisto-spine-layout.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-modal.mjs +141 -0
- package/fesm2022/trismegisto-spine-modal.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-notification.mjs +122 -0
- package/fesm2022/trismegisto-spine-notification.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-routing.mjs +398 -0
- package/fesm2022/trismegisto-spine-routing.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-shell.mjs +409 -0
- package/fesm2022/trismegisto-spine-shell.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-side-panel.mjs +142 -0
- package/fesm2022/trismegisto-spine-side-panel.mjs.map +1 -0
- package/fesm2022/trismegisto-spine.mjs +2574 -0
- package/fesm2022/trismegisto-spine.mjs.map +1 -0
- package/package.json +94 -0
- package/types/trismegisto-spine-audit.d.ts +948 -0
- package/types/trismegisto-spine-audit.d.ts.map +1 -0
- package/types/trismegisto-spine-auto-service.d.ts +110 -0
- package/types/trismegisto-spine-auto-service.d.ts.map +1 -0
- package/types/trismegisto-spine-graphql.d.ts +72 -0
- package/types/trismegisto-spine-graphql.d.ts.map +1 -0
- package/types/trismegisto-spine-layout.d.ts +1054 -0
- package/types/trismegisto-spine-layout.d.ts.map +1 -0
- package/types/trismegisto-spine-modal.d.ts +68 -0
- package/types/trismegisto-spine-modal.d.ts.map +1 -0
- package/types/trismegisto-spine-notification.d.ts +62 -0
- package/types/trismegisto-spine-notification.d.ts.map +1 -0
- package/types/trismegisto-spine-routing.d.ts +205 -0
- package/types/trismegisto-spine-routing.d.ts.map +1 -0
- package/types/trismegisto-spine-shell.d.ts +143 -0
- package/types/trismegisto-spine-shell.d.ts.map +1 -0
- package/types/trismegisto-spine-side-panel.d.ts +66 -0
- package/types/trismegisto-spine-side-panel.d.ts.map +1 -0
- package/types/trismegisto-spine.d.ts +1161 -0
- package/types/trismegisto-spine.d.ts.map +1 -0
|
@@ -0,0 +1,1161 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Type, InjectionToken, NgZone, EnvironmentProviders, Provider } from '@angular/core';
|
|
3
|
+
import { HermesThemeName, HermesThemeMode, HermesFamily, HermesDensity } from '@trismegisto/angular';
|
|
4
|
+
import { HermesThemeExtension, PluralMessage, CatalogOverride } from '@trismegisto/primitives';
|
|
5
|
+
|
|
6
|
+
interface Route {
|
|
7
|
+
route_display_name?: string | null;
|
|
8
|
+
route_icon?: string | null;
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated use `router_id` (ou `routerIdOf`). Nome histórico: no nó 'page' o argos-auth-server
|
|
11
|
+
* sempre mandou aqui o `router_id` (nunca o `web.routes.route_id`, que é `routed_id`). Continua
|
|
12
|
+
* vindo, com o mesmo valor, para spines/Orfeu antigos.
|
|
13
|
+
*/
|
|
14
|
+
route_id?: string | null;
|
|
15
|
+
route_name?: string | null;
|
|
16
|
+
route_order?: number | null;
|
|
17
|
+
route_path?: string | null;
|
|
18
|
+
route_redirect?: string | null;
|
|
19
|
+
route_redirect_to?: string | null;
|
|
20
|
+
route_type?: string | null;
|
|
21
|
+
/** A ROTA do nó (`web.routes.route_id`): nome/ícone/path. Reaproveitável em vários routers. */
|
|
22
|
+
routed_id: string;
|
|
23
|
+
routes?: Route[] | null;
|
|
24
|
+
/**
|
|
25
|
+
* Identidade da TELA: o router do client (`web.router.router_id`, a posição da tela na
|
|
26
|
+
* navegação). Só no nó 'page' -- nó de grupo (navigation/menu/...) é compartilhado por vários
|
|
27
|
+
* routers e não tem um próprio. É por ele que o spine acha o componente (`COMPONENT_ROUTES`),
|
|
28
|
+
* o documento e a descrição. Argos anterior a 2026-10-05 não manda: use `routerIdOf`, que cai
|
|
29
|
+
* no `route_id` (mesmo valor).
|
|
30
|
+
*/
|
|
31
|
+
router_id?: string | null;
|
|
32
|
+
/** Texto curto da tela (`web.router.description`), exibido na barra da página abaixo do título. */
|
|
33
|
+
description?: string | null;
|
|
34
|
+
source_template_router_id?: string | null;
|
|
35
|
+
}
|
|
36
|
+
/** `router_id` da tela (nó 'page'), aceitando o argos antigo (que só mandava `route_id`, mesmo valor). */
|
|
37
|
+
declare function routerIdOf(route: Route | null | undefined): string | null;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Funde nós IRMÃOS que apontam para o mesmo endereço (`route_redirect`), em toda a árvore.
|
|
41
|
+
*
|
|
42
|
+
* Herança do roteamento antigo: o nível do nó (header/navigation/menu/item/submenu/page) dizia ONDE ele
|
|
43
|
+
* era desenhado — header no topo, menu na lateral, o resto no `<router-outlet>` de cada app. Agora tudo
|
|
44
|
+
* é menu (`spine-sidebar`) e o nível não importa mais, só o endereço. Só que o argos-auth-server monta a
|
|
45
|
+
* view pulando nível vazio: um router header("laboratorio")→page("prova-de-conceito") e outro
|
|
46
|
+
* navigation("laboratorio")→page("dashboard") viram dois nós de topo DIFERENTES com o mesmo
|
|
47
|
+
* `/laboratorio`. Resultado: dois "laboratorio" no menu, e a resolução por nível (`findRouteThrough`, que
|
|
48
|
+
* pega o PRIMEIRO irmão que casa) só enxergava os filhos de um deles — a página do outro caía no
|
|
49
|
+
* fallback do `ViewGuard` (volta para o início). Achado real, 2026-10-07.
|
|
50
|
+
*
|
|
51
|
+
* Regras:
|
|
52
|
+
* - Só funde irmãos da MESMA lista, com `route_redirect` igual e não vazio (grupo transparente, sem
|
|
53
|
+
* endereço, nunca é fundido — não há o que comparar).
|
|
54
|
+
* - O nó fundido é o primeiro da lista (mantém posição, nome, ícone e `routed_id` dele); `router_id`/
|
|
55
|
+
* `description`/`source_template_router_id` vêm do primeiro que tiver. Os filhos de todos são
|
|
56
|
+
* juntados (ordenados por `route_order`, estável) e fundidos de novo, recursivamente.
|
|
57
|
+
* - Lista sem nenhum endereço repetido sai IGUAL (mesmo array, mesmos objetos): nada muda para app cuja
|
|
58
|
+
* árvore já era consistente.
|
|
59
|
+
* - Nunca muta a entrada (a view é do `ViewService` do orfeu, compartilhada).
|
|
60
|
+
*
|
|
61
|
+
* Use `spineRoutesOf(view)` em vez de ler `view.routes` direto: o resultado é guardado por identidade do
|
|
62
|
+
* array, então todo consumidor (guard, painel, sidebar, busca...) recebe a MESMA árvore fundida.
|
|
63
|
+
*/
|
|
64
|
+
declare function mergeRouteTree(routes: readonly Route[] | null | undefined): Route[];
|
|
65
|
+
/** A árvore fundida da view atual (`ViewService.currentView`) — ver `mergeRouteTree`. */
|
|
66
|
+
declare function spineRoutesOf(view: {
|
|
67
|
+
routes?: readonly Route[] | null;
|
|
68
|
+
} | null | undefined): Route[];
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Ponto único de import dos componentes standalone do `@trismegisto/angular` usados nos templates do
|
|
72
|
+
* spine. O DS novo é standalone-only (sem agregador), então este array cumpre o mesmo papel prático:
|
|
73
|
+
* um `@Component({ imports: [...HERMES_DS_IMPORTS] })` em vez de listar cada símbolo em cada arquivo
|
|
74
|
+
* que usa `hm-*`.
|
|
75
|
+
*/
|
|
76
|
+
declare const HERMES_DS_IMPORTS: readonly Type<unknown>[];
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Logo e favicon do app (`SpineConfig.logo`/`SpineConfig.favicon`). O spine não embute marca nenhuma:
|
|
80
|
+
* o arquivo é sempre do app, servido de `src/assets`.
|
|
81
|
+
*/
|
|
82
|
+
/** Logo do header: um caminho (os dois temas) ou as variantes clara/escura + texto alternativo. */
|
|
83
|
+
type SpineLogoConfig = string | {
|
|
84
|
+
light: string;
|
|
85
|
+
dark?: string;
|
|
86
|
+
alt?: string;
|
|
87
|
+
};
|
|
88
|
+
/** Convenção quando o app não configura `logo`: `src/assets/images/logo.svg` servido em `assets/images/`. */
|
|
89
|
+
declare const SPINE_DEFAULT_LOGO = "assets/images/logo.svg";
|
|
90
|
+
/** Logo já normalizado. */
|
|
91
|
+
interface SpineLogoSources {
|
|
92
|
+
light: string;
|
|
93
|
+
dark: string | null;
|
|
94
|
+
/** Texto alternativo explícito; `null` usa o padrão (o nome do app). */
|
|
95
|
+
alt: string | null;
|
|
96
|
+
}
|
|
97
|
+
/** Normaliza `SpineConfig.logo`: omitido → convenção; `false`/vazio → sem imagem (`null`). */
|
|
98
|
+
declare function resolveSpineLogo(logo: SpineLogoConfig | false | null | undefined): SpineLogoSources | null;
|
|
99
|
+
/**
|
|
100
|
+
* Aponta o favicon do documento para `href`: atualiza o primeiro `<link rel="icon">` (ou `shortcut icon`)
|
|
101
|
+
* e remove os outros (senão o navegador pode continuar escolhendo um deles); sem nenhum, cria um no
|
|
102
|
+
* `<head>`. O `type` acompanha a extensão (some quando ela é desconhecida).
|
|
103
|
+
*/
|
|
104
|
+
declare function applySpineFavicon(doc: Document, href: string): HTMLLinkElement | null;
|
|
105
|
+
|
|
106
|
+
interface SpineConfig {
|
|
107
|
+
clientId: string;
|
|
108
|
+
/**
|
|
109
|
+
* Famílias de cor próprias do app (opcional): acrescentar (`families`), trocar uma existente
|
|
110
|
+
* (`replace: { poseidon: minhaFamilia }` — posição e preferência salva passam para a nova) e a
|
|
111
|
+
* família inicial (`defaultFamily`). Ver `extendThemeConfig` do `@trismegisto/primitives`; a família
|
|
112
|
+
* se monta e exporta no `hm-theme-builder`.
|
|
113
|
+
*/
|
|
114
|
+
theme?: HermesThemeExtension;
|
|
115
|
+
/** Nome do app exibido ao lado do logo no header (ex.: "Hefesto"). Padrão: "Hermes". */
|
|
116
|
+
appName?: string;
|
|
117
|
+
/**
|
|
118
|
+
* Logo do header, servido pelo próprio app (caminho relativo ao `<base href>`, ex.: arquivo em
|
|
119
|
+
* `src/assets/images/`). Formas:
|
|
120
|
+
* - omitido: convenção `assets/images/logo.svg` (`SPINE_DEFAULT_LOGO`);
|
|
121
|
+
* - `'assets/images/logo.png'`: um arquivo só, para os dois temas;
|
|
122
|
+
* - `{ light, dark?, alt? }`: `dark` é usado no tema escuro (do `ThemeService`); `alt` substitui o texto
|
|
123
|
+
* alternativo padrão;
|
|
124
|
+
* - `false`: sem imagem (só o nome, sem nenhuma requisição).
|
|
125
|
+
* Se a imagem não carregar (404/erro), o header esconde a imagem e mostra só o nome. Um componente de
|
|
126
|
+
* marca em `SPINE_BRAND` (`@trismegisto/spine/layout`) tem prioridade sobre a imagem.
|
|
127
|
+
*/
|
|
128
|
+
logo?: SpineLogoConfig | false;
|
|
129
|
+
/** Mostra o `appName` ao lado do logo. Padrão: `true`. Com `false` o nome só aparece se não houver logo
|
|
130
|
+
* visível (sem imagem, ou imagem que falhou) — o link da marca nunca fica sem texto. */
|
|
131
|
+
showAppName?: boolean;
|
|
132
|
+
/** Favicon do app (ex.: `'assets/favicon.ico'`). Se definido, o `provideUi` atualiza o `<link rel="icon">`
|
|
133
|
+
* do `index.html` (ou cria um) no bootstrap; sem isto o spine não mexe no favicon. */
|
|
134
|
+
favicon?: string;
|
|
135
|
+
/** Exibe a aba "Especificação técnica" da documentação das telas (`RouteDocument.loadTechnical`).
|
|
136
|
+
* Padrão: `isDevMode()`. Apps com build de produção em homologação passam
|
|
137
|
+
* `!environment.production` (ou equivalente) para mostrá-la fora de produção. */
|
|
138
|
+
technicalDocs?: boolean;
|
|
139
|
+
}
|
|
140
|
+
declare const SPINE_CONFIG: InjectionToken<SpineConfig>;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Wrapper fino sobre `HermesThemeService` (que já persiste em `localStorage` e aplica
|
|
144
|
+
* `data-theme`/`--hm-*` via `HermesThemeDirective`): mantém o mesmo nome/API de injeção do
|
|
145
|
+
* spine antigo, e adiciona só o que o DS novo não cobre — sincronização entre ABAS do
|
|
146
|
+
* navegador via `BroadcastChannel` (o `ThemeService` antigo tinha isso; `HermesThemeService`
|
|
147
|
+
* é por-aba). Aplica os atributos diretamente no `<body>` em vez de exigir que cada app
|
|
148
|
+
* consumidor lembre de colocar `hermesTheme` no template — mesmo espírito do antigo, que
|
|
149
|
+
* também escrevia `hermes-theme` no `<body>` a partir do serviço, não do template.
|
|
150
|
+
*/
|
|
151
|
+
declare class ThemeService {
|
|
152
|
+
private document;
|
|
153
|
+
private platformId;
|
|
154
|
+
private zone;
|
|
155
|
+
private readonly hermesTheme;
|
|
156
|
+
private channel;
|
|
157
|
+
private readonly channelName;
|
|
158
|
+
constructor(document: Document, platformId: Object, zone: NgZone, config: SpineConfig | null);
|
|
159
|
+
get current(): HermesThemeName;
|
|
160
|
+
/** Escolha do usuário: `light`, `dark` ou `system` (acompanha o sistema operacional). */
|
|
161
|
+
get mode(): HermesThemeMode;
|
|
162
|
+
setMode(mode: HermesThemeMode): void;
|
|
163
|
+
setTheme(theme: HermesThemeName): void;
|
|
164
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ThemeService, [null, null, null, { optional: true; }]>;
|
|
165
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ThemeService>;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Wrapper fino sobre `HermesThemeService.family`/`setFamily`/`families` — substitui o
|
|
170
|
+
* `applyThemePreset`/`PRESETS` do addon `theme-builder` antigo (que já expunha só paletas
|
|
171
|
+
* FIXAS pré-definidas, nunca cor arbitrária digitada pelo usuário: o spine antigo usava só
|
|
172
|
+
* essa lista fixa, então trocar para `family` do DS novo é a mesma mecânica de UX — grid de
|
|
173
|
+
* paletas prontas —, só muda o catálogo de opções e como cada uma deriva claro/escuro
|
|
174
|
+
* internamente). Persistência entre abas já vem de `HermesThemeService` (localStorage).
|
|
175
|
+
*/
|
|
176
|
+
declare class ThemePresetService {
|
|
177
|
+
private readonly hermesTheme;
|
|
178
|
+
get current(): HermesFamily;
|
|
179
|
+
get families(): readonly HermesFamily[];
|
|
180
|
+
setPreset(family: HermesFamily): void;
|
|
181
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ThemePresetService, never>;
|
|
182
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ThemePresetService>;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
interface DensitySetting {
|
|
186
|
+
name: HermesDensity;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Wrapper fino sobre `HermesThemeService.density`/`setDensity` (já persistido em
|
|
190
|
+
* `localStorage` pelo DS novo) — mantém o nome/API do spine antigo e adiciona a
|
|
191
|
+
* sincronização entre abas via `BroadcastChannel` que `HermesThemeService` não tem
|
|
192
|
+
* (é por-aba). Ver `ThemeService` (mesmo padrão, mesmo motivo).
|
|
193
|
+
*/
|
|
194
|
+
declare class DensityService {
|
|
195
|
+
private platformId;
|
|
196
|
+
private zone;
|
|
197
|
+
private readonly hermesTheme;
|
|
198
|
+
private channel;
|
|
199
|
+
private readonly channelName;
|
|
200
|
+
constructor(platformId: Object, zone: NgZone, config: SpineConfig | null);
|
|
201
|
+
get current(): DensitySetting;
|
|
202
|
+
setDensity(density: HermesDensity): void;
|
|
203
|
+
/** Só alterna entre comfortable e compact — mesmo comportamento do spine antigo
|
|
204
|
+
* (que chamava a densidade não-compacta de "regular"; o DS novo chama de "comfortable"). */
|
|
205
|
+
toggleDensity(): void;
|
|
206
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DensityService, [null, null, { optional: true; }]>;
|
|
207
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<DensityService>;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/** Registra o catálogo de ícones inteiro — o spine (header/sidebar/navegação/modal/onboarding)
|
|
211
|
+
* usa ícones de várias origens (shield, pencil, trash, floppy, chevrons...) que não vêm
|
|
212
|
+
* embutidos de graça (os componentes do hermes só registram os ícones que eles próprios usam); sem isto, todo `hm-icon` do spine cai
|
|
213
|
+
* silenciosamente no hambúrguer de fallback pra qualquer app que consuma este pacote. */
|
|
214
|
+
declare function provideUi(config?: SpineConfig): EnvironmentProviders;
|
|
215
|
+
|
|
216
|
+
/** Dados do `package.json` do app (nome, versão, dependências...), passados em
|
|
217
|
+
* `provideShell({ packageInfo })`. Mora no pacote raiz (e não em `@trismegisto/spine/shell`, onde
|
|
218
|
+
* nasceu) porque o painel de configurações do `@trismegisto/spine/layout` também lê — e o shell
|
|
219
|
+
* importa o layout, então o layout importar o shell fecharia um ciclo. O shell reexporta o
|
|
220
|
+
* MESMO token (mesma instância), então quem importava de lá continua funcionando. */
|
|
221
|
+
interface PackageInfo {
|
|
222
|
+
name?: string;
|
|
223
|
+
version?: string;
|
|
224
|
+
description?: string;
|
|
225
|
+
license?: string;
|
|
226
|
+
buildDate?: string;
|
|
227
|
+
environment?: string;
|
|
228
|
+
repository?: {
|
|
229
|
+
url?: string;
|
|
230
|
+
};
|
|
231
|
+
developer?: {
|
|
232
|
+
name?: string;
|
|
233
|
+
homepage?: string;
|
|
234
|
+
email?: string;
|
|
235
|
+
};
|
|
236
|
+
docs?: string;
|
|
237
|
+
issues?: string;
|
|
238
|
+
dependencies?: Record<string, string>;
|
|
239
|
+
[key: string]: any;
|
|
240
|
+
}
|
|
241
|
+
declare const APP_PACKAGE_INFO: InjectionToken<PackageInfo>;
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Preferências do usuário que não são de tema (tema/família/densidade continuam no
|
|
245
|
+
* `HermesThemeService`; modo do menu lateral no `HermesSidebarService`): fuso horário, idioma e o
|
|
246
|
+
* interruptor dos atalhos de tecla única (WCAG 2.1.4) do `HermesShortcutService`.
|
|
247
|
+
*
|
|
248
|
+
* Por enquanto vive no navegador (localStorage, sincronizado entre abas). A sincronização com o
|
|
249
|
+
* servidor (argos-admin `/me/preferences`) entra depois sem mudar esta API: quem lê `timeZone()`
|
|
250
|
+
* não precisa saber de onde o valor veio.
|
|
251
|
+
*/
|
|
252
|
+
declare class SpinePreferencesService {
|
|
253
|
+
private readonly browser;
|
|
254
|
+
private readonly zone;
|
|
255
|
+
private readonly ns;
|
|
256
|
+
private readonly timeZoneKey;
|
|
257
|
+
private readonly languageKey;
|
|
258
|
+
private readonly characterKeysKey;
|
|
259
|
+
private readonly shortcuts;
|
|
260
|
+
private readonly i18n;
|
|
261
|
+
/** Idioma com que o app subiu (`provideHermesI18n`) — vale quando a pessoa não escolheu nenhum. */
|
|
262
|
+
readonly appLanguage: string;
|
|
263
|
+
private readonly channel;
|
|
264
|
+
/** Fuso escolhido (IANA, ex.: "America/Sao_Paulo"). Vazio = o do navegador. */
|
|
265
|
+
readonly timeZone: i0.WritableSignal<string>;
|
|
266
|
+
/** Fuso do navegador, para mostrar ao lado da opção "automático". */
|
|
267
|
+
readonly browserTimeZone: string;
|
|
268
|
+
/** O fuso que vale de fato: o escolhido ou, sem escolha, o do navegador. */
|
|
269
|
+
readonly effectiveTimeZone: i0.Signal<string>;
|
|
270
|
+
/** Idioma escolhido (BCP 47: `pt-BR`, `en`, `es`). Vazio = o padrão do app. */
|
|
271
|
+
readonly language: i0.WritableSignal<string>;
|
|
272
|
+
/**
|
|
273
|
+
* Atalhos de tecla única (`?`, `G H`) ligados — WCAG 2.1.4. Guardado por app (`'on'`/`'off'`);
|
|
274
|
+
* sem escolha salva, vale o padrão do `HermesShortcutService` (`provideHermesShortcuts`).
|
|
275
|
+
*/
|
|
276
|
+
readonly characterKeys: i0.WritableSignal<boolean>;
|
|
277
|
+
/** Idiomas oferecidos na configuração, cada um com o nome no próprio idioma (padrão de mercado). */
|
|
278
|
+
readonly languages: readonly {
|
|
279
|
+
readonly value: string;
|
|
280
|
+
readonly label: string;
|
|
281
|
+
}[];
|
|
282
|
+
constructor();
|
|
283
|
+
/** Liga/desliga os atalhos de tecla única na hora, guarda e avisa as outras abas. */
|
|
284
|
+
setCharacterKeys(enabled: boolean): void;
|
|
285
|
+
private saveCharacterKeys;
|
|
286
|
+
private applyCharacterKeys;
|
|
287
|
+
private readCharacterKeys;
|
|
288
|
+
/** Troca o idioma da lib e do spine na hora, guarda e avisa as outras abas. Vazio = padrão do app. */
|
|
289
|
+
setLanguage(value: string): void;
|
|
290
|
+
private applyLanguage;
|
|
291
|
+
setTimeZone(value: string): void;
|
|
292
|
+
/** Todos os fusos IANA que o navegador conhece (vazio em navegador antigo). */
|
|
293
|
+
supportedTimeZones(): string[];
|
|
294
|
+
private read;
|
|
295
|
+
private write;
|
|
296
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SpinePreferencesService, never>;
|
|
297
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<SpinePreferencesService>;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Base da API do argos-admin-server (ex.: `https://exemplo.com.br/argos/admin/api`) —
|
|
302
|
+
* recursos do próprio usuário (`/me/*`, hoje os tokens de aplicação) que o painel de
|
|
303
|
+
* configurações usa. Quem chama `provideAutoService({ adminApi })` já fornece este token (é a
|
|
304
|
+
* mesma URL); um app sem auto-service fornece direto, ou fica sem as partes do painel que
|
|
305
|
+
* dependem do servidor (elas se escondem em vez de quebrar).
|
|
306
|
+
*/
|
|
307
|
+
declare const SPINE_ADMIN_API: InjectionToken<string>;
|
|
308
|
+
|
|
309
|
+
/** A page remembered by the shell, either as a favorite or as a recent visit. */
|
|
310
|
+
interface QuickAccessItem {
|
|
311
|
+
readonly id: string;
|
|
312
|
+
readonly icon: string;
|
|
313
|
+
readonly displayName: string;
|
|
314
|
+
readonly redirect: string;
|
|
315
|
+
/** Ancestor labels, top-down. `[]` = top-level page; absent = stored by an older version. */
|
|
316
|
+
readonly trail?: readonly string[];
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Favorites and recently visited pages, shared by every consumer in the app (page bar, home screen)
|
|
320
|
+
* and persisted per client in `localStorage`.
|
|
321
|
+
*/
|
|
322
|
+
declare class SpineQuickAccessService {
|
|
323
|
+
private readonly browser;
|
|
324
|
+
private readonly favoritesKey;
|
|
325
|
+
private readonly recentsKey;
|
|
326
|
+
private readonly favoriteList;
|
|
327
|
+
private readonly recentList;
|
|
328
|
+
readonly favorites: i0.Signal<readonly QuickAccessItem[]>;
|
|
329
|
+
readonly recents: i0.Signal<readonly QuickAccessItem[]>;
|
|
330
|
+
private readonly favoriteSet;
|
|
331
|
+
constructor(config: SpineConfig | null);
|
|
332
|
+
isFavorite(id: string | null | undefined): boolean;
|
|
333
|
+
toggleFavorite(item: QuickAccessItem): void;
|
|
334
|
+
recordVisit(item: QuickAccessItem): void;
|
|
335
|
+
forgetRecent(id: string): void;
|
|
336
|
+
private commit;
|
|
337
|
+
private load;
|
|
338
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SpineQuickAccessService, [{ optional: true; }]>;
|
|
339
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<SpineQuickAccessService>;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* O mínimo do `environment` de um app que dá pra derivar em tempo de execução. Estrutural de
|
|
344
|
+
* propósito (não importa o `Environment` de nenhum app): serve pra todos.
|
|
345
|
+
*/
|
|
346
|
+
interface RuntimeEnvironmentShape {
|
|
347
|
+
authorizationServer: {
|
|
348
|
+
authority?: string;
|
|
349
|
+
redirectUrl?: string;
|
|
350
|
+
postLogoutRedirectUri?: string;
|
|
351
|
+
};
|
|
352
|
+
graphql?: Record<string, {
|
|
353
|
+
http: string;
|
|
354
|
+
ws?: string;
|
|
355
|
+
}>;
|
|
356
|
+
}
|
|
357
|
+
interface RuntimeEnvironmentInfo {
|
|
358
|
+
/** `window.location.origin`. */
|
|
359
|
+
readonly origin: string;
|
|
360
|
+
/** Prefixo do app (base href sem a barra final), ex.: `/prometeu`. Vazio na raiz. */
|
|
361
|
+
readonly basePath: string;
|
|
362
|
+
/** Sem porta na URL: o app está atrás do proxy (Caddy), não na porta direta do container. */
|
|
363
|
+
readonly behindProxy: boolean;
|
|
364
|
+
/** URL ainda sem valor real (vazia ou `CHANGE_ME`) — a única que pode ser derivada. */
|
|
365
|
+
readonly unset: (url: string | undefined) => boolean;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Ajusta o `environment` ao lugar onde o app está rodando — chamar no `main.ts`, ANTES do
|
|
369
|
+
* `bootstrapApplication`. Antes cada app tinha a sua versão (só o Hefesto derivava as URLs); agora a
|
|
370
|
+
* regra é uma só:
|
|
371
|
+
*
|
|
372
|
+
* - **Sempre:** `redirectUrl`/`postLogoutRedirectUri` = origem + prefixo atual. O servidor exige
|
|
373
|
+
* `redirect_uri` absoluto e o app pode viver sob um prefixo (`/prometeu`); um valor fixo no
|
|
374
|
+
* environment não bate com a rota real e o callback nunca casa.
|
|
375
|
+
* - **Atrás do proxy (sem porta na URL):**
|
|
376
|
+
* - `authority` = `<origem>/argos` — mesmo domínio da página, senão o cookie de sessão sai com o
|
|
377
|
+
* escopo errado e a sessão não persiste (bug já visto no argos);
|
|
378
|
+
* - cada endpoint GraphQL **ainda sem valor real** vira `<origem><prefixo>/graphql` (HTTP e WS —
|
|
379
|
+
* o WebSocket atende no mesmo caminho do HTTP em todo GraphQL do astra). URL explícita no
|
|
380
|
+
* environment sempre ganha: em prod o front pode estar num domínio e o backend em outro.
|
|
381
|
+
*
|
|
382
|
+
* Devolve `origin`/`basePath`/`behindProxy`/`unset` pro que for específico do app (ex.: a URL da
|
|
383
|
+
* API REST do hefesto-server).
|
|
384
|
+
*/
|
|
385
|
+
declare function applyRuntimeEnvironment(environment: RuntimeEnvironmentShape): RuntimeEnvironmentInfo;
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* Ilustração gerada pelo spine, nas cores do tema em vigor: o ícone da novidade no centro e,
|
|
389
|
+
* opcionalmente, selos (ícone + rótulo) orbitando em volta. Ícones são nomes do @trismegisto/icons.
|
|
390
|
+
*/
|
|
391
|
+
interface SpineNewsIllustration {
|
|
392
|
+
readonly icon: string;
|
|
393
|
+
readonly satellites?: readonly {
|
|
394
|
+
readonly icon: string;
|
|
395
|
+
readonly label: string;
|
|
396
|
+
}[];
|
|
397
|
+
}
|
|
398
|
+
/** Um slide do painel de novidades. */
|
|
399
|
+
interface SpineNewsSlide {
|
|
400
|
+
readonly title: string;
|
|
401
|
+
readonly text: string;
|
|
402
|
+
/** Ilustração desenhada pelo spine (recomendado — acompanha tema claro/escuro e família). */
|
|
403
|
+
readonly illustration?: SpineNewsIllustration;
|
|
404
|
+
/** Imagem própria (caminho em `assets/` do app); vence a `illustration`. Sem nenhuma das duas, o
|
|
405
|
+
* slide é só texto. */
|
|
406
|
+
readonly image?: string;
|
|
407
|
+
/** Descrição da imagem pra quem não a vê. Vazia marca a imagem como decorativa. */
|
|
408
|
+
readonly alt?: string;
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Uma novidade do app: aparece sozinha uma vez por navegador, depois do tour de boas-vindas, e fica
|
|
412
|
+
* marcada como vista ao ser exibida.
|
|
413
|
+
*/
|
|
414
|
+
interface SpineNewsItem {
|
|
415
|
+
/** Chave estável. Trocar o id faz a novidade aparecer de novo para todo mundo. */
|
|
416
|
+
readonly id: string;
|
|
417
|
+
readonly slides: readonly SpineNewsSlide[];
|
|
418
|
+
/** Data (AAAA-MM-DD) a partir da qual a novidade deixa de ser oferecida. Opcional. */
|
|
419
|
+
readonly until?: string;
|
|
420
|
+
}
|
|
421
|
+
/** Multi: cada chamada de `provideSpineNews` contribui com uma lista. */
|
|
422
|
+
declare const SPINE_NEWS: InjectionToken<readonly (readonly SpineNewsItem[])[]>;
|
|
423
|
+
/**
|
|
424
|
+
* Registra as novidades do app (no `app.config.ts`, junto do `provideUi`). Ficam no código, no
|
|
425
|
+
* mesmo commit da funcionalidade que anunciam. A ordem da lista é a ordem dos slides.
|
|
426
|
+
*
|
|
427
|
+
* ```ts
|
|
428
|
+
* provideSpineNews([
|
|
429
|
+
* { id: 'build-com-versao-2026-09', slides: [{ title: 'Build direto da linha', text: '…' }] },
|
|
430
|
+
* ]),
|
|
431
|
+
* ```
|
|
432
|
+
*/
|
|
433
|
+
declare function provideSpineNews(items: readonly SpineNewsItem[]): EnvironmentProviders;
|
|
434
|
+
|
|
435
|
+
/**
|
|
436
|
+
* Textos do próprio spine (cabeçalho, navegação, configurações, tour, telas do auto-serviço…), no
|
|
437
|
+
* mesmo formato do `HermesMessages` da lib: seção → chave, parâmetros nomeados (`{name}`) e plural
|
|
438
|
+
* por `PluralMessage`. Alguns textos levam marcação simples (`<b>`, `<strong>`, `<code>`) e são
|
|
439
|
+
* exibidos com `[innerHTML]` — estão indicados no comentário.
|
|
440
|
+
*
|
|
441
|
+
* O idioma ativo é o do `HermesI18nService` da lib: `setLocale` troca a lib e o spine juntos.
|
|
442
|
+
*/
|
|
443
|
+
interface SpineMessages {
|
|
444
|
+
meta: {
|
|
445
|
+
locale: string;
|
|
446
|
+
};
|
|
447
|
+
header: {
|
|
448
|
+
home: string;
|
|
449
|
+
apps: string;
|
|
450
|
+
themeDark: string;
|
|
451
|
+
themeLight: string;
|
|
452
|
+
densityComfortable: string;
|
|
453
|
+
densityCompact: string;
|
|
454
|
+
fullscreen: string;
|
|
455
|
+
exitFullscreen: string;
|
|
456
|
+
user: string;
|
|
457
|
+
accessLevels: string;
|
|
458
|
+
settings: string;
|
|
459
|
+
appearance: string;
|
|
460
|
+
shortcuts: string;
|
|
461
|
+
tour: string;
|
|
462
|
+
news: string;
|
|
463
|
+
logout: string;
|
|
464
|
+
search: string;
|
|
465
|
+
searchPlaceholder: string;
|
|
466
|
+
recentSearches: string;
|
|
467
|
+
clearRecent: string;
|
|
468
|
+
/** `{term}` = o que foi digitado. */
|
|
469
|
+
noResults: string;
|
|
470
|
+
};
|
|
471
|
+
navigation: {
|
|
472
|
+
back: string;
|
|
473
|
+
home: string;
|
|
474
|
+
favorite: string;
|
|
475
|
+
unfavorite: string;
|
|
476
|
+
copyLink: string;
|
|
477
|
+
linkCopied: string;
|
|
478
|
+
};
|
|
479
|
+
sidebar: {
|
|
480
|
+
modules: string;
|
|
481
|
+
/** `{module}` = nome do módulo aberto. */
|
|
482
|
+
moduleNavigation: string;
|
|
483
|
+
apps: string;
|
|
484
|
+
};
|
|
485
|
+
pageBar: {
|
|
486
|
+
favorite: string;
|
|
487
|
+
unfavorite: string;
|
|
488
|
+
copyLink: string;
|
|
489
|
+
linkCopied: string;
|
|
490
|
+
docs: string;
|
|
491
|
+
trail: string;
|
|
492
|
+
};
|
|
493
|
+
pagePanel: {
|
|
494
|
+
notFoundTitle: string;
|
|
495
|
+
notFoundText: string;
|
|
496
|
+
};
|
|
497
|
+
docs: {
|
|
498
|
+
heading: string;
|
|
499
|
+
index: string;
|
|
500
|
+
search: string;
|
|
501
|
+
noMatch: string;
|
|
502
|
+
empty: string;
|
|
503
|
+
view: string;
|
|
504
|
+
usage: string;
|
|
505
|
+
technical: string;
|
|
506
|
+
loading: string;
|
|
507
|
+
loadError: string;
|
|
508
|
+
/** Convite no lado da leitura enquanto nenhuma página do índice foi aberta. */
|
|
509
|
+
invite: string;
|
|
510
|
+
};
|
|
511
|
+
news: {
|
|
512
|
+
heading: string;
|
|
513
|
+
carousel: string;
|
|
514
|
+
dismiss: string;
|
|
515
|
+
};
|
|
516
|
+
/** Tour guiado. As descrições (`*Text`) levam `<b>` e são exibidas com `[innerHTML]`. */
|
|
517
|
+
tour: {
|
|
518
|
+
/** `{current}` de `{total}`. */
|
|
519
|
+
progress: string;
|
|
520
|
+
skip: string;
|
|
521
|
+
back: string;
|
|
522
|
+
next: string;
|
|
523
|
+
finish: string;
|
|
524
|
+
welcomeTitle: string;
|
|
525
|
+
welcomeText: string;
|
|
526
|
+
appsTitle: string;
|
|
527
|
+
appsText: string;
|
|
528
|
+
searchTitle: string;
|
|
529
|
+
searchText: string;
|
|
530
|
+
navModulesTitle: string;
|
|
531
|
+
navModulesText: string;
|
|
532
|
+
navModeTitle: string;
|
|
533
|
+
navModeText: string;
|
|
534
|
+
tabsTitle: string;
|
|
535
|
+
tabsText: string;
|
|
536
|
+
splitTitle: string;
|
|
537
|
+
splitText: string;
|
|
538
|
+
whereTitle: string;
|
|
539
|
+
whereText: string;
|
|
540
|
+
themeTitle: string;
|
|
541
|
+
themeText: string;
|
|
542
|
+
densityTitle: string;
|
|
543
|
+
densityText: string;
|
|
544
|
+
fullscreenTitle: string;
|
|
545
|
+
fullscreenText: string;
|
|
546
|
+
profileTitle: string;
|
|
547
|
+
profileText: string;
|
|
548
|
+
doneTitle: string;
|
|
549
|
+
doneText: string;
|
|
550
|
+
};
|
|
551
|
+
shortcuts: {
|
|
552
|
+
heading: string;
|
|
553
|
+
/** `{key}` vira a tecla desenhada como chip. */
|
|
554
|
+
hint: string;
|
|
555
|
+
replayTour: string;
|
|
556
|
+
dismiss: string;
|
|
557
|
+
openSearch: string;
|
|
558
|
+
goHome: string;
|
|
559
|
+
goFavorite: string;
|
|
560
|
+
history: string;
|
|
561
|
+
openSettings: string;
|
|
562
|
+
toggleTheme: string;
|
|
563
|
+
fullscreen: string;
|
|
564
|
+
logout: string;
|
|
565
|
+
showHelp: string;
|
|
566
|
+
closeOverlay: string;
|
|
567
|
+
};
|
|
568
|
+
settings: {
|
|
569
|
+
heading: string;
|
|
570
|
+
appearance: string;
|
|
571
|
+
appearanceKeywords: string;
|
|
572
|
+
theme: string;
|
|
573
|
+
themeDescription: string;
|
|
574
|
+
themeKeywords: string;
|
|
575
|
+
themeLight: string;
|
|
576
|
+
themeDark: string;
|
|
577
|
+
themeSystem: string;
|
|
578
|
+
accent: string;
|
|
579
|
+
accentDescription: string;
|
|
580
|
+
accentKeywords: string;
|
|
581
|
+
density: string;
|
|
582
|
+
densityDescription: string;
|
|
583
|
+
densityKeywords: string;
|
|
584
|
+
comfortable: string;
|
|
585
|
+
compact: string;
|
|
586
|
+
font: string;
|
|
587
|
+
fontDescription: string;
|
|
588
|
+
fontKeywords: string;
|
|
589
|
+
sidebar: string;
|
|
590
|
+
sidebarDescription: string;
|
|
591
|
+
sidebarKeywords: string;
|
|
592
|
+
sidebarAuto: string;
|
|
593
|
+
sidebarFixed: string;
|
|
594
|
+
sidebarCompact: string;
|
|
595
|
+
region: string;
|
|
596
|
+
regionKeywords: string;
|
|
597
|
+
language: string;
|
|
598
|
+
languageDescription: string;
|
|
599
|
+
languageKeywords: string;
|
|
600
|
+
/** `{language}` = idioma padrão do app. */
|
|
601
|
+
languageAuto: string;
|
|
602
|
+
timeZone: string;
|
|
603
|
+
timeZoneKeywords: string;
|
|
604
|
+
/** `{now}` = data e hora agora no fuso escolhido. */
|
|
605
|
+
timeZoneHint: string;
|
|
606
|
+
/** `{zone}` = fuso detectado no navegador. */
|
|
607
|
+
timeZoneAuto: string;
|
|
608
|
+
shortcuts: string;
|
|
609
|
+
shortcutsDescription: string;
|
|
610
|
+
shortcutsKeywords: string;
|
|
611
|
+
tour: string;
|
|
612
|
+
tourDescription: string;
|
|
613
|
+
tourKeywords: string;
|
|
614
|
+
replayTour: string;
|
|
615
|
+
account: string;
|
|
616
|
+
accountKeywords: string;
|
|
617
|
+
user: string;
|
|
618
|
+
accessLevel: string;
|
|
619
|
+
accessLevelKeywords: string;
|
|
620
|
+
session: string;
|
|
621
|
+
sessionDescription: string;
|
|
622
|
+
sessionKeywords: string;
|
|
623
|
+
sessionUnknown: string;
|
|
624
|
+
/** `{time}` = hora. */
|
|
625
|
+
sessionExpired: string;
|
|
626
|
+
/** `{minutes}` e `{time}`. */
|
|
627
|
+
sessionExpiresIn: string;
|
|
628
|
+
sessionExpiresAt: string;
|
|
629
|
+
accessToken: string;
|
|
630
|
+
accessTokenDescription: string;
|
|
631
|
+
accessTokenKeywords: string;
|
|
632
|
+
copy: string;
|
|
633
|
+
appTokens: string;
|
|
634
|
+
appTokensDescription: string;
|
|
635
|
+
appTokensKeywords: string;
|
|
636
|
+
logout: string;
|
|
637
|
+
logoutDescription: string;
|
|
638
|
+
logoutKeywords: string;
|
|
639
|
+
about: string;
|
|
640
|
+
aboutKeywords: string;
|
|
641
|
+
application: string;
|
|
642
|
+
version: string;
|
|
643
|
+
versionKeywords: string;
|
|
644
|
+
buildDate: string;
|
|
645
|
+
environment: string;
|
|
646
|
+
environmentKeywords: string;
|
|
647
|
+
links: string;
|
|
648
|
+
linksKeywords: string;
|
|
649
|
+
docs: string;
|
|
650
|
+
reportIssue: string;
|
|
651
|
+
repository: string;
|
|
652
|
+
dependencies: string;
|
|
653
|
+
dependenciesDescription: string;
|
|
654
|
+
dependenciesKeywords: string;
|
|
655
|
+
supportInfo: string;
|
|
656
|
+
supportInfoDescription: string;
|
|
657
|
+
supportInfoKeywords: string;
|
|
658
|
+
noSessionToken: string;
|
|
659
|
+
tokenCopied: string;
|
|
660
|
+
supportCopied: string;
|
|
661
|
+
copyBlocked: string;
|
|
662
|
+
};
|
|
663
|
+
/** Rótulos do texto que "Informações para suporte" copia. */
|
|
664
|
+
support: {
|
|
665
|
+
application: string;
|
|
666
|
+
version: string;
|
|
667
|
+
build: string;
|
|
668
|
+
environment: string;
|
|
669
|
+
page: string;
|
|
670
|
+
browser: string;
|
|
671
|
+
screen: string;
|
|
672
|
+
theme: string;
|
|
673
|
+
/** `{theme}`, `{mode}`, `{family}`, `{density}`, `{font}`. */
|
|
674
|
+
themeValue: string;
|
|
675
|
+
timeZone: string;
|
|
676
|
+
accessLevel: string;
|
|
677
|
+
date: string;
|
|
678
|
+
};
|
|
679
|
+
appTokens: {
|
|
680
|
+
unavailable: string;
|
|
681
|
+
/** `{name}`. */
|
|
682
|
+
created: string;
|
|
683
|
+
/** `[innerHTML]`; `{date}`. */
|
|
684
|
+
sendHeader: string;
|
|
685
|
+
copyToken: string;
|
|
686
|
+
saved: string;
|
|
687
|
+
loading: string;
|
|
688
|
+
/** `{date}`. */
|
|
689
|
+
expiredOn: string;
|
|
690
|
+
expiresOn: string;
|
|
691
|
+
lastUsed: string;
|
|
692
|
+
never: string;
|
|
693
|
+
revoke: string;
|
|
694
|
+
confirmRevoke: string;
|
|
695
|
+
empty: string;
|
|
696
|
+
noBadges: string;
|
|
697
|
+
/** `[innerHTML]`; `{name}` = aplicação. */
|
|
698
|
+
appOnly: string;
|
|
699
|
+
accessLevel: string;
|
|
700
|
+
name: string;
|
|
701
|
+
namePlaceholder: string;
|
|
702
|
+
nameRequired: string;
|
|
703
|
+
nameMax: string;
|
|
704
|
+
validity: string;
|
|
705
|
+
days30: string;
|
|
706
|
+
days90: string;
|
|
707
|
+
months6: string;
|
|
708
|
+
year1: string;
|
|
709
|
+
create: string;
|
|
710
|
+
cancel: string;
|
|
711
|
+
newToken: string;
|
|
712
|
+
/** `{valid}` de `{max}`. */
|
|
713
|
+
validCount: string;
|
|
714
|
+
limit: string;
|
|
715
|
+
loadError: string;
|
|
716
|
+
badgesError: string;
|
|
717
|
+
createError: string;
|
|
718
|
+
copied: string;
|
|
719
|
+
copyFailed: string;
|
|
720
|
+
/** `{name}`. */
|
|
721
|
+
revoked: string;
|
|
722
|
+
revokeError: string;
|
|
723
|
+
};
|
|
724
|
+
notification: {
|
|
725
|
+
genericError: string;
|
|
726
|
+
};
|
|
727
|
+
graphql: {
|
|
728
|
+
/** Envelope ausente: o resolver estourou e o campo voltou `null` (`unwrap`). */
|
|
729
|
+
noResponse: string;
|
|
730
|
+
serviceFailure: string;
|
|
731
|
+
done: string;
|
|
732
|
+
failed: string;
|
|
733
|
+
};
|
|
734
|
+
/** Telas de acesso do shell (`/blocked`, `/no-permission`). */
|
|
735
|
+
access: {
|
|
736
|
+
blockedText: string;
|
|
737
|
+
blockedAction: string;
|
|
738
|
+
noRightsText: string;
|
|
739
|
+
};
|
|
740
|
+
/**
|
|
741
|
+
* Retorno do login (`/callback`) e aviso de conexão do shell (`spine-connection-banner`), sobre o
|
|
742
|
+
* `connectionState$`/`reauthorizationRequired$` do `@orfeu/angular`. A sessão nunca cai por isso.
|
|
743
|
+
*/
|
|
744
|
+
session: {
|
|
745
|
+
/** Argos inalcançável (sem acesso à rede, servidor fora do ar): a sessão continua, a lib tenta de novo sozinha. */
|
|
746
|
+
offline: string;
|
|
747
|
+
reconnecting: string;
|
|
748
|
+
reauthorizing: string;
|
|
749
|
+
/** O Argos recusou a renovação e a reautorização automática não aconteceu: a pessoa decide. */
|
|
750
|
+
reauthorizationRequired: string;
|
|
751
|
+
signInAgain: string;
|
|
752
|
+
callbackFailedHeading: string;
|
|
753
|
+
callbackFailedText: string;
|
|
754
|
+
};
|
|
755
|
+
routing: {
|
|
756
|
+
notPublished: string;
|
|
757
|
+
/** `{code}` = id da rota. */
|
|
758
|
+
notPublishedCode: string;
|
|
759
|
+
};
|
|
760
|
+
home: {
|
|
761
|
+
noAccessTitle: string;
|
|
762
|
+
noAccessText: string;
|
|
763
|
+
yourScreens: string;
|
|
764
|
+
modules: string;
|
|
765
|
+
privileged: string;
|
|
766
|
+
recent: string;
|
|
767
|
+
recentCaption: string;
|
|
768
|
+
screenCount: PluralMessage;
|
|
769
|
+
/** `{name}`. */
|
|
770
|
+
favorite: string;
|
|
771
|
+
unfavorite: string;
|
|
772
|
+
favorites: string;
|
|
773
|
+
navigate: string;
|
|
774
|
+
settings: string;
|
|
775
|
+
tools: string;
|
|
776
|
+
systemDocs: string;
|
|
777
|
+
colScreen: string;
|
|
778
|
+
colWhere: string;
|
|
779
|
+
colFavorite: string;
|
|
780
|
+
noModule: string;
|
|
781
|
+
};
|
|
782
|
+
/** Telas do auto-serviço. Textos com `[innerHTML]` indicados. */
|
|
783
|
+
autoService: {
|
|
784
|
+
loading: string;
|
|
785
|
+
cancel: string;
|
|
786
|
+
save: string;
|
|
787
|
+
create: string;
|
|
788
|
+
edit: string;
|
|
789
|
+
remove: string;
|
|
790
|
+
search: string;
|
|
791
|
+
active: string;
|
|
792
|
+
inactive: string;
|
|
793
|
+
confirmChanges: string;
|
|
794
|
+
appsTitle: string;
|
|
795
|
+
appsIntro: string;
|
|
796
|
+
clientTitle: string;
|
|
797
|
+
clientIntro: string;
|
|
798
|
+
/** Nome acessível da faixa de abas da tela Cliente (Rotas/Roteadores/Acesso). */
|
|
799
|
+
clientSections: string;
|
|
800
|
+
tabRoutes: string;
|
|
801
|
+
tabRouters: string;
|
|
802
|
+
tabAccess: string;
|
|
803
|
+
/** `[innerHTML]`. */
|
|
804
|
+
noClients: string;
|
|
805
|
+
pickClient: string;
|
|
806
|
+
groupsTitle: string;
|
|
807
|
+
groupsIntro: string;
|
|
808
|
+
/** @deprecated não é mais exibido (o auto-serviço não repete título/explicação que a barra da página e a aba já dão). */
|
|
809
|
+
groupsFixed: string;
|
|
810
|
+
pickGroup: string;
|
|
811
|
+
noDescription: string;
|
|
812
|
+
/** @deprecated não é mais exibido (o auto-serviço não repete título/explicação que a barra da página e a aba já dão). */
|
|
813
|
+
pickGroupHint: string;
|
|
814
|
+
manageMembers: string;
|
|
815
|
+
membersCaption: string;
|
|
816
|
+
noMembers: string;
|
|
817
|
+
colUser: string;
|
|
818
|
+
colMemberSince: string;
|
|
819
|
+
/** `{group}`. */
|
|
820
|
+
membersHeading: string;
|
|
821
|
+
addUser: string;
|
|
822
|
+
userSearch: string;
|
|
823
|
+
role: string;
|
|
824
|
+
pickRole: string;
|
|
825
|
+
add: string;
|
|
826
|
+
suggestions: string;
|
|
827
|
+
moreSuggestions: string;
|
|
828
|
+
/** `{group}`. */
|
|
829
|
+
membersOf: string;
|
|
830
|
+
noMembersShort: string;
|
|
831
|
+
newMember: string;
|
|
832
|
+
/** `{user}`. */
|
|
833
|
+
addedBy: string;
|
|
834
|
+
removal: string;
|
|
835
|
+
removalEmpty: string;
|
|
836
|
+
undoRemoval: string;
|
|
837
|
+
saveChanges: string;
|
|
838
|
+
colRole: string;
|
|
839
|
+
colAddedAt: string;
|
|
840
|
+
newAccess: string;
|
|
841
|
+
newAccessHeading: string;
|
|
842
|
+
accessCaption: string;
|
|
843
|
+
noAccess: string;
|
|
844
|
+
colGroup: string;
|
|
845
|
+
colBadge: string;
|
|
846
|
+
manageRoutes: string;
|
|
847
|
+
group: string;
|
|
848
|
+
/** `{group}`. */
|
|
849
|
+
routesOf: string;
|
|
850
|
+
/** `[innerHTML]`; `{badge}`. */
|
|
851
|
+
guardsHint: string;
|
|
852
|
+
noPrivateRoutes: string;
|
|
853
|
+
register: string;
|
|
854
|
+
appsSearchIntro: string;
|
|
855
|
+
secretCreated: string;
|
|
856
|
+
pickApp: string;
|
|
857
|
+
disable: string;
|
|
858
|
+
enable: string;
|
|
859
|
+
delete: string;
|
|
860
|
+
/** Nome acessível da faixa de abas da aplicação escolhida (Operações/Acessos). */
|
|
861
|
+
appSections: string;
|
|
862
|
+
tabOperations: string;
|
|
863
|
+
tabAccesses: string;
|
|
864
|
+
editApp: string;
|
|
865
|
+
newApp: string;
|
|
866
|
+
name: string;
|
|
867
|
+
grants: string;
|
|
868
|
+
appAccessCaption: string;
|
|
869
|
+
noAppAccess: string;
|
|
870
|
+
colType: string;
|
|
871
|
+
manageOperations: string;
|
|
872
|
+
/** `{group}`. */
|
|
873
|
+
operationsOf: string;
|
|
874
|
+
noOperations: string;
|
|
875
|
+
operationsCaption: string;
|
|
876
|
+
colIdentifier: string;
|
|
877
|
+
colMethod: string;
|
|
878
|
+
colLevel: string;
|
|
879
|
+
colDescription: string;
|
|
880
|
+
colAllowedGroups: string;
|
|
881
|
+
groupCount: PluralMessage;
|
|
882
|
+
/** @deprecated não é mais exibido (o auto-serviço não repete título/explicação que a barra da página e a aba já dão). */
|
|
883
|
+
routersTitle: string;
|
|
884
|
+
newRouter: string;
|
|
885
|
+
routersCaption: string;
|
|
886
|
+
noRouters: string;
|
|
887
|
+
private: string;
|
|
888
|
+
public: string;
|
|
889
|
+
editRouter: string;
|
|
890
|
+
page: string;
|
|
891
|
+
hierarchy: string;
|
|
892
|
+
levelHeader: string;
|
|
893
|
+
levelNavigation: string;
|
|
894
|
+
levelMenu: string;
|
|
895
|
+
levelItem: string;
|
|
896
|
+
levelSubmenu: string;
|
|
897
|
+
privateHint: string;
|
|
898
|
+
routerDescription: string;
|
|
899
|
+
routerDescriptionHint: string;
|
|
900
|
+
colPage: string;
|
|
901
|
+
colBuiltPath: string;
|
|
902
|
+
colVisibility: string;
|
|
903
|
+
/** @deprecated não é mais exibido (o auto-serviço não repete título/explicação que a barra da página e a aba já dão). */
|
|
904
|
+
routesTitle: string;
|
|
905
|
+
newRoute: string;
|
|
906
|
+
routesCaption: string;
|
|
907
|
+
noRoutes: string;
|
|
908
|
+
editRoute: string;
|
|
909
|
+
internalName: string;
|
|
910
|
+
displayName: string;
|
|
911
|
+
icon: string;
|
|
912
|
+
iconPlaceholder: string;
|
|
913
|
+
path: string;
|
|
914
|
+
info: string;
|
|
915
|
+
excludable: string;
|
|
916
|
+
/** Dica do "Excluível" ao editar rota protegida: o auto-serviço não libera, só o Argos central. */
|
|
917
|
+
excludableLocked: string;
|
|
918
|
+
/** Selo da rota/roteador que veio de template (não editável pelo auto-serviço) e a explicação dele. */
|
|
919
|
+
templateTag: string;
|
|
920
|
+
templateLocked: string;
|
|
921
|
+
/** Exemplo e regra do caminho: um trecho só do endereço (o "/" entre níveis é o roteador que põe). */
|
|
922
|
+
pathPlaceholder: string;
|
|
923
|
+
pathHint: string;
|
|
924
|
+
pathInvalid: string;
|
|
925
|
+
colExcludable: string;
|
|
926
|
+
excludableYes: string;
|
|
927
|
+
excludableNo: string;
|
|
928
|
+
colName: string;
|
|
929
|
+
colDisplay: string;
|
|
930
|
+
colIcon: string;
|
|
931
|
+
colPath: string;
|
|
932
|
+
};
|
|
933
|
+
/**
|
|
934
|
+
* Tela "Auditoria" (`@trismegisto/spine/audit`, `SpineAuditComponent`): a mesma nos dois escopos — o
|
|
935
|
+
* auto-serviço (apps do projeto do client) e o painel central do argos admin (`scope: 'admin'`). O nome
|
|
936
|
+
* da chave ficou do tempo em que só o auto-serviço a tinha.
|
|
937
|
+
*/
|
|
938
|
+
autoServiceAudit: {
|
|
939
|
+
title: string;
|
|
940
|
+
intro: string;
|
|
941
|
+
/** Aba da tela de Aplicações que abre a auditoria ali mesmo. */
|
|
942
|
+
tabApps: string;
|
|
943
|
+
period: string;
|
|
944
|
+
periodLastHour: string;
|
|
945
|
+
period24h: string;
|
|
946
|
+
period7d: string;
|
|
947
|
+
period30d: string;
|
|
948
|
+
/** Aviso quando o período vem das datas da faixa de filtros (a escolha rápida fica sem efeito). */
|
|
949
|
+
periodFromFilters: string;
|
|
950
|
+
filters: string;
|
|
951
|
+
filterDates: string;
|
|
952
|
+
filterApp: string;
|
|
953
|
+
filterUser: string;
|
|
954
|
+
filterOperation: string;
|
|
955
|
+
filterMethod: string;
|
|
956
|
+
filterOutcome: string;
|
|
957
|
+
filterEntry: string;
|
|
958
|
+
userPlaceholder: string;
|
|
959
|
+
operationPlaceholder: string;
|
|
960
|
+
methodRead: string;
|
|
961
|
+
methodWrite: string;
|
|
962
|
+
methodDelete: string;
|
|
963
|
+
methodStream: string;
|
|
964
|
+
outcomeSuccess: string;
|
|
965
|
+
outcomeFailure: string;
|
|
966
|
+
outcomeDenied: string;
|
|
967
|
+
kpiTotal: string;
|
|
968
|
+
kpiTotalDescription: string;
|
|
969
|
+
kpiFailures: string;
|
|
970
|
+
kpiDenied: string;
|
|
971
|
+
/** `{percent}`. */
|
|
972
|
+
kpiShare: string;
|
|
973
|
+
kpis: string;
|
|
974
|
+
timeline: string;
|
|
975
|
+
/** `{from}`, `{to}`. */
|
|
976
|
+
timelineSummary: string;
|
|
977
|
+
/** `{time}`, `{total}`, `{failures}`, `{denied}`. */
|
|
978
|
+
bucketSummary: string;
|
|
979
|
+
timelineEmpty: string;
|
|
980
|
+
topOperations: string;
|
|
981
|
+
topUsers: string;
|
|
982
|
+
topApps: string;
|
|
983
|
+
noTop: string;
|
|
984
|
+
eventCount: PluralMessage;
|
|
985
|
+
failureCount: PluralMessage;
|
|
986
|
+
deniedCount: PluralMessage;
|
|
987
|
+
/** `{name}`. */
|
|
988
|
+
filterBy: string;
|
|
989
|
+
eventsCaption: string;
|
|
990
|
+
colWhen: string;
|
|
991
|
+
colApp: string;
|
|
992
|
+
colUser: string;
|
|
993
|
+
colOperation: string;
|
|
994
|
+
colMethod: string;
|
|
995
|
+
colOutcome: string;
|
|
996
|
+
colStatus: string;
|
|
997
|
+
colDuration: string;
|
|
998
|
+
/** `{ms}`. */
|
|
999
|
+
durationMs: string;
|
|
1000
|
+
/** Rodapé da tabela: o que vem depois da contagem ("1 - 50 de 120 {pageItems}"). */
|
|
1001
|
+
pageItems: string;
|
|
1002
|
+
/** Rodapé da tabela: rótulo do seletor de eventos por página. */
|
|
1003
|
+
pageSize: string;
|
|
1004
|
+
/** Falha ao trocar de página (o resumo e a página anterior continuam). */
|
|
1005
|
+
pageError: string;
|
|
1006
|
+
loading: string;
|
|
1007
|
+
emptyTitle: string;
|
|
1008
|
+
emptyText: string;
|
|
1009
|
+
clearFilters: string;
|
|
1010
|
+
errorTitle: string;
|
|
1011
|
+
errorText: string;
|
|
1012
|
+
retry: string;
|
|
1013
|
+
rangeTooLarge: string;
|
|
1014
|
+
forbidden: string;
|
|
1015
|
+
anonymous: string;
|
|
1016
|
+
detailHeading: string;
|
|
1017
|
+
detailLoading: string;
|
|
1018
|
+
detailError: string;
|
|
1019
|
+
fieldWhen: string;
|
|
1020
|
+
fieldApp: string;
|
|
1021
|
+
fieldUser: string;
|
|
1022
|
+
fieldActor: string;
|
|
1023
|
+
fieldIp: string;
|
|
1024
|
+
fieldOperation: string;
|
|
1025
|
+
fieldIdentifier: string;
|
|
1026
|
+
fieldMethod: string;
|
|
1027
|
+
fieldLevel: string;
|
|
1028
|
+
fieldPermission: string;
|
|
1029
|
+
fieldOutcome: string;
|
|
1030
|
+
fieldStatus: string;
|
|
1031
|
+
fieldDuration: string;
|
|
1032
|
+
fieldRoute: string;
|
|
1033
|
+
fieldTarget: string;
|
|
1034
|
+
fieldOrigin: string;
|
|
1035
|
+
originEntry: string;
|
|
1036
|
+
originInternal: string;
|
|
1037
|
+
fieldTrace: string;
|
|
1038
|
+
fieldEventId: string;
|
|
1039
|
+
fieldMessage: string;
|
|
1040
|
+
fieldReceivedAt: string;
|
|
1041
|
+
fieldInstance: string;
|
|
1042
|
+
fieldSdk: string;
|
|
1043
|
+
fieldDetails: string;
|
|
1044
|
+
viewTrace: string;
|
|
1045
|
+
traceHeading: string;
|
|
1046
|
+
traceLoading: string;
|
|
1047
|
+
traceError: string;
|
|
1048
|
+
traceEmpty: string;
|
|
1049
|
+
traceHidden: PluralMessage;
|
|
1050
|
+
traceCurrent: string;
|
|
1051
|
+
/** `{operation}`, `{time}`. */
|
|
1052
|
+
openTraceEvent: string;
|
|
1053
|
+
/** Introdução da tela no escopo `admin` (painel central, todos os apps). */
|
|
1054
|
+
introAdmin: string;
|
|
1055
|
+
period6h: string;
|
|
1056
|
+
refresh: string;
|
|
1057
|
+
autoRefresh: string;
|
|
1058
|
+
/** `{time}`. */
|
|
1059
|
+
updatedAt: string;
|
|
1060
|
+
/** Rótulo do indicador enquanto a tabela/rankings recarregam (as linhas atuais continuam à vista). */
|
|
1061
|
+
updating: string;
|
|
1062
|
+
filterUserId: string;
|
|
1063
|
+
filterLevel: string;
|
|
1064
|
+
filterPermission: string;
|
|
1065
|
+
filterActor: string;
|
|
1066
|
+
filterStatus: string;
|
|
1067
|
+
filterTrace: string;
|
|
1068
|
+
userIdPlaceholder: string;
|
|
1069
|
+
statusPlaceholder: string;
|
|
1070
|
+
tracePlaceholder: string;
|
|
1071
|
+
levelPublic: string;
|
|
1072
|
+
levelPrivate: string;
|
|
1073
|
+
levelProtected: string;
|
|
1074
|
+
levelOptional: string;
|
|
1075
|
+
permissionAllowed: string;
|
|
1076
|
+
permissionForbidden: string;
|
|
1077
|
+
permissionUnauthorized: string;
|
|
1078
|
+
permissionPublic: string;
|
|
1079
|
+
actorUser: string;
|
|
1080
|
+
actorAppToken: string;
|
|
1081
|
+
actorApiToken: string;
|
|
1082
|
+
actorPublic: string;
|
|
1083
|
+
actorUnauthenticated: string;
|
|
1084
|
+
/** Escopo `admin`: a conta não tem as operações `admin:audit:*`. */
|
|
1085
|
+
forbiddenAdmin: string;
|
|
1086
|
+
/** 400 `invalid_filter` do servidor. `{detail}` = explicação dele. */
|
|
1087
|
+
invalidFilter: string;
|
|
1088
|
+
/** Descrição dos KPIs clicáveis (falhas/negados viram filtro). */
|
|
1089
|
+
kpiFilterHint: string;
|
|
1090
|
+
/** Rodapé dos rankings: `{from}`, `{to}`, `{total}`. */
|
|
1091
|
+
topsRange: string;
|
|
1092
|
+
/** `{name}` = título do ranking. */
|
|
1093
|
+
topsPrevious: string;
|
|
1094
|
+
/** `{name}` = título do ranking. */
|
|
1095
|
+
topsNext: string;
|
|
1096
|
+
topsError: string;
|
|
1097
|
+
filterByTrace: string;
|
|
1098
|
+
/** Rótulo do alternador "Ações | Eventos". */
|
|
1099
|
+
unitLabel: string;
|
|
1100
|
+
unitActions: string;
|
|
1101
|
+
unitEvents: string;
|
|
1102
|
+
kpiTotalActions: string;
|
|
1103
|
+
kpiTotalActionsDescription: string;
|
|
1104
|
+
/** `{from}`, `{to}`. */
|
|
1105
|
+
timelineSummaryActions: string;
|
|
1106
|
+
/** `{time}`, `{total}`, `{failures}`, `{denied}`. */
|
|
1107
|
+
bucketSummaryActions: string;
|
|
1108
|
+
timelineEmptyActions: string;
|
|
1109
|
+
actionsCaption: string;
|
|
1110
|
+
pageItemsActions: string;
|
|
1111
|
+
pageErrorActions: string;
|
|
1112
|
+
emptyTitleActions: string;
|
|
1113
|
+
/** Coluna com a quantidade de spans (registros) da ação. */
|
|
1114
|
+
colSpans: string;
|
|
1115
|
+
/** Dica da célula de spans: `{apps}` = aplicações envolvidas. */
|
|
1116
|
+
spansApps: string;
|
|
1117
|
+
/** Spans de fora do escopo do client: contados à parte. */
|
|
1118
|
+
spansHidden: PluralMessage;
|
|
1119
|
+
actionDetailHeading: string;
|
|
1120
|
+
/** Ação sem a entrada (entry) no período: começa por uma chamada entre aplicações. */
|
|
1121
|
+
orphanNote: string;
|
|
1122
|
+
orphanTag: string;
|
|
1123
|
+
spansHeading: string;
|
|
1124
|
+
/** Linha do tempo dos spans: `{count}` spans em `{duration}`. */
|
|
1125
|
+
spansSummary: string;
|
|
1126
|
+
/** `{app}`, `{operation}`, `{outcome}`, `{offset}`, `{duration}`. */
|
|
1127
|
+
spanRow: string;
|
|
1128
|
+
};
|
|
1129
|
+
}
|
|
1130
|
+
declare const SPINE_MESSAGES_PT_BR: SpineMessages;
|
|
1131
|
+
|
|
1132
|
+
declare const SPINE_MESSAGES_EN: SpineMessages;
|
|
1133
|
+
|
|
1134
|
+
declare const SPINE_MESSAGES_ES: SpineMessages;
|
|
1135
|
+
|
|
1136
|
+
type SpineMessagesOverride = CatalogOverride<SpineMessages>;
|
|
1137
|
+
interface SpineI18nConfig {
|
|
1138
|
+
/** Catálogos extras ou substitutos, por idioma (mesmas chaves do `SpineMessages`). */
|
|
1139
|
+
readonly catalogs?: Readonly<Record<string, SpineMessages>>;
|
|
1140
|
+
/** Textos avulsos sobrescritos por cima do catálogo ativo, em qualquer idioma. */
|
|
1141
|
+
readonly override?: SpineMessagesOverride;
|
|
1142
|
+
}
|
|
1143
|
+
declare const SPINE_I18N_CONFIG: InjectionToken<SpineI18nConfig>;
|
|
1144
|
+
/**
|
|
1145
|
+
* Textos do spine no idioma ativo para quem não tem injeção (funções puras como o `unwrap` do
|
|
1146
|
+
* `@trismegisto/spine/graphql`, chamado em qualquer lugar do app). É o mesmo catálogo vivo do
|
|
1147
|
+
* `SPINE_MESSAGES` — segue `setLocale` — assim que o shell o injetou; antes disso, o pt-BR.
|
|
1148
|
+
*/
|
|
1149
|
+
declare function currentSpineMessages(): SpineMessages;
|
|
1150
|
+
/**
|
|
1151
|
+
* Textos do spine no idioma ativo da lib (`HermesI18nService.locale`): uma troca de idioma com
|
|
1152
|
+
* `setLocale` atualiza a lib e o spine juntos, sem recarregar. Leitura igual à do `HERMES_MESSAGES`
|
|
1153
|
+
* (`inject(SPINE_MESSAGES).header.settings`), viva também em template.
|
|
1154
|
+
*/
|
|
1155
|
+
declare const SPINE_MESSAGES: InjectionToken<SpineMessages>;
|
|
1156
|
+
/** Sobrescreve textos do spine e/ou acrescenta idiomas. O idioma em si vem de `provideHermesI18n`. */
|
|
1157
|
+
declare function provideSpineMessages(config: SpineI18nConfig): Provider;
|
|
1158
|
+
|
|
1159
|
+
export { APP_PACKAGE_INFO, DensityService, HERMES_DS_IMPORTS, SPINE_ADMIN_API, SPINE_CONFIG, SPINE_DEFAULT_LOGO, SPINE_I18N_CONFIG, SPINE_MESSAGES, SPINE_MESSAGES_EN, SPINE_MESSAGES_ES, SPINE_MESSAGES_PT_BR, SPINE_NEWS, SpinePreferencesService, SpineQuickAccessService, ThemePresetService, ThemeService, applyRuntimeEnvironment, applySpineFavicon, currentSpineMessages, mergeRouteTree, provideSpineMessages, provideSpineNews, provideUi, resolveSpineLogo, routerIdOf, spineRoutesOf };
|
|
1160
|
+
export type { DensitySetting, PackageInfo, QuickAccessItem, Route, RuntimeEnvironmentInfo, RuntimeEnvironmentShape, SpineConfig, SpineI18nConfig, SpineLogoConfig, SpineLogoSources, SpineMessages, SpineMessagesOverride, SpineNewsIllustration, SpineNewsItem, SpineNewsSlide };
|
|
1161
|
+
//# sourceMappingURL=trismegisto-spine.d.ts.map
|