@trismegisto/spine 3.3.3 → 3.3.4

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 (47) hide show
  1. package/README.md +15 -2
  2. package/fesm2022/trismegisto-spine-audit.mjs +6 -6
  3. package/fesm2022/trismegisto-spine-audit.mjs.map +1 -1
  4. package/fesm2022/{trismegisto-spine-auto-service-auto-service-client.component-BAfeLyTB.mjs → trismegisto-spine-auto-service-auto-service-client.component-kAXaCM5W.mjs} +8 -8
  5. package/fesm2022/{trismegisto-spine-auto-service-auto-service-client.component-BAfeLyTB.mjs.map → trismegisto-spine-auto-service-auto-service-client.component-kAXaCM5W.mjs.map} +1 -1
  6. package/fesm2022/{trismegisto-spine-auto-service-auto-service-groups.component-BYjIQ9ID.mjs → trismegisto-spine-auto-service-auto-service-groups.component-DE2QIGRH.mjs} +251 -85
  7. package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-DE2QIGRH.mjs.map +1 -0
  8. package/fesm2022/{trismegisto-spine-auto-service-auto-service-news-page.component-CBemH4hr.mjs → trismegisto-spine-auto-service-auto-service-news-page.component-BW7BJ0oD.mjs} +2 -2
  9. package/fesm2022/{trismegisto-spine-auto-service-auto-service-news-page.component-CBemH4hr.mjs.map → trismegisto-spine-auto-service-auto-service-news-page.component-BW7BJ0oD.mjs.map} +1 -1
  10. package/fesm2022/{trismegisto-spine-auto-service-auto-service-ratings-page.component-C_THGTkw.mjs → trismegisto-spine-auto-service-auto-service-ratings-page.component-CHPU-QLJ.mjs} +2 -2
  11. package/fesm2022/{trismegisto-spine-auto-service-auto-service-ratings-page.component-C_THGTkw.mjs.map → trismegisto-spine-auto-service-auto-service-ratings-page.component-CHPU-QLJ.mjs.map} +1 -1
  12. package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-CkiCTmXD.mjs +3733 -0
  13. package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-CkiCTmXD.mjs.map +1 -0
  14. package/fesm2022/{trismegisto-spine-auto-service-auto-service.component-QsIQ61w2.mjs → trismegisto-spine-auto-service-auto-service.component-D58Ht9PH.mjs} +7 -7
  15. package/fesm2022/{trismegisto-spine-auto-service-auto-service.component-QsIQ61w2.mjs.map → trismegisto-spine-auto-service-auto-service.component-D58Ht9PH.mjs.map} +1 -1
  16. package/fesm2022/{trismegisto-spine-auto-service-groups.technical-_jQrg1Qh.mjs → trismegisto-spine-auto-service-groups.technical-CB1D3ANC.mjs} +12 -3
  17. package/fesm2022/trismegisto-spine-auto-service-groups.technical-CB1D3ANC.mjs.map +1 -0
  18. package/fesm2022/{trismegisto-spine-auto-service-groups.usage-OvWjNeeT.mjs → trismegisto-spine-auto-service-groups.usage-De2MhlE7.mjs} +7 -2
  19. package/fesm2022/{trismegisto-spine-auto-service-groups.usage-OvWjNeeT.mjs.map → trismegisto-spine-auto-service-groups.usage-De2MhlE7.mjs.map} +1 -1
  20. package/fesm2022/{trismegisto-spine-auto-service-suggestions.technical-BtUK6sKD.mjs → trismegisto-spine-auto-service-suggestions.technical-CGBBzAR8.mjs} +14 -1
  21. package/fesm2022/{trismegisto-spine-auto-service-suggestions.technical-BtUK6sKD.mjs.map → trismegisto-spine-auto-service-suggestions.technical-CGBBzAR8.mjs.map} +1 -1
  22. package/fesm2022/{trismegisto-spine-auto-service-suggestions.usage-BwO9Hjsx.mjs → trismegisto-spine-auto-service-suggestions.usage-DnAJS-Z0.mjs} +26 -3
  23. package/fesm2022/trismegisto-spine-auto-service-suggestions.usage-DnAJS-Z0.mjs.map +1 -0
  24. package/fesm2022/trismegisto-spine-auto-service.mjs +24 -11
  25. package/fesm2022/trismegisto-spine-auto-service.mjs.map +1 -1
  26. package/fesm2022/{trismegisto-spine-layout-suggestions-page.component-xI2gDMok.mjs → trismegisto-spine-layout-suggestions-page.component-CEKMqera.mjs} +3 -3
  27. package/fesm2022/{trismegisto-spine-layout-suggestions-page.component-xI2gDMok.mjs.map → trismegisto-spine-layout-suggestions-page.component-CEKMqera.mjs.map} +1 -1
  28. package/fesm2022/{trismegisto-spine-layout-trismegisto-spine-layout-Clphrsgc.mjs → trismegisto-spine-layout-trismegisto-spine-layout-DiAfxIGP.mjs} +428 -93
  29. package/fesm2022/trismegisto-spine-layout-trismegisto-spine-layout-DiAfxIGP.mjs.map +1 -0
  30. package/fesm2022/trismegisto-spine-layout.mjs +1 -1
  31. package/fesm2022/trismegisto-spine-side-panel.mjs +1 -1
  32. package/fesm2022/trismegisto-spine-side-panel.mjs.map +1 -1
  33. package/fesm2022/trismegisto-spine.mjs +528 -10
  34. package/fesm2022/trismegisto-spine.mjs.map +1 -1
  35. package/package.json +6 -6
  36. package/types/trismegisto-spine-auto-service.d.ts +20 -4
  37. package/types/trismegisto-spine-auto-service.d.ts.map +1 -1
  38. package/types/trismegisto-spine-layout.d.ts +327 -63
  39. package/types/trismegisto-spine-layout.d.ts.map +1 -1
  40. package/types/trismegisto-spine.d.ts +221 -3
  41. package/types/trismegisto-spine.d.ts.map +1 -1
  42. package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-BYjIQ9ID.mjs.map +0 -1
  43. package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-mMjE3JOL.mjs +0 -2179
  44. package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-mMjE3JOL.mjs.map +0 -1
  45. package/fesm2022/trismegisto-spine-auto-service-groups.technical-_jQrg1Qh.mjs.map +0 -1
  46. package/fesm2022/trismegisto-spine-auto-service-suggestions.usage-BwO9Hjsx.mjs.map +0 -1
  47. package/fesm2022/trismegisto-spine-layout-trismegisto-spine-layout-Clphrsgc.mjs.map +0 -1
