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