@stapel/workspaces-react 0.12.0 → 0.14.0

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 (77) hide show
  1. package/CHANGELOG.md +84 -0
  2. package/MODULE.md +5 -1
  3. package/README.md +22 -0
  4. package/dist/api/generated/schema.d.ts +13 -8
  5. package/dist/api/generated/schema.d.ts.map +1 -1
  6. package/dist/default/MembersManager.d.ts.map +1 -1
  7. package/dist/default/MembersManager.js +20 -6
  8. package/dist/default/MembersManager.js.map +1 -1
  9. package/dist/default/WorkspaceSettings.d.ts.map +1 -1
  10. package/dist/default/WorkspaceSettings.js +7 -3
  11. package/dist/default/WorkspaceSettings.js.map +1 -1
  12. package/dist/headless/Can.d.ts +8 -0
  13. package/dist/headless/Can.d.ts.map +1 -1
  14. package/dist/headless/Can.js +5 -1
  15. package/dist/headless/Can.js.map +1 -1
  16. package/dist/headless/Members.d.ts +14 -13
  17. package/dist/headless/Members.d.ts.map +1 -1
  18. package/dist/headless/Members.js +4 -12
  19. package/dist/headless/Members.js.map +1 -1
  20. package/dist/headless/RoleSelect.d.ts +15 -9
  21. package/dist/headless/RoleSelect.d.ts.map +1 -1
  22. package/dist/headless/RoleSelect.js +12 -8
  23. package/dist/headless/RoleSelect.js.map +1 -1
  24. package/dist/headless/WorkspaceList.d.ts +25 -10
  25. package/dist/headless/WorkspaceList.d.ts.map +1 -1
  26. package/dist/headless/WorkspaceList.js +14 -5
  27. package/dist/headless/WorkspaceList.js.map +1 -1
  28. package/dist/i18n/es.d.ts +34 -0
  29. package/dist/i18n/es.d.ts.map +1 -0
  30. package/dist/i18n/es.js +43 -0
  31. package/dist/i18n/es.js.map +1 -0
  32. package/dist/i18n/generated/errors.es.gen.d.ts +9 -0
  33. package/dist/i18n/generated/errors.es.gen.d.ts.map +1 -0
  34. package/dist/i18n/generated/errors.es.gen.js +76 -0
  35. package/dist/i18n/generated/errors.es.gen.js.map +1 -0
  36. package/dist/i18n/generated/errors.gen.d.ts +6 -0
  37. package/dist/i18n/generated/errors.gen.d.ts.map +1 -1
  38. package/dist/i18n/generated/errors.gen.js +3 -0
  39. package/dist/i18n/generated/errors.gen.js.map +1 -1
  40. package/dist/i18n/generated/errors.ru.gen.d.ts.map +1 -1
  41. package/dist/i18n/generated/errors.ru.gen.js +1 -0
  42. package/dist/i18n/generated/errors.ru.gen.js.map +1 -1
  43. package/dist/i18n/keys.d.ts +13 -0
  44. package/dist/i18n/keys.d.ts.map +1 -1
  45. package/dist/i18n/keys.js +23 -0
  46. package/dist/i18n/keys.js.map +1 -1
  47. package/dist/i18n/ru.d.ts.map +1 -1
  48. package/dist/i18n/ru.js +7 -0
  49. package/dist/i18n/ru.js.map +1 -1
  50. package/dist/model/queries.d.ts +13 -7
  51. package/dist/model/queries.d.ts.map +1 -1
  52. package/dist/model/queries.js +9 -9
  53. package/dist/model/queries.js.map +1 -1
  54. package/dist/model/selection.d.ts +20 -7
  55. package/dist/model/selection.d.ts.map +1 -1
  56. package/dist/model/selection.js +32 -12
  57. package/dist/model/selection.js.map +1 -1
  58. package/llms.txt +3 -3
  59. package/manifest.json +16 -3
  60. package/package.json +12 -3
  61. package/src/analytics/generated/events.json +1 -1
  62. package/src/api/generated/schema.ts +13 -8
  63. package/src/default/MembersManager.tsx +69 -16
  64. package/src/default/WorkspaceSettings.tsx +41 -5
  65. package/src/headless/Can.tsx +13 -1
  66. package/src/headless/Members.tsx +18 -26
  67. package/src/headless/RoleSelect.tsx +17 -14
  68. package/src/headless/WorkspaceList.tsx +31 -14
  69. package/src/i18n/es.ts +47 -0
  70. package/src/i18n/generated/errors.es.gen.ts +82 -0
  71. package/src/i18n/generated/errors.gen.ts +3 -0
  72. package/src/i18n/generated/errors.json +7 -0
  73. package/src/i18n/generated/errors.ru.gen.ts +1 -0
  74. package/src/i18n/keys.ts +26 -0
  75. package/src/i18n/ru.ts +10 -0
  76. package/src/model/queries.ts +26 -16
  77. package/src/model/selection.tsx +73 -21
package/dist/i18n/keys.js CHANGED
@@ -10,13 +10,26 @@ import { workspacesErrorBundleEn } from "./generated/errors.gen.js";
10
10
  */