@@ -3,11 +3,11 @@ import { OnDestroy, InjectionToken, Signal, OnInit, Type, Provider, TemplateRef,
3
3
  import { Router } from '@angular/router';
4
4
  import * as _trismegisto_spine from '@trismegisto/spine';
5
5
  import { Route, ThemeService, ThemePresetService, DensityService, SpineConfig, SpinePreferencesService, SpineHourCyclePreference, SpineStartPagePreference, SpineNoticeType, SpineMcpServer, SpineFeatures } from '@trismegisto/spine';
6
- import { Subject } from 'rxjs';
6
+ import { Subject, Observable } from 'rxjs';
7
7
  import * as _trismegisto_angular from '@trismegisto/angular';
8
- import { HermesShortcutItem, WorkspaceStore, TabItem, MenuItem, HermesCommand, SidebarNode, HermesThemeMode, HermesDensity, SegmentedOption, HermesSidebarService, ComboboxOption, BreadcrumbItem, TagColor } from '@trismegisto/angular';
8
+ import { HermesShortcutItem, WorkspaceGridLimits, WorkspaceStore, TabItem, MenuItem, HermesCommand, SidebarNode, ContextMenuDirective, HermesThemeMode, HermesDensity, SegmentedOption, HermesSidebarService, ComboboxOption, BreadcrumbItem, TagColor } from '@trismegisto/angular';
9
9
  import * as _trismegisto_primitives from '@trismegisto/primitives';
10
- import { formatMessage, ShortcutDisplay, HermesMotionPreference, Weekday, AlertVariant, PaginationState } from '@trismegisto/primitives';
10
+ import { WorkspaceStore as WorkspaceStore$1, formatMessage, MenuItem as MenuItem$1, ShortcutDisplay, HermesMotionPreference, Weekday, AlertVariant, PaginationState } from '@trismegisto/primitives';
11
11
  import * as _orfeu_angular_core from '@orfeu/angular/core';
12
12
  import { AuthorizationService, ViewService, UserProfile, AppDef, RealmAppsService } from '@orfeu/angular/core';
13
13
  import * as _trismegisto_tokens from '@trismegisto/tokens';
@@ -190,22 +190,24 @@ declare class SpineNewsService {
190
190
  interface ShortcutActions {
191
191
  navigate?: (url: string) => void;
192
192
  toggleTheme?: () => void;
193
- toggleFullscreen?: () => void;
194
- logout?: () => void;
195
193
  openSettings?: () => void;
194
+ toggleSidebar?: () => void;
196
195
  }
197
196
  /**
198
197
  * Atalhos de teclado globais do sistema, sobre o `HermesShortcutService` da lib (um listener só,
199
198
  * sequência `G H`, conflito, campo editável, interruptor de tecla única da WCAG 2.1.4).
200
199
  *
201
- * `setActions` registra os atalhos do shell: `G H` (Home), `G 1`…`G 9` (favoritos), `Mod+,`
202
- * (configurações), `Mod+.` (tema), `Mod+Shift+F` (tela cheia), `Mod+Shift+L` (sair) e `?` (painel
203
- * de atalhos, via `help$`). Os combos com `Mod` valem também com o foco num campo; `G …` e `?`, não.
200
+ * `setActions` registra os atalhos do shell: `G H` (Home), `G 1`…`G 9` (favoritos), `G T` (tema), `Mod+B` (menu
201
+ * lateral), `Mod+,` (configurações) e `?` (painel de atalhos, via `help$`). `Mod+,` vale também com o foco num campo;
202
+ * os demais, não (`Mod+B` num editor continua sendo negrito).
203
+ *
204
+ * Sem atalho de propósito: sair (um deslize perderia o que estava sendo digitado; fica no menu do perfil) e tela cheia
205
+ * (o navegador já tem `F11`, e o botão fica no cabeçalho).
204
206
  *
205
207
  * O painel (`spine-shortcuts-cheatsheet` e a seção Atalhos das configurações) usa o
206
208
  * `hm-shortcut-list` com `panelItems()`: tudo o que está registrado no `HermesShortcutService`
207
209
  * (inclusive o que o app liga com `[hmShortcut]`) mais o que o spine só exibe e outra peça dispara
208
- * (`Mod+K` do `hm-header`, `Alt+←/→` do navegador, `Esc` dos diálogos).
210
+ * (`Mod+K` e `/` do `hm-header`, voltar/avançar do navegador, `Esc` dos diálogos).
209
211
  */
210
212
  declare class ShortcutService implements OnDestroy {
211
213
  private actions;
@@ -280,6 +282,8 @@ interface SpineTab {
280
282
  }
281
283
  declare const SPINE_TAB: InjectionToken<SpineTab>;
282
284
 
285
+ /** Limite da grade de painéis do shell: no máximo 2 lado a lado e 2 empilhados (os quatro cantos da tela). */
286
+ declare const SPINE_WORKSPACE_LIMITS: WorkspaceGridLimits;
283
287
  /** O caminho de um endereço (sem query nem fragmento). */
284
288
  declare function spinePathOf(url: string): string;
285
289
  /** A query de um endereço, como objeto. */
@@ -296,7 +300,12 @@ interface SpineOpenTabOptions {
296
300
  * aberta, e trocar a seção dentro dela não abre outra. Sem `match`, todos os parâmetros do endereço identificam.
297
301
  */
298
302
  match?: readonly string[];
299
- /** Abre num painel novo ao lado do focado (para comparar), em vez de no próprio painel focado. */
303
+ /**
304
+ * Abre num painel novo ao lado do focado (para comparar), em vez de no próprio painel focado. Só vale com a
305
+ * preferência "Dividir abas" ligada (`SpinePreferencesService.splitTabs`); desligada (o padrão), a aba abre no painel
306
+ * focado, como sem `beside`. No limite da grade (`SPINE_WORKSPACE_LIMITS`, 2 colunas), abre no painel que já está
307
+ * ao lado, sem dividir.
308
+ */
300
309
  beside?: boolean;
301
310
  }
302
311
  /**
@@ -318,10 +327,19 @@ interface SpineOpenTabOptions {
318
327
  * 3. outra aba do painel já está nesse endereço → ela é ativada;
319
328
  * 4. senão → a aba ativa passa a ser a da tela nova (o comportamento de sempre).
320
329
  * `openTab` abre (ou foca, em qualquer painel) a aba de um endereço com parâmetros.
330
+ *
331
+ * **Dividir abas é preferência da pessoa** (`SpinePreferencesService.splitTabs`, desligada por padrão): o shell só
332
+ * deixa dividir a área em painéis com ela ligada (`split`). Desligada — ao carregar ou ao desligar —, um arranjo com
333
+ * vários painéis (salvo no navegador ou feito antes) é fundido num painel só, sem perder aba (`mergePanels`).
321
334
  */
322
335
  declare class SpineWorkspaceNavService {
323
336
  private readonly router;
324
337
  private readonly viewService;
338
+ private readonly preferences;
339
+ /** A pessoa pode dividir a área de abas em painéis (a preferência "Dividir abas"). */
340
+ readonly split: _angular_core.Signal<boolean>;
341
+ /** Até onde dá para dividir (o shell passa para o `hm-workspace`; `openTab` com `beside` respeita). */
342
+ readonly limits: WorkspaceGridLimits;
325
343
  readonly store: WorkspaceStore;
326
344
  private readonly state;
327
345
  readonly root: _angular_core.Signal<_trismegisto_primitives.PanelNode>;
@@ -358,13 +376,19 @@ declare class SpineWorkspaceNavService {
358
376
  * voltam com o nome da rota (que acompanha o idioma).
359
377
  */
360
378
  private restoreTab;
379
+ /**
380
+ * Junta todos os painéis no focado, sem perder aba: as abas ficam na ordem dos painéis (da esquerda para a direita,
381
+ * de cima para baixo), uma aba repetida em dois painéis vira uma só (vale a do focado), e a aba ativa do painel focado
382
+ * continua a ativa (`WorkspaceStore.mergePanels`). Com um painel só, não faz nada.
383
+ */
384
+ mergePanels(): void;
361
385
  /** O `+` de um painel: abre a home ali, como um navegador. */
362
386
  openNewTab(panelId: string): void;
363
387
  /**
364
388
  * Abre (ou foca) a aba de um endereço com parâmetros — um registro por aba na mesma tela:
365
389
  * `openTab('/vendas/pedidos?pedido=123&secao=itens', { label: 'Pedido 123', match: ['pedido'] })`.
366
390
  * Se alguma aba (em qualquer painel) já tem essa identidade, ela é focada e passa a esse endereço; senão abre uma
367
- * no painel focado (ou num painel novo ao lado, com `beside`). Só abre o que a view da pessoa permite (a mesma
391
+ * no painel focado (ou num painel novo ao lado, com `beside` e a divisão ligada). Só abre o que a view da pessoa permite (a mesma
368
392
  * regra do menu e do `ViewGuard`); fora dela, não faz nada.
369
393
  */
370
394
  openTab(url: string, options?: SpineOpenTabOptions): void;
@@ -383,6 +407,79 @@ declare class SpineWorkspaceNavService {
383
407
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineWorkspaceNavService>;
384
408
  }
385
409
 
410
+ /**
411
+ * Saída da sessão pelo shell: todo botão/atalho de sair do spine passa por aqui (menu do perfil, painel de
412
+ * configurações, tela `/blocked`).
413
+ *
414
+ * - Assina `logoutFailed$` do `@orfeu/angular` (1.3.x) uma vez só: quando o logout no Argos falha (a lib repete uma
415
+ * vez e mantém a sessão), mostra o aviso de erro `session.logoutFailed` (`hm-alert` de erro, `role="alert"`). Vale
416
+ * também para um `logout()` chamado direto pelo app.
417
+ * - `logout()` aguarda o resultado: só apaga os históricos do usuário (`SpineUserStorage.clearHistory()`) quando a
418
+ * saída deu certo. Com falha, nada muda: a pessoa continua na tela, com a sessão e os recentes.
419
+ * - `pending` fica `true` enquanto a saída está em andamento e sempre volta a `false` (os botões não travam).
420
+ *
421
+ * Com `@orfeu/angular` 1.0.x (sem `logoutFailed$`, `logout()` sem retorno) a saída conta como concluída, como antes.
422
+ */
423
+ declare class SpineLogoutService {
424
+ private readonly auth;
425
+ private readonly userStorage;
426
+ private readonly notifications;
427
+ private readonly messages;
428
+ /** `true` quando a lib avisa a falha por `logoutFailed$` (então o aviso sai por lá, uma vez). */
429
+ private readonly failureStream;
430
+ private inFlight;
431
+ /** Saída em andamento (o botão mostra "saindo…" / fica desabilitado). */
432
+ readonly pending: _angular_core.WritableSignal<boolean>;
433
+ constructor();
434
+ /**
435
+ * Sai da sessão. Resolve `true` quando saiu (o `@orfeu/angular` já navega para o `/logoff`) e `false` quando o
436
+ * Argos não confirmou: a sessão continua e o aviso de erro aparece. Nunca rejeita. Cliques repetidos durante a
437
+ * saída reaproveitam a mesma tentativa.
438
+ */
439
+ logout(): Promise<boolean>;
440
+ private run;
441
+ private notifyFailure;
442
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineLogoutService, never>;
443
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineLogoutService>;
444
+ }
445
+
446
+ /**
447
+ * Registra a verificação de alterações da tela, presa à aba do workspace em que ela está (`SPINE_TAB`):
448
+ * com `SpineFeatures.unsavedChanges` ligado, fechar ESSA aba (ou o painel dela, ou "fechar as outras") e
449
+ * trocar de tela dentro dela pergunta antes. Chame num contexto de injeção (campo da tela); a verificação
450
+ * sai sozinha quando a tela é destruída.
451
+ *
452
+ * ```ts
453
+ * readonly #unsaved = registerSpineUnsavedChanges(() => this.form.dirty);
454
+ * ```
455
+ *
456
+ * Sem o recurso ligado, continua registrando no `HermesUnsavedChangesService` (o `hermesUnsavedChangesGuard`
457
+ * de uma rota do app enxerga), mas o shell não pergunta nada.
458
+ */
459
+ declare function registerSpineUnsavedChanges(check: () => boolean): () => void;
460
+ /**
461
+ * O lado do shell do aviso de alterações não salvas (`SpineFeatures.unsavedChanges`, desligado por padrão).
462
+ * Ligado: o `hm-workspace` recebe um store que pergunta antes de fechar aba com alteração; trocar de tela
463
+ * dentro da aba pergunta também; e o navegador avisa ao recarregar/fechar a página. Desligado: `store` é o
464
+ * mesmo do `SpineWorkspaceNavService` e nada muda.
465
+ */
466
+ declare class SpineUnsavedChangesService {
467
+ private readonly config;
468
+ private readonly unsaved;
469
+ private readonly nav;
470
+ /** O recurso está ligado no app. */
471
+ readonly enabled: boolean;
472
+ /** O store que o shell passa para o `hm-workspace`. */
473
+ readonly store: WorkspaceStore$1;
474
+ /** Liga o aviso do navegador (só com o recurso ligado). Devolve a função que desliga. */
475
+ start(): () => void;
476
+ /** Pode trocar a tela da aba ativa do painel? Sem o recurso ou sem alteração nela, `true` na hora. */
477
+ canReplaceActive(panelId: string): boolean | Promise<boolean>;
478
+ private guard;
479
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineUnsavedChangesService, never>;
480
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineUnsavedChangesService>;
481
+ }
482
+
386
483
  /**
387
484
  * Shell do spine — MESMA estrutura do `docs/website`'s `app.component.html`/`.scss` (decisão de
388
485
  * 2026-09-28, ver `hefesto-migration-plan.md`): `.shell` com altura de viewport de verdade
@@ -412,13 +509,19 @@ declare class LayoutComponent implements OnInit {
412
509
  private readonly preferences;
413
510
  protected readonly workspace: SpineWorkspaceNavService;
414
511
  private readonly settings;
512
+ private readonly sidebar;
415
513
  /** Também liga, uma vez, o aviso de falha do logout (`logoutFailed$` do `@orfeu/angular`). */
416
- private readonly logoutService;
514
+ protected readonly logoutNotice: SpineLogoutService;
417
515
  /** Recursos opcionais (`SpineConfig.features`): cada serviço não faz nada com o seu recurso desligado. */
418
516
  private readonly idle;
419
517
  private readonly startPage;
420
518
  private readonly accountPreferences;
421
519
  protected readonly setup: SpineInitialSetupService;
520
+ /** Aviso de alterações não salvas (SpineFeatures.unsavedChanges): sem o recurso, `unsaved.store` é o próprio `workspace.store`. */
521
+ protected readonly unsaved: SpineUnsavedChangesService;
522
+ /** SpineFeatures.skipLink. */
523
+ protected readonly skipLink: boolean;
524
+ private readonly destroyRef;
422
525
  /** Esconde sidebar e área de trabalho quando a rota ATIVA (do Router real, ver
423
526
  * `router.events` abaixo) é a de sem-permissão — nesse caso não existe menu/página válido
424
527
  * como contexto. Note que isto reflete só a URL do painel FOCADO (dona do Router real); um
@@ -429,8 +532,12 @@ declare class LayoutComponent implements OnInit {
429
532
  constructor(router: Router, theme: ThemeService, shortcuts: ShortcutService, news: SpineNewsService);
430
533
  private matchesNoPermission;
431
534
  ngOnInit(): void;
535
+ /**
536
+ * `Mod+B`. Tela estreita: a gaveta. Fixo e compacto: troca um pelo outro (é a preferência da pessoa, fica gravada).
537
+ * Automático: a coluna abre por cima e fica até o próximo `Mod+B`, sem mudar a preferência.
538
+ */
539
+ private toggleSidebar;
432
540
  protected onLocalNavigate(panelId: string, href: string): void;
433
- private toggleFullscreen;
434
541
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutComponent, never>;
435
542
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutComponent, "spine-layout", never, {}, {}, never, never, true, never>;
436
543
  }
@@ -534,7 +641,7 @@ declare class HeaderComponent implements OnInit {
534
641
  protected readonly searchIcons: Readonly<Record<string, string>>;
535
642
  /** Achata a árvore de rotas em itens navegáveis (com trilha de ancestrais). */
536
643
  private flattenRoutes;
537
- /** Chamado pelo `(searchRequested)` do `hm-header` (clique no campo ou `Ctrl K`, já tratado por ele): abre a paleta. */
644
+ /** Chamado pelo `(searchRequested)` do `hm-header` (clique no campo, `Ctrl K` ou `/`, já tratados por ele): abre a paleta. */
538
645
  onSearchRequested(): void;
539
646
  /**
540
647
  * Comandos da paleta. Cada tela aparece uma vez: favoritos primeiro, depois os abertos há pouco que não são
@@ -658,12 +765,18 @@ declare class SidebarComponent {
658
765
  modules: string;
659
766
  moduleNavigation: string;
660
767
  apps: string;
768
+ openInNewTab: string;
661
769
  };
662
770
  protected readonly fmt: typeof formatMessage;
663
771
  private readonly workspace;
664
772
  private readonly viewService;
665
773
  private readonly authService;
666
774
  private readonly realmApps;
775
+ private readonly location;
776
+ private readonly column;
777
+ protected readonly pageMenu: readonly MenuItem$1[];
778
+ /** Endereço da página em que o menu de contexto foi aberto. */
779
+ private menuPage;
667
780
  /** Aplicações do realm (o app atual já vem excluído pelo backend) — exibidas só no mobile. */
668
781
  protected readonly apps: _angular_core.WritableSignal<AppDef[]>;
669
782
  private readonly currentView;
@@ -685,6 +798,11 @@ declare class SidebarComponent {
685
798
  * do módulo" pra mostrar. */
686
799
  private readonly wantsModules;
687
800
  protected readonly viewingModules: _angular_core.Signal<boolean>;
801
+ /** Botão direito (ou Shift+F10/tecla Menu, que o navegador traduz em `contextmenu`) numa página do menu. Grupo e
802
+ * entrada de módulo não são páginas: ali o menu nativo continua valendo. */
803
+ protected onContextMenu(event: MouseEvent, menu: ContextMenuDirective): void;
804
+ protected onPageMenuClosed(): void;
805
+ protected openPageInNewTab(): void;
688
806
  /** Sem teto artificial de nível de grupo — o template não enxerga o global `Infinity`, só
689
807
  * membros da classe. Ver comentário no `.html`: o backend já limita a árvore sozinho. */
690
808
  protected readonly maxDepth: number;
@@ -730,42 +848,6 @@ declare class SpineConnectionBannerComponent {
730
848
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SpineConnectionBannerComponent, "spine-connection-banner", never, {}, {}, never, never, true, never>;
731
849
  }
732
850
 
733
- /**
734
- * Saída da sessão pelo shell: todo botão/atalho de sair do spine passa por aqui (menu do perfil, painel de
735
- * configurações, `Mod+Shift+L`, tela `/blocked`).
736
- *
737
- * - Assina `logoutFailed$` do `@orfeu/angular` (1.3.x) uma vez só: quando o logout no Argos falha (a lib repete uma
738
- * vez e mantém a sessão), mostra o aviso de erro `session.logoutFailed` (`hm-alert` de erro, `role="alert"`). Vale
739
- * também para um `logout()` chamado direto pelo app.
740
- * - `logout()` aguarda o resultado: só apaga os históricos do usuário (`SpineUserStorage.clearHistory()`) quando a
741
- * saída deu certo. Com falha, nada muda: a pessoa continua na tela, com a sessão e os recentes.
742
- * - `pending` fica `true` enquanto a saída está em andamento e sempre volta a `false` (os botões não travam).
743
- *
744
- * Com `@orfeu/angular` 1.0.x (sem `logoutFailed$`, `logout()` sem retorno) a saída conta como concluída, como antes.
745
- */
746
- declare class SpineLogoutService {
747
- private readonly auth;
748
- private readonly userStorage;
749
- private readonly notifications;
750
- private readonly messages;
751
- /** `true` quando a lib avisa a falha por `logoutFailed$` (então o aviso sai por lá, uma vez). */
752
- private readonly failureStream;
753
- private inFlight;
754
- /** Saída em andamento (o botão mostra "saindo…" / fica desabilitado). */
755
- readonly pending: _angular_core.WritableSignal<boolean>;
756
- constructor();
757
- /**
758
- * Sai da sessão. Resolve `true` quando saiu (o `@orfeu/angular` já navega para o `/logoff`) e `false` quando o
759
- * Argos não confirmou: a sessão continua e o aviso de erro aparece. Nunca rejeita. Cliques repetidos durante a
760
- * saída reaproveitam a mesma tentativa.
761
- */
762
- logout(): Promise<boolean>;
763
- private run;
764
- private notifyFailure;
765
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpineLogoutService, never>;
766
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<SpineLogoutService>;
767
- }
768
-
769
851
  /** Um cartão do essencial: o texto tem `{key}` onde entra a tecla (desenhada como `<kbd>`). */
770
852
  interface EssentialCard {
771
853
  readonly id: string;
@@ -835,6 +917,9 @@ declare class SpineInitialSetupComponent {
835
917
  sidebarAuto: string;
836
918
  sidebarFixed: string;
837
919
  sidebarCompact: string;
920
+ splitTabs: string;
921
+ splitTabsDescription: string;
922
+ splitTabsKeywords: string;
838
923
  region: string;
839
924
  regionKeywords: string;
840
925
  language: string;
@@ -1034,6 +1119,7 @@ declare class ShortcutsCheatsheetComponent implements OnInit, OnDestroy {
1034
1119
  goFavorite: string;
1035
1120
  history: string;
1036
1121
  openSettings: string;
1122
+ toggleSidebar: string;
1037
1123
  toggleTheme: string;
1038
1124
  fullscreen: string;
1039
1125
  logout: string;
@@ -1136,12 +1222,14 @@ interface SpineAccountPreferencesDoc {
1136
1222
  startPage?: SpineStartPagePreference;
1137
1223
  notices?: Record<string, boolean>;
1138
1224
  browserNotices?: boolean;
1225
+ /** Dividir a área de abas em painéis (`SpinePreferencesService.splitTabs`). */
1226
+ splitTabs?: boolean;
1139
1227
  favorites?: unknown[];
1140
1228
  }
1141
1229
  /**
1142
1230
  * Chaves que são da pessoa, não do app: com o Argos que tem `{api}/preferences/global`, vão no documento global e
1143
- * valem em todos os apps (escolhidas uma vez). O resto (menu lateral, atalhos, inatividade, tela inicial, avisos,
1144
- * favoritos) continua no documento do app.
1231
+ * valem em todos os apps (escolhidas uma vez). O resto (menu lateral, dividir abas, atalhos, inatividade, tela inicial,
1232
+ * avisos, favoritos) continua no documento do app.
1145
1233
  */
1146
1234
  declare const SPINE_GLOBAL_PREFERENCE_KEYS: readonly ["themeMode", "family", "density", "font", "textScale", "motion", "language", "timeZone", "hourCycle", "weekStart"];
1147
1235
  /** Documento global (`PUT {api}/preferences/global`): aparência e região, mais a configuração inicial feita. */
@@ -1154,8 +1242,8 @@ type SpineAccountPreferencesStatus = 'idle' | 'local' | 'loading' | 'saving' | '
1154
1242
  /**
1155
1243
  * Preferências na conta (`SpineFeatures.accountPreferences`): espelha no Argos (`GET/PUT {api}/preferences`, por
1156
1244
  * usuário e aplicação) o que o painel de configurações guarda no navegador — tema, cor, densidade, fonte, menu
1157
- * lateral, idioma, fuso, relógio, primeiro dia da semana, tamanho do texto, animações, atalhos de tecla única,
1158
- * inatividade, tela inicial, tipos de aviso e favoritos. As telas Aparência, Região etc. não mudam: o
1245
+ * lateral, dividir abas, idioma, fuso, relógio, primeiro dia da semana, tamanho do texto, animações, atalhos de tecla
1246
+ * única, inatividade, tela inicial, tipos de aviso e favoritos. As telas Aparência, Região etc. não mudam: o
1159
1247
  * armazenamento local continua sendo a fonte de cada tela, e este serviço só sincroniza.
1160
1248
  *
1161
1249
  * - No início da sessão (`start()`, chamado pelo layout e pelo `/callback`), lê a conta e aplica o que estiver lá
@@ -1334,6 +1422,9 @@ declare class SettingsPanelComponent {
1334
1422
  sidebarAuto: string;
1335
1423
  sidebarFixed: string;
1336
1424
  sidebarCompact: string;
1425
+ splitTabs: string;
1426
+ splitTabsDescription: string;
1427
+ splitTabsKeywords: string;
1337
1428
  region: string;
1338
1429
  regionKeywords: string;
1339
1430
  language: string;
@@ -1786,8 +1877,8 @@ declare class SettingsPanelComponent {
1786
1877
  protected clearList(list: BrowserList): void;
1787
1878
  /**
1788
1879
  * Restaurar preferências (com confirmação): tema (sistema), cor principal (a padrão do app), densidade
1789
- * (confortável), fonte (a padrão do app), menu lateral (o modo padrão do app), tamanho do texto (100%),
1790
- * animações (sistema), formato de hora e primeiro dia da semana (automáticos). Idioma, fuso horário e
1880
+ * (confortável), fonte (a padrão do app), menu lateral (o modo padrão do app), dividir abas (desligado), tamanho do
1881
+ * texto (100%), animações (sistema), formato de hora e primeiro dia da semana (automáticos). Idioma, fuso horário e
1791
1882
  * atalhos de tecla única ficam: mudam como a pessoa lê e digita, e não são "aparência".
1792
1883
  */
1793
1884
  protected restorePreferences(): void;
@@ -1968,12 +2059,33 @@ interface GroupMember {
1968
2059
  joined_at: string | null;
1969
2060
  added_by_username: string | null;
1970
2061
  }
2062
+ /** Página e filtros da lista de membros (o servidor pagina: padrão 50, até 200 por página). */
2063
+ interface GroupMembersQuery {
2064
+ page?: number;
2065
+ limit?: number;
2066
+ /** Trecho do nome, do login ou do e-mail. */
2067
+ search?: string;
2068
+ }
2069
+ /** Uma página de membros, com a função de quem pede e o que ela permite (como em `ManagedGroup`). */
2070
+ interface GroupMembersPage {
2071
+ my_role: GroupRole | null;
2072
+ can_add: boolean;
2073
+ assignable_roles: GroupRole[];
2074
+ can_change_roles: boolean;
2075
+ members: GroupMember[];
2076
+ /** Quantos passam pela busca (sem busca, o grupo inteiro). */
2077
+ total: number;
2078
+ page: number;
2079
+ limit: number;
2080
+ }
1971
2081
  interface RealmUser {
1972
2082
  id: string;
1973
2083
  username: string;
1974
2084
  email: string | null;
1975
2085
  name: string | null;
1976
2086
  enabled: boolean;
2087
+ /** Foto (o argos-admin já manda com a busca): a pessoa incluída entra na lista com ela. */
2088
+ picture?: string | null;
1977
2089
  }
1978
2090
  /**
1979
2091
  * Grupos de que a pessoa é membro e o que a função dela permite — `argos-admin /me/groups`. Sempre da aplicação LOGADA (o
@@ -1994,9 +2106,11 @@ declare class SpineMyGroupsService {
1994
2106
  private get headers();
1995
2107
  /** Relê os grupos; qualquer falha deixa a lista vazia (a seção some em vez de mostrar um erro sem contexto). */
1996
2108
  refresh(): Promise<void>;
1997
- members(groupId: string): Promise<{
1998
- members: GroupMember[];
1999
- }>;
2109
+ /**
2110
+ * Uma página dos membros, pela ordem do login. Observable (não Promise): a tela pede as páginas até o fim e cancela a
2111
+ * pendente ao sair.
2112
+ */
2113
+ members(groupId: string, query?: GroupMembersQuery): Observable<GroupMembersPage>;
2000
2114
  searchUsers(search: string, limit?: number): Promise<{
2001
2115
  users: RealmUser[];
2002
2116
  }>;
@@ -3432,8 +3546,6 @@ declare class SpineSuggestionChatComponent {
3432
3546
  kindFilter: string;
3433
3547
  allKinds: string;
3434
3548
  refresh: string;
3435
- boardEmpty: string;
3436
- boardEmptyHint: string;
3437
3549
  boardFiltered: string;
3438
3550
  loadError: string;
3439
3551
  moveError: string;
@@ -3729,6 +3841,158 @@ declare class SpineSuggestionChatComponent {
3729
3841
  waitingYou: string;
3730
3842
  waitingTeam: string;
3731
3843
  };
3844
+ planning: {
3845
+ viewSummary: string;
3846
+ viewTasks: string;
3847
+ viewPlanning: string;
3848
+ viewSchedule: string;
3849
+ viewRisks: string;
3850
+ viewWorkflow: string;
3851
+ loadError: string;
3852
+ saveError: string;
3853
+ retry: string;
3854
+ save: string;
3855
+ cancel: string;
3856
+ delete: string;
3857
+ edit: string;
3858
+ points: string;
3859
+ pointsValue: _trismegisto_primitives.PluralMessage;
3860
+ noEstimate: string;
3861
+ backlog: string;
3862
+ noSprint: string;
3863
+ unassigned: string;
3864
+ dateRange: string;
3865
+ summary: {
3866
+ activeSprint: string;
3867
+ sprintPoints: string;
3868
+ sprintCapacity: string;
3869
+ openTasks: string;
3870
+ overdue: string;
3871
+ mine: string;
3872
+ mineEmpty: string;
3873
+ deadlines: string;
3874
+ deadlinesEmpty: string;
3875
+ topRisks: string;
3876
+ topRisksEmpty: string;
3877
+ riskScore: string;
3878
+ nextMilestone: string;
3879
+ nextMilestoneEmpty: string;
3880
+ };
3881
+ tasks: {
3882
+ viewLabel: string;
3883
+ viewList: string;
3884
+ viewTable: string;
3885
+ listLabel: string;
3886
+ gridCaption: string;
3887
+ count: _trismegisto_primitives.PluralMessage;
3888
+ open: string;
3889
+ emptyHeading: string;
3890
+ emptyBody: string;
3891
+ key: string;
3892
+ title: string;
3893
+ status: string;
3894
+ priority: string;
3895
+ assignee: string;
3896
+ sprint: string;
3897
+ due: string;
3898
+ };
3899
+ sprints: {
3900
+ heading: string;
3901
+ hint: string;
3902
+ readOnlyClosed: string;
3903
+ new: string;
3904
+ start: string;
3905
+ close: string;
3906
+ state: Record<"planned" | "active" | "closed", string>;
3907
+ closeHeading: string;
3908
+ closeMessage: string;
3909
+ deleteHeading: string;
3910
+ deleteMessage: string;
3911
+ newHeading: string;
3912
+ editHeading: string;
3913
+ name: string;
3914
+ nameRequired: string;
3915
+ goal: string;
3916
+ start_date: string;
3917
+ end_date: string;
3918
+ datesRequired: string;
3919
+ datesOrder: string;
3920
+ capacity: string;
3921
+ activeExists: string;
3922
+ moved: string;
3923
+ progressHeading: string;
3924
+ done: string;
3925
+ committed: string;
3926
+ capacityUse: string;
3927
+ burndownCaption: string;
3928
+ day: string;
3929
+ ideal: string;
3930
+ remaining: string;
3931
+ closed: string;
3932
+ };
3933
+ schedule: {
3934
+ heading: string;
3935
+ label: string;
3936
+ hint: string;
3937
+ milestones: string;
3938
+ newMilestone: string;
3939
+ milestoneTitle: string;
3940
+ milestoneDate: string;
3941
+ milestoneRequired: string;
3942
+ removeMilestone: string;
3943
+ rescheduled: string;
3944
+ conflicts: string;
3945
+ workloadHeading: string;
3946
+ workloadLabel: string;
3947
+ workloadHint: string;
3948
+ week: string;
3949
+ noPeople: string;
3950
+ };
3951
+ risks: {
3952
+ heading: string;
3953
+ label: string;
3954
+ hint: string;
3955
+ new: string;
3956
+ newHeading: string;
3957
+ editHeading: string;
3958
+ title: string;
3959
+ titleRequired: string;
3960
+ owner: string;
3961
+ status: string;
3962
+ mitigation: string;
3963
+ deleteHeading: string;
3964
+ statuses: Record<"identified" | "mitigating" | "closed", string>;
3965
+ task: string;
3966
+ taskPlaceholder: string;
3967
+ taskRequired: string;
3968
+ noTask: string;
3969
+ level: string;
3970
+ levels: Record<"low" | "medium" | "high" | "critical", string>;
3971
+ ofTask: string;
3972
+ add: string;
3973
+ empty: string;
3974
+ };
3975
+ workflow: {
3976
+ heading: string;
3977
+ hint: string;
3978
+ label: string;
3979
+ count: _trismegisto_primitives.PluralMessage;
3980
+ plan: string;
3981
+ start: string;
3982
+ finish: string;
3983
+ refuse: string;
3984
+ reopen: string;
3985
+ };
3986
+ detail: {
3987
+ estimate: string;
3988
+ sprint: string;
3989
+ backlogOption: string;
3990
+ dependsOn: string;
3991
+ dependsOnPlaceholder: string;
3992
+ dependencyCycle: string;
3993
+ blockedBy: string;
3994
+ };
3995
+ };
3732
3996
  };
3733
3997
  private readonly preferences;
3734
3998
  private readonly scroller;
@@ -3858,6 +4122,6 @@ declare const SPINE_MARKDOWN_PURIFY_CONFIG: Config;
3858
4122
  /** HTML limpo pelo perfil do spine, ou `null` quando não há DOM (SSR: melhor não renderizar). */
3859
4123
  declare function sanitizeSpineMarkdownHtml(html: string): string | null;
3860
4124
 
3861
- export { AiAgentComponent, AppLauncherComponent, HeaderComponent, LayoutComponent, NEW_SCREEN_VALUE, SPINE_BRAND, SPINE_GLOBAL_PREFERENCE_KEYS, SPINE_IDLE_WARNING_SECONDS, SPINE_INBOX_POLL_MS, SPINE_INBOX_SOURCES, SPINE_MARKDOWN_PURIFY_CONFIG, SPINE_PREFERENCES_SAVE_DELAY_MS, SPINE_RATING_COMMENT_MAX, SPINE_RATING_SCORE_MAX, SPINE_SETTINGS_ALIASES, SPINE_SETTINGS_KEYS, SPINE_SETTINGS_SECTIONS, SPINE_SUGGESTIONS_PAGE_ID, SPINE_SUGGESTIONS_PAGE_PATH, SPINE_SUGGESTION_KINDS, SPINE_SUGGESTION_KIND_COLORS, SPINE_SUGGESTION_KIND_ICONS, SPINE_SUGGESTION_LIMITS, SPINE_SUGGESTION_PAGE_PARAM, SPINE_SUGGESTION_PUBLIC_SORTS, SPINE_SUGGESTION_PUBLIC_STATUSES, SPINE_SUGGESTION_REASONS, SPINE_SUGGESTION_STATUSES, SPINE_SUGGESTION_STATUS_COLORS, SPINE_SUGGESTION_STATUS_ICONS, SPINE_SUGGESTION_TAB_CONVERSATION, SPINE_SUGGESTION_TAB_PARAM, SPINE_SUGGESTION_VISIBLE_SORTS, SPINE_SUGGESTION_WAITING, SPINE_SUGGESTION_WAITING_COLORS, SPINE_TAB, SettingsPanelComponent, ShortcutService, ShortcutsCheatsheetComponent, SidebarComponent, SpineAccountPreferencesService, SpineAccountSecurityService, SpineAppTokensService, SpineBrandComponent, SpineConnectionBannerComponent, SpineDocsComponent, SpineDocsService, SpineIdleService, SpineIdleWarningComponent, SpineInboxButtonComponent, SpineInboxService, SpineInitialSetupComponent, SpineInitialSetupService, SpineLogoutService, SpineMarkdownComponent, SpineMyGroupsService, SpineNewsComponent, SpineNewsService, SpineNoticesService, SpinePageActionsDirective, SpinePageActionsSlot, SpineRatingStarsComponent, SpineRatingsService, SpineSettingsService, SpineStartPageService, SpineSuggestionChatComponent, SpineSuggestionsService, SpineTagRowComponent, SpineWorkspaceNavService, accountErrorCode, argosAccountApi, buildMcpConfig, effectiveIdleMinutes, idleLimits, isInternalPath, provideSettingsSection, provideSpineInboxSource, provideSpineSuggestionsPage, ratingTargetKey, resolveSettingsSection, sanitizeSpineMarkdownHtml, screenModule, screenName, spineNormalizeUrl, spineParamsOf, spinePathOf, spineScoreBand, spineStarFills, spineSuggestionsEnabled, spineTagColor, stable, suggestionScreens };
3862
- export type { AccountActivityEntry, AccountActivityPage, AccountBadges, AccountMethod, AccountOverview, AccountPreferences, AccountReauth, AccountSession, AppToken, AppTokenList, AppTokenOptions, CreatedAppToken, DocsEntry, DocsGroup, DocsView, GroupMember, GroupRole, ManagedGroup, RealmUser, ShortcutActions, SpineAccountPreferencesDoc, SpineAccountPreferencesStatus, SpineAppSuggestion, SpineAppSuggestionsQuery, SpineChatMessage, SpineChatSide, SpineGlobalPreferencesDoc, SpineIdleLimits, SpineInboxEntry, SpineInboxItem, SpineInboxSource, SpineInitialSetupMode, SpineInitialSetupStep, SpineNewsAuthor, SpineNewsDetail, SpineNewsFilter, SpineNewsKind, SpineNewsPage, SpineNewsSummary, SpineNotice, SpineNoticePermission, SpineOpenTabOptions, SpineRating, SpineRatingAverage, SpineRatingScope, SpineRatingTarget, SpineScoreBand, SpineSettingsSection, SpineStarFill, SpineSuggestion, SpineSuggestionComment, SpineSuggestionDraft, SpineSuggestionKind, SpineSuggestionMessage, SpineSuggestionPerson, SpineSuggestionPublicSort, SpineSuggestionPublicStatus, SpineSuggestionReason, SpineSuggestionScreen, SpineSuggestionStatus, SpineSuggestionUpdate, SpineSuggestionVisibleSort, SpineSuggestionWaiting, SpineTab, SpineTabParams, SpineTagRowItem, SpineVisibleCounts, SpineVisibleQuery, SpineVisibleSuggestion, SuggestionScreenOption };
4125
+ export { AiAgentComponent, AppLauncherComponent, HeaderComponent, LayoutComponent, NEW_SCREEN_VALUE, SPINE_BRAND, SPINE_GLOBAL_PREFERENCE_KEYS, SPINE_IDLE_WARNING_SECONDS, SPINE_INBOX_POLL_MS, SPINE_INBOX_SOURCES, SPINE_MARKDOWN_PURIFY_CONFIG, SPINE_PREFERENCES_SAVE_DELAY_MS, SPINE_RATING_COMMENT_MAX, SPINE_RATING_SCORE_MAX, SPINE_SETTINGS_ALIASES, SPINE_SETTINGS_KEYS, SPINE_SETTINGS_SECTIONS, SPINE_SUGGESTIONS_PAGE_ID, SPINE_SUGGESTIONS_PAGE_PATH, SPINE_SUGGESTION_KINDS, SPINE_SUGGESTION_KIND_COLORS, SPINE_SUGGESTION_KIND_ICONS, SPINE_SUGGESTION_LIMITS, SPINE_SUGGESTION_PAGE_PARAM, SPINE_SUGGESTION_PUBLIC_SORTS, SPINE_SUGGESTION_PUBLIC_STATUSES, SPINE_SUGGESTION_REASONS, SPINE_SUGGESTION_STATUSES, SPINE_SUGGESTION_STATUS_COLORS, SPINE_SUGGESTION_STATUS_ICONS, SPINE_SUGGESTION_TAB_CONVERSATION, SPINE_SUGGESTION_TAB_PARAM, SPINE_SUGGESTION_VISIBLE_SORTS, SPINE_SUGGESTION_WAITING, SPINE_SUGGESTION_WAITING_COLORS, SPINE_TAB, SPINE_WORKSPACE_LIMITS, SettingsPanelComponent, ShortcutService, ShortcutsCheatsheetComponent, SidebarComponent, SpineAccountPreferencesService, SpineAccountSecurityService, SpineAppTokensService, SpineBrandComponent, SpineConnectionBannerComponent, SpineDocsComponent, SpineDocsService, SpineIdleService, SpineIdleWarningComponent, SpineInboxButtonComponent, SpineInboxService, SpineInitialSetupComponent, SpineInitialSetupService, SpineLogoutService, SpineMarkdownComponent, SpineMyGroupsService, SpineNewsComponent, SpineNewsService, SpineNoticesService, SpinePageActionsDirective, SpinePageActionsSlot, SpineRatingStarsComponent, SpineRatingsService, SpineSettingsService, SpineStartPageService, SpineSuggestionChatComponent, SpineSuggestionsService, SpineTagRowComponent, SpineUnsavedChangesService, SpineWorkspaceNavService, accountErrorCode, argosAccountApi, buildMcpConfig, effectiveIdleMinutes, idleLimits, isInternalPath, provideSettingsSection, provideSpineInboxSource, provideSpineSuggestionsPage, ratingTargetKey, registerSpineUnsavedChanges, resolveSettingsSection, sanitizeSpineMarkdownHtml, screenModule, screenName, spineNormalizeUrl, spineParamsOf, spinePathOf, spineScoreBand, spineStarFills, spineSuggestionsEnabled, spineTagColor, stable, suggestionScreens };
4126
+ export type { AccountActivityEntry, AccountActivityPage, AccountBadges, AccountMethod, AccountOverview, AccountPreferences, AccountReauth, AccountSession, AppToken, AppTokenList, AppTokenOptions, CreatedAppToken, DocsEntry, DocsGroup, DocsView, GroupMember, GroupMembersPage, GroupMembersQuery, GroupRole, ManagedGroup, RealmUser, ShortcutActions, SpineAccountPreferencesDoc, SpineAccountPreferencesStatus, SpineAppSuggestion, SpineAppSuggestionsQuery, SpineChatMessage, SpineChatSide, SpineGlobalPreferencesDoc, SpineIdleLimits, SpineInboxEntry, SpineInboxItem, SpineInboxSource, SpineInitialSetupMode, SpineInitialSetupStep, SpineNewsAuthor, SpineNewsDetail, SpineNewsFilter, SpineNewsKind, SpineNewsPage, SpineNewsSummary, SpineNotice, SpineNoticePermission, SpineOpenTabOptions, SpineRating, SpineRatingAverage, SpineRatingScope, SpineRatingTarget, SpineScoreBand, SpineSettingsSection, SpineStarFill, SpineSuggestion, SpineSuggestionComment, SpineSuggestionDraft, SpineSuggestionKind, SpineSuggestionMessage, SpineSuggestionPerson, SpineSuggestionPublicSort, SpineSuggestionPublicStatus, SpineSuggestionReason, SpineSuggestionScreen, SpineSuggestionStatus, SpineSuggestionUpdate, SpineSuggestionVisibleSort, SpineSuggestionWaiting, SpineTab, SpineTabParams, SpineTagRowItem, SpineVisibleCounts, SpineVisibleQuery, SpineVisibleSuggestion, SuggestionScreenOption };
3863
4127
  //# sourceMappingURL=trismegisto-spine-layout.d.ts.map