@burdenoff/microfe-organization 2026.510.110

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 (244) hide show
  1. package/README.md +64 -0
  2. package/dist/generated/global-operations.d.ts +1647 -0
  3. package/dist/generated/global-operations.d.ts.map +1 -0
  4. package/dist/generated/global-operations.js +724 -0
  5. package/dist/generated/global-operations.js.map +1 -0
  6. package/dist/generated/global-types.d.ts +20716 -0
  7. package/dist/generated/global-types.d.ts.map +1 -0
  8. package/dist/generated/global-types.js +8 -0
  9. package/dist/generated/global-types.js.map +1 -0
  10. package/dist/generated/wspace-operations.d.ts +2 -0
  11. package/dist/generated/wspace-operations.d.ts.map +1 -0
  12. package/dist/generated/wspace-types.d.ts +53363 -0
  13. package/dist/generated/wspace-types.d.ts.map +1 -0
  14. package/dist/index.d.ts +56 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +3 -0
  17. package/dist/node_modules/sonner/dist/index.js +163 -0
  18. package/dist/node_modules/sonner/dist/index.js.map +1 -0
  19. package/dist/node_modules/zod/v3/ZodError.js +82 -0
  20. package/dist/node_modules/zod/v3/ZodError.js.map +1 -0
  21. package/dist/node_modules/zod/v3/errors.js +10 -0
  22. package/dist/node_modules/zod/v3/errors.js.map +1 -0
  23. package/dist/node_modules/zod/v3/helpers/errorUtil.js +9 -0
  24. package/dist/node_modules/zod/v3/helpers/errorUtil.js.map +1 -0
  25. package/dist/node_modules/zod/v3/helpers/parseUtil.js +93 -0
  26. package/dist/node_modules/zod/v3/helpers/parseUtil.js.map +1 -0
  27. package/dist/node_modules/zod/v3/helpers/util.js +76 -0
  28. package/dist/node_modules/zod/v3/helpers/util.js.map +1 -0
  29. package/dist/node_modules/zod/v3/locales/en.js +62 -0
  30. package/dist/node_modules/zod/v3/locales/en.js.map +1 -0
  31. package/dist/node_modules/zod/v3/types.js +2441 -0
  32. package/dist/node_modules/zod/v3/types.js.map +1 -0
  33. package/dist/organization-management/AdminOrganizationRoot.d.ts +16 -0
  34. package/dist/organization-management/AdminOrganizationRoot.d.ts.map +1 -0
  35. package/dist/organization-management/AdminOrganizationRoot.js +76 -0
  36. package/dist/organization-management/AdminOrganizationRoot.js.map +1 -0
  37. package/dist/organization-management/AdminOrganizationRoutes.d.ts +16 -0
  38. package/dist/organization-management/AdminOrganizationRoutes.d.ts.map +1 -0
  39. package/dist/organization-management/AdminOrganizationRoutes.js +73 -0
  40. package/dist/organization-management/AdminOrganizationRoutes.js.map +1 -0
  41. package/dist/organization-management/UserOrganizationRoot.d.ts +17 -0
  42. package/dist/organization-management/UserOrganizationRoot.d.ts.map +1 -0
  43. package/dist/organization-management/UserOrganizationRoot.js +45 -0
  44. package/dist/organization-management/UserOrganizationRoot.js.map +1 -0
  45. package/dist/organization-management/UserOrganizationRoutes.d.ts +12 -0
  46. package/dist/organization-management/UserOrganizationRoutes.d.ts.map +1 -0
  47. package/dist/organization-management/UserOrganizationRoutes.js +30 -0
  48. package/dist/organization-management/UserOrganizationRoutes.js.map +1 -0
  49. package/dist/organization-management/constants/permissions.d.ts +30 -0
  50. package/dist/organization-management/constants/permissions.d.ts.map +1 -0
  51. package/dist/organization-management/constants/permissions.js +22 -0
  52. package/dist/organization-management/constants/permissions.js.map +1 -0
  53. package/dist/organization-management/hooks/useOrganizationEventEmitter.d.ts +19 -0
  54. package/dist/organization-management/hooks/useOrganizationEventEmitter.d.ts.map +1 -0
  55. package/dist/organization-management/hooks/useOrganizationEventEmitter.js +15 -0
  56. package/dist/organization-management/hooks/useOrganizationEventEmitter.js.map +1 -0
  57. package/dist/organization-management/hooks/useOrganizationPageView.d.ts +11 -0
  58. package/dist/organization-management/hooks/useOrganizationPageView.d.ts.map +1 -0
  59. package/dist/organization-management/hooks/useOrganizationPageView.js +24 -0
  60. package/dist/organization-management/hooks/useOrganizationPageView.js.map +1 -0
  61. package/dist/organization-management/modules/members/components/InviteMemberForm.d.ts +18 -0
  62. package/dist/organization-management/modules/members/components/InviteMemberForm.d.ts.map +1 -0
  63. package/dist/organization-management/modules/members/components/InviteMemberForm.js +119 -0
  64. package/dist/organization-management/modules/members/components/InviteMemberForm.js.map +1 -0
  65. package/dist/organization-management/modules/members/components/InviteStatusBadge.d.ts +6 -0
  66. package/dist/organization-management/modules/members/components/InviteStatusBadge.d.ts.map +1 -0
  67. package/dist/organization-management/modules/members/components/InviteStatusBadge.js +51 -0
  68. package/dist/organization-management/modules/members/components/InviteStatusBadge.js.map +1 -0
  69. package/dist/organization-management/modules/members/components/MemberRoleBadge.d.ts +11 -0
  70. package/dist/organization-management/modules/members/components/MemberRoleBadge.d.ts.map +1 -0
  71. package/dist/organization-management/modules/members/components/MemberRoleBadge.js +56 -0
  72. package/dist/organization-management/modules/members/components/MemberRoleBadge.js.map +1 -0
  73. package/dist/organization-management/modules/members/components/MyInviteCard.d.ts +22 -0
  74. package/dist/organization-management/modules/members/components/MyInviteCard.d.ts.map +1 -0
  75. package/dist/organization-management/modules/members/components/MyInviteCard.js +70 -0
  76. package/dist/organization-management/modules/members/components/MyInviteCard.js.map +1 -0
  77. package/dist/organization-management/modules/members/components/PendingInvitesList.d.ts +6 -0
  78. package/dist/organization-management/modules/members/components/PendingInvitesList.d.ts.map +1 -0
  79. package/dist/organization-management/modules/members/components/PendingInvitesList.js +141 -0
  80. package/dist/organization-management/modules/members/components/PendingInvitesList.js.map +1 -0
  81. package/dist/organization-management/modules/members/hooks/useInvites.d.ts +75 -0
  82. package/dist/organization-management/modules/members/hooks/useInvites.d.ts.map +1 -0
  83. package/dist/organization-management/modules/members/hooks/useInvites.js +253 -0
  84. package/dist/organization-management/modules/members/hooks/useInvites.js.map +1 -0
  85. package/dist/organization-management/modules/members/hooks/useMembers.d.ts +84 -0
  86. package/dist/organization-management/modules/members/hooks/useMembers.d.ts.map +1 -0
  87. package/dist/organization-management/modules/members/hooks/useMembers.js +95 -0
  88. package/dist/organization-management/modules/members/hooks/useMembers.js.map +1 -0
  89. package/dist/organization-management/modules/members/pages/InviteMemberPage.d.ts +6 -0
  90. package/dist/organization-management/modules/members/pages/InviteMemberPage.d.ts.map +1 -0
  91. package/dist/organization-management/modules/members/pages/InviteMemberPage.js +91 -0
  92. package/dist/organization-management/modules/members/pages/InviteMemberPage.js.map +1 -0
  93. package/dist/organization-management/modules/members/pages/MemberDetailPage.d.ts +6 -0
  94. package/dist/organization-management/modules/members/pages/MemberDetailPage.d.ts.map +1 -0
  95. package/dist/organization-management/modules/members/pages/MemberDetailPage.js +115 -0
  96. package/dist/organization-management/modules/members/pages/MemberDetailPage.js.map +1 -0
  97. package/dist/organization-management/modules/members/pages/MembersListPage.d.ts +2 -0
  98. package/dist/organization-management/modules/members/pages/MembersListPage.d.ts.map +1 -0
  99. package/dist/organization-management/modules/members/pages/MembersListPage.js +424 -0
  100. package/dist/organization-management/modules/members/pages/MembersListPage.js.map +1 -0
  101. package/dist/organization-management/modules/members/pages/MyInvitesPage.d.ts +6 -0
  102. package/dist/organization-management/modules/members/pages/MyInvitesPage.d.ts.map +1 -0
  103. package/dist/organization-management/modules/members/pages/MyInvitesPage.js +114 -0
  104. package/dist/organization-management/modules/members/pages/MyInvitesPage.js.map +1 -0
  105. package/dist/organization-management/modules/members/types/index.d.ts +35 -0
  106. package/dist/organization-management/modules/members/types/index.d.ts.map +1 -0
  107. package/dist/organization-management/modules/organizations/components/OrganizationForm.d.ts +13 -0
  108. package/dist/organization-management/modules/organizations/components/OrganizationForm.d.ts.map +1 -0
  109. package/dist/organization-management/modules/organizations/components/OrganizationForm.js +325 -0
  110. package/dist/organization-management/modules/organizations/components/OrganizationForm.js.map +1 -0
  111. package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.d.ts +13 -0
  112. package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.d.ts.map +1 -0
  113. package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.js +49 -0
  114. package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.js.map +1 -0
  115. package/dist/organization-management/modules/organizations/hooks/useOrganizations.d.ts +86 -0
  116. package/dist/organization-management/modules/organizations/hooks/useOrganizations.d.ts.map +1 -0
  117. package/dist/organization-management/modules/organizations/hooks/useOrganizations.js +164 -0
  118. package/dist/organization-management/modules/organizations/hooks/useOrganizations.js.map +1 -0
  119. package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.d.ts +6 -0
  120. package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.d.ts.map +1 -0
  121. package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js +76 -0
  122. package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js.map +1 -0
  123. package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.d.ts +2 -0
  124. package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.d.ts.map +1 -0
  125. package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js +306 -0
  126. package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js.map +1 -0
  127. package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.d.ts +6 -0
  128. package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.d.ts.map +1 -0
  129. package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js +93 -0
  130. package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js.map +1 -0
  131. package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.d.ts +2 -0
  132. package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.d.ts.map +1 -0
  133. package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js +448 -0
  134. package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js.map +1 -0
  135. package/dist/organization-management/modules/organizations/schemas/index.d.ts +53 -0
  136. package/dist/organization-management/modules/organizations/schemas/index.d.ts.map +1 -0
  137. package/dist/organization-management/modules/organizations/schemas/index.js +25 -0
  138. package/dist/organization-management/modules/organizations/schemas/index.js.map +1 -0
  139. package/dist/organization-management/modules/organizations/types/index.d.ts +34 -0
  140. package/dist/organization-management/modules/organizations/types/index.d.ts.map +1 -0
  141. package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.d.ts +13 -0
  142. package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.d.ts.map +1 -0
  143. package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.js +147 -0
  144. package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.js.map +1 -0
  145. package/dist/organization-management/modules/workspaces/components/WorkspaceCard.d.ts +16 -0
  146. package/dist/organization-management/modules/workspaces/components/WorkspaceCard.d.ts.map +1 -0
  147. package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js +107 -0
  148. package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js.map +1 -0
  149. package/dist/organization-management/modules/workspaces/components/WorkspaceForm.d.ts +16 -0
  150. package/dist/organization-management/modules/workspaces/components/WorkspaceForm.d.ts.map +1 -0
  151. package/dist/organization-management/modules/workspaces/components/WorkspaceForm.js +386 -0
  152. package/dist/organization-management/modules/workspaces/components/WorkspaceForm.js.map +1 -0
  153. package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.d.ts +13 -0
  154. package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.d.ts.map +1 -0
  155. package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.js +49 -0
  156. package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.js.map +1 -0
  157. package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.d.ts +47 -0
  158. package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.d.ts.map +1 -0
  159. package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.js +46 -0
  160. package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.js.map +1 -0
  161. package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.d.ts +133 -0
  162. package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.d.ts.map +1 -0
  163. package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.js +111 -0
  164. package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.js.map +1 -0
  165. package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.d.ts +2 -0
  166. package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.d.ts.map +1 -0
  167. package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js +82 -0
  168. package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js.map +1 -0
  169. package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.d.ts +2 -0
  170. package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.d.ts.map +1 -0
  171. package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js +438 -0
  172. package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js.map +1 -0
  173. package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.d.ts +2 -0
  174. package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.d.ts.map +1 -0
  175. package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js +90 -0
  176. package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js.map +1 -0
  177. package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.d.ts +2 -0
  178. package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.d.ts.map +1 -0
  179. package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js +465 -0
  180. package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js.map +1 -0
  181. package/dist/organization-management/modules/workspaces/schemas/index.d.ts +44 -0
  182. package/dist/organization-management/modules/workspaces/schemas/index.d.ts.map +1 -0
  183. package/dist/organization-management/modules/workspaces/schemas/index.js +22 -0
  184. package/dist/organization-management/modules/workspaces/schemas/index.js.map +1 -0
  185. package/dist/organization-management/modules/workspaces/types/index.d.ts +39 -0
  186. package/dist/organization-management/modules/workspaces/types/index.d.ts.map +1 -0
  187. package/dist/organization-management/modules/workspaces/types/workspace-member.d.ts +48 -0
  188. package/dist/organization-management/modules/workspaces/types/workspace-member.d.ts.map +1 -0
  189. package/dist/organization-management/providers/OrgConsoleProvider.d.ts +19 -0
  190. package/dist/organization-management/providers/OrgConsoleProvider.d.ts.map +1 -0
  191. package/dist/organization-management/providers/OrgConsoleProvider.js +24 -0
  192. package/dist/organization-management/providers/OrgConsoleProvider.js.map +1 -0
  193. package/dist/organization-management/shared/components/dialog/ConfirmDialog.d.ts +28 -0
  194. package/dist/organization-management/shared/components/dialog/ConfirmDialog.d.ts.map +1 -0
  195. package/dist/organization-management/shared/components/dialog/ConfirmDialog.js +105 -0
  196. package/dist/organization-management/shared/components/dialog/ConfirmDialog.js.map +1 -0
  197. package/dist/organization-management/shared/components/feedback/EmptyState.d.ts +14 -0
  198. package/dist/organization-management/shared/components/feedback/EmptyState.d.ts.map +1 -0
  199. package/dist/organization-management/shared/components/feedback/EmptyState.js +30 -0
  200. package/dist/organization-management/shared/components/feedback/EmptyState.js.map +1 -0
  201. package/dist/organization-management/shared/components/feedback/ErrorState.d.ts +11 -0
  202. package/dist/organization-management/shared/components/feedback/ErrorState.d.ts.map +1 -0
  203. package/dist/organization-management/shared/components/feedback/ErrorState.js +37 -0
  204. package/dist/organization-management/shared/components/feedback/ErrorState.js.map +1 -0
  205. package/dist/organization-management/shared/components/feedback/LoadingState.d.ts +6 -0
  206. package/dist/organization-management/shared/components/feedback/LoadingState.d.ts.map +1 -0
  207. package/dist/organization-management/shared/components/feedback/LoadingState.js +24 -0
  208. package/dist/organization-management/shared/components/feedback/LoadingState.js.map +1 -0
  209. package/dist/organization-management/shared/components/input/SearchInput.d.ts +15 -0
  210. package/dist/organization-management/shared/components/input/SearchInput.d.ts.map +1 -0
  211. package/dist/organization-management/shared/components/input/SearchInput.js +40 -0
  212. package/dist/organization-management/shared/components/input/SearchInput.js.map +1 -0
  213. package/dist/organization-management/shared/components/input/SelectionCheckbox.d.ts +10 -0
  214. package/dist/organization-management/shared/components/input/SelectionCheckbox.d.ts.map +1 -0
  215. package/dist/organization-management/shared/components/input/SelectionCheckbox.js +21 -0
  216. package/dist/organization-management/shared/components/input/SelectionCheckbox.js.map +1 -0
  217. package/dist/organization-management/shared/hooks/useDebouncedValue.d.ts +2 -0
  218. package/dist/organization-management/shared/hooks/useDebouncedValue.d.ts.map +1 -0
  219. package/dist/organization-management/shared/hooks/useDebouncedValue.js +17 -0
  220. package/dist/organization-management/shared/hooks/useDebouncedValue.js.map +1 -0
  221. package/dist/organization-management/shared/hooks/useTr.d.ts +14 -0
  222. package/dist/organization-management/shared/hooks/useTr.d.ts.map +1 -0
  223. package/dist/organization-management/shared/hooks/useTr.js +14 -0
  224. package/dist/organization-management/shared/hooks/useTr.js.map +1 -0
  225. package/dist/organization-management/shared/logger.d.ts +11 -0
  226. package/dist/organization-management/shared/logger.d.ts.map +1 -0
  227. package/dist/organization-management/shared/logger.js +46 -0
  228. package/dist/organization-management/shared/logger.js.map +1 -0
  229. package/dist/organization-management/shared/recaptcha.d.ts +2 -0
  230. package/dist/organization-management/shared/recaptcha.d.ts.map +1 -0
  231. package/dist/organization-management/shared/recaptcha.js +6 -0
  232. package/dist/organization-management/shared/recaptcha.js.map +1 -0
  233. package/dist/organization-management/shared/types/graphql.d.ts +131 -0
  234. package/dist/organization-management/shared/types/graphql.d.ts.map +1 -0
  235. package/dist/organization-management/shared/types/graphql.js +10 -0
  236. package/dist/organization-management/shared/types/graphql.js.map +1 -0
  237. package/dist/organization-management/shared/utils/cn.d.ts +8 -0
  238. package/dist/organization-management/shared/utils/cn.d.ts.map +1 -0
  239. package/dist/organization-management/types/index.d.ts +46 -0
  240. package/dist/organization-management/types/index.d.ts.map +1 -0
  241. package/dist/utils/nativeBridge.d.ts +3 -0
  242. package/dist/utils/nativeBridge.d.ts.map +1 -0
  243. package/dist/utils/nativeBridge.js +2 -0
  244. package/package.json +116 -0
