@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.
Files changed (92) hide show
  1. package/README.md +19 -11
  2. package/fesm2022/trismegisto-spine-audit.mjs +16 -12
  3. package/fesm2022/trismegisto-spine-audit.mjs.map +1 -1
  4. package/fesm2022/{trismegisto-spine-auto-service-auto-service-audit.component-tfGcVR3i.mjs → trismegisto-spine-auto-service-auto-service-audit.component-D8HUpZtA.mjs} +4 -4
  5. 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
  6. package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-NawbfdLW.mjs +65 -0
  7. package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-NawbfdLW.mjs.map +1 -0
  8. package/fesm2022/{trismegisto-spine-auto-service-auto-service-client.component-IATeedbr.mjs → trismegisto-spine-auto-service-auto-service-client.component-BAfeLyTB.mjs} +27 -19
  9. package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-BAfeLyTB.mjs.map +1 -0
  10. package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-BYjIQ9ID.mjs +635 -0
  11. package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-BYjIQ9ID.mjs.map +1 -0
  12. 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
  13. 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
  14. package/fesm2022/trismegisto-spine-auto-service-auto-service-news-page.component-CBemH4hr.mjs +432 -0
  15. package/fesm2022/trismegisto-spine-auto-service-auto-service-news-page.component-CBemH4hr.mjs.map +1 -0
  16. package/fesm2022/trismegisto-spine-auto-service-auto-service-ratings-page.component-C_THGTkw.mjs +769 -0
  17. package/fesm2022/trismegisto-spine-auto-service-auto-service-ratings-page.component-C_THGTkw.mjs.map +1 -0
  18. package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-DIeunpQ9.mjs +2123 -0
  19. package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-DIeunpQ9.mjs.map +1 -0
  20. package/fesm2022/{trismegisto-spine-auto-service-auto-service.component-DGrs_Jvw.mjs → trismegisto-spine-auto-service-auto-service.component-QsIQ61w2.mjs} +31 -23
  21. package/fesm2022/trismegisto-spine-auto-service-auto-service.component-QsIQ61w2.mjs.map +1 -0
  22. package/fesm2022/{trismegisto-spine-auto-service-client.usage-C_2zBCRN.mjs → trismegisto-spine-auto-service-client.usage-CJxn9Ysz.mjs} +5 -3
  23. package/fesm2022/trismegisto-spine-auto-service-client.usage-CJxn9Ysz.mjs.map +1 -0
  24. package/fesm2022/{trismegisto-spine-auto-service-groups.technical-9aPPulhy.mjs → trismegisto-spine-auto-service-groups.technical-_jQrg1Qh.mjs} +7 -5
  25. package/fesm2022/trismegisto-spine-auto-service-groups.technical-_jQrg1Qh.mjs.map +1 -0
  26. package/fesm2022/{trismegisto-spine-auto-service-groups.usage-CYh61LFL.mjs → trismegisto-spine-auto-service-groups.usage-OvWjNeeT.mjs} +7 -6
  27. package/fesm2022/{trismegisto-spine-auto-service-groups.usage-CYh61LFL.mjs.map → trismegisto-spine-auto-service-groups.usage-OvWjNeeT.mjs.map} +1 -1
  28. package/fesm2022/trismegisto-spine-auto-service-home.component-rQ3dIGIE.mjs +315 -0
  29. package/fesm2022/trismegisto-spine-auto-service-home.component-rQ3dIGIE.mjs.map +1 -0
  30. package/fesm2022/trismegisto-spine-auto-service-home.technical-Ce7oYRdg.mjs +46 -0
  31. package/fesm2022/trismegisto-spine-auto-service-home.technical-Ce7oYRdg.mjs.map +1 -0
  32. package/fesm2022/trismegisto-spine-auto-service-home.usage-D9R_ZMuU.mjs +48 -0
  33. package/fesm2022/trismegisto-spine-auto-service-home.usage-D9R_ZMuU.mjs.map +1 -0
  34. package/fesm2022/trismegisto-spine-auto-service-news.technical-DV9UpobG.mjs +38 -0
  35. package/fesm2022/trismegisto-spine-auto-service-news.technical-DV9UpobG.mjs.map +1 -0
  36. package/fesm2022/trismegisto-spine-auto-service-news.usage-CeuZnG0V.mjs +48 -0
  37. package/fesm2022/trismegisto-spine-auto-service-news.usage-CeuZnG0V.mjs.map +1 -0
  38. package/fesm2022/trismegisto-spine-auto-service-ratings.technical-QIVj6HBU.mjs +52 -0
  39. package/fesm2022/trismegisto-spine-auto-service-ratings.technical-QIVj6HBU.mjs.map +1 -0
  40. package/fesm2022/trismegisto-spine-auto-service-ratings.usage-BkteY8lz.mjs +45 -0
  41. package/fesm2022/trismegisto-spine-auto-service-ratings.usage-BkteY8lz.mjs.map +1 -0
  42. package/fesm2022/trismegisto-spine-auto-service-suggestions.technical-BtUK6sKD.mjs +69 -0
  43. package/fesm2022/trismegisto-spine-auto-service-suggestions.technical-BtUK6sKD.mjs.map +1 -0
  44. package/fesm2022/trismegisto-spine-auto-service-suggestions.usage-BwO9Hjsx.mjs +72 -0
  45. package/fesm2022/trismegisto-spine-auto-service-suggestions.usage-BwO9Hjsx.mjs.map +1 -0
  46. package/fesm2022/trismegisto-spine-auto-service.mjs +49 -19
  47. package/fesm2022/trismegisto-spine-auto-service.mjs.map +1 -1
  48. package/fesm2022/trismegisto-spine-graphql.mjs +11 -2
  49. package/fesm2022/trismegisto-spine-graphql.mjs.map +1 -1
  50. package/fesm2022/trismegisto-spine-layout.mjs +3113 -1221
  51. package/fesm2022/trismegisto-spine-layout.mjs.map +1 -1
  52. package/fesm2022/trismegisto-spine-modal.mjs +7 -5
  53. package/fesm2022/trismegisto-spine-modal.mjs.map +1 -1
  54. package/fesm2022/trismegisto-spine-routing.mjs +12 -20
  55. package/fesm2022/trismegisto-spine-routing.mjs.map +1 -1
  56. package/fesm2022/trismegisto-spine-shell.mjs +15 -39
  57. package/fesm2022/trismegisto-spine-shell.mjs.map +1 -1
  58. package/fesm2022/trismegisto-spine-side-panel.mjs +7 -5
  59. package/fesm2022/trismegisto-spine-side-panel.mjs.map +1 -1
  60. package/fesm2022/trismegisto-spine.mjs +1969 -279
  61. package/fesm2022/trismegisto-spine.mjs.map +1 -1
  62. package/package.json +6 -6
  63. package/types/trismegisto-spine-audit.d.ts +2 -12
  64. package/types/trismegisto-spine-audit.d.ts.map +1 -1
  65. package/types/trismegisto-spine-auto-service.d.ts +22 -5
  66. package/types/trismegisto-spine-auto-service.d.ts.map +1 -1
  67. package/types/trismegisto-spine-layout.d.ts +1083 -283
  68. package/types/trismegisto-spine-layout.d.ts.map +1 -1
  69. package/types/trismegisto-spine-modal.d.ts +1 -0
  70. package/types/trismegisto-spine-modal.d.ts.map +1 -1
  71. package/types/trismegisto-spine-routing.d.ts +3 -12
  72. package/types/trismegisto-spine-routing.d.ts.map +1 -1
  73. package/types/trismegisto-spine-shell.d.ts +2 -15
  74. package/types/trismegisto-spine-shell.d.ts.map +1 -1
  75. package/types/trismegisto-spine-side-panel.d.ts +1 -0
  76. package/types/trismegisto-spine-side-panel.d.ts.map +1 -1
  77. package/types/trismegisto-spine.d.ts +739 -165
  78. package/types/trismegisto-spine.d.ts.map +1 -1
  79. package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-Cl7ahisu.mjs +0 -65
  80. package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-Cl7ahisu.mjs.map +0 -1
  81. package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-IATeedbr.mjs.map +0 -1
  82. package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-D6L0gTmd.mjs +0 -605
  83. package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-D6L0gTmd.mjs.map +0 -1
  84. package/fesm2022/trismegisto-spine-auto-service-auto-service.component-DGrs_Jvw.mjs.map +0 -1
  85. package/fesm2022/trismegisto-spine-auto-service-client.usage-C_2zBCRN.mjs.map +0 -1
  86. package/fesm2022/trismegisto-spine-auto-service-groups.technical-9aPPulhy.mjs.map +0 -1
  87. package/fesm2022/trismegisto-spine-auto-service-home.component-5_aji1hf.mjs +0 -239
  88. package/fesm2022/trismegisto-spine-auto-service-home.component-5_aji1hf.mjs.map +0 -1
  89. package/fesm2022/trismegisto-spine-auto-service-home.technical-BrVhcgDO.mjs +0 -35
  90. package/fesm2022/trismegisto-spine-auto-service-home.technical-BrVhcgDO.mjs.map +0 -1
  91. package/fesm2022/trismegisto-spine-auto-service-home.usage-DWYGtngX.mjs +0 -43
  92. package/fesm2022/trismegisto-spine-auto-service-home.usage-DWYGtngX.mjs.map +0 -1
