@trismegisto/spine 3.3.3 → 3.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +15 -2
  2. package/fesm2022/trismegisto-spine-audit.mjs +6 -6
  3. package/fesm2022/trismegisto-spine-audit.mjs.map +1 -1
  4. package/fesm2022/{trismegisto-spine-auto-service-auto-service-client.component-BAfeLyTB.mjs → trismegisto-spine-auto-service-auto-service-client.component-kAXaCM5W.mjs} +8 -8
  5. package/fesm2022/{trismegisto-spine-auto-service-auto-service-client.component-BAfeLyTB.mjs.map → trismegisto-spine-auto-service-auto-service-client.component-kAXaCM5W.mjs.map} +1 -1
  6. package/fesm2022/{trismegisto-spine-auto-service-auto-service-groups.component-BYjIQ9ID.mjs → trismegisto-spine-auto-service-auto-service-groups.component-DE2QIGRH.mjs} +251 -85
  7. package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-DE2QIGRH.mjs.map +1 -0
  8. package/fesm2022/{trismegisto-spine-auto-service-auto-service-news-page.component-CBemH4hr.mjs → trismegisto-spine-auto-service-auto-service-news-page.component-BW7BJ0oD.mjs} +2 -2
  9. package/fesm2022/{trismegisto-spine-auto-service-auto-service-news-page.component-CBemH4hr.mjs.map → trismegisto-spine-auto-service-auto-service-news-page.component-BW7BJ0oD.mjs.map} +1 -1
  10. package/fesm2022/{trismegisto-spine-auto-service-auto-service-ratings-page.component-C_THGTkw.mjs → trismegisto-spine-auto-service-auto-service-ratings-page.component-CHPU-QLJ.mjs} +2 -2
  11. package/fesm2022/{trismegisto-spine-auto-service-auto-service-ratings-page.component-C_THGTkw.mjs.map → trismegisto-spine-auto-service-auto-service-ratings-page.component-CHPU-QLJ.mjs.map} +1 -1
  12. package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-CkiCTmXD.mjs +3733 -0
  13. package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-CkiCTmXD.mjs.map +1 -0
  14. package/fesm2022/{trismegisto-spine-auto-service-auto-service.component-QsIQ61w2.mjs → trismegisto-spine-auto-service-auto-service.component-D58Ht9PH.mjs} +7 -7
  15. package/fesm2022/{trismegisto-spine-auto-service-auto-service.component-QsIQ61w2.mjs.map → trismegisto-spine-auto-service-auto-service.component-D58Ht9PH.mjs.map} +1 -1
  16. package/fesm2022/{trismegisto-spine-auto-service-groups.technical-_jQrg1Qh.mjs → trismegisto-spine-auto-service-groups.technical-CB1D3ANC.mjs} +12 -3
  17. package/fesm2022/trismegisto-spine-auto-service-groups.technical-CB1D3ANC.mjs.map +1 -0
  18. package/fesm2022/{trismegisto-spine-auto-service-groups.usage-OvWjNeeT.mjs → trismegisto-spine-auto-service-groups.usage-De2MhlE7.mjs} +7 -2
  19. package/fesm2022/{trismegisto-spine-auto-service-groups.usage-OvWjNeeT.mjs.map → trismegisto-spine-auto-service-groups.usage-De2MhlE7.mjs.map} +1 -1
  20. package/fesm2022/{trismegisto-spine-auto-service-suggestions.technical-BtUK6sKD.mjs → trismegisto-spine-auto-service-suggestions.technical-CGBBzAR8.mjs} +14 -1
  21. package/fesm2022/{trismegisto-spine-auto-service-suggestions.technical-BtUK6sKD.mjs.map → trismegisto-spine-auto-service-suggestions.technical-CGBBzAR8.mjs.map} +1 -1
  22. package/fesm2022/{trismegisto-spine-auto-service-suggestions.usage-BwO9Hjsx.mjs → trismegisto-spine-auto-service-suggestions.usage-DnAJS-Z0.mjs} +26 -3
  23. package/fesm2022/trismegisto-spine-auto-service-suggestions.usage-DnAJS-Z0.mjs.map +1 -0
  24. package/fesm2022/trismegisto-spine-auto-service.mjs +24 -11
  25. package/fesm2022/trismegisto-spine-auto-service.mjs.map +1 -1
  26. package/fesm2022/{trismegisto-spine-layout-suggestions-page.component-xI2gDMok.mjs → trismegisto-spine-layout-suggestions-page.component-CEKMqera.mjs} +3 -3
  27. package/fesm2022/{trismegisto-spine-layout-suggestions-page.component-xI2gDMok.mjs.map → trismegisto-spine-layout-suggestions-page.component-CEKMqera.mjs.map} +1 -1
  28. package/fesm2022/{trismegisto-spine-layout-trismegisto-spine-layout-Clphrsgc.mjs → trismegisto-spine-layout-trismegisto-spine-layout-DiAfxIGP.mjs} +428 -93
  29. package/fesm2022/trismegisto-spine-layout-trismegisto-spine-layout-DiAfxIGP.mjs.map +1 -0
  30. package/fesm2022/trismegisto-spine-layout.mjs +1 -1
  31. package/fesm2022/trismegisto-spine-side-panel.mjs +1 -1
  32. package/fesm2022/trismegisto-spine-side-panel.mjs.map +1 -1
  33. package/fesm2022/trismegisto-spine.mjs +528 -10
  34. package/fesm2022/trismegisto-spine.mjs.map +1 -1
  35. package/package.json +6 -6
  36. package/types/trismegisto-spine-auto-service.d.ts +20 -4
  37. package/types/trismegisto-spine-auto-service.d.ts.map +1 -1
  38. package/types/trismegisto-spine-layout.d.ts +327 -63
  39. package/types/trismegisto-spine-layout.d.ts.map +1 -1
  40. package/types/trismegisto-spine.d.ts +221 -3
  41. package/types/trismegisto-spine.d.ts.map +1 -1
  42. package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-BYjIQ9ID.mjs.map +0 -1
  43. package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-mMjE3JOL.mjs +0 -2179
  44. package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-mMjE3JOL.mjs.map +0 -1
  45. package/fesm2022/trismegisto-spine-auto-service-groups.technical-_jQrg1Qh.mjs.map +0 -1
  46. package/fesm2022/trismegisto-spine-auto-service-suggestions.usage-BwO9Hjsx.mjs.map +0 -1
  47. package/fesm2022/trismegisto-spine-layout-trismegisto-spine-layout-Clphrsgc.mjs.map +0 -1
@@ -356,7 +356,7 @@ function applySpineFavicon(doc, href) {
356
356
  return link;
357
357
  }
358
358
 
359
- /** Os 119 ícones que o spine usa por dentro. */
359
+ /** Os 125 ícones que o spine usa por dentro. */
360
360
  const SPINE_ICONS = [
361
361
  { "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"] },
362
362
  { "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"] },
@@ -379,6 +379,7 @@ const SPINE_ICONS = [
379
379
  { "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"] },
380
380
  { "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"] },
381
381
  { "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\"/>" },
