@burdenoff/microfe-organization 2026.624.1 → 2026.625.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/organization-management/AdminOrganizationRoot.js +4 -4
  2. package/dist/organization-management/AdminOrganizationRoot.js.map +1 -1
  3. package/dist/organization-management/UserOrganizationRoot.js +4 -4
  4. package/dist/organization-management/UserOrganizationRoot.js.map +1 -1
  5. package/dist/organization-management/modules/members/components/BulkInviteForm.js +155 -174
  6. package/dist/organization-management/modules/members/components/BulkInviteForm.js.map +1 -1
  7. package/dist/organization-management/modules/members/components/PendingInvitesList.js +78 -101
  8. package/dist/organization-management/modules/members/components/PendingInvitesList.js.map +1 -1
  9. package/dist/organization-management/modules/members/pages/InviteMemberPage.js +58 -52
  10. package/dist/organization-management/modules/members/pages/InviteMemberPage.js.map +1 -1
  11. package/dist/organization-management/modules/members/pages/InvitePeoplePage.js +42 -40
  12. package/dist/organization-management/modules/members/pages/InvitePeoplePage.js.map +1 -1
  13. package/dist/organization-management/modules/members/pages/MemberDetailPage.js +71 -69
  14. package/dist/organization-management/modules/members/pages/MemberDetailPage.js.map +1 -1
  15. package/dist/organization-management/modules/members/pages/MembersListPage.js +233 -204
  16. package/dist/organization-management/modules/members/pages/MembersListPage.js.map +1 -1
  17. package/dist/organization-management/modules/members/pages/MyInvitesPage.js +38 -37
  18. package/dist/organization-management/modules/members/pages/MyInvitesPage.js.map +1 -1
  19. package/dist/organization-management/modules/members/pages/OrganizationInviteAcceptancePage.js +134 -132
  20. package/dist/organization-management/modules/members/pages/OrganizationInviteAcceptancePage.js.map +1 -1
  21. package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js +39 -37
  22. package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js.map +1 -1
  23. package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js +164 -167
  24. package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js.map +1 -1
  25. package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js +49 -47
  26. package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js.map +1 -1
  27. package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js +258 -230
  28. package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js.map +1 -1
  29. package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js +43 -50
  30. package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js.map +1 -1
  31. package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js +40 -38
  32. package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js.map +1 -1
  33. package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js +230 -299
  34. package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js.map +1 -1
  35. package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js +47 -45
  36. package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js.map +1 -1
  37. package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js +117 -74
  38. package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js.map +1 -1
  39. package/dist/organization-management/shared/components/feedback/EmptyState.js +1 -1
  40. package/dist/organization-management/shared/components/feedback/EmptyState.js.map +1 -1
  41. package/dist/organization-management/shared/components/feedback/ErrorState.js +1 -1
  42. package/dist/organization-management/shared/components/feedback/ErrorState.js.map +1 -1
  43. package/dist/organization-management/shared/components/feedback/LoadingState.js +1 -1
  44. package/dist/organization-management/shared/components/feedback/LoadingState.js.map +1 -1
  45. package/package.json +2 -2
@@ -3,22 +3,23 @@ import { toast as t } from "../../../../node_modules/sonner/dist/index.js";
3
3
  import { useTr as n } from "../../../shared/hooks/useTr.js";
4
4
  import { LoadingState as r } from "../../../shared/components/feedback/LoadingState.js";
5
5
  import { ErrorState as i } from "../../../shared/components/feedback/ErrorState.js";
6
- import { EmptyState as a } from "../../../shared/components/feedback/EmptyState.js";
7
- import { useConfirmDialog as o } from "../../../shared/components/dialog/ConfirmDialog.js";
8
- import { PERMISSIONS as s } from "../../../constants/permissions.js";
9
- import { MemberRoleBadge as c } from "../../members/components/MemberRoleBadge.js";
10
- import { useWorkspace as l } from "../hooks/useWorkspaces.js";
11
- import { WorkspaceStatusBadge as u } from "../components/WorkspaceStatusBadge.js";
12
- import { useRemoveWorkspaceMember as ee, useWorkspaceMembers as te } from "../hooks/useWorkspaceMembers.js";
13
- import { AddWorkspaceMemberDialog as d } from "../components/AddWorkspaceMemberDialog.js";
14
- import { useMemo as f, useState as p } from "react";
15
- import { ArrowLeft as m, Briefcase as h, Edit as ne, Trash2 as g, UserPlus as _, Users as v } from "lucide-react";
16
- import { usePermissions as y } from "@burdenoff/fe-libs/shared/providers/shell";
17
- import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
18
- import { useParams as C } from "react-router-dom";
19
- import { ActorIdentity as w, buildActorFallback as T, useActorProfiles as E } from "@burdenoff/fe-libs/shared";
6
+ import { EmptyState as ee } from "../../../shared/components/feedback/EmptyState.js";
7
+ import { useConfirmDialog as a } from "../../../shared/components/dialog/ConfirmDialog.js";
8
+ import { PERMISSIONS as o } from "../../../constants/permissions.js";
9
+ import { MemberRoleBadge as s } from "../../members/components/MemberRoleBadge.js";
10
+ import { useWorkspace as c } from "../hooks/useWorkspaces.js";
11
+ import { WorkspaceStatusBadge as l } from "../components/WorkspaceStatusBadge.js";
12
+ import { useRemoveWorkspaceMember as u, useWorkspaceMembers as d } from "../hooks/useWorkspaceMembers.js";
13
+ import { AddWorkspaceMemberDialog as f } from "../components/AddWorkspaceMemberDialog.js";
14
+ import { useMemo as p, useState as m } from "react";
15
+ import { ArrowLeft as h, Briefcase as g, Edit as _, Trash2 as v, UserPlus as te, Users as y } from "lucide-react";
16
+ import { CTAOverflowMenu as b, EmphasisPanel as x, GlassCard as S, ResponsiveTable as C } from "@burdenoff/fe-libs/ui";
17
+ import { usePermissions as ne } from "@burdenoff/fe-libs/shared/providers/shell";
18
+ import { jsx as w, jsxs as T } from "react/jsx-runtime";
19
+ import { useParams as E } from "react-router-dom";
20
+ import { ActorIdentity as D, buildActorFallback as O, useActorProfiles as k } from "@burdenoff/fe-libs/shared";
20
21
  //#region src/organization-management/modules/workspaces/pages/WorkspaceDetailPage.tsx