@@ -3,16 +3,11 @@ import { Type, InjectionToken, NgZone, EnvironmentProviders, Provider } from '@a
3
3
  import { HermesThemeName, HermesThemeMode, HermesFamily, HermesDensity } from '@trismegisto/angular';
4
4
  import { HermesThemeExtension, TimeHourCycle, HermesMotionPreference, Weekday, PluralMessage, CatalogOverride } from '@trismegisto/primitives';
5
5
  export { LoadRuntimeConfigOptions, loadRuntimeConfig } from '@trismegisto/primitives';
6
+ import { RegisteredIcon } from '@trismegisto/icons';
6
7
 
7
8
  interface Route {
8
9
  route_display_name?: string | null;
9
10
  route_icon?: string | null;
10
- /**
11
- * @deprecated use `router_id` (ou `routerIdOf`). Nome histórico: no nó 'page' o argos-auth-server
12
- * sempre mandou aqui o `router_id` (nunca o `web.routes.route_id`, que é `routed_id`). Continua
13
- * vindo, com o mesmo valor, para spines/Orfeu antigos.
14
- */
15
- route_id?: string | null;
16
11
  route_name?: string | null;
17
12
  route_order?: number | null;
18
13
  route_path?: string | null;
@@ -26,15 +21,14 @@ interface Route {
26
21
  * Identidade da TELA: o router do client (`web.router.router_id`, a posição da tela na
27
22
  * navegação). Só no nó 'page' -- nó de grupo (navigation/menu/...) é compartilhado por vários
28
23
  * routers e não tem um próprio. É por ele que o spine acha o componente (`COMPONENT_ROUTES`),
29
- * o documento e a descrição. Argos anterior a 2026-10-05 não manda: use `routerIdOf`, que cai
30
- * no `route_id` (mesmo valor).
24
+ * o documento e a descrição.
31
25
  */
32
26
  router_id?: string | null;
33
27
  /** Texto curto da tela (`web.router.description`), exibido na barra da página abaixo do título. */
34
28
  description?: string | null;
35
29
  source_template_router_id?: string | null;
36
30
  }
37
- /** `router_id` da tela (nó 'page'), aceitando o argos antigo (que só mandava `route_id`, mesmo valor). */
31
+ /** `router_id` da tela (nó 'page'); `null` em nó de grupo. */
38
32
  declare function routerIdOf(route: Route | null | undefined): string | null;
39
33
 
40
34
  /**
@@ -107,10 +101,11 @@ declare function applySpineFavicon(doc: Document, href: string): HTMLLinkElement
107
101
  interface SpineConfig {
108
102
  clientId: string;
109
103
  /**
110
- * Famílias de cor próprias do app (opcional): acrescentar (`families`), trocar uma existente
111
- * (`replace: { poseidon: minhaFamilia }` — posição e preferência salva passam para a nova) e a
112
- * família inicial (`defaultFamily`). Ver `extendThemeConfig` do `@trismegisto/primitives`; a família
113
- * se monta e exporta no `hm-theme-builder`.
104
+ * Sobrescritas do app (opcional): nome e cores de uma família da lib (`replace: { poseidon: minhaFamilia }`) e o
105
+ * desenho de uma fonte da lib (`replaceFonts: { figtree: minhaFonte }`), mais as iniciais (`defaultFamily`,
106
+ * `defaultFont`). O app não acrescenta família nem fonte: o id salvo é sempre o da lib, e um app sem a sobrescrita
107
+ * mostra a original. Ver `extendThemeConfig` do `@trismegisto/primitives`; a família se monta e exporta no
108
+ * `hm-theme-builder`.
114
109
  */
115
110
  theme?: HermesThemeExtension;
116
111
  /** Nome do app exibido ao lado do logo no header (ex.: "Hefesto"). Padrão: "Hermes". */
@@ -193,6 +188,17 @@ interface SpineFeatures {
193
188
  /** Preferências (aparência, região, acessibilidade, favoritos, tela inicial…) guardadas também na conta do Argos,
194
189
  * para acompanharem a pessoa em qualquer navegador. Sem a API da conta, ficam só no navegador. */
195
190
  accountPreferences?: boolean;
191
+ /** Configuração inicial em tela cheia no primeiro acesso (aparência e o essencial). Ligada por padrão; `false`
192
+ * desliga. "Feita" vale para a pessoa em todos os apps quando as preferências estão na conta. */
193
+ initialSetup?: boolean;
194
+ /** Avaliações (1 a 5 estrelas e um comentário): "Avaliar esta tela" na barra da página e "Avaliar o {app}" no menu
195
+ * do perfil; quem administra vê os resultados no auto-serviço (tela Avaliações). Ligado por padrão quando há
196
+ * `SPINE_ADMIN_API` (`/me/ratings`), como as sugestões; `false` desliga. Sem a API, nada aparece. */
197
+ ratings?: boolean;
198
+ /** Sugestões de melhoria: "Sugerir melhoria" na barra da página (com "Minhas sugestões"); quem administra acompanha
199
+ * num kanban no auto-serviço (tela Sugestões). Ligado por padrão quando há `SPINE_ADMIN_API`
200
+ * (`/me/suggestions`); `false` desliga. Sem a API, nada aparece. */
201
+ suggestions?: boolean;
196
202
  }
197
203
  declare const SPINE_CONFIG: InjectionToken<SpineConfig>;
198
204
 
@@ -264,12 +270,21 @@ declare class DensityService {
264
270
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<DensityService>;
265
271
  }
266
272
 
267
- /** Registra o catálogo de ícones inteiro — o spine (header/sidebar/navegação/modal/onboarding)
268
- * usa ícones de várias origens (shield, pencil, trash, floppy, chevrons...) que não vêm
269
- * 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
270
- * silenciosamente no hambúrguer de fallback pra qualquer app que consuma este pacote. */
273
+ /**
274
+ * Bootstrap do spine: tema, favicon, prefixo de armazenamento do app e ícones.
275
+ *
276
+ * Ícones (desde a 3.3.1): registra no bootstrap só `SPINE_ICONS` — os que o próprio spine desenha (header,
277
+ * menu, configurações, auto-serviço...; gerado por `scripts/generate-spine-icons.mjs`) — e pede o catálogo
278
+ * inteiro sob demanda (`provideHermesIconLoader`), num chunk à parte baixado logo depois do bootstrap. Assim o
279
+ * bundle inicial não leva os ~900 desenhos (~212 kB), e um ícone que o APP usa sem registrar (o ícone da rota que
280
+ * vem do servidor, um `[icon]` de botão) continua aparecendo: até o chunk chegar desenha o genérico, e o
281
+ * `hm-icon` redesenha sozinho. App que registra os próprios ícones (`provideHermesIcons(...)`) não muda nada.
282
+ */
271
283
  declare function provideUi(config?: SpineConfig): EnvironmentProviders;
272
284
 
285
+ /** Os 115 ícones que o spine usa por dentro. */
286
+ declare const SPINE_ICONS: readonly RegisteredIcon[];
287
+
273
288
  /** Dados do `package.json` do app (nome, versão, dependências...), passados em
274
289
  * `provideShell({ packageInfo })`. Mora no pacote raiz (e não em `@trismegisto/spine/shell`, onde
275
290
  * nasceu) porque o painel de configurações do `@trismegisto/spine/layout` também lê — e o shell
@@ -435,6 +450,8 @@ interface QuickAccessItem {
435
450
  readonly redirect: string;
436
451
  /** Ancestor labels, top-down. `[]` = top-level page; absent = stored by an older version. */
437
452
  readonly trail?: readonly string[];
453
+ /** When the page was last opened (epoch ms), for "12 min ago" on the home screen. Only on recents. */
454
+ readonly visitedAt?: number;
438
455
  }
