@arbidocs/blocks 0.5.102 → 0.5.104

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 (128) hide show
  1. package/dist/{DocumentReviewCard-UUMBYSHO.cjs → DocumentReviewCard-MSHD73S3.cjs} +12 -12
  2. package/dist/{DocumentReviewCard-UUMBYSHO.cjs.map → DocumentReviewCard-MSHD73S3.cjs.map} +1 -1
  3. package/dist/{DocumentReviewCard-UEFTDEOL.js → DocumentReviewCard-WZNBPG72.js} +7 -7
  4. package/dist/{DocumentReviewCard-UEFTDEOL.js.map → DocumentReviewCard-WZNBPG72.js.map} +1 -1
  5. package/dist/{FilesViewerDialog-B6AQP2UB.cjs → FilesViewerDialog-DV2U4USR.cjs} +7 -7
  6. package/dist/{FilesViewerDialog-B6AQP2UB.cjs.map → FilesViewerDialog-DV2U4USR.cjs.map} +1 -1
  7. package/dist/{FilesViewerDialog-R5VNYH72.js → FilesViewerDialog-XETOHORQ.js} +6 -6
  8. package/dist/{FilesViewerDialog-R5VNYH72.js.map → FilesViewerDialog-XETOHORQ.js.map} +1 -1
  9. package/dist/agents/index.cjs +176 -175
  10. package/dist/agents/index.js +3 -2
  11. package/dist/{chunk-AUQF6UJZ.js → chunk-4UOXUWX3.js} +4 -4
  12. package/dist/{chunk-AUQF6UJZ.js.map → chunk-4UOXUWX3.js.map} +1 -1
  13. package/dist/{chunk-ZGAUD357.cjs → chunk-4WMGFGYP.cjs} +4 -4
  14. package/dist/{chunk-ZGAUD357.cjs.map → chunk-4WMGFGYP.cjs.map} +1 -1
  15. package/dist/{chunk-AMIPT72L.cjs → chunk-5R67KX2O.cjs} +8 -8
  16. package/dist/{chunk-AMIPT72L.cjs.map → chunk-5R67KX2O.cjs.map} +1 -1
  17. package/dist/{chunk-PL2CVHBB.cjs → chunk-5UMZXDGL.cjs} +5 -5
  18. package/dist/{chunk-PL2CVHBB.cjs.map → chunk-5UMZXDGL.cjs.map} +1 -1
  19. package/dist/{chunk-CDOW3H4B.js → chunk-62OMGQHS.js} +3 -3
  20. package/dist/{chunk-CDOW3H4B.js.map → chunk-62OMGQHS.js.map} +1 -1
  21. package/dist/{chunk-JJ5BXK3Q.cjs → chunk-6A4GNM4T.cjs} +5 -4
  22. package/dist/chunk-6A4GNM4T.cjs.map +1 -0
  23. package/dist/{chunk-VVCSEYDP.cjs → chunk-6NSKIS35.cjs} +4 -4
  24. package/dist/{chunk-VVCSEYDP.cjs.map → chunk-6NSKIS35.cjs.map} +1 -1
  25. package/dist/{chunk-PCSJODXV.js → chunk-7ONU7EWY.js} +3 -3
  26. package/dist/{chunk-PCSJODXV.js.map → chunk-7ONU7EWY.js.map} +1 -1
  27. package/dist/{chunk-D3DOHXBQ.cjs → chunk-BSPPKX6X.cjs} +24 -24
  28. package/dist/{chunk-D3DOHXBQ.cjs.map → chunk-BSPPKX6X.cjs.map} +1 -1
  29. package/dist/{chunk-ICE2ZKN4.js → chunk-CEVVGJQX.js} +3 -3
  30. package/dist/{chunk-ICE2ZKN4.js.map → chunk-CEVVGJQX.js.map} +1 -1
  31. package/dist/{chunk-6AETD75K.js → chunk-E26MNOLG.js} +3 -3
  32. package/dist/{chunk-6AETD75K.js.map → chunk-E26MNOLG.js.map} +1 -1
  33. package/dist/{chunk-S67KFB54.js → chunk-E6ISR55S.js} +3 -3
  34. package/dist/{chunk-S67KFB54.js.map → chunk-E6ISR55S.js.map} +1 -1
  35. package/dist/{chunk-ZKTMTYFN.js → chunk-ET3W24JV.js} +5 -5
  36. package/dist/{chunk-ZKTMTYFN.js.map → chunk-ET3W24JV.js.map} +1 -1
  37. package/dist/{chunk-GCW7PS3D.js → chunk-GOJ5GHFS.js} +3 -3
  38. package/dist/{chunk-GCW7PS3D.js.map → chunk-GOJ5GHFS.js.map} +1 -1
  39. package/dist/{chunk-FKFUAU4F.js → chunk-HTGEAQOA.js} +5 -4
  40. package/dist/chunk-HTGEAQOA.js.map +1 -0
  41. package/dist/{chunk-4RQDYXLE.js → chunk-HTIEJVPI.js} +5 -5
  42. package/dist/{chunk-4RQDYXLE.js.map → chunk-HTIEJVPI.js.map} +1 -1
  43. package/dist/{chunk-4YQBT5EL.cjs → chunk-IWLNDDPN.cjs} +35 -35
  44. package/dist/{chunk-4YQBT5EL.cjs.map → chunk-IWLNDDPN.cjs.map} +1 -1
  45. package/dist/chunk-JCMKYQGZ.js +26 -0
  46. package/dist/chunk-JCMKYQGZ.js.map +1 -0
  47. package/dist/{chunk-6S2LRXJ4.js → chunk-JWUCDK2F.js} +5 -5
  48. package/dist/chunk-JWUCDK2F.js.map +1 -0
  49. package/dist/{chunk-6TYZ33WH.cjs → chunk-OKUXM2N4.cjs} +5 -5
  50. package/dist/chunk-OKUXM2N4.cjs.map +1 -0
  51. package/dist/{chunk-HC54CTGN.cjs → chunk-OSR3GCJG.cjs} +11 -11
  52. package/dist/chunk-OSR3GCJG.cjs.map +1 -0
  53. package/dist/{chunk-TOT4HHHN.js → chunk-P5RTO2WL.js} +3 -24
  54. package/dist/chunk-P5RTO2WL.js.map +1 -0
  55. package/dist/chunk-QECKDZ47.cjs +31 -0
  56. package/dist/chunk-QECKDZ47.cjs.map +1 -0
  57. package/dist/{chunk-L3CWX2BN.cjs → chunk-RBI7WVEP.cjs} +4 -4
  58. package/dist/{chunk-L3CWX2BN.cjs.map → chunk-RBI7WVEP.cjs.map} +1 -1
  59. package/dist/{chunk-PP2NXTOP.js → chunk-RUV2ERID.js} +12 -12
  60. package/dist/{chunk-PP2NXTOP.js.map → chunk-RUV2ERID.js.map} +1 -1
  61. package/dist/{chunk-W4QYNRBU.cjs → chunk-S7NJVJJX.cjs} +45 -45
  62. package/dist/{chunk-W4QYNRBU.cjs.map → chunk-S7NJVJJX.cjs.map} +1 -1
  63. package/dist/{chunk-QM6OI62U.js → chunk-TQFDPCWU.js} +5 -5
  64. package/dist/{chunk-QM6OI62U.js.map → chunk-TQFDPCWU.js.map} +1 -1
  65. package/dist/{chunk-MDMQDVCA.cjs → chunk-V2CKYM4B.cjs} +4 -4
  66. package/dist/{chunk-MDMQDVCA.cjs.map → chunk-V2CKYM4B.cjs.map} +1 -1
  67. package/dist/{chunk-CMEIU2GA.cjs → chunk-VULH3XAJ.cjs} +28 -28
  68. package/dist/{chunk-CMEIU2GA.cjs.map → chunk-VULH3XAJ.cjs.map} +1 -1
  69. package/dist/{chunk-SOS2WASA.cjs → chunk-WZAHVTTO.cjs} +2 -26
  70. package/dist/chunk-WZAHVTTO.cjs.map +1 -0
  71. package/dist/collaboration/index.cjs +69 -69
  72. package/dist/collaboration/index.js +1 -1
  73. package/dist/collaboration/mail/MailActionBar.d.ts +3 -2
  74. package/dist/collaboration/mail/MailAddToWorkspaceDialog.d.ts +20 -0
  75. package/dist/collaboration/mail/MailFiledChips.d.ts +15 -0
  76. package/dist/collaboration/mail/MailMessageView.d.ts +3 -3
  77. package/dist/connect/index.cjs +1078 -805
  78. package/dist/connect/index.cjs.map +1 -1
  79. package/dist/connect/index.js +498 -225
  80. package/dist/connect/index.js.map +1 -1
  81. package/dist/connect/viewer.cjs +5 -5
  82. package/dist/connect/viewer.js +4 -4
  83. package/dist/connection/connectors/ConnectedMailboxSyncDialog.d.ts +3 -1
  84. package/dist/connection/connectors/native-mailbox.d.ts +19 -0
  85. package/dist/connection/files/imports/EmailImportPanel.d.ts +2 -2
  86. package/dist/connection/files/imports/NativeMailImportRow.d.ts +11 -0
  87. package/dist/connection/mail/ConnectedMailConversation.d.ts +3 -4
  88. package/dist/connection/mail/ConnectedMailbox.d.ts +1 -4
  89. package/dist/connection/mail/types.d.ts +2 -4
  90. package/dist/connection/mail/useMailMessageChange.d.ts +11 -2
  91. package/dist/connection/mail/useMailboxDefaults.d.ts +6 -3
  92. package/dist/connection/workspace-access/ConnectedGrantWorkspaceAccessDialog.d.ts +1 -1
  93. package/dist/document-tools/viewer/index.cjs +1 -1
  94. package/dist/document-tools/viewer/index.cjs.map +1 -1
  95. package/dist/document-tools/viewer/index.js +1 -1
  96. package/dist/document-tools/viewer/index.js.map +1 -1
  97. package/dist/embed/index.cjs +11 -11
  98. package/dist/embed/index.js +5 -5
  99. package/dist/files/import/ImportParts.d.ts +6 -3
  100. package/dist/files/index.cjs +222 -222
  101. package/dist/files/index.js +1 -1
  102. package/dist/index.cjs +294 -293
  103. package/dist/index.cjs.map +1 -1
  104. package/dist/index.js +6 -5
  105. package/dist/index.js.map +1 -1
  106. package/dist/site/index.cjs +5 -5
  107. package/dist/site/index.js +1 -1
  108. package/dist/studio/index.cjs +1 -1
  109. package/dist/studio/index.js +1 -1
  110. package/dist/workflow-canvas/index.cjs +19 -18
  111. package/dist/workflow-canvas/index.cjs.map +1 -1
  112. package/dist/workflow-canvas/index.js +9 -8
  113. package/dist/workflow-canvas/index.js.map +1 -1
  114. package/dist/workspaces/index.cjs +33 -28
  115. package/dist/workspaces/index.cjs.map +1 -1
  116. package/dist/workspaces/index.d.ts +1 -1
  117. package/dist/workspaces/index.js +3 -2
  118. package/dist/workspaces/index.js.map +1 -1
  119. package/dist/workspaces/workspace-roles.d.ts +11 -4
  120. package/node_modules/@arbidocs/coedit/package.json +1 -1
  121. package/package.json +5 -5
  122. package/dist/chunk-6S2LRXJ4.js.map +0 -1
  123. package/dist/chunk-6TYZ33WH.cjs.map +0 -1
  124. package/dist/chunk-FKFUAU4F.js.map +0 -1
  125. package/dist/chunk-HC54CTGN.cjs.map +0 -1
  126. package/dist/chunk-JJ5BXK3Q.cjs.map +0 -1
  127. package/dist/chunk-SOS2WASA.cjs.map +0 -1
  128. package/dist/chunk-TOT4HHHN.js.map +0 -1