11
11
  export const WORKSPACES_I18N_KEYS = {
12
12
  unknownError: "workspaces.error.unknown",
13
+ // Retry affordance beside a stated failure — an error a person cannot act
14
+ // on is only half the message.
15
+ retry: "workspaces.retry",
13
16
  // Workspace list (WorkspaceList headless)
14
17
  listLoading: "workspaces.list.loading",
15
18
  listEmpty: "workspaces.list.empty",
19
+ /**
20
+ * "We could not load your workspaces" — the sentence whose ABSENCE was the
21
+ * 2026-08-09 incident. Deliberately about US failing to load, never about
22
+ * the person having none, and never a 404's "no longer available" (which
23
+ * asserts the thing does not exist — tracker #211).
24
+ */
25
+ listLoadFailed: "workspaces.list.load_failed",
16
26
  listCreate: "workspaces.list.create",
17
27
  listCreating: "workspaces.list.creating",
18
28
  // Members (Members headless)
19
29
  membersLoading: "workspaces.members.loading",
30
+ membersEmpty: "workspaces.members.empty",
31
+ membersLoadFailed: "workspaces.members.load_failed",
32
+ rolesLoadFailed: "workspaces.roles.load_failed",
20
33
  membersInvite: "workspaces.members.invite",
21
34
  membersInviting: "workspaces.members.inviting",
22
35
  membersUpdateRole: "workspaces.members.update_role",
@@ -32,6 +45,9 @@ export const WORKSPACES_I18N_KEYS = {
32
45
  fieldSlug: "workspaces.settings.field.slug",
33
46
  fieldType: "workspaces.settings.field.type",
34
47
  save: "workspaces.settings.save",
48
+ // Why a settings control is switched off (core's `useActionGate`).
49
+ blockedNotOwner: "workspaces.settings.blocked.not_owner",
50
+ blockedNameRequired: "workspaces.settings.blocked.name_required",
35
51
  saving: "workspaces.settings.saving",
36
52
  dangerZoneTitle: "workspaces.settings.danger_zone.title",
37
53
  deleteWorkspace: "workspaces.settings.danger_zone.delete",
@@ -95,11 +111,16 @@ export const workspacesI18nBundleEn = {
95
111
  ...workspacesErrorBundleEn,
96
112
  // workspaces-react UI
97
113
  "workspaces.error.unknown": "Something went wrong. Please try again.",
114
+ "workspaces.retry": "Try again",
98
115
  "workspaces.list.loading": "Loading workspaces…",
99
116
  "workspaces.list.empty": "No workspaces yet.",
117
+ "workspaces.list.load_failed": "We could not load your workspaces. This is a problem on our side, not a sign that you have none.",
100
118
  "workspaces.list.create": "Create workspace",
101
119
  "workspaces.list.creating": "Creating…",
102
120
  "workspaces.members.loading": "Loading members…",
121
+ "workspaces.members.empty": "No members yet.",
122
+ "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.",
103
124
  "workspaces.members.invite": "Invite",
104
125
  "workspaces.members.inviting": "Inviting…",
105
126
  "workspaces.members.update_role": "Change role",
@@ -113,6 +134,8 @@ export const workspacesI18nBundleEn = {
113
134
  "workspaces.settings.field.slug": "URL slug",
114
135
  "workspaces.settings.field.type": "Type",
115
136
  "workspaces.settings.save": "Save changes",
137
+ "workspaces.settings.blocked.not_owner": "Only the workspace owner can change these settings.",
138
+ "workspaces.settings.blocked.name_required": "Enter a workspace name.",
116
139
  "workspaces.settings.saving": "Saving…",
117
140
  "workspaces.settings.danger_zone.title": "Danger zone",
118
141
  "workspaces.settings.danger_zone.delete": "Delete workspace",
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,YAAY,EAAE,0BAA0B;IACxC,0CAA0C;IAC1C,WAAW,EAAE,yBAAyB;IACtC,SAAS,EAAE,uBAAuB;IAClC,UAAU,EAAE,wBAAwB;IACpC,YAAY,EAAE,0BAA0B;IACxC,6BAA6B;IAC7B,cAAc,EAAE,4BAA4B;IAC5C,aAAa,EAAE,2BAA2B;IAC1C,eAAe,EAAE,6BAA6B;IAC9C,iBAAiB,EAAE,gCAAgC;IACnD,aAAa,EAAE,2BAA2B;IAC1C,gDAAgD;IAChD,YAAY,EAAE,0BAA0B;IACxC,eAAe,EAAE,6BAA6B;IAC9C,cAAc,EAAE,4BAA4B;IAC5C,wDAAwD;IACxD,aAAa,EAAE,2BAA2B;IAC1C,gBAAgB,EAAE,8BAA8B;IAChD,SAAS,EAAE,gCAAgC;IAC3C,SAAS,EAAE,gCAAgC;IAC3C,SAAS,EAAE,gCAAgC;IAC3C,IAAI,EAAE,0BAA0B;IAChC,MAAM,EAAE,4BAA4B;IACpC,eAAe,EAAE,uCAAuC;IACxD,eAAe,EAAE,wCAAwC;IACzD,sBAAsB,EAAE,gDAAgD;IACxE,kDAAkD;IAClD,YAAY,EAAE,0BAA0B;IACxC,eAAe,EAAE,6BAA6B;IAC9C,wBAAwB,EAAE,wCAAwC;IAClE,wBAAwB,EAAE,+CAA+C;IACzE,8BAA8B,EAAE,qDAAqD;IACrF,sBAAsB,EAAE,6CAA6C;IACrE,oBAAoB,EAAE,mCAAmC;IACzD,SAAS,EAAE,+BAA+B;IAC1C,SAAS,EAAE,+BAA+B;IAC1C,UAAU,EAAE,gCAAgC;IAC5C,UAAU,EAAE,gCAAgC;IAC5C,uEAAuE;IACvE,4EAA4E;IAC5E,sEAAsE;IACtE,qEAAqE;IACrE,cAAc,EAAE,uBAAuB;IACvC,cAAc,EAAE,uBAAuB;IACvC,eAAe,EAAE,wBAAwB;IACzC,eAAe,EAAE,wBAAwB;IACzC,oEAAoE;IACpE,2DAA2D;IAC3D,aAAa,EAAE,2BAA2B;IAC1C,iBAAiB,EAAE,+BAA+B;IAClD,cAAc,EAAE,4BAA4B;IAC5C,eAAe,EAAE,6BAA6B;IAC9C,aAAa,EAAE,2BAA2B;IAC1C,gBAAgB,EAAE,8BAA8B;IAChD,cAAc,EAAE,4BAA4B;IAC5C,cAAc,EAAE,4BAA4B;IAC5C,wBAAwB,EAAE,uCAAuC;IACjE,wBAAwB,EAAE,uCAAuC;IACjE,yBAAyB,EAAE,wCAAwC;IACnE,yBAAyB,EAAE,wCAAwC;IACnE,kBAAkB,EAAE,gCAAgC;IACpD,sBAAsB,EAAE,oCAAoC;IAC5D,sBAAsB,EAAE,oCAAoC;IAC5D,gBAAgB,EAAE,8BAA8B;IAChD,iBAAiB,EAAE,+BAA+B;IAClD,sBAAsB,EAAE,oCAAoC;IAC5D,cAAc,EAAE,4BAA4B;IAC5C,gBAAgB,EAAE,8BAA8B;IAChD,oBAAoB,EAAE,kCAAkC;IACxD,cAAc,EAAE,4BAA4B;IAC5C,oBAAoB,EAAE,kCAAkC;IACxD,0BAA0B,EAAE,wCAAwC;CAC5D,CAAC;AAKX;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAmB;IACpD,2EAA2E;IAC3E,GAAG,uBAAuB;IAE1B,sBAAsB;IACtB,0BAA0B,EAAE,yCAAyC;IACrE,yBAAyB,EAAE,qBAAqB;IAChD,uBAAuB,EAAE,oBAAoB;IAC7C,wBAAwB,EAAE,kBAAkB;IAC5C,0BAA0B,EAAE,WAAW;IACvC,4BAA4B,EAAE,kBAAkB;IAChD,2BAA2B,EAAE,QAAQ;IACrC,6BAA6B,EAAE,WAAW;IAC1C,gCAAgC,EAAE,aAAa;IAC/C,2BAA2B,EAAE,QAAQ;IACrC,0BAA0B,EAAE,mBAAmB;IAC/C,6BAA6B,EAAE,YAAY;IAC3C,4BAA4B,EAAE,8BAA8B;IAC5D,2BAA2B,EAAE,WAAW;IACxC,8BAA8B,EAAE,4BAA4B;IAC5D,gCAAgC,EAAE,gBAAgB;IAClD,gCAAgC,EAAE,UAAU;IAC5C,gCAAgC,EAAE,MAAM;IACxC,0BAA0B,EAAE,cAAc;IAC1C,4BAA4B,EAAE,SAAS;IACvC,uCAAuC,EAAE,aAAa;IACtD,wCAAwC,EAAE,kBAAkB;IAC5D,gDAAgD,EAAE,8CAA8C;IAChG,0BAA0B,EAAE,SAAS;IACrC,6BAA6B,EAAE,0CAA0C;IACzE,wCAAwC,EAAE,gBAAgB;IAC1D,+CAA+C,EAAE,QAAQ;IACzD,qDAAqD,EAAE,+BAA+B;IACtF,6CAA6C,EAAE,MAAM;IACrD,mCAAmC,EAAE,qBAAqB;IAC1D,+BAA+B,EAAE,OAAO;IACxC,+BAA+B,EAAE,OAAO;IACxC,gCAAgC,EAAE,QAAQ;IAC1C,gCAAgC,EAAE,QAAQ;IAE1C,qEAAqE;IACrE,uBAAuB,EAAE,OAAO;IAChC,uBAAuB,EAAE,OAAO;IAChC,wBAAwB,EAAE,QAAQ;IAClC,wBAAwB,EAAE,QAAQ;IAElC,uCAAuC;IACvC,2BAA2B,EAAE,qBAAqB;IAClD,+BAA+B,EAAE,kBAAkB;IACnD,4BAA4B,EAAE,gCAAgC;IAC9D,6BAA6B,EAAE,wBAAwB;IACvD,2BAA2B,EAAE,gBAAgB;IAC7C,8BAA8B,EAAE,SAAS;IACzC,4BAA4B,EAAE,4BAA4B;IAC1D,4BAA4B,EAAE,sBAAsB;IACpD,uCAAuC,EAAE,iDAAiD;IAC1F,uCAAuC,EAAE,8BAA8B;IACvE,wCAAwC,EAAE,wCAAwC;IAClF,wCAAwC,EAAE,+BAA+B;IACzE,gCAAgC,EAAE,4CAA4C;IAC9E,oCAAoC,EAClC,qGAAqG;IACvG,oCAAoC,EAAE,gBAAgB;IACtD,8BAA8B,EAAE,kCAAkC;IAClE,+BAA+B,EAC7B,yFAAyF;IAC3F,oCAAoC,EAAE,6BAA6B;IACnE,4BAA4B,EAAE,wBAAwB;IACtD,8BAA8B,EAAE,iBAAiB;IACjD,kCAAkC,EAAE,iCAAiC;IACrE,4BAA4B,EAAE,WAAW;IACzC,kCAAkC,EAAE,qBAAqB;IACzD,wCAAwC,EAAE,UAAU;CACrD,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAkB,EAAE,MAAM,GAAG,IAAI;IACtE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,YAAY,EAAE,0BAA0B;IACxC,0EAA0E;IAC1E,+BAA+B;IAC/B,KAAK,EAAE,kBAAkB;IACzB,0CAA0C;IAC1C,WAAW,EAAE,yBAAyB;IACtC,SAAS,EAAE,uBAAuB;IAClC;;;;;OAKG;IACH,cAAc,EAAE,6BAA6B;IAC7C,UAAU,EAAE,wBAAwB;IACpC,YAAY,EAAE,0BAA0B;IACxC,6BAA6B;IAC7B,cAAc,EAAE,4BAA4B;IAC5C,YAAY,EAAE,0BAA0B;IACxC,iBAAiB,EAAE,gCAAgC;IACnD,eAAe,EAAE,8BAA8B;IAC/C,aAAa,EAAE,2BAA2B;IAC1C,eAAe,EAAE,6BAA6B;IAC9C,iBAAiB,EAAE,gCAAgC;IACnD,aAAa,EAAE,2BAA2B;IAC1C,gDAAgD;IAChD,YAAY,EAAE,0BAA0B;IACxC,eAAe,EAAE,6BAA6B;IAC9C,cAAc,EAAE,4BAA4B;IAC5C,wDAAwD;IACxD,aAAa,EAAE,2BAA2B;IAC1C,gBAAgB,EAAE,8BAA8B;IAChD,SAAS,EAAE,gCAAgC;IAC3C,SAAS,EAAE,gCAAgC;IAC3C,SAAS,EAAE,gCAAgC;IAC3C,IAAI,EAAE,0BAA0B;IAChC,mEAAmE;IACnE,eAAe,EAAE,uCAAuC;IACxD,mBAAmB,EAAE,2CAA2C;IAChE,MAAM,EAAE,4BAA4B;IACpC,eAAe,EAAE,uCAAuC;IACxD,eAAe,EAAE,wCAAwC;IACzD,sBAAsB,EAAE,gDAAgD;IACxE,kDAAkD;IAClD,YAAY,EAAE,0BAA0B;IACxC,eAAe,EAAE,6BAA6B;IAC9C,wBAAwB,EAAE,wCAAwC;IAClE,wBAAwB,EAAE,+CAA+C;IACzE,8BAA8B,EAAE,qDAAqD;IACrF,sBAAsB,EAAE,6CAA6C;IACrE,oBAAoB,EAAE,mCAAmC;IACzD,SAAS,EAAE,+BAA+B;IAC1C,SAAS,EAAE,+BAA+B;IAC1C,UAAU,EAAE,gCAAgC;IAC5C,UAAU,EAAE,gCAAgC;IAC5C,uEAAuE;IACvE,4EAA4E;IAC5E,sEAAsE;IACtE,qEAAqE;IACrE,cAAc,EAAE,uBAAuB;IACvC,cAAc,EAAE,uBAAuB;IACvC,eAAe,EAAE,wBAAwB;IACzC,eAAe,EAAE,wBAAwB;IACzC,oEAAoE;IACpE,2DAA2D;IAC3D,aAAa,EAAE,2BAA2B;IAC1C,iBAAiB,EAAE,+BAA+B;IAClD,cAAc,EAAE,4BAA4B;IAC5C,eAAe,EAAE,6BAA6B;IAC9C,aAAa,EAAE,2BAA2B;IAC1C,gBAAgB,EAAE,8BAA8B;IAChD,cAAc,EAAE,4BAA4B;IAC5C,cAAc,EAAE,4BAA4B;IAC5C,wBAAwB,EAAE,uCAAuC;IACjE,wBAAwB,EAAE,uCAAuC;IACjE,yBAAyB,EAAE,wCAAwC;IACnE,yBAAyB,EAAE,wCAAwC;IACnE,kBAAkB,EAAE,gCAAgC;IACpD,sBAAsB,EAAE,oCAAoC;IAC5D,sBAAsB,EAAE,oCAAoC;IAC5D,gBAAgB,EAAE,8BAA8B;IAChD,iBAAiB,EAAE,+BAA+B;IAClD,sBAAsB,EAAE,oCAAoC;IAC5D,cAAc,EAAE,4BAA4B;IAC5C,gBAAgB,EAAE,8BAA8B;IAChD,oBAAoB,EAAE,kCAAkC;IACxD,cAAc,EAAE,4BAA4B;IAC5C,oBAAoB,EAAE,kCAAkC;IACxD,0BAA0B,EAAE,wCAAwC;CAC5D,CAAC;AAKX;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAmB;IACpD,2EAA2E;IAC3E,GAAG,uBAAuB;IAE1B,sBAAsB;IACtB,0BAA0B,EAAE,yCAAyC;IACrE,kBAAkB,EAAE,WAAW;IAC/B,yBAAyB,EAAE,qBAAqB;IAChD,uBAAuB,EAAE,oBAAoB;IAC7C,6BAA6B,EAC3B,kGAAkG;IACpG,wBAAwB,EAAE,kBAAkB;IAC5C,0BAA0B,EAAE,WAAW;IACvC,4BAA4B,EAAE,kBAAkB;IAChD,0BAA0B,EAAE,iBAAiB;IAC7C,gCAAgC,EAAE,oCAAoC;IACtE,8BAA8B,EAC5B,oGAAoG;IACtG,2BAA2B,EAAE,QAAQ;IACrC,6BAA6B,EAAE,WAAW;IAC1C,gCAAgC,EAAE,aAAa;IAC/C,2BAA2B,EAAE,QAAQ;IACrC,0BAA0B,EAAE,mBAAmB;IAC/C,6BAA6B,EAAE,YAAY;IAC3C,4BAA4B,EAAE,8BAA8B;IAC5D,2BAA2B,EAAE,WAAW;IACxC,8BAA8B,EAAE,4BAA4B;IAC5D,gCAAgC,EAAE,gBAAgB;IAClD,gCAAgC,EAAE,UAAU;IAC5C,gCAAgC,EAAE,MAAM;IACxC,0BAA0B,EAAE,cAAc;IAC1C,uCAAuC,EACrC,qDAAqD;IACvD,2CAA2C,EAAE,yBAAyB;IACtE,4BAA4B,EAAE,SAAS;IACvC,uCAAuC,EAAE,aAAa;IACtD,wCAAwC,EAAE,kBAAkB;IAC5D,gDAAgD,EAAE,8CAA8C;IAChG,0BAA0B,EAAE,SAAS;IACrC,6BAA6B,EAAE,0CAA0C;IACzE,wCAAwC,EAAE,gBAAgB;IAC1D,+CAA+C,EAAE,QAAQ;IACzD,qDAAqD,EAAE,+BAA+B;IACtF,6CAA6C,EAAE,MAAM;IACrD,mCAAmC,EAAE,qBAAqB;IAC1D,+BAA+B,EAAE,OAAO;IACxC,+BAA+B,EAAE,OAAO;IACxC,gCAAgC,EAAE,QAAQ;IAC1C,gCAAgC,EAAE,QAAQ;IAE1C,qEAAqE;IACrE,uBAAuB,EAAE,OAAO;IAChC,uBAAuB,EAAE,OAAO;IAChC,wBAAwB,EAAE,QAAQ;IAClC,wBAAwB,EAAE,QAAQ;IAElC,uCAAuC;IACvC,2BAA2B,EAAE,qBAAqB;IAClD,+BAA+B,EAAE,kBAAkB;IACnD,4BAA4B,EAAE,gCAAgC;IAC9D,6BAA6B,EAAE,wBAAwB;IACvD,2BAA2B,EAAE,gBAAgB;IAC7C,8BAA8B,EAAE,SAAS;IACzC,4BAA4B,EAAE,4BAA4B;IAC1D,4BAA4B,EAAE,sBAAsB;IACpD,uCAAuC,EAAE,iDAAiD;IAC1F,uCAAuC,EAAE,8BAA8B;IACvE,wCAAwC,EAAE,wCAAwC;IAClF,wCAAwC,EAAE,+BAA+B;IACzE,gCAAgC,EAAE,4CAA4C;IAC9E,oCAAoC,EAClC,qGAAqG;IACvG,oCAAoC,EAAE,gBAAgB;IACtD,8BAA8B,EAAE,kCAAkC;IAClE,+BAA+B,EAC7B,yFAAyF;IAC3F,oCAAoC,EAAE,6BAA6B;IACnE,4BAA4B,EAAE,wBAAwB;IACtD,8BAA8B,EAAE,iBAAiB;IACjD,kCAAkC,EAAE,iCAAiC;IACrE,4BAA4B,EAAE,WAAW;IACzC,kCAAkC,EAAE,qBAAqB;IACzD,wCAAwC,EAAE,UAAU;CACrD,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAkB,EAAE,MAAM,GAAG,IAAI;IACtE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;AACxD,CAAC"}
@@ -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,cAyEpC,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;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,sBAAsB,EAAE,cAmFpC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAGjE"}
package/dist/i18n/ru.js CHANGED
@@ -21,11 +21,16 @@ export const workspacesI18nBundleRu = {
21
21
  ...workspacesErrorBundleRu,
22
22
  // workspaces-react UI (hand-written ru mirror of the en copy in keys.ts)
23
23
  "workspaces.error.unknown": "Что-то пошло не так. Попробуйте ещё раз.",
24
+ "workspaces.retry": "Попробовать снова",
24
25
  "workspaces.list.loading": "Загрузка рабочих пространств…",
25
26
  "workspaces.list.empty": "Пока нет рабочих пространств.",
27
+ "workspaces.list.load_failed": "Не удалось загрузить ваши рабочие пространства. Это сбой на нашей стороне, а не признак того, что их у вас нет.",
26
28
  "workspaces.list.create": "Создать рабочее пространство",
27
29
  "workspaces.list.creating": "Создание…",
28
30
  "workspaces.members.loading": "Загрузка участников…",
31
+ "workspaces.members.empty": "Пока нет участников.",
32
+ "workspaces.members.load_failed": "Не удалось загрузить список участников.",
33
+ "workspaces.roles.load_failed": "Не удалось загрузить список ролей, поэтому выбор роли пуст. Это не рабочее пространство без ролей.",
29
34
  "workspaces.members.invite": "Пригласить",
30
35
  "workspaces.members.inviting": "Приглашение…",
31
36
  "workspaces.members.update_role": "Изменить роль",
@@ -39,6 +44,8 @@ export const workspacesI18nBundleRu = {
39
44
  "workspaces.settings.field.slug": "URL-идентификатор",
40
45
  "workspaces.settings.field.type": "Тип",
41
46
  "workspaces.settings.save": "Сохранить изменения",
47
+ "workspaces.settings.blocked.not_owner": "Менять эти настройки может только владелец рабочего пространства.",
48
+ "workspaces.settings.blocked.name_required": "Введите название рабочего пространства.",
42
49
  "workspaces.settings.saving": "Сохранение…",
43
50
  "workspaces.settings.danger_zone.title": "Опасная зона",
44
51
  "workspaces.settings.danger_zone.delete": "Удалить рабочее пространство",
@@ -1 +1 @@
1
- {"version":3,"file":"ru.js","sourceRoot":"","sources":["../../src/i18n/ru.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAmB;IACpD,uEAAuE;IACvE,GAAG,uBAAuB;IAE1B,yEAAyE;IACzE,0BAA0B,EAAE,0CAA0C;IACtE,yBAAyB,EAAE,+BAA+B;IAC1D,uBAAuB,EAAE,+BAA+B;IACxD,wBAAwB,EAAE,8BAA8B;IACxD,0BAA0B,EAAE,WAAW;IACvC,4BAA4B,EAAE,sBAAsB;IACpD,2BAA2B,EAAE,YAAY;IACzC,6BAA6B,EAAE,cAAc;IAC7C,gCAAgC,EAAE,eAAe;IACjD,2BAA2B,EAAE,SAAS;IACtC,0BAA0B,EAAE,qBAAqB;IACjD,6BAA6B,EAAE,WAAW;IAC1C,4BAA4B,EAAE,4CAA4C;IAC1E,2BAA2B,EAAE,sBAAsB;IACnD,8BAA8B,EAAE,6BAA6B;IAC7D,gCAAgC,EAAE,gCAAgC;IAClE,gCAAgC,EAAE,mBAAmB;IACrD,gCAAgC,EAAE,KAAK;IACvC,0BAA0B,EAAE,qBAAqB;IACjD,4BAA4B,EAAE,aAAa;IAC3C,uCAAuC,EAAE,cAAc;IACvD,wCAAwC,EAAE,8BAA8B;IACxE,gDAAgD,EAAE,wDAAwD;IAC1G,0BAA0B,EAAE,WAAW;IACvC,6BAA6B,EAAE,8CAA8C;IAC7E,wCAAwC,EAAE,uBAAuB;IACjE,+CAA+C,EAAE,cAAc;IAC/D,qDAAqD,EAAE,+BAA+B;IACtF,6CAA6C,EAAE,MAAM;IACrD,mCAAmC,EAAE,0BAA0B;IAC/D,+BAA+B,EAAE,UAAU;IAC3C,+BAA+B,EAAE,eAAe;IAChD,gCAAgC,EAAE,UAAU;IAC5C,gCAAgC,EAAE,aAAa;IAE/C,qEAAqE;IACrE,uBAAuB,EAAE,UAAU;IACnC,uBAAuB,EAAE,eAAe;IACxC,wBAAwB,EAAE,UAAU;IACpC,wBAAwB,EAAE,aAAa;IAEvC,uCAAuC;IACvC,2BAA2B,EAAE,uBAAuB;IACpD,+BAA+B,EAAE,8BAA8B;IAC/D,4BAA4B,EAAE,gCAAgC;IAC9D,6BAA6B,EAAE,yBAAyB;IACxD,2BAA2B,EAAE,gBAAgB;IAC7C,8BAA8B,EAAE,WAAW;IAC3C,4BAA4B,EAAE,kCAAkC;IAChE,4BAA4B,EAAE,wBAAwB;IACtD,uCAAuC,EAAE,0CAA0C;IACnF,uCAAuC,EAAE,4BAA4B;IACrE,wCAAwC,EAAE,+BAA+B;IACzE,wCAAwC,EAAE,6BAA6B;IACvE,gCAAgC,EAAE,kCAAkC;IACpE,oCAAoC,EAClC,iGAAiG;IACnG,oCAAoC,EAAE,iBAAiB;IACvD,8BAA8B,EAAE,oCAAoC;IACpE,+BAA+B,EAC7B,oFAAoF;IACtF,oCAAoC,EAAE,8BAA8B;IACpE,4BAA4B,EAAE,sBAAsB;IACpD,8BAA8B,EAAE,iBAAiB;IACjD,kCAAkC,EAAE,4BAA4B;IAChE,4BAA4B,EAAE,qBAAqB;IACnD,kCAAkC,EAAE,mBAAmB;IACvD,wCAAwC,EAAE,YAAY;CACvD,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAkB;IACzD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;IACpD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"ru.js","sourceRoot":"","sources":["../../src/i18n/ru.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { InfiniteData, UseInfiniteQueryResult, UseQueryResult } from "@tanstack/react-query";
2
- import type { StapelApiError } from "@stapel/core";
2
+ import type { LoadState, StapelApiError } from "@stapel/core";
3
3
  import type { InvitationPage, InvitationPreview, InstanceShape, InvitationsParams, MemberPage, MembersParams, RoleInfo, Workspace, WorkspaceList } from "../api/types.js";
4
4
  import type { CapabilityLevel } from "./stepUp.js";
5
5
  /**
@@ -98,15 +98,21 @@ export declare function useInvitationPreview(token: string | null): UseQueryResu
98
98
  /** What {@link useCapabilities} returns: the caller's granted capability
99
99
  * strings in one workspace plus the wildcard-aware `can()` check. */
100
100
  export interface CapabilitiesResult {
101
- /** Verbatim registry strings of the caller's role (wildcards included);
102
- * empty while loading or when the caller is not a member. */
103
- readonly capabilities: readonly string[];
101
+ /**
102
+ * The capability read, as a state. `ready` with the verbatim registry
103
+ * strings of the caller's role (wildcards included; `[]` for a non-member,
104
+ * and for a backend older than 0.6.0 which does not send the field at all).
105
+ *
106
+ * A state and not an array, because "you may not do this" and "we could not
107
+ * find out whether you may" both end in a hidden button, and only one of
108
+ * them should end in silence. `can()` stays deny-by-default in both — that
109
+ * part is a security property and does not change — but a screen that wants
110
+ * to SAY why can now tell them apart.
111
+ */
112
+ readonly state: LoadState<readonly string[]>;
104
113
  /** Wildcard-aware check (`*` / `prefix.*` — the backend matcher, ported).
105
114
  * UI convenience only: the backend re-checks on every operation. */
106
115
  can(capability: string): boolean;
107
- readonly isLoading: boolean;
108
- readonly isError: boolean;
109
- readonly error: StapelApiError | null;
110
116
  }
111
117
  /**
112
118
  * The caller's capabilities in one workspace (org-program §A2): reads
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/model/queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/model/queries.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,sBAAsB,EACtB,cAAc,EACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,QAAQ,EACR,SAAS,EACT,aAAa,EACd,MAAM,iBAAiB,CAAC;AAKzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;GAIG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,IAAI,cAAc,CAAC,aAAa,EAAE,cAAc,CAAC,CAQ7E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,cAAc,CAAC,SAAS,EAAE,cAAc,CAAC,CAQ3C;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,MAAM,CAAC,EAAE,aAAa,GACrB,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,CAS5C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,MAAM,CAAC,EAAE,iBAAiB,GACzB,cAAc,CAAC,cAAc,EAAE,cAAc,CAAC,CAShD;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,WAAW,CAAC,GACxD,sBAAsB,CACvB,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC,EAChD,cAAc,CACf,CAiBA;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,IAAI,cAAc,CACxC,SAAS,QAAQ,EAAE,EACnB,cAAc,CACf,CAQA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,CAChD,aAAa,EACb,cAAc,CACf,CAOA;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,cAAc,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAOnD;AAED;qEACqE;AACrE,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IAC7C;wEACoE;IACpE,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;CAClC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,kBAAkB,CAc9E;AAED;6BAC6B;AAC7B,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC;gFAC4E;IAC5E,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,UAAU,EAAE,MAAM,GACjB,cAAc,CAWhB"}
@@ -1,5 +1,5 @@
1
1
  import { useInfiniteQuery, useQuery } from "@tanstack/react-query";
2
- import { useActiveSessionReady } from "@stapel/core";
2
+ import { loadStateFromQuery, mapLoad, useActiveSessionReady } from "@stapel/core";
3
3
  import { useWorkspacesApi } from "./context.js";
4
4
  import { workspacesQueryKeys } from "./queryKeys.js";
5
5
  import { hasCapability } from "./capabilities.js";
@@ -177,13 +177,13 @@ export function useInvitationPreview(token) {
177
177
  */
178
178
  export function useCapabilities(workspaceId) {
179
179
  const query = useWorkspace(workspaceId);
180
- const capabilities = query.data?.my_capabilities ?? [];
180
+ // `my_capabilities` is additive since stapel-workspaces 0.6.0, so a
181
+ // SUCCESSFUL read against an older backend legitimately carries none. That
182
+ // is an empty grant, not a failed load, and the two must not merge.
183
+ const state = mapLoad(loadStateFromQuery(query), (workspace) => workspace.my_capabilities ?? []);
181
184
  return {
182
- capabilities,
183
- can: (capability) => hasCapability(capabilities, capability),
184
- isLoading: query.isLoading,
185
- isError: query.isError,
186
- error: query.error ?? null,
185
+ state,
186
+ can: (capability) => state.status === "ready" && hasCapability(state.data, capability),
187
187
  };
188
188
  }
189
189
  /**
@@ -212,7 +212,7 @@ export function useCapabilities(workspaceId) {
212
212
  * ```
213
213
  */
214
214
  export function useCapabilityGate(workspaceId, capability) {
215
- const { can, isLoading } = useCapabilities(workspaceId);
215
+ const { can, state } = useCapabilities(workspaceId);
216
216
  const level = capabilityLevel(capability);
217
217
  return {
218
218
  capability,
@@ -220,7 +220,7 @@ export function useCapabilityGate(workspaceId, capability) {
220
220
  level,
221
221
  requiresStepUp: level === "high",
222
222
  stepUpScope: level === "high" ? SENSITIVE_SCOPE : null,
223
- isLoading,
223
+ isLoading: state.status === "loading",
224
224
  };
225
225
  }
226
226
  //# sourceMappingURL=queries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/model/queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/model/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAMnE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAalF,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG/D;;;;GAIG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAC7C,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,mBAAmB,CAAC,IAAI,EAAE;QACpC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE;QACnC,OAAO,EAAE,YAAY;KACtB,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,WAA0B;IAE1B,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAC7C,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,mBAAmB,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;QACvD,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,WAAqB,CAAC;QACtD,OAAO,EAAE,YAAY,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,EAAE;KACpE,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,WAA0B,EAC1B,MAAsB;IAEtB,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAC7C,MAAM,CAAC,GAAG,MAAM,IAAI,EAAE,CAAC;IACvB,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,mBAAmB,CAAC,WAAW,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;QAC/D,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,WAAqB,EAAE,CAAC,CAAC;QACxD,OAAO,EAAE,YAAY,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,EAAE;KACpE,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAC5B,WAA0B,EAC1B,MAA0B;IAE1B,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAC7C,MAAM,CAAC,GAAG,MAAM,IAAI,EAAE,CAAC;IACvB,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,mBAAmB,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;QACnE,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,WAAqB,EAAE,CAAC,CAAC;QAC5D,OAAO,EAAE,YAAY,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,EAAE;KACpE,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CACpC,WAA0B,EAC1B,OAAyD;IAKzD,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAC7C,MAAM,CAAC,GAAG,OAAO,IAAI,EAAE,CAAC;IACxB,OAAO,gBAAgB,CAAC;QACtB,QAAQ,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;QACvE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CACzB,GAAG,CAAC,eAAe,CAAC,WAAqB,EAAE;YACzC,GAAG,CAAC;YACJ,SAAS,EAAE,MAAM;YACjB,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1D,CAAC;QACJ,gBAAgB,EAAE,SAA+B;QACjD,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CACzB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7D,OAAO,EAAE,YAAY,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,EAAE;KACpE,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ;IAItB,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAC7C,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,mBAAmB,CAAC,KAAK,EAAE;QACrC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;QACxD,OAAO,EAAE,YAAY;KACtB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,gBAAgB;IAI9B,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,EAAE;QACxC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,gBAAgB,EAAE;QACrC,SAAS,EAAE,QAAQ;KACpB,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAoB;IAEpB,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,mBAAmB,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5D,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAe,CAAC;QACxD,OAAO,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;KACxC,CAAC,CAAC;AACL,CAAC;AAsBD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,WAA0B;IACxD,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IACxC,oEAAoE;IACpE,2EAA2E;IAC3E,oEAAoE;IACpE,MAAM,KAAK,GAAG,OAAO,CACnB,kBAAkB,CAAC,KAAK,CAAC,EACzB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,eAAe,IAAI,EAAE,CAC/C,CAAC;IACF,OAAO;QACL,KAAK;QACL,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAClB,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC;KACpE,CAAC;AACJ,CAAC;AAmBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,WAA0B,EAC1B,UAAkB;IAElB,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC1C,OAAO;QACL,UAAU;QACV,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC;QACxB,KAAK;QACL,cAAc,EAAE,KAAK,KAAK,MAAM;QAChC,WAAW,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;QACtD,SAAS,EAAE,KAAK,CAAC,MAAM,KAAK,SAAS;KACtC,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { ReactElement, ReactNode } from "react";
2
- import type { Repository } from "@stapel/core";
2
+ import type { LoadState, Repository } from "@stapel/core";
3
3
  import type { Workspace } from "../api/types.js";
4
4
  /**
5
5
  * Which workspace am I in — the resolution the whole fleet was inventing
@@ -74,11 +74,26 @@ export interface WorkspaceSelectionUrlBinding {
74
74
  }
75
75
  /** What {@link useWorkspaceSelection} hands back. */
76
76
  export interface WorkspaceSelection {
77
- /** The caller's workspaces (empty before load, and for a guest). */
78
- readonly workspaces: readonly Workspace[];
79
77
  /**
80
- * The resolved workspace — `null` while loading, and for a person who
81
- * belongs to none.
78
+ * The workspace list, as a state a host cannot flatten: `loading` / `ready`
79
+ * with the rows / `failed` with the error. Render it through core's
80
+ * `matchList`.
81
+ *
82
+ * THIS FIELD IS THE FIX FOR THE 2026-08-09 INCIDENT. What used to be here
83
+ * was `workspaces: readonly Workspace[]` beside `loading: boolean`, and NO
84
+ * error field at all — so when the list endpoint answered 404 (a route
85
+ * mounted one segment too deep), a host saw `loading: false`, `workspaces:
86
+ * []`, `current: null`, and had literally no way to tell that apart from a
87
+ * person who belongs to no workspace. Every screen in the product said "you
88
+ * have no workspaces" for hours. The distinction was not merely easy to
89
+ * miss; it was ABSENT from the type.
90
+ */
91
+ readonly state: LoadState<readonly Workspace[]>;
92
+ /**
93
+ * The resolved workspace, once the list is `ready` and the chain has picked
94
+ * one. `null` while loading, when the load FAILED, and for a person who
95
+ * belongs to none — which is exactly why a screen must branch on
96
+ * {@link state} and not on this being null.
82
97
  *
83
98
  * Downstream fetching must gate on THIS, never on a raw id: an id that has
84
99
  * not been checked against the fetched list is exactly how a client ends up
@@ -94,8 +109,6 @@ export interface WorkspaceSelection {
94
109
  * this. The person has already been landed somewhere sane.
95
110
  */
96
111
  readonly urlWorkspaceInvalid: boolean;
97
- /** The workspace list is still loading. */
98
- readonly loading: boolean;
99
112
  /**
100
113
  * An EXPLICIT choice by the person — the only entry point that persists.
101
114
  * Writes the URL (push), local storage, and the backend preference.
@@ -1 +1 @@
1
- {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/model/selection.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAW,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH;;6EAE6E;AAC7E,MAAM,MAAM,wBAAwB,GAChC,KAAK,GACL,OAAO,GACP,YAAY,GACZ,kBAAkB,GAClB,UAAU,GACV,YAAY,CAAC;AAEjB;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;;;;;OAQG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC;;;;;;;;;OASG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAC9B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;QAAE,MAAM,EAAE,QAAQ,GAAG,aAAa,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,KACpE,IAAI,CAAC;CACX;AAED,qDAAqD;AACrD,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IAC1C;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;IACnC,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACjD;;;;;OAKG;IACH,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,kCAAkC;IAClC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAmBD,oDAAoD;AACpD,MAAM,WAAW,+BACf,SAAQ,4BAA4B;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CACjD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,+BAA+B,GACrC,YAAY,CAkMd;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,kBAAkB,CAQ1D"}
1
+ {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/model/selection.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAW,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAS9D,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH;;6EAE6E;AAC7E,MAAM,MAAM,wBAAwB,GAChC,KAAK,GACL,OAAO,GACP,YAAY,GACZ,kBAAkB,GAClB,UAAU,GACV,YAAY,CAAC;AAEjB;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;;;;;OAQG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC;;;;;;;;;OASG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAC9B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;QAAE,MAAM,EAAE,QAAQ,GAAG,aAAa,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,KACpE,IAAI,CAAC;CACX;AAED,qDAAqD;AACrD,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC;IAChD;;;;;;;;;OASG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;IACnC,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACjD;;;;;OAKG;IACH,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC;;;;OAIG;IACH,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,kCAAkC;IAClC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAuBD,oDAAoD;AACpD,MAAM,WAAW,+BACf,SAAQ,4BAA4B;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CACjD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,+BAA+B,GACrC,YAAY,CA8Nd;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,kBAAkB,CAQ1D"}
@@ -1,8 +1,11 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from "react";
3
- import { createRepository } from "@stapel/core";
3
+ import { bothLoaded, createRepository, loadLoading, loadReady, loadStateFromQuery, mapLoad, } from "@stapel/core";
4
4
  import { useWorkspaces } from "./queries.js";
5
5
  import { useSetPreferredWorkspace } from "./mutations.js";
6
+ /** Stable identity for the no-rows case — a fresh `[]` per render would
7
+ * re-run every consumer effect that depends on the memoised bag (#251). */
8
+ const EMPTY_WORKSPACES = [];
6
9
  const SelectionContext = createContext(null);
7
10
  /** The repository namespace and key holding the local-storage layer. */
8
11
  const REPO_NAMESPACE = "workspaces";
@@ -84,14 +87,30 @@ export function WorkspaceSelectionProvider(props) {
84
87
  cancelled = true;
85
88
  };
86
89
  }, [repo]);
87
- const workspaces = useMemo(() => query.data?.workspaces ?? [], [query.data]);
88
- const loading = query.isLoading || !localRead;
90
+ // The list read and the local-storage read must BOTH land before the chain
91
+ // can answer, and a failure of either must not read as "still loading" —
92
+ // `bothLoaded` is exactly that rule, so it is not restated here.
93
+ // Memoised on the query's OWN fields, never on the query object: TanStack
94
+ // returns a new result object every render, so `[query]` here would hand
95
+ // every consumer a new `state` on every render — the #251 loop the bag
96
+ // memoisation below exists to prevent, reintroduced one level up.
97
+ const { status: queryStatus, data: queryData, error: queryError } = query;
98
+ const state = useMemo(() => mapLoad(bothLoaded(mapLoad(loadStateFromQuery({
99
+ status: queryStatus,
100
+ data: queryData,
101
+ error: queryError,
102
+ }), (list) => list.workspaces ?? []), localRead ? loadReady(null) : loadLoading()), ([rows]) => rows), [queryStatus, queryData, queryError, localRead]);
103
+ // The resolution chain below is a COMPUTATION over rows, not a rendering of
104
+ // them, so it reads the rows flat — and it runs only when the state is
105
+ // `ready`, which is what keeps a failed load from resolving to anything.
106
+ const workspaces = state.status === "ready" ? state.data : EMPTY_WORKSPACES;
107
+ const resolvable = state.status === "ready";
89
108
  const memberOf = useCallback((id) => id ? (workspaces.find((w) => w.id === id) ?? null) : null, [workspaces]);
90
109
  // The chain. Runs against the FETCHED list only — never against an
91
110
  // unresolved one, or a raw stored id would be briefly authoritative and the
92
111
  // app would fetch a workspace it has not verified the person can open.
93
112
  const resolved = useMemo(() => {
94
- if (loading || workspaces.length === 0) {
113
+ if (!resolvable || workspaces.length === 0) {
95
114
  return { workspace: null, source: null };
96
115
  }
97
116
  const explicit = memberOf(chosenId);
@@ -115,13 +134,13 @@ export function WorkspaceSelectionProvider(props) {
115
134
  // Last resort only — see this module's header for why it is last and why
116
135
  // it is still here.
117
136
  return { workspace: workspaces[0] ?? null, source: "positional" };
118
- }, [loading, workspaces, memberOf, chosenId, urlWorkspaceId, localId, query.data]);
137
+ }, [resolvable, workspaces, memberOf, chosenId, urlWorkspaceId, localId, query.data]);
119
138
  // The URL named something the person cannot open. Deliberately NOT an
120
139
  // error state that blanks the screen, and deliberately NOT a silent
121
140
  // substitution: they clicked a link expecting workspace X, and quietly
122
141
  // showing workspace Y's data is the same misattribution class as #239.
123
142
  // They land through the rest of the chain, and this flag drives the notice.
124
- const urlWorkspaceInvalid = !loading &&
143
+ const urlWorkspaceInvalid = resolvable &&
125
144
  workspaces.length > 0 &&
126
145
  chosenId === null &&
127
146
  !!urlWorkspaceId &&
@@ -145,13 +164,16 @@ export function WorkspaceSelectionProvider(props) {
145
164
  // later-corrected backend preference or instance default; deleting it just
146
165
  // stops the next boot retrying a dead id.
147
166
  useEffect(() => {
148
- if (loading || !repo || localId === null)
167
+ // Only a SUCCESSFUL load proves a stored id is dead. Deleting it because
168
+ // the request failed would punish an outage by forgetting the person's
169
+ // workspace on every affected boot.
170
+ if (!resolvable || !repo || localId === null)
149
171
  return;
150
172
  if (memberOf(localId))
151
173
  return;
152
174
  setLocalId(null);
153
175
  void repo.del(REPO_KEY).catch(() => undefined);
154
- }, [loading, repo, localId, memberOf]);
176
+ }, [resolvable, repo, localId, memberOf]);
155
177
  /**
156
178
  * The only path that persists anything, and that is the whole write policy:
157
179
  * a URL is per-tab CONTEXT, a picker click is a CHOICE.
@@ -193,19 +215,17 @@ export function WorkspaceSelectionProvider(props) {
193
215
  // sets state, that is an unbounded render loop whose only symptom is a
194
216
  // spinner that never resolves, with nothing in the console.
195
217
  const value = useMemo(() => ({
196
- workspaces,
218
+ state,
197
219
  current: resolved.workspace,
198
220
  source: resolved.source,
199
221
  urlWorkspaceInvalid,
200
- loading,
201
222
  switchTo,
202
223
  refetch,
203
224
  }), [
204
- workspaces,
225
+ state,
205
226
  resolved.workspace,
206
227
  resolved.source,
207
228
  urlWorkspaceInvalid,
208
- loading,
209
229
  switchTo,
210
230
  refetch,
211
231
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/model/selection.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/model/selection.tsx"],"names":[],"mappings":"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"}
package/llms.txt CHANGED
@@ -1,6 +1,6 @@
1
- # @stapel/workspaces-react 0.12.0
1
+ # @stapel/workspaces-react 0.14.0
2
2
 
3
- Headless React flow pair for stapel-workspaces (contract >=0.20 <0.21) — business + state, zero visual opinion.
3
+ Headless React flow pair for stapel-workspaces (contract >=0.22 <0.23) — business + state, zero visual opinion.
4
4
  Built on @stapel/core: typed client + StapelApiError envelope, auth token refresh,
5
5
  verification-403 interception, i18n engine, analytics facade, TanStack Query layer.
6
6
 
@@ -78,7 +78,7 @@ Paths are relative to `/workspaces/api/v1/`.
78
78
  - useWorkspaces (query) → listWorkspaces
79
79
 
80
80
  ## Errors (render t(code, params); UX from remediation)
81
- 66 keys (full catalog: manifest.json §errors). By remediation: fix_input 33 · retry 12 · contact_support 7 · wait_and_retry 7 · verify 5 · reauthenticate 2.
81
+ 67 keys (full catalog: manifest.json §errors). By remediation: fix_input 33 · retry 12 · contact_support 8 · wait_and_retry 7 · verify 5 · reauthenticate 2.
82
82
  Param-bearing keys (interpolation slots matter):
83
83
  - error.400.field.blank [400] → fix_input {field}
84
84
  - error.400.field.does_not_exist [400] → fix_input {field}
package/manifest.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "$generated": "by scripts/gen-manifest.mjs — do not edit; drift-gated (pnpm gen:manifest:check)",
3
3
  "package": "@stapel/workspaces-react",
4
- "version": "0.12.0",
4
+ "version": "0.14.0",
5
5
  "backend": {
6
6
  "module": "stapel-workspaces",
7
- "contract": ">=0.20 <0.21"
7
+ "contract": ">=0.22 <0.23"
8
8
  },
9
9
  "layers": [
10
10
  "api",
@@ -832,6 +832,11 @@
832
832
  "params": [],
833
833
  "remediation": "wait_and_retry"
834
834
  },
835
+ "error.503.profiles_not_configured": {
836
+ "status": 503,
837
+ "params": [],
838
+ "remediation": "contact_support"
839
+ },
835
840
  "error.503.profiles_unavailable": {
836
841
  "status": 503,
837
842
  "params": [],
@@ -888,7 +893,7 @@
888
893
  {
889
894
  "id": "workspaces.list",
890
895
  "title": "Workspace list",
891
- "description": "The headless WorkspaceList wraps the read of the caller's workspaces plus an owner-seeded create, exposing workspaces / loading / creating / error state. Bring your own UI — the component is renderless.",
896
+ "description": "The headless WorkspaceList wraps the read of the caller's workspaces plus an owner-seeded create. The read arrives as a LoadState the skin renders through matchList, so 'no workspaces yet' and 'we could not load them' stay two different screens. Bring your own UI — the component is renderless.",
892
897
  "component": "WorkspaceList",
893
898
  "tokens": [
894
899
  "card-bg",
@@ -1007,6 +1012,7 @@
1007
1012
  "error.429.too_many_requests",
1008
1013
  "error.500.internal",
1009
1014
  "error.503.auth_unavailable",
1015
+ "error.503.profiles_not_configured",
1010
1016
  "error.503.profiles_unavailable",
1011
1017
  "workspaces.accept.accept",
1012
1018
  "workspaces.accept.accepted",
@@ -1039,13 +1045,16 @@
1039
1045
  "workspaces.list.create",
1040
1046
  "workspaces.list.creating",
1041
1047
  "workspaces.list.empty",
1048
+ "workspaces.list.load_failed",
1042
1049
  "workspaces.list.loading",
1050
+ "workspaces.members.empty",
1043
1051
  "workspaces.members.invite",
1044
1052
  "workspaces.members.invite_dialog.emails_label",
1045
1053
  "workspaces.members.invite_dialog.emails_placeholder",
1046
1054
  "workspaces.members.invite_dialog.role_label",
1047
1055
  "workspaces.members.invite_dialog.title",
1048
1056
  "workspaces.members.inviting",
1057
+ "workspaces.members.load_failed",
1049
1058
  "workspaces.members.loading",
1050
1059
  "workspaces.members.remove",
1051
1060
  "workspaces.members.remove_confirm",
@@ -1056,10 +1065,14 @@
1056
1065
  "workspaces.members.subtitle",
1057
1066
  "workspaces.members.title",
1058
1067
  "workspaces.members.update_role",
1068
+ "workspaces.retry",
1059
1069
  "workspaces.role.admin",
1060
1070
  "workspaces.role.member",
1061
1071
  "workspaces.role.owner",
1062
1072
  "workspaces.role.viewer",
1073
+ "workspaces.roles.load_failed",
1074
+ "workspaces.settings.blocked.name_required",
1075
+ "workspaces.settings.blocked.not_owner",
1063
1076
  "workspaces.settings.danger_zone.delete",
1064
1077
  "workspaces.settings.danger_zone.delete_confirm",
1065
1078
  "workspaces.settings.danger_zone.title",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stapel/workspaces-react",
3
- "version": "0.12.0",
3
+ "version": "0.14.0",
4
4
  "description": "Headless React flow pair for stapel-workspaces: typed API client, TanStack Query hooks, flow machines, headless components, and i18n keys. Zero visual opinion.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -25,6 +25,10 @@
25
25
  "types": "./dist/i18n/ru.d.ts",
26
26
  "default": "./dist/i18n/ru.js"
27
27
  },
28
+ "./i18n/es": {
29
+ "types": "./dist/i18n/es.d.ts",
30
+ "default": "./dist/i18n/es.js"
31
+ },
28
32
  "./manifest": "./manifest.json",
29
33
  "./manifest.json": "./manifest.json",
30
34
  "./llms.txt": "./llms.txt",
@@ -42,7 +46,7 @@
42
46
  ],
43
47
  "size-limit": [
44
48
  {
45
- "name": "index — the ru locale must NOT be in the main bundle",
49
+ "name": "index — the ru/es locales must NOT be in the main bundle",
46
50
  "path": "dist/index.js",
47
51
  "limit": "12 KB"
48
52
  },
@@ -51,6 +55,11 @@
51
55
  "path": "dist/i18n/ru.js",
52
56
  "limit": "5 KB"
53
57
  },
58
+ {
59
+ "name": "i18n/es subpath (opt-in locale: en floor + generated es errors; no es UI copy yet)",
60
+ "path": "dist/i18n/es.js",
61
+ "limit": "3.5 KB"
62
+ },
54
63
  {
55
64
  "name": "default — the settings skin (antd) must stay out of the main bundle",
56
65
  "path": "dist/default/index.js",
@@ -82,7 +91,7 @@
82
91
  "size-limit": "^11.2.0",
83
92
  "typescript": "^5.8.3",
84
93
  "vitest": "^3.2.4",
85
- "@stapel/core": "^0.12.0",
94
+ "@stapel/core": "^0.13.0",
86
95
  "@stapel/showcase": "^0.2.0",
87
96
  "@stapel/tokens": "^0.5.0"
88
97
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$generated": "by scripts/gen-events.mjs — do not edit; drift-gated (pnpm gen:events:check)",
3
3
  "package": "@stapel/workspaces-react",
4
- "version": "0.12.0",
4
+ "version": "0.14.0",
5
5
  "defined": [],
6
6
  "flows": []
7
7
  }