@stapel/workspaces-react 0.17.0 → 0.19.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 (123) hide show
  1. package/CHANGELOG.md +218 -0
  2. package/README.md +39 -8
  3. package/dist/api/generated/schema.d.ts +187 -60
  4. package/dist/api/generated/schema.d.ts.map +1 -1
  5. package/dist/default/ActiveWorkspace.d.ts +43 -0
  6. package/dist/default/ActiveWorkspace.d.ts.map +1 -0
  7. package/dist/default/ActiveWorkspace.js +33 -0
  8. package/dist/default/ActiveWorkspace.js.map +1 -0
  9. package/dist/default/AuditTrailPane.d.ts +12 -0
  10. package/dist/default/AuditTrailPane.d.ts.map +1 -0
  11. package/dist/default/AuditTrailPane.js +154 -0
  12. package/dist/default/AuditTrailPane.js.map +1 -0
  13. package/dist/default/InvitationsPane.d.ts +19 -0
  14. package/dist/default/InvitationsPane.d.ts.map +1 -0
  15. package/dist/default/InvitationsPane.js +217 -0
  16. package/dist/default/InvitationsPane.js.map +1 -0
  17. package/dist/default/InviteAcceptPage.d.ts +7 -0
  18. package/dist/default/InviteAcceptPage.d.ts.map +1 -1
  19. package/dist/default/InviteAcceptPage.js +74 -38
  20. package/dist/default/InviteAcceptPage.js.map +1 -1
  21. package/dist/default/MembersManager.d.ts +12 -4
  22. package/dist/default/MembersManager.d.ts.map +1 -1
  23. package/dist/default/MembersManager.js +320 -84
  24. package/dist/default/MembersManager.js.map +1 -1
  25. package/dist/default/RoleSelectField.d.ts +64 -0
  26. package/dist/default/RoleSelectField.d.ts.map +1 -0
  27. package/dist/default/RoleSelectField.js +78 -0
  28. package/dist/default/RoleSelectField.js.map +1 -0
  29. package/dist/default/WorkspaceSettings.d.ts +7 -1
  30. package/dist/default/WorkspaceSettings.d.ts.map +1 -1
  31. package/dist/default/WorkspaceSettings.js +203 -45
  32. package/dist/default/WorkspaceSettings.js.map +1 -1
  33. package/dist/default/WorkspacesPage.d.ts +13 -0
  34. package/dist/default/WorkspacesPage.d.ts.map +1 -0
  35. package/dist/default/WorkspacesPage.js +109 -0
  36. package/dist/default/WorkspacesPage.js.map +1 -0
  37. package/dist/default/index.d.ts +28 -7
  38. package/dist/default/index.d.ts.map +1 -1
  39. package/dist/default/index.js +24 -7
  40. package/dist/default/index.js.map +1 -1
  41. package/dist/default/parts.d.ts +104 -0
  42. package/dist/default/parts.d.ts.map +1 -0
  43. package/dist/default/parts.js +143 -0
  44. package/dist/default/parts.js.map +1 -0
  45. package/dist/headless/Members.d.ts +59 -14
  46. package/dist/headless/Members.d.ts.map +1 -1
  47. package/dist/headless/Members.js +35 -10
  48. package/dist/headless/Members.js.map +1 -1
  49. package/dist/headless/RoleSelect.d.ts +9 -3
  50. package/dist/headless/RoleSelect.d.ts.map +1 -1
  51. package/dist/headless/RoleSelect.js +3 -2
  52. package/dist/headless/RoleSelect.js.map +1 -1
  53. package/dist/i18n/es.d.ts +11 -12
  54. package/dist/i18n/es.d.ts.map +1 -1
  55. package/dist/i18n/es.js +267 -14
  56. package/dist/i18n/es.js.map +1 -1
  57. package/dist/i18n/generated/errors.es.gen.d.ts.map +1 -1
  58. package/dist/i18n/generated/errors.es.gen.js +5 -0
  59. package/dist/i18n/generated/errors.es.gen.js.map +1 -1
  60. package/dist/i18n/generated/errors.gen.d.ts +30 -0
  61. package/dist/i18n/generated/errors.gen.d.ts.map +1 -1
  62. package/dist/i18n/generated/errors.gen.js +15 -0
  63. package/dist/i18n/generated/errors.gen.js.map +1 -1
  64. package/dist/i18n/generated/errors.ru.gen.d.ts.map +1 -1
  65. package/dist/i18n/generated/errors.ru.gen.js +5 -0
  66. package/dist/i18n/generated/errors.ru.gen.js.map +1 -1
  67. package/dist/i18n/keys.d.ts +209 -1
  68. package/dist/i18n/keys.d.ts.map +1 -1
  69. package/dist/i18n/keys.js +410 -4
  70. package/dist/i18n/keys.js.map +1 -1
  71. package/dist/i18n/ru.d.ts +7 -2
  72. package/dist/i18n/ru.d.ts.map +1 -1
  73. package/dist/i18n/ru.js +209 -4
  74. package/dist/i18n/ru.js.map +1 -1
  75. package/dist/index.d.ts +1 -1
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +1 -1
  78. package/dist/index.js.map +1 -1
  79. package/dist/model/format.d.ts +56 -0
  80. package/dist/model/format.d.ts.map +1 -0
  81. package/dist/model/format.js +125 -0
  82. package/dist/model/format.js.map +1 -0
  83. package/dist/model/selection.d.ts +15 -0
  84. package/dist/model/selection.d.ts.map +1 -1
  85. package/dist/model/selection.js +18 -1
  86. package/dist/model/selection.js.map +1 -1
  87. package/dist/nav/manifest.d.ts +45 -0
  88. package/dist/nav/manifest.d.ts.map +1 -0
  89. package/dist/nav/manifest.js +77 -0
  90. package/dist/nav/manifest.js.map +1 -0
  91. package/llms.txt +11 -10
  92. package/manifest.json +281 -69
  93. package/package.json +18 -12
  94. package/src/analytics/generated/events.json +1 -1
  95. package/src/api/generated/schema.ts +187 -60
  96. package/src/default/ActiveWorkspace.tsx +97 -0
  97. package/src/default/AuditTrailPane.tsx +309 -0
  98. package/src/default/InvitationsPane.tsx +501 -0
  99. package/src/default/InviteAcceptPage.tsx +187 -90
  100. package/src/default/MembersManager.tsx +832 -222
  101. package/src/default/RoleSelectField.tsx +187 -0
  102. package/src/default/WorkspaceSettings.tsx +540 -125
  103. package/src/default/WorkspacesPage.tsx +394 -0
  104. package/src/default/index.ts +28 -7
  105. package/src/default/parts.tsx +315 -0
  106. package/src/headless/Members.tsx +84 -16
  107. package/src/headless/RoleSelect.tsx +12 -5
  108. package/src/i18n/es.ts +326 -14
  109. package/src/i18n/generated/errors.es.gen.ts +5 -0
  110. package/src/i18n/generated/errors.gen.ts +15 -0
  111. package/src/i18n/generated/errors.json +37 -0
  112. package/src/i18n/generated/errors.ru.gen.ts +5 -0
  113. package/src/i18n/keys.ts +462 -5
  114. package/src/i18n/ru.ts +259 -5
  115. package/src/index.ts +1 -0
  116. package/src/model/format.ts +158 -0
  117. package/src/model/selection.tsx +19 -1
  118. package/src/nav/manifest.ts +120 -0
  119. package/dist/default/ErrorAlert.d.ts +0 -8
  120. package/dist/default/ErrorAlert.d.ts.map +0 -1
  121. package/dist/default/ErrorAlert.js +0 -30
  122. package/dist/default/ErrorAlert.js.map +0 -1
  123. package/src/default/ErrorAlert.tsx +0 -47