@@ -1,13 +1,14 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkSOS2WASA_cjs = require('../chunk-SOS2WASA.cjs');
4
+ var chunkWZAHVTTO_cjs = require('../chunk-WZAHVTTO.cjs');
5
5
  var chunkYZ6YOOTF_cjs = require('../chunk-YZ6YOOTF.cjs');
6
6
  var chunkKWJW5TMH_cjs = require('../chunk-KWJW5TMH.cjs');
7
7
  require('../chunk-UMMZNZV3.cjs');
8
8
  require('../chunk-AEQT2QQX.cjs');
9
9
  require('../chunk-I6GEQWIV.cjs');
10
10
  var chunk7G2LJMUG_cjs = require('../chunk-7G2LJMUG.cjs');
11
+ var chunkQECKDZ47_cjs = require('../chunk-QECKDZ47.cjs');
11
12
  require('../chunk-TTPJ2G3G.cjs');
12
13
  require('../chunk-IPSHAMO2.cjs');
13
14
  require('../chunk-WGWP4ATS.cjs');
@@ -65,7 +66,7 @@ function WorkspaceGallery({
65
66
  const opening = workspace.id === activeOpeningId;
66
67
  const state = { current, opening };
67
68
  return /* @__PURE__ */ jsxRuntime.jsx(
68
- chunkSOS2WASA_cjs.WorkspaceCard,
69
+ chunkWZAHVTTO_cjs.WorkspaceCard,
69
70
  {
70
71
  workspace,
71
72
  current,
@@ -88,71 +89,59 @@ function WorkspaceGallery({
88
89
 
89
90
  Object.defineProperty(exports, "CommonWorkspaceToggle", {
90
91
  enumerable: true,
91
- get: function () { return chunkSOS2WASA_cjs.CommonWorkspaceToggle; }
92
+ get: function () { return chunkWZAHVTTO_cjs.CommonWorkspaceToggle; }
92
93
  });
93
94
  Object.defineProperty(exports, "DEFAULT_WORKSPACE_CARD_LABELS", {
94
95
  enumerable: true,
95
- get: function () { return chunkSOS2WASA_cjs.DEFAULT_WORKSPACE_CARD_LABELS; }
96
+ get: function () { return chunkWZAHVTTO_cjs.DEFAULT_WORKSPACE_CARD_LABELS; }
96
97
  });
97
98
  Object.defineProperty(exports, "ExpandableSection", {
98
99
  enumerable: true,
99
- get: function () { return chunkSOS2WASA_cjs.ExpandableSection; }
100
+ get: function () { return chunkWZAHVTTO_cjs.ExpandableSection; }
100
101
  });
101
102
  Object.defineProperty(exports, "ItalicNone", {
102
103
  enumerable: true,
103
- get: function () { return chunkSOS2WASA_cjs.ItalicNone; }
104
+ get: function () { return chunkWZAHVTTO_cjs.ItalicNone; }
104
105
  });
105
106
  Object.defineProperty(exports, "LeaveFooter", {
106
107
  enumerable: true,
107
- get: function () { return chunkSOS2WASA_cjs.LeaveFooter; }
108
+ get: function () { return chunkWZAHVTTO_cjs.LeaveFooter; }
108
109
  });
109
110
  Object.defineProperty(exports, "PageLoading", {
110
111
  enumerable: true,
111
- get: function () { return chunkSOS2WASA_cjs.PageLoading; }
112
+ get: function () { return chunkWZAHVTTO_cjs.PageLoading; }
112
113
  });
113
114
  Object.defineProperty(exports, "WorkspaceAudienceLine", {
114
115
  enumerable: true,
115
- get: function () { return chunkSOS2WASA_cjs.WorkspaceAudienceLine; }
116
+ get: function () { return chunkWZAHVTTO_cjs.WorkspaceAudienceLine; }
116
117
  });
117
118
  Object.defineProperty(exports, "WorkspaceCard", {
118
119
  enumerable: true,
119
- get: function () { return chunkSOS2WASA_cjs.WorkspaceCard; }
120
+ get: function () { return chunkWZAHVTTO_cjs.WorkspaceCard; }
120
121
  });
121
122
  Object.defineProperty(exports, "WorkspaceGroup", {
122
123
  enumerable: true,
123
- get: function () { return chunkSOS2WASA_cjs.WorkspaceGroup; }
124
+ get: function () { return chunkWZAHVTTO_cjs.WorkspaceGroup; }
124
125
  });
125
126
  Object.defineProperty(exports, "WorkspaceIdentityPanel", {
126
127
  enumerable: true,
127
- get: function () { return chunkSOS2WASA_cjs.WorkspaceIdentityPanel; }
128
+ get: function () { return chunkWZAHVTTO_cjs.WorkspaceIdentityPanel; }
128
129
  });
129
130
  Object.defineProperty(exports, "WorkspaceList", {
130
131
  enumerable: true,
131
- get: function () { return chunkSOS2WASA_cjs.WorkspaceList; }
132
+ get: function () { return chunkWZAHVTTO_cjs.WorkspaceList; }
132
133
  });
133
134
  Object.defineProperty(exports, "WorkspacePageFrame", {
134
135
  enumerable: true,
135
- get: function () { return chunkSOS2WASA_cjs.WorkspacePageFrame; }
136
+ get: function () { return chunkWZAHVTTO_cjs.WorkspacePageFrame; }
136
137
  });
137
138
  Object.defineProperty(exports, "WorkspaceProjectSlot", {
138
139
  enumerable: true,
139
- get: function () { return chunkSOS2WASA_cjs.WorkspaceProjectSlot; }
140
+ get: function () { return chunkWZAHVTTO_cjs.WorkspaceProjectSlot; }
140
141
  });
141
142
  Object.defineProperty(exports, "WorkspaceTypeBadge", {
142
143
  enumerable: true,
143
- get: function () { return chunkSOS2WASA_cjs.WorkspaceTypeBadge; }
144
- });
145
- Object.defineProperty(exports, "formatRole", {
146
- enumerable: true,
147
- get: function () { return chunkSOS2WASA_cjs.formatRole; }
148
- });
149
- Object.defineProperty(exports, "getRoleBadgeClass", {
150
- enumerable: true,
151
- get: function () { return chunkSOS2WASA_cjs.getRoleBadgeClass; }
152
- });
153
- Object.defineProperty(exports, "getRoleDescription", {
154
- enumerable: true,
155
- get: function () { return chunkSOS2WASA_cjs.getRoleDescription; }
144
+ get: function () { return chunkWZAHVTTO_cjs.WorkspaceTypeBadge; }
156
145
  });
157
146
  Object.defineProperty(exports, "FormActions", {
158
147
  enumerable: true,
@@ -250,6 +239,22 @@ Object.defineProperty(exports, "WorkspaceTypeBadgeView", {
250
239
  enumerable: true,
251
240
  get: function () { return chunk7G2LJMUG_cjs.WorkspaceTypeBadgeView; }
252
241
  });
242
+ Object.defineProperty(exports, "WORKSPACE_ROLE_LABELS", {
243
+ enumerable: true,
244
+ get: function () { return chunkQECKDZ47_cjs.WORKSPACE_ROLE_LABELS; }
245
+ });
246
+ Object.defineProperty(exports, "formatRole", {
247
+ enumerable: true,
248
+ get: function () { return chunkQECKDZ47_cjs.formatRole; }
249
+ });
250
+ Object.defineProperty(exports, "getRoleBadgeClass", {
251
+ enumerable: true,
252
+ get: function () { return chunkQECKDZ47_cjs.getRoleBadgeClass; }
253
+ });
254
+ Object.defineProperty(exports, "getRoleDescription", {
255
+ enumerable: true,
256
+ get: function () { return chunkQECKDZ47_cjs.getRoleDescription; }
257
+ });
253
258
  exports.WorkspaceGallery = WorkspaceGallery;
254
259
  //# sourceMappingURL=index.cjs.map
255
260
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/workspaces/WorkspaceGallery.tsx"],"names":["jsx","Loader2","FolderLock","useState","useCallback","jsxs","cn","WorkspaceCard"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA+CA,SAAS,WAAA,CAAY,EAAE,OAAA,EAAQ,EAAyB;AACtD,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAU,8FACZ,QAAA,EAAA,OAAA,mBACCA,cAAA,CAACC,uBAAQ,SAAA,EAAU,qBAAA,EAAsB,aAAA,EAAY,MAAA,EAAO,oBAE5DD,cAAA,CAACE,sBAAA,EAAA,EAAW,WAAU,QAAA,EAAS,aAAA,EAAY,QAAO,CAAA,EAEtD,CAAA;AAEJ;AAOO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,UAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,gBAAA,GAAmB,iBAAA;AAAA,EACnB,mBAAA,GAAsB,iBAAA;AAAA,EACtB,QAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,eAAwB,IAAI,CAAA;AAC9D,EAAA,MAAM,eAAA,GAAkB,SAAA,KAAc,MAAA,GAAY,SAAA,GAAY,SAAA;AAE9D,EAAA,MAAM,IAAA,GAAOC,iBAAA;AAAA,IACX,OAAO,SAAA,KAAgC;AACrC,MAAA,IAAI,eAAA,EAAiB;AACrB,MAAA,YAAA,CAAa,UAAU,EAAE,CAAA;AACzB,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,SAAS,CAAA;AAAA,MACxB,CAAA,CAAA,MAAQ;AAAA,MAER,CAAA,SAAE;AACA,QAAA,YAAA,CAAa,IAAI,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ,eAAe;AAAA,GAC1B;AAEA,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,KAAA,CAAG,0CAAA,EAA4C,SAAS,CAAA;AAAA,MACnE,WAAA,EAAU,mBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,QAAA,UAAA,CAAW,GAAA,CAAI,CAAC,SAAA,KAAc;AAC7B,UAAA,MAAM,OAAA,GAAU,UAAU,EAAA,KAAO,SAAA;AACjC,UAAA,MAAM,OAAA,GAAU,UAAU,EAAA,KAAO,eAAA;AACjC,UAAA,MAAM,KAAA,GAAQ,EAAE,OAAA,EAAS,OAAA,EAAQ;AACjC,UAAA,uBACEN,cAAA;AAAA,YAACO,+BAAA;AAAA,YAAA;AAAA,cAEC,SAAA;AAAA,cACA,OAAA;AAAA,cACA,IAAA,EAAM,UAAU,SAAS,CAAA;AAAA,cACzB,QAAA,EAAU,MAAM,KAAK,IAAA,CAAK,SAAS,CAAA;AAAA,cACnC,IAAA,EAAM,aAAa,UAAA,CAAW,SAAA,EAAW,KAAK,CAAA,mBAAIP,cAAA,CAAC,eAAY,OAAA,EAAkB,CAAA;AAAA,cACjF,MAAA,EAAQ,CAAA,EAAG,gBAAgB,CAAA,EAAG,UAAU,EAAE,CAAA,CAAA;AAAA,cAC1C,aAAA,EAAe,CAAA,EAAG,mBAAmB,CAAA,EAAG,UAAU,EAAE,CAAA,CAAA;AAAA,cACpD,MAAA;AAAA,cACC,GAAG,eAAe,SAAS;AAAA,aAAA;AAAA,YATvB,SAAA,CAAU;AAAA,WAUjB;AAAA,QAEJ,CAAC,CAAA;AAAA,QACA;AAAA;AAAA;AAAA,GACH;AAEJ","file":"index.cjs","sourcesContent":["import { useCallback, useState, type ReactNode } from 'react'\nimport { FolderLock, Loader2 } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport {\n WorkspaceCard,\n type WorkspaceCardLabels,\n type WorkspaceCardProps,\n type WorkspaceSummary,\n} from './WorkspaceCard'\n\n/** What a host's `renderMark` is told about the card it decorates. */\nexport interface WorkspaceMarkState {\n current: boolean\n /** `onOpen` is in flight for this card: show progress instead of the glyph. */\n opening: boolean\n}\n\nexport interface WorkspaceGalleryProps {\n workspaces: readonly WorkspaceSummary[]\n /** The workspace the app is in; its card takes the \"Current workspace\" cue. */\n currentId?: string | null\n /**\n * Open a workspace. Called for EVERY card click or keypress, the current workspace included:\n * clicking \"where you already are\" still goes there. Return the promise of \"switch, then\n * navigate\" (`await select(w); navigate(...)`) and the card shows progress until it settles;\n * a rejection is the host's to report (toast it) and re-enables the card.\n */\n onOpen: (workspace: WorkspaceSummary) => Promise<unknown> | void\n /** Override the in-flight card (controlled), e.g. from a hook's `openingId`. */\n openingId?: string | null\n /** Per-card real link target, so ctrl-click / new tab work. */\n getHref?: (workspace: WorkspaceSummary) => string | undefined\n /** The entity mark before the name. Default: a folder glyph that becomes a spinner. */\n renderMark?: (workspace: WorkspaceSummary, state: WorkspaceMarkState) => ReactNode\n /** Per-card props passthrough (`stats`, `maxAvatars`, `className`...). */\n getCardProps?: (workspace: WorkspaceSummary) => Partial<WorkspaceCardProps>\n labels?: Partial<WorkspaceCardLabels>\n /** Id of the grid. Cards are `${cardTestIdPrefix}${id}`, cues `${openCueTestIdPrefix}${id}`. */\n testId?: string\n cardTestIdPrefix?: string\n openCueTestIdPrefix?: string\n /** After the cards, inside the grid: a `CreateTile`. */\n children?: ReactNode\n className?: string\n}\n\n/** The default entity mark: a quiet folder glyph, a spinner while opening. */\nfunction DefaultMark({ opening }: { opening: boolean }) {\n return (\n <div className=\"flex size-10 shrink-0 items-center justify-center rounded-md bg-background text-foreground\">\n {opening ? (\n <Loader2 className=\"size-5 animate-spin\" aria-hidden=\"true\" />\n ) : (\n <FolderLock className=\"size-5\" aria-hidden=\"true\" />\n )}\n </div>\n )\n}\n\n/**\n * The workspaces gallery: a responsive grid of `WorkspaceCard`s whose click ALWAYS opens the\n * workspace, the current one included, through one `onOpen`. Owns the per-card \"opening\" state\n * and ignores repeat clicks while one open is in flight.\n */\nexport function WorkspaceGallery({\n workspaces,\n currentId,\n onOpen,\n openingId,\n getHref,\n renderMark,\n getCardProps,\n labels,\n testId,\n cardTestIdPrefix = 'workspace-card-',\n openCueTestIdPrefix = 'workspace-open-',\n children,\n className,\n}: WorkspaceGalleryProps) {\n const [pendingId, setPendingId] = useState<string | null>(null)\n const activeOpeningId = openingId !== undefined ? openingId : pendingId\n\n const open = useCallback(\n async (workspace: WorkspaceSummary) => {\n if (activeOpeningId) return\n setPendingId(workspace.id)\n try {\n await onOpen(workspace)\n } catch {\n // The host reports failures (a toast); the gallery only has to become usable again.\n } finally {\n setPendingId(null)\n }\n },\n [onOpen, activeOpeningId]\n )\n\n return (\n <div\n className={cn('grid gap-4 sm:grid-cols-2 xl:grid-cols-3', className)}\n data-slot=\"workspace-gallery\"\n data-testid={testId}\n >\n {workspaces.map((workspace) => {\n const current = workspace.id === currentId\n const opening = workspace.id === activeOpeningId\n const state = { current, opening }\n return (\n <WorkspaceCard\n key={workspace.id}\n workspace={workspace}\n current={current}\n href={getHref?.(workspace)}\n onSelect={() => void open(workspace)}\n mark={renderMark ? renderMark(workspace, state) : <DefaultMark opening={opening} />}\n testId={`${cardTestIdPrefix}${workspace.id}`}\n openCueTestId={`${openCueTestIdPrefix}${workspace.id}`}\n labels={labels}\n {...getCardProps?.(workspace)}\n />\n )\n })}\n {children}\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../../src/workspaces/WorkspaceGallery.tsx"],"names":["jsx","Loader2","FolderLock","useState","useCallback","jsxs","cn","WorkspaceCard"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA+CA,SAAS,WAAA,CAAY,EAAE,OAAA,EAAQ,EAAyB;AACtD,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAU,8FACZ,QAAA,EAAA,OAAA,mBACCA,cAAA,CAACC,uBAAQ,SAAA,EAAU,qBAAA,EAAsB,aAAA,EAAY,MAAA,EAAO,oBAE5DD,cAAA,CAACE,sBAAA,EAAA,EAAW,WAAU,QAAA,EAAS,aAAA,EAAY,QAAO,CAAA,EAEtD,CAAA;AAEJ;AAOO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,UAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,gBAAA,GAAmB,iBAAA;AAAA,EACnB,mBAAA,GAAsB,iBAAA;AAAA,EACtB,QAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,eAAwB,IAAI,CAAA;AAC9D,EAAA,MAAM,eAAA,GAAkB,SAAA,KAAc,MAAA,GAAY,SAAA,GAAY,SAAA;AAE9D,EAAA,MAAM,IAAA,GAAOC,iBAAA;AAAA,IACX,OAAO,SAAA,KAAgC;AACrC,MAAA,IAAI,eAAA,EAAiB;AACrB,MAAA,YAAA,CAAa,UAAU,EAAE,CAAA;AACzB,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,SAAS,CAAA;AAAA,MACxB,CAAA,CAAA,MAAQ;AAAA,MAER,CAAA,SAAE;AACA,QAAA,YAAA,CAAa,IAAI,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ,eAAe;AAAA,GAC1B;AAEA,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,KAAA,CAAG,0CAAA,EAA4C,SAAS,CAAA;AAAA,MACnE,WAAA,EAAU,mBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,QAAA,UAAA,CAAW,GAAA,CAAI,CAAC,SAAA,KAAc;AAC7B,UAAA,MAAM,OAAA,GAAU,UAAU,EAAA,KAAO,SAAA;AACjC,UAAA,MAAM,OAAA,GAAU,UAAU,EAAA,KAAO,eAAA;AACjC,UAAA,MAAM,KAAA,GAAQ,EAAE,OAAA,EAAS,OAAA,EAAQ;AACjC,UAAA,uBACEN,cAAA;AAAA,YAACO,+BAAA;AAAA,YAAA;AAAA,cAEC,SAAA;AAAA,cACA,OAAA;AAAA,cACA,IAAA,EAAM,UAAU,SAAS,CAAA;AAAA,cACzB,QAAA,EAAU,MAAM,KAAK,IAAA,CAAK,SAAS,CAAA;AAAA,cACnC,IAAA,EAAM,aAAa,UAAA,CAAW,SAAA,EAAW,KAAK,CAAA,mBAAIP,cAAA,CAAC,eAAY,OAAA,EAAkB,CAAA;AAAA,cACjF,MAAA,EAAQ,CAAA,EAAG,gBAAgB,CAAA,EAAG,UAAU,EAAE,CAAA,CAAA;AAAA,cAC1C,aAAA,EAAe,CAAA,EAAG,mBAAmB,CAAA,EAAG,UAAU,EAAE,CAAA,CAAA;AAAA,cACpD,MAAA;AAAA,cACC,GAAG,eAAe,SAAS;AAAA,aAAA;AAAA,YATvB,SAAA,CAAU;AAAA,WAUjB;AAAA,QAEJ,CAAC,CAAA;AAAA,QACA;AAAA;AAAA;AAAA,GACH;AAEJ","file":"index.cjs","sourcesContent":["import { useCallback, useState, type ReactNode } from 'react'\nimport { FolderLock, Loader2 } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport {\n WorkspaceCard,\n type WorkspaceCardLabels,\n type WorkspaceCardProps,\n type WorkspaceSummary,\n} from './WorkspaceCard'\n\n/** What a host's `renderMark` is told about the card it decorates. */\nexport interface WorkspaceMarkState {\n current: boolean\n /** `onOpen` is in flight for this card: show progress instead of the glyph. */\n opening: boolean\n}\n\nexport interface WorkspaceGalleryProps {\n workspaces: readonly WorkspaceSummary[]\n /** The workspace the app is in; its card takes the \"Current workspace\" cue. */\n currentId?: string | null\n /**\n * Open a workspace. Called for EVERY card click or keypress, the current workspace included:\n * clicking \"where you already are\" still goes there. Return the promise of \"switch, then\n * navigate\" (`await select(w); navigate(...)`) and the card shows progress until it settles;\n * a rejection is the host's to report (toast it) and re-enables the card.\n */\n onOpen: (workspace: WorkspaceSummary) => Promise<unknown> | void\n /** Override the in-flight card (controlled), e.g. from a hook's `openingId`. */\n openingId?: string | null\n /** Per-card real link target, so ctrl-click / new tab work. */\n getHref?: (workspace: WorkspaceSummary) => string | undefined\n /** The entity mark before the name. Default: a folder glyph that becomes a spinner. */\n renderMark?: (workspace: WorkspaceSummary, state: WorkspaceMarkState) => ReactNode\n /** Per-card props passthrough (`stats`, `maxAvatars`, `className`...). */\n getCardProps?: (workspace: WorkspaceSummary) => Partial<WorkspaceCardProps>\n labels?: Partial<WorkspaceCardLabels>\n /** Id of the grid. Cards are `${cardTestIdPrefix}${id}`, cues `${openCueTestIdPrefix}${id}`. */\n testId?: string\n cardTestIdPrefix?: string\n openCueTestIdPrefix?: string\n /** After the cards, inside the grid: a `CreateTile`. */\n children?: ReactNode\n className?: string\n}\n\n/** The default entity mark: a quiet folder glyph, a spinner while opening. */\nfunction DefaultMark({ opening }: { opening: boolean }) {\n return (\n <div className=\"flex size-10 shrink-0 items-center justify-center rounded-md bg-background text-foreground\">\n {opening ? (\n <Loader2 className=\"size-5 animate-spin\" aria-hidden=\"true\" />\n ) : (\n <FolderLock className=\"size-5\" aria-hidden=\"true\" />\n )}\n </div>\n )\n}\n\n/**\n * The workspaces gallery: a responsive grid of `WorkspaceCard`s whose click ALWAYS opens the\n * workspace, the current one included, through one `onOpen`. Owns the per-card \"opening\" state\n * and ignores repeat clicks while one open is in flight.\n */\nexport function WorkspaceGallery({\n workspaces,\n currentId,\n onOpen,\n openingId,\n getHref,\n renderMark,\n getCardProps,\n labels,\n testId,\n cardTestIdPrefix = 'workspace-card-',\n openCueTestIdPrefix = 'workspace-open-',\n children,\n className,\n}: WorkspaceGalleryProps) {\n const [pendingId, setPendingId] = useState<string | null>(null)\n const activeOpeningId = openingId !== undefined ? openingId : pendingId\n\n const open = useCallback(\n async (workspace: WorkspaceSummary) => {\n if (activeOpeningId) return\n setPendingId(workspace.id)\n try {\n await onOpen(workspace)\n } catch {\n // The host reports failures (a toast); the gallery only has to become usable again.\n } finally {\n setPendingId(null)\n }\n },\n [onOpen, activeOpeningId]\n )\n\n return (\n <div\n className={cn('grid gap-4 sm:grid-cols-2 xl:grid-cols-3', className)}\n data-slot=\"workspace-gallery\"\n data-testid={testId}\n >\n {workspaces.map((workspace) => {\n const current = workspace.id === currentId\n const opening = workspace.id === activeOpeningId\n const state = { current, opening }\n return (\n <WorkspaceCard\n key={workspace.id}\n workspace={workspace}\n current={current}\n href={getHref?.(workspace)}\n onSelect={() => void open(workspace)}\n mark={renderMark ? renderMark(workspace, state) : <DefaultMark opening={opening} />}\n testId={`${cardTestIdPrefix}${workspace.id}`}\n openCueTestId={`${openCueTestIdPrefix}${workspace.id}`}\n labels={labels}\n {...getCardProps?.(workspace)}\n />\n )\n })}\n {children}\n </div>\n )\n}\n"]}
@@ -13,4 +13,4 @@ export { FormErrorBanner, FormActions, ModalActionRow, WorkspaceFormModal, Proje
13
13
  export { getHumanUserCount, getWorkspaceTypeInfo, getVariantBgClass, getVariantBorderClass, type WorkspaceVariant, } from './workspace-type';
14
14
  export { CommonWorkspaceToggle, type CommonWorkspaceToggleProps } from './CommonWorkspaceToggle';
15
15
  export { groupWorkspacesByProject, byRecentUpdate, workspaceGroupStats, workspaceDocumentCount, workspaceConversationCount, workspaceFilterAttributes, projectFilterId, isListedWorkspace, isAgentAccount, NO_PROJECT_GROUP_KEY, WORKSPACE_CATEGORY_FILTERS, type GroupedWorkspace, type WorkspaceProjectGroup, type WorkspaceGroupStats, type GroupWorkspacesOptions, } from './workspace-groups';
16
- export { formatRole, getRoleBadgeClass, getRoleDescription, type WorkspaceRoleName, } from './workspace-roles';
16
+ export { formatRole, getRoleBadgeClass, getRoleDescription, WORKSPACE_ROLE_LABELS, type WorkspaceRoleName, } from './workspace-roles';
@@ -1,12 +1,13 @@
1
1
  "use client";
2
- import { WorkspaceCard } from '../chunk-TOT4HHHN.js';
3
- export { CommonWorkspaceToggle, DEFAULT_WORKSPACE_CARD_LABELS, ExpandableSection, ItalicNone, LeaveFooter, PageLoading, WorkspaceAudienceLine, WorkspaceCard, WorkspaceGroup, WorkspaceIdentityPanel, WorkspaceList, WorkspacePageFrame, WorkspaceProjectSlot, WorkspaceTypeBadge, formatRole, getRoleBadgeClass, getRoleDescription } from '../chunk-TOT4HHHN.js';
2
+ import { WorkspaceCard } from '../chunk-P5RTO2WL.js';
3
+ export { CommonWorkspaceToggle, DEFAULT_WORKSPACE_CARD_LABELS, ExpandableSection, ItalicNone, LeaveFooter, PageLoading, WorkspaceAudienceLine, WorkspaceCard, WorkspaceGroup, WorkspaceIdentityPanel, WorkspaceList, WorkspacePageFrame, WorkspaceProjectSlot, WorkspaceTypeBadge } from '../chunk-P5RTO2WL.js';
4
4
  export { FormActions, FormErrorBanner, ModalActionRow, ProjectOptionRow, ProjectPicker, WorkspaceFieldsView, WorkspaceFormModal } from '../chunk-SEBNGA3F.js';
5
5
  export { NO_PROJECT_GROUP_KEY, WORKSPACE_CATEGORY_FILTERS, byRecentUpdate, getHumanUserCount, getVariantBgClass, getVariantBorderClass, getWorkspaceTypeInfo, groupWorkspacesByProject, isAgentAccount, isListedWorkspace, projectFilterId, workspaceConversationCount, workspaceDocumentCount, workspaceFilterAttributes, workspaceGroupStats } from '../chunk-57CG33XJ.js';
6
6
  import '../chunk-CPLZ6XGT.js';
7
7
  import '../chunk-5PAQWN5U.js';
8
8
  import '../chunk-VGHPCF7Q.js';
9
9
  export { RoleBadge, WorkspaceTypeBadgeView } from '../chunk-NBV56SGU.js';
10
+ export { WORKSPACE_ROLE_LABELS, formatRole, getRoleBadgeClass, getRoleDescription } from '../chunk-JCMKYQGZ.js';
10
11
  import '../chunk-U53SIJES.js';
11
12
  import '../chunk-X5YMI6A7.js';
12
13
  import '../chunk-YUHSDOPW.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/workspaces/WorkspaceGallery.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AA+CA,SAAS,WAAA,CAAY,EAAE,OAAA,EAAQ,EAAyB;AACtD,EAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAU,8FACZ,QAAA,EAAA,OAAA,mBACC,GAAA,CAAC,WAAQ,SAAA,EAAU,qBAAA,EAAsB,aAAA,EAAY,MAAA,EAAO,oBAE5D,GAAA,CAAC,UAAA,EAAA,EAAW,WAAU,QAAA,EAAS,aAAA,EAAY,QAAO,CAAA,EAEtD,CAAA;AAEJ;AAOO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,UAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,gBAAA,GAAmB,iBAAA;AAAA,EACnB,mBAAA,GAAsB,iBAAA;AAAA,EACtB,QAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAwB,IAAI,CAAA;AAC9D,EAAA,MAAM,eAAA,GAAkB,SAAA,KAAc,MAAA,GAAY,SAAA,GAAY,SAAA;AAE9D,EAAA,MAAM,IAAA,GAAO,WAAA;AAAA,IACX,OAAO,SAAA,KAAgC;AACrC,MAAA,IAAI,eAAA,EAAiB;AACrB,MAAA,YAAA,CAAa,UAAU,EAAE,CAAA;AACzB,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,SAAS,CAAA;AAAA,MACxB,CAAA,CAAA,MAAQ;AAAA,MAER,CAAA,SAAE;AACA,QAAA,YAAA,CAAa,IAAI,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ,eAAe;AAAA,GAC1B;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,0CAAA,EAA4C,SAAS,CAAA;AAAA,MACnE,WAAA,EAAU,mBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,QAAA,UAAA,CAAW,GAAA,CAAI,CAAC,SAAA,KAAc;AAC7B,UAAA,MAAM,OAAA,GAAU,UAAU,EAAA,KAAO,SAAA;AACjC,UAAA,MAAM,OAAA,GAAU,UAAU,EAAA,KAAO,eAAA;AACjC,UAAA,MAAM,KAAA,GAAQ,EAAE,OAAA,EAAS,OAAA,EAAQ;AACjC,UAAA,uBACE,GAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cAEC,SAAA;AAAA,cACA,OAAA;AAAA,cACA,IAAA,EAAM,UAAU,SAAS,CAAA;AAAA,cACzB,QAAA,EAAU,MAAM,KAAK,IAAA,CAAK,SAAS,CAAA;AAAA,cACnC,IAAA,EAAM,aAAa,UAAA,CAAW,SAAA,EAAW,KAAK,CAAA,mBAAI,GAAA,CAAC,eAAY,OAAA,EAAkB,CAAA;AAAA,cACjF,MAAA,EAAQ,CAAA,EAAG,gBAAgB,CAAA,EAAG,UAAU,EAAE,CAAA,CAAA;AAAA,cAC1C,aAAA,EAAe,CAAA,EAAG,mBAAmB,CAAA,EAAG,UAAU,EAAE,CAAA,CAAA;AAAA,cACpD,MAAA;AAAA,cACC,GAAG,eAAe,SAAS;AAAA,aAAA;AAAA,YATvB,SAAA,CAAU;AAAA,WAUjB;AAAA,QAEJ,CAAC,CAAA;AAAA,QACA;AAAA;AAAA;AAAA,GACH;AAEJ","file":"index.js","sourcesContent":["import { useCallback, useState, type ReactNode } from 'react'\nimport { FolderLock, Loader2 } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport {\n WorkspaceCard,\n type WorkspaceCardLabels,\n type WorkspaceCardProps,\n type WorkspaceSummary,\n} from './WorkspaceCard'\n\n/** What a host's `renderMark` is told about the card it decorates. */\nexport interface WorkspaceMarkState {\n current: boolean\n /** `onOpen` is in flight for this card: show progress instead of the glyph. */\n opening: boolean\n}\n\nexport interface WorkspaceGalleryProps {\n workspaces: readonly WorkspaceSummary[]\n /** The workspace the app is in; its card takes the \"Current workspace\" cue. */\n currentId?: string | null\n /**\n * Open a workspace. Called for EVERY card click or keypress, the current workspace included:\n * clicking \"where you already are\" still goes there. Return the promise of \"switch, then\n * navigate\" (`await select(w); navigate(...)`) and the card shows progress until it settles;\n * a rejection is the host's to report (toast it) and re-enables the card.\n */\n onOpen: (workspace: WorkspaceSummary) => Promise<unknown> | void\n /** Override the in-flight card (controlled), e.g. from a hook's `openingId`. */\n openingId?: string | null\n /** Per-card real link target, so ctrl-click / new tab work. */\n getHref?: (workspace: WorkspaceSummary) => string | undefined\n /** The entity mark before the name. Default: a folder glyph that becomes a spinner. */\n renderMark?: (workspace: WorkspaceSummary, state: WorkspaceMarkState) => ReactNode\n /** Per-card props passthrough (`stats`, `maxAvatars`, `className`...). */\n getCardProps?: (workspace: WorkspaceSummary) => Partial<WorkspaceCardProps>\n labels?: Partial<WorkspaceCardLabels>\n /** Id of the grid. Cards are `${cardTestIdPrefix}${id}`, cues `${openCueTestIdPrefix}${id}`. */\n testId?: string\n cardTestIdPrefix?: string\n openCueTestIdPrefix?: string\n /** After the cards, inside the grid: a `CreateTile`. */\n children?: ReactNode\n className?: string\n}\n\n/** The default entity mark: a quiet folder glyph, a spinner while opening. */\nfunction DefaultMark({ opening }: { opening: boolean }) {\n return (\n <div className=\"flex size-10 shrink-0 items-center justify-center rounded-md bg-background text-foreground\">\n {opening ? (\n <Loader2 className=\"size-5 animate-spin\" aria-hidden=\"true\" />\n ) : (\n <FolderLock className=\"size-5\" aria-hidden=\"true\" />\n )}\n </div>\n )\n}\n\n/**\n * The workspaces gallery: a responsive grid of `WorkspaceCard`s whose click ALWAYS opens the\n * workspace, the current one included, through one `onOpen`. Owns the per-card \"opening\" state\n * and ignores repeat clicks while one open is in flight.\n */\nexport function WorkspaceGallery({\n workspaces,\n currentId,\n onOpen,\n openingId,\n getHref,\n renderMark,\n getCardProps,\n labels,\n testId,\n cardTestIdPrefix = 'workspace-card-',\n openCueTestIdPrefix = 'workspace-open-',\n children,\n className,\n}: WorkspaceGalleryProps) {\n const [pendingId, setPendingId] = useState<string | null>(null)\n const activeOpeningId = openingId !== undefined ? openingId : pendingId\n\n const open = useCallback(\n async (workspace: WorkspaceSummary) => {\n if (activeOpeningId) return\n setPendingId(workspace.id)\n try {\n await onOpen(workspace)\n } catch {\n // The host reports failures (a toast); the gallery only has to become usable again.\n } finally {\n setPendingId(null)\n }\n },\n [onOpen, activeOpeningId]\n )\n\n return (\n <div\n className={cn('grid gap-4 sm:grid-cols-2 xl:grid-cols-3', className)}\n data-slot=\"workspace-gallery\"\n data-testid={testId}\n >\n {workspaces.map((workspace) => {\n const current = workspace.id === currentId\n const opening = workspace.id === activeOpeningId\n const state = { current, opening }\n return (\n <WorkspaceCard\n key={workspace.id}\n workspace={workspace}\n current={current}\n href={getHref?.(workspace)}\n onSelect={() => void open(workspace)}\n mark={renderMark ? renderMark(workspace, state) : <DefaultMark opening={opening} />}\n testId={`${cardTestIdPrefix}${workspace.id}`}\n openCueTestId={`${openCueTestIdPrefix}${workspace.id}`}\n labels={labels}\n {...getCardProps?.(workspace)}\n />\n )\n })}\n {children}\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../../src/workspaces/WorkspaceGallery.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AA+CA,SAAS,WAAA,CAAY,EAAE,OAAA,EAAQ,EAAyB;AACtD,EAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAU,8FACZ,QAAA,EAAA,OAAA,mBACC,GAAA,CAAC,WAAQ,SAAA,EAAU,qBAAA,EAAsB,aAAA,EAAY,MAAA,EAAO,oBAE5D,GAAA,CAAC,UAAA,EAAA,EAAW,WAAU,QAAA,EAAS,aAAA,EAAY,QAAO,CAAA,EAEtD,CAAA;AAEJ;AAOO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,UAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,gBAAA,GAAmB,iBAAA;AAAA,EACnB,mBAAA,GAAsB,iBAAA;AAAA,EACtB,QAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAwB,IAAI,CAAA;AAC9D,EAAA,MAAM,eAAA,GAAkB,SAAA,KAAc,MAAA,GAAY,SAAA,GAAY,SAAA;AAE9D,EAAA,MAAM,IAAA,GAAO,WAAA;AAAA,IACX,OAAO,SAAA,KAAgC;AACrC,MAAA,IAAI,eAAA,EAAiB;AACrB,MAAA,YAAA,CAAa,UAAU,EAAE,CAAA;AACzB,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,SAAS,CAAA;AAAA,MACxB,CAAA,CAAA,MAAQ;AAAA,MAER,CAAA,SAAE;AACA,QAAA,YAAA,CAAa,IAAI,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ,eAAe;AAAA,GAC1B;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,0CAAA,EAA4C,SAAS,CAAA;AAAA,MACnE,WAAA,EAAU,mBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,QAAA,UAAA,CAAW,GAAA,CAAI,CAAC,SAAA,KAAc;AAC7B,UAAA,MAAM,OAAA,GAAU,UAAU,EAAA,KAAO,SAAA;AACjC,UAAA,MAAM,OAAA,GAAU,UAAU,EAAA,KAAO,eAAA;AACjC,UAAA,MAAM,KAAA,GAAQ,EAAE,OAAA,EAAS,OAAA,EAAQ;AACjC,UAAA,uBACE,GAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cAEC,SAAA;AAAA,cACA,OAAA;AAAA,cACA,IAAA,EAAM,UAAU,SAAS,CAAA;AAAA,cACzB,QAAA,EAAU,MAAM,KAAK,IAAA,CAAK,SAAS,CAAA;AAAA,cACnC,IAAA,EAAM,aAAa,UAAA,CAAW,SAAA,EAAW,KAAK,CAAA,mBAAI,GAAA,CAAC,eAAY,OAAA,EAAkB,CAAA;AAAA,cACjF,MAAA,EAAQ,CAAA,EAAG,gBAAgB,CAAA,EAAG,UAAU,EAAE,CAAA,CAAA;AAAA,cAC1C,aAAA,EAAe,CAAA,EAAG,mBAAmB,CAAA,EAAG,UAAU,EAAE,CAAA,CAAA;AAAA,cACpD,MAAA;AAAA,cACC,GAAG,eAAe,SAAS;AAAA,aAAA;AAAA,YATvB,SAAA,CAAU;AAAA,WAUjB;AAAA,QAEJ,CAAC,CAAA;AAAA,QACA;AAAA;AAAA;AAAA,GACH;AAEJ","file":"index.js","sourcesContent":["import { useCallback, useState, type ReactNode } from 'react'\nimport { FolderLock, Loader2 } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport {\n WorkspaceCard,\n type WorkspaceCardLabels,\n type WorkspaceCardProps,\n type WorkspaceSummary,\n} from './WorkspaceCard'\n\n/** What a host's `renderMark` is told about the card it decorates. */\nexport interface WorkspaceMarkState {\n current: boolean\n /** `onOpen` is in flight for this card: show progress instead of the glyph. */\n opening: boolean\n}\n\nexport interface WorkspaceGalleryProps {\n workspaces: readonly WorkspaceSummary[]\n /** The workspace the app is in; its card takes the \"Current workspace\" cue. */\n currentId?: string | null\n /**\n * Open a workspace. Called for EVERY card click or keypress, the current workspace included:\n * clicking \"where you already are\" still goes there. Return the promise of \"switch, then\n * navigate\" (`await select(w); navigate(...)`) and the card shows progress until it settles;\n * a rejection is the host's to report (toast it) and re-enables the card.\n */\n onOpen: (workspace: WorkspaceSummary) => Promise<unknown> | void\n /** Override the in-flight card (controlled), e.g. from a hook's `openingId`. */\n openingId?: string | null\n /** Per-card real link target, so ctrl-click / new tab work. */\n getHref?: (workspace: WorkspaceSummary) => string | undefined\n /** The entity mark before the name. Default: a folder glyph that becomes a spinner. */\n renderMark?: (workspace: WorkspaceSummary, state: WorkspaceMarkState) => ReactNode\n /** Per-card props passthrough (`stats`, `maxAvatars`, `className`...). */\n getCardProps?: (workspace: WorkspaceSummary) => Partial<WorkspaceCardProps>\n labels?: Partial<WorkspaceCardLabels>\n /** Id of the grid. Cards are `${cardTestIdPrefix}${id}`, cues `${openCueTestIdPrefix}${id}`. */\n testId?: string\n cardTestIdPrefix?: string\n openCueTestIdPrefix?: string\n /** After the cards, inside the grid: a `CreateTile`. */\n children?: ReactNode\n className?: string\n}\n\n/** The default entity mark: a quiet folder glyph, a spinner while opening. */\nfunction DefaultMark({ opening }: { opening: boolean }) {\n return (\n <div className=\"flex size-10 shrink-0 items-center justify-center rounded-md bg-background text-foreground\">\n {opening ? (\n <Loader2 className=\"size-5 animate-spin\" aria-hidden=\"true\" />\n ) : (\n <FolderLock className=\"size-5\" aria-hidden=\"true\" />\n )}\n </div>\n )\n}\n\n/**\n * The workspaces gallery: a responsive grid of `WorkspaceCard`s whose click ALWAYS opens the\n * workspace, the current one included, through one `onOpen`. Owns the per-card \"opening\" state\n * and ignores repeat clicks while one open is in flight.\n */\nexport function WorkspaceGallery({\n workspaces,\n currentId,\n onOpen,\n openingId,\n getHref,\n renderMark,\n getCardProps,\n labels,\n testId,\n cardTestIdPrefix = 'workspace-card-',\n openCueTestIdPrefix = 'workspace-open-',\n children,\n className,\n}: WorkspaceGalleryProps) {\n const [pendingId, setPendingId] = useState<string | null>(null)\n const activeOpeningId = openingId !== undefined ? openingId : pendingId\n\n const open = useCallback(\n async (workspace: WorkspaceSummary) => {\n if (activeOpeningId) return\n setPendingId(workspace.id)\n try {\n await onOpen(workspace)\n } catch {\n // The host reports failures (a toast); the gallery only has to become usable again.\n } finally {\n setPendingId(null)\n }\n },\n [onOpen, activeOpeningId]\n )\n\n return (\n <div\n className={cn('grid gap-4 sm:grid-cols-2 xl:grid-cols-3', className)}\n data-slot=\"workspace-gallery\"\n data-testid={testId}\n >\n {workspaces.map((workspace) => {\n const current = workspace.id === currentId\n const opening = workspace.id === activeOpeningId\n const state = { current, opening }\n return (\n <WorkspaceCard\n key={workspace.id}\n workspace={workspace}\n current={current}\n href={getHref?.(workspace)}\n onSelect={() => void open(workspace)}\n mark={renderMark ? renderMark(workspace, state) : <DefaultMark opening={opening} />}\n testId={`${cardTestIdPrefix}${workspace.id}`}\n openCueTestId={`${openCueTestIdPrefix}${workspace.id}`}\n labels={labels}\n {...getCardProps?.(workspace)}\n />\n )\n })}\n {children}\n </div>\n )\n}\n"]}
@@ -1,10 +1,17 @@
1
1
  /**
2
2
  * A workspace role ('owner' | 'collaborator' | 'guest') as people see it: its name, its badge
3
- * colours and what it lets a member do.
3
+ * colours and what it lets a member do. Every picker, badge, toast and tooltip names a role
4
+ * through `formatRole`, over the SDK's one label map.
5
+ *
6
+ * The API value `guest` is a read-only member of the workspace, shown as "Read only". It is not an
7
+ * external (temporary-access) account, which is a kind of user, not a role.
4
8
  */
5
- export type WorkspaceRoleName = 'owner' | 'collaborator' | 'guest';
6
- /** "Owner", "Collaborator", "Guest". */
7
- export declare function formatRole(role: string): string;
9
+ import { workspaces } from '@arbidocs/sdk/browser';
10
+ export type WorkspaceRoleName = workspaces.WorkspaceRoleName;
11
+ /** What people see for each role (the SDK's map). The API values never change; only labels do. */
12
+ export declare const WORKSPACE_ROLE_LABELS: Record<"owner" | "collaborator" | "guest", string>;
13
+ /** "Owner", "Collaborator", "Read only" (`guest`). An unknown role is capitalised as it comes. */
14
+ export declare const formatRole: (role: string) => string;
8
15
  /** The badge classes of a role. */
9
16
  export declare function getRoleBadgeClass(role: WorkspaceRoleName): string;
10
17
  /** What a role lets a member do (a tooltip). */
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arbidocs/coedit",
3
- "version": "0.5.102",
3
+ "version": "0.5.104",
4
4
  "description": "Real-time collaboration for the ARBI native DOCX editor: a Yjs mirror of the canonical OOXML package, session, and server runtime",
5
5
  "type": "module",
6
6
  "sideEffects": false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arbidocs/blocks",
3
- "version": "0.5.102",
3
+ "version": "0.5.104",
4
4
  "description": "Composable, domain-neutral UI blocks for ARBI apps, organised by capability (retrieval, facts, agents, workspaces, citations, collaboration) plus shell, theme and site primitives, on top of @arbidocs/react.",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -335,9 +335,9 @@
335
335
  "custom-site:test:e2e": "playwright test -c examples/custom-site/playwright.config.ts"
336
336
  },
337
337
  "dependencies": {
338
- "@arbidocs/client": "0.5.102",
339
- "@arbidocs/coedit": "0.5.102",
340
- "@arbidocs/sdk": "0.5.102",
338
+ "@arbidocs/client": "0.5.104",
339
+ "@arbidocs/coedit": "0.5.104",
340
+ "@arbidocs/sdk": "0.5.104",
341
341
  "@auth0/auth0-react": "^2.19.0",
342
342
  "@dnd-kit/core": "^6.3.1",
343
343
  "@dnd-kit/sortable": "^10.0.0",
@@ -386,7 +386,7 @@
386
386
  "y-protocols": "^1.0.6"
387
387
  },
388
388
  "peerDependencies": {
389
- "@arbidocs/react": "0.5.102",
389
+ "@arbidocs/react": "0.5.104",
390
390
  "@lexical/html": "0.35.0",
391
391
  "@lexical/link": "0.35.0",
392
392
  "@lexical/list": "0.35.0",