382
+ { "name": "calendar-days", "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 14h.01M12 14h.01M16 14h.01M8 17h.01M12 17h.01\"/>" },
382
383
  { "name": "chat-bubble", "body": "<path d=\"M12 4.5c4.7 0 8.5 3 8.5 7s-3.8 7-8.5 7c-1 0-1.9-.1-2.8-.4L5 20l1.2-3.6C4.6 15.3 3.5 13.7 3.5 11.5c0-4 3.8-7 8.5-7z\"/>", "solid": true, "categories": ["social"] },
383
384
  { "name": "check", "body": "<path d=\"M5 12.5l4.5 4.5L19 7.5\"/>", "categories": ["foundation"], "aliases": ["check-mini"] },
384
385
  { "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"] },
@@ -392,6 +393,7 @@ const SPINE_ICONS = [
392
393
  { "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\"/>" },
393
394
  { "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"] },
394
395
  { "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"] },
396
+ { "name": "dashboard", "body": "<rect x=\"3.5\" y=\"3.5\" width=\"7\" height=\"9\" rx=\"1.5\"/><rect x=\"13.5\" y=\"3.5\" width=\"7\" height=\"5\" rx=\"1.5\"/><rect x=\"3.5\" y=\"15.5\" width=\"7\" height=\"5\" rx=\"1.5\"/><rect x=\"13.5\" y=\"11.5\" width=\"7\" height=\"9\" rx=\"1.5\"/>", "solid": true, "categories": ["technology"] },
395
397
  { "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"] },
396
398
  { "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"] },
397
399
  { "name": "details", "body": "<path d=\"M5 7h.01\"/><path d=\"M5 12h.01\"/><path d=\"M5 17h.01\"/><path d=\"M9 7H20M9 12H20M9 17H20\"/>", "solid": true, "categories": ["essential"] },
@@ -438,8 +440,10 @@ const SPINE_ICONS = [
438
440
  { "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"] },
439
441
  { "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"] },
440
442
  { "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"] },
443
+ { "name": "nodes", "body": "<circle cx=\"12\" cy=\"5\" r=\"2\"/><circle cx=\"5.5\" cy=\"19\" r=\"2\"/><circle cx=\"18.5\" cy=\"19\" r=\"2\"/><path d=\"M11 6.8L6.5 17.2M13 6.8l4.5 10.4M7.5 19h9\"/>", "categories": ["technology"] },
441
444
  { "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"] },
442
445
  { "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"] },
446
+ { "name": "play", "body": "<polygon points=\"8 5.5 18.5 12 8 18.5\"/>", "solid": true, "categories": ["media"] },
443
447
  { "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"] },
444
448
  { "name": "plus", "body": "<path d=\"M12 5v14M5 12h14\"/>", "categories": ["essential"] },
445
449
  { "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"] },
@@ -456,8 +460,10 @@ const SPINE_ICONS = [
456
460
  { "name": "sort-vertical", "body": "<path d=\"M12 4v16M8.500 7.500L12 4l3.500 3.500M8.500 16.500L12 20l3.500-3.500\"/>", "categories": ["foundation"] },
457
461
  { "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"] },
458
462
  { "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"] },
463
+ { "name": "table", "body": "<rect x=\"3.5\" y=\"5\" width=\"17\" height=\"14\" rx=\"2.5\"/><path d=\"M3.500 10h17M3.500 14.500h17M10 10v9\"/>", "categories": ["essential"] },
459
464
  { "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"] },
460
465
  { "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"] },
466
+ { "name": "tasks", "body": "<path d=\"M4 6.500l1.500 1.500L8 5.500M4 12.500L5.500 14 8 11.500M4 18.500L5.500 20 8 17.500M11 7h9M11 13h9M11 19h9\"/>", "solid": true, "categories": ["social"] },
461
467
  { "name": "text", "body": "<path d=\"M5 6.5V4.5h14v2M12 4.5v15M9.5 19.5h5\"/>", "categories": ["text-edit"] },
462
468
  { "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"] },
463
469
  { "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"] },
@@ -533,6 +539,7 @@ const IDLE_SUFFIX = 'idle_minutes';
533
539
  const START_PAGE_SUFFIX = 'start_page';
534
540
  const NOTICES_SUFFIX = 'notices';
535
541
  const BROWSER_NOTICES_SUFFIX = 'browser_notices';
542
+ const SPLIT_TABS_SUFFIX = 'split_tabs';
536
543
  /** Minutos de inatividade oferecidos em "Encerrar por inatividade" (0 = nunca). */
537
544
  const SPINE_IDLE_OPTIONS = [0, 5, 15, 30, 60];
538
545
  const CHANNEL_BASE = 'spine_preferences';
@@ -543,6 +550,8 @@ const CHANNEL_BASE = 'spine_preferences';
543
550
  * (`HermesZoomService.setTextScale`), movimento (`HermesMotionService.setPreference`) e o interruptor dos
544
551
  * atalhos de tecla única (WCAG 2.1.4) do `HermesShortcutService`.
545
552
  *
553
+ * Guarda ainda se a área de abas pode ser dividida em painéis (`splitTabs`, desligado por padrão).
554
+ *
546
555
  * Também guarda as preferências dos recursos opcionais (`SpineFeatures`): minutos de inatividade, tela inicial,
547
556
  * tipos de aviso ligados e o aviso do navegador.
548
557
  *
