@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
package/dist/i18n/keys.js CHANGED
@@ -7,13 +7,32 @@ import { workspacesErrorBundleEn } from "./generated/errors.gen.js";
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 const WORKSPACES_I18N_KEYS = {
12
19
  unknownError: "workspaces.error.unknown",
13
20
  // Retry affordance beside a stated failure — an error a person cannot act
14
21
  // on is only half the message.
15
22
  retry: "workspaces.retry",
16
- // Workspace list (WorkspaceList headless)
23
+ /**
24
+ * The accessible name of a dialog's dismissal — the modal's close button and
25
+ * the bottom sheet's grab handle (`SkinDialog`'s required `dismissLabel`).
26
+ * Surface-neutral on purpose: the same dialog is a sheet on a phone and a
27
+ * modal on a tablet, and the word for "get me out of here" is the same one.
28
+ */
29
+ dialogClose: "workspaces.dialog.close",
30
+ cancel: "workspaces.cancel",
31
+ // Anchor pagination (members / invitations / audit share one pager).
32
+ pagerPrev: "workspaces.pager.prev",
33
+ pagerNext: "workspaces.pager.next",
34
+ pagerPosition: "workspaces.pager.position",
35
+ // Workspace list (WorkspaceList headless + WorkspacesPage skin)
17
36
  listLoading: "workspaces.list.loading",
18
37
  listEmpty: "workspaces.list.empty",
19
38
  /**
@@ -30,6 +49,7 @@ export const WORKSPACES_I18N_KEYS = {
30
49
  membersEmpty: "workspaces.members.empty",
31
50
  membersLoadFailed: "workspaces.members.load_failed",
32
51
  rolesLoadFailed: "workspaces.roles.load_failed",
52
+ rolesEmpty: "workspaces.roles.empty",
33
53
  membersInvite: "workspaces.members.invite",
34
54
  membersInviting: "workspaces.members.inviting",
35
55
  membersUpdateRole: "workspaces.members.update_role",
@@ -44,22 +64,124 @@ export const WORKSPACES_I18N_KEYS = {
44
64
  fieldName: "workspaces.settings.field.name",
45
65
  fieldSlug: "workspaces.settings.field.slug",
46
66
  fieldType: "workspaces.settings.field.type",
67
+ typePersonal: "workspaces.settings.type.personal",
68
+ typeWork: "workspaces.settings.type.work",
47
69
  save: "workspaces.settings.save",
48
70
  // Why a settings control is switched off (core's `useActionGate`).
49
- blockedNotOwner: "workspaces.settings.blocked.not_owner",
71
+ /** The caller's ROLE does not carry `workspace.update`. Not "you are not
72
+ * the owner": a deployment role can hold the capability without being one,
73
+ * and the server answers on the capability, so the screen says the same. */
74
+ blockedCannotManage: "workspaces.settings.blocked.cannot_manage",
50
75
  blockedNameRequired: "workspaces.settings.blocked.name_required",
76
+ blockedUnchanged: "workspaces.settings.blocked.unchanged",
51
77
  saving: "workspaces.settings.saving",
52
78
  dangerZoneTitle: "workspaces.settings.danger_zone.title",
53
79
  deleteWorkspace: "workspaces.settings.danger_zone.delete",
54
80
  deleteWorkspaceConfirm: "workspaces.settings.danger_zone.delete_confirm",
81
+ deleteWorkspaceConfirmBody: "workspaces.settings.danger_zone.delete_confirm_body",
82
+ /** The refusal a workspace carries no CODE for — the belt under
83
+ * `delete_blocked_reason`, which is normally an `error.409.*` key the
84
+ * generated bundle already translates. */
85
+ deleteBlockedFallback: "workspaces.settings.danger_zone.blocked",
86
+ // Security card (WorkspaceSettings — the require_mfa policy, org-program §C3)
87
+ securityTitle: "workspaces.settings.security.title",
88
+ securitySubtitle: "workspaces.settings.security.subtitle",
89
+ securityRequireMfa: "workspaces.settings.security.require_mfa",
90
+ securityRequireMfaHint: "workspaces.settings.security.require_mfa_hint",
91
+ securityPoliciesLabel: "workspaces.settings.security.policies_label",
92
+ securityPoliciesHint: "workspaces.settings.security.policies_hint",
93
+ securityPolicyPasswordChange: "workspaces.settings.security.policy.password_change",
94
+ securityPolicyMfaEnroll: "workspaces.settings.security.policy.mfa_enroll",
95
+ securitySave: "workspaces.settings.security.save",
96
+ securitySaving: "workspaces.settings.security.saving",
97
+ securityBlockedCapability: "workspaces.settings.security.blocked.capability",
98
+ securityStepUpNotice: "workspaces.settings.security.step_up_notice",
99
+ // What the policy has actually ACHIEVED (MFAEnforcementStatus) — the
100
+ // difference between "somebody asked for MFA" and "MFA holds".
101
+ mfaStatusTitle: "workspaces.settings.security.mfa.status_title",
102
+ mfaStateLabel: "workspaces.settings.security.mfa.state_label",
103
+ mfaStatePending: "workspaces.settings.security.mfa.state.pending",
104
+ mfaStateEnforcing: "workspaces.settings.security.mfa.state.enforcing",
105
+ mfaStateEnforced: "workspaces.settings.security.mfa.state.enforced",
106
+ mfaStateFailed: "workspaces.settings.security.mfa.state.failed",
107
+ mfaStateOther: "workspaces.settings.security.mfa.state.other",
108
+ mfaCheckedCount: "workspaces.settings.security.mfa.checked_count",
109
+ mfaNoncompliantCount: "workspaces.settings.security.mfa.noncompliant_count",
110
+ mfaUnverifiedCount: "workspaces.settings.security.mfa.unverified_count",
111
+ mfaAttemptsCount: "workspaces.settings.security.mfa.attempts_count",
112
+ mfaLastAttempt: "workspaces.settings.security.mfa.last_attempt",
113
+ mfaCompletedAt: "workspaces.settings.security.mfa.completed_at",
114
+ mfaLastError: "workspaces.settings.security.mfa.last_error",
115
+ mfaUnverifiedHint: "workspaces.settings.security.mfa.unverified_hint",
116
+ mfaOffNotice: "workspaces.settings.security.mfa.off",
117
+ /** The policy IS on and the sweep has not reported yet — a different
118
+ * fact from "not required here", and the one the screen used to get
119
+ * wrong by deriving the sentence from the absence of a status. */
120
+ mfaNoStatusYet: "workspaces.settings.security.mfa.no_status_yet",
55
121
  // Members manager (default skin — MembersManager)
56
122
  membersTitle: "workspaces.members.title",
57
123
  membersSubtitle: "workspaces.members.subtitle",
124
+ membersCount: "workspaces.members.count",
125
+ membersJoined: "workspaces.members.joined",
126
+ membersLastSeen: "workspaces.members.last_seen",
127
+ membersLastSeenNever: "workspaces.members.last_seen_never",
128
+ membersSearchPlaceholder: "workspaces.members.search_placeholder",
129
+ membersRolePickerLabel: "workspaces.members.role_picker_label",
130
+ membersBlockedReadOnly: "workspaces.members.blocked.read_only",
131
+ // The MFA evidence per member (`MemberResponse.mfa_compliant`): true /
132
+ // false / null, and null is a state of its own — nobody has asked yet.
133
+ membersMfaLabel: "workspaces.members.mfa_label",
134
+ membersMfaCompliant: "workspaces.members.mfa.compliant",
135
+ membersMfaNoncompliant: "workspaces.members.mfa.noncompliant",
136
+ membersMfaUnknown: "workspaces.members.mfa.unknown",
137
+ membersSuspended: "workspaces.members.suspended",
138
+ membersSuspendedNoMfa: "workspaces.members.suspended.no_mfa",
139
+ membersProvisioned: "workspaces.members.provisioned",
58
140
  membersInviteDialogTitle: "workspaces.members.invite_dialog.title",
59
141
  membersInviteEmailsLabel: "workspaces.members.invite_dialog.emails_label",
60
142
  membersInviteEmailsPlaceholder: "workspaces.members.invite_dialog.emails_placeholder",
61
143
  membersInviteRoleLabel: "workspaces.members.invite_dialog.role_label",
144
+ membersInviteNameLabel: "workspaces.members.invite_dialog.name_label",
145
+ membersInviteNamePlaceholder: "workspaces.members.invite_dialog.name_placeholder",
146
+ membersInviteSubmit: "workspaces.members.invite_dialog.submit",
147
+ // Why the invite dialog's submit is switched off (core's `useActionGate`).
148
+ membersInviteBlockedNoEmails: "workspaces.members.invite_dialog.blocked.no_emails",
149
+ membersInviteBlockedBadEmail: "workspaces.members.invite_dialog.blocked.bad_email",
62
150
  membersRemoveConfirm: "workspaces.members.remove_confirm",
151
+ membersRemoveConfirmBody: "workspaces.members.remove_confirm_body",
152
+ /** Why a row's "Remove" is switched off: the backend's last-owner
153
+ * protection would refuse it, so the control never offers it. */
154
+ membersRemoveBlockedLastOwner: "workspaces.members.remove.blocked.last_owner",
155
+ /** Why a row's "Remove" is switched off on the READER's own row. Answered
156
+ * by the server (`MemberResponse.is_self`), never by comparing a session id
157
+ * this pair does not have. */
158
+ membersRemoveBlockedSelf: "workspaces.members.remove.blocked.self",
159
+ /**
160
+ * Reset a member's password on the organization's order. The endpoint is
161
+ * declared `high`, so the confirm says a step-up is coming BEFORE the
162
+ * click, and the one-shot credential is labelled as one — it is shown
163
+ * exactly once and can never be fetched again.
164
+ */
165
+ membersResetPassword: "workspaces.members.reset_password",
166
+ /** Why "Reset password" is switched off on the READER's own row: the server
167
+ * answers a self-target with the same 404 it gives for a stranger, so an
168
+ * ungated button here reads its own refusal as "this member is gone". */
169
+ membersResetBlockedSelf: "workspaces.members.reset_password.blocked.self",
170
+ membersResetDialogTitle: "workspaces.members.reset_password_dialog.title",
171
+ membersResetDialogBody: "workspaces.members.reset_password_dialog.body",
172
+ membersResetStepUp: "workspaces.members.reset_password_dialog.step_up",
173
+ membersResetSubmit: "workspaces.members.reset_password_dialog.submit",
174
+ membersResetDone: "workspaces.members.reset_password_dialog.done",
175
+ membersResetGenerated: "workspaces.members.reset_password_dialog.generated",
176
+ membersResetGeneratedHint: "workspaces.members.reset_password_dialog.generated_hint",
177
+ membersResetNotNotified: "workspaces.members.reset_password_dialog.not_notified",
178
+ membersRename: "workspaces.members.rename",
179
+ membersRenameDialogTitle: "workspaces.members.rename_dialog.title",
180
+ membersRenameLabel: "workspaces.members.rename_dialog.label",
181
+ membersRenamePlaceholder: "workspaces.members.rename_dialog.placeholder",
182
+ membersRenameHint: "workspaces.members.rename_dialog.hint",
183
+ membersRenameSubmit: "workspaces.members.rename_dialog.submit",
184
+ membersRenameBlockedUnchanged: "workspaces.members.rename_dialog.blocked.unchanged",
63
185
  roleOwner: "workspaces.members.role.owner",
64
186
  roleAdmin: "workspaces.members.role.admin",
65
187
  roleMember: "workspaces.members.role.member",
@@ -72,6 +194,82 @@ export const WORKSPACES_I18N_KEYS = {
72
194
  roleLabelAdmin: "workspaces.role.admin",
73
195
  roleLabelMember: "workspaces.role.member",
74
196
  roleLabelViewer: "workspaces.role.viewer",
197
+ roleRankCaption: "workspaces.role.rank_caption",
198
+ // Workspaces page (default skin — WorkspacesPage over the WorkspaceList bag)
199
+ pageTitle: "workspaces.page.title",
200
+ pageSubtitle: "workspaces.page.subtitle",
201
+ listCount: "workspaces.list.count",
202
+ listMemberCount: "workspaces.list.member_count",
203
+ listOwnerLine: "workspaces.list.owner_line",
204
+ listYourRole: "workspaces.list.your_role",
205
+ listOpen: "workspaces.list.open",
206
+ listPreferredTag: "workspaces.list.preferred",
207
+ listSetPreferred: "workspaces.list.set_preferred",
208
+ listClearPreferred: "workspaces.list.clear_preferred",
209
+ listEmptyHint: "workspaces.list.empty_hint",
210
+ listGuestNotice: "workspaces.list.guest_notice",
211
+ listInstanceClosed: "workspaces.list.instance_closed",
212
+ listCreateDialogTitle: "workspaces.list.create_dialog.title",
213
+ listCreateNameLabel: "workspaces.list.create_dialog.name_label",
214
+ listCreateNamePlaceholder: "workspaces.list.create_dialog.name_placeholder",
215
+ listCreateSubmit: "workspaces.list.create_dialog.submit",
216
+ listCreateBlockedNoName: "workspaces.list.create_dialog.blocked.no_name",
217
+ listCreateBlockedPolicy: "workspaces.list.blocked.create_policy",
218
+ // Invitation administration (default skin — InvitationsPane, #109)
219
+ invitationsTitle: "workspaces.invitations.title",
220
+ invitationsSubtitle: "workspaces.invitations.subtitle",
221
+ invitationsCount: "workspaces.invitations.count",
222
+ invitationsEmpty: "workspaces.invitations.empty",
223
+ invitationsExpiresLabel: "workspaces.invitations.expires_label",
224
+ invitationsSentLabel: "workspaces.invitations.sent_label",
225
+ invitationsSentNever: "workspaces.invitations.sent_never",
226
+ invitationsSearchPlaceholder: "workspaces.invitations.search_placeholder",
227
+ invitationsFilterLabel: "workspaces.invitations.filter_label",
228
+ invitationsFilterPending: "workspaces.invitations.filter.pending",
229
+ invitationsFilterNeverAccepted: "workspaces.invitations.filter.never_accepted",
230
+ invitationsFilterAll: "workspaces.invitations.filter.all",
231
+ invitationsStatusPending: "workspaces.invitations.status.pending",
232
+ invitationsStatusAccepted: "workspaces.invitations.status.accepted",
233
+ invitationsStatusDeclined: "workspaces.invitations.status.declined",
234
+ invitationsStatusRevoked: "workspaces.invitations.status.revoked",
235
+ invitationsStatusExpired: "workspaces.invitations.status.expired",
236
+ invitationsResend: "workspaces.invitations.resend",
237
+ invitationsResendConfirm: "workspaces.invitations.resend_confirm",
238
+ invitationsResendConfirmBody: "workspaces.invitations.resend_confirm_body",
239
+ invitationsRevoke: "workspaces.invitations.revoke",
240
+ invitationsRevokeConfirm: "workspaces.invitations.revoke_confirm",
241
+ invitationsRevokeConfirmBody: "workspaces.invitations.revoke_confirm_body",
242
+ invitationsRename: "workspaces.invitations.rename",
243
+ invitationsRenameDialogTitle: "workspaces.invitations.rename_dialog.title",
244
+ invitationsBlockedTerminal: "workspaces.invitations.blocked.terminal",
245
+ invitationsBlockedResendTerminal: "workspaces.invitations.blocked.resend_terminal",
246
+ /** One sentence for the whole ROW — see `rowReasonKey` in InvitationsPane. */
247
+ invitationsBlockedRowClosed: "workspaces.invitations.blocked.row_closed",
248
+ invitationsBlockedRowResendOnly: "workspaces.invitations.blocked.row_resend_only",
249
+ // Membership history (default skin — AuditTrailPane, GET /{ws}/audit)
250
+ auditTitle: "workspaces.audit.title",
251
+ auditSubtitle: "workspaces.audit.subtitle",
252
+ auditEmpty: "workspaces.audit.empty",
253
+ auditFilterLabel: "workspaces.audit.filter_label",
254
+ auditFilterAll: "workspaces.audit.filter.all",
255
+ auditActorUnknown: "workspaces.audit.actor_unknown",
256
+ auditBy: "workspaces.audit.by",
257
+ auditRoleLine: "workspaces.audit.role_line",
258
+ // The CLOSED action vocabulary (`models.AuditAction`). A deployment on a
259
+ // newer backend can send one this bundle has no label for — the pane falls
260
+ // back to the raw action key, exactly as RoleSelect does for roles.
261
+ auditActionInvitationCreated: "workspaces.audit.action.invitation_created",
262
+ auditActionInvitationAccepted: "workspaces.audit.action.invitation_accepted",
263
+ auditActionInvitationRevoked: "workspaces.audit.action.invitation_revoked",
264
+ auditActionInvitationDeclined: "workspaces.audit.action.invitation_declined",
265
+ auditActionAccountCreatedByInvitation: "workspaces.audit.action.account_created_by_invitation",
266
+ auditActionMemberJoined: "workspaces.audit.action.member_joined",
267
+ auditActionMemberProvisioned: "workspaces.audit.action.member_provisioned",
268
+ auditActionMemberRemoved: "workspaces.audit.action.member_removed",
269
+ auditActionMemberRoleChanged: "workspaces.audit.action.member_role_changed",
270
+ auditActionMemberSuspended: "workspaces.audit.action.member_suspended",
271
+ auditActionMemberUnsuspended: "workspaces.audit.action.member_unsuspended",
272
+ auditActionDeleted: "workspaces.audit.action.deleted",
75
273
  // Invite accept flow (org-program §B4 — InviteAcceptFlow headless +
76
274
  // InviteAcceptPage default skin), one key per flow screen.
77
275
  inviteLoading: "workspaces.invite.loading",
@@ -80,12 +278,16 @@ export const WORKSPACES_I18N_KEYS = {
80
278
  inviteEmailLine: "workspaces.invite.emailLine",
81
279
  inviteJoinCta: "workspaces.invite.joinCta",
82
280
  inviteDeclineCta: "workspaces.invite.declineCta",
281
+ inviteDeclineConfirm: "workspaces.invite.declineConfirm",
282
+ inviteDeclineConfirmBody: "workspaces.invite.declineConfirmBody",
83
283
  inviteAccepted: "workspaces.invite.accepted",
84
284
  inviteDeclined: "workspaces.invite.declined",
85
285
  inviteUnavailableExpired: "workspaces.invite.unavailable.expired",
86
286
  inviteUnavailableRevoked: "workspaces.invite.unavailable.revoked",
87
287
  inviteUnavailableAccepted: "workspaces.invite.unavailable.accepted",
88
288
  inviteUnavailableDeclined: "workspaces.invite.unavailable.declined",
289
+ inviteUnavailableNextStep: "workspaces.invite.unavailable.next_step",
290
+ inviteExitCta: "workspaces.invite.exitCta",
89
291
  inviteWrongAccount: "workspaces.invite.wrongAccount",
90
292
  inviteWrongAccountHint: "workspaces.invite.wrongAccountHint",
91
293
  inviteSwitchAccountCta: "workspaces.invite.switchAccountCta",
@@ -98,6 +300,26 @@ export const WORKSPACES_I18N_KEYS = {
98
300
  inviteRetryCta: "workspaces.invite.retryCta",
99
301
  inviteBasicDataTitle: "workspaces.invite.basicDataTitle",
100
302
  inviteBasicDataContinueCta: "workspaces.invite.basicDataContinueCta",
303
+ inviteBlockedBusy: "workspaces.invite.blocked.busy",
304
+ /**
305
+ * A workspace-scoped screen mounted from the nav manifest, with no active
306
+ * workspace to be about. The active workspace is runtime state (the
307
+ * selection the container writes), not a route param, so "there is none
308
+ * yet" is a state every such screen can reach — and it is drawn, never
309
+ * blank. Two different sentences, because they are two different
310
+ * situations: nothing is SELECTED vs the person belongs to nothing.
311
+ */
312
+ activeChooseTitle: "workspaces.active.choose.title",
313
+ activeChooseHint: "workspaces.active.choose.hint",
314
+ activeNoneTitle: "workspaces.active.none.title",
315
+ activeNoneHint: "workspaces.active.none.hint",
316
+ // Nav manifest labels (the scripted-fullstack nav contract)
317
+ navWorkspaces: "workspaces.nav.workspaces",
318
+ navSettings: "workspaces.nav.settings",
319
+ navMembers: "workspaces.nav.members",
320
+ navInvitations: "workspaces.nav.invitations",
321
+ navAudit: "workspaces.nav.audit",
322
+ navInvite: "workspaces.nav.invite",
101
323
  };
102
324
  /**
103
325
  * English fallback bundle for workspaces-react UI keys + backend error codes.
@@ -112,6 +334,11 @@ export const workspacesI18nBundleEn = {
112
334
  // workspaces-react UI
113
335
  "workspaces.error.unknown": "Something went wrong. Please try again.",
114
336
  "workspaces.retry": "Try again",
337
+ "workspaces.dialog.close": "Close",
338
+ "workspaces.cancel": "Cancel",
339
+ "workspaces.pager.prev": "Previous",
340
+ "workspaces.pager.next": "Next",
341
+ "workspaces.pager.position": "Page {page}",
115
342
  "workspaces.list.loading": "Loading workspaces…",
116
343
  "workspaces.list.empty": "No workspaces yet.",
117
344
  "workspaces.list.load_failed": "We could not load your workspaces. This is a problem on our side, not a sign that you have none.",
@@ -120,7 +347,8 @@ export const workspacesI18nBundleEn = {
120
347
  "workspaces.members.loading": "Loading members…",
121
348
  "workspaces.members.empty": "No members yet.",
122
349
  "workspaces.members.load_failed": "We could not load the member list.",
123
- "workspaces.roles.load_failed": "We could not load the role list, so the role picker is empty. It is not a workspace without roles.",
350
+ "workspaces.roles.load_failed": "We could not load the role list, so roles cannot be changed right now. This does not mean the workspace has no roles.",
351
+ "workspaces.roles.empty": "This installation defines no roles, so there is nothing to choose from.",
124
352
  "workspaces.members.invite": "Invite",
125
353
  "workspaces.members.inviting": "Inviting…",
126
354
  "workspaces.members.update_role": "Change role",
@@ -133,20 +361,103 @@ export const workspacesI18nBundleEn = {
133
361
  "workspaces.settings.field.name": "Workspace name",
134
362
  "workspaces.settings.field.slug": "URL slug",
135
363
  "workspaces.settings.field.type": "Type",
364
+ "workspaces.settings.type.personal": "Personal",
365
+ "workspaces.settings.type.work": "Work",
136
366
  "workspaces.settings.save": "Save changes",
137
- "workspaces.settings.blocked.not_owner": "Only the workspace owner can change these settings.",
367
+ "workspaces.settings.blocked.cannot_manage": "Your role cannot change this workspace's settings.",
138
368
  "workspaces.settings.blocked.name_required": "Enter a workspace name.",
369
+ "workspaces.settings.blocked.unchanged": "Nothing has changed yet.",
139
370
  "workspaces.settings.saving": "Saving…",
140
371
  "workspaces.settings.danger_zone.title": "Danger zone",
141
372
  "workspaces.settings.danger_zone.delete": "Delete workspace",
142
373
  "workspaces.settings.danger_zone.delete_confirm": "Delete this workspace? This can't be undone.",
374
+ "workspaces.settings.danger_zone.delete_confirm_body": "Everyone loses access immediately. Other services keep what they hold for this workspace under their own retention rules.",
375
+ "workspaces.settings.danger_zone.blocked": "This workspace cannot be deleted.",
376
+ "workspaces.settings.security.title": "Security",
377
+ "workspaces.settings.security.subtitle": "Rules everyone in this workspace has to meet.",
378
+ "workspaces.settings.security.require_mfa": "Require two-factor authentication",
379
+ "workspaces.settings.security.require_mfa_hint": "Members without a confirmed second factor are not admitted until they add one.",
380
+ "workspaces.settings.security.policies_label": "First-login steps for accounts this workspace creates",
381
+ "workspaces.settings.security.policies_hint": "Independent demands, not alternatives — an organization may ask for both.",
382
+ "workspaces.settings.security.policy.password_change": "Change the password",
383
+ "workspaces.settings.security.policy.mfa_enroll": "Set up two-factor authentication",
384
+ "workspaces.settings.security.save": "Save security settings",
385
+ "workspaces.settings.security.saving": "Saving…",
386
+ "workspaces.settings.security.blocked.capability": "Your role cannot change security settings.",
387
+ "workspaces.settings.security.step_up_notice": "You will be asked to confirm your identity before this is saved.",
388
+ "workspaces.settings.security.mfa.status_title": "Enforcement",
389
+ "workspaces.settings.security.mfa.state_label": "State",
390
+ "workspaces.settings.security.mfa.state.pending": "Waiting for the first check",
391
+ "workspaces.settings.security.mfa.state.enforcing": "Checking members",
392
+ "workspaces.settings.security.mfa.state.enforced": "In force",
393
+ "workspaces.settings.security.mfa.state.failed": "The last check failed",
394
+ "workspaces.settings.security.mfa.state.other": "Unrecognized state ({state})",
395
+ "workspaces.settings.security.mfa.checked_count": "{count} members checked",
396
+ "workspaces.settings.security.mfa.checked_count.one": "{count} member checked",
397
+ "workspaces.settings.security.mfa.checked_count.other": "{count} members checked",
398
+ "workspaces.settings.security.mfa.noncompliant_count": "{count} suspended for having no second factor",
399
+ "workspaces.settings.security.mfa.noncompliant_count.one": "{count} member suspended for having no second factor",
400
+ "workspaces.settings.security.mfa.noncompliant_count.other": "{count} members suspended for having no second factor",
401
+ "workspaces.settings.security.mfa.unverified_count": "{count} still unverified",
402
+ "workspaces.settings.security.mfa.unverified_count.one": "{count} member still unverified",
403
+ "workspaces.settings.security.mfa.unverified_count.other": "{count} members still unverified",
404
+ "workspaces.settings.security.mfa.attempts_count": "{count} checks so far",
405
+ "workspaces.settings.security.mfa.attempts_count.one": "{count} check so far",
406
+ "workspaces.settings.security.mfa.attempts_count.other": "{count} checks so far",
407
+ "workspaces.settings.security.mfa.last_attempt": "Last check {date}",
408
+ "workspaces.settings.security.mfa.completed_at": "Fully covered since {date}",
409
+ "workspaces.settings.security.mfa.last_error": "Last error: {error}",
410
+ "workspaces.settings.security.mfa.unverified_hint": "Unverified members are not admitted while the policy is on. Ask them to add a second factor — the number to get to zero is above.",
411
+ "workspaces.settings.security.mfa.off": "Two-factor authentication is not required in this workspace.",
412
+ "workspaces.settings.security.mfa.no_status_yet": "Two-factor authentication is required here. No check has run yet, so nobody has been confirmed.",
143
413
  "workspaces.members.title": "Members",
144
414
  "workspaces.members.subtitle": "Manage who has access to this workspace.",
415
+ "workspaces.members.count": "{count} members",
416
+ "workspaces.members.count.one": "{count} member",
417
+ "workspaces.members.count.other": "{count} members",
418
+ "workspaces.members.joined": "Joined {date}",
419
+ "workspaces.members.last_seen": "Last seen {date}",
420
+ "workspaces.members.last_seen_never": "Has not opened this workspace yet",
421
+ "workspaces.members.search_placeholder": "Search by name or email",
422
+ "workspaces.members.role_picker_label": "Role of {member}",
423
+ "workspaces.members.blocked.read_only": "You can see who is here, but not change it.",
424
+ "workspaces.members.mfa_label": "Two-factor",
425
+ "workspaces.members.mfa.compliant": "Confirmed",
426
+ "workspaces.members.mfa.noncompliant": "Missing",
427
+ "workspaces.members.mfa.unknown": "Not checked yet",
428
+ "workspaces.members.suspended": "Suspended",
429
+ "workspaces.members.suspended.no_mfa": "Suspended until a second factor is confirmed.",
430
+ "workspaces.members.provisioned": "Created by an admin",
145
431
  "workspaces.members.invite_dialog.title": "Invite members",
146
432
  "workspaces.members.invite_dialog.emails_label": "Emails",
147
433
  "workspaces.members.invite_dialog.emails_placeholder": "Type an email and press Enter",
148
434
  "workspaces.members.invite_dialog.role_label": "Role",
435
+ "workspaces.members.invite_dialog.name_label": "Name (optional)",
436
+ "workspaces.members.invite_dialog.name_placeholder": "Shown until they set their own",
437
+ "workspaces.members.invite_dialog.submit": "Send invitations",
438
+ "workspaces.members.invite_dialog.blocked.no_emails": "Enter at least one email address.",
439
+ "workspaces.members.invite_dialog.blocked.bad_email": "{email} is not an email address.",
149
440
  "workspaces.members.remove_confirm": "Remove this member?",
441
+ "workspaces.members.remove_confirm_body": "{member} loses access to this workspace right away. You can invite them again later.",
442
+ "workspaces.members.remove.blocked.last_owner": "This is the workspace's only owner. Give someone else the owner role first.",
443
+ "workspaces.members.remove.blocked.self": "This is you. Ask another owner or admin to remove you from the workspace.",
444
+ "workspaces.members.reset_password": "Reset password",
445
+ "workspaces.members.reset_password.blocked.self": "This is you. Change your own password in your account settings — this acts on somebody else's account.",
446
+ "workspaces.members.reset_password_dialog.title": "Reset the password of {member}?",
447
+ "workspaces.members.reset_password_dialog.body": "Their current password stops working straight away, and they are told you did it. The letter never carries the new password.",
448
+ "workspaces.members.reset_password_dialog.step_up": "You will be asked to confirm it is you before this goes through.",
449
+ "workspaces.members.reset_password_dialog.submit": "Reset password",
450
+ "workspaces.members.reset_password_dialog.done": "{member} has a new password.",
451
+ "workspaces.members.reset_password_dialog.generated": "One-time password",
452
+ "workspaces.members.reset_password_dialog.generated_hint": "Shown once and never again. Hand it over through a channel you trust; they set their own the first time they sign in.",
453
+ "workspaces.members.reset_password_dialog.not_notified": "There was no channel to tell them on, so tell them yourself.",
454
+ "workspaces.members.rename": "Rename",
455
+ "workspaces.members.rename_dialog.title": "Correct the name",
456
+ "workspaces.members.rename_dialog.label": "Display name",
457
+ "workspaces.members.rename_dialog.placeholder": "Leave empty to clear the name",
458
+ "workspaces.members.rename_dialog.hint": "This is the person's name across the product, not a note kept in this workspace.",
459
+ "workspaces.members.rename_dialog.submit": "Save name",
460
+ "workspaces.members.rename_dialog.blocked.unchanged": "Change the name first.",
150
461
  "workspaces.members.role.owner": "Owner",
151
462
  "workspaces.members.role.admin": "Admin",
152
463
  "workspaces.members.role.member": "Member",
@@ -156,6 +467,84 @@ export const workspacesI18nBundleEn = {
156
467
  "workspaces.role.admin": "Admin",
157
468
  "workspaces.role.member": "Member",
158
469
  "workspaces.role.viewer": "Viewer",
470
+ "workspaces.role.rank_caption": "Rank {rank}",
471
+ // Workspaces page
472
+ "workspaces.page.title": "Workspaces",
473
+ "workspaces.page.subtitle": "Every workspace you belong to.",
474
+ "workspaces.list.count": "{count} workspaces",
475
+ "workspaces.list.count.one": "{count} workspace",
476
+ "workspaces.list.count.other": "{count} workspaces",
477
+ "workspaces.list.member_count": "{count} members",
478
+ "workspaces.list.member_count.one": "{count} member",
479
+ "workspaces.list.member_count.other": "{count} members",
480
+ "workspaces.list.owner_line": "Owned by {owner}",
481
+ "workspaces.list.your_role": "Your role",
482
+ "workspaces.list.open": "Open",
483
+ "workspaces.list.preferred": "Home",
484
+ "workspaces.list.set_preferred": "Make home",
485
+ "workspaces.list.clear_preferred": "Clear home",
486
+ "workspaces.list.empty_hint": "Create one to invite people and keep your work together.",
487
+ "workspaces.list.guest_notice": "You are here as a guest. Guests can open what they were sent, but do not belong to a workspace.",
488
+ "workspaces.list.instance_closed": "Ask whoever runs this installation for an invitation.",
489
+ "workspaces.list.create_dialog.title": "New workspace",
490
+ "workspaces.list.create_dialog.name_label": "Name",
491
+ "workspaces.list.create_dialog.name_placeholder": "e.g. Acme Engineering",
492
+ "workspaces.list.create_dialog.submit": "Create workspace",
493
+ "workspaces.list.create_dialog.blocked.no_name": "Enter a name.",
494
+ "workspaces.list.blocked.create_policy": "This installation only lets its owner create workspaces.",
495
+ // Invitation administration
496
+ "workspaces.invitations.title": "Invitations",
497
+ "workspaces.invitations.subtitle": "Who has been invited and has not joined yet.",
498
+ "workspaces.invitations.count": "{count} invitations",
499
+ "workspaces.invitations.count.one": "{count} invitation",
500
+ "workspaces.invitations.count.other": "{count} invitations",
501
+ "workspaces.invitations.empty": "Nobody is waiting on an invitation.",
502
+ "workspaces.invitations.expires_label": "Expires",
503
+ "workspaces.invitations.sent_label": "Last sent",
504
+ "workspaces.invitations.sent_never": "No letter sent yet",
505
+ "workspaces.invitations.search_placeholder": "Search by email",
506
+ "workspaces.invitations.filter_label": "Show",
507
+ "workspaces.invitations.filter.pending": "Waiting",
508
+ "workspaces.invitations.filter.never_accepted": "Never accepted",
509
+ "workspaces.invitations.filter.all": "All",
510
+ "workspaces.invitations.status.pending": "Waiting",
511
+ "workspaces.invitations.status.accepted": "Accepted",
512
+ "workspaces.invitations.status.declined": "Declined",
513
+ "workspaces.invitations.status.revoked": "Revoked",
514
+ "workspaces.invitations.status.expired": "Expired",
515
+ "workspaces.invitations.resend": "Resend",
516
+ "workspaces.invitations.resend_confirm": "Send the invitation again?",
517
+ "workspaces.invitations.resend_confirm_body": "A fresh link goes out to {email} and the earlier one stops working.",
518
+ "workspaces.invitations.revoke": "Revoke",
519
+ "workspaces.invitations.revoke_confirm": "Withdraw this invitation?",
520
+ "workspaces.invitations.revoke_confirm_body": "The link to {email} stops working. Nobody is told; you can invite them again later.",
521
+ "workspaces.invitations.rename": "Rename",
522
+ "workspaces.invitations.rename_dialog.title": "Correct the invitee's name",
523
+ "workspaces.invitations.blocked.terminal": "This invitation was already accepted, declined, revoked or expired.",
524
+ "workspaces.invitations.blocked.resend_terminal": "Only a waiting or expired invitation can be sent again.",
525
+ "workspaces.invitations.blocked.row_closed": "This invitation is closed — there is nothing left to do with it.",
526
+ "workspaces.invitations.blocked.row_resend_only": "This invitation has run out. Sending it again is the only thing left to do.",
527
+ // Membership history
528
+ "workspaces.audit.title": "Membership history",
529
+ "workspaces.audit.subtitle": "Who let this person in, who took them out, and when.",
530
+ "workspaces.audit.empty": "Nothing has happened here yet.",
531
+ "workspaces.audit.filter_label": "Event",
532
+ "workspaces.audit.filter.all": "All events",
533
+ "workspaces.audit.actor_unknown": "The system",
534
+ "workspaces.audit.by": "by {actor}",
535
+ "workspaces.audit.role_line": "Role: {role}",
536
+ "workspaces.audit.action.invitation_created": "Invitation sent",
537
+ "workspaces.audit.action.invitation_accepted": "Invitation accepted",
538
+ "workspaces.audit.action.invitation_revoked": "Invitation revoked",
539
+ "workspaces.audit.action.invitation_declined": "Invitation declined",
540
+ "workspaces.audit.action.account_created_by_invitation": "Account created from an invitation",
541
+ "workspaces.audit.action.member_joined": "Joined the workspace",
542
+ "workspaces.audit.action.member_provisioned": "Added by an admin",
543
+ "workspaces.audit.action.member_removed": "Removed from the workspace",
544
+ "workspaces.audit.action.member_role_changed": "Role changed",
545
+ "workspaces.audit.action.member_suspended": "Access suspended",
546
+ "workspaces.audit.action.member_unsuspended": "Access restored",
547
+ "workspaces.audit.action.deleted": "Workspace deleted",
159
548
  // Invite accept flow (org-program §B4)
160
549
  "workspaces.invite.loading": "Loading invitation…",
161
550
  "workspaces.invite.acceptTitle": "Join {workspace}",
@@ -163,12 +552,16 @@ export const workspacesI18nBundleEn = {
163
552
  "workspaces.invite.emailLine": "Invitation for {email}",
164
553
  "workspaces.invite.joinCta": "Join workspace",
165
554
  "workspaces.invite.declineCta": "Decline",
555
+ "workspaces.invite.declineConfirm": "Decline this invitation?",
556
+ "workspaces.invite.declineConfirmBody": "The workspace is told you said no and the link stops working. Ask for a new invitation if you change your mind.",
166
557
  "workspaces.invite.accepted": "You've joined {workspace}.",
167
558
  "workspaces.invite.declined": "Invitation declined.",
168
559
  "workspaces.invite.unavailable.expired": "This invitation has expired. Ask for a new one.",
169
560
  "workspaces.invite.unavailable.revoked": "This invitation was revoked.",
170
561
  "workspaces.invite.unavailable.accepted": "This invitation has already been used.",
171
562
  "workspaces.invite.unavailable.declined": "This invitation was declined.",
563
+ "workspaces.invite.unavailable.next_step": "Ask an administrator of {workspace} to send you a new invitation.",
564
+ "workspaces.invite.exitCta": "Go to your workspaces",
172
565
  "workspaces.invite.wrongAccount": "This invitation is for a different account",
173
566
  "workspaces.invite.wrongAccountHint": "You're signed in as {email}, but the invitation was sent to {invited}. Switch accounts to continue.",
174
567
  "workspaces.invite.switchAccountCta": "Switch account",
@@ -181,6 +574,19 @@ export const workspacesI18nBundleEn = {
181
574
  "workspaces.invite.retryCta": "Try again",
182
575
  "workspaces.invite.basicDataTitle": "Set up your profile",
183
576
  "workspaces.invite.basicDataContinueCta": "Continue",
577
+ "workspaces.invite.blocked.busy": "Finishing the step already under way…",
578
+ // A workspace-scoped screen with no active workspace
579
+ "workspaces.active.choose.title": "Choose a workspace",
580
+ "workspaces.active.choose.hint": "This screen manages one workspace at a time. Pick one on the Workspaces page and come back.",
581
+ "workspaces.active.none.title": "You are not in a workspace yet",
582
+ "workspaces.active.none.hint": "Create one, or ask an owner to invite you — then there will be something to manage here.",
583
+ // Nav manifest labels
584
+ "workspaces.nav.workspaces": "Workspaces",
585
+ "workspaces.nav.settings": "Workspace",
586
+ "workspaces.nav.members": "Members",
587
+ "workspaces.nav.invitations": "Invitations",
588
+ "workspaces.nav.audit": "History",
589
+ "workspaces.nav.invite": "Invitation",
184
590
  };
185
591
  /**
186
592
  * Register workspaces-react's key bundle into a core i18n engine (call once at
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"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"}
package/dist/i18n/ru.d.ts CHANGED
@@ -11,9 +11,14 @@ export { workspacesErrorBundleRu } from "./generated/errors.ru.gen.js";
11
11
  * error texts (from stapel-workspaces's `translations/errors.ru.json`
12
12
  * catalog, seeded from the curated stapel-translate corpus — `pnpm
13
13
  * gen:errors`) are spread first for coverage by construction; the
14
- * hand-written ru UI copy for the pair-owned {@link WORKSPACES_I18N_KEYS}
15
- * follows. Override any key by registering a host bundle AFTER this one
14
+ * hand-written ru UI copy for the pair-owned `WORKSPACES_I18N_KEYS` follows.
15
+ * Override any key by registering a host bundle AFTER this one
16
16
  * (merge-priority convention — see keys.ts).
17
+ *
18
+ * PLURALS. Russian takes four CLDR categories where English takes two, so a
19
+ * `*.count` family ships `one`/`few`/`many`/`other` here and `one`/`other`
20
+ * there. That asymmetry is the translation being right, not a key being
21
+ * wrong — `useTPlural` picks the category from the reader's locale.
17
22
  */
18
23
  export declare const workspacesI18nBundleRu: I18nDictionary;
19
24
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ru.d.ts","sourceRoot":"","sources":["../../src/i18n/ru.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,sBAAsB,EAAE,cAmFpC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAGjE"}
1
+ {"version":3,"file":"ru.d.ts","sourceRoot":"","sources":["../../src/i18n/ru.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,sBAAsB,EAAE,cA4UpC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAGjE"}