@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.
- package/dist/organization-management/AdminOrganizationRoot.js +4 -4
- package/dist/organization-management/AdminOrganizationRoot.js.map +1 -1
- package/dist/organization-management/UserOrganizationRoot.js +4 -4
- package/dist/organization-management/UserOrganizationRoot.js.map +1 -1
- package/dist/organization-management/modules/members/components/BulkInviteForm.js +155 -174
- package/dist/organization-management/modules/members/components/BulkInviteForm.js.map +1 -1
- package/dist/organization-management/modules/members/components/PendingInvitesList.js +78 -101
- package/dist/organization-management/modules/members/components/PendingInvitesList.js.map +1 -1
- package/dist/organization-management/modules/members/pages/InviteMemberPage.js +58 -52
- package/dist/organization-management/modules/members/pages/InviteMemberPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/InvitePeoplePage.js +42 -40
- package/dist/organization-management/modules/members/pages/InvitePeoplePage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/MemberDetailPage.js +71 -69
- package/dist/organization-management/modules/members/pages/MemberDetailPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/MembersListPage.js +233 -204
- package/dist/organization-management/modules/members/pages/MembersListPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/MyInvitesPage.js +38 -37
- package/dist/organization-management/modules/members/pages/MyInvitesPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/OrganizationInviteAcceptancePage.js +134 -132
- package/dist/organization-management/modules/members/pages/OrganizationInviteAcceptancePage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js +39 -37
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js +164 -167
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js +49 -47
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js +258 -230
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js +43 -50
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js +40 -38
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js +230 -299
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js +47 -45
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js +117 -74
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js.map +1 -1
- package/dist/organization-management/shared/components/feedback/EmptyState.js +1 -1
- package/dist/organization-management/shared/components/feedback/EmptyState.js.map +1 -1
- package/dist/organization-management/shared/components/feedback/ErrorState.js +1 -1
- package/dist/organization-management/shared/components/feedback/ErrorState.js.map +1 -1
- package/dist/organization-management/shared/components/feedback/LoadingState.js +1 -1
- package/dist/organization-management/shared/components/feedback/LoadingState.js.map +1 -1
- 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
|
|
7
|
-
import { useConfirmDialog as
|
|
8
|
-
import { PERMISSIONS as
|
|
9
|
-
import { MemberRoleBadge as
|
|
10
|
-
import { useWorkspace as
|
|
11
|
-
import { WorkspaceStatusBadge as
|
|
12
|
-
import { useRemoveWorkspaceMember as
|
|
13
|
-
import { AddWorkspaceMemberDialog as
|
|
14
|
-
import { useMemo as
|
|
15
|
-
import { ArrowLeft as
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
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
|
|
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
|
|
31
|
-
let
|
|
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
|
-
})), [
|
|
35
|
-
apiGatewayUrl:
|
|
36
|
-
authToken:
|
|
37
|
-
orgId:
|
|
38
|
-
workspaceId:
|
|
39
|
-
}),
|
|
35
|
+
})), [J]), {
|
|
36
|
+
apiGatewayUrl: F,
|
|
37
|
+
authToken: I,
|
|
38
|
+
orgId: z?.organizationId,
|
|
39
|
+
workspaceId: M
|
|
40
|
+
}), ae = p(() => [{
|
|
40
41
|
id: "overview",
|
|
41
|
-
label:
|
|
42
|
+
label: j("workspaces.detail.tab.overview", "Overview")
|
|
42
43
|
}, {
|
|
43
44
|
id: "members",
|
|
44
|
-
label: `${
|
|
45
|
-
}], [
|
|
46
|
-
|
|
47
|
-
title:
|
|
48
|
-
description: `${
|
|
49
|
-
confirmText:
|
|
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
|
|
55
|
-
if (n.errors?.length) throw Error(n.errors[0]?.message ??
|
|
56
|
-
await
|
|
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 :
|
|
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
|
-
|
|
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__ */
|
|
67
|
-
}) :
|
|
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__ */
|
|
70
|
-
}) :
|
|
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__ */
|
|
73
|
-
message:
|
|
110
|
+
children: /* @__PURE__ */ w(i, {
|
|
111
|
+
message: V?.message || j("workspaces.detail.notFound", "Workspace not found"),
|
|
74
112
|
action: {
|
|
75
|
-
label:
|
|
76
|
-
onClick: () =>
|
|
113
|
+
label: j("workspaces.create.backToWorkspaces", "Back to Workspaces"),
|
|
114
|
+
onClick: () => N(`${P}/workspaces`)
|
|
77
115
|
}
|
|
78
116
|
})
|
|
79
|
-
}) : /* @__PURE__ */
|
|
80
|
-
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-
|
|
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__ */
|
|
120
|
+
/* @__PURE__ */ T("div", {
|
|
83
121
|
className: "mx-auto flex w-full max-w-7xl flex-col gap-6",
|
|
84
|
-
children: [/* @__PURE__ */
|
|
122
|
+
children: [/* @__PURE__ */ T("div", {
|
|
85
123
|
className: "space-y-4",
|
|
86
|
-
children: [/* @__PURE__ */
|
|
124
|
+
children: [/* @__PURE__ */ T("button", {
|
|
87
125
|
type: "button",
|
|
88
|
-
onClick: () =>
|
|
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__ */
|
|
128
|
+
children: [/* @__PURE__ */ w(h, {
|
|
91
129
|
size: 20,
|
|
92
130
|
"aria-hidden": "true"
|
|
93
|
-
}), /* @__PURE__ */
|
|
131
|
+
}), /* @__PURE__ */ w("span", {
|
|
94
132
|
className: "text-sm font-medium",
|
|
95
|
-
children:
|
|
133
|
+
children: j("workspaces.create.backToWorkspaces", "Back to Workspaces")
|
|
96
134
|
})]
|
|
97
|
-
}), /* @__PURE__ */
|
|
98
|
-
className: "flex flex-col gap-4
|
|
99
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
141
|
+
children: /* @__PURE__ */ w(g, {
|
|
104
142
|
size: 28,
|
|
105
143
|
"aria-hidden": "true"
|
|
106
144
|
})
|
|
107
|
-
}), /* @__PURE__ */
|
|
145
|
+
}), /* @__PURE__ */ T("div", {
|
|
108
146
|
className: "min-w-0 space-y-2",
|
|
109
|
-
children: [/* @__PURE__ */
|
|
147
|
+
children: [/* @__PURE__ */ T("div", {
|
|
110
148
|
className: "flex flex-wrap items-start gap-2",
|
|
111
|
-
children: [/* @__PURE__ */
|
|
149
|
+
children: [/* @__PURE__ */ w("h1", {
|
|
112
150
|
className: "text-3xl font-bold text-[var(--color-text-primary)]",
|
|
113
|
-
children:
|
|
114
|
-
}), /* @__PURE__ */
|
|
115
|
-
}), /* @__PURE__ */
|
|
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: ["/",
|
|
155
|
+
children: ["/", z.slug]
|
|
118
156
|
})]
|
|
119
157
|
})]
|
|
120
|
-
}), /* @__PURE__ */
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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
|
-
}),
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
-
}),
|
|
138
|
-
|
|
172
|
+
}),
|
|
173
|
+
onSelect: () => N(`${P}/${z.organizationId}`)
|
|
174
|
+
}]
|
|
139
175
|
})]
|
|
140
176
|
})]
|
|
141
|
-
}), /* @__PURE__ */ S
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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:
|
|
148
|
-
let t =
|
|
149
|
-
return /* @__PURE__ */
|
|
184
|
+
children: ae.map((e) => {
|
|
185
|
+
let t = H === e.id;
|
|
186
|
+
return /* @__PURE__ */ w("button", {
|
|
150
187
|
type: "button",
|
|
151
|
-
onClick: () =>
|
|
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__ */
|
|
195
|
+
}), /* @__PURE__ */ w("div", {
|
|
159
196
|
className: "p-4 sm:p-6",
|
|
160
|
-
children:
|
|
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
|
|
163
|
-
|
|
164
|
-
|
|
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:
|
|
167
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
208
|
+
/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
|
|
171
209
|
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
172
|
-
children:
|
|
173
|
-
}), /* @__PURE__ */
|
|
210
|
+
children: j("common.name", "Name")
|
|
211
|
+
}), /* @__PURE__ */ w("dd", {
|
|
174
212
|
className: "mt-1 text-sm text-[var(--color-text-primary)]",
|
|
175
|
-
children:
|
|
213
|
+
children: z.name
|
|
176
214
|
})] }),
|
|
177
|
-
/* @__PURE__ */
|
|
215
|
+
/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
|
|
178
216
|
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
179
|
-
children:
|
|
180
|
-
}), /* @__PURE__ */
|
|
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:
|
|
220
|
+
children: z.slug
|
|
183
221
|
})] }),
|
|
184
|
-
/* @__PURE__ */
|
|
222
|
+
/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
|
|
185
223
|
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
186
|
-
children:
|
|
187
|
-
}), /* @__PURE__ */
|
|
224
|
+
children: j("common.status", "Status")
|
|
225
|
+
}), /* @__PURE__ */ w("dd", {
|
|
188
226
|
className: "mt-1",
|
|
189
|
-
children: /* @__PURE__ */
|
|
227
|
+
children: /* @__PURE__ */ w(l, { status: z.status })
|
|
190
228
|
})] }),
|
|
191
|
-
/* @__PURE__ */
|
|
229
|
+
/* @__PURE__ */ T("div", {
|
|
192
230
|
className: "sm:col-span-2",
|
|
193
|
-
children: [/* @__PURE__ */
|
|
231
|
+
children: [/* @__PURE__ */ w("dt", {
|
|
194
232
|
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
195
|
-
children:
|
|
196
|
-
}), /* @__PURE__ */
|
|
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:
|
|
236
|
+
children: z.organizationId
|
|
199
237
|
})]
|
|
200
238
|
}),
|
|
201
|
-
|
|
239
|
+
z.endpoint ? /* @__PURE__ */ T("div", {
|
|
202
240
|
className: "sm:col-span-2",
|
|
203
|
-
children: [/* @__PURE__ */
|
|
241
|
+
children: [/* @__PURE__ */ w("dt", {
|
|
204
242
|
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
205
|
-
children:
|
|
206
|
-
}), /* @__PURE__ */
|
|
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:
|
|
246
|
+
children: z.endpoint
|
|
209
247
|
})]
|
|
210
248
|
}) : null
|
|
211
249
|
]
|
|
212
250
|
})]
|
|
213
|
-
}), /* @__PURE__ */ S
|
|
214
|
-
|
|
215
|
-
|
|
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:
|
|
218
|
-
}), /* @__PURE__ */
|
|
256
|
+
children: j("common.metadata", "Metadata")
|
|
257
|
+
}), /* @__PURE__ */ T("dl", {
|
|
219
258
|
className: "mt-5 space-y-4",
|
|
220
259
|
children: [
|
|
221
|
-
/* @__PURE__ */
|
|
260
|
+
/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
|
|
222
261
|
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
223
|
-
children:
|
|
224
|
-
}), /* @__PURE__ */
|
|
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:
|
|
265
|
+
children: $
|
|
227
266
|
})] }),
|
|
228
|
-
/* @__PURE__ */
|
|
267
|
+
/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
|
|
229
268
|
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
230
|
-
children:
|
|
231
|
-
}), /* @__PURE__ */
|
|
269
|
+
children: j("common.created", "Created")
|
|
270
|
+
}), /* @__PURE__ */ w("dd", {
|
|
232
271
|
className: "mt-1 text-sm text-[var(--color-text-primary)]",
|
|
233
|
-
children:
|
|
272
|
+
children: A(z.createdAt)
|
|
234
273
|
})] }),
|
|
235
|
-
/* @__PURE__ */
|
|
274
|
+
/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
|
|
236
275
|
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
237
|
-
children:
|
|
238
|
-
}), /* @__PURE__ */
|
|
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:
|
|
279
|
+
children: A(z.updatedAt)
|
|
241
280
|
})] }),
|
|
242
|
-
|
|
281
|
+
z.region ? /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
|
|
243
282
|
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
244
|
-
children:
|
|
245
|
-
}), /* @__PURE__ */
|
|
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:
|
|
286
|
+
children: z.region
|
|
248
287
|
})] }) : null
|
|
249
288
|
]
|
|
250
289
|
})]
|
|
251
290
|
})]
|
|
252
|
-
}) : /* @__PURE__ */
|
|
291
|
+
}) : /* @__PURE__ */ T("section", {
|
|
253
292
|
className: "space-y-4",
|
|
254
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
295
|
+
children: [/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("h2", {
|
|
257
296
|
className: "text-lg font-semibold text-[var(--color-text-primary)]",
|
|
258
|
-
children:
|
|
259
|
-
}), /* @__PURE__ */
|
|
297
|
+
children: j("workspaces.detail.membersTitle", "Workspace members")
|
|
298
|
+
}), /* @__PURE__ */ w("p", {
|
|
260
299
|
className: "text-sm text-[var(--color-text-secondary)]",
|
|
261
|
-
children:
|
|
262
|
-
})] }),
|
|
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: () =>
|
|
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__ */
|
|
305
|
+
children: [/* @__PURE__ */ w(te, {
|
|
267
306
|
size: 16,
|
|
268
307
|
"aria-hidden": "true"
|
|
269
|
-
}), /* @__PURE__ */
|
|
308
|
+
}), /* @__PURE__ */ w("span", { children: j("workspaces.detail.addMember", "Add Member") })]
|
|
270
309
|
})]
|
|
271
|
-
}),
|
|
310
|
+
}), Y ? /* @__PURE__ */ w("div", {
|
|
272
311
|
className: "py-8",
|
|
273
|
-
children: /* @__PURE__ */
|
|
274
|
-
}) :
|
|
275
|
-
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:
|
|
316
|
+
label: j("common.retry", "Retry"),
|
|
278
317
|
onClick: () => {
|
|
279
|
-
|
|
318
|
+
Z();
|
|
280
319
|
}
|
|
281
320
|
}
|
|
282
|
-
}) :
|
|
283
|
-
className: "
|
|
284
|
-
children:
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
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
|
-
})
|
|
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__ */
|
|
412
|
-
icon: /* @__PURE__ */
|
|
342
|
+
children: /* @__PURE__ */ w(ee, {
|
|
343
|
+
icon: /* @__PURE__ */ w(y, {
|
|
413
344
|
size: 40,
|
|
414
345
|
"aria-hidden": "true"
|
|
415
346
|
}),
|
|
416
|
-
title:
|
|
417
|
-
description:
|
|
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:
|
|
420
|
-
onClick: () =>
|
|
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__ */
|
|
429
|
-
open:
|
|
430
|
-
onOpenChange:
|
|
431
|
-
workspaceId:
|
|
432
|
-
organizationId:
|
|
433
|
-
existingMembers:
|
|
434
|
-
onInviteOrganizationMember: () =>
|
|
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
|
-
|
|
367
|
+
q
|
|
437
368
|
]
|
|
438
|
-
}) : /* @__PURE__ */
|
|
369
|
+
}) : /* @__PURE__ */ w("div", {
|
|
439
370
|
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
440
|
-
children: /* @__PURE__ */
|
|
371
|
+
children: /* @__PURE__ */ w("div", {
|
|
441
372
|
className: "p-8 text-center text-[var(--color-text-secondary)]",
|
|
442
|
-
children:
|
|
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 {
|
|
378
|
+
export { j as WorkspaceDetailPage };
|
|
448
379
|
|
|
449
380
|
//# sourceMappingURL=WorkspaceDetailPage.js.map
|