@@ -0,0 +1,115 @@
1
+ import { useOrgConsole as e } from "../../../providers/OrgConsoleProvider.js";
2
+ import { useTr as t } from "../../../shared/hooks/useTr.js";
3
+ import { LoadingState as n } from "../../../shared/components/feedback/LoadingState.js";
4
+ import { ErrorState as r } from "../../../shared/components/feedback/ErrorState.js";
5
+ import { PERMISSIONS as i } from "../../../constants/permissions.js";
6
+ import { MemberRoleBadge as a } from "../components/MemberRoleBadge.js";
7
+ import { useMember as o } from "../hooks/useMembers.js";
8
+ import { ArrowLeft as s, Shield as c } from "lucide-react";
9
+ import { usePermissions as l } from "@burdenoff/fe-libs/shared/providers/shell";
10
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
11
+ import { useParams as f } from "react-router-dom";
12
+ //#region src/organization-management/modules/members/pages/MemberDetailPage.tsx
13
+ function p() {
14
+ let p = t(), { organizationId: m, userId: h } = f(), { navigate: g, basePath: _ = "/organizations" } = e(), { hasPermission: v, isLoading: y } = l(), { member: b, loading: x, error: S } = o(m, h);
15
+ return y ? /* @__PURE__ */ u("div", {
16
+ className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
17
+ children: /* @__PURE__ */ u(n, { message: p("common.loadingPermissions", "Loading permissions...") })
18
+ }) : v(i.MEMBER_READ) ? x ? /* @__PURE__ */ u("div", {
19
+ className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
20
+ children: /* @__PURE__ */ u(n, { message: p("members.detail.loading", "Loading member...") })
21
+ }) : S || !b ? /* @__PURE__ */ u("div", {
22
+ className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
23
+ children: /* @__PURE__ */ u(r, {
24
+ message: S?.message || p("members.detail.notFound", "Member not found"),
25
+ action: {
26
+ label: p("common.goBack", "Go Back"),
27
+ onClick: () => g(`${_}/${m}/members`)
28
+ }
29
+ })
30
+ }) : /* @__PURE__ */ d("div", {
31
+ className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-300",
32
+ children: [/* @__PURE__ */ d("div", {
33
+ className: "mb-6",
34
+ children: [/* @__PURE__ */ d("button", {
35
+ onClick: () => g(`${_}/${m}/members`),
36
+ className: "inline-flex items-center gap-2 text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)] active:scale-[0.98] transition-all duration-200 mb-4",
37
+ children: [/* @__PURE__ */ u(s, { size: 20 }), p("members.detail.backToMembers", "Back to Members")]
38
+ }), /* @__PURE__ */ d("div", {
39
+ className: "flex items-start gap-4",
40
+ children: [/* @__PURE__ */ u("div", {
41
+ className: "w-16 h-16 rounded-full bg-[var(--color-status-info-muted)] flex items-center justify-center",
42
+ children: /* @__PURE__ */ u(c, {
43
+ size: 32,
44
+ className: "text-[var(--color-status-info)]"
45
+ })
46
+ }), /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("h1", {
47
+ className: "text-3xl font-bold text-[var(--color-text-primary)]",
48
+ children: b.userId
49
+ }), /* @__PURE__ */ d("p", {
50
+ className: "text-[var(--color-text-secondary)] mt-1",
51
+ children: [
52
+ p("members.list.memberId", "Member ID"),
53
+ ": ",
54
+ b.id
55
+ ]
56
+ })] })]
57
+ })]
58
+ }), /* @__PURE__ */ d("div", {
59
+ className: "bg-[var(--color-bg-surface)] border border-[var(--color-border-default)] rounded-lg p-6",
60
+ children: [/* @__PURE__ */ u("h2", {
61
+ className: "text-lg font-semibold text-[var(--color-text-primary)] mb-4",
62
+ children: p("members.detail.info", "Member Information")
63
+ }), /* @__PURE__ */ d("div", {
64
+ className: "space-y-4",
65
+ children: [
66
+ /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
67
+ className: "text-sm text-[var(--color-text-secondary)]",
68
+ children: p("members.detail.userId", "User ID")
69
+ }), /* @__PURE__ */ u("p", {
70
+ className: "text-[var(--color-text-primary)] font-medium",
71
+ children: b.userId
72
+ })] }),
73
+ /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
74
+ className: "text-sm text-[var(--color-text-secondary)]",
75
+ children: p("members.detail.orgId", "Organization ID")
76
+ }), /* @__PURE__ */ u("p", {
77
+ className: "text-[var(--color-text-primary)] font-medium",
78
+ children: b.organizationId
79
+ })] }),
80
+ /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
81
+ className: "text-sm text-[var(--color-text-secondary)]",
82
+ children: p("members.list.column.role", "Role")
83
+ }), /* @__PURE__ */ u("div", {
84
+ className: "mt-1",
85
+ children: /* @__PURE__ */ u(a, { role: b.role })
86
+ })] }),
87
+ b.invitedBy && /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
88
+ className: "text-sm text-[var(--color-text-secondary)]",
89
+ children: p("members.detail.invitedBy", "Invited By")
90
+ }), /* @__PURE__ */ u("p", {
91
+ className: "text-[var(--color-text-primary)] font-medium",
92
+ children: b.invitedBy
93
+ })] }),
94
+ b.joinedAt && /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
95
+ className: "text-sm text-[var(--color-text-secondary)]",
96
+ children: p("members.detail.joinedAt", "Joined At")
97
+ }), /* @__PURE__ */ u("p", {
98
+ className: "text-[var(--color-text-primary)] font-medium",
99
+ children: new Date(b.joinedAt).toLocaleString()
100
+ })] })
101
+ ]
102
+ })]
103
+ })]
104
+ }) : /* @__PURE__ */ u("div", {
105
+ className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
106
+ children: /* @__PURE__ */ u("div", {
107
+ className: "p-8 text-center text-[var(--color-text-secondary)]",
108
+ children: p("members.detail.noPermission", "You don't have permission to view member details.")
109
+ })
110
+ });
111
+ }
112
+ //#endregion
113
+ export { p as MemberDetailPage };
114
+
115
+ //# sourceMappingURL=MemberDetailPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemberDetailPage.js","names":[],"sources":["../../../../../src/organization-management/modules/members/pages/MemberDetailPage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport { ArrowLeft, Shield } from 'lucide-react';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\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' } = useOrgConsole();\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const { member, loading, error } = useMember(organizationId!, userId!);\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-300\">\n {/* Header */}\n <div className=\"mb-6\">\n <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)] active:scale-[0.98] transition-all duration-200 mb-4\"\n >\n <ArrowLeft size={20} />\n {tr('members.detail.backToMembers', 'Back to Members')}\n </button>\n\n <div className=\"flex items-start gap-4\">\n <div className=\"w-16 h-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)]\">{member.userId}</h1>\n <p className=\"text-[var(--color-text-secondary)] mt-1\">\n {tr('members.list.memberId', 'Member ID')}: {member.id}\n </p>\n </div>\n </div>\n </div>\n\n {/* Details */}\n <div className=\"bg-[var(--color-bg-surface)] border border-[var(--color-border-default)] rounded-lg 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.detail.userId', 'User ID')}\n </p>\n <p className=\"text-[var(--color-text-primary)] font-medium\">{member.userId}</p>\n </div>\n\n <div>\n <p className=\"text-sm text-[var(--color-text-secondary)]\">\n {tr('members.detail.orgId', 'Organization ID')}\n </p>\n <p className=\"text-[var(--color-text-primary)] font-medium\">{member.organizationId}</p>\n </div>\n\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 </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAeA,SAAgB,IAAmB;CACjC,IAAM,IAAK,GAAO,EACZ,EAAE,mBAAgB,cAAW,GAAuD,EACpF,EAAE,aAAU,cAAW,qBAAqB,GAAe,EAC3D,EAAE,kBAAe,WAAW,MAAuB,GAAgB,EACnE,EAAE,WAAQ,YAAS,aAAU,EAAU,GAAiB,EAAQ;AA0CtE,QAxCI,IAEA,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD,EAAc,SAAS,EAAG,6BAA6B,yBAAyB,EAAI,CAAA;EAChF,CAAA,GAIL,EAAc,EAAY,YAAY,GAUvC,IAEA,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD,EAAc,SAAS,EAAG,0BAA0B,oBAAoB,EAAI,CAAA;EACxE,CAAA,GAIN,KAAS,CAAC,IAEV,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD;GACE,SAAS,GAAO,WAAW,EAAG,2BAA2B,mBAAmB;GAC5E,QAAQ;IACN,OAAO,EAAG,iBAAiB,UAAU;IACrC,eAAe,EAAS,GAAG,EAAS,GAAG,EAAe,UAAU;IACjE;GACD,CAAA;EACE,CAAA,GAKR,kBAAC,OAAD;EAAK,WAAU;YAAf,CAEE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,UAAD;IACE,eAAe,EAAS,GAAG,EAAS,GAAG,EAAe,UAAU;IAChE,WAAU;cAFZ,CAIE,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA,EACtB,EAAG,gCAAgC,kBAAkB,CAC/C;OAET,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,GAAD;MAAQ,MAAM;MAAI,WAAU;MAAoC,CAAA;KAC5D,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eAAuD,EAAO;KAAY,CAAA,EACxF,kBAAC,KAAD;KAAG,WAAU;eAAb;MACG,EAAG,yBAAyB,YAAY;MAAC;MAAG,EAAO;MAClD;OACA,EAAA,CAAA,CACF;MACF;MAGN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,MAAD;IAAI,WAAU;cACX,EAAG,uBAAuB,qBAAqB;IAC7C,CAAA,EAEL,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAG,yBAAyB,UAAU;MACrC,CAAA,EACJ,kBAAC,KAAD;MAAG,WAAU;gBAAgD,EAAO;MAAW,CAAA,CAC3E,EAAA,CAAA;KAEN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAG,wBAAwB,kBAAkB;MAC5C,CAAA,EACJ,kBAAC,KAAD;MAAG,WAAU;gBAAgD,EAAO;MAAmB,CAAA,CACnF,EAAA,CAAA;KAEN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAG,4BAA4B,OAAO;MACrC,CAAA,EACJ,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD,EAAiB,MAAM,EAAO,MAAQ,CAAA;MAClC,CAAA,CACF,EAAA,CAAA;KAEL,EAAO,aACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAG,4BAA4B,aAAa;MAC3C,CAAA,EACJ,kBAAC,KAAD;MAAG,WAAU;gBAAgD,EAAO;MAAc,CAAA,CAC9E,EAAA,CAAA;KAGP,EAAO,YACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAG,2BAA2B,YAAY;MACzC,CAAA,EACJ,kBAAC,KAAD;MAAG,WAAU;gBACV,IAAI,KAAK,EAAO,SAAS,CAAC,gBAAgB;MACzC,CAAA,CACA,EAAA,CAAA;KAEJ;MACF;KACF;MA1GJ,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAG,+BAA+B,oDAAoD;GACnF,CAAA;EACF,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function MembersListPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=MembersListPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MembersListPage.d.ts","sourceRoot":"","sources":["../../../../../src/organization-management/modules/members/pages/MembersListPage.tsx"],"names":[],"mappings":"AA2BA,wBAAgB,eAAe,4CAuf9B"}
@@ -0,0 +1,424 @@
1
+ import { useOrgConsole as e } from "../../../providers/OrgConsoleProvider.js";
2
+ import { toast as t } from "../../../../node_modules/sonner/dist/index.js";
3
+ import { useTr as n } from "../../../shared/hooks/useTr.js";
4
+ import { SearchInput as r } from "../../../shared/components/input/SearchInput.js";
5
+ import { SelectionCheckbox as i } from "../../../shared/components/input/SelectionCheckbox.js";
6
+ import { LoadingState as a } from "../../../shared/components/feedback/LoadingState.js";
7
+ import { ErrorState as o } from "../../../shared/components/feedback/ErrorState.js";
8
+ import { EmptyState as s } from "../../../shared/components/feedback/EmptyState.js";
9
+ import { useDebouncedValue as c } from "../../../shared/hooks/useDebouncedValue.js";
10
+ import { useConfirmDialog as ee } from "../../../shared/components/dialog/ConfirmDialog.js";
11
+ import { PERMISSIONS as l } from "../../../constants/permissions.js";
12
+ import { MemberRoleBadge as u } from "../components/MemberRoleBadge.js";
13
+ import { useMembers as d, useRemoveMember as f } from "../hooks/useMembers.js";
14
+ import { useEffect as te, useMemo as p, useState as m } from "react";
15
+ import { Eye as h, Mail as g, RefreshCw as _, Shield as v, Trash2 as y } from "lucide-react";
16
+ import { useFeatureFlagDetails as b } from "@burdenoff/fe-libs/shared/feature-flags";
17
+ import { usePermissions as ne } from "@burdenoff/fe-libs/shared/providers/shell";
18
+ import { Fragment as re, jsx as x, jsxs as S } from "react/jsx-runtime";
19
+ import { useParams as C } from "react-router-dom";
20
+ //#region src/organization-management/modules/members/pages/MembersListPage.tsx
21
+ function w() {
22
+ let e = n();
23
+ return (t) => t ? new Date(t).toLocaleDateString() : e("common.status.pending", "Pending");
24
+ }
25
+ function T() {
26
+ let T = n(), E = w(), { navigate: D, basePath: O = "/organizations" } = e(), { hasPermission: k, isLoading: A } = ne(), j = b("organization.invite"), M = j ? !!j.value : !0, { organizationId: N } = C(), [P, ie] = m(""), F = c(P, 250), [I, L] = m(/* @__PURE__ */ new Set()), { openConfirmDialog: R, ConfirmDialog: z } = ee(), { members: B, loading: V, error: H, refetch: U } = d(N ?? "", 50, 0), { removeMember: W, loading: G } = f(), K = p(() => {
27
+ if (!F) return B;
28
+ let e = F.toLowerCase();
29
+ return B.filter((t) => t.userId.toLowerCase().includes(e) || t.role.toLowerCase().includes(e));
30
+ }, [F, B]);
31
+ te(() => {
32
+ L((e) => {
33
+ let t = new Set(K.map((e) => e.id)), n = new Set([...e].filter((e) => t.has(e)));
34
+ return n.size === e.size ? e : n;
35
+ });
36
+ }, [K]);
37
+ let q = p(() => K.filter((e) => I.has(e.id)), [K, I]), J = K.length > 0 && K.every((e) => I.has(e.id)), Y = K.some((e) => I.has(e.id)) && !J, X = async (e) => {
38
+ if (N) try {
39
+ let n = (await Promise.allSettled(e.map(async (e) => {
40
+ let t = await W(N, e);
41
+ if (t.errors?.length) throw Error(t.errors[0]?.message ?? "Failed to remove member");
42
+ }))).find((e) => e.status === "rejected");
43
+ if (n?.status === "rejected") throw n.reason;
44
+ L(/* @__PURE__ */ new Set()), await U(), t.success(e.length === 1 ? T("members.remove.successSingle", "Member removed successfully") : `${e.length} ${T("members.remove.successMany", "members removed successfully")}`);
45
+ } catch (e) {
46
+ t.error(e instanceof Error ? e.message : T("members.remove.failed", "Failed to remove member"));
47
+ }
48
+ }, Z = (e) => {
49
+ R({
50
+ title: T("members.remove.title", "Remove member"),
51
+ description: `${T("members.remove.descriptionPrefix", "Remove")} ${e} ${T("members.remove.descriptionSuffix", "from this organization? Workspace access inherited from this membership will be impacted.")}`,
52
+ confirmText: T("members.remove.confirm", "Remove"),
53
+ variant: "danger",
54
+ onConfirm: () => {
55
+ X([e]);
56
+ }
57
+ });
58
+ }, ae = () => {
59
+ q.length !== 0 && R({
60
+ title: T("members.remove.bulkTitle", "Remove selected members"),
61
+ description: `${T("members.remove.bulkPrefix", "Remove")} ${q.length} ${T(q.length === 1 ? "members.remove.bulkSuffixSingle" : "members.remove.bulkSuffixMany", q.length === 1 ? "selected member from this organization?" : "selected members from this organization?")}`,
62
+ confirmText: `${T("members.remove.confirm", "Remove")} ${q.length}`,
63
+ variant: "danger",
64
+ onConfirm: () => {
65
+ X(q.map((e) => e.userId));
66
+ }
67
+ });
68
+ }, Q = (e, t) => {
69
+ L((n) => {
70
+ let r = new Set(n);
71
+ return t ? r.add(e) : r.delete(e), r;
72
+ });
73
+ }, $ = (e) => {
74
+ L((t) => {
75
+ let n = new Set(t);
76
+ return K.forEach((t) => {
77
+ e ? n.add(t.id) : n.delete(t.id);
78
+ }), n;
79
+ });
80
+ };
81
+ return N ? A ? /* @__PURE__ */ x("div", {
82
+ className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
83
+ children: /* @__PURE__ */ x(a, { message: T("common.loadingPermissions", "Loading permissions...") })
84
+ }) : k(l.MEMBER_LIST) ? V ? /* @__PURE__ */ x("div", {
85
+ className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
86
+ children: /* @__PURE__ */ x(a, { message: T("members.list.loading", "Loading members...") })
87
+ }) : H ? /* @__PURE__ */ x("div", {
88
+ className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
89
+ children: /* @__PURE__ */ x(o, {
90
+ message: H.message,
91
+ action: {
92
+ label: T("common.retry", "Retry"),
93
+ onClick: () => {
94
+ U();
95
+ }
96
+ }
97
+ })
98
+ }) : /* @__PURE__ */ S("div", {
99
+ className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-300",
100
+ children: [/* @__PURE__ */ S("div", {
101
+ className: "mx-auto flex w-full max-w-7xl flex-col gap-6",
102
+ children: [
103
+ /* @__PURE__ */ S("div", {
104
+ className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between",
105
+ children: [/* @__PURE__ */ S("div", {
106
+ className: "space-y-2",
107
+ children: [/* @__PURE__ */ x("h1", {
108
+ className: "text-3xl font-bold text-[var(--color-text-primary)]",
109
+ children: T("members.list.title", "Members")
110
+ }), /* @__PURE__ */ x("p", {
111
+ className: "max-w-2xl text-[var(--color-text-secondary)]",
112
+ children: T("members.list.subtitle", "Manage organization members, inspect their roles, and invite more people into this organization.")
113
+ })]
114
+ }), M && k(l.MEMBER_INVITE) && /* @__PURE__ */ S("button", {
115
+ onClick: () => D(`${O}/${N}/members/invite`),
116
+ 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 active:scale-[0.98]",
117
+ children: [/* @__PURE__ */ x(g, {
118
+ size: 18,
119
+ "aria-hidden": "true"
120
+ }), /* @__PURE__ */ x("span", {
121
+ className: "font-medium",
122
+ children: T("members.invite.button", "Invite Member")
123
+ })]
124
+ })]
125
+ }),
126
+ /* @__PURE__ */ S("div", {
127
+ className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] p-4 shadow-[var(--shadow-elevation-1)]",
128
+ children: [/* @__PURE__ */ S("div", {
129
+ className: "flex flex-col gap-3 sm:flex-row sm:items-center",
130
+ children: [/* @__PURE__ */ x(r, {
131
+ value: P,
132
+ onChange: ie,
133
+ placeholder: T("members.list.searchPlaceholder", "Search by member ID or role..."),
134
+ label: T("members.list.searchLabel", "Search organization members"),
135
+ inputId: "organization-members-search",
136
+ className: "flex-1"
137
+ }), /* @__PURE__ */ x("button", {
138
+ onClick: () => {
139
+ U();
140
+ },
141
+ className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] px-4 py-2 text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)] active:scale-95",
142
+ "aria-label": T("members.list.refresh", "Refresh members"),
143
+ title: T("members.list.refresh", "Refresh members"),
144
+ children: /* @__PURE__ */ x(_, {
145
+ size: 18,
146
+ "aria-hidden": "true"
147
+ })
148
+ })]
149
+ }), K.length > 0 ? /* @__PURE__ */ S("div", {
150
+ className: "mt-4 flex flex-col gap-3 rounded-lg border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-4 sm:flex-row sm:items-center sm:justify-between",
151
+ children: [/* @__PURE__ */ S("div", {
152
+ className: "flex flex-wrap items-center gap-3",
153
+ children: [/* @__PURE__ */ S("label", {
154
+ className: "flex items-center gap-2 text-sm text-[var(--color-text-primary)]",
155
+ children: [/* @__PURE__ */ x(i, {
156
+ checked: J,
157
+ indeterminate: Y,
158
+ onChange: $,
159
+ ariaLabel: T("members.list.selectAll", "Select all members")
160
+ }), /* @__PURE__ */ x("span", { children: T("common.selectAllVisible", "Select all visible") })]
161
+ }), I.size > 0 ? /* @__PURE__ */ x("button", {
162
+ onClick: () => L(/* @__PURE__ */ new Set()),
163
+ className: "text-sm text-[var(--color-text-secondary)] transition-colors hover:text-[var(--color-text-primary)]",
164
+ children: T("common.clearSelection", "Clear selection")
165
+ }) : null]
166
+ }), /* @__PURE__ */ S("div", {
167
+ className: "flex flex-col gap-2 sm:flex-row sm:items-center",
168
+ children: [/* @__PURE__ */ S("span", {
169
+ className: "text-sm text-[var(--color-text-secondary)]",
170
+ children: [
171
+ I.size,
172
+ " ",
173
+ T("common.selected", "selected")
174
+ ]
175
+ }), k(l.MEMBER_REMOVE) && /* @__PURE__ */ S("button", {
176
+ onClick: ae,
177
+ disabled: q.length === 0 || G,
178
+ className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border border-[var(--color-status-error-border)] px-3 py-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",
179
+ children: [
180
+ /* @__PURE__ */ x(y, {
181
+ size: 16,
182
+ "aria-hidden": "true"
183
+ }),
184
+ /* @__PURE__ */ x("span", { children: T("common.removeSelected", "Remove Selected") }),
185
+ q.length > 0 ? /* @__PURE__ */ S("span", { children: [
186
+ "(",
187
+ q.length,
188
+ ")"
189
+ ] }) : null
190
+ ]
191
+ })]
192
+ })]
193
+ }) : null]
194
+ }),
195
+ K.length === 0 ? /* @__PURE__ */ x("div", {
196
+ className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] p-6 shadow-[var(--shadow-elevation-1)]",
197
+ children: /* @__PURE__ */ x(s, {
198
+ icon: /* @__PURE__ */ x(v, {
199
+ size: 40,
200
+ "aria-hidden": "true"
201
+ }),
202
+ title: T("members.list.emptyTitle", "No members found"),
203
+ description: T("members.list.emptyDescription", "Invite someone to this organization to grant them access and assign their role."),
204
+ action: M && k(l.MEMBER_INVITE) ? {
205
+ label: T("members.invite.button", "Invite Member"),
206
+ onClick: () => D(`${O}/${N}/members/invite`)
207
+ } : void 0
208
+ })
209
+ }) : /* @__PURE__ */ S(re, { children: [/* @__PURE__ */ x("div", {
210
+ className: "grid gap-4 md:hidden",
211
+ children: K.map((e) => /* @__PURE__ */ S("article", {
212
+ className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] p-4 shadow-[var(--shadow-elevation-1)]",
213
+ children: [/* @__PURE__ */ S("div", {
214
+ className: "flex items-start gap-3",
215
+ children: [/* @__PURE__ */ x(i, {
216
+ checked: I.has(e.id),
217
+ onChange: (t) => Q(e.id, t),
218
+ ariaLabel: `${T("members.list.selectMember", "Select member")} ${e.userId}`
219
+ }), /* @__PURE__ */ S("div", {
220
+ className: "flex min-w-0 flex-1 gap-3",
221
+ children: [/* @__PURE__ */ x("div", {
222
+ className: "flex h-10 w-10 items-center justify-center rounded-full bg-[var(--color-status-info-bgSubtle)] text-[var(--color-status-info-text)]",
223
+ children: /* @__PURE__ */ x(v, {
224
+ size: 18,
225
+ "aria-hidden": "true"
226
+ })
227
+ }), /* @__PURE__ */ S("div", {
228
+ className: "min-w-0 flex-1 space-y-3",
229
+ children: [/* @__PURE__ */ S("div", { children: [/* @__PURE__ */ S("div", {
230
+ className: "flex flex-wrap items-start gap-2",
231
+ children: [/* @__PURE__ */ x("h2", {
232
+ className: "break-all text-base font-semibold text-[var(--color-text-primary)]",
233
+ children: e.userId
234
+ }), /* @__PURE__ */ x(u, { role: e.role })]
235
+ }), /* @__PURE__ */ S("p", {
236
+ className: "mt-1 break-all font-mono text-xs text-[var(--color-text-muted)]",
237
+ children: [
238
+ T("members.list.memberId", "Member ID"),
239
+ ": ",
240
+ e.id
241
+ ]
242
+ })] }), /* @__PURE__ */ S("dl", {
243
+ className: "grid grid-cols-1 gap-3 text-sm",
244
+ children: [/* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("dt", {
245
+ className: "text-[var(--color-text-secondary)]",
246
+ children: T("members.list.invitedBy", "Invited by")
247
+ }), /* @__PURE__ */ x("dd", {
248
+ className: "mt-1 break-all font-mono text-[var(--color-text-primary)]",
249
+ children: e.invitedBy || T("common.notAvailable", "N/A")
250
+ })] }), /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("dt", {
251
+ className: "text-[var(--color-text-secondary)]",
252
+ children: T("members.list.joined", "Joined")
253
+ }), /* @__PURE__ */ x("dd", {
254
+ className: "mt-1 text-[var(--color-text-primary)]",
255
+ children: E(e.joinedAt)
256
+ })] })]
257
+ })]
258
+ })]
259
+ })]
260
+ }), /* @__PURE__ */ S("div", {
261
+ className: "mt-4 flex flex-wrap gap-2 border-t border-[var(--color-border-default)] pt-4",
262
+ children: [/* @__PURE__ */ S("button", {
263
+ onClick: () => D(`${O}/${N}/members/${e.userId}`),
264
+ className: "inline-flex min-h-10 items-center gap-2 rounded-lg border border-[var(--color-border-default)] px-3 py-2 text-sm text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)]",
265
+ children: [/* @__PURE__ */ x(h, {
266
+ size: 16,
267
+ "aria-hidden": "true"
268
+ }), T("common.view", "View")]
269
+ }), k(l.MEMBER_REMOVE) && /* @__PURE__ */ S("button", {
270
+ onClick: () => Z(e.userId),
271
+ disabled: G,
272
+ 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",
273
+ children: [/* @__PURE__ */ x(y, {
274
+ size: 16,
275
+ "aria-hidden": "true"
276
+ }), T("members.remove.confirm", "Remove")]
277
+ })]
278
+ })]
279
+ }, e.id))
280
+ }), /* @__PURE__ */ x("div", {
281
+ className: "hidden overflow-hidden rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] shadow-[var(--shadow-elevation-1)] md:block",
282
+ children: /* @__PURE__ */ x("div", {
283
+ className: "overflow-x-auto",
284
+ children: /* @__PURE__ */ S("table", {
285
+ className: "min-w-full",
286
+ children: [/* @__PURE__ */ x("thead", {
287
+ className: "bg-[var(--color-bg-subtle)]",
288
+ children: /* @__PURE__ */ S("tr", { children: [
289
+ /* @__PURE__ */ x("th", {
290
+ className: "w-12 px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
291
+ children: /* @__PURE__ */ x(i, {
292
+ checked: J,
293
+ indeterminate: Y,
294
+ onChange: $,
295
+ ariaLabel: T("members.list.selectAll", "Select all members")
296
+ })
297
+ }),
298
+ /* @__PURE__ */ x("th", {
299
+ className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
300
+ children: T("members.list.column.user", "User")
301
+ }),
302
+ /* @__PURE__ */ x("th", {
303
+ className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
304
+ children: T("members.list.column.role", "Role")
305
+ }),
306
+ /* @__PURE__ */ x("th", {
307
+ className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
308
+ children: T("members.list.invitedBy", "Invited by")
309
+ }),
310
+ /* @__PURE__ */ x("th", {
311
+ className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
312
+ children: T("members.list.joined", "Joined")
313
+ }),
314
+ /* @__PURE__ */ x("th", {
315
+ className: "px-6 py-3 text-right text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
316
+ children: T("common.actions", "Actions")
317
+ })
318
+ ] })
319
+ }), /* @__PURE__ */ x("tbody", {
320
+ className: "divide-y divide-[var(--color-border-default)]",
321
+ children: K.map((e) => /* @__PURE__ */ S("tr", {
322
+ className: "transition-colors hover:bg-[var(--color-bg-subtle)]",
323
+ children: [
324
+ /* @__PURE__ */ x("td", {
325
+ className: "px-6 py-4 align-top",
326
+ children: /* @__PURE__ */ x(i, {
327
+ checked: I.has(e.id),
328
+ onChange: (t) => Q(e.id, t),
329
+ ariaLabel: `${T("members.list.selectMember", "Select member")} ${e.userId}`
330
+ })
331
+ }),
332
+ /* @__PURE__ */ x("td", {
333
+ className: "px-6 py-4",
334
+ children: /* @__PURE__ */ S("div", {
335
+ className: "flex items-start gap-3",
336
+ children: [/* @__PURE__ */ x("div", {
337
+ className: "flex h-10 w-10 items-center justify-center rounded-full bg-[var(--color-status-info-bgSubtle)] text-[var(--color-status-info-text)]",
338
+ children: /* @__PURE__ */ x(v, {
339
+ size: 18,
340
+ "aria-hidden": "true"
341
+ })
342
+ }), /* @__PURE__ */ S("div", {
343
+ className: "min-w-0",
344
+ children: [/* @__PURE__ */ x("p", {
345
+ className: "break-all font-medium text-[var(--color-text-primary)]",
346
+ children: e.userId
347
+ }), /* @__PURE__ */ S("p", {
348
+ className: "break-all font-mono text-xs text-[var(--color-text-muted)]",
349
+ children: [
350
+ T("common.idLabel", "ID"),
351
+ ": ",
352
+ e.id
353
+ ]
354
+ })]
355
+ })]
356
+ })
357
+ }),
358
+ /* @__PURE__ */ x("td", {
359
+ className: "px-6 py-4 align-top",
360
+ children: /* @__PURE__ */ x(u, { role: e.role })
361
+ }),
362
+ /* @__PURE__ */ x("td", {
363
+ className: "px-6 py-4 align-top text-sm text-[var(--color-text-secondary)]",
364
+ children: e.invitedBy || T("common.notAvailable", "N/A")
365
+ }),
366
+ /* @__PURE__ */ x("td", {
367
+ className: "px-6 py-4 align-top text-sm text-[var(--color-text-secondary)]",
368
+ children: E(e.joinedAt)
369
+ }),
370
+ /* @__PURE__ */ x("td", {
371
+ className: "px-6 py-4 align-top",
372
+ children: /* @__PURE__ */ S("div", {
373
+ className: "flex items-center justify-end gap-2",
374
+ children: [/* @__PURE__ */ x("button", {
375
+ onClick: () => D(`${O}/${N}/members/${e.userId}`),
376
+ className: "rounded-lg p-2 text-[var(--color-text-secondary)] transition-all duration-200 hover:bg-[var(--color-bg-muted)] hover:text-[var(--color-text-primary)]",
377
+ "aria-label": `${T("members.list.viewMember", "View member")} ${e.userId}`,
378
+ title: `${T("members.list.viewMember", "View member")} ${e.userId}`,
379
+ children: /* @__PURE__ */ x(h, {
380
+ size: 18,
381
+ "aria-hidden": "true"
382
+ })
383
+ }), k(l.MEMBER_REMOVE) && /* @__PURE__ */ x("button", {
384
+ onClick: () => Z(e.userId),
385
+ disabled: G,
386
+ 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",
387
+ "aria-label": `${T("members.list.removeMember", "Remove member")} ${e.userId}`,
388
+ title: `${T("members.list.removeMember", "Remove member")} ${e.userId}`,
389
+ children: /* @__PURE__ */ x(y, {
390
+ size: 18,
391
+ "aria-hidden": "true"
392
+ })
393
+ })]
394
+ })
395
+ })
396
+ ]
397
+ }, e.id))
398
+ })]
399
+ })
400
+ })
401
+ })] })
402
+ ]
403
+ }), z]
404
+ }) : /* @__PURE__ */ x("div", {
405
+ className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
406
+ children: /* @__PURE__ */ x("div", {
407
+ className: "p-8 text-center text-[var(--color-text-secondary)]",
408
+ children: T("members.list.noPermission", "You don't have permission to view members.")
409
+ })
410
+ }) : /* @__PURE__ */ x("div", {
411
+ className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
412
+ children: /* @__PURE__ */ x(o, {
413
+ message: T("members.list.missingOrg", "Organization ID is required to view members"),
414
+ action: {
415
+ label: T("members.list.goToOrganizations", "Go to Organizations"),
416
+ onClick: () => D(O)
417
+ }
418
+ })
419
+ });
420
+ }
421
+ //#endregion
422
+ export { T as MembersListPage };
423
+
424
+ //# sourceMappingURL=MembersListPage.js.map