@trismegisto/spine 3.2.0 → 3.3.1

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 (98) 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-apps.usage-po9Ds_SU.mjs → trismegisto-spine-auto-service-apps.usage-C0F_MlCo.mjs} +3 -3
  5. package/fesm2022/{trismegisto-spine-auto-service-apps.usage-po9Ds_SU.mjs.map → trismegisto-spine-auto-service-apps.usage-C0F_MlCo.mjs.map} +1 -1
  6. package/fesm2022/{trismegisto-spine-auto-service-auto-service-audit.component-tfGcVR3i.mjs → trismegisto-spine-auto-service-auto-service-audit.component-D8HUpZtA.mjs} +4 -4
  7. 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
  8. package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-NawbfdLW.mjs +65 -0
  9. package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-NawbfdLW.mjs.map +1 -0
  10. package/fesm2022/{trismegisto-spine-auto-service-auto-service-client.component-DzmlpLPu.mjs → trismegisto-spine-auto-service-auto-service-client.component-BAfeLyTB.mjs} +32 -19
  11. package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-BAfeLyTB.mjs.map +1 -0
  12. package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-BYjIQ9ID.mjs +635 -0
  13. package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-BYjIQ9ID.mjs.map +1 -0
  14. 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
  15. 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
  16. package/fesm2022/trismegisto-spine-auto-service-auto-service-news-page.component-CBemH4hr.mjs +432 -0
  17. package/fesm2022/trismegisto-spine-auto-service-auto-service-news-page.component-CBemH4hr.mjs.map +1 -0
  18. package/fesm2022/trismegisto-spine-auto-service-auto-service-ratings-page.component-C_THGTkw.mjs +769 -0
  19. package/fesm2022/trismegisto-spine-auto-service-auto-service-ratings-page.component-C_THGTkw.mjs.map +1 -0
  20. package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-DIeunpQ9.mjs +2123 -0
  21. package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-DIeunpQ9.mjs.map +1 -0
  22. package/fesm2022/{trismegisto-spine-auto-service-auto-service.component-C4FBAefe.mjs → trismegisto-spine-auto-service-auto-service.component-QsIQ61w2.mjs} +36 -23
  23. package/fesm2022/trismegisto-spine-auto-service-auto-service.component-QsIQ61w2.mjs.map +1 -0
  24. package/fesm2022/{trismegisto-spine-auto-service-client.usage-B16r3IHk.mjs → trismegisto-spine-auto-service-client.usage-CJxn9Ysz.mjs} +7 -4
  25. package/fesm2022/trismegisto-spine-auto-service-client.usage-CJxn9Ysz.mjs.map +1 -0
  26. package/fesm2022/{trismegisto-spine-auto-service-groups.technical-9aPPulhy.mjs → trismegisto-spine-auto-service-groups.technical-_jQrg1Qh.mjs} +7 -5
  27. package/fesm2022/trismegisto-spine-auto-service-groups.technical-_jQrg1Qh.mjs.map +1 -0
  28. package/fesm2022/{trismegisto-spine-auto-service-groups.usage-CYh61LFL.mjs → trismegisto-spine-auto-service-groups.usage-OvWjNeeT.mjs} +7 -6
  29. package/fesm2022/{trismegisto-spine-auto-service-groups.usage-CYh61LFL.mjs.map → trismegisto-spine-auto-service-groups.usage-OvWjNeeT.mjs.map} +1 -1
  30. package/fesm2022/trismegisto-spine-auto-service-home.component-rQ3dIGIE.mjs +315 -0
  31. package/fesm2022/trismegisto-spine-auto-service-home.component-rQ3dIGIE.mjs.map +1 -0
  32. package/fesm2022/trismegisto-spine-auto-service-home.technical-Ce7oYRdg.mjs +46 -0
  33. package/fesm2022/trismegisto-spine-auto-service-home.technical-Ce7oYRdg.mjs.map +1 -0
  34. package/fesm2022/trismegisto-spine-auto-service-home.usage-D9R_ZMuU.mjs +48 -0
  35. package/fesm2022/trismegisto-spine-auto-service-home.usage-D9R_ZMuU.mjs.map +1 -0
  36. package/fesm2022/trismegisto-spine-auto-service-news.technical-DV9UpobG.mjs +38 -0
  37. package/fesm2022/trismegisto-spine-auto-service-news.technical-DV9UpobG.mjs.map +1 -0
  38. package/fesm2022/trismegisto-spine-auto-service-news.usage-CeuZnG0V.mjs +48 -0
  39. package/fesm2022/trismegisto-spine-auto-service-news.usage-CeuZnG0V.mjs.map +1 -0
  40. package/fesm2022/trismegisto-spine-auto-service-ratings.technical-QIVj6HBU.mjs +52 -0
  41. package/fesm2022/trismegisto-spine-auto-service-ratings.technical-QIVj6HBU.mjs.map +1 -0
  42. package/fesm2022/trismegisto-spine-auto-service-ratings.usage-BkteY8lz.mjs +45 -0
  43. package/fesm2022/trismegisto-spine-auto-service-ratings.usage-BkteY8lz.mjs.map +1 -0
  44. package/fesm2022/trismegisto-spine-auto-service-suggestions.technical-BtUK6sKD.mjs +69 -0
  45. package/fesm2022/trismegisto-spine-auto-service-suggestions.technical-BtUK6sKD.mjs.map +1 -0
  46. package/fesm2022/trismegisto-spine-auto-service-suggestions.usage-BwO9Hjsx.mjs +72 -0
  47. package/fesm2022/trismegisto-spine-auto-service-suggestions.usage-BwO9Hjsx.mjs.map +1 -0
  48. package/fesm2022/trismegisto-spine-auto-service.mjs +50 -20
  49. package/fesm2022/trismegisto-spine-auto-service.mjs.map +1 -1
  50. package/fesm2022/trismegisto-spine-graphql.mjs +11 -2
  51. package/fesm2022/trismegisto-spine-graphql.mjs.map +1 -1
  52. package/fesm2022/trismegisto-spine-layout.mjs +3171 -1291
  53. package/fesm2022/trismegisto-spine-layout.mjs.map +1 -1
  54. package/fesm2022/trismegisto-spine-modal.mjs +7 -5
  55. package/fesm2022/trismegisto-spine-modal.mjs.map +1 -1
  56. package/fesm2022/trismegisto-spine-notification.mjs +27 -24
  57. package/fesm2022/trismegisto-spine-notification.mjs.map +1 -1
  58. package/fesm2022/trismegisto-spine-routing.mjs +12 -20
  59. package/fesm2022/trismegisto-spine-routing.mjs.map +1 -1
  60. package/fesm2022/trismegisto-spine-shell.mjs +20 -45
  61. package/fesm2022/trismegisto-spine-shell.mjs.map +1 -1
  62. package/fesm2022/trismegisto-spine-side-panel.mjs +7 -5
  63. package/fesm2022/trismegisto-spine-side-panel.mjs.map +1 -1
  64. package/fesm2022/trismegisto-spine.mjs +1972 -282
  65. package/fesm2022/trismegisto-spine.mjs.map +1 -1
  66. package/package.json +6 -6
  67. package/types/trismegisto-spine-audit.d.ts +2 -12
  68. package/types/trismegisto-spine-audit.d.ts.map +1 -1
  69. package/types/trismegisto-spine-auto-service.d.ts +22 -5
  70. package/types/trismegisto-spine-auto-service.d.ts.map +1 -1
  71. package/types/trismegisto-spine-layout.d.ts +1090 -286
  72. package/types/trismegisto-spine-layout.d.ts.map +1 -1
  73. package/types/trismegisto-spine-modal.d.ts +1 -0
  74. package/types/trismegisto-spine-modal.d.ts.map +1 -1
  75. package/types/trismegisto-spine-notification.d.ts +13 -12
  76. package/types/trismegisto-spine-notification.d.ts.map +1 -1
  77. package/types/trismegisto-spine-routing.d.ts +3 -12
  78. package/types/trismegisto-spine-routing.d.ts.map +1 -1
  79. package/types/trismegisto-spine-shell.d.ts +2 -15
  80. package/types/trismegisto-spine-shell.d.ts.map +1 -1
  81. package/types/trismegisto-spine-side-panel.d.ts +1 -0
  82. package/types/trismegisto-spine-side-panel.d.ts.map +1 -1
  83. package/types/trismegisto-spine.d.ts +739 -165
  84. package/types/trismegisto-spine.d.ts.map +1 -1
  85. package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-Cl7ahisu.mjs +0 -65
  86. package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-Cl7ahisu.mjs.map +0 -1
  87. package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-DzmlpLPu.mjs.map +0 -1
  88. package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-D6L0gTmd.mjs +0 -605
  89. package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-D6L0gTmd.mjs.map +0 -1
  90. package/fesm2022/trismegisto-spine-auto-service-auto-service.component-C4FBAefe.mjs.map +0 -1
  91. package/fesm2022/trismegisto-spine-auto-service-client.usage-B16r3IHk.mjs.map +0 -1
  92. package/fesm2022/trismegisto-spine-auto-service-groups.technical-9aPPulhy.mjs.map +0 -1
  93. package/fesm2022/trismegisto-spine-auto-service-home.component-5_aji1hf.mjs +0 -239
  94. package/fesm2022/trismegisto-spine-auto-service-home.component-5_aji1hf.mjs.map +0 -1
  95. package/fesm2022/trismegisto-spine-auto-service-home.technical-BrVhcgDO.mjs +0 -35
  96. package/fesm2022/trismegisto-spine-auto-service-home.technical-BrVhcgDO.mjs.map +0 -1
  97. package/fesm2022/trismegisto-spine-auto-service-home.usage-D6cb4B3Z.mjs +0 -43
  98. package/fesm2022/trismegisto-spine-auto-service-home.usage-D6cb4B3Z.mjs.map +0 -1
@@ -1,15 +1,14 @@
1
- import { AlertComponent, ButtonComponent, DrawerComponent, IconButtonComponent, IconComponent, MenuButtonComponent, MenuComponent, ModalComponent, SidebarComponent, SidebarGroupComponent, SidebarLinkComponent, SidebarNodeComponent, ToastStackComponent, HermesThemeService, HERMES_THEME_CONFIG, HERMES_SIDEBAR_CONFIG, HERMES_WORKSPACE_PERSISTENCE_CONFIG, provideHermesIcons, HermesShortcutService, HermesI18nService, HermesZoomService, HermesMotionService, liveCatalog } from '@trismegisto/angular';
1
+ import { AlertComponent, ButtonComponent, DrawerComponent, IconButtonComponent, IconComponent, MenuButtonComponent, MenuComponent, ModalComponent, SidebarComponent, SidebarGroupComponent, SidebarLinkComponent, SidebarNodeComponent, ToastStackComponent, HermesThemeService, HERMES_THEME_CONFIG, HERMES_SIDEBAR_CONFIG, HERMES_WORKSPACE_PERSISTENCE_CONFIG, provideHermesIcons, provideHermesIconLoader, HermesShortcutService, HermesI18nService, HermesZoomService, HermesMotionService, liveCatalog } from '@trismegisto/angular';
2
2
  import { isPlatformBrowser, DOCUMENT } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
4
  import { InjectionToken, inject, effect, PLATFORM_ID, Inject, Optional, Injectable, makeEnvironmentProviders, provideAppInitializer, NgZone, signal, computed, untracked, DestroyRef } from '@angular/core';
5
- import { HERMES_ICONS } from '@trismegisto/icons/catalog';
6
5
  import { extendThemeConfig, DEFAULT_THEME_CONFIG, normalizeTextScale, normalizeMotionPreference, mergeCatalog } from '@trismegisto/primitives';
7
6
  export { loadRuntimeConfig } from '@trismegisto/primitives';
8
7
  import { AuthorizationService } from '@orfeu/angular/core';
9
8
 
10
- /** `router_id` da tela (nó 'page'), aceitando o argos antigo (que só mandava `route_id`, mesmo valor). */
9
+ /** `router_id` da tela (nó 'page'); `null` em nó de grupo. */
11
10
  function routerIdOf(route) {
12
- return route?.router_id ?? route?.route_id ?? null;
11
+ return route?.router_id ?? null;
13
12
  }
14
13
 