@@ -61,17 +61,22 @@ export const workspacesErrorBundleRu = {
61
61
  "error.408.request_timeout": "Время ожидания запроса истекло",
62
62
  "error.409.conflict": "Ресурс уже существует",
63
63
  "error.409.email_already_registered": "Аккаунт с этим email уже существует — войдите в него",
64
+ "error.409.workspace_is_instance_default": "Это рабочее пространство по умолчанию для сервера, его нельзя удалить — сначала укажите другое",
65
+ "error.409.workspace_is_personal": "Личное рабочее пространство нельзя удалить на этом сервере — оно создаётся заново при следующем входе",
64
66
  "error.410.gone": "Ресурс был безвозвратно удалён",
65
67
  "error.413.payload_too_large": "Тело запроса слишком большое",
66
68
  "error.415.unsupported_media_type": "Неподдерживаемый тип данных",
67
69
  "error.422.unprocessable_entity": "Невозможно обработать данные запроса",
68
70
  "error.423.locked": "Ресурс заблокирован",
69
71
  "error.423.verification_locked": "Слишком много неудачных попыток — подтверждение заблокировано",
72
+ "error.429.invitation_grant_pending": "Ссылка для входа по этому приглашению ещё действует; запросить новую можно через {retry_after} с",
70
73
  "error.429.invitation_resend_cooldown": "Это приглашение недавно отправлялось; отправить снова можно через {retry_after} с",
71
74
  "error.429.rate_limit": "Слишком много попыток. Повторите попытку через {retry_after_minutes} мин.",
72
75
  "error.429.too_many_requests": "Слишком много запросов. Пожалуйста, повторите попытку позже.",
73
76
  "error.500.internal": "Что-то пошло не так",
74
77
  "error.503.auth_unavailable": "Сервис аутентификации недоступен; повторите попытку позже",
78
+ "error.503.billing_unavailable": "Сервис биллинга недоступен; повторите попытку позже",
79
+ "error.503.mandate_unavailable": "Не удалось проверить доступ к рабочему пространству",
75
80
  "error.503.profiles_not_configured": "В этой инсталляции не настроен сервис профилей — отображаемое имя здесь записать нельзя",
76
81
  "error.503.profiles_unavailable": "Сервис профилей недоступен; повторите попытку позже",
77
82
  };