@@ -596,6 +605,7 @@ class SpinePreferencesService {
596
605
  this.startPageKey = `${this.ns ? `hermes_${this.ns}` : 'hermes'}_${START_PAGE_SUFFIX}`;
597
606
  this.noticesKey = `${this.ns ? `hermes_${this.ns}` : 'hermes'}_${NOTICES_SUFFIX}`;
598
607
  this.browserNoticesKey = `${this.ns ? `hermes_${this.ns}` : 'hermes'}_${BROWSER_NOTICES_SUFFIX}`;
608
+ this.splitTabsKey = `${this.ns ? `hermes_${this.ns}` : 'hermes'}_${SPLIT_TABS_SUFFIX}`;
599
609
  /** Encerrar a sessão depois de tantos minutos sem uso (0 = nunca). Os limites do app (`SpineFeatures.idleTimeout`)
600
610
  * são aplicados por quem usa o valor (`SpineIdleService`), não aqui. */
601
611
  this.idleMinutes = signal(toIdleMinutes(this.read(this.idleKey)), ...(ngDevMode ? [{ debugName: "idleMinutes" }] : /* istanbul ignore next */ []));
@@ -605,6 +615,8 @@ class SpinePreferencesService {
605
615
  this.noticeTypes = signal(toNoticeTypes(this.read(this.noticesKey)), ...(ngDevMode ? [{ debugName: "noticeTypes" }] : /* istanbul ignore next */ []));
606
616
  /** Aviso do navegador (Notification API) quando a aba está em segundo plano. */
607
617
  this.browserNotices = signal(this.read(this.browserNoticesKey) === 'on', ...(ngDevMode ? [{ debugName: "browserNotices" }] : /* istanbul ignore next */ []));
618
+ /** Dividir a área de abas em painéis (lado a lado ou empilhados). Padrão: desligado, um painel só. */
619
+ this.splitTabs = signal(this.read(this.splitTabsKey) === 'on', ...(ngDevMode ? [{ debugName: "splitTabs" }] : /* istanbul ignore next */ []));
608
620
  /** Idiomas oferecidos na configuração, cada um com o nome no próprio idioma (padrão de mercado). */
609
621
  this.languages = [
610
622
  // check-strings: off — cada idioma escrito no próprio idioma (padrão de mercado), igual em todo catálogo.
@@ -637,6 +649,8 @@ class SpinePreferencesService {
637
649
  this.noticeTypes.set(toNoticeTypes(JSON.stringify(e.data.value ?? {})));
638
650
  if (e.data?.type === 'BROWSER_NOTICES_CHANGED')
639
651
  this.browserNotices.set(e.data.value === true);
652
+ if (e.data?.type === 'SPLIT_TABS_CHANGED')
653
+ this.splitTabs.set(e.data.value === true);
640
654
  });
641
655
  }
642
656
  // Escolha salva vale desde a primeira tela (o layout injeta este serviço no boot).
@@ -758,6 +772,12 @@ class SpinePreferencesService {
758
772
  this.write(this.browserNoticesKey, enabled ? 'on' : '');
759
773
  this.channel?.postMessage({ type: 'BROWSER_NOTICES_CHANGED', value: enabled });
760
774
  }
775
+ /** Liga/desliga a divisão da área de abas em painéis, guarda e avisa as outras abas. */
776
+ setSplitTabs(enabled) {
777
+ this.splitTabs.set(enabled);
778
+ this.write(this.splitTabsKey, enabled ? 'on' : '');
779
+ this.channel?.postMessage({ type: 'SPLIT_TABS_CHANGED', value: enabled });
780
+ }
761
781
  setTimeZone(value) {
762
782
  this.timeZone.set(value);
763
783
  this.write(this.timeZoneKey, value);
@@ -1226,6 +1246,7 @@ const SPINE_MESSAGES_PT_BR = {
1226
1246
  modules: 'Módulos',
1227
1247
  moduleNavigation: 'Navegação de {module}',
1228
1248
  apps: 'Aplicações',
1249
+ openInNewTab: 'Abrir em nova aba',
1229
1250
  },
1230
1251
  pageBar: {
1231
1252
  favorite: 'Favoritar esta página',
@@ -1397,6 +1418,7 @@ const SPINE_MESSAGES_PT_BR = {
1397
1418
  goFavorite: 'Ir para o favorito nº 1 a 9',
1398
1419
  history: 'Voltar / avançar no histórico',
1399
1420
  openSettings: 'Abrir as configurações',
1421
+ toggleSidebar: 'Abrir / recolher o menu lateral',
1400
1422
  toggleTheme: 'Alternar tema claro / escuro',
1401
1423
  fullscreen: 'Tela cheia',
1402
1424
  logout: 'Sair (logout)',
@@ -1428,6 +1450,9 @@ const SPINE_MESSAGES_PT_BR = {
1428
1450
  sidebarDescription: 'Como o menu lateral abre e fecha.',
1429
1451
  sidebarKeywords: 'sidebar navegação barra lateral',
1430
1452
  sidebarHelp: 'Automático: abre ao aproximar o ponteiro. Fixo: fica sempre aberto. Compacto: mostra só os ícones.',
1453
+ splitTabs: 'Dividir abas',
1454
+ splitTabsDescription: 'Abrir painéis lado a lado ou um abaixo do outro, cada um com suas abas. Desligado, as abas abertas ficam num painel só.',
1455
+ splitTabsKeywords: 'dividir tela painéis lado a lado abas comparar split',
1431
1456
  sidebarAuto: 'Automático',
1432
1457
  sidebarFixed: 'Fixo',
1433
1458
  sidebarCompact: 'Compacto',
@@ -1498,7 +1523,7 @@ const SPINE_MESSAGES_PT_BR = {
1498
1523
  favoritesCleared: 'Favoritos apagados.',
1499
1524
  restorePreferences: 'Preferências',
1500
1525
  restorePreferencesDescription: 'Aparência, acessibilidade e formatos voltam ao padrão.',
1501
- restorePreferencesHelp: 'Voltam ao padrão: tema, cor principal, densidade, fonte, menu lateral, tamanho do texto, animações, formato de hora e primeiro dia da semana. Idioma, fuso horário e atalhos de tecla única ficam como estão.',
1526
+ restorePreferencesHelp: 'Voltam ao padrão: tema, cor principal, densidade, fonte, menu lateral, dividir abas, tamanho do texto, animações, formato de hora e primeiro dia da semana. Idioma, fuso horário e atalhos de tecla única ficam como estão.',
1502
1527
  restorePreferencesKeywords: 'restaurar padrão redefinir reset preferências',
1503
1528
  restore: 'Restaurar padrão',
1504
1529
  confirmRestore: 'Confirmar',
@@ -1636,7 +1661,14 @@ const SPINE_MESSAGES_PT_BR = {
1636
1661
  back: 'Voltar aos grupos',
1637
1662
  you: 'você',
1638
1663
  membersCount: { zero: 'Nenhum membro', one: '{count} membro', other: '{count} membros' },
1664
+ matchesCount: { zero: 'Nenhum membro encontrado', one: '{count} membro encontrado', other: '{count} membros encontrados' },
1639
1665
  empty: 'Nenhum membro neste grupo.',
1666
+ noMatches: 'Nenhum membro encontrado para essa busca.',
1667
+ filterMembers: 'Buscar membro',
1668
+ loadingProgress: 'Carregando membros… {loaded} de {total}',
1669
+ partialResults: 'A lista ainda está carregando: o resultado pode crescer.',
1670
+ loadIncomplete: 'Não foi possível carregar todos os membros ({loaded} de {total}).',
1671
+ retry: 'Tentar de novo',
1640
1672
  readOnly: 'Como membro, você só vê quem está no grupo.',
1641
1673
  addMember: 'Incluir membro',
1642
1674
  addHeading: 'Incluir em {group}',
@@ -1988,6 +2020,10 @@ const SPINE_MESSAGES_PT_BR = {
1988
2020
  memberSearch: 'Buscar membro...',
1989
2021
  membersOf: 'Membros do grupo {group}',
1990
2022
  noMembersShort: 'Nenhum membro.',
2023
+ noMembersMatch: 'Nenhum membro encontrado para essa busca.',
2024
+ membersLoadingProgress: 'Carregando membros… {loaded} de {total}',
2025
+ membersPartialResults: 'A lista e a busca ainda podem crescer.',
2026
+ membersLoadIncomplete: 'Não foi possível carregar todos os membros ({loaded} de {total}).',
1991
2027
  newMember: 'Novo',
1992
2028
  addedBy: 'por {user}',
1993
2029
  removal: 'Remoção',
@@ -2557,8 +2593,6 @@ const SPINE_MESSAGES_PT_BR = {
2557
2593
  kindFilter: 'Tipo',
2558
2594
  allKinds: 'Todos os tipos',
2559
2595
  refresh: 'Atualizar',
2560
- boardEmpty: 'Nenhuma sugestão ainda',
2561
- boardEmptyHint: 'Os pedidos feitos pelo botão "Sugerir melhoria" das telas aparecem aqui.',
2562
2596
  boardFiltered: '{shown} de {total} sugestões',
2563
2597
  loadError: 'Não foi possível carregar as sugestões.',
2564
2598
  moveError: 'Não foi possível mover a sugestão. O quadro foi recarregado.',
@@ -2897,6 +2931,158 @@ const SPINE_MESSAGES_PT_BR = {
2897
2931
  waitingYou: 'Os responsáveis aguardam a sua resposta.',
2898
2932
  waitingTeam: 'Aguardando os responsáveis.',
2899
2933
  },
2934
+ planning: {
2935
+ viewSummary: 'Resumo',
2936
+ viewTasks: 'Tarefas',
2937
+ viewPlanning: 'Planejamento',
2938
+ viewSchedule: 'Cronograma',
2939
+ viewRisks: 'Riscos',
2940
+ viewWorkflow: 'Fluxo',
2941
+ loadError: 'Não foi possível carregar o planejamento.',
2942
+ saveError: 'Não foi possível salvar. Tente de novo.',
2943
+ retry: 'Tentar de novo',
2944
+ save: 'Salvar',
2945
+ cancel: 'Cancelar',
2946
+ delete: 'Excluir',
2947
+ edit: 'Editar',
2948
+ points: 'Pontos',
2949
+ pointsValue: { zero: '0 pts', one: '{count} pt', other: '{count} pts' },
2950
+ noEstimate: 'Sem estimativa',
2951
+ backlog: 'Backlog',
2952
+ noSprint: 'Nenhuma sprint em andamento.',
2953
+ unassigned: 'Sem responsável',
2954
+ dateRange: '{start} a {end}',
2955
+ summary: {
2956
+ activeSprint: 'Sprint em andamento',
2957
+ sprintPoints: '{done} de {total} pts concluídos',
2958
+ sprintCapacity: 'Capacidade: {capacity} pts',
2959
+ openTasks: 'Tarefas abertas',
2960
+ overdue: 'Vencidas',
2961
+ mine: 'Minhas tarefas',
2962
+ mineEmpty: 'Nada aberto atribuído a você.',
2963
+ deadlines: 'Prazos dos próximos 7 dias',
2964
+ deadlinesEmpty: 'Nenhum prazo vencido ou nos próximos 7 dias.',
2965
+ topRisks: 'Riscos altos',
2966
+ topRisksEmpty: 'Nenhum risco alto em aberto.',
2967
+ riskScore: 'Probabilidade {likelihood} · impacto {impact}',
2968
+ nextMilestone: 'Próximo marco',
2969
+ nextMilestoneEmpty: 'Nenhum marco à frente.',
2970
+ },
2971
+ tasks: {
2972
+ viewLabel: 'Mostrar como',
2973
+ viewList: 'Lista',
2974
+ viewTable: 'Tabela',
2975
+ listLabel: 'Tarefas abertas',
2976
+ gridCaption: 'Tarefas abertas do app',
2977
+ count: { zero: 'Nenhuma tarefa aberta', one: '{count} tarefa aberta', other: '{count} tarefas abertas' },
2978
+ open: 'Abrir',
2979
+ emptyHeading: 'Nenhuma tarefa aberta',
2980
+ emptyBody: 'As tarefas em análise, planejadas e em desenvolvimento aparecem aqui.',
2981
+ key: 'Chave',
2982
+ title: 'Título',
2983
+ status: 'Status',
2984
+ priority: 'Prioridade',
2985
+ assignee: 'Responsável',
2986
+ sprint: 'Sprint',
2987
+ due: 'Prazo',
2988
+ },
2989
+ sprints: {
2990
+ heading: 'Backlog e sprints',
2991
+ hint: 'Arraste uma tarefa para uma sprint ou de volta ao backlog.',
2992
+ readOnlyClosed: 'Sprints encerradas ficam só para consulta.',
2993
+ new: 'Nova sprint',
2994
+ start: 'Iniciar',
2995
+ close: 'Encerrar',
2996
+ state: { planned: 'Planejada', active: 'Em andamento', closed: 'Encerrada' },
2997
+ closeHeading: 'Encerrar {name}?',
2998
+ closeMessage: 'As tarefas não concluídas voltam ao backlog.',
2999
+ deleteHeading: 'Excluir {name}?',
3000
+ deleteMessage: 'As tarefas dela voltam ao backlog.',
3001
+ newHeading: 'Nova sprint',
3002
+ editHeading: 'Editar sprint',
3003
+ name: 'Nome',
3004
+ nameRequired: 'Informe o nome da sprint.',
3005
+ goal: 'Meta',
3006
+ start_date: 'Início',
3007
+ end_date: 'Fim',
3008
+ datesRequired: 'Informe o início e o fim.',
3009
+ datesOrder: 'O fim não pode ser antes do início.',
3010
+ capacity: 'Capacidade (pts)',
3011
+ activeExists: 'Já existe uma sprint em andamento: encerre-a antes de iniciar outra.',
3012
+ moved: '{key} foi para {target}.',
3013
+ progressHeading: 'Andamento de {name}',
3014
+ done: 'Concluído',
3015
+ committed: 'Comprometido',
3016
+ capacityUse: 'Uso da capacidade',
3017
+ burndownCaption: 'Burndown de {name}: pontos restantes por dia',
3018
+ day: 'Dia',
3019
+ ideal: 'Ideal',
3020
+ remaining: 'Restante',
3021
+ closed: 'Sprints encerradas',
3022
+ },
3023
+ schedule: {
3024
+ heading: 'Cronograma',
3025
+ label: 'Cronograma das tarefas',
3026
+ hint: 'Arraste uma barra para mudar o início e o prazo. Só aparecem as tarefas com data.',
3027
+ milestones: 'Marcos',
3028
+ newMilestone: 'Novo marco',
3029
+ milestoneTitle: 'Título',
3030
+ milestoneDate: 'Data',
3031
+ milestoneRequired: 'Informe o título e a data do marco.',
3032
+ removeMilestone: 'Excluir o marco {title}',
3033
+ rescheduled: '{key}: datas salvas.',
3034
+ conflicts: '{key} começa antes de terminar: {list}.',
3035
+ workloadHeading: 'Carga da equipe',
3036
+ workloadLabel: 'Pontos por pessoa nas próximas 4 semanas',
3037
+ workloadHint: 'Capacidade de referência: {capacity} pts por pessoa por semana.',
3038
+ week: 'Semana de {date}',
3039
+ noPeople: 'Ninguém tem tarefa com data e responsável.',
3040
+ },
3041
+ risks: {
3042
+ heading: 'Riscos',
3043
+ label: 'Riscos das tarefas do app',
3044
+ hint: 'Cada risco é de uma tarefa. Clique numa célula da matriz para filtrar a lista; clique num risco para editar.',
3045
+ new: 'Novo risco',
3046
+ newHeading: 'Novo risco',
3047
+ editHeading: 'Editar risco',
3048
+ title: 'Risco',
3049
+ titleRequired: 'Descreva o risco.',
3050
+ owner: 'Dono',
3051
+ status: 'Status',
3052
+ mitigation: 'Mitigação',
3053
+ deleteHeading: 'Excluir este risco?',
3054
+ statuses: { identified: 'Identificado', mitigating: 'Em mitigação', closed: 'Encerrado' },
3055
+ task: 'Tarefa',
3056
+ taskPlaceholder: 'Escolha a tarefa ameaçada',
3057
+ taskRequired: 'Escolha a tarefa do risco.',
3058
+ noTask: 'Sem tarefa',
3059
+ level: 'Risco',
3060
+ levels: { low: 'Baixo', medium: 'Médio', high: 'Alto', critical: 'Crítico' },
3061
+ ofTask: 'Riscos',
3062
+ add: 'Adicionar risco',
3063
+ empty: 'Nenhum risco nesta tarefa.',
3064
+ },
3065
+ workflow: {
3066
+ heading: 'Fluxo das sugestões',
3067
+ hint: 'Os status que quem pede acompanha em "Minhas sugestões". O fluxo é o mesmo para todos os apps.',
3068
+ label: 'Fluxo dos status das sugestões',
3069
+ count: { zero: 'Nenhuma no quadro', one: '{count} no quadro', other: '{count} no quadro' },
3070
+ plan: 'Planejar',
3071
+ start: 'Começar',
3072
+ finish: 'Concluir',
3073
+ refuse: 'Recusar',
3074
+ reopen: 'Reabrir',
3075
+ },
3076
+ detail: {
3077
+ estimate: 'Pontos',
3078
+ sprint: 'Sprint',
3079
+ backlogOption: 'Backlog (sem sprint)',
3080
+ dependsOn: 'Depende de',
3081
+ dependsOnPlaceholder: 'Buscar tarefa',
3082
+ dependencyCycle: 'Essa dependência formaria um ciclo entre as tarefas.',
3083
+ blockedBy: 'Bloqueada por {list}',
3084
+ },
3085
+ },
2900
3086
  },
2901
3087
  };
2902
3088
 
@@ -2946,6 +3132,7 @@ const SPINE_MESSAGES_EN = {
2946
3132
  modules: 'Modules',
2947
3133
  moduleNavigation: '{module} navigation',
2948
3134
  apps: 'Applications',
3135
+ openInNewTab: 'Open in new tab',
2949
3136
  },
2950
3137
  pageBar: {
2951
3138
  favorite: 'Add this page to favorites',
@@ -3117,6 +3304,7 @@ const SPINE_MESSAGES_EN = {
3117
3304
  goFavorite: 'Go to favorite no. 1 to 9',
3118
3305
  history: 'Back / forward in history',
3119
3306
  openSettings: 'Open settings',
3307
+ toggleSidebar: 'Open / collapse the side menu',
3120
3308
  toggleTheme: 'Toggle light / dark theme',
3121
3309
  fullscreen: 'Full screen',
3122
3310
  logout: 'Sign out',
@@ -3148,6 +3336,9 @@ const SPINE_MESSAGES_EN = {
3148
3336
  sidebarDescription: 'How the side menu opens and closes.',
3149
3337
  sidebarKeywords: 'sidebar navigation side bar',
3150
3338
  sidebarHelp: 'Automatic: opens when the pointer approaches. Fixed: always open. Compact: shows only the icons.',
3339
+ splitTabs: 'Split tabs',
3340
+ splitTabsDescription: 'Open panels side by side or one below the other, each with its own tabs. Off, the open tabs stay in a single panel.',
3341
+ splitTabsKeywords: 'split screen panels side by side tabs compare',
3151
3342
  sidebarAuto: 'Automatic',
3152
3343
  sidebarFixed: 'Fixed',
3153
3344
  sidebarCompact: 'Compact',
@@ -3218,7 +3409,7 @@ const SPINE_MESSAGES_EN = {
3218
3409
  favoritesCleared: 'Favorites cleared.',
3219
3410
  restorePreferences: 'Preferences',
3220
3411
  restorePreferencesDescription: 'Appearance, accessibility and formats go back to the defaults.',
3221
- restorePreferencesHelp: 'Back to the defaults: theme, main color, density, font, side menu, text size, animations, time format and first day of the week. Language, time zone and single-key shortcuts stay as they are.',
3412
+ restorePreferencesHelp: 'Back to the defaults: theme, main color, density, font, side menu, split tabs, text size, animations, time format and first day of the week. Language, time zone and single-key shortcuts stay as they are.',
3222
3413
  restorePreferencesKeywords: 'restore default reset preferences',
3223
3414
  restore: 'Restore defaults',
3224
3415
  confirmRestore: 'Confirm',
@@ -3356,7 +3547,14 @@ const SPINE_MESSAGES_EN = {
3356
3547
  back: 'Back to groups',
3357
3548
  you: 'you',
3358
3549
  membersCount: { zero: 'No members', one: '{count} member', other: '{count} members' },
3550
+ matchesCount: { zero: 'No members found', one: '{count} member found', other: '{count} members found' },
3359
3551
  empty: 'No members in this group.',
3552
+ noMatches: 'No member matches this search.',
3553
+ filterMembers: 'Search members',
3554
+ loadingProgress: 'Loading members… {loaded} of {total}',
3555
+ partialResults: 'The list is still loading: the result may grow.',
3556
+ loadIncomplete: "Couldn't load all members ({loaded} of {total}).",
3557
+ retry: 'Try again',
3360
3558
  readOnly: 'As a member, you can only see who is in the group.',
3361
3559
  addMember: 'Add member',
3362
3560
  addHeading: 'Add to {group}',
@@ -3708,6 +3906,10 @@ const SPINE_MESSAGES_EN = {
3708
3906
  memberSearch: 'Search members...',
3709
3907
  membersOf: 'Members of group {group}',
3710
3908
  noMembersShort: 'No members.',
3909
+ noMembersMatch: 'No member matches this search.',
3910
+ membersLoadingProgress: 'Loading members… {loaded} of {total}',
3911
+ membersPartialResults: 'The list and the search may still grow.',
3912
+ membersLoadIncomplete: "Couldn't load all members ({loaded} of {total}).",
3711
3913
  newMember: 'New',
3712
3914
  addedBy: 'by {user}',
3713
3915
  removal: 'Removal',
@@ -4277,8 +4479,6 @@ const SPINE_MESSAGES_EN = {
4277
4479
  kindFilter: 'Type',
4278
4480
  allKinds: 'All types',
4279
4481
  refresh: 'Refresh',
4280
- boardEmpty: 'No suggestions yet',
4281
- boardEmptyHint: 'Requests made with the "Suggest an improvement" button on each page show up here.',
4282
4482
  boardFiltered: '{shown} of {total} suggestions',
4283
4483
  loadError: 'Could not load the suggestions.',
4284
4484
  moveError: 'Could not move the suggestion. The board was reloaded.',
@@ -4617,6 +4817,158 @@ const SPINE_MESSAGES_EN = {
4617
4817
  waitingYou: 'The assignees are waiting for your reply.',
4618
4818
  waitingTeam: 'Waiting on the assignees.',
4619
4819
  },
4820
+ planning: {
4821
+ viewSummary: 'Summary',
4822
+ viewTasks: 'Tasks',
4823
+ viewPlanning: 'Planning',
4824
+ viewSchedule: 'Schedule',
4825
+ viewRisks: 'Risks',
4826
+ viewWorkflow: 'Workflow',
4827
+ loadError: 'Could not load the planning.',
4828
+ saveError: 'Could not save. Try again.',
4829
+ retry: 'Try again',
4830
+ save: 'Save',
4831
+ cancel: 'Cancel',
4832
+ delete: 'Delete',
4833
+ edit: 'Edit',
4834
+ points: 'Points',
4835
+ pointsValue: { zero: '0 pts', one: '{count} pt', other: '{count} pts' },
4836
+ noEstimate: 'No estimate',
4837
+ backlog: 'Backlog',
4838
+ noSprint: 'No sprint in progress.',
4839
+ unassigned: 'Unassigned',
4840
+ dateRange: '{start} to {end}',
4841
+ summary: {
4842
+ activeSprint: 'Sprint in progress',
4843
+ sprintPoints: '{done} of {total} pts done',
4844
+ sprintCapacity: 'Capacity: {capacity} pts',
4845
+ openTasks: 'Open tasks',
4846
+ overdue: 'Overdue',
4847
+ mine: 'My tasks',
4848
+ mineEmpty: 'Nothing open assigned to you.',
4849
+ deadlines: 'Due in the next 7 days',
4850
+ deadlinesEmpty: 'Nothing overdue or due in the next 7 days.',
4851
+ topRisks: 'High risks',
4852
+ topRisksEmpty: 'No open high risk.',
4853
+ riskScore: 'Likelihood {likelihood} · impact {impact}',
4854
+ nextMilestone: 'Next milestone',
4855
+ nextMilestoneEmpty: 'No milestone ahead.',
4856
+ },
4857
+ tasks: {
4858
+ viewLabel: 'Show as',
4859
+ viewList: 'List',
4860
+ viewTable: 'Table',
4861
+ listLabel: 'Open tasks',
4862
+ gridCaption: 'Open tasks of the app',
4863
+ count: { zero: 'No open task', one: '{count} open task', other: '{count} open tasks' },
4864
+ open: 'Open',
4865
+ emptyHeading: 'No open task',
4866
+ emptyBody: 'Tasks under review, planned and in development show up here.',
4867
+ key: 'Key',
4868
+ title: 'Title',
4869
+ status: 'Status',
4870
+ priority: 'Priority',
4871
+ assignee: 'Assignee',
4872
+ sprint: 'Sprint',
4873
+ due: 'Due',
4874
+ },
4875
+ sprints: {
4876
+ heading: 'Backlog and sprints',
4877
+ hint: 'Drag a task into a sprint or back to the backlog.',
4878
+ readOnlyClosed: 'Closed sprints are read only.',
4879
+ new: 'New sprint',
4880
+ start: 'Start',
4881
+ close: 'Close',
4882
+ state: { planned: 'Planned', active: 'In progress', closed: 'Closed' },
4883
+ closeHeading: 'Close {name}?',
4884
+ closeMessage: 'Tasks that are not done go back to the backlog.',
4885
+ deleteHeading: 'Delete {name}?',
4886
+ deleteMessage: 'Its tasks go back to the backlog.',
4887
+ newHeading: 'New sprint',
4888
+ editHeading: 'Edit sprint',
4889
+ name: 'Name',
4890
+ nameRequired: 'Enter the sprint name.',
4891
+ goal: 'Goal',
4892
+ start_date: 'Start',
4893
+ end_date: 'End',
4894
+ datesRequired: 'Enter the start and the end.',
4895
+ datesOrder: 'The end cannot be before the start.',
4896
+ capacity: 'Capacity (pts)',
4897
+ activeExists: 'A sprint is already in progress: close it before starting another one.',
4898
+ moved: '{key} moved to {target}.',
4899
+ progressHeading: 'Progress of {name}',
4900
+ done: 'Done',
4901
+ committed: 'Committed',
4902
+ capacityUse: 'Capacity used',
4903
+ burndownCaption: 'Burndown of {name}: points left per day',
4904
+ day: 'Day',
4905
+ ideal: 'Ideal',
4906
+ remaining: 'Remaining',
4907
+ closed: 'Closed sprints',
4908
+ },
4909
+ schedule: {
4910
+ heading: 'Schedule',
4911
+ label: 'Task schedule',
4912
+ hint: 'Drag a bar to change the start and the due date. Only tasks with a date show up.',
4913
+ milestones: 'Milestones',
4914
+ newMilestone: 'New milestone',
4915
+ milestoneTitle: 'Title',
4916
+ milestoneDate: 'Date',
4917
+ milestoneRequired: 'Enter the milestone title and date.',
4918
+ removeMilestone: 'Delete the milestone {title}',
4919
+ rescheduled: '{key}: dates saved.',
4920
+ conflicts: '{key} starts before these finish: {list}.',
4921
+ workloadHeading: 'Team workload',
4922
+ workloadLabel: 'Points per person over the next 4 weeks',
4923
+ workloadHint: 'Reference capacity: {capacity} pts per person per week.',
4924
+ week: 'Week of {date}',
4925
+ noPeople: 'Nobody has a task with a date and an assignee.',
4926
+ },
4927
+ risks: {
4928
+ heading: 'Risks',
4929
+ label: 'Risks of the app tasks',
4930
+ hint: 'Each risk belongs to a task. Click a matrix cell to filter the list; click a risk to edit it.',
4931
+ new: 'New risk',
4932
+ newHeading: 'New risk',
4933
+ editHeading: 'Edit risk',
4934
+ title: 'Risk',
4935
+ titleRequired: 'Describe the risk.',
4936
+ owner: 'Owner',
4937
+ status: 'Status',
4938
+ mitigation: 'Mitigation',
4939
+ deleteHeading: 'Delete this risk?',
4940
+ statuses: { identified: 'Identified', mitigating: 'Mitigating', closed: 'Closed' },
4941
+ task: 'Task',
4942
+ taskPlaceholder: 'Choose the task at risk',
4943
+ taskRequired: 'Choose the task of the risk.',
4944
+ noTask: 'No task',
4945
+ level: 'Risk',
4946
+ levels: { low: 'Low', medium: 'Medium', high: 'High', critical: 'Critical' },
4947
+ ofTask: 'Risks',
4948
+ add: 'Add risk',
4949
+ empty: 'No risks on this task.',
4950
+ },
4951
+ workflow: {
4952
+ heading: 'Suggestion workflow',
4953
+ hint: 'The statuses requesters follow in "My suggestions". The workflow is the same for every app.',
4954
+ label: 'Suggestion status workflow',
4955
+ count: { zero: 'None on the board', one: '{count} on the board', other: '{count} on the board' },
4956
+ plan: 'Plan',
4957
+ start: 'Start',
4958
+ finish: 'Finish',
4959
+ refuse: 'Decline',
4960
+ reopen: 'Reopen',
4961
+ },
4962
+ detail: {
4963
+ estimate: 'Points',
4964
+ sprint: 'Sprint',
4965
+ backlogOption: 'Backlog (no sprint)',
4966
+ dependsOn: 'Depends on',
4967
+ dependsOnPlaceholder: 'Search task',
4968
+ dependencyCycle: 'This dependency would create a cycle between the tasks.',
4969
+ blockedBy: 'Blocked by {list}',
4970
+ },
4971
+ },
4620
4972
  },
4621
4973
  };
4622
4974
 
@@ -4666,6 +5018,7 @@ const SPINE_MESSAGES_ES = {
4666
5018
  modules: 'Módulos',
4667
5019
  moduleNavigation: 'Navegación de {module}',
4668
5020
  apps: 'Aplicaciones',
5021
+ openInNewTab: 'Abrir en una pestaña nueva',
4669
5022
  },
4670
5023
  pageBar: {
4671
5024
  favorite: 'Agregar esta página a favoritos',
@@ -4837,6 +5190,7 @@ const SPINE_MESSAGES_ES = {
4837
5190
  goFavorite: 'Ir al favorito n.º 1 a 9',
4838
5191
  history: 'Atrás / adelante en el historial',
4839
5192
  openSettings: 'Abrir la configuración',
5193
+ toggleSidebar: 'Abrir / contraer el menú lateral',
4840
5194
  toggleTheme: 'Alternar tema claro / oscuro',
4841
5195
  fullscreen: 'Pantalla completa',
4842
5196
  logout: 'Salir (cerrar sesión)',
@@ -4868,6 +5222,9 @@ const SPINE_MESSAGES_ES = {
4868
5222
  sidebarDescription: 'Cómo se abre y se cierra el menú lateral.',
4869
5223
  sidebarKeywords: 'sidebar navegación barra lateral',
4870
5224
  sidebarHelp: 'Automático: se abre al acercar el puntero. Fijo: siempre abierto. Compacto: muestra solo los íconos.',
5225
+ splitTabs: 'Dividir pestañas',
5226
+ splitTabsDescription: 'Abrir paneles lado a lado o uno debajo del otro, cada uno con sus pestañas. Desactivado, las pestañas abiertas quedan en un solo panel.',
5227
+ splitTabsKeywords: 'dividir pantalla paneles lado a lado pestañas comparar split',
4871
5228
  sidebarAuto: 'Automático',
4872
5229
  sidebarFixed: 'Fijo',
4873
5230
  sidebarCompact: 'Compacto',
@@ -4938,7 +5295,7 @@ const SPINE_MESSAGES_ES = {
4938
5295
  favoritesCleared: 'Favoritos borrados.',
4939
5296
  restorePreferences: 'Preferencias',
4940
5297
  restorePreferencesDescription: 'Apariencia, accesibilidad y formatos vuelven a los valores predeterminados.',
4941
- restorePreferencesHelp: 'Vuelven a lo predeterminado: tema, color principal, densidad, fuente, menú lateral, tamaño del texto, animaciones, formato de hora y primer día de la semana. El idioma, la zona horaria y los atajos de una sola tecla se mantienen.',
5298
+ restorePreferencesHelp: 'Vuelven a lo predeterminado: tema, color principal, densidad, fuente, menú lateral, dividir pestañas, tamaño del texto, animaciones, formato de hora y primer día de la semana. El idioma, la zona horaria y los atajos de una sola tecla se mantienen.',
4942
5299
  restorePreferencesKeywords: 'restaurar predeterminado restablecer reset preferencias',
4943
5300
  restore: 'Restaurar',
4944
5301
  confirmRestore: 'Confirmar',
@@ -5076,7 +5433,14 @@ const SPINE_MESSAGES_ES = {
5076
5433
  back: 'Volver a los grupos',
5077
5434
  you: 'tú',
5078
5435
  membersCount: { zero: 'Ningún miembro', one: '{count} miembro', other: '{count} miembros' },
5436
+ matchesCount: { zero: 'Ningún miembro encontrado', one: '{count} miembro encontrado', other: '{count} miembros encontrados' },
5079
5437
  empty: 'Ningún miembro en este grupo.',
5438
+ noMatches: 'Ningún miembro coincide con esta búsqueda.',
5439
+ filterMembers: 'Buscar miembro',
5440
+ loadingProgress: 'Cargando miembros… {loaded} de {total}',
5441
+ partialResults: 'La lista todavía está cargando: el resultado puede crecer.',
5442
+ loadIncomplete: 'No se pudieron cargar todos los miembros ({loaded} de {total}).',
5443
+ retry: 'Intentar de nuevo',
5080
5444
  readOnly: 'Como miembro, solo ves quién está en el grupo.',
5081
5445
  addMember: 'Incluir miembro',
5082
5446
  addHeading: 'Incluir en {group}',
@@ -5428,6 +5792,10 @@ const SPINE_MESSAGES_ES = {
5428
5792
  memberSearch: 'Buscar miembro...',
5429
5793
  membersOf: 'Miembros del grupo {group}',
5430
5794
  noMembersShort: 'Ningún miembro.',
5795
+ noMembersMatch: 'Ningún miembro coincide con esta búsqueda.',
5796
+ membersLoadingProgress: 'Cargando miembros… {loaded} de {total}',
5797
+ membersPartialResults: 'La lista y la búsqueda todavía pueden crecer.',
5798
+ membersLoadIncomplete: 'No se pudieron cargar todos los miembros ({loaded} de {total}).',
5431
5799
  newMember: 'Nuevo',
5432
5800
  addedBy: 'por {user}',
5433
5801
  removal: 'Eliminación',
@@ -5997,8 +6365,6 @@ const SPINE_MESSAGES_ES = {
5997
6365
  kindFilter: 'Tipo',
5998
6366
  allKinds: 'Todos los tipos',
5999
6367
  refresh: 'Actualizar',
6000
- boardEmpty: 'Todavía no hay sugerencias',
6001
- boardEmptyHint: 'Los pedidos hechos con el botón "Sugerir una mejora" de las pantallas aparecen aquí.',
6002
6368
  boardFiltered: '{shown} de {total} sugerencias',
6003
6369
  loadError: 'No fue posible cargar las sugerencias.',
6004
6370
  moveError: 'No fue posible mover la sugerencia. El tablero se recargó.',
@@ -6337,6 +6703,158 @@ const SPINE_MESSAGES_ES = {
6337
6703
  waitingYou: 'Los responsables esperan su respuesta.',
6338
6704
  waitingTeam: 'Esperando a los responsables.',
6339
6705
  },
6706
+ planning: {
6707
+ viewSummary: 'Resumen',
6708
+ viewTasks: 'Tareas',
6709
+ viewPlanning: 'Planificación',
6710
+ viewSchedule: 'Cronograma',
6711
+ viewRisks: 'Riesgos',
6712
+ viewWorkflow: 'Flujo',
6713
+ loadError: 'No se pudo cargar la planificación.',
6714
+ saveError: 'No se pudo guardar. Inténtalo de nuevo.',
6715
+ retry: 'Intentar de nuevo',
6716
+ save: 'Guardar',
6717
+ cancel: 'Cancelar',
6718
+ delete: 'Eliminar',
6719
+ edit: 'Editar',
6720
+ points: 'Puntos',
6721
+ pointsValue: { zero: '0 pts', one: '{count} pt', other: '{count} pts' },
6722
+ noEstimate: 'Sin estimación',
6723
+ backlog: 'Backlog',
6724
+ noSprint: 'Ningún sprint en curso.',
6725
+ unassigned: 'Sin responsable',
6726
+ dateRange: '{start} a {end}',
6727
+ summary: {
6728
+ activeSprint: 'Sprint en curso',
6729
+ sprintPoints: '{done} de {total} pts terminados',
6730
+ sprintCapacity: 'Capacidad: {capacity} pts',
6731
+ openTasks: 'Tareas abiertas',
6732
+ overdue: 'Vencidas',
6733
+ mine: 'Mis tareas',
6734
+ mineEmpty: 'Nada abierto asignado a ti.',
6735
+ deadlines: 'Plazos de los próximos 7 días',
6736
+ deadlinesEmpty: 'Ningún plazo vencido ni en los próximos 7 días.',
6737
+ topRisks: 'Riesgos altos',
6738
+ topRisksEmpty: 'Ningún riesgo alto abierto.',
6739
+ riskScore: 'Probabilidad {likelihood} · impacto {impact}',
6740
+ nextMilestone: 'Próximo hito',
6741
+ nextMilestoneEmpty: 'Ningún hito por delante.',
6742
+ },
6743
+ tasks: {
6744
+ viewLabel: 'Mostrar como',
6745
+ viewList: 'Lista',
6746
+ viewTable: 'Tabla',
6747
+ listLabel: 'Tareas abiertas',
6748
+ gridCaption: 'Tareas abiertas de la app',
6749
+ count: { zero: 'Ninguna tarea abierta', one: '{count} tarea abierta', other: '{count} tareas abiertas' },
6750
+ open: 'Abrir',
6751
+ emptyHeading: 'Ninguna tarea abierta',
6752
+ emptyBody: 'Las tareas en análisis, planificadas y en desarrollo aparecen aquí.',
6753
+ key: 'Clave',
6754
+ title: 'Título',
6755
+ status: 'Estado',
6756
+ priority: 'Prioridad',
6757
+ assignee: 'Responsable',
6758
+ sprint: 'Sprint',
6759
+ due: 'Plazo',
6760
+ },
6761
+ sprints: {
6762
+ heading: 'Backlog y sprints',
6763
+ hint: 'Arrastra una tarea a un sprint o de vuelta al backlog.',
6764
+ readOnlyClosed: 'Los sprints cerrados son solo de consulta.',
6765
+ new: 'Nuevo sprint',
6766
+ start: 'Iniciar',
6767
+ close: 'Cerrar',
6768
+ state: { planned: 'Planificado', active: 'En curso', closed: 'Cerrado' },
6769
+ closeHeading: '¿Cerrar {name}?',
6770
+ closeMessage: 'Las tareas no terminadas vuelven al backlog.',
6771
+ deleteHeading: '¿Eliminar {name}?',
6772
+ deleteMessage: 'Sus tareas vuelven al backlog.',
6773
+ newHeading: 'Nuevo sprint',
6774
+ editHeading: 'Editar sprint',
6775
+ name: 'Nombre',
6776
+ nameRequired: 'Indica el nombre del sprint.',
6777
+ goal: 'Objetivo',
6778
+ start_date: 'Inicio',
6779
+ end_date: 'Fin',
6780
+ datesRequired: 'Indica el inicio y el fin.',
6781
+ datesOrder: 'El fin no puede ser antes del inicio.',
6782
+ capacity: 'Capacidad (pts)',
6783
+ activeExists: 'Ya hay un sprint en curso: ciérralo antes de iniciar otro.',
6784
+ moved: '{key} pasó a {target}.',
6785
+ progressHeading: 'Avance de {name}',
6786
+ done: 'Terminado',
6787
+ committed: 'Comprometido',
6788
+ capacityUse: 'Uso de la capacidad',
6789
+ burndownCaption: 'Burndown de {name}: puntos restantes por día',
6790
+ day: 'Día',
6791
+ ideal: 'Ideal',
6792
+ remaining: 'Restante',
6793
+ closed: 'Sprints cerrados',
6794
+ },
6795
+ schedule: {
6796
+ heading: 'Cronograma',
6797
+ label: 'Cronograma de las tareas',
6798
+ hint: 'Arrastra una barra para cambiar el inicio y el plazo. Solo aparecen las tareas con fecha.',
6799
+ milestones: 'Hitos',
6800
+ newMilestone: 'Nuevo hito',
6801
+ milestoneTitle: 'Título',
6802
+ milestoneDate: 'Fecha',
6803
+ milestoneRequired: 'Indica el título y la fecha del hito.',
6804
+ removeMilestone: 'Eliminar el hito {title}',
6805
+ rescheduled: '{key}: fechas guardadas.',
6806
+ conflicts: '{key} empieza antes de que terminen: {list}.',
6807
+ workloadHeading: 'Carga del equipo',
6808
+ workloadLabel: 'Puntos por persona en las próximas 4 semanas',
6809
+ workloadHint: 'Capacidad de referencia: {capacity} pts por persona por semana.',
6810
+ week: 'Semana del {date}',
6811
+ noPeople: 'Nadie tiene una tarea con fecha y responsable.',
6812
+ },
6813
+ risks: {
6814
+ heading: 'Riesgos',
6815
+ label: 'Riesgos de las tareas de la app',
6816
+ hint: 'Cada riesgo es de una tarea. Haz clic en una celda de la matriz para filtrar la lista; haz clic en un riesgo para editarlo.',
6817
+ new: 'Nuevo riesgo',
6818
+ newHeading: 'Nuevo riesgo',
6819
+ editHeading: 'Editar riesgo',
6820
+ title: 'Riesgo',
6821
+ titleRequired: 'Describe el riesgo.',
6822
+ owner: 'Dueño',
6823
+ status: 'Estado',
6824
+ mitigation: 'Mitigación',
6825
+ deleteHeading: '¿Eliminar este riesgo?',
6826
+ statuses: { identified: 'Identificado', mitigating: 'En mitigación', closed: 'Cerrado' },
6827
+ task: 'Tarea',
6828
+ taskPlaceholder: 'Elige la tarea amenazada',
6829
+ taskRequired: 'Elige la tarea del riesgo.',
6830
+ noTask: 'Sin tarea',
6831
+ level: 'Riesgo',
6832
+ levels: { low: 'Bajo', medium: 'Medio', high: 'Alto', critical: 'Crítico' },
6833
+ ofTask: 'Riesgos',
6834
+ add: 'Agregar riesgo',
6835
+ empty: 'Ningún riesgo en esta tarea.',
6836
+ },
6837
+ workflow: {
6838
+ heading: 'Flujo de las sugerencias',
6839
+ hint: 'Los estados que quien pide sigue en "Mis sugerencias". El flujo es el mismo para todas las apps.',
6840
+ label: 'Flujo de estados de las sugerencias',
6841
+ count: { zero: 'Ninguna en el tablero', one: '{count} en el tablero', other: '{count} en el tablero' },
6842
+ plan: 'Planificar',
6843
+ start: 'Empezar',
6844
+ finish: 'Terminar',
6845
+ refuse: 'Rechazar',
6846
+ reopen: 'Reabrir',
6847
+ },
6848
+ detail: {
6849
+ estimate: 'Puntos',
6850
+ sprint: 'Sprint',
6851
+ backlogOption: 'Backlog (sin sprint)',
6852
+ dependsOn: 'Depende de',
6853
+ dependsOnPlaceholder: 'Buscar tarea',
6854
+ dependencyCycle: 'Esta dependencia formaría un ciclo entre las tareas.',
6855
+ blockedBy: 'Bloqueada por {list}',
6856
+ },
6857
+ },
6340
6858
  },
6341
6859
  };
6342
6860