@sudobility/entity_pages 0.0.120 → 0.0.122

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.
package/dist/index.js CHANGED
@@ -1,15 +1,16 @@
1
- import { jsx as e, jsxs as t, Fragment as R } from "react/jsx-runtime";
2
- import * as M from "react";
3
- import { useState as k } from "react";
4
- import { createPortal as W } from "react-dom";
5
- import { EntityList as L, InvitationForm as K, InvitationList as A, MemberList as Y } from "@sudobility/entity-components";
6
- import { useEntities as q, useCreateEntity as U, useEntityMembers as B, useUpdateMemberRole as G, useRemoveMember as H, useEntityInvitations as J, useCreateInvitation as Q, useCancelInvitation as V, useMyInvitations as X, useAcceptInvitation as Z, useDeclineInvitation as _ } from "@sudobility/entity_client";
7
- function ee({
8
- title: n,
9
- titleId: a,
10
- ...l
11
- }, r) {
12
- return /* @__PURE__ */ M.createElement("svg", Object.assign({
1
+ import { jsxs as t, Fragment as k, jsx as e } from "react/jsx-runtime";
2
+ import * as z from "react";
3
+ import { useState as x } from "react";
4
+ import { createPortal as S } from "react-dom";
5
+ import { ContentLayout as E } from "@sudobility/components";
6
+ import { EntityList as D, MemberList as j, InvitationForm as A, InvitationList as P } from "@sudobility/entity-components";
7
+ import { useEntities as T, useCreateEntity as O, useEntityMembers as $, useUpdateMemberRole as W, useRemoveMember as K, useCreateInvitation as Y, useMyInvitations as q, useAcceptInvitation as U, useDeclineInvitation as B } from "@sudobility/entity_client";
8
+ function G({
9
+ title: r,
10
+ titleId: i,
11
+ ...o
12
+ }, n) {
13
+ return /* @__PURE__ */ z.createElement("svg", Object.assign({
13
14
  xmlns: "http://www.w3.org/2000/svg",
14
15
  fill: "none",
15
16
  viewBox: "0 0 24 24",
@@ -17,103 +18,84 @@ function ee({
17
18
  stroke: "currentColor",
18
19
  "aria-hidden": "true",
19
20
  "data-slot": "icon",
20
- ref: r,
21
- "aria-labelledby": a
22
- }, l), n ? /* @__PURE__ */ M.createElement("title", {
23
- id: a
24
- }, n) : null, /* @__PURE__ */ M.createElement("path", {
21
+ ref: n,
22
+ "aria-labelledby": i
23
+ }, o), r ? /* @__PURE__ */ z.createElement("title", {
24
+ id: i
25
+ }, r) : null, /* @__PURE__ */ z.createElement("path", {
25
26
  strokeLinecap: "round",
26
27
  strokeLinejoin: "round",
27
28
  d: "M12 4.5v15m7.5-7.5h-15"
28
29
  }));
29
30
  }
30
- const te = /* @__PURE__ */ M.forwardRef(ee), E = {
31
+ const I = /* @__PURE__ */ z.forwardRef(G), R = {
31
32
  // Background utilities
32
33
  background: {
33
34
  overlay: "bg-black/50 dark:bg-black/70"
34
35
  }
35
36
  };
36
- function ne() {
37
+ function H() {
37
38
  return /* @__PURE__ */ t("div", { className: "space-y-3", role: "status", "aria-label": "Loading workspaces", children: [
38
- [1, 2, 3].map((n) => /* @__PURE__ */ e(
39
+ [1, 2, 3].map((r) => /* @__PURE__ */ e(
39
40
  "div",
40
41
  {
41
42
  className: "h-16 sm:h-20 rounded-lg bg-muted animate-pulse"
42
43
  },
43
- n
44
+ r
44
45
  )),
45
46
  /* @__PURE__ */ e("span", { className: "sr-only", children: "Loading workspaces..." })
46
47
  ] });
47
48
  }
48
- function me({
49
- client: n,
50
- onSelectEntity: a
49
+ function ie({
50
+ client: r,
51
+ onSelectEntity: i
51
52
  }) {
52
- const [l, r] = k(!1), [i, o] = k({
53
+ const [o, n] = x(!1), [s, l] = x({
53
54
  displayName: "",
54
55
  description: ""
55
- }), [g, m] = k(null), {
56
- data: v = [],
57
- isLoading: u,
58
- isError: y,
56
+ }), [g, d] = x(null), {
57
+ data: u = [],
58
+ isLoading: m,
59
+ isError: b,
59
60
  error: N,
60
61
  refetch: w
61
- } = q(n), f = U(n), b = v.filter((s) => s.entityType === "personal"), c = v.filter(
62
- (s) => s.entityType === "organization"
63
- ), x = async (s) => {
64
- if (s.preventDefault(), m(null), !i.displayName.trim()) {
65
- m("Display name is required");
62
+ } = T(r), h = O(r), y = u.filter((a) => a.entityType === "personal"), c = u.filter(
63
+ (a) => a.entityType === "organization"
64
+ ), v = async (a) => {
65
+ if (a.preventDefault(), d(null), !s.displayName.trim()) {
66
+ d("Display name is required");
66
67
  return;
67
68
  }
68
69
  try {
69
- await f.mutateAsync({
70
- displayName: i.displayName.trim(),
71
- description: i.description.trim() || void 0
72
- }), r(!1), o({ displayName: "", description: "" });
73
- } catch (p) {
74
- m(p.message || "Failed to create organization");
70
+ await h.mutateAsync({
71
+ displayName: s.displayName.trim(),
72
+ description: s.description.trim() || void 0
73
+ }), n(!1), l({ displayName: "", description: "" });
74
+ } catch (f) {
75
+ d(f.message || "Failed to create organization");
75
76
  }
76
77
  };
77
- return /* @__PURE__ */ e("div", { className: "w-full", children: /* @__PURE__ */ t("div", { role: "main", "aria-label": "Workspaces", children: [
78
- /* @__PURE__ */ t("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-6 sm:mb-8", children: [
79
- /* @__PURE__ */ t("div", { children: [
80
- /* @__PURE__ */ e("h1", { className: "text-xl sm:text-2xl font-bold text-foreground", children: "Workspaces" }),
81
- /* @__PURE__ */ e("p", { className: "text-sm sm:text-base text-muted-foreground", children: "Manage your personal and organization workspaces" })
82
- ] }),
83
- /* @__PURE__ */ t(
84
- "button",
85
- {
86
- type: "button",
87
- onClick: () => r(!0),
88
- "aria-label": "Create new organization",
89
- className: "flex items-center justify-center gap-2 px-4 py-2 rounded-lg bg-primary text-primary-foreground font-medium hover:bg-primary/90 transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 w-full sm:w-auto",
90
- children: [
91
- /* @__PURE__ */ e(te, { className: "h-4 w-4", "aria-hidden": "true" }),
92
- /* @__PURE__ */ e("span", { children: "New Organization" })
93
- ]
94
- }
95
- )
96
- ] }),
97
- l && W(
78
+ return /* @__PURE__ */ t(k, { children: [
79
+ o && S(
98
80
  /* @__PURE__ */ e(
99
81
  "div",
100
82
  {
101
- className: `fixed inset-0 z-50 flex items-center justify-center ${E.background.overlay} p-4`,
83
+ className: `fixed inset-0 z-50 flex items-center justify-center ${R.background.overlay} p-4`,
102
84
  role: "dialog",
103
85
  "aria-modal": "true",
104
86
  "aria-label": "Create organization",
105
- onClick: (s) => {
106
- s.target === s.currentTarget && (r(!1), o({ displayName: "", description: "" }), m(null));
87
+ onClick: (a) => {
88
+ a.target === a.currentTarget && (n(!1), l({ displayName: "", description: "" }), d(null));
107
89
  },
108
- onKeyDown: (s) => {
109
- s.key === "Escape" && (r(!1), o({ displayName: "", description: "" }), m(null));
90
+ onKeyDown: (a) => {
91
+ a.key === "Escape" && (n(!1), l({ displayName: "", description: "" }), d(null));
110
92
  },
111
93
  children: /* @__PURE__ */ t("div", { className: "w-full max-w-md rounded-lg bg-background p-4 sm:p-6 shadow-lg", children: [
112
94
  /* @__PURE__ */ e("h2", { className: "text-lg font-semibold mb-4", children: "Create Organization" }),
113
95
  /* @__PURE__ */ t(
114
96
  "form",
115
97
  {
116
- onSubmit: x,
98
+ onSubmit: v,
117
99
  className: "space-y-4",
118
100
  "aria-label": "Create organization form",
119
101
  children: [
@@ -131,10 +113,10 @@ function me({
131
113
  {
132
114
  id: "create-org-name",
133
115
  type: "text",
134
- value: i.displayName,
135
- onChange: (s) => o((p) => ({
136
- ...p,
137
- displayName: s.target.value
116
+ value: s.displayName,
117
+ onChange: (a) => l((f) => ({
118
+ ...f,
119
+ displayName: a.target.value
138
120
  })),
139
121
  placeholder: "My Organization",
140
122
  "aria-required": "true",
@@ -156,10 +138,10 @@ function me({
156
138
  "textarea",
157
139
  {
158
140
  id: "create-org-description",
159
- value: i.description,
160
- onChange: (s) => o((p) => ({
161
- ...p,
162
- description: s.target.value
141
+ value: s.description,
142
+ onChange: (a) => l((f) => ({
143
+ ...f,
144
+ description: a.target.value
163
145
  })),
164
146
  placeholder: "What is this organization for?",
165
147
  rows: 3,
@@ -182,10 +164,10 @@ function me({
182
164
  {
183
165
  type: "button",
184
166
  onClick: () => {
185
- r(!1), o({
167
+ n(!1), l({
186
168
  displayName: "",
187
169
  description: ""
188
- }), m(null);
170
+ }), d(null);
189
171
  },
190
172
  className: "px-4 py-2 rounded-lg border hover:bg-muted transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 w-full sm:w-auto",
191
173
  children: "Cancel"
@@ -195,10 +177,10 @@ function me({
195
177
  "button",
196
178
  {
197
179
  type: "submit",
198
- disabled: f.isPending,
199
- "aria-busy": f.isPending,
180
+ disabled: h.isPending,
181
+ "aria-busy": h.isPending,
200
182
  className: "px-4 py-2 rounded-lg bg-primary text-primary-foreground font-medium hover:bg-primary/90 transition-colors disabled:opacity-50 focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 w-full sm:w-auto",
201
- children: f.isPending ? "Creating..." : "Create"
183
+ children: h.isPending ? "Creating..." : "Create"
202
184
  }
203
185
  )
204
186
  ] })
@@ -210,126 +192,159 @@ function me({
210
192
  ),
211
193
  document.body
212
194
  ),
213
- y && /* @__PURE__ */ t(
214
- "div",
195
+ /* @__PURE__ */ e(
196
+ E,
215
197
  {
216
- className: "rounded-lg border border-destructive/50 bg-destructive/10 p-4 sm:p-6 text-center mb-6 sm:mb-8",
217
- role: "alert",
218
- "aria-live": "polite",
219
- children: [
220
- /* @__PURE__ */ e("p", { className: "text-destructive font-medium mb-2", children: "Failed to load workspaces" }),
221
- /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground mb-4", children: N?.message || "An unexpected error occurred" }),
222
- /* @__PURE__ */ e(
198
+ header: /* @__PURE__ */ t("div", { className: "flex items-center justify-between gap-3 border-b bg-background px-4 py-3", children: [
199
+ /* @__PURE__ */ t("div", { className: "min-w-0", children: [
200
+ /* @__PURE__ */ e("h1", { className: "text-lg sm:text-xl font-bold text-foreground", children: "Workspaces" }),
201
+ /* @__PURE__ */ e("p", { className: "text-xs sm:text-sm text-muted-foreground truncate", children: "Manage your personal and organization workspaces" })
202
+ ] }),
203
+ /* @__PURE__ */ t(
223
204
  "button",
224
205
  {
225
206
  type: "button",
226
- onClick: () => w(),
227
- "aria-label": "Retry loading workspaces",
228
- className: "px-4 py-2 rounded-lg bg-primary text-primary-foreground font-medium hover:bg-primary/90 transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2",
229
- children: "Retry"
207
+ onClick: () => n(!0),
208
+ "aria-label": "Create new organization",
209
+ className: "flex flex-shrink-0 items-center justify-center gap-2 px-3 py-2 rounded-lg bg-primary text-primary-foreground text-sm font-medium hover:bg-primary/90 transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2",
210
+ children: [
211
+ /* @__PURE__ */ e(I, { className: "h-4 w-4", "aria-hidden": "true" }),
212
+ /* @__PURE__ */ e("span", { children: "New Organization" })
213
+ ]
230
214
  }
231
215
  )
232
- ]
233
- }
234
- ),
235
- u && /* @__PURE__ */ e(ne, {}),
236
- !u && !y && /* @__PURE__ */ t(R, { children: [
237
- b.length > 0 && /* @__PURE__ */ t("section", { className: "mb-6 sm:mb-8", "aria-label": "Personal workspace", children: [
238
- /* @__PURE__ */ e("h2", { className: "text-base sm:text-lg font-semibold mb-3", children: "Personal Workspace" }),
239
- /* @__PURE__ */ e(
240
- L,
241
- {
242
- entities: b,
243
- onSelect: a,
244
- isLoading: u
245
- }
246
- )
247
- ] }),
248
- /* @__PURE__ */ t("section", { "aria-label": "Organizations", children: [
249
- /* @__PURE__ */ e("h2", { className: "text-base sm:text-lg font-semibold mb-3", children: "Organizations" }),
250
- c.length === 0 ? /* @__PURE__ */ t(
251
- "div",
252
- {
253
- className: "text-center py-6 sm:py-8 text-muted-foreground border border-dashed rounded-lg",
254
- role: "status",
255
- children: [
256
- /* @__PURE__ */ e("p", { children: "No organizations yet" }),
257
- /* @__PURE__ */ e(
258
- "button",
216
+ ] }),
217
+ children: /* @__PURE__ */ t("div", { className: "p-4", role: "main", "aria-label": "Workspaces", children: [
218
+ b && /* @__PURE__ */ t(
219
+ "div",
220
+ {
221
+ className: "rounded-lg border border-destructive/50 bg-destructive/10 p-4 sm:p-6 text-center mb-6 sm:mb-8",
222
+ role: "alert",
223
+ "aria-live": "polite",
224
+ children: [
225
+ /* @__PURE__ */ e("p", { className: "text-destructive font-medium mb-2", children: "Failed to load workspaces" }),
226
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground mb-4", children: N?.message || "An unexpected error occurred" }),
227
+ /* @__PURE__ */ e(
228
+ "button",
229
+ {
230
+ type: "button",
231
+ onClick: () => w(),
232
+ "aria-label": "Retry loading workspaces",
233
+ className: "px-4 py-2 rounded-lg bg-primary text-primary-foreground font-medium hover:bg-primary/90 transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2",
234
+ children: "Retry"
235
+ }
236
+ )
237
+ ]
238
+ }
239
+ ),
240
+ m && /* @__PURE__ */ e(H, {}),
241
+ !m && !b && /* @__PURE__ */ t(k, { children: [
242
+ y.length > 0 && /* @__PURE__ */ t(
243
+ "section",
244
+ {
245
+ className: "mb-6 sm:mb-8",
246
+ "aria-label": "Personal workspace",
247
+ children: [
248
+ /* @__PURE__ */ e("h2", { className: "text-base sm:text-lg font-semibold mb-3", children: "Personal Workspace" }),
249
+ /* @__PURE__ */ e(
250
+ D,
251
+ {
252
+ entities: y,
253
+ onSelect: i,
254
+ isLoading: m
255
+ }
256
+ )
257
+ ]
258
+ }
259
+ ),
260
+ /* @__PURE__ */ t("section", { "aria-label": "Organizations", children: [
261
+ /* @__PURE__ */ e("h2", { className: "text-base sm:text-lg font-semibold mb-3", children: "Organizations" }),
262
+ c.length === 0 ? /* @__PURE__ */ t(
263
+ "div",
259
264
  {
260
- type: "button",
261
- onClick: () => r(!0),
262
- className: "mt-2 text-primary hover:underline focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 rounded",
263
- "aria-label": "Create your first organization",
264
- children: "Create your first organization"
265
+ className: "text-center py-6 sm:py-8 text-muted-foreground border border-dashed rounded-lg",
266
+ role: "status",
267
+ children: [
268
+ /* @__PURE__ */ e("p", { children: "No organizations yet" }),
269
+ /* @__PURE__ */ e(
270
+ "button",
271
+ {
272
+ type: "button",
273
+ onClick: () => n(!0),
274
+ className: "mt-2 text-primary hover:underline focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 rounded",
275
+ "aria-label": "Create your first organization",
276
+ children: "Create your first organization"
277
+ }
278
+ )
279
+ ]
280
+ }
281
+ ) : /* @__PURE__ */ e(
282
+ D,
283
+ {
284
+ entities: c,
285
+ onSelect: i,
286
+ isLoading: m
265
287
  }
266
288
  )
267
- ]
268
- }
269
- ) : /* @__PURE__ */ e(
270
- L,
271
- {
272
- entities: c,
273
- onSelect: a,
274
- isLoading: u
275
- }
276
- )
277
- ] }),
278
- v.length === 0 && /* @__PURE__ */ t(
279
- "div",
280
- {
281
- className: "text-center py-8 sm:py-12 text-muted-foreground",
282
- role: "status",
283
- children: [
284
- /* @__PURE__ */ e("p", { className: "text-base sm:text-lg font-medium mb-2", children: "No workspaces found" }),
285
- /* @__PURE__ */ e("p", { className: "text-sm", children: "Create an organization to get started." })
286
- ]
287
- }
288
- )
289
- ] })
290
- ] }) });
289
+ ] }),
290
+ u.length === 0 && /* @__PURE__ */ t(
291
+ "div",
292
+ {
293
+ className: "text-center py-8 sm:py-12 text-muted-foreground",
294
+ role: "status",
295
+ children: [
296
+ /* @__PURE__ */ e("p", { className: "text-base sm:text-lg font-medium mb-2", children: "No workspaces found" }),
297
+ /* @__PURE__ */ e("p", { className: "text-sm", children: "Create an organization to get started." })
298
+ ]
299
+ }
300
+ )
301
+ ] })
302
+ ] })
303
+ }
304
+ )
305
+ ] });
291
306
  }
292
- function z() {
307
+ function J() {
293
308
  return /* @__PURE__ */ t("div", { className: "space-y-3", role: "status", "aria-label": "Loading members", children: [
294
- [1, 2, 3].map((n) => /* @__PURE__ */ e(
309
+ [1, 2, 3].map((r) => /* @__PURE__ */ e(
295
310
  "div",
296
311
  {
297
312
  className: "h-14 sm:h-16 rounded-lg bg-muted animate-pulse"
298
313
  },
299
- n
314
+ r
300
315
  )),
301
316
  /* @__PURE__ */ e("span", { className: "sr-only", children: "Loading members..." })
302
317
  ] });
303
318
  }
304
- function re({
305
- title: n,
306
- message: a,
307
- confirmLabel: l,
308
- onConfirm: r,
309
- onCancel: i
319
+ function Q({
320
+ title: r,
321
+ message: i,
322
+ confirmLabel: o,
323
+ onConfirm: n,
324
+ onCancel: s
310
325
  }) {
311
326
  return /* @__PURE__ */ e(
312
327
  "div",
313
328
  {
314
- className: `fixed inset-0 z-50 flex items-center justify-center ${E.background.overlay} p-4`,
329
+ className: `fixed inset-0 z-50 flex items-center justify-center ${R.background.overlay} p-4`,
315
330
  role: "dialog",
316
331
  "aria-modal": "true",
317
- "aria-label": n,
318
- onClick: (o) => {
319
- o.target === o.currentTarget && i();
332
+ "aria-label": r,
333
+ onClick: (l) => {
334
+ l.target === l.currentTarget && s();
320
335
  },
321
- onKeyDown: (o) => {
322
- o.key === "Escape" && i();
336
+ onKeyDown: (l) => {
337
+ l.key === "Escape" && s();
323
338
  },
324
339
  children: /* @__PURE__ */ t("div", { className: "w-full max-w-sm rounded-lg bg-background p-4 sm:p-6 shadow-lg", children: [
325
- /* @__PURE__ */ e("h3", { className: "text-lg font-semibold mb-2", children: n }),
326
- /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground mb-4", children: a }),
340
+ /* @__PURE__ */ e("h3", { className: "text-lg font-semibold mb-2", children: r }),
341
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground mb-4", children: i }),
327
342
  /* @__PURE__ */ t("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
328
343
  /* @__PURE__ */ e(
329
344
  "button",
330
345
  {
331
346
  type: "button",
332
- onClick: i,
347
+ onClick: s,
333
348
  className: "px-4 py-2 rounded-lg border hover:bg-muted transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 w-full sm:w-auto",
334
349
  children: "Cancel"
335
350
  }
@@ -338,9 +353,9 @@ function re({
338
353
  "button",
339
354
  {
340
355
  type: "button",
341
- onClick: r,
356
+ onClick: n,
342
357
  className: "px-4 py-2 rounded-lg bg-destructive text-destructive-foreground font-medium hover:bg-destructive/90 transition-colors focus:outline-none focus:ring-2 focus:ring-destructive focus:ring-offset-2 w-full sm:w-auto",
343
- children: l
358
+ children: o
344
359
  }
345
360
  )
346
361
  ] })
@@ -348,247 +363,208 @@ function re({
348
363
  }
349
364
  );
350
365
  }
351
- function ue({
352
- client: n,
353
- entity: a,
354
- currentUserId: l
366
+ function ae({
367
+ client: r,
368
+ entity: i,
369
+ currentUserId: o
355
370
  }) {
356
- const r = a.userRole === "owner", [i, o] = k(null), {
357
- data: g = [],
371
+ const n = i.userRole === "owner", [s, l] = x(!1), [g, d] = x(null), {
372
+ data: u = [],
358
373
  isLoading: m,
359
- isError: v,
360
- error: u,
361
- refetch: y
362
- } = B(n, a.entitySlug), N = G(n), w = H(n), {
363
- data: f = [],
364
- isLoading: b,
365
- isError: c,
366
- error: x,
367
- refetch: s
368
- } = J(n, r ? a.entitySlug : null), p = Q(n), D = V(n), S = async (d, h) => {
369
- try {
370
- await N.mutateAsync({
371
- entitySlug: a.entitySlug,
372
- memberId: d,
373
- role: h
374
- });
375
- } catch (C) {
376
- console.error("Failed to update role:", C);
377
- }
378
- }, F = (d) => {
379
- const h = g.find((I) => I.id === d), C = h?.user?.displayName || h?.user?.email || "this member";
380
- o({
381
- type: "removeMember",
382
- id: d,
383
- displayLabel: C
384
- });
385
- }, j = async (d) => {
374
+ isError: b,
375
+ error: N,
376
+ refetch: w
377
+ } = $(r, i.entitySlug), h = W(r), y = K(r), c = Y(r), v = async (p, C) => {
386
378
  try {
387
- await w.mutateAsync({
388
- entitySlug: a.entitySlug,
389
- memberId: d
379
+ await h.mutateAsync({
380
+ entitySlug: i.entitySlug,
381
+ memberId: p,
382
+ role: C
390
383
  });
391
- } catch (h) {
392
- console.error("Failed to remove member:", h);
384
+ } catch (M) {
385
+ console.error("Failed to update role:", M);
393
386
  }
394
- }, P = async (d) => {
395
- await p.mutateAsync({
396
- entitySlug: a.entitySlug,
397
- request: d
398
- });
399
- }, T = (d) => {
400
- const C = f.find((I) => I.id === d)?.email || "this invitation";
401
- o({
402
- type: "cancelInvitation",
403
- id: d,
404
- displayLabel: C
405
- });
406
- }, O = async (d) => {
407
- try {
408
- await D.mutateAsync({
409
- entitySlug: a.entitySlug,
410
- invitationId: d
411
- });
412
- } catch (h) {
413
- console.error("Failed to cancel invitation:", h);
387
+ }, a = (p) => {
388
+ const C = u.find((F) => F.id === p), M = C?.user?.displayName || C?.user?.email || "this member";
389
+ d({ id: p, label: M });
390
+ }, f = async () => {
391
+ if (g) {
392
+ try {
393
+ await y.mutateAsync({
394
+ entitySlug: i.entitySlug,
395
+ memberId: g.id
396
+ });
397
+ } catch (p) {
398
+ console.error("Failed to remove member:", p);
399
+ }
400
+ d(null);
414
401
  }
415
- }, $ = async () => {
416
- i && (i.type === "removeMember" ? await j(i.id) : i.type === "cancelInvitation" && await O(i.id), o(null));
402
+ }, L = async (p) => {
403
+ await c.mutateAsync({
404
+ entitySlug: i.entitySlug,
405
+ request: p
406
+ }), l(!1);
417
407
  };
418
- return a.entityType === "personal" ? /* @__PURE__ */ e("div", { className: "w-full", children: /* @__PURE__ */ t(
419
- "div",
408
+ return i.entityType === "personal" ? /* @__PURE__ */ e(
409
+ E,
420
410
  {
421
- className: "text-center py-8 sm:py-12 text-muted-foreground",
422
- role: "status",
423
- "aria-label": "Personal workspace notice",
424
- children: [
425
- /* @__PURE__ */ e("p", { children: "Personal workspaces cannot have additional members." }),
426
- /* @__PURE__ */ e("p", { className: "mt-2", children: "Create an organization to collaborate with others." })
427
- ]
428
- }
429
- ) }) : /* @__PURE__ */ e("div", { className: "w-full", children: /* @__PURE__ */ t("div", { role: "main", "aria-label": "Members management", children: [
430
- i && /* @__PURE__ */ e(
431
- re,
432
- {
433
- title: i.type === "removeMember" ? "Remove Member" : "Cancel Invitation",
434
- message: i.type === "removeMember" ? `Are you sure you want to remove ${i.displayLabel}? They will lose access to this organization.` : `Are you sure you want to cancel the invitation to ${i.displayLabel}?`,
435
- confirmLabel: i.type === "removeMember" ? "Remove" : "Cancel Invitation",
436
- onConfirm: $,
437
- onCancel: () => o(null)
438
- }
439
- ),
440
- /* @__PURE__ */ t("div", { className: "mb-6 sm:mb-8", children: [
441
- /* @__PURE__ */ e("h1", { className: "text-xl sm:text-2xl font-bold text-foreground", children: "Members" }),
442
- /* @__PURE__ */ t("p", { className: "text-sm sm:text-base text-muted-foreground", children: [
443
- "Manage members and invitations for ",
444
- a.displayName
445
- ] })
446
- ] }),
447
- r && /* @__PURE__ */ t(
448
- "section",
449
- {
450
- className: "rounded-lg border p-3 sm:p-4 mb-6 sm:mb-8",
451
- "aria-label": "Invite members",
452
- children: [
453
- /* @__PURE__ */ e("h2", { className: "text-base sm:text-lg font-semibold mb-3 sm:mb-4", children: "Invite Members" }),
454
- /* @__PURE__ */ e(
455
- K,
456
- {
457
- onSubmit: P,
458
- isSubmitting: p.isPending
459
- }
460
- )
461
- ]
462
- }
463
- ),
464
- r && /* @__PURE__ */ t("section", { className: "mb-6 sm:mb-8", "aria-label": "Pending invitations", children: [
465
- /* @__PURE__ */ e("h2", { className: "text-base sm:text-lg font-semibold mb-3", children: "Pending Invitations" }),
466
- c ? /* @__PURE__ */ t(
411
+ header: /* @__PURE__ */ e("div", { className: "border-b bg-background px-4 py-3", children: /* @__PURE__ */ e("h1", { className: "text-lg sm:text-xl font-bold text-foreground", children: "Members" }) }),
412
+ children: /* @__PURE__ */ t(
467
413
  "div",
468
414
  {
469
- className: "rounded-lg border border-destructive/50 bg-destructive/10 p-4 text-center",
470
- role: "alert",
471
- "aria-live": "polite",
415
+ className: "p-4 text-center py-8 sm:py-12 text-muted-foreground",
416
+ role: "status",
417
+ "aria-label": "Personal workspace notice",
472
418
  children: [
473
- /* @__PURE__ */ e("p", { className: "text-destructive font-medium mb-2", children: "Failed to load invitations" }),
474
- /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground mb-3", children: x?.message || "An unexpected error occurred" }),
475
- /* @__PURE__ */ e(
476
- "button",
477
- {
478
- type: "button",
479
- onClick: () => s(),
480
- "aria-label": "Retry loading invitations",
481
- className: "px-3 py-1.5 text-sm rounded-lg bg-primary text-primary-foreground font-medium hover:bg-primary/90 transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2",
482
- children: "Retry"
483
- }
484
- )
419
+ /* @__PURE__ */ e("p", { children: "Personal workspaces cannot have additional members." }),
420
+ /* @__PURE__ */ e("p", { className: "mt-2", children: "Create an organization to collaborate with others." })
485
421
  ]
486
422
  }
487
- ) : b ? /* @__PURE__ */ e(z, {}) : f.length === 0 ? /* @__PURE__ */ e(
488
- "div",
489
- {
490
- className: "text-center py-4 sm:py-6 text-muted-foreground border border-dashed rounded-lg",
491
- role: "status",
492
- children: /* @__PURE__ */ e("p", { children: "No pending invitations" })
493
- }
494
- ) : /* @__PURE__ */ e("div", { className: "overflow-x-auto", children: /* @__PURE__ */ e(
495
- A,
496
- {
497
- invitations: f,
498
- mode: "admin",
499
- onCancel: T,
500
- isLoading: b,
501
- emptyMessage: "No pending invitations"
502
- }
503
- ) })
504
- ] }),
505
- /* @__PURE__ */ t("section", { "aria-label": "Current members", children: [
506
- /* @__PURE__ */ t("h2", { className: "text-base sm:text-lg font-semibold mb-3", children: [
507
- "Current Members (",
508
- g.length,
509
- ")"
510
- ] }),
511
- v ? /* @__PURE__ */ t(
512
- "div",
513
- {
514
- className: "rounded-lg border border-destructive/50 bg-destructive/10 p-4 text-center",
515
- role: "alert",
516
- "aria-live": "polite",
517
- children: [
518
- /* @__PURE__ */ e("p", { className: "text-destructive font-medium mb-2", children: "Failed to load members" }),
519
- /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground mb-3", children: u?.message || "An unexpected error occurred" }),
520
- /* @__PURE__ */ e(
423
+ )
424
+ }
425
+ ) : /* @__PURE__ */ t(k, { children: [
426
+ g && /* @__PURE__ */ e(
427
+ Q,
428
+ {
429
+ title: "Remove Member",
430
+ message: `Are you sure you want to remove ${g.label}? They will lose access to this organization.`,
431
+ confirmLabel: "Remove",
432
+ onConfirm: f,
433
+ onCancel: () => d(null)
434
+ }
435
+ ),
436
+ /* @__PURE__ */ e(
437
+ E,
438
+ {
439
+ header: /* @__PURE__ */ t("div", { className: "border-b bg-background", children: [
440
+ /* @__PURE__ */ t("div", { className: "flex items-center justify-between gap-3 px-4 py-3", children: [
441
+ /* @__PURE__ */ t("div", { className: "min-w-0", children: [
442
+ /* @__PURE__ */ e("h1", { className: "text-lg sm:text-xl font-bold text-foreground", children: "Members" }),
443
+ /* @__PURE__ */ t("p", { className: "text-xs sm:text-sm text-muted-foreground truncate", children: [
444
+ u.length,
445
+ " member",
446
+ u.length === 1 ? "" : "s",
447
+ " in",
448
+ " ",
449
+ i.displayName
450
+ ] })
451
+ ] }),
452
+ n && /* @__PURE__ */ t(
521
453
  "button",
522
454
  {
523
455
  type: "button",
524
- onClick: () => y(),
525
- "aria-label": "Retry loading members",
526
- className: "px-3 py-1.5 text-sm rounded-lg bg-primary text-primary-foreground font-medium hover:bg-primary/90 transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2",
527
- children: "Retry"
456
+ onClick: () => l((p) => !p),
457
+ "aria-expanded": s,
458
+ "aria-controls": "invite-member-panel",
459
+ className: "flex flex-shrink-0 items-center gap-2 px-3 py-2 rounded-lg bg-primary text-primary-foreground text-sm font-medium hover:bg-primary/90 transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2",
460
+ children: [
461
+ /* @__PURE__ */ e(I, { className: "h-4 w-4", "aria-hidden": "true" }),
462
+ /* @__PURE__ */ e("span", { children: "Invite" })
463
+ ]
528
464
  }
529
465
  )
530
- ]
531
- }
532
- ) : m ? /* @__PURE__ */ e(z, {}) : g.length === 0 ? /* @__PURE__ */ t(
533
- "div",
534
- {
535
- className: "text-center py-4 sm:py-6 text-muted-foreground border border-dashed rounded-lg",
536
- role: "status",
537
- children: [
538
- /* @__PURE__ */ e("p", { children: "No members yet" }),
539
- r && /* @__PURE__ */ e("p", { className: "text-sm mt-1", children: "Use the invite form above to add members." })
540
- ]
541
- }
542
- ) : /* @__PURE__ */ e("div", { className: "overflow-x-auto", children: /* @__PURE__ */ e(
543
- Y,
544
- {
545
- members: g,
546
- currentUserId: l,
547
- canManage: r,
548
- onRoleChange: S,
549
- onRemove: F,
550
- isLoading: m
551
- }
552
- ) })
553
- ] })
554
- ] }) });
466
+ ] }),
467
+ n && /* @__PURE__ */ e(
468
+ "div",
469
+ {
470
+ id: "invite-member-panel",
471
+ "aria-hidden": !s,
472
+ className: `grid transition-[grid-template-rows] duration-200 ease-out ${s ? "grid-rows-[1fr]" : "grid-rows-[0fr]"}`,
473
+ children: /* @__PURE__ */ e("div", { className: "overflow-hidden", children: /* @__PURE__ */ t("div", { className: "border-t px-4 py-3 sm:py-4", children: [
474
+ /* @__PURE__ */ e("h2", { className: "text-sm font-semibold mb-3", children: "Invite Member" }),
475
+ /* @__PURE__ */ e(
476
+ A,
477
+ {
478
+ onSubmit: L,
479
+ isSubmitting: c.isPending
480
+ }
481
+ )
482
+ ] }) })
483
+ }
484
+ )
485
+ ] }),
486
+ children: /* @__PURE__ */ e("div", { className: "p-4", role: "main", "aria-label": "Members", children: b ? /* @__PURE__ */ t(
487
+ "div",
488
+ {
489
+ className: "rounded-lg border border-destructive/50 bg-destructive/10 p-4 text-center",
490
+ role: "alert",
491
+ "aria-live": "polite",
492
+ children: [
493
+ /* @__PURE__ */ e("p", { className: "text-destructive font-medium mb-2", children: "Failed to load members" }),
494
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground mb-3", children: N?.message || "An unexpected error occurred" }),
495
+ /* @__PURE__ */ e(
496
+ "button",
497
+ {
498
+ type: "button",
499
+ onClick: () => w(),
500
+ "aria-label": "Retry loading members",
501
+ className: "px-3 py-1.5 text-sm rounded-lg bg-primary text-primary-foreground font-medium hover:bg-primary/90 transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2",
502
+ children: "Retry"
503
+ }
504
+ )
505
+ ]
506
+ }
507
+ ) : m ? /* @__PURE__ */ e(J, {}) : u.length === 0 ? /* @__PURE__ */ t(
508
+ "div",
509
+ {
510
+ className: "text-center py-8 sm:py-12 text-muted-foreground border border-dashed rounded-lg",
511
+ role: "status",
512
+ children: [
513
+ /* @__PURE__ */ e("p", { children: "No members yet" }),
514
+ n && /* @__PURE__ */ e("p", { className: "text-sm mt-1", children: "Use the Invite button to add members." })
515
+ ]
516
+ }
517
+ ) : /* @__PURE__ */ e("div", { className: "overflow-x-auto", children: /* @__PURE__ */ e(
518
+ j,
519
+ {
520
+ members: u,
521
+ currentUserId: o,
522
+ canManage: n,
523
+ onRoleChange: v,
524
+ onRemove: a,
525
+ isLoading: m
526
+ }
527
+ ) }) })
528
+ }
529
+ )
530
+ ] });
555
531
  }
556
- function ie() {
532
+ function V() {
557
533
  return /* @__PURE__ */ t("div", { className: "space-y-3", role: "status", "aria-label": "Loading invitations", children: [
558
- [1, 2].map((n) => /* @__PURE__ */ e(
534
+ [1, 2].map((r) => /* @__PURE__ */ e(
559
535
  "div",
560
536
  {
561
537
  className: "h-16 sm:h-20 rounded-lg bg-muted animate-pulse"
562
538
  },
563
- n
539
+ r
564
540
  )),
565
541
  /* @__PURE__ */ e("span", { className: "sr-only", children: "Loading invitations..." })
566
542
  ] });
567
543
  }
568
- function ae({
569
- entityName: n,
570
- onConfirm: a,
571
- onCancel: l
544
+ function X({
545
+ entityName: r,
546
+ onConfirm: i,
547
+ onCancel: o
572
548
  }) {
573
549
  return /* @__PURE__ */ e(
574
550
  "div",
575
551
  {
576
- className: `fixed inset-0 z-50 flex items-center justify-center ${E.background.overlay} p-4`,
552
+ className: `fixed inset-0 z-50 flex items-center justify-center ${R.background.overlay} p-4`,
577
553
  role: "dialog",
578
554
  "aria-modal": "true",
579
555
  "aria-label": "Decline invitation",
580
- onClick: (r) => {
581
- r.target === r.currentTarget && l();
556
+ onClick: (n) => {
557
+ n.target === n.currentTarget && o();
582
558
  },
583
- onKeyDown: (r) => {
584
- r.key === "Escape" && l();
559
+ onKeyDown: (n) => {
560
+ n.key === "Escape" && o();
585
561
  },
586
562
  children: /* @__PURE__ */ t("div", { className: "w-full max-w-sm rounded-lg bg-background p-4 sm:p-6 shadow-lg", children: [
587
563
  /* @__PURE__ */ e("h3", { className: "text-lg font-semibold mb-2", children: "Decline Invitation" }),
588
564
  /* @__PURE__ */ t("p", { className: "text-sm text-muted-foreground mb-4", children: [
589
565
  "Are you sure you want to decline the invitation to join",
590
566
  " ",
591
- /* @__PURE__ */ e("strong", { children: n }),
567
+ /* @__PURE__ */ e("strong", { children: r }),
592
568
  "? You will need a new invitation to join later."
593
569
  ] }),
594
570
  /* @__PURE__ */ t("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
@@ -596,7 +572,7 @@ function ae({
596
572
  "button",
597
573
  {
598
574
  type: "button",
599
- onClick: l,
575
+ onClick: o,
600
576
  className: "px-4 py-2 rounded-lg border hover:bg-muted transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 w-full sm:w-auto",
601
577
  children: "Keep"
602
578
  }
@@ -605,7 +581,7 @@ function ae({
605
581
  "button",
606
582
  {
607
583
  type: "button",
608
- onClick: a,
584
+ onClick: i,
609
585
  className: "px-4 py-2 rounded-lg bg-destructive text-destructive-foreground font-medium hover:bg-destructive/90 transition-colors focus:outline-none focus:ring-2 focus:ring-destructive focus:ring-offset-2 w-full sm:w-auto",
610
586
  children: "Decline"
611
587
  }
@@ -615,98 +591,105 @@ function ae({
615
591
  }
616
592
  );
617
593
  }
618
- function ge({
619
- client: n,
620
- onInvitationAccepted: a
594
+ function oe({
595
+ client: r,
596
+ onInvitationAccepted: i
621
597
  }) {
622
598
  const {
623
- data: l = [],
624
- isLoading: r,
625
- isError: i,
626
- error: o,
599
+ data: o = [],
600
+ isLoading: n,
601
+ isError: s,
602
+ error: l,
627
603
  refetch: g
628
- } = X(n), m = Z(n), v = _(n), [u, y] = k(null), N = async (c) => {
604
+ } = q(r), d = U(r), u = B(r), [m, b] = x(null), N = async (c) => {
629
605
  try {
630
- await m.mutateAsync(c), a?.();
631
- } catch (x) {
632
- console.error("Failed to accept invitation:", x);
606
+ await d.mutateAsync(c), i?.();
607
+ } catch (v) {
608
+ console.error("Failed to accept invitation:", v);
633
609
  }
634
610
  }, w = (c) => {
635
- const s = l.find((p) => p.token === c)?.entity?.displayName || "this organization";
636
- y({ token: c, entityName: s });
637
- }, f = async () => {
638
- if (u) {
611
+ const a = o.find((f) => f.token === c)?.entity?.displayName || "this organization";
612
+ b({ token: c, entityName: a });
613
+ }, h = async () => {
614
+ if (m) {
639
615
  try {
640
- await v.mutateAsync(u.token);
616
+ await u.mutateAsync(m.token);
641
617
  } catch (c) {
642
618
  console.error("Failed to decline invitation:", c);
643
619
  }
644
- y(null);
620
+ b(null);
645
621
  }
646
- }, b = l.filter(
622
+ }, y = o.filter(
647
623
  (c) => c.status === "pending"
648
624
  ).length;
649
- return /* @__PURE__ */ e("div", { className: "w-full", children: /* @__PURE__ */ t("div", { role: "main", "aria-label": "Invitations", children: [
650
- u && /* @__PURE__ */ e(
651
- ae,
625
+ return /* @__PURE__ */ t(k, { children: [
626
+ m && /* @__PURE__ */ e(
627
+ X,
652
628
  {
653
- entityName: u.entityName,
654
- onConfirm: f,
655
- onCancel: () => y(null)
629
+ entityName: m.entityName,
630
+ onConfirm: h,
631
+ onCancel: () => b(null)
656
632
  }
657
633
  ),
658
- /* @__PURE__ */ t("div", { className: "mb-4 sm:mb-6", children: [
659
- /* @__PURE__ */ e("h1", { className: "text-xl sm:text-2xl font-bold text-foreground", children: "Invitations" }),
660
- /* @__PURE__ */ e("p", { className: "text-sm sm:text-base text-muted-foreground", children: b > 0 ? `You have ${b} pending invitation${b > 1 ? "s" : ""}` : "No pending invitations" })
661
- ] }),
662
- i && /* @__PURE__ */ t(
663
- "div",
634
+ /* @__PURE__ */ e(
635
+ E,
664
636
  {
665
- className: "rounded-lg border border-destructive/50 bg-destructive/10 p-4 sm:p-6 text-center mb-4 sm:mb-6",
666
- role: "alert",
667
- "aria-live": "polite",
668
- children: [
669
- /* @__PURE__ */ e("p", { className: "text-destructive font-medium mb-2", children: "Failed to load invitations" }),
670
- /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground mb-4", children: o?.message || "An unexpected error occurred" }),
671
- /* @__PURE__ */ e(
672
- "button",
637
+ header: /* @__PURE__ */ t("div", { className: "border-b bg-background px-4 py-3", children: [
638
+ /* @__PURE__ */ e("h1", { className: "text-lg sm:text-xl font-bold text-foreground", children: "Invitations" }),
639
+ /* @__PURE__ */ e("p", { className: "text-xs sm:text-sm text-muted-foreground", children: y > 0 ? `You have ${y} pending invitation${y > 1 ? "s" : ""}` : "No pending invitations" })
640
+ ] }),
641
+ children: /* @__PURE__ */ t("div", { className: "p-4", role: "main", "aria-label": "Invitations", children: [
642
+ s && /* @__PURE__ */ t(
643
+ "div",
673
644
  {
674
- type: "button",
675
- onClick: () => g(),
676
- "aria-label": "Retry loading invitations",
677
- className: "px-4 py-2 rounded-lg bg-primary text-primary-foreground font-medium hover:bg-primary/90 transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2",
678
- children: "Retry"
645
+ className: "rounded-lg border border-destructive/50 bg-destructive/10 p-4 sm:p-6 text-center",
646
+ role: "alert",
647
+ "aria-live": "polite",
648
+ children: [
649
+ /* @__PURE__ */ e("p", { className: "text-destructive font-medium mb-2", children: "Failed to load invitations" }),
650
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground mb-4", children: l?.message || "An unexpected error occurred" }),
651
+ /* @__PURE__ */ e(
652
+ "button",
653
+ {
654
+ type: "button",
655
+ onClick: () => g(),
656
+ "aria-label": "Retry loading invitations",
657
+ className: "px-4 py-2 rounded-lg bg-primary text-primary-foreground font-medium hover:bg-primary/90 transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2",
658
+ children: "Retry"
659
+ }
660
+ )
661
+ ]
679
662
  }
680
- )
681
- ]
682
- }
683
- ),
684
- r && /* @__PURE__ */ e(ie, {}),
685
- !r && !i && /* @__PURE__ */ e(R, { children: l.length === 0 ? /* @__PURE__ */ t(
686
- "div",
687
- {
688
- className: "text-center py-6 sm:py-8 text-muted-foreground border border-dashed rounded-lg",
689
- role: "status",
690
- children: [
691
- /* @__PURE__ */ e("p", { className: "text-base sm:text-lg font-medium mb-1", children: "No invitations" }),
692
- /* @__PURE__ */ e("p", { className: "text-sm", children: "You don't have any pending invitations" })
693
- ]
694
- }
695
- ) : /* @__PURE__ */ e("section", { "aria-label": "Invitation list", children: /* @__PURE__ */ e("div", { className: "overflow-x-auto", children: /* @__PURE__ */ e(
696
- A,
697
- {
698
- invitations: l,
699
- mode: "user",
700
- onAccept: N,
701
- onDecline: w,
702
- isLoading: r,
703
- emptyMessage: "You don't have any pending invitations"
663
+ ),
664
+ n && /* @__PURE__ */ e(V, {}),
665
+ !n && !s && /* @__PURE__ */ e(k, { children: o.length === 0 ? /* @__PURE__ */ t(
666
+ "div",
667
+ {
668
+ className: "text-center py-8 sm:py-12 text-muted-foreground border border-dashed rounded-lg",
669
+ role: "status",
670
+ children: [
671
+ /* @__PURE__ */ e("p", { className: "text-base sm:text-lg font-medium mb-1", children: "No invitations" }),
672
+ /* @__PURE__ */ e("p", { className: "text-sm", children: "You don't have any pending invitations" })
673
+ ]
674
+ }
675
+ ) : /* @__PURE__ */ e("section", { "aria-label": "Invitation list", children: /* @__PURE__ */ e("div", { className: "overflow-x-auto", children: /* @__PURE__ */ e(
676
+ P,
677
+ {
678
+ invitations: o,
679
+ mode: "user",
680
+ onAccept: N,
681
+ onDecline: w,
682
+ isLoading: n,
683
+ emptyMessage: "You don't have any pending invitations"
684
+ }
685
+ ) }) }) })
686
+ ] })
704
687
  }
705
- ) }) }) })
706
- ] }) });
688
+ )
689
+ ] });
707
690
  }
708
691
  export {
709
- me as EntityListPage,
710
- ge as InvitationsPage,
711
- ue as MembersManagementPage
692
+ ie as EntityListPage,
693
+ oe as InvitationsPage,
694
+ ae as MembersManagementPage
712
695
  };
@@ -9,6 +9,6 @@ export interface MembersManagementPageProps {
9
9
  currentUserId: string;
10
10
  }
11
11
  /**
12
- * Page for managing entity members and invitations.
12
+ * Page for managing an entity's members.
13
13
  */
14
14
  export declare function MembersManagementPage({ client, entity, currentUserId, }: MembersManagementPageProps): import("react/jsx-runtime").JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sudobility/entity_pages",
3
- "version": "0.0.120",
3
+ "version": "0.0.122",
4
4
  "description": "Page containers for entity/organization management",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -40,7 +40,7 @@
40
40
  "react": "^18.0.0 || ^19.0.0",
41
41
  "react-dom": "^18.0.0 || ^19.0.0",
42
42
  "@tanstack/react-query": "^5.0.0",
43
- "@sudobility/components": "^5.0.81",
43
+ "@sudobility/components": "^5.0.82",
44
44
  "@sudobility/entity_client": "^0.0.36",
45
45
  "@sudobility/entity-components": "^1.0.13",
46
46
  "@heroicons/react": "^2.2.0",
@@ -50,7 +50,7 @@
50
50
  "devDependencies": {
51
51
  "@eslint/js": "^9.38.0",
52
52
  "@heroicons/react": "^2.2.0",
53
- "@sudobility/components": "^5.0.81",
53
+ "@sudobility/components": "^5.0.82",
54
54
  "@sudobility/design": "^1.1.32",
55
55
  "@sudobility/entity-components": "^1.0.13",
56
56
  "@sudobility/entity_client": "^0.0.36",