@@ -1 +1 @@
1
- {"version":3,"file":"errors.ru.gen.js","sourceRoot":"","sources":["../../../src/i18n/generated/errors.ru.gen.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAwC;IAC1E,oCAAoC,EAAE,kEAAkE;IACxG,uBAAuB,EAAE,qBAAqB;IAC9C,2BAA2B,EAAE,6DAA6D;IAC1F,4BAA4B,EAAE,wBAAwB;IACtD,8BAA8B,EAAE,4CAA4C;IAC5E,wCAAwC,EAAE,+CAA+C;IACzF,wCAAwC,EAAE,6CAA6C;IACvF,kCAAkC,EAAE,uDAAuD;IAC3F,yBAAyB,EAAE,2BAA2B;IACtD,uBAAuB,EAAE,qCAAqC;IAC9D,gCAAgC,EAAE,yBAAyB;IAC3D,yBAAyB,EAAE,+CAA+C;IAC1E,gCAAgC,EAAE,yCAAyC;IAC3E,4BAA4B,EAAE,gEAAgE;IAC9F,2BAA2B,EAAE,2DAA2D;IACxF,4BAA4B,EAAE,gEAAgE;IAC9F,2BAA2B,EAAE,2DAA2D;IACxF,sBAAsB,EAAE,mCAAmC;IAC3D,0BAA0B,EAAE,4BAA4B;IACxD,wBAAwB,EAAE,gDAAgD;IAC1E,yBAAyB,EAAE,uCAAuC;IAClE,sCAAsC,EAAE,yDAAyD;IACjG,wBAAwB,EAAE,mBAAmB;IAC7C,mCAAmC,EAAE,mCAAmC;IACxE,+BAA+B,EAAE,4BAA4B;IAC7D,8BAA8B,EAAE,iCAAiC;IACjE,8BAA8B,EAAE,2BAA2B;IAC3D,4BAA4B,EAAE,kBAAkB;IAChD,+BAA+B,EAAE,sBAAsB;IACvD,uCAAuC,EAAE,sCAAsC;IAC/E,gCAAgC,EAAE,sCAAsC;IACxE,wBAAwB,EAAE,0BAA0B;IACpD,gCAAgC,EAAE,mEAAmE;IACrG,gCAAgC,EAAE,4DAA4D;IAC9F,4BAA4B,EAAE,kBAAkB;IAChD,qBAAqB,EAAE,8CAA8C;IACrE,+BAA+B,EAAE,iDAAiD;IAClF,wCAAwC,EAAE,uEAAuE;IACjH,gCAAgC,EAAE,qEAAqE;IACvG,8BAA8B,EAAE,sEAAsE;IACtG,2BAA2B,EAAE,oCAAoC;IACjE,qCAAqC,EAAE,uEAAuE;IAC9G,4CAA4C,EAAE,8CAA8C;IAC5F,iCAAiC,EAAE,mCAAmC;IACtE,qCAAqC,EAAE,6DAA6D;IACpG,wBAAwB,EAAE,uBAAuB;IACjD,gCAAgC,EAAE,wBAAwB;IAC1D,4BAA4B,EAAE,gDAAgD;IAC9E,qBAAqB,EAAE,8BAA8B;IACrD,4CAA4C,EAAE,6CAA6C;IAC3F,+BAA+B,EAAE,iCAAiC;IAClE,8BAA8B,EAAE,mBAAmB;IACnD,0BAA0B,EAAE,4BAA4B;IACxD,2BAA2B,EAAE,gCAAgC;IAC7D,oBAAoB,EAAE,uBAAuB;IAC7C,oCAAoC,EAAE,sDAAsD;IAC5F,gBAAgB,EAAE,gCAAgC;IAClD,6BAA6B,EAAE,8BAA8B;IAC7D,kCAAkC,EAAE,6BAA6B;IACjE,gCAAgC,EAAE,sCAAsC;IACxE,kBAAkB,EAAE,qBAAqB;IACzC,+BAA+B,EAAE,+DAA+D;IAChG,sCAAsC,EAAE,mFAAmF;IAC3H,sBAAsB,EAAE,2EAA2E;IACnG,6BAA6B,EAAE,8DAA8D;IAC7F,oBAAoB,EAAE,qBAAqB;IAC3C,4BAA4B,EAAE,2DAA2D;IACzF,mCAAmC,EAAE,yFAAyF;IAC9H,gCAAgC,EAAE,qDAAqD;CACxF,CAAC"}
1
+ {"version":3,"file":"errors.ru.gen.js","sourceRoot":"","sources":["../../../src/i18n/generated/errors.ru.gen.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAwC;IAC1E,oCAAoC,EAAE,kEAAkE;IACxG,uBAAuB,EAAE,qBAAqB;IAC9C,2BAA2B,EAAE,6DAA6D;IAC1F,4BAA4B,EAAE,wBAAwB;IACtD,8BAA8B,EAAE,4CAA4C;IAC5E,wCAAwC,EAAE,+CAA+C;IACzF,wCAAwC,EAAE,6CAA6C;IACvF,kCAAkC,EAAE,uDAAuD;IAC3F,yBAAyB,EAAE,2BAA2B;IACtD,uBAAuB,EAAE,qCAAqC;IAC9D,gCAAgC,EAAE,yBAAyB;IAC3D,yBAAyB,EAAE,+CAA+C;IAC1E,gCAAgC,EAAE,yCAAyC;IAC3E,4BAA4B,EAAE,gEAAgE;IAC9F,2BAA2B,EAAE,2DAA2D;IACxF,4BAA4B,EAAE,gEAAgE;IAC9F,2BAA2B,EAAE,2DAA2D;IACxF,sBAAsB,EAAE,mCAAmC;IAC3D,0BAA0B,EAAE,4BAA4B;IACxD,wBAAwB,EAAE,gDAAgD;IAC1E,yBAAyB,EAAE,uCAAuC;IAClE,sCAAsC,EAAE,yDAAyD;IACjG,wBAAwB,EAAE,mBAAmB;IAC7C,mCAAmC,EAAE,mCAAmC;IACxE,+BAA+B,EAAE,4BAA4B;IAC7D,8BAA8B,EAAE,iCAAiC;IACjE,8BAA8B,EAAE,2BAA2B;IAC3D,4BAA4B,EAAE,kBAAkB;IAChD,+BAA+B,EAAE,sBAAsB;IACvD,uCAAuC,EAAE,sCAAsC;IAC/E,gCAAgC,EAAE,sCAAsC;IACxE,wBAAwB,EAAE,0BAA0B;IACpD,gCAAgC,EAAE,mEAAmE;IACrG,gCAAgC,EAAE,4DAA4D;IAC9F,4BAA4B,EAAE,kBAAkB;IAChD,qBAAqB,EAAE,8CAA8C;IACrE,+BAA+B,EAAE,iDAAiD;IAClF,wCAAwC,EAAE,uEAAuE;IACjH,gCAAgC,EAAE,qEAAqE;IACvG,8BAA8B,EAAE,sEAAsE;IACtG,2BAA2B,EAAE,oCAAoC;IACjE,qCAAqC,EAAE,uEAAuE;IAC9G,4CAA4C,EAAE,8CAA8C;IAC5F,iCAAiC,EAAE,mCAAmC;IACtE,qCAAqC,EAAE,6DAA6D;IACpG,wBAAwB,EAAE,uBAAuB;IACjD,gCAAgC,EAAE,wBAAwB;IAC1D,4BAA4B,EAAE,gDAAgD;IAC9E,qBAAqB,EAAE,8BAA8B;IACrD,4CAA4C,EAAE,6CAA6C;IAC3F,+BAA+B,EAAE,iCAAiC;IAClE,8BAA8B,EAAE,mBAAmB;IACnD,0BAA0B,EAAE,4BAA4B;IACxD,2BAA2B,EAAE,gCAAgC;IAC7D,oBAAoB,EAAE,uBAAuB;IAC7C,oCAAoC,EAAE,sDAAsD;IAC5F,yCAAyC,EAAE,gGAAgG;IAC3I,iCAAiC,EAAE,uGAAuG;IAC1I,gBAAgB,EAAE,gCAAgC;IAClD,6BAA6B,EAAE,8BAA8B;IAC7D,kCAAkC,EAAE,6BAA6B;IACjE,gCAAgC,EAAE,sCAAsC;IACxE,kBAAkB,EAAE,qBAAqB;IACzC,+BAA+B,EAAE,+DAA+D;IAChG,oCAAoC,EAAE,kGAAkG;IACxI,sCAAsC,EAAE,mFAAmF;IAC3H,sBAAsB,EAAE,2EAA2E;IACnG,6BAA6B,EAAE,8DAA8D;IAC7F,oBAAoB,EAAE,qBAAqB;IAC3C,4BAA4B,EAAE,2DAA2D;IACzF,+BAA+B,EAAE,qDAAqD;IACtF,+BAA+B,EAAE,qDAAqD;IACtF,mCAAmC,EAAE,yFAAyF;IAC9H,gCAAgC,EAAE,qDAAqD;CACxF,CAAC"}
@@ -7,10 +7,28 @@ import type { I18nDictionary, I18nEngine } from "@stapel/core";
7
7
  * English fallbacks for both the backend error codes (generated) and the
8
8
  * pair's own UI keys. Point core's `loadLocale` at stapel-translate to override
9
9
  * per locale. Add UI keys under the `workspaces.` namespace as you build flows.
10
+ *
11
+ * COUNTS ARE PLURAL FAMILIES. A key named `*.count` is rendered with core's
12
+ * `useTPlural()`, which looks up `<key>.<CLDR category>` for the reader's
13
+ * language and falls back to the flat key. Every family therefore ships three
14
+ * spellings here — the flat fallback, `.one` and `.other` — and a language with
15
+ * more categories (Russian's `few`/`many`) adds them in its own bundle. This is
16
+ * what "1 workspace(s)" was standing in for.
10
17
  */
11
18
  export declare const WORKSPACES_I18N_KEYS: {
12
19
  readonly unknownError: "workspaces.error.unknown";
13
20
  readonly retry: "workspaces.retry";
21
+ /**
22
+ * The accessible name of a dialog's dismissal — the modal's close button and
23
+ * the bottom sheet's grab handle (`SkinDialog`'s required `dismissLabel`).
24
+ * Surface-neutral on purpose: the same dialog is a sheet on a phone and a
25
+ * modal on a tablet, and the word for "get me out of here" is the same one.
26
+ */
27
+ readonly dialogClose: "workspaces.dialog.close";
28
+ readonly cancel: "workspaces.cancel";
29
+ readonly pagerPrev: "workspaces.pager.prev";
30
+ readonly pagerNext: "workspaces.pager.next";
31
+ readonly pagerPosition: "workspaces.pager.position";
14
32
  readonly listLoading: "workspaces.list.loading";
15
33
  readonly listEmpty: "workspaces.list.empty";
16
34
  /**
@@ -26,6 +44,7 @@ export declare const WORKSPACES_I18N_KEYS: {
26
44
  readonly membersEmpty: "workspaces.members.empty";
27
45
  readonly membersLoadFailed: "workspaces.members.load_failed";
28
46
  readonly rolesLoadFailed: "workspaces.roles.load_failed";
47
+ readonly rolesEmpty: "workspaces.roles.empty";
29
48
  readonly membersInvite: "workspaces.members.invite";
30
49
  readonly membersInviting: "workspaces.members.inviting";
31
50
  readonly membersUpdateRole: "workspaces.members.update_role";
@@ -38,20 +57,116 @@ export declare const WORKSPACES_I18N_KEYS: {
38
57
  readonly fieldName: "workspaces.settings.field.name";
39
58
  readonly fieldSlug: "workspaces.settings.field.slug";
40
59
  readonly fieldType: "workspaces.settings.field.type";
60
+ readonly typePersonal: "workspaces.settings.type.personal";
61
+ readonly typeWork: "workspaces.settings.type.work";
41
62
  readonly save: "workspaces.settings.save";
42
- readonly blockedNotOwner: "workspaces.settings.blocked.not_owner";
63
+ /** The caller's ROLE does not carry `workspace.update`. Not "you are not
64
+ * the owner": a deployment role can hold the capability without being one,
65
+ * and the server answers on the capability, so the screen says the same. */
66
+ readonly blockedCannotManage: "workspaces.settings.blocked.cannot_manage";
43
67
  readonly blockedNameRequired: "workspaces.settings.blocked.name_required";
68
+ readonly blockedUnchanged: "workspaces.settings.blocked.unchanged";
44
69
  readonly saving: "workspaces.settings.saving";
45
70
  readonly dangerZoneTitle: "workspaces.settings.danger_zone.title";
46
71
  readonly deleteWorkspace: "workspaces.settings.danger_zone.delete";
47
72
  readonly deleteWorkspaceConfirm: "workspaces.settings.danger_zone.delete_confirm";
73
+ readonly deleteWorkspaceConfirmBody: "workspaces.settings.danger_zone.delete_confirm_body";
74
+ /** The refusal a workspace carries no CODE for — the belt under
75
+ * `delete_blocked_reason`, which is normally an `error.409.*` key the
76
+ * generated bundle already translates. */
77
+ readonly deleteBlockedFallback: "workspaces.settings.danger_zone.blocked";
78
+ readonly securityTitle: "workspaces.settings.security.title";
79
+ readonly securitySubtitle: "workspaces.settings.security.subtitle";
80
+ readonly securityRequireMfa: "workspaces.settings.security.require_mfa";
81
+ readonly securityRequireMfaHint: "workspaces.settings.security.require_mfa_hint";
82
+ readonly securityPoliciesLabel: "workspaces.settings.security.policies_label";
83
+ readonly securityPoliciesHint: "workspaces.settings.security.policies_hint";
84
+ readonly securityPolicyPasswordChange: "workspaces.settings.security.policy.password_change";
85
+ readonly securityPolicyMfaEnroll: "workspaces.settings.security.policy.mfa_enroll";
86
+ readonly securitySave: "workspaces.settings.security.save";
87
+ readonly securitySaving: "workspaces.settings.security.saving";
88
+ readonly securityBlockedCapability: "workspaces.settings.security.blocked.capability";
89
+ readonly securityStepUpNotice: "workspaces.settings.security.step_up_notice";
90
+ readonly mfaStatusTitle: "workspaces.settings.security.mfa.status_title";
91
+ readonly mfaStateLabel: "workspaces.settings.security.mfa.state_label";
92
+ readonly mfaStatePending: "workspaces.settings.security.mfa.state.pending";
93
+ readonly mfaStateEnforcing: "workspaces.settings.security.mfa.state.enforcing";
94
+ readonly mfaStateEnforced: "workspaces.settings.security.mfa.state.enforced";
95
+ readonly mfaStateFailed: "workspaces.settings.security.mfa.state.failed";
96
+ readonly mfaStateOther: "workspaces.settings.security.mfa.state.other";
97
+ readonly mfaCheckedCount: "workspaces.settings.security.mfa.checked_count";
98
+ readonly mfaNoncompliantCount: "workspaces.settings.security.mfa.noncompliant_count";
99
+ readonly mfaUnverifiedCount: "workspaces.settings.security.mfa.unverified_count";
100
+ readonly mfaAttemptsCount: "workspaces.settings.security.mfa.attempts_count";
101
+ readonly mfaLastAttempt: "workspaces.settings.security.mfa.last_attempt";
102
+ readonly mfaCompletedAt: "workspaces.settings.security.mfa.completed_at";
103
+ readonly mfaLastError: "workspaces.settings.security.mfa.last_error";
104
+ readonly mfaUnverifiedHint: "workspaces.settings.security.mfa.unverified_hint";
105
+ readonly mfaOffNotice: "workspaces.settings.security.mfa.off";
106
+ /** The policy IS on and the sweep has not reported yet — a different
107
+ * fact from "not required here", and the one the screen used to get
108
+ * wrong by deriving the sentence from the absence of a status. */
109
+ readonly mfaNoStatusYet: "workspaces.settings.security.mfa.no_status_yet";
48
110
  readonly membersTitle: "workspaces.members.title";
49
111
  readonly membersSubtitle: "workspaces.members.subtitle";
112
+ readonly membersCount: "workspaces.members.count";
113
+ readonly membersJoined: "workspaces.members.joined";
114
+ readonly membersLastSeen: "workspaces.members.last_seen";
115
+ readonly membersLastSeenNever: "workspaces.members.last_seen_never";
116
+ readonly membersSearchPlaceholder: "workspaces.members.search_placeholder";
117
+ readonly membersRolePickerLabel: "workspaces.members.role_picker_label";
118
+ readonly membersBlockedReadOnly: "workspaces.members.blocked.read_only";
119
+ readonly membersMfaLabel: "workspaces.members.mfa_label";
120
+ readonly membersMfaCompliant: "workspaces.members.mfa.compliant";
121
+ readonly membersMfaNoncompliant: "workspaces.members.mfa.noncompliant";
122
+ readonly membersMfaUnknown: "workspaces.members.mfa.unknown";
123
+ readonly membersSuspended: "workspaces.members.suspended";
124
+ readonly membersSuspendedNoMfa: "workspaces.members.suspended.no_mfa";
125
+ readonly membersProvisioned: "workspaces.members.provisioned";
50
126
  readonly membersInviteDialogTitle: "workspaces.members.invite_dialog.title";
51
127
  readonly membersInviteEmailsLabel: "workspaces.members.invite_dialog.emails_label";
52
128
  readonly membersInviteEmailsPlaceholder: "workspaces.members.invite_dialog.emails_placeholder";
53
129
  readonly membersInviteRoleLabel: "workspaces.members.invite_dialog.role_label";
130
+ readonly membersInviteNameLabel: "workspaces.members.invite_dialog.name_label";
131
+ readonly membersInviteNamePlaceholder: "workspaces.members.invite_dialog.name_placeholder";
132
+ readonly membersInviteSubmit: "workspaces.members.invite_dialog.submit";
133
+ readonly membersInviteBlockedNoEmails: "workspaces.members.invite_dialog.blocked.no_emails";
134
+ readonly membersInviteBlockedBadEmail: "workspaces.members.invite_dialog.blocked.bad_email";
54
135
  readonly membersRemoveConfirm: "workspaces.members.remove_confirm";
136
+ readonly membersRemoveConfirmBody: "workspaces.members.remove_confirm_body";
137
+ /** Why a row's "Remove" is switched off: the backend's last-owner
138
+ * protection would refuse it, so the control never offers it. */
139
+ readonly membersRemoveBlockedLastOwner: "workspaces.members.remove.blocked.last_owner";
140
+ /** Why a row's "Remove" is switched off on the READER's own row. Answered
141
+ * by the server (`MemberResponse.is_self`), never by comparing a session id
142
+ * this pair does not have. */
143
+ readonly membersRemoveBlockedSelf: "workspaces.members.remove.blocked.self";
144
+ /**
145
+ * Reset a member's password on the organization's order. The endpoint is
146
+ * declared `high`, so the confirm says a step-up is coming BEFORE the
147
+ * click, and the one-shot credential is labelled as one — it is shown
148
+ * exactly once and can never be fetched again.
149
+ */
150
+ readonly membersResetPassword: "workspaces.members.reset_password";
151
+ /** Why "Reset password" is switched off on the READER's own row: the server
152
+ * answers a self-target with the same 404 it gives for a stranger, so an
153
+ * ungated button here reads its own refusal as "this member is gone". */
154
+ readonly membersResetBlockedSelf: "workspaces.members.reset_password.blocked.self";
155
+ readonly membersResetDialogTitle: "workspaces.members.reset_password_dialog.title";
156
+ readonly membersResetDialogBody: "workspaces.members.reset_password_dialog.body";
157
+ readonly membersResetStepUp: "workspaces.members.reset_password_dialog.step_up";
158
+ readonly membersResetSubmit: "workspaces.members.reset_password_dialog.submit";
159
+ readonly membersResetDone: "workspaces.members.reset_password_dialog.done";
160
+ readonly membersResetGenerated: "workspaces.members.reset_password_dialog.generated";
161
+ readonly membersResetGeneratedHint: "workspaces.members.reset_password_dialog.generated_hint";
162
+ readonly membersResetNotNotified: "workspaces.members.reset_password_dialog.not_notified";
163
+ readonly membersRename: "workspaces.members.rename";
164
+ readonly membersRenameDialogTitle: "workspaces.members.rename_dialog.title";
165
+ readonly membersRenameLabel: "workspaces.members.rename_dialog.label";
166
+ readonly membersRenamePlaceholder: "workspaces.members.rename_dialog.placeholder";
167
+ readonly membersRenameHint: "workspaces.members.rename_dialog.hint";
168
+ readonly membersRenameSubmit: "workspaces.members.rename_dialog.submit";
169
+ readonly membersRenameBlockedUnchanged: "workspaces.members.rename_dialog.blocked.unchanged";
55
170
  readonly roleOwner: "workspaces.members.role.owner";
56
171
  readonly roleAdmin: "workspaces.members.role.admin";
57
172
  readonly roleMember: "workspaces.members.role.member";
@@ -60,18 +175,92 @@ export declare const WORKSPACES_I18N_KEYS: {
60
175
  readonly roleLabelAdmin: "workspaces.role.admin";
61
176
  readonly roleLabelMember: "workspaces.role.member";
62
177
  readonly roleLabelViewer: "workspaces.role.viewer";
178
+ readonly roleRankCaption: "workspaces.role.rank_caption";
179
+ readonly pageTitle: "workspaces.page.title";
180
+ readonly pageSubtitle: "workspaces.page.subtitle";
181
+ readonly listCount: "workspaces.list.count";
182
+ readonly listMemberCount: "workspaces.list.member_count";
183
+ readonly listOwnerLine: "workspaces.list.owner_line";
184
+ readonly listYourRole: "workspaces.list.your_role";
185
+ readonly listOpen: "workspaces.list.open";
186
+ readonly listPreferredTag: "workspaces.list.preferred";
187
+ readonly listSetPreferred: "workspaces.list.set_preferred";
188
+ readonly listClearPreferred: "workspaces.list.clear_preferred";
189
+ readonly listEmptyHint: "workspaces.list.empty_hint";
190
+ readonly listGuestNotice: "workspaces.list.guest_notice";
191
+ readonly listInstanceClosed: "workspaces.list.instance_closed";
192
+ readonly listCreateDialogTitle: "workspaces.list.create_dialog.title";
193
+ readonly listCreateNameLabel: "workspaces.list.create_dialog.name_label";
194
+ readonly listCreateNamePlaceholder: "workspaces.list.create_dialog.name_placeholder";
195
+ readonly listCreateSubmit: "workspaces.list.create_dialog.submit";
196
+ readonly listCreateBlockedNoName: "workspaces.list.create_dialog.blocked.no_name";
197
+ readonly listCreateBlockedPolicy: "workspaces.list.blocked.create_policy";
198
+ readonly invitationsTitle: "workspaces.invitations.title";
199
+ readonly invitationsSubtitle: "workspaces.invitations.subtitle";
200
+ readonly invitationsCount: "workspaces.invitations.count";
201
+ readonly invitationsEmpty: "workspaces.invitations.empty";
202
+ readonly invitationsExpiresLabel: "workspaces.invitations.expires_label";
203
+ readonly invitationsSentLabel: "workspaces.invitations.sent_label";
204
+ readonly invitationsSentNever: "workspaces.invitations.sent_never";
205
+ readonly invitationsSearchPlaceholder: "workspaces.invitations.search_placeholder";
206
+ readonly invitationsFilterLabel: "workspaces.invitations.filter_label";
207
+ readonly invitationsFilterPending: "workspaces.invitations.filter.pending";
208
+ readonly invitationsFilterNeverAccepted: "workspaces.invitations.filter.never_accepted";
209
+ readonly invitationsFilterAll: "workspaces.invitations.filter.all";
210
+ readonly invitationsStatusPending: "workspaces.invitations.status.pending";
211
+ readonly invitationsStatusAccepted: "workspaces.invitations.status.accepted";
212
+ readonly invitationsStatusDeclined: "workspaces.invitations.status.declined";
213
+ readonly invitationsStatusRevoked: "workspaces.invitations.status.revoked";
214
+ readonly invitationsStatusExpired: "workspaces.invitations.status.expired";
215
+ readonly invitationsResend: "workspaces.invitations.resend";
216
+ readonly invitationsResendConfirm: "workspaces.invitations.resend_confirm";
217
+ readonly invitationsResendConfirmBody: "workspaces.invitations.resend_confirm_body";
218
+ readonly invitationsRevoke: "workspaces.invitations.revoke";
219
+ readonly invitationsRevokeConfirm: "workspaces.invitations.revoke_confirm";
220
+ readonly invitationsRevokeConfirmBody: "workspaces.invitations.revoke_confirm_body";
221
+ readonly invitationsRename: "workspaces.invitations.rename";
222
+ readonly invitationsRenameDialogTitle: "workspaces.invitations.rename_dialog.title";
223
+ readonly invitationsBlockedTerminal: "workspaces.invitations.blocked.terminal";
224
+ readonly invitationsBlockedResendTerminal: "workspaces.invitations.blocked.resend_terminal";
225
+ /** One sentence for the whole ROW — see `rowReasonKey` in InvitationsPane. */
226
+ readonly invitationsBlockedRowClosed: "workspaces.invitations.blocked.row_closed";
227
+ readonly invitationsBlockedRowResendOnly: "workspaces.invitations.blocked.row_resend_only";
228
+ readonly auditTitle: "workspaces.audit.title";
229
+ readonly auditSubtitle: "workspaces.audit.subtitle";
230
+ readonly auditEmpty: "workspaces.audit.empty";
231
+ readonly auditFilterLabel: "workspaces.audit.filter_label";
232
+ readonly auditFilterAll: "workspaces.audit.filter.all";
233
+ readonly auditActorUnknown: "workspaces.audit.actor_unknown";
234
+ readonly auditBy: "workspaces.audit.by";
235
+ readonly auditRoleLine: "workspaces.audit.role_line";
236
+ readonly auditActionInvitationCreated: "workspaces.audit.action.invitation_created";
237
+ readonly auditActionInvitationAccepted: "workspaces.audit.action.invitation_accepted";
238
+ readonly auditActionInvitationRevoked: "workspaces.audit.action.invitation_revoked";
239
+ readonly auditActionInvitationDeclined: "workspaces.audit.action.invitation_declined";
240
+ readonly auditActionAccountCreatedByInvitation: "workspaces.audit.action.account_created_by_invitation";
241
+ readonly auditActionMemberJoined: "workspaces.audit.action.member_joined";
242
+ readonly auditActionMemberProvisioned: "workspaces.audit.action.member_provisioned";
243
+ readonly auditActionMemberRemoved: "workspaces.audit.action.member_removed";
244
+ readonly auditActionMemberRoleChanged: "workspaces.audit.action.member_role_changed";
245
+ readonly auditActionMemberSuspended: "workspaces.audit.action.member_suspended";
246
+ readonly auditActionMemberUnsuspended: "workspaces.audit.action.member_unsuspended";
247
+ readonly auditActionDeleted: "workspaces.audit.action.deleted";
63
248
  readonly inviteLoading: "workspaces.invite.loading";
64
249
  readonly inviteAcceptTitle: "workspaces.invite.acceptTitle";
65
250
  readonly inviteRoleLine: "workspaces.invite.roleLine";
66
251
  readonly inviteEmailLine: "workspaces.invite.emailLine";
67
252
  readonly inviteJoinCta: "workspaces.invite.joinCta";
68
253
  readonly inviteDeclineCta: "workspaces.invite.declineCta";
254
+ readonly inviteDeclineConfirm: "workspaces.invite.declineConfirm";
255
+ readonly inviteDeclineConfirmBody: "workspaces.invite.declineConfirmBody";
69
256
  readonly inviteAccepted: "workspaces.invite.accepted";
70
257
  readonly inviteDeclined: "workspaces.invite.declined";
71
258
  readonly inviteUnavailableExpired: "workspaces.invite.unavailable.expired";
72
259
  readonly inviteUnavailableRevoked: "workspaces.invite.unavailable.revoked";
73
260
  readonly inviteUnavailableAccepted: "workspaces.invite.unavailable.accepted";
74
261
  readonly inviteUnavailableDeclined: "workspaces.invite.unavailable.declined";
262
+ readonly inviteUnavailableNextStep: "workspaces.invite.unavailable.next_step";
263
+ readonly inviteExitCta: "workspaces.invite.exitCta";
75
264
  readonly inviteWrongAccount: "workspaces.invite.wrongAccount";
76
265
  readonly inviteWrongAccountHint: "workspaces.invite.wrongAccountHint";
77
266
  readonly inviteSwitchAccountCta: "workspaces.invite.switchAccountCta";
@@ -84,6 +273,25 @@ export declare const WORKSPACES_I18N_KEYS: {
84
273
  readonly inviteRetryCta: "workspaces.invite.retryCta";
85
274
  readonly inviteBasicDataTitle: "workspaces.invite.basicDataTitle";
86
275
  readonly inviteBasicDataContinueCta: "workspaces.invite.basicDataContinueCta";
276
+ readonly inviteBlockedBusy: "workspaces.invite.blocked.busy";
277
+ /**
278
+ * A workspace-scoped screen mounted from the nav manifest, with no active
279
+ * workspace to be about. The active workspace is runtime state (the
280
+ * selection the container writes), not a route param, so "there is none
281
+ * yet" is a state every such screen can reach — and it is drawn, never
282
+ * blank. Two different sentences, because they are two different
283
+ * situations: nothing is SELECTED vs the person belongs to nothing.
284
+ */
285
+ readonly activeChooseTitle: "workspaces.active.choose.title";
286
+ readonly activeChooseHint: "workspaces.active.choose.hint";
287
+ readonly activeNoneTitle: "workspaces.active.none.title";
288
+ readonly activeNoneHint: "workspaces.active.none.hint";
289
+ readonly navWorkspaces: "workspaces.nav.workspaces";
290
+ readonly navSettings: "workspaces.nav.settings";
291
+ readonly navMembers: "workspaces.nav.members";
292
+ readonly navInvitations: "workspaces.nav.invitations";
293
+ readonly navAudit: "workspaces.nav.audit";
294
+ readonly navInvite: "workspaces.nav.invite";
87
295
  };
88
296
  export type WorkspacesI18nKey = (typeof WORKSPACES_I18N_KEYS)[keyof typeof WORKSPACES_I18N_KEYS];
89
297
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/D;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB;;;;;IAQ/B;;;;;OAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6EK,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAC3B,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,EAAE,cAmFpC,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,SAAO,GAAG,IAAI,CAE9E"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/D;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB;;;IAK/B;;;;;OAKG;;;;;;;;IAUH;;;;;OAKG;;;;;;;;;;;;;;;;;;;;;;;;IA4BH;;gFAE4E;;;;;;;;;IAS5E;;8CAE0C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiC1C;;sEAEkE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiClE;qEACiE;;IAEjE;;kCAE8B;;IAE9B;;;;;OAKG;;IAEH;;6EAEyE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgFzE,8EAA8E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2D9E;;;;;;;OAOG;;;;;;;;;;;CAYK,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAC3B,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,EAAE,cA2TpC,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,SAAO,GAAG,IAAI,CAE9E"}