15
14
  /**
@@ -99,7 +98,6 @@ function mergeGroup(group) {
99
98
  return {
100
99
  ...base,
101
100
  router_id: pick('router_id'),
102
- route_id: pick('route_id'),
103
101
  description: pick('description'),
104
102
  source_template_router_id: pick('source_template_router_id'),
105
103
  routes: mergeLevel(children),
@@ -333,10 +331,135 @@ function applySpineFavicon(doc, href) {
333
331
  return link;
334
332
  }
335
333
 
336
- /** Registra o catálogo de ícones inteiro — o spine (header/sidebar/navegação/modal/onboarding)
337
- * usa ícones de várias origens (shield, pencil, trash, floppy, chevrons...) que não vêm
338
- * 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
339
- * silenciosamente no hambúrguer de fallback pra qualquer app que consuma este pacote. */
334
+ /** Os 115 ícones que o spine usa por dentro. */
335
+ const SPINE_ICONS = [
336
+ { "name": "accessibility-1", "body": "<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"7.6\" r=\"1.4\"/><path d=\"M7.5 10.5l4.5.8 4.5-.8M12 11.3v2.4M12 13.7l-2 3.6M12 13.7l2 3.6\"/>", "solid": true, "categories": ["essential"] },
337
+ { "name": "alarm-clock", "body": "<circle cx=\"12\" cy=\"13\" r=\"7\"/><path d=\"M12 9.5v3.8l2.2 1.5M4 6.5l3-2.5M20 6.5l-3-2.5\"/>", "solid": true, "categories": ["essential"] },
338
+ { "name": "angle", "body": "<path d=\"M6.5 14.5l5.5-5.5 5.5 5.5\"/>", "categories": ["foundation"] },
339
+ { "name": "announcement", "body": "<path d=\"M3.5 10.5a1 1 0 0 1 1-1h3L17 5v14l-9.5-4.5h-3a1 1 0 0 1-1-1z\"/><path d=\"M7.5 9.5v5\"/><path d=\"M8 14.8l1 4a1 1 0 0 0 1 .7h.8a1 1 0 0 0 1-1.2l-.8-2.6\"/><path d=\"M20 9.5a3.5 3.5 0 0 1 0 5\"/>", "solid": true, "categories": ["essential"] },
340
+ { "name": "application", "body": "<rect x=\"3\" y=\"4.5\" width=\"18\" height=\"15\" rx=\"2\"/><path d=\"M3 9h18\"/><path d=\"M6.5 6.8h.01\"/><path d=\"M9.5 6.8h.01\"/>", "solid": true, "categories": ["technology"] },
341
+ { "name": "applications", "body": "<rect x=\"4\" y=\"4\" width=\"6.5\" height=\"6.5\" rx=\"1.5\"/><rect x=\"13.5\" y=\"4\" width=\"6.5\" height=\"6.5\" rx=\"1.5\"/><rect x=\"4\" y=\"13.5\" width=\"6.5\" height=\"6.5\" rx=\"1.5\"/><rect x=\"13.5\" y=\"13.5\" width=\"6.5\" height=\"6.5\" rx=\"1.5\"/>", "solid": true, "categories": ["technology"] },
342
+ { "name": "archive", "body": "<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"4.5\" rx=\"1.5\"/><path d=\"M5 9v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V9M10 13h4\"/>", "solid": true, "categories": ["technology"] },
343
+ { "name": "arrow", "body": "<path d=\"M12 19V5M8.1 8.9L12 5l3.9 3.9\"/>", "categories": ["foundation"], "aliases": ["arrow-mini"] },
344
+ { "name": "assign-user", "body": "<circle cx=\"9.5\" cy=\"8\" r=\"3.5\"/><path d=\"M3 20c.7-3.4 3.2-5.5 6.5-5.5 1.7 0 3 .5 4 1.2\"/><path d=\"M14.5 17.5h6M17.5 14.5l3 3-3 3\"/>", "solid": true, "categories": ["technology"] },
345
+ { "name": "authenticator", "body": "<rect x=\"7\" y=\"2.5\" width=\"10\" height=\"19\" rx=\"2.5\"/><path d=\"M10.5 18.5h3\"/><path d=\"M9.8 10.5l1.8 1.8 3-3.3\"/>" },
346
+ { "name": "ballon-question", "body": "<path d=\"M5.5 4.5h13A2.5 2.5 0 0 1 21 7v8a2.5 2.5 0 0 1-2.5 2.5H12L7.5 21v-3.5h-2A2.5 2.5 0 0 1 3 15V7a2.5 2.5 0 0 1 2.5-2.5z\"/><path d=\"M10 9a2 2 0 1 1 3 1.7c-.7.4-1 .8-1 1.5\"/><path d=\"M12 14.8h.01\"/>" },
347
+ { "name": "ban", "body": "<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M6 6l12 12\"/>", "categories": ["essential"] },
348
+ { "name": "bar-chart", "body": "<path d=\"M4 4v16h16\"/><rect x=\"8\" y=\"14.5\" width=\"3\" height=\"5\" rx=\"0.8\"/><rect x=\"12.5\" y=\"10.5\" width=\"3\" height=\"9\" rx=\"0.8\"/><rect x=\"17\" y=\"7.5\" width=\"3\" height=\"12\" rx=\"0.8\"/>", "solid": true, "categories": ["chart"] },
349
+ { "name": "bell", "body": "<path d=\"M6.5 16.5V11a5.5 5.5 0 0 1 11 0v5.5l1.5 2H5z\"/><path d=\"M10 21a2 2 0 0 0 4 0\"/>", "solid": true, "categories": ["foundation"] },
350
+ { "name": "book", "body": "<path d=\"M6.5 3.5h11A1.5 1.5 0 0 1 19 5v14a1.5 1.5 0 0 1-1.5 1.5h-11A1.5 1.5 0 0 1 5 19V5a1.5 1.5 0 0 1 1.5-1.5z\"/><path d=\"M9 3.5v17M12.5 8h3.5\"/>", "solid": true, "categories": ["essential"] },
351
+ { "name": "bookmark", "body": "<path d=\"M6.5 4.5a1 1 0 0 1 1-1h9a1 1 0 0 1 1 1v16l-5.5-4-5.5 4z\"/>", "solid": true, "categories": ["social"] },
352
+ { "name": "browser-setting", "body": "<rect x=\"3\" y=\"4.5\" width=\"18\" height=\"15\" rx=\"2.5\"/><path d=\"M3 9h18\"/><path d=\"M11.02 11.58L11.21 10.48L12.79 10.48L12.98 11.58L13.78 12.04L14.82 11.66L15.61 13.03L14.76 13.73L14.76 14.67L15.61 15.37L14.82 16.74L13.78 16.36L12.98 16.82L12.79 17.92L11.21 17.92L11.02 16.82L10.22 16.36L9.18 16.74L8.39 15.37L9.24 14.67L9.24 13.73L8.39 13.03L9.18 11.66L10.22 12.04Z\"/><circle cx=\"12\" cy=\"14.2\" r=\"1\"/>" },
353
+ { "name": "bug", "body": "<ellipse cx=\"12\" cy=\"13.5\" rx=\"4.5\" ry=\"6\"/><path d=\"M9.5 7.5a2.5 2.5 0 0 1 5 0M12 7.5v12M7.5 11H4M16.5 11H20M7.5 16H4.5M16.5 16h3M8 8L5.5 5.5M16 8l2.5-2.5\"/>", "solid": true, "categories": ["essential"] },
354
+ { "name": "calendar", "body": "<rect x=\"4\" y=\"5.5\" width=\"16\" height=\"14\" rx=\"2.5\"/><path d=\"M4 10h16M8.5 3.5v4M15.5 3.5v4\"/>", "solid": true, "categories": ["foundation", "social"], "aliases": ["calendar-mini"] },
355
+ { "name": "calendar-check", "body": "<rect x=\"4\" y=\"5.5\" width=\"16\" height=\"14\" rx=\"2.5\"/><path d=\"M4 10h16M8.5 3.5v4M15.5 3.5v4\"/><path d=\"M8.8 14.8l2.2 2.2 4.2-4.2\"/>" },
356
+ { "name": "check", "body": "<path d=\"M5 12.5l4.5 4.5L19 7.5\"/>", "categories": ["foundation"], "aliases": ["check-mini"] },
357
+ { "name": "check-circle", "body": "<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M8 12.3l2.8 2.8 5.2-5.6\"/>", "solid": true, "categories": ["foundation"], "aliases": ["check-circle-mini"] },
358
+ { "name": "circle", "body": "<circle cx=\"12\" cy=\"12\" r=\"8.5\"/>", "solid": true, "categories": ["essential"] },
359
+ { "name": "circle-empty", "body": "<path d=\"M20.46 12.8A8.5 8.5 0 0 1 19.51 15.98M17.42 18.55A8.5 8.5 0 0 1 14.5 20.12M11.2 20.46A8.5 8.5 0 0 1 8.02 19.51M5.45 17.42A8.5 8.5 0 0 1 3.88 14.5M3.54 11.2A8.5 8.5 0 0 1 4.49 8.02M6.58 5.45A8.5 8.5 0 0 1 9.5 3.88M12.8 3.54A8.5 8.5 0 0 1 15.98 4.49M18.55 6.58A8.5 8.5 0 0 1 20.12 9.5\"/>" },
360
+ { "name": "clipboard", "body": "<rect x=\"5\" y=\"5\" width=\"14\" height=\"16\" rx=\"2\"/><rect x=\"9\" y=\"3\" width=\"6\" height=\"4\" rx=\"1.2\"/><path d=\"M8.5 12h7M8.5 16h5\"/>", "solid": true, "categories": ["essential"] },
361
+ { "name": "clock", "body": "<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 7.5V12l3 2\"/>", "solid": true, "categories": ["essential"] },
362
+ { "name": "code", "body": "<path d=\"M8.5 7l-5 5 5 5M15.5 7l5 5-5 5\"/>", "categories": ["technology"] },
363
+ { "name": "cog", "body": "<path d=\"M9.73 5.91L10.23 3.69L13.77 3.69L14.27 5.91L16.14 6.99L18.32 6.31L20.08 9.37L18.41 10.92L18.41 13.08L20.08 14.63L18.32 17.69L16.14 17.01L14.27 18.09L13.77 20.31L10.23 20.31L9.73 18.09L7.86 17.01L5.68 17.69L3.92 14.63L5.59 13.08L5.59 10.92L3.92 9.37L5.68 6.31L7.86 6.99Z\"/><circle cx=\"12\" cy=\"12\" r=\"2.5\"/>", "solid": true, "categories": ["foundation"] },
364
+ { "name": "color-palette", "body": "<path d=\"M12 3.5a8.5 8.5 0 0 0 0 17c1.4 0 2-1 1.5-2.2-.5-1.2.2-2.3 1.6-2.3H17a3.5 3.5 0 0 0 3.5-3.5C20.5 7 16.8 3.5 12 3.5z\"/><path d=\"M7.8 11h.01\"/><path d=\"M10 7.5h.01\"/><path d=\"M14.5 7.5h.01\"/><path d=\"M8 15h.01\"/>", "solid": true, "categories": ["essential"] },
365
+ { "name": "comment-message", "body": "<path d=\"M5.5 4.5h13A2.5 2.5 0 0 1 21 7v8a2.5 2.5 0 0 1-2.5 2.5H12L7.5 21v-3.5h-2A2.5 2.5 0 0 1 3 15V7a2.5 2.5 0 0 1 2.5-2.5z\"/><path d=\"M8 9.5h8M8 12.5h5\"/>" },
366
+ { "name": "computer", "body": "<rect x=\"3\" y=\"5\" width=\"12\" height=\"9\" rx=\"1.5\"/><path d=\"M7 18h4M9 14v4\"/><rect x=\"17\" y=\"4.5\" width=\"4\" height=\"15\" rx=\"1.5\"/><path d=\"M19 16.5h.01\"/>", "solid": true, "categories": ["technology"] },
367
+ { "name": "copy", "body": "<rect x=\"9\" y=\"7\" width=\"11\" height=\"13.5\" rx=\"2\"/><path d=\"M12 12h5M12 15.5h5M15 7V5.5a2 2 0 0 0-2-2H6.5a2 2 0 0 0-2 2V16a2 2 0 0 0 2 2H9\"/>", "solid": true, "categories": ["essential"] },
368
+ { "name": "density-comfortable", "body": "<path d=\"M12 10V3.5M8.5 7L12 3.5 15.5 7M12 14v6.5M8.5 17l3.5 3.5 3.5-3.5\"/>", "categories": ["foundation"], "aliases": ["density-expand", "spacing-comfortable"] },
369
+ { "name": "density-compact", "body": "<path d=\"M12 3v6.5M8.5 6l3.5 3.5L15.5 6M12 21v-6.5M8.5 18l3.5-3.5 3.5 3.5M6 12h12\"/>", "categories": ["foundation"], "aliases": ["density-collapse", "spacing-compact"] },
370
+ { "name": "devices", "body": "<rect x=\"3\" y=\"5\" width=\"13\" height=\"9.5\" rx=\"1.5\"/><path d=\"M7 18.5h5M9.5 14.5v4\"/><rect x=\"17.5\" y=\"9\" width=\"3.5\" height=\"9\" rx=\"1.2\"/>", "solid": true, "categories": ["technology"] },
371
+ { "name": "doc-list", "body": "<path d=\"M7.5 3.5h6l4.5 4.5v11.5a1.5 1.5 0 0 1-1.5 1.5h-9A1.5 1.5 0 0 1 6 19.5v-14A1.5 1.5 0 0 1 7.5 3.5z\"/><path d=\"M13.5 3.5V8H18\"/><path d=\"M9.5 12.5h.01\"/><path d=\"M9.5 15.5h.01\"/><path d=\"M9.5 18.5h.01\"/><path d=\"M12.5 12.5H15M12.5 15.5H15M12.5 18.5H15\"/>" },
372
+ { "name": "download", "body": "<path d=\"M12 4v11M7.5 10.5l4.5 4.5 4.5-4.5M5 16v3.5h14V16\"/>", "categories": ["essential"] },
373
+ { "name": "ellipsis-vertical", "body": "<path d=\"M12 5.5h.01\"/><path d=\"M12 12h.01\"/><path d=\"M12 18.5h.01\"/>", "categories": ["foundation"] },
374
+ { "name": "employee-group", "body": "<circle cx=\"9\" cy=\"8\" r=\"3\"/><path d=\"M3.5 19.5c.6-3.3 2.8-5 5.5-5s4.9 1.7 5.5 5\"/><path d=\"M15.5 5.3a3 3 0 0 1 0 5.4M17 14.8c1.9.6 3.1 2.2 3.5 4.7\"/>", "solid": true, "categories": ["commerce"] },
375
+ { "name": "error-standard", "body": "<polygon points=\"15.44 3.69 20.31 8.56 20.31 15.44 15.44 20.31 8.56 20.31 3.69 15.44 3.69 8.56 8.56 3.69\"/><path d=\"M12 7.5v5.5\"/><path d=\"M12 16.5h.01\"/>", "solid": true, "categories": ["foundation"], "aliases": ["error-mini"] },
376
+ { "name": "exclamation-triangle", "body": "<path d=\"M12 4l9 15.5H3z\"/><path d=\"M12 10v4\"/><path d=\"M12 17h.01\"/>", "solid": true, "categories": ["foundation"] },
377
+ { "name": "eye", "body": "<path d=\"M2.5 12C5 7.5 8.5 6 12 6s7 1.5 9.5 6c-2.5 4.5-6 6-9.5 6s-7-1.5-9.5-6z\"/><circle cx=\"12\" cy=\"12\" r=\"2.8\"/>", "solid": true, "categories": ["foundation"] },
378
+ { "name": "file-text", "body": "<path d=\"M7.5 3.5h6l4.5 4.5v11.5a1.5 1.5 0 0 1-1.5 1.5h-9A1.5 1.5 0 0 1 6 19.5v-14A1.5 1.5 0 0 1 7.5 3.5z\"/><path d=\"M13.5 3.5V8H18\"/><path d=\"M9.5 12h5M9.5 15h5M9.5 18h2.5\"/>", "categories": ["essential"] },
379
+ { "name": "filter", "body": "<path d=\"M4 5.5h16l-6 7.5v6l-4-2V13z\"/>", "solid": true, "categories": ["essential"] },
380
+ { "name": "filter-close", "body": "<path d=\"M3.5 4.5h15l-5.5 6.5v5.5l-3.5-1.5V11z\"/><path d=\"M16 15.5l4.5 4.5M20.5 15.5L16 20\"/>" },
381
+ { "name": "filter-grid", "body": "<path d=\"M4 4.5h16l-6 6.5v3l-4-1.5V11z\"/><path d=\"M7 19h.01\"/><path d=\"M12 19h.01\"/><path d=\"M17 19h.01\"/>", "solid": true, "categories": ["foundation"], "aliases": ["filter-grid-mini"] },
382
+ { "name": "flame", "body": "<path d=\"M12 3.5c.5 3.5 5.5 5.5 5.5 11a5.5 5.5 0 0 1-11 0c0-2 1-3.5 2-4.5.3 1.5 1 2.2 1.8 2.5C10 9 10.5 6 12 3.5z\"/>", "solid": true, "categories": ["essential"] },
383
+ { "name": "floppy", "body": "<path d=\"M5.5 3.5h10l5 5v10a2 2 0 0 1-2 2h-13a2 2 0 0 1-2-2v-13a2 2 0 0 1 2-2z\"/><path d=\"M7.5 3.5v4h7v-4M7 20.5v-6h10v6\"/>", "solid": true, "categories": ["technology"] },
384
+ { "name": "form", "body": "<rect x=\"4.5\" y=\"3.5\" width=\"15\" height=\"17\" rx=\"2.5\"/><path d=\"M8 8h5M8 15.5h3\"/><rect x=\"8\" y=\"10\" width=\"8\" height=\"3\" rx=\"1\"/>", "categories": ["essential"] },
385
+ { "name": "grid", "body": "<rect x=\"3.5\" y=\"3.5\" width=\"4\" height=\"4\" rx=\"1\"/><rect x=\"10\" y=\"3.5\" width=\"4\" height=\"4\" rx=\"1\"/><rect x=\"16.5\" y=\"3.5\" width=\"4\" height=\"4\" rx=\"1\"/><rect x=\"3.5\" y=\"10\" width=\"4\" height=\"4\" rx=\"1\"/><rect x=\"10\" y=\"10\" width=\"4\" height=\"4\" rx=\"1\"/><rect x=\"16.5\" y=\"10\" width=\"4\" height=\"4\" rx=\"1\"/><rect x=\"3.5\" y=\"16.5\" width=\"4\" height=\"4\" rx=\"1\"/><rect x=\"10\" y=\"16.5\" width=\"4\" height=\"4\" rx=\"1\"/><rect x=\"16.5\" y=\"16.5\" width=\"4\" height=\"4\" rx=\"1\"/>" },
386
+ { "name": "grid-layout", "body": "<rect x=\"3.5\" y=\"3.5\" width=\"17\" height=\"17\" rx=\"2.5\"/><path d=\"M10 3.5v17M10 12h10.5\"/>" },
387
+ { "name": "heart", "body": "<path d=\"M12 20s-7.5-4.6-7.5-10A4.3 4.3 0 0 1 12 7.3 4.3 4.3 0 0 1 19.5 10c0 5.4-7.5 10-7.5 10z\"/>", "solid": true, "categories": ["social"], "aliases": ["heart-fill"] },
388
+ { "name": "help", "body": "<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M9.5 9.7a2.5 2.5 0 1 1 3.5 2.3c-.7.4-1 .9-1 1.7M12 16.8h.01\"/>", "solid": true, "categories": ["essential"] },
389
+ { "name": "history", "body": "<path d=\"M4 12a8 8 0 1 0 2.4-5.7M4.5 3.5v3.8h3.8M12 8v4l2.5 2\"/>", "categories": ["essential"] },
390
+ { "name": "home", "body": "<path d=\"M4 11l8-6.5 8 6.5M6 9.8v9.7h12V9.8M10 19.5v-5h4v5\"/>", "solid": true, "categories": ["foundation"] },
391
+ { "name": "hourglass", "body": "<path d=\"M7 3.5h10M7 20.5h10M8 3.5c0 4 4 5 4 8.5s-4 4.5-4 8.5M16 3.5c0 4-4 5-4 8.5s4 4.5 4 8.5\"/>", "solid": true, "categories": ["essential"] },
392
+ { "name": "inbox", "body": "<path d=\"M3.5 13.5l2.5-8h12l2.5 8v4.5a2 2 0 0 1-2 2h-13a2 2 0 0 1-2-2z\"/><path d=\"M3.5 13.5h5l1 2.5h5l1-2.5h5\"/>", "categories": ["social"] },
393
+ { "name": "info-circle", "body": "<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 11.2v5\"/><path d=\"M12 8h.01\"/>", "solid": true, "categories": ["foundation"], "aliases": ["info-circle-mini"] },
394
+ { "name": "key", "body": "<circle cx=\"7.5\" cy=\"16.5\" r=\"3.5\"/><path d=\"M10 14L20 4M16 8l2.5 2.5M13.5 10.5l2 2\"/>", "solid": true, "categories": ["essential"] },
395
+ { "name": "keyboard", "body": "<rect x=\"2.5\" y=\"6\" width=\"19\" height=\"12\" rx=\"2.5\"/><path d=\"M6.5 10h.01M10.5 10h.01M14.5 10h.01M17.5 10h.01M8 14.5h8\"/>", "solid": true, "categories": ["technology"] },
396
+ { "name": "language", "body": "<path d=\"M4 6h9M8.5 4v2M6 6c.5 3 2.5 5.5 5.5 7M11 6c-.5 3-2.5 5.5-6 7\"/><path d=\"M12 20l4.5-10 4.5 10M13.5 17h6\"/>", "solid": true, "categories": ["text-edit"] },
397
+ { "name": "layers", "body": "<path d=\"M12 3.5l8.5 4-8.5 4-8.5-4z\"/><path d=\"M3.5 12.5l8.5 4 8.5-4M3.5 16.5l8.5 4 8.5-4\"/>", "solid": true, "categories": ["technology"] },
398
+ { "name": "lightbulb", "body": "<path d=\"M9 16.5v-1.8C7.3 13.5 6.5 11.9 6.5 10a5.5 5.5 0 0 1 11 0c0 1.9-.8 3.5-2.5 4.7v1.8z\"/><path d=\"M9.5 19.5h5\"/>", "solid": true, "categories": ["essential"] },
399
+ { "name": "link", "body": "<g transform=\"rotate(-45 12 12)\"><path d=\"M9 8.5H7a3.5 3.5 0 0 0 0 7h2\"/><path d=\"M15 8.5h2a3.5 3.5 0 0 1 0 7h-2\"/><path d=\"M9.5 12h5\"/></g>", "categories": ["technology"] },
400
+ { "name": "list", "body": "<path d=\"M4 6h16M4 12h16M4 18h10\"/>", "solid": true, "categories": ["essential"] },
401
+ { "name": "list-check", "body": "<path d=\"M11 6h9M11 12h9M11 18h9\"/><path d=\"M3.5 6.2l1.4 1.4 2.8-3M3.5 12.2l1.4 1.4 2.8-3M3.5 18.2l1.4 1.4 2.8-3\"/>" },
402
+ { "name": "login", "body": "<path d=\"M14 4.5h4a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2h-4\"/><path d=\"M3.5 12L14 12M10.82 15.18L14 12L10.82 8.82\"/>", "solid": true, "categories": ["essential"] },
403
+ { "name": "logout", "body": "<path d=\"M10 4.5H6a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h4\"/><path d=\"M10 12L20.5 12M17.32 15.18L20.5 12L17.32 8.82\"/>", "solid": true, "categories": ["essential"] },
404
+ { "name": "magnifying-glass", "body": "<circle cx=\"9.5\" cy=\"9.5\" r=\"5.5\"/><path d=\"M13.8 13.8L20 20\"/><path d=\"M6.8 9a2.8 2.8 0 0 1 2.7-2.7\"/>" },
405
+ { "name": "mail", "body": "<rect x=\"3\" y=\"5.5\" width=\"18\" height=\"13\" rx=\"2.5\"/><path d=\"M3.5 8l8.5 6 8.5-6\"/>" },
406
+ { "name": "menu", "body": "<path d=\"M4 6.5h16M4 12h16M4 17.5h16\"/>" },
407
+ { "name": "minus", "body": "<path d=\"M5 12h14\"/>", "categories": ["essential"] },
408
+ { "name": "mobile", "body": "<rect x=\"7\" y=\"2.5\" width=\"10\" height=\"19\" rx=\"2.5\"/><path d=\"M10.5 18.5h3\"/>", "solid": true, "categories": ["technology"] },
409
+ { "name": "moon", "body": "<path d=\"M19.5 14.5A8 8 0 1 1 9.5 4.5a6.5 6.5 0 0 0 10 10z\"/>", "solid": true, "categories": ["essential"] },
410
+ { "name": "new", "body": "<path d=\"M12 3.5c.5 4.5 2.5 6.5 8 8.5-5.5 2-7.5 4-8 8.5-.5-4.5-2.5-6.5-8-8.5 5.5-2 7.5-4 8-8.5z\"/>", "solid": true, "categories": ["essential"] },
411
+ { "name": "node", "body": "<polygon points=\"12 3.5 19.36 7.75 19.36 16.25 12 20.5 4.64 16.25 4.64 7.75\"/><circle cx=\"12\" cy=\"12\" r=\"2.5\"/>", "categories": ["technology"] },
412
+ { "name": "note", "body": "<path d=\"M5 4.5h14v10l-5 5H5z\"/><path d=\"M19 14.5h-5v5\"/><path d=\"M8 9h8M8 12.5h5\"/>", "solid": true, "categories": ["essential"] },
413
+ { "name": "pencil", "body": "<path d=\"M4.5 19.5l.8-4.3L16 4.5a2 2 0 0 1 2.8 0l.7.7a2 2 0 0 1 0 2.8L8.8 18.7z\"/><path d=\"M13.5 7l3.5 3.5\"/>", "solid": true, "categories": ["essential"] },
414
+ { "name": "plugin", "body": "<path d=\"M6.5 8h11v3a5.5 5.5 0 0 1-11 0z\"/><path d=\"M9.5 3.5V8M14.5 3.5V8\"/><path d=\"M12 16.5v4\"/>", "solid": true, "categories": ["technology"] },
415
+ { "name": "plus", "body": "<path d=\"M12 5v14M5 12h14\"/>", "categories": ["essential"] },
416
+ { "name": "pop-out", "body": "<path d=\"M10 5H6a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2v-4\"/><path d=\"M14 4h6v6M20 4l-9 9\"/>", "categories": ["essential"] },
417
+ { "name": "refresh", "body": "<path d=\"M18.5 8.25A7.5 7.5 0 1 1 10.06 4.76\"/><path d=\"M7.54 7.86L10.06 4.76L6.32 3.32\"/>", "categories": ["essential"] },
418
+ { "name": "resize", "body": "<path d=\"M14 4h6v6M20 4l-6.5 6.5\"/><path d=\"M10 20H4v-6M4 20l6.5-6.5\"/>", "categories": ["essential"] },
419
+ { "name": "rocket-diagonal", "body": "<g transform=\"rotate(45 12 12)\"><path d=\"M12 2.8c3 2.5 4 6 4 9.7l-1 3H9l-1-3c0-3.7 1-7.2 4-9.7z\"/><circle cx=\"12\" cy=\"9.5\" r=\"1.6\"/><path d=\"M8 12.5l-2.5 3 2.5.5M16 12.5l2.5 3-2.5.5\"/><path d=\"M10.5 18.5L12 21l1.5-2.5\"/></g>" },
420
+ { "name": "scroll", "body": "<path d=\"M7 4.5h11.5v13a3 3 0 0 1-3 3H6.5a3 3 0 0 0 3-3V7A2.5 2.5 0 0 0 7 4.5z\"/><path d=\"M12.5 9h3.5M12.5 12.5h3.5\"/>", "solid": true, "categories": ["essential"] },
421
+ { "name": "search", "body": "<circle cx=\"10.5\" cy=\"10.5\" r=\"6.5\"/><path d=\"M15.5 15.5l5 5\"/>", "categories": ["foundation"] },
422
+ { "name": "search-magnify", "body": "<circle cx=\"10\" cy=\"10\" r=\"7\"/><circle cx=\"10\" cy=\"10\" r=\"2.5\"/><path d=\"M15 15l5.5 5.5\"/>", "categories": ["foundation"] },
423
+ { "name": "shield", "body": "<path d=\"M12 3.5l7 2.5v5.5c0 4.5-3 7.5-7 9-4-1.5-7-4.5-7-9V6z\"/>", "solid": true, "categories": ["technology"], "aliases": ["empty-shield"] },
424
+ { "name": "shield-check", "body": "<path d=\"M12 3.5l7 2.5v5.5c0 4.5-3 7.5-7 9-4-1.5-7-4.5-7-9V6z\"/><path d=\"M9 12l2.2 2.2L15.5 10\"/>", "solid": true, "categories": ["technology"] },
425
+ { "name": "shrink", "body": "<path d=\"M20 10h-6V4M14 10l6.5-6.5\"/><path d=\"M4 14h6v6M10 14l-6.5 6.5\"/>", "categories": ["essential"] },
426
+ { "name": "sms", "body": "<path d=\"M5.5 4.5h13A2.5 2.5 0 0 1 21 7v8a2.5 2.5 0 0 1-2.5 2.5H12L7.5 21v-3.5h-2A2.5 2.5 0 0 1 3 15V7a2.5 2.5 0 0 1 2.5-2.5z\"/><path d=\"M8 11h.01\"/><path d=\"M12 11h.01\"/><path d=\"M16 11h.01\"/>" },
427
+ { "name": "sort-vertical", "body": "<path d=\"M12 4v16M8.500 7.500L12 4l3.500 3.500M8.500 16.500L12 20l3.500-3.500\"/>", "categories": ["foundation"] },
428
+ { "name": "star", "body": "<polygon points=\"12 3.5 14.3 8.84 20.08 9.37 15.72 13.21 17 18.88 12 15.91 7 18.88 8.28 13.21 3.92 9.37 9.7 8.84\"/>", "solid": true, "categories": ["social"], "aliases": ["star-fill", "empty-star", "full-star"] },
429
+ { "name": "sun", "body": "<circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M19.00 12.00L21.00 12.00M16.95 16.95L18.36 18.36M12.00 19.00L12.00 21.00M7.05 16.95L5.64 18.36M5.00 12.00L3.00 12.00M7.05 7.05L5.64 5.64M12.00 5.00L12.00 3.00M16.95 7.05L18.36 5.64\"/>", "solid": true, "categories": ["essential"] },
430
+ { "name": "tag", "body": "<path d=\"M3.5 12.5V5.5a2 2 0 0 1 2-2h7l8 8a2 2 0 0 1 0 2.8l-6.2 6.2a2 2 0 0 1-2.8 0z\"/><path d=\"M8 8h.01\"/>", "solid": true, "categories": ["essential"] },
431
+ { "name": "target", "body": "<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"12\" r=\"4.5\"/><path d=\"M12 12h.01\"/>", "solid": true, "categories": ["essential"] },
432
+ { "name": "text", "body": "<path d=\"M5 6.5V4.5h14v2M12 4.5v15M9.5 19.5h5\"/>", "categories": ["text-edit"] },
433
+ { "name": "thumbs-up", "body": "<rect x=\"4\" y=\"11\" width=\"4\" height=\"9\" rx=\"1\"/><path d=\"M8 11l3-6.5a2 2 0 0 1 3 1.8L13.5 10H18a2 2 0 0 1 2 2.3l-1 5.7a2 2 0 0 1-2 1.7H8z\"/>", "solid": true, "categories": ["social"] },
434
+ { "name": "timeline", "body": "<circle cx=\"5.5\" cy=\"12\" r=\"2.2\"/><circle cx=\"12\" cy=\"12\" r=\"2.2\"/><circle cx=\"18.5\" cy=\"12\" r=\"2.2\"/><path d=\"M7.7 12h2.1M14.2 12h2.1M12 9.8V5M5.5 14.2V19M18.5 14.2V19\"/>", "categories": ["essential"] },
435
+ { "name": "times", "body": "<path d=\"M5.5 5.5l13 13M18.5 5.5l-13 13\"/>", "categories": ["foundation"], "aliases": ["times-mini"] },
436
+ { "name": "tools", "body": "<path d=\"M14.5 4a4.5 4.5 0 0 0-4.2 6L4 16.3a1.9 1.9 0 0 0 2.7 2.7L13 12.7a4.5 4.5 0 0 0 6.2-4.4L16.5 11l-2.7-.7-.8-2.8z\"/><path d=\"M4 4l4.4 4.4\"/><path d=\"M16.71 14.59l3.2 3.2a1.5 1.5 0 0 1-2.12 2.12l-3.2-3.2a1.5 1.5 0 0 1 2.12-2.12z\"/>", "solid": true, "categories": ["essential"] },
437
+ { "name": "trash", "body": "<path d=\"M5 7h14\"/><path d=\"M9 7V5h6v2\"/><path d=\"M7 7l.8 12.5h8.4L17 7z\"/><path d=\"M10.5 11v5M13.5 11v5\"/>", "solid": true, "categories": ["essential"] },
438
+ { "name": "tree-view", "body": "<rect x=\"3.5\" y=\"3.5\" width=\"7\" height=\"4\" rx=\"1.2\"/><rect x=\"12\" y=\"10\" width=\"8.5\" height=\"3.5\" rx=\"1\"/><rect x=\"12\" y=\"16\" width=\"8.5\" height=\"3.5\" rx=\"1\"/><path d=\"M6 7.5v10.25h6M6 11.75h6\"/>", "solid": true, "categories": ["essential"] },
439
+ { "name": "two-way-arrows", "body": "<path d=\"M4 8h16M16.5 4.5L20 8l-3.5 3.5M20 16H4M7.5 12.5L4 16l3.5 3.5\"/>", "categories": ["essential"] },
440
+ { "name": "unarchive", "body": "<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"4\" rx=\"1\"/><path d=\"M5.5 8.5V18a1.5 1.5 0 0 0 1.5 1.5h10a1.5 1.5 0 0 0 1.5-1.5V8.5\"/><path d=\"M12 17v-6M9.5 13l2.5-2.5 2.5 2.5\"/>", "solid": true, "categories": ["technology"] },
441
+ { "name": "undo", "body": "<path d=\"M8.5 5L4.5 9l4 4\"/><path d=\"M4.5 9h9a5.5 5.5 0 0 1 0 11H10\"/>", "categories": ["essential"] },
442
+ { "name": "unlink", "body": "<g transform=\"rotate(-45 12 12)\"><path d=\"M9 8.5H7a3.5 3.5 0 0 0 0 7h2\"/><path d=\"M15 8.5h2a3.5 3.5 0 0 1 0 7h-2\"/></g><path d=\"M8.5 3.5V6M3.5 8.5H6M15.5 20.5V18M20.5 15.5H18\"/>", "categories": ["technology"] },
443
+ { "name": "update", "body": "<path d=\"M19.5 11a7.5 7.5 0 0 0-13-4L4.5 9M4.5 5v4h4\"/><path d=\"M4.5 13a7.5 7.5 0 0 0 13 4l2-2M19.5 19v-4h-4\"/>", "categories": ["technology"] },
444
+ { "name": "user", "body": "<circle cx=\"12\" cy=\"8\" r=\"3.5\"/><path d=\"M5 20c.8-3.6 3.8-5.5 7-5.5s6.2 1.9 7 5.5\"/>", "solid": true, "categories": ["foundation"] },
445
+ { "name": "user-checkmark", "body": "<circle cx=\"8.5\" cy=\"8\" r=\"3\"/><path d=\"M2.5 19.5c.6-3.2 2.8-5 6-5s5.4 1.8 6 5\"/><path d=\"M15 17.2l2.5 2.5 4.2-4.7\"/>" },
446
+ { "name": "user-circle", "body": "<circle cx=\"12\" cy=\"12\" r=\"9\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/><path d=\"M6.5 18.2c1-2.2 3-3.4 5.5-3.4s4.5 1.2 5.5 3.4\"/>", "categories": ["foundation"] },
447
+ { "name": "user-plus", "body": "<circle cx=\"9\" cy=\"8\" r=\"3.5\"/><path d=\"M2.5 20c.7-3.4 3.3-5.5 6.5-5.5s5.2 1.4 6 3.5\"/><path d=\"M18 11v6M15 14h6\"/>", "categories": ["essential"] },
448
+ { "name": "users", "body": "<circle cx=\"9\" cy=\"8\" r=\"3.5\"/><path d=\"M2.5 20c.7-3.4 3.3-5.5 6.5-5.5s5.8 2.1 6.5 5.5\"/><path d=\"M15.5 4.8a3.3 3.3 0 0 1 0 6.4M17.5 14.7c2 .5 3.3 2.3 4 5.3\"/>", "solid": true, "categories": ["essential"] },
449
+ { "name": "view-columns", "body": "<rect x=\"3.5\" y=\"4\" width=\"17\" height=\"16\" rx=\"2.5\"/><path d=\"M9.2 4v16M14.8 4v16\"/>", "categories": ["foundation"] },
450
+ { "name": "world", "body": "<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><ellipse cx=\"12\" cy=\"12\" rx=\"3.5\" ry=\"8.5\"/><path d=\"M3.5 12h17\"/>", "solid": true, "categories": ["essential"] },
451
+ ];
452
+
453
+ /**
454
+ * Bootstrap do spine: tema, favicon, prefixo de armazenamento do app e ícones.
455
+ *
456
+ * Ícones (desde a 3.3.1): registra no bootstrap só `SPINE_ICONS` — os que o próprio spine desenha (header,
457
+ * menu, configurações, auto-serviço...; gerado por `scripts/generate-spine-icons.mjs`) — e pede o catálogo
458
+ * inteiro sob demanda (`provideHermesIconLoader`), num chunk à parte baixado logo depois do bootstrap. Assim o
459
+ * bundle inicial não leva os ~900 desenhos (~212 kB), e um ícone que o APP usa sem registrar (o ícone da rota que
460
+ * vem do servidor, um `[icon]` de botão) continua aparecendo: até o chunk chegar desenha o genérico, e o
461
+ * `hm-icon` redesenha sozinho. App que registra os próprios ícones (`provideHermesIcons(...)`) não muda nada.
462
+ */
340
463
  function provideUi(config) {
341
464
  // Apps diferentes moram na MESMA origem (mesmo domínio, caminhos distintos): sem prefixo próprio,
342
465
  // tema, família, densidade, menu lateral e abas de um app vazam pro outro. Cada app usa o seu
@@ -347,7 +470,8 @@ function provideUi(config) {
347
470
  ? extendThemeConfig({ ...DEFAULT_THEME_CONFIG, storagePrefix: ns ?? DEFAULT_THEME_CONFIG.storagePrefix }, config?.theme)
348
471
  : null;
349
472
  return makeEnvironmentProviders([
350
- provideHermesIcons(HERMES_ICONS),
473
+ provideHermesIcons(SPINE_ICONS),
474
+ provideHermesIconLoader(() => import('@trismegisto/icons/catalog').then((m) => m.HERMES_ICONS)),
351
475
  provideAppInitializer(() => {
352
476
  inject(ThemeService);
353
477
  // Favicon só quando configurado: sem `favicon`, o `<link rel="icon">` do index.html fica como está.
@@ -848,6 +972,8 @@ function decodeSub(token) {
848
972
 
849
973
  // The sidebar navigation writes the same history list and trims it to this size; both writers must agree.
850
974
  const RECENT_LIMIT = 10;
975
+ // Reopening the page on top of the list only rewrites its time after this long.
976
+ const VISIT_REFRESH_MS = 60_000;
851
977
  /**
852
978
  * Favorites and recently visited pages, shared by every consumer in the app (page bar, home screen)
853
979
  * and persisted per client and per user in `localStorage` (`SpineUserStorage`: `<clientId>_nav_favorites_<sub>`).
@@ -912,9 +1038,15 @@ class SpineQuickAccessService {
912
1038
  recordVisit(item) {
913
1039
  const current = this.recentList();
914
1040
  const top = current[0];
915
- if (top && top.id === item.id && top.displayName === item.displayName && sameTrail(top.trail, item.trail))
1041
+ const visited = { ...item, visitedAt: Date.now() };
1042
+ // Same page again: only the time moves (and only when it is stale, so a re-render does not rewrite storage).
1043
+ if (top && top.id === item.id && top.displayName === item.displayName && sameTrail(top.trail, item.trail)) {
1044
+ if (top.visitedAt && visited.visitedAt - top.visitedAt < VISIT_REFRESH_MS)
1045
+ return;
1046
+ this.commit(this.recentList, this.recentsKey, [visited, ...current.slice(1)]);
916
1047
  return;
917
- const next = [item, ...current.filter((r) => r.id !== item.id)].slice(0, RECENT_LIMIT);
1048
+ }
1049
+ const next = [visited, ...current.filter((r) => r.id !== item.id)].slice(0, RECENT_LIMIT);
918
1050
  this.commit(this.recentList, this.recentsKey, next);
919
1051
  }
920
1052
  forgetRecent(id) {
@@ -971,6 +1103,8 @@ function normalize(entry) {
971
1103
  };
972
1104
  if (Array.isArray(raw['trail']))
973
1105
  item.trail = raw['trail'].filter((t) => typeof t === 'string');
1106
+ if (typeof raw['visitedAt'] === 'number' && Number.isFinite(raw['visitedAt']))
1107
+ item.visitedAt = raw['visitedAt'];
974
1108
  return item;
975
1109
  }
976
1110
  function sameTrail(a, b) {
@@ -1017,22 +1151,6 @@ function applyRuntimeEnvironment(environment) {
1017
1151
  return { origin, basePath, behindProxy, unset };
1018
1152
  }
1019
1153
 
1020
- /** Multi: cada chamada de `provideSpineNews` contribui com uma lista. */
1021
- const SPINE_NEWS = new InjectionToken('SPINE_NEWS');
1022
- /**
1023
- * Registra as novidades do app (no `app.config.ts`, junto do `provideUi`). Ficam no código, no
1024
- * mesmo commit da funcionalidade que anunciam. A ordem da lista é a ordem dos slides.
1025
- *
1026
- * ```ts
1027
- * provideSpineNews([
1028
- * { id: 'build-com-versao-2026-09', slides: [{ title: 'Build direto da linha', text: '…' }] },
1029
- * ]),
1030
- * ```
1031
- */
1032
- function provideSpineNews(items) {
1033
- return makeEnvironmentProviders([{ provide: SPINE_NEWS, useValue: items, multi: true }]);
1034
- }
1035
-
1036
1154
  const SPINE_MESSAGES_PT_BR = {
1037
1155
  meta: { locale: 'pt-BR' },
1038
1156
  header: {
@@ -1049,14 +1167,15 @@ const SPINE_MESSAGES_PT_BR = {
1049
1167
  settings: 'Configurações',
1050
1168
  appearance: 'Aparência',
1051
1169
  shortcuts: 'Atalhos de teclado',
1052
- tour: 'Tour guiado',
1053
1170
  news: 'Novidades',
1171
+ newsUnseen: '{label} ({count})',
1054
1172
  logout: 'Sair',
1055
1173
  search: 'Busca',
1056
1174
  searchPlaceholder: 'Buscar módulo ou página…',
1057
- recentSearches: 'Buscas recentes',
1058
- clearRecent: 'Limpar',
1059
- noResults: 'Nada encontrado para "{term}".',
1175
+ searchFavorites: 'Favoritos',
1176
+ searchRecent: 'Abertos há pouco',
1177
+ searchModules: 'Módulos',
1178
+ searchScreens: 'Telas',
1060
1179
  },
1061
1180
  navigation: {
1062
1181
  back: 'Voltar',
@@ -1098,46 +1217,143 @@ const SPINE_MESSAGES_PT_BR = {
1098
1217
  },
1099
1218
  news: {
1100
1219
  heading: 'Novidades',
1101
- carousel: 'Novidades do sistema',
1102
- dismiss: 'Entendi',
1220
+ close: 'Fechar',
1221
+ unseen: 'Nova',
1222
+ toastOne: 'Novidade: {title}',
1223
+ toastMany: '{count} novidades',
1224
+ see: 'Ver',
1225
+ loading: 'Carregando as novidades…',
1226
+ empty: 'Nenhuma novidade por enquanto.',
1227
+ loadError: 'Não foi possível carregar as novidades.',
1228
+ retry: 'Tentar de novo',
1229
+ pages: 'Lista de novidades',
1230
+ search: 'Buscar novidades',
1231
+ searchPlaceholder: 'Buscar novidades…',
1232
+ filters: 'Filtrar novidades',
1233
+ filterAll: 'Todas',
1234
+ filterUnread: 'Não lidas',
1235
+ filterFavorites: 'Favoritas',
1236
+ favorite: 'Favoritar "{title}"',
1237
+ unfavorite: 'Tirar "{title}" das favoritas',
1238
+ noResults: 'Nenhuma novidade encontrada.',
1239
+ home: 'Início',
1240
+ changes: 'O que mudou',
1241
+ before: 'Antes',
1242
+ after: 'Agora',
1243
+ markUnread: 'Marcar como não lida',
1244
+ gotIt: 'Entendi',
1245
+ kindInformativo: 'Informativo',
1246
+ kindImplementacao: 'Implementação',
1247
+ kindAlteracao: 'Alteração',
1248
+ publishedOn: 'Publicada em {date}',
1249
+ editedOn: 'Editada em {date}',
1250
+ body: 'Texto da novidade',
1251
+ detailError: 'Não foi possível abrir esta novidade. Ela pode ter saído do ar.',
1103
1252
  },
1104
- tour: {
1105
- progress: '{current} de {total}',
1106
- skip: 'Pular tour',
1253
+ autoServiceNews: {
1254
+ caption: 'Novidades do app',
1255
+ empty: 'Nenhuma novidade cadastrada. Quem entra no app vê aqui o que mudou.',
1256
+ newNews: 'Nova novidade',
1257
+ editNews: 'Editar novidade',
1258
+ newNewsIntro: 'Preencha as informações da novidade que será exibida para os usuários.',
1259
+ editNewsIntro: 'Atualize as informações da novidade que será exibida para os usuários.',
1260
+ sectionMain: 'Informações principais',
1261
+ sectionMainHint: 'O título e o resumo aparecem na lista de novidades e no card do Início.',
1262
+ sectionBody: 'Conteúdo da novidade',
1263
+ sectionBodyHint: 'Descreva os detalhes da novidade. Use formatação, listas, links e destaque informações importantes.',
1264
+ sectionPublish: 'Publicação',
1265
+ sectionUntil: 'Validade (opcional)',
1266
+ sectionAudience: 'Público',
1267
+ preview: 'Pré-visualização no Início',
1268
+ previewTitle: 'Título da novidade',
1269
+ previewSummary: 'O resumo aparece aqui.',
1270
+ previewNow: 'Publicada ao salvar',
1271
+ tipTitle: 'Dica:',
1272
+ tipText: 'título curto e resumo direto chamam mais atenção no Início.',
1273
+ untilDate: 'Último dia em que aparece',
1274
+ audienceGroups: 'Grupos',
1275
+ kind: 'Tipo de publicação',
1276
+ kindInformativo: 'Informativo',
1277
+ kindImplementacao: 'Implementação',
1278
+ kindAlteracao: 'Alteração',
1279
+ sectionBodyHintImpl: 'Uma introdução curta, se quiser, e a lista do que há de novo.',
1280
+ sectionBodyHintAlt: 'Mostre como era antes e como ficou agora. A introdução é opcional.',
1281
+ intro: 'Introdução (opcional)',
1282
+ items: 'O que mudou',
1283
+ itemsHint: 'Uma mudança por item, até 300 caracteres. De 1 a 30 itens.',
1284
+ itemPlaceholder: 'Descreva uma mudança',
1285
+ itemsEmpty: 'Nenhuma mudança na lista ainda.',
1286
+ before: 'Antes',
1287
+ after: 'Agora',
1288
+ colTitle: 'Título',
1289
+ colPublishedAt: 'Publicação',
1290
+ colUntil: 'Validade',
1291
+ colAudience: 'Público',
1292
+ colAuthor: 'Autor',
1293
+ colStatus: 'Situação',
1294
+ statusScheduled: 'Agendada',
1295
+ statusPublished: 'Publicada',
1296
+ statusExpired: 'Vencida',
1297
+ audienceAll: 'Todos',
1298
+ noUntil: 'Sem fim',
1299
+ title: 'Título',
1300
+ summary: 'Resumo',
1301
+ summaryHint: 'Escreva um resumo curto e direto. Até 300 caracteres.',
1302
+ body: 'Texto',
1303
+ bodyHint: 'Abre quando a pessoa clica na novidade.',
1304
+ publishDate: 'Data da publicação',
1305
+ publishTime: 'Hora da publicação',
1306
+ publishHint: 'No futuro, a novidade fica agendada. Sem data, ela é publicada imediatamente.',
1307
+ until: 'Validade',
1308
+ untilHint: 'Se não informar, a novidade não expira.',
1309
+ audience: 'Público',
1310
+ audienceHint: 'Grupos com acesso ao app. Sem grupo, todos que entram no app veem.',
1311
+ confirmDeleteHeading: 'Excluir novidade',
1312
+ confirmDelete: 'Excluir a novidade "{title}"? Ela some para todo mundo, inclusive para quem ainda não viu.',
1313
+ saveError: 'Não foi possível salvar a novidade.',
1314
+ loadError: 'Não foi possível carregar as novidades.',
1315
+ errors: {
1316
+ invalidTitle: 'Informe um título de até 140 caracteres.',
1317
+ invalidSummary: 'O resumo tem até 300 caracteres.',
1318
+ bodyTooLarge: 'O texto passou do limite de 64 KB.',
1319
+ invalidPublishedAt: 'Data ou hora da publicação inválida.',
1320
+ invalidUntil: 'Data de validade inválida.',
1321
+ invalidGroupIds: 'Algum grupo do público não tem mais acesso ao app. Revise o público.',
1322
+ untilBeforePublish: 'A validade não pode terminar antes da publicação.',
1323
+ invalidKind: 'Tipo de publicação inválido.',
1324
+ invalidItems: 'A implementação precisa de 1 a 30 mudanças, de até 300 caracteres cada.',
1325
+ invalidCompare: 'A alteração precisa do antes e do agora.',
1326
+ compareTooLarge: 'O antes ou o agora passou do limite de 32 KB.',
1327
+ },
1328
+ },
1329
+ setup: {
1330
+ label: 'Configuração inicial',
1331
+ step: 'Etapa {current} de {total}',
1332
+ skip: 'Pular',
1107
1333
  back: 'Voltar',
1108
- next: 'Próximo',
1109
- finish: 'Concluir',
1110
- welcomeTitle: '👋 Bem-vindo',
1111
- welcomeText: 'Vamos dar um tour rápido pelos principais botões do sistema. Você pode pular a qualquer momento.',
1112
- appsTitle: 'Outras aplicações',
1113
- appsText: 'Este botão abre a grade com os <b>outros sistemas</b> que usam o mesmo login que este. Clique num deles para abri-lo numa <b>nova aba do navegador</b>, já com a sua sessão — sem digitar a senha de novo. O que você vê dentro de cada um depende dos seus grupos nele.',
1114
- searchTitle: 'Busca rápida',
1115
- searchText: 'Encontre qualquer módulo ou página pelo nome. Atalho: <b>Ctrl + K</b> de qualquer lugar.',
1116
- navModulesTitle: 'Navegação lateral: módulos e páginas',
1117
- navModulesText: 'Aqui ficam os <b>módulos</b> do sistema. Clique num módulo para <b>entrar</b> nele: a coluna passa a mostrar os menus e as páginas de dentro. A <b>seta no topo</b> volta para a lista de módulos, e menus com páginas dentro abrem e fecham no próprio lugar.',
1118
- navModeTitle: 'Navegação lateral: como ela fica na tela',
1119
- navModeText: 'No rodapé você escolhe o comportamento da coluna: <b>Abrir ao aproximar</b> (fica recolhida e abre quando o ponteiro chega perto), <b>Manter aberta</b> ou <b>Manter compacta</b> (só os ícones). A seta ao lado <b>expande ou recolhe todos</b> os menus de uma vez. A mesma escolha está em <b>Configurações › Aparência › Menu lateral</b>.',
1120
- tabsTitle: 'Abas',
1121
- tabsText: 'Cada página abre numa <b>aba</b>, como no navegador, e cada aba <b>guarda o estado</b> dela: filtros, rolagem e formulário continuam do jeito que você deixou ao voltar. Clique no <b>+</b> para uma aba nova, e no <b>×</b> (ou no botão do meio do mouse) para fechar.',
1122
- splitTitle: 'Abas lado a lado',
1123
- splitText: '<b>Arraste</b> uma aba para uma das bordas da área de conteúdo para <b>dividir a tela</b> em dois painéis e trabalhar com duas páginas ao mesmo tempo. Arraste as abas para <b>reordenar</b>. Com o <b>botão direito</b> numa aba você divide à direita ou para baixo, move a aba para o outro painel ou fecha o painel.',
1124
- whereTitle: 'Onde você está',
1125
- whereText: 'O nome da página e, embaixo, o caminho até ela — clique num nível para voltar. Ao lado do nome, <b>favorite</b> a página (♡) para achá-la rápido depois e <b>copie o link</b> para compartilhar.',
1126
- themeTitle: 'Tema claro / escuro',
1127
- themeText: 'Alterna a aparência do sistema. Atalho: <b>Ctrl + .</b>',
1128
- densityTitle: 'Densidade',
1129
- densityText: 'Ajusta o espaçamento das telas — do mais compacto ao mais confortável.',
1130
- fullscreenTitle: 'Tela cheia',
1131
- fullscreenText: 'Esconde a barra do navegador para focar no sistema. Atalho: <b>Ctrl + ⇧ + F</b>',
1132
- profileTitle: 'Seu perfil',
1133
- profileText: 'Troca de crachá (se você tiver mais de um), configurações, tour guiado, <b>novidades</b>, atalhos de teclado, tema e sair — tudo fica neste menu. Dica: pressione <b>?</b> pra abrir os atalhos direto.',
1134
- doneTitle: '⌨️ Tudo pronto!',
1135
- doneText: 'Você pode refazer este tour quando quiser pelo menu do seu <b>perfil › Tour guiado</b>. E pressione <b>?</b> a qualquer momento para ver todos os atalhos de teclado.',
1334
+ next: 'Continuar',
1335
+ finish: 'Começar',
1336
+ close: 'Entendi',
1337
+ greeting: 'Olá, {name}. Deixe do seu jeito.',
1338
+ greetingAnonymous: 'Deixe do seu jeito.',
1339
+ appearanceIntro: 'Escolha como os sistemas aparecem para você. A escolha vale em todos eles e pode ser mudada quando quiser, nas configurações.',
1340
+ preview: 'Prévia',
1341
+ previewPage: 'Início',
1342
+ essentialsTitle: 'O essencial',
1343
+ essentialsIntro: 'Quatro coisas que ajudam no dia a dia.',
1344
+ searchTitle: 'Busque qualquer tela',
1345
+ searchText: 'Pressione {key} ou use a busca do cabeçalho para achar telas, favoritos e o que você abriu há pouco.',
1346
+ tabsTitle: 'Abas e painéis',
1347
+ tabsText: 'Cada tela abre numa aba. Arraste a aba para um lado da área de trabalho para ver duas telas juntas.',
1348
+ favoritesTitle: 'Favoritos',
1349
+ favoritesText: 'Marque o coração de uma tela para ela aparecer no início e no topo da busca.',
1350
+ settingsTitle: 'Configurações',
1351
+ settingsText: 'Aparência, região, acessibilidade e segurança da conta ficam no menu do seu perfil, ou em {key}.',
1136
1352
  },
1137
1353
  shortcuts: {
1138
1354
  heading: 'Atalhos de teclado',
1139
1355
  hint: 'Dica: pressione {key} a qualquer momento para reabrir este painel.',
1140
- replayTour: 'Refazer tour',
1356
+ essentials: 'Rever o essencial',
1141
1357
  dismiss: 'Entendi',
1142
1358
  openSearch: 'Abrir a busca rápida',
1143
1359
  goHome: 'Ir para a Home',
@@ -1201,10 +1417,14 @@ const SPINE_MESSAGES_PT_BR = {
1201
1417
  shortcuts: 'Atalhos',
1202
1418
  shortcutsDescription: 'Pressione ? em qualquer tela para ver esta lista.',
1203
1419
  shortcutsKeywords: 'teclado teclas',
1204
- tour: 'Tour guiado',
1205
- tourDescription: 'Mostra de novo onde fica cada parte da tela.',
1206
- tourKeywords: 'onboarding ajuda apresentação',
1207
- replayTour: 'Refazer tour',
1420
+ setup: 'Configuração inicial',
1421
+ setupDescription: 'Abre de novo a escolha de aparência do primeiro acesso.',
1422
+ setupKeywords: 'configuração inicial primeiro acesso aparência boas-vindas',
1423
+ redoSetup: 'Refazer',
1424
+ essentials: 'O essencial',
1425
+ essentialsDescription: 'Busca, abas, favoritos e configurações em um resumo.',
1426
+ essentialsKeywords: 'ajuda dicas busca abas favoritos apresentação',
1427
+ showEssentials: 'Ver',
1208
1428
  accessibility: 'Acessibilidade',
1209
1429
  accessibilityKeywords: 'acessibilidade leitura visão',
1210
1430
  textSize: 'Tamanho do texto',
@@ -1217,7 +1437,7 @@ const SPINE_MESSAGES_PT_BR = {
1217
1437
  motionReduce: 'Sempre',
1218
1438
  motionFull: 'Nunca',
1219
1439
  help: 'Ajuda',
1220
- helpKeywords: 'ajuda novidades tour apresentação',
1440
+ helpKeywords: 'ajuda novidades configuração inicial essencial apresentação',
1221
1441
  news: 'Novidades',
1222
1442
  newsDescription: 'O que mudou nas últimas versões.',
1223
1443
  newsKeywords: 'novidades versão lançamento changelog',
@@ -1407,7 +1627,6 @@ const SPINE_MESSAGES_PT_BR = {
1407
1627
  accountSecurity: {
1408
1628
  loading: 'Carregando…',
1409
1629
  loadError: 'Não foi possível carregar a sua conta no Argos.',
1410
- sessionEnded: 'A sessão deste login terminou no Argos. Entre de novo para gerenciar a conta.',
1411
1630
  retry: 'Tentar novamente',
1412
1631
  methodTotp: 'Aplicativo autenticador',
1413
1632
  methodEmail: 'E-mail',
@@ -1513,6 +1732,123 @@ const SPINE_MESSAGES_PT_BR = {
1513
1732
  sessionEndedNotice: 'Sessão encerrada.',
1514
1733
  othersEndedNotice: { zero: 'Nenhuma sessão encerrada.', one: '1 sessão encerrada.', other: '{count} sessões encerradas.' },
1515
1734
  },
1735
+ ratings: {
1736
+ rateScreen: 'Avaliar esta tela',
1737
+ rateApp: 'Avaliar o {app}',
1738
+ ratedApp: 'Sua avaliação do {app}',
1739
+ heading: 'Faça sua avaliação',
1740
+ subheading: 'Aproveite para deixar sua opinião',
1741
+ aboutScreen: 'Tela: {screen}',
1742
+ aboutApp: 'O {app} como um todo',
1743
+ score: 'Sua nota',
1744
+ scoreOf: '{value} de 10',
1745
+ scoreNamed: '{value} de 10 — {name}',
1746
+ scoreShort: '{value}/10',
1747
+ scoreNames: { 1: 'Ruim', 2: 'Regular', 3: 'Bom', 4: 'Muito bom', 5: 'Excelente' },
1748
+ noScore: 'Sem nota',
1749
+ scaleHint: 'De 0 a 10: cada estrela vale 2 e meia estrela, 1. As setas mudam de meia em meia; clicar de novo na primeira meia estrela dá 0.',
1750
+ comment: 'Comentário',
1751
+ commentPlaceholder: 'O que funcionou, o que poderia melhorar (opcional)',
1752
+ submit: 'Avaliar',
1753
+ update: 'Atualizar',
1754
+ previous: 'Você avaliou em {date}. Pode mudar quando quiser.',
1755
+ scoreRequired: 'Escolha uma nota de 0 a 10.',
1756
+ loading: 'Carregando a sua avaliação…',
1757
+ thanks: 'Obrigado pela avaliação!',
1758
+ updated: 'Avaliação atualizada. Obrigado!',
1759
+ saveError: 'Não foi possível enviar a avaliação. Tente de novo.',
1760
+ period: 'Período',
1761
+ periods: { all: 'Tudo', d7: '7 dias', d30: '30 dias', d90: '90 dias' },
1762
+ refresh: 'Atualizar',
1763
+ appCard: 'A ferramenta',
1764
+ screensCard: 'As telas',
1765
+ appCardHint: 'Avaliação geral',
1766
+ screensCardHint: 'Avaliação geral das telas',
1767
+ scoreMax: '/10',
1768
+ average: 'Média',
1769
+ total: { zero: 'Nenhuma avaliação', one: '1 avaliação', other: '{count} avaliações' },
1770
+ comments: { zero: 'nenhum comentário', one: '1 comentário', other: '{count} comentários' },
1771
+ noRatings: 'Ainda não há avaliações no período.',
1772
+ distribution: 'Distribuição das notas',
1773
+ distributionRow: 'Nota {score}: {count} ({share})',
1774
+ ranking: 'Avaliações por tela e área',
1775
+ rankingHint: 'Compare as telas. Clique numa para ver as avaliações dela.',
1776
+ sort: 'Ordem',
1777
+ sorts: { worst: 'Piores primeiro', best: 'Melhores primeiro', most: 'Mais avaliadas' },
1778
+ noScreens: 'Nenhuma tela avaliada no período.',
1779
+ filterByScreen: 'Ver as avaliações de {screen}',
1780
+ recent: 'Avaliações recentes',
1781
+ recentHint: 'Da mais nova para a mais antiga.',
1782
+ filterScope: 'O que foi avaliado',
1783
+ allScopes: 'Ferramenta e telas',
1784
+ tool: 'A ferramenta',
1785
+ screens: 'As telas',
1786
+ filterScreen: 'Tela',
1787
+ allScreens: 'Todas as telas',
1788
+ filterScore: 'Nota',
1789
+ allScores: 'Todas as notas',
1790
+ withComment: 'Mostrar apenas com comentário',
1791
+ clearFilters: 'Limpar filtros',
1792
+ noComment: 'Sem comentário.',
1793
+ itemActions: 'Ações da avaliação',
1794
+ copyComment: 'Copiar comentário',
1795
+ commentCopied: 'Comentário copiado.',
1796
+ copyFailed: 'Não foi possível copiar o comentário.',
1797
+ showAppRatings: 'Ver avaliações da ferramenta',
1798
+ showScreenRatings: 'Ver avaliações desta tela',
1799
+ emptyList: 'Nenhuma avaliação com esses filtros.',
1800
+ pagination: 'Páginas das avaliações',
1801
+ unknownUser: 'Usuário',
1802
+ loadError: 'Não foi possível carregar as avaliações.',
1803
+ forbidden: 'Você não administra esta aplicação, ou está sem o crachá Administrador ativo.',
1804
+ updatedAt: 'Atualizado em {date} às {time}',
1805
+ details: 'Ver detalhes',
1806
+ detailsOf: '(avaliações de {name})',
1807
+ tabScreens: 'Telas',
1808
+ tabAreas: 'Áreas',
1809
+ tabTrends: 'Tendências',
1810
+ viewAll: 'Ver todas as avaliações',
1811
+ allHeading: 'Todas as avaliações',
1812
+ justNow: 'Agora há pouco',
1813
+ yesterdayAt: 'Ontem às {time}',
1814
+ dateAt: '{date} às {time}',
1815
+ sortsShort: { worst: 'Piores', best: 'Melhores', most: 'Mais avaliadas' },
1816
+ bands: { all: 'Todas as notas', bad: 'Ruins (abaixo de 5)', mid: 'Médias (5 a 6,9)', good: 'Boas (7 ou mais)' },
1817
+ bandFilter: 'Faixa da nota',
1818
+ filterArea: 'Área',
1819
+ allAreas: 'Todas as áreas',
1820
+ noArea: 'Sem área',
1821
+ filterByArea: 'Ver as telas de {area}',
1822
+ screensCount: { one: '1 tela', other: '{count} telas' },
1823
+ searchScreens: 'Buscar tela ou caminho…',
1824
+ searchScreensLabel: 'Buscar tela',
1825
+ searchAreas: 'Buscar área…',
1826
+ searchAreasLabel: 'Buscar área',
1827
+ tableEmpty: 'Nenhuma tela com esses filtros.',
1828
+ areasEmpty: 'Nenhuma área com esses filtros.',
1829
+ colScreen: 'Tela',
1830
+ colArea: 'Área',
1831
+ colScreens: 'Telas',
1832
+ colScore: 'Nota',
1833
+ colTotal: 'Avaliações',
1834
+ colComments: 'Comentários',
1835
+ colTrend: 'Tendência',
1836
+ colOpen: 'Abrir',
1837
+ tablePagination: 'Páginas das telas',
1838
+ areasPagination: 'Páginas das áreas',
1839
+ trendOf: 'Média por semana: de {first} para {last}',
1840
+ trendNone: 'Sem notas por semana no período.',
1841
+ trendCaption: 'Média por semana, de 0 a 10',
1842
+ trendEmpty: 'Sem avaliações no período para mostrar a tendência.',
1843
+ trendValue: '{series} {value}',
1844
+ trendWeek: 'Semana de {week}: {values} ({count})',
1845
+ aboutRating: 'Avaliação',
1846
+ aboutRatingKeywords: 'avaliar nota estrelas média opinião',
1847
+ rateAction: 'Avaliar',
1848
+ noRatingsYet: 'Ainda sem avaliações.',
1849
+ loadingAverage: 'Carregando a média…',
1850
+ averageError: 'Não foi possível carregar a média.',
1851
+ },
1516
1852
  notification: {
1517
1853
  genericError: 'Ocorreu um erro no processamento de sua solicitação.',
1518
1854
  },
@@ -1543,24 +1879,36 @@ const SPINE_MESSAGES_PT_BR = {
1543
1879
  },
1544
1880
  home: {
1545
1881
  noAccessTitle: 'Você ainda não tem acesso a nenhuma tela',
1546
- noAccessText: 'O acesso é liberado pelo gestor da sua área. Se ele já aprovou, saia e entre de novo, ou abra um chamado para a equipe responsável.',
1882
+ noAccessText: 'O acesso é liberado pelo administrador da aplicação ou pelo administrador de um grupo com acesso a ela. Se ele já liberou, saia e entre de novo.',
1547
1883
  yourScreens: 'Suas telas',
1548
- modules: 'Módulos',
1884
+ modules: 'Acesso rápido',
1549
1885
  privileged: 'Acesso privilegiado',
1550
- recent: 'Abertos recentemente',
1886
+ recent: 'Continuar de onde parou',
1551
1887
  recentCaption: 'As telas que você abriu por último, da mais recente para a mais antiga.',
1552
1888
  screenCount: { one: '1 tela', other: '{count} telas' },
1553
1889
  favorite: 'Favoritar {name}',
1554
1890
  unfavorite: 'Remover {name} dos favoritos',
1555
1891
  favorites: 'Favoritos',
1556
- navigate: 'Navegar',
1892
+ morning: 'Bom dia',
1893
+ afternoon: 'Boa tarde',
1894
+ evening: 'Boa noite',
1895
+ greetingName: '{greeting}, {name}',
1896
+ intro: 'Acesse suas ferramentas e acompanhe as atualizações dos seus sistemas.',
1897
+ seeAll: 'Ver tudo',
1898
+ seeLess: 'Ver menos',
1899
+ recentActions: 'Mais ações para {name}',
1900
+ forgetRecent: 'Remover do histórico',
1901
+ explore: 'Explorar sistemas',
1902
+ exploreIntro: 'Acesse os principais módulos da plataforma.',
1903
+ news: 'Novidades',
1904
+ newsBadge: 'Atualizações',
1905
+ newsAll: 'Ver todas',
1906
+ favoritesEmpty: 'Toque no coração da barra de uma tela para ela aparecer aqui.',
1907
+ help: 'Ajuda e recursos',
1908
+ shortcuts: 'Atalhos do teclado',
1909
+ essentials: 'Rever o essencial',
1557
1910
  settings: 'Configurações',
1558
- tools: 'Ferramentas',
1559
1911
  systemDocs: 'Documentação do sistema',
1560
- colScreen: 'Tela',
1561
- colWhere: 'Onde fica',
1562
- colFavorite: 'Favoritar',
1563
- noModule: 'Sem módulo',
1564
1912
  },
1565
1913
  autoService: {
1566
1914
  loading: 'Carregando...',
@@ -1574,9 +1922,6 @@ const SPINE_MESSAGES_PT_BR = {
1574
1922
  inactive: 'Inativo',
1575
1923
  confirmChanges: 'Confirmar alterações',
1576
1924
  appsTitle: 'Aplicações',
1577
- appsIntro: 'Gerencie as aplicações (client_credentials) deste client — sem depender do painel central.',
1578
- clientTitle: 'Cliente',
1579
- clientIntro: 'Gerencie rotas, roteadores e acesso deste client — sem depender do painel central.',
1580
1925
  clientSections: 'Seções do cliente',
1581
1926
  tabRoutes: 'Rotas',
1582
1927
  tabRouters: 'Roteadores',
@@ -1585,31 +1930,31 @@ const SPINE_MESSAGES_PT_BR = {
1585
1930
  clientsLoadError: 'Não foi possível carregar os clients que você administra (HTTP {status}). Isso não é falta de permissão: o Argos não respondeu. Tente de novo em instantes.',
1586
1931
  retryLoad: 'Tentar de novo',
1587
1932
  pickClient: 'Selecione o client que deseja administrar',
1588
- groupsTitle: 'Grupos',
1589
- groupsIntro: 'Crie, edite e exclua os grupos deste client e gerencie os membros — sem depender do painel central.',
1590
- groupsFixed: 'Os 5 grupos abaixo são fixos deste client e não podem ser renomeados, criados ou excluídos — consulte um para gerenciar seus membros.',
1591
1933
  pickGroup: 'Selecione um grupo',
1592
1934
  noDescription: 'Sem descrição cadastrada.',
1593
- pickGroupHint: 'Consulte um grupo acima para visualizar e gerenciar seus membros.',
1594
1935
  manageMembers: 'Gerenciar membros',
1595
1936
  membersCaption: 'Membros do grupo',
1596
1937
  noMembers: 'Nenhum membro neste grupo.',
1597
1938
  colUser: 'Usuário',
1598
1939
  colMemberSince: 'Membro desde',
1599
1940
  membersHeading: 'Membros — {group}',
1600
- addUser: 'Adicionar usuário (username ou email)',
1941
+ addUser: 'Adicionar usuário',
1601
1942
  userSearch: 'Buscar por nome, username ou email...',
1602
1943
  role: 'Função (opcional)',
1603
- pickRole: 'Selecione uma função',
1944
+ noRole: 'Membro (sem função)',
1604
1945
  add: 'Adicionar',
1605
1946
  suggestions: 'Sugestões',
1606
- moreSuggestions: 'Ver mais sugestões',
1947
+ suggestionsHint: 'Quem já está em outros grupos deste sistema',
1948
+ suggestionGroups: 'Em {groups}',
1949
+ addSuggestion: 'Adicionar {name} ao grupo',
1950
+ membersTitle: 'Membros do grupo',
1951
+ memberSearch: 'Buscar membro...',
1607
1952
  membersOf: 'Membros do grupo {group}',
1608
1953
  noMembersShort: 'Nenhum membro.',
1609
1954
  newMember: 'Novo',
1610
1955
  addedBy: 'por {user}',
1611
1956
  removal: 'Remoção',
1612
- removalEmpty: 'Selecione um ou mais membros da lista ao lado para removê-los do grupo.',
1957
+ removalEmpty: 'Marque membros na lista para removê-los do grupo. A remoção só vale ao salvar.',
1613
1958
  undoRemoval: 'Desfazer remoção',
1614
1959
  saveChanges: 'Salvar alterações',
1615
1960
  colRole: 'Função',
@@ -1619,14 +1964,11 @@ const SPINE_MESSAGES_PT_BR = {
1619
1964
  accessCaption: 'Acessos do client',
1620
1965
  noAccess: 'Nenhum acesso concedido ainda.',
1621
1966
  colGroup: 'Grupo',
1622
- colBadge: 'Crachá',
1623
1967
  manageRoutes: 'Gerenciar rotas',
1624
1968
  group: 'Grupo',
1625
1969
  routesOf: 'Rotas de {group}',
1626
- guardsHint: 'Só aparecem aqui routers privados sem restrição de badge, ou cujo badge permitido inclua <strong>{badge}</strong> (o badge deste grupo).',
1627
1970
  noPrivateRoutes: 'Nenhuma rota privada disponível pro badge deste grupo.',
1628
1971
  register: 'Cadastrar',
1629
- appsSearchIntro: 'Consulte uma aplicação (client_credentials) deste client pra gerenciar operações e acessos — sem depender do painel central.',
1630
1972
  secretCreated: 'Aplicação criada. Salve o secret agora, ele não será exibido novamente:',
1631
1973
  pickApp: 'Selecione uma aplicação',
1632
1974
  disable: 'Desativar',
@@ -1645,6 +1987,7 @@ const SPINE_MESSAGES_PT_BR = {
1645
1987
  manageOperations: 'Gerenciar operações',
1646
1988
  colOperations: 'Operações',
1647
1989
  colGuards: 'Guards',
1990
+ colMembers: 'Membros',
1648
1991
  filterOperations: 'Filtrar operações',
1649
1992
  filterRoutes: 'Filtrar rotas',
1650
1993
  noFilterMatch: 'Nada encontrado para “{term}”.',
@@ -1658,7 +2001,6 @@ const SPINE_MESSAGES_PT_BR = {
1658
2001
  colDescription: 'Descrição',
1659
2002
  colAllowedGroups: 'Grupos permitidos',
1660
2003
  groupCount: { one: '1 grupo', other: '{count} grupos' },
1661
- routersTitle: 'Roteadores',
1662
2004
  newRouter: 'Novo roteador',
1663
2005
  routersCaption: 'Roteadores do client',
1664
2006
  noRouters: 'Nenhum roteador cadastrado ainda.',
@@ -1681,7 +2023,6 @@ const SPINE_MESSAGES_PT_BR = {
1681
2023
  colAllowedBadges: 'Crachás permitidos',
1682
2024
  anyBadge: 'Qualquer crachá',
1683
2025
  allowedBadgesHint: 'Vazio = qualquer crachá. Com um ou mais escolhidos, só os grupos com um desses crachás podem receber acesso a esta tela na aba Acesso.',
1684
- routesTitle: 'Rotas',
1685
2026
  newRoute: 'Nova rota',
1686
2027
  routesCaption: 'Rotas do client',
1687
2028
  noRoutes: 'Nenhuma rota cadastrada ainda.',
@@ -1757,7 +2098,6 @@ const SPINE_MESSAGES_PT_BR = {
1757
2098
  reorderSave: 'Salvar ordem',
1758
2099
  newGroup: 'Novo grupo',
1759
2100
  editGroup: 'Editar grupo',
1760
- groupsCaption: 'Grupos do projeto',
1761
2101
  noGroups: 'Nenhum grupo cadastrado ainda.',
1762
2102
  accessLevel: 'Nível de acesso',
1763
2103
  pickAccessLevel: 'Selecione o nível',
@@ -1768,19 +2108,11 @@ const SPINE_MESSAGES_PT_BR = {
1768
2108
  groupType: 'Tipo',
1769
2109
  groupTypePlaceholder: 'Selecione o tipo',
1770
2110
  groupDescription: 'Descrição (opcional)',
1771
- openGroup: 'Abrir o grupo {name}',
1772
- adminGroupTag: 'Administração',
1773
- adminGroupNote: 'Grupo de administração do projeto: quem está nele administra este app no auto-serviço. É o único do projeto, não pode ser excluído, renomeado, desativado nem mudar de tipo, e não pode ficar sem membros.',
1774
- adminGroupEditNote: 'Grupo de administração do projeto: só a descrição pode ser alterada.',
1775
- adminGroupLastMemberWarning: 'O grupo de administração não pode ficar sem membros: inclua outra pessoa ou desfaça uma remoção.',
1776
2111
  confirmDeleteGroupHeading: 'Excluir grupo?',
1777
2112
  confirmDeleteGroup: 'O grupo {name} será excluído junto com os membros, os acessos a telas e as permissões em aplicações. Esta ação não pode ser desfeita.',
1778
2113
  groupSaveError: 'Não foi possível salvar o grupo. Tente de novo.',
1779
2114
  membersSaveError: 'Não foi possível salvar todas as alterações dos membros. Confira a lista e tente de novo.',
1780
- appsCaption: 'Aplicações do projeto',
1781
2115
  noApps: 'Nenhuma aplicação cadastrada ainda.',
1782
- colGrants: 'Grants',
1783
- openApp: 'Abrir a aplicação {name}',
1784
2116
  tabTokens: 'Tokens',
1785
2117
  tokensCaption: 'Tokens da aplicação',
1786
2118
  noTokens: 'Nenhum token criado para esta aplicação ainda.',
@@ -1859,8 +2191,6 @@ const SPINE_MESSAGES_PT_BR = {
1859
2191
  },
1860
2192
  autoServiceAudit: {
1861
2193
  title: 'Auditoria',
1862
- intro: 'O que aconteceu nas aplicações deste projeto: quem fez, o quê, quando e com que resultado.',
1863
- tabApps: 'Aplicações',
1864
2194
  period: 'Período',
1865
2195
  periodLastHour: 'Última hora',
1866
2196
  period24h: 'Últimas 24 horas',
@@ -1898,7 +2228,6 @@ const SPINE_MESSAGES_PT_BR = {
1898
2228
  topUsers: 'Usuários mais ativos',
1899
2229
  topApps: 'Por aplicação',
1900
2230
  noTop: 'Nada no período.',
1901
- eventCount: { one: '1 evento', other: '{count} eventos' },
1902
2231
  failureCount: { one: '1 falha', other: '{count} falhas' },
1903
2232
  deniedCount: { one: '1 negado', other: '{count} negados' },
1904
2233
  filterBy: 'Filtrar por {name}',
@@ -1962,9 +2291,6 @@ const SPINE_MESSAGES_PT_BR = {
1962
2291
  one: '1 evento desta cadeia é de uma aplicação fora do seu projeto e não aparece aqui.',
1963
2292
  other: '{count} eventos desta cadeia são de aplicações fora do seu projeto e não aparecem aqui.',
1964
2293
  },
1965
- traceCurrent: 'este evento',
1966
- openTraceEvent: 'Abrir {operation} de {time}',
1967
- introAdmin: 'O que aconteceu em todas as aplicações: quem fez, o quê, quando e com que resultado.',
1968
2294
  period6h: 'Últimas 6 horas',
1969
2295
  refresh: 'Atualizar',
1970
2296
  autoRefresh: 'Atualizar a cada 30 s',
@@ -2151,6 +2477,322 @@ const SPINE_MESSAGES_PT_BR = {
2151
2477
  syncError: 'Não foi possível sincronizar. Tente de novo.',
2152
2478
  syncNow: 'Sincronizar agora',
2153
2479
  },
2480
+ suggestions: {
2481
+ button: 'Sugerir melhoria',
2482
+ buttonHint: 'Sugerir uma melhoria para esta tela',
2483
+ modalTitle: 'Sugerir melhoria',
2484
+ intro: 'Conte o que facilitaria o seu trabalho. Quem administra a aplicação recebe o pedido e responde por aqui.',
2485
+ kind: 'Tipo',
2486
+ kinds: { melhoria: 'Melhoria', nova_funcionalidade: 'Nova funcionalidade', problema: 'Problema', outro: 'Outro' },
2487
+ statuses: {
2488
+ em_analise: 'Em análise', planejada: 'Planejada', em_desenvolvimento: 'Em desenvolvimento',
2489
+ concluida: 'Concluída', recusada: 'Recusada',
2490
+ },
2491
+ legacyStatuses: { nova: 'Nova' },
2492
+ title: 'Título',
2493
+ titlePlaceholder: 'Ex.: Filtrar a lista por data',
2494
+ titleRequired: 'Informe um título.',
2495
+ description: 'Descrição',
2496
+ descriptionHint: 'O que você tentou fazer, o que esperava e por que ajudaria.',
2497
+ screen: 'Tela',
2498
+ screenHint: 'De onde vem a sugestão. Ajuste se for de outra tela.',
2499
+ send: 'Enviar sugestão',
2500
+ cancel: 'Cancelar',
2501
+ sent: 'Sugestão enviada. Obrigado!',
2502
+ sendError: 'Não foi possível enviar a sugestão. Tente de novo.',
2503
+ similarHeading: 'Já pediram nesta tela',
2504
+ similarHint: 'Se for o mesmo pedido, apoie em vez de repetir.',
2505
+ vote: 'Também quero',
2506
+ voted: 'Você apoia',
2507
+ votes: { one: '{count} apoio', other: '{count} apoios' },
2508
+ voteError: 'Não foi possível registrar o apoio.',
2509
+ yours: 'Sua',
2510
+ mine: 'Minhas sugestões',
2511
+ mineEmpty: 'Você ainda não enviou sugestões nesta aplicação.',
2512
+ mineError: 'Não foi possível carregar as suas sugestões.',
2513
+ loadMore: 'Carregar mais',
2514
+ statusFilter: 'Status',
2515
+ allStatuses: 'Todos',
2516
+ adminReply: 'Resposta da administração',
2517
+ sentAt: 'Enviada em {date}',
2518
+ boardLabel: 'Quadro de sugestões',
2519
+ search: 'Buscar sugestões',
2520
+ kindFilter: 'Tipo',
2521
+ allKinds: 'Todos os tipos',
2522
+ refresh: 'Atualizar',
2523
+ boardEmpty: 'Nenhuma sugestão ainda',
2524
+ boardEmptyHint: 'Os pedidos feitos pelo botão "Sugerir melhoria" das telas aparecem aqui.',
2525
+ boardFiltered: '{shown} de {total} sugestões',
2526
+ loadError: 'Não foi possível carregar as sugestões.',
2527
+ moveError: 'Não foi possível mover a sugestão. O quadro foi recarregado.',
2528
+ removedAuthor: 'Pessoa removida',
2529
+ noScreen: 'Sem tela',
2530
+ noDescription: 'Sem descrição.',
2531
+ requestedBy: 'Pedida por',
2532
+ requestedAt: 'Em',
2533
+ status: 'Status',
2534
+ statusSaved: 'Status atualizado.',
2535
+ statusError: 'Não foi possível mudar o status.',
2536
+ history: 'Histórico',
2537
+ historyEmpty: 'Sem movimentações ainda.',
2538
+ eventStatus: '{actor} moveu de {from} para {to}',
2539
+ eventComment: '{actor} comentou',
2540
+ someone: 'Alguém',
2541
+ comment: 'Comentário para quem pediu',
2542
+ commentHint: 'A pessoa vê em "Minhas sugestões".',
2543
+ commentSend: 'Comentar',
2544
+ commentSent: 'Comentário enviado.',
2545
+ commentError: 'Não foi possível enviar o comentário.',
2546
+ commentRequired: 'Escreva o comentário.',
2547
+ viewLabel: 'Visualização',
2548
+ viewBoard: 'Quadro',
2549
+ viewArchive: 'Arquivo',
2550
+ kpis: 'Indicadores das sugestões',
2551
+ kpiOpen: 'Em andamento',
2552
+ kpiStatusCount: '{status} {count}',
2553
+ kpiDone: 'Concluídas em {days} dias',
2554
+ kpiDoneToday: '+{count} hoje',
2555
+ kpiDoneNoneToday: 'Nenhuma concluída hoje',
2556
+ kpiOverdueTrend: '+{count} desde ontem',
2557
+ kpiOverdueSteady: 'Nenhuma nova desde ontem',
2558
+ kpiSoon: 'Vencendo em breve',
2559
+ kpiMineHint: 'Abertas com você entre os responsáveis',
2560
+ kpiPriority: 'Abertas por prioridade',
2561
+ kpiPriorityNone: 'Nenhuma aberta',
2562
+ kpiPriorityPart: '{priority} {count}',
2563
+ filters: 'Filtros do quadro',
2564
+ moreFilters: 'Mais filtros',
2565
+ moreFiltersActive: 'Mais filtros ({count})',
2566
+ allBoardStatuses: 'Todos os status',
2567
+ newTaskIn: 'Nova tarefa em {status}',
2568
+ newTaskOptions: 'Criar em outra coluna',
2569
+ columnOldest: 'Mais antiga há {age}',
2570
+ columnOverdue: { one: '{count} vencida', other: '{count} vencidas' },
2571
+ columnEmpty: 'Nenhuma tarefa nesta coluna.',
2572
+ columnEmptyFiltered: 'Nenhuma tarefa com estes filtros.',
2573
+ columnEmptyHints: {
2574
+ em_analise: 'Os pedidos novos chegam aqui para a equipe avaliar.',
2575
+ planejada: 'O que já foi aceito e espera a vez de ser feito.',
2576
+ em_desenvolvimento: 'O que a equipe está fazendo agora.',
2577
+ concluida: 'As entregas dos últimos {days} dias ficam aqui.',
2578
+ },
2579
+ duration: { days: '{d}d {h}h', hours: '{h}h {m}min', minutes: '{m}min' },
2580
+ createdOn: 'Criada em {date}',
2581
+ dueWithin: 'No prazo · até {date}',
2582
+ dueLateDays: { one: 'Vencida há {count} dia', other: 'Vencida há {count} dias' },
2583
+ screenFilter: 'Tela',
2584
+ allScreens: 'Todas as telas',
2585
+ authorFilter: 'Quem pediu',
2586
+ allAuthors: 'Todas as pessoas',
2587
+ sort: 'Ordenar',
2588
+ sorts: { position: 'Ordem do quadro', votes: 'Mais votadas', recent: 'Mais recentes' },
2589
+ sortHint: 'Com esta ordenação, arrastar só muda a coluna (o cartão vai para o fim dela).',
2590
+ clearFilters: 'Limpar filtros',
2591
+ topVoted: 'Mais votada',
2592
+ comments: { one: '{count} comentário', other: '{count} comentários' },
2593
+ statusSince: 'Desde {date}',
2594
+ openScreen: 'Abrir a tela',
2595
+ statusChange: 'Mudar o status',
2596
+ statusComment: 'Comentário (opcional)',
2597
+ statusCommentHint: 'Vai junto com a mudança; a pessoa vê em "Minhas sugestões".',
2598
+ statusApply: 'Mudar status',
2599
+ archiveLabel: 'Arquivo de sugestões',
2600
+ archiveSearch: 'Buscar no arquivo',
2601
+ archiveEmpty: 'Nada no arquivo',
2602
+ archiveEmptyHint: 'Sugestões recusadas e as concluídas há mais de {days} dias aparecem aqui.',
2603
+ archiveCount: { one: '{count} sugestão no arquivo', other: '{count} sugestões no arquivo' },
2604
+ closedOn: { concluida: 'Concluída em {date}', recusada: 'Recusada em {date}' },
2605
+ pagination: 'Páginas do arquivo',
2606
+ reopen: 'Reabrir',
2607
+ reopened: 'Sugestão reaberta: voltou para Em análise.',
2608
+ reopenError: 'Não foi possível reabrir a sugestão.',
2609
+ newTask: 'Nova tarefa',
2610
+ addTaskPlaceholder: 'Título da tarefa (Enter cria)',
2611
+ taskCreated: 'Tarefa criada.',
2612
+ createError: 'Não foi possível criar a tarefa.',
2613
+ saveError: 'Não foi possível salvar. Tente de novo.',
2614
+ kpiMine: 'Atribuídas a mim',
2615
+ kpiOverdue: 'Vencidas',
2616
+ assigneeFilter: 'Responsável',
2617
+ allAssignees: 'Qualquer responsável',
2618
+ assigneeMine: 'Minhas',
2619
+ assigneeNone: 'Sem responsável',
2620
+ labelFilter: 'Rótulo',
2621
+ allLabels: 'Todos os rótulos',
2622
+ priorityFilter: 'Prioridade',
2623
+ allPriorities: 'Todas as prioridades',
2624
+ dueFilter: 'Prazo',
2625
+ dueAny: 'Qualquer prazo',
2626
+ dueOverdueFilter: 'Vencidas',
2627
+ dueSoonFilter: 'Vencem hoje ou amanhã',
2628
+ priority: 'Prioridade',
2629
+ priorities: { urgente: 'Urgente', alta: 'Alta', media: 'Média', baixa: 'Baixa' },
2630
+ dueOn: 'Até {date}',
2631
+ dueToday: 'Vence hoje',
2632
+ dueTomorrow: 'Vence amanhã',
2633
+ dueLate: 'Venceu em {date}',
2634
+ checklistSpoken: '{done} de {total} itens feitos',
2635
+ moreAssignees: '+{count}',
2636
+ cardMenu: 'Ações de {key}',
2637
+ menuStatus: 'Alterar status',
2638
+ menuAssignMe: 'Atribuir a mim',
2639
+ menuCopyLink: 'Copiar link',
2640
+ menuCopyKey: 'Copiar chave',
2641
+ menuLabel: 'Rótulos',
2642
+ menuNoLabels: 'Nenhum rótulo no app',
2643
+ menuPriority: 'Prioridade',
2644
+ menuCover: 'Selecionar capa',
2645
+ menuArchive: 'Arquivar',
2646
+ menuRestore: 'Restaurar no quadro',
2647
+ menuDelete: 'Excluir',
2648
+ cover: 'Capa',
2649
+ coverSolid: 'Cores',
2650
+ coverGradient: 'Gradientes',
2651
+ coverRemove: 'Remover capa',
2652
+ coverName: 'Cor {n}',
2653
+ gradientName: 'Gradiente {n}',
2654
+ linkCopied: 'Link copiado.',
2655
+ keyCopied: 'Chave copiada.',
2656
+ copyError: 'Não foi possível copiar.',
2657
+ deleteHeading: 'Excluir {key}?',
2658
+ deleteMessage: 'A tarefa, o checklist, os comentários e as atividades saem de vez. Não dá para desfazer.',
2659
+ deleteConfirm: 'Excluir',
2660
+ deleted: 'Tarefa excluída.',
2661
+ archivedToast: 'Tarefa arquivada: está no Arquivo.',
2662
+ restoredToast: 'Tarefa de volta ao quadro.',
2663
+ assignedToMe: 'Atribuída a você.',
2664
+ archivedTag: 'Arquivada',
2665
+ taskLabel: 'Tarefa',
2666
+ close: 'Fechar',
2667
+ editTitle: 'Editar título',
2668
+ editDescription: 'Editar descrição',
2669
+ save: 'Salvar',
2670
+ checklist: 'Checklist',
2671
+ checklistAdd: 'Adicionar item',
2672
+ checklistPlaceholder: 'Novo item (Enter adiciona)',
2673
+ checklistOnCard: 'Mostrar no cartão',
2674
+ checklistEmpty: 'Sem itens ainda.',
2675
+ checklistRemove: 'Remover "{text}"',
2676
+ checklistUp: 'Subir "{text}"',
2677
+ checklistDown: 'Descer "{text}"',
2678
+ tabComments: 'Comentários',
2679
+ tabActivity: 'Atividades',
2680
+ commentsEmpty: 'Sem comentários ainda.',
2681
+ activityEmpty: 'Sem atividades ainda.',
2682
+ commentInternal: 'Só para a equipe (interno: quem pediu não vê)',
2683
+ internalTag: 'Interno',
2684
+ activity: {
2685
+ created: '{actor} criou a tarefa',
2686
+ title: '{actor} renomeou de "{from}" para "{to}"',
2687
+ description: '{actor} editou a descrição',
2688
+ kind: '{actor} mudou o tipo de {from} para {to}',
2689
+ priority: '{actor} mudou a prioridade de {from} para {to}',
2690
+ start_date: '{actor} marcou o início para {to}',
2691
+ start_date_removed: '{actor} tirou a data de início',
2692
+ due_date: '{actor} marcou a conclusão para {to}',
2693
+ due_date_removed: '{actor} tirou a data de conclusão',
2694
+ cover: '{actor} trocou a capa',
2695
+ cover_removed: '{actor} tirou a capa',
2696
+ checklist_on_card: '{actor} mudou o checklist no cartão',
2697
+ screen: '{actor} mudou a tela para {to}',
2698
+ assignee_added: '{actor} atribuiu a {to}',
2699
+ assignee_removed: '{actor} tirou {from} dos responsáveis',
2700
+ watcher_added: '{actor} pôs {to} como envolvido',
2701
+ watcher_removed: '{actor} tirou {from} dos envolvidos',
2702
+ label_added: '{actor} pôs o rótulo {to}',
2703
+ label_removed: '{actor} tirou o rótulo {from}',
2704
+ checklist_added: '{actor} adicionou "{to}" ao checklist',
2705
+ checklist_done: '{actor} concluiu "{to}"',
2706
+ checklist_undone: '{actor} reabriu "{to}"',
2707
+ checklist_renamed: '{actor} renomeou "{from}" para "{to}" no checklist',
2708
+ checklist_removed: '{actor} removeu "{from}" do checklist',
2709
+ archived: '{actor} arquivou a tarefa',
2710
+ restored: '{actor} restaurou a tarefa no quadro',
2711
+ merged: '{actor} agrupou esta em {to}',
2712
+ merged_here: '{actor} agrupou {to} aqui',
2713
+ unmerged: '{actor} desagrupou esta de {from}',
2714
+ unmerged_here: '{actor} desagrupou {from} daqui',
2715
+ other: '{actor} alterou a tarefa',
2716
+ },
2717
+ assignees: 'Responsáveis',
2718
+ assignMe: 'Atribuir a mim',
2719
+ addAssignee: 'Adicionar responsável',
2720
+ watchers: 'Envolvidos',
2721
+ addWatcher: 'Adicionar envolvido',
2722
+ removePerson: 'Tirar {name}',
2723
+ peopleSearch: 'Buscar pessoa',
2724
+ peopleEmpty: 'Ninguém encontrado.',
2725
+ nobody: 'Ninguém',
2726
+ reporter: 'Relator',
2727
+ originUser: 'Pedida pela tela',
2728
+ originTeam: 'Criada pela equipe',
2729
+ startDate: 'Início',
2730
+ dueDate: 'Conclusão',
2731
+ labels: 'Rótulos',
2732
+ addLabel: 'Rótulos',
2733
+ createLabel: 'Criar o rótulo "{name}"',
2734
+ labelColor: 'Cor do rótulo',
2735
+ noLabels: 'Sem rótulos',
2736
+ screenOrigin: 'Tela de origem',
2737
+ votesField: 'Apoios',
2738
+ createdAt: 'Criada em',
2739
+ updatedAt: 'Atualizada em',
2740
+ lastChange: 'Última alteração {when} por {actor}',
2741
+ lastChangeNoActor: 'Última alteração {when}',
2742
+ key: 'Chave',
2743
+ copyKey: 'Copiar a chave',
2744
+ newTaskHeading: 'Nova tarefa',
2745
+ createTask: 'Criar tarefa',
2746
+ draftHint: 'Responsáveis, checklist e comentários ficam disponíveis assim que a tarefa for criada.',
2747
+ assignMeOnCreate: 'Atribuir a mim',
2748
+ appSuggestions: 'Sugestões do app',
2749
+ listView: 'Quais sugestões mostrar',
2750
+ tabAll: 'Todas',
2751
+ tabMine: 'Minhas',
2752
+ appSearch: 'Buscar por título, descrição ou SUG-12',
2753
+ thisScreen: 'Desta tela',
2754
+ appSorts: { votes: 'Mais apoiadas', recent: 'Recentes' },
2755
+ appEmpty: 'Nenhuma sugestão por aqui ainda',
2756
+ appEmptyHint: 'Seja a primeira pessoa a sugerir uma melhoria.',
2757
+ appEmptyFiltered: 'Nenhuma sugestão com esses filtros.',
2758
+ appError: 'Não foi possível carregar as sugestões do app.',
2759
+ support: 'Apoiar {count}',
2760
+ supported: 'Apoiado {count}',
2761
+ ownSupportHint: 'É a sua sugestão: o seu interesse já conta.',
2762
+ publicComments: 'Comentários',
2763
+ publicCommentsEmpty: 'Ainda sem comentários de quem administra.',
2764
+ commentsError: 'Não foi possível carregar os comentários.',
2765
+ moreComments: 'Mais comentários',
2766
+ appPagination: 'Páginas das sugestões',
2767
+ menuMerge: 'Agrupar em…',
2768
+ mergeHeading: 'Agrupar {key} em…',
2769
+ mergeIntro: 'Escolha a sugestão principal. Quem pediu e quem apoiou esta passam para ela; esta sai do quadro e fica no arquivo, com os comentários.',
2770
+ mergeSearch: 'Buscar pela chave ou pelo título',
2771
+ mergeNone: 'Nenhuma sugestão aberta para agrupar.',
2772
+ mergeHasMerged: 'Outras sugestões estão agrupadas nesta. Desagrupe-as antes de agrupá-la em outra.',
2773
+ mergePreview: '{votes} e {reporters} passam para {key}.',
2774
+ mergeCalculating: 'Calculando o que passa…',
2775
+ mergePreviewError: 'Não foi possível calcular o agrupamento.',
2776
+ reportersCount: { one: '{count} relator', other: '{count} relatores' },
2777
+ mergeConfirmHeading: 'Agrupar {key} em {target}?',
2778
+ mergeConfirmMessage: 'Dá para desfazer depois, em "Desagrupar".',
2779
+ mergeConfirm: 'Agrupar',
2780
+ mergedToast: '{key} agrupada em {target}.',
2781
+ mergeError: 'Não foi possível agrupar a sugestão.',
2782
+ mergedTag: 'Agrupada',
2783
+ mergedInto: 'Agrupada em {key}',
2784
+ mergedIntoHint: 'Os apoios e quem pediu estão na principal; os comentários ficam aqui.',
2785
+ openMerged: 'Abrir {key}',
2786
+ unmerge: 'Desagrupar',
2787
+ unmergeLabel: 'Desagrupar {key}',
2788
+ unmergedToast: '{key} desagrupada: voltou ao quadro.',
2789
+ reporters: 'Relatores',
2790
+ reporterAuthor: 'Autor',
2791
+ reporterVia: 'via {key}',
2792
+ mergedHere: 'Agrupadas aqui',
2793
+ mergedFrom: '{key} agrupada em {target}',
2794
+ mergedFromHint: 'Pedidos iguais viraram um só: você acompanha por esta.',
2795
+ },
2154
2796
  };
2155
2797
 
2156
2798
  const SPINE_MESSAGES_EN = {
@@ -2169,14 +2811,15 @@ const SPINE_MESSAGES_EN = {
2169
2811
  settings: 'Settings',
2170
2812
  appearance: 'Appearance',
2171
2813
  shortcuts: 'Keyboard shortcuts',
2172
- tour: 'Guided tour',
2173
2814
  news: "What's new",
2815
+ newsUnseen: '{label} ({count})',
2174
2816
  logout: 'Sign out',
2175
2817
  search: 'Search',
2176
2818
  searchPlaceholder: 'Search for a module or page…',
2177
- recentSearches: 'Recent searches',
2178
- clearRecent: 'Clear',
2179
- noResults: 'Nothing found for "{term}".',
2819
+ searchFavorites: 'Favorites',
2820
+ searchRecent: 'Opened recently',
2821
+ searchModules: 'Modules',
2822
+ searchScreens: 'Screens',
2180
2823
  },
2181
2824
  navigation: {
2182
2825
  back: 'Back',
@@ -2218,46 +2861,143 @@ const SPINE_MESSAGES_EN = {
2218
2861
  },
2219
2862
  news: {
2220
2863
  heading: "What's new",
2221
- carousel: "What's new in the system",
2222
- dismiss: 'Got it',
2864
+ close: 'Close',
2865
+ unseen: 'New',
2866
+ toastOne: "What's new: {title}",
2867
+ toastMany: '{count} updates',
2868
+ see: 'View',
2869
+ loading: 'Loading updates…',
2870
+ empty: 'No updates yet.',
2871
+ loadError: 'Could not load the updates.',
2872
+ retry: 'Try again',
2873
+ pages: 'List of updates',
2874
+ search: 'Search updates',
2875
+ searchPlaceholder: 'Search updates…',
2876
+ filters: 'Filter updates',
2877
+ filterAll: 'All',
2878
+ filterUnread: 'Unread',
2879
+ filterFavorites: 'Favorites',
2880
+ favorite: 'Add "{title}" to favorites',
2881
+ unfavorite: 'Remove "{title}" from favorites',
2882
+ noResults: 'No updates found.',
2883
+ home: 'Home',
2884
+ changes: 'What changed',
2885
+ before: 'Before',
2886
+ after: 'Now',
2887
+ markUnread: 'Mark as unread',
2888
+ gotIt: 'Got it',
2889
+ kindInformativo: 'Announcement',
2890
+ kindImplementacao: 'Release',
2891
+ kindAlteracao: 'Change',
2892
+ publishedOn: 'Published on {date}',
2893
+ editedOn: 'Edited on {date}',
2894
+ body: 'Update text',
2895
+ detailError: 'Could not open this update. It may have been taken down.',
2896
+ },
2897
+ autoServiceNews: {
2898
+ caption: 'App updates',
2899
+ empty: 'No updates yet. People who sign in to the app see here what changed.',
2900
+ newNews: 'New update',
2901
+ editNews: 'Edit update',
2902
+ newNewsIntro: 'Fill in the update that people will see in the app.',
2903
+ editNewsIntro: 'Change the information of the update that people will see in the app.',
2904
+ sectionMain: 'Main information',
2905
+ sectionMainHint: 'The title and the summary show in the updates list and on the Home card.',
2906
+ sectionBody: 'Update content',
2907
+ sectionBodyHint: 'Describe the details of the update. Use formatting, lists and links, and highlight what matters.',
2908
+ sectionPublish: 'Publishing',
2909
+ sectionUntil: 'Expiry (optional)',
2910
+ sectionAudience: 'Audience',
2911
+ preview: 'Preview on Home',
2912
+ previewTitle: 'Update title',
2913
+ previewSummary: 'The summary shows here.',
2914
+ previewNow: 'Published on save',
2915
+ tipTitle: 'Tip:',
2916
+ tipText: 'a short title and a direct summary stand out on Home.',
2917
+ untilDate: 'Last day it shows',
2918
+ audienceGroups: 'Groups',
2919
+ kind: 'Update type',
2920
+ kindInformativo: 'Announcement',
2921
+ kindImplementacao: 'Release',
2922
+ kindAlteracao: 'Change',
2923
+ sectionBodyHintImpl: 'A short introduction, if you want, and the list of what is new.',
2924
+ sectionBodyHintAlt: 'Show how it was before and how it is now. The introduction is optional.',
2925
+ intro: 'Introduction (optional)',
2926
+ items: 'What changed',
2927
+ itemsHint: 'One change per item, up to 300 characters. From 1 to 30 items.',
2928
+ itemPlaceholder: 'Describe a change',
2929
+ itemsEmpty: 'No changes in the list yet.',
2930
+ before: 'Before',
2931
+ after: 'Now',
2932
+ colTitle: 'Title',
2933
+ colPublishedAt: 'Published',
2934
+ colUntil: 'Valid until',
2935
+ colAudience: 'Audience',
2936
+ colAuthor: 'Author',
2937
+ colStatus: 'Status',
2938
+ statusScheduled: 'Scheduled',
2939
+ statusPublished: 'Published',
2940
+ statusExpired: 'Expired',
2941
+ audienceAll: 'Everyone',
2942
+ noUntil: 'No end',
2943
+ title: 'Title',
2944
+ summary: 'Summary',
2945
+ summaryHint: 'Write a short, direct summary. Up to 300 characters.',
2946
+ body: 'Text',
2947
+ bodyHint: 'Opens when the person clicks the update.',
2948
+ publishDate: 'Publish date',
2949
+ publishTime: 'Publish time',
2950
+ publishHint: 'A future date schedules the update. Without a date, it is published right away.',
2951
+ until: 'Valid until',
2952
+ untilHint: 'If left empty, the update never expires.',
2953
+ audience: 'Audience',
2954
+ audienceHint: 'Groups with access to the app. With no group, everyone who signs in sees it.',
2955
+ confirmDeleteHeading: 'Delete update',
2956
+ confirmDelete: 'Delete the update "{title}"? It disappears for everyone, including those who have not seen it.',
2957
+ saveError: 'Could not save the update.',
2958
+ loadError: 'Could not load the updates.',
2959
+ errors: {
2960
+ invalidTitle: 'Enter a title of up to 140 characters.',
2961
+ invalidSummary: 'The summary has up to 300 characters.',
2962
+ bodyTooLarge: 'The text is over the 64 KB limit.',
2963
+ invalidPublishedAt: 'Invalid publish date or time.',
2964
+ invalidUntil: 'Invalid expiry date.',
2965
+ invalidGroupIds: 'Some audience group no longer has access to the app. Review the audience.',
2966
+ untilBeforePublish: 'The expiry date cannot be before the publish date.',
2967
+ invalidKind: 'Invalid update type.',
2968
+ invalidItems: 'A release needs 1 to 30 changes, up to 300 characters each.',
2969
+ invalidCompare: 'A change needs both the before and the now.',
2970
+ compareTooLarge: 'The before or the now is over the 32 KB limit.',
2971
+ },
2223
2972
  },
2224
- tour: {
2225
- progress: '{current} of {total}',
2226
- skip: 'Skip tour',
2973
+ setup: {
2974
+ label: 'Initial setup',
2975
+ step: 'Step {current} of {total}',
2976
+ skip: 'Skip',
2227
2977
  back: 'Back',
2228
- next: 'Next',
2229
- finish: 'Finish',
2230
- welcomeTitle: '👋 Welcome',
2231
- welcomeText: "Let's take a quick tour of the system's main buttons. You can skip it at any time.",
2232
- appsTitle: 'Other applications',
2233
- appsText: 'This button opens the grid with the <b>other systems</b> that use the same sign-in as this one. Click one to open it in a <b>new browser tab</b>, already signed in — no need to type your password again. What you see inside each one depends on your groups there.',
2234
- searchTitle: 'Quick search',
2235
- searchText: 'Find any module or page by name. Shortcut: <b>Ctrl + K</b> from anywhere.',
2236
- navModulesTitle: 'Side navigation: modules and pages',
2237
- navModulesText: 'This is where the system <b>modules</b> live. Click a module to <b>enter</b> it: the column then shows the menus and pages inside. The <b>arrow at the top</b> goes back to the module list, and menus with pages inside expand and collapse in place.',
2238
- navModeTitle: 'Side navigation: how it sits on screen',
2239
- navModeText: 'In the footer you choose how the column behaves: <b>Open on approach</b> (stays collapsed and opens when the pointer gets close), <b>Keep open</b> or <b>Keep compact</b> (icons only). The arrow next to it <b>expands or collapses all</b> menus at once. The same choice is under <b>Settings › Appearance › Side menu</b>.',
2240
- tabsTitle: 'Tabs',
2241
- tabsText: 'Each page opens in a <b>tab</b>, like in the browser, and each tab <b>keeps its state</b>: filters, scroll and forms stay the way you left them when you come back. Click <b>+</b> for a new tab, and <b>×</b> (or the middle mouse button) to close one.',
2242
- splitTitle: 'Side-by-side tabs',
2243
- splitText: '<b>Drag</b> a tab to one of the edges of the content area to <b>split the screen</b> into two panels and work with two pages at once. Drag tabs to <b>reorder</b> them. <b>Right-click</b> a tab to split right or down, move the tab to the other panel or close the panel.',
2244
- whereTitle: 'Where you are',
2245
- whereText: 'The page name and, below it, the path to it — click a level to go back. Next to the name, <b>favorite</b> the page (♡) to find it quickly later and <b>copy the link</b> to share it.',
2246
- themeTitle: 'Light / dark theme',
2247
- themeText: 'Switches the look of the system. Shortcut: <b>Ctrl + .</b>',
2248
- densityTitle: 'Density',
2249
- densityText: 'Adjusts screen spacing — from most compact to most comfortable.',
2250
- fullscreenTitle: 'Full screen',
2251
- fullscreenText: 'Hides the browser bar so you can focus on the system. Shortcut: <b>Ctrl + ⇧ + F</b>',
2252
- profileTitle: 'Your profile',
2253
- profileText: "Switch badge (if you have more than one), settings, guided tour, <b>what's new</b>, keyboard shortcuts, theme and sign out — it's all in this menu. Tip: press <b>?</b> to open the shortcuts directly.",
2254
- doneTitle: '⌨️ All set!',
2255
- doneText: 'You can replay this tour whenever you want from your <b>profile › Guided tour</b> menu. And press <b>?</b> at any time to see all keyboard shortcuts.',
2978
+ next: 'Continue',
2979
+ finish: 'Get started',
2980
+ close: 'Got it',
2981
+ greeting: 'Hi, {name}. Make it yours.',
2982
+ greetingAnonymous: 'Make it yours.',
2983
+ appearanceIntro: 'Choose how the systems look to you. Your choice applies to all of them and can be changed any time in settings.',
2984
+ preview: 'Preview',
2985
+ previewPage: 'Home',
2986
+ essentialsTitle: 'The essentials',
2987
+ essentialsIntro: 'Four things that help day to day.',
2988
+ searchTitle: 'Search any screen',
2989
+ searchText: 'Press {key} or use the search in the header to find screens, favorites and what you opened recently.',
2990
+ tabsTitle: 'Tabs and panels',
2991
+ tabsText: 'Each screen opens in a tab. Drag a tab to one side of the workspace to see two screens together.',
2992
+ favoritesTitle: 'Favorites',
2993
+ favoritesText: 'Mark the heart on a screen to show it on the home page and at the top of search.',
2994
+ settingsTitle: 'Settings',
2995
+ settingsText: 'Appearance, region, accessibility and account security are in your profile menu, or at {key}.',
2256
2996
  },
2257
2997
  shortcuts: {
2258
2998
  heading: 'Keyboard shortcuts',
2259
2999
  hint: 'Tip: press {key} at any time to reopen this panel.',
2260
- replayTour: 'Replay tour',
3000
+ essentials: 'Review the essentials',
2261
3001
  dismiss: 'Got it',
2262
3002
  openSearch: 'Open quick search',
2263
3003
  goHome: 'Go to Home',
@@ -2321,10 +3061,14 @@ const SPINE_MESSAGES_EN = {
2321
3061
  shortcuts: 'Shortcuts',
2322
3062
  shortcutsDescription: 'Press ? on any screen to see this list.',
2323
3063
  shortcutsKeywords: 'keyboard keys',
2324
- tour: 'Guided tour',
2325
- tourDescription: 'Shows again where each part of the screen is.',
2326
- tourKeywords: 'onboarding help introduction',
2327
- replayTour: 'Replay tour',
3064
+ setup: 'Initial setup',
3065
+ setupDescription: 'Opens the first-access appearance choice again.',
3066
+ setupKeywords: 'initial setup first access appearance welcome onboarding',
3067
+ redoSetup: 'Redo',
3068
+ essentials: 'The essentials',
3069
+ essentialsDescription: 'Search, tabs, favorites and settings in a summary.',
3070
+ essentialsKeywords: 'help tips search tabs favorites introduction',
3071
+ showEssentials: 'View',
2328
3072
  accessibility: 'Accessibility',
2329
3073
  accessibilityKeywords: 'accessibility reading vision',
2330
3074
  textSize: 'Text size',
@@ -2337,7 +3081,7 @@ const SPINE_MESSAGES_EN = {
2337
3081
  motionReduce: 'Always',
2338
3082
  motionFull: 'Never',
2339
3083
  help: 'Help',
2340
- helpKeywords: "help what's new tour introduction",
3084
+ helpKeywords: "help what's new initial setup essentials introduction",
2341
3085
  news: "What's new",
2342
3086
  newsDescription: 'What changed in the latest versions.',
2343
3087
  newsKeywords: 'news version release changelog',
@@ -2527,7 +3271,6 @@ const SPINE_MESSAGES_EN = {
2527
3271
  accountSecurity: {
2528
3272
  loading: 'Loading…',
2529
3273
  loadError: "Couldn't load your Argos account.",
2530
- sessionEnded: 'This sign-in session has ended in Argos. Sign in again to manage your account.',
2531
3274
  retry: 'Try again',
2532
3275
  methodTotp: 'Authenticator app',
2533
3276
  methodEmail: 'Email',
@@ -2633,6 +3376,123 @@ const SPINE_MESSAGES_EN = {
2633
3376
  sessionEndedNotice: 'Session ended.',
2634
3377
  othersEndedNotice: { zero: 'No sessions ended.', one: '1 session ended.', other: '{count} sessions ended.' },
2635
3378
  },
3379
+ ratings: {
3380
+ rateScreen: 'Rate this page',
3381
+ rateApp: 'Rate {app}',
3382
+ ratedApp: 'Your rating of {app}',
3383
+ heading: 'Rate your experience',
3384
+ subheading: 'Take the chance to share your opinion',
3385
+ aboutScreen: 'Page: {screen}',
3386
+ aboutApp: '{app} as a whole',
3387
+ score: 'Your rating',
3388
+ scoreOf: '{value} of 10',
3389
+ scoreNamed: '{value} of 10 — {name}',
3390
+ scoreShort: '{value}/10',
3391
+ scoreNames: { 1: 'Poor', 2: 'Fair', 3: 'Good', 4: 'Very good', 5: 'Excellent' },
3392
+ noScore: 'Not rated',
3393
+ scaleHint: 'From 0 to 10: each star is worth 2 and a half star, 1. Arrow keys move by half a star; clicking the first half star again gives 0.',
3394
+ comment: 'Comment',
3395
+ commentPlaceholder: 'What worked, what could be better (optional)',
3396
+ submit: 'Rate',
3397
+ update: 'Update',
3398
+ previous: 'You rated on {date}. You can change it anytime.',
3399
+ scoreRequired: 'Choose a rating from 0 to 10.',
3400
+ loading: 'Loading your rating…',
3401
+ thanks: 'Thanks for your rating!',
3402
+ updated: 'Rating updated. Thank you!',
3403
+ saveError: 'Could not send the rating. Try again.',
3404
+ period: 'Period',
3405
+ periods: { all: 'All time', d7: '7 days', d30: '30 days', d90: '90 days' },
3406
+ refresh: 'Refresh',
3407
+ appCard: 'The application',
3408
+ screensCard: 'The pages',
3409
+ appCardHint: 'Overall rating',
3410
+ screensCardHint: 'Overall rating of the pages',
3411
+ scoreMax: '/10',
3412
+ average: 'Average',
3413
+ total: { zero: 'No ratings', one: '1 rating', other: '{count} ratings' },
3414
+ comments: { zero: 'no comments', one: '1 comment', other: '{count} comments' },
3415
+ noRatings: 'No ratings in this period yet.',
3416
+ distribution: 'Rating distribution',
3417
+ distributionRow: 'Score {score}: {count} ({share})',
3418
+ ranking: 'Ratings by page and area',
3419
+ rankingHint: 'Compare the pages. Click one to see its ratings.',
3420
+ sort: 'Order',
3421
+ sorts: { worst: 'Worst first', best: 'Best first', most: 'Most rated' },
3422
+ noScreens: 'No pages rated in this period.',
3423
+ filterByScreen: 'See the ratings of {screen}',
3424
+ recent: 'Recent ratings',
3425
+ recentHint: 'Newest first.',
3426
+ filterScope: 'What was rated',
3427
+ allScopes: 'Tool and pages',
3428
+ tool: 'The application',
3429
+ screens: 'The pages',
3430
+ filterScreen: 'Page',
3431
+ allScreens: 'All pages',
3432
+ filterScore: 'Rating',
3433
+ allScores: 'All ratings',
3434
+ withComment: 'Show only with comment',
3435
+ clearFilters: 'Clear filters',
3436
+ noComment: 'No comment.',
3437
+ itemActions: 'Rating actions',
3438
+ copyComment: 'Copy comment',
3439
+ commentCopied: 'Comment copied.',
3440
+ copyFailed: 'Could not copy the comment.',
3441
+ showAppRatings: 'See ratings for the tool',
3442
+ showScreenRatings: 'See ratings for this page',
3443
+ emptyList: 'No ratings match these filters.',
3444
+ pagination: 'Rating pages',
3445
+ unknownUser: 'User',
3446
+ loadError: 'Could not load the ratings.',
3447
+ forbidden: 'You do not administer this application, or the Administrator badge is not active.',
3448
+ updatedAt: 'Updated on {date} at {time}',
3449
+ details: 'See details',
3450
+ detailsOf: '({name} ratings)',
3451
+ tabScreens: 'Pages',
3452
+ tabAreas: 'Areas',
3453
+ tabTrends: 'Trends',
3454
+ viewAll: 'See all ratings',
3455
+ allHeading: 'All ratings',
3456
+ justNow: 'Just now',
3457
+ yesterdayAt: 'Yesterday at {time}',
3458
+ dateAt: '{date} at {time}',
3459
+ sortsShort: { worst: 'Worst', best: 'Best', most: 'Most rated' },
3460
+ bands: { all: 'All scores', bad: 'Poor (below 5)', mid: 'Average (5 to 6.9)', good: 'Good (7 or more)' },
3461
+ bandFilter: 'Score range',
3462
+ filterArea: 'Area',
3463
+ allAreas: 'All areas',
3464
+ noArea: 'No area',
3465
+ filterByArea: 'See the pages of {area}',
3466
+ screensCount: { one: '1 page', other: '{count} pages' },
3467
+ searchScreens: 'Search page or path…',
3468
+ searchScreensLabel: 'Search page',
3469
+ searchAreas: 'Search area…',
3470
+ searchAreasLabel: 'Search area',
3471
+ tableEmpty: 'No page matches these filters.',
3472
+ areasEmpty: 'No area matches these filters.',
3473
+ colScreen: 'Page',
3474
+ colArea: 'Area',
3475
+ colScreens: 'Pages',
3476
+ colScore: 'Score',
3477
+ colTotal: 'Ratings',
3478
+ colComments: 'Comments',
3479
+ colTrend: 'Trend',
3480
+ colOpen: 'Open',
3481
+ tablePagination: 'Page list pages',
3482
+ areasPagination: 'Area list pages',
3483
+ trendOf: 'Weekly average: from {first} to {last}',
3484
+ trendNone: 'No weekly scores in the period.',
3485
+ trendCaption: 'Weekly average, from 0 to 10',
3486
+ trendEmpty: 'No ratings in the period to show a trend.',
3487
+ trendValue: '{series} {value}',
3488
+ trendWeek: 'Week of {week}: {values} ({count})',
3489
+ aboutRating: 'Rating',
3490
+ aboutRatingKeywords: 'rate rating stars average opinion',
3491
+ rateAction: 'Rate',
3492
+ noRatingsYet: 'No ratings yet.',
3493
+ loadingAverage: 'Loading the average…',
3494
+ averageError: 'Could not load the average.',
3495
+ },
2636
3496
  notification: {
2637
3497
  genericError: 'An error occurred while processing your request.',
2638
3498
  },
@@ -2663,24 +3523,36 @@ const SPINE_MESSAGES_EN = {
2663
3523
  },
2664
3524
  home: {
2665
3525
  noAccessTitle: "You don't have access to any screen yet",
2666
- noAccessText: "Access is granted by your area's manager. If they've already approved it, sign out and sign in again, or open a ticket with the team in charge.",
3526
+ noAccessText: "Access is granted by the application's administrator or by the administrator of a group with access to it. If they've already granted it, sign out and sign in again.",
2667
3527
  yourScreens: 'Your screens',
2668
- modules: 'Modules',
3528
+ modules: 'Quick access',
2669
3529
  privileged: 'Privileged access',
2670
- recent: 'Recently opened',
3530
+ recent: 'Pick up where you left off',
2671
3531
  recentCaption: 'The screens you opened last, from most recent to oldest.',
2672
3532
  screenCount: { one: '1 screen', other: '{count} screens' },
2673
3533
  favorite: 'Add {name} to favorites',
2674
3534
  unfavorite: 'Remove {name} from favorites',
2675
3535
  favorites: 'Favorites',
2676
- navigate: 'Browse',
3536
+ morning: 'Good morning',
3537
+ afternoon: 'Good afternoon',
3538
+ evening: 'Good evening',
3539
+ greetingName: '{greeting}, {name}',
3540
+ intro: 'Open your tools and keep up with updates to your systems.',
3541
+ seeAll: 'See all',
3542
+ seeLess: 'See less',
3543
+ recentActions: 'More actions for {name}',
3544
+ forgetRecent: 'Remove from history',
3545
+ explore: 'Explore systems',
3546
+ exploreIntro: 'Open the main modules of the platform.',
3547
+ news: "What's new",
3548
+ newsBadge: 'Updates',
3549
+ newsAll: 'See all',
3550
+ favoritesEmpty: 'Tap the heart on a screen bar to see it here.',
3551
+ help: 'Help and resources',
3552
+ shortcuts: 'Keyboard shortcuts',
3553
+ essentials: 'Review the essentials',
2677
3554
  settings: 'Settings',
2678
- tools: 'Tools',
2679
3555
  systemDocs: 'System documentation',
2680
- colScreen: 'Screen',
2681
- colWhere: 'Where it is',
2682
- colFavorite: 'Favorite',
2683
- noModule: 'No module',
2684
3556
  },
2685
3557
  autoService: {
2686
3558
  loading: 'Loading...',
@@ -2694,9 +3566,6 @@ const SPINE_MESSAGES_EN = {
2694
3566
  inactive: 'Inactive',
2695
3567
  confirmChanges: 'Confirm changes',
2696
3568
  appsTitle: 'Applications',
2697
- appsIntro: "Manage this client's applications (client_credentials) — without relying on the central panel.",
2698
- clientTitle: 'Client',
2699
- clientIntro: "Manage this client's routes, routers and access — without relying on the central panel.",
2700
3569
  clientSections: 'Client sections',
2701
3570
  tabRoutes: 'Routes',
2702
3571
  tabRouters: 'Routers',
@@ -2705,31 +3574,31 @@ const SPINE_MESSAGES_EN = {
2705
3574
  clientsLoadError: 'Could not load the clients you administer (HTTP {status}). This is not a permission issue: Argos did not respond. Try again in a moment.',
2706
3575
  retryLoad: 'Try again',
2707
3576
  pickClient: 'Select the client you want to manage',
2708
- groupsTitle: 'Groups',
2709
- groupsIntro: "Create, edit and delete this client's groups and manage their members — without relying on the central panel.",
2710
- groupsFixed: "The 5 groups below are fixed for this client and can't be renamed, created or deleted — look one up to manage its members.",
2711
3577
  pickGroup: 'Select a group',
2712
3578
  noDescription: 'No description provided.',
2713
- pickGroupHint: 'Look up a group above to view and manage its members.',
2714
3579
  manageMembers: 'Manage members',
2715
3580
  membersCaption: 'Group members',
2716
3581
  noMembers: 'No members in this group.',
2717
3582
  colUser: 'User',
2718
3583
  colMemberSince: 'Member since',
2719
3584
  membersHeading: 'Members — {group}',
2720
- addUser: 'Add user (username or email)',
3585
+ addUser: 'Add user',
2721
3586
  userSearch: 'Search by name, username or email...',
2722
3587
  role: 'Role (optional)',
2723
- pickRole: 'Select a role',
3588
+ noRole: 'Member (no role)',
2724
3589
  add: 'Add',
2725
3590
  suggestions: 'Suggestions',
2726
- moreSuggestions: 'See more suggestions',
3591
+ suggestionsHint: 'People already in other groups of this system',
3592
+ suggestionGroups: 'In {groups}',
3593
+ addSuggestion: 'Add {name} to the group',
3594
+ membersTitle: 'Group members',
3595
+ memberSearch: 'Search members...',
2727
3596
  membersOf: 'Members of group {group}',
2728
3597
  noMembersShort: 'No members.',
2729
3598
  newMember: 'New',
2730
3599
  addedBy: 'by {user}',
2731
3600
  removal: 'Removal',
2732
- removalEmpty: 'Select one or more members from the list beside to remove them from the group.',
3601
+ removalEmpty: 'Check members in the list to remove them from the group. Removal only applies when you save.',
2733
3602
  undoRemoval: 'Undo removal',
2734
3603
  saveChanges: 'Save changes',
2735
3604
  colRole: 'Role',
@@ -2739,14 +3608,11 @@ const SPINE_MESSAGES_EN = {
2739
3608
  accessCaption: 'Client access',
2740
3609
  noAccess: 'No access granted yet.',
2741
3610
  colGroup: 'Group',
2742
- colBadge: 'Badge',
2743
3611
  manageRoutes: 'Manage routes',
2744
3612
  group: 'Group',
2745
3613
  routesOf: 'Routes for {group}',
2746
- guardsHint: "Only private routers with no badge restriction, or whose allowed badge includes <strong>{badge}</strong> (this group's badge), appear here.",
2747
3614
  noPrivateRoutes: "No private route available for this group's badge.",
2748
3615
  register: 'Register',
2749
- appsSearchIntro: "Look up one of this client's applications (client_credentials) to manage operations and access — without relying on the central panel.",
2750
3616
  secretCreated: "Application created. Save the secret now, it won't be shown again:",
2751
3617
  pickApp: 'Select an application',
2752
3618
  disable: 'Disable',
@@ -2765,6 +3631,7 @@ const SPINE_MESSAGES_EN = {
2765
3631
  manageOperations: 'Manage operations',
2766
3632
  colOperations: 'Operations',
2767
3633
  colGuards: 'Guards',
3634
+ colMembers: 'Members',
2768
3635
  filterOperations: 'Filter operations',
2769
3636
  filterRoutes: 'Filter routes',
2770
3637
  noFilterMatch: 'Nothing matches “{term}”.',
@@ -2778,7 +3645,6 @@ const SPINE_MESSAGES_EN = {
2778
3645
  colDescription: 'Description',
2779
3646
  colAllowedGroups: 'Allowed groups',
2780
3647
  groupCount: { one: '1 group', other: '{count} groups' },
2781
- routersTitle: 'Routers',
2782
3648
  newRouter: 'New router',
2783
3649
  routersCaption: 'Client routers',
2784
3650
  noRouters: 'No router registered yet.',
@@ -2801,7 +3667,6 @@ const SPINE_MESSAGES_EN = {
2801
3667
  colAllowedBadges: 'Allowed badges',
2802
3668
  anyBadge: 'Any badge',
2803
3669
  allowedBadgesHint: 'Empty = any badge. With one or more chosen, only groups with one of those badges can be given access to this screen in the Access tab.',
2804
- routesTitle: 'Routes',
2805
3670
  newRoute: 'New route',
2806
3671
  routesCaption: 'Client routes',
2807
3672
  noRoutes: 'No route registered yet.',
@@ -2877,7 +3742,6 @@ const SPINE_MESSAGES_EN = {
2877
3742
  reorderSave: 'Save order',
2878
3743
  newGroup: 'New group',
2879
3744
  editGroup: 'Edit group',
2880
- groupsCaption: 'Project groups',
2881
3745
  noGroups: 'No groups yet.',
2882
3746
  accessLevel: 'Access level',
2883
3747
  pickAccessLevel: 'Select a level',
@@ -2888,19 +3752,11 @@ const SPINE_MESSAGES_EN = {
2888
3752
  groupType: 'Type',
2889
3753
  groupTypePlaceholder: 'Select the type',
2890
3754
  groupDescription: 'Description (optional)',
2891
- openGroup: 'Open the {name} group',
2892
- adminGroupTag: 'Administration',
2893
- adminGroupNote: "The project's administration group: its members manage this app in self-service. It is the only one in the project and can't be deleted, renamed, disabled or change type, nor be left without members.",
2894
- adminGroupEditNote: "The project's administration group: only the description can change.",
2895
- adminGroupLastMemberWarning: "The administration group can't be left without members: add someone else or undo a removal.",
2896
3755
  confirmDeleteGroupHeading: 'Delete group?',
2897
3756
  confirmDeleteGroup: 'The {name} group will be deleted along with its members, screen access and application permissions. This cannot be undone.',
2898
3757
  groupSaveError: 'Could not save the group. Try again.',
2899
3758
  membersSaveError: 'Could not save all member changes. Check the list and try again.',
2900
- appsCaption: 'Project applications',
2901
3759
  noApps: 'No applications registered yet.',
2902
- colGrants: 'Grants',
2903
- openApp: 'Open the application {name}',
2904
3760
  tabTokens: 'Tokens',
2905
3761
  tokensCaption: 'Application tokens',
2906
3762
  noTokens: 'No tokens created for this application yet.',
@@ -2979,8 +3835,6 @@ const SPINE_MESSAGES_EN = {
2979
3835
  },
2980
3836
  autoServiceAudit: {
2981
3837
  title: 'Audit',
2982
- intro: 'What happened in this project’s applications: who did what, when and with which result.',
2983
- tabApps: 'Applications',
2984
3838
  period: 'Period',
2985
3839
  periodLastHour: 'Last hour',
2986
3840
  period24h: 'Last 24 hours',
@@ -3018,7 +3872,6 @@ const SPINE_MESSAGES_EN = {
3018
3872
  topUsers: 'Most active users',
3019
3873
  topApps: 'By application',
3020
3874
  noTop: 'Nothing in the period.',
3021
- eventCount: { one: '1 event', other: '{count} events' },
3022
3875
  failureCount: { one: '1 failure', other: '{count} failures' },
3023
3876
  deniedCount: { one: '1 denied', other: '{count} denied' },
3024
3877
  filterBy: 'Filter by {name}',
@@ -3082,9 +3935,6 @@ const SPINE_MESSAGES_EN = {
3082
3935
  one: '1 event of this chain belongs to an application outside your project and is not shown here.',
3083
3936
  other: '{count} events of this chain belong to applications outside your project and are not shown here.',
3084
3937
  },
3085
- traceCurrent: 'this event',
3086
- openTraceEvent: 'Open {operation} at {time}',
3087
- introAdmin: 'What happened across all applications: who did what, when and with which result.',
3088
3938
  period6h: 'Last 6 hours',
3089
3939
  refresh: 'Refresh',
3090
3940
  autoRefresh: 'Refresh every 30 s',
@@ -3271,6 +4121,322 @@ const SPINE_MESSAGES_EN = {
3271
4121
  syncError: 'Could not sync. Try again.',
3272
4122
  syncNow: 'Sync now',
3273
4123
  },
4124
+ suggestions: {
4125
+ button: 'Suggest an improvement',
4126
+ buttonHint: 'Suggest an improvement for this page',
4127
+ modalTitle: 'Suggest an improvement',
4128
+ intro: 'Tell us what would make your work easier. Whoever manages the application gets the request and answers here.',
4129
+ kind: 'Type',
4130
+ kinds: { melhoria: 'Improvement', nova_funcionalidade: 'New feature', problema: 'Problem', outro: 'Other' },
4131
+ statuses: {
4132
+ em_analise: 'Under review', planejada: 'Planned', em_desenvolvimento: 'In development',
4133
+ concluida: 'Done', recusada: 'Declined',
4134
+ },
4135
+ legacyStatuses: { nova: 'New' },
4136
+ title: 'Title',
4137
+ titlePlaceholder: 'E.g.: Filter the list by date',
4138
+ titleRequired: 'Enter a title.',
4139
+ description: 'Description',
4140
+ descriptionHint: 'What you tried to do, what you expected and why it would help.',
4141
+ screen: 'Page',
4142
+ screenHint: 'Where the suggestion comes from. Change it if it is about another page.',
4143
+ send: 'Send suggestion',
4144
+ cancel: 'Cancel',
4145
+ sent: 'Suggestion sent. Thank you!',
4146
+ sendError: 'Could not send the suggestion. Try again.',
4147
+ similarHeading: 'Already requested on this page',
4148
+ similarHint: 'If it is the same request, support it instead of repeating it.',
4149
+ vote: 'I want this too',
4150
+ voted: 'You support this',
4151
+ votes: { one: '{count} supporter', other: '{count} supporters' },
4152
+ voteError: 'Could not register your support.',
4153
+ yours: 'Yours',
4154
+ mine: 'My suggestions',
4155
+ mineEmpty: 'You have not sent suggestions in this application yet.',
4156
+ mineError: 'Could not load your suggestions.',
4157
+ loadMore: 'Load more',
4158
+ statusFilter: 'Status',
4159
+ allStatuses: 'All',
4160
+ adminReply: 'Reply from the administrators',
4161
+ sentAt: 'Sent on {date}',
4162
+ boardLabel: 'Suggestions board',
4163
+ search: 'Search suggestions',
4164
+ kindFilter: 'Type',
4165
+ allKinds: 'All types',
4166
+ refresh: 'Refresh',
4167
+ boardEmpty: 'No suggestions yet',
4168
+ boardEmptyHint: 'Requests made with the "Suggest an improvement" button on each page show up here.',
4169
+ boardFiltered: '{shown} of {total} suggestions',
4170
+ loadError: 'Could not load the suggestions.',
4171
+ moveError: 'Could not move the suggestion. The board was reloaded.',
4172
+ removedAuthor: 'Removed person',
4173
+ noScreen: 'No page',
4174
+ noDescription: 'No description.',
4175
+ requestedBy: 'Requested by',
4176
+ requestedAt: 'On',
4177
+ status: 'Status',
4178
+ statusSaved: 'Status updated.',
4179
+ statusError: 'Could not change the status.',
4180
+ history: 'History',
4181
+ historyEmpty: 'No activity yet.',
4182
+ eventStatus: '{actor} moved it from {from} to {to}',
4183
+ eventComment: '{actor} commented',
4184
+ someone: 'Someone',
4185
+ comment: 'Comment for the requester',
4186
+ commentHint: 'The person sees it in "My suggestions".',
4187
+ commentSend: 'Comment',
4188
+ commentSent: 'Comment sent.',
4189
+ commentError: 'Could not send the comment.',
4190
+ commentRequired: 'Write the comment.',
4191
+ viewLabel: 'View',
4192
+ viewBoard: 'Board',
4193
+ viewArchive: 'Archive',
4194
+ kpis: 'Suggestion indicators',
4195
+ kpiOpen: 'In progress',
4196
+ kpiStatusCount: '{status} {count}',
4197
+ kpiDone: 'Done in {days} days',
4198
+ kpiDoneToday: '+{count} today',
4199
+ kpiDoneNoneToday: 'None done today',
4200
+ kpiOverdueTrend: '+{count} since yesterday',
4201
+ kpiOverdueSteady: 'No new ones since yesterday',
4202
+ kpiSoon: 'Due soon',
4203
+ kpiMineHint: 'Open tasks with you among the assignees',
4204
+ kpiPriority: 'Open by priority',
4205
+ kpiPriorityNone: 'Nothing open',
4206
+ kpiPriorityPart: '{priority} {count}',
4207
+ filters: 'Board filters',
4208
+ moreFilters: 'More filters',
4209
+ moreFiltersActive: 'More filters ({count})',
4210
+ allBoardStatuses: 'All statuses',
4211
+ newTaskIn: 'New task in {status}',
4212
+ newTaskOptions: 'Create in another column',
4213
+ columnOldest: 'Oldest {age} ago',
4214
+ columnOverdue: { one: '{count} overdue', other: '{count} overdue' },
4215
+ columnEmpty: 'No tasks in this column.',
4216
+ columnEmptyFiltered: 'No tasks match these filters.',
4217
+ columnEmptyHints: {
4218
+ em_analise: 'New requests land here for the team to review.',
4219
+ planejada: 'What was accepted and is waiting its turn.',
4220
+ em_desenvolvimento: 'What the team is working on right now.',
4221
+ concluida: 'Deliveries from the last {days} days stay here.',
4222
+ },
4223
+ duration: { days: '{d}d {h}h', hours: '{h}h {m}m', minutes: '{m}m' },
4224
+ createdOn: 'Created on {date}',
4225
+ dueWithin: 'On track · by {date}',
4226
+ dueLateDays: { one: 'Overdue by {count} day', other: 'Overdue by {count} days' },
4227
+ screenFilter: 'Page',
4228
+ allScreens: 'All pages',
4229
+ authorFilter: 'Requested by',
4230
+ allAuthors: 'Everyone',
4231
+ sort: 'Sort',
4232
+ sorts: { position: 'Board order', votes: 'Most supported', recent: 'Most recent' },
4233
+ sortHint: 'With this sorting, dragging only changes the column (the card goes to its end).',
4234
+ clearFilters: 'Clear filters',
4235
+ topVoted: 'Most supported',
4236
+ comments: { one: '{count} comment', other: '{count} comments' },
4237
+ statusSince: 'Since {date}',
4238
+ openScreen: 'Open the page',
4239
+ statusChange: 'Change the status',
4240
+ statusComment: 'Comment (optional)',
4241
+ statusCommentHint: 'Goes with the change; the person sees it in "My suggestions".',
4242
+ statusApply: 'Change status',
4243
+ archiveLabel: 'Suggestions archive',
4244
+ archiveSearch: 'Search the archive',
4245
+ archiveEmpty: 'Nothing in the archive',
4246
+ archiveEmptyHint: 'Declined suggestions and those done more than {days} days ago show up here.',
4247
+ archiveCount: { one: '{count} suggestion in the archive', other: '{count} suggestions in the archive' },
4248
+ closedOn: { concluida: 'Done on {date}', recusada: 'Declined on {date}' },
4249
+ pagination: 'Archive pages',
4250
+ reopen: 'Reopen',
4251
+ reopened: 'Suggestion reopened: it is back to Under review.',
4252
+ reopenError: 'Could not reopen the suggestion.',
4253
+ newTask: 'New task',
4254
+ addTaskPlaceholder: 'Task title (Enter creates)',
4255
+ taskCreated: 'Task created.',
4256
+ createError: 'Could not create the task.',
4257
+ saveError: 'Could not save. Try again.',
4258
+ kpiMine: 'Assigned to me',
4259
+ kpiOverdue: 'Overdue',
4260
+ assigneeFilter: 'Assignee',
4261
+ allAssignees: 'Any assignee',
4262
+ assigneeMine: 'Mine',
4263
+ assigneeNone: 'Unassigned',
4264
+ labelFilter: 'Label',
4265
+ allLabels: 'All labels',
4266
+ priorityFilter: 'Priority',
4267
+ allPriorities: 'All priorities',
4268
+ dueFilter: 'Due date',
4269
+ dueAny: 'Any due date',
4270
+ dueOverdueFilter: 'Overdue',
4271
+ dueSoonFilter: 'Due today or tomorrow',
4272
+ priority: 'Priority',
4273
+ priorities: { urgente: 'Urgent', alta: 'High', media: 'Medium', baixa: 'Low' },
4274
+ dueOn: 'Due {date}',
4275
+ dueToday: 'Due today',
4276
+ dueTomorrow: 'Due tomorrow',
4277
+ dueLate: 'Was due {date}',
4278
+ checklistSpoken: '{done} of {total} items done',
4279
+ moreAssignees: '+{count}',
4280
+ cardMenu: 'Actions for {key}',
4281
+ menuStatus: 'Change status',
4282
+ menuAssignMe: 'Assign to me',
4283
+ menuCopyLink: 'Copy link',
4284
+ menuCopyKey: 'Copy key',
4285
+ menuLabel: 'Labels',
4286
+ menuNoLabels: 'No labels in this app',
4287
+ menuPriority: 'Priority',
4288
+ menuCover: 'Choose cover',
4289
+ menuArchive: 'Archive',
4290
+ menuRestore: 'Restore to the board',
4291
+ menuDelete: 'Delete',
4292
+ cover: 'Cover',
4293
+ coverSolid: 'Colors',
4294
+ coverGradient: 'Gradients',
4295
+ coverRemove: 'Remove cover',
4296
+ coverName: 'Color {n}',
4297
+ gradientName: 'Gradient {n}',
4298
+ linkCopied: 'Link copied.',
4299
+ keyCopied: 'Key copied.',
4300
+ copyError: 'Could not copy.',
4301
+ deleteHeading: 'Delete {key}?',
4302
+ deleteMessage: 'The task, its checklist, comments and activity are removed for good. This cannot be undone.',
4303
+ deleteConfirm: 'Delete',
4304
+ deleted: 'Task deleted.',
4305
+ archivedToast: 'Task archived: it is in the Archive.',
4306
+ restoredToast: 'Task back on the board.',
4307
+ assignedToMe: 'Assigned to you.',
4308
+ archivedTag: 'Archived',
4309
+ taskLabel: 'Task',
4310
+ close: 'Close',
4311
+ editTitle: 'Edit title',
4312
+ editDescription: 'Edit description',
4313
+ save: 'Save',
4314
+ checklist: 'Checklist',
4315
+ checklistAdd: 'Add item',
4316
+ checklistPlaceholder: 'New item (Enter adds)',
4317
+ checklistOnCard: 'Show on card',
4318
+ checklistEmpty: 'No items yet.',
4319
+ checklistRemove: 'Remove "{text}"',
4320
+ checklistUp: 'Move "{text}" up',
4321
+ checklistDown: 'Move "{text}" down',
4322
+ tabComments: 'Comments',
4323
+ tabActivity: 'Activity',
4324
+ commentsEmpty: 'No comments yet.',
4325
+ activityEmpty: 'No activity yet.',
4326
+ commentInternal: 'Team only (internal: the requester does not see it)',
4327
+ internalTag: 'Internal',
4328
+ activity: {
4329
+ created: '{actor} created the task',
4330
+ title: '{actor} renamed it from "{from}" to "{to}"',
4331
+ description: '{actor} edited the description',
4332
+ kind: '{actor} changed the type from {from} to {to}',
4333
+ priority: '{actor} changed the priority from {from} to {to}',
4334
+ start_date: '{actor} set the start date to {to}',
4335
+ start_date_removed: '{actor} removed the start date',
4336
+ due_date: '{actor} set the due date to {to}',
4337
+ due_date_removed: '{actor} removed the due date',
4338
+ cover: '{actor} changed the cover',
4339
+ cover_removed: '{actor} removed the cover',
4340
+ checklist_on_card: '{actor} changed the checklist on the card',
4341
+ screen: '{actor} changed the page to {to}',
4342
+ assignee_added: '{actor} assigned it to {to}',
4343
+ assignee_removed: '{actor} removed {from} from the assignees',
4344
+ watcher_added: '{actor} added {to} as a watcher',
4345
+ watcher_removed: '{actor} removed {from} from the watchers',
4346
+ label_added: '{actor} added the label {to}',
4347
+ label_removed: '{actor} removed the label {from}',
4348
+ checklist_added: '{actor} added "{to}" to the checklist',
4349
+ checklist_done: '{actor} completed "{to}"',
4350
+ checklist_undone: '{actor} reopened "{to}"',
4351
+ checklist_renamed: '{actor} renamed "{from}" to "{to}" in the checklist',
4352
+ checklist_removed: '{actor} removed "{from}" from the checklist',
4353
+ archived: '{actor} archived the task',
4354
+ restored: '{actor} restored the task to the board',
4355
+ merged: '{actor} merged this into {to}',
4356
+ merged_here: '{actor} merged {to} here',
4357
+ unmerged: '{actor} unmerged this from {from}',
4358
+ unmerged_here: '{actor} unmerged {from} from here',
4359
+ other: '{actor} changed the task',
4360
+ },
4361
+ assignees: 'Assignees',
4362
+ assignMe: 'Assign to me',
4363
+ addAssignee: 'Add assignee',
4364
+ watchers: 'Watchers',
4365
+ addWatcher: 'Add watcher',
4366
+ removePerson: 'Remove {name}',
4367
+ peopleSearch: 'Search people',
4368
+ peopleEmpty: 'No one found.',
4369
+ nobody: 'No one',
4370
+ reporter: 'Reporter',
4371
+ originUser: 'Requested from the page',
4372
+ originTeam: 'Created by the team',
4373
+ startDate: 'Start',
4374
+ dueDate: 'Due',
4375
+ labels: 'Labels',
4376
+ addLabel: 'Labels',
4377
+ createLabel: 'Create the label "{name}"',
4378
+ labelColor: 'Label color',
4379
+ noLabels: 'No labels',
4380
+ screenOrigin: 'Source page',
4381
+ votesField: 'Supporters',
4382
+ createdAt: 'Created on',
4383
+ updatedAt: 'Updated on',
4384
+ lastChange: 'Last changed {when} by {actor}',
4385
+ lastChangeNoActor: 'Last changed {when}',
4386
+ key: 'Key',
4387
+ copyKey: 'Copy the key',
4388
+ newTaskHeading: 'New task',
4389
+ createTask: 'Create task',
4390
+ draftHint: 'Assignees, checklist and comments become available once the task is created.',
4391
+ assignMeOnCreate: 'Assign to me',
4392
+ appSuggestions: 'App suggestions',
4393
+ listView: 'Which suggestions to show',
4394
+ tabAll: 'All',
4395
+ tabMine: 'Mine',
4396
+ appSearch: 'Search by title, description or SUG-12',
4397
+ thisScreen: 'This page',
4398
+ appSorts: { votes: 'Most supported', recent: 'Recent' },
4399
+ appEmpty: 'No suggestions here yet',
4400
+ appEmptyHint: 'Be the first to suggest an improvement.',
4401
+ appEmptyFiltered: 'No suggestions match these filters.',
4402
+ appError: 'Could not load the app suggestions.',
4403
+ support: 'Support {count}',
4404
+ supported: 'Supported {count}',
4405
+ ownSupportHint: 'This is your suggestion: your interest already counts.',
4406
+ publicComments: 'Comments',
4407
+ publicCommentsEmpty: 'No comments from the administrators yet.',
4408
+ commentsError: 'Could not load the comments.',
4409
+ moreComments: 'More comments',
4410
+ appPagination: 'Suggestion pages',
4411
+ menuMerge: 'Merge into…',
4412
+ mergeHeading: 'Merge {key} into…',
4413
+ mergeIntro: 'Pick the main suggestion. Whoever asked for and supported this one moves to it; this one leaves the board and stays in the archive, with its comments.',
4414
+ mergeSearch: 'Search by key or title',
4415
+ mergeNone: 'No open suggestion to merge into.',
4416
+ mergeHasMerged: 'Other suggestions are merged into this one. Unmerge them before merging it into another.',
4417
+ mergePreview: '{votes} and {reporters} move to {key}.',
4418
+ mergeCalculating: 'Working out what moves…',
4419
+ mergePreviewError: 'Could not work out the merge.',
4420
+ reportersCount: { one: '{count} reporter', other: '{count} reporters' },
4421
+ mergeConfirmHeading: 'Merge {key} into {target}?',
4422
+ mergeConfirmMessage: 'You can undo it later with "Unmerge".',
4423
+ mergeConfirm: 'Merge',
4424
+ mergedToast: '{key} merged into {target}.',
4425
+ mergeError: 'Could not merge the suggestion.',
4426
+ mergedTag: 'Merged',
4427
+ mergedInto: 'Merged into {key}',
4428
+ mergedIntoHint: 'The supporters and reporters are on the main one; the comments stay here.',
4429
+ openMerged: 'Open {key}',
4430
+ unmerge: 'Unmerge',
4431
+ unmergeLabel: 'Unmerge {key}',
4432
+ unmergedToast: '{key} unmerged: back on the board.',
4433
+ reporters: 'Reporters',
4434
+ reporterAuthor: 'Author',
4435
+ reporterVia: 'via {key}',
4436
+ mergedHere: 'Merged here',
4437
+ mergedFrom: '{key} merged into {target}',
4438
+ mergedFromHint: 'Identical requests became one: follow it here.',
4439
+ },
3274
4440
  };
3275
4441
 
3276
4442
  const SPINE_MESSAGES_ES = {
@@ -3289,14 +4455,15 @@ const SPINE_MESSAGES_ES = {
3289
4455
  settings: 'Configuración',
3290
4456
  appearance: 'Apariencia',
3291
4457
  shortcuts: 'Atajos de teclado',
3292
- tour: 'Recorrido guiado',
3293
4458
  news: 'Novedades',
4459
+ newsUnseen: '{label} ({count})',
3294
4460
  logout: 'Salir',
3295
4461
  search: 'Búsqueda',
3296
4462
  searchPlaceholder: 'Buscar módulo o página…',
3297
- recentSearches: 'Búsquedas recientes',
3298
- clearRecent: 'Limpiar',
3299
- noResults: 'No se encontró nada para "{term}".',
4463
+ searchFavorites: 'Favoritos',
4464
+ searchRecent: 'Abiertos hace poco',
4465
+ searchModules: 'Módulos',
4466
+ searchScreens: 'Pantallas',
3300
4467
  },
3301
4468
  navigation: {
3302
4469
  back: 'Volver',
@@ -3338,46 +4505,143 @@ const SPINE_MESSAGES_ES = {
3338
4505
  },
3339
4506
  news: {
3340
4507
  heading: 'Novedades',
3341
- carousel: 'Novedades del sistema',
3342
- dismiss: 'Entendido',
4508
+ close: 'Cerrar',
4509
+ unseen: 'Nueva',
4510
+ toastOne: 'Novedad: {title}',
4511
+ toastMany: '{count} novedades',
4512
+ see: 'Ver',
4513
+ loading: 'Cargando las novedades…',
4514
+ empty: 'Todavía no hay novedades.',
4515
+ loadError: 'No se pudieron cargar las novedades.',
4516
+ retry: 'Intentar de nuevo',
4517
+ pages: 'Lista de novedades',
4518
+ search: 'Buscar novedades',
4519
+ searchPlaceholder: 'Buscar novedades…',
4520
+ filters: 'Filtrar novedades',
4521
+ filterAll: 'Todas',
4522
+ filterUnread: 'No leídas',
4523
+ filterFavorites: 'Favoritas',
4524
+ favorite: 'Marcar "{title}" como favorita',
4525
+ unfavorite: 'Quitar "{title}" de las favoritas',
4526
+ noResults: 'No se encontraron novedades.',
4527
+ home: 'Inicio',
4528
+ changes: 'Qué cambió',
4529
+ before: 'Antes',
4530
+ after: 'Ahora',
4531
+ markUnread: 'Marcar como no leída',
4532
+ gotIt: 'Entendido',
4533
+ kindInformativo: 'Informativo',
4534
+ kindImplementacao: 'Implementación',
4535
+ kindAlteracao: 'Cambio',
4536
+ publishedOn: 'Publicada el {date}',
4537
+ editedOn: 'Editada el {date}',
4538
+ body: 'Texto de la novedad',
4539
+ detailError: 'No se pudo abrir esta novedad. Puede que ya no esté disponible.',
3343
4540
  },
3344
- tour: {
3345
- progress: '{current} de {total}',
3346
- skip: 'Omitir recorrido',
3347
- back: 'Volver',
3348
- next: 'Siguiente',
3349
- finish: 'Terminar',
3350
- welcomeTitle: '👋 Bienvenido',
3351
- welcomeText: 'Hagamos un recorrido rápido por los principales botones del sistema. Puedes omitirlo en cualquier momento.',
3352
- appsTitle: 'Otras aplicaciones',
3353
- appsText: 'Este botón abre la cuadrícula con los <b>otros sistemas</b> que usan el mismo inicio de sesión que este. Haz clic en uno para abrirlo en una <b>nueva pestaña del navegador</b>, ya con tu sesión — sin volver a escribir la contraseña. Lo que ves dentro de cada uno depende de tus grupos en él.',
3354
- searchTitle: 'Búsqueda rápida',
3355
- searchText: 'Encuentra cualquier módulo o página por su nombre. Atajo: <b>Ctrl + K</b> desde cualquier lugar.',
3356
- navModulesTitle: 'Navegación lateral: módulos y páginas',
3357
- navModulesText: 'Aquí están los <b>módulos</b> del sistema. Haz clic en un módulo para <b>entrar</b>: la columna pasa a mostrar los menús y las páginas que contiene. La <b>flecha superior</b> vuelve a la lista de módulos, y los menús con páginas se abren y cierran en el mismo lugar.',
3358
- navModeTitle: 'Navegación lateral: cómo se muestra',
3359
- navModeText: 'En el pie eliges el comportamiento de la columna: <b>Abrir al acercarse</b> (queda recogida y se abre cuando el puntero se acerca), <b>Mantener abierta</b> o <b>Mantener compacta</b> (solo íconos). La flecha de al lado <b>expande o contrae todos</b> los menús a la vez. La misma opción está en <b>Configuración › Apariencia › Menú lateral</b>.',
3360
- tabsTitle: 'Pestañas',
3361
- tabsText: 'Cada página se abre en una <b>pestaña</b>, como en el navegador, y cada pestaña <b>guarda su estado</b>: filtros, desplazamiento y formularios siguen como los dejaste al volver. Haz clic en <b>+</b> para una pestaña nueva, y en <b>×</b> (o con el botón central del ratón) para cerrarla.',
3362
- splitTitle: 'Pestañas lado a lado',
3363
- splitText: '<b>Arrastra</b> una pestaña a uno de los bordes del área de contenido para <b>dividir la pantalla</b> en dos paneles y trabajar con dos páginas a la vez. Arrastra las pestañas para <b>reordenarlas</b>. Con el <b>botón derecho</b> en una pestaña divides a la derecha o hacia abajo, mueves la pestaña al otro panel o cierras el panel.',
3364
- whereTitle: 'Dónde estás',
3365
- whereText: 'El nombre de la página y, debajo, el camino hasta ella — haz clic en un nivel para volver. Junto al nombre, <b>marca como favorita</b> la página (♡) para encontrarla rápido después y <b>copia el enlace</b> para compartirla.',
3366
- themeTitle: 'Tema claro / oscuro',
3367
- themeText: 'Cambia la apariencia del sistema. Atajo: <b>Ctrl + .</b>',
3368
- densityTitle: 'Densidad',
3369
- densityText: 'Ajusta el espaciado de las pantallas — de la más compacta a la más cómoda.',
3370
- fullscreenTitle: 'Pantalla completa',
3371
- fullscreenText: 'Oculta la barra del navegador para concentrarte en el sistema. Atajo: <b>Ctrl + ⇧ + F</b>',
3372
- profileTitle: 'Tu perfil',
3373
- profileText: 'Cambio de credencial (si tienes más de una), configuración, recorrido guiado, <b>novedades</b>, atajos de teclado, tema y salir — todo está en este menú. Consejo: pulsa <b>?</b> para abrir los atajos directamente.',
3374
- doneTitle: '⌨️ ¡Todo listo!',
3375
- doneText: 'Puedes repetir este recorrido cuando quieras desde el menú de tu <b>perfil › Recorrido guiado</b>. Y pulsa <b>?</b> en cualquier momento para ver todos los atajos de teclado.',
4541
+ autoServiceNews: {
4542
+ caption: 'Novedades de la app',
4543
+ empty: 'No hay novedades registradas. Quien entra en la app ve aquí lo que cambió.',
4544
+ newNews: 'Nueva novedad',
4545
+ editNews: 'Editar novedad',
4546
+ newNewsIntro: 'Complete la información de la novedad que verán los usuarios.',
4547
+ editNewsIntro: 'Actualice la información de la novedad que verán los usuarios.',
4548
+ sectionMain: 'Información principal',
4549
+ sectionMainHint: 'El título y el resumen aparecen en la lista de novedades y en la tarjeta de Inicio.',
4550
+ sectionBody: 'Contenido de la novedad',
4551
+ sectionBodyHint: 'Describa los detalles de la novedad. Use formato, listas y enlaces, y destaque lo importante.',
4552
+ sectionPublish: 'Publicación',
4553
+ sectionUntil: 'Vigencia (opcional)',
4554
+ sectionAudience: 'Público',
4555
+ preview: 'Vista previa en Inicio',
4556
+ previewTitle: 'Título de la novedad',
4557
+ previewSummary: 'El resumen aparece aquí.',
4558
+ previewNow: 'Publicada al guardar',
4559
+ tipTitle: 'Consejo:',
4560
+ tipText: 'un título corto y un resumen directo llaman más la atención en Inicio.',
4561
+ untilDate: 'Último día en que aparece',
4562
+ audienceGroups: 'Grupos',
4563
+ kind: 'Tipo de publicación',
4564
+ kindInformativo: 'Informativo',
4565
+ kindImplementacao: 'Implementación',
4566
+ kindAlteracao: 'Cambio',
4567
+ sectionBodyHintImpl: 'Una introducción corta, si quiere, y la lista de lo nuevo.',
4568
+ sectionBodyHintAlt: 'Muestre cómo era antes y cómo quedó ahora. La introducción es opcional.',
4569
+ intro: 'Introducción (opcional)',
4570
+ items: 'Qué cambió',
4571
+ itemsHint: 'Un cambio por ítem, hasta 300 caracteres. De 1 a 30 ítems.',
4572
+ itemPlaceholder: 'Describa un cambio',
4573
+ itemsEmpty: 'Todavía no hay cambios en la lista.',
4574
+ before: 'Antes',
4575
+ after: 'Ahora',
4576
+ colTitle: 'Título',
4577
+ colPublishedAt: 'Publicación',
4578
+ colUntil: 'Vigencia',
4579
+ colAudience: 'Público',
4580
+ colAuthor: 'Autor',
4581
+ colStatus: 'Estado',
4582
+ statusScheduled: 'Programada',
4583
+ statusPublished: 'Publicada',
4584
+ statusExpired: 'Vencida',
4585
+ audienceAll: 'Todos',
4586
+ noUntil: 'Sin fin',
4587
+ title: 'Título',
4588
+ summary: 'Resumen',
4589
+ summaryHint: 'Escriba un resumen corto y directo. Hasta 300 caracteres.',
4590
+ body: 'Texto',
4591
+ bodyHint: 'Se abre cuando la persona hace clic en la novedad.',
4592
+ publishDate: 'Fecha de publicación',
4593
+ publishTime: 'Hora de publicación',
4594
+ publishHint: 'Una fecha futura deja la novedad programada. Sin fecha, se publica de inmediato.',
4595
+ until: 'Vigencia',
4596
+ untilHint: 'Si no la informa, la novedad no vence.',
4597
+ audience: 'Público',
4598
+ audienceHint: 'Grupos con acceso a la app. Sin grupo, todos los que entran la ven.',
4599
+ confirmDeleteHeading: 'Eliminar novedad',
4600
+ confirmDelete: '¿Eliminar la novedad "{title}"? Desaparece para todos, incluso para quien aún no la vio.',
4601
+ saveError: 'No se pudo guardar la novedad.',
4602
+ loadError: 'No se pudieron cargar las novedades.',
4603
+ errors: {
4604
+ invalidTitle: 'Ingrese un título de hasta 140 caracteres.',
4605
+ invalidSummary: 'El resumen tiene hasta 300 caracteres.',
4606
+ bodyTooLarge: 'El texto supera el límite de 64 KB.',
4607
+ invalidPublishedAt: 'Fecha u hora de publicación inválida.',
4608
+ invalidUntil: 'Fecha de vigencia inválida.',
4609
+ invalidGroupIds: 'Algún grupo del público ya no tiene acceso a la app. Revise el público.',
4610
+ untilBeforePublish: 'La vigencia no puede terminar antes de la publicación.',
4611
+ invalidKind: 'Tipo de publicación inválido.',
4612
+ invalidItems: 'La implementación necesita de 1 a 30 cambios, de hasta 300 caracteres cada uno.',
4613
+ invalidCompare: 'El cambio necesita el antes y el ahora.',
4614
+ compareTooLarge: 'El antes o el ahora supera el límite de 32 KB.',
4615
+ },
4616
+ },
4617
+ setup: {
4618
+ label: 'Configuración inicial',
4619
+ step: 'Paso {current} de {total}',
4620
+ skip: 'Omitir',
4621
+ back: 'Atrás',
4622
+ next: 'Continuar',
4623
+ finish: 'Empezar',
4624
+ close: 'Entendido',
4625
+ greeting: 'Hola, {name}. Hazlo a tu manera.',
4626
+ greetingAnonymous: 'Hazlo a tu manera.',
4627
+ appearanceIntro: 'Elige cómo se ven los sistemas para ti. La elección vale en todos ellos y se puede cambiar cuando quieras, en la configuración.',
4628
+ preview: 'Vista previa',
4629
+ previewPage: 'Inicio',
4630
+ essentialsTitle: 'Lo esencial',
4631
+ essentialsIntro: 'Cuatro cosas que ayudan en el día a día.',
4632
+ searchTitle: 'Busca cualquier pantalla',
4633
+ searchText: 'Pulsa {key} o usa la búsqueda del encabezado para encontrar pantallas, favoritos y lo que abriste hace poco.',
4634
+ tabsTitle: 'Pestañas y paneles',
4635
+ tabsText: 'Cada pantalla se abre en una pestaña. Arrastra la pestaña a un lado del área de trabajo para ver dos pantallas juntas.',
4636
+ favoritesTitle: 'Favoritos',
4637
+ favoritesText: 'Marca el corazón de una pantalla para que aparezca en el inicio y arriba en la búsqueda.',
4638
+ settingsTitle: 'Configuración',
4639
+ settingsText: 'Apariencia, región, accesibilidad y seguridad de la cuenta están en el menú de tu perfil, o en {key}.',
3376
4640
  },
3377
4641
  shortcuts: {
3378
4642
  heading: 'Atajos de teclado',
3379
4643
  hint: 'Consejo: pulsa {key} en cualquier momento para volver a abrir este panel.',
3380
- replayTour: 'Repetir recorrido',
4644
+ essentials: 'Repasar lo esencial',
3381
4645
  dismiss: 'Entendido',
3382
4646
  openSearch: 'Abrir la búsqueda rápida',
3383
4647
  goHome: 'Ir al Inicio',
@@ -3441,10 +4705,14 @@ const SPINE_MESSAGES_ES = {
3441
4705
  shortcuts: 'Atajos',
3442
4706
  shortcutsDescription: 'Pulsa ? en cualquier pantalla para ver esta lista.',
3443
4707
  shortcutsKeywords: 'teclado teclas',
3444
- tour: 'Recorrido guiado',
3445
- tourDescription: 'Muestra de nuevo dónde está cada parte de la pantalla.',
3446
- tourKeywords: 'onboarding ayuda presentación',
3447
- replayTour: 'Repetir recorrido',
4708
+ setup: 'Configuración inicial',
4709
+ setupDescription: 'Abre de nuevo la elección de apariencia del primer acceso.',
4710
+ setupKeywords: 'configuración inicial primer acceso apariencia bienvenida',
4711
+ redoSetup: 'Rehacer',
4712
+ essentials: 'Lo esencial',
4713
+ essentialsDescription: 'Búsqueda, pestañas, favoritos y configuración en un resumen.',
4714
+ essentialsKeywords: 'ayuda consejos búsqueda pestañas favoritos presentación',
4715
+ showEssentials: 'Ver',
3448
4716
  accessibility: 'Accesibilidad',
3449
4717
  accessibilityKeywords: 'accesibilidad lectura visión',
3450
4718
  textSize: 'Tamaño del texto',
@@ -3457,7 +4725,7 @@ const SPINE_MESSAGES_ES = {
3457
4725
  motionReduce: 'Siempre',
3458
4726
  motionFull: 'Nunca',
3459
4727
  help: 'Ayuda',
3460
- helpKeywords: 'ayuda novedades recorrido presentación',
4728
+ helpKeywords: 'ayuda novedades configuración inicial esencial presentación',
3461
4729
  news: 'Novedades',
3462
4730
  newsDescription: 'Lo que cambió en las últimas versiones.',
3463
4731
  newsKeywords: 'novedades versión lanzamiento changelog',
@@ -3647,7 +4915,6 @@ const SPINE_MESSAGES_ES = {
3647
4915
  accountSecurity: {
3648
4916
  loading: 'Cargando…',
3649
4917
  loadError: 'No se pudo cargar tu cuenta de Argos.',
3650
- sessionEnded: 'La sesión de este inicio de sesión terminó en Argos. Inicia sesión de nuevo para administrar la cuenta.',
3651
4918
  retry: 'Intentar de nuevo',
3652
4919
  methodTotp: 'Aplicación de autenticación',
3653
4920
  methodEmail: 'Correo electrónico',
@@ -3753,6 +5020,123 @@ const SPINE_MESSAGES_ES = {
3753
5020
  sessionEndedNotice: 'Sesión cerrada.',
3754
5021
  othersEndedNotice: { zero: 'Ninguna sesión cerrada.', one: '1 sesión cerrada.', other: '{count} sesiones cerradas.' },
3755
5022
  },
5023
+ ratings: {
5024
+ rateScreen: 'Evaluar esta pantalla',
5025
+ rateApp: 'Evaluar {app}',
5026
+ ratedApp: 'Tu evaluación de {app}',
5027
+ heading: 'Haz tu evaluación',
5028
+ subheading: 'Aprovecha para dejar tu opinión',
5029
+ aboutScreen: 'Pantalla: {screen}',
5030
+ aboutApp: '{app} en general',
5031
+ score: 'Tu nota',
5032
+ scoreOf: '{value} de 10',
5033
+ scoreNamed: '{value} de 10 — {name}',
5034
+ scoreShort: '{value}/10',
5035
+ scoreNames: { 1: 'Mala', 2: 'Regular', 3: 'Buena', 4: 'Muy buena', 5: 'Excelente' },
5036
+ noScore: 'Sin nota',
5037
+ scaleHint: 'De 0 a 10: cada estrella vale 2 y media estrella, 1. Las flechas cambian de media en media; hacer clic de nuevo en la primera media estrella da 0.',
5038
+ comment: 'Comentario',
5039
+ commentPlaceholder: 'Qué funcionó, qué podría mejorar (opcional)',
5040
+ submit: 'Evaluar',
5041
+ update: 'Actualizar',
5042
+ previous: 'Evaluaste el {date}. Puedes cambiarla cuando quieras.',
5043
+ scoreRequired: 'Elige una nota de 0 a 10.',
5044
+ loading: 'Cargando tu evaluación…',
5045
+ thanks: '¡Gracias por tu evaluación!',
5046
+ updated: 'Evaluación actualizada. ¡Gracias!',
5047
+ saveError: 'No se pudo enviar la evaluación. Inténtalo de nuevo.',
5048
+ period: 'Período',
5049
+ periods: { all: 'Todo', d7: '7 días', d30: '30 días', d90: '90 días' },
5050
+ refresh: 'Actualizar',
5051
+ appCard: 'La herramienta',
5052
+ screensCard: 'Las pantallas',
5053
+ appCardHint: 'Evaluación general',
5054
+ screensCardHint: 'Evaluación general de las pantallas',
5055
+ scoreMax: '/10',
5056
+ average: 'Promedio',
5057
+ total: { zero: 'Ninguna evaluación', one: '1 evaluación', other: '{count} evaluaciones' },
5058
+ comments: { zero: 'ningún comentario', one: '1 comentario', other: '{count} comentarios' },
5059
+ noRatings: 'Todavía no hay evaluaciones en el período.',
5060
+ distribution: 'Distribución de las notas',
5061
+ distributionRow: 'Nota {score}: {count} ({share})',
5062
+ ranking: 'Evaluaciones por pantalla y área',
5063
+ rankingHint: 'Compara las pantallas. Haz clic en una para ver sus evaluaciones.',
5064
+ sort: 'Orden',
5065
+ sorts: { worst: 'Peores primero', best: 'Mejores primero', most: 'Más evaluadas' },
5066
+ noScreens: 'Ninguna pantalla evaluada en el período.',
5067
+ filterByScreen: 'Ver las evaluaciones de {screen}',
5068
+ recent: 'Evaluaciones recientes',
5069
+ recentHint: 'De la más nueva a la más antigua.',
5070
+ filterScope: 'Qué se evaluó',
5071
+ allScopes: 'Herramienta y pantallas',
5072
+ tool: 'La herramienta',
5073
+ screens: 'Las pantallas',
5074
+ filterScreen: 'Pantalla',
5075
+ allScreens: 'Todas las pantallas',
5076
+ filterScore: 'Nota',
5077
+ allScores: 'Todas las notas',
5078
+ withComment: 'Mostrar solo con comentario',
5079
+ clearFilters: 'Limpiar filtros',
5080
+ noComment: 'Sin comentario.',
5081
+ itemActions: 'Acciones de la evaluación',
5082
+ copyComment: 'Copiar comentario',
5083
+ commentCopied: 'Comentario copiado.',
5084
+ copyFailed: 'No se pudo copiar el comentario.',
5085
+ showAppRatings: 'Ver evaluaciones de la herramienta',
5086
+ showScreenRatings: 'Ver evaluaciones de esta pantalla',
5087
+ emptyList: 'Ninguna evaluación con estos filtros.',
5088
+ pagination: 'Páginas de las evaluaciones',
5089
+ unknownUser: 'Usuario',
5090
+ loadError: 'No se pudieron cargar las evaluaciones.',
5091
+ forbidden: 'No administras esta aplicación, o no tienes activa la credencial de Administrador.',
5092
+ updatedAt: 'Actualizado el {date} a las {time}',
5093
+ details: 'Ver detalles',
5094
+ detailsOf: '(evaluaciones de {name})',
5095
+ tabScreens: 'Pantallas',
5096
+ tabAreas: 'Áreas',
5097
+ tabTrends: 'Tendencias',
5098
+ viewAll: 'Ver todas las evaluaciones',
5099
+ allHeading: 'Todas las evaluaciones',
5100
+ justNow: 'Hace un momento',
5101
+ yesterdayAt: 'Ayer a las {time}',
5102
+ dateAt: '{date} a las {time}',
5103
+ sortsShort: { worst: 'Peores', best: 'Mejores', most: 'Más evaluadas' },
5104
+ bands: { all: 'Todas las notas', bad: 'Malas (menos de 5)', mid: 'Medias (5 a 6,9)', good: 'Buenas (7 o más)' },
5105
+ bandFilter: 'Rango de la nota',
5106
+ filterArea: 'Área',
5107
+ allAreas: 'Todas las áreas',
5108
+ noArea: 'Sin área',
5109
+ filterByArea: 'Ver las pantallas de {area}',
5110
+ screensCount: { one: '1 pantalla', other: '{count} pantallas' },
5111
+ searchScreens: 'Buscar pantalla o ruta…',
5112
+ searchScreensLabel: 'Buscar pantalla',
5113
+ searchAreas: 'Buscar área…',
5114
+ searchAreasLabel: 'Buscar área',
5115
+ tableEmpty: 'Ninguna pantalla con estos filtros.',
5116
+ areasEmpty: 'Ninguna área con estos filtros.',
5117
+ colScreen: 'Pantalla',
5118
+ colArea: 'Área',
5119
+ colScreens: 'Pantallas',
5120
+ colScore: 'Nota',
5121
+ colTotal: 'Evaluaciones',
5122
+ colComments: 'Comentarios',
5123
+ colTrend: 'Tendencia',
5124
+ colOpen: 'Abrir',
5125
+ tablePagination: 'Páginas de las pantallas',
5126
+ areasPagination: 'Páginas de las áreas',
5127
+ trendOf: 'Media por semana: de {first} a {last}',
5128
+ trendNone: 'Sin notas por semana en el período.',
5129
+ trendCaption: 'Media por semana, de 0 a 10',
5130
+ trendEmpty: 'Sin evaluaciones en el período para mostrar la tendencia.',
5131
+ trendValue: '{series} {value}',
5132
+ trendWeek: 'Semana del {week}: {values} ({count})',
5133
+ aboutRating: 'Evaluación',
5134
+ aboutRatingKeywords: 'evaluar nota estrellas promedio opinión',
5135
+ rateAction: 'Evaluar',
5136
+ noRatingsYet: 'Todavía sin evaluaciones.',
5137
+ loadingAverage: 'Cargando el promedio…',
5138
+ averageError: 'No se pudo cargar el promedio.',
5139
+ },
3756
5140
  notification: {
3757
5141
  genericError: 'Ocurrió un error al procesar tu solicitud.',
3758
5142
  },
@@ -3783,24 +5167,36 @@ const SPINE_MESSAGES_ES = {
3783
5167
  },
3784
5168
  home: {
3785
5169
  noAccessTitle: 'Todavía no tienes acceso a ninguna pantalla',
3786
- noAccessText: 'El acceso lo concede el responsable de tu área. Si ya lo aprobó, sal y vuelve a entrar, o abre un ticket con el equipo responsable.',
5170
+ noAccessText: 'El acceso lo concede el administrador de la aplicación o el administrador de un grupo con acceso a ella. Si ya lo concedió, sal y vuelve a entrar.',
3787
5171
  yourScreens: 'Tus pantallas',
3788
- modules: 'Módulos',
5172
+ modules: 'Acceso rápido',
3789
5173
  privileged: 'Acceso privilegiado',
3790
- recent: 'Abiertos recientemente',
5174
+ recent: 'Continuar donde lo dejaste',
3791
5175
  recentCaption: 'Las pantallas que abriste por última vez, de la más reciente a la más antigua.',
3792
5176
  screenCount: { one: '1 pantalla', other: '{count} pantallas' },
3793
5177
  favorite: 'Agregar {name} a favoritos',
3794
5178
  unfavorite: 'Quitar {name} de favoritos',
3795
5179
  favorites: 'Favoritos',
3796
- navigate: 'Navegar',
5180
+ morning: 'Buenos días',
5181
+ afternoon: 'Buenas tardes',
5182
+ evening: 'Buenas noches',
5183
+ greetingName: '{greeting}, {name}',
5184
+ intro: 'Accede a tus herramientas y sigue las novedades de tus sistemas.',
5185
+ seeAll: 'Ver todo',
5186
+ seeLess: 'Ver menos',
5187
+ recentActions: 'Más acciones para {name}',
5188
+ forgetRecent: 'Quitar del historial',
5189
+ explore: 'Explorar sistemas',
5190
+ exploreIntro: 'Accede a los principales módulos de la plataforma.',
5191
+ news: 'Novedades',
5192
+ newsBadge: 'Actualizaciones',
5193
+ newsAll: 'Ver todas',
5194
+ favoritesEmpty: 'Toca el corazón en la barra de una pantalla para verla aquí.',
5195
+ help: 'Ayuda y recursos',
5196
+ shortcuts: 'Atajos de teclado',
5197
+ essentials: 'Repasar lo esencial',
3797
5198
  settings: 'Configuración',
3798
- tools: 'Herramientas',
3799
5199
  systemDocs: 'Documentación del sistema',
3800
- colScreen: 'Pantalla',
3801
- colWhere: 'Dónde está',
3802
- colFavorite: 'Favorito',
3803
- noModule: 'Sin módulo',
3804
5200
  },
3805
5201
  autoService: {
3806
5202
  loading: 'Cargando...',
@@ -3814,9 +5210,6 @@ const SPINE_MESSAGES_ES = {
3814
5210
  inactive: 'Inactivo',
3815
5211
  confirmChanges: 'Confirmar cambios',
3816
5212
  appsTitle: 'Aplicaciones',
3817
- appsIntro: 'Gestiona las aplicaciones (client_credentials) de este client — sin depender del panel central.',
3818
- clientTitle: 'Cliente',
3819
- clientIntro: 'Gestiona rutas, enrutadores y acceso de este client — sin depender del panel central.',
3820
5213
  clientSections: 'Secciones del cliente',
3821
5214
  tabRoutes: 'Rutas',
3822
5215
  tabRouters: 'Enrutadores',
@@ -3825,31 +5218,31 @@ const SPINE_MESSAGES_ES = {
3825
5218
  clientsLoadError: 'No fue posible cargar los clients que administra (HTTP {status}). No es falta de permiso: Argos no respondió. Inténtelo de nuevo en un momento.',
3826
5219
  retryLoad: 'Intentar de nuevo',
3827
5220
  pickClient: 'Selecciona el client que quieres administrar',
3828
- groupsTitle: 'Grupos',
3829
- groupsIntro: 'Crea, edita y elimina los grupos de este client y gestiona sus miembros — sin depender del panel central.',
3830
- groupsFixed: 'Los 5 grupos de abajo son fijos de este client y no se pueden renombrar, crear ni eliminar — consulta uno para gestionar sus miembros.',
3831
5221
  pickGroup: 'Selecciona un grupo',
3832
5222
  noDescription: 'Sin descripción registrada.',
3833
- pickGroupHint: 'Consulta un grupo arriba para ver y gestionar sus miembros.',
3834
5223
  manageMembers: 'Gestionar miembros',
3835
5224
  membersCaption: 'Miembros del grupo',
3836
5225
  noMembers: 'Ningún miembro en este grupo.',
3837
5226
  colUser: 'Usuario',
3838
5227
  colMemberSince: 'Miembro desde',
3839
5228
  membersHeading: 'Miembros — {group}',
3840
- addUser: 'Agregar usuario (username o email)',
5229
+ addUser: 'Agregar usuario',
3841
5230
  userSearch: 'Buscar por nombre, username o email...',
3842
5231
  role: 'Función (opcional)',
3843
- pickRole: 'Selecciona una función',
5232
+ noRole: 'Miembro (sin función)',
3844
5233
  add: 'Agregar',
3845
5234
  suggestions: 'Sugerencias',
3846
- moreSuggestions: 'Ver más sugerencias',
5235
+ suggestionsHint: 'Personas que ya están en otros grupos de este sistema',
5236
+ suggestionGroups: 'En {groups}',
5237
+ addSuggestion: 'Agregar a {name} al grupo',
5238
+ membersTitle: 'Miembros del grupo',
5239
+ memberSearch: 'Buscar miembro...',
3847
5240
  membersOf: 'Miembros del grupo {group}',
3848
5241
  noMembersShort: 'Ningún miembro.',
3849
5242
  newMember: 'Nuevo',
3850
5243
  addedBy: 'por {user}',
3851
5244
  removal: 'Eliminación',
3852
- removalEmpty: 'Selecciona uno o más miembros de la lista de al lado para quitarlos del grupo.',
5245
+ removalEmpty: 'Marca miembros en la lista para quitarlos del grupo. La remoción solo vale al guardar.',
3853
5246
  undoRemoval: 'Deshacer eliminación',
3854
5247
  saveChanges: 'Guardar cambios',
3855
5248
  colRole: 'Función',
@@ -3859,14 +5252,11 @@ const SPINE_MESSAGES_ES = {
3859
5252
  accessCaption: 'Accesos del client',
3860
5253
  noAccess: 'Ningún acceso concedido todavía.',
3861
5254
  colGroup: 'Grupo',
3862
- colBadge: 'Credencial',
3863
5255
  manageRoutes: 'Gestionar rutas',
3864
5256
  group: 'Grupo',
3865
5257
  routesOf: 'Rutas de {group}',
3866
- guardsHint: 'Solo aparecen aquí los routers privados sin restricción de credencial, o cuya credencial permitida incluya <strong>{badge}</strong> (la credencial de este grupo).',
3867
5258
  noPrivateRoutes: 'Ninguna ruta privada disponible para la credencial de este grupo.',
3868
5259
  register: 'Registrar',
3869
- appsSearchIntro: 'Consulta una aplicación (client_credentials) de este client para gestionar operaciones y accesos — sin depender del panel central.',
3870
5260
  secretCreated: 'Aplicación creada. Guarda el secret ahora, no se volverá a mostrar:',
3871
5261
  pickApp: 'Selecciona una aplicación',
3872
5262
  disable: 'Desactivar',
@@ -3885,6 +5275,7 @@ const SPINE_MESSAGES_ES = {
3885
5275
  manageOperations: 'Gestionar operaciones',
3886
5276
  colOperations: 'Operaciones',
3887
5277
  colGuards: 'Guards',
5278
+ colMembers: 'Miembros',
3888
5279
  filterOperations: 'Filtrar operaciones',
3889
5280
  filterRoutes: 'Filtrar rutas',
3890
5281
  noFilterMatch: 'Nada coincide con “{term}”.',
@@ -3898,7 +5289,6 @@ const SPINE_MESSAGES_ES = {
3898
5289
  colDescription: 'Descripción',
3899
5290
  colAllowedGroups: 'Grupos permitidos',
3900
5291
  groupCount: { one: '1 grupo', other: '{count} grupos' },
3901
- routersTitle: 'Enrutadores',
3902
5292
  newRouter: 'Nuevo enrutador',
3903
5293
  routersCaption: 'Enrutadores del client',
3904
5294
  noRouters: 'Ningún enrutador registrado todavía.',
@@ -3921,7 +5311,6 @@ const SPINE_MESSAGES_ES = {
3921
5311
  colAllowedBadges: 'Credenciales permitidas',
3922
5312
  anyBadge: 'Cualquier credencial',
3923
5313
  allowedBadgesHint: 'Vacío = cualquier credencial. Con una o más elegidas, solo los grupos con una de esas credenciales pueden recibir acceso a esta pantalla en la pestaña Acceso.',
3924
- routesTitle: 'Rutas',
3925
5314
  newRoute: 'Nueva ruta',
3926
5315
  routesCaption: 'Rutas del client',
3927
5316
  noRoutes: 'Ninguna ruta registrada todavía.',
@@ -3997,7 +5386,6 @@ const SPINE_MESSAGES_ES = {
3997
5386
  reorderSave: 'Guardar orden',
3998
5387
  newGroup: 'Nuevo grupo',
3999
5388
  editGroup: 'Editar grupo',
4000
- groupsCaption: 'Grupos del proyecto',
4001
5389
  noGroups: 'Aún no hay grupos registrados.',
4002
5390
  accessLevel: 'Nivel de acceso',
4003
5391
  pickAccessLevel: 'Selecciona un nivel',
@@ -4008,19 +5396,11 @@ const SPINE_MESSAGES_ES = {
4008
5396
  groupType: 'Tipo',
4009
5397
  groupTypePlaceholder: 'Selecciona el tipo',
4010
5398
  groupDescription: 'Descripción (opcional)',
4011
- openGroup: 'Abrir el grupo {name}',
4012
- adminGroupTag: 'Administración',
4013
- adminGroupNote: 'Grupo de administración del proyecto: sus miembros administran esta app en el autoservicio. Es el único del proyecto, no se puede eliminar, renombrar, desactivar ni cambiar de tipo, y no puede quedarse sin miembros.',
4014
- adminGroupEditNote: 'Grupo de administración del proyecto: solo se puede cambiar la descripción.',
4015
- adminGroupLastMemberWarning: 'El grupo de administración no puede quedarse sin miembros: agrega a otra persona o deshaz una eliminación.',
4016
5399
  confirmDeleteGroupHeading: '¿Eliminar grupo?',
4017
5400
  confirmDeleteGroup: 'El grupo {name} se eliminará junto con sus miembros, los accesos a pantallas y los permisos en aplicaciones. Esta acción no se puede deshacer.',
4018
5401
  groupSaveError: 'No se pudo guardar el grupo. Inténtalo de nuevo.',
4019
5402
  membersSaveError: 'No se pudieron guardar todos los cambios de los miembros. Revisa la lista e inténtalo de nuevo.',
4020
- appsCaption: 'Aplicaciones del proyecto',
4021
5403
  noApps: 'Ninguna aplicación registrada todavía.',
4022
- colGrants: 'Grants',
4023
- openApp: 'Abrir la aplicación {name}',
4024
5404
  tabTokens: 'Tokens',
4025
5405
  tokensCaption: 'Tokens de la aplicación',
4026
5406
  noTokens: 'Ningún token creado para esta aplicación todavía.',
@@ -4099,8 +5479,6 @@ const SPINE_MESSAGES_ES = {
4099
5479
  },
4100
5480
  autoServiceAudit: {
4101
5481
  title: 'Auditoría',
4102
- intro: 'Lo que pasó en las aplicaciones de este proyecto: quién hizo qué, cuándo y con qué resultado.',
4103
- tabApps: 'Aplicaciones',
4104
5482
  period: 'Período',
4105
5483
  periodLastHour: 'Última hora',
4106
5484
  period24h: 'Últimas 24 horas',
@@ -4138,7 +5516,6 @@ const SPINE_MESSAGES_ES = {
4138
5516
  topUsers: 'Usuarios más activos',
4139
5517
  topApps: 'Por aplicación',
4140
5518
  noTop: 'Nada en el período.',
4141
- eventCount: { one: '1 evento', other: '{count} eventos' },
4142
5519
  failureCount: { one: '1 fallo', other: '{count} fallos' },
4143
5520
  deniedCount: { one: '1 denegado', other: '{count} denegados' },
4144
5521
  filterBy: 'Filtrar por {name}',
@@ -4202,9 +5579,6 @@ const SPINE_MESSAGES_ES = {
4202
5579
  one: '1 evento de esta cadena es de una aplicación fuera de tu proyecto y no aparece aquí.',
4203
5580
  other: '{count} eventos de esta cadena son de aplicaciones fuera de tu proyecto y no aparecen aquí.',
4204
5581
  },
4205
- traceCurrent: 'este evento',
4206
- openTraceEvent: 'Abrir {operation} de {time}',
4207
- introAdmin: 'Lo que pasó en todas las aplicaciones: quién hizo qué, cuándo y con qué resultado.',
4208
5582
  period6h: 'Últimas 6 horas',
4209
5583
  refresh: 'Actualizar',
4210
5584
  autoRefresh: 'Actualizar cada 30 s',
@@ -4391,6 +5765,322 @@ const SPINE_MESSAGES_ES = {
4391
5765
  syncError: 'No fue posible sincronizar. Inténtelo de nuevo.',
4392
5766
  syncNow: 'Sincronizar ahora',
4393
5767
  },
5768
+ suggestions: {
5769
+ button: 'Sugerir una mejora',
5770
+ buttonHint: 'Sugerir una mejora para esta pantalla',
5771
+ modalTitle: 'Sugerir una mejora',
5772
+ intro: 'Cuéntenos qué facilitaría su trabajo. Quien administra la aplicación recibe el pedido y responde por aquí.',
5773
+ kind: 'Tipo',
5774
+ kinds: { melhoria: 'Mejora', nova_funcionalidade: 'Nueva funcionalidad', problema: 'Problema', outro: 'Otro' },
5775
+ statuses: {
5776
+ em_analise: 'En análisis', planejada: 'Planificada', em_desenvolvimento: 'En desarrollo',
5777
+ concluida: 'Concluida', recusada: 'Rechazada',
5778
+ },
5779
+ legacyStatuses: { nova: 'Nueva' },
5780
+ title: 'Título',
5781
+ titlePlaceholder: 'Ej.: Filtrar la lista por fecha',
5782
+ titleRequired: 'Indique un título.',
5783
+ description: 'Descripción',
5784
+ descriptionHint: 'Qué intentó hacer, qué esperaba y por qué ayudaría.',
5785
+ screen: 'Pantalla',
5786
+ screenHint: 'De dónde viene la sugerencia. Ajústela si es de otra pantalla.',
5787
+ send: 'Enviar sugerencia',
5788
+ cancel: 'Cancelar',
5789
+ sent: 'Sugerencia enviada. ¡Gracias!',
5790
+ sendError: 'No fue posible enviar la sugerencia. Inténtelo de nuevo.',
5791
+ similarHeading: 'Ya lo pidieron en esta pantalla',
5792
+ similarHint: 'Si es el mismo pedido, apóyelo en lugar de repetirlo.',
5793
+ vote: 'Yo también lo quiero',
5794
+ voted: 'Usted lo apoya',
5795
+ votes: { one: '{count} apoyo', other: '{count} apoyos' },
5796
+ voteError: 'No fue posible registrar el apoyo.',
5797
+ yours: 'Suya',
5798
+ mine: 'Mis sugerencias',
5799
+ mineEmpty: 'Todavía no envió sugerencias en esta aplicación.',
5800
+ mineError: 'No fue posible cargar sus sugerencias.',
5801
+ loadMore: 'Cargar más',
5802
+ statusFilter: 'Estado',
5803
+ allStatuses: 'Todos',
5804
+ adminReply: 'Respuesta de la administración',
5805
+ sentAt: 'Enviada el {date}',
5806
+ boardLabel: 'Tablero de sugerencias',
5807
+ search: 'Buscar sugerencias',
5808
+ kindFilter: 'Tipo',
5809
+ allKinds: 'Todos los tipos',
5810
+ refresh: 'Actualizar',
5811
+ boardEmpty: 'Todavía no hay sugerencias',
5812
+ boardEmptyHint: 'Los pedidos hechos con el botón "Sugerir una mejora" de las pantallas aparecen aquí.',
5813
+ boardFiltered: '{shown} de {total} sugerencias',
5814
+ loadError: 'No fue posible cargar las sugerencias.',
5815
+ moveError: 'No fue posible mover la sugerencia. El tablero se recargó.',
5816
+ removedAuthor: 'Persona eliminada',
5817
+ noScreen: 'Sin pantalla',
5818
+ noDescription: 'Sin descripción.',
5819
+ requestedBy: 'Pedida por',
5820
+ requestedAt: 'El',
5821
+ status: 'Estado',
5822
+ statusSaved: 'Estado actualizado.',
5823
+ statusError: 'No fue posible cambiar el estado.',
5824
+ history: 'Historial',
5825
+ historyEmpty: 'Todavía sin movimientos.',
5826
+ eventStatus: '{actor} la movió de {from} a {to}',
5827
+ eventComment: '{actor} comentó',
5828
+ someone: 'Alguien',
5829
+ comment: 'Comentario para quien la pidió',
5830
+ commentHint: 'La persona lo ve en "Mis sugerencias".',
5831
+ commentSend: 'Comentar',
5832
+ commentSent: 'Comentario enviado.',
5833
+ commentError: 'No fue posible enviar el comentario.',
5834
+ commentRequired: 'Escriba el comentario.',
5835
+ viewLabel: 'Vista',
5836
+ viewBoard: 'Tablero',
5837
+ viewArchive: 'Archivo',
5838
+ kpis: 'Indicadores de las sugerencias',
5839
+ kpiOpen: 'En curso',
5840
+ kpiStatusCount: '{status} {count}',
5841
+ kpiDone: 'Concluidas en {days} días',
5842
+ kpiDoneToday: '+{count} hoy',
5843
+ kpiDoneNoneToday: 'Ninguna concluida hoy',
5844
+ kpiOverdueTrend: '+{count} desde ayer',
5845
+ kpiOverdueSteady: 'Ninguna nueva desde ayer',
5846
+ kpiSoon: 'Por vencer',
5847
+ kpiMineHint: 'Abiertas con usted entre los responsables',
5848
+ kpiPriority: 'Abiertas por prioridad',
5849
+ kpiPriorityNone: 'Ninguna abierta',
5850
+ kpiPriorityPart: '{priority} {count}',
5851
+ filters: 'Filtros del tablero',
5852
+ moreFilters: 'Más filtros',
5853
+ moreFiltersActive: 'Más filtros ({count})',
5854
+ allBoardStatuses: 'Todos los estados',
5855
+ newTaskIn: 'Nueva tarea en {status}',
5856
+ newTaskOptions: 'Crear en otra columna',
5857
+ columnOldest: 'La más antigua hace {age}',
5858
+ columnOverdue: { one: '{count} vencida', other: '{count} vencidas' },
5859
+ columnEmpty: 'Ninguna tarea en esta columna.',
5860
+ columnEmptyFiltered: 'Ninguna tarea con estos filtros.',
5861
+ columnEmptyHints: {
5862
+ em_analise: 'Los pedidos nuevos llegan aquí para que el equipo los evalúe.',
5863
+ planejada: 'Lo que ya se aceptó y espera su turno.',
5864
+ em_desenvolvimento: 'Lo que el equipo está haciendo ahora.',
5865
+ concluida: 'Las entregas de los últimos {days} días quedan aquí.',
5866
+ },
5867
+ duration: { days: '{d} d {h} h', hours: '{h} h {m} min', minutes: '{m} min' },
5868
+ createdOn: 'Creada el {date}',
5869
+ dueWithin: 'En plazo · hasta {date}',
5870
+ dueLateDays: { one: 'Vencida hace {count} día', other: 'Vencida hace {count} días' },
5871
+ screenFilter: 'Pantalla',
5872
+ allScreens: 'Todas las pantallas',
5873
+ authorFilter: 'Quién la pidió',
5874
+ allAuthors: 'Todas las personas',
5875
+ sort: 'Ordenar',
5876
+ sorts: { position: 'Orden del tablero', votes: 'Más apoyadas', recent: 'Más recientes' },
5877
+ sortHint: 'Con este orden, arrastrar solo cambia la columna (la tarjeta va al final).',
5878
+ clearFilters: 'Limpiar filtros',
5879
+ topVoted: 'Más apoyada',
5880
+ comments: { one: '{count} comentario', other: '{count} comentarios' },
5881
+ statusSince: 'Desde el {date}',
5882
+ openScreen: 'Abrir la pantalla',
5883
+ statusChange: 'Cambiar el estado',
5884
+ statusComment: 'Comentario (opcional)',
5885
+ statusCommentHint: 'Va junto con el cambio; la persona lo ve en "Mis sugerencias".',
5886
+ statusApply: 'Cambiar estado',
5887
+ archiveLabel: 'Archivo de sugerencias',
5888
+ archiveSearch: 'Buscar en el archivo',
5889
+ archiveEmpty: 'Nada en el archivo',
5890
+ archiveEmptyHint: 'Las sugerencias rechazadas y las concluidas hace más de {days} días aparecen aquí.',
5891
+ archiveCount: { one: '{count} sugerencia en el archivo', other: '{count} sugerencias en el archivo' },
5892
+ closedOn: { concluida: 'Concluida el {date}', recusada: 'Rechazada el {date}' },
5893
+ pagination: 'Páginas del archivo',
5894
+ reopen: 'Reabrir',
5895
+ reopened: 'Sugerencia reabierta: volvió a En análisis.',
5896
+ reopenError: 'No fue posible reabrir la sugerencia.',
5897
+ newTask: 'Nueva tarea',
5898
+ addTaskPlaceholder: 'Título de la tarea (Enter crea)',
5899
+ taskCreated: 'Tarea creada.',
5900
+ createError: 'No fue posible crear la tarea.',
5901
+ saveError: 'No fue posible guardar. Inténtelo de nuevo.',
5902
+ kpiMine: 'Asignadas a mí',
5903
+ kpiOverdue: 'Vencidas',
5904
+ assigneeFilter: 'Responsable',
5905
+ allAssignees: 'Cualquier responsable',
5906
+ assigneeMine: 'Mías',
5907
+ assigneeNone: 'Sin responsable',
5908
+ labelFilter: 'Etiqueta',
5909
+ allLabels: 'Todas las etiquetas',
5910
+ priorityFilter: 'Prioridad',
5911
+ allPriorities: 'Todas las prioridades',
5912
+ dueFilter: 'Plazo',
5913
+ dueAny: 'Cualquier plazo',
5914
+ dueOverdueFilter: 'Vencidas',
5915
+ dueSoonFilter: 'Vencen hoy o mañana',
5916
+ priority: 'Prioridad',
5917
+ priorities: { urgente: 'Urgente', alta: 'Alta', media: 'Media', baixa: 'Baja' },
5918
+ dueOn: 'Hasta el {date}',
5919
+ dueToday: 'Vence hoy',
5920
+ dueTomorrow: 'Vence mañana',
5921
+ dueLate: 'Venció el {date}',
5922
+ checklistSpoken: '{done} de {total} ítems hechos',
5923
+ moreAssignees: '+{count}',
5924
+ cardMenu: 'Acciones de {key}',
5925
+ menuStatus: 'Cambiar estado',
5926
+ menuAssignMe: 'Asignarme',
5927
+ menuCopyLink: 'Copiar enlace',
5928
+ menuCopyKey: 'Copiar clave',
5929
+ menuLabel: 'Etiquetas',
5930
+ menuNoLabels: 'Ninguna etiqueta en la aplicación',
5931
+ menuPriority: 'Prioridad',
5932
+ menuCover: 'Elegir portada',
5933
+ menuArchive: 'Archivar',
5934
+ menuRestore: 'Restaurar en el tablero',
5935
+ menuDelete: 'Eliminar',
5936
+ cover: 'Portada',
5937
+ coverSolid: 'Colores',
5938
+ coverGradient: 'Degradados',
5939
+ coverRemove: 'Quitar portada',
5940
+ coverName: 'Color {n}',
5941
+ gradientName: 'Degradado {n}',
5942
+ linkCopied: 'Enlace copiado.',
5943
+ keyCopied: 'Clave copiada.',
5944
+ copyError: 'No fue posible copiar.',
5945
+ deleteHeading: '¿Eliminar {key}?',
5946
+ deleteMessage: 'La tarea, la lista de control, los comentarios y las actividades se eliminan definitivamente. No se puede deshacer.',
5947
+ deleteConfirm: 'Eliminar',
5948
+ deleted: 'Tarea eliminada.',
5949
+ archivedToast: 'Tarea archivada: está en el Archivo.',
5950
+ restoredToast: 'Tarea de vuelta en el tablero.',
5951
+ assignedToMe: 'Asignada a usted.',
5952
+ archivedTag: 'Archivada',
5953
+ taskLabel: 'Tarea',
5954
+ close: 'Cerrar',
5955
+ editTitle: 'Editar título',
5956
+ editDescription: 'Editar descripción',
5957
+ save: 'Guardar',
5958
+ checklist: 'Lista de control',
5959
+ checklistAdd: 'Agregar ítem',
5960
+ checklistPlaceholder: 'Nuevo ítem (Enter agrega)',
5961
+ checklistOnCard: 'Mostrar en la tarjeta',
5962
+ checklistEmpty: 'Todavía sin ítems.',
5963
+ checklistRemove: 'Quitar "{text}"',
5964
+ checklistUp: 'Subir "{text}"',
5965
+ checklistDown: 'Bajar "{text}"',
5966
+ tabComments: 'Comentarios',
5967
+ tabActivity: 'Actividades',
5968
+ commentsEmpty: 'Todavía sin comentarios.',
5969
+ activityEmpty: 'Todavía sin actividades.',
5970
+ commentInternal: 'Solo para el equipo (interno: quien la pidió no lo ve)',
5971
+ internalTag: 'Interno',
5972
+ activity: {
5973
+ created: '{actor} creó la tarea',
5974
+ title: '{actor} cambió el título de "{from}" a "{to}"',
5975
+ description: '{actor} editó la descripción',
5976
+ kind: '{actor} cambió el tipo de {from} a {to}',
5977
+ priority: '{actor} cambió la prioridad de {from} a {to}',
5978
+ start_date: '{actor} fijó el inicio para el {to}',
5979
+ start_date_removed: '{actor} quitó la fecha de inicio',
5980
+ due_date: '{actor} fijó la conclusión para el {to}',
5981
+ due_date_removed: '{actor} quitó la fecha de conclusión',
5982
+ cover: '{actor} cambió la portada',
5983
+ cover_removed: '{actor} quitó la portada',
5984
+ checklist_on_card: '{actor} cambió la lista de control en la tarjeta',
5985
+ screen: '{actor} cambió la pantalla a {to}',
5986
+ assignee_added: '{actor} la asignó a {to}',
5987
+ assignee_removed: '{actor} quitó a {from} de los responsables',
5988
+ watcher_added: '{actor} agregó a {to} como involucrado',
5989
+ watcher_removed: '{actor} quitó a {from} de los involucrados',
5990
+ label_added: '{actor} agregó la etiqueta {to}',
5991
+ label_removed: '{actor} quitó la etiqueta {from}',
5992
+ checklist_added: '{actor} agregó "{to}" a la lista de control',
5993
+ checklist_done: '{actor} completó "{to}"',
5994
+ checklist_undone: '{actor} reabrió "{to}"',
5995
+ checklist_renamed: '{actor} renombró "{from}" a "{to}" en la lista de control',
5996
+ checklist_removed: '{actor} quitó "{from}" de la lista de control',
5997
+ archived: '{actor} archivó la tarea',
5998
+ restored: '{actor} restauró la tarea en el tablero',
5999
+ merged: '{actor} agrupó esta en {to}',
6000
+ merged_here: '{actor} agrupó {to} aquí',
6001
+ unmerged: '{actor} desagrupó esta de {from}',
6002
+ unmerged_here: '{actor} desagrupó {from} de aquí',
6003
+ other: '{actor} modificó la tarea',
6004
+ },
6005
+ assignees: 'Responsables',
6006
+ assignMe: 'Asignarme',
6007
+ addAssignee: 'Agregar responsable',
6008
+ watchers: 'Involucrados',
6009
+ addWatcher: 'Agregar involucrado',
6010
+ removePerson: 'Quitar a {name}',
6011
+ peopleSearch: 'Buscar persona',
6012
+ peopleEmpty: 'No se encontró a nadie.',
6013
+ nobody: 'Nadie',
6014
+ reporter: 'Informante',
6015
+ originUser: 'Pedida desde la pantalla',
6016
+ originTeam: 'Creada por el equipo',
6017
+ startDate: 'Inicio',
6018
+ dueDate: 'Conclusión',
6019
+ labels: 'Etiquetas',
6020
+ addLabel: 'Etiquetas',
6021
+ createLabel: 'Crear la etiqueta "{name}"',
6022
+ labelColor: 'Color de la etiqueta',
6023
+ noLabels: 'Sin etiquetas',
6024
+ screenOrigin: 'Pantalla de origen',
6025
+ votesField: 'Apoyos',
6026
+ createdAt: 'Creada el',
6027
+ updatedAt: 'Actualizada el',
6028
+ lastChange: 'Última modificación {when} por {actor}',
6029
+ lastChangeNoActor: 'Última modificación {when}',
6030
+ key: 'Clave',
6031
+ copyKey: 'Copiar la clave',
6032
+ newTaskHeading: 'Nueva tarea',
6033
+ createTask: 'Crear tarea',
6034
+ draftHint: 'Los responsables, la lista de control y los comentarios quedan disponibles cuando se cree la tarea.',
6035
+ assignMeOnCreate: 'Asignarme',
6036
+ appSuggestions: 'Sugerencias de la aplicación',
6037
+ listView: 'Qué sugerencias mostrar',
6038
+ tabAll: 'Todas',
6039
+ tabMine: 'Mías',
6040
+ appSearch: 'Buscar por título, descripción o SUG-12',
6041
+ thisScreen: 'De esta pantalla',
6042
+ appSorts: { votes: 'Más apoyadas', recent: 'Recientes' },
6043
+ appEmpty: 'Todavía no hay sugerencias',
6044
+ appEmptyHint: 'Sea la primera persona en sugerir una mejora.',
6045
+ appEmptyFiltered: 'Ninguna sugerencia con estos filtros.',
6046
+ appError: 'No fue posible cargar las sugerencias de la aplicación.',
6047
+ support: 'Apoyar {count}',
6048
+ supported: 'Apoyada {count}',
6049
+ ownSupportHint: 'Es su sugerencia: su interés ya cuenta.',
6050
+ publicComments: 'Comentarios',
6051
+ publicCommentsEmpty: 'Todavía sin comentarios de la administración.',
6052
+ commentsError: 'No fue posible cargar los comentarios.',
6053
+ moreComments: 'Más comentarios',
6054
+ appPagination: 'Páginas de las sugerencias',
6055
+ menuMerge: 'Agrupar en…',
6056
+ mergeHeading: 'Agrupar {key} en…',
6057
+ mergeIntro: 'Elija la sugerencia principal. Quien pidió y quien apoyó esta pasan a ella; esta sale del tablero y queda en el archivo, con los comentarios.',
6058
+ mergeSearch: 'Buscar por la clave o el título',
6059
+ mergeNone: 'Ninguna sugerencia abierta para agrupar.',
6060
+ mergeHasMerged: 'Otras sugerencias están agrupadas en esta. Desagrúpelas antes de agruparla en otra.',
6061
+ mergePreview: '{votes} y {reporters} pasan a {key}.',
6062
+ mergeCalculating: 'Calculando lo que pasa…',
6063
+ mergePreviewError: 'No fue posible calcular el agrupamiento.',
6064
+ reportersCount: { one: '{count} solicitante', other: '{count} solicitantes' },
6065
+ mergeConfirmHeading: '¿Agrupar {key} en {target}?',
6066
+ mergeConfirmMessage: 'Se puede deshacer después, en "Desagrupar".',
6067
+ mergeConfirm: 'Agrupar',
6068
+ mergedToast: '{key} agrupada en {target}.',
6069
+ mergeError: 'No fue posible agrupar la sugerencia.',
6070
+ mergedTag: 'Agrupada',
6071
+ mergedInto: 'Agrupada en {key}',
6072
+ mergedIntoHint: 'Los apoyos y quienes la pidieron están en la principal; los comentarios quedan aquí.',
6073
+ openMerged: 'Abrir {key}',
6074
+ unmerge: 'Desagrupar',
6075
+ unmergeLabel: 'Desagrupar {key}',
6076
+ unmergedToast: '{key} desagrupada: volvió al tablero.',
6077
+ reporters: 'Solicitantes',
6078
+ reporterAuthor: 'Autor',
6079
+ reporterVia: 'vía {key}',
6080
+ mergedHere: 'Agrupadas aquí',
6081
+ mergedFrom: '{key} agrupada en {target}',
6082
+ mergedFromHint: 'Pedidos iguales se volvieron uno: sígalo por esta.',
6083
+ },
4394
6084
  };
4395
6085
 
4396
6086
  const SPINE_I18N_CONFIG = new InjectionToken('SPINE_I18N_CONFIG', {
@@ -4448,5 +6138,5 @@ function provideSpineMessages(config) {
4448
6138
  * Generated bundle index. Do not edit.
4449
6139
  */
4450
6140
 
4451
- 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 };
6141
+ 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 };
4452
6142
  //# sourceMappingURL=trismegisto-spine.mjs.map