439
456
  /**
440
457
  * Favorites and recently visited pages, shared by every consumer in the app (page bar, home screen)
@@ -560,55 +577,7 @@ interface RuntimeEnvironmentInfo {
560
577
  declare function applyRuntimeEnvironment(environment: RuntimeEnvironmentShape): RuntimeEnvironmentInfo;
561
578
 
562
579
  /**
563
- * Ilustração gerada pelo spine, nas cores do tema em vigor: o ícone da novidade no centro e,
564
- * opcionalmente, selos (ícone + rótulo) orbitando em volta. Ícones são nomes do @trismegisto/icons.
565
- */
566
- interface SpineNewsIllustration {
567
- readonly icon: string;
568
- readonly satellites?: readonly {
569
- readonly icon: string;
570
- readonly label: string;
571
- }[];
572
- }
573
- /** Um slide do painel de novidades. */
574
- interface SpineNewsSlide {
575
- readonly title: string;
576
- readonly text: string;
577
- /** Ilustração desenhada pelo spine (recomendado — acompanha tema claro/escuro e família). */
578
- readonly illustration?: SpineNewsIllustration;
579
- /** Imagem própria (caminho em `assets/` do app); vence a `illustration`. Sem nenhuma das duas, o
580
- * slide é só texto. */
581
- readonly image?: string;
582
- /** Descrição da imagem pra quem não a vê. Vazia marca a imagem como decorativa. */
583
- readonly alt?: string;
584
- }
585
- /**
586
- * Uma novidade do app: aparece sozinha uma vez por navegador, depois do tour de boas-vindas, e fica
587
- * marcada como vista ao ser exibida.
588
- */
589
- interface SpineNewsItem {
590
- /** Chave estável. Trocar o id faz a novidade aparecer de novo para todo mundo. */
591
- readonly id: string;
592
- readonly slides: readonly SpineNewsSlide[];
593
- /** Data (AAAA-MM-DD) a partir da qual a novidade deixa de ser oferecida. Opcional. */
594
- readonly until?: string;
595
- }
596
- /** Multi: cada chamada de `provideSpineNews` contribui com uma lista. */
597
- declare const SPINE_NEWS: InjectionToken<readonly (readonly SpineNewsItem[])[]>;
598
- /**
599
- * Registra as novidades do app (no `app.config.ts`, junto do `provideUi`). Ficam no código, no
600
- * mesmo commit da funcionalidade que anunciam. A ordem da lista é a ordem dos slides.
601
- *
602
- * ```ts
603
- * provideSpineNews([
604
- * { id: 'build-com-versao-2026-09', slides: [{ title: 'Build direto da linha', text: '…' }] },
605
- * ]),
606
- * ```
607
- */
608
- declare function provideSpineNews(items: readonly SpineNewsItem[]): EnvironmentProviders;
609
-
610
- /**
611
- * Textos do próprio spine (cabeçalho, navegação, configurações, tour, telas do auto-serviço…), no
580
+ * Textos do próprio spine (cabeçalho, navegação, configurações, configuração inicial, telas do auto-serviço…), no
612
581
  * mesmo formato do `HermesMessages` da lib: seção → chave, parâmetros nomeados (`{name}`) e plural
613
582
  * por `PluralMessage`. Alguns textos levam marcação simples (`<b>`, `<strong>`, `<code>`) e são
614
583
  * exibidos com `[innerHTML]` — estão indicados no comentário. Os que têm parâmetro saem por
@@ -634,15 +603,17 @@ interface SpineMessages {
634
603
  settings: string;
635
604
  appearance: string;
636
605
  shortcuts: string;
637
- tour: string;
638
606
  news: string;
607
+ /** "Novidades" no menu do perfil com as não vistas: `{label}` e `{count}`. */
608
+ newsUnseen: string;
639
609
  logout: string;
640
610
  search: string;
641
611
  searchPlaceholder: string;
642
- recentSearches: string;
643
- clearRecent: string;
644
- /** `{term}` = o que foi digitado. */
645
- noResults: string;
612
+ /** Grupos da busca (paleta): com o campo vazio, só favoritos, abertos há pouco e módulos. */
613
+ searchFavorites: string;
614
+ searchRecent: string;
615
+ searchModules: string;
616
+ searchScreens: string;
646
617
  };