21
- function D(e) {
22
+ function A(e) {
22
23
  return new Date(e).toLocaleDateString("en-US", {
23
24
  year: "numeric",
24
25
  month: "long",
@@ -27,397 +28,327 @@ function D(e) {
27
28
  minute: "2-digit"
28
29
  });
29
30
  }
30
- function O() {
31
- let O = n(), { id: k } = C(), { navigate: A, basePath: j = "/organizations", apiGatewayUrl: M, authToken: N } = e(), { hasPermission: P, isLoading: F } = y(), { workspace: I, loading: L, error: R } = l(k ?? ""), [z, B] = p("overview"), [V, H] = p(!1), { openConfirmDialog: U, ConfirmDialog: W } = o(), { members: G, loading: K, error: q, refetch: J } = te(z === "members" && k ? k ?? "" : "", 50, 0), { removeWorkspaceMember: Y, loading: X } = ee(), Z = G.length > 0 || z === "members" ? G.length : I?.memberCount ?? 0, Q = E(f(() => G.map((e) => ({
31
+ function j() {
32
+ let j = n(), { id: M } = E(), { navigate: N, basePath: P = "/organizations", apiGatewayUrl: F, authToken: I } = e(), { hasPermission: L, isLoading: R } = ne(), { workspace: z, loading: B, error: V } = c(M ?? ""), [H, U] = m("overview"), [W, G] = m(!1), { openConfirmDialog: K, ConfirmDialog: q } = a(), { members: J, loading: Y, error: X, refetch: Z } = d(H === "members" && M ? M ?? "" : "", 50, 0), { removeWorkspaceMember: Q, loading: re } = u(), $ = J.length > 0 || H === "members" ? J.length : z?.memberCount ?? 0, ie = k(p(() => J.map((e) => ({
32
33
  actorId: e.userId,
33
34
  actorType: "user"
34
- })), [G]), {
35
- apiGatewayUrl: M,
36
- authToken: N,
37
- orgId: I?.organizationId,
38
- workspaceId: k
39
- }), re = f(() => [{
35
+ })), [J]), {
36
+ apiGatewayUrl: F,
37
+ authToken: I,
38
+ orgId: z?.organizationId,
39
+ workspaceId: M
40
+ }), ae = p(() => [{
40
41
  id: "overview",
41
- label: O("workspaces.detail.tab.overview", "Overview")
42
+ label: j("workspaces.detail.tab.overview", "Overview")
42
43
  }, {
43
44
  id: "members",
44
- label: `${O("workspaces.detail.tab.members", "Members")} (${Z})`
45
- }], [Z, O]), $ = (e) => {
46
- k && U({
47
- title: O("workspaces.removeMember.title", "Remove workspace member"),
48
- description: `${O("workspaces.removeMember.prefix", "Remove")} ${e} ${O("workspaces.removeMember.suffix", "from this workspace? They will keep their organization membership.")}`,
49
- confirmText: O("common.remove", "Remove"),
45
+ label: `${j("workspaces.detail.tab.members", "Members")} (${$})`
46
+ }], [$, j]), oe = (e) => {
47
+ M && K({
48
+ title: j("workspaces.removeMember.title", "Remove workspace member"),
49
+ description: `${j("workspaces.removeMember.prefix", "Remove")} ${e} ${j("workspaces.removeMember.suffix", "from this workspace? They will keep their organization membership.")}`,
50
+ confirmText: j("common.remove", "Remove"),
50
51
  variant: "danger",
51
52
  onConfirm: () => {
52
53
  (async () => {
53
54
  try {
54
- let n = await Y(k, e);
55
- if (n.errors?.length) throw Error(n.errors[0]?.message ?? O("workspaces.removeMember.failed", "Failed to remove workspace member"));
56
- await J(), t.success(O("workspaces.removeMember.success", "Workspace member removed successfully"));
55
+ let n = await Q(M, e);
56
+ if (n.errors?.length) throw Error(n.errors[0]?.message ?? j("workspaces.removeMember.failed", "Failed to remove workspace member"));
57
+ await Z(), t.success(j("workspaces.removeMember.success", "Workspace member removed successfully"));
57
58
  } catch (e) {
58
- t.error(e instanceof Error ? e.message : O("workspaces.removeMember.failed", "Failed to remove workspace member"));
59
+ t.error(e instanceof Error ? e.message : j("workspaces.removeMember.failed", "Failed to remove workspace member"));
59
60
  }
60
61
  })();
61
62
  }
62
63
  });
63
- };
64
- return F ? /* @__PURE__ */ x("div", {
64
+ }, se = [
65
+ {
66
+ key: "user",
67
+ header: j("members.detail.userId", "User ID"),
68
+ priority: "primary",
69
+ cell: (e) => /* @__PURE__ */ w(D, {
70
+ profile: ie[e.userId] ?? O({
71
+ actorId: e.userId,
72
+ actorType: "user"
73
+ }),
74
+ variant: "cell"
75
+ })
76
+ },
77
+ {
78
+ key: "role",
79
+ header: j("members.list.column.role", "Role"),
80
+ priority: "secondary",
81
+ cell: (e) => /* @__PURE__ */ w(s, { role: e.role })
82
+ },
83
+ {
84
+ key: "joined",
85
+ header: j("members.list.joined", "Joined"),
86
+ priority: "secondary",
87
+ cell: (e) => /* @__PURE__ */ w("span", {
88
+ className: "text-sm text-[var(--color-text-secondary)]",
89
+ children: A(e.joinedAt)
90
+ })
91
+ },
92
+ {
93
+ key: "invitedBy",
94
+ header: j("members.list.invitedBy", "Invited by"),
95
+ priority: "secondary",
96
+ cell: (e) => /* @__PURE__ */ w("span", {
97
+ className: "break-all font-mono text-sm text-[var(--color-text-secondary)]",
98
+ children: e.invitedBy || "—"
99
+ })
100
+ }
101
+ ];
102
+ return R ? /* @__PURE__ */ w("div", {
65
103
  className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
66
- children: /* @__PURE__ */ x(r, { message: O("common.loadingPermissions", "Loading permissions...") })
67
- }) : P(s.WORKSPACE_READ) ? L ? /* @__PURE__ */ x("div", {
104
+ children: /* @__PURE__ */ w(r, { message: j("common.loadingPermissions", "Loading permissions...") })
105
+ }) : L(o.WORKSPACE_READ) ? B ? /* @__PURE__ */ w("div", {
68
106
  className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
69
- children: /* @__PURE__ */ x(r, { message: O("workspaces.detail.loading", "Loading workspace details...") })
70
- }) : R || !I ? /* @__PURE__ */ x("div", {
107
+ children: /* @__PURE__ */ w(r, { message: j("workspaces.detail.loading", "Loading workspace details...") })
108
+ }) : V || !z ? /* @__PURE__ */ w("div", {
71
109
  className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
72
- children: /* @__PURE__ */ x(i, {
73
- message: R?.message || O("workspaces.detail.notFound", "Workspace not found"),
110
+ children: /* @__PURE__ */ w(i, {
111
+ message: V?.message || j("workspaces.detail.notFound", "Workspace not found"),
74
112
  action: {
75
- label: O("workspaces.create.backToWorkspaces", "Back to Workspaces"),
76
- onClick: () => A(`${j}/workspaces`)
113
+ label: j("workspaces.create.backToWorkspaces", "Back to Workspaces"),
114
+ onClick: () => N(`${P}/workspaces`)
77
115
  }
78
116
  })
79
- }) : /* @__PURE__ */ S("div", {
80
- className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-300",
117
+ }) : /* @__PURE__ */ T("div", {
118
+ className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-200",
81
119
  children: [
82
- /* @__PURE__ */ S("div", {
120
+ /* @__PURE__ */ T("div", {
83
121
  className: "mx-auto flex w-full max-w-7xl flex-col gap-6",
84
- children: [/* @__PURE__ */ S("div", {
122
+ children: [/* @__PURE__ */ T("div", {
85
123
  className: "space-y-4",
86
- children: [/* @__PURE__ */ S("button", {
124
+ children: [/* @__PURE__ */ T("button", {
87
125
  type: "button",
88
- onClick: () => A(`${j}/workspaces`),
126
+ onClick: () => N(`${P}/workspaces`),
89
127
  className: "inline-flex min-h-10 items-center gap-2 text-[var(--color-text-secondary)] transition-all duration-200 hover:text-[var(--color-text-primary)]",
90
- children: [/* @__PURE__ */ x(m, {
128
+ children: [/* @__PURE__ */ w(h, {
91
129
  size: 20,
92
130
  "aria-hidden": "true"
93
- }), /* @__PURE__ */ x("span", {
131
+ }), /* @__PURE__ */ w("span", {
94
132
  className: "text-sm font-medium",
95
- children: O("workspaces.create.backToWorkspaces", "Back to Workspaces")
133
+ children: j("workspaces.create.backToWorkspaces", "Back to Workspaces")
96
134
  })]
97
- }), /* @__PURE__ */ S("div", {
98
- className: "flex flex-col gap-4 rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] p-5 shadow-[var(--shadow-elevation-1)] lg:flex-row lg:items-start lg:justify-between",
99
- children: [/* @__PURE__ */ S("div", {
135
+ }), /* @__PURE__ */ T(x, {
136
+ className: "flex flex-col gap-4 p-5 lg:flex-row lg:items-start lg:justify-between",
137
+ children: [/* @__PURE__ */ T("div", {
100
138
  className: "flex min-w-0 items-start gap-4",
101
- children: [/* @__PURE__ */ x("div", {
139
+ children: [/* @__PURE__ */ w("div", {
102
140
  className: "flex size-16 items-center justify-center rounded-xl bg-[var(--color-status-info-bgSubtle)] text-[var(--color-status-info-text)]",
103
- children: /* @__PURE__ */ x(h, {
141
+ children: /* @__PURE__ */ w(g, {
104
142
  size: 28,
105
143
  "aria-hidden": "true"
106
144
  })
107
- }), /* @__PURE__ */ S("div", {
145
+ }), /* @__PURE__ */ T("div", {
108
146
  className: "min-w-0 space-y-2",
109
- children: [/* @__PURE__ */ S("div", {
147
+ children: [/* @__PURE__ */ T("div", {
110
148
  className: "flex flex-wrap items-start gap-2",
111
- children: [/* @__PURE__ */ x("h1", {
149
+ children: [/* @__PURE__ */ w("h1", {
112
150
  className: "text-3xl font-bold text-[var(--color-text-primary)]",
113
- children: I.name
114
- }), /* @__PURE__ */ x(u, { status: I.status })]
115
- }), /* @__PURE__ */ S("p", {
151
+ children: z.name
152
+ }), /* @__PURE__ */ w(l, { status: z.status })]
153
+ }), /* @__PURE__ */ T("p", {
116
154
  className: "break-all font-mono text-sm text-[var(--color-text-secondary)]",
117
- children: ["/", I.slug]
155
+ children: ["/", z.slug]
118
156
  })]
119
157
  })]
120
- }), /* @__PURE__ */ S("div", {
121
- className: "flex flex-col gap-3 sm:flex-row",
122
- children: [/* @__PURE__ */ S("button", {
123
- type: "button",
124
- onClick: () => A(`${j}/${I.organizationId}`),
125
- className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border border-[var(--color-border-default)] px-4 py-2.5 text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)]",
126
- children: [/* @__PURE__ */ x(v, {
158
+ }), /* @__PURE__ */ w(b, {
159
+ primary: L(o.WORKSPACE_UPDATE) ? {
160
+ label: j("workspaces.edit.title", "Edit Workspace"),
161
+ icon: /* @__PURE__ */ w(_, {
127
162
  size: 16,
128
163
  "aria-hidden": "true"
129
- }), /* @__PURE__ */ x("span", { children: O("workspaces.detail.viewOrganization", "View Organization") })]
130
- }), P(s.WORKSPACE_UPDATE) && /* @__PURE__ */ S("button", {
131
- type: "button",
132
- onClick: () => A(`${j}/workspaces/${k}/edit`),
133
- className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg bg-[var(--color-action-primary-bg)] px-4 py-2.5 text-[var(--color-action-primary-text)] transition-all duration-200 hover:opacity-90",
134
- children: [/* @__PURE__ */ x(ne, {
164
+ }),
165
+ onSelect: () => N(`${P}/workspaces/${M}/edit`)
166
+ } : void 0,
167
+ actions: [{
168
+ label: j("workspaces.detail.viewOrganization", "View Organization"),
169
+ icon: /* @__PURE__ */ w(y, {
135
170
  size: 16,
136
171
  "aria-hidden": "true"
137
- }), /* @__PURE__ */ x("span", { children: O("workspaces.edit.title", "Edit Workspace") })]
138
- })]
172
+ }),
173
+ onSelect: () => N(`${P}/${z.organizationId}`)
174
+ }]
139
175
  })]
140
176
  })]
141
- }), /* @__PURE__ */ S("div", {
142
- className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] shadow-[var(--shadow-elevation-1)]",
143
- children: [/* @__PURE__ */ x("div", {
144
- className: "overflow-x-auto border-b border-[var(--color-border-default)]",
145
- children: /* @__PURE__ */ x("div", {
177
+ }), /* @__PURE__ */ T(S, {
178
+ treatment: "plain",
179
+ className: "border-border-seam p-0",
180
+ children: [/* @__PURE__ */ w("div", {
181
+ className: "overflow-x-auto border-b border-[var(--color-border-seam)]",
182
+ children: /* @__PURE__ */ w("div", {
146
183
  className: "flex min-w-max gap-2 px-4 pt-4 sm:px-6",
147
- children: re.map((e) => {
148
- let t = z === e.id;
149
- return /* @__PURE__ */ x("button", {
184
+ children: ae.map((e) => {
185
+ let t = H === e.id;
186
+ return /* @__PURE__ */ w("button", {
150
187
  type: "button",
151
- onClick: () => B(e.id),
188
+ onClick: () => U(e.id),
152
189
  className: `inline-flex min-h-11 items-center rounded-t-lg border-b-2 px-4 py-3 text-sm font-medium transition-colors ${t ? "border-[var(--color-action-primary-bg)] text-[var(--color-action-primary-bg)]" : "border-transparent text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)]"}`,
153
190
  "aria-pressed": t,
154
191
  children: e.label
155
192
  }, e.id);
156
193
  })
157
194
  })
158
- }), /* @__PURE__ */ x("div", {
195
+ }), /* @__PURE__ */ w("div", {
159
196
  className: "p-4 sm:p-6",
160
- children: z === "overview" ? /* @__PURE__ */ S("div", {
197
+ children: H === "overview" ? /* @__PURE__ */ T("div", {
161
198
  className: "grid grid-cols-1 gap-6 xl:grid-cols-[minmax(0,1fr)_320px]",
162
- children: [/* @__PURE__ */ S("section", {
163
- className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-5",
164
- children: [/* @__PURE__ */ x("h2", {
199
+ children: [/* @__PURE__ */ T(S, {
200
+ treatment: "plain",
201
+ className: "border-border-seam bg-[var(--color-bg-canvas)] p-5",
202
+ children: [/* @__PURE__ */ w("h2", {
165
203
  className: "text-lg font-semibold text-[var(--color-text-primary)]",
166
- children: O("workspaces.detail.detailsSection", "Workspace details")
167
- }), /* @__PURE__ */ S("dl", {
204
+ children: j("workspaces.detail.detailsSection", "Workspace details")
205
+ }), /* @__PURE__ */ T("dl", {
168
206
  className: "mt-5 grid grid-cols-1 gap-4 sm:grid-cols-2",
169
207
  children: [
170
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("dt", {
208
+ /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
171
209
  className: "text-sm font-medium text-[var(--color-text-secondary)]",
172
- children: O("common.name", "Name")
173
- }), /* @__PURE__ */ x("dd", {
210
+ children: j("common.name", "Name")
211
+ }), /* @__PURE__ */ w("dd", {
174
212
  className: "mt-1 text-sm text-[var(--color-text-primary)]",
175
- children: I.name
213
+ children: z.name
176
214
  })] }),
177
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("dt", {
215
+ /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
178
216
  className: "text-sm font-medium text-[var(--color-text-secondary)]",
179
- children: O("common.slug", "Slug")
180
- }), /* @__PURE__ */ x("dd", {
217
+ children: j("common.slug", "Slug")
218
+ }), /* @__PURE__ */ w("dd", {
181
219
  className: "mt-1 break-all font-mono text-sm text-[var(--color-text-primary)]",
182
- children: I.slug
220
+ children: z.slug
183
221
  })] }),
184
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("dt", {
222
+ /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
185
223
  className: "text-sm font-medium text-[var(--color-text-secondary)]",
186
- children: O("common.status", "Status")
187
- }), /* @__PURE__ */ x("dd", {
224
+ children: j("common.status", "Status")
225
+ }), /* @__PURE__ */ w("dd", {
188
226
  className: "mt-1",
189
- children: /* @__PURE__ */ x(u, { status: I.status })
227
+ children: /* @__PURE__ */ w(l, { status: z.status })
190
228
  })] }),
191
- /* @__PURE__ */ S("div", {
229
+ /* @__PURE__ */ T("div", {
192
230
  className: "sm:col-span-2",
193
- children: [/* @__PURE__ */ x("dt", {
231
+ children: [/* @__PURE__ */ w("dt", {
194
232
  className: "text-sm font-medium text-[var(--color-text-secondary)]",
195
- children: O("members.detail.orgId", "Organization ID")
196
- }), /* @__PURE__ */ x("dd", {
233
+ children: j("members.detail.orgId", "Organization ID")
234
+ }), /* @__PURE__ */ w("dd", {
197
235
  className: "mt-1 break-all font-mono text-sm text-[var(--color-text-primary)]",
198
- children: I.organizationId
236
+ children: z.organizationId
199
237
  })]
200
238
  }),
201
- I.endpoint ? /* @__PURE__ */ S("div", {
239
+ z.endpoint ? /* @__PURE__ */ T("div", {
202
240
  className: "sm:col-span-2",
203
- children: [/* @__PURE__ */ x("dt", {
241
+ children: [/* @__PURE__ */ w("dt", {
204
242
  className: "text-sm font-medium text-[var(--color-text-secondary)]",
205
- children: O("workspaces.detail.endpoint", "Endpoint")
206
- }), /* @__PURE__ */ x("dd", {
243
+ children: j("workspaces.detail.endpoint", "Endpoint")
244
+ }), /* @__PURE__ */ w("dd", {
207
245
  className: "mt-1 break-all font-mono text-sm text-[var(--color-text-primary)]",
208
- children: I.endpoint
246
+ children: z.endpoint
209
247
  })]
210
248
  }) : null
211
249
  ]
212
250
  })]
213
- }), /* @__PURE__ */ S("aside", {
214
- className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-5",
215
- children: [/* @__PURE__ */ x("h2", {
251
+ }), /* @__PURE__ */ T(S, {
252
+ treatment: "plain",
253
+ className: "border-border-seam bg-[var(--color-bg-canvas)] p-5 xl:sticky xl:top-6 xl:self-start",
254
+ children: [/* @__PURE__ */ w("h2", {
216
255
  className: "text-lg font-semibold text-[var(--color-text-primary)]",
217
- children: O("common.metadata", "Metadata")
218
- }), /* @__PURE__ */ S("dl", {
256
+ children: j("common.metadata", "Metadata")
257
+ }), /* @__PURE__ */ T("dl", {
219
258
  className: "mt-5 space-y-4",
220
259
  children: [
221
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("dt", {
260
+ /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
222
261
  className: "text-sm font-medium text-[var(--color-text-secondary)]",
223
- children: O("workspaces.list.members", "Members")
224
- }), /* @__PURE__ */ x("dd", {
262
+ children: j("workspaces.list.members", "Members")
263
+ }), /* @__PURE__ */ w("dd", {
225
264
  className: "mt-1 text-sm text-[var(--color-text-primary)]",
226
- children: Z
265
+ children: $
227
266
  })] }),
228
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("dt", {
267
+ /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
229
268
  className: "text-sm font-medium text-[var(--color-text-secondary)]",
230
- children: O("common.created", "Created")
231
- }), /* @__PURE__ */ x("dd", {
269
+ children: j("common.created", "Created")
270
+ }), /* @__PURE__ */ w("dd", {
232
271
  className: "mt-1 text-sm text-[var(--color-text-primary)]",
233
- children: D(I.createdAt)
272
+ children: A(z.createdAt)
234
273
  })] }),
235
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("dt", {
274
+ /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
236
275
  className: "text-sm font-medium text-[var(--color-text-secondary)]",
237
- children: O("common.lastUpdated", "Last updated")
238
- }), /* @__PURE__ */ x("dd", {
276
+ children: j("common.lastUpdated", "Last updated")
277
+ }), /* @__PURE__ */ w("dd", {
239
278
  className: "mt-1 text-sm text-[var(--color-text-primary)]",
240
- children: D(I.updatedAt)
279
+ children: A(z.updatedAt)
241
280
  })] }),
242
- I.region ? /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("dt", {
281
+ z.region ? /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
243
282
  className: "text-sm font-medium text-[var(--color-text-secondary)]",
244
- children: O("workspaces.detail.region", "Region")
245
- }), /* @__PURE__ */ x("dd", {
283
+ children: j("workspaces.detail.region", "Region")
284
+ }), /* @__PURE__ */ w("dd", {
246
285
  className: "mt-1 text-sm text-[var(--color-text-primary)]",
247
- children: I.region
286
+ children: z.region
248
287
  })] }) : null
249
288
  ]
250
289
  })]
251
290
  })]
252
- }) : /* @__PURE__ */ S("section", {
291
+ }) : /* @__PURE__ */ T("section", {
253
292
  className: "space-y-4",
254
- children: [/* @__PURE__ */ S("div", {
293
+ children: [/* @__PURE__ */ T("div", {
255
294
  className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",
256
- children: [/* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("h2", {
295
+ children: [/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("h2", {
257
296
  className: "text-lg font-semibold text-[var(--color-text-primary)]",
258
- children: O("workspaces.detail.membersTitle", "Workspace members")
259
- }), /* @__PURE__ */ x("p", {
297
+ children: j("workspaces.detail.membersTitle", "Workspace members")
298
+ }), /* @__PURE__ */ w("p", {
260
299
  className: "text-sm text-[var(--color-text-secondary)]",
261
- children: O("workspaces.detail.membersSubtitle", "Add organization members to this workspace and manage access.")
262
- })] }), P(s.MEMBER_INVITE) && /* @__PURE__ */ S("button", {
300
+ children: j("workspaces.detail.membersSubtitle", "Add organization members to this workspace and manage access.")
301
+ })] }), L(o.MEMBER_INVITE) && /* @__PURE__ */ T("button", {
263
302
  type: "button",
264
- onClick: () => H(!0),
303
+ onClick: () => G(!0),
265
304
  className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg bg-[var(--color-action-primary-bg)] px-4 py-2.5 text-[var(--color-action-primary-text)] transition-all duration-200 hover:opacity-90",
266
- children: [/* @__PURE__ */ x(_, {
305
+ children: [/* @__PURE__ */ w(te, {
267
306
  size: 16,
268
307
  "aria-hidden": "true"
269
- }), /* @__PURE__ */ x("span", { children: O("workspaces.detail.addMember", "Add Member") })]
308
+ }), /* @__PURE__ */ w("span", { children: j("workspaces.detail.addMember", "Add Member") })]
270
309
  })]
271
- }), K ? /* @__PURE__ */ x("div", {
310
+ }), Y ? /* @__PURE__ */ w("div", {
272
311
  className: "py-8",
273
- children: /* @__PURE__ */ x(r, { message: O("workspaces.detail.loadingMembers", "Loading workspace members...") })
274
- }) : q ? /* @__PURE__ */ x(i, {
275
- message: q.message,
312
+ children: /* @__PURE__ */ w(r, { message: j("workspaces.detail.loadingMembers", "Loading workspace members...") })
313
+ }) : X ? /* @__PURE__ */ w(i, {
314
+ message: X.message,
276
315
  action: {
277
- label: O("common.retry", "Retry"),
316
+ label: j("common.retry", "Retry"),
278
317
  onClick: () => {
279
- J();
318
+ Z();
280
319
  }
281
320
  }
282
- }) : G.length > 0 ? /* @__PURE__ */ S(b, { children: [/* @__PURE__ */ x("div", {
283
- className: "grid gap-4 md:hidden",
284
- children: G.map((e) => /* @__PURE__ */ x("article", {
285
- className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-4",
286
- children: /* @__PURE__ */ S("div", {
287
- className: "space-y-3",
288
- children: [
289
- /* @__PURE__ */ S("div", {
290
- className: "flex items-start justify-between gap-3",
291
- children: [/* @__PURE__ */ S("div", {
292
- className: "min-w-0",
293
- children: [/* @__PURE__ */ x(w, {
294
- profile: Q[e.userId] ?? T({
295
- actorId: e.userId,
296
- actorType: "user"
297
- }),
298
- variant: "inline"
299
- }), /* @__PURE__ */ S("p", {
300
- className: "mt-1 text-sm text-[var(--color-text-secondary)]",
301
- children: [
302
- O("members.list.joined", "Joined"),
303
- " ",
304
- D(e.joinedAt)
305
- ]
306
- })]
307
- }), /* @__PURE__ */ x(c, { role: e.role })]
308
- }),
309
- /* @__PURE__ */ x("dl", {
310
- className: "grid grid-cols-1 gap-3 text-sm",
311
- children: /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("dt", {
312
- className: "text-[var(--color-text-secondary)]",
313
- children: O("members.list.invitedBy", "Invited by")
314
- }), /* @__PURE__ */ x("dd", {
315
- className: "mt-1 break-all font-mono text-[var(--color-text-primary)]",
316
- children: e.invitedBy || "—"
317
- })] })
318
- }),
319
- /* @__PURE__ */ S("button", {
320
- type: "button",
321
- onClick: () => $(e.userId),
322
- disabled: X,
323
- className: "inline-flex min-h-10 items-center gap-2 rounded-lg border border-[var(--color-status-error-border)] px-3 py-2 text-sm text-[var(--color-status-error-text)] transition-all duration-200 hover:bg-[var(--color-status-error-bgSubtle)] disabled:cursor-not-allowed disabled:opacity-50",
324
- children: [/* @__PURE__ */ x(g, {
325
- size: 16,
326
- "aria-hidden": "true"
327
- }), O("common.remove", "Remove")]
328
- })
329
- ]
330
- })
331
- }, e.id))
332
- }), /* @__PURE__ */ x("div", {
333
- className: "hidden overflow-hidden rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] md:block",
334
- children: /* @__PURE__ */ x("div", {
335
- className: "overflow-x-auto",
336
- children: /* @__PURE__ */ S("table", {
337
- className: "min-w-full",
338
- children: [/* @__PURE__ */ x("thead", {
339
- className: "bg-[var(--color-bg-subtle)]",
340
- children: /* @__PURE__ */ S("tr", { children: [
341
- /* @__PURE__ */ x("th", {
342
- className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
343
- children: O("members.detail.userId", "User ID")
344
- }),
345
- /* @__PURE__ */ x("th", {
346
- className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
347
- children: O("members.list.column.role", "Role")
348
- }),
349
- /* @__PURE__ */ x("th", {
350
- className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
351
- children: O("members.list.joined", "Joined")
352
- }),
353
- /* @__PURE__ */ x("th", {
354
- className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
355
- children: O("members.list.invitedBy", "Invited by")
356
- }),
357
- /* @__PURE__ */ x("th", {
358
- className: "px-6 py-3 text-right text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
359
- children: O("common.actions", "Actions")
360
- })
361
- ] })
362
- }), /* @__PURE__ */ x("tbody", {
363
- className: "divide-y divide-[var(--color-border-default)]",
364
- children: G.map((e) => /* @__PURE__ */ S("tr", {
365
- className: "transition-colors hover:bg-[var(--color-bg-subtle)]",
366
- children: [
367
- /* @__PURE__ */ x("td", {
368
- className: "px-6 py-4",
369
- children: /* @__PURE__ */ x(w, {
370
- profile: Q[e.userId] ?? T({
371
- actorId: e.userId,
372
- actorType: "user"
373
- }),
374
- variant: "cell"
375
- })
376
- }),
377
- /* @__PURE__ */ x("td", {
378
- className: "px-6 py-4",
379
- children: /* @__PURE__ */ x(c, { role: e.role })
380
- }),
381
- /* @__PURE__ */ x("td", {
382
- className: "px-6 py-4 text-sm text-[var(--color-text-secondary)]",
383
- children: D(e.joinedAt)
384
- }),
385
- /* @__PURE__ */ x("td", {
386
- className: "px-6 py-4 break-all font-mono text-sm text-[var(--color-text-secondary)]",
387
- children: e.invitedBy || "—"
388
- }),
389
- /* @__PURE__ */ x("td", {
390
- className: "px-6 py-4 text-right",
391
- children: /* @__PURE__ */ x("button", {
392
- type: "button",
393
- onClick: () => $(e.userId),
394
- disabled: X,
395
- className: "rounded-lg p-2 text-[var(--color-status-error-text)] transition-all duration-200 hover:bg-[var(--color-status-error-bgSubtle)] disabled:cursor-not-allowed disabled:opacity-50",
396
- "aria-label": `${O("workspaces.removeMember.ariaPrefix", "Remove")} ${e.userId} ${O("workspaces.removeMember.ariaSuffix", "from workspace")}`,
397
- title: `${O("workspaces.removeMember.ariaPrefix", "Remove")} ${e.userId} ${O("workspaces.removeMember.ariaSuffix", "from workspace")}`,
398
- children: /* @__PURE__ */ x(g, {
399
- size: 18,
400
- "aria-hidden": "true"
401
- })
402
- })
403
- })
404
- ]
405
- }, e.id))
406
- })]
321
+ }) : J.length > 0 ? /* @__PURE__ */ w("div", {
322
+ className: "overflow-hidden rounded-xl border border-[var(--color-border-seam)] bg-[var(--color-bg-canvas)] md:p-2",
323
+ children: /* @__PURE__ */ w(C, {
324
+ columns: se,
325
+ data: J,
326
+ rowKey: (e) => e.id,
327
+ rowActions: (e) => /* @__PURE__ */ w("button", {
328
+ type: "button",
329
+ onClick: () => oe(e.userId),
330
+ disabled: re,
331
+ className: "rounded-lg p-2 text-[var(--color-status-error-text)] transition-all duration-200 hover:bg-[var(--color-status-error-bgSubtle)] disabled:cursor-not-allowed disabled:opacity-50",
332
+ "aria-label": `${j("workspaces.removeMember.ariaPrefix", "Remove")} ${e.userId} ${j("workspaces.removeMember.ariaSuffix", "from workspace")}`,
333
+ title: `${j("workspaces.removeMember.ariaPrefix", "Remove")} ${e.userId} ${j("workspaces.removeMember.ariaSuffix", "from workspace")}`,
334
+ children: /* @__PURE__ */ w(v, {
335
+ size: 18,
336
+ "aria-hidden": "true"
337
+ })
407
338
  })
408
339
  })
409
- })] }) : /* @__PURE__ */ x("div", {
340
+ }) : /* @__PURE__ */ w("div", {
410
341
  className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-6",
411
- children: /* @__PURE__ */ x(a, {
412
- icon: /* @__PURE__ */ x(v, {
342
+ children: /* @__PURE__ */ w(ee, {
343
+ icon: /* @__PURE__ */ w(y, {
413
344
  size: 40,
414
345
  "aria-hidden": "true"
415
346
  }),
416
- title: O("workspaces.detail.emptyMembersTitle", "No workspace members yet"),
417
- description: O("workspaces.detail.emptyMembersDescription", "Add people from the parent organization to grant workspace access."),
347
+ title: j("workspaces.detail.emptyMembersTitle", "No workspace members yet"),
348
+ description: j("workspaces.detail.emptyMembersDescription", "Add people from the parent organization to grant workspace access."),
418
349
  action: {
419
- label: O("workspaces.detail.addMember", "Add Member"),
420
- onClick: () => H(!0)
350
+ label: j("workspaces.detail.addMember", "Add Member"),
351
+ onClick: () => G(!0)
421
352
  }
422
353
  })
423
354
  })]
@@ -425,25 +356,25 @@ function O() {
425
356
  })]
426
357
  })]
427
358
  }),
428
- /* @__PURE__ */ x(d, {
429
- open: V,
430
- onOpenChange: H,
431
- workspaceId: I.id,
432
- organizationId: I.organizationId,
433
- existingMembers: G,
434
- onInviteOrganizationMember: () => A(`${j}/${I.organizationId}/members/invite`)
359
+ /* @__PURE__ */ w(f, {
360
+ open: W,
361
+ onOpenChange: G,
362
+ workspaceId: z.id,
363
+ organizationId: z.organizationId,
364
+ existingMembers: J,
365
+ onInviteOrganizationMember: () => N(`${P}/${z.organizationId}/members/invite`)
435
366
  }),
436
- W
367
+ q
437
368
  ]
438
- }) : /* @__PURE__ */ x("div", {
369
+ }) : /* @__PURE__ */ w("div", {
439
370
  className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
440
- children: /* @__PURE__ */ x("div", {
371
+ children: /* @__PURE__ */ w("div", {
441
372
  className: "p-8 text-center text-[var(--color-text-secondary)]",
442
- children: O("workspaces.detail.noPermission", "You don't have permission to view this workspace.")
373
+ children: j("workspaces.detail.noPermission", "You don't have permission to view this workspace.")
443
374
  })
444
375
  });
445
376
  }
446
377
  //#endregion
447
- export { O as WorkspaceDetailPage };
378
+ export { j as WorkspaceDetailPage };
448
379
 
449
380
  //# sourceMappingURL=WorkspaceDetailPage.js.map