@burdenoff/microfe-organization 2026.624.2 → 2026.625.2
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/modules/members/components/BulkInviteForm.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 +41 -39
- package/dist/organization-management/modules/members/pages/InvitePeoplePage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/MemberDetailPage.js +70 -68
- package/dist/organization-management/modules/members/pages/MemberDetailPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/MembersListPage.js +232 -203
- 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 +38 -36
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js +163 -166
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js +48 -46
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js +257 -229
- 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 +39 -37
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js +146 -145
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js +46 -44
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js +115 -72
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js.map +1 -1
- package/package.json +2 -2
|
@@ -7,132 +7,134 @@ import { MemberRoleBadge as a } from "../components/MemberRoleBadge.js";
|
|
|
7
7
|
import { useMember as o } from "../hooks/useMembers.js";
|
|
8
8
|
import { useMemo as s } from "react";
|
|
9
9
|
import { ArrowLeft as c, Shield as l } from "lucide-react";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
10
|
+
import { EmphasisPanel as u, GlassCard as d } from "@burdenoff/fe-libs/ui";
|
|
11
|
+
import { usePermissions as f } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
12
|
+
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
13
|
+
import { useParams as h } from "react-router-dom";
|
|
14
|
+
import { buildActorFallback as g, useActorProfiles as _ } from "@burdenoff/fe-libs/shared";
|
|
14
15
|
//#region src/organization-management/modules/members/pages/MemberDetailPage.tsx
|
|
15
|
-
function
|
|
16
|
-
let
|
|
17
|
-
actorId:
|
|
16
|
+
function v() {
|
|
17
|
+
let v = t(), { organizationId: y, userId: b } = h(), { navigate: x, basePath: S = "/organizations", apiGatewayUrl: C, authToken: w } = e(), { hasPermission: T, isLoading: E } = f(), { member: D, loading: O, error: k } = o(y, b), A = _(s(() => b ? [{
|
|
18
|
+
actorId: b,
|
|
18
19
|
actorType: "user"
|
|
19
|
-
}] : [], [
|
|
20
|
-
apiGatewayUrl:
|
|
21
|
-
authToken:
|
|
22
|
-
orgId:
|
|
23
|
-
}),
|
|
24
|
-
actorId:
|
|
20
|
+
}] : [], [b]), {
|
|
21
|
+
apiGatewayUrl: C,
|
|
22
|
+
authToken: w,
|
|
23
|
+
orgId: y
|
|
24
|
+
}), j = b && D ? A[D.userId] ?? g({
|
|
25
|
+
actorId: D.userId,
|
|
25
26
|
actorType: "user"
|
|
26
27
|
}) : null;
|
|
27
|
-
return
|
|
28
|
+
return E ? /* @__PURE__ */ p("div", {
|
|
28
29
|
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
29
|
-
children: /* @__PURE__ */
|
|
30
|
-
}) :
|
|
30
|
+
children: /* @__PURE__ */ p(n, { message: v("common.loadingPermissions", "Loading permissions...") })
|
|
31
|
+
}) : T(i.MEMBER_READ) ? O ? /* @__PURE__ */ p("div", {
|
|
31
32
|
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
32
|
-
children: /* @__PURE__ */
|
|
33
|
-
}) :
|
|
33
|
+
children: /* @__PURE__ */ p(n, { message: v("members.detail.loading", "Loading member...") })
|
|
34
|
+
}) : k || !D ? /* @__PURE__ */ p("div", {
|
|
34
35
|
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
35
|
-
children: /* @__PURE__ */
|
|
36
|
-
message:
|
|
36
|
+
children: /* @__PURE__ */ p(r, {
|
|
37
|
+
message: k?.message || v("members.detail.notFound", "Member not found"),
|
|
37
38
|
action: {
|
|
38
|
-
label:
|
|
39
|
-
onClick: () =>
|
|
39
|
+
label: v("common.goBack", "Go Back"),
|
|
40
|
+
onClick: () => x(`${S}/${y}/members`)
|
|
40
41
|
}
|
|
41
42
|
})
|
|
42
|
-
}) : /* @__PURE__ */
|
|
43
|
+
}) : /* @__PURE__ */ m("div", {
|
|
43
44
|
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-200",
|
|
44
|
-
children: [/* @__PURE__ */
|
|
45
|
+
children: [/* @__PURE__ */ m("div", {
|
|
45
46
|
className: "mb-6",
|
|
46
|
-
children: [/* @__PURE__ */
|
|
47
|
+
children: [/* @__PURE__ */ m("button", {
|
|
47
48
|
type: "button",
|
|
48
|
-
onClick: () =>
|
|
49
|
+
onClick: () => x(`${S}/${y}/members`),
|
|
49
50
|
className: "inline-flex items-center gap-2 text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)] transition-all duration-200 mb-4",
|
|
50
|
-
children: [/* @__PURE__ */
|
|
51
|
-
}), /* @__PURE__ */
|
|
51
|
+
children: [/* @__PURE__ */ p(c, { size: 20 }), v("members.detail.backToMembers", "Back to Members")]
|
|
52
|
+
}), /* @__PURE__ */ m(u, {
|
|
52
53
|
className: "flex items-start gap-4",
|
|
53
|
-
children: [/* @__PURE__ */
|
|
54
|
+
children: [/* @__PURE__ */ p("div", {
|
|
54
55
|
className: "size-16 rounded-full bg-[var(--color-status-info-muted)] flex items-center justify-center",
|
|
55
|
-
children: /* @__PURE__ */
|
|
56
|
+
children: /* @__PURE__ */ p(l, {
|
|
56
57
|
size: 32,
|
|
57
58
|
className: "text-[var(--color-status-info)]"
|
|
58
59
|
})
|
|
59
|
-
}), /* @__PURE__ */
|
|
60
|
-
/* @__PURE__ */
|
|
60
|
+
}), /* @__PURE__ */ m("div", { children: [
|
|
61
|
+
/* @__PURE__ */ p("h1", {
|
|
61
62
|
className: "text-3xl font-bold text-[var(--color-text-primary)]",
|
|
62
|
-
children:
|
|
63
|
+
children: j?.displayName ?? v("members.detail.titlePrefix", "Member")
|
|
63
64
|
}),
|
|
64
|
-
|
|
65
|
+
j?.email ? /* @__PURE__ */ p("p", {
|
|
65
66
|
className: "text-[var(--color-text-secondary)] mt-1 break-all",
|
|
66
|
-
children:
|
|
67
|
+
children: j.email
|
|
67
68
|
}) : null,
|
|
68
|
-
/* @__PURE__ */
|
|
69
|
+
/* @__PURE__ */ p("p", {
|
|
69
70
|
className: "text-[var(--color-text-secondary)] mt-1",
|
|
70
|
-
children:
|
|
71
|
+
children: D.role
|
|
71
72
|
}),
|
|
72
|
-
/* @__PURE__ */
|
|
73
|
+
/* @__PURE__ */ m("details", {
|
|
73
74
|
className: "mt-2 text-xs text-[var(--color-text-secondary)]",
|
|
74
|
-
children: [/* @__PURE__ */
|
|
75
|
+
children: [/* @__PURE__ */ p("summary", {
|
|
75
76
|
className: "cursor-pointer",
|
|
76
|
-
children:
|
|
77
|
-
}), /* @__PURE__ */
|
|
77
|
+
children: v("members.detail.showIds", "Show technical IDs")
|
|
78
|
+
}), /* @__PURE__ */ m("dl", {
|
|
78
79
|
className: "mt-1 grid grid-cols-[auto_1fr] gap-x-3 gap-y-1",
|
|
79
80
|
children: [
|
|
80
|
-
/* @__PURE__ */
|
|
81
|
-
/* @__PURE__ */
|
|
81
|
+
/* @__PURE__ */ p("dt", { children: v("members.detail.userId", "User ID") }),
|
|
82
|
+
/* @__PURE__ */ p("dd", {
|
|
82
83
|
className: "break-all font-mono",
|
|
83
|
-
children:
|
|
84
|
+
children: D.userId
|
|
84
85
|
}),
|
|
85
|
-
/* @__PURE__ */
|
|
86
|
-
/* @__PURE__ */
|
|
86
|
+
/* @__PURE__ */ p("dt", { children: v("members.list.memberId", "Member ID") }),
|
|
87
|
+
/* @__PURE__ */ p("dd", {
|
|
87
88
|
className: "break-all font-mono",
|
|
88
|
-
children:
|
|
89
|
+
children: D.id
|
|
89
90
|
})
|
|
90
91
|
]
|
|
91
92
|
})]
|
|
92
93
|
})
|
|
93
94
|
] })]
|
|
94
95
|
})]
|
|
95
|
-
}), /* @__PURE__ */
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
}), /* @__PURE__ */ m(d, {
|
|
97
|
+
treatment: "plain",
|
|
98
|
+
className: "border-border-seam p-6",
|
|
99
|
+
children: [/* @__PURE__ */ p("h2", {
|
|
98
100
|
className: "text-lg font-semibold text-[var(--color-text-primary)] mb-4",
|
|
99
|
-
children:
|
|
100
|
-
}), /* @__PURE__ */
|
|
101
|
+
children: v("members.detail.info", "Member Information")
|
|
102
|
+
}), /* @__PURE__ */ m("div", {
|
|
101
103
|
className: "space-y-4",
|
|
102
104
|
children: [
|
|
103
|
-
/* @__PURE__ */
|
|
105
|
+
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
|
|
104
106
|
className: "text-sm text-[var(--color-text-secondary)]",
|
|
105
|
-
children:
|
|
106
|
-
}), /* @__PURE__ */
|
|
107
|
+
children: v("members.list.column.role", "Role")
|
|
108
|
+
}), /* @__PURE__ */ p("div", {
|
|
107
109
|
className: "mt-1",
|
|
108
|
-
children: /* @__PURE__ */
|
|
110
|
+
children: /* @__PURE__ */ p(a, { role: D.role })
|
|
109
111
|
})] }),
|
|
110
|
-
|
|
112
|
+
D.invitedBy && /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
|
|
111
113
|
className: "text-sm text-[var(--color-text-secondary)]",
|
|
112
|
-
children:
|
|
113
|
-
}), /* @__PURE__ */
|
|
114
|
+
children: v("members.detail.invitedBy", "Invited By")
|
|
115
|
+
}), /* @__PURE__ */ p("p", {
|
|
114
116
|
className: "text-[var(--color-text-primary)] font-medium",
|
|
115
|
-
children:
|
|
117
|
+
children: D.invitedBy
|
|
116
118
|
})] }),
|
|
117
|
-
|
|
119
|
+
D.joinedAt && /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
|
|
118
120
|
className: "text-sm text-[var(--color-text-secondary)]",
|
|
119
|
-
children:
|
|
120
|
-
}), /* @__PURE__ */
|
|
121
|
+
children: v("members.detail.joinedAt", "Joined At")
|
|
122
|
+
}), /* @__PURE__ */ p("p", {
|
|
121
123
|
className: "text-[var(--color-text-primary)] font-medium",
|
|
122
|
-
children: new Date(
|
|
124
|
+
children: new Date(D.joinedAt).toLocaleString()
|
|
123
125
|
})] })
|
|
124
126
|
]
|
|
125
127
|
})]
|
|
126
128
|
})]
|
|
127
|
-
}) : /* @__PURE__ */
|
|
129
|
+
}) : /* @__PURE__ */ p("div", {
|
|
128
130
|
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
129
|
-
children: /* @__PURE__ */
|
|
131
|
+
children: /* @__PURE__ */ p("div", {
|
|
130
132
|
className: "p-8 text-center text-[var(--color-text-secondary)]",
|
|
131
|
-
children:
|
|
133
|
+
children: v("members.detail.noPermission", "You don't have permission to view member details.")
|
|
132
134
|
})
|
|
133
135
|
});
|
|
134
136
|
}
|
|
135
137
|
//#endregion
|
|
136
|
-
export {
|
|
138
|
+
export { v as MemberDetailPage };
|
|
137
139
|
|
|
138
140
|
//# sourceMappingURL=MemberDetailPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemberDetailPage.js","names":[],"sources":["../../../../../src/organization-management/modules/members/pages/MemberDetailPage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { ArrowLeft, Shield } from 'lucide-react';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { buildActorFallback, useActorProfiles, type ActorInput } from '@burdenoff/fe-libs/shared';\nimport { useOrgConsole } from '../../../providers/OrgConsoleProvider';\nimport { useMember } from '../hooks/useMembers';\nimport { MemberRoleBadge } from '../components/MemberRoleBadge';\nimport { LoadingState } from '../../../shared/components/feedback/LoadingState';\nimport { ErrorState } from '../../../shared/components/feedback/ErrorState';\nimport { PERMISSIONS } from '../../../constants/permissions';\nimport { useTr } from '../../../shared/hooks/useTr';\n\n/**\n * Member Detail Page\n * Simplified version showing available member fields\n */\nexport function MemberDetailPage() {\n const tr = useTr();\n const { organizationId, userId } = useParams<{ organizationId: string; userId: string }>();\n const { navigate, basePath = '/organizations', apiGatewayUrl, authToken } = useOrgConsole();\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const { member, loading, error } = useMember(organizationId!, userId!);\n\n const memberActors = useMemo<ActorInput[]>(\n () => (userId ? [{ actorId: userId, actorType: 'user' }] : []),\n [userId]\n );\n const profileMap = useActorProfiles(memberActors, {\n apiGatewayUrl,\n authToken,\n orgId: organizationId,\n });\n const memberProfile =\n userId && member\n ? (profileMap[member.userId] ??\n buildActorFallback({ actorId: member.userId, actorType: 'user' }))\n : null;\n\n if (permissionsLoading) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] p-6\">\n <LoadingState message={tr('common.loadingPermissions', 'Loading permissions...')} />\n </div>\n );\n }\n\n if (!hasPermission(PERMISSIONS.MEMBER_READ)) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] p-6\">\n <div className=\"p-8 text-center text-[var(--color-text-secondary)]\">\n {tr('members.detail.noPermission', \"You don't have permission to view member details.\")}\n </div>\n </div>\n );\n }\n\n if (loading) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6\">\n <LoadingState message={tr('members.detail.loading', 'Loading member...')} />\n </div>\n );\n }\n\n if (error || !member) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6\">\n <ErrorState\n message={error?.message || tr('members.detail.notFound', 'Member not found')}\n action={{\n label: tr('common.goBack', 'Go Back'),\n onClick: () => navigate(`${basePath}/${organizationId}/members`),\n }}\n />\n </div>\n );\n }\n\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-200\">\n {/* Header */}\n <div className=\"mb-6\">\n <button\n type=\"button\"\n onClick={() => navigate(`${basePath}/${organizationId}/members`)}\n className=\"inline-flex items-center gap-2 text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)] transition-all duration-200 mb-4\"\n >\n <ArrowLeft size={20} />\n {tr('members.detail.backToMembers', 'Back to Members')}\n </button>\n\n <
|
|
1
|
+
{"version":3,"file":"MemberDetailPage.js","names":[],"sources":["../../../../../src/organization-management/modules/members/pages/MemberDetailPage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { ArrowLeft, Shield } from 'lucide-react';\nimport { EmphasisPanel, GlassCard } from '@burdenoff/fe-libs/ui';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { buildActorFallback, useActorProfiles, type ActorInput } from '@burdenoff/fe-libs/shared';\nimport { useOrgConsole } from '../../../providers/OrgConsoleProvider';\nimport { useMember } from '../hooks/useMembers';\nimport { MemberRoleBadge } from '../components/MemberRoleBadge';\nimport { LoadingState } from '../../../shared/components/feedback/LoadingState';\nimport { ErrorState } from '../../../shared/components/feedback/ErrorState';\nimport { PERMISSIONS } from '../../../constants/permissions';\nimport { useTr } from '../../../shared/hooks/useTr';\n\n/**\n * Member Detail Page\n * Simplified version showing available member fields\n */\nexport function MemberDetailPage() {\n const tr = useTr();\n const { organizationId, userId } = useParams<{ organizationId: string; userId: string }>();\n const { navigate, basePath = '/organizations', apiGatewayUrl, authToken } = useOrgConsole();\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const { member, loading, error } = useMember(organizationId!, userId!);\n\n const memberActors = useMemo<ActorInput[]>(\n () => (userId ? [{ actorId: userId, actorType: 'user' }] : []),\n [userId]\n );\n const profileMap = useActorProfiles(memberActors, {\n apiGatewayUrl,\n authToken,\n orgId: organizationId,\n });\n const memberProfile =\n userId && member\n ? (profileMap[member.userId] ??\n buildActorFallback({ actorId: member.userId, actorType: 'user' }))\n : null;\n\n if (permissionsLoading) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] p-6\">\n <LoadingState message={tr('common.loadingPermissions', 'Loading permissions...')} />\n </div>\n );\n }\n\n if (!hasPermission(PERMISSIONS.MEMBER_READ)) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] p-6\">\n <div className=\"p-8 text-center text-[var(--color-text-secondary)]\">\n {tr('members.detail.noPermission', \"You don't have permission to view member details.\")}\n </div>\n </div>\n );\n }\n\n if (loading) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6\">\n <LoadingState message={tr('members.detail.loading', 'Loading member...')} />\n </div>\n );\n }\n\n if (error || !member) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6\">\n <ErrorState\n message={error?.message || tr('members.detail.notFound', 'Member not found')}\n action={{\n label: tr('common.goBack', 'Go Back'),\n onClick: () => navigate(`${basePath}/${organizationId}/members`),\n }}\n />\n </div>\n );\n }\n\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-200\">\n {/* Header */}\n <div className=\"mb-6\">\n <button\n type=\"button\"\n onClick={() => navigate(`${basePath}/${organizationId}/members`)}\n className=\"inline-flex items-center gap-2 text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)] transition-all duration-200 mb-4\"\n >\n <ArrowLeft size={20} />\n {tr('members.detail.backToMembers', 'Back to Members')}\n </button>\n\n <EmphasisPanel className=\"flex items-start gap-4\">\n <div className=\"size-16 rounded-full bg-[var(--color-status-info-muted)] flex items-center justify-center\">\n <Shield size={32} className=\"text-[var(--color-status-info)]\" />\n </div>\n <div>\n <h1 className=\"text-3xl font-bold text-[var(--color-text-primary)]\">\n {memberProfile?.displayName ?? tr('members.detail.titlePrefix', 'Member')}\n </h1>\n {memberProfile?.email ? (\n <p className=\"text-[var(--color-text-secondary)] mt-1 break-all\">\n {memberProfile.email}\n </p>\n ) : null}\n <p className=\"text-[var(--color-text-secondary)] mt-1\">{member.role}</p>\n <details className=\"mt-2 text-xs text-[var(--color-text-secondary)]\">\n <summary className=\"cursor-pointer\">\n {tr('members.detail.showIds', 'Show technical IDs')}\n </summary>\n <dl className=\"mt-1 grid grid-cols-[auto_1fr] gap-x-3 gap-y-1\">\n <dt>{tr('members.detail.userId', 'User ID')}</dt>\n <dd className=\"break-all font-mono\">{member.userId}</dd>\n <dt>{tr('members.list.memberId', 'Member ID')}</dt>\n <dd className=\"break-all font-mono\">{member.id}</dd>\n </dl>\n </details>\n </div>\n </EmphasisPanel>\n </div>\n\n {/* Details */}\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-6\">\n <h2 className=\"text-lg font-semibold text-[var(--color-text-primary)] mb-4\">\n {tr('members.detail.info', 'Member Information')}\n </h2>\n\n <div className=\"space-y-4\">\n <div>\n <p className=\"text-sm text-[var(--color-text-secondary)]\">\n {tr('members.list.column.role', 'Role')}\n </p>\n <div className=\"mt-1\">\n <MemberRoleBadge role={member.role} />\n </div>\n </div>\n\n {member.invitedBy && (\n <div>\n <p className=\"text-sm text-[var(--color-text-secondary)]\">\n {tr('members.detail.invitedBy', 'Invited By')}\n </p>\n <p className=\"text-[var(--color-text-primary)] font-medium\">{member.invitedBy}</p>\n </div>\n )}\n\n {member.joinedAt && (\n <div>\n <p className=\"text-sm text-[var(--color-text-secondary)]\">\n {tr('members.detail.joinedAt', 'Joined At')}\n </p>\n <p className=\"text-[var(--color-text-primary)] font-medium\">\n {new Date(member.joinedAt).toLocaleString()}\n </p>\n </div>\n )}\n </div>\n </GlassCard>\n </div>\n );\n}\n"],"mappings":"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"}
|