647
618
  navigation: {
648
619
  back: string;
@@ -684,51 +655,187 @@ interface SpineMessages {
684
655
  /** Convite no lado da leitura enquanto nenhuma página do índice foi aberta. */
685
656
  invite: string;
686
657
  };
658
+ /** Novidades: painel lateral (lista) e o aviso discreto da entrada. */
687
659
  news: {
688
660
  heading: string;
689
- carousel: string;
690
- dismiss: string;
661
+ close: string;
662
+ /** Selo da novidade ainda não vista. */
663
+ unseen: string;
664
+ /** Aviso da entrada com uma novidade. `{title}`. */
665
+ toastOne: string;
666
+ /** Aviso da entrada com várias. `{count}`. */
667
+ toastMany: string;
668
+ see: string;
669
+ loading: string;
670
+ empty: string;
671
+ /** A lista não veio (rede, servidor); com `retry`. */
672
+ loadError: string;
673
+ retry: string;
674
+ /** Nome acessível da lista de novidades (agrupada por mês). */
675
+ pages: string;
676
+ /** Busca do painel: rótulo (escondido) e o texto de exemplo. */
677
+ search: string;
678
+ searchPlaceholder: string;
679
+ /** Nome acessível do grupo de filtros em pílula e cada filtro (a contagem vem ao lado). */
680
+ filters: string;
681
+ filterAll: string;
682
+ filterUnread: string;
683
+ filterFavorites: string;
684
+ /** Marcador de cada item. `{title}`. */
685
+ favorite: string;
686
+ unfavorite: string;
687
+ /** Nada passou na busca ou no filtro. */
688
+ noResults: string;
689
+ /** Primeiro degrau da trilha do modal (a tela inicial). */
690
+ home: string;
691
+ /** Implementação: título da lista de mudanças. */
692
+ changes: string;
693
+ /** Alteração: os dois lados da comparação. */
694
+ before: string;
695
+ after: string;
696
+ /** Rodapé do modal. */
697
+ markUnread: string;
698
+ gotIt: string;
699
+ /** Tipo da novidade, na linha de meta do modal. */
700
+ kindInformativo: string;
701
+ kindImplementacao: string;
702
+ kindAlteracao: string;
703
+ /** `{date}`: data da publicação. */
704
+ publishedOn: string;
705
+ /** `{date}`: a novidade foi alterada depois de publicada. */
706
+ editedOn: string;
707
+ /** Nome acessível do texto da novidade (rich text só leitura) no modal. */
708
+ body: string;
709
+ /** A novidade aberta não veio (rede, servidor, saiu do ar). */
710
+ detailError: string;
711
+ };
712
+ /** Auto-serviço, tela Novidades: o que o spine mostra em "Novidades" para quem entra no app. */
713
+ autoServiceNews: {
714
+ caption: string;
715
+ empty: string;
716
+ newNews: string;
717
+ editNews: string;
718
+ /** Subtítulo do cabeçalho do editor, ao criar e ao editar. */
719
+ newNewsIntro: string;
720
+ editNewsIntro: string;
721
+ /** Seções numeradas do editor: título e descrição curta de cada uma. */
722
+ sectionMain: string;
723
+ sectionMainHint: string;
724
+ sectionBody: string;
725
+ sectionBodyHint: string;
726
+ sectionPublish: string;
727
+ sectionUntil: string;
728
+ sectionAudience: string;
729
+ /** Prévia ao vivo do card de novidades do Início, no painel lateral do editor. */
730
+ preview: string;
731
+ /** Título e resumo da prévia enquanto os campos estão vazios. */
732
+ previewTitle: string;
733
+ previewSummary: string;
734
+ /** Prévia sem data de publicação: sai ao salvar. */
735
+ previewNow: string;
736
+ /** Dica de uma linha no painel lateral: `tipTitle` em negrito e `tipText` logo depois. */
737
+ tipTitle: string;
738
+ tipText: string;
739
+ /** Rótulo do campo de data da seção de validade. */
740
+ untilDate: string;
741
+ /** Rótulo do campo de grupos da seção de público. */
742
+ audienceGroups: string;
743
+ /** Seletor do tipo de publicação (segmentado, no topo do editor) e cada tipo. */
744
+ kind: string;
745
+ kindInformativo: string;
746
+ kindImplementacao: string;
747
+ kindAlteracao: string;
748
+ /** Descrição da seção de conteúdo na implementação e na alteração (a do informativo é `sectionBodyHint`). */
749
+ sectionBodyHintImpl: string;
750
+ sectionBodyHintAlt: string;
751
+ /** Introdução opcional (rich text) da implementação e da alteração. */
752
+ intro: string;
753
+ /** Lista de mudanças da implementação: rótulo, dica, exemplo do campo e lista vazia. */
754
+ items: string;
755
+ itemsHint: string;
756
+ itemPlaceholder: string;
757
+ itemsEmpty: string;
758
+ /** Alteração: os dois lados (rich text). */
759
+ before: string;
760
+ after: string;
761
+ colTitle: string;
762
+ colPublishedAt: string;
763
+ colUntil: string;
764
+ colAudience: string;
765
+ colAuthor: string;
766
+ colStatus: string;
767
+ statusScheduled: string;
768
+ statusPublished: string;
769
+ statusExpired: string;
770
+ /** Público sem grupo: todos que entram no app. */
771
+ audienceAll: string;
772
+ /** Validade vazia. */
773
+ noUntil: string;
774
+ title: string;
775
+ summary: string;
776
+ summaryHint: string;
777
+ body: string;
778
+ bodyHint: string;
779
+ publishDate: string;
780
+ publishTime: string;
781
+ publishHint: string;
782
+ until: string;
783
+ untilHint: string;
784
+ audience: string;
785
+ audienceHint: string;
786
+ confirmDeleteHeading: string;
787
+ /** `{title}`. */
788
+ confirmDelete: string;
789
+ saveError: string;
790
+ /** A lista não veio (rede, servidor). */
791
+ loadError: string;
792
+ /** Códigos do argos-admin (`{ error }`) e a regra local de datas. */
793
+ errors: {
794
+ invalidTitle: string;
795
+ invalidSummary: string;
796
+ bodyTooLarge: string;
797
+ invalidPublishedAt: string;
798
+ invalidUntil: string;
799
+ invalidGroupIds: string;
800
+ untilBeforePublish: string;
801
+ invalidKind: string;
802
+ invalidItems: string;
803
+ invalidCompare: string;
804
+ compareTooLarge: string;
805
+ };
691
806
  };
692
- /** Tour guiado. As descrições (`*Text`) levam `<b>` e são exibidas com `[innerHTML]`. */
693
- tour: {
807
+ /** Configuração inicial em tela cheia (aparência) e "O essencial". `*Text` levam `{key}` = tecla. */
808
+ setup: {
809
+ label: string;
694
810
  /** `{current}` de `{total}`. */
695
- progress: string;
811
+ step: string;
696
812
  skip: string;
697
813
  back: string;
698
814
  next: string;
699
815
  finish: string;
700
- welcomeTitle: string;
701
- welcomeText: string;
702
- appsTitle: string;
703
- appsText: string;
816
+ close: string;
817
+ /** `{name}`: primeiro nome. */
818
+ greeting: string;
819
+ greetingAnonymous: string;
820
+ appearanceIntro: string;
821
+ preview: string;
822
+ previewPage: string;
823
+ essentialsTitle: string;
824
+ essentialsIntro: string;
704
825
  searchTitle: string;
705
826
  searchText: string;
706
- navModulesTitle: string;
707
- navModulesText: string;
708
- navModeTitle: string;
709
- navModeText: string;
710
827
  tabsTitle: string;
711
828
  tabsText: string;
712
- splitTitle: string;
713
- splitText: string;
714
- whereTitle: string;
715
- whereText: string;
716
- themeTitle: string;
717
- themeText: string;
718
- densityTitle: string;
719
- densityText: string;
720
- fullscreenTitle: string;
721
- fullscreenText: string;
722
- profileTitle: string;
723
- profileText: string;
724
- doneTitle: string;
725
- doneText: string;
829
+ favoritesTitle: string;
830
+ favoritesText: string;
831
+ settingsTitle: string;
832
+ settingsText: string;
726
833
  };
727
834
  shortcuts: {
728
835
  heading: string;
729
836
  /** `{key}` vira a tecla desenhada como chip. */
730
837
  hint: string;
731
- replayTour: string;
838
+ essentials: string;
732
839
  dismiss: string;
733
840
  openSearch: string;
734
841
  goHome: string;
@@ -798,10 +905,14 @@ interface SpineMessages {
798
905
  shortcuts: string;
799
906
  shortcutsDescription: string;
800
907
  shortcutsKeywords: string;
801
- tour: string;
802
- tourDescription: string;
803
- tourKeywords: string;
804
- replayTour: string;
908
+ setup: string;
909
+ setupDescription: string;
910
+ setupKeywords: string;
911
+ redoSetup: string;
912
+ essentials: string;
913
+ essentialsDescription: string;
914
+ essentialsKeywords: string;
915
+ showEssentials: string;
805
916
  /** Seção "Acessibilidade" (`?settings=acessibilidade`). */
806
917
  accessibility: string;
807
918
  accessibilityKeywords: string;
@@ -814,7 +925,7 @@ interface SpineMessages {
814
925
  motionSystem: string;
815
926
  motionReduce: string;
816
927
  motionFull: string;
817
- /** Seção "Ajuda" (`?settings=ajuda`): novidades e tour. */
928
+ /** Seção "Ajuda" (`?settings=ajuda`): novidades, configuração inicial e o essencial. */
818
929
  help: string;
819
930
  helpKeywords: string;
820
931
  news: string;
@@ -1042,8 +1153,6 @@ interface SpineMessages {
1042
1153
  accountSecurity: {
1043
1154
  loading: string;
1044
1155
  loadError: string;
1045
- /** A sessão do token acabou (encerrada em outro lugar, usuário desativado). */
1046
- sessionEnded: string;
1047
1156
  retry: string;
1048
1157
  methodTotp: string;
1049
1158
  methodEmail: string;
@@ -1154,6 +1263,154 @@ interface SpineMessages {
1154
1263
  sessionEndedNotice: string;
1155
1264
  othersEndedNotice: PluralMessage;
1156
1265
  };
1266
+ /**
1267
+ * Avaliações (`SpineFeatures.ratings`): nota de 0 a 10 (5 estrelas com meia), o formulário da pessoa, a estrela do
1268
+ * cabeçalho, a média em Configurações › Sobre e a tela Avaliações do auto-serviço.
1269
+ */
1270
+ ratings: {
1271
+ /** Botão da barra da página (estrela). */
1272
+ rateScreen: string;
1273
+ /** Estrela do cabeçalho e título do diálogo: `{app}` = nome do app. */
1274
+ rateApp: string;
1275
+ /** A mesma estrela depois de avaliar: `{app}`. */
1276
+ ratedApp: string;
1277
+ heading: string;
1278
+ subheading: string;
1279
+ /** O que está sendo avaliado, abaixo do título: `{screen}` (caminho legível) e `{app}`. */
1280
+ aboutScreen: string;
1281
+ aboutApp: string;
1282
+ /** Rótulo das estrelas no formulário (nome do slider). */
1283
+ score: string;
1284
+ /** Nota para o leitor: `{value}` ("7 de 10"; média "8,4 de 10"). */
1285
+ scoreOf: string;
1286
+ /** Valor falado do slider: `{value}` e `{name}` (de `scoreNames`). */
1287
+ scoreNamed: string;
1288
+ /** A nota ao lado das estrelas: `{value}` ("7/10"). */
1289
+ scoreShort: string;
1290
+ /** Rótulo de cada faixa: 1 = 0–2, 2 = 3–4, 3 = 5–6, 4 = 7–8, 5 = 9–10. */
1291
+ scoreNames: Record<1 | 2 | 3 | 4 | 5, string>;
1292
+ /** Valor falado do slider antes da escolha. */
1293
+ noScore: string;
1294
+ scaleHint: string;
1295
+ comment: string;
1296
+ commentPlaceholder: string;
1297
+ submit: string;
1298
+ update: string;
1299
+ /** Já avaliou: `{date}`. */
1300
+ previous: string;
1301
+ scoreRequired: string;
1302
+ loading: string;
1303
+ thanks: string;
1304
+ updated: string;
1305
+ saveError: string;
1306
+ period: string;
1307
+ periods: Record<'all' | 'd7' | 'd30' | 'd90', string>;
1308
+ refresh: string;
1309
+ appCard: string;
1310
+ screensCard: string;
1311
+ /** Subtítulos dos KPIs da ferramenta e das telas. */
1312
+ appCardHint: string;
1313
+ screensCardHint: string;
1314
+ /** O "/10" menor ao lado da média em destaque. */
1315
+ scoreMax: string;
1316
+ average: string;
1317
+ total: PluralMessage;
1318
+ comments: PluralMessage;
1319
+ noRatings: string;
1320
+ distribution: string;
1321
+ /** Coluna do histograma para o leitor: `{score}` (a nota, 0 a 10), `{count}` (de `total`) e `{share}`. */
1322
+ distributionRow: string;
1323
+ /** Nome das abas Telas / Áreas / Tendências (`ranking`) e o subtítulo antigo do ranking. */
1324
+ ranking: string;
1325
+ rankingHint: string;
1326
+ sort: string;
1327
+ sorts: Record<'worst' | 'best' | 'most', string>;
1328
+ noScreens: string;
1329
+ /** Botão de uma tela no ranking: `{screen}`. */
1330
+ filterByScreen: string;
1331
+ recent: string;
1332
+ recentHint: string;
1333
+ filterScope: string;
1334
+ allScopes: string;
1335
+ tool: string;
1336
+ screens: string;
1337
+ filterScreen: string;
1338
+ allScreens: string;
1339
+ filterScore: string;
1340
+ allScores: string;
1341
+ withComment: string;
1342
+ clearFilters: string;
1343
+ noComment: string;
1344
+ /** Menu ⋮ de uma avaliação: o nome do botão e as ações (copiar o comentário, filtrar pelo alvo). */
1345
+ itemActions: string;
1346
+ copyComment: string;
1347
+ commentCopied: string;
1348
+ copyFailed: string;
1349
+ showAppRatings: string;
1350
+ showScreenRatings: string;
1351
+ emptyList: string;
1352
+ pagination: string;
1353
+ unknownUser: string;
1354
+ loadError: string;
1355
+ forbidden: string;
1356
+ /** "Atualizado em {date} às {time}" (na barra da página). */
1357
+ updatedAt: string;
1358
+ /** "Ver detalhes" de cada KPI e o complemento para o leitor: `{name}` = o título do KPI. */
1359
+ details: string;
1360
+ detailsOf: string;
1361
+ tabScreens: string;
1362
+ tabAreas: string;
1363
+ tabTrends: string;
1364
+ viewAll: string;
1365
+ allHeading: string;
1366
+ /** Quando, na lista curta: "Agora há pouco", "Ontem às {time}", "{date} às {time}". */
1367
+ justNow: string;
1368
+ yesterdayAt: string;
1369
+ dateAt: string;
1370
+ /** Ordenação curta da tabela. */
1371
+ sortsShort: Record<'worst' | 'best' | 'most', string>;
1372
+ /** Filtro da faixa da nota: todas, ruim (< 5), média (5 a 6,9), boa (7 ou mais). */
1373
+ bands: Record<'all' | 'bad' | 'mid' | 'good', string>;
1374
+ bandFilter: string;
1375
+ filterArea: string;
1376
+ allAreas: string;
1377
+ noArea: string;
1378
+ /** Linha de uma área: `{area}`. */
1379
+ filterByArea: string;
1380
+ screensCount: PluralMessage;
1381
+ searchScreens: string;
1382
+ searchScreensLabel: string;
1383
+ searchAreas: string;
1384
+ searchAreasLabel: string;
1385
+ tableEmpty: string;
1386
+ areasEmpty: string;
1387
+ colScreen: string;
1388
+ colArea: string;
1389
+ colScreens: string;
1390
+ colScore: string;
1391
+ colTotal: string;
1392
+ colComments: string;
1393
+ colTrend: string;
1394
+ /** Cabeçalho (só para o leitor) da coluna do chevron. */
1395
+ colOpen: string;
1396
+ tablePagination: string;
1397
+ areasPagination: string;
1398
+ /** Sparkline para o leitor: `{first}` e `{last}` (médias da primeira e da última semana com nota). */
1399
+ trendOf: string;
1400
+ trendNone: string;
1401
+ trendCaption: string;
1402
+ trendEmpty: string;
1403
+ /** Uma série numa semana: `{series}` e `{value}` (ou `noScore`). */
1404
+ trendValue: string;
1405
+ /** Dica de uma semana: `{week}` (dd/mm), `{values}` (de `trendValue`, juntos) e `{count}` (de `total`). */
1406
+ trendWeek: string;
1407
+ aboutRating: string;
1408
+ aboutRatingKeywords: string;
1409
+ rateAction: string;
1410
+ noRatingsYet: string;
1411
+ loadingAverage: string;
1412
+ averageError: string;
1413
+ };
1157
1414
  notification: {
1158
1415
  genericError: string;
1159
1416
  };
@@ -1205,14 +1462,28 @@ interface SpineMessages {
1205
1462
  favorite: string;
1206
1463
  unfavorite: string;
1207
1464
  favorites: string;
1208
- navigate: string;
1465
+ /** Saudação pela hora do dia; com o nome, `greetingName` (`{greeting}`, `{name}`). */
1466
+ morning: string;
1467
+ afternoon: string;
1468
+ evening: string;
1469
+ greetingName: string;
1470
+ intro: string;
1471
+ seeAll: string;
1472
+ seeLess: string;
1473
+ /** `{name}`. Menu de ações de um item de "Continuar de onde parou". */
1474
+ recentActions: string;
1475
+ forgetRecent: string;
1476
+ explore: string;
1477
+ exploreIntro: string;
1478
+ news: string;
1479
+ newsBadge: string;
1480
+ newsAll: string;
1481
+ favoritesEmpty: string;
1482
+ help: string;
1483
+ shortcuts: string;
1484
+ essentials: string;
1209
1485
  settings: string;
1210
- tools: string;
1211
1486
  systemDocs: string;
1212
- colScreen: string;
1213
- colWhere: string;
1214
- colFavorite: string;
1215
- noModule: string;
1216
1487
  };
1217
1488
  /** Telas do auto-serviço. Textos com `[innerHTML]` indicados. */
1218
1489
  autoService: {
@@ -1228,9 +1499,6 @@ interface SpineMessages {
1228
1499
  inactive: string;
1229
1500
  confirmChanges: string;
1230
1501
  appsTitle: string;
1231
- appsIntro: string;
1232
- clientTitle: string;
1233
- clientIntro: string;
1234
1502
  /** Nome acessível da faixa de abas da tela Cliente (Rotas/Roteadores/Acesso). */
1235
1503
  clientSections: string;
1236
1504
  tabRoutes: string;
@@ -1242,15 +1510,9 @@ interface SpineMessages {
1242
1510
  clientsLoadError: string;
1243
1511
  retryLoad: string;
1244
1512
  pickClient: string;
1245
- groupsTitle: string;
1246
- groupsIntro: string;
1247
- /** @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). */
1248
- groupsFixed: string;
1249
1513
  /** Placeholder do seletor de grupo (Grupos, depois do nível de acesso). */
1250
1514
  pickGroup: string;
1251
1515
  noDescription: string;
1252
- /** @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). */
1253
- pickGroupHint: string;
1254
1516
  manageMembers: string;
1255
1517
  membersCaption: string;
1256
1518
  noMembers: string;
@@ -1261,10 +1523,17 @@ interface SpineMessages {
1261
1523
  addUser: string;
1262
1524
  userSearch: string;
1263
1525
  role: string;
1264
- pickRole: string;
1526
+ noRole: string;
1265
1527
  add: string;
1266
1528
  suggestions: string;
1267
- moreSuggestions: string;
1529
+ /** Critério das sugestões (dica ao lado do título). */
1530
+ suggestionsHint: string;
1531
+ /** Dica do chip: `{groups}` = grupos do sistema em que a pessoa está. */
1532
+ suggestionGroups: string;
1533
+ /** Nome acessível do chip: `{name}`. */
1534
+ addSuggestion: string;
1535
+ membersTitle: string;
1536
+ memberSearch: string;
1268
1537
  /** `{group}`. */
1269
1538
  membersOf: string;
1270
1539
  noMembersShort: string;
@@ -1282,17 +1551,12 @@ interface SpineMessages {
1282
1551
  accessCaption: string;
1283
1552
  noAccess: string;
1284
1553
  colGroup: string;
1285
- colBadge: string;
1286
1554
  manageRoutes: string;
1287
1555
  group: string;
1288
1556
  /** `{group}`. */
1289
1557
  routesOf: string;
1290
- /** `[innerHTML]`; `{badge}`. */
1291
- guardsHint: string;
1292
1558
  noPrivateRoutes: string;
1293
1559
  register: string;
1294
- /** @deprecated não é mais exibido (a tela Aplicações lista as aplicações numa tabela, sem "Consultar"). */
1295
- appsSearchIntro: string;
1296
1560
  secretCreated: string;
1297
1561
  /** Rótulo do seletor de aplicação (Aplicações, com "Consultar"). */
1298
1562
  pickApp: string;
@@ -1315,6 +1579,8 @@ interface SpineMessages {
1315
1579
  colOperations: string;
1316
1580
  /** Título da coluna com o botão "Gerenciar rotas" (aba Acesso do client), como no painel do Argos. */
1317
1581
  colGuards: string;
1582
+ /** Coluna da aba Acesso: rostos dos membros do grupo. */
1583
+ colMembers: string;
1318
1584
  /** Campo de filtro no topo do drawer "Gerenciar operações" (rótulo acessível e placeholder). */
1319
1585
  filterOperations: string;
1320
1586
  /** Campo de filtro no topo do drawer "Gerenciar rotas". */
@@ -1333,8 +1599,6 @@ interface SpineMessages {
1333
1599
  colDescription: string;
1334
1600
  colAllowedGroups: string;
1335
1601
  groupCount: PluralMessage;
1336
- /** @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). */
1337
- routersTitle: string;
1338
1602
  newRouter: string;
1339
1603
  routersCaption: string;
1340
1604
  noRouters: string;
@@ -1359,8 +1623,6 @@ interface SpineMessages {
1359
1623
  /** Roteador sem restrição de crachá (`allowed_type_ids` vazio); também o placeholder do campo. */
1360
1624
  anyBadge: string;
1361
1625
  allowedBadgesHint: string;
1362
- /** @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). */
1363
- routesTitle: string;
1364
1626
  newRoute: string;
1365
1627
  routesCaption: string;
1366
1628
  noRoutes: string;
@@ -1456,8 +1718,6 @@ interface SpineMessages {
1456
1718
  /** Tela Grupos: lista dos grupos do projeto, criar/editar/excluir. */
1457
1719
  newGroup: string;
1458
1720
  editGroup: string;
1459
- /** @deprecated não é mais exibido (a tela Grupos voltou ao seletor de nível + grupo, sem tabela). */
1460
- groupsCaption: string;
1461
1721
  noGroups: string;
1462
1722
  /** Tela Grupos: primeiro seletor (o tipo do grupo, do nível mais alto para o mais baixo). */
1463
1723
  accessLevel: string;
@@ -1471,33 +1731,13 @@ interface SpineMessages {
1471
1731
  groupType: string;
1472
1732
  groupTypePlaceholder: string;
1473
1733
  groupDescription: string;
1474
- /** @deprecated não é mais exibido (a tela Grupos voltou ao seletor, sem tabela). */
1475
- openGroup: string;
1476
- /** @deprecated não é mais exibido (o grupo de administração do projeto é gerido só no painel central e não aparece no auto-serviço). */
1477
- adminGroupTag: string;
1478
- /** @deprecated não é mais exibido (o grupo de administração do projeto é gerido só no painel central e não aparece no auto-serviço). */
1479
- adminGroupNote: string;
1480
- /** @deprecated não é mais exibido (o grupo de administração do projeto é gerido só no painel central e não aparece no auto-serviço). */
1481
- adminGroupEditNote: string;
1482
- /** @deprecated não é mais exibido (o grupo de administração do projeto é gerido só no painel central e não aparece no auto-serviço). */
1483
- adminGroupLastMemberWarning: string;
1484
1734
  /** Confirmação da exclusão; `{name}`. */
1485
1735
  confirmDeleteGroupHeading: string;
1486
1736
  confirmDeleteGroup: string;
1487
1737
  groupSaveError: string;
1488
1738
  membersSaveError: string;
1489
- /**
1490
- * Erros do argos-admin-server nos grupos e acessos do auto-serviço, pelo código (`error`) da resposta
1491
- * (ver `autoServiceErrorText`). `groupNotFound` é o 404 de grupo de outro projeto.
1492
- */
1493
- /** @deprecated não é mais exibido (a tela Aplicações voltou ao seletor + "Consultar", sem tabela). */
1494
- appsCaption: string;
1495
1739
  /** Tela Aplicações: o projeto ainda não tem aplicação (embaixo do seletor). */
1496
1740
  noApps: string;
1497
- /** @deprecated não é mais exibido (a tela Aplicações voltou ao seletor, sem tabela). */
1498
- colGrants: string;
1499
- /** @deprecated não é mais exibido (a tela Aplicações voltou ao seletor, sem tabela). */
1500
- openApp: string;
1501
1741
  /** Aba Tokens da aplicação: tokens de API (`x-api-token`), criar e revogar. */
1502
1742
  tabTokens: string;
1503
1743
  tokensCaption: string;
@@ -1575,6 +1815,10 @@ interface SpineMessages {
1575
1815
  /** Algum id de `allowed_type_ids` não é tipo de grupo do realm. */
1576
1816
  invalidAllowedTypes: string;
1577
1817
  };
1818
+ /**
1819
+ * Erros do argos-admin-server nos grupos e acessos do auto-serviço, pelo código (`error`) da resposta
1820
+ * (ver `autoServiceErrorText`). `groupNotFound` é o 404 de grupo de outro projeto.
1821
+ */
1578
1822
  groupErrors: {
1579
1823
  invalidType: string;
1580
1824
  adminTypeReserved: string;
@@ -1595,9 +1839,6 @@ interface SpineMessages {
1595
1839
  */
1596
1840
  autoServiceAudit: {
1597
1841
  title: string;
1598
- intro: string;
1599
- /** Aba da tela de Aplicações que abre a auditoria ali mesmo. */
1600
- tabApps: string;
1601
1842
  period: string;
1602
1843
  periodLastHour: string;
1603
1844
  period24h: string;
@@ -1639,7 +1880,6 @@ interface SpineMessages {
1639
1880
  topUsers: string;
1640
1881
  topApps: string;
1641
1882
  noTop: string;
1642
- eventCount: PluralMessage;
1643
1883
  failureCount: PluralMessage;
1644
1884
  deniedCount: PluralMessage;
1645
1885
  /** `{name}`. */
@@ -1705,11 +1945,6 @@ interface SpineMessages {
1705
1945
  traceError: string;
1706
1946
  traceEmpty: string;
1707
1947
  traceHidden: PluralMessage;
1708
- traceCurrent: string;
1709
- /** `{operation}`, `{time}`. */
1710
- openTraceEvent: string;
1711
- /** Introdução da tela no escopo `admin` (painel central, todos os apps). */
1712
- introAdmin: string;
1713
1948
  period6h: string;
1714
1949
  refresh: string;
1715
1950
  autoRefresh: string;
@@ -1905,6 +2140,345 @@ interface SpineMessages {
1905
2140
  loadErrorDetail: string;
1906
2141
  loadError: string;
1907
2142
  };
2143
+ /** Sugestões de melhoria: o botão da barra da página, "Minhas sugestões" e o kanban do auto-serviço. */
2144
+ suggestions: {
2145
+ button: string;
2146
+ buttonHint: string;
2147
+ modalTitle: string;
2148
+ intro: string;
2149
+ kind: string;
2150
+ kinds: Record<'melhoria' | 'nova_funcionalidade' | 'problema' | 'outro', string>;
2151
+ statuses: Record<'em_analise' | 'planejada' | 'em_desenvolvimento' | 'concluida' | 'recusada', string>;
2152
+ /** Status que saíram (a 0035 do Argos tirou o "Nova") e ainda aparecem no histórico antigo. */
2153
+ legacyStatuses: Record<'nova', string>;
2154
+ title: string;
2155
+ titlePlaceholder: string;
2156
+ titleRequired: string;
2157
+ description: string;
2158
+ descriptionHint: string;
2159
+ screen: string;
2160
+ screenHint: string;
2161
+ send: string;
2162
+ cancel: string;
2163
+ sent: string;
2164
+ sendError: string;
2165
+ similarHeading: string;
2166
+ similarHint: string;
2167
+ /** "+1" numa sugestão que outra pessoa já fez. */
2168
+ vote: string;
2169
+ voted: string;
2170
+ votes: PluralMessage;
2171
+ voteError: string;
2172
+ yours: string;
2173
+ mine: string;
2174
+ mineEmpty: string;
2175
+ mineError: string;
2176
+ loadMore: string;
2177
+ statusFilter: string;
2178
+ allStatuses: string;
2179
+ adminReply: string;
2180
+ /** `{date}`. */
2181
+ sentAt: string;
2182
+ /** O quadro. */
2183
+ boardLabel: string;
2184
+ search: string;
2185
+ kindFilter: string;
2186
+ allKinds: string;
2187
+ refresh: string;
2188
+ boardEmpty: string;
2189
+ boardEmptyHint: string;
2190
+ /** `{shown}` de `{total}` quando há filtro. */
2191
+ boardFiltered: string;
2192
+ loadError: string;
2193
+ moveError: string;
2194
+ removedAuthor: string;
2195
+ noScreen: string;
2196
+ noDescription: string;
2197
+ requestedBy: string;
2198
+ requestedAt: string;
2199
+ status: string;
2200
+ statusSaved: string;
2201
+ statusError: string;
2202
+ history: string;
2203
+ historyEmpty: string;
2204
+ /** `{actor}`, `{from}`, `{to}`. */
2205
+ eventStatus: string;
2206
+ /** `{actor}`. */
2207
+ eventComment: string;
2208
+ someone: string;
2209
+ comment: string;
2210
+ commentHint: string;
2211
+ commentSend: string;
2212
+ commentSent: string;
2213
+ commentError: string;
2214
+ commentRequired: string;
2215
+ /** Quadro x arquivo (recusadas e concluídas antigas). */
2216
+ viewLabel: string;
2217
+ viewBoard: string;
2218
+ viewArchive: string;
2219
+ kpis: string;
2220
+ /** As abertas (em análise, planejadas e em desenvolvimento). */
2221
+ kpiOpen: string;
2222
+ /** `{status}`, `{count}`: o detalhamento por status no indicador das abertas. */
2223
+ kpiStatusCount: string;
2224
+ /** `{days}`. */
2225
+ kpiDone: string;
2226
+ /** `{count}`: concluídas hoje. */
2227
+ kpiDoneToday: string;
2228
+ kpiDoneNoneToday: string;
2229
+ /** `{count}`: venceram ontem (passaram a vencidas hoje). */
2230
+ kpiOverdueTrend: string;
2231
+ kpiOverdueSteady: string;
2232
+ kpiSoon: string;
2233
+ kpiMineHint: string;
2234
+ kpiPriority: string;
2235
+ kpiPriorityNone: string;
2236
+ /** `{priority}`, `{count}`: cada parte da legenda (botão que filtra). */
2237
+ kpiPriorityPart: string;
2238
+ /** Barra de filtros e criação. */
2239
+ filters: string;
2240
+ moreFilters: string;
2241
+ /** `{count}`: filtros extras ligados. */
2242
+ moreFiltersActive: string;
2243
+ allBoardStatuses: string;
2244
+ /** `{status}`. */
2245
+ newTaskIn: string;
2246
+ newTaskOptions: string;
2247
+ /** Coluna: resumo, vazio. `{age}`. */
2248
+ columnOldest: string;
2249
+ columnOverdue: PluralMessage;
2250
+ columnEmpty: string;
2251
+ columnEmptyFiltered: string;
2252
+ /** `{days}` na de concluídas. */
2253
+ columnEmptyHints: Record<'em_analise' | 'planejada' | 'em_desenvolvimento' | 'concluida', string>;
2254
+ /** Duração curta ("4h 12min"): `{d}`, `{h}`, `{m}`. */
2255
+ duration: Record<'days' | 'hours' | 'minutes', string>;
2256
+ /** Cartão: `{date}`. */
2257
+ createdOn: string;
2258
+ /** `{date}`: prazo futuro (não é hoje nem amanhã). */
2259
+ dueWithin: string;
2260
+ dueLateDays: PluralMessage;
2261
+ screenFilter: string;
2262
+ allScreens: string;
2263
+ authorFilter: string;
2264
+ allAuthors: string;
2265
+ sort: string;
2266
+ sorts: Record<'position' | 'votes' | 'recent', string>;
2267
+ /** Com ordenação por votos ou data, arrastar só troca de coluna. */
2268
+ sortHint: string;
2269
+ clearFilters: string;
2270
+ topVoted: string;
2271
+ comments: PluralMessage;
2272
+ /** `{date}`: quando entrou no status atual. */
2273
+ statusSince: string;
2274
+ openScreen: string;
2275
+ statusChange: string;
2276
+ statusComment: string;
2277
+ statusCommentHint: string;
2278
+ statusApply: string;
2279
+ archiveLabel: string;
2280
+ archiveSearch: string;
2281
+ archiveEmpty: string;
2282
+ /** `{days}`. */
2283
+ archiveEmptyHint: string;
2284
+ archiveCount: PluralMessage;
2285
+ /** `{date}`: quando foi concluída ou recusada. */
2286
+ closedOn: Record<'concluida' | 'recusada', string>;
2287
+ pagination: string;
2288
+ reopen: string;
2289
+ reopened: string;
2290
+ reopenError: string;
2291
+ /** Quadro de trabalho (a equipe trabalha a sugestão como tarefa). */
2292
+ newTask: string;
2293
+ addTaskPlaceholder: string;
2294
+ taskCreated: string;
2295
+ createError: string;
2296
+ saveError: string;
2297
+ kpiMine: string;
2298
+ kpiOverdue: string;
2299
+ assigneeFilter: string;
2300
+ allAssignees: string;
2301
+ assigneeMine: string;
2302
+ assigneeNone: string;
2303
+ labelFilter: string;
2304
+ allLabels: string;
2305
+ priorityFilter: string;
2306
+ allPriorities: string;
2307
+ dueFilter: string;
2308
+ dueAny: string;
2309
+ dueOverdueFilter: string;
2310
+ dueSoonFilter: string;
2311
+ priority: string;
2312
+ priorities: Record<'urgente' | 'alta' | 'media' | 'baixa', string>;
2313
+ /** `{date}`. */
2314
+ dueOn: string;
2315
+ dueToday: string;
2316
+ dueTomorrow: string;
2317
+ /** `{date}`. */
2318
+ dueLate: string;
2319
+ /** `{done}`, `{total}`. */
2320
+ checklistSpoken: string;
2321
+ /** `{count}`: responsáveis além dos que aparecem. */
2322
+ moreAssignees: string;
2323
+ /** `{key}`. */
2324
+ cardMenu: string;
2325
+ menuStatus: string;
2326
+ menuAssignMe: string;
2327
+ menuCopyLink: string;
2328
+ menuCopyKey: string;
2329
+ menuLabel: string;
2330
+ menuNoLabels: string;
2331
+ menuPriority: string;
2332
+ menuCover: string;
2333
+ menuArchive: string;
2334
+ menuRestore: string;
2335
+ menuDelete: string;
2336
+ cover: string;
2337
+ coverSolid: string;
2338
+ coverGradient: string;
2339
+ coverRemove: string;
2340
+ /** `{n}`. */
2341
+ coverName: string;
2342
+ /** `{n}`. */
2343
+ gradientName: string;
2344
+ linkCopied: string;
2345
+ keyCopied: string;
2346
+ copyError: string;
2347
+ /** `{key}`. */
2348
+ deleteHeading: string;
2349
+ deleteMessage: string;
2350
+ deleteConfirm: string;
2351
+ deleted: string;
2352
+ archivedToast: string;
2353
+ restoredToast: string;
2354
+ assignedToMe: string;
2355
+ archivedTag: string;
2356
+ /** Detalhe da tarefa. */
2357
+ taskLabel: string;
2358
+ close: string;
2359
+ editTitle: string;
2360
+ editDescription: string;
2361
+ save: string;
2362
+ checklist: string;
2363
+ checklistAdd: string;
2364
+ checklistPlaceholder: string;
2365
+ checklistOnCard: string;
2366
+ checklistEmpty: string;
2367
+ /** `{text}`. */
2368
+ checklistRemove: string;
2369
+ /** `{text}`. */
2370
+ checklistUp: string;
2371
+ /** `{text}`. */
2372
+ checklistDown: string;
2373
+ tabComments: string;
2374
+ tabActivity: string;
2375
+ commentsEmpty: string;
2376
+ activityEmpty: string;
2377
+ commentInternal: string;
2378
+ internalTag: string;
2379
+ /** `{actor}`, `{from}`, `{to}` por campo do evento 'change' (sufixo `_removed` = o valor saiu). */
2380
+ activity: Record<'created' | 'title' | 'description' | 'kind' | 'priority' | 'start_date' | 'start_date_removed' | 'due_date' | 'due_date_removed' | 'cover' | 'cover_removed' | 'checklist_on_card' | 'screen' | 'assignee_added' | 'assignee_removed' | 'watcher_added' | 'watcher_removed' | 'label_added' | 'label_removed' | 'checklist_added' | 'checklist_done' | 'checklist_undone' | 'checklist_renamed' | 'checklist_removed' | 'archived' | 'restored' | 'merged' | 'merged_here' | 'unmerged' | 'unmerged_here' | 'other', string>;
2381
+ assignees: string;
2382
+ assignMe: string;
2383
+ addAssignee: string;
2384
+ watchers: string;
2385
+ addWatcher: string;
2386
+ /** `{name}`. */
2387
+ removePerson: string;
2388
+ peopleSearch: string;
2389
+ peopleEmpty: string;
2390
+ nobody: string;
2391
+ reporter: string;
2392
+ originUser: string;
2393
+ originTeam: string;
2394
+ startDate: string;
2395
+ dueDate: string;
2396
+ labels: string;
2397
+ addLabel: string;
2398
+ /** `{name}`. */
2399
+ createLabel: string;
2400
+ labelColor: string;
2401
+ noLabels: string;
2402
+ screenOrigin: string;
2403
+ votesField: string;
2404
+ createdAt: string;
2405
+ updatedAt: string;
2406
+ /** `{when}`, `{actor}`. */
2407
+ lastChange: string;
2408
+ /** `{when}`. */
2409
+ lastChangeNoActor: string;
2410
+ key: string;
2411
+ copyKey: string;
2412
+ newTaskHeading: string;
2413
+ createTask: string;
2414
+ draftHint: string;
2415
+ assignMeOnCreate: string;
2416
+ /** "Sugestões do app": a gaveta com as de todo mundo no app (Todas) e as da pessoa (Minhas). */
2417
+ appSuggestions: string;
2418
+ /** Nome acessível do seletor Todas | Minhas. */
2419
+ listView: string;
2420
+ tabAll: string;
2421
+ tabMine: string;
2422
+ appSearch: string;
2423
+ /** Filtro rápido: só as pedidas na tela atual. */
2424
+ thisScreen: string;
2425
+ appSorts: Record<'votes' | 'recent', string>;
2426
+ appEmpty: string;
2427
+ appEmptyHint: string;
2428
+ appEmptyFiltered: string;
2429
+ appError: string;
2430
+ /** `{count}`: o botão de apoio, antes e depois de apoiar. */
2431
+ support: string;
2432
+ /** `{count}`. */
2433
+ supported: string;
2434
+ /** Dica do apoio desligado na sugestão da própria pessoa. */
2435
+ ownSupportHint: string;
2436
+ /** O detalhe só de leitura (clicar no título expande o item). */
2437
+ publicComments: string;
2438
+ publicCommentsEmpty: string;
2439
+ commentsError: string;
2440
+ moreComments: string;
2441
+ appPagination: string;
2442
+ /** Agrupar (a equipe junta pedidos repetidos numa sugestão só). */
2443
+ menuMerge: string;
2444
+ /** `{key}`. */
2445
+ mergeHeading: string;
2446
+ mergeIntro: string;
2447
+ mergeSearch: string;
2448
+ mergeNone: string;
2449
+ mergeHasMerged: string;
2450
+ /** `{votes}` (o plural de `votes`), `{reporters}` (o de `reportersCount`), `{key}`: o que passa para o destino. */
2451
+ mergePreview: string;
2452
+ mergeCalculating: string;
2453
+ mergePreviewError: string;
2454
+ reportersCount: PluralMessage;
2455
+ /** `{key}`, `{target}`. */
2456
+ mergeConfirmHeading: string;
2457
+ mergeConfirmMessage: string;
2458
+ mergeConfirm: string;
2459
+ /** `{key}`, `{target}`. */
2460
+ mergedToast: string;
2461
+ mergeError: string;
2462
+ mergedTag: string;
2463
+ /** `{key}`: o aviso na agrupada. */
2464
+ mergedInto: string;
2465
+ mergedIntoHint: string;
2466
+ /** `{key}`. */
2467
+ openMerged: string;
2468
+ unmerge: string;
2469
+ /** `{key}`: nome do botão de desagrupar uma das agrupadas. */
2470
+ unmergeLabel: string;
2471
+ /** `{key}`. */
2472
+ unmergedToast: string;
2473
+ reporters: string;
2474
+ reporterAuthor: string;
2475
+ /** `{key}`: o relator veio desta agrupada. */
2476
+ reporterVia: string;
2477
+ mergedHere: string;
2478
+ /** "Minhas": `{key}` (a da pessoa), `{target}` (a principal). */
2479
+ mergedFrom: string;
2480
+ mergedFromHint: string;
2481
+ };
1908
2482
  }
1909
2483
  declare const SPINE_MESSAGES_PT_BR: SpineMessages;
1910
2484
 
@@ -1939,6 +2513,6 @@ declare const SPINE_MESSAGES: InjectionToken<SpineMessages>;
1939
2513
  /** Sobrescreve textos do spine e/ou acrescenta idiomas. O idioma em si vem de `provideHermesI18n`. */
1940
2514
  declare function provideSpineMessages(config: SpineI18nConfig): Provider;
1941
2515
 
1942
- export { APP_PACKAGE_INFO, DensityService, HERMES_DS_IMPORTS, SPINE_ADMIN_API, SPINE_CONFIG, SPINE_DEFAULT_LOGO, SPINE_I18N_CONFIG, SPINE_IDLE_OPTIONS, SPINE_MESSAGES, SPINE_MESSAGES_EN, SPINE_MESSAGES_ES, SPINE_MESSAGES_PT_BR, SPINE_NEWS, SPINE_USER_STORAGE_KEYS, SpinePreferencesService, SpineQuickAccessService, SpineUserStorage, ThemePresetService, ThemeService, applyRuntimeEnvironment, applySpineFavicon, currentSpineMessages, mergeRouteTree, provideSpineMessages, provideSpineNews, provideUi, resolveSpineLogo, routerIdOf, spineRoutesOf };
1943
- export type { DensitySetting, PackageInfo, QuickAccessItem, Route, RuntimeEnvironmentInfo, RuntimeEnvironmentShape, SpineConfig, SpineFeatures, SpineHourCyclePreference, SpineI18nConfig, SpineLogoConfig, SpineLogoSources, SpineMcpServer, SpineMessages, SpineMessagesOverride, SpineNewsIllustration, SpineNewsItem, SpineNewsSlide, SpineNoticeType, SpineStartPagePreference, SpineUserStorageKey, SpineWeekStartPreference };
2516
+ export { APP_PACKAGE_INFO, DensityService, HERMES_DS_IMPORTS, SPINE_ADMIN_API, SPINE_CONFIG, SPINE_DEFAULT_LOGO, SPINE_I18N_CONFIG, SPINE_ICONS, SPINE_IDLE_OPTIONS, SPINE_MESSAGES, SPINE_MESSAGES_EN, SPINE_MESSAGES_ES, SPINE_MESSAGES_PT_BR, SPINE_USER_STORAGE_KEYS, SpinePreferencesService, SpineQuickAccessService, SpineUserStorage, ThemePresetService, ThemeService, applyRuntimeEnvironment, applySpineFavicon, currentSpineMessages, mergeRouteTree, provideSpineMessages, provideUi, resolveSpineLogo, routerIdOf, spineRoutesOf };
2517
+ export type { DensitySetting, PackageInfo, QuickAccessItem, Route, RuntimeEnvironmentInfo, RuntimeEnvironmentShape, SpineConfig, SpineFeatures, SpineHourCyclePreference, SpineI18nConfig, SpineLogoConfig, SpineLogoSources, SpineMcpServer, SpineMessages, SpineMessagesOverride, SpineNoticeType, SpineStartPagePreference, SpineUserStorageKey, SpineWeekStartPreference };
1944
2518
  //# sourceMappingURL=trismegisto-spine.